ultipa 6.0.0

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.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/client.d.ts +194 -0
  4. package/dist/client.js +390 -0
  5. package/dist/config.d.ts +65 -0
  6. package/dist/config.js +135 -0
  7. package/dist/connection.d.ts +30 -0
  8. package/dist/connection.js +190 -0
  9. package/dist/errors.d.ts +99 -0
  10. package/dist/errors.js +237 -0
  11. package/dist/index.d.ts +14 -0
  12. package/dist/index.js +88 -0
  13. package/dist/printers.d.ts +33 -0
  14. package/dist/printers.js +312 -0
  15. package/dist/proto/gqldb.proto +632 -0
  16. package/dist/response.d.ts +256 -0
  17. package/dist/response.js +723 -0
  18. package/dist/services/admin-service.d.ts +40 -0
  19. package/dist/services/admin-service.js +115 -0
  20. package/dist/services/bulk-import-service.d.ts +35 -0
  21. package/dist/services/bulk-import-service.js +108 -0
  22. package/dist/services/converters.d.ts +57 -0
  23. package/dist/services/converters.js +254 -0
  24. package/dist/services/data-service.d.ts +44 -0
  25. package/dist/services/data-service.js +206 -0
  26. package/dist/services/graph-service.d.ts +32 -0
  27. package/dist/services/graph-service.js +127 -0
  28. package/dist/services/health-service.d.ts +50 -0
  29. package/dist/services/health-service.js +78 -0
  30. package/dist/services/index.d.ts +13 -0
  31. package/dist/services/index.js +30 -0
  32. package/dist/services/query-service.d.ts +39 -0
  33. package/dist/services/query-service.js +112 -0
  34. package/dist/services/service-context.d.ts +39 -0
  35. package/dist/services/service-context.js +73 -0
  36. package/dist/services/session-service.d.ts +24 -0
  37. package/dist/services/session-service.js +66 -0
  38. package/dist/services/transaction-service.d.ts +33 -0
  39. package/dist/services/transaction-service.js +100 -0
  40. package/dist/services.d.ts +28 -0
  41. package/dist/services.js +122 -0
  42. package/dist/session.d.ts +45 -0
  43. package/dist/session.js +75 -0
  44. package/dist/transaction.d.ts +42 -0
  45. package/dist/transaction.js +89 -0
  46. package/dist/types/bulk_import.d.ts +53 -0
  47. package/dist/types/bulk_import.js +6 -0
  48. package/dist/types/data_types.d.ts +116 -0
  49. package/dist/types/data_types.js +122 -0
  50. package/dist/types/enums.d.ts +59 -0
  51. package/dist/types/enums.js +67 -0
  52. package/dist/types/graph_models.d.ts +54 -0
  53. package/dist/types/graph_models.js +6 -0
  54. package/dist/types/index.d.ts +11 -0
  55. package/dist/types/index.js +36 -0
  56. package/dist/types/metadata.d.ts +60 -0
  57. package/dist/types/metadata.js +6 -0
  58. package/dist/types/schema.d.ts +31 -0
  59. package/dist/types/schema.js +6 -0
  60. package/dist/types/typed_value.d.ts +25 -0
  61. package/dist/types/typed_value.js +1176 -0
  62. package/dist/types/wrappers.d.ts +23 -0
  63. package/dist/types/wrappers.js +39 -0
  64. package/dist/types.d.ts +7 -0
  65. package/dist/types.js +24 -0
  66. package/package.json +50 -0
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * Graph service handles graph management operations.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.GraphService = void 0;
40
+ const grpc = __importStar(require("@grpc/grpc-js"));
41
+ const types_1 = require("../types");
42
+ const services_1 = require("../services");
43
+ const converters_1 = require("./converters");
44
+ const errors_1 = require("../errors");
45
+ /**
46
+ * Graph service for managing graphs.
47
+ */
48
+ class GraphService {
49
+ ctx;
50
+ constructor(ctx) {
51
+ this.ctx = ctx;
52
+ }
53
+ /**
54
+ * Create a new graph.
55
+ */
56
+ async createGraph(name, graphType = types_1.GraphType.OPEN, description = '') {
57
+ const request = {
58
+ name,
59
+ graph_type: (0, converters_1.graphTypeToProto)(graphType),
60
+ description,
61
+ };
62
+ const metadata = this.ctx.getSessionMetadata();
63
+ await (0, services_1.promisifyCall)(this.ctx.clients.graphService, 'CreateGraph', request, metadata);
64
+ }
65
+ /**
66
+ * Delete a graph.
67
+ */
68
+ async dropGraph(name, ifExists = false) {
69
+ const request = {
70
+ name,
71
+ if_exists: ifExists,
72
+ };
73
+ const metadata = this.ctx.getSessionMetadata();
74
+ await (0, services_1.promisifyCall)(this.ctx.clients.graphService, 'DropGraph', request, metadata);
75
+ }
76
+ /**
77
+ * Set the current graph for the session.
78
+ */
79
+ async useGraph(name) {
80
+ const session = this.ctx.sessions.getSession();
81
+ const request = {
82
+ name,
83
+ session_id: session?.id?.toString() || '0',
84
+ };
85
+ const metadata = this.ctx.getSessionMetadata();
86
+ await (0, services_1.promisifyCall)(this.ctx.clients.graphService, 'UseGraph', request, metadata);
87
+ this.ctx.sessions.setDefaultGraph(name);
88
+ }
89
+ /**
90
+ * Return all available graphs.
91
+ */
92
+ async listGraphs() {
93
+ const metadata = this.ctx.getSessionMetadata();
94
+ const response = await (0, services_1.promisifyCall)(this.ctx.clients.graphService, 'ListGraphs', {}, metadata);
95
+ return (response.graphs || []).map((g) => (0, converters_1.convertGraphInfo)(g));
96
+ }
97
+ /**
98
+ * Return information about a specific graph.
99
+ */
100
+ async getGraphInfo(name) {
101
+ const metadata = this.ctx.getSessionMetadata();
102
+ try {
103
+ const response = await (0, services_1.promisifyCall)(this.ctx.clients.graphService, 'GetGraphInfo', { name }, metadata);
104
+ if (!response.info) {
105
+ throw new errors_1.GraphNotFoundError(name);
106
+ }
107
+ const info = response.info;
108
+ return {
109
+ name: info.name || name,
110
+ graphType: info.graph_type,
111
+ nodeCount: parseInt(info.node_count || '0', 10),
112
+ edgeCount: parseInt(info.edge_count || '0', 10),
113
+ description: info.description || '',
114
+ };
115
+ }
116
+ catch (err) {
117
+ if (err instanceof errors_1.GraphNotFoundError)
118
+ throw err;
119
+ if (err?.code === grpc.status.NOT_FOUND) {
120
+ throw new errors_1.GraphNotFoundError(name);
121
+ }
122
+ throw err;
123
+ }
124
+ }
125
+ }
126
+ exports.GraphService = GraphService;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9ncmFwaC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQXNDO0FBRXRDLG9DQUFnRDtBQUNoRCwwQ0FBNEM7QUFDNUMsNkNBQWtFO0FBQ2xFLHNDQUErQztBQUUvQzs7R0FFRztBQUNILE1BQWEsWUFBWTtJQUNIO0lBQXBCLFlBQW9CLEdBQW1CO1FBQW5CLFFBQUcsR0FBSCxHQUFHLENBQWdCO0lBQUcsQ0FBQztJQUUzQzs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQ2YsSUFBWSxFQUNaLFlBQXVCLGlCQUFTLENBQUMsSUFBSSxFQUNyQyxjQUFzQixFQUFFO1FBRXhCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSTtZQUNKLFVBQVUsRUFBRSxJQUFBLDZCQUFnQixFQUFDLFNBQVMsQ0FBQztZQUN2QyxXQUFXO1NBQ1osQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUEsd0JBQWEsRUFBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVksRUFBRSxXQUFvQixLQUFLO1FBQ3JELE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSTtZQUNKLFNBQVMsRUFBRSxRQUFRO1NBQ3BCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFBLHdCQUFhLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxP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bGVzIGdyYXBoIG1hbmFnZW1lbnQgb3BlcmF0aW9ucy5cclxuICovXHJcblxyXG5pbXBvcnQgKiBhcyBncnBjIGZyb20gJ0BncnBjL2dycGMtanMnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcclxuaW1wb3J0IHsgR3JhcGhJbmZvLCBHcmFwaFR5cGUgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IHByb21pc2lmeUNhbGwgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IGdyYXBoVHlwZVRvUHJvdG8sIGNvbnZlcnRHcmFwaEluZm8gfSBmcm9tICcuL2NvbnZlcnRlcnMnO1xyXG5pbXBvcnQgeyBHcmFwaE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xyXG5cclxuLyoqXHJcbiAqIEdyYXBoIHNlcnZpY2UgZm9yIG1hbmFnaW5nIGdyYXBocy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBHcmFwaFNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY3R4OiBTZXJ2aWNlQ29udGV4dCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IGdyYXBoLlxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZUdyYXBoKFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgZ3JhcGhUeXBlOiBHcmFwaFR5cGUgPSBHcmFwaFR5cGUuT1BFTixcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJ1xyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgbmFtZSxcclxuICAgICAgZ3JhcGhfdHlwZTogZ3JhcGhUeXBlVG9Qcm90byhncmFwaFR5cGUpLFxyXG4gICAgICBkZXNjcmlwdGlvbixcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcclxuICAgIGF3YWl0IHByb21pc2lmeUNhbGwodGhpcy5jdHguY2xpZW50cy5ncmFwaFNlcnZpY2UsICdDcmVhdGVHcmFwaCcsIHJlcXVlc3QsIG1ldGFkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBhIGdyYXBoLlxyXG4gICAqL1xyXG4gIGFzeW5jIGRyb3BHcmFwaChuYW1lOiBzdHJpbmcsIGlmRXhpc3RzOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGlmX2V4aXN0czogaWZFeGlzdHMsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XHJcbiAgICBhd2FpdCBwcm9taXNpZnlDYWxsKHRoaXMuY3R4LmNsaWVudHMuZ3JhcGhTZXJ2aWNlLCAnRHJvcEdyYXBoJywgcmVxdWVzdCwgbWV0YWRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBjdXJyZW50IGdyYXBoIGZvciB0aGUgc2Vzc2lvbi5cclxuICAgKi9cclxuICBhc3luYyB1c2VHcmFwaChuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICBzZXNzaW9uX2lkOiBzZXNzaW9uPy5pZD8udG9TdHJpbmcoKSB8fCAnMCcsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XHJcbiAgICBhd2FpdCBwcm9taXNpZnlDYWxsKHRoaXMuY3R4LmNsaWVudHMuZ3JhcGhTZXJ2aWNlLCAnVXNlR3JhcGgnLCByZXF1ZXN0LCBtZXRhZGF0YSk7XHJcbiAgICB0aGlzLmN0eC5zZXNzaW9ucy5zZXREZWZhdWx0R3JhcGgobmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYWxsIGF2YWlsYWJsZSBncmFwaHMuXHJcbiAgICovXHJcbiAgYXN5bmMgbGlzdEdyYXBocygpOiBQcm9taXNlPEdyYXBoSW5mb1tdPiB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuZ3JhcGhTZXJ2aWNlLFxyXG4gICAgICAnTGlzdEdyYXBocycsXHJcbiAgICAgIHt9LFxyXG4gICAgICBtZXRhZGF0YVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gKHJlc3BvbnNlLmdyYXBocyB8fCBbXSkubWFwKChnOiBhbnkpID0+IGNvbnZlcnRHcmFwaEluZm8oZykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgZ3JhcGguXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0R3JhcGhJbmZvKG5hbWU6IHN0cmluZyk6IFByb21pc2U8R3JhcGhJbmZvPiB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgICAgdGhpcy5jdHguY2xpZW50cy5ncmFwaFNlcnZpY2UsXHJcbiAgICAgICAgJ0dldEdyYXBoSW5mbycsXHJcbiAgICAgICAgeyBuYW1lIH0sXHJcbiAgICAgICAgbWV0YWRhdGFcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghcmVzcG9uc2UuaW5mbykge1xyXG4gICAgICAgIHRocm93IG5ldyBHcmFwaE5vdEZvdW5kRXJyb3IobmFtZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGluZm8gPSByZXNwb25zZS5pbmZvO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IGluZm8ubmFtZSB8fCBuYW1lLFxyXG4gICAgICAgIGdyYXBoVHlwZTogaW5mby5ncmFwaF90eXBlLFxyXG4gICAgICAgIG5vZGVDb3VudDogcGFyc2VJbnQoaW5mby5ub2RlX2NvdW50IHx8ICcwJywgMTApLFxyXG4gICAgICAgIGVkZ2VDb3VudDogcGFyc2VJbnQoaW5mby5lZGdlX2NvdW50IHx8ICcwJywgMTApLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBpbmZvLmRlc2NyaXB0aW9uIHx8ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEdyYXBoTm90Rm91bmRFcnJvcikgdGhyb3cgZXJyO1xyXG4gICAgICBpZiAoZXJyPy5jb2RlID09PSBncnBjLnN0YXR1cy5OT1RfRk9VTkQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgR3JhcGhOb3RGb3VuZEVycm9yKG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRocm93IGVycjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Health service handles health check operations.
3
+ */
4
+ import { EventEmitter } from 'events';
5
+ import { ServiceContext } from './service-context';
6
+ import { HealthStatus } from '../types';
7
+ /**
8
+ * Health watcher interface for streaming health updates.
9
+ * Emits 'status' events with HealthStatus and 'error' events on failure.
10
+ */
11
+ export interface HealthWatcher extends EventEmitter {
12
+ /** Stop watching health updates */
13
+ stop(): void;
14
+ }
15
+ /**
16
+ * Health service for checking service health.
17
+ */
18
+ export declare class HealthService {
19
+ private ctx;
20
+ constructor(ctx: ServiceContext);
21
+ /**
22
+ * Check the health of a service.
23
+ */
24
+ healthCheck(service?: string): Promise<HealthStatus>;
25
+ /**
26
+ * Watch health status changes via server-side streaming.
27
+ * Returns a HealthWatcher that emits 'status' events with HealthStatus values.
28
+ * Call stop() to cancel the stream.
29
+ *
30
+ * @param service - Optional service name to watch
31
+ * @returns HealthWatcher - EventEmitter with stop() method
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const watcher = healthService.watch();
36
+ * watcher.on('status', (status: HealthStatus) => {
37
+ * console.log('Health status:', status);
38
+ * });
39
+ * watcher.on('error', (err) => {
40
+ * console.error('Watch error:', err);
41
+ * });
42
+ * watcher.on('end', () => {
43
+ * console.log('Watch stream ended');
44
+ * });
45
+ * // Later, to stop watching:
46
+ * watcher.stop();
47
+ * ```
48
+ */
49
+ watch(service?: string): HealthWatcher;
50
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Health service handles health check operations.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HealthService = void 0;
7
+ const events_1 = require("events");
8
+ const services_1 = require("../services");
9
+ const converters_1 = require("./converters");
10
+ /**
11
+ * Health service for checking service health.
12
+ */
13
+ class HealthService {
14
+ ctx;
15
+ constructor(ctx) {
16
+ this.ctx = ctx;
17
+ }
18
+ /**
19
+ * Check the health of a service.
20
+ */
21
+ async healthCheck(service = '') {
22
+ const metadata = this.ctx.getSessionMetadata();
23
+ const response = await (0, services_1.promisifyCall)(this.ctx.clients.healthService, 'Check', { service }, metadata);
24
+ return (0, converters_1.protoToHealthStatus)(response.status);
25
+ }
26
+ /**
27
+ * Watch health status changes via server-side streaming.
28
+ * Returns a HealthWatcher that emits 'status' events with HealthStatus values.
29
+ * Call stop() to cancel the stream.
30
+ *
31
+ * @param service - Optional service name to watch
32
+ * @returns HealthWatcher - EventEmitter with stop() method
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * const watcher = healthService.watch();
37
+ * watcher.on('status', (status: HealthStatus) => {
38
+ * console.log('Health status:', status);
39
+ * });
40
+ * watcher.on('error', (err) => {
41
+ * console.error('Watch error:', err);
42
+ * });
43
+ * watcher.on('end', () => {
44
+ * console.log('Watch stream ended');
45
+ * });
46
+ * // Later, to stop watching:
47
+ * watcher.stop();
48
+ * ```
49
+ */
50
+ watch(service = '') {
51
+ const emitter = new events_1.EventEmitter();
52
+ // Get the Watch method from the health service
53
+ const watchFn = this.ctx.clients.healthService.Watch.bind(this.ctx.clients.healthService);
54
+ // Start the streaming call with metadata
55
+ const metadata = this.ctx.getSessionMetadata();
56
+ const call = watchFn({ service }, metadata);
57
+ // Handle incoming data
58
+ call.on('data', (response) => {
59
+ const status = (0, converters_1.protoToHealthStatus)(response.status);
60
+ emitter.emit('status', status);
61
+ });
62
+ // Handle errors
63
+ call.on('error', (err) => {
64
+ emitter.emit('error', err);
65
+ });
66
+ // Handle stream end
67
+ call.on('end', () => {
68
+ emitter.emit('end');
69
+ });
70
+ // Add stop method to cancel the stream
71
+ emitter.stop = () => {
72
+ call.cancel();
73
+ };
74
+ return emitter;
75
+ }
76
+ }
77
+ exports.HealthService = HealthService;
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaGVhbHRoLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxtQ0FBc0M7QUFHdEMsMENBQTRDO0FBQzVDLDZDQUFtRDtBQVduRDs7R0FFRztBQUNILE1BQWEsYUFBYTtJQUNKO0lBQXBCLFlBQW9CLEdBQW1CO1FBQW5CLFFBQUcsR0FBSCxHQUFHLENBQWdCO0lBQUcsQ0FBQztJQUUzQzs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBa0IsRUFBRTtRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFBLHdCQUFhLEVBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDOUIsT0FBTyxFQUNQLEVBQUUsT0FBTyxFQUFFLEVBQ1gsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPLElBQUEsZ0NBQW1CLEVBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F1Qkc7SUFDSCxLQUFLLENBQUMsVUFBa0IsRUFBRTtRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFZLEVBQW1CLENBQUM7UUFFcEQsK0NBQStDO1FBQy9DLE1BQU0sT0FBTyxHQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQXFCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDaEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUMvQixDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU1Qyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFBLGdDQUFtQixFQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILGdCQUFnQjtRQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVUsRUFBRSxFQUFFO1lBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUNBQXVDO1FBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUE3RUQsc0NBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEhlYWx0aCBzZXJ2aWNlIGhhbmRsZXMgaGVhbHRoIGNoZWNrIG9wZXJhdGlvbnMuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICcuL3NlcnZpY2UtY29udGV4dCc7XHJcbmltcG9ydCB7IEhlYWx0aFN0YXR1cyB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgcHJvbWlzaWZ5Q2FsbCB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgcHJvdG9Ub0hlYWx0aFN0YXR1cyB9IGZyb20gJy4vY29udmVydGVycyc7XHJcblxyXG4vKipcclxuICogSGVhbHRoIHdhdGNoZXIgaW50ZXJmYWNlIGZvciBzdHJlYW1pbmcgaGVhbHRoIHVwZGF0ZXMuXHJcbiAqIEVtaXRzICdzdGF0dXMnIGV2ZW50cyB3aXRoIEhlYWx0aFN0YXR1cyBhbmQgJ2Vycm9yJyBldmVudHMgb24gZmFpbHVyZS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoV2F0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgLyoqIFN0b3Agd2F0Y2hpbmcgaGVhbHRoIHVwZGF0ZXMgKi9cclxuICBzdG9wKCk6IHZvaWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBIZWFsdGggc2VydmljZSBmb3IgY2hlY2tpbmcgc2VydmljZSBoZWFsdGguXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSGVhbHRoU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IFNlcnZpY2VDb250ZXh0KSB7fVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB0aGUgaGVhbHRoIG9mIGEgc2VydmljZS5cclxuICAgKi9cclxuICBhc3luYyBoZWFsdGhDaGVjayhzZXJ2aWNlOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8SGVhbHRoU3RhdHVzPiB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuaGVhbHRoU2VydmljZSxcclxuICAgICAgJ0NoZWNrJyxcclxuICAgICAgeyBzZXJ2aWNlIH0sXHJcbiAgICAgIG1ldGFkYXRhXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBwcm90b1RvSGVhbHRoU3RhdHVzKHJlc3BvbnNlLnN0YXR1cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBoZWFsdGggc3RhdHVzIGNoYW5nZXMgdmlhIHNlcnZlci1zaWRlIHN0cmVhbWluZy5cclxuICAgKiBSZXR1cm5zIGEgSGVhbHRoV2F0Y2hlciB0aGF0IGVtaXRzICdzdGF0dXMnIGV2ZW50cyB3aXRoIEhlYWx0aFN0YXR1cyB2YWx1ZXMuXHJcbiAgICogQ2FsbCBzdG9wKCkgdG8gY2FuY2VsIHRoZSBzdHJlYW0uXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc2VydmljZSAtIE9wdGlvbmFsIHNlcnZpY2UgbmFtZSB0byB3YXRjaFxyXG4gICAqIEByZXR1cm5zIEhlYWx0aFdhdGNoZXIgLSBFdmVudEVtaXR0ZXIgd2l0aCBzdG9wKCkgbWV0aG9kXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGBgYHR5cGVzY3JpcHRcclxuICAgKiBjb25zdCB3YXRjaGVyID0gaGVhbHRoU2VydmljZS53YXRjaCgpO1xyXG4gICAqIHdhdGNoZXIub24oJ3N0YXR1cycsIChzdGF0dXM6IEhlYWx0aFN0YXR1cykgPT4ge1xyXG4gICAqICAgY29uc29sZS5sb2coJ0hlYWx0aCBzdGF0dXM6Jywgc3RhdHVzKTtcclxuICAgKiB9KTtcclxuICAgKiB3YXRjaGVyLm9uKCdlcnJvcicsIChlcnIpID0+IHtcclxuICAgKiAgIGNvbnNvbGUuZXJyb3IoJ1dhdGNoIGVycm9yOicsIGVycik7XHJcbiAgICogfSk7XHJcbiAgICogd2F0Y2hlci5vbignZW5kJywgKCkgPT4ge1xyXG4gICAqICAgY29uc29sZS5sb2coJ1dhdGNoIHN0cmVhbSBlbmRlZCcpO1xyXG4gICAqIH0pO1xyXG4gICAqIC8vIExhdGVyLCB0byBzdG9wIHdhdGNoaW5nOlxyXG4gICAqIHdhdGNoZXIuc3RvcCgpO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIHdhdGNoKHNlcnZpY2U6IHN0cmluZyA9ICcnKTogSGVhbHRoV2F0Y2hlciB7XHJcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpIGFzIEhlYWx0aFdhdGNoZXI7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBXYXRjaCBtZXRob2QgZnJvbSB0aGUgaGVhbHRoIHNlcnZpY2VcclxuICAgIGNvbnN0IHdhdGNoRm4gPSAodGhpcy5jdHguY2xpZW50cy5oZWFsdGhTZXJ2aWNlIGFzIGFueSkuV2F0Y2guYmluZChcclxuICAgICAgdGhpcy5jdHguY2xpZW50cy5oZWFsdGhTZXJ2aWNlXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFN0YXJ0IHRoZSBzdHJlYW1pbmcgY2FsbCB3aXRoIG1ldGFkYXRhXHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xyXG4gICAgY29uc3QgY2FsbCA9IHdhdGNoRm4oeyBzZXJ2aWNlIH0sIG1ldGFkYXRhKTtcclxuXHJcbiAgICAvLyBIYW5kbGUgaW5jb21pbmcgZGF0YVxyXG4gICAgY2FsbC5vbignZGF0YScsIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHByb3RvVG9IZWFsdGhTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKTtcclxuICAgICAgZW1pdHRlci5lbWl0KCdzdGF0dXMnLCBzdGF0dXMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gSGFuZGxlIGVycm9yc1xyXG4gICAgY2FsbC5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICBlbWl0dGVyLmVtaXQoJ2Vycm9yJywgZXJyKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEhhbmRsZSBzdHJlYW0gZW5kXHJcbiAgICBjYWxsLm9uKCdlbmQnLCAoKSA9PiB7XHJcbiAgICAgIGVtaXR0ZXIuZW1pdCgnZW5kJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBZGQgc3RvcCBtZXRob2QgdG8gY2FuY2VsIHRoZSBzdHJlYW1cclxuICAgIGVtaXR0ZXIuc3RvcCA9ICgpID0+IHtcclxuICAgICAgY2FsbC5jYW5jZWwoKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGVtaXR0ZXI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Barrel export for all service classes.
3
+ */
4
+ export * from './service-context';
5
+ export * from './converters';
6
+ export * from './session-service';
7
+ export * from './query-service';
8
+ export * from './graph-service';
9
+ export * from './transaction-service';
10
+ export * from './data-service';
11
+ export * from './health-service';
12
+ export * from './admin-service';
13
+ export * from './bulk-import-service';
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Barrel export for all service classes.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./service-context"), exports);
21
+ __exportStar(require("./converters"), exports);
22
+ __exportStar(require("./session-service"), exports);
23
+ __exportStar(require("./query-service"), exports);
24
+ __exportStar(require("./graph-service"), exports);
25
+ __exportStar(require("./transaction-service"), exports);
26
+ __exportStar(require("./data-service"), exports);
27
+ __exportStar(require("./health-service"), exports);
28
+ __exportStar(require("./admin-service"), exports);
29
+ __exportStar(require("./bulk-import-service"), exports);
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQWtDO0FBQ2xDLCtDQUE2QjtBQUM3QixvREFBa0M7QUFDbEMsa0RBQWdDO0FBQ2hDLGtEQUFnQztBQUNoQyx3REFBc0M7QUFDdEMsaURBQStCO0FBQy9CLG1EQUFpQztBQUNqQyxrREFBZ0M7QUFDaEMsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEJhcnJlbCBleHBvcnQgZm9yIGFsbCBzZXJ2aWNlIGNsYXNzZXMuXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlLWNvbnRleHQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbnZlcnRlcnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24tc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZ3JhcGgtc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNhY3Rpb24tc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9oZWFsdGgtc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYWRtaW4tc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYnVsay1pbXBvcnQtc2VydmljZSc7XHJcbiJdfQ==
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Query service handles GQL query execution.
3
+ */
4
+ import { ServiceContext } from './service-context';
5
+ import { Response } from '../response';
6
+ import { QueryConfig } from '../client';
7
+ /**
8
+ * Query service for executing GQL queries.
9
+ */
10
+ export declare class QueryService {
11
+ private ctx;
12
+ constructor(ctx: ServiceContext);
13
+ /**
14
+ * Calculate timeout with the following priority:
15
+ * 1. QueryConfig.timeout (highest priority) - explicitly specified timeout
16
+ * 2. Context deadline (medium priority) - remaining time from context deadline
17
+ * 3. client.config.timeout (default) - default timeout from client config
18
+ *
19
+ * @param config Optional query configuration
20
+ * @returns Timeout in milliseconds
21
+ */
22
+ private calculateTimeout;
23
+ /**
24
+ * Execute a GQL query and return the result.
25
+ */
26
+ gql(query: string, config?: QueryConfig): Promise<Response>;
27
+ /**
28
+ * Execute a GQL query and stream the results.
29
+ */
30
+ gqlStream(query: string, config?: QueryConfig, callback?: (response: Response) => void): Promise<void>;
31
+ /**
32
+ * Return the execution plan for a query.
33
+ */
34
+ explain(query: string, config?: QueryConfig): Promise<string>;
35
+ /**
36
+ * Execute a query with profiling and return statistics.
37
+ */
38
+ profile(query: string, config?: QueryConfig): Promise<string>;
39
+ }
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Query service handles GQL query execution.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.QueryService = void 0;
7
+ const errors_1 = require("../errors");
8
+ const services_1 = require("../services");
9
+ const converters_1 = require("./converters");
10
+ /**
11
+ * Query service for executing GQL queries.
12
+ */
13
+ class QueryService {
14
+ ctx;
15
+ constructor(ctx) {
16
+ this.ctx = ctx;
17
+ }
18
+ /**
19
+ * Calculate timeout with the following priority:
20
+ * 1. QueryConfig.timeout (highest priority) - explicitly specified timeout
21
+ * 2. Context deadline (medium priority) - remaining time from context deadline
22
+ * 3. client.config.timeout (default) - default timeout from client config
23
+ *
24
+ * @param config Optional query configuration
25
+ * @returns Timeout in milliseconds
26
+ */
27
+ calculateTimeout(config) {
28
+ // Priority 1: Use explicitly specified timeout from QueryConfig
29
+ if (config?.timeout && config.timeout > 0) {
30
+ return config.timeout;
31
+ }
32
+ // Priority 2: Context deadline support
33
+ // Note: Node.js SDK doesn't currently expose context deadline parameter
34
+ // This is left for future enhancement
35
+ // Priority 3: Use default timeout from client config
36
+ return this.ctx.config.timeout || 30000;
37
+ }
38
+ /**
39
+ * Execute a GQL query and return the result.
40
+ */
41
+ async gql(query, config) {
42
+ if (!query) {
43
+ throw new errors_1.EmptyQueryError();
44
+ }
45
+ const session = this.ctx.sessions.getSession();
46
+ const request = (0, converters_1.buildGqlRequest)(query, session, this.ctx.config, config);
47
+ const timeoutMs = this.calculateTimeout(config);
48
+ try {
49
+ const metadata = this.ctx.getSessionMetadata();
50
+ const response = await (0, services_1.promisifyCallWithDeadline)(this.ctx.clients.queryService, 'Gql', request, timeoutMs, metadata);
51
+ this.ctx.updateActivity();
52
+ return (0, converters_1.convertGqlResponse)(response);
53
+ }
54
+ catch (error) {
55
+ throw new errors_1.QueryFailedError(error.message || 'Query failed');
56
+ }
57
+ }
58
+ /**
59
+ * Execute a GQL query and stream the results.
60
+ */
61
+ async gqlStream(query, config, callback) {
62
+ if (!query) {
63
+ throw new errors_1.EmptyQueryError();
64
+ }
65
+ const session = this.ctx.sessions.getSession();
66
+ const request = (0, converters_1.buildGqlRequest)(query, session, this.ctx.config, config);
67
+ const metadata = this.ctx.getSessionMetadata();
68
+ const timeoutMs = this.calculateTimeout(config);
69
+ const deadline = new Date(Date.now() + timeoutMs);
70
+ return new Promise((resolve, reject) => {
71
+ const stream = this.ctx.clients.queryService.GqlStream(request, metadata, { deadline });
72
+ stream.on('data', (response) => {
73
+ this.ctx.updateActivity();
74
+ if (callback) {
75
+ callback((0, converters_1.convertGqlResponse)(response));
76
+ }
77
+ });
78
+ stream.on('end', () => resolve());
79
+ stream.on('error', (error) => reject(new errors_1.QueryFailedError(error.message)));
80
+ });
81
+ }
82
+ /**
83
+ * Return the execution plan for a query.
84
+ */
85
+ async explain(query, config) {
86
+ if (!query) {
87
+ throw new errors_1.EmptyQueryError();
88
+ }
89
+ const session = this.ctx.sessions.getSession();
90
+ const request = (0, converters_1.buildGqlRequest)(query, session, this.ctx.config, config);
91
+ const metadata = this.ctx.getSessionMetadata();
92
+ const timeoutMs = this.calculateTimeout(config);
93
+ const response = await (0, services_1.promisifyCallWithDeadline)(this.ctx.clients.queryService, 'Explain', request, timeoutMs, metadata);
94
+ return response.plan || '';
95
+ }
96
+ /**
97
+ * Execute a query with profiling and return statistics.
98
+ */
99
+ async profile(query, config) {
100
+ if (!query) {
101
+ throw new errors_1.EmptyQueryError();
102
+ }
103
+ const session = this.ctx.sessions.getSession();
104
+ const request = (0, converters_1.buildGqlRequest)(query, session, this.ctx.config, config);
105
+ const metadata = this.ctx.getSessionMetadata();
106
+ const timeoutMs = this.calculateTimeout(config);
107
+ const response = await (0, services_1.promisifyCallWithDeadline)(this.ctx.clients.queryService, 'Profile', request, timeoutMs, metadata);
108
+ return response.profile || '';
109
+ }
110
+ }
111
+ exports.QueryService = QueryService;
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9xdWVyeS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBSUgsc0NBQThEO0FBQzlELDBDQUF3RDtBQUN4RCw2Q0FHc0I7QUFHdEI7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFDSDtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7Ozs7Ozs7O09BUUc7SUFDSyxnQkFBZ0IsQ0FBQyxNQUFvQjtRQUMzQyxnRUFBZ0U7UUFDaEUsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsd0VBQXdFO1FBQ3hFLHNDQUFzQztRQUV0QyxxREFBcUQ7UUFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQW9CO1FBQzNDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSx3QkFBZSxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUEsNEJBQWUsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FB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b0NBeUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFF1ZXJ5IHNlcnZpY2UgaGFuZGxlcyBHUUwgcXVlcnkgZXhlY3V0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnLi9zZXJ2aWNlLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4uL3Jlc3BvbnNlJztcclxuaW1wb3J0IHsgRW1wdHlRdWVyeUVycm9yLCBRdWVyeUZhaWxlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcclxuaW1wb3J0IHsgcHJvbWlzaWZ5Q2FsbFdpdGhEZWFkbGluZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHtcclxuICBidWlsZEdxbFJlcXVlc3QsXHJcbiAgY29udmVydEdxbFJlc3BvbnNlLFxyXG59IGZyb20gJy4vY29udmVydGVycyc7XHJcbmltcG9ydCB7IFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vY2xpZW50JztcclxuXHJcbi8qKlxyXG4gKiBRdWVyeSBzZXJ2aWNlIGZvciBleGVjdXRpbmcgR1FMIHF1ZXJpZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN0eDogU2VydmljZUNvbnRleHQpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSB0aW1lb3V0IHdpdGggdGhlIGZvbGxvd2luZyBwcmlvcml0eTpcclxuICAgKiAxLiBRdWVyeUNvbmZpZy50aW1lb3V0IChoaWdoZXN0IHByaW9yaXR5KSAtIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHRpbWVvdXRcclxuICAgKiAyLiBDb250ZXh0IGRlYWRsaW5lIChtZWRpdW0gcHJpb3JpdHkpIC0gcmVtYWluaW5nIHRpbWUgZnJvbSBjb250ZXh0IGRlYWRsaW5lXHJcbiAgICogMy4gY2xpZW50LmNvbmZpZy50aW1lb3V0IChkZWZhdWx0KSAtIGRlZmF1bHQgdGltZW91dCBmcm9tIGNsaWVudCBjb25maWdcclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgcXVlcnkgY29uZmlndXJhdGlvblxyXG4gICAqIEByZXR1cm5zIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVUaW1lb3V0KGNvbmZpZz86IFF1ZXJ5Q29uZmlnKTogbnVtYmVyIHtcclxuICAgIC8vIFByaW9yaXR5IDE6IFVzZSBleHBsaWNpdGx5IHNwZWNpZmllZCB0aW1lb3V0IGZyb20gUXVlcnlDb25maWdcclxuICAgIGlmIChjb25maWc/LnRpbWVvdXQgJiYgY29uZmlnLnRpbWVvdXQgPiAwKSB7XHJcbiAgICAgIHJldHVybiBjb25maWcudGltZW91dDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQcmlvcml0eSAyOiBDb250ZXh0IGRlYWRsaW5lIHN1cHBvcnRcclxuICAgIC8vIE5vdGU6IE5vZGUuanMgU0RLIGRvZXNuJ3QgY3VycmVudGx5IGV4cG9zZSBjb250ZXh0IGRlYWRsaW5lIHBhcmFtZXRlclxyXG4gICAgLy8gVGhpcyBpcyBsZWZ0IGZvciBmdXR1cmUgZW5oYW5jZW1lbnRcclxuXHJcbiAgICAvLyBQcmlvcml0eSAzOiBVc2UgZGVmYXVsdCB0aW1lb3V0IGZyb20gY2xpZW50IGNvbmZpZ1xyXG4gICAgcmV0dXJuIHRoaXMuY3R4LmNvbmZpZy50aW1lb3V0IHx8IDMwMDAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhlY3V0ZSBhIEdRTCBxdWVyeSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXHJcbiAgICovXHJcbiAgYXN5bmMgZ3FsKHF1ZXJ5OiBzdHJpbmcsIGNvbmZpZz86IFF1ZXJ5Q29uZmlnKTogUHJvbWlzZTxSZXNwb25zZT4ge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICB0aHJvdyBuZXcgRW1wdHlRdWVyeUVycm9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3R4LnNlc3Npb25zLmdldFNlc3Npb24oKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZEdxbFJlcXVlc3QocXVlcnksIHNlc3Npb24sIHRoaXMuY3R4LmNvbmZpZywgY29uZmlnKTtcclxuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsV2l0aERlYWRsaW5lKFxyXG4gICAgICAgIHRoaXMuY3R4LmNsaWVudHMucXVlcnlTZXJ2aWNlLFxyXG4gICAgICAgICdHcWwnLFxyXG4gICAgICAgIHJlcXVlc3QsXHJcbiAgICAgICAgdGltZW91dE1zLFxyXG4gICAgICAgIG1ldGFkYXRhXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmN0eC51cGRhdGVBY3Rpdml0eSgpO1xyXG4gICAgICByZXR1cm4gY29udmVydEdxbFJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RmFpbGVkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCAnUXVlcnkgZmFpbGVkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGEgR1FMIHF1ZXJ5IGFuZCBzdHJlYW0gdGhlIHJlc3VsdHMuXHJcbiAgICovXHJcbiAgYXN5bmMgZ3FsU3RyZWFtKFxyXG4gICAgcXVlcnk6IHN0cmluZyxcclxuICAgIGNvbmZpZz86IFF1ZXJ5Q29uZmlnLFxyXG4gICAgY2FsbGJhY2s/OiAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB2b2lkXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXF1ZXJ5KSB7XHJcbiAgICAgIHRocm93IG5ldyBFbXB0eVF1ZXJ5RXJyb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdHguc2Vzc2lvbnMuZ2V0U2Vzc2lvbigpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcclxuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xyXG4gICAgY29uc3QgZGVhZGxpbmUgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgdGltZW91dE1zKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBzdHJlYW0gPSAodGhpcy5jdHguY2xpZW50cy5xdWVyeVNlcnZpY2UgYXMgYW55KS5HcWxTdHJlYW0oXHJcbiAgICAgICAgcmVxdWVzdCxcclxuICAgICAgICBtZXRhZGF0YSxcclxuICAgICAgICB7IGRlYWRsaW5lIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHgudXBkYXRlQWN0aXZpdHkoKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgIGNhbGxiYWNrKGNvbnZlcnRHcWxSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoKSk7XHJcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KG5ldyBRdWVyeUZhaWxlZEVycm9yKGVycm9yLm1lc3NhZ2UpKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgZXhlY3V0aW9uIHBsYW4gZm9yIGEgcXVlcnkuXHJcbiAgICovXHJcbiAgYXN5bmMgZXhwbGFpbihxdWVyeTogc3RyaW5nLCBjb25maWc/OiBRdWVyeUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBpZiAoIXF1ZXJ5KSB7XHJcbiAgICAgIHRocm93IG5ldyBFbXB0eVF1ZXJ5RXJyb3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdHguc2Vzc2lvbnMuZ2V0U2Vzc2lvbigpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcclxuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGxXaXRoRGVhZGxpbmUoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMucXVlcnlTZXJ2aWNlLFxyXG4gICAgICAnRXhwbGFpbicsXHJcbiAgICAgIHJlcXVlc3QsXHJcbiAgICAgIHRpbWVvdXRNcyxcclxuICAgICAgbWV0YWRhdGFcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3BvbnNlLnBsYW4gfHwgJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeGVjdXRlIGEgcXVlcnkgd2l0aCBwcm9maWxpbmcgYW5kIHJldHVybiBzdGF0aXN0aWNzLlxyXG4gICAqL1xyXG4gIGFzeW5jIHByb2ZpbGUocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICB0aHJvdyBuZXcgRW1wdHlRdWVyeUVycm9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3R4LnNlc3Npb25zLmdldFNlc3Npb24oKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZEdxbFJlcXVlc3QocXVlcnksIHNlc3Npb24sIHRoaXMuY3R4LmNvbmZpZywgY29uZmlnKTtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XHJcbiAgICBjb25zdCB0aW1lb3V0TXMgPSB0aGlzLmNhbGN1bGF0ZVRpbWVvdXQoY29uZmlnKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsV2l0aERlYWRsaW5lKFxyXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLnF1ZXJ5U2VydmljZSxcclxuICAgICAgJ1Byb2ZpbGUnLFxyXG4gICAgICByZXF1ZXN0LFxyXG4gICAgICB0aW1lb3V0TXMsXHJcbiAgICAgIG1ldGFkYXRhXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiByZXNwb25zZS5wcm9maWxlIHx8ICcnO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Shared context for all service classes.
3
+ * Contains gRPC clients, managers, and configuration.
4
+ */
5
+ import * as grpc from '@grpc/grpc-js';
6
+ import { GqldbConfig } from '../config';
7
+ import { SessionManager } from '../session';
8
+ import { TransactionManager } from '../transaction';
9
+ /**
10
+ * Service client types for gRPC communication.
11
+ */
12
+ export interface ServiceClients {
13
+ sessionService: grpc.Client;
14
+ queryService: grpc.Client;
15
+ graphService: grpc.Client;
16
+ transactionService: grpc.Client;
17
+ dataService: grpc.Client;
18
+ healthService: grpc.Client;
19
+ adminService: grpc.Client;
20
+ bulkImportService: grpc.Client;
21
+ }
22
+ /**
23
+ * Service context holds shared dependencies for all service classes.
24
+ */
25
+ export declare class ServiceContext {
26
+ readonly config: GqldbConfig;
27
+ readonly sessions: SessionManager;
28
+ readonly txManager: TransactionManager;
29
+ readonly clients: ServiceClients;
30
+ constructor(config: GqldbConfig, sessions: SessionManager, txManager: TransactionManager, clients: ServiceClients);
31
+ /**
32
+ * Get session metadata for authenticated requests.
33
+ */
34
+ getSessionMetadata(): grpc.Metadata;
35
+ /**
36
+ * Update session activity timestamp.
37
+ */
38
+ updateActivity(): void;
39
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Shared context for all service classes.
4
+ * Contains gRPC clients, managers, and configuration.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ServiceContext = void 0;
41
+ const grpc = __importStar(require("@grpc/grpc-js"));
42
+ /**
43
+ * Service context holds shared dependencies for all service classes.
44
+ */
45
+ class ServiceContext {
46
+ config;
47
+ sessions;
48
+ txManager;
49
+ clients;
50
+ constructor(config, sessions, txManager, clients) {
51
+ this.config = config;
52
+ this.sessions = sessions;
53
+ this.txManager = txManager;
54
+ this.clients = clients;
55
+ }
56
+ /**
57
+ * Get session metadata for authenticated requests.
58
+ */
59
+ getSessionMetadata() {
60
+ const metadata = new grpc.Metadata();
61
+ const session = this.sessions.getSession();
62
+ metadata.add('session-id', session?.id?.toString() || '0');
63
+ return metadata;
64
+ }
65
+ /**
66
+ * Update session activity timestamp.
67
+ */
68
+ updateActivity() {
69
+ this.sessions.updateActivity();
70
+ }
71
+ }
72
+ exports.ServiceContext = ServiceContext;
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NlcnZpY2UtY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxvREFBc0M7QUFtQnRDOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBRVA7SUFDQTtJQUNBO0lBQ0E7SUFKbEIsWUFDa0IsTUFBbUIsRUFDbkIsUUFBd0IsRUFDeEIsU0FBNkIsRUFDN0IsT0FBdUI7UUFIdkIsV0FBTSxHQUFOLE1BQU0sQ0FBYTtRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUM3QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtJQUN0QyxDQUFDO0lBRUo7O09BRUc7SUFDSCxrQkFBa0I7UUFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQXhCRCx3Q0F3QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogU2hhcmVkIGNvbnRleHQgZm9yIGFsbCBzZXJ2aWNlIGNsYXNzZXMuXHJcbiAqIENvbnRhaW5zIGdSUEMgY2xpZW50cywgbWFuYWdlcnMsIGFuZCBjb25maWd1cmF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCAqIGFzIGdycGMgZnJvbSAnQGdycGMvZ3JwYy1qcyc7XHJcbmltcG9ydCB7IEdxbGRiQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1hbmFnZXIgfSBmcm9tICcuLi9zZXNzaW9uJztcclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25NYW5hZ2VyIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24nO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2xpZW50IHR5cGVzIGZvciBnUlBDIGNvbW11bmljYXRpb24uXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VDbGllbnRzIHtcclxuICBzZXNzaW9uU2VydmljZTogZ3JwYy5DbGllbnQ7XHJcbiAgcXVlcnlTZXJ2aWNlOiBncnBjLkNsaWVudDtcclxuICBncmFwaFNlcnZpY2U6IGdycGMuQ2xpZW50O1xyXG4gIHRyYW5zYWN0aW9uU2VydmljZTogZ3JwYy5DbGllbnQ7XHJcbiAgZGF0YVNlcnZpY2U6IGdycGMuQ2xpZW50O1xyXG4gIGhlYWx0aFNlcnZpY2U6IGdycGMuQ2xpZW50O1xyXG4gIGFkbWluU2VydmljZTogZ3JwYy5DbGllbnQ7XHJcbiAgYnVsa0ltcG9ydFNlcnZpY2U6IGdycGMuQ2xpZW50O1xyXG59XHJcblxyXG4vKipcclxuICogU2VydmljZSBjb250ZXh0IGhvbGRzIHNoYXJlZCBkZXBlbmRlbmNpZXMgZm9yIGFsbCBzZXJ2aWNlIGNsYXNzZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2VydmljZUNvbnRleHQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogR3FsZGJDb25maWcsXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2Vzc2lvbnM6IFNlc3Npb25NYW5hZ2VyLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHR4TWFuYWdlcjogVHJhbnNhY3Rpb25NYW5hZ2VyLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IGNsaWVudHM6IFNlcnZpY2VDbGllbnRzXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgc2Vzc2lvbiBtZXRhZGF0YSBmb3IgYXV0aGVudGljYXRlZCByZXF1ZXN0cy5cclxuICAgKi9cclxuICBnZXRTZXNzaW9uTWV0YWRhdGEoKTogZ3JwYy5NZXRhZGF0YSB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IG5ldyBncnBjLk1ldGFkYXRhKCk7XHJcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XHJcbiAgICBtZXRhZGF0YS5hZGQoJ3Nlc3Npb24taWQnLCBzZXNzaW9uPy5pZD8udG9TdHJpbmcoKSB8fCAnMCcpO1xyXG4gICAgcmV0dXJuIG1ldGFkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHNlc3Npb24gYWN0aXZpdHkgdGltZXN0YW1wLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUFjdGl2aXR5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXNzaW9ucy51cGRhdGVBY3Rpdml0eSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Session service handles authentication and session lifecycle.
3
+ */
4
+ import { ServiceContext } from './service-context';
5
+ import { Session } from '../session';
6
+ /**
7
+ * Session service for authentication and session management.
8
+ */
9
+ export declare class SessionService {
10
+ private ctx;
11
+ constructor(ctx: ServiceContext);
12
+ /**
13
+ * Authenticate the user and create a session.
14
+ */
15
+ login(username: string, password: string, defaultGraph: string): Promise<Session>;
16
+ /**
17
+ * Terminate the current session.
18
+ */
19
+ logout(): Promise<void>;
20
+ /**
21
+ * Check the connection and return the latency in nanoseconds.
22
+ */
23
+ ping(): Promise<number>;
24
+ }