import { driver } from "https://deno.land/x/neo4j_lite_client@4.4.6/mod.ts";
Construct a new Neo4j Driver. This is your main entry point for this library.
Configuration
This function optionally takes a configuration argument. Available configuration options are as follows:
{
// Encryption level: ENCRYPTION_ON or ENCRYPTION_OFF.
encrypted: ENCRYPTION_ON|ENCRYPTION_OFF
// Trust strategy to use if encryption is enabled. There is no mode to disable
// trust other than disabling encryption altogether. The reason for
// this is that if you don't know who you are talking to, it is easy for an
// attacker to hijack your encrypted connection, rendering encryption pointless.
//
// TRUST_SYSTEM_CA_SIGNED_CERTIFICATES is the default choice. For NodeJS environments, this
// means that you trust whatever certificates are in the default trusted certificate
// store of the underlying system. For Browser environments, the trusted certificate
// store is usually managed by the browser. Refer to your system or browser documentation
// if you want to explicitly add a certificate as trusted.
//
// TRUST_CUSTOM_CA_SIGNED_CERTIFICATES is another option for trust verification -
// whenever we establish an encrypted connection, we ensure the host is using
// an encryption certificate that is in, or is signed by, a certificate given
// as trusted through configuration. This option is only available for NodeJS environments.
//
// TRUST_ALL_CERTIFICATES means that you trust everything without any verifications
// steps carried out. This option is only available for NodeJS environments and should not
// be used on production systems.
trust: "TRUST_SYSTEM_CA_SIGNED_CERTIFICATES" | "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES" |
"TRUST_ALL_CERTIFICATES",
// List of one or more paths to trusted encryption certificates. This only
// works in the NodeJS bundle, and only matters if you use "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES".
// The certificate files should be in regular X.509 PEM format.
// For instance, ['./trusted.pem']
trustedCertificates: [],
// The maximum total number of connections allowed to be managed by the connection pool, per host.
// This includes both in-use and idle connections. No maximum connection pool size is imposed
// by default.
maxConnectionPoolSize: 100,
// The maximum allowed lifetime for a pooled connection in milliseconds. Pooled connections older than this
// threshold will be closed and removed from the pool. Such discarding happens during connection acquisition
// so that new session is never backed by an old connection. Setting this option to a low value will cause
// a high connection churn and might result in a performance hit. It is recommended to set maximum lifetime
// to a slightly smaller value than the one configured in network equipment (load balancer, proxy, firewall,
// etc. can also limit maximum connection lifetime). No maximum lifetime limit is imposed by default. Zero
// and negative values result in lifetime not being checked.
maxConnectionLifetime: 60 * 60 * 1000, // 1 hour
// The maximum amount of time to wait to acquire a connection from the pool (to either create a new
// connection or borrow an existing one.
connectionAcquisitionTimeout: 60000, // 1 minute
// Specify the maximum time in milliseconds transactions are allowed to retry via
// `Session#readTransaction()` and `Session#writeTransaction()` functions.
// These functions will retry the given unit of work on `ServiceUnavailable`, `SessionExpired` and transient
// errors with exponential backoff using initial delay of 1 second.
// Default value is 30000 which is 30 seconds.
maxTransactionRetryTime: 30000, // 30 seconds
// Specify socket connection timeout in milliseconds. Numeric values are expected. Negative and zero values
// result in no timeout being applied. Connection establishment will be then bound by the timeout configured
// on the operating system level. Default value is 30000, which is 30 seconds.
connectionTimeout: 30000, // 30 seconds
// Make this driver always return native JavaScript numbers for integer values, instead of the
// dedicated [Integer](https://deno.land/x/neo4j_lite_client@4.4.6/mod.ts?s=Integer) class. Values that do not fit in native number bit range will be represented as
// `Number.NEGATIVE_INFINITY` or `Number.POSITIVE_INFINITY`.
// **Warning:** ResultSummary It is not always safe to enable this setting when JavaScript applications are not the only ones
// interacting with the database. Stored numbers might in such case be not representable by native
// Number type and thus driver will return lossy values. This might also happen when data was
// initially imported using neo4j import tool and contained numbers larger than
// `Number.MAX_SAFE_INTEGER`. Driver will then return positive infinity, which is lossy.
// Default value for this option is `false` because native JavaScript numbers might result
// in loss of precision in the general case.
disableLosslessIntegers: false,
// Make this driver always return native Javascript BigInt for integer values, instead of the dedicated [Integer](https://deno.land/x/neo4j_lite_client@4.4.6/mod.ts?s=Integer) class or Number.
//
// Default value for this option is `false` for backwards compatibility.
//
// **Warning:** `BigInt` doesn't implement the method `toJSON`. In maner of serialize it as `json`, It's needed to add a custom implementation of the `toJSON` on the
// `BigInt.prototype` {@see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json}
useBigInt: false,
// Specify the logging configuration for the driver. Object should have two properties `level` and `logger`.
//
// Property `level` represents the logging level which should be one of: 'error', 'warn', 'info' or 'debug'. This property is optional and
// its default value is 'info'. Levels have priorities: 'error': 0, 'warn': 1, 'info': 2, 'debug': 3. Enabling a certain level also enables all
// levels with lower priority. For example: 'error', 'warn' and 'info' will be logged when 'info' level is configured.
//
// Property `logger` represents the logging function which will be invoked for every log call with an acceptable level. The function should
// take two string arguments `level` and `message`. The function should not execute any blocking or long-running operations
// because it is often executed on a hot path.
//
// No logging is done by default. See `neo4j.logging` object that contains predefined logging implementations.
logging: {
level: 'info',
logger: (level, message) => console.log(level + ' ' + message)
},
// Specify a custom server address resolver function used by the routing driver to resolve the initial address used to create the driver.
// Such resolution happens:
// * during the very first rediscovery when driver is created
// * when all the known routers from the current routing table have failed and driver needs to fallback to the initial address
//
// In NodeJS environment driver defaults to performing a DNS resolution of the initial address using 'dns' module.
// In browser environment driver uses the initial address as-is.
// Value should be a function that takes a single string argument - the initial address. It should return an array of new addresses.
// Address is a string of shape '<host>:<port>'. Provided function can return either a Promise resolved with an array of addresses
// or array of addresses directly.
resolver: function(address) {
return ['127.0.0.1:8888', 'fallback.db.com:7687'];
},
// Optionally override the default user agent name.
userAgent: USER_AGENT
}