vector-framework 1.1.1 → 1.2.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.
Files changed (128) hide show
  1. package/README.md +99 -628
  2. package/dist/auth/protected.d.ts +1 -0
  3. package/dist/auth/protected.d.ts.map +1 -1
  4. package/dist/auth/protected.js +3 -0
  5. package/dist/auth/protected.js.map +1 -1
  6. package/dist/cache/manager.d.ts +1 -0
  7. package/dist/cache/manager.d.ts.map +1 -1
  8. package/dist/cache/manager.js +5 -7
  9. package/dist/cache/manager.js.map +1 -1
  10. package/dist/cli/graceful-shutdown.d.ts +15 -0
  11. package/dist/cli/graceful-shutdown.d.ts.map +1 -0
  12. package/dist/cli/graceful-shutdown.js +42 -0
  13. package/dist/cli/graceful-shutdown.js.map +1 -0
  14. package/dist/cli/index.js +46 -97
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/option-resolution.d.ts +4 -0
  17. package/dist/cli/option-resolution.d.ts.map +1 -0
  18. package/dist/cli/option-resolution.js +28 -0
  19. package/dist/cli/option-resolution.js.map +1 -0
  20. package/dist/cli.js +3423 -660
  21. package/dist/constants/index.d.ts +3 -0
  22. package/dist/constants/index.d.ts.map +1 -1
  23. package/dist/constants/index.js +6 -0
  24. package/dist/constants/index.js.map +1 -1
  25. package/dist/core/config-loader.d.ts.map +1 -1
  26. package/dist/core/config-loader.js +7 -2
  27. package/dist/core/config-loader.js.map +1 -1
  28. package/dist/core/router.d.ts +41 -17
  29. package/dist/core/router.d.ts.map +1 -1
  30. package/dist/core/router.js +432 -153
  31. package/dist/core/router.js.map +1 -1
  32. package/dist/core/server.d.ts +17 -1
  33. package/dist/core/server.d.ts.map +1 -1
  34. package/dist/core/server.js +471 -31
  35. package/dist/core/server.js.map +1 -1
  36. package/dist/core/vector.d.ts +8 -5
  37. package/dist/core/vector.d.ts.map +1 -1
  38. package/dist/core/vector.js +53 -14
  39. package/dist/core/vector.js.map +1 -1
  40. package/dist/dev/route-generator.d.ts.map +1 -1
  41. package/dist/dev/route-generator.js.map +1 -1
  42. package/dist/dev/route-scanner.d.ts.map +1 -1
  43. package/dist/dev/route-scanner.js +1 -5
  44. package/dist/dev/route-scanner.js.map +1 -1
  45. package/dist/http.d.ts +14 -14
  46. package/dist/http.d.ts.map +1 -1
  47. package/dist/http.js +34 -41
  48. package/dist/http.js.map +1 -1
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1420 -8
  52. package/dist/index.js.map +1 -1
  53. package/dist/index.mjs +1420 -8
  54. package/dist/middleware/manager.d.ts.map +1 -1
  55. package/dist/middleware/manager.js +4 -0
  56. package/dist/middleware/manager.js.map +1 -1
  57. package/dist/openapi/docs-ui.d.ts +2 -0
  58. package/dist/openapi/docs-ui.d.ts.map +1 -0
  59. package/dist/openapi/docs-ui.js +1425 -0
  60. package/dist/openapi/docs-ui.js.map +1 -0
  61. package/dist/openapi/generator.d.ts +12 -0
  62. package/dist/openapi/generator.d.ts.map +1 -0
  63. package/dist/openapi/generator.js +502 -0
  64. package/dist/openapi/generator.js.map +1 -0
  65. package/dist/start-vector.d.ts +3 -0
  66. package/dist/start-vector.d.ts.map +1 -0
  67. package/dist/start-vector.js +38 -0
  68. package/dist/start-vector.js.map +1 -0
  69. package/dist/types/index.d.ts +95 -11
  70. package/dist/types/index.d.ts.map +1 -1
  71. package/dist/types/standard-schema.d.ts +118 -0
  72. package/dist/types/standard-schema.d.ts.map +1 -0
  73. package/dist/types/standard-schema.js +2 -0
  74. package/dist/types/standard-schema.js.map +1 -0
  75. package/dist/utils/cors.d.ts +13 -0
  76. package/dist/utils/cors.d.ts.map +1 -0
  77. package/dist/utils/cors.js +89 -0
  78. package/dist/utils/cors.js.map +1 -0
  79. package/dist/utils/logger.js +1 -1
  80. package/dist/utils/path.d.ts +6 -0
  81. package/dist/utils/path.d.ts.map +1 -1
  82. package/dist/utils/path.js +5 -0
  83. package/dist/utils/path.js.map +1 -1
  84. package/dist/utils/schema-validation.d.ts +31 -0
  85. package/dist/utils/schema-validation.d.ts.map +1 -0
  86. package/dist/utils/schema-validation.js +77 -0
  87. package/dist/utils/schema-validation.js.map +1 -0
  88. package/dist/utils/validation.d.ts.map +1 -1
  89. package/dist/utils/validation.js +3 -0
  90. package/dist/utils/validation.js.map +1 -1
  91. package/package.json +15 -12
  92. package/src/auth/protected.ts +7 -13
  93. package/src/cache/manager.ts +8 -18
  94. package/src/cli/graceful-shutdown.ts +60 -0
  95. package/src/cli/index.ts +52 -115
  96. package/src/cli/option-resolution.ts +40 -0
  97. package/src/constants/index.ts +7 -0
  98. package/src/core/config-loader.ts +7 -4
  99. package/src/core/router.ts +502 -156
  100. package/src/core/server.ts +610 -33
  101. package/src/core/vector.ts +87 -33
  102. package/src/dev/route-generator.ts +1 -3
  103. package/src/dev/route-scanner.ts +2 -9
  104. package/src/http.ts +85 -125
  105. package/src/index.ts +4 -3
  106. package/src/middleware/manager.ts +4 -0
  107. package/src/openapi/assets/favicon/android-chrome-192x192.png +0 -0
  108. package/src/openapi/assets/favicon/android-chrome-512x512.png +0 -0
  109. package/src/openapi/assets/favicon/apple-touch-icon.png +0 -0
  110. package/src/openapi/assets/favicon/favicon-16x16.png +0 -0
  111. package/src/openapi/assets/favicon/favicon-32x32.png +0 -0
  112. package/src/openapi/assets/favicon/favicon.ico +0 -0
  113. package/src/openapi/assets/favicon/site.webmanifest +11 -0
  114. package/src/openapi/assets/logo.svg +12 -0
  115. package/src/openapi/assets/logo_dark.svg +6 -0
  116. package/src/openapi/assets/logo_icon.png +0 -0
  117. package/src/openapi/assets/logo_white.svg +6 -0
  118. package/src/openapi/assets/tailwindcdn.js +83 -0
  119. package/src/openapi/docs-ui.ts +1435 -0
  120. package/src/openapi/generator.ts +586 -0
  121. package/src/start-vector.ts +50 -0
  122. package/src/types/index.ts +138 -17
  123. package/src/types/standard-schema.ts +147 -0
  124. package/src/utils/cors.ts +101 -0
  125. package/src/utils/logger.ts +1 -1
  126. package/src/utils/path.ts +6 -0
  127. package/src/utils/schema-validation.ts +123 -0
  128. package/src/utils/validation.ts +3 -0
