@carlonicora/nestjs-neo4jsonapi 8.15.0 → 8.16.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 (107) hide show
  1. package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
  2. package/dist/bootstrap/app.module.factory.js +9 -0
  3. package/dist/bootstrap/app.module.factory.js.map +1 -1
  4. package/dist/bootstrap/bootstrap.options.d.ts +10 -0
  5. package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
  6. package/dist/common/helpers/define-entity.d.ts.map +1 -1
  7. package/dist/common/helpers/define-entity.js +3 -0
  8. package/dist/common/helpers/define-entity.js.map +1 -1
  9. package/dist/common/registries/entity-descriptor.registry.d.ts +22 -0
  10. package/dist/common/registries/entity-descriptor.registry.d.ts.map +1 -0
  11. package/dist/common/registries/entity-descriptor.registry.js +51 -0
  12. package/dist/common/registries/entity-descriptor.registry.js.map +1 -0
  13. package/dist/common/registries/index.d.ts +1 -0
  14. package/dist/common/registries/index.d.ts.map +1 -1
  15. package/dist/common/registries/index.js +1 -0
  16. package/dist/common/registries/index.js.map +1 -1
  17. package/dist/core/cors/services/cors.service.d.ts +4 -1
  18. package/dist/core/cors/services/cors.service.d.ts.map +1 -1
  19. package/dist/core/cors/services/cors.service.js +19 -3
  20. package/dist/core/cors/services/cors.service.js.map +1 -1
  21. package/dist/core/neo4j/abstracts/abstract.repository.d.ts +2 -0
  22. package/dist/core/neo4j/abstracts/abstract.repository.d.ts.map +1 -1
  23. package/dist/core/neo4j/abstracts/abstract.repository.js +4 -1
  24. package/dist/core/neo4j/abstracts/abstract.repository.js.map +1 -1
  25. package/dist/core/neo4j/abstracts/abstract.service.d.ts +6 -0
  26. package/dist/core/neo4j/abstracts/abstract.service.d.ts.map +1 -1
  27. package/dist/core/neo4j/abstracts/abstract.service.js +16 -0
  28. package/dist/core/neo4j/abstracts/abstract.service.js.map +1 -1
  29. package/dist/core/neo4j/helpers/build-filter-clauses.d.ts.map +1 -1
  30. package/dist/core/neo4j/helpers/build-filter-clauses.js +8 -1
  31. package/dist/core/neo4j/helpers/build-filter-clauses.js.map +1 -1
  32. package/dist/core/offline/index.d.ts +5 -0
  33. package/dist/core/offline/index.d.ts.map +1 -0
  34. package/dist/core/offline/index.js +21 -0
  35. package/dist/core/offline/index.js.map +1 -0
  36. package/dist/core/offline/offline-request.context.d.ts +12 -0
  37. package/dist/core/offline/offline-request.context.d.ts.map +1 -0
  38. package/dist/core/offline/offline-request.context.js +34 -0
  39. package/dist/core/offline/offline-request.context.js.map +1 -0
  40. package/dist/core/offline/offline-request.interceptor.d.ts +15 -0
  41. package/dist/core/offline/offline-request.interceptor.d.ts.map +1 -0
  42. package/dist/core/offline/offline-request.interceptor.js +43 -0
  43. package/dist/core/offline/offline-request.interceptor.js.map +1 -0
  44. package/dist/core/offline/offline.constants.d.ts +12 -0
  45. package/dist/core/offline/offline.constants.d.ts.map +1 -0
  46. package/dist/core/offline/offline.constants.js +12 -0
  47. package/dist/core/offline/offline.constants.js.map +1 -0
  48. package/dist/core/offline/offline.module.d.ts +12 -0
  49. package/dist/core/offline/offline.module.d.ts.map +1 -0
  50. package/dist/core/offline/offline.module.js +42 -0
  51. package/dist/core/offline/offline.module.js.map +1 -0
  52. package/dist/foundations/chunker/services/types/pdf.service.d.ts.map +1 -1
  53. package/dist/foundations/chunker/services/types/pdf.service.js +9 -5
  54. package/dist/foundations/chunker/services/types/pdf.service.js.map +1 -1
  55. package/dist/foundations/offline-change-set/decorators/offline-replayable.decorator.d.ts +7 -0
  56. package/dist/foundations/offline-change-set/decorators/offline-replayable.decorator.d.ts.map +1 -0
  57. package/dist/foundations/offline-change-set/decorators/offline-replayable.decorator.js +12 -0
  58. package/dist/foundations/offline-change-set/decorators/offline-replayable.decorator.js.map +1 -0
  59. package/dist/foundations/offline-change-set/dtos/offline-change-set.post.dto.d.ts +33 -0
  60. package/dist/foundations/offline-change-set/dtos/offline-change-set.post.dto.d.ts.map +1 -0
  61. package/dist/foundations/offline-change-set/dtos/offline-change-set.post.dto.js +133 -0
  62. package/dist/foundations/offline-change-set/dtos/offline-change-set.post.dto.js.map +1 -0
  63. package/dist/foundations/offline-change-set/entities/offline-change-set.d.ts +66 -0
  64. package/dist/foundations/offline-change-set/entities/offline-change-set.d.ts.map +1 -0
  65. package/dist/foundations/offline-change-set/entities/offline-change-set.js +31 -0
  66. package/dist/foundations/offline-change-set/entities/offline-change-set.js.map +1 -0
  67. package/dist/foundations/offline-change-set/entities/offline-change-set.meta.d.ts +3 -0
  68. package/dist/foundations/offline-change-set/entities/offline-change-set.meta.d.ts.map +1 -0
  69. package/dist/foundations/offline-change-set/entities/offline-change-set.meta.js +10 -0
  70. package/dist/foundations/offline-change-set/entities/offline-change-set.meta.js.map +1 -0
  71. package/dist/foundations/offline-change-set/index.d.ts +11 -0
  72. package/dist/foundations/offline-change-set/index.d.ts.map +1 -0
  73. package/dist/foundations/offline-change-set/index.js +27 -0
  74. package/dist/foundations/offline-change-set/index.js.map +1 -0
  75. package/dist/foundations/offline-change-set/merge/deep-equal.d.ts +6 -0
  76. package/dist/foundations/offline-change-set/merge/deep-equal.d.ts.map +1 -0
  77. package/dist/foundations/offline-change-set/merge/deep-equal.js +31 -0
  78. package/dist/foundations/offline-change-set/merge/deep-equal.js.map +1 -0
  79. package/dist/foundations/offline-change-set/merge/merge-blocks.d.ts +37 -0
  80. package/dist/foundations/offline-change-set/merge/merge-blocks.d.ts.map +1 -0
  81. package/dist/foundations/offline-change-set/merge/merge-blocks.js +108 -0
  82. package/dist/foundations/offline-change-set/merge/merge-blocks.js.map +1 -0
  83. package/dist/foundations/offline-change-set/merge/three-way-merge.d.ts +57 -0
  84. package/dist/foundations/offline-change-set/merge/three-way-merge.d.ts.map +1 -0
  85. package/dist/foundations/offline-change-set/merge/three-way-merge.js +201 -0
  86. package/dist/foundations/offline-change-set/merge/three-way-merge.js.map +1 -0
  87. package/dist/foundations/offline-change-set/offline-change-set.module.d.ts +11 -0
  88. package/dist/foundations/offline-change-set/offline-change-set.module.d.ts.map +1 -0
  89. package/dist/foundations/offline-change-set/offline-change-set.module.js +41 -0
  90. package/dist/foundations/offline-change-set/offline-change-set.module.js.map +1 -0
  91. package/dist/foundations/offline-change-set/repositories/offline-change-set.repository.d.ts +26 -0
  92. package/dist/foundations/offline-change-set/repositories/offline-change-set.repository.d.ts.map +1 -0
  93. package/dist/foundations/offline-change-set/repositories/offline-change-set.repository.js +56 -0
  94. package/dist/foundations/offline-change-set/repositories/offline-change-set.repository.js.map +1 -0
  95. package/dist/foundations/offline-change-set/services/offline-change-set.service.d.ts +72 -0
  96. package/dist/foundations/offline-change-set/services/offline-change-set.service.d.ts.map +1 -0
  97. package/dist/foundations/offline-change-set/services/offline-change-set.service.js +333 -0
  98. package/dist/foundations/offline-change-set/services/offline-change-set.service.js.map +1 -0
  99. package/dist/foundations/offline-change-set/services/offline-route-runner.service.d.ts +61 -0
  100. package/dist/foundations/offline-change-set/services/offline-route-runner.service.d.ts.map +1 -0
  101. package/dist/foundations/offline-change-set/services/offline-route-runner.service.js +192 -0
  102. package/dist/foundations/offline-change-set/services/offline-route-runner.service.js.map +1 -0
  103. package/dist/index.d.ts +2 -0
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +3 -0
  106. package/dist/index.js.map +1 -1
  107. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline-route-runner.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/offline-change-set/services/offline-route-runner.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM9C;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED,6EAA6E;AAC7E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,OAAO,CAO9F;AAED,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7E,+FAA+F;AAC/F,MAAM,MAAM,kBAAkB,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAW3G;;;;;;;;;;;GAWG;AACH,qBACa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,MAAM,CAA2B;gBAGtB,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS;IAGjC,GAAG,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,kBAAkB,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,OAAO,EAAE,cAAc,CAAC;KACzB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+B/B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,KAAK;IASb;;;OAGG;IACH,OAAO,CAAC,KAAK;IA0Bb,OAAO,CAAC,WAAW;CA4BpB"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OfflineRouteRunner = void 0;
