@neo4j-cypher/query-tools 2.0.0-next.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +173 -0
- package/LICENSE.md +201 -0
- package/README.md +7 -0
- package/dist/cjs/package.json +41 -0
- package/dist/cjs/src/connectionErrorHandler.d.ts +12 -0
- package/dist/cjs/src/connectionErrorHandler.js +41 -0
- package/dist/cjs/src/connectionErrorHandler.js.map +1 -0
- package/dist/cjs/src/cypher-execution/query-result.d.ts +11 -0
- package/dist/cjs/src/cypher-execution/query-result.js +195 -0
- package/dist/cjs/src/cypher-execution/query-result.js.map +1 -0
- package/dist/cjs/src/data-transforms/clean-type.d.ts +6 -0
- package/dist/cjs/src/data-transforms/clean-type.js +16 -0
- package/dist/cjs/src/data-transforms/clean-type.js.map +1 -0
- package/dist/cjs/src/data-transforms/cypher-type-names.d.ts +6 -0
- package/dist/cjs/src/data-transforms/cypher-type-names.js +85 -0
- package/dist/cjs/src/data-transforms/cypher-type-names.js.map +1 -0
- package/dist/cjs/src/data-transforms/format-float.d.ts +1 -0
- package/dist/cjs/src/data-transforms/format-float.js +14 -0
- package/dist/cjs/src/data-transforms/format-float.js.map +1 -0
- package/dist/cjs/src/data-transforms/record-to-string.d.ts +5 -0
- package/dist/cjs/src/data-transforms/record-to-string.js +174 -0
- package/dist/cjs/src/data-transforms/record-to-string.js.map +1 -0
- package/dist/cjs/src/data-types/cypher-data-types.d.ts +29 -0
- package/dist/cjs/src/data-types/cypher-data-types.js +3 -0
- package/dist/cjs/src/data-types/cypher-data-types.js.map +1 -0
- package/dist/cjs/src/index.d.ts +14 -0
- package/dist/cjs/src/index.js +15 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/metadataPoller.d.ts +31 -0
- package/dist/cjs/src/metadataPoller.js +197 -0
- package/dist/cjs/src/metadataPoller.js.map +1 -0
- package/dist/cjs/src/neo4jConnection.d.ts +29 -0
- package/dist/cjs/src/neo4jConnection.js +107 -0
- package/dist/cjs/src/neo4jConnection.js.map +1 -0
- package/dist/cjs/src/queries/dataSummary.d.ts +7 -0
- package/dist/cjs/src/queries/dataSummary.js +33 -0
- package/dist/cjs/src/queries/dataSummary.js.map +1 -0
- package/dist/cjs/src/queries/databases.d.ts +27 -0
- package/dist/cjs/src/queries/databases.js +28 -0
- package/dist/cjs/src/queries/databases.js.map +1 -0
- package/dist/cjs/src/queries/functions.d.ts +16 -0
- package/dist/cjs/src/queries/functions.js +88 -0
- package/dist/cjs/src/queries/functions.js.map +1 -0
- package/dist/cjs/src/queries/procedures.d.ts +16 -0
- package/dist/cjs/src/queries/procedures.js +106 -0
- package/dist/cjs/src/queries/procedures.js.map +1 -0
- package/dist/cjs/src/queries/roles.d.ts +11 -0
- package/dist/cjs/src/queries/roles.js +24 -0
- package/dist/cjs/src/queries/roles.js.map +1 -0
- package/dist/cjs/src/queries/users.d.ts +15 -0
- package/dist/cjs/src/queries/users.js +24 -0
- package/dist/cjs/src/queries/users.js.map +1 -0
- package/dist/cjs/src/queries/version.d.ts +7 -0
- package/dist/cjs/src/queries/version.js +26 -0
- package/dist/cjs/src/queries/version.js.map +1 -0
- package/dist/cjs/src/schemaPoller.d.ts +44 -0
- package/dist/cjs/src/schemaPoller.js +167 -0
- package/dist/cjs/src/schemaPoller.js.map +1 -0
- package/dist/cjs/src/types/cypher-data-types.d.ts +41 -0
- package/dist/cjs/src/types/cypher-data-types.js +46 -0
- package/dist/cjs/src/types/cypher-data-types.js.map +1 -0
- package/dist/cjs/src/types/sdkTypes.d.ts +17 -0
- package/dist/cjs/src/types/sdkTypes.js +3 -0
- package/dist/cjs/src/types/sdkTypes.js.map +1 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/package.json +41 -0
- package/dist/esm/src/connectionErrorHandler.d.ts +12 -0
- package/dist/esm/src/connectionErrorHandler.js +35 -0
- package/dist/esm/src/connectionErrorHandler.js.map +1 -0
- package/dist/esm/src/cypher-execution/query-result.d.ts +11 -0
- package/dist/esm/src/cypher-execution/query-result.js +188 -0
- package/dist/esm/src/cypher-execution/query-result.js.map +1 -0
- package/dist/esm/src/data-transforms/clean-type.d.ts +6 -0
- package/dist/esm/src/data-transforms/clean-type.js +12 -0
- package/dist/esm/src/data-transforms/clean-type.js.map +1 -0
- package/dist/esm/src/data-transforms/cypher-type-names.d.ts +6 -0
- package/dist/esm/src/data-transforms/cypher-type-names.js +80 -0
- package/dist/esm/src/data-transforms/cypher-type-names.js.map +1 -0
- package/dist/esm/src/data-transforms/format-float.d.ts +1 -0
- package/dist/esm/src/data-transforms/format-float.js +10 -0
- package/dist/esm/src/data-transforms/format-float.js.map +1 -0
- package/dist/esm/src/data-transforms/record-to-string.d.ts +5 -0
- package/dist/esm/src/data-transforms/record-to-string.js +169 -0
- package/dist/esm/src/data-transforms/record-to-string.js.map +1 -0
- package/dist/esm/src/data-types/cypher-data-types.d.ts +29 -0
- package/dist/esm/src/data-types/cypher-data-types.js +2 -0
- package/dist/esm/src/data-types/cypher-data-types.js.map +1 -0
- package/dist/esm/src/index.d.ts +14 -0
- package/dist/esm/src/index.js +6 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/metadataPoller.d.ts +31 -0
- package/dist/esm/src/metadataPoller.js +191 -0
- package/dist/esm/src/metadataPoller.js.map +1 -0
- package/dist/esm/src/neo4jConnection.d.ts +29 -0
- package/dist/esm/src/neo4jConnection.js +103 -0
- package/dist/esm/src/neo4jConnection.js.map +1 -0
- package/dist/esm/src/queries/dataSummary.d.ts +7 -0
- package/dist/esm/src/queries/dataSummary.js +30 -0
- package/dist/esm/src/queries/dataSummary.js.map +1 -0
- package/dist/esm/src/queries/databases.d.ts +27 -0
- package/dist/esm/src/queries/databases.js +25 -0
- package/dist/esm/src/queries/databases.js.map +1 -0
- package/dist/esm/src/queries/functions.d.ts +16 -0
- package/dist/esm/src/queries/functions.js +81 -0
- package/dist/esm/src/queries/functions.js.map +1 -0
- package/dist/esm/src/queries/procedures.d.ts +16 -0
- package/dist/esm/src/queries/procedures.js +99 -0
- package/dist/esm/src/queries/procedures.js.map +1 -0
- package/dist/esm/src/queries/roles.d.ts +11 -0
- package/dist/esm/src/queries/roles.js +21 -0
- package/dist/esm/src/queries/roles.js.map +1 -0
- package/dist/esm/src/queries/users.d.ts +15 -0
- package/dist/esm/src/queries/users.js +21 -0
- package/dist/esm/src/queries/users.js.map +1 -0
- package/dist/esm/src/queries/version.d.ts +7 -0
- package/dist/esm/src/queries/version.js +23 -0
- package/dist/esm/src/queries/version.js.map +1 -0
- package/dist/esm/src/schemaPoller.d.ts +44 -0
- package/dist/esm/src/schemaPoller.js +160 -0
- package/dist/esm/src/schemaPoller.js.map +1 -0
- package/dist/esm/src/types/cypher-data-types.d.ts +41 -0
- package/dist/esm/src/types/cypher-data-types.js +39 -0
- package/dist/esm/src/types/cypher-data-types.js.map +1 -0
- package/dist/esm/src/types/sdkTypes.d.ts +17 -0
- package/dist/esm/src/types/sdkTypes.js +2 -0
- package/dist/esm/src/types/sdkTypes.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/package.json +41 -0
- package/src/connectionErrorHandler.ts +56 -0
- package/src/cypher-execution/query-result.ts +348 -0
- package/src/data-transforms/clean-type.ts +13 -0
- package/src/data-transforms/cypher-type-names.ts +146 -0
- package/src/data-transforms/format-float.ts +9 -0
- package/src/data-transforms/record-to-string.ts +248 -0
- package/src/data-types/cypher-data-types.ts +60 -0
- package/src/index.ts +21 -0
- package/src/metadataPoller.ts +261 -0
- package/src/neo4jConnection.ts +149 -0
- package/src/queries/dataSummary.ts +42 -0
- package/src/queries/databases.ts +63 -0
- package/src/queries/functions.ts +97 -0
- package/src/queries/procedures.ts +117 -0
- package/src/queries/roles.ts +30 -0
- package/src/queries/users.ts +35 -0
- package/src/queries/version.ts +28 -0
- package/src/schemaPoller.ts +301 -0
- package/src/types/cypher-data-types.ts +153 -0
- package/src/types/sdkTypes.ts +29 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.procedureSchema = void 0;
|
|
7
|
+
exports.listProcedures = listProcedures;
|
|
8
|
+
const ajv_1 = __importDefault(require("ajv"));
|
|
9
|
+
const neo4j_driver_1 = require("neo4j-driver");
|
|
10
|
+
const clean_type_1 = require("../data-transforms/clean-type");
|
|
11
|
+
exports.procedureSchema = {
|
|
12
|
+
type: 'object',
|
|
13
|
+
properties: {
|
|
14
|
+
admin: { type: 'boolean' },
|
|
15
|
+
argumentDescription: {
|
|
16
|
+
type: 'array',
|
|
17
|
+
items: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
name: { type: 'string' },
|
|
21
|
+
description: { type: 'string' },
|
|
22
|
+
type: { type: 'string' },
|
|
23
|
+
default: { type: 'string', nullable: true },
|
|
24
|
+
isDeprecated: { type: 'boolean', default: false },
|
|
25
|
+
},
|
|
26
|
+
required: ['name', 'description', 'type', 'isDeprecated'],
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
description: { type: 'string' },
|
|
30
|
+
mode: { type: 'string' },
|
|
31
|
+
name: { type: 'string' },
|
|
32
|
+
option: { type: 'object' },
|
|
33
|
+
returnDescription: {
|
|
34
|
+
type: 'array',
|
|
35
|
+
items: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
name: { type: 'string' },
|
|
39
|
+
description: { type: 'string' },
|
|
40
|
+
type: { type: 'string' },
|
|
41
|
+
isDeprecated: { type: 'boolean', default: false },
|
|
42
|
+
},
|
|
43
|
+
required: ['name', 'description', 'type', 'isDeprecated'],
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
signature: { type: 'string' },
|
|
47
|
+
worksOnSystem: { type: 'boolean' },
|
|
48
|
+
deprecatedBy: { type: 'string', nullable: true },
|
|
49
|
+
},
|
|
50
|
+
required: [
|
|
51
|
+
'admin',
|
|
52
|
+
'argumentDescription',
|
|
53
|
+
'description',
|
|
54
|
+
'mode',
|
|
55
|
+
'name',
|
|
56
|
+
'option',
|
|
57
|
+
'returnDescription',
|
|
58
|
+
'signature',
|
|
59
|
+
'worksOnSystem',
|
|
60
|
+
],
|
|
61
|
+
additionalProperties: true,
|
|
62
|
+
};
|
|
63
|
+
const validateProcedure = new ajv_1.default({ useDefaults: true }).compile(exports.procedureSchema);
|
|
64
|
+
function cleanTypes(result) {
|
|
65
|
+
return {
|
|
66
|
+
...result,
|
|
67
|
+
argumentDescription: result.argumentDescription.map(clean_type_1.cleanTypeDescription),
|
|
68
|
+
returnDescription: result.returnDescription.map(clean_type_1.cleanTypeDescription),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Gets available procedures on your database
|
|
73
|
+
* https://neo4j.com/docs/cypher-manual/current/clauses/listing-procedures/
|
|
74
|
+
*/
|
|
75
|
+
function listProcedures({ executableByMe, cypherVersion } = {
|
|
76
|
+
executableByMe: false,
|
|
77
|
+
cypherVersion: undefined,
|
|
78
|
+
}) {
|
|
79
|
+
const query = `${cypherVersion ? cypherVersion + ' ' : ''}
|
|
80
|
+
SHOW PROCEDURES
|
|
81
|
+
${executableByMe ? 'EXECUTABLE BY CURRENT USER' : ''}
|
|
82
|
+
YIELD *`;
|
|
83
|
+
const resultTransformer = neo4j_driver_1.resultTransformers.mappedResultTransformer({
|
|
84
|
+
map(record) {
|
|
85
|
+
// Assign default values (e.g. isDeprecated) in case they are not present
|
|
86
|
+
const objResult = record.toObject();
|
|
87
|
+
validateProcedure(objResult);
|
|
88
|
+
// Type is verified in integration tests
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
90
|
+
const result = cleanTypes(objResult);
|
|
91
|
+
return result;
|
|
92
|
+
},
|
|
93
|
+
collect(procedures, summary) {
|
|
94
|
+
return { procedures, summary };
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
query,
|
|
99
|
+
queryConfig: {
|
|
100
|
+
routing: 'READ',
|
|
101
|
+
database: 'system',
|
|
102
|
+
resultTransformer,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=procedures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedures.js","sourceRoot":"","sources":["../../../../src/queries/procedures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
2
|
+
export type Neo4jRole = {
|
|
3
|
+
role: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Gets available roles in your database
|
|
7
|
+
* https://neo4j.com/docs/operations-manual/current/authentication-authorization/manage-roles/#access-control-list-roles
|
|
8
|
+
*/
|
|
9
|
+
export declare function listRoles(): ExecuteQueryArgs<{
|
|
10
|
+
roles: Neo4jRole[];
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listRoles = listRoles;
|
|
4
|
+
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
+
/**
|
|
6
|
+
* Gets available roles in your database
|
|
7
|
+
* https://neo4j.com/docs/operations-manual/current/authentication-authorization/manage-roles/#access-control-list-roles
|
|
8
|
+
*/
|
|
9
|
+
function listRoles() {
|
|
10
|
+
const query = `SHOW ROLES`;
|
|
11
|
+
const resultTransformer = neo4j_driver_1.resultTransformers.mappedResultTransformer({
|
|
12
|
+
map(record) {
|
|
13
|
+
return record.toObject();
|
|
14
|
+
},
|
|
15
|
+
collect(roles, summary) {
|
|
16
|
+
return { roles, summary };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
query,
|
|
21
|
+
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../../src/queries/roles.ts"],"names":[],"mappings":";;AAWA,8BAkBC;AA7BD,+CAAkD;AAOlD;;;GAGG;AACH,SAAgB,SAAS;IAGvB,MAAM,KAAK,GAAG,YAAY,CAAC;IAE3B,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,uBAAuB,CAAC;QACnE,GAAG,CAAC,MAAM;YACR,OAAO,MAAM,CAAC,QAAQ,EAAe,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ExecuteQueryArgs } from '../types/sdkTypes.js';
|
|
2
|
+
export type Neo4jUser = {
|
|
3
|
+
user: string;
|
|
4
|
+
roles: string[];
|
|
5
|
+
passwordChangeRequired: string;
|
|
6
|
+
suspended?: boolean;
|
|
7
|
+
home?: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Gets available users in your database
|
|
11
|
+
* https://neo4j.com/docs/cypher-manual/current/administration/access-control/manage-users/#access-control-list-users
|
|
12
|
+
*/
|
|
13
|
+
export declare function listUsers(): ExecuteQueryArgs<{
|
|
14
|
+
users: Neo4jUser[];
|
|
15
|
+
}>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listUsers = listUsers;
|
|
4
|
+
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
+
/**
|
|
6
|
+
* Gets available users in your database
|
|
7
|
+
* https://neo4j.com/docs/cypher-manual/current/administration/access-control/manage-users/#access-control-list-users
|
|
8
|
+
*/
|
|
9
|
+
function listUsers() {
|
|
10
|
+
const query = `SHOW USERS`;
|
|
11
|
+
const resultTransformer = neo4j_driver_1.resultTransformers.mappedResultTransformer({
|
|
12
|
+
map(record) {
|
|
13
|
+
return record.toObject();
|
|
14
|
+
},
|
|
15
|
+
collect(users, summary) {
|
|
16
|
+
return { users, summary };
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
query,
|
|
21
|
+
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../../src/queries/users.ts"],"names":[],"mappings":";;AAgBA,8BAkBC;AAlCD,+CAAkD;AAYlD;;;GAGG;AACH,SAAgB,SAAS;IAGvB,MAAM,KAAK,GAAG,YAAY,CAAC;IAE3B,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,uBAAuB,CAAC;QACnE,GAAG,CAAC,MAAM;YACR,OAAO,MAAM,CAAC,QAAQ,EAAe,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,OAAO;YACpB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getVersion = getVersion;
|
|
4
|
+
const neo4j_driver_1 = require("neo4j-driver");
|
|
5
|
+
/**
|
|
6
|
+
* Get dbms version
|
|
7
|
+
*/
|
|
8
|
+
function getVersion() {
|
|
9
|
+
const query = 'CALL dbms.components() YIELD versions';
|
|
10
|
+
const resultTransformer = neo4j_driver_1.resultTransformers.mappedResultTransformer({
|
|
11
|
+
map(record) {
|
|
12
|
+
const obj = record.toObject();
|
|
13
|
+
const versions = obj.versions;
|
|
14
|
+
const version = versions?.at(0);
|
|
15
|
+
return version;
|
|
16
|
+
},
|
|
17
|
+
collect(versions, summary) {
|
|
18
|
+
return { serverVersion: versions.at(0), summary };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
query,
|
|
23
|
+
queryConfig: { resultTransformer, routing: 'READ', database: 'system' },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/queries/version.ts"],"names":[],"mappings":";;AAMA,gCAqBC;AA3BD,+CAAkD;AAGlD;;GAEG;AACH,SAAgB,UAAU;IAGxB,MAAM,KAAK,GAAG,uCAAuC,CAAC;IAEtD,MAAM,iBAAiB,GAAG,iCAAkB,CAAC,uBAAuB,CAAC;QACnE,GAAG,CAAC,MAAM;YACR,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAoB,CAAC;YAC1C,MAAM,OAAO,GAAG,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,QAAQ,EAAE,OAAO;YACvB,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,WAAW,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { Config } from 'neo4j-driver';
|
|
3
|
+
import { ConnectionError } from './connectionErrorHandler';
|
|
4
|
+
import { MetadataPoller } from './metadataPoller';
|
|
5
|
+
import { Neo4jConnection } from './neo4jConnection';
|
|
6
|
+
export type ConnnectionResult = {
|
|
7
|
+
success: boolean;
|
|
8
|
+
retriable?: boolean;
|
|
9
|
+
error?: ConnectionError;
|
|
10
|
+
};
|
|
11
|
+
export declare class Neo4jSchemaPoller {
|
|
12
|
+
connection?: Neo4jConnection;
|
|
13
|
+
metadata?: MetadataPoller;
|
|
14
|
+
events: EventEmitter;
|
|
15
|
+
private driver?;
|
|
16
|
+
private reconnectionTimeout?;
|
|
17
|
+
private retries;
|
|
18
|
+
private lastError?;
|
|
19
|
+
private parameters;
|
|
20
|
+
setParameters(parameters: Record<string, unknown>): void;
|
|
21
|
+
connect(url: string, credentials: {
|
|
22
|
+
username: string;
|
|
23
|
+
password: string;
|
|
24
|
+
}, config: {
|
|
25
|
+
driverConfig?: Config;
|
|
26
|
+
appName: string;
|
|
27
|
+
}, database?: string): Promise<ConnnectionResult>;
|
|
28
|
+
persistentConnect(url: string, credentials: {
|
|
29
|
+
username: string;
|
|
30
|
+
password: string;
|
|
31
|
+
}, config: {
|
|
32
|
+
driverConfig?: Config;
|
|
33
|
+
appName: string;
|
|
34
|
+
}, database?: string): Promise<ConnnectionResult>;
|
|
35
|
+
disconnect(): void;
|
|
36
|
+
private connectAndStartMetadataPoller;
|
|
37
|
+
private initializeDriver;
|
|
38
|
+
private setReconnectionTimeout;
|
|
39
|
+
private handleSuccessfulConnection;
|
|
40
|
+
private handleNonSuccessfulConnection;
|
|
41
|
+
private handlePermanentlyFailingConnection;
|
|
42
|
+
private formatConnectionErrorFriendlyMessage;
|
|
43
|
+
private resetRetries;
|
|
44
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Neo4jSchemaPoller = void 0;
|
|
7
|
+
const events_1 = require("events");
|
|
8
|
+
const neo4j_driver_1 = __importDefault(require("neo4j-driver"));
|
|
9
|
+
const connectionErrorHandler_1 = require("./connectionErrorHandler");
|
|
10
|
+
const metadataPoller_1 = require("./metadataPoller");
|
|
11
|
+
const neo4jConnection_1 = require("./neo4jConnection");
|
|
12
|
+
const databases_js_1 = require("./queries/databases.js");
|
|
13
|
+
const version_1 = require("./queries/version");
|
|
14
|
+
const MAX_RETRY_ATTEMPTS = 5;
|
|
15
|
+
const RETRY_INTERVAL_MS = 30000;
|
|
16
|
+
class Neo4jSchemaPoller {
|
|
17
|
+
connection;
|
|
18
|
+
metadata;
|
|
19
|
+
events = new events_1.EventEmitter();
|
|
20
|
+
driver;
|
|
21
|
+
reconnectionTimeout;
|
|
22
|
+
retries = MAX_RETRY_ATTEMPTS;
|
|
23
|
+
lastError;
|
|
24
|
+
parameters = {};
|
|
25
|
+
setParameters(parameters) {
|
|
26
|
+
this.parameters = parameters;
|
|
27
|
+
if (this.metadata) {
|
|
28
|
+
this.metadata.dbSchema.parameters = parameters;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.metadata = new metadataPoller_1.DisconnectedMetadataPoller(parameters);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async connect(url, credentials, config, database) {
|
|
35
|
+
try {
|
|
36
|
+
this.driver = await this.initializeDriver(url, credentials, config, database);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error('Error connecting to Neo4j.', error);
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
retriable: (0, connectionErrorHandler_1.isRetriableNeo4jError)(error),
|
|
43
|
+
error: (0, connectionErrorHandler_1.getConnectionError)(error),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return { success: true };
|
|
47
|
+
}
|
|
48
|
+
async persistentConnect(url, credentials, config, database) {
|
|
49
|
+
const shouldHaveConnection = this.connection !== undefined;
|
|
50
|
+
const connectionAlive = await this.connection?.healthcheck();
|
|
51
|
+
const shouldUpdateConnection = this.connection && database && this.connection?.currentDb !== database;
|
|
52
|
+
if (!connectionAlive || shouldUpdateConnection) {
|
|
53
|
+
if (shouldHaveConnection && !shouldUpdateConnection) {
|
|
54
|
+
console.error('Connection to Neo4j dropped');
|
|
55
|
+
this.disconnect();
|
|
56
|
+
}
|
|
57
|
+
else if (shouldUpdateConnection) {
|
|
58
|
+
this.disconnect();
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
await this.connectAndStartMetadataPoller(url, credentials, config, database);
|
|
62
|
+
this.reconnectionTimeout = this.setReconnectionTimeout(url, credentials, config, database);
|
|
63
|
+
return this.handleSuccessfulConnection();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('Error connecting to Neo4j.', error);
|
|
67
|
+
this.retries -= 1;
|
|
68
|
+
this.lastError = (0, connectionErrorHandler_1.getConnectionError)(error);
|
|
69
|
+
if (!(0, connectionErrorHandler_1.isRetriableNeo4jError)(error)) {
|
|
70
|
+
return this.handlePermanentlyFailingConnection();
|
|
71
|
+
}
|
|
72
|
+
if (this.retries > 0) {
|
|
73
|
+
this.reconnectionTimeout = this.setReconnectionTimeout(url, credentials, config, database);
|
|
74
|
+
return this.handleNonSuccessfulConnection();
|
|
75
|
+
}
|
|
76
|
+
return this.handlePermanentlyFailingConnection();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
this.reconnectionTimeout = this.setReconnectionTimeout(url, credentials, config, database);
|
|
80
|
+
return { success: true };
|
|
81
|
+
}
|
|
82
|
+
disconnect() {
|
|
83
|
+
if (this.connection) {
|
|
84
|
+
// eslint-disable-next-line no-console
|
|
85
|
+
console.log('Disconnected from Neo4j');
|
|
86
|
+
}
|
|
87
|
+
this.connection?.dispose();
|
|
88
|
+
this.metadata?.stopBackgroundPolling();
|
|
89
|
+
this.connection = undefined;
|
|
90
|
+
const parameters = this.metadata?.dbSchema?.parameters ?? {};
|
|
91
|
+
this.metadata = new metadataPoller_1.DisconnectedMetadataPoller(parameters);
|
|
92
|
+
this.driver = undefined;
|
|
93
|
+
clearTimeout(this.reconnectionTimeout);
|
|
94
|
+
}
|
|
95
|
+
async connectAndStartMetadataPoller(url, credentials, config, database) {
|
|
96
|
+
this.driver =
|
|
97
|
+
this.driver ??
|
|
98
|
+
(await this.initializeDriver(url, credentials, config, database));
|
|
99
|
+
const { query: dbQuery, queryConfig: dbQueryConfig } = (0, databases_js_1.listDatabases)();
|
|
100
|
+
const { databases, summary } = await this.driver.executeQuery(dbQuery, {}, dbQueryConfig);
|
|
101
|
+
const protocolVersion = summary.server.protocolVersion?.toString() ?? 'unknown';
|
|
102
|
+
this.connection = new neo4jConnection_1.Neo4jConnection(credentials.username, protocolVersion, databases, this.driver, database);
|
|
103
|
+
const { query: versionQuery, queryConfig: versionQueryConfig } = (0, version_1.getVersion)();
|
|
104
|
+
const { serverVersion } = await this.driver.executeQuery(versionQuery, {}, versionQueryConfig);
|
|
105
|
+
this.metadata = new metadataPoller_1.ConnectedMetadataPoller(databases, this.parameters, serverVersion, this.connection, this.events);
|
|
106
|
+
this.metadata.startBackgroundPolling();
|
|
107
|
+
}
|
|
108
|
+
async initializeDriver(url, credentials, config, database) {
|
|
109
|
+
const driver = neo4j_driver_1.default.driver(url, neo4j_driver_1.default.auth.basic(credentials.username, credentials.password), { userAgent: config.appName, ...config.driverConfig });
|
|
110
|
+
await driver.verifyConnectivity({ database: database });
|
|
111
|
+
if (await driver.supportsSessionAuth()) {
|
|
112
|
+
if (!(await driver.verifyAuthentication())) {
|
|
113
|
+
throw new Error('Invalid credentials');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return driver;
|
|
117
|
+
}
|
|
118
|
+
setReconnectionTimeout(url, credentials, config, database) {
|
|
119
|
+
return setTimeout(() => {
|
|
120
|
+
void this.persistentConnect(url, credentials, config, database);
|
|
121
|
+
}, RETRY_INTERVAL_MS);
|
|
122
|
+
}
|
|
123
|
+
handleSuccessfulConnection() {
|
|
124
|
+
this.resetRetries();
|
|
125
|
+
// eslint-disable-next-line no-console
|
|
126
|
+
console.log('Established connection to Neo4j');
|
|
127
|
+
this.events.emit('connectionConnected');
|
|
128
|
+
return { success: true };
|
|
129
|
+
}
|
|
130
|
+
handleNonSuccessfulConnection() {
|
|
131
|
+
const connectionError = this.formatConnectionErrorFriendlyMessage(this.lastError, true);
|
|
132
|
+
this.events.emit('connectionErrored', connectionError);
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
retriable: true,
|
|
136
|
+
error: connectionError,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
handlePermanentlyFailingConnection() {
|
|
140
|
+
this.resetRetries();
|
|
141
|
+
const connectionError = this.formatConnectionErrorFriendlyMessage(this.lastError, false);
|
|
142
|
+
this.events.emit('connectionFailed', connectionError);
|
|
143
|
+
return {
|
|
144
|
+
success: false,
|
|
145
|
+
retriable: false,
|
|
146
|
+
error: connectionError,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
formatConnectionErrorFriendlyMessage(connectionError = {
|
|
150
|
+
message: '',
|
|
151
|
+
friendlyMessage: connectionErrorHandler_1.FRIENDLY_ERROR_MESSAGES.Default,
|
|
152
|
+
code: '',
|
|
153
|
+
}, retriable) {
|
|
154
|
+
const friendlyMessage = retriable
|
|
155
|
+
? `${connectionError.friendlyMessage}. Retrying in ${RETRY_INTERVAL_MS / 1000} seconds`
|
|
156
|
+
: connectionError.friendlyMessage;
|
|
157
|
+
return {
|
|
158
|
+
...connectionError,
|
|
159
|
+
friendlyMessage: friendlyMessage,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
resetRetries() {
|
|
163
|
+
this.retries = MAX_RETRY_ATTEMPTS;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.Neo4jSchemaPoller = Neo4jSchemaPoller;
|
|
167
|
+
//# sourceMappingURL=schemaPoller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaPoller.js","sourceRoot":"","sources":["../../../src/schemaPoller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Date, DateTime, Duration, Integer, LocalDateTime, LocalTime, Node, Path, Point, Relationship, Time } from 'neo4j-driver';
|
|
2
|
+
type NumberOrInteger = number | Integer | bigint;
|
|
3
|
+
/**
|
|
4
|
+
The neo4j driver type mapping - https://neo4j.com/docs/javascript-manual/current/cypher-workflow/#js-driver-type-mapping
|
|
5
|
+
|
|
6
|
+
Star denotes custom driver class.
|
|
7
|
+
|
|
8
|
+
Cypher(neo4j) - Driver type(js)
|
|
9
|
+
null - null
|
|
10
|
+
List - array
|
|
11
|
+
Map - Object
|
|
12
|
+
Boolean - boolean
|
|
13
|
+
Integer - Integer*
|
|
14
|
+
Float - number
|
|
15
|
+
String - string
|
|
16
|
+
ByteArray - Int8Array
|
|
17
|
+
Date - Date*
|
|
18
|
+
Time - Time*
|
|
19
|
+
LocalTime - LocalTime*
|
|
20
|
+
DateTime - DateTime*
|
|
21
|
+
LocalDateTime - LocalDateTime*
|
|
22
|
+
Duration - Duration*
|
|
23
|
+
Point - Point*
|
|
24
|
+
Node - Node*
|
|
25
|
+
Relationship - Relationship*
|
|
26
|
+
Path - Path*
|
|
27
|
+
*/
|
|
28
|
+
export type CypherBasicPropertyType = null | boolean | number | string | Integer | bigint | Int8Array | CypherTemporalType | Point;
|
|
29
|
+
export type CypherTemporalType = Date<NumberOrInteger> | Time<NumberOrInteger> | DateTime | LocalTime<NumberOrInteger> | LocalDateTime | Duration<NumberOrInteger>;
|
|
30
|
+
export type CypherProperty = CypherBasicPropertyType | CypherBasicPropertyType[];
|
|
31
|
+
export type CypherStructuralType = Node | Relationship | Path;
|
|
32
|
+
export type CypherList = (CypherBasicPropertyType | CypherStructuralType | CypherMap | CypherList)[];
|
|
33
|
+
export interface CypherMap {
|
|
34
|
+
[key: string]: CypherBasicPropertyType | CypherStructuralType | CypherMap | CypherList;
|
|
35
|
+
}
|
|
36
|
+
export type CypherDataType = CypherBasicPropertyType | CypherStructuralType | CypherMap | CypherList;
|
|
37
|
+
export declare const isCypherTemporalType: (anything: unknown) => anything is CypherTemporalType;
|
|
38
|
+
export declare const isCypherBasicPropertyType: (value: unknown) => value is CypherBasicPropertyType;
|
|
39
|
+
export declare const isCypherPropertyType: (value: unknown) => value is CypherProperty;
|
|
40
|
+
export declare function isInt8Array(val: unknown): val is Int8Array;
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isCypherPropertyType = exports.isCypherBasicPropertyType = exports.isCypherTemporalType = void 0;
|
|
4
|
+
exports.isInt8Array = isInt8Array;
|
|
5
|
+
const neo4j_driver_1 = require("neo4j-driver");
|
|
6
|
+
const isCypherTemporalType = (anything) => {
|
|
7
|
+
if (typeof anything === 'object' && anything !== null) {
|
|
8
|
+
return [
|
|
9
|
+
neo4j_driver_1.isDate,
|
|
10
|
+
neo4j_driver_1.isTime,
|
|
11
|
+
neo4j_driver_1.isDateTime,
|
|
12
|
+
neo4j_driver_1.isLocalTime,
|
|
13
|
+
neo4j_driver_1.isLocalDateTime,
|
|
14
|
+
neo4j_driver_1.isDuration,
|
|
15
|
+
].some((tester) => tester(anything));
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
};
|
|
19
|
+
exports.isCypherTemporalType = isCypherTemporalType;
|
|
20
|
+
const isCypherBasicPropertyType = (value) => {
|
|
21
|
+
const valType = typeof value;
|
|
22
|
+
return (value === null ||
|
|
23
|
+
valType === 'boolean' ||
|
|
24
|
+
valType === 'string' ||
|
|
25
|
+
valType === 'number' ||
|
|
26
|
+
valType === 'bigint' ||
|
|
27
|
+
value?.constructor === Int8Array ||
|
|
28
|
+
(0, neo4j_driver_1.isInt)(value) ||
|
|
29
|
+
(0, exports.isCypherTemporalType)(value) ||
|
|
30
|
+
(0, neo4j_driver_1.isPoint)(value));
|
|
31
|
+
};
|
|
32
|
+
exports.isCypherBasicPropertyType = isCypherBasicPropertyType;
|
|
33
|
+
const isCypherPropertyType = (value) => {
|
|
34
|
+
if (Array.isArray(value)) {
|
|
35
|
+
if (value.length === 0) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return (0, exports.isCypherBasicPropertyType)(value[0]);
|
|
39
|
+
}
|
|
40
|
+
return (0, exports.isCypherBasicPropertyType)(value);
|
|
41
|
+
};
|
|
42
|
+
exports.isCypherPropertyType = isCypherPropertyType;
|
|
43
|
+
function isInt8Array(val) {
|
|
44
|
+
return (typeof val === 'object' && val !== null && val.constructor === Int8Array);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=cypher-data-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cypher-data-types.js","sourceRoot":"","sources":["../../../../src/types/cypher-data-types.ts"],"names":[],"mappings":";;;AAoJA,kCAIC;AA3ID,+CASsB;AA+Ef,MAAM,oBAAoB,GAAG,CAClC,QAAiB,EACe,EAAE;IAClC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,OAAO;YACL,qBAAM;YACN,qBAAM;YACN,yBAAU;YACV,0BAAW;YACX,8BAAe;YACf,yBAAU;SACX,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAdW,QAAA,oBAAoB,wBAc/B;AAEK,MAAM,yBAAyB,GAAG,CACvC,KAAc,EACoB,EAAE;IACpC,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC;IAE7B,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,SAAS;QACrB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,QAAQ;QACpB,KAAK,EAAE,WAAW,KAAK,SAAS;QAChC,IAAA,oBAAK,EAAC,KAAK,CAAC;QACZ,IAAA,4BAAoB,EAAC,KAAK,CAAC;QAC3B,IAAA,sBAAO,EAAC,KAAK,CAAC,CACf,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,yBAAyB,6BAgBpC;AAEK,MAAM,oBAAoB,GAAG,CAClC,KAAc,EACW,EAAE;IAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAA,iCAAyB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAA,iCAAyB,EAAC,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAC;AAXW,QAAA,oBAAoB,wBAW/B;AAEF,SAAgB,WAAW,CAAC,GAAY;IACtC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,CACzE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { QueryConfig, ResultSummary } from 'neo4j-driver';
|
|
2
|
+
export type DbType = 'system' | 'standard' | 'composite';
|
|
3
|
+
export type QueryType = 'system' | 'user-direct' | 'user-action' | 'user-transpiled';
|
|
4
|
+
export type CypherTransactionMetadata = {
|
|
5
|
+
app: 'neo4j-sdk';
|
|
6
|
+
type: QueryType;
|
|
7
|
+
version?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ExtendedQueryConfig<T> = QueryConfig<T> & Required<Pick<QueryConfig<T>, 'routing' | 'resultTransformer'>>;
|
|
10
|
+
type Result<T> = T & {
|
|
11
|
+
summary: ResultSummary;
|
|
12
|
+
};
|
|
13
|
+
export type ExecuteQueryArgs<T> = {
|
|
14
|
+
query: string;
|
|
15
|
+
queryConfig: ExtendedQueryConfig<Result<T>>;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkTypes.js","sourceRoot":"","sources":["../../../../src/types/sdkTypes.ts"],"names":[],"mappings":""}
|