@happyvertical/smrt-core 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (631) hide show
  1. package/AGENTS.md +124 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +265 -0
  5. package/bin/smrt-prebuild.js +26 -0
  6. package/dist/__tests__/fixtures/advisor-test-classes.d.ts +28 -0
  7. package/dist/__tests__/fixtures/advisor-test-classes.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts +12 -0
  9. package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts.map +1 -0
  10. package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts +28 -0
  11. package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/inheritance-test-classes.d.ts +43 -0
  13. package/dist/__tests__/fixtures/inheritance-test-classes.d.ts.map +1 -0
  14. package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts +18 -0
  15. package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts +15 -0
  17. package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts.map +1 -0
  18. package/dist/__tests__/fixtures/object-spec-test-classes.d.ts +13 -0
  19. package/dist/__tests__/fixtures/object-spec-test-classes.d.ts.map +1 -0
  20. package/dist/__tests__/fixtures/registry-test-classes.d.ts +23 -0
  21. package/dist/__tests__/fixtures/registry-test-classes.d.ts.map +1 -0
  22. package/dist/adapters/ai-usage.d.ts +23 -0
  23. package/dist/adapters/ai-usage.d.ts.map +1 -0
  24. package/dist/adapters/ai-usage.js +105 -0
  25. package/dist/adapters/ai-usage.js.map +1 -0
  26. package/dist/adapters/cost-rates.d.ts +20 -0
  27. package/dist/adapters/cost-rates.d.ts.map +1 -0
  28. package/dist/adapters/cost-rates.js +40 -0
  29. package/dist/adapters/cost-rates.js.map +1 -0
  30. package/dist/adapters/index.d.ts +19 -0
  31. package/dist/adapters/index.d.ts.map +1 -0
  32. package/dist/adapters/metrics.d.ts +111 -0
  33. package/dist/adapters/metrics.d.ts.map +1 -0
  34. package/dist/adapters/metrics.js +169 -0
  35. package/dist/adapters/metrics.js.map +1 -0
  36. package/dist/adapters/pubsub.d.ts +124 -0
  37. package/dist/adapters/pubsub.d.ts.map +1 -0
  38. package/dist/adapters/pubsub.js +121 -0
  39. package/dist/adapters/pubsub.js.map +1 -0
  40. package/dist/browser.d.ts +32 -0
  41. package/dist/browser.d.ts.map +1 -0
  42. package/dist/browser.js +68 -0
  43. package/dist/browser.js.map +1 -0
  44. package/dist/child-accessors.d.ts +27 -0
  45. package/dist/child-accessors.d.ts.map +1 -0
  46. package/dist/child-accessors.js +35 -0
  47. package/dist/child-accessors.js.map +1 -0
  48. package/dist/class.d.ts +313 -0
  49. package/dist/class.d.ts.map +1 -0
  50. package/dist/class.js +896 -0
  51. package/dist/class.js.map +1 -0
  52. package/dist/collection-cache.d.ts +110 -0
  53. package/dist/collection-cache.d.ts.map +1 -0
  54. package/dist/collection-cache.js +187 -0
  55. package/dist/collection-cache.js.map +1 -0
  56. package/dist/collection.d.ts +894 -0
  57. package/dist/collection.d.ts.map +1 -0
  58. package/dist/collection.js +1987 -0
  59. package/dist/collection.js.map +1 -0
  60. package/dist/config/global-config.d.ts +3 -0
  61. package/dist/config/global-config.d.ts.map +1 -0
  62. package/dist/config/global-config.js +19 -0
  63. package/dist/config/global-config.js.map +1 -0
  64. package/dist/config.d.ts +145 -0
  65. package/dist/config.d.ts.map +1 -0
  66. package/dist/config.js +57 -0
  67. package/dist/config.js.map +1 -0
  68. package/dist/consumer-plugin/index.d.ts +22 -0
  69. package/dist/consumer-plugin/index.d.ts.map +1 -0
  70. package/dist/consumer-plugin/index.js +452 -0
  71. package/dist/consumer-plugin/index.js.map +1 -0
  72. package/dist/consumer-plugin.d.ts +8 -0
  73. package/dist/consumer-plugin.d.ts.map +1 -0
  74. package/dist/consumer-plugin.js +5 -0
  75. package/dist/consumer-plugin.js.map +1 -0
  76. package/dist/database.d.ts +95 -0
  77. package/dist/database.d.ts.map +1 -0
  78. package/dist/database.js +32 -0
  79. package/dist/database.js.map +1 -0
  80. package/dist/decorators/compatibility.d.ts +14 -0
  81. package/dist/decorators/compatibility.d.ts.map +1 -0
  82. package/dist/decorators/compatibility.js +111 -0
  83. package/dist/decorators/compatibility.js.map +1 -0
  84. package/dist/decorators/index.d.ts +381 -0
  85. package/dist/decorators/index.d.ts.map +1 -0
  86. package/dist/decorators/index.js +104 -0
  87. package/dist/decorators/index.js.map +1 -0
  88. package/dist/dispatch/bus.d.ts +306 -0
  89. package/dist/dispatch/bus.d.ts.map +1 -0
  90. package/dist/dispatch/bus.js +583 -0
  91. package/dist/dispatch/bus.js.map +1 -0
  92. package/dist/dispatch/collections/DispatchSubscriptions.d.ts +79 -0
  93. package/dist/dispatch/collections/DispatchSubscriptions.d.ts.map +1 -0
  94. package/dist/dispatch/collections/DispatchSubscriptions.js +243 -0
  95. package/dist/dispatch/collections/DispatchSubscriptions.js.map +1 -0
  96. package/dist/dispatch/collections/Dispatches.d.ts +98 -0
  97. package/dist/dispatch/collections/Dispatches.d.ts.map +1 -0
  98. package/dist/dispatch/collections/Dispatches.js +358 -0
  99. package/dist/dispatch/collections/Dispatches.js.map +1 -0
  100. package/dist/dispatch/index.d.ts +47 -0
  101. package/dist/dispatch/index.d.ts.map +1 -0
  102. package/dist/dispatch/models/Dispatch.d.ts +101 -0
  103. package/dist/dispatch/models/Dispatch.d.ts.map +1 -0
  104. package/dist/dispatch/models/Dispatch.js +162 -0
  105. package/dist/dispatch/models/Dispatch.js.map +1 -0
  106. package/dist/dispatch/models/DispatchSubscription.d.ts +83 -0
  107. package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -0
  108. package/dist/dispatch/models/DispatchSubscription.js +112 -0
  109. package/dist/dispatch/models/DispatchSubscription.js.map +1 -0
  110. package/dist/dispatch/tenant-resolver.d.ts +98 -0
  111. package/dist/dispatch/tenant-resolver.d.ts.map +1 -0
  112. package/dist/dispatch/tenant-resolver.js +32 -0
  113. package/dist/dispatch/tenant-resolver.js.map +1 -0
  114. package/dist/dispatch/types.d.ts +149 -0
  115. package/dist/dispatch/types.d.ts.map +1 -0
  116. package/dist/embeddings/hash.d.ts +33 -0
  117. package/dist/embeddings/hash.d.ts.map +1 -0
  118. package/dist/embeddings/hash.js +37 -0
  119. package/dist/embeddings/hash.js.map +1 -0
  120. package/dist/embeddings/index.d.ts +36 -0
  121. package/dist/embeddings/index.d.ts.map +1 -0
  122. package/dist/embeddings/provider.d.ts +75 -0
  123. package/dist/embeddings/provider.d.ts.map +1 -0
  124. package/dist/embeddings/provider.js +170 -0
  125. package/dist/embeddings/provider.js.map +1 -0
  126. package/dist/embeddings/similarity.d.ts +47 -0
  127. package/dist/embeddings/similarity.d.ts.map +1 -0
  128. package/dist/embeddings/similarity.js +64 -0
  129. package/dist/embeddings/similarity.js.map +1 -0
  130. package/dist/embeddings/storage.d.ts +125 -0
  131. package/dist/embeddings/storage.d.ts.map +1 -0
  132. package/dist/embeddings/storage.js +283 -0
  133. package/dist/embeddings/storage.js.map +1 -0
  134. package/dist/embeddings/types.d.ts +250 -0
  135. package/dist/embeddings/types.d.ts.map +1 -0
  136. package/dist/errors.d.ts +363 -0
  137. package/dist/errors.d.ts.map +1 -0
  138. package/dist/errors.js +669 -0
  139. package/dist/errors.js.map +1 -0
  140. package/dist/generators/cli.d.ts +162 -0
  141. package/dist/generators/cli.d.ts.map +1 -0
  142. package/dist/generators/cli.js +462 -0
  143. package/dist/generators/cli.js.map +1 -0
  144. package/dist/generators/index.d.ts +13 -0
  145. package/dist/generators/index.d.ts.map +1 -0
  146. package/dist/generators/mcp-runtime-template.d.ts +60 -0
  147. package/dist/generators/mcp-runtime-template.d.ts.map +1 -0
  148. package/dist/generators/mcp-runtime-template.js +509 -0
  149. package/dist/generators/mcp-runtime-template.js.map +1 -0
  150. package/dist/generators/mcp.d.ts +231 -0
  151. package/dist/generators/mcp.d.ts.map +1 -0
  152. package/dist/generators/mcp.js +1220 -0
  153. package/dist/generators/mcp.js.map +1 -0
  154. package/dist/generators/rest.d.ts +171 -0
  155. package/dist/generators/rest.d.ts.map +1 -0
  156. package/dist/generators/rest.js +591 -0
  157. package/dist/generators/rest.js.map +1 -0
  158. package/dist/generators/swagger.d.ts +21 -0
  159. package/dist/generators/swagger.d.ts.map +1 -0
  160. package/dist/generators/swagger.js +307 -0
  161. package/dist/generators/swagger.js.map +1 -0
  162. package/dist/generators/tenant-gate.d.ts +74 -0
  163. package/dist/generators/tenant-gate.d.ts.map +1 -0
  164. package/dist/generators/tenant-gate.js +15 -0
  165. package/dist/generators/tenant-gate.js.map +1 -0
  166. package/dist/generators.d.ts +8 -0
  167. package/dist/generators.d.ts.map +1 -0
  168. package/dist/generators.js +19 -0
  169. package/dist/generators.js.map +1 -0
  170. package/dist/hierarchical.d.ts +103 -0
  171. package/dist/hierarchical.d.ts.map +1 -0
  172. package/dist/hierarchical.js +184 -0
  173. package/dist/hierarchical.js.map +1 -0
  174. package/dist/index.d.ts +57 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +202 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/interceptors.d.ts +251 -0
  179. package/dist/interceptors.d.ts.map +1 -0
  180. package/dist/interceptors.js +259 -0
  181. package/dist/interceptors.js.map +1 -0
  182. package/dist/junction.d.ts +99 -0
  183. package/dist/junction.d.ts.map +1 -0
  184. package/dist/junction.js +136 -0
  185. package/dist/junction.js.map +1 -0
  186. package/dist/knowledge.d.ts +11 -0
  187. package/dist/knowledge.d.ts.map +1 -0
  188. package/dist/knowledge.js +310 -0
  189. package/dist/knowledge.js.map +1 -0
  190. package/dist/lazy-config.d.ts +160 -0
  191. package/dist/lazy-config.d.ts.map +1 -0
  192. package/dist/lazy-config.js +146 -0
  193. package/dist/lazy-config.js.map +1 -0
  194. package/dist/manifest/discover-base-classes.d.ts +78 -0
  195. package/dist/manifest/discover-base-classes.d.ts.map +1 -0
  196. package/dist/manifest/discover-base-classes.js +85 -0
  197. package/dist/manifest/discover-base-classes.js.map +1 -0
  198. package/dist/manifest/discover-smrt-packages.d.ts +48 -0
  199. package/dist/manifest/discover-smrt-packages.d.ts.map +1 -0
  200. package/dist/manifest/discover-smrt-packages.js +361 -0
  201. package/dist/manifest/discover-smrt-packages.js.map +1 -0
  202. package/dist/manifest/generator.d.ts +93 -0
  203. package/dist/manifest/generator.d.ts.map +1 -0
  204. package/dist/manifest/generator.js +380 -0
  205. package/dist/manifest/generator.js.map +1 -0
  206. package/dist/manifest/index.d.ts +16 -0
  207. package/dist/manifest/index.d.ts.map +1 -0
  208. package/dist/manifest/index.js +51 -0
  209. package/dist/manifest/index.js.map +1 -0
  210. package/dist/manifest/manager.d.ts +51 -0
  211. package/dist/manifest/manager.d.ts.map +1 -0
  212. package/dist/manifest/manager.js +89 -0
  213. package/dist/manifest/manager.js.map +1 -0
  214. package/dist/manifest/manifest-loader.d.ts +187 -0
  215. package/dist/manifest/manifest-loader.d.ts.map +1 -0
  216. package/dist/manifest/manifest-loader.js +847 -0
  217. package/dist/manifest/manifest-loader.js.map +1 -0
  218. package/dist/manifest/sources/composite.d.ts +22 -0
  219. package/dist/manifest/sources/composite.d.ts.map +1 -0
  220. package/dist/manifest/sources/composite.js +60 -0
  221. package/dist/manifest/sources/composite.js.map +1 -0
  222. package/dist/manifest/sources/embedded.d.ts +7 -0
  223. package/dist/manifest/sources/embedded.d.ts.map +1 -0
  224. package/dist/manifest/sources/embedded.js +30 -0
  225. package/dist/manifest/sources/embedded.js.map +1 -0
  226. package/dist/manifest/sources/explicit-paths.d.ts +17 -0
  227. package/dist/manifest/sources/explicit-paths.d.ts.map +1 -0
  228. package/dist/manifest/sources/explicit-paths.js +35 -0
  229. package/dist/manifest/sources/explicit-paths.js.map +1 -0
  230. package/dist/manifest/sources/fallback.d.ts +25 -0
  231. package/dist/manifest/sources/fallback.d.ts.map +1 -0
  232. package/dist/manifest/sources/fallback.js +63 -0
  233. package/dist/manifest/sources/fallback.js.map +1 -0
  234. package/dist/manifest/sources/index.d.ts +17 -0
  235. package/dist/manifest/sources/index.d.ts.map +1 -0
  236. package/dist/manifest/sources/local-test.d.ts +7 -0
  237. package/dist/manifest/sources/local-test.d.ts.map +1 -0
  238. package/dist/manifest/sources/local-test.js +21 -0
  239. package/dist/manifest/sources/local-test.js.map +1 -0
  240. package/dist/manifest/sources/static.d.ts +7 -0
  241. package/dist/manifest/sources/static.d.ts.map +1 -0
  242. package/dist/manifest/sources/static.js +19 -0
  243. package/dist/manifest/sources/static.js.map +1 -0
  244. package/dist/manifest/sources/test.d.ts +7 -0
  245. package/dist/manifest/sources/test.d.ts.map +1 -0
  246. package/dist/manifest/sources/test.js +21 -0
  247. package/dist/manifest/sources/test.js.map +1 -0
  248. package/dist/manifest/sources/types.d.ts +79 -0
  249. package/dist/manifest/sources/types.d.ts.map +1 -0
  250. package/dist/manifest/sources/types.js +61 -0
  251. package/dist/manifest/sources/types.js.map +1 -0
  252. package/dist/manifest/static-manifest.d.ts +4 -0
  253. package/dist/manifest/static-manifest.d.ts.map +1 -0
  254. package/dist/manifest/static-manifest.js +1535 -0
  255. package/dist/manifest/static-manifest.js.map +1 -0
  256. package/dist/manifest/store.d.ts +111 -0
  257. package/dist/manifest/store.d.ts.map +1 -0
  258. package/dist/manifest/store.js +431 -0
  259. package/dist/manifest/store.js.map +1 -0
  260. package/dist/manifest/test-manifest-loader.d.ts +3 -0
  261. package/dist/manifest/test-manifest-loader.d.ts.map +1 -0
  262. package/dist/manifest/test-manifest-stub.d.ts +4 -0
  263. package/dist/manifest/test-manifest-stub.d.ts.map +1 -0
  264. package/dist/manifest/test-manifest-stub.js +80013 -0
  265. package/dist/manifest/test-manifest-stub.js.map +1 -0
  266. package/dist/manifest.d.ts +8 -0
  267. package/dist/manifest.d.ts.map +1 -0
  268. package/dist/manifest.js +20 -0
  269. package/dist/manifest.js.map +1 -0
  270. package/dist/manifest.json +1489 -0
  271. package/dist/mcp-advisor/index.d.ts +499 -0
  272. package/dist/mcp-advisor/index.d.ts.map +1 -0
  273. package/dist/mcp-advisor/tools/add-ai-methods.d.ts +6 -0
  274. package/dist/mcp-advisor/tools/add-ai-methods.d.ts.map +1 -0
  275. package/dist/mcp-advisor/tools/configure-decorators.d.ts +6 -0
  276. package/dist/mcp-advisor/tools/configure-decorators.d.ts.map +1 -0
  277. package/dist/mcp-advisor/tools/generate-collection.d.ts +6 -0
  278. package/dist/mcp-advisor/tools/generate-collection.d.ts.map +1 -0
  279. package/dist/mcp-advisor/tools/generate-field-definitions.d.ts +6 -0
  280. package/dist/mcp-advisor/tools/generate-field-definitions.d.ts.map +1 -0
  281. package/dist/mcp-advisor/tools/generate-smrt-class.d.ts +6 -0
  282. package/dist/mcp-advisor/tools/generate-smrt-class.d.ts.map +1 -0
  283. package/dist/mcp-advisor/tools/get-object-config.d.ts +6 -0
  284. package/dist/mcp-advisor/tools/get-object-config.d.ts.map +1 -0
  285. package/dist/mcp-advisor/tools/get-object-schema.d.ts +10 -0
  286. package/dist/mcp-advisor/tools/get-object-schema.d.ts.map +1 -0
  287. package/dist/mcp-advisor/tools/list-registered-objects.d.ts +9 -0
  288. package/dist/mcp-advisor/tools/list-registered-objects.d.ts.map +1 -0
  289. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts +9 -0
  290. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts.map +1 -0
  291. package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts +9 -0
  292. package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts.map +1 -0
  293. package/dist/mcp-advisor/tools/validate-smrt-object.d.ts +6 -0
  294. package/dist/mcp-advisor/tools/validate-smrt-object.d.ts.map +1 -0
  295. package/dist/mcp-advisor/types.d.ts +209 -0
  296. package/dist/mcp-advisor/types.d.ts.map +1 -0
  297. package/dist/migrations/backfill-tracker.d.ts +84 -0
  298. package/dist/migrations/backfill-tracker.d.ts.map +1 -0
  299. package/dist/migrations/backfill-tracker.js +118 -0
  300. package/dist/migrations/backfill-tracker.js.map +1 -0
  301. package/dist/migrations/checksum.d.ts +43 -0
  302. package/dist/migrations/checksum.d.ts.map +1 -0
  303. package/dist/migrations/checksum.js +32 -0
  304. package/dist/migrations/checksum.js.map +1 -0
  305. package/dist/migrations/differ.d.ts +186 -0
  306. package/dist/migrations/differ.d.ts.map +1 -0
  307. package/dist/migrations/differ.js +601 -0
  308. package/dist/migrations/differ.js.map +1 -0
  309. package/dist/migrations/generator.d.ts +133 -0
  310. package/dist/migrations/generator.d.ts.map +1 -0
  311. package/dist/migrations/generator.js +328 -0
  312. package/dist/migrations/generator.js.map +1 -0
  313. package/dist/migrations/index.d.ts +20 -0
  314. package/dist/migrations/index.d.ts.map +1 -0
  315. package/dist/migrations/orchestrate.d.ts +148 -0
  316. package/dist/migrations/orchestrate.d.ts.map +1 -0
  317. package/dist/migrations/orchestrate.js +118 -0
  318. package/dist/migrations/orchestrate.js.map +1 -0
  319. package/dist/migrations/tracker.d.ts +134 -0
  320. package/dist/migrations/tracker.d.ts.map +1 -0
  321. package/dist/migrations/tracker.js +624 -0
  322. package/dist/migrations/tracker.js.map +1 -0
  323. package/dist/migrations/types.d.ts +221 -0
  324. package/dist/migrations/types.d.ts.map +1 -0
  325. package/dist/migrations.d.ts +7 -0
  326. package/dist/migrations.d.ts.map +1 -0
  327. package/dist/migrations.js +26 -0
  328. package/dist/migrations.js.map +1 -0
  329. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +56 -0
  330. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +1 -0
  331. package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js +163 -0
  332. package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
  333. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js +13 -0
  334. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  335. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js +654 -0
  336. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  337. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js +111 -0
  338. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  339. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js +10 -0
  340. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  341. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js +824 -0
  342. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js.map +1 -0
  343. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js +10 -0
  344. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  345. package/dist/object.d.ts +1202 -0
  346. package/dist/object.d.ts.map +1 -0
  347. package/dist/object.js +2731 -0
  348. package/dist/object.js.map +1 -0
  349. package/dist/polymorphic-association.d.ts +69 -0
  350. package/dist/polymorphic-association.d.ts.map +1 -0
  351. package/dist/polymorphic-association.js +96 -0
  352. package/dist/polymorphic-association.js.map +1 -0
  353. package/dist/prebuild/cli.d.ts +7 -0
  354. package/dist/prebuild/cli.d.ts.map +1 -0
  355. package/dist/prebuild/cli.js +29 -0
  356. package/dist/prebuild/cli.js.map +1 -0
  357. package/dist/prebuild/index.d.ts +22 -0
  358. package/dist/prebuild/index.d.ts.map +1 -0
  359. package/dist/prebuild/index.js +239 -0
  360. package/dist/prebuild/index.js.map +1 -0
  361. package/dist/prebuild.d.ts +8 -0
  362. package/dist/prebuild.d.ts.map +1 -0
  363. package/dist/prebuild.js +6 -0
  364. package/dist/prebuild.js.map +1 -0
  365. package/dist/registry/cache-config.d.ts +13 -0
  366. package/dist/registry/cache-config.d.ts.map +1 -0
  367. package/dist/registry/cache-config.js +17 -0
  368. package/dist/registry/cache-config.js.map +1 -0
  369. package/dist/registry/class-registration.d.ts +31 -0
  370. package/dist/registry/class-registration.d.ts.map +1 -0
  371. package/dist/registry/class-registration.js +1074 -0
  372. package/dist/registry/class-registration.js.map +1 -0
  373. package/dist/registry/collection-resolution.d.ts +45 -0
  374. package/dist/registry/collection-resolution.d.ts.map +1 -0
  375. package/dist/registry/collection-resolution.js +121 -0
  376. package/dist/registry/collection-resolution.js.map +1 -0
  377. package/dist/registry/collision-policy.d.ts +179 -0
  378. package/dist/registry/collision-policy.d.ts.map +1 -0
  379. package/dist/registry/collision-policy.js +153 -0
  380. package/dist/registry/collision-policy.js.map +1 -0
  381. package/dist/registry/diagnostics.d.ts +58 -0
  382. package/dist/registry/diagnostics.d.ts.map +1 -0
  383. package/dist/registry/diagnostics.js +54 -0
  384. package/dist/registry/diagnostics.js.map +1 -0
  385. package/dist/registry/embedding-manager.d.ts +23 -0
  386. package/dist/registry/embedding-manager.d.ts.map +1 -0
  387. package/dist/registry/embedding-manager.js +62 -0
  388. package/dist/registry/embedding-manager.js.map +1 -0
  389. package/dist/registry/index.d.ts +13 -0
  390. package/dist/registry/index.d.ts.map +1 -0
  391. package/dist/registry/inheritance-resolver.d.ts +13 -0
  392. package/dist/registry/inheritance-resolver.d.ts.map +1 -0
  393. package/dist/registry/inheritance-resolver.js +244 -0
  394. package/dist/registry/inheritance-resolver.js.map +1 -0
  395. package/dist/registry/manifest-field-merge.d.ts +4 -0
  396. package/dist/registry/manifest-field-merge.d.ts.map +1 -0
  397. package/dist/registry/manifest-field-merge.js +82 -0
  398. package/dist/registry/manifest-field-merge.js.map +1 -0
  399. package/dist/registry/name-resolver.d.ts +102 -0
  400. package/dist/registry/name-resolver.d.ts.map +1 -0
  401. package/dist/registry/name-resolver.js +241 -0
  402. package/dist/registry/name-resolver.js.map +1 -0
  403. package/dist/registry/relationship-graph.d.ts +16 -0
  404. package/dist/registry/relationship-graph.d.ts.map +1 -0
  405. package/dist/registry/relationship-graph.js +79 -0
  406. package/dist/registry/relationship-graph.js.map +1 -0
  407. package/dist/registry/schema-builder.d.ts +113 -0
  408. package/dist/registry/schema-builder.d.ts.map +1 -0
  409. package/dist/registry/schema-builder.js +474 -0
  410. package/dist/registry/schema-builder.js.map +1 -0
  411. package/dist/registry/shared-state.d.ts +62 -0
  412. package/dist/registry/shared-state.d.ts.map +1 -0
  413. package/dist/registry/shared-state.js +135 -0
  414. package/dist/registry/shared-state.js.map +1 -0
  415. package/dist/registry/types.d.ts +667 -0
  416. package/dist/registry/types.d.ts.map +1 -0
  417. package/dist/registry/validator.d.ts +13 -0
  418. package/dist/registry/validator.d.ts.map +1 -0
  419. package/dist/registry/validator.js +138 -0
  420. package/dist/registry/validator.js.map +1 -0
  421. package/dist/registry.d.ts +1358 -0
  422. package/dist/registry.d.ts.map +1 -0
  423. package/dist/registry.js +2301 -0
  424. package/dist/registry.js.map +1 -0
  425. package/dist/runtime/client.d.ts +34 -0
  426. package/dist/runtime/client.d.ts.map +1 -0
  427. package/dist/runtime/client.js +104 -0
  428. package/dist/runtime/client.js.map +1 -0
  429. package/dist/runtime/index.d.ts +10 -0
  430. package/dist/runtime/index.d.ts.map +1 -0
  431. package/dist/runtime/mcp.d.ts +47 -0
  432. package/dist/runtime/mcp.d.ts.map +1 -0
  433. package/dist/runtime/mcp.js +72 -0
  434. package/dist/runtime/mcp.js.map +1 -0
  435. package/dist/runtime/server.d.ts +92 -0
  436. package/dist/runtime/server.d.ts.map +1 -0
  437. package/dist/runtime/server.js +390 -0
  438. package/dist/runtime/server.js.map +1 -0
  439. package/dist/runtime/types.d.ts +58 -0
  440. package/dist/runtime/types.d.ts.map +1 -0
  441. package/dist/runtime.d.ts +8 -0
  442. package/dist/runtime.d.ts.map +1 -0
  443. package/dist/runtime.js +10 -0
  444. package/dist/runtime.js.map +1 -0
  445. package/dist/scanner/import-scanner.d.ts +7 -0
  446. package/dist/scanner/import-scanner.d.ts.map +1 -0
  447. package/dist/scanner/index.d.ts +12 -0
  448. package/dist/scanner/index.d.ts.map +1 -0
  449. package/dist/scanner/manifest-generator.d.ts +304 -0
  450. package/dist/scanner/manifest-generator.d.ts.map +1 -0
  451. package/dist/scanner/manifest-generator.js +1707 -0
  452. package/dist/scanner/manifest-generator.js.map +1 -0
  453. package/dist/scanner/test-file-patterns.d.ts +18 -0
  454. package/dist/scanner/test-file-patterns.d.ts.map +1 -0
  455. package/dist/scanner/test-file-patterns.js +16 -0
  456. package/dist/scanner/test-file-patterns.js.map +1 -0
  457. package/dist/scanner/types.d.ts +313 -0
  458. package/dist/scanner/types.d.ts.map +1 -0
  459. package/dist/scanner/types.js +2 -0
  460. package/dist/scanner/types.js.map +1 -0
  461. package/dist/scanner.d.ts +6 -0
  462. package/dist/scanner.d.ts.map +1 -0
  463. package/dist/scanner.js +6 -0
  464. package/dist/scanner.js.map +1 -0
  465. package/dist/schema/code-generator.d.ts +53 -0
  466. package/dist/schema/code-generator.d.ts.map +1 -0
  467. package/dist/schema/ddl/base-strategy.d.ts +80 -0
  468. package/dist/schema/ddl/base-strategy.d.ts.map +1 -0
  469. package/dist/schema/ddl/base-strategy.js +240 -0
  470. package/dist/schema/ddl/base-strategy.js.map +1 -0
  471. package/dist/schema/ddl/duckdb-strategy.d.ts +33 -0
  472. package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -0
  473. package/dist/schema/ddl/duckdb-strategy.js +74 -0
  474. package/dist/schema/ddl/duckdb-strategy.js.map +1 -0
  475. package/dist/schema/ddl/index.d.ts +53 -0
  476. package/dist/schema/ddl/index.d.ts.map +1 -0
  477. package/dist/schema/ddl/index.js +80 -0
  478. package/dist/schema/ddl/index.js.map +1 -0
  479. package/dist/schema/ddl/json-duckdb-strategy.d.ts +8 -0
  480. package/dist/schema/ddl/json-duckdb-strategy.d.ts.map +1 -0
  481. package/dist/schema/ddl/json-duckdb-strategy.js +14 -0
  482. package/dist/schema/ddl/json-duckdb-strategy.js.map +1 -0
  483. package/dist/schema/ddl/postgres-strategy.d.ts +29 -0
  484. package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -0
  485. package/dist/schema/ddl/postgres-strategy.js +102 -0
  486. package/dist/schema/ddl/postgres-strategy.js.map +1 -0
  487. package/dist/schema/ddl/sqlite-strategy.d.ts +38 -0
  488. package/dist/schema/ddl/sqlite-strategy.d.ts.map +1 -0
  489. package/dist/schema/ddl/sqlite-strategy.js +74 -0
  490. package/dist/schema/ddl/sqlite-strategy.js.map +1 -0
  491. package/dist/schema/ddl/types.d.ts +114 -0
  492. package/dist/schema/ddl/types.d.ts.map +1 -0
  493. package/dist/schema/generator.d.ts +176 -0
  494. package/dist/schema/generator.d.ts.map +1 -0
  495. package/dist/schema/generator.js +1076 -0
  496. package/dist/schema/generator.js.map +1 -0
  497. package/dist/schema/index-utils.d.ts +19 -0
  498. package/dist/schema/index-utils.d.ts.map +1 -0
  499. package/dist/schema/index-utils.js +32 -0
  500. package/dist/schema/index-utils.js.map +1 -0
  501. package/dist/schema/index.d.ts +13 -0
  502. package/dist/schema/index.d.ts.map +1 -0
  503. package/dist/schema/override-system.d.ts +43 -0
  504. package/dist/schema/override-system.d.ts.map +1 -0
  505. package/dist/schema/schema-aggregator.d.ts +112 -0
  506. package/dist/schema/schema-aggregator.d.ts.map +1 -0
  507. package/dist/schema/schema-manager.d.ts +95 -0
  508. package/dist/schema/schema-manager.d.ts.map +1 -0
  509. package/dist/schema/schema-manager.js +283 -0
  510. package/dist/schema/schema-manager.js.map +1 -0
  511. package/dist/schema/sql-identifiers.d.ts +107 -0
  512. package/dist/schema/sql-identifiers.d.ts.map +1 -0
  513. package/dist/schema/sql-identifiers.js +190 -0
  514. package/dist/schema/sql-identifiers.js.map +1 -0
  515. package/dist/schema/table-verifier.d.ts +10 -0
  516. package/dist/schema/table-verifier.d.ts.map +1 -0
  517. package/dist/schema/table-verifier.js +37 -0
  518. package/dist/schema/table-verifier.js.map +1 -0
  519. package/dist/schema/types.d.ts +241 -0
  520. package/dist/schema/types.d.ts.map +1 -0
  521. package/dist/schema/utils.d.ts +32 -0
  522. package/dist/schema/utils.d.ts.map +1 -0
  523. package/dist/schema/utils.js +134 -0
  524. package/dist/schema/utils.js.map +1 -0
  525. package/dist/scripts/create-wrappers.js +89 -0
  526. package/dist/scripts/generate-manifest.js +155 -0
  527. package/dist/scripts/generate-test-manifest.js +77 -0
  528. package/dist/scripts/migrate-datetime-to-timestamp.ts +310 -0
  529. package/dist/scripts/prepack.js +49 -0
  530. package/dist/signals/bus.d.ts +64 -0
  531. package/dist/signals/bus.d.ts.map +1 -0
  532. package/dist/signals/bus.js +102 -0
  533. package/dist/signals/bus.js.map +1 -0
  534. package/dist/signals/index.d.ts +11 -0
  535. package/dist/signals/index.d.ts.map +1 -0
  536. package/dist/signals/sanitizer.d.ts +54 -0
  537. package/dist/signals/sanitizer.d.ts.map +1 -0
  538. package/dist/signals/sanitizer.js +111 -0
  539. package/dist/signals/sanitizer.js.map +1 -0
  540. package/dist/smrt-knowledge.json +335 -0
  541. package/dist/system/compatibility.d.ts +8 -0
  542. package/dist/system/compatibility.d.ts.map +1 -0
  543. package/dist/system/compatibility.js +409 -0
  544. package/dist/system/compatibility.js.map +1 -0
  545. package/dist/system/index.d.ts +9 -0
  546. package/dist/system/index.d.ts.map +1 -0
  547. package/dist/system/schema.d.ts +69 -0
  548. package/dist/system/schema.d.ts.map +1 -0
  549. package/dist/system/schema.js +271 -0
  550. package/dist/system/schema.js.map +1 -0
  551. package/dist/system/types.d.ts +135 -0
  552. package/dist/system/types.d.ts.map +1 -0
  553. package/dist/system-fields.d.ts +44 -0
  554. package/dist/system-fields.d.ts.map +1 -0
  555. package/dist/system-fields.js +55 -0
  556. package/dist/system-fields.js.map +1 -0
  557. package/dist/table-cache.d.ts +28 -0
  558. package/dist/table-cache.d.ts.map +1 -0
  559. package/dist/table-cache.js +21 -0
  560. package/dist/table-cache.js.map +1 -0
  561. package/dist/test-utils.d.ts +140 -0
  562. package/dist/test-utils.d.ts.map +1 -0
  563. package/dist/testing/database.d.ts +73 -0
  564. package/dist/testing/database.d.ts.map +1 -0
  565. package/dist/testing/database.js +204 -0
  566. package/dist/testing/database.js.map +1 -0
  567. package/dist/testing/index.d.ts +21 -0
  568. package/dist/testing/index.d.ts.map +1 -0
  569. package/dist/testing.d.ts +6 -0
  570. package/dist/testing.d.ts.map +1 -0
  571. package/dist/testing.js +5 -0
  572. package/dist/testing.js.map +1 -0
  573. package/dist/tools/index.d.ts +8 -0
  574. package/dist/tools/index.d.ts.map +1 -0
  575. package/dist/tools/tool-executor.d.ts +101 -0
  576. package/dist/tools/tool-executor.d.ts.map +1 -0
  577. package/dist/tools/tool-executor.js +142 -0
  578. package/dist/tools/tool-executor.js.map +1 -0
  579. package/dist/tools/tool-generator.d.ts +54 -0
  580. package/dist/tools/tool-generator.d.ts.map +1 -0
  581. package/dist/tools/tool-generator.js +121 -0
  582. package/dist/tools/tool-generator.js.map +1 -0
  583. package/dist/utils/chunk.d.ts +32 -0
  584. package/dist/utils/chunk.d.ts.map +1 -0
  585. package/dist/utils/chunk.js +14 -0
  586. package/dist/utils/chunk.js.map +1 -0
  587. package/dist/utils/import-workspace-module.d.ts +8 -0
  588. package/dist/utils/import-workspace-module.d.ts.map +1 -0
  589. package/dist/utils/import-workspace-module.js +81 -0
  590. package/dist/utils/import-workspace-module.js.map +1 -0
  591. package/dist/utils/json.d.ts +102 -0
  592. package/dist/utils/json.d.ts.map +1 -0
  593. package/dist/utils/json.js +43 -0
  594. package/dist/utils/json.js.map +1 -0
  595. package/dist/utils/lru-cache.d.ts +69 -0
  596. package/dist/utils/lru-cache.d.ts.map +1 -0
  597. package/dist/utils/lru-cache.js +100 -0
  598. package/dist/utils/lru-cache.js.map +1 -0
  599. package/dist/utils/naming.d.ts +16 -0
  600. package/dist/utils/naming.d.ts.map +1 -0
  601. package/dist/utils/naming.js +23 -0
  602. package/dist/utils/naming.js.map +1 -0
  603. package/dist/utils/qualified-names.d.ts +122 -0
  604. package/dist/utils/qualified-names.d.ts.map +1 -0
  605. package/dist/utils/qualified-names.js +82 -0
  606. package/dist/utils/qualified-names.js.map +1 -0
  607. package/dist/utils/scanner-module.d.ts +37 -0
  608. package/dist/utils/scanner-module.d.ts.map +1 -0
  609. package/dist/utils.d.ts +177 -0
  610. package/dist/utils.d.ts.map +1 -0
  611. package/dist/utils.js +185 -0
  612. package/dist/utils.js.map +1 -0
  613. package/dist/vite-plugin/import-build-aware.d.ts +68 -0
  614. package/dist/vite-plugin/import-build-aware.d.ts.map +1 -0
  615. package/dist/vite-plugin/import-build-aware.js +72 -0
  616. package/dist/vite-plugin/import-build-aware.js.map +1 -0
  617. package/dist/vite-plugin/index.d.ts +59 -0
  618. package/dist/vite-plugin/index.d.ts.map +1 -0
  619. package/dist/vite-plugin/index.js +1400 -0
  620. package/dist/vite-plugin/index.js.map +1 -0
  621. package/dist/vite-plugin/sveltekit-generator.d.ts +66 -0
  622. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -0
  623. package/dist/vite-plugin/sveltekit-generator.js +1375 -0
  624. package/dist/vite-plugin/sveltekit-generator.js.map +1 -0
  625. package/dist/vite-plugin/templates/default-ui.ts +432 -0
  626. package/dist/vite-plugin/templates/default.html +206 -0
  627. package/dist/vite-plugin.d.ts +8 -0
  628. package/dist/vite-plugin.d.ts.map +1 -0
  629. package/dist/vite-plugin.js +11 -0
  630. package/dist/vite-plugin.js.map +1 -0
  631. package/package.json +208 -0