@@ -1,21 +1,196 @@
1
- import { cors } from 'itty-router';
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { STATIC_RESPONSES } from '../constants';
4
+ import { cors } from '../utils/cors';
5
+ import { renderOpenAPIDocsHtml } from '../openapi/docs-ui';
6
+ import { generateOpenAPIDocument } from '../openapi/generator';
7
+ const OPENAPI_TAILWIND_ASSET_PATH = '/_vector/openapi/tailwindcdn.js';
8
+ const OPENAPI_LOGO_DARK_ASSET_PATH = '/_vector/openapi/logo_dark.svg';
9
+ const OPENAPI_LOGO_WHITE_ASSET_PATH = '/_vector/openapi/logo_white.svg';
10
+ const OPENAPI_APPLE_TOUCH_ICON_ASSET_PATH = '/_vector/openapi/favicon/apple-touch-icon.png';
11
+ const OPENAPI_FAVICON_32_ASSET_PATH = '/_vector/openapi/favicon/favicon-32x32.png';
12
+ const OPENAPI_FAVICON_16_ASSET_PATH = '/_vector/openapi/favicon/favicon-16x16.png';
13
+ const OPENAPI_FAVICON_ICO_ASSET_PATH = '/_vector/openapi/favicon/favicon.ico';
14
+ const OPENAPI_WEBMANIFEST_ASSET_PATH = '/_vector/openapi/favicon/site.webmanifest';
15
+ const OPENAPI_ANDROID_192_ASSET_PATH = '/_vector/openapi/favicon/android-chrome-192x192.png';
16
+ const OPENAPI_ANDROID_512_ASSET_PATH = '/_vector/openapi/favicon/android-chrome-512x512.png';
17
+ const OPENAPI_TAILWIND_ASSET_RELATIVE_CANDIDATES = [
18
+ // Source execution (src/core/server.ts -> src/openapi/assets/tailwindcdn.js)
19
+ '../openapi/assets/tailwindcdn.js',
20
+ // Bundled dist entrypoints (dist/index.mjs|dist/cli.js -> src/openapi/assets/tailwindcdn.js)
21
+ '../src/openapi/assets/tailwindcdn.js',
22
+ // Unbundled dist/core/server.js execution (dist/core -> src/openapi/assets/tailwindcdn.js)
23
+ '../../src/openapi/assets/tailwindcdn.js',
24
+ ];
25
+ const OPENAPI_LOGO_DARK_ASSET_RELATIVE_CANDIDATES = [
26
+ // Source execution (src/core/server.ts -> src/openapi/assets/logo_dark.svg)
27
+ '../openapi/assets/logo_dark.svg',
28
+ // Bundled dist entrypoints (dist/index.mjs|dist/cli.js -> src/openapi/assets/logo_dark.svg)
29
+ '../src/openapi/assets/logo_dark.svg',
30
+ // Unbundled dist/core/server.js execution (dist/core -> src/openapi/assets/logo_dark.svg)
31
+ '../../src/openapi/assets/logo_dark.svg',
32
+ ];
33
+ const OPENAPI_LOGO_WHITE_ASSET_RELATIVE_CANDIDATES = [
34
+ // Source execution (src/core/server.ts -> src/openapi/assets/logo_white.svg)
35
+ '../openapi/assets/logo_white.svg',
36
+ // Bundled dist entrypoints (dist/index.mjs|dist/cli.js -> src/openapi/assets/logo_white.svg)
37
+ '../src/openapi/assets/logo_white.svg',
38
+ // Unbundled dist/core/server.js execution (dist/core -> src/openapi/assets/logo_white.svg)
39
+ '../../src/openapi/assets/logo_white.svg',
40
+ ];
41
+ const OPENAPI_TAILWIND_ASSET_CWD_CANDIDATES = [
42
+ 'src/openapi/assets/tailwindcdn.js',
43
+ 'openapi/assets/tailwindcdn.js',
44
+ 'dist/openapi/assets/tailwindcdn.js',
45
+ ];
46
+ const OPENAPI_LOGO_DARK_ASSET_CWD_CANDIDATES = [
47
+ 'src/openapi/assets/logo_dark.svg',
48
+ 'openapi/assets/logo_dark.svg',
49
+ 'dist/openapi/assets/logo_dark.svg',
50
+ ];
51
+ const OPENAPI_LOGO_WHITE_ASSET_CWD_CANDIDATES = [
52
+ 'src/openapi/assets/logo_white.svg',
53
+ 'openapi/assets/logo_white.svg',
54
+ 'dist/openapi/assets/logo_white.svg',
55
+ ];
56
+ const OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES = [
57
+ '../openapi/assets/favicon',
58
+ '../src/openapi/assets/favicon',
59
+ '../../src/openapi/assets/favicon',
60
+ ];
61
+ const OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES = [
62
+ 'src/openapi/assets/favicon',
63
+ 'openapi/assets/favicon',
64
+ 'dist/openapi/assets/favicon',
65
+ ];
66
+ const OPENAPI_TAILWIND_ASSET_INLINE_FALLBACK = '/* OpenAPI docs runtime asset missing: tailwind disabled */';
67
+ function buildOpenAPIAssetCandidatePaths(bases, filename) {
68
+ return bases.map((base) => `${base}/${filename}`);
69
+ }
70
+ function resolveOpenAPIAssetFile(relativeCandidates, cwdCandidates) {
71
+ for (const relativePath of relativeCandidates) {
72
+ try {
73
+ const fileUrl = new URL(relativePath, import.meta.url);
74
+ if (existsSync(fileUrl)) {
75
+ return Bun.file(fileUrl);
76
+ }
77
+ }
78
+ catch {
79
+ // Ignore resolution failures and try the next candidate.
80
+ }
81
+ }
82
+ const cwd = process.cwd();
83
+ for (const relativePath of cwdCandidates) {
84
+ const absolutePath = join(cwd, relativePath);
85
+ if (existsSync(absolutePath)) {
86
+ return Bun.file(absolutePath);
87
+ }
88
+ }
89
+ return null;
90
+ }
91
+ const OPENAPI_TAILWIND_ASSET_FILE = resolveOpenAPIAssetFile(OPENAPI_TAILWIND_ASSET_RELATIVE_CANDIDATES, OPENAPI_TAILWIND_ASSET_CWD_CANDIDATES);
92
+ const OPENAPI_LOGO_DARK_ASSET_FILE = resolveOpenAPIAssetFile(OPENAPI_LOGO_DARK_ASSET_RELATIVE_CANDIDATES, OPENAPI_LOGO_DARK_ASSET_CWD_CANDIDATES);
93
+ const OPENAPI_LOGO_WHITE_ASSET_FILE = resolveOpenAPIAssetFile(OPENAPI_LOGO_WHITE_ASSET_RELATIVE_CANDIDATES, OPENAPI_LOGO_WHITE_ASSET_CWD_CANDIDATES);
94
+ const OPENAPI_APPLE_TOUCH_ICON_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'apple-touch-icon.png'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'apple-touch-icon.png'));
95
+ const OPENAPI_FAVICON_32_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'favicon-32x32.png'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'favicon-32x32.png'));
96
+ const OPENAPI_FAVICON_16_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'favicon-16x16.png'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'favicon-16x16.png'));
97
+ const OPENAPI_FAVICON_ICO_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'favicon.ico'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'favicon.ico'));
98
+ const OPENAPI_WEBMANIFEST_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'site.webmanifest'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'site.webmanifest'));
99
+ const OPENAPI_ANDROID_192_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'android-chrome-192x192.png'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'android-chrome-192x192.png'));
100
+ const OPENAPI_ANDROID_512_ASSET_FILE = resolveOpenAPIAssetFile(buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_RELATIVE_BASE_CANDIDATES, 'android-chrome-512x512.png'), buildOpenAPIAssetCandidatePaths(OPENAPI_FAVICON_ASSET_CWD_BASE_CANDIDATES, 'android-chrome-512x512.png'));
101
+ const OPENAPI_FAVICON_ASSETS = [
102
+ {
103
+ path: OPENAPI_APPLE_TOUCH_ICON_ASSET_PATH,
104
+ file: OPENAPI_APPLE_TOUCH_ICON_ASSET_FILE,
105
+ contentType: 'image/png',
106
+ filename: 'apple-touch-icon.png',
107
+ },
108
+ {
109
+ path: OPENAPI_FAVICON_32_ASSET_PATH,
110
+ file: OPENAPI_FAVICON_32_ASSET_FILE,
111
+ contentType: 'image/png',
112
+ filename: 'favicon-32x32.png',
113
+ },
114
+ {
115
+ path: OPENAPI_FAVICON_16_ASSET_PATH,
116
+ file: OPENAPI_FAVICON_16_ASSET_FILE,
117
+ contentType: 'image/png',
118
+ filename: 'favicon-16x16.png',
119
+ },
120
+ {
121
+ path: OPENAPI_FAVICON_ICO_ASSET_PATH,
122
+ file: OPENAPI_FAVICON_ICO_ASSET_FILE,
123
+ contentType: 'image/x-icon',
124
+ filename: 'favicon.ico',
125
+ },
126
+ {
127
+ path: OPENAPI_WEBMANIFEST_ASSET_PATH,
128
+ file: OPENAPI_WEBMANIFEST_ASSET_FILE,
129
+ contentType: 'application/manifest+json; charset=utf-8',
130
+ filename: 'site.webmanifest',
131
+ },
132
+ {
133
+ path: OPENAPI_ANDROID_192_ASSET_PATH,
134
+ file: OPENAPI_ANDROID_192_ASSET_FILE,
135
+ contentType: 'image/png',
136
+ filename: 'android-chrome-192x192.png',
137
+ },
138
+ {
139
+ path: OPENAPI_ANDROID_512_ASSET_PATH,
140
+ file: OPENAPI_ANDROID_512_ASSET_FILE,
141
+ contentType: 'image/png',
142
+ filename: 'android-chrome-512x512.png',
143
+ },
144
+ ];
145
+ const DOCS_HTML_CACHE_CONTROL = 'public, max-age=0, must-revalidate';
146
+ const DOCS_ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
147
+ const DOCS_ASSET_ERROR_CACHE_CONTROL = 'no-store';
148
+ function escapeRegex(value) {
149
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
150
+ }
151
+ function wildcardPatternToRegex(pattern) {
152
+ let regexSource = '^';
153
+ for (const char of pattern) {
154
+ if (char === '*') {
155
+ regexSource += '.*';
156
+ continue;
157
+ }
158
+ regexSource += escapeRegex(char);
159
+ }
160
+ regexSource += '$';
161
+ return new RegExp(regexSource);
162
+ }
163
+ function matchesExposePath(path, exposePathPattern) {
164
+ if (!exposePathPattern.includes('*')) {
165
+ return path === exposePathPattern;
166
+ }
167
+ return wildcardPatternToRegex(exposePathPattern).test(path);
168
+ }
2
169
  export class VectorServer {
3
170
  server = null;
4
171
  router;
5
172
  config;
6
- corsHandler;
7
- corsHeaders = null;
173
+ openapiConfig;
174
+ openapiDocCache = null;
175
+ openapiDocsHtmlCache = null;
176
+ openapiWarningsLogged = false;
177
+ openapiTailwindMissingLogged = false;
178
+ openapiLogoDarkMissingLogged = false;
179
+ openapiLogoWhiteMissingLogged = false;
180
+ corsHandler = null;
181
+ corsHeadersEntries = null;
8
182
  constructor(router, config) {
9
183
  this.router = router;
10
184
  this.config = config;
185
+ this.openapiConfig = this.normalizeOpenAPIConfig(config.openapi, config.development);
11
186
  if (config.cors) {
12
187
  const opts = this.normalizeCorsOptions(config.cors);
13
188
  const { preflight, corsify } = cors(opts);
14
189
  this.corsHandler = { preflight, corsify };
15
- // Pre-build static CORS headers when origin is a fixed string.
16
- // Avoids cloning the Response on every request via corsify().
17
- if (typeof opts.origin === 'string') {
18
- this.corsHeaders = {
190
+ // Pre-build static CORS headers when origin does not require per-request reflection.
191
+ const canUseStaticCorsHeaders = typeof opts.origin === 'string' && (opts.origin !== '*' || !opts.credentials);
192
+ if (canUseStaticCorsHeaders) {
193
+ const corsHeaders = {
19
194
  'access-control-allow-origin': opts.origin,
20
195
  'access-control-allow-methods': opts.allowMethods,
21
196
  'access-control-allow-headers': opts.allowHeaders,
@@ -23,10 +198,266 @@ export class VectorServer {
23
198
  'access-control-max-age': String(opts.maxAge),
24
199
  };
25
200
  if (opts.credentials) {
26
- this.corsHeaders['access-control-allow-credentials'] = 'true';
201
+ corsHeaders['access-control-allow-credentials'] = 'true';
202
+ }
203
+ this.corsHeadersEntries = Object.entries(corsHeaders);
204
+ }
205
+ // Pass CORS behavior to router so matched routes also receive CORS headers.
206
+ this.router.setCorsHeaders(this.corsHeadersEntries);
207
+ this.router.setCorsHandler(this.corsHeadersEntries ? null : this.corsHandler.corsify);
208
+ }
209
+ }
210
+ normalizeOpenAPIConfig(openapi, development) {
211
+ const isDev = development !== false && process.env.NODE_ENV !== 'production';
212
+ const defaultEnabled = isDev;
213
+ if (openapi === false) {
214
+ return {
215
+ enabled: false,
216
+ path: '/openapi.json',
217
+ target: 'openapi-3.0',
218
+ docs: { enabled: false, path: '/docs' },
219
+ };
220
+ }
221
+ if (openapi === true) {
222
+ return {
223
+ enabled: true,
224
+ path: '/openapi.json',
225
+ target: 'openapi-3.0',
226
+ docs: { enabled: false, path: '/docs' },
227
+ };
228
+ }
229
+ const openapiObject = openapi || {};
230
+ const docsValue = openapiObject.docs;
231
+ const docs = typeof docsValue === 'boolean'
232
+ ? { enabled: docsValue, path: '/docs', exposePaths: undefined }
233
+ : {
234
+ enabled: docsValue?.enabled === true,
235
+ path: docsValue?.path || '/docs',
236
+ exposePaths: Array.isArray(docsValue?.exposePaths)
237
+ ? docsValue.exposePaths
238
+ .map((path) => (typeof path === 'string' ? path.trim() : ''))
239
+ .filter((path) => path.length > 0)
240
+ : undefined,
241
+ };
242
+ return {
243
+ enabled: openapiObject.enabled ?? defaultEnabled,
244
+ path: openapiObject.path || '/openapi.json',
245
+ target: openapiObject.target || 'openapi-3.0',
246
+ docs,
247
+ info: openapiObject.info,
248
+ };
249
+ }
250
+ isDocsReservedPath(path) {
251
+ return (path === this.openapiConfig.path || (this.openapiConfig.docs.enabled && path === this.openapiConfig.docs.path));
252
+ }
253
+ getOpenAPIDocument() {
254
+ if (this.openapiDocCache) {
255
+ return this.openapiDocCache;
256
+ }
257
+ const routes = this.router.getRouteDefinitions().filter((route) => !this.isDocsReservedPath(route.path));
258
+ const result = generateOpenAPIDocument(routes, {
259
+ target: this.openapiConfig.target,
260
+ info: this.openapiConfig.info,
261
+ });
262
+ if (!this.openapiWarningsLogged && result.warnings.length > 0) {
263
+ for (const warning of result.warnings) {
264
+ console.warn(warning);
265
+ }
266
+ this.openapiWarningsLogged = true;
267
+ }
268
+ this.openapiDocCache = result.document;
269
+ return this.openapiDocCache;
270
+ }
271
+ getOpenAPIDocumentForDocs() {
272
+ const exposePaths = this.openapiConfig.docs.exposePaths;
273
+ const document = this.getOpenAPIDocument();
274
+ if (!Array.isArray(exposePaths) || exposePaths.length === 0) {
275
+ return document;
276
+ }
277
+ const existingPaths = document.paths && typeof document.paths === 'object' && !Array.isArray(document.paths)
278
+ ? document.paths
279
+ : {};
280
+ const filteredPaths = {};
281
+ for (const [path, value] of Object.entries(existingPaths)) {
282
+ if (exposePaths.some((pattern) => matchesExposePath(path, pattern))) {
283
+ filteredPaths[path] = value;
284
+ }
285
+ }
286
+ return {
287
+ ...document,
288
+ paths: filteredPaths,
289
+ };
290
+ }
291
+ getOpenAPIDocsHtmlCacheEntry() {
292
+ if (this.openapiDocsHtmlCache) {
293
+ return this.openapiDocsHtmlCache;
294
+ }
295
+ const html = renderOpenAPIDocsHtml(this.getOpenAPIDocumentForDocs(), this.openapiConfig.path, OPENAPI_TAILWIND_ASSET_PATH, OPENAPI_LOGO_DARK_ASSET_PATH, OPENAPI_LOGO_WHITE_ASSET_PATH, OPENAPI_APPLE_TOUCH_ICON_ASSET_PATH, OPENAPI_FAVICON_32_ASSET_PATH, OPENAPI_FAVICON_16_ASSET_PATH, OPENAPI_WEBMANIFEST_ASSET_PATH);
296
+ const gzip = Bun.gzipSync(html);
297
+ const etag = `"${Bun.hash(html).toString(16)}"`;
298
+ this.openapiDocsHtmlCache = { html, gzip, etag };
299
+ return this.openapiDocsHtmlCache;
300
+ }
301
+ requestAcceptsGzip(request) {
302
+ const acceptEncoding = request.headers.get('accept-encoding');
303
+ return Boolean(acceptEncoding && /\bgzip\b/i.test(acceptEncoding));
304
+ }
305
+ validateReservedOpenAPIPaths() {
306
+ if (!this.openapiConfig.enabled) {
307
+ return;
308
+ }
309
+ const reserved = new Set([this.openapiConfig.path]);
310
+ if (this.openapiConfig.docs.enabled) {
311
+ reserved.add(this.openapiConfig.docs.path);
312
+ reserved.add(OPENAPI_TAILWIND_ASSET_PATH);
313
+ reserved.add(OPENAPI_LOGO_DARK_ASSET_PATH);
314
+ reserved.add(OPENAPI_LOGO_WHITE_ASSET_PATH);
315
+ for (const asset of OPENAPI_FAVICON_ASSETS) {
316
+ reserved.add(asset.path);
317
+ }
318
+ }
319
+ const methodConflicts = this.router
320
+ .getRouteDefinitions()
321
+ .filter((route) => reserved.has(route.path))
322
+ .map((route) => `${route.method} ${route.path}`);
323
+ const staticConflicts = Object.entries(this.router.getRouteTable())
324
+ .filter(([path, value]) => reserved.has(path) && value instanceof Response)
325
+ .map(([path]) => `STATIC ${path}`);
326
+ const conflicts = [...methodConflicts, ...staticConflicts];
327
+ if (conflicts.length > 0) {
328
+ throw new Error(`OpenAPI reserved path conflict: ${conflicts.join(', ')}. Change your route path(s) or reconfigure openapi.path/docs.path.`);
329
+ }
330
+ }
331
+ tryHandleOpenAPIRequest(request) {
332
+ if (!this.openapiConfig.enabled || request.method !== 'GET') {
333
+ return null;
334
+ }
335
+ const pathname = new URL(request.url).pathname;
336
+ if (pathname === this.openapiConfig.path) {
337
+ return Response.json(this.getOpenAPIDocument());
338
+ }
339
+ if (this.openapiConfig.docs.enabled && pathname === this.openapiConfig.docs.path) {
340
+ const { html, gzip, etag } = this.getOpenAPIDocsHtmlCacheEntry();
341
+ if (request.headers.get('if-none-match') === etag) {
342
+ return new Response(null, {
343
+ status: 304,
344
+ headers: {
345
+ etag,
346
+ 'cache-control': DOCS_HTML_CACHE_CONTROL,
347
+ vary: 'accept-encoding',
348
+ },
349
+ });
350
+ }
351
+ if (this.requestAcceptsGzip(request)) {
352
+ return new Response(gzip, {
353
+ status: 200,
354
+ headers: {
355
+ 'content-type': 'text/html; charset=utf-8',
356
+ 'content-encoding': 'gzip',
357
+ etag,
358
+ 'cache-control': DOCS_HTML_CACHE_CONTROL,
359
+ vary: 'accept-encoding',
360
+ },
361
+ });
362
+ }
363
+ return new Response(html, {
364
+ status: 200,
365
+ headers: {
366
+ 'content-type': 'text/html; charset=utf-8',
367
+ etag,
368
+ 'cache-control': DOCS_HTML_CACHE_CONTROL,
369
+ vary: 'accept-encoding',
370
+ },
371
+ });
372
+ }
373
+ if (this.openapiConfig.docs.enabled && pathname === OPENAPI_TAILWIND_ASSET_PATH) {
374
+ if (!OPENAPI_TAILWIND_ASSET_FILE) {
375
+ if (!this.openapiTailwindMissingLogged) {
376
+ this.openapiTailwindMissingLogged = true;
377
+ console.warn('[OpenAPI] Missing docs runtime asset "tailwindcdn.js". Serving inline fallback script instead.');
27
378
  }
379
+ return new Response(OPENAPI_TAILWIND_ASSET_INLINE_FALLBACK, {
380
+ status: 200,
381
+ headers: {
382
+ 'content-type': 'application/javascript; charset=utf-8',
383
+ 'cache-control': DOCS_ASSET_CACHE_CONTROL,
384
+ },
385
+ });
28
386
  }
387
+ return new Response(OPENAPI_TAILWIND_ASSET_FILE, {
388
+ status: 200,
389
+ headers: {
390
+ 'content-type': 'application/javascript; charset=utf-8',
391
+ 'cache-control': DOCS_ASSET_CACHE_CONTROL,
392
+ },
393
+ });
29
394
  }
395
+ if (this.openapiConfig.docs.enabled && pathname === OPENAPI_LOGO_DARK_ASSET_PATH) {
396
+ if (!OPENAPI_LOGO_DARK_ASSET_FILE) {
397
+ if (!this.openapiLogoDarkMissingLogged) {
398
+ this.openapiLogoDarkMissingLogged = true;
399
+ console.warn('[OpenAPI] Missing docs runtime asset "logo_dark.svg".');
400
+ }
401
+ return new Response('OpenAPI docs runtime asset missing: logo_dark.svg', {
402
+ status: 404,
403
+ headers: {
404
+ 'content-type': 'text/plain; charset=utf-8',
405
+ 'cache-control': DOCS_ASSET_ERROR_CACHE_CONTROL,
406
+ },
407
+ });
408
+ }
409
+ return new Response(OPENAPI_LOGO_DARK_ASSET_FILE, {
410
+ status: 200,
411
+ headers: {
412
+ 'content-type': 'image/svg+xml; charset=utf-8',
413
+ 'cache-control': DOCS_ASSET_CACHE_CONTROL,
414
+ },
415
+ });
416
+ }
417
+ if (this.openapiConfig.docs.enabled && pathname === OPENAPI_LOGO_WHITE_ASSET_PATH) {
418
+ if (!OPENAPI_LOGO_WHITE_ASSET_FILE) {
419
+ if (!this.openapiLogoWhiteMissingLogged) {
420
+ this.openapiLogoWhiteMissingLogged = true;
421
+ console.warn('[OpenAPI] Missing docs runtime asset "logo_white.svg".');
422
+ }
423
+ return new Response('OpenAPI docs runtime asset missing: logo_white.svg', {
424
+ status: 404,
425
+ headers: {
426
+ 'content-type': 'text/plain; charset=utf-8',
427
+ 'cache-control': DOCS_ASSET_ERROR_CACHE_CONTROL,
428
+ },
429
+ });
430
+ }
431
+ return new Response(OPENAPI_LOGO_WHITE_ASSET_FILE, {
432
+ status: 200,
433
+ headers: {
434
+ 'content-type': 'image/svg+xml; charset=utf-8',
435
+ 'cache-control': DOCS_ASSET_CACHE_CONTROL,
436
+ },
437
+ });
438
+ }
439
+ if (this.openapiConfig.docs.enabled) {
440
+ const faviconAsset = OPENAPI_FAVICON_ASSETS.find((asset) => asset.path === pathname);
441
+ if (faviconAsset) {
442
+ if (!faviconAsset.file) {
443
+ return new Response(`OpenAPI docs runtime asset missing: ${faviconAsset.filename}`, {
444
+ status: 404,
445
+ headers: {
446
+ 'content-type': 'text/plain; charset=utf-8',
447
+ 'cache-control': DOCS_ASSET_ERROR_CACHE_CONTROL,
448
+ },
449
+ });
450
+ }
451
+ return new Response(faviconAsset.file, {
452
+ status: 200,
453
+ headers: {
454
+ 'content-type': faviconAsset.contentType,
455
+ 'cache-control': DOCS_ASSET_CACHE_CONTROL,
456
+ },
457
+ });
458
+ }
459
+ }
460
+ return null;
30
461
  }
31
462
  normalizeCorsOptions(options) {
32
463
  return {
@@ -44,31 +475,39 @@ export class VectorServer {
44
475
  maxAge: options.maxAge || 86400,
45
476
  };
46
477
  }
478
+ applyCors(response, request) {
479
+ if (this.corsHeadersEntries) {
480
+ for (const [k, v] of this.corsHeadersEntries) {
481
+ response.headers.set(k, v);
482
+ }
483
+ return response;
484
+ }
485
+ if (this.corsHandler && request) {
486
+ return this.corsHandler.corsify(response, request);
487
+ }
488
+ return response;
489
+ }
47
490
  async start() {
48
- const port = this.config.port || 3000;
491
+ const port = this.config.port ?? 3000;
49
492
  const hostname = this.config.hostname || 'localhost';
50
- const fetch = async (request) => {
493
+ this.validateReservedOpenAPIPaths();
494
+ const fallbackFetch = async (request) => {
51
495
  try {
52
- // Handle CORS preflight
496
+ // Handle CORS preflight for any path
53
497
  if (this.corsHandler && request.method === 'OPTIONS') {
54
498
  return this.corsHandler.preflight(request);
55
499
  }
56
- // Try to handle the request with our router
57
- let response = await this.router.handle(request);
58
- // Apply CORS headers if configured
59
- if (this.corsHeaders) {
60
- for (const [k, v] of Object.entries(this.corsHeaders)) {
61
- response.headers.set(k, v);
62
- }
63
- }
64
- else if (this.corsHandler) {
65
- response = this.corsHandler.corsify(response, request);
500
+ // Handle built-in docs endpoints for requests that fell through the Bun route table.
501
+ const openapiResponse = this.tryHandleOpenAPIRequest(request);
502
+ if (openapiResponse) {
503
+ return this.applyCors(openapiResponse, request);
66
504
  }
67
- return response;
505
+ // No route matched — return 404
506
+ return this.applyCors(STATIC_RESPONSES.NOT_FOUND.clone(), request);
68
507
  }
69
508
  catch (error) {
70
509
  console.error('Server error:', error);
71
- return new Response('Internal Server Error', { status: 500 });
510
+ return this.applyCors(new Response('Internal Server Error', { status: 500 }), request);
72
511
  }
73
512
  };
74
513
  try {
@@ -76,22 +515,20 @@ export class VectorServer {
76
515
  port,
77
516
  hostname,
78
517
  reusePort: this.config.reusePort !== false,
79
- fetch,
80
- idleTimeout: this.config.idleTimeout || 60,
81
- error: (error) => {
518
+ routes: this.router.getRouteTable(),
519
+ fetch: fallbackFetch,
520
+ idleTimeout: this.config.idleTimeout ?? 60,
521
+ error: (error, request) => {
82
522
  console.error('[ERROR] Server error:', error);
83
- return new Response('Internal Server Error', { status: 500 });
523
+ return this.applyCors(new Response('Internal Server Error', { status: 500 }), request);
84
524
  },
85
525
  });
86
- // Validate that the server actually started
87
526
  if (!this.server || !this.server.port) {
88
527
  throw new Error(`Failed to start server on ${hostname}:${port} - server object is invalid`);
89
528
  }
90
- // Server logs are handled by CLI
91
529
  return this.server;
92
530
  }
93
531
  catch (error) {
94
- // Enhance error message with context for common issues
95
532
  if (error.code === 'EADDRINUSE' || error.message?.includes('address already in use')) {
96
533
  error.message = `Port ${port} is already in use`;
97
534
  error.port = port;
@@ -111,6 +548,9 @@ export class VectorServer {
111
548
  if (this.server) {
112
549
  this.server.stop();
113
550
  this.server = null;
551
+ this.openapiDocCache = null;
552
+ this.openapiDocsHtmlCache = null;
553
+ this.openapiWarningsLogged = false;
114
554
  console.log('Server stopped');
115
555
  }
116
556
  }
@@ -118,7 +558,7 @@ export class VectorServer {
118
558
  return this.server;
119
559
  }
120
560
  getPort() {
121
- return this.server?.port || this.config.port || 3000;
561
+ return this.server?.port ?? this.config.port ?? 3000;
122
562
  }
123
563
  getHostname() {
124
564
  return this.server?.hostname || this.config.hostname || 'localhost';
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/core/server.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import type { Server } from 'bun';
2
- import type { RouteEntry } from 'itty-router';
3
2
  import { AuthManager } from '../auth/protected';
4
3
  import { CacheManager } from '../cache/manager';
5
- import type { CacheHandler, DefaultVectorTypes, ProtectedHandler, RouteHandler, RouteOptions, VectorConfig, VectorTypes } from '../types';
4
+ import type { CacheHandler, DefaultVectorTypes, InferRouteInputFromSchemaDefinition, ProtectedHandler, RouteHandler, RouteOptions, RouteSchemaDefinition, VectorConfig, VectorTypes } from '../types';
6
5
  import { VectorRouter } from './router';
7
6
  import { VectorServer } from './server';
8
7
  export declare class Vector<TTypes extends VectorTypes = DefaultVectorTypes> {
@@ -17,13 +16,16 @@ export declare class Vector<TTypes extends VectorTypes = DefaultVectorTypes> {
17
16
  private routeGenerator;
18
17
  private _protectedHandler;
19
18
  private _cacheHandler;
19
+ private shutdownPromise;
20
20
  private constructor();
21
21
  static getInstance<T extends VectorTypes = DefaultVectorTypes>(): Vector<T>;
22
- setProtectedHandler(handler: ProtectedHandler<TTypes>): void;
22
+ setProtectedHandler(handler: ProtectedHandler<TTypes> | null): void;
23
23
  getProtectedHandler(): ProtectedHandler<TTypes> | null;
24
- setCacheHandler(handler: CacheHandler): void;
24
+ setCacheHandler(handler: CacheHandler | null): void;
25
25
  getCacheHandler(): CacheHandler | null;
26
- addRoute(options: RouteOptions<TTypes>, handler: RouteHandler<TTypes>): RouteEntry;
26
+ addRoute<TSchemaDef extends RouteSchemaDefinition | undefined>(options: Omit<RouteOptions<TTypes>, 'schema'> & {
27
+ schema?: TSchemaDef;
28
+ }, handler: RouteHandler<TTypes, InferRouteInputFromSchemaDefinition<TSchemaDef>>): void;
27
29
  startServer(config?: VectorConfig<TTypes>): Promise<Server>;
28
30
  private discoverRoutes;
29
31
  loadRoute(routeModule: any): Promise<void>;
@@ -31,6 +33,7 @@ export declare class Vector<TTypes extends VectorTypes = DefaultVectorTypes> {
31
33
  private isRouteDefinition;
32
34
  private logRouteLoaded;
33
35
  stop(): void;
36
+ shutdown(): Promise<void>;
34
37
  getServer(): VectorServer<TTypes> | null;
35
38
  getRouter(): VectorRouter<TTypes>;
36
39
  getCacheManager(): CacheManager<TTypes>;