@nitrostack/core 1.0.17 → 1.1.0-beta.1
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/dist/core/app-decorator.d.ts +5 -0
- package/dist/core/app-decorator.d.ts.map +1 -1
- package/dist/core/app-decorator.js +2 -1
- package/dist/core/app-decorator.js.map +1 -1
- package/dist/core/builders.d.ts.map +1 -1
- package/dist/core/builders.js +2 -0
- package/dist/core/builders.js.map +1 -1
- package/dist/core/decorators.d.ts +11 -0
- package/dist/core/decorators.d.ts.map +1 -1
- package/dist/core/decorators.js.map +1 -1
- package/dist/core/health/health-checks.resource.d.ts +4 -3
- package/dist/core/health/health-checks.resource.d.ts.map +1 -1
- package/dist/core/health/health-checks.resource.js +35 -8
- package/dist/core/health/health-checks.resource.js.map +1 -1
- package/dist/core/health/health.interface.d.ts +40 -0
- package/dist/core/health/health.interface.d.ts.map +1 -0
- package/dist/core/health/health.interface.js +2 -0
- package/dist/core/health/health.interface.js.map +1 -0
- package/dist/core/index.d.ts +11 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +9 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/interceptors/data-spillover.interceptor.d.ts +30 -0
- package/dist/core/interceptors/data-spillover.interceptor.d.ts.map +1 -0
- package/dist/core/interceptors/data-spillover.interceptor.js +174 -0
- package/dist/core/interceptors/data-spillover.interceptor.js.map +1 -0
- package/dist/core/interceptors/interceptor.decorator.d.ts +17 -8
- package/dist/core/interceptors/interceptor.decorator.d.ts.map +1 -1
- package/dist/core/interceptors/interceptor.decorator.js +36 -11
- package/dist/core/interceptors/interceptor.decorator.js.map +1 -1
- package/dist/core/interceptors/interceptor.interface.d.ts +4 -0
- package/dist/core/interceptors/interceptor.interface.d.ts.map +1 -1
- package/dist/core/interceptors/spillover/fs-spillover.store.d.ts +54 -0
- package/dist/core/interceptors/spillover/fs-spillover.store.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/fs-spillover.store.js +302 -0
- package/dist/core/interceptors/spillover/fs-spillover.store.js.map +1 -0
- package/dist/core/interceptors/spillover/index.d.ts +6 -0
- package/dist/core/interceptors/spillover/index.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/index.js +6 -0
- package/dist/core/interceptors/spillover/index.js.map +1 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.d.ts +25 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.js +115 -0
- package/dist/core/interceptors/spillover/memory-spillover.store.js.map +1 -0
- package/dist/core/interceptors/spillover/preview-generator.d.ts +7 -0
- package/dist/core/interceptors/spillover/preview-generator.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/preview-generator.js +79 -0
- package/dist/core/interceptors/spillover/preview-generator.js.map +1 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.d.ts +20 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.js +2 -0
- package/dist/core/interceptors/spillover/spillover-store.interface.js.map +1 -0
- package/dist/core/interceptors/spillover/types.d.ts +71 -0
- package/dist/core/interceptors/spillover/types.d.ts.map +1 -0
- package/dist/core/interceptors/spillover/types.js +12 -0
- package/dist/core/interceptors/spillover/types.js.map +1 -0
- package/dist/core/protocol/adapter.d.ts +7 -1
- package/dist/core/protocol/adapter.d.ts.map +1 -1
- package/dist/core/protocol/modern-v2.adapter.d.ts +95 -2
- package/dist/core/protocol/modern-v2.adapter.d.ts.map +1 -1
- package/dist/core/protocol/modern-v2.adapter.js +703 -165
- package/dist/core/protocol/modern-v2.adapter.js.map +1 -1
- package/dist/core/server.d.ts +104 -4
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +465 -52
- package/dist/core/server.js.map +1 -1
- package/dist/core/task.d.ts.map +1 -1
- package/dist/core/task.js +8 -7
- package/dist/core/task.js.map +1 -1
- package/dist/core/tool.d.ts +12 -3
- package/dist/core/tool.d.ts.map +1 -1
- package/dist/core/tool.js +21 -3
- package/dist/core/tool.js.map +1 -1
- package/dist/core/transforms/catalog.transform.d.ts +40 -0
- package/dist/core/transforms/catalog.transform.d.ts.map +1 -0
- package/dist/core/transforms/catalog.transform.js +52 -0
- package/dist/core/transforms/catalog.transform.js.map +1 -0
- package/dist/core/transforms/code-mode/code-mode.transform.d.ts +75 -0
- package/dist/core/transforms/code-mode/code-mode.transform.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/code-mode.transform.js +226 -0
- package/dist/core/transforms/code-mode/code-mode.transform.js.map +1 -0
- package/dist/core/transforms/code-mode/destructive-guard.d.ts +7 -0
- package/dist/core/transforms/code-mode/destructive-guard.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/destructive-guard.js +18 -0
- package/dist/core/transforms/code-mode/destructive-guard.js.map +1 -0
- package/dist/core/transforms/code-mode/guest-evaluator.d.ts +17 -0
- package/dist/core/transforms/code-mode/guest-evaluator.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/guest-evaluator.js +277 -0
- package/dist/core/transforms/code-mode/guest-evaluator.js.map +1 -0
- package/dist/core/transforms/code-mode/index.d.ts +11 -0
- package/dist/core/transforms/code-mode/index.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/index.js +11 -0
- package/dist/core/transforms/code-mode/index.js.map +1 -0
- package/dist/core/transforms/code-mode/ipc-messages.d.ts +31 -0
- package/dist/core/transforms/code-mode/ipc-messages.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/ipc-messages.js +2 -0
- package/dist/core/transforms/code-mode/ipc-messages.js.map +1 -0
- package/dist/core/transforms/code-mode/legible-error.d.ts +8 -0
- package/dist/core/transforms/code-mode/legible-error.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/legible-error.js +17 -0
- package/dist/core/transforms/code-mode/legible-error.js.map +1 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.d.ts +25 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.js +31 -0
- package/dist/core/transforms/code-mode/quickjs-wasm.provider.js.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.interface.d.ts +10 -0
- package/dist/core/transforms/code-mode/sandbox.interface.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.interface.js +2 -0
- package/dist/core/transforms/code-mode/sandbox.interface.js.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.worker.d.ts +2 -0
- package/dist/core/transforms/code-mode/sandbox.worker.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/sandbox.worker.js +69 -0
- package/dist/core/transforms/code-mode/sandbox.worker.js.map +1 -0
- package/dist/core/transforms/code-mode/synthetic-tools.d.ts +23 -0
- package/dist/core/transforms/code-mode/synthetic-tools.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/synthetic-tools.js +112 -0
- package/dist/core/transforms/code-mode/synthetic-tools.js.map +1 -0
- package/dist/core/transforms/code-mode/types.d.ts +32 -0
- package/dist/core/transforms/code-mode/types.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/types.js +2 -0
- package/dist/core/transforms/code-mode/types.js.map +1 -0
- package/dist/core/transforms/code-mode/worker-pool.d.ts +71 -0
- package/dist/core/transforms/code-mode/worker-pool.d.ts.map +1 -0
- package/dist/core/transforms/code-mode/worker-pool.js +435 -0
- package/dist/core/transforms/code-mode/worker-pool.js.map +1 -0
- package/dist/core/transforms/index.d.ts +6 -0
- package/dist/core/transforms/index.d.ts.map +1 -0
- package/dist/core/transforms/index.js +6 -0
- package/dist/core/transforms/index.js.map +1 -0
- package/dist/core/transforms/search/base-search.transform.d.ts +59 -0
- package/dist/core/transforms/search/base-search.transform.d.ts.map +1 -0
- package/dist/core/transforms/search/base-search.transform.js +169 -0
- package/dist/core/transforms/search/base-search.transform.js.map +1 -0
- package/dist/core/transforms/search/bm25-search.transform.d.ts +27 -0
- package/dist/core/transforms/search/bm25-search.transform.d.ts.map +1 -0
- package/dist/core/transforms/search/bm25-search.transform.js +37 -0
- package/dist/core/transforms/search/bm25-search.transform.js.map +1 -0
- package/dist/core/transforms/search/bm25.engine.d.ts +46 -0
- package/dist/core/transforms/search/bm25.engine.d.ts.map +1 -0
- package/dist/core/transforms/search/bm25.engine.js +160 -0
- package/dist/core/transforms/search/bm25.engine.js.map +1 -0
- package/dist/core/transforms/search/index.d.ts +9 -0
- package/dist/core/transforms/search/index.d.ts.map +1 -0
- package/dist/core/transforms/search/index.js +9 -0
- package/dist/core/transforms/search/index.js.map +1 -0
- package/dist/core/transforms/search/regex-match.worker.d.ts +2 -0
- package/dist/core/transforms/search/regex-match.worker.d.ts.map +1 -0
- package/dist/core/transforms/search/regex-match.worker.js +19 -0
- package/dist/core/transforms/search/regex-match.worker.js.map +1 -0
- package/dist/core/transforms/search/regex-search.transform.d.ts +41 -0
- package/dist/core/transforms/search/regex-search.transform.d.ts.map +1 -0
- package/dist/core/transforms/search/regex-search.transform.js +237 -0
- package/dist/core/transforms/search/regex-search.transform.js.map +1 -0
- package/dist/core/transforms/search/synthetic-tools.d.ts +11 -0
- package/dist/core/transforms/search/synthetic-tools.d.ts.map +1 -0
- package/dist/core/transforms/search/synthetic-tools.js +76 -0
- package/dist/core/transforms/search/synthetic-tools.js.map +1 -0
- package/dist/core/transforms/search/tokenizer.d.ts +11 -0
- package/dist/core/transforms/search/tokenizer.d.ts.map +1 -0
- package/dist/core/transforms/search/tokenizer.js +38 -0
- package/dist/core/transforms/search/tokenizer.js.map +1 -0
- package/dist/core/transforms/search/tool-serializer.d.ts +6 -0
- package/dist/core/transforms/search/tool-serializer.d.ts.map +1 -0
- package/dist/core/transforms/search/tool-serializer.js +41 -0
- package/dist/core/transforms/search/tool-serializer.js.map +1 -0
- package/dist/core/transforms/search/types.d.ts +36 -0
- package/dist/core/transforms/search/types.d.ts.map +1 -0
- package/dist/core/transforms/search/types.js +2 -0
- package/dist/core/transforms/search/types.js.map +1 -0
- package/dist/core/transforms/tool-cache-key.d.ts +15 -0
- package/dist/core/transforms/tool-cache-key.d.ts.map +1 -0
- package/dist/core/transforms/tool-cache-key.js +61 -0
- package/dist/core/transforms/tool-cache-key.js.map +1 -0
- package/dist/core/transforms/transform.interface.d.ts +34 -0
- package/dist/core/transforms/transform.interface.d.ts.map +1 -0
- package/dist/core/transforms/transform.interface.js +2 -0
- package/dist/core/transforms/transform.interface.js.map +1 -0
- package/dist/core/transforms/validate-tool-arguments.d.ts +10 -0
- package/dist/core/transforms/validate-tool-arguments.d.ts.map +1 -0
- package/dist/core/transforms/validate-tool-arguments.js +62 -0
- package/dist/core/transforms/validate-tool-arguments.js.map +1 -0
- package/dist/core/transforms/visibility/index.d.ts +3 -0
- package/dist/core/transforms/visibility/index.d.ts.map +1 -0
- package/dist/core/transforms/visibility/index.js +3 -0
- package/dist/core/transforms/visibility/index.js.map +1 -0
- package/dist/core/transforms/visibility/session-store.d.ts +132 -0
- package/dist/core/transforms/visibility/session-store.d.ts.map +1 -0
- package/dist/core/transforms/visibility/session-store.js +330 -0
- package/dist/core/transforms/visibility/session-store.js.map +1 -0
- package/dist/core/transforms/visibility/visibility.transform.d.ts +42 -0
- package/dist/core/transforms/visibility/visibility.transform.d.ts.map +1 -0
- package/dist/core/transforms/visibility/visibility.transform.js +109 -0
- package/dist/core/transforms/visibility/visibility.transform.js.map +1 -0
- package/dist/core/types.d.ts +60 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { DIContainer } from '../di/container.js';
|
|
3
|
+
import { MemorySpilloverStore } from './spillover/memory-spillover.store.js';
|
|
4
|
+
import { FsSpilloverStore } from './spillover/fs-spillover.store.js';
|
|
5
|
+
import { generatePreview } from './spillover/preview-generator.js';
|
|
6
|
+
class PayloadTooLargeError extends Error {
|
|
7
|
+
constructor(sizeBytes, maxBytes) {
|
|
8
|
+
super(`Spillover payload of ${sizeBytes} bytes exceeds the store limit of ${maxBytes} bytes. ` +
|
|
9
|
+
`Raise the store maxSizeBytes or use a larger spillover driver.`);
|
|
10
|
+
this.name = 'PayloadTooLargeError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** JSON.stringify that aborts once the output would exceed maxBytes. */
|
|
14
|
+
function stringifyCapped(value, maxBytes) {
|
|
15
|
+
let accounted = 0;
|
|
16
|
+
const json = JSON.stringify(value, (_key, val) => {
|
|
17
|
+
if (typeof val === 'string')
|
|
18
|
+
accounted += val.length;
|
|
19
|
+
else if (typeof val === 'number' || typeof val === 'boolean' || val === null)
|
|
20
|
+
accounted += 16;
|
|
21
|
+
if (accounted > maxBytes) {
|
|
22
|
+
throw new PayloadTooLargeError(accounted, maxBytes);
|
|
23
|
+
}
|
|
24
|
+
return val;
|
|
25
|
+
});
|
|
26
|
+
if (json == null)
|
|
27
|
+
return 'null';
|
|
28
|
+
const size = Buffer.byteLength(json, 'utf8');
|
|
29
|
+
if (size > maxBytes)
|
|
30
|
+
throw new PayloadTooLargeError(size, maxBytes);
|
|
31
|
+
return json;
|
|
32
|
+
}
|
|
33
|
+
export class DataSpilloverInterceptor {
|
|
34
|
+
maxPayloadBytes;
|
|
35
|
+
spilloverTtlSeconds;
|
|
36
|
+
previewItems;
|
|
37
|
+
previewChars;
|
|
38
|
+
uriPrefix;
|
|
39
|
+
explicitStore;
|
|
40
|
+
filesystemRequested;
|
|
41
|
+
fallbackStore;
|
|
42
|
+
constructor(options = {}) {
|
|
43
|
+
this.maxPayloadBytes = options.maxPayloadBytes ?? 10 * 1024; // 10KB
|
|
44
|
+
this.spilloverTtlSeconds = options.spilloverTtlSeconds ?? 3600; // 1 hr
|
|
45
|
+
this.previewItems = options.previewItems ?? 3;
|
|
46
|
+
this.previewChars = options.previewStringChars ?? 500;
|
|
47
|
+
this.uriPrefix = options.resourceUriPrefix ?? 'resource://data-spillover/';
|
|
48
|
+
this.filesystemRequested = options.storage === 'filesystem';
|
|
49
|
+
if (options.storage && typeof options.storage === 'object') {
|
|
50
|
+
this.explicitStore = options.storage;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Static factory helper for @UseInterceptors decorator:
|
|
55
|
+
*/
|
|
56
|
+
static configure(options) {
|
|
57
|
+
return class ConfiguredDataSpilloverInterceptor extends DataSpilloverInterceptor {
|
|
58
|
+
constructor() {
|
|
59
|
+
super(options);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The store this interceptor writes to.
|
|
65
|
+
*
|
|
66
|
+
* Defaults to the server's store rather than a private one: the envelope's
|
|
67
|
+
* `resourceUri` is served by the server's `resource://data-spillover/{id}` handler,
|
|
68
|
+
* so writing anywhere else produces URIs that can never be read back.
|
|
69
|
+
*/
|
|
70
|
+
serverHost() {
|
|
71
|
+
const container = DIContainer.getInstance();
|
|
72
|
+
if (!container.has('NitroStackServer'))
|
|
73
|
+
return undefined;
|
|
74
|
+
const server = container.resolve('NitroStackServer');
|
|
75
|
+
if (typeof server?.getSpilloverStore !== 'function')
|
|
76
|
+
return undefined;
|
|
77
|
+
return server;
|
|
78
|
+
}
|
|
79
|
+
getStore() {
|
|
80
|
+
const host = this.serverHost();
|
|
81
|
+
if (this.explicitStore) {
|
|
82
|
+
if (host && host.getSpilloverStore() !== this.explicitStore) {
|
|
83
|
+
throw new Error('DataSpilloverInterceptor storage instance is not the server spillover store. ' +
|
|
84
|
+
'Omit storage to use the server store, or point the server at this instance with setSpilloverStore().');
|
|
85
|
+
}
|
|
86
|
+
return this.explicitStore;
|
|
87
|
+
}
|
|
88
|
+
if (this.filesystemRequested) {
|
|
89
|
+
const current = host?.getSpilloverStore();
|
|
90
|
+
if (current instanceof FsSpilloverStore)
|
|
91
|
+
return current;
|
|
92
|
+
throw new Error('DataSpilloverInterceptor requested filesystem storage, but the server spillover store is not a filesystem store. ' +
|
|
93
|
+
'Set the server spillover driver to filesystem.');
|
|
94
|
+
}
|
|
95
|
+
// Read through on every call rather than memoizing, so setSpilloverStore() on the
|
|
96
|
+
// server does not leave this interceptor writing to a disposed store.
|
|
97
|
+
if (host)
|
|
98
|
+
return host.getSpilloverStore();
|
|
99
|
+
this.fallbackStore ??= new MemorySpilloverStore();
|
|
100
|
+
return this.fallbackStore;
|
|
101
|
+
}
|
|
102
|
+
async intercept(context, next) {
|
|
103
|
+
const result = await next();
|
|
104
|
+
if (result === undefined || result === null) {
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
const store = this.getStore();
|
|
108
|
+
const quota = store.getMaxSizeBytes?.() ?? 100 * 1024 * 1024;
|
|
109
|
+
// Measure serialized size
|
|
110
|
+
let serialized;
|
|
111
|
+
let mimeType = 'application/json';
|
|
112
|
+
if (typeof result === 'string') {
|
|
113
|
+
serialized = result;
|
|
114
|
+
mimeType = 'text/plain';
|
|
115
|
+
}
|
|
116
|
+
else if (Buffer.isBuffer(result)) {
|
|
117
|
+
if (result.length > quota)
|
|
118
|
+
throw new PayloadTooLargeError(result.length, quota);
|
|
119
|
+
serialized = result.toString('base64');
|
|
120
|
+
mimeType = 'application/octet-stream';
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
try {
|
|
124
|
+
serialized = stringifyCapped(result, quota);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
if (err instanceof PayloadTooLargeError)
|
|
128
|
+
throw err;
|
|
129
|
+
// Not serializable; pass through
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const sizeBytes = Buffer.byteLength(serialized, 'utf8');
|
|
134
|
+
// If within limit, pass through unmodified
|
|
135
|
+
if (sizeBytes <= this.maxPayloadBytes) {
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
if (sizeBytes > quota) {
|
|
139
|
+
throw new PayloadTooLargeError(sizeBytes, quota);
|
|
140
|
+
}
|
|
141
|
+
// Exceeded threshold: spillover to storage.
|
|
142
|
+
// With visibility installed, a row without a session would be readable by
|
|
143
|
+
// anyone who learned the URI, so refuse the write instead.
|
|
144
|
+
if (!context?.sessionId && this.serverHost()?.hasSessionVisibility?.()) {
|
|
145
|
+
throw new Error('Spillover requires a session when visibility is enabled. ' +
|
|
146
|
+
'Call this tool with a server-issued session id.');
|
|
147
|
+
}
|
|
148
|
+
const spilloverId = `spill-${uuidv4()}`;
|
|
149
|
+
const resourceUri = `${this.uriPrefix}${spilloverId}`;
|
|
150
|
+
await store.save(spilloverId, serialized, mimeType, this.spilloverTtlSeconds, context?.sessionId);
|
|
151
|
+
const { preview, summary, totalItems } = generatePreview(result, sizeBytes, this.previewItems, this.previewChars);
|
|
152
|
+
if (context?.logger?.info) {
|
|
153
|
+
context.logger.info(`Spilled tool output exceeding threshold (${sizeBytes} bytes) to ${resourceUri}`);
|
|
154
|
+
}
|
|
155
|
+
const envelope = {
|
|
156
|
+
_spillover: true,
|
|
157
|
+
resourceUri,
|
|
158
|
+
mimeType,
|
|
159
|
+
sizeBytes,
|
|
160
|
+
totalItems,
|
|
161
|
+
summary,
|
|
162
|
+
preview,
|
|
163
|
+
hint: `Full dataset (${summary}) exceeded prompt limit. Read full data via MCP resources/read with URI '${resourceUri}'.`,
|
|
164
|
+
};
|
|
165
|
+
// A nested value (for example `{ rows: [...] }`) can still exceed the limit
|
|
166
|
+
// after preview slicing. Drop that preview rather than re-inline the payload.
|
|
167
|
+
const previewBytes = Buffer.byteLength(JSON.stringify(envelope.preview) ?? '', 'utf8');
|
|
168
|
+
if (previewBytes > this.maxPayloadBytes) {
|
|
169
|
+
envelope.preview = '[preview omitted]';
|
|
170
|
+
}
|
|
171
|
+
return envelope;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=data-spillover.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-spillover.interceptor.js","sourceRoot":"","sources":["../../../src/core/interceptors/data-spillover.interceptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import {
|
|
2
|
+
import { InterceptorType } from './interceptor.interface.js';
|
|
3
|
+
export declare const INTERCEPTOR_KEY = "nitrostack:interceptor";
|
|
4
|
+
export declare const IS_INTERCEPTOR_KEY = "nitrostack:is_interceptor";
|
|
3
5
|
/**
|
|
4
6
|
* Marks a class as an interceptor
|
|
5
7
|
*
|
|
@@ -16,20 +18,27 @@ import { InterceptorConstructor } from './interceptor.interface.js';
|
|
|
16
18
|
*/
|
|
17
19
|
export declare function Interceptor(): ClassDecorator;
|
|
18
20
|
/**
|
|
19
|
-
* Apply interceptors to a tool method
|
|
21
|
+
* Apply interceptors to a tool method or to an entire controller class.
|
|
22
|
+
* Supports both class constructors and pre-configured instances.
|
|
20
23
|
*
|
|
21
24
|
* @example
|
|
22
25
|
* ```typescript
|
|
23
|
-
*
|
|
24
|
-
* @
|
|
25
|
-
*
|
|
26
|
+
* // Method-level with instance
|
|
27
|
+
* @Tool({ name: 'large_query' })
|
|
28
|
+
* @UseInterceptors(new DataSpilloverInterceptor({ maxPayloadBytes: 10240 }))
|
|
29
|
+
* async getLargeData() { ... }
|
|
30
|
+
*
|
|
31
|
+
* // Class-level with factory
|
|
32
|
+
* @Controller()
|
|
33
|
+
* @UseInterceptors(DataSpilloverInterceptor.configure({ maxPayloadBytes: 20480 }))
|
|
34
|
+
* export class EnterpriseDataController { ... }
|
|
26
35
|
* ```
|
|
27
36
|
*/
|
|
28
|
-
export declare function UseInterceptors(...interceptors:
|
|
37
|
+
export declare function UseInterceptors(...interceptors: InterceptorType[]): (target: any, propertyKey?: string | symbol, descriptor?: PropertyDescriptor) => any;
|
|
29
38
|
/**
|
|
30
|
-
*
|
|
39
|
+
* Retrieves interceptors for a method, combining class-level and method-level metadata.
|
|
31
40
|
*/
|
|
32
|
-
export declare function getInterceptorMetadata(target: object, propertyKey
|
|
41
|
+
export declare function getInterceptorMetadata(target: object, propertyKey?: string | symbol): InterceptorType[];
|
|
33
42
|
/**
|
|
34
43
|
* Check if a class is marked as an interceptor
|
|
35
44
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/interceptors/interceptor.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"interceptor.decorator.d.ts","sourceRoot":"","sources":["../../../src/core/interceptors/interceptor.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,eAAO,MAAM,eAAe,2BAA2B,CAAC;AACxD,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,IAAI,cAAc,CAI5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,GAAG,YAAY,EAAE,eAAe,EAAE,IAC/C,QAAQ,GAAG,EAAE,cAAc,MAAM,GAAG,MAAM,EAAE,aAAa,kBAAkB,SAa7F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,eAAe,EAAE,CAYvG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
const INTERCEPTOR_KEY = 'nitrostack:interceptor';
|
|
3
|
-
const IS_INTERCEPTOR_KEY = 'nitrostack:is_interceptor';
|
|
2
|
+
export const INTERCEPTOR_KEY = 'nitrostack:interceptor';
|
|
3
|
+
export const IS_INTERCEPTOR_KEY = 'nitrostack:is_interceptor';
|
|
4
4
|
/**
|
|
5
5
|
* Marks a class as an interceptor
|
|
6
6
|
*
|
|
@@ -21,26 +21,51 @@ export function Interceptor() {
|
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Apply interceptors to a tool method
|
|
24
|
+
* Apply interceptors to a tool method or to an entire controller class.
|
|
25
|
+
* Supports both class constructors and pre-configured instances.
|
|
25
26
|
*
|
|
26
27
|
* @example
|
|
27
28
|
* ```typescript
|
|
28
|
-
*
|
|
29
|
-
* @
|
|
30
|
-
*
|
|
29
|
+
* // Method-level with instance
|
|
30
|
+
* @Tool({ name: 'large_query' })
|
|
31
|
+
* @UseInterceptors(new DataSpilloverInterceptor({ maxPayloadBytes: 10240 }))
|
|
32
|
+
* async getLargeData() { ... }
|
|
33
|
+
*
|
|
34
|
+
* // Class-level with factory
|
|
35
|
+
* @Controller()
|
|
36
|
+
* @UseInterceptors(DataSpilloverInterceptor.configure({ maxPayloadBytes: 20480 }))
|
|
37
|
+
* export class EnterpriseDataController { ... }
|
|
31
38
|
* ```
|
|
32
39
|
*/
|
|
33
40
|
export function UseInterceptors(...interceptors) {
|
|
34
|
-
return (target, propertyKey, descriptor)
|
|
35
|
-
|
|
36
|
-
|
|
41
|
+
return function (target, propertyKey, descriptor) {
|
|
42
|
+
if (descriptor && propertyKey) {
|
|
43
|
+
// Method-level decorator
|
|
44
|
+
const existing = Reflect.getMetadata(INTERCEPTOR_KEY, target, propertyKey) || [];
|
|
45
|
+
Reflect.defineMetadata(INTERCEPTOR_KEY, [...existing, ...interceptors], target, propertyKey);
|
|
46
|
+
return descriptor;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Class-level decorator (target is constructor)
|
|
50
|
+
const existing = Reflect.getMetadata(INTERCEPTOR_KEY, target) || [];
|
|
51
|
+
Reflect.defineMetadata(INTERCEPTOR_KEY, [...existing, ...interceptors], target);
|
|
52
|
+
return target;
|
|
53
|
+
}
|
|
37
54
|
};
|
|
38
55
|
}
|
|
39
56
|
/**
|
|
40
|
-
*
|
|
57
|
+
* Retrieves interceptors for a method, combining class-level and method-level metadata.
|
|
41
58
|
*/
|
|
42
59
|
export function getInterceptorMetadata(target, propertyKey) {
|
|
43
|
-
|
|
60
|
+
const methodInterceptors = propertyKey
|
|
61
|
+
? Reflect.getMetadata(INTERCEPTOR_KEY, target, propertyKey) || []
|
|
62
|
+
: [];
|
|
63
|
+
// Class constructor metadata
|
|
64
|
+
const ctor = typeof target === 'function' ? target : target?.constructor;
|
|
65
|
+
const classInterceptors = ctor
|
|
66
|
+
? Reflect.getMetadata(INTERCEPTOR_KEY, ctor) || []
|
|
67
|
+
: [];
|
|
68
|
+
return [...classInterceptors, ...methodInterceptors];
|
|
44
69
|
}
|
|
45
70
|
/**
|
|
46
71
|
* Check if a class is marked as an interceptor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.decorator.js","sourceRoot":"","sources":["../../../src/core/interceptors/interceptor.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,eAAe,GAAG,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"interceptor.decorator.js","sourceRoot":"","sources":["../../../src/core/interceptors/interceptor.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACxD,MAAM,CAAC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAE9D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,GAAG,YAA+B;IAChE,OAAO,UAAU,MAAW,EAAE,WAA6B,EAAE,UAA+B;QAC1F,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;YAC9B,yBAAyB;YACzB,MAAM,QAAQ,GAAsB,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YACpG,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC7F,OAAO,UAAU,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,MAAM,QAAQ,GAAsB,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACvF,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,WAA6B;IAClF,MAAM,kBAAkB,GAAsB,WAAW;QACvD,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE;QACjE,CAAC,CAAC,EAAE,CAAC;IAEP,6BAA6B;IAC7B,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,MAAc,EAAE,WAAW,CAAC;IAClF,MAAM,iBAAiB,GAAsB,IAAI;QAC/C,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE;QAClD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,CAAC,GAAG,iBAAiB,EAAE,GAAG,kBAAkB,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC"}
|
|
@@ -28,4 +28,8 @@ export interface InterceptorInterface {
|
|
|
28
28
|
* Interceptor constructor type
|
|
29
29
|
*/
|
|
30
30
|
export type InterceptorConstructor = new (...args: unknown[]) => InterceptorInterface;
|
|
31
|
+
/**
|
|
32
|
+
* Union type permitting either a class constructor or an instantiated/configured instance.
|
|
33
|
+
*/
|
|
34
|
+
export type InterceptorType = InterceptorConstructor | InterceptorInterface;
|
|
31
35
|
//# sourceMappingURL=interceptor.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.interface.d.ts","sourceRoot":"","sources":["../../../src/core/interceptors/interceptor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"interceptor.interface.d.ts","sourceRoot":"","sources":["../../../src/core/interceptors/interceptor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtF;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,oBAAoB,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,sBAAsB,GAAG,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SpilloverRecord, SpilloverStore } from './spillover-store.interface.js';
|
|
2
|
+
export interface FsSpilloverOptions {
|
|
3
|
+
storageDir?: string;
|
|
4
|
+
sweepIntervalSeconds?: number;
|
|
5
|
+
/** Total bytes retained on disk (default: 512MB). A single record larger than this is refused. */
|
|
6
|
+
maxSizeBytes?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Filesystem spillover store.
|
|
10
|
+
*
|
|
11
|
+
* Directory mode 0o700 and file mode 0o600 are enforced on Unix. Windows ignores
|
|
12
|
+
* those bits, so a shared temp directory is not private there; set `storageDir`
|
|
13
|
+
* to a directory only this process can read.
|
|
14
|
+
*/
|
|
15
|
+
export declare class FsSpilloverStore implements SpilloverStore {
|
|
16
|
+
private storageDir;
|
|
17
|
+
private readonly explicitDir;
|
|
18
|
+
private readonly maxSizeBytes;
|
|
19
|
+
private readonly sweepTimer;
|
|
20
|
+
private initialized;
|
|
21
|
+
private usageReady;
|
|
22
|
+
private currentSizeBytes;
|
|
23
|
+
/** Serializes saves so two writers cannot both pass the capacity check. */
|
|
24
|
+
private writeChain;
|
|
25
|
+
constructor(options?: FsSpilloverOptions);
|
|
26
|
+
private ensureDir;
|
|
27
|
+
/**
|
|
28
|
+
* Refuse a symlink. mkdir({ recursive: true }) follows one, and chmod follows
|
|
29
|
+
* it too, so a planted link would receive the spilled files.
|
|
30
|
+
*/
|
|
31
|
+
private assertRealDirectory;
|
|
32
|
+
private sanitizeId;
|
|
33
|
+
private getFilePath;
|
|
34
|
+
getStorageDir(): string;
|
|
35
|
+
getMaxSizeBytes(): number;
|
|
36
|
+
getCurrentSizeBytes(): number;
|
|
37
|
+
private enqueue;
|
|
38
|
+
save(id: string, data: string, mimeType: string, ttlSeconds: number, sessionId?: string): Promise<SpilloverRecord>;
|
|
39
|
+
private writeRecord;
|
|
40
|
+
get(id: string): Promise<SpilloverRecord | undefined>;
|
|
41
|
+
delete(id: string): Promise<boolean>;
|
|
42
|
+
private unlinkId;
|
|
43
|
+
private deleteIfStillExpired;
|
|
44
|
+
cleanup(): Promise<number>;
|
|
45
|
+
private cleanupNow;
|
|
46
|
+
private ensureUsage;
|
|
47
|
+
private fileSize;
|
|
48
|
+
/** Deletes the oldest payload file, excluding the path about to be replaced. */
|
|
49
|
+
private evictOldestFile;
|
|
50
|
+
/** First bytes of a record. `expiresAt` is written before the payload. */
|
|
51
|
+
private readExpiresAt;
|
|
52
|
+
dispose(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=fs-spillover.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-spillover.store.d.ts","sourceRoot":"","sources":["../../../../src/core/interceptors/spillover/fs-spillover.store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kGAAkG;IAClG,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IACrD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,2EAA2E;IAC3E,OAAO,CAAC,UAAU,CAAoC;gBAE1C,OAAO,GAAE,kBAAuB;YAiB9B,SAAS;IAavB;;;OAGG;YACW,mBAAmB;IA8BjC,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,WAAW;IAInB,aAAa,IAAI,MAAM;IAIvB,eAAe,IAAI,MAAM;IAIzB,mBAAmB,IAAI,MAAM;IAI7B,OAAO,CAAC,OAAO;IAST,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;YAI1G,WAAW;IA0DnB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAkBrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAI5B,QAAQ;YAYR,oBAAoB;IAO5B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;YAIlB,UAAU;YA4CV,WAAW;YAYX,QAAQ;IAKtB,gFAAgF;YAClE,eAAe;IAmB7B,0EAA0E;YAC5D,aAAa;IAcrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|