@modularizer/plat 0.1.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.
- package/README.md +574 -0
- package/bin/z2.js +5 -0
- package/dist/args/coerce.d.ts +54 -0
- package/dist/args/coerce.d.ts.map +1 -0
- package/dist/args/coerce.js +236 -0
- package/dist/args/coerce.js.map +1 -0
- package/dist/args/index.d.ts +2 -0
- package/dist/args/index.d.ts.map +1 -0
- package/dist/args/index.js +2 -0
- package/dist/args/index.js.map +1 -0
- package/dist/args/scalars.d.ts +87 -0
- package/dist/args/scalars.d.ts.map +1 -0
- package/dist/args/scalars.js +22 -0
- package/dist/args/scalars.js.map +1 -0
- package/dist/args/validate.d.ts +23 -0
- package/dist/args/validate.d.ts.map +1 -0
- package/dist/args/validate.js +185 -0
- package/dist/args/validate.js.map +1 -0
- package/dist/args/z2.d.ts +27 -0
- package/dist/args/z2.d.ts.map +1 -0
- package/dist/args/z2.js +24 -0
- package/dist/args/z2.js.map +1 -0
- package/dist/cli/commands/api-proxy.d.ts +9 -0
- package/dist/cli/commands/api-proxy.d.ts.map +1 -0
- package/dist/cli/commands/api-proxy.js +292 -0
- package/dist/cli/commands/api-proxy.js.map +1 -0
- package/dist/cli/commands/env.d.ts +32 -0
- package/dist/cli/commands/env.d.ts.map +1 -0
- package/dist/cli/commands/env.js +157 -0
- package/dist/cli/commands/env.js.map +1 -0
- package/dist/cli/commands/gen.d.ts +2 -0
- package/dist/cli/commands/gen.d.ts.map +1 -0
- package/dist/cli/commands/gen.js +88 -0
- package/dist/cli/commands/gen.js.map +1 -0
- package/dist/cli/commands/init-project.d.ts +9 -0
- package/dist/cli/commands/init-project.d.ts.map +1 -0
- package/dist/cli/commands/init-project.js +143 -0
- package/dist/cli/commands/init-project.js.map +1 -0
- package/dist/cli/commands/jwt-cmd.d.ts +10 -0
- package/dist/cli/commands/jwt-cmd.d.ts.map +1 -0
- package/dist/cli/commands/jwt-cmd.js +33 -0
- package/dist/cli/commands/jwt-cmd.js.map +1 -0
- package/dist/cli/commands/run.d.ts +5 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +31 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +2 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +43 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +5 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +119 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/jwt-helper.d.ts +32 -0
- package/dist/cli/jwt-helper.d.ts.map +1 -0
- package/dist/cli/jwt-helper.js +84 -0
- package/dist/cli/jwt-helper.js.map +1 -0
- package/dist/cli/proxy.d.ts +40 -0
- package/dist/cli/proxy.d.ts.map +1 -0
- package/dist/cli/proxy.js +171 -0
- package/dist/cli/proxy.js.map +1 -0
- package/dist/cli/runtime.d.ts +17 -0
- package/dist/cli/runtime.d.ts.map +1 -0
- package/dist/cli/runtime.js +286 -0
- package/dist/cli/runtime.js.map +1 -0
- package/dist/cli/spec-source.d.ts +13 -0
- package/dist/cli/spec-source.d.ts.map +1 -0
- package/dist/cli/spec-source.js +207 -0
- package/dist/cli/spec-source.js.map +1 -0
- package/dist/cli/z2.d.ts +7 -0
- package/dist/cli/z2.d.ts.map +1 -0
- package/dist/cli/z2.js +93 -0
- package/dist/cli/z2.js.map +1 -0
- package/dist/client/file-transport-plugin.d.ts +25 -0
- package/dist/client/file-transport-plugin.d.ts.map +1 -0
- package/dist/client/file-transport-plugin.js +80 -0
- package/dist/client/file-transport-plugin.js.map +1 -0
- package/dist/client/http-transport-plugin.d.ts +27 -0
- package/dist/client/http-transport-plugin.d.ts.map +1 -0
- package/dist/client/http-transport-plugin.js +48 -0
- package/dist/client/http-transport-plugin.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/openapi-client.d.ts +332 -0
- package/dist/client/openapi-client.d.ts.map +1 -0
- package/dist/client/openapi-client.js +879 -0
- package/dist/client/openapi-client.js.map +1 -0
- package/dist/client/proxy.d.ts +5 -0
- package/dist/client/proxy.d.ts.map +1 -0
- package/dist/client/proxy.js +353 -0
- package/dist/client/proxy.js.map +1 -0
- package/dist/client/request-builder.d.ts +4 -0
- package/dist/client/request-builder.d.ts.map +1 -0
- package/dist/client/request-builder.js +88 -0
- package/dist/client/request-builder.js.map +1 -0
- package/dist/client/rpc-transport-plugin.d.ts +17 -0
- package/dist/client/rpc-transport-plugin.d.ts.map +1 -0
- package/dist/client/rpc-transport-plugin.js +69 -0
- package/dist/client/rpc-transport-plugin.js.map +1 -0
- package/dist/client/tools.d.ts +69 -0
- package/dist/client/tools.d.ts.map +1 -0
- package/dist/client/tools.js +122 -0
- package/dist/client/tools.js.map +1 -0
- package/dist/client/transport-plugin.d.ts +62 -0
- package/dist/client/transport-plugin.d.ts.map +1 -0
- package/dist/client/transport-plugin.js +40 -0
- package/dist/client/transport-plugin.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +9 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +29 -0
- package/dist/logging.js.map +1 -0
- package/dist/rpc.d.ts +39 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -0
- package/dist/server/auth/index.d.ts +4 -0
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +2 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/server/auth/jwt.d.ts +27 -0
- package/dist/server/auth/jwt.d.ts.map +1 -0
- package/dist/server/auth/jwt.js +95 -0
- package/dist/server/auth/jwt.js.map +1 -0
- package/dist/server/cache/index.d.ts +2 -0
- package/dist/server/cache/index.d.ts.map +1 -0
- package/dist/server/cache/index.js +2 -0
- package/dist/server/cache/index.js.map +1 -0
- package/dist/server/cache/utils.d.ts +30 -0
- package/dist/server/cache/utils.d.ts.map +1 -0
- package/dist/server/cache/utils.js +116 -0
- package/dist/server/cache/utils.js.map +1 -0
- package/dist/server/call-sessions.d.ts +50 -0
- package/dist/server/call-sessions.d.ts.map +1 -0
- package/dist/server/call-sessions.js +90 -0
- package/dist/server/call-sessions.js.map +1 -0
- package/dist/server/config/bucket.d.ts +9 -0
- package/dist/server/config/bucket.d.ts.map +1 -0
- package/dist/server/config/bucket.js +57 -0
- package/dist/server/config/bucket.js.map +1 -0
- package/dist/server/config/defaults.d.ts +3 -0
- package/dist/server/config/defaults.d.ts.map +1 -0
- package/dist/server/config/defaults.js +29 -0
- package/dist/server/config/defaults.js.map +1 -0
- package/dist/server/config/index.d.ts +5 -0
- package/dist/server/config/index.d.ts.map +1 -0
- package/dist/server/config/index.js +5 -0
- package/dist/server/config/index.js.map +1 -0
- package/dist/server/config/logger.d.ts +3 -0
- package/dist/server/config/logger.d.ts.map +1 -0
- package/dist/server/config/logger.js +2 -0
- package/dist/server/config/logger.js.map +1 -0
- package/dist/server/config/types.d.ts +198 -0
- package/dist/server/config/types.d.ts.map +1 -0
- package/dist/server/config/types.js +2 -0
- package/dist/server/config/types.js.map +1 -0
- package/dist/server/core.d.ts +42 -0
- package/dist/server/core.d.ts.map +1 -0
- package/dist/server/core.js +202 -0
- package/dist/server/core.js.map +1 -0
- package/dist/server/env.d.ts +39 -0
- package/dist/server/env.d.ts.map +1 -0
- package/dist/server/env.js +66 -0
- package/dist/server/env.js.map +1 -0
- package/dist/server/file-queue-protocol-plugin.d.ts +7 -0
- package/dist/server/file-queue-protocol-plugin.d.ts.map +1 -0
- package/dist/server/file-queue-protocol-plugin.js +150 -0
- package/dist/server/file-queue-protocol-plugin.js.map +1 -0
- package/dist/server/file-queue.d.ts +25 -0
- package/dist/server/file-queue.d.ts.map +1 -0
- package/dist/server/file-queue.js +2 -0
- package/dist/server/file-queue.js.map +1 -0
- package/dist/server/help.d.ts +19 -0
- package/dist/server/help.d.ts.map +1 -0
- package/dist/server/help.js +91 -0
- package/dist/server/help.js.map +1 -0
- package/dist/server/index.d.ts +29 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +29 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/operation-registry.d.ts +9 -0
- package/dist/server/operation-registry.d.ts.map +1 -0
- package/dist/server/operation-registry.js +16 -0
- package/dist/server/operation-registry.js.map +1 -0
- package/dist/server/param-aliases.d.ts +40 -0
- package/dist/server/param-aliases.d.ts.map +1 -0
- package/dist/server/param-aliases.js +112 -0
- package/dist/server/param-aliases.js.map +1 -0
- package/dist/server/protocol-plugin.d.ts +72 -0
- package/dist/server/protocol-plugin.d.ts.map +1 -0
- package/dist/server/protocol-plugin.js +2 -0
- package/dist/server/protocol-plugin.js.map +1 -0
- package/dist/server/rate-limit/index.d.ts +2 -0
- package/dist/server/rate-limit/index.d.ts.map +1 -0
- package/dist/server/rate-limit/index.js +2 -0
- package/dist/server/rate-limit/index.js.map +1 -0
- package/dist/server/rate-limit/utils.d.ts +27 -0
- package/dist/server/rate-limit/utils.d.ts.map +1 -0
- package/dist/server/rate-limit/utils.js +126 -0
- package/dist/server/rate-limit/utils.js.map +1 -0
- package/dist/server/routing.d.ts +39 -0
- package/dist/server/routing.d.ts.map +1 -0
- package/dist/server/routing.js +70 -0
- package/dist/server/routing.js.map +1 -0
- package/dist/server/rpc-protocol-plugin.d.ts +12 -0
- package/dist/server/rpc-protocol-plugin.d.ts.map +1 -0
- package/dist/server/rpc-protocol-plugin.js +134 -0
- package/dist/server/rpc-protocol-plugin.js.map +1 -0
- package/dist/server/server.d.ts +143 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +1161 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/token-limit/index.d.ts +2 -0
- package/dist/server/token-limit/index.d.ts.map +1 -0
- package/dist/server/token-limit/index.js +2 -0
- package/dist/server/token-limit/index.js.map +1 -0
- package/dist/server/token-limit/utils.d.ts +44 -0
- package/dist/server/token-limit/utils.d.ts.map +1 -0
- package/dist/server/token-limit/utils.js +260 -0
- package/dist/server/token-limit/utils.js.map +1 -0
- package/dist/server/tools.d.ts +51 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +225 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/server/transports.d.ts +25 -0
- package/dist/server/transports.d.ts.map +1 -0
- package/dist/server/transports.js +2 -0
- package/dist/server/transports.js.map +1 -0
- package/dist/spec/decorators.d.ts +41 -0
- package/dist/spec/decorators.d.ts.map +1 -0
- package/dist/spec/decorators.js +93 -0
- package/dist/spec/decorators.js.map +1 -0
- package/dist/spec/index.d.ts +3 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +3 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/metadata.d.ts +5 -0
- package/dist/spec/metadata.d.ts.map +1 -0
- package/dist/spec/metadata.js +37 -0
- package/dist/spec/metadata.js.map +1 -0
- package/dist/types/client.d.ts +81 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +14 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/endpoints.d.ts +76 -0
- package/dist/types/endpoints.d.ts.map +1 -0
- package/dist/types/endpoints.js +2 -0
- package/dist/types/endpoints.js.map +1 -0
- package/dist/types/errors.d.ts +86 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +153 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/http.d.ts +80 -0
- package/dist/types/http.d.ts.map +1 -0
- package/dist/types/http.js +61 -0
- package/dist/types/http.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/openapi.d.ts +220 -0
- package/dist/types/openapi.d.ts.map +1 -0
- package/dist/types/openapi.js +11 -0
- package/dist/types/openapi.js.map +1 -0
- package/dist/types/opts.d.ts +46 -0
- package/dist/types/opts.d.ts.map +1 -0
- package/dist/types/opts.js +2 -0
- package/dist/types/opts.js.map +1 -0
- package/dist/types/plugins.d.ts +93 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +5 -0
- package/dist/types/plugins.js.map +1 -0
- package/dist/types/tools.d.ts +52 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +2 -0
- package/dist/types/tools.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { basename, join } from 'node:path';
|
|
3
|
+
import { HttpError } from '../types';
|
|
4
|
+
export function createFileQueueProtocolPlugin(options) {
|
|
5
|
+
if (!options.config || typeof options.config !== 'object') {
|
|
6
|
+
return { name: 'file' };
|
|
7
|
+
}
|
|
8
|
+
const config = options.config;
|
|
9
|
+
let runtime;
|
|
10
|
+
let timer;
|
|
11
|
+
let busy = false;
|
|
12
|
+
async function archiveRequest(sourcePath) {
|
|
13
|
+
if (config.archive === false) {
|
|
14
|
+
await rm(sourcePath, { force: true });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (typeof config.archive === 'string') {
|
|
18
|
+
await rename(sourcePath, join(config.archive, basename(sourcePath)));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await rm(sourcePath, { force: true });
|
|
22
|
+
}
|
|
23
|
+
async function processOnce() {
|
|
24
|
+
if (!runtime || busy)
|
|
25
|
+
return;
|
|
26
|
+
busy = true;
|
|
27
|
+
try {
|
|
28
|
+
await mkdir(config.inbox, { recursive: true });
|
|
29
|
+
await mkdir(config.outbox, { recursive: true });
|
|
30
|
+
if (config.archive && typeof config.archive === 'string') {
|
|
31
|
+
await mkdir(config.archive, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
const files = (await readdir(config.inbox))
|
|
34
|
+
.filter((name) => name.endsWith('.json'))
|
|
35
|
+
.sort();
|
|
36
|
+
for (const name of files) {
|
|
37
|
+
const sourcePath = join(config.inbox, name);
|
|
38
|
+
let request;
|
|
39
|
+
try {
|
|
40
|
+
request = JSON.parse(await readFile(sourcePath, 'utf8'));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const invalidResponse = {
|
|
44
|
+
id: basename(name, '.json'),
|
|
45
|
+
ok: false,
|
|
46
|
+
error: { status: 400, message: error?.message ?? 'Invalid file queue request' },
|
|
47
|
+
};
|
|
48
|
+
await writeFile(join(config.outbox, `${basename(name, '.json')}.response.json`), JSON.stringify(invalidResponse, null, 2));
|
|
49
|
+
await rm(sourcePath, { force: true });
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const operation = runtime.resolveOperation({
|
|
53
|
+
operationId: request.operationId,
|
|
54
|
+
method: request.method,
|
|
55
|
+
path: request.path,
|
|
56
|
+
});
|
|
57
|
+
if (!operation) {
|
|
58
|
+
const notFoundResponse = {
|
|
59
|
+
id: request.id,
|
|
60
|
+
ok: false,
|
|
61
|
+
error: { status: 404, message: `Operation not found for ${request.method} ${request.path}` },
|
|
62
|
+
};
|
|
63
|
+
await writeFile(join(config.outbox, `${request.id}.response.json`), JSON.stringify(notFoundResponse, null, 2));
|
|
64
|
+
await archiveRequest(sourcePath);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const eventsPath = join(config.outbox, `${request.id}.events.jsonl`);
|
|
68
|
+
const normalizedInput = runtime.normalizeInput(request.input ?? {});
|
|
69
|
+
const rt = runtime;
|
|
70
|
+
if (!rt)
|
|
71
|
+
break;
|
|
72
|
+
const ctx = {
|
|
73
|
+
method: request.method,
|
|
74
|
+
url: request.path,
|
|
75
|
+
headers: request.headers ?? {},
|
|
76
|
+
opts: operation.routeMeta?.opts,
|
|
77
|
+
};
|
|
78
|
+
const abortController = new AbortController();
|
|
79
|
+
rt.createCallContext({
|
|
80
|
+
ctx,
|
|
81
|
+
sessionId: request.id,
|
|
82
|
+
mode: 'deferred',
|
|
83
|
+
signal: abortController.signal,
|
|
84
|
+
emit: async (event, data) => {
|
|
85
|
+
await writeFile(eventsPath, `${JSON.stringify({ id: request.id, event, data: rt.serializeValue(data) })}\n`, { flag: 'a' });
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
try {
|
|
89
|
+
const envelope = rt.createEnvelope({
|
|
90
|
+
protocol: 'file',
|
|
91
|
+
operation,
|
|
92
|
+
input: normalizedInput,
|
|
93
|
+
headers: request.headers ?? {},
|
|
94
|
+
ctx,
|
|
95
|
+
requestId: request.id,
|
|
96
|
+
req: { headers: request.headers ?? {} },
|
|
97
|
+
allowHelp: false,
|
|
98
|
+
helpRequested: false,
|
|
99
|
+
});
|
|
100
|
+
const execution = await rt.dispatch(operation, envelope);
|
|
101
|
+
const response = {
|
|
102
|
+
id: request.id,
|
|
103
|
+
ok: true,
|
|
104
|
+
result: rt.serializeValue(execution.result),
|
|
105
|
+
statusCode: execution.statusCode,
|
|
106
|
+
};
|
|
107
|
+
await writeFile(join(config.outbox, `${request.id}.response.json`), JSON.stringify(response, null, 2));
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
const status = error instanceof HttpError ? error.statusCode : 500;
|
|
111
|
+
const response = {
|
|
112
|
+
id: request.id,
|
|
113
|
+
ok: false,
|
|
114
|
+
error: {
|
|
115
|
+
status,
|
|
116
|
+
message: error?.message ?? 'Internal server error',
|
|
117
|
+
data: error instanceof HttpError ? error.data : undefined,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
await writeFile(join(config.outbox, `${request.id}.response.json`), JSON.stringify(response, null, 2));
|
|
121
|
+
}
|
|
122
|
+
await archiveRequest(sourcePath);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
busy = false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return {
|
|
130
|
+
name: 'file',
|
|
131
|
+
setup(rt) {
|
|
132
|
+
runtime = rt;
|
|
133
|
+
},
|
|
134
|
+
start() {
|
|
135
|
+
if (!config || timer)
|
|
136
|
+
return;
|
|
137
|
+
const pollIntervalMs = config.pollIntervalMs ?? 250;
|
|
138
|
+
void processOnce();
|
|
139
|
+
timer = setInterval(() => { void processOnce(); }, pollIntervalMs);
|
|
140
|
+
},
|
|
141
|
+
teardown() {
|
|
142
|
+
if (timer) {
|
|
143
|
+
clearInterval(timer);
|
|
144
|
+
timer = undefined;
|
|
145
|
+
}
|
|
146
|
+
runtime = undefined;
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=file-queue-protocol-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-queue-protocol-plugin.js","sourceRoot":"","sources":["../../src/server/file-queue-protocol-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface PLATFileQueueRequest {
|
|
2
|
+
id: string;
|
|
3
|
+
operationId?: string;
|
|
4
|
+
method: string;
|
|
5
|
+
path: string;
|
|
6
|
+
headers?: Record<string, string>;
|
|
7
|
+
input?: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
export interface PLATFileQueueSuccessResponse {
|
|
10
|
+
id: string;
|
|
11
|
+
ok: true;
|
|
12
|
+
result: unknown;
|
|
13
|
+
statusCode: number;
|
|
14
|
+
}
|
|
15
|
+
export interface PLATFileQueueErrorResponse {
|
|
16
|
+
id: string;
|
|
17
|
+
ok: false;
|
|
18
|
+
error: {
|
|
19
|
+
status?: number;
|
|
20
|
+
message: string;
|
|
21
|
+
data?: unknown;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export type PLATFileQueueResponse = PLATFileQueueSuccessResponse | PLATFileQueueErrorResponse;
|
|
25
|
+
//# sourceMappingURL=file-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-queue.d.ts","sourceRoot":"","sources":["../../src/server/file-queue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,OAAO,CAAA;KACf,CAAA;CACF;AAED,MAAM,MAAM,qBAAqB,GAAG,4BAA4B,GAAG,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-queue.js","sourceRoot":"","sources":["../../src/server/file-queue.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { RouteMeta } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Check if a query parameter should trigger help mode
|
|
5
|
+
* Returns true if help parameter is present with a truthy value or without a value
|
|
6
|
+
*/
|
|
7
|
+
export declare function isHelpRequested(helpParam: any, hasHelpParam: boolean): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Generate help documentation for a route
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateRouteHelp(methodName: string, routePath: string, httpMethod: string, routeMeta: RouteMeta | undefined, basePath: string): any;
|
|
12
|
+
/**
|
|
13
|
+
* Validate input against a Zod schema and return error if invalid
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateInput(input: Record<string, any>, schema: z.ZodTypeAny | undefined): {
|
|
16
|
+
valid: boolean;
|
|
17
|
+
error?: any;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/server/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAQ9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,QAAQ,EAAE,MAAM,GACf,GAAG,CAqDL;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,SAAS,GAC/B;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAA;CAAE,CAiBjC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a query parameter should trigger help mode
|
|
3
|
+
* Returns true if help parameter is present with a truthy value or without a value
|
|
4
|
+
*/
|
|
5
|
+
export function isHelpRequested(helpParam, hasHelpParam) {
|
|
6
|
+
if (!hasHelpParam)
|
|
7
|
+
return false;
|
|
8
|
+
if (helpParam === undefined || helpParam === '')
|
|
9
|
+
return true;
|
|
10
|
+
if (typeof helpParam === 'string') {
|
|
11
|
+
const lower = helpParam.toLowerCase();
|
|
12
|
+
return lower === 'true' || lower === 't' || lower === 'yes';
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generate help documentation for a route
|
|
18
|
+
*/
|
|
19
|
+
export function generateRouteHelp(methodName, routePath, httpMethod, routeMeta, basePath) {
|
|
20
|
+
const fullPath = basePath + routePath;
|
|
21
|
+
// Try to extract schema shape for input documentation
|
|
22
|
+
let inputDocs = null;
|
|
23
|
+
const inputSchema = routeMeta?.inputSchema;
|
|
24
|
+
if (inputSchema && 'shape' in inputSchema) {
|
|
25
|
+
const shape = inputSchema.shape;
|
|
26
|
+
if (shape) {
|
|
27
|
+
inputDocs = Object.keys(shape).reduce((acc, key) => {
|
|
28
|
+
const field = shape[key];
|
|
29
|
+
acc[key] = {
|
|
30
|
+
type: field._def?.typeName || 'unknown',
|
|
31
|
+
description: field.description || '',
|
|
32
|
+
required: !field.isOptional?.(),
|
|
33
|
+
};
|
|
34
|
+
return acc;
|
|
35
|
+
}, {});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Extract output schema info
|
|
39
|
+
let outputDocs = null;
|
|
40
|
+
const outputSchema = routeMeta?.outputSchema;
|
|
41
|
+
if (outputSchema && 'shape' in outputSchema) {
|
|
42
|
+
const shape = outputSchema.shape;
|
|
43
|
+
if (shape) {
|
|
44
|
+
outputDocs = Object.keys(shape).reduce((acc, key) => {
|
|
45
|
+
const field = shape[key];
|
|
46
|
+
acc[key] = {
|
|
47
|
+
type: field._def?.typeName || 'unknown',
|
|
48
|
+
description: field.description || '',
|
|
49
|
+
};
|
|
50
|
+
return acc;
|
|
51
|
+
}, {});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
method: httpMethod,
|
|
56
|
+
path: fullPath,
|
|
57
|
+
methodName,
|
|
58
|
+
auth: routeMeta?.auth ?? 'public',
|
|
59
|
+
summary: routeMeta?.summary,
|
|
60
|
+
description: routeMeta?.description || 'Route documentation',
|
|
61
|
+
parameters: inputDocs || 'No input schema defined',
|
|
62
|
+
response: outputDocs || 'No output schema defined',
|
|
63
|
+
limits: {
|
|
64
|
+
rateLimit: routeMeta?.rateLimit ? true : false,
|
|
65
|
+
tokenLimit: routeMeta?.tokenLimit ? true : false,
|
|
66
|
+
cache: routeMeta?.cache ? true : false,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate input against a Zod schema and return error if invalid
|
|
72
|
+
*/
|
|
73
|
+
export function validateInput(input, schema) {
|
|
74
|
+
if (!schema) {
|
|
75
|
+
return { valid: true };
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
schema.parse(input);
|
|
79
|
+
return { valid: true };
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
return {
|
|
83
|
+
valid: false,
|
|
84
|
+
error: {
|
|
85
|
+
message: err.message,
|
|
86
|
+
issues: err.issues || [],
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/server/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plat Server Framework
|
|
3
|
+
*
|
|
4
|
+
* Built on Express for production-ready HTTP server with:
|
|
5
|
+
* - Automatic controller registration and routing based on decorators
|
|
6
|
+
* - Middleware support
|
|
7
|
+
* - Date/DateTime serialization
|
|
8
|
+
* - Custom type serializers
|
|
9
|
+
* - Configurable error exposure
|
|
10
|
+
* - CORS, headers, and more
|
|
11
|
+
* - Auth decorator system with pluggable handlers
|
|
12
|
+
* - Rate limiting, token limiting, and caching plugins
|
|
13
|
+
*/
|
|
14
|
+
export * from './server';
|
|
15
|
+
export * from './core';
|
|
16
|
+
export * from './operation-registry';
|
|
17
|
+
export * from './transports';
|
|
18
|
+
export * from './protocol-plugin';
|
|
19
|
+
export * from './param-aliases';
|
|
20
|
+
export * from './routing';
|
|
21
|
+
export * from './tools';
|
|
22
|
+
export * from './cache';
|
|
23
|
+
export * from './rate-limit';
|
|
24
|
+
export * from './token-limit';
|
|
25
|
+
export * from './auth';
|
|
26
|
+
export * from './help';
|
|
27
|
+
export * from './env';
|
|
28
|
+
export * from './config/bucket';
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* plat Server Framework
|
|
3
|
+
*
|
|
4
|
+
* Built on Express for production-ready HTTP server with:
|
|
5
|
+
* - Automatic controller registration and routing based on decorators
|
|
6
|
+
* - Middleware support
|
|
7
|
+
* - Date/DateTime serialization
|
|
8
|
+
* - Custom type serializers
|
|
9
|
+
* - Configurable error exposure
|
|
10
|
+
* - CORS, headers, and more
|
|
11
|
+
* - Auth decorator system with pluggable handlers
|
|
12
|
+
* - Rate limiting, token limiting, and caching plugins
|
|
13
|
+
*/
|
|
14
|
+
export * from './server';
|
|
15
|
+
export * from './core';
|
|
16
|
+
export * from './operation-registry';
|
|
17
|
+
export * from './transports';
|
|
18
|
+
export * from './protocol-plugin';
|
|
19
|
+
export * from './param-aliases';
|
|
20
|
+
export * from './routing';
|
|
21
|
+
export * from './tools';
|
|
22
|
+
export * from './cache';
|
|
23
|
+
export * from './rate-limit';
|
|
24
|
+
export * from './token-limit';
|
|
25
|
+
export * from './auth';
|
|
26
|
+
export * from './help';
|
|
27
|
+
export * from './env';
|
|
28
|
+
export * from './config/bucket';
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PLATServerCallEnvelope, PLATServerResolvedOperation } from './transports';
|
|
2
|
+
export declare class PLATOperationRegistry {
|
|
3
|
+
private operationsById;
|
|
4
|
+
private operationsByRoute;
|
|
5
|
+
register(operation: PLATServerResolvedOperation): void;
|
|
6
|
+
resolve(envelope: Pick<PLATServerCallEnvelope, 'operationId' | 'method' | 'path'>): PLATServerResolvedOperation | undefined;
|
|
7
|
+
list(): PLATServerResolvedOperation[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=operation-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-registry.d.ts","sourceRoot":"","sources":["../../src/server/operation-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAA;AAEvF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,iBAAiB,CAAiD;IAE1E,QAAQ,CAAC,SAAS,EAAE,2BAA2B,GAAG,IAAI;IAKtD,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,EAAE,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,2BAA2B,GAAG,SAAS;IAK3H,IAAI,IAAI,2BAA2B,EAAE;CAGtC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class PLATOperationRegistry {
|
|
2
|
+
operationsById = new Map();
|
|
3
|
+
operationsByRoute = new Map();
|
|
4
|
+
register(operation) {
|
|
5
|
+
this.operationsById.set(operation.methodName, operation);
|
|
6
|
+
this.operationsByRoute.set(`${operation.method.toUpperCase()} ${operation.path}`, operation);
|
|
7
|
+
}
|
|
8
|
+
resolve(envelope) {
|
|
9
|
+
return (envelope.operationId ? this.operationsById.get(envelope.operationId) : undefined)
|
|
10
|
+
?? this.operationsByRoute.get(`${envelope.method.toUpperCase()} ${envelope.path}`);
|
|
11
|
+
}
|
|
12
|
+
list() {
|
|
13
|
+
return Array.from(this.operationsById.values());
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=operation-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation-registry.js","sourceRoot":"","sources":["../../src/server/operation-registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IACxB,cAAc,GAAG,IAAI,GAAG,EAAuC,CAAA;IAC/D,iBAAiB,GAAG,IAAI,GAAG,EAAuC,CAAA;IAE1E,QAAQ,CAAC,SAAsC;QAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;QACxD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAA;IAC9F,CAAC;IAED,OAAO,CAAC,QAAyE;QAC/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;eACpF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Aliasing
|
|
3
|
+
*
|
|
4
|
+
* Maps common parameter name variants to canonical plat parameter names.
|
|
5
|
+
* This ensures consistency while being resilient to common naming mistakes.
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* - `query` → `q`
|
|
9
|
+
* - `search` → `q`
|
|
10
|
+
* - `format` → `fmt`
|
|
11
|
+
* - `page` + `pageSize` → `limit` + `offset`
|
|
12
|
+
*/
|
|
13
|
+
export interface ParameterAliases {
|
|
14
|
+
[alias: string]: string | ((value: any, params: Record<string, any>) => void);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Normalize/alias a parameters object
|
|
18
|
+
* Converts common parameter name variants to plat canonical names
|
|
19
|
+
*
|
|
20
|
+
* @param params The input parameters object
|
|
21
|
+
* @param paramCoercions Optional config map of parameter aliases (from PLATServerOptions)
|
|
22
|
+
* @param disAllowedParams Optional list of forbidden parameter names
|
|
23
|
+
* @returns New params object with aliased names resolved
|
|
24
|
+
* @throws Error if a disallowed parameter is found in the input
|
|
25
|
+
*/
|
|
26
|
+
export declare function normalizeParameters(params: Record<string, any>, paramCoercions?: Record<string, string>, disAllowedParams?: string[]): Record<string, any>;
|
|
27
|
+
/**
|
|
28
|
+
* Get all known parameter aliases
|
|
29
|
+
* Useful for documentation and validation
|
|
30
|
+
*/
|
|
31
|
+
export declare function getKnownAliases(): Record<string, string>;
|
|
32
|
+
/**
|
|
33
|
+
* Check if a parameter name would be aliased
|
|
34
|
+
*/
|
|
35
|
+
export declare function isAliasedParameter(paramName: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get canonical name for a parameter
|
|
38
|
+
*/
|
|
39
|
+
export declare function getCanonicalName(paramName: string): string | null;
|
|
40
|
+
//# sourceMappingURL=param-aliases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-aliases.d.ts","sourceRoot":"","sources":["../../src/server/param-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;CAC9E;AAeD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACvC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiDrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUjE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Aliasing
|
|
3
|
+
*
|
|
4
|
+
* Maps common parameter name variants to canonical plat parameter names.
|
|
5
|
+
* This ensures consistency while being resilient to common naming mistakes.
|
|
6
|
+
*
|
|
7
|
+
* Examples:
|
|
8
|
+
* - `query` → `q`
|
|
9
|
+
* - `search` → `q`
|
|
10
|
+
* - `format` → `fmt`
|
|
11
|
+
* - `page` + `pageSize` → `limit` + `offset`
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Map of parameter aliases to canonical names
|
|
15
|
+
* Value can be:
|
|
16
|
+
* - string: direct alias (query → q)
|
|
17
|
+
* - function: complex transformation (page/pageSize → limit/offset)
|
|
18
|
+
*/
|
|
19
|
+
const PARAMETER_ALIASES = {
|
|
20
|
+
query: 'q',
|
|
21
|
+
search: 'q',
|
|
22
|
+
format: 'fmt',
|
|
23
|
+
// Complex transformations are handled separately
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Normalize/alias a parameters object
|
|
27
|
+
* Converts common parameter name variants to plat canonical names
|
|
28
|
+
*
|
|
29
|
+
* @param params The input parameters object
|
|
30
|
+
* @param paramCoercions Optional config map of parameter aliases (from PLATServerOptions)
|
|
31
|
+
* @param disAllowedParams Optional list of forbidden parameter names
|
|
32
|
+
* @returns New params object with aliased names resolved
|
|
33
|
+
* @throws Error if a disallowed parameter is found in the input
|
|
34
|
+
*/
|
|
35
|
+
export function normalizeParameters(params, paramCoercions, disAllowedParams) {
|
|
36
|
+
if (!params || typeof params !== 'object') {
|
|
37
|
+
return params;
|
|
38
|
+
}
|
|
39
|
+
// Check for disallowed parameters first
|
|
40
|
+
if (disAllowedParams && disAllowedParams.length > 0) {
|
|
41
|
+
for (const paramName of Object.keys(params)) {
|
|
42
|
+
if (disAllowedParams.includes(paramName)) {
|
|
43
|
+
throw new Error(`Parameter '${paramName}' is disallowed in this API. ` +
|
|
44
|
+
`Use '${getCanonicalName(paramName) || 'a different parameter'}' instead.`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const normalized = { ...params };
|
|
49
|
+
const aliases = paramCoercions || PARAMETER_ALIASES;
|
|
50
|
+
// Apply simple aliases
|
|
51
|
+
for (const [alias, canonical] of Object.entries(aliases)) {
|
|
52
|
+
if (typeof canonical === 'string' && alias in normalized && canonical) {
|
|
53
|
+
if (!(canonical in normalized)) {
|
|
54
|
+
normalized[canonical] = normalized[alias];
|
|
55
|
+
}
|
|
56
|
+
delete normalized[alias];
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Handle page/pageSize → limit/offset conversion
|
|
60
|
+
if ('page' in normalized || 'pageSize' in normalized) {
|
|
61
|
+
const page = normalized.page ?? 1;
|
|
62
|
+
const pageSize = normalized.pageSize ?? 10;
|
|
63
|
+
// Only apply if limit/offset aren't already set
|
|
64
|
+
if (!('limit' in normalized)) {
|
|
65
|
+
normalized.limit = pageSize;
|
|
66
|
+
}
|
|
67
|
+
if (!('offset' in normalized)) {
|
|
68
|
+
normalized.offset = (page - 1) * pageSize;
|
|
69
|
+
}
|
|
70
|
+
// Remove the original page/pageSize
|
|
71
|
+
delete normalized.page;
|
|
72
|
+
delete normalized.pageSize;
|
|
73
|
+
}
|
|
74
|
+
return normalized;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get all known parameter aliases
|
|
78
|
+
* Useful for documentation and validation
|
|
79
|
+
*/
|
|
80
|
+
export function getKnownAliases() {
|
|
81
|
+
const aliases = {};
|
|
82
|
+
for (const [alias, canonical] of Object.entries(PARAMETER_ALIASES)) {
|
|
83
|
+
if (typeof canonical === 'string') {
|
|
84
|
+
aliases[alias] = canonical;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Add page/pageSize special handling
|
|
88
|
+
aliases['page'] = 'offset (calculated as (page-1)*pageSize)';
|
|
89
|
+
aliases['pageSize'] = 'limit';
|
|
90
|
+
return aliases;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if a parameter name would be aliased
|
|
94
|
+
*/
|
|
95
|
+
export function isAliasedParameter(paramName) {
|
|
96
|
+
return paramName in PARAMETER_ALIASES || paramName === 'page' || paramName === 'pageSize';
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get canonical name for a parameter
|
|
100
|
+
*/
|
|
101
|
+
export function getCanonicalName(paramName) {
|
|
102
|
+
if (paramName === 'page')
|
|
103
|
+
return 'offset';
|
|
104
|
+
if (paramName === 'pageSize')
|
|
105
|
+
return 'limit';
|
|
106
|
+
const alias = PARAMETER_ALIASES[paramName];
|
|
107
|
+
if (typeof alias === 'string') {
|
|
108
|
+
return alias;
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=param-aliases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"param-aliases.js","sourceRoot":"","sources":["../../src/server/param-aliases.ts"],"names":[],"mappings":"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"}
|