workerstack 0.1.0-beta.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 (605) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +138 -0
  4. package/dist/access.d.ts +131 -0
  5. package/dist/access.d.ts.map +1 -0
  6. package/dist/access.js +333 -0
  7. package/dist/access.js.map +1 -0
  8. package/dist/api/builder.d.ts +457 -0
  9. package/dist/api/builder.d.ts.map +1 -0
  10. package/dist/api/builder.js +45 -0
  11. package/dist/api/builder.js.map +1 -0
  12. package/dist/api/catalog.d.ts +8 -0
  13. package/dist/api/catalog.d.ts.map +1 -0
  14. package/dist/api/catalog.js +56 -0
  15. package/dist/api/catalog.js.map +1 -0
  16. package/dist/api/context.d.ts +47 -0
  17. package/dist/api/context.d.ts.map +1 -0
  18. package/dist/api/context.js +40 -0
  19. package/dist/api/context.js.map +1 -0
  20. package/dist/api/crud-router.d.ts +476 -0
  21. package/dist/api/crud-router.d.ts.map +1 -0
  22. package/dist/api/crud-router.js +354 -0
  23. package/dist/api/crud-router.js.map +1 -0
  24. package/dist/api/list-input-schema.d.ts +37 -0
  25. package/dist/api/list-input-schema.d.ts.map +1 -0
  26. package/dist/api/list-input-schema.js +63 -0
  27. package/dist/api/list-input-schema.js.map +1 -0
  28. package/dist/api/list-spec.d.ts +44 -0
  29. package/dist/api/list-spec.d.ts.map +1 -0
  30. package/dist/api/list-spec.js +49 -0
  31. package/dist/api/list-spec.js.map +1 -0
  32. package/dist/api/live-view.d.ts +14 -0
  33. package/dist/api/live-view.d.ts.map +1 -0
  34. package/dist/api/live-view.js +42 -0
  35. package/dist/api/live-view.js.map +1 -0
  36. package/dist/api/live-window.d.ts +40 -0
  37. package/dist/api/live-window.d.ts.map +1 -0
  38. package/dist/api/live-window.js +93 -0
  39. package/dist/api/live-window.js.map +1 -0
  40. package/dist/api/openapi.d.ts +6 -0
  41. package/dist/api/openapi.d.ts.map +1 -0
  42. package/dist/api/openapi.js +146 -0
  43. package/dist/api/openapi.js.map +1 -0
  44. package/dist/api/realtime-router.d.ts +94 -0
  45. package/dist/api/realtime-router.d.ts.map +1 -0
  46. package/dist/api/realtime-router.js +45 -0
  47. package/dist/api/realtime-router.js.map +1 -0
  48. package/dist/api/registry.d.ts +30 -0
  49. package/dist/api/registry.d.ts.map +1 -0
  50. package/dist/api/registry.js +236 -0
  51. package/dist/api/registry.js.map +1 -0
  52. package/dist/api/router.d.ts +15 -0
  53. package/dist/api/router.d.ts.map +1 -0
  54. package/dist/api/router.js +32 -0
  55. package/dist/api/router.js.map +1 -0
  56. package/dist/api/storage-router.d.ts +349 -0
  57. package/dist/api/storage-router.d.ts.map +1 -0
  58. package/dist/api/storage-router.js +155 -0
  59. package/dist/api/storage-router.js.map +1 -0
  60. package/dist/api/types.d.ts +55 -0
  61. package/dist/api/types.d.ts.map +1 -0
  62. package/dist/api/types.js +2 -0
  63. package/dist/api/types.js.map +1 -0
  64. package/dist/auth-password.d.ts +27 -0
  65. package/dist/auth-password.d.ts.map +1 -0
  66. package/dist/auth-password.js +60 -0
  67. package/dist/auth-password.js.map +1 -0
  68. package/dist/auth.d.ts +59 -0
  69. package/dist/auth.d.ts.map +1 -0
  70. package/dist/auth.js +146 -0
  71. package/dist/auth.js.map +1 -0
  72. package/dist/backend-internals.d.ts +35 -0
  73. package/dist/backend-internals.d.ts.map +1 -0
  74. package/dist/backend-internals.js +2 -0
  75. package/dist/backend-internals.js.map +1 -0
  76. package/dist/backend.d.ts +63 -0
  77. package/dist/backend.d.ts.map +1 -0
  78. package/dist/backend.js +59 -0
  79. package/dist/backend.js.map +1 -0
  80. package/dist/blueprint-generator.d.ts +21 -0
  81. package/dist/blueprint-generator.d.ts.map +1 -0
  82. package/dist/blueprint-generator.js +199 -0
  83. package/dist/blueprint-generator.js.map +1 -0
  84. package/dist/blueprint.d.ts +99 -0
  85. package/dist/blueprint.d.ts.map +1 -0
  86. package/dist/blueprint.js +257 -0
  87. package/dist/blueprint.js.map +1 -0
  88. package/dist/cli-skills.d.ts +16 -0
  89. package/dist/cli-skills.d.ts.map +1 -0
  90. package/dist/cli-skills.js +108 -0
  91. package/dist/cli-skills.js.map +1 -0
  92. package/dist/cli.d.ts +18 -0
  93. package/dist/cli.d.ts.map +1 -0
  94. package/dist/cli.js +205 -0
  95. package/dist/cli.js.map +1 -0
  96. package/dist/client/client.d.ts +53 -0
  97. package/dist/client/client.d.ts.map +1 -0
  98. package/dist/client/client.js +111 -0
  99. package/dist/client/client.js.map +1 -0
  100. package/dist/client/index.d.ts +4 -0
  101. package/dist/client/index.d.ts.map +1 -0
  102. package/dist/client/index.js +4 -0
  103. package/dist/client/index.js.map +1 -0
  104. package/dist/client/live-view.d.ts +49 -0
  105. package/dist/client/live-view.d.ts.map +1 -0
  106. package/dist/client/live-view.js +184 -0
  107. package/dist/client/live-view.js.map +1 -0
  108. package/dist/client/react.d.ts +4 -0
  109. package/dist/client/react.d.ts.map +1 -0
  110. package/dist/client/react.js +6 -0
  111. package/dist/client/react.js.map +1 -0
  112. package/dist/client/realtime.d.ts +54 -0
  113. package/dist/client/realtime.d.ts.map +1 -0
  114. package/dist/client/realtime.js +105 -0
  115. package/dist/client/realtime.js.map +1 -0
  116. package/dist/client/rest.d.ts +2 -0
  117. package/dist/client/rest.d.ts.map +1 -0
  118. package/dist/client/rest.js +2 -0
  119. package/dist/client/rest.js.map +1 -0
  120. package/dist/client/rpc-client.d.ts +38 -0
  121. package/dist/client/rpc-client.d.ts.map +1 -0
  122. package/dist/client/rpc-client.js +59 -0
  123. package/dist/client/rpc-client.js.map +1 -0
  124. package/dist/client/solid.d.ts +7 -0
  125. package/dist/client/solid.d.ts.map +1 -0
  126. package/dist/client/solid.js +21 -0
  127. package/dist/client/solid.js.map +1 -0
  128. package/dist/client/svelte.d.ts +6 -0
  129. package/dist/client/svelte.d.ts.map +1 -0
  130. package/dist/client/svelte.js +9 -0
  131. package/dist/client/svelte.js.map +1 -0
  132. package/dist/client/vue.d.ts +5 -0
  133. package/dist/client/vue.d.ts.map +1 -0
  134. package/dist/client/vue.js +11 -0
  135. package/dist/client/vue.js.map +1 -0
  136. package/dist/codegen.d.ts +36 -0
  137. package/dist/codegen.d.ts.map +1 -0
  138. package/dist/codegen.js +235 -0
  139. package/dist/codegen.js.map +1 -0
  140. package/dist/config.d.ts +129 -0
  141. package/dist/config.d.ts.map +1 -0
  142. package/dist/config.js +75 -0
  143. package/dist/config.js.map +1 -0
  144. package/dist/cron.d.ts +4 -0
  145. package/dist/cron.d.ts.map +1 -0
  146. package/dist/cron.js +3 -0
  147. package/dist/cron.js.map +1 -0
  148. package/dist/crud-operations.d.ts +43 -0
  149. package/dist/crud-operations.d.ts.map +1 -0
  150. package/dist/crud-operations.js +249 -0
  151. package/dist/crud-operations.js.map +1 -0
  152. package/dist/database/adapter.d.ts +26 -0
  153. package/dist/database/adapter.d.ts.map +1 -0
  154. package/dist/database/adapter.js +2 -0
  155. package/dist/database/adapter.js.map +1 -0
  156. package/dist/database/libsql.d.ts +3 -0
  157. package/dist/database/libsql.d.ts.map +1 -0
  158. package/dist/database/libsql.js +39 -0
  159. package/dist/database/libsql.js.map +1 -0
  160. package/dist/db.d.ts +15 -0
  161. package/dist/db.d.ts.map +1 -0
  162. package/dist/db.js +8 -0
  163. package/dist/db.js.map +1 -0
  164. package/dist/dev/binaries.d.ts +22 -0
  165. package/dist/dev/binaries.d.ts.map +1 -0
  166. package/dist/dev/binaries.js +119 -0
  167. package/dist/dev/binaries.js.map +1 -0
  168. package/dist/dev/env.d.ts +11 -0
  169. package/dist/dev/env.d.ts.map +1 -0
  170. package/dist/dev/env.js +71 -0
  171. package/dist/dev/env.js.map +1 -0
  172. package/dist/dev/index.d.ts +39 -0
  173. package/dist/dev/index.d.ts.map +1 -0
  174. package/dist/dev/index.js +273 -0
  175. package/dist/dev/index.js.map +1 -0
  176. package/dist/dev/processes.d.ts +37 -0
  177. package/dist/dev/processes.d.ts.map +1 -0
  178. package/dist/dev/processes.js +104 -0
  179. package/dist/dev/processes.js.map +1 -0
  180. package/dist/dev/push.d.ts +2 -0
  181. package/dist/dev/push.d.ts.map +1 -0
  182. package/dist/dev/push.js +30 -0
  183. package/dist/dev/push.js.map +1 -0
  184. package/dist/dialect.d.ts +17 -0
  185. package/dist/dialect.d.ts.map +1 -0
  186. package/dist/dialect.js +12 -0
  187. package/dist/dialect.js.map +1 -0
  188. package/dist/email/smtp.d.ts +20 -0
  189. package/dist/email/smtp.d.ts.map +1 -0
  190. package/dist/email/smtp.js +31 -0
  191. package/dist/email/smtp.js.map +1 -0
  192. package/dist/email.d.ts +26 -0
  193. package/dist/email.d.ts.map +1 -0
  194. package/dist/email.js +2 -0
  195. package/dist/email.js.map +1 -0
  196. package/dist/env-probe.d.ts +9 -0
  197. package/dist/env-probe.d.ts.map +1 -0
  198. package/dist/env-probe.js +72 -0
  199. package/dist/env-probe.js.map +1 -0
  200. package/dist/env.d.ts +62 -0
  201. package/dist/env.d.ts.map +1 -0
  202. package/dist/env.js +86 -0
  203. package/dist/env.js.map +1 -0
  204. package/dist/errors.d.ts +153 -0
  205. package/dist/errors.d.ts.map +1 -0
  206. package/dist/errors.js +106 -0
  207. package/dist/errors.js.map +1 -0
  208. package/dist/handler.d.ts +11 -0
  209. package/dist/handler.d.ts.map +1 -0
  210. package/dist/handler.js +21 -0
  211. package/dist/handler.js.map +1 -0
  212. package/dist/hosted-contract.d.ts +11 -0
  213. package/dist/hosted-contract.d.ts.map +1 -0
  214. package/dist/hosted-contract.js +50 -0
  215. package/dist/hosted-contract.js.map +1 -0
  216. package/dist/idempotency.d.ts +17 -0
  217. package/dist/idempotency.d.ts.map +1 -0
  218. package/dist/idempotency.js +65 -0
  219. package/dist/idempotency.js.map +1 -0
  220. package/dist/index.d.ts +41 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +18 -0
  223. package/dist/index.js.map +1 -0
  224. package/dist/inspect.d.ts +15 -0
  225. package/dist/inspect.d.ts.map +1 -0
  226. package/dist/inspect.js +44 -0
  227. package/dist/inspect.js.map +1 -0
  228. package/dist/internal-tables.d.ts +1767 -0
  229. package/dist/internal-tables.d.ts.map +1 -0
  230. package/dist/internal-tables.js +114 -0
  231. package/dist/internal-tables.js.map +1 -0
  232. package/dist/jobs/cron.d.ts +15 -0
  233. package/dist/jobs/cron.d.ts.map +1 -0
  234. package/dist/jobs/cron.js +74 -0
  235. package/dist/jobs/cron.js.map +1 -0
  236. package/dist/jobs/define.d.ts +186 -0
  237. package/dist/jobs/define.d.ts.map +1 -0
  238. package/dist/jobs/define.js +99 -0
  239. package/dist/jobs/define.js.map +1 -0
  240. package/dist/jobs/index.d.ts +9 -0
  241. package/dist/jobs/index.d.ts.map +1 -0
  242. package/dist/jobs/index.js +7 -0
  243. package/dist/jobs/index.js.map +1 -0
  244. package/dist/jobs/queue.d.ts +13 -0
  245. package/dist/jobs/queue.d.ts.map +1 -0
  246. package/dist/jobs/queue.js +71 -0
  247. package/dist/jobs/queue.js.map +1 -0
  248. package/dist/jobs/slots.d.ts +30 -0
  249. package/dist/jobs/slots.d.ts.map +1 -0
  250. package/dist/jobs/slots.js +53 -0
  251. package/dist/jobs/slots.js.map +1 -0
  252. package/dist/jobs/worker.d.ts +45 -0
  253. package/dist/jobs/worker.d.ts.map +1 -0
  254. package/dist/jobs/worker.js +605 -0
  255. package/dist/jobs/worker.js.map +1 -0
  256. package/dist/lifecycle.d.ts +10 -0
  257. package/dist/lifecycle.d.ts.map +1 -0
  258. package/dist/lifecycle.js +37 -0
  259. package/dist/lifecycle.js.map +1 -0
  260. package/dist/list-query.d.ts +62 -0
  261. package/dist/list-query.d.ts.map +1 -0
  262. package/dist/list-query.js +190 -0
  263. package/dist/list-query.js.map +1 -0
  264. package/dist/live/apply.d.ts +13 -0
  265. package/dist/live/apply.d.ts.map +1 -0
  266. package/dist/live/apply.js +32 -0
  267. package/dist/live/apply.js.map +1 -0
  268. package/dist/live/index.d.ts +48 -0
  269. package/dist/live/index.d.ts.map +1 -0
  270. package/dist/live/index.js +108 -0
  271. package/dist/live/index.js.map +1 -0
  272. package/dist/live/protocol.d.ts +47 -0
  273. package/dist/live/protocol.d.ts.map +1 -0
  274. package/dist/live/protocol.js +12 -0
  275. package/dist/live/protocol.js.map +1 -0
  276. package/dist/live/sse.d.ts +22 -0
  277. package/dist/live/sse.d.ts.map +1 -0
  278. package/dist/live/sse.js +41 -0
  279. package/dist/live/sse.js.map +1 -0
  280. package/dist/logging.d.ts +8 -0
  281. package/dist/logging.d.ts.map +1 -0
  282. package/dist/logging.js +6 -0
  283. package/dist/logging.js.map +1 -0
  284. package/dist/manifest-diff.d.ts +6 -0
  285. package/dist/manifest-diff.d.ts.map +1 -0
  286. package/dist/manifest-diff.js +42 -0
  287. package/dist/manifest-diff.js.map +1 -0
  288. package/dist/manifest.d.ts +87 -0
  289. package/dist/manifest.d.ts.map +1 -0
  290. package/dist/manifest.js +237 -0
  291. package/dist/manifest.js.map +1 -0
  292. package/dist/messaging/email.d.ts +16 -0
  293. package/dist/messaging/email.d.ts.map +1 -0
  294. package/dist/messaging/email.js +8 -0
  295. package/dist/messaging/email.js.map +1 -0
  296. package/dist/messaging/index.d.ts +8 -0
  297. package/dist/messaging/index.d.ts.map +1 -0
  298. package/dist/messaging/index.js +4 -0
  299. package/dist/messaging/index.js.map +1 -0
  300. package/dist/messaging/journal.d.ts +4 -0
  301. package/dist/messaging/journal.d.ts.map +1 -0
  302. package/dist/messaging/journal.js +19 -0
  303. package/dist/messaging/journal.js.map +1 -0
  304. package/dist/messaging/runtime.d.ts +16 -0
  305. package/dist/messaging/runtime.d.ts.map +1 -0
  306. package/dist/messaging/runtime.js +213 -0
  307. package/dist/messaging/runtime.js.map +1 -0
  308. package/dist/messaging/standalone.d.ts +27 -0
  309. package/dist/messaging/standalone.d.ts.map +1 -0
  310. package/dist/messaging/standalone.js +18 -0
  311. package/dist/messaging/standalone.js.map +1 -0
  312. package/dist/messaging/telegram.d.ts +16 -0
  313. package/dist/messaging/telegram.d.ts.map +1 -0
  314. package/dist/messaging/telegram.js +5 -0
  315. package/dist/messaging/telegram.js.map +1 -0
  316. package/dist/messaging/types.d.ts +22 -0
  317. package/dist/messaging/types.d.ts.map +1 -0
  318. package/dist/messaging/types.js +17 -0
  319. package/dist/messaging/types.js.map +1 -0
  320. package/dist/platform.d.ts +25 -0
  321. package/dist/platform.d.ts.map +1 -0
  322. package/dist/platform.js +24 -0
  323. package/dist/platform.js.map +1 -0
  324. package/dist/provision-internals.d.ts +23 -0
  325. package/dist/provision-internals.d.ts.map +1 -0
  326. package/dist/provision-internals.js +7 -0
  327. package/dist/provision-internals.js.map +1 -0
  328. package/dist/provision-runtime.d.ts +6 -0
  329. package/dist/provision-runtime.d.ts.map +1 -0
  330. package/dist/provision-runtime.js +41 -0
  331. package/dist/provision-runtime.js.map +1 -0
  332. package/dist/provision-schema.d.ts +16 -0
  333. package/dist/provision-schema.d.ts.map +1 -0
  334. package/dist/provision-schema.js +59 -0
  335. package/dist/provision-schema.js.map +1 -0
  336. package/dist/provision.d.ts +8 -0
  337. package/dist/provision.d.ts.map +1 -0
  338. package/dist/provision.js +16 -0
  339. package/dist/provision.js.map +1 -0
  340. package/dist/query/api.d.ts +10 -0
  341. package/dist/query/api.d.ts.map +1 -0
  342. package/dist/query/api.js +7 -0
  343. package/dist/query/api.js.map +1 -0
  344. package/dist/query/client.d.ts +28 -0
  345. package/dist/query/client.d.ts.map +1 -0
  346. package/dist/query/client.js +87 -0
  347. package/dist/query/client.js.map +1 -0
  348. package/dist/query/fetch.d.ts +3 -0
  349. package/dist/query/fetch.d.ts.map +1 -0
  350. package/dist/query/fetch.js +4 -0
  351. package/dist/query/fetch.js.map +1 -0
  352. package/dist/query/index.d.ts +8 -0
  353. package/dist/query/index.d.ts.map +1 -0
  354. package/dist/query/index.js +4 -0
  355. package/dist/query/index.js.map +1 -0
  356. package/dist/query/infer.d.ts +25 -0
  357. package/dist/query/infer.d.ts.map +1 -0
  358. package/dist/query/infer.js +2 -0
  359. package/dist/query/infer.js.map +1 -0
  360. package/dist/query/react.d.ts +3 -0
  361. package/dist/query/react.d.ts.map +1 -0
  362. package/dist/query/react.js +2 -0
  363. package/dist/query/react.js.map +1 -0
  364. package/dist/query/realtime-flush.d.ts +26 -0
  365. package/dist/query/realtime-flush.d.ts.map +1 -0
  366. package/dist/query/realtime-flush.js +45 -0
  367. package/dist/query/realtime-flush.js.map +1 -0
  368. package/dist/query/realtime-stream.d.ts +3 -0
  369. package/dist/query/realtime-stream.d.ts.map +1 -0
  370. package/dist/query/realtime-stream.js +3 -0
  371. package/dist/query/realtime-stream.js.map +1 -0
  372. package/dist/query/realtime.d.ts +88 -0
  373. package/dist/query/realtime.d.ts.map +1 -0
  374. package/dist/query/realtime.js +255 -0
  375. package/dist/query/realtime.js.map +1 -0
  376. package/dist/rate-limit.d.ts +8 -0
  377. package/dist/rate-limit.d.ts.map +1 -0
  378. package/dist/rate-limit.js +46 -0
  379. package/dist/rate-limit.js.map +1 -0
  380. package/dist/readiness-probes.d.ts +4 -0
  381. package/dist/readiness-probes.d.ts.map +1 -0
  382. package/dist/readiness-probes.js +23 -0
  383. package/dist/readiness-probes.js.map +1 -0
  384. package/dist/readiness.d.ts +39 -0
  385. package/dist/readiness.d.ts.map +1 -0
  386. package/dist/readiness.js +72 -0
  387. package/dist/readiness.js.map +1 -0
  388. package/dist/realtime/facade.d.ts +20 -0
  389. package/dist/realtime/facade.d.ts.map +1 -0
  390. package/dist/realtime/facade.js +37 -0
  391. package/dist/realtime/facade.js.map +1 -0
  392. package/dist/realtime/filter.d.ts +42 -0
  393. package/dist/realtime/filter.d.ts.map +1 -0
  394. package/dist/realtime/filter.js +86 -0
  395. package/dist/realtime/filter.js.map +1 -0
  396. package/dist/realtime/heartbeat.d.ts +20 -0
  397. package/dist/realtime/heartbeat.d.ts.map +1 -0
  398. package/dist/realtime/heartbeat.js +64 -0
  399. package/dist/realtime/heartbeat.js.map +1 -0
  400. package/dist/realtime/publisher.d.ts +19 -0
  401. package/dist/realtime/publisher.d.ts.map +1 -0
  402. package/dist/realtime/publisher.js +8 -0
  403. package/dist/realtime/publisher.js.map +1 -0
  404. package/dist/runtime.d.ts +141 -0
  405. package/dist/runtime.d.ts.map +1 -0
  406. package/dist/runtime.js +463 -0
  407. package/dist/runtime.js.map +1 -0
  408. package/dist/schema-export.d.ts +2 -0
  409. package/dist/schema-export.d.ts.map +1 -0
  410. package/dist/schema-export.js +2 -0
  411. package/dist/schema-export.js.map +1 -0
  412. package/dist/scope.d.ts +4 -0
  413. package/dist/scope.d.ts.map +1 -0
  414. package/dist/scope.js +13 -0
  415. package/dist/scope.js.map +1 -0
  416. package/dist/standard-schema.d.ts +13 -0
  417. package/dist/standard-schema.d.ts.map +1 -0
  418. package/dist/standard-schema.js +34 -0
  419. package/dist/standard-schema.js.map +1 -0
  420. package/dist/start/auth-client.d.ts +11 -0
  421. package/dist/start/auth-client.d.ts.map +1 -0
  422. package/dist/start/auth-client.js +15 -0
  423. package/dist/start/auth-client.js.map +1 -0
  424. package/dist/start/create-start-worker.d.ts +16 -0
  425. package/dist/start/create-start-worker.d.ts.map +1 -0
  426. package/dist/start/create-start-worker.js +24 -0
  427. package/dist/start/create-start-worker.js.map +1 -0
  428. package/dist/start/index.d.ts +66 -0
  429. package/dist/start/index.d.ts.map +1 -0
  430. package/dist/start/index.js +49 -0
  431. package/dist/start/index.js.map +1 -0
  432. package/dist/start/isomorphic-fetch.d.ts +22 -0
  433. package/dist/start/isomorphic-fetch.d.ts.map +1 -0
  434. package/dist/start/isomorphic-fetch.js +49 -0
  435. package/dist/start/isomorphic-fetch.js.map +1 -0
  436. package/dist/start/server-entry.d.ts +7 -0
  437. package/dist/start/server-entry.d.ts.map +1 -0
  438. package/dist/start/server-entry.js +8 -0
  439. package/dist/start/server-entry.js.map +1 -0
  440. package/dist/storage/background.d.ts +3 -0
  441. package/dist/storage/background.d.ts.map +1 -0
  442. package/dist/storage/background.js +3 -0
  443. package/dist/storage/background.js.map +1 -0
  444. package/dist/storage/buckets.d.ts +78 -0
  445. package/dist/storage/buckets.d.ts.map +1 -0
  446. package/dist/storage/buckets.js +177 -0
  447. package/dist/storage/buckets.js.map +1 -0
  448. package/dist/storage/delete.d.ts +8 -0
  449. package/dist/storage/delete.d.ts.map +1 -0
  450. package/dist/storage/delete.js +10 -0
  451. package/dist/storage/delete.js.map +1 -0
  452. package/dist/storage/file-meta.d.ts +37 -0
  453. package/dist/storage/file-meta.d.ts.map +1 -0
  454. package/dist/storage/file-meta.js +166 -0
  455. package/dist/storage/file-meta.js.map +1 -0
  456. package/dist/storage/index.d.ts +28 -0
  457. package/dist/storage/index.d.ts.map +1 -0
  458. package/dist/storage/index.js +5 -0
  459. package/dist/storage/index.js.map +1 -0
  460. package/dist/storage/local.d.ts +15 -0
  461. package/dist/storage/local.d.ts.map +1 -0
  462. package/dist/storage/local.js +56 -0
  463. package/dist/storage/local.js.map +1 -0
  464. package/dist/storage/operations.d.ts +54 -0
  465. package/dist/storage/operations.d.ts.map +1 -0
  466. package/dist/storage/operations.js +212 -0
  467. package/dist/storage/operations.js.map +1 -0
  468. package/dist/storage/registry.d.ts +11 -0
  469. package/dist/storage/registry.d.ts.map +1 -0
  470. package/dist/storage/registry.js +23 -0
  471. package/dist/storage/registry.js.map +1 -0
  472. package/dist/storage/s3.d.ts +35 -0
  473. package/dist/storage/s3.d.ts.map +1 -0
  474. package/dist/storage/s3.js +125 -0
  475. package/dist/storage/s3.js.map +1 -0
  476. package/dist/storage/sigv4.d.ts +24 -0
  477. package/dist/storage/sigv4.d.ts.map +1 -0
  478. package/dist/storage/sigv4.js +107 -0
  479. package/dist/storage/sigv4.js.map +1 -0
  480. package/dist/storage/sweep.d.ts +9 -0
  481. package/dist/storage/sweep.d.ts.map +1 -0
  482. package/dist/storage/sweep.js +17 -0
  483. package/dist/storage/sweep.js.map +1 -0
  484. package/dist/sync/collection.d.ts +106 -0
  485. package/dist/sync/collection.d.ts.map +1 -0
  486. package/dist/sync/collection.js +258 -0
  487. package/dist/sync/collection.js.map +1 -0
  488. package/dist/sync/index.d.ts +8 -0
  489. package/dist/sync/index.d.ts.map +1 -0
  490. package/dist/sync/index.js +4 -0
  491. package/dist/sync/index.js.map +1 -0
  492. package/dist/sync/realtime-sync.d.ts +31 -0
  493. package/dist/sync/realtime-sync.d.ts.map +1 -0
  494. package/dist/sync/realtime-sync.js +46 -0
  495. package/dist/sync/realtime-sync.js.map +1 -0
  496. package/dist/sync/sync-client.d.ts +28 -0
  497. package/dist/sync/sync-client.d.ts.map +1 -0
  498. package/dist/sync/sync-client.js +52 -0
  499. package/dist/sync/sync-client.js.map +1 -0
  500. package/dist/sync/update-queue.d.ts +27 -0
  501. package/dist/sync/update-queue.d.ts.map +1 -0
  502. package/dist/sync/update-queue.js +66 -0
  503. package/dist/sync/update-queue.js.map +1 -0
  504. package/dist/testing/auth.d.ts +85 -0
  505. package/dist/testing/auth.d.ts.map +1 -0
  506. package/dist/testing/auth.js +140 -0
  507. package/dist/testing/auth.js.map +1 -0
  508. package/dist/testing/client.d.ts +6 -0
  509. package/dist/testing/client.d.ts.map +1 -0
  510. package/dist/testing/client.js +9 -0
  511. package/dist/testing/client.js.map +1 -0
  512. package/dist/testing/database.d.ts +6 -0
  513. package/dist/testing/database.d.ts.map +1 -0
  514. package/dist/testing/database.js +8 -0
  515. package/dist/testing/database.js.map +1 -0
  516. package/dist/testing/email.d.ts +15 -0
  517. package/dist/testing/email.d.ts.map +1 -0
  518. package/dist/testing/email.js +32 -0
  519. package/dist/testing/email.js.map +1 -0
  520. package/dist/testing/fixture.d.ts +51 -0
  521. package/dist/testing/fixture.d.ts.map +1 -0
  522. package/dist/testing/fixture.js +177 -0
  523. package/dist/testing/fixture.js.map +1 -0
  524. package/dist/testing/jobs.d.ts +40 -0
  525. package/dist/testing/jobs.d.ts.map +1 -0
  526. package/dist/testing/jobs.js +76 -0
  527. package/dist/testing/jobs.js.map +1 -0
  528. package/dist/testing/logs.d.ts +18 -0
  529. package/dist/testing/logs.d.ts.map +1 -0
  530. package/dist/testing/logs.js +53 -0
  531. package/dist/testing/logs.js.map +1 -0
  532. package/dist/testing/messaging.d.ts +21 -0
  533. package/dist/testing/messaging.d.ts.map +1 -0
  534. package/dist/testing/messaging.js +34 -0
  535. package/dist/testing/messaging.js.map +1 -0
  536. package/dist/testing/storage.d.ts +7 -0
  537. package/dist/testing/storage.d.ts.map +1 -0
  538. package/dist/testing/storage.js +29 -0
  539. package/dist/testing/storage.js.map +1 -0
  540. package/dist/testing/workers-fakes.d.ts +17 -0
  541. package/dist/testing/workers-fakes.d.ts.map +1 -0
  542. package/dist/testing/workers-fakes.js +98 -0
  543. package/dist/testing/workers-fakes.js.map +1 -0
  544. package/dist/testing.d.ts +12 -0
  545. package/dist/testing.d.ts.map +1 -0
  546. package/dist/testing.js +5 -0
  547. package/dist/testing.js.map +1 -0
  548. package/dist/typeid.d.ts +46 -0
  549. package/dist/typeid.d.ts.map +1 -0
  550. package/dist/typeid.js +130 -0
  551. package/dist/typeid.js.map +1 -0
  552. package/dist/vite.d.ts +26 -0
  553. package/dist/vite.d.ts.map +1 -0
  554. package/dist/vite.js +100 -0
  555. package/dist/vite.js.map +1 -0
  556. package/dist/worker-plan.d.ts +37 -0
  557. package/dist/worker-plan.d.ts.map +1 -0
  558. package/dist/worker-plan.js +63 -0
  559. package/dist/worker-plan.js.map +1 -0
  560. package/dist/workers/app.d.ts +19 -0
  561. package/dist/workers/app.d.ts.map +1 -0
  562. package/dist/workers/app.js +56 -0
  563. package/dist/workers/app.js.map +1 -0
  564. package/dist/workers/entry.d.ts +7 -0
  565. package/dist/workers/entry.d.ts.map +1 -0
  566. package/dist/workers/entry.js +8 -0
  567. package/dist/workers/entry.js.map +1 -0
  568. package/dist/workers/index.d.ts +23 -0
  569. package/dist/workers/index.d.ts.map +1 -0
  570. package/dist/workers/index.js +39 -0
  571. package/dist/workers/index.js.map +1 -0
  572. package/dist/workers/r2.d.ts +24 -0
  573. package/dist/workers/r2.d.ts.map +1 -0
  574. package/dist/workers/r2.js +76 -0
  575. package/dist/workers/r2.js.map +1 -0
  576. package/dist/workers/rate-limiter.d.ts +9 -0
  577. package/dist/workers/rate-limiter.d.ts.map +1 -0
  578. package/dist/workers/rate-limiter.js +22 -0
  579. package/dist/workers/rate-limiter.js.map +1 -0
  580. package/dist/workers/realtime-hub.d.ts +20 -0
  581. package/dist/workers/realtime-hub.d.ts.map +1 -0
  582. package/dist/workers/realtime-hub.js +117 -0
  583. package/dist/workers/realtime-hub.js.map +1 -0
  584. package/dist/workers/registry.d.ts +13 -0
  585. package/dist/workers/registry.d.ts.map +1 -0
  586. package/dist/workers/registry.js +19 -0
  587. package/dist/workers/registry.js.map +1 -0
  588. package/dist/workers/scheduler.d.ts +13 -0
  589. package/dist/workers/scheduler.d.ts.map +1 -0
  590. package/dist/workers/scheduler.js +71 -0
  591. package/dist/workers/scheduler.js.map +1 -0
  592. package/dist/workers/types.d.ts +55 -0
  593. package/dist/workers/types.d.ts.map +1 -0
  594. package/dist/workers/types.js +4 -0
  595. package/dist/workers/types.js.map +1 -0
  596. package/dist/workers/wrangler.d.ts +62 -0
  597. package/dist/workers/wrangler.d.ts.map +1 -0
  598. package/dist/workers/wrangler.js +90 -0
  599. package/dist/workers/wrangler.js.map +1 -0
  600. package/package.json +286 -0
  601. package/skills/creating-workerstack-apps/SKILL.md +45 -0
  602. package/skills/creating-workerstack-apps/agents/openai.yaml +4 -0
  603. package/skills/creating-workerstack-apps/references/application-structure.md +219 -0
  604. package/skills/creating-workerstack-apps/references/runtime-integrations.md +96 -0
  605. package/skills/creating-workerstack-apps/references/verification.md +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"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","sourcesContent":["// src/env.ts — env validation. Browser-safe: type-only Standard Schema import.\nimport type { StandardSchemaV1 } from '@standard-schema/spec'\n\nimport {\n StandardSchemaValidationError,\n validateStandardSchema,\n} from './standard-schema'\n\nexport const CLIENT_PREFIX = 'PUBLIC_' as const\n\n/**\n * Static, value-free metadata about an environment key. It reaches the manifest\n * and the committed blueprint, so it must never contain a value or a secret.\n */\nexport type EnvVarMeta = {\n /**\n * Whether the value is a secret. Defaults to `true` for server keys and\n * `false` for client keys. A client key can never be sensitive: `PUBLIC_*`\n * values are compiled into the browser bundle.\n */\n sensitive?: boolean\n /** Prose shown to whoever fills this key in. Max 200 characters. */\n description?: string\n}\n\nexport type EnvConfigInput = {\n server?: Record<string, StandardSchemaV1>\n client?: Record<string, StandardSchemaV1>\n /** Explicit value source for client vars (e.g. Vite's import.meta.env). */\n runtimeEnv?: Record<string, unknown>\n /** Value-free metadata per key, keyed by the key's own name. */\n meta?: Record<string, EnvVarMeta>\n}\n\n/** Vars workerstack itself consumes, always validated. */\nexport type BaseEnv = {\n NODE_ENV?: string\n DATABASE_URL: string\n DATABASE_AUTH_TOKEN?: string\n AUTH_SECRET: string\n RESEND_API_KEY?: string\n WORKERSTACK_MESSAGING_CONFIG?: string\n WORKERSTACK_BLUEPRINT_PATH?: string\n BUNDERHOST_ENVIRONMENT_ID?: string\n /** Deployed commit SHA, injected by the platform. Reported by readiness. */\n WORKERSTACK_REVISION?: string\n}\n\ntype InferVars<T> =\n T extends Record<string, StandardSchemaV1>\n ? { [K in keyof T]: StandardSchemaV1.InferOutput<T[K]> }\n : unknown\n\n// Non-distributive so `ValidatedEnv<undefined>` is BaseEnv, not `never`.\nexport type ValidatedEnv<TEnv extends EnvConfigInput | undefined> = [\n TEnv,\n] extends [EnvConfigInput]\n ? BaseEnv &\n InferVars<NonNullable<TEnv>['server']> &\n InferVars<NonNullable<TEnv>['client']>\n : BaseEnv\n\nexport class WorkerstackEnvError extends Error {\n readonly issues: string[]\n\n constructor(issues: string[]) {\n super(`Invalid environment:\\n - ${issues.join('\\n - ')}`)\n this.name = 'WorkerstackEnvError'\n this.issues = issues\n }\n}\n\nexport type ValidateEnvOptions = {\n /** Value source; defaults to process.env. Tests pass this explicitly. */\n source?: Record<string, string | undefined>\n /** Dialect-aware DATABASE_URL fallback; workerstack passes it. */\n defaultDatabaseUrl?: string\n}\n\nconst DEV_AUTH_SECRET = 'dev-secret-change-in-prod'\n\nfunction validateSection(\n section: Record<string, StandardSchemaV1> | undefined,\n kind: 'server' | 'client',\n source: Record<string, unknown>,\n issues: string[],\n out: Record<string, unknown>,\n) {\n for (const [key, schema] of Object.entries(section ?? {})) {\n const isPublic = key.startsWith(CLIENT_PREFIX)\n if (kind === 'server' && isPublic) {\n issues.push(\n `${key}: server vars must not start with ${CLIENT_PREFIX} (move it to env.client)`,\n )\n continue\n }\n if (kind === 'client' && !isPublic) {\n issues.push(\n `${key}: client vars must start with ${CLIENT_PREFIX} (rename it or move it to env.server)`,\n )\n continue\n }\n try {\n out[key] = validateStandardSchema(schema, source[key], 'env')\n } catch (error) {\n if (!(error instanceof StandardSchemaValidationError)) throw error\n for (const issue of error.issues) {\n const path = issue.path.map(String).join('.')\n issues.push(`${key}${path ? `.${path}` : ''}: ${issue.message}`)\n }\n }\n }\n}\n\nexport function validateEnv<TEnv extends EnvConfigInput | undefined>(\n envConfig: TEnv,\n options: ValidateEnvOptions = {},\n): ValidatedEnv<TEnv> {\n const source =\n options.source ?? (process.env as Record<string, string | undefined>)\n const issues: string[] = []\n const isProduction = source.NODE_ENV === 'production'\n\n const base: BaseEnv = {\n NODE_ENV: source.NODE_ENV,\n DATABASE_URL:\n source.DATABASE_URL ?? options.defaultDatabaseUrl ?? 'file:./data.db',\n DATABASE_AUTH_TOKEN: source.DATABASE_AUTH_TOKEN,\n AUTH_SECRET: source.AUTH_SECRET ?? DEV_AUTH_SECRET,\n RESEND_API_KEY: source.RESEND_API_KEY,\n WORKERSTACK_MESSAGING_CONFIG: source.WORKERSTACK_MESSAGING_CONFIG,\n WORKERSTACK_BLUEPRINT_PATH: source.WORKERSTACK_BLUEPRINT_PATH,\n BUNDERHOST_ENVIRONMENT_ID: source.BUNDERHOST_ENVIRONMENT_ID,\n WORKERSTACK_REVISION: source.WORKERSTACK_REVISION,\n }\n if (isProduction && !source.AUTH_SECRET) {\n issues.push('AUTH_SECRET: required in production')\n }\n const userVars: Record<string, unknown> = {}\n validateSection(envConfig?.server, 'server', source, issues, userVars)\n validateSection(envConfig?.client, 'client', source, issues, userVars)\n\n if (issues.length > 0) throw new WorkerstackEnvError(issues)\n return { ...base, ...userVars } as ValidatedEnv<TEnv>\n}\n\n/**\n * Browser-side companion (t3-env style): validates ONLY the client section.\n * Server keys exist on the returned object as traps that throw on access, so\n * a leaked import fails loudly instead of silently reading undefined.\n */\nexport function createClientEnv<TEnv extends EnvConfigInput>(\n envConfig: TEnv,\n): InferVars<TEnv['client']> {\n const source =\n envConfig.runtimeEnv ??\n (typeof process !== 'undefined'\n ? (process.env as Record<string, unknown>)\n : {})\n const issues: string[] = []\n const values: Record<string, unknown> = {}\n validateSection(envConfig.client, 'client', source, issues, values)\n if (issues.length > 0) throw new WorkerstackEnvError(issues)\n\n const serverKeys = new Set(Object.keys(envConfig.server ?? {}))\n return new Proxy(values, {\n get(target, prop) {\n if (typeof prop === 'string' && serverKeys.has(prop)) {\n throw new Error(\n `${prop} is server-only and not available in client env`,\n )\n }\n return Reflect.get(target, prop)\n },\n }) as InferVars<TEnv['client']>\n}\n"]}