13
+ exports.offlineInternalToken = offlineInternalToken;
14
+ exports.isOfflineInternalRequest = isOfflineInternalRequest;
15
+ const common_1 = require("@nestjs/common");
16
+ const constants_1 = require("@nestjs/common/constants");
17
+ const core_1 = require("@nestjs/core");
18
+ const crypto_1 = require("crypto");
19
+ const offline_constants_1 = require("../../../core/offline/offline.constants");
20
+ const offline_replayable_decorator_1 = require("../decorators/offline-replayable.decorator");
21
+ let processToken;
22
+ /**
23
+ * The per-process token every step of an offline change set carries in `x-offline-internal`.
24
+ * Random, generated on first use, never leaves the process: only requests this runner injects
25
+ * carry it, so the throttler can tell them from client requests (one package = one request).
26
+ */
27
+ function offlineInternalToken() {
28
+ if (!processToken)
29
+ processToken = (0, crypto_1.randomBytes)(32).toString("hex");
30
+ return processToken;
31
+ }
32
+ /** True when the headers carry this process's `x-offline-internal` token. */
33
+ function isOfflineInternalRequest(headers) {
34
+ const raw = headers?.[offline_constants_1.OFFLINE_INTERNAL_HEADER];
35
+ const value = Array.isArray(raw) ? raw[0] : raw;
36
+ if (typeof value !== "string" || value.length === 0)
37
+ return false;
38
+ const expected = Buffer.from(offlineInternalToken());
39
+ const given = Buffer.from(value);
40
+ return given.length === expected.length && (0, crypto_1.timingSafeEqual)(given, expected);
41
+ }
42
+ /** Headers of the caller's request carried into every injected step. */
43
+ const FORWARDED_HEADERS = ["authorization", "x-language", "x-companyid"];
44
+ const splitPath = (path) => path.split("/").filter((s) => s.length > 0);
45
+ const firstPath = (value) => (Array.isArray(value) ? String(value[0] ?? "") : String(value ?? ""));
46
+ /**
47
+ * Runs one step of an offline change set through the app's own route with Fastify `inject`,
48
+ * as the caller: the caller's `Authorization`, `x-language` and `x-companyid` headers, plus
49
+ * `x-offline-replay: 1` and the process token. Every read and write therefore goes through
50
+ * the app's controller → service → repository, with its guards, validation and checks.
51
+ *
52
+ * A write (POST/PUT/PATCH/DELETE) runs only when the route that would answer it carries
53
+ * `@OfflineReplayable()`; any other write is refused without running. A GET (reading the
54
+ * current record before a merge) needs no marker: it changes nothing.
55
+ *
56
+ * Infrastructure provider: it owns no entity and touches no Neo4j itself.
57
+ */
58
+ let OfflineRouteRunner = class OfflineRouteRunner {
59
+ constructor(adapterHost, discovery, metadataScanner, reflector) {
60
+ this.adapterHost = adapterHost;
61
+ this.discovery = discovery;
62
+ this.metadataScanner = metadataScanner;
63
+ this.reflector = reflector;
64
+ }
65
+ async run(params) {
66
+ const url = this.normalise(params.path);
67
+ if (url === undefined)
68
+ return { ran: false, detail: `${params.method} ${params.path} is not a path an offline change set can run` };
69
+ if (params.method !== "GET") {
70
+ const route = this.match(params.method, url.split("?")[0]);
71
+ if (!route?.replayable)
72
+ return { ran: false, detail: `${params.method} ${url} cannot be run from an offline change set` };
73
+ }
74
+ const headers = {};
75
+ const source = (params.request?.headers ?? {});
76
+ for (const name of FORWARDED_HEADERS) {
77
+ const value = source[name];
78
+ if (typeof value === "string" && value.length > 0)
79
+ headers[name] = value;
80
+ }
81
+ headers[offline_constants_1.OFFLINE_REPLAY_HEADER] = "1";
82
+ headers[offline_constants_1.OFFLINE_INTERNAL_HEADER] = offlineInternalToken();
83
+ if (params.body !== undefined)
84
+ headers["content-type"] = "application/json";
85
+ const response = await this.adapterHost.httpAdapter.getInstance().inject({
86
+ method: params.method,
87
+ url,
88
+ headers,
89
+ ...(params.body !== undefined ? { payload: params.body } : {}),
90
+ });
91
+ return { ran: true, status: response.statusCode, body: this.parse(response.body) };
92
+ }
93
+ /**
94
+ * `npcs/n1`, `/npcs/n1` or an absolute URL → `/npcs/n1` (query string kept), with dot segments
95
+ * resolved the way the router resolves them, so the route checked is the route that runs.
96
+ * `undefined` (refused) for a path that climbs above the root, or that carries an encoded dot
97
+ * or separator (`%2e`, `%2f`, `%5c`), which a later decode could turn into another path.
98
+ */
99
+ normalise(path) {
100
+ const absolute = /^https?:\/\//i.test(path);
101
+ // The path as sent (an absolute URL's pathname is already resolved by URL, so read it raw).
102
+ const raw = (absolute ? path.replace(/^https?:\/\/[^/?#]*/i, "") : path).split(/[?#]/)[0];
103
+ if (/%2e|%2f|%5c/i.test(raw))
104
+ return undefined;
105
+ let depth = 0;
106
+ for (const segment of raw.split(/[\/\\]/)) {
107
+ if (segment === "" || segment === ".")
108
+ continue;
109
+ depth += segment === ".." ? -1 : 1;
110
+ if (depth < 0)
111
+ return undefined;
112
+ }
113
+ const parsed = absolute ? new URL(path) : new URL(`/${path.replace(/^[\/\\]+/, "")}`, "http://internal");
114
+ const pathname = parsed.pathname.replace(/\/{2,}/g, "/");
115
+ return `${pathname}${parsed.search}`;
116
+ }
117
+ parse(body) {
118
+ if (body === undefined || body === "")
119
+ return undefined;
120
+ try {
121
+ return JSON.parse(body);
122
+ }
123
+ catch {
124
+ return body;
125
+ }
126
+ }
127
+ /**
128
+ * The route that answers `method path`, with the router's precedence: a static segment
129
+ * beats a parameter, a parameter beats a wildcard, compared from the first segment.
130
+ */
131
+ match(method, path) {
132
+ const segments = splitPath(path);
133
+ const rank = (segment) => (segment === "*" ? 0 : segment.startsWith(":") ? 1 : 2);
134
+ const candidates = this.knownRoutes().filter((route) => {
135
+ if (route.method !== method && route.method !== "ALL")
136
+ return false;
137
+ const wildcard = route.segments[route.segments.length - 1] === "*";
138
+ if (!wildcard && route.segments.length !== segments.length)
139
+ return false;
140
+ if (wildcard && segments.length < route.segments.length - 1)
141
+ return false;
142
+ return route.segments.every((segment, index) => segment === "*" || segment.startsWith(":") || segment === segments[index]);
143
+ });
144
+ candidates.sort((a, b) => {
145
+ const length = Math.max(a.segments.length, b.segments.length);
146
+ for (let index = 0; index < length; index++) {
147
+ const diff = rank(b.segments[index] ?? "*") - rank(a.segments[index] ?? "*");
148
+ if (diff !== 0)
149
+ return diff;
150
+ }
151
+ return 0;
152
+ });
153
+ return candidates[0];
154
+ }
155
+ knownRoutes() {
156
+ if (this.routes)
157
+ return this.routes;
158
+ const routes = [];
159
+ for (const wrapper of this.discovery.getControllers()) {
160
+ const controller = wrapper.metatype;
161
+ if (typeof controller !== "function" || !controller.prototype)
162
+ continue;
163
+ const prototype = controller.prototype;
164
+ const controllerPath = firstPath(this.reflector.get(constants_1.PATH_METADATA, controller));
165
+ for (const methodName of this.metadataScanner.getAllMethodNames(prototype)) {
166
+ const handler = prototype[methodName];
167
+ if (typeof handler !== "function")
168
+ continue;
169
+ const requestMethod = this.reflector.get(constants_1.METHOD_METADATA, handler);
170
+ const routePath = this.reflector.get(constants_1.PATH_METADATA, handler);
171
+ if (requestMethod === undefined || routePath === undefined)
172
+ continue;
173
+ routes.push({
174
+ method: common_1.RequestMethod[requestMethod] ?? String(requestMethod),
175
+ segments: [...splitPath(controllerPath), ...splitPath(firstPath(routePath))],
176
+ replayable: this.reflector.get(offline_replayable_decorator_1.OFFLINE_REPLAYABLE_METADATA, handler) === true,
177
+ });
178
+ }
179
+ }
180
+ this.routes = routes;
181
+ return routes;
182
+ }
183
+ };
184
+ exports.OfflineRouteRunner = OfflineRouteRunner;
185
+ exports.OfflineRouteRunner = OfflineRouteRunner = __decorate([
186
+ (0, common_1.Injectable)(),
187
+ __metadata("design:paramtypes", [core_1.HttpAdapterHost,
188
+ core_1.DiscoveryService,
189
+ core_1.MetadataScanner,
190
+ core_1.Reflector])
191
+ ], OfflineRouteRunner);
192
+ //# sourceMappingURL=offline-route-runner.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offline-route-runner.service.js","sourceRoot":"","sources":["../../../../src/foundations/offline-change-set/services/offline-route-runner.service.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -16,4 +16,6 @@ export * from "./openapi";
16
16
  export { RedisLockService } from "./core/redis/services/redis.lock.service";
17
17
  export { TRUSTED_ORIGINS_RESOLVER } from "./core/cors/interfaces/trusted-origins.resolver.interface";
18
18
  export type { TrustedOriginsResolver } from "./core/cors/interfaces/trusted-origins.resolver.interface";
19
+ export * from "./core/offline";
20
+ export * from "./foundations/offline-change-set";
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAG5B,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AACrG,YAAY,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,OAAO,CAAC;AAGtB,cAAc,aAAa,CAAC;AAG5B,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2DAA2D,CAAC;AACrG,YAAY,EAAE,sBAAsB,EAAE,MAAM,2DAA2D,CAAC;AAGxG,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -44,4 +44,7 @@ Object.defineProperty(exports, "RedisLockService", { enumerable: true, get: func
44
44
  // Trusted-origins hook (CORS + S3 frame-ancestors); the app binds TRUSTED_ORIGINS_RESOLVER.
45
45
  var trusted_origins_resolver_interface_1 = require("./core/cors/interfaces/trusted-origins.resolver.interface");
46
46
  Object.defineProperty(exports, "TRUSTED_ORIGINS_RESOLVER", { enumerable: true, get: function () { return trusted_origins_resolver_interface_1.TRUSTED_ORIGINS_RESOLVER; } });
47
+ // Offline support (opt-in through bootstrap({ offline })).
48
+ __exportStar(require("./core/offline"), exports);
49
+ __exportStar(require("./foundations/offline-change-set"), exports);
47
50
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,2CAAyB;AAEzB,iBAAiB;AACjB,2CAAyB;AAEzB,sBAAsB;AACtB,yCAAuB;AACvB,6CAA2B;AAC3B,kDAAgC;AAEhC,4BAA4B;AAC5B,gDAA8B;AAE9B,uBAAuB;AACvB,2CAAyB;AAEzB,8CAA8C;AAC9C,wCAAsB;AAEtB,sBAAsB;AACtB,8CAA4B;AAE5B,yBAAyB;AACzB,4CAA0B;AAE1B,yFAAyF;AACzF,+EAA4E;AAAnE,sHAAA,gBAAgB,OAAA;AAEzB,4FAA4F;AAC5F,gHAAqG;AAA5F,8IAAA,wBAAwB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,2CAAyB;AAEzB,iBAAiB;AACjB,2CAAyB;AAEzB,sBAAsB;AACtB,yCAAuB;AACvB,6CAA2B;AAC3B,kDAAgC;AAEhC,4BAA4B;AAC5B,gDAA8B;AAE9B,uBAAuB;AACvB,2CAAyB;AAEzB,8CAA8C;AAC9C,wCAAsB;AAEtB,sBAAsB;AACtB,8CAA4B;AAE5B,yBAAyB;AACzB,4CAA0B;AAE1B,yFAAyF;AACzF,+EAA4E;AAAnE,sHAAA,gBAAgB,OAAA;AAEzB,4FAA4F;AAC5F,gHAAqG;AAA5F,8IAAA,wBAAwB,OAAA;AAGjC,2DAA2D;AAC3D,iDAA+B;AAC/B,mEAAiD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@carlonicora/nestjs-neo4jsonapi",
3
- "version": "8.15.0",
3
+ "version": "8.16.0",
4
4
  "description": "NestJS foundation package with JSON:API, Neo4j, Redis, LangChain agents, and common utilities",
5
5
  "author": "Carlo Nicora",
6
6
  "license": "GPL-3.0-or-later",