@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,198 @@
|
|
|
1
|
+
import { AuthMode, CacheController, RateLimitConfigs, RateLimitController, TokenLimitConfigs, TokenLimitController } from "../../types";
|
|
2
|
+
import { Logger } from "./logger";
|
|
3
|
+
import type { InMemoryCallSessionController } from "../call-sessions";
|
|
4
|
+
import type { PLATServerProtocolPlugin } from "../protocol-plugin";
|
|
5
|
+
export interface AuthHandler {
|
|
6
|
+
verify(mode: AuthMode, req: any, ctx: any): Promise<any> | any;
|
|
7
|
+
}
|
|
8
|
+
export type Serializer = (value: any) => any;
|
|
9
|
+
export interface CORSOptions {
|
|
10
|
+
origin?: string | string[] | boolean | ((origin: string) => boolean);
|
|
11
|
+
credentials?: boolean;
|
|
12
|
+
methods?: string[];
|
|
13
|
+
headers?: string[];
|
|
14
|
+
exposedHeaders?: string[];
|
|
15
|
+
maxAge?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface FileQueueOptions {
|
|
18
|
+
inbox: string;
|
|
19
|
+
outbox: string;
|
|
20
|
+
pollIntervalMs?: number;
|
|
21
|
+
archive?: string | false;
|
|
22
|
+
}
|
|
23
|
+
export interface PLATServerOptions {
|
|
24
|
+
/**
|
|
25
|
+
* How much error information to expose to clients
|
|
26
|
+
* - 'none': only { error: 'Internal server error' }
|
|
27
|
+
* - 'message': { error: 'Original error message' }
|
|
28
|
+
* - 'full': { error: message, stack, data, ... }
|
|
29
|
+
*/
|
|
30
|
+
errorExposure?: 'none' | 'message' | 'full';
|
|
31
|
+
/**
|
|
32
|
+
* Custom serializers for non-standard types
|
|
33
|
+
* Applied after default Date/DateTime serialization
|
|
34
|
+
*/
|
|
35
|
+
serializers?: Record<string, Serializer>;
|
|
36
|
+
/**
|
|
37
|
+
* CORS configuration
|
|
38
|
+
*/
|
|
39
|
+
cors?: CORSOptions | boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Default response headers
|
|
42
|
+
*/
|
|
43
|
+
headers?: Record<string, string>;
|
|
44
|
+
/**
|
|
45
|
+
* Hook called for each incoming request
|
|
46
|
+
*/
|
|
47
|
+
onRequest?: (req: any, res: any, path: string, method: string) => void | Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Hook called for each successful response
|
|
50
|
+
*/
|
|
51
|
+
onResponse?: (req: any, res: any, statusCode: number, result: any) => void | Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Hook called when an error occurs
|
|
54
|
+
*/
|
|
55
|
+
onError?: (req: any, res: any, error: Error, statusCode: number) => void | Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Hook to handle uncaught exceptions
|
|
58
|
+
* Return true to prevent default error response
|
|
59
|
+
*/
|
|
60
|
+
handleError?: (req: any, res: any, error: Error) => boolean | Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Port to listen on
|
|
63
|
+
*/
|
|
64
|
+
port?: number;
|
|
65
|
+
/**
|
|
66
|
+
* Host to listen on (default: 'localhost')
|
|
67
|
+
*/
|
|
68
|
+
host?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Protocol for logging (default: 'http')
|
|
71
|
+
*/
|
|
72
|
+
protocol?: string;
|
|
73
|
+
/**
|
|
74
|
+
* RPC/WebSocket transport configuration
|
|
75
|
+
* - true: enable RPC websocket endpoint at /rpc
|
|
76
|
+
* - string: mount at specified path
|
|
77
|
+
* - false: disable
|
|
78
|
+
*/
|
|
79
|
+
rpc?: boolean | string;
|
|
80
|
+
/**
|
|
81
|
+
* OpenAPI specification for Swagger/ReDoc docs
|
|
82
|
+
*/
|
|
83
|
+
openapi?: any;
|
|
84
|
+
/**
|
|
85
|
+
* Enable automatic Swagger UI (default: true if openapi provided)
|
|
86
|
+
* - true: mount at /docs
|
|
87
|
+
* - string: mount at specified path (e.g. '/api-docs')
|
|
88
|
+
* - false: disable
|
|
89
|
+
*/
|
|
90
|
+
swagger?: boolean | string;
|
|
91
|
+
/**
|
|
92
|
+
* Enable automatic ReDoc (default: true if openapi provided)
|
|
93
|
+
* - true: mount at /redoc
|
|
94
|
+
* - string: mount at specified path (e.g. '/api-redoc')
|
|
95
|
+
* - false: disable
|
|
96
|
+
*/
|
|
97
|
+
redoc?: boolean | string;
|
|
98
|
+
/**
|
|
99
|
+
* URL path redirects, e.g. { '/': '/docs' }
|
|
100
|
+
*/
|
|
101
|
+
redirects?: Record<string, string>;
|
|
102
|
+
/**
|
|
103
|
+
* Logger instance (defaults to console-based logger)
|
|
104
|
+
*/
|
|
105
|
+
logger?: Logger;
|
|
106
|
+
/**
|
|
107
|
+
* Authentication handler for verifying auth modes
|
|
108
|
+
*/
|
|
109
|
+
auth?: AuthHandler;
|
|
110
|
+
/**
|
|
111
|
+
* Default auth mode for all routes (can be overridden per-controller or per-route)
|
|
112
|
+
* Default: 'public' (no auth required)
|
|
113
|
+
*/
|
|
114
|
+
defaultAuth?: AuthMode;
|
|
115
|
+
/**
|
|
116
|
+
* Rate limiting configuration
|
|
117
|
+
*/
|
|
118
|
+
rateLimit?: {
|
|
119
|
+
controller?: RateLimitController;
|
|
120
|
+
configs?: RateLimitConfigs;
|
|
121
|
+
retryAfterHeaders?: boolean | {
|
|
122
|
+
delay?: boolean;
|
|
123
|
+
retryAt?: boolean;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* Token limiting configuration
|
|
128
|
+
*/
|
|
129
|
+
tokenLimit?: {
|
|
130
|
+
controller?: TokenLimitController;
|
|
131
|
+
configs?: TokenLimitConfigs;
|
|
132
|
+
retryAfterHeaders?: boolean | {
|
|
133
|
+
delay?: boolean;
|
|
134
|
+
retryAt?: boolean;
|
|
135
|
+
};
|
|
136
|
+
responseCostHeader?: boolean;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Caching configuration
|
|
140
|
+
*/
|
|
141
|
+
cache?: {
|
|
142
|
+
controller?: CacheController;
|
|
143
|
+
cacheHeader?: boolean;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Custom route options validation
|
|
147
|
+
* Called for each route to validate any custom keys in RouteOpts
|
|
148
|
+
* Throw an error to reject invalid options
|
|
149
|
+
*/
|
|
150
|
+
validateRouteOpts?: (opts: Record<string, any>, methodName: string, path: string) => void | Promise<void>;
|
|
151
|
+
/**
|
|
152
|
+
* Method prefix configuration
|
|
153
|
+
* Enforce specific method prefixes (get, list, create, etc.)
|
|
154
|
+
* - '*': Allow any prefix (default, recommended)
|
|
155
|
+
* - Array of strings: Only allow these prefixes (e.g., ['get', 'list', 'create'])
|
|
156
|
+
*/
|
|
157
|
+
allowedMethodPrefixes?: '*' | string[];
|
|
158
|
+
/**
|
|
159
|
+
* Disallowed method prefixes
|
|
160
|
+
* Forbid specific method prefixes (e.g., 'fetch', 'search')
|
|
161
|
+
* Default: [] (none disallowed)
|
|
162
|
+
*/
|
|
163
|
+
disAllowedMethodPrefixes?: string[];
|
|
164
|
+
/**
|
|
165
|
+
* Parameter name coercions/aliases
|
|
166
|
+
* Maps parameter names to their canonical forms
|
|
167
|
+
* - Key: alternative name (e.g., 'query')
|
|
168
|
+
* - Value: canonical name (e.g., 'q')
|
|
169
|
+
* Automatically filters out identity mappings (e.g., 'q' -> 'q')
|
|
170
|
+
* Default: { query: 'q', search: 'q', format: 'fmt' }
|
|
171
|
+
*/
|
|
172
|
+
paramCoercions?: Record<string, string>;
|
|
173
|
+
/**
|
|
174
|
+
* Disallowed parameter names in handlers
|
|
175
|
+
* Throws error if a handler uses these parameter names
|
|
176
|
+
* Forces use of canonical names instead
|
|
177
|
+
* Default: [] (none disallowed)
|
|
178
|
+
* Example: ['search'] forces use of 'q' instead
|
|
179
|
+
*/
|
|
180
|
+
disAllowedParams?: string[];
|
|
181
|
+
/**
|
|
182
|
+
* Deferred HTTP call sessions for long-running operations.
|
|
183
|
+
*/
|
|
184
|
+
calls?: {
|
|
185
|
+
controller?: InMemoryCallSessionController;
|
|
186
|
+
path?: string;
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* Optional file-based request/response transport.
|
|
190
|
+
* Reads JSON requests from inbox and writes JSON responses to outbox.
|
|
191
|
+
*/
|
|
192
|
+
fileQueue?: FileQueueOptions | false;
|
|
193
|
+
/**
|
|
194
|
+
* Extra protocol plugins. Built-in HTTP/WS/file behavior still works by default.
|
|
195
|
+
*/
|
|
196
|
+
protocolPlugins?: PLATServerProtocolPlugin[];
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/config/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PLATServerResolvedOperation } from './transports';
|
|
2
|
+
import { PLATOperationRegistry } from './operation-registry';
|
|
3
|
+
interface PLATServerCoreOptions {
|
|
4
|
+
allowedMethodPrefixes?: '*' | string[];
|
|
5
|
+
disAllowedMethodPrefixes?: string[];
|
|
6
|
+
validateRouteOpts?: (opts: Record<string, any>, methodName: string, path: string) => void | Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
interface PLATServerCoreStores {
|
|
9
|
+
routes: Array<{
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
methodName?: string;
|
|
13
|
+
}>;
|
|
14
|
+
tools: Map<string, any>;
|
|
15
|
+
operationRegistry: PLATOperationRegistry;
|
|
16
|
+
registeredMethodNames: Set<string>;
|
|
17
|
+
registeredControllerNames: Set<string>;
|
|
18
|
+
}
|
|
19
|
+
export interface RegisteredControllerOperation {
|
|
20
|
+
operation: PLATServerResolvedOperation;
|
|
21
|
+
route: {
|
|
22
|
+
method: string;
|
|
23
|
+
path: string;
|
|
24
|
+
methodName: string;
|
|
25
|
+
};
|
|
26
|
+
variants: Array<{
|
|
27
|
+
method: string;
|
|
28
|
+
path: string;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
export declare class PLATServerCore {
|
|
32
|
+
private options;
|
|
33
|
+
private stores;
|
|
34
|
+
constructor(options: PLATServerCoreOptions, stores: PLATServerCoreStores);
|
|
35
|
+
registerControllers(...ControllerClasses: (new () => any)[]): RegisteredControllerOperation[];
|
|
36
|
+
private processPendingRoutes;
|
|
37
|
+
private collectRoutes;
|
|
38
|
+
private extractMethodPrefix;
|
|
39
|
+
private validateMethodName;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/server/core.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,UAAU,qBAAqB;IAC7B,qBAAqB,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAAA;IACtC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IACnC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1G;AAED,UAAU,oBAAoB;IAC5B,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACvB,iBAAiB,EAAE,qBAAqB,CAAA;IACxC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAClC,yBAAyB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,2BAA2B,CAAA;IACtC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3D,QAAQ,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAClD;AAID,qBAAa,cAAc;IAEvB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;gBADN,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB;IAGtC,mBAAmB,CAAC,GAAG,iBAAiB,EAAE,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,6BAA6B,EAAE;IAsH7F,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,aAAa;IA6BrB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,kBAAkB;CA+C3B"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { createToolDefinition } from './tools';
|
|
2
|
+
import { generateRouteVariants } from './routing';
|
|
3
|
+
import { ensureRouteMeta, getControllerMeta, pendingRoutes, ROUTE_METADATA_KEY } from '../spec';
|
|
4
|
+
const RESERVED_METHOD_NAMES = ['tools', 'routes', 'endpoints', 'help', 'openapi'];
|
|
5
|
+
export class PLATServerCore {
|
|
6
|
+
options;
|
|
7
|
+
stores;
|
|
8
|
+
constructor(options, stores) {
|
|
9
|
+
this.options = options;
|
|
10
|
+
this.stores = stores;
|
|
11
|
+
}
|
|
12
|
+
registerControllers(...ControllerClasses) {
|
|
13
|
+
const registered = [];
|
|
14
|
+
for (const ControllerClass of ControllerClasses) {
|
|
15
|
+
const meta = getControllerMeta(ControllerClass);
|
|
16
|
+
if (!meta) {
|
|
17
|
+
throw new Error(`${ControllerClass.name} is not decorated with @Controller`);
|
|
18
|
+
}
|
|
19
|
+
const instance = new ControllerClass();
|
|
20
|
+
const controllerTag = meta.tag || meta.basePath || ControllerClass.name;
|
|
21
|
+
const lowerControllerTag = controllerTag.toLowerCase();
|
|
22
|
+
if (RESERVED_METHOD_NAMES.includes(lowerControllerTag)) {
|
|
23
|
+
throw new Error(`Controller '${controllerTag}' uses a reserved plat system name. ` +
|
|
24
|
+
`Reserved names: ${RESERVED_METHOD_NAMES.join(', ')}. ` +
|
|
25
|
+
`Choose a different controller name/tag.`);
|
|
26
|
+
}
|
|
27
|
+
if (this.stores.registeredMethodNames.has(controllerTag)) {
|
|
28
|
+
throw new Error(`Controller '${controllerTag}' conflicts with an existing method name. ` +
|
|
29
|
+
`Controller names and method names must not overlap. ` +
|
|
30
|
+
`Rename either the controller or the method.`);
|
|
31
|
+
}
|
|
32
|
+
this.stores.registeredControllerNames.add(controllerTag);
|
|
33
|
+
this.processPendingRoutes(ControllerClass);
|
|
34
|
+
const freshMeta = getControllerMeta(ControllerClass);
|
|
35
|
+
const routes = this.collectRoutes(ControllerClass, freshMeta);
|
|
36
|
+
for (const [key, route] of routes.entries()) {
|
|
37
|
+
const methodName = String(key);
|
|
38
|
+
this.validateMethodName(methodName, ControllerClass.name);
|
|
39
|
+
if (this.stores.registeredControllerNames.has(methodName)) {
|
|
40
|
+
throw new Error(`Method '${methodName}' in ${ControllerClass.name} conflicts with controller name '${methodName}'. ` +
|
|
41
|
+
`Method names and controller names must not overlap. ` +
|
|
42
|
+
`Rename either the method or the controller.`);
|
|
43
|
+
}
|
|
44
|
+
if (this.stores.registeredMethodNames.has(methodName)) {
|
|
45
|
+
throw new Error(`Duplicate operationId: method "${methodName}" is defined in multiple controllers. ` +
|
|
46
|
+
`In plat, method names must be globally unique across all controllers. ` +
|
|
47
|
+
`Consider renaming one of these methods to have a unique name. ` +
|
|
48
|
+
`Current controller: ${ControllerClass.name}`);
|
|
49
|
+
}
|
|
50
|
+
this.stores.registeredMethodNames.add(methodName);
|
|
51
|
+
const fullPath = '/' + methodName;
|
|
52
|
+
const routeMeta = freshMeta?.routes.get(key);
|
|
53
|
+
this.stores.tools.set(methodName, createToolDefinition({
|
|
54
|
+
name: methodName,
|
|
55
|
+
summary: routeMeta?.summary ?? routeMeta?.opts?.summary,
|
|
56
|
+
description: routeMeta?.description ?? routeMeta?.opts?.description ?? `${route.method.toUpperCase()} ${fullPath}`,
|
|
57
|
+
method: route.method,
|
|
58
|
+
path: fullPath,
|
|
59
|
+
controller: controllerTag,
|
|
60
|
+
tags: [
|
|
61
|
+
controllerTag,
|
|
62
|
+
...(Array.isArray(routeMeta?.opts?.tags) ? routeMeta?.opts?.tags : []),
|
|
63
|
+
].filter((value, index, arr) => Boolean(value) && arr.indexOf(value) === index),
|
|
64
|
+
examples: Array.isArray(routeMeta?.opts?.examples) ? routeMeta?.opts?.examples : undefined,
|
|
65
|
+
hidden: routeMeta?.opts?.hidden === true,
|
|
66
|
+
safe: routeMeta?.opts?.safe ?? ['GET', 'HEAD'].includes(route.method.toUpperCase()),
|
|
67
|
+
idempotent: routeMeta?.opts?.idempotent ?? ['GET', 'HEAD', 'PUT', 'DELETE'].includes(route.method.toUpperCase()),
|
|
68
|
+
longRunning: routeMeta?.opts?.longRunning === true,
|
|
69
|
+
input_schema: routeMeta?.inputSchema ? createToolDefinition(methodName, route.method, fullPath, '', routeMeta.inputSchema).input_schema : undefined,
|
|
70
|
+
response_schema: routeMeta?.outputSchema ? createToolDefinition(methodName, route.method, fullPath, '', undefined, routeMeta.outputSchema).response_schema : undefined,
|
|
71
|
+
}));
|
|
72
|
+
const operation = {
|
|
73
|
+
method: route.method.toUpperCase(),
|
|
74
|
+
path: fullPath,
|
|
75
|
+
methodName,
|
|
76
|
+
boundMethod: instance[methodName].bind(instance),
|
|
77
|
+
controllerTag,
|
|
78
|
+
routeMeta,
|
|
79
|
+
controllerMeta: freshMeta,
|
|
80
|
+
};
|
|
81
|
+
this.stores.operationRegistry.register(operation);
|
|
82
|
+
const routeRecord = {
|
|
83
|
+
method: route.method.toUpperCase(),
|
|
84
|
+
path: fullPath,
|
|
85
|
+
methodName,
|
|
86
|
+
};
|
|
87
|
+
this.stores.routes.push(routeRecord);
|
|
88
|
+
registered.push({
|
|
89
|
+
operation,
|
|
90
|
+
route: routeRecord,
|
|
91
|
+
variants: generateRouteVariants(methodName, route.method)
|
|
92
|
+
.filter((variant) => !(variant.path === fullPath && variant.method === route.method.toUpperCase())),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return registered;
|
|
97
|
+
}
|
|
98
|
+
processPendingRoutes(ControllerClass) {
|
|
99
|
+
if (!pendingRoutes.has(ControllerClass))
|
|
100
|
+
return;
|
|
101
|
+
const routes = pendingRoutes.get(ControllerClass);
|
|
102
|
+
for (const route of routes) {
|
|
103
|
+
const routeMeta = ensureRouteMeta(ControllerClass, route.key);
|
|
104
|
+
routeMeta.method = route.method;
|
|
105
|
+
routeMeta.path = '/' + String(route.key);
|
|
106
|
+
routeMeta.auth = route.opts?.auth;
|
|
107
|
+
routeMeta.rateLimit = route.opts?.rateLimit;
|
|
108
|
+
routeMeta.tokenLimit = route.opts?.tokenLimit;
|
|
109
|
+
routeMeta.cache = route.opts?.cache;
|
|
110
|
+
routeMeta.summary = route.opts?.summary;
|
|
111
|
+
routeMeta.description = route.opts?.description;
|
|
112
|
+
if (route.opts) {
|
|
113
|
+
routeMeta.opts = route.opts;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
pendingRoutes.delete(ControllerClass);
|
|
117
|
+
}
|
|
118
|
+
collectRoutes(ControllerClass, freshMeta) {
|
|
119
|
+
const routes = new Map();
|
|
120
|
+
for (const key of Object.getOwnPropertyNames(ControllerClass.prototype)) {
|
|
121
|
+
if (key === 'constructor')
|
|
122
|
+
continue;
|
|
123
|
+
const method = ControllerClass.prototype[key];
|
|
124
|
+
if (typeof method !== 'function')
|
|
125
|
+
continue;
|
|
126
|
+
const routeData = method[ROUTE_METADATA_KEY];
|
|
127
|
+
if (routeData) {
|
|
128
|
+
routes.set(key, { method: routeData.httpMethod });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (freshMeta) {
|
|
132
|
+
for (const [key, routeMeta] of freshMeta.routes.entries()) {
|
|
133
|
+
if (!routeMeta.method)
|
|
134
|
+
continue;
|
|
135
|
+
routes.set(key, { method: routeMeta.method });
|
|
136
|
+
if (this.options.validateRouteOpts && routeMeta.opts) {
|
|
137
|
+
const result = this.options.validateRouteOpts(routeMeta.opts, String(key), routeMeta.path);
|
|
138
|
+
if (result && typeof result === 'object' && 'then' in result) {
|
|
139
|
+
// Keep behavior aligned with the current server host.
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return routes;
|
|
145
|
+
}
|
|
146
|
+
extractMethodPrefix(methodName) {
|
|
147
|
+
const standardPrefixes = ['create', 'update', 'delete', 'list', 'find', 'send', 'get', 'do'];
|
|
148
|
+
for (const prefix of standardPrefixes) {
|
|
149
|
+
if (methodName.startsWith(prefix) && methodName.length > prefix.length) {
|
|
150
|
+
const nextChar = methodName.charAt(prefix.length);
|
|
151
|
+
if (nextChar === nextChar.toUpperCase()) {
|
|
152
|
+
return prefix;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
for (let i = 1; i < methodName.length; i++) {
|
|
157
|
+
const char = methodName.charAt(i);
|
|
158
|
+
if (char === char.toUpperCase() && char !== char.toLowerCase()) {
|
|
159
|
+
return methodName.substring(0, i);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return methodName.length > 0 ? methodName : null;
|
|
163
|
+
}
|
|
164
|
+
validateMethodName(methodName, controllerName) {
|
|
165
|
+
if (!methodName || methodName.length === 0)
|
|
166
|
+
return;
|
|
167
|
+
const firstChar = methodName.charAt(0);
|
|
168
|
+
if (firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase()) {
|
|
169
|
+
throw new Error(`Method '${methodName}' in ${controllerName} violates plat naming convention: ` +
|
|
170
|
+
`method names must start with a lowercase letter. ` +
|
|
171
|
+
`Use '${firstChar.toLowerCase()}${methodName.slice(1)}' instead.`);
|
|
172
|
+
}
|
|
173
|
+
if (methodName.includes('_')) {
|
|
174
|
+
const camelCase = methodName.replace(/_([a-z])/g, (_, char) => char.toUpperCase());
|
|
175
|
+
throw new Error(`Method '${methodName}' in ${controllerName} violates plat naming convention: ` +
|
|
176
|
+
`underscores are not allowed. Use camelCase instead. ` +
|
|
177
|
+
`Use '${camelCase}' instead.`);
|
|
178
|
+
}
|
|
179
|
+
if (RESERVED_METHOD_NAMES.includes(methodName.toLowerCase())) {
|
|
180
|
+
throw new Error(`Method '${methodName}' in ${controllerName} uses a reserved plat system name. ` +
|
|
181
|
+
`Reserved names: ${RESERVED_METHOD_NAMES.join(', ')}. ` +
|
|
182
|
+
`Choose a different method name.`);
|
|
183
|
+
}
|
|
184
|
+
if (this.options.allowedMethodPrefixes && this.options.allowedMethodPrefixes !== '*') {
|
|
185
|
+
const prefix = this.extractMethodPrefix(methodName);
|
|
186
|
+
if (prefix && !this.options.allowedMethodPrefixes.includes(prefix)) {
|
|
187
|
+
throw new Error(`Method '${methodName}' in ${controllerName} uses disallowed prefix '${prefix}'. ` +
|
|
188
|
+
`Allowed prefixes: ${this.options.allowedMethodPrefixes.join(', ')}. ` +
|
|
189
|
+
`Rename the method to use an allowed prefix.`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (this.options.disAllowedMethodPrefixes && this.options.disAllowedMethodPrefixes.length > 0) {
|
|
193
|
+
const prefix = this.extractMethodPrefix(methodName);
|
|
194
|
+
if (prefix && this.options.disAllowedMethodPrefixes.includes(prefix)) {
|
|
195
|
+
throw new Error(`Method '${methodName}' in ${controllerName} uses disallowed prefix '${prefix}'. ` +
|
|
196
|
+
`Disallowed prefixes: ${this.options.disAllowedMethodPrefixes.join(', ')}. ` +
|
|
197
|
+
`Rename the method to use a different prefix.`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/server/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable configuration loader
|
|
3
|
+
* Uses dotenv to load variables from .env file
|
|
4
|
+
*/
|
|
5
|
+
export interface ServerEnvConfig {
|
|
6
|
+
port: number;
|
|
7
|
+
host: string;
|
|
8
|
+
protocol: string;
|
|
9
|
+
errorExposure: 'none' | 'message' | 'full';
|
|
10
|
+
jwtSecret?: string;
|
|
11
|
+
cors: boolean;
|
|
12
|
+
swagger: boolean;
|
|
13
|
+
redoc: boolean;
|
|
14
|
+
defaultAuth: string;
|
|
15
|
+
rateLimitMaxBalance: number;
|
|
16
|
+
rateLimitFillInterval: number;
|
|
17
|
+
rateLimitFillAmount: number;
|
|
18
|
+
rateLimitHeaders: boolean;
|
|
19
|
+
tokenLimitMaxBalance: number;
|
|
20
|
+
tokenLimitFillInterval: number;
|
|
21
|
+
tokenLimitFillAmount: number;
|
|
22
|
+
tokenCostHeader: boolean;
|
|
23
|
+
cacheHeader: boolean;
|
|
24
|
+
logLevel: 'debug' | 'info' | 'warn' | 'error';
|
|
25
|
+
nodeEnv: 'development' | 'production' | 'test';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Load and parse server configuration from environment variables
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadServerConfig(): ServerEnvConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Get JWT configuration from environment
|
|
33
|
+
*/
|
|
34
|
+
export declare function getJwtConfig(): {
|
|
35
|
+
secret: string;
|
|
36
|
+
expiresIn: string;
|
|
37
|
+
refreshExpiresIn: string;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/server/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,gBAAgB,EAAE,OAAO,CAAA;IACzB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,eAAe,EAAE,OAAO,CAAA;IACxB,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAC7C,OAAO,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,CAAA;CAC/C;AAmBD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,CAuBlD;AAED;;GAEG;AACH,wBAAgB,YAAY;;;;EAW3B"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variable configuration loader
|
|
3
|
+
* Uses dotenv to load variables from .env file
|
|
4
|
+
*/
|
|
5
|
+
import dotenv from 'dotenv';
|
|
6
|
+
// Load .env file
|
|
7
|
+
dotenv.config();
|
|
8
|
+
/**
|
|
9
|
+
* Parse boolean from environment variable
|
|
10
|
+
*/
|
|
11
|
+
function parseBoolean(value, defaultValue) {
|
|
12
|
+
if (!value)
|
|
13
|
+
return defaultValue;
|
|
14
|
+
return value.toLowerCase() === 'true' || value === '1' || value === 'yes';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse number from environment variable
|
|
18
|
+
*/
|
|
19
|
+
function parseNumber(value, defaultValue) {
|
|
20
|
+
if (!value)
|
|
21
|
+
return defaultValue;
|
|
22
|
+
const num = parseInt(value, 10);
|
|
23
|
+
return isNaN(num) ? defaultValue : num;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Load and parse server configuration from environment variables
|
|
27
|
+
*/
|
|
28
|
+
export function loadServerConfig() {
|
|
29
|
+
return {
|
|
30
|
+
port: parseNumber(process.env.PLAT_SERVER_PORT, 3000),
|
|
31
|
+
host: process.env.PLAT_SERVER_HOST || 'localhost',
|
|
32
|
+
protocol: process.env.PLAT_PROTOCOL || 'http',
|
|
33
|
+
errorExposure: process.env.PLAT_ERROR_EXPOSURE || 'message',
|
|
34
|
+
jwtSecret: process.env.JWT_SECRET,
|
|
35
|
+
cors: process.env.PLAT_CORS ? parseBoolean(process.env.PLAT_CORS, true) : true,
|
|
36
|
+
swagger: process.env.PLAT_SWAGGER ? parseBoolean(process.env.PLAT_SWAGGER, true) : true,
|
|
37
|
+
redoc: process.env.PLAT_REDOC ? parseBoolean(process.env.PLAT_REDOC, true) : true,
|
|
38
|
+
defaultAuth: process.env.PLAT_DEFAULT_AUTH || 'public',
|
|
39
|
+
rateLimitMaxBalance: parseNumber(process.env.PLAT_RATE_LIMIT_MAX_BALANCE, 100),
|
|
40
|
+
rateLimitFillInterval: parseNumber(process.env.PLAT_RATE_LIMIT_FILL_INTERVAL, 1000),
|
|
41
|
+
rateLimitFillAmount: parseNumber(process.env.PLAT_RATE_LIMIT_FILL_AMOUNT, 10),
|
|
42
|
+
rateLimitHeaders: parseBoolean(process.env.PLAT_RATE_LIMIT_HEADERS, true),
|
|
43
|
+
tokenLimitMaxBalance: parseNumber(process.env.PLAT_TOKEN_LIMIT_MAX_BALANCE, 10000),
|
|
44
|
+
tokenLimitFillInterval: parseNumber(process.env.PLAT_TOKEN_LIMIT_FILL_INTERVAL, 1000),
|
|
45
|
+
tokenLimitFillAmount: parseNumber(process.env.PLAT_TOKEN_LIMIT_FILL_AMOUNT, 100),
|
|
46
|
+
tokenCostHeader: parseBoolean(process.env.PLAT_TOKEN_COST_HEADER, true),
|
|
47
|
+
cacheHeader: parseBoolean(process.env.PLAT_CACHE_HEADER, true),
|
|
48
|
+
logLevel: process.env.PLAT_LOG_LEVEL || 'info',
|
|
49
|
+
nodeEnv: process.env.NODE_ENV || 'development',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get JWT configuration from environment
|
|
54
|
+
*/
|
|
55
|
+
export function getJwtConfig() {
|
|
56
|
+
const secret = process.env.JWT_SECRET;
|
|
57
|
+
if (!secret) {
|
|
58
|
+
throw new Error('JWT_SECRET environment variable is not set');
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
secret,
|
|
62
|
+
expiresIn: process.env.JWT_EXPIRES_IN || '24h',
|
|
63
|
+
refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || '7d',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/server/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PLATServerProtocolPlugin } from './protocol-plugin';
|
|
2
|
+
import type { FileQueueOptions } from './config/types';
|
|
3
|
+
export interface FileQueueProtocolPluginOptions {
|
|
4
|
+
config: FileQueueOptions | false | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare function createFileQueueProtocolPlugin(options: FileQueueProtocolPluginOptions): PLATServerProtocolPlugin;
|
|
7
|
+
//# sourceMappingURL=file-queue-protocol-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-queue-protocol-plugin.d.ts","sourceRoot":"","sources":["../../src/server/file-queue-protocol-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAA8B,MAAM,mBAAmB,CAAA;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,gBAAgB,GAAG,KAAK,GAAG,SAAS,CAAA;CAC7C;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,wBAAwB,CA6K/G"}
|