@@ -0,0 +1,153 @@
1
+ import * as v from 'valibot';
2
+ /**
3
+ * Every code we raise is one oRPC already knows, so handlers derive the HTTP
4
+ * status from `COMMON_ERROR_STATUS_MAP` on their own and clients can use the
5
+ * standard `isDefinedError` helpers. Do not add a code oRPC has no status for —
6
+ * it would silently answer 500.
7
+ */
8
+ export declare const WORKERSTACK_ERROR_CODES: readonly ["BAD_REQUEST", "UNAUTHORIZED", "FORBIDDEN", "NOT_FOUND", "CONFLICT", "PAYLOAD_TOO_LARGE", "TOO_MANY_REQUESTS"];
9
+ export type WorkerstackErrorCode = (typeof WORKERSTACK_ERROR_CODES)[number];
10
+ export declare const WORKERSTACK_ERRORS: {
11
+ readonly BAD_REQUEST: {
12
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
13
+ readonly code: v.OptionalSchema<v.LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
14
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
15
+ }, undefined>, {
16
+ readonly code: "BAD_REQUEST";
17
+ }>;
18
+ };
19
+ readonly UNAUTHORIZED: {
20
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
21
+ readonly code: v.OptionalSchema<v.LiteralSchema<"UNAUTHORIZED", undefined>, "UNAUTHORIZED">;
22
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
23
+ }, undefined>, {
24
+ readonly code: "UNAUTHORIZED";
25
+ }>;
26
+ };
27
+ readonly FORBIDDEN: {
28
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
29
+ readonly code: v.OptionalSchema<v.LiteralSchema<"FORBIDDEN", undefined>, "FORBIDDEN">;
30
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
31
+ }, undefined>, {
32
+ readonly code: "FORBIDDEN";
33
+ }>;
34
+ };
35
+ readonly NOT_FOUND: {
36
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
37
+ readonly code: v.OptionalSchema<v.LiteralSchema<"NOT_FOUND", undefined>, "NOT_FOUND">;
38
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
39
+ }, undefined>, {
40
+ readonly code: "NOT_FOUND";
41
+ }>;
42
+ };
43
+ readonly CONFLICT: {
44
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
45
+ readonly code: v.OptionalSchema<v.LiteralSchema<"CONFLICT", undefined>, "CONFLICT">;
46
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
47
+ }, undefined>, {
48
+ readonly code: "CONFLICT";
49
+ }>;
50
+ };
51
+ readonly PAYLOAD_TOO_LARGE: {
52
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
53
+ readonly code: v.OptionalSchema<v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>, "PAYLOAD_TOO_LARGE">;
54
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
55
+ }, undefined>, {
56
+ readonly code: "PAYLOAD_TOO_LARGE";
57
+ }>;
58
+ };
59
+ readonly TOO_MANY_REQUESTS: {
60
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
61
+ readonly code: v.OptionalSchema<v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>, "TOO_MANY_REQUESTS">;
62
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
63
+ }, undefined>, {
64
+ readonly code: "TOO_MANY_REQUESTS";
65
+ }>;
66
+ };
67
+ };
68
+ export declare class WorkerstackError extends Error {
69
+ readonly code: WorkerstackErrorCode;
70
+ readonly details?: unknown | undefined;
71
+ readonly status: number;
72
+ constructor(code: WorkerstackErrorCode, message: string, details?: unknown | undefined, options?: ErrorOptions);
73
+ }
74
+ export declare const mapWorkerstackErrors: import("@orpc/server").DecoratedMiddleware<import("@orpc/server").DefaultInitialContext & object, object, unknown, any, {
75
+ readonly BAD_REQUEST: {
76
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
77
+ readonly code: v.OptionalSchema<v.LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
78
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
79
+ }, undefined>, {
80
+ readonly code: "BAD_REQUEST";
81
+ }>;
82
+ };
83
+ readonly UNAUTHORIZED: {
84
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
85
+ readonly code: v.OptionalSchema<v.LiteralSchema<"UNAUTHORIZED", undefined>, "UNAUTHORIZED">;
86
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
87
+ }, undefined>, {
88
+ readonly code: "UNAUTHORIZED";
89
+ }>;
90
+ };
91
+ readonly FORBIDDEN: {
92
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
93
+ readonly code: v.OptionalSchema<v.LiteralSchema<"FORBIDDEN", undefined>, "FORBIDDEN">;
94
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
95
+ }, undefined>, {
96
+ readonly code: "FORBIDDEN";
97
+ }>;
98
+ };
99
+ readonly NOT_FOUND: {
100
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
101
+ readonly code: v.OptionalSchema<v.LiteralSchema<"NOT_FOUND", undefined>, "NOT_FOUND">;
102
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
103
+ }, undefined>, {
104
+ readonly code: "NOT_FOUND";
105
+ }>;
106
+ };
107
+ readonly CONFLICT: {
108
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
109
+ readonly code: v.OptionalSchema<v.LiteralSchema<"CONFLICT", undefined>, "CONFLICT">;
110
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
111
+ }, undefined>, {
112
+ readonly code: "CONFLICT";
113
+ }>;
114
+ };
115
+ readonly PAYLOAD_TOO_LARGE: {
116
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
117
+ readonly code: v.OptionalSchema<v.LiteralSchema<"PAYLOAD_TOO_LARGE", undefined>, "PAYLOAD_TOO_LARGE">;
118
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
119
+ }, undefined>, {
120
+ readonly code: "PAYLOAD_TOO_LARGE";
121
+ }>;
122
+ };
123
+ readonly TOO_MANY_REQUESTS: {
124
+ readonly data: v.OptionalSchema<v.StrictObjectSchema<{
125
+ readonly code: v.OptionalSchema<v.LiteralSchema<"TOO_MANY_REQUESTS", undefined>, "TOO_MANY_REQUESTS">;
126
+ readonly details: v.OptionalSchema<v.UnknownSchema, undefined>;
127
+ }, undefined>, {
128
+ readonly code: "TOO_MANY_REQUESTS";
129
+ }>;
130
+ };
131
+ }>;
132
+ /**
133
+ * Sub-codes carried in `data.details.code` when the oRPC code alone loses
134
+ * information the client may want to branch on. Codes that duplicate an oRPC
135
+ * code are suppressed as redundant, see {@link CrudOperationError}.
136
+ */
137
+ export declare const ErrorCode: {
138
+ readonly BAD_REQUEST: "BAD_REQUEST";
139
+ readonly FORBIDDEN: "FORBIDDEN";
140
+ readonly NOT_FOUND: "NOT_FOUND";
141
+ readonly CONFLICT: "CONFLICT";
142
+ readonly INVALID_CURSOR: "INVALID_CURSOR";
143
+ readonly TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
144
+ readonly IDEMPOTENCY_REPLAY: "IDEMPOTENCY_REPLAY";
145
+ readonly IDEMPOTENCY_CONFLICT: "IDEMPOTENCY_CONFLICT";
146
+ };
147
+ export type ErrorCodeValue = (typeof ErrorCode)[keyof typeof ErrorCode];
148
+ export declare class ListQueryError extends Error {
149
+ readonly code: ErrorCodeValue;
150
+ readonly details?: unknown;
151
+ constructor(message: string, code?: ErrorCodeValue, details?: unknown);
152
+ }
153
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAO5B;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,0HAQkC,CAAA;AAEtE,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAqB3E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQF,CAAA;AAE7B,qBAAa,gBAAiB,SAAQ,KAAK;IAIvC,QAAQ,CAAC,IAAI,EAAE,oBAAoB;IAEnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO;IAL5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAGZ,IAAI,EAAE,oBAAoB,EACnC,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,OAAO,YAAA,EAC1B,OAAO,CAAC,EAAE,YAAY;CAMzB;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC7B,CAAA;AAEJ;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;CASZ,CAAA;AAEV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAA;AAEvE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;gBAGxB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,cAAsC,EAC5C,OAAO,CAAC,EAAE,OAAO;CAOpB"}
package/dist/errors.js ADDED
@@ -0,0 +1,106 @@
1
+ import { COMMON_ERROR_STATUS_MAP, ORPCError, os, } from '@orpc/server';
2
+ import * as v from 'valibot';
3
+ import { consoleLogger } from './logging.js';
4
+ import { StandardSchemaValidationError } from './standard-schema.js';
5
+ /**
6
+ * Every code we raise is one oRPC already knows, so handlers derive the HTTP
7
+ * status from `COMMON_ERROR_STATUS_MAP` on their own and clients can use the
8
+ * standard `isDefinedError` helpers. Do not add a code oRPC has no status for —
9
+ * it would silently answer 500.
10
+ */
11
+ export const WORKERSTACK_ERROR_CODES = [
12
+ 'BAD_REQUEST',
13
+ 'UNAUTHORIZED',
14
+ 'FORBIDDEN',
15
+ 'NOT_FOUND',
16
+ 'CONFLICT',
17
+ 'PAYLOAD_TOO_LARGE',
18
+ 'TOO_MANY_REQUESTS',
19
+ ];
20
+ /**
21
+ * `data` and its `code` both default, so an application raises a declared
22
+ * error with a message alone: `errors.NOT_FOUND({ message })`. The code is
23
+ * already the name of the constructor, and repeating it at every call site is
24
+ * the reason applications fall back to a raw `ORPCError`. Clients still read a
25
+ * populated `data.code`, because the default fills it.
26
+ */
27
+ function errorDataSchema(code) {
28
+ return v.optional(v.strictObject({
29
+ code: v.optional(v.literal(code), code),
30
+ details: v.optional(v.unknown()),
31
+ }), { code });
32
+ }
33
+ export const WORKERSTACK_ERRORS = {
34
+ BAD_REQUEST: { data: errorDataSchema('BAD_REQUEST') },
35
+ UNAUTHORIZED: { data: errorDataSchema('UNAUTHORIZED') },
36
+ FORBIDDEN: { data: errorDataSchema('FORBIDDEN') },
37
+ NOT_FOUND: { data: errorDataSchema('NOT_FOUND') },
38
+ CONFLICT: { data: errorDataSchema('CONFLICT') },
39
+ PAYLOAD_TOO_LARGE: { data: errorDataSchema('PAYLOAD_TOO_LARGE') },
40
+ TOO_MANY_REQUESTS: { data: errorDataSchema('TOO_MANY_REQUESTS') },
41
+ };
42
+ export class WorkerstackError extends Error {
43
+ code;
44
+ details;
45
+ status;
46
+ constructor(code, message, details, options) {
47
+ super(message, options);
48
+ this.code = code;
49
+ this.details = details;
50
+ this.name = 'WorkerstackError';
51
+ this.status = COMMON_ERROR_STATUS_MAP[code];
52
+ }
53
+ }
54
+ export const mapWorkerstackErrors = os
55
+ .errors(WORKERSTACK_ERRORS)
56
+ .middleware(async ({ next, path, context }) => {
57
+ try {
58
+ return await next();
59
+ }
60
+ catch (error) {
61
+ const mapped = error instanceof StandardSchemaValidationError
62
+ ? new WorkerstackError('BAD_REQUEST', error.message, error.issues, {
63
+ cause: error,
64
+ })
65
+ : error;
66
+ if (!(mapped instanceof WorkerstackError)) {
67
+ const procName = path?.length ? path.join('.') : 'unknown';
68
+ const logger = context.logger ?? consoleLogger;
69
+ logger.error(`[workerstack-api] Unhandled error in procedure "${procName}":`, error);
70
+ throw error;
71
+ }
72
+ throw new ORPCError(mapped.code, {
73
+ message: mapped.message,
74
+ data: mapped.details === undefined
75
+ ? { code: mapped.code }
76
+ : { code: mapped.code, details: mapped.details },
77
+ cause: mapped,
78
+ });
79
+ }
80
+ });
81
+ /**
82
+ * Sub-codes carried in `data.details.code` when the oRPC code alone loses
83
+ * information the client may want to branch on. Codes that duplicate an oRPC
84
+ * code are suppressed as redundant, see {@link CrudOperationError}.
85
+ */
86
+ export const ErrorCode = {
87
+ BAD_REQUEST: 'BAD_REQUEST',
88
+ FORBIDDEN: 'FORBIDDEN',
89
+ NOT_FOUND: 'NOT_FOUND',
90
+ CONFLICT: 'CONFLICT',
91
+ INVALID_CURSOR: 'INVALID_CURSOR',
92
+ TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',
93
+ IDEMPOTENCY_REPLAY: 'IDEMPOTENCY_REPLAY',
94
+ IDEMPOTENCY_CONFLICT: 'IDEMPOTENCY_CONFLICT',
95
+ };
96
+ export class ListQueryError extends Error {
97
+ code;
98
+ details;
99
+ constructor(message, code = ErrorCode.BAD_REQUEST, details) {
100
+ super(message);
101
+ this.name = 'ListQueryError';
102
+ this.code = code;
103
+ this.details = details;
104
+ }
105
+ }
106
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,EAAE,GAEH,MAAM,cAAc,CAAA;AACrB,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAI5B,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,aAAa;IACb,cAAc;IACd,WAAW;IACX,WAAW;IACX,UAAU;IACV,mBAAmB;IACnB,mBAAmB;CACiD,CAAA;AAItE;;;;;;GAMG;AACH,SAAS,eAAe,CACtB,IAAW;IAEX,OAAO,CAAC,CAAC,QAAQ,CACf,CAAC,CAAC,YAAY,CAAC;QACb,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;QACvC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;KACjC,CAAC,EACF,EAAE,IAAI,EAAE,CACT,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC,EAAE;IACrD,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,cAAc,CAAC,EAAE;IACvD,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE;IACjD,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE;IACjD,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE;IAC/C,iBAAiB,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,mBAAmB,CAAC,EAAE;IACjE,iBAAiB,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,mBAAmB,CAAC,EAAE;CACtC,CAAA;AAE7B,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAI9B;IAEA;IALF,MAAM,CAAQ;IAEvB,YACW,IAA0B,EACnC,OAAe,EACN,OAAiB,EAC1B,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QALd,SAAI,GAAJ,IAAI,CAAsB;QAE1B,YAAO,GAAP,OAAO,CAAU;QAI1B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE;KACnC,MAAM,CAAC,kBAAkB,CAAC;KAC1B,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5C,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,EAAE,CAAA;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GACV,KAAK,YAAY,6BAA6B;YAC5C,CAAC,CAAC,IAAI,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE;gBAC/D,KAAK,EAAE,KAAK;aACb,CAAC;YACJ,CAAC,CAAC,KAAK,CAAA;QACX,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC1D,MAAM,MAAM,GACT,OAA0C,CAAC,MAAM,IAAI,aAAa,CAAA;YACrE,MAAM,CAAC,KAAK,CACV,mDAAmD,QAAQ,IAAI,EAC/D,KAAK,CACN,CAAA;YACD,MAAM,KAAK,CAAA;QACb,CAAC;QAED,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EACF,MAAM,CAAC,OAAO,KAAK,SAAS;gBAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;gBACvB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YACpD,KAAK,EAAE,MAAM;SACd,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,gBAAgB;IAChC,iBAAiB,EAAE,mBAAmB;IACtC,kBAAkB,EAAE,oBAAoB;IACxC,oBAAoB,EAAE,sBAAsB;CACpC,CAAA;AAIV,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAgB;IACpB,OAAO,CAAU;IAE1B,YACE,OAAe,EACf,OAAuB,SAAS,CAAC,WAAW,EAC5C,OAAiB;QAEjB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAA;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF","sourcesContent":["import {\n COMMON_ERROR_STATUS_MAP,\n ORPCError,\n os,\n type ErrorMap,\n} from '@orpc/server'\nimport * as v from 'valibot'\n\nimport type { WorkerstackLogger } from './logging'\n\nimport { consoleLogger } from './logging'\nimport { StandardSchemaValidationError } from './standard-schema'\n\n/**\n * Every code we raise is one oRPC already knows, so handlers derive the HTTP\n * status from `COMMON_ERROR_STATUS_MAP` on their own and clients can use the\n * standard `isDefinedError` helpers. Do not add a code oRPC has no status for —\n * it would silently answer 500.\n */\nexport const WORKERSTACK_ERROR_CODES = [\n 'BAD_REQUEST',\n 'UNAUTHORIZED',\n 'FORBIDDEN',\n 'NOT_FOUND',\n 'CONFLICT',\n 'PAYLOAD_TOO_LARGE',\n 'TOO_MANY_REQUESTS',\n] as const satisfies readonly (keyof typeof COMMON_ERROR_STATUS_MAP)[]\n\nexport type WorkerstackErrorCode = (typeof WORKERSTACK_ERROR_CODES)[number]\n\n/**\n * `data` and its `code` both default, so an application raises a declared\n * error with a message alone: `errors.NOT_FOUND({ message })`. The code is\n * already the name of the constructor, and repeating it at every call site is\n * the reason applications fall back to a raw `ORPCError`. Clients still read a\n * populated `data.code`, because the default fills it.\n */\nfunction errorDataSchema<const TCode extends WorkerstackErrorCode>(\n code: TCode,\n) {\n return v.optional(\n v.strictObject({\n code: v.optional(v.literal(code), code),\n details: v.optional(v.unknown()),\n }),\n { code },\n )\n}\n\nexport const WORKERSTACK_ERRORS = {\n BAD_REQUEST: { data: errorDataSchema('BAD_REQUEST') },\n UNAUTHORIZED: { data: errorDataSchema('UNAUTHORIZED') },\n FORBIDDEN: { data: errorDataSchema('FORBIDDEN') },\n NOT_FOUND: { data: errorDataSchema('NOT_FOUND') },\n CONFLICT: { data: errorDataSchema('CONFLICT') },\n PAYLOAD_TOO_LARGE: { data: errorDataSchema('PAYLOAD_TOO_LARGE') },\n TOO_MANY_REQUESTS: { data: errorDataSchema('TOO_MANY_REQUESTS') },\n} as const satisfies ErrorMap\n\nexport class WorkerstackError extends Error {\n readonly status: number\n\n constructor(\n readonly code: WorkerstackErrorCode,\n message: string,\n readonly details?: unknown,\n options?: ErrorOptions,\n ) {\n super(message, options)\n this.name = 'WorkerstackError'\n this.status = COMMON_ERROR_STATUS_MAP[code]\n }\n}\n\nexport const mapWorkerstackErrors = os\n .errors(WORKERSTACK_ERRORS)\n .middleware(async ({ next, path, context }) => {\n try {\n return await next()\n } catch (error) {\n const mapped =\n error instanceof StandardSchemaValidationError\n ? new WorkerstackError('BAD_REQUEST', error.message, error.issues, {\n cause: error,\n })\n : error\n if (!(mapped instanceof WorkerstackError)) {\n const procName = path?.length ? path.join('.') : 'unknown'\n const logger =\n (context as { logger?: WorkerstackLogger }).logger ?? consoleLogger\n logger.error(\n `[workerstack-api] Unhandled error in procedure \"${procName}\":`,\n error,\n )\n throw error\n }\n\n throw new ORPCError(mapped.code, {\n message: mapped.message,\n data:\n mapped.details === undefined\n ? { code: mapped.code }\n : { code: mapped.code, details: mapped.details },\n cause: mapped,\n })\n }\n })\n\n/**\n * Sub-codes carried in `data.details.code` when the oRPC code alone loses\n * information the client may want to branch on. Codes that duplicate an oRPC\n * code are suppressed as redundant, see {@link CrudOperationError}.\n */\nexport const ErrorCode = {\n BAD_REQUEST: 'BAD_REQUEST',\n FORBIDDEN: 'FORBIDDEN',\n NOT_FOUND: 'NOT_FOUND',\n CONFLICT: 'CONFLICT',\n INVALID_CURSOR: 'INVALID_CURSOR',\n TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',\n IDEMPOTENCY_REPLAY: 'IDEMPOTENCY_REPLAY',\n IDEMPOTENCY_CONFLICT: 'IDEMPOTENCY_CONFLICT',\n} as const\n\nexport type ErrorCodeValue = (typeof ErrorCode)[keyof typeof ErrorCode]\n\nexport class ListQueryError extends Error {\n readonly code: ErrorCodeValue\n readonly details?: unknown\n\n constructor(\n message: string,\n code: ErrorCodeValue = ErrorCode.BAD_REQUEST,\n details?: unknown,\n ) {\n super(message)\n this.name = 'ListQueryError'\n this.code = code\n this.details = details\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { RateLimitStore } from './platform.js';
2
+ import { type RateLimitConfig } from './rate-limit.js';
3
+ interface HandlerParts {
4
+ authHandler?: (req: Request) => Promise<Response>;
5
+ apiHandler?: (req: Request) => Promise<Response | null>;
6
+ rateLimit?: boolean | RateLimitConfig;
7
+ rateLimitStore?: RateLimitStore;
8
+ }
9
+ export declare function buildHandler(parts: HandlerParts): (req: Request) => Promise<Response>;
10
+ export {};
11
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAEtE,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjD,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;IACvD,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,cAAc,CAAC,EAAE,cAAc,CAAA;CAChC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,GAClB,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAuBrC"}
@@ -0,0 +1,21 @@
1
+ import { createRateLimiter } from './rate-limit.js';
2
+ export function buildHandler(parts) {
3
+ const checkRateLimit = createRateLimiter(parts.rateLimit, parts.rateLimitStore);
4
+ return async (req) => {
5
+ const limited = await checkRateLimit(req);
6
+ if (limited)
7
+ return limited;
8
+ const pathname = new URL(req.url).pathname;
9
+ if (parts.authHandler &&
10
+ (pathname === '/api/auth' || pathname.startsWith('/api/auth/'))) {
11
+ return parts.authHandler(req);
12
+ }
13
+ if (parts.apiHandler) {
14
+ const apiRes = await parts.apiHandler(req);
15
+ if (apiRes)
16
+ return apiRes;
17
+ }
18
+ return new Response('Not Found', { status: 404 });
19
+ };
20
+ }
21
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,cAAc,CAAA;AAStE,MAAM,UAAU,YAAY,CAC1B,KAAmB;IAEnB,MAAM,cAAc,GAAG,iBAAiB,CACtC,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,CACrB,CAAA;IAED,OAAO,KAAK,EAAE,GAAY,EAAqB,EAAE;QAC/C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAA;QAE3B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAA;QAC1C,IACE,KAAK,CAAC,WAAW;YACjB,CAAC,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAC/D,CAAC;YACD,OAAO,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC1C,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;QAC3B,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;IACnD,CAAC,CAAA;AACH,CAAC","sourcesContent":["// src/handler.ts\nimport type { RateLimitStore } from './platform'\n\nimport { createRateLimiter, type RateLimitConfig } from './rate-limit'\n\ninterface HandlerParts {\n authHandler?: (req: Request) => Promise<Response>\n apiHandler?: (req: Request) => Promise<Response | null>\n rateLimit?: boolean | RateLimitConfig\n rateLimitStore?: RateLimitStore\n}\n\nexport function buildHandler(\n parts: HandlerParts,\n): (req: Request) => Promise<Response> {\n const checkRateLimit = createRateLimiter(\n parts.rateLimit,\n parts.rateLimitStore,\n )\n\n return async (req: Request): Promise<Response> => {\n const limited = await checkRateLimit(req)\n if (limited) return limited\n\n const pathname = new URL(req.url).pathname\n if (\n parts.authHandler &&\n (pathname === '/api/auth' || pathname.startsWith('/api/auth/'))\n ) {\n return parts.authHandler(req)\n }\n if (parts.apiHandler) {\n const apiRes = await parts.apiHandler(req)\n if (apiRes) return apiRes\n }\n return new Response('Not Found', { status: 404 })\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { WorkerstackManifest } from './manifest.js';
2
+ export declare class HostedBlueprintMismatchError extends Error {
3
+ constructor(paths: readonly {
4
+ kind: string;
5
+ path: string;
6
+ }[]);
7
+ }
8
+ export declare function manifestFromBlueprint(source: string): WorkerstackManifest;
9
+ export declare function assertManifestMatchesBlueprint(manifest: WorkerstackManifest, source: string): void;
10
+ export declare function assertHostedBlueprintFile(manifest: WorkerstackManifest, path: string): Promise<void>;
11
+ //# sourceMappingURL=hosted-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-contract.d.ts","sourceRoot":"","sources":["../src/hosted-contract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAKrD,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,KAAK,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;CAO7D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAuBzE;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,MAAM,GACb,IAAI,CAIN;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,mBAAmB,EAC7B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -0,0 +1,50 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { parseBlueprintYaml } from './blueprint.js';
3
+ import { diffManifests } from './manifest-diff.js';
4
+ export class HostedBlueprintMismatchError extends Error {
5
+ constructor(paths) {
6
+ super('[workerstack] runtime declaration does not match the committed blueprint:\n' +
7
+ paths.map(({ kind, path }) => ` - ${kind}: ${path}`).join('\n'));
8
+ this.name = 'HostedBlueprintMismatchError';
9
+ }
10
+ }
11
+ export function manifestFromBlueprint(source) {
12
+ const blueprint = parseBlueprintYaml(source);
13
+ return {
14
+ version: blueprint.workerstack.manifestVersion,
15
+ database: {
16
+ dialect: blueprint.resources.database.dialect,
17
+ migrationsDirectory: blueprint.resources.database.migrationsDirectory,
18
+ tables: blueprint.resources.database.tables,
19
+ },
20
+ storage: blueprint.resources.storage,
21
+ realtime: blueprint.resources.realtime ?? { required: false },
22
+ messaging: blueprint.resources.messaging,
23
+ environment: blueprint.environment.map((entry) => ({
24
+ ...entry,
25
+ sensitive: entry.sensitive ?? entry.scope === 'server',
26
+ })),
27
+ api: blueprint.api ?? { operations: [] },
28
+ background: {
29
+ jobs: blueprint.background.jobs,
30
+ cron: blueprint.background.cron,
31
+ maintenance: blueprint.background.maintenance,
32
+ },
33
+ };
34
+ }
35
+ export function assertManifestMatchesBlueprint(manifest, source) {
36
+ const differences = diffManifests(manifestFromBlueprint(source), manifest);
37
+ if (differences.length > 0)
38
+ throw new HostedBlueprintMismatchError(differences);
39
+ }
40
+ export async function assertHostedBlueprintFile(manifest, path) {
41
+ let source;
42
+ try {
43
+ source = await readFile(path, 'utf8');
44
+ }
45
+ catch {
46
+ throw new Error(`[workerstack] hosted blueprint does not exist: ${path}`);
47
+ }
48
+ assertManifestMatchesBlueprint(manifest, source);
49
+ }
50
+ //# sourceMappingURL=hosted-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted-contract.js","sourceRoot":"","sources":["../src/hosted-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAI3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,KAAgD;QAC1D,KAAK,CACH,6EAA6E;YAC3E,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACnE,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC5C,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,eAAe;QAC9C,QAAQ,EAAE;YACR,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO;YAC7C,mBAAmB,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAAmB;YACrE,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM;SAC5C;QACD,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO;QACpC,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC7D,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS;QACxC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACjD,GAAG,KAAK;YACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ;SACvD,CAAC,CAAC;QACH,GAAG,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QACxC,UAAU,EAAE;YACV,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI;YAC/B,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI;YAC/B,WAAW,EAAE,SAAS,CAAC,UAAU,CAAC,WAAW;SAC9C;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,QAA6B,EAC7B,MAAc;IAEd,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC1E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QACxB,MAAM,IAAI,4BAA4B,CAAC,WAAW,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,QAA6B,EAC7B,IAAY;IAEZ,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,EAAE,CAAC,CAAA;IAC3E,CAAC;IACD,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AAClD,CAAC","sourcesContent":["import { readFile } from 'node:fs/promises'\n\nimport type { WorkerstackManifest } from './manifest'\n\nimport { parseBlueprintYaml } from './blueprint'\nimport { diffManifests } from './manifest-diff'\n\nexport class HostedBlueprintMismatchError extends Error {\n constructor(paths: readonly { kind: string; path: string }[]) {\n super(\n '[workerstack] runtime declaration does not match the committed blueprint:\\n' +\n paths.map(({ kind, path }) => ` - ${kind}: ${path}`).join('\\n'),\n )\n this.name = 'HostedBlueprintMismatchError'\n }\n}\n\nexport function manifestFromBlueprint(source: string): WorkerstackManifest {\n const blueprint = parseBlueprintYaml(source)\n return {\n version: blueprint.workerstack.manifestVersion,\n database: {\n dialect: blueprint.resources.database.dialect,\n migrationsDirectory: blueprint.resources.database.migrationsDirectory,\n tables: blueprint.resources.database.tables,\n },\n storage: blueprint.resources.storage,\n realtime: blueprint.resources.realtime ?? { required: false },\n messaging: blueprint.resources.messaging,\n environment: blueprint.environment.map((entry) => ({\n ...entry,\n sensitive: entry.sensitive ?? entry.scope === 'server',\n })),\n api: blueprint.api ?? { operations: [] },\n background: {\n jobs: blueprint.background.jobs,\n cron: blueprint.background.cron,\n maintenance: blueprint.background.maintenance,\n },\n }\n}\n\nexport function assertManifestMatchesBlueprint(\n manifest: WorkerstackManifest,\n source: string,\n): void {\n const differences = diffManifests(manifestFromBlueprint(source), manifest)\n if (differences.length > 0)\n throw new HostedBlueprintMismatchError(differences)\n}\n\nexport async function assertHostedBlueprintFile(\n manifest: WorkerstackManifest,\n path: string,\n): Promise<void> {\n let source: string\n try {\n source = await readFile(path, 'utf8')\n } catch {\n throw new Error(`[workerstack] hosted blueprint does not exist: ${path}`)\n }\n assertManifestMatchesBlueprint(manifest, source)\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { AnyDb } from './dialect.js';
2
+ export type IdempotencyConfig = {
3
+ ttlMs?: number;
4
+ };
5
+ export type IdempotencyLookup = {
6
+ type: 'replay';
7
+ status: number;
8
+ response: string;
9
+ } | {
10
+ type: 'conflict';
11
+ } | {
12
+ type: 'proceed';
13
+ };
14
+ export declare function lookupIdempotency(db: AnyDb, tableName: string, key: string, body: string): Promise<IdempotencyLookup>;
15
+ export declare function storeIdempotency(db: AnyDb, tableName: string, key: string, body: string, status: number, response: unknown, config: IdempotencyConfig): Promise<void>;
16
+ export declare function resolveIdempotencyConfig(config: boolean | IdempotencyConfig | undefined): IdempotencyConfig | null;
17
+ //# sourceMappingURL=idempotency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAItC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAQD,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CA6B5B;AAED,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,KAAK,EACT,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,GAC9C,iBAAiB,GAAG,IAAI,CAI1B"}
@@ -0,0 +1,65 @@
1
+ import { and, eq, lt } from 'drizzle-orm';
2
+ import { createHash } from 'node:crypto';
3
+ import { workerstackIdempotency } from './internal-tables.js';
4
+ const DEFAULT_TTL_MS = 24 * 60 * 60 * 1000;
5
+ function hashBody(body) {
6
+ return createHash('sha256').update(body).digest('hex');
7
+ }
8
+ export async function lookupIdempotency(db, tableName, key, body) {
9
+ const t = workerstackIdempotency;
10
+ const now = Date.now();
11
+ // TTL sweep: drop expired rows before reading.
12
+ await db.delete(t).where(lt(t.expiresAt, now));
13
+ const bodyHash = hashBody(body);
14
+ const rows = await db
15
+ .select({
16
+ bodyHash: t.bodyHash,
17
+ status: t.status,
18
+ response: t.response,
19
+ expiresAt: t.expiresAt,
20
+ })
21
+ .from(t)
22
+ .where(and(eq(t.key, key), eq(t.tableName, tableName)))
23
+ .limit(1);
24
+ const row = rows[0];
25
+ if (!row)
26
+ return { type: 'proceed' };
27
+ if (Number(row.expiresAt) < now)
28
+ return { type: 'proceed' };
29
+ if (row.bodyHash !== bodyHash)
30
+ return { type: 'conflict' };
31
+ return {
32
+ type: 'replay',
33
+ status: Number(row.status),
34
+ response: String(row.response),
35
+ };
36
+ }
37
+ export async function storeIdempotency(db, tableName, key, body, status, response, config) {
38
+ const t = workerstackIdempotency;
39
+ const ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;
40
+ const expiresAt = Date.now() + ttlMs;
41
+ const bodyHash = hashBody(body);
42
+ const responseText = JSON.stringify(response);
43
+ await db
44
+ .insert(t)
45
+ .values({
46
+ key,
47
+ tableName,
48
+ bodyHash,
49
+ status,
50
+ response: responseText,
51
+ expiresAt,
52
+ })
53
+ .onConflictDoUpdate({
54
+ target: [t.key, t.tableName],
55
+ set: { bodyHash, status, response: responseText, expiresAt },
56
+ });
57
+ }
58
+ export function resolveIdempotencyConfig(config) {
59
+ if (!config)
60
+ return null;
61
+ if (config === true)
62
+ return {};
63
+ return config;
64
+ }
65
+ //# sourceMappingURL=idempotency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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","sourcesContent":["import { and, eq, lt } from 'drizzle-orm'\nimport { createHash } from 'node:crypto'\n\nimport type { AnyDb } from './dialect'\n\nimport { workerstackIdempotency } from './internal-tables'\n\nexport type IdempotencyConfig = {\n ttlMs?: number\n}\n\nconst DEFAULT_TTL_MS = 24 * 60 * 60 * 1000\n\nfunction hashBody(body: string): string {\n return createHash('sha256').update(body).digest('hex')\n}\n\nexport type IdempotencyLookup =\n | { type: 'replay'; status: number; response: string }\n | { type: 'conflict' }\n | { type: 'proceed' }\n\nexport async function lookupIdempotency(\n db: AnyDb,\n tableName: string,\n key: string,\n body: string,\n): Promise<IdempotencyLookup> {\n const t = workerstackIdempotency\n const now = Date.now()\n\n // TTL sweep: drop expired rows before reading.\n await db.delete(t).where(lt(t.expiresAt, now))\n\n const bodyHash = hashBody(body)\n const rows = await db\n .select({\n bodyHash: t.bodyHash,\n status: t.status,\n response: t.response,\n expiresAt: t.expiresAt,\n })\n .from(t)\n .where(and(eq(t.key, key), eq(t.tableName, tableName)))\n .limit(1)\n\n const row = rows[0]\n\n if (!row) return { type: 'proceed' }\n if (Number(row.expiresAt) < now) return { type: 'proceed' }\n if (row.bodyHash !== bodyHash) return { type: 'conflict' }\n return {\n type: 'replay',\n status: Number(row.status),\n response: String(row.response),\n }\n}\n\nexport async function storeIdempotency(\n db: AnyDb,\n tableName: string,\n key: string,\n body: string,\n status: number,\n response: unknown,\n config: IdempotencyConfig,\n): Promise<void> {\n const t = workerstackIdempotency\n const ttlMs = config.ttlMs ?? DEFAULT_TTL_MS\n const expiresAt = Date.now() + ttlMs\n const bodyHash = hashBody(body)\n const responseText = JSON.stringify(response)\n\n await db\n .insert(t)\n .values({\n key,\n tableName,\n bodyHash,\n status,\n response: responseText,\n expiresAt,\n })\n .onConflictDoUpdate({\n target: [t.key, t.tableName],\n set: { bodyHash, status, response: responseText, expiresAt },\n })\n}\n\nexport function resolveIdempotencyConfig(\n config: boolean | IdempotencyConfig | undefined,\n): IdempotencyConfig | null {\n if (!config) return null\n if (config === true) return {}\n return config\n}\n"]}
@@ -0,0 +1,41 @@
1
+ export * from './backend.js';
2
+ export { createMessaging, resend, customEmail, telegram } from './messaging/index.js';
3
+ export type { MessagingConfig, MessagingDescriptor, MessagingFacade, MessagingFacades, TelegramMessage, } from './messaging/index.js';
4
+ export type { AuthInstance, BucketNamesOf, WorkerstackApp, StorageFacade, } from './runtime.js';
5
+ export type { JobsPlatform, Platform, RateLimitHit, RateLimitStore, StorageAdapterFactory, } from './platform.js';
6
+ export { createMemoryRateLimitStore, resolvePlatform } from './platform.js';
7
+ export { listSpec } from './api/list-spec.js';
8
+ export type { ListSpecOptions } from './api/list-spec.js';
9
+ export type { WorkerstackDb, WorkerstackTx } from './db.js';
10
+ export { MAX_LIST_LIMIT } from './list-query.js';
11
+ export { WorkerstackError } from './errors.js';
12
+ export type { WorkerstackErrorCode } from './errors.js';
13
+ export { resolveConfig, resolveAuthConfig, defineAuth } from './config.js';
14
+ export type { AuthConfigContext, AuthConfigFactory, AuthConfigInput, BetterAuthConfig, WorkerstackConfig, ResolvedConfig, } from './config.js';
15
+ export { validateEnv, createClientEnv, WorkerstackEnvError } from './env.js';
16
+ export type { EnvConfigInput, BaseEnv, ValidatedEnv } from './env.js';
17
+ export { buildManifest, parseManifest } from './manifest.js';
18
+ export type { ApiOperation, ApiOperationEffect, WorkerstackManifest, ManifestEnvVar, } from './manifest.js';
19
+ export { buildReadinessReport, readinessReportSchema } from './readiness.js';
20
+ export type { ReadinessCheck, ReadinessCheckName, ReadinessCode, ReadinessReport, ReadinessStatus, } from './readiness.js';
21
+ export type { EmailMessage, EmailAdapter } from './email.js';
22
+ export { createJobsBuilder } from './jobs/index.js';
23
+ export type { WorkerstackJobContext, WorkerstackJobsBuilder, BackgroundDefinition, BackgroundDefs, CronDefinition, CronInvocation, DedupeUntil, EnqueueOptions, EnqueueTransaction, JobContext, JobDefinition, JobsDefs, JobsFacade, JobsRuntimeFacade, QueueJobDefinition, QueueJobKeys, TypedEnqueueOptions, } from './jobs/index.js';
24
+ export { defineSessionUser, defineAccess, validateAndResolveAccess, checkAccess, AUTH_TABLE_NAMES, } from './access.js';
25
+ export type { TableAccessInput, OperationRule, AccessContext, AccessUser, AccessUserBase, SessionUserConfig, SessionUserExtraOf, SessionUserSource, } from './access.js';
26
+ export { typeid, generate as generateTypeId, parse as parseTypeId, asTypeId, } from './typeid.js';
27
+ export type { TypeId } from './typeid.js';
28
+ export type { DatabaseAdapter, DatabaseConnection, DatabaseConnectionResult, } from './database/adapter.js';
29
+ export type { StorageAdapter } from './storage/index.js';
30
+ export type { StorageConfigInput, BucketConfigInput, ResolvedBucket, } from './storage/buckets.js';
31
+ export type { RealtimeAction } from './realtime/publisher.js';
32
+ export { createRealtimeFacade } from './realtime/facade.js';
33
+ export type { RealtimeFacade, RealtimeTransport, SchemaTable, } from './realtime/facade.js';
34
+ export { createApiBuilder, defineApi } from './api/builder.js';
35
+ export type { WorkerstackApiBuilder, ApiFactory } from './api/builder.js';
36
+ export type { ApiContext } from './api/context.js';
37
+ export type { CrudApiRouterFor, ExposedApiTables, MergeApiRouterTypes, UnifiedApiRouter, } from './api/types.js';
38
+ export type { TableCrudProcedures } from './api/crud-router.js';
39
+ export { buildApiRegistry, mergeApiRoutersStrict, normalizeApiPath, normalizeForeignOpenAPISpec, } from './api/registry.js';
40
+ export { mergeOpenAPISpecs } from './api/openapi.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export * from './backend.js';
2
+ export { createMessaging, resend, customEmail, telegram } from './messaging/index.js';
3
+ export { createMemoryRateLimitStore, resolvePlatform } from './platform.js';
4
+ export { listSpec } from './api/list-spec.js';
5
+ export { MAX_LIST_LIMIT } from './list-query.js';
6
+ export { WorkerstackError } from './errors.js';
7
+ export { resolveConfig, resolveAuthConfig, defineAuth } from './config.js';
8
+ export { validateEnv, createClientEnv, WorkerstackEnvError } from './env.js';
9
+ export { buildManifest, parseManifest } from './manifest.js';
10
+ export { buildReadinessReport, readinessReportSchema } from './readiness.js';
11
+ export { createJobsBuilder } from './jobs/index.js';
12
+ export { defineSessionUser, defineAccess, validateAndResolveAccess, checkAccess, AUTH_TABLE_NAMES, } from './access.js';
13
+ export { typeid, generate as generateTypeId, parse as parseTypeId, asTypeId, } from './typeid.js';
14
+ export { createRealtimeFacade } from './realtime/facade.js';
15
+ export { createApiBuilder, defineApi } from './api/builder.js';
16
+ export { buildApiRegistry, mergeApiRoutersStrict, normalizeApiPath, normalizeForeignOpenAPISpec, } from './api/registry.js';
17
+ export { mergeOpenAPISpecs } from './api/openapi.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAqB5E,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAG1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AASvE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAA;AAEzE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAOzD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AASzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAoBhD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,wBAAwB,EACxB,WAAW,EACX,gBAAgB,GACjB,MAAM,UAAU,CAAA;AAWjB,OAAO,EACL,MAAM,EACN,QAAQ,IAAI,cAAc,EAC1B,KAAK,IAAI,WAAW,EACpB,QAAQ,GACT,MAAM,UAAU,CAAA;AAcjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAMxD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAU3D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA","sourcesContent":["export * from './backend'\nexport { createMessaging, resend, customEmail, telegram } from './messaging'\nexport type {\n MessagingConfig,\n MessagingDescriptor,\n MessagingFacade,\n MessagingFacades,\n TelegramMessage,\n} from './messaging'\nexport type {\n AuthInstance,\n BucketNamesOf,\n WorkerstackApp,\n StorageFacade,\n} from './runtime'\nexport type {\n JobsPlatform,\n Platform,\n RateLimitHit,\n RateLimitStore,\n StorageAdapterFactory,\n} from './platform'\nexport { createMemoryRateLimitStore, resolvePlatform } from './platform'\nexport { listSpec } from './api/list-spec'\nexport type { ListSpecOptions } from './api/list-spec'\nexport type { WorkerstackDb, WorkerstackTx } from './db'\nexport { MAX_LIST_LIMIT } from './list-query'\nexport { WorkerstackError } from './errors'\nexport type { WorkerstackErrorCode } from './errors'\nexport { resolveConfig, resolveAuthConfig, defineAuth } from './config'\nexport type {\n AuthConfigContext,\n AuthConfigFactory,\n AuthConfigInput,\n BetterAuthConfig,\n WorkerstackConfig,\n ResolvedConfig,\n} from './config'\nexport { validateEnv, createClientEnv, WorkerstackEnvError } from './env'\nexport type { EnvConfigInput, BaseEnv, ValidatedEnv } from './env'\nexport { buildManifest, parseManifest } from './manifest'\nexport type {\n ApiOperation,\n ApiOperationEffect,\n WorkerstackManifest,\n ManifestEnvVar,\n} from './manifest'\nexport { buildReadinessReport, readinessReportSchema } from './readiness'\nexport type {\n ReadinessCheck,\n ReadinessCheckName,\n ReadinessCode,\n ReadinessReport,\n ReadinessStatus,\n} from './readiness'\nexport type { EmailMessage, EmailAdapter } from './email'\nexport { createJobsBuilder } from './jobs/index'\nexport type {\n WorkerstackJobContext,\n WorkerstackJobsBuilder,\n BackgroundDefinition,\n BackgroundDefs,\n CronDefinition,\n CronInvocation,\n DedupeUntil,\n EnqueueOptions,\n EnqueueTransaction,\n JobContext,\n JobDefinition,\n JobsDefs,\n JobsFacade,\n JobsRuntimeFacade,\n QueueJobDefinition,\n QueueJobKeys,\n TypedEnqueueOptions,\n} from './jobs/index'\nexport {\n defineSessionUser,\n defineAccess,\n validateAndResolveAccess,\n checkAccess,\n AUTH_TABLE_NAMES,\n} from './access'\nexport type {\n TableAccessInput,\n OperationRule,\n AccessContext,\n AccessUser,\n AccessUserBase,\n SessionUserConfig,\n SessionUserExtraOf,\n SessionUserSource,\n} from './access'\nexport {\n typeid,\n generate as generateTypeId,\n parse as parseTypeId,\n asTypeId,\n} from './typeid'\nexport type { TypeId } from './typeid'\nexport type {\n DatabaseAdapter,\n DatabaseConnection,\n DatabaseConnectionResult,\n} from './database/adapter'\nexport type { StorageAdapter } from './storage/index'\nexport type {\n StorageConfigInput,\n BucketConfigInput,\n ResolvedBucket,\n} from './storage/buckets'\nexport type { RealtimeAction } from './realtime/publisher'\nexport { createRealtimeFacade } from './realtime/facade'\nexport type {\n RealtimeFacade,\n RealtimeTransport,\n SchemaTable,\n} from './realtime/facade'\nexport { createApiBuilder, defineApi } from './api/builder'\nexport type { WorkerstackApiBuilder, ApiFactory } from './api/builder'\nexport type { ApiContext } from './api/context'\nexport type {\n CrudApiRouterFor,\n ExposedApiTables,\n MergeApiRouterTypes,\n UnifiedApiRouter,\n} from './api/types'\nexport type { TableCrudProcedures } from './api/crud-router'\nexport {\n buildApiRegistry,\n mergeApiRoutersStrict,\n normalizeApiPath,\n normalizeForeignOpenAPISpec,\n} from './api/registry'\nexport { mergeOpenAPISpecs } from './api/openapi'\n"]}
@@ -0,0 +1,15 @@
1
+ import type { AnyRouter } from '@orpc/server';
2
+ import type { WorkerstackDefinitionConfig } from './backend.js';
3
+ import type { BaseEnv, EnvConfigInput } from './env.js';
4
+ import type { JobsDefs } from './jobs/index.js';
5
+ import type { WorkerstackManifest } from './manifest.js';
6
+ export type AnyDefinitionConfig = WorkerstackDefinitionConfig<Record<string, unknown>, any, any, any, any, any, any, any>;
7
+ export type InspectedDefinition = {
8
+ readonly config: AnyDefinitionConfig;
9
+ readonly jobsDefs: JobsDefs | undefined;
10
+ readonly customApiRouter: AnyRouter | undefined;
11
+ readonly manifest: WorkerstackManifest;
12
+ readonly env: BaseEnv;
13
+ };
14
+ export declare function inspectConfig(input: AnyDefinitionConfig, envConfig: EnvConfigInput | undefined, env: BaseEnv): InspectedDefinition;
15
+ //# sourceMappingURL=inspect.d.ts.map