@@ -0,0 +1,72 @@
1
+ import { createLogger } from "@happyvertical/logger";
2
+ const logger = createLogger({ level: "info" });
3
+ class SmrtMCPServer {
4
+ options;
5
+ constructor(options = {}) {
6
+ this.options = {
7
+ name: "smrt-auto-generated",
8
+ version: "1.0.0",
9
+ tools: [],
10
+ handlers: {},
11
+ ...options
12
+ };
13
+ }
14
+ /**
15
+ * Add a tool to the server
16
+ */
17
+ addTool(tool, handler) {
18
+ this.options.tools.push(tool);
19
+ this.options.handlers[tool.name] = handler;
20
+ }
21
+ /**
22
+ * Get all available tools
23
+ */
24
+ getTools() {
25
+ return this.options.tools;
26
+ }
27
+ /**
28
+ * Execute a tool
29
+ */
30
+ async executeTool(name, params) {
31
+ const handler = this.options.handlers[name];
32
+ if (!handler) {
33
+ throw new Error(`Tool '${name}' not found`);
34
+ }
35
+ try {
36
+ return await handler(params);
37
+ } catch (error) {
38
+ throw new Error(
39
+ `Tool execution failed: ${error instanceof Error ? error.message : "Unknown error"}`
40
+ );
41
+ }
42
+ }
43
+ /**
44
+ * Get server info
45
+ */
46
+ getServerInfo() {
47
+ return {
48
+ name: this.options.name,
49
+ version: this.options.version,
50
+ toolCount: this.options.tools.length
51
+ };
52
+ }
53
+ /**
54
+ * Start the MCP server (basic implementation)
55
+ */
56
+ async start() {
57
+ logger.info(
58
+ `[smrt-mcp] Server '${this.options.name}' started with ${this.options.tools.length} tools`
59
+ );
60
+ logger.debug(
61
+ `[smrt-mcp] Available tools: ${this.options.tools.map((t) => t.name).join(", ")}`
62
+ );
63
+ }
64
+ }
65
+ function createMCPServer(options) {
66
+ return new SmrtMCPServer(options);
67
+ }
68
+ export {
69
+ SmrtMCPServer,
70
+ createMCPServer
71
+ };
72
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sources":["../../src/runtime/mcp.ts"],"sourcesContent":["/**\n * Runtime MCP server implementation for SMRT auto-generated services\n */\n\nimport { createLogger } from '@happyvertical/logger';\n\nconst logger = createLogger({ level: 'info' });\n\nexport interface MCPTool {\n name: string;\n description: string;\n inputSchema: any;\n}\n\nexport interface MCPServerOptions {\n name?: string;\n version?: string;\n tools?: MCPTool[];\n handlers?: Record<string, (params: any) => Promise<any>>;\n}\n\nexport class SmrtMCPServer {\n private options: Required<MCPServerOptions>;\n\n constructor(options: MCPServerOptions = {}) {\n this.options = {\n name: 'smrt-auto-generated',\n version: '1.0.0',\n tools: [],\n handlers: {},\n ...options,\n };\n }\n\n /**\n * Add a tool to the server\n */\n addTool(tool: MCPTool, handler: (params: any) => Promise<any>): void {\n this.options.tools.push(tool);\n this.options.handlers[tool.name] = handler;\n }\n\n /**\n * Get all available tools\n */\n getTools(): MCPTool[] {\n return this.options.tools;\n }\n\n /**\n * Execute a tool\n */\n async executeTool(name: string, params: any): Promise<any> {\n const handler = this.options.handlers[name];\n if (!handler) {\n throw new Error(`Tool '${name}' not found`);\n }\n\n try {\n return await handler(params);\n } catch (error) {\n throw new Error(\n `Tool execution failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n }\n\n /**\n * Get server info\n */\n getServerInfo() {\n return {\n name: this.options.name,\n version: this.options.version,\n toolCount: this.options.tools.length,\n };\n }\n\n /**\n * Start the MCP server (basic implementation)\n */\n async start(): Promise<void> {\n logger.info(\n `[smrt-mcp] Server '${this.options.name}' started with ${this.options.tools.length} tools`,\n );\n logger.debug(\n `[smrt-mcp] Available tools: ${this.options.tools.map((t) => t.name).join(', ')}`,\n );\n }\n}\n\n/**\n * Create a new SMRT MCP server instance\n */\nexport function createMCPServer(options?: MCPServerOptions): SmrtMCPServer {\n return new SmrtMCPServer(options);\n}\n"],"names":[],"mappings":";AAMA,MAAM,SAAS,aAAa,EAAE,OAAO,QAAQ;AAetC,MAAM,cAAc;AAAA,EACjB;AAAA,EAER,YAAY,UAA4B,IAAI;AAC1C,SAAK,UAAU;AAAA,MACb,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO,CAAA;AAAA,MACP,UAAU,CAAA;AAAA,MACV,GAAG;AAAA,IAAA;AAAA,EAEP;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,MAAe,SAA8C;AACnE,SAAK,QAAQ,MAAM,KAAK,IAAI;AAC5B,SAAK,QAAQ,SAAS,KAAK,IAAI,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,WAAsB;AACpB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,MAAc,QAA2B;AACzD,UAAM,UAAU,KAAK,QAAQ,SAAS,IAAI;AAC1C,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,SAAS,IAAI,aAAa;AAAA,IAC5C;AAEA,QAAI;AACF,aAAO,MAAM,QAAQ,MAAM;AAAA,IAC7B,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,eAAe;AAAA,MAAA;AAAA,IAEtF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,WAAO;AAAA,MACL,MAAM,KAAK,QAAQ;AAAA,MACnB,SAAS,KAAK,QAAQ;AAAA,MACtB,WAAW,KAAK,QAAQ,MAAM;AAAA,IAAA;AAAA,EAElC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AAC3B,WAAO;AAAA,MACL,sBAAsB,KAAK,QAAQ,IAAI,kBAAkB,KAAK,QAAQ,MAAM,MAAM;AAAA,IAAA;AAEpF,WAAO;AAAA,MACL,+BAA+B,KAAK,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEnF;AACF;AAKO,SAAS,gBAAgB,SAA2C;AACzE,SAAO,IAAI,cAAc,OAAO;AAClC;"}
@@ -0,0 +1,92 @@
1
+ import { SmrtRequest, SmrtServerOptions } from './types';
2
+ export declare class SmrtServer {
3
+ private options;
4
+ private routes;
5
+ constructor(options?: SmrtServerOptions);
6
+ /**
7
+ * Add a route handler
8
+ */
9
+ addRoute(method: string, path: string, handler: (req: SmrtRequest) => Promise<Response>): void;
10
+ /**
11
+ * Add GET route handler (RouteApp compatibility)
12
+ */
13
+ get(path: string, handler: (req: any, res: any) => void): void;
14
+ /**
15
+ * Add POST route handler (RouteApp compatibility)
16
+ */
17
+ post(path: string, handler: (req: any, res: any) => void): void;
18
+ /**
19
+ * Add PUT route handler (RouteApp compatibility)
20
+ */
21
+ put(path: string, handler: (req: any, res: any) => void): void;
22
+ /**
23
+ * Add DELETE route handler (RouteApp compatibility)
24
+ */
25
+ delete(path: string, handler: (req: any, res: any) => void): void;
26
+ /**
27
+ * Convert Express-style handler to SMRT handler
28
+ */
29
+ private addExpressStyleRoute;
30
+ /**
31
+ * Start the server
32
+ */
33
+ start(): Promise<{
34
+ server: any;
35
+ url: string;
36
+ }>;
37
+ /**
38
+ * Dispatch a request in-process and return the Response, without binding a
39
+ * socket. Supported public entry point for embedding the router and for
40
+ * tests that exercise routing/auth/CORS without spawning an HTTP server.
41
+ */
42
+ dispatch(request: Request): Promise<Response>;
43
+ /**
44
+ * Convert stream to string
45
+ */
46
+ private streamToString;
47
+ /**
48
+ * Convert Node.js IncomingMessage to Web Request
49
+ */
50
+ private nodeRequestToWebRequest;
51
+ /**
52
+ * Convert Web Response to Node.js ServerResponse
53
+ */
54
+ private webResponseToNodeResponse;
55
+ /**
56
+ * Handle incoming requests
57
+ */
58
+ private handleRequest;
59
+ /**
60
+ * Parse incoming request into SmrtRequest format
61
+ */
62
+ private parseRequest;
63
+ /**
64
+ * Find route handler with parameter extraction
65
+ */
66
+ private findRouteHandler;
67
+ /**
68
+ * Match route path with parameters (e.g., /users/:id)
69
+ */
70
+ private matchRoute;
71
+ /**
72
+ * Handle authentication
73
+ */
74
+ private authenticate;
75
+ /**
76
+ * Create CORS preflight response
77
+ */
78
+ private createCorsResponse;
79
+ /**
80
+ * Add CORS headers to response
81
+ */
82
+ private addCorsHeaders;
83
+ /**
84
+ * Get CORS headers
85
+ */
86
+ private getCorsHeaders;
87
+ }
88
+ /**
89
+ * Create a new SMRT server instance
90
+ */
91
+ export declare function createSmrtServer(options?: SmrtServerOptions): SmrtServer;
92
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/runtime/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgB9D,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CACF;gBAEA,OAAO,GAAE,iBAAsB;IAU3C;;OAEG;IACH,QAAQ,CACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC;IAMlD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI/D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAIjE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA8F5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBpD;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAInD;;OAEG;YACW,cAAc;IAQ5B;;OAEG;YACW,uBAAuB;IAyBrC;;OAEG;YACW,yBAAyB;IAwBvC;;OAEG;YACW,aAAa;IA8C3B;;OAEG;YACW,YAAY;IA8D1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;OAEG;IACH,OAAO,CAAC,UAAU;IA8BlB;;OAEG;YACW,YAAY;IA+B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,cAAc;CAqBvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAExE"}
@@ -0,0 +1,390 @@
1
+ import http from "node:http";
2
+ import { createLogger } from "@happyvertical/logger";
3
+ const logger = createLogger({ level: "info" });
4
+ class BadRequestError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = "BadRequestError";
8
+ }
9
+ }
10
+ class SmrtServer {
11
+ options;
12
+ routes = /* @__PURE__ */ new Map();
13
+ constructor(options = {}) {
14
+ this.options = {
15
+ port: 3e3,
16
+ hostname: "localhost",
17
+ basePath: "/api/v1",
18
+ cors: true,
19
+ ...options
20
+ };
21
+ }
22
+ /**
23
+ * Add a route handler
24
+ */
25
+ addRoute(method, path, handler) {
26
+ const key = `${method.toUpperCase()} ${path}`;
27
+ this.routes.set(key, handler);
28
+ }
29
+ /**
30
+ * Add GET route handler (RouteApp compatibility)
31
+ */
32
+ get(path, handler) {
33
+ this.addExpressStyleRoute("GET", path, handler);
34
+ }
35
+ /**
36
+ * Add POST route handler (RouteApp compatibility)
37
+ */
38
+ post(path, handler) {
39
+ this.addExpressStyleRoute("POST", path, handler);
40
+ }
41
+ /**
42
+ * Add PUT route handler (RouteApp compatibility)
43
+ */
44
+ put(path, handler) {
45
+ this.addExpressStyleRoute("PUT", path, handler);
46
+ }
47
+ /**
48
+ * Add DELETE route handler (RouteApp compatibility)
49
+ */
50
+ delete(path, handler) {
51
+ this.addExpressStyleRoute("DELETE", path, handler);
52
+ }
53
+ /**
54
+ * Convert Express-style handler to SMRT handler
55
+ */
56
+ addExpressStyleRoute(method, path, handler) {
57
+ const smrtHandler = async (req) => {
58
+ return new Promise((resolve, reject) => {
59
+ let settled = false;
60
+ const settle = (response) => {
61
+ if (settled) return;
62
+ settled = true;
63
+ resolve(response);
64
+ };
65
+ const fail = (error) => {
66
+ if (settled) return;
67
+ settled = true;
68
+ reject(error);
69
+ };
70
+ const res = {
71
+ status: (code) => {
72
+ res.statusCode = code;
73
+ return res;
74
+ },
75
+ json: (data) => {
76
+ settle(
77
+ new Response(JSON.stringify(data), {
78
+ status: res.statusCode || 200,
79
+ headers: {
80
+ "Content-Type": "application/json",
81
+ ...res.headers
82
+ }
83
+ })
84
+ );
85
+ },
86
+ send: (data) => {
87
+ const body = typeof data === "string" ? data : JSON.stringify(data);
88
+ settle(
89
+ new Response(body, {
90
+ status: res.statusCode || 200,
91
+ headers: {
92
+ "Content-Type": typeof data === "string" ? "text/plain" : "application/json",
93
+ ...res.headers
94
+ }
95
+ })
96
+ );
97
+ },
98
+ end: (data) => {
99
+ settle(
100
+ new Response(data || "", {
101
+ status: res.statusCode || 200,
102
+ headers: res.headers
103
+ })
104
+ );
105
+ },
106
+ setHeader: (key, value) => {
107
+ if (!res.headers) res.headers = {};
108
+ res.headers[key] = value;
109
+ return res;
110
+ },
111
+ statusCode: 200,
112
+ headers: {}
113
+ };
114
+ Promise.resolve().then(() => handler(req, res)).then(() => {
115
+ if (!settled) {
116
+ settle(
117
+ new Response("Internal Server Error", {
118
+ status: 500
119
+ })
120
+ );
121
+ }
122
+ }).catch((error) => fail(error));
123
+ });
124
+ };
125
+ this.addRoute(method, path, smrtHandler);
126
+ }
127
+ /**
128
+ * Start the server
129
+ */
130
+ async start() {
131
+ const server = http.createServer(async (req, res) => {
132
+ try {
133
+ const request = await this.nodeRequestToWebRequest(req);
134
+ const response = await this.handleRequest(request);
135
+ await this.webResponseToNodeResponse(response, res);
136
+ } catch (_error) {
137
+ res.statusCode = 500;
138
+ res.end("Internal Server Error");
139
+ }
140
+ });
141
+ server.listen(this.options.port, this.options.hostname);
142
+ const url = `http://${this.options.hostname}:${this.options.port}`;
143
+ logger.info(`[smrt] Server started at ${url}`);
144
+ return { server, url };
145
+ }
146
+ /**
147
+ * Dispatch a request in-process and return the Response, without binding a
148
+ * socket. Supported public entry point for embedding the router and for
149
+ * tests that exercise routing/auth/CORS without spawning an HTTP server.
150
+ */
151
+ async dispatch(request) {
152
+ return this.handleRequest(request);
153
+ }
154
+ /**
155
+ * Convert stream to string
156
+ */
157
+ async streamToString(stream) {
158
+ const chunks = [];
159
+ for await (const chunk of stream) {
160
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
161
+ }
162
+ return Buffer.concat(chunks).toString("utf-8");
163
+ }
164
+ /**
165
+ * Convert Node.js IncomingMessage to Web Request
166
+ */
167
+ async nodeRequestToWebRequest(req) {
168
+ const url = `http://${this.options.hostname}:${this.options.port}${req.url}`;
169
+ const method = req.method || "GET";
170
+ const headers = new Headers();
171
+ for (const [key, value] of Object.entries(req.headers)) {
172
+ if (value) {
173
+ headers.set(key, Array.isArray(value) ? value[0] : value);
174
+ }
175
+ }
176
+ let body;
177
+ if (method !== "GET" && method !== "HEAD") {
178
+ body = await this.streamToString(req);
179
+ }
180
+ return new Request(url, {
181
+ method,
182
+ headers,
183
+ body
184
+ });
185
+ }
186
+ /**
187
+ * Convert Web Response to Node.js ServerResponse
188
+ */
189
+ async webResponseToNodeResponse(webResponse, res) {
190
+ res.statusCode = webResponse.status;
191
+ webResponse.headers.forEach((value, key) => {
192
+ res.setHeader(key, value);
193
+ });
194
+ if (webResponse.body) {
195
+ const reader = webResponse.body.getReader();
196
+ while (true) {
197
+ const { done, value } = await reader.read();
198
+ if (done) break;
199
+ res.write(value);
200
+ }
201
+ }
202
+ res.end();
203
+ }
204
+ /**
205
+ * Handle incoming requests
206
+ */
207
+ async handleRequest(request) {
208
+ try {
209
+ if (this.options.cors && request.method === "OPTIONS") {
210
+ return this.createCorsResponse();
211
+ }
212
+ const smrtRequest = await this.parseRequest(request);
213
+ if (this.options.auth) {
214
+ const authResult = await this.authenticate(smrtRequest);
215
+ if (!authResult) {
216
+ return new Response("Unauthorized", { status: 401 });
217
+ }
218
+ }
219
+ const routeKey = `${request.method} ${smrtRequest.url}`;
220
+ const handler = this.findRouteHandler(routeKey);
221
+ if (!handler) {
222
+ return new Response("Not Found", { status: 404 });
223
+ }
224
+ const response = await handler(smrtRequest);
225
+ if (this.options.cors) {
226
+ this.addCorsHeaders(response);
227
+ }
228
+ return response;
229
+ } catch (error) {
230
+ if (error instanceof BadRequestError) {
231
+ return new Response(error.message, { status: 400 });
232
+ }
233
+ logger.error("[smrt] Request error", { error });
234
+ return new Response("Internal Server Error", { status: 500 });
235
+ }
236
+ }
237
+ /**
238
+ * Parse incoming request into SmrtRequest format
239
+ */
240
+ async parseRequest(request) {
241
+ const url = new URL(request.url);
242
+ const pathname = url.pathname;
243
+ const routePath = pathname.startsWith(this.options.basePath) ? pathname.slice(this.options.basePath.length) : pathname;
244
+ const query = {};
245
+ url.searchParams.forEach((value, key) => {
246
+ query[key] = value;
247
+ });
248
+ let body;
249
+ if (request.body && (request.method === "POST" || request.method === "PUT" || request.method === "PATCH")) {
250
+ const contentType = request.headers.get("content-type") || "";
251
+ const rawBody = await request.text();
252
+ if (rawBody.trim() === "") ;
253
+ else if (contentType.includes("application/json")) {
254
+ try {
255
+ body = JSON.parse(rawBody);
256
+ } catch (error) {
257
+ throw new BadRequestError(
258
+ `Invalid JSON request body: ${error instanceof Error ? error.message : String(error)}`
259
+ );
260
+ }
261
+ } else {
262
+ body = rawBody;
263
+ }
264
+ }
265
+ const headers = {};
266
+ request.headers.forEach((value, key) => {
267
+ headers[key] = value;
268
+ });
269
+ return {
270
+ params: {},
271
+ // Will be populated by route matching
272
+ query,
273
+ body,
274
+ headers,
275
+ method: request.method,
276
+ url: routePath,
277
+ json: async () => body
278
+ };
279
+ }
280
+ /**
281
+ * Find route handler with parameter extraction
282
+ */
283
+ findRouteHandler(routeKey) {
284
+ if (this.routes.has(routeKey)) {
285
+ return this.routes.get(routeKey);
286
+ }
287
+ const [method, path] = routeKey.split(" ", 2);
288
+ for (const [key, handler] of this.routes.entries()) {
289
+ const [routeMethod, routePath] = key.split(" ", 2);
290
+ if (method === routeMethod) {
291
+ const params = this.matchRoute(path, routePath);
292
+ if (params !== null) {
293
+ return async (req) => {
294
+ req.params = params;
295
+ return handler(req);
296
+ };
297
+ }
298
+ }
299
+ }
300
+ return void 0;
301
+ }
302
+ /**
303
+ * Match route path with parameters (e.g., /users/:id)
304
+ */
305
+ matchRoute(requestPath, routePath) {
306
+ const requestSegments = requestPath.split("/").filter((s) => s);
307
+ const routeSegments = routePath.split("/").filter((s) => s);
308
+ if (requestSegments.length !== routeSegments.length) {
309
+ return null;
310
+ }
311
+ const params = {};
312
+ for (let i = 0; i < routeSegments.length; i++) {
313
+ const routeSegment = routeSegments[i];
314
+ const requestSegment = requestSegments[i];
315
+ if (routeSegment.startsWith(":")) {
316
+ const paramName = routeSegment.slice(1);
317
+ params[paramName] = requestSegment;
318
+ } else if (routeSegment !== requestSegment) {
319
+ return null;
320
+ }
321
+ }
322
+ return params;
323
+ }
324
+ /**
325
+ * Handle authentication
326
+ */
327
+ async authenticate(request) {
328
+ if (!this.options.auth) return true;
329
+ const authHeader = request.headers.authorization;
330
+ if (!authHeader) return false;
331
+ switch (this.options.auth.type) {
332
+ case "bearer": {
333
+ const token = authHeader.replace("Bearer ", "");
334
+ return this.options.auth.verify ? await this.options.auth.verify(token) : true;
335
+ }
336
+ case "basic": {
337
+ const credentials = authHeader.replace("Basic ", "");
338
+ return this.options.auth.verify ? await this.options.auth.verify(credentials) : true;
339
+ }
340
+ case "custom":
341
+ return this.options.auth.verify ? await this.options.auth.verify(authHeader) : true;
342
+ default:
343
+ return false;
344
+ }
345
+ }
346
+ /**
347
+ * Create CORS preflight response
348
+ */
349
+ createCorsResponse() {
350
+ return new Response(null, {
351
+ status: 204,
352
+ headers: this.getCorsHeaders()
353
+ });
354
+ }
355
+ /**
356
+ * Add CORS headers to response
357
+ */
358
+ addCorsHeaders(response) {
359
+ const corsHeaders = this.getCorsHeaders();
360
+ Object.entries(corsHeaders).forEach(([key, value]) => {
361
+ response.headers.set(key, value);
362
+ });
363
+ }
364
+ /**
365
+ * Get CORS headers
366
+ */
367
+ getCorsHeaders() {
368
+ const corsConfig = this.options.cors;
369
+ if (typeof corsConfig === "boolean") {
370
+ return {
371
+ "Access-Control-Allow-Origin": "*",
372
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
373
+ "Access-Control-Allow-Headers": "Content-Type, Authorization"
374
+ };
375
+ }
376
+ return {
377
+ "Access-Control-Allow-Origin": Array.isArray(corsConfig.origin) ? corsConfig.origin.join(", ") : corsConfig.origin || "*",
378
+ "Access-Control-Allow-Methods": corsConfig.methods?.join(", ") || "GET, POST, PUT, DELETE, OPTIONS",
379
+ "Access-Control-Allow-Headers": corsConfig.headers?.join(", ") || "Content-Type, Authorization"
380
+ };
381
+ }
382
+ }
383
+ function createSmrtServer(options) {
384
+ return new SmrtServer(options);
385
+ }
386
+ export {
387
+ SmrtServer,
388
+ createSmrtServer
389
+ };
390
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sources":["../../src/runtime/server.ts"],"sourcesContent":["/**\n * Runtime server implementation for SMRT auto-generated services\n */\n\nimport http from 'node:http';\nimport { createLogger } from '@happyvertical/logger';\nimport type { SmrtRequest, SmrtServerOptions } from './types';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Signals a malformed client request (e.g. invalid JSON body) so that\n * {@link SmrtServer.handleRequest} can answer 400 instead of a generic 500\n * (#1378). Internal to this module.\n */\nclass BadRequestError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'BadRequestError';\n }\n}\n\nexport class SmrtServer {\n private options: Required<SmrtServerOptions>;\n private routes: Map<string, (req: SmrtRequest) => Promise<Response>> =\n new Map();\n\n constructor(options: SmrtServerOptions = {}) {\n this.options = {\n port: 3000,\n hostname: 'localhost',\n basePath: '/api/v1',\n cors: true,\n ...options,\n } as Required<SmrtServerOptions>;\n }\n\n /**\n * Add a route handler\n */\n addRoute(\n method: string,\n path: string,\n handler: (req: SmrtRequest) => Promise<Response>,\n ) {\n const key = `${method.toUpperCase()} ${path}`;\n this.routes.set(key, handler);\n }\n\n /**\n * Add GET route handler (RouteApp compatibility)\n */\n get(path: string, handler: (req: any, res: any) => void): void {\n this.addExpressStyleRoute('GET', path, handler);\n }\n\n /**\n * Add POST route handler (RouteApp compatibility)\n */\n post(path: string, handler: (req: any, res: any) => void): void {\n this.addExpressStyleRoute('POST', path, handler);\n }\n\n /**\n * Add PUT route handler (RouteApp compatibility)\n */\n put(path: string, handler: (req: any, res: any) => void): void {\n this.addExpressStyleRoute('PUT', path, handler);\n }\n\n /**\n * Add DELETE route handler (RouteApp compatibility)\n */\n delete(path: string, handler: (req: any, res: any) => void): void {\n this.addExpressStyleRoute('DELETE', path, handler);\n }\n\n /**\n * Convert Express-style handler to SMRT handler\n */\n private addExpressStyleRoute(\n method: string,\n path: string,\n handler: (req: any, res: any) => void,\n ) {\n const smrtHandler = async (req: SmrtRequest): Promise<Response> => {\n return new Promise((resolve, reject) => {\n // Tracks whether the handler ever produced a response. A handler that\n // returns/resolves without calling json/send/end would otherwise leave\n // this promise pending forever (server hang) — we 500 instead (#1378).\n let settled = false;\n const settle = (response: Response) => {\n if (settled) return;\n settled = true;\n resolve(response);\n };\n const fail = (error: unknown) => {\n if (settled) return;\n settled = true;\n reject(error);\n };\n // Create Express-style response object\n const res = {\n status: (code: number) => {\n res.statusCode = code;\n return res;\n },\n json: (data: any) => {\n settle(\n new Response(JSON.stringify(data), {\n status: res.statusCode || 200,\n headers: {\n 'Content-Type': 'application/json',\n ...res.headers,\n },\n }),\n );\n },\n send: (data: any) => {\n const body = typeof data === 'string' ? data : JSON.stringify(data);\n settle(\n new Response(body, {\n status: res.statusCode || 200,\n headers: {\n 'Content-Type':\n typeof data === 'string'\n ? 'text/plain'\n : 'application/json',\n ...res.headers,\n },\n }),\n );\n },\n end: (data?: any) => {\n settle(\n new Response(data || '', {\n status: res.statusCode || 200,\n headers: res.headers,\n }),\n );\n },\n setHeader: (key: string, value: string) => {\n if (!res.headers) res.headers = {};\n res.headers[key] = value;\n return res;\n },\n statusCode: 200,\n headers: {} as Record<string, string>,\n };\n\n // Await the handler so async rejections propagate. Express-style\n // handlers signal completion via res.json/send/end; a sync throw or an\n // async rejection is surfaced as 500 by handleRequest. Promise.resolve\n // wraps both sync and async handlers uniformly (#1378).\n Promise.resolve()\n .then(() => handler(req, res))\n .then(() => {\n // Handler completed without producing a response (never called\n // json/send/end). Resolve a 500 rather than hanging forever.\n if (!settled) {\n settle(\n new Response('Internal Server Error', {\n status: 500,\n }),\n );\n }\n })\n .catch((error) => fail(error));\n });\n };\n\n this.addRoute(method, path, smrtHandler);\n }\n\n /**\n * Start the server\n */\n async start(): Promise<{ server: any; url: string }> {\n const server = http.createServer(async (req, res) => {\n try {\n const request = await this.nodeRequestToWebRequest(req);\n const response = await this.handleRequest(request);\n await this.webResponseToNodeResponse(response, res);\n } catch (_error) {\n res.statusCode = 500;\n res.end('Internal Server Error');\n }\n });\n\n server.listen(this.options.port, this.options.hostname);\n\n const url = `http://${this.options.hostname}:${this.options.port}`;\n logger.info(`[smrt] Server started at ${url}`);\n\n return { server, url };\n }\n\n /**\n * Dispatch a request in-process and return the Response, without binding a\n * socket. Supported public entry point for embedding the router and for\n * tests that exercise routing/auth/CORS without spawning an HTTP server.\n */\n async dispatch(request: Request): Promise<Response> {\n return this.handleRequest(request);\n }\n\n /**\n * Convert stream to string\n */\n private async streamToString(stream: http.IncomingMessage): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks).toString('utf-8');\n }\n\n /**\n * Convert Node.js IncomingMessage to Web Request\n */\n private async nodeRequestToWebRequest(\n req: http.IncomingMessage,\n ): Promise<Request> {\n const url = `http://${this.options.hostname}:${this.options.port}${req.url}`;\n const method = req.method || 'GET';\n const headers = new Headers();\n\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n headers.set(key, Array.isArray(value) ? value[0] : value);\n }\n }\n\n let body: string | undefined;\n if (method !== 'GET' && method !== 'HEAD') {\n body = await this.streamToString(req);\n }\n\n return new Request(url, {\n method,\n headers,\n body,\n });\n }\n\n /**\n * Convert Web Response to Node.js ServerResponse\n */\n private async webResponseToNodeResponse(\n webResponse: Response,\n res: http.ServerResponse,\n ): Promise<void> {\n res.statusCode = webResponse.status;\n\n // Set headers\n webResponse.headers.forEach((value, key) => {\n res.setHeader(key, value);\n });\n\n // Send body\n if (webResponse.body) {\n const reader = webResponse.body.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n res.write(value);\n }\n }\n\n res.end();\n }\n\n /**\n * Handle incoming requests\n */\n private async handleRequest(request: Request): Promise<Response> {\n try {\n // Handle CORS\n if (this.options.cors && request.method === 'OPTIONS') {\n return this.createCorsResponse();\n }\n\n // Parse request\n const smrtRequest = await this.parseRequest(request);\n\n // Check authentication\n if (this.options.auth) {\n const authResult = await this.authenticate(smrtRequest);\n if (!authResult) {\n return new Response('Unauthorized', { status: 401 });\n }\n }\n\n // Find matching route\n const routeKey = `${request.method} ${smrtRequest.url}`;\n const handler = this.findRouteHandler(routeKey);\n\n if (!handler) {\n return new Response('Not Found', { status: 404 });\n }\n\n // Execute handler\n const response = await handler(smrtRequest);\n\n // Add CORS headers if needed\n if (this.options.cors) {\n this.addCorsHeaders(response);\n }\n\n return response;\n } catch (error) {\n // A malformed request (e.g. invalid JSON body) is the client's fault →\n // 400, not 500 (#1378).\n if (error instanceof BadRequestError) {\n return new Response(error.message, { status: 400 });\n }\n logger.error('[smrt] Request error', { error });\n return new Response('Internal Server Error', { status: 500 });\n }\n }\n\n /**\n * Parse incoming request into SmrtRequest format\n */\n private async parseRequest(request: Request): Promise<SmrtRequest> {\n const url = new URL(request.url);\n const pathname = url.pathname;\n\n // Remove base path\n const routePath = pathname.startsWith(this.options.basePath)\n ? pathname.slice(this.options.basePath.length)\n : pathname;\n\n // Parse query parameters\n const query: Record<string, any> = {};\n url.searchParams.forEach((value, key) => {\n query[key] = value;\n });\n\n // Parse body if present. `request.body` is a stream and stays truthy even\n // for an empty body, so reading text first lets us treat an empty body as\n // \"no body\" (undefined) and surface only genuinely malformed JSON as a 400\n // rather than letting request.json() throw a generic 500 (#1378).\n let body: any;\n if (\n request.body &&\n (request.method === 'POST' ||\n request.method === 'PUT' ||\n request.method === 'PATCH')\n ) {\n const contentType = request.headers.get('content-type') || '';\n const rawBody = await request.text();\n if (rawBody.trim() === '') {\n // Empty body → no body. Leave `body` undefined.\n } else if (contentType.includes('application/json')) {\n try {\n body = JSON.parse(rawBody);\n } catch (error) {\n throw new BadRequestError(\n `Invalid JSON request body: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n } else {\n body = rawBody;\n }\n }\n\n // Extract headers\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n return {\n params: {}, // Will be populated by route matching\n query,\n body,\n headers,\n method: request.method,\n url: routePath,\n json: async () => body,\n };\n }\n\n /**\n * Find route handler with parameter extraction\n */\n private findRouteHandler(\n routeKey: string,\n ): ((req: SmrtRequest) => Promise<Response>) | undefined {\n // First try exact match\n if (this.routes.has(routeKey)) {\n return this.routes.get(routeKey);\n }\n\n // Try parameter matching\n const [method, path] = routeKey.split(' ', 2);\n\n for (const [key, handler] of this.routes.entries()) {\n const [routeMethod, routePath] = key.split(' ', 2);\n\n if (method === routeMethod) {\n const params = this.matchRoute(path, routePath);\n if (params !== null) {\n // Return wrapped handler that injects params\n return async (req: SmrtRequest) => {\n req.params = params;\n return handler(req);\n };\n }\n }\n }\n\n return undefined;\n }\n\n /**\n * Match route path with parameters (e.g., /users/:id)\n */\n private matchRoute(\n requestPath: string,\n routePath: string,\n ): Record<string, string> | null {\n const requestSegments = requestPath.split('/').filter((s) => s);\n const routeSegments = routePath.split('/').filter((s) => s);\n\n if (requestSegments.length !== routeSegments.length) {\n return null;\n }\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < routeSegments.length; i++) {\n const routeSegment = routeSegments[i];\n const requestSegment = requestSegments[i];\n\n if (routeSegment.startsWith(':')) {\n // Parameter segment\n const paramName = routeSegment.slice(1);\n params[paramName] = requestSegment;\n } else if (routeSegment !== requestSegment) {\n // Literal segment mismatch\n return null;\n }\n }\n\n return params;\n }\n\n /**\n * Handle authentication\n */\n private async authenticate(request: SmrtRequest): Promise<boolean> {\n if (!this.options.auth) return true;\n\n const authHeader = request.headers.authorization;\n if (!authHeader) return false;\n\n switch (this.options.auth.type) {\n case 'bearer': {\n const token = authHeader.replace('Bearer ', '');\n return this.options.auth.verify\n ? await this.options.auth.verify(token)\n : true;\n }\n\n case 'basic': {\n const credentials = authHeader.replace('Basic ', '');\n return this.options.auth.verify\n ? await this.options.auth.verify(credentials)\n : true;\n }\n\n case 'custom':\n return this.options.auth.verify\n ? await this.options.auth.verify(authHeader)\n : true;\n\n default:\n return false;\n }\n }\n\n /**\n * Create CORS preflight response\n */\n private createCorsResponse(): Response {\n return new Response(null, {\n status: 204,\n headers: this.getCorsHeaders(),\n });\n }\n\n /**\n * Add CORS headers to response\n */\n private addCorsHeaders(response: Response): void {\n const corsHeaders = this.getCorsHeaders();\n Object.entries(corsHeaders).forEach(([key, value]) => {\n response.headers.set(key, value);\n });\n }\n\n /**\n * Get CORS headers\n */\n private getCorsHeaders(): Record<string, string> {\n const corsConfig = this.options.cors;\n\n if (typeof corsConfig === 'boolean') {\n return {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',\n 'Access-Control-Allow-Headers': 'Content-Type, Authorization',\n };\n }\n\n return {\n 'Access-Control-Allow-Origin': Array.isArray(corsConfig.origin)\n ? corsConfig.origin.join(', ')\n : corsConfig.origin || '*',\n 'Access-Control-Allow-Methods':\n corsConfig.methods?.join(', ') || 'GET, POST, PUT, DELETE, OPTIONS',\n 'Access-Control-Allow-Headers':\n corsConfig.headers?.join(', ') || 'Content-Type, Authorization',\n };\n }\n}\n\n/**\n * Create a new SMRT server instance\n */\nexport function createSmrtServer(options?: SmrtServerOptions): SmrtServer {\n return new SmrtServer(options);\n}\n"],"names":[],"mappings":";;AAQA,MAAM,SAAS,aAAa,EAAE,OAAO,QAAQ;AAO7C,MAAM,wBAAwB,MAAM;AAAA,EAClC,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,MAAM,WAAW;AAAA,EACd;AAAA,EACA,6BACF,IAAA;AAAA,EAEN,YAAY,UAA6B,IAAI;AAC3C,SAAK,UAAU;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,UAAU;AAAA,MACV,MAAM;AAAA,MACN,GAAG;AAAA,IAAA;AAAA,EAEP;AAAA;AAAA;AAAA;AAAA,EAKA,SACE,QACA,MACA,SACA;AACA,UAAM,MAAM,GAAG,OAAO,YAAA,CAAa,IAAI,IAAI;AAC3C,SAAK,OAAO,IAAI,KAAK,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAc,SAA6C;AAC7D,SAAK,qBAAqB,OAAO,MAAM,OAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAc,SAA6C;AAC9D,SAAK,qBAAqB,QAAQ,MAAM,OAAO;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAc,SAA6C;AAC7D,SAAK,qBAAqB,OAAO,MAAM,OAAO;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,MAAc,SAA6C;AAChE,SAAK,qBAAqB,UAAU,MAAM,OAAO;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKQ,qBACN,QACA,MACA,SACA;AACA,UAAM,cAAc,OAAO,QAAwC;AACjE,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAItC,YAAI,UAAU;AACd,cAAM,SAAS,CAAC,aAAuB;AACrC,cAAI,QAAS;AACb,oBAAU;AACV,kBAAQ,QAAQ;AAAA,QAClB;AACA,cAAM,OAAO,CAAC,UAAmB;AAC/B,cAAI,QAAS;AACb,oBAAU;AACV,iBAAO,KAAK;AAAA,QACd;AAEA,cAAM,MAAM;AAAA,UACV,QAAQ,CAAC,SAAiB;AACxB,gBAAI,aAAa;AACjB,mBAAO;AAAA,UACT;AAAA,UACA,MAAM,CAAC,SAAc;AACnB;AAAA,cACE,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,gBACjC,QAAQ,IAAI,cAAc;AAAA,gBAC1B,SAAS;AAAA,kBACP,gBAAgB;AAAA,kBAChB,GAAG,IAAI;AAAA,gBAAA;AAAA,cACT,CACD;AAAA,YAAA;AAAA,UAEL;AAAA,UACA,MAAM,CAAC,SAAc;AACnB,kBAAM,OAAO,OAAO,SAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AAClE;AAAA,cACE,IAAI,SAAS,MAAM;AAAA,gBACjB,QAAQ,IAAI,cAAc;AAAA,gBAC1B,SAAS;AAAA,kBACP,gBACE,OAAO,SAAS,WACZ,eACA;AAAA,kBACN,GAAG,IAAI;AAAA,gBAAA;AAAA,cACT,CACD;AAAA,YAAA;AAAA,UAEL;AAAA,UACA,KAAK,CAAC,SAAe;AACnB;AAAA,cACE,IAAI,SAAS,QAAQ,IAAI;AAAA,gBACvB,QAAQ,IAAI,cAAc;AAAA,gBAC1B,SAAS,IAAI;AAAA,cAAA,CACd;AAAA,YAAA;AAAA,UAEL;AAAA,UACA,WAAW,CAAC,KAAa,UAAkB;AACzC,gBAAI,CAAC,IAAI,QAAS,KAAI,UAAU,CAAA;AAChC,gBAAI,QAAQ,GAAG,IAAI;AACnB,mBAAO;AAAA,UACT;AAAA,UACA,YAAY;AAAA,UACZ,SAAS,CAAA;AAAA,QAAC;AAOZ,gBAAQ,UACL,KAAK,MAAM,QAAQ,KAAK,GAAG,CAAC,EAC5B,KAAK,MAAM;AAGV,cAAI,CAAC,SAAS;AACZ;AAAA,cACE,IAAI,SAAS,yBAAyB;AAAA,gBACpC,QAAQ;AAAA,cAAA,CACT;AAAA,YAAA;AAAA,UAEL;AAAA,QACF,CAAC,EACA,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,SAAK,SAAS,QAAQ,MAAM,WAAW;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAA+C;AACnD,UAAM,SAAS,KAAK,aAAa,OAAO,KAAK,QAAQ;AACnD,UAAI;AACF,cAAM,UAAU,MAAM,KAAK,wBAAwB,GAAG;AACtD,cAAM,WAAW,MAAM,KAAK,cAAc,OAAO;AACjD,cAAM,KAAK,0BAA0B,UAAU,GAAG;AAAA,MACpD,SAAS,QAAQ;AACf,YAAI,aAAa;AACjB,YAAI,IAAI,uBAAuB;AAAA,MACjC;AAAA,IACF,CAAC;AAED,WAAO,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ,QAAQ;AAEtD,UAAM,MAAM,UAAU,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,IAAI;AAChE,WAAO,KAAK,4BAA4B,GAAG,EAAE;AAE7C,WAAO,EAAE,QAAQ,IAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAS,SAAqC;AAClD,WAAO,KAAK,cAAc,OAAO;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAe,QAA+C;AAC1E,UAAM,SAAmB,CAAA;AACzB,qBAAiB,SAAS,QAAQ;AAChC,aAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,IACjE;AACA,WAAO,OAAO,OAAO,MAAM,EAAE,SAAS,OAAO;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,wBACZ,KACkB;AAClB,UAAM,MAAM,UAAU,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG;AAC1E,UAAM,SAAS,IAAI,UAAU;AAC7B,UAAM,UAAU,IAAI,QAAA;AAEpB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,OAAO,GAAG;AACtD,UAAI,OAAO;AACT,gBAAQ,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,QAAI;AACJ,QAAI,WAAW,SAAS,WAAW,QAAQ;AACzC,aAAO,MAAM,KAAK,eAAe,GAAG;AAAA,IACtC;AAEA,WAAO,IAAI,QAAQ,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,0BACZ,aACA,KACe;AACf,QAAI,aAAa,YAAY;AAG7B,gBAAY,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC1C,UAAI,UAAU,KAAK,KAAK;AAAA,IAC1B,CAAC;AAGD,QAAI,YAAY,MAAM;AACpB,YAAM,SAAS,YAAY,KAAK,UAAA;AAChC,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAA,IAAU,MAAM,OAAO,KAAA;AACrC,YAAI,KAAM;AACV,YAAI,MAAM,KAAK;AAAA,MACjB;AAAA,IACF;AAEA,QAAI,IAAA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,cAAc,SAAqC;AAC/D,QAAI;AAEF,UAAI,KAAK,QAAQ,QAAQ,QAAQ,WAAW,WAAW;AACrD,eAAO,KAAK,mBAAA;AAAA,MACd;AAGA,YAAM,cAAc,MAAM,KAAK,aAAa,OAAO;AAGnD,UAAI,KAAK,QAAQ,MAAM;AACrB,cAAM,aAAa,MAAM,KAAK,aAAa,WAAW;AACtD,YAAI,CAAC,YAAY;AACf,iBAAO,IAAI,SAAS,gBAAgB,EAAE,QAAQ,KAAK;AAAA,QACrD;AAAA,MACF;AAGA,YAAM,WAAW,GAAG,QAAQ,MAAM,IAAI,YAAY,GAAG;AACrD,YAAM,UAAU,KAAK,iBAAiB,QAAQ;AAE9C,UAAI,CAAC,SAAS;AACZ,eAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,KAAK;AAAA,MAClD;AAGA,YAAM,WAAW,MAAM,QAAQ,WAAW;AAG1C,UAAI,KAAK,QAAQ,MAAM;AACrB,aAAK,eAAe,QAAQ;AAAA,MAC9B;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AAGd,UAAI,iBAAiB,iBAAiB;AACpC,eAAO,IAAI,SAAS,MAAM,SAAS,EAAE,QAAQ,KAAK;AAAA,MACpD;AACA,aAAO,MAAM,wBAAwB,EAAE,MAAA,CAAO;AAC9C,aAAO,IAAI,SAAS,yBAAyB,EAAE,QAAQ,KAAK;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,SAAwC;AACjE,UAAM,MAAM,IAAI,IAAI,QAAQ,GAAG;AAC/B,UAAM,WAAW,IAAI;AAGrB,UAAM,YAAY,SAAS,WAAW,KAAK,QAAQ,QAAQ,IACvD,SAAS,MAAM,KAAK,QAAQ,SAAS,MAAM,IAC3C;AAGJ,UAAM,QAA6B,CAAA;AACnC,QAAI,aAAa,QAAQ,CAAC,OAAO,QAAQ;AACvC,YAAM,GAAG,IAAI;AAAA,IACf,CAAC;AAMD,QAAI;AACJ,QACE,QAAQ,SACP,QAAQ,WAAW,UAClB,QAAQ,WAAW,SACnB,QAAQ,WAAW,UACrB;AACA,YAAM,cAAc,QAAQ,QAAQ,IAAI,cAAc,KAAK;AAC3D,YAAM,UAAU,MAAM,QAAQ,KAAA;AAC9B,UAAI,QAAQ,KAAA,MAAW,GAAI;AAAA,eAEhB,YAAY,SAAS,kBAAkB,GAAG;AACnD,YAAI;AACF,iBAAO,KAAK,MAAM,OAAO;AAAA,QAC3B,SAAS,OAAO;AACd,gBAAM,IAAI;AAAA,YACR,8BACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,UAAkC,CAAA;AACxC,YAAQ,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACtC,cAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAED,WAAO;AAAA,MACL,QAAQ,CAAA;AAAA;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,KAAK;AAAA,MACL,MAAM,YAAY;AAAA,IAAA;AAAA,EAEtB;AAAA;AAAA;AAAA;AAAA,EAKQ,iBACN,UACuD;AAEvD,QAAI,KAAK,OAAO,IAAI,QAAQ,GAAG;AAC7B,aAAO,KAAK,OAAO,IAAI,QAAQ;AAAA,IACjC;AAGA,UAAM,CAAC,QAAQ,IAAI,IAAI,SAAS,MAAM,KAAK,CAAC;AAE5C,eAAW,CAAC,KAAK,OAAO,KAAK,KAAK,OAAO,WAAW;AAClD,YAAM,CAAC,aAAa,SAAS,IAAI,IAAI,MAAM,KAAK,CAAC;AAEjD,UAAI,WAAW,aAAa;AAC1B,cAAM,SAAS,KAAK,WAAW,MAAM,SAAS;AAC9C,YAAI,WAAW,MAAM;AAEnB,iBAAO,OAAO,QAAqB;AACjC,gBAAI,SAAS;AACb,mBAAO,QAAQ,GAAG;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,WACN,aACA,WAC+B;AAC/B,UAAM,kBAAkB,YAAY,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC;AAC9D,UAAM,gBAAgB,UAAU,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC;AAE1D,QAAI,gBAAgB,WAAW,cAAc,QAAQ;AACnD,aAAO;AAAA,IACT;AAEA,UAAM,SAAiC,CAAA;AAEvC,aAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;AAC7C,YAAM,eAAe,cAAc,CAAC;AACpC,YAAM,iBAAiB,gBAAgB,CAAC;AAExC,UAAI,aAAa,WAAW,GAAG,GAAG;AAEhC,cAAM,YAAY,aAAa,MAAM,CAAC;AACtC,eAAO,SAAS,IAAI;AAAA,MACtB,WAAW,iBAAiB,gBAAgB;AAE1C,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,SAAwC;AACjE,QAAI,CAAC,KAAK,QAAQ,KAAM,QAAO;AAE/B,UAAM,aAAa,QAAQ,QAAQ;AACnC,QAAI,CAAC,WAAY,QAAO;AAExB,YAAQ,KAAK,QAAQ,KAAK,MAAA;AAAA,MACxB,KAAK,UAAU;AACb,cAAM,QAAQ,WAAW,QAAQ,WAAW,EAAE;AAC9C,eAAO,KAAK,QAAQ,KAAK,SACrB,MAAM,KAAK,QAAQ,KAAK,OAAO,KAAK,IACpC;AAAA,MACN;AAAA,MAEA,KAAK,SAAS;AACZ,cAAM,cAAc,WAAW,QAAQ,UAAU,EAAE;AACnD,eAAO,KAAK,QAAQ,KAAK,SACrB,MAAM,KAAK,QAAQ,KAAK,OAAO,WAAW,IAC1C;AAAA,MACN;AAAA,MAEA,KAAK;AACH,eAAO,KAAK,QAAQ,KAAK,SACrB,MAAM,KAAK,QAAQ,KAAK,OAAO,UAAU,IACzC;AAAA,MAEN;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAA+B;AACrC,WAAO,IAAI,SAAS,MAAM;AAAA,MACxB,QAAQ;AAAA,MACR,SAAS,KAAK,eAAA;AAAA,IAAe,CAC9B;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,UAA0B;AAC/C,UAAM,cAAc,KAAK,eAAA;AACzB,WAAO,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACpD,eAAS,QAAQ,IAAI,KAAK,KAAK;AAAA,IACjC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAyC;AAC/C,UAAM,aAAa,KAAK,QAAQ;AAEhC,QAAI,OAAO,eAAe,WAAW;AACnC,aAAO;AAAA,QACL,+BAA+B;AAAA,QAC/B,gCAAgC;AAAA,QAChC,gCAAgC;AAAA,MAAA;AAAA,IAEpC;AAEA,WAAO;AAAA,MACL,+BAA+B,MAAM,QAAQ,WAAW,MAAM,IAC1D,WAAW,OAAO,KAAK,IAAI,IAC3B,WAAW,UAAU;AAAA,MACzB,gCACE,WAAW,SAAS,KAAK,IAAI,KAAK;AAAA,MACpC,gCACE,WAAW,SAAS,KAAK,IAAI,KAAK;AAAA,IAAA;AAAA,EAExC;AACF;AAKO,SAAS,iBAAiB,SAAyC;AACxE,SAAO,IAAI,WAAW,OAAO;AAC/B;"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Runtime type definitions for SMRT services
3
+ */
4
+ export interface SmrtServerOptions {
5
+ port?: number;
6
+ hostname?: string;
7
+ basePath?: string;
8
+ cors?: boolean | {
9
+ origin?: string | string[];
10
+ methods?: string[];
11
+ headers?: string[];
12
+ };
13
+ auth?: {
14
+ type: 'bearer' | 'basic' | 'custom';
15
+ verify?: (token: string) => Promise<boolean | any>;
16
+ };
17
+ }
18
+ export interface SmrtClientOptions {
19
+ baseUrl?: string;
20
+ basePath?: string;
21
+ auth?: {
22
+ type: 'bearer' | 'basic';
23
+ token?: string;
24
+ username?: string;
25
+ password?: string;
26
+ };
27
+ fetch?: typeof fetch;
28
+ }
29
+ export interface SmrtRequest {
30
+ params: Record<string, string>;
31
+ query: Record<string, any>;
32
+ body?: any;
33
+ headers: Record<string, string>;
34
+ method: string;
35
+ url: string;
36
+ json(): Promise<any>;
37
+ }
38
+ export interface SmrtResponse {
39
+ json(data: any, init?: ResponseInit): Response;
40
+ status(code: number): SmrtResponse;
41
+ send(data?: any): Response;
42
+ }
43
+ export interface CollectionInterface {
44
+ list(options?: {
45
+ where?: Record<string, any>;
46
+ orderBy?: string | string[];
47
+ limit?: number;
48
+ offset?: number;
49
+ }): Promise<any[]>;
50
+ get(id: string): Promise<any | null>;
51
+ create(data: any): Promise<any>;
52
+ update(id: string, data: any): Promise<any | null>;
53
+ delete(id: string): Promise<boolean>;
54
+ count(options?: {
55
+ where?: Record<string, any>;
56
+ }): Promise<number>;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EACD,OAAO,GACP;QACE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACN,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;KACpD,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,OAAO,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAErC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAEnD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErC,KAAK,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE"}