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,59 @@
1
+ import { createORPCClient } from '@orpc/client';
2
+ import { RPCLink } from '@orpc/client/fetch';
3
+ export const OPERATION_ID_HEADER = 'x-workerstack-operation-id';
4
+ function rpcUrl(baseUrl = '/api') {
5
+ return (baseUrl.endsWith('/') ? `${baseUrl}rpc` : `${baseUrl}/rpc`);
6
+ }
7
+ function adaptClient(client) {
8
+ const cache = new Map();
9
+ return new Proxy(function () { }, {
10
+ get(_target, property) {
11
+ if (!cache.has(property)) {
12
+ const value = Reflect.get(client, property);
13
+ cache.set(property, value === null ||
14
+ (typeof value !== 'object' && typeof value !== 'function')
15
+ ? value
16
+ : adaptClient(value));
17
+ }
18
+ return cache.get(property);
19
+ },
20
+ apply(_target, _thisArg, args) {
21
+ const [input, options = {}] = args;
22
+ return Reflect.apply(client, undefined, [
23
+ input,
24
+ {
25
+ signal: options.signal,
26
+ lastEventId: options.lastEventId,
27
+ context: {
28
+ operationId: options.operationId,
29
+ headers: options.headers,
30
+ },
31
+ },
32
+ ]);
33
+ },
34
+ });
35
+ }
36
+ export function createRpcClient(options = {}) {
37
+ const fetcher = options.fetch ?? ((input, init) => globalThis.fetch(input, init));
38
+ const link = new RPCLink({
39
+ url: rpcUrl(options.baseUrl),
40
+ fetch: (url, init) => fetcher(url, init),
41
+ headers: async ({ context }) => {
42
+ const defaults = typeof options.headers === 'function'
43
+ ? await options.headers()
44
+ : options.headers;
45
+ const headers = new Headers(defaults);
46
+ new Headers(context.headers).forEach((value, key) => headers.set(key, value));
47
+ if (context.operationId) {
48
+ headers.set(OPERATION_ID_HEADER, context.operationId);
49
+ }
50
+ return headers;
51
+ },
52
+ });
53
+ const client = createORPCClient(link);
54
+ return adaptClient(client);
55
+ }
56
+ export function createClient(options = {}) {
57
+ return createRpcClient(options);
58
+ }
59
+ //# sourceMappingURL=rpc-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/client/rpc-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StandardUrl } from '@orpc/client'\nimport type { AnyRouter, RouterClient } from '@orpc/server'\n\nimport { createORPCClient } from '@orpc/client'\nimport { RPCLink } from '@orpc/client/fetch'\n\nexport const OPERATION_ID_HEADER = 'x-workerstack-operation-id'\n\nexport type Fetch = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<Response>\n\nexport type ClientOptions = {\n baseUrl?: string\n fetch?: Fetch\n headers?: HeadersInit | (() => HeadersInit | Promise<HeadersInit>)\n}\n\nexport type CallOptions = {\n signal?: AbortSignal\n lastEventId?: string\n operationId?: string\n headers?: HeadersInit\n}\n\nexport type ClientCarrier = {\n api: AnyRouter\n buckets: string\n}\n\nexport type AnyWorkerstackApp = {\n $inferClient?: ClientCarrier | undefined\n}\n\nexport type InferApiRouter<TApp extends AnyWorkerstackApp> = NonNullable<\n TApp['$inferClient']\n>['api']\n\ntype RpcContext = {\n operationId?: string\n headers?: HeadersInit\n}\n\ntype AdaptCallArgs<TArgs extends unknown[]> = {\n [K in keyof TArgs]: K extends 1 | '1' ? CallOptions : TArgs[K]\n}\n\nexport type DirectClient<T> = T extends (...args: infer TArgs) => infer TResult\n ? (...args: AdaptCallArgs<TArgs>) => TResult\n : { [K in keyof T]: DirectClient<T[K]> }\n\nexport type RpcClient<TRouter extends AnyRouter> = DirectClient<\n RouterClient<TRouter, RpcContext>\n>\n\nexport type WorkerstackClient<TApp extends AnyWorkerstackApp> = RpcClient<\n InferApiRouter<TApp>\n>\n\nfunction rpcUrl(baseUrl = '/api'): StandardUrl {\n return (\n baseUrl.endsWith('/') ? `${baseUrl}rpc` : `${baseUrl}/rpc`\n ) as StandardUrl\n}\n\nfunction adaptClient<T>(client: T): DirectClient<T> {\n const cache = new Map<PropertyKey, unknown>()\n return new Proxy(function () {} as (...args: unknown[]) => unknown, {\n get(_target, property) {\n if (!cache.has(property)) {\n const value = Reflect.get(client as object, property)\n cache.set(\n property,\n value === null ||\n (typeof value !== 'object' && typeof value !== 'function')\n ? value\n : adaptClient(value),\n )\n }\n return cache.get(property)\n },\n apply(_target, _thisArg, args: [unknown, CallOptions?]) {\n const [input, options = {}] = args\n return Reflect.apply(\n client as (...args: unknown[]) => unknown,\n undefined,\n [\n input,\n {\n signal: options.signal,\n lastEventId: options.lastEventId,\n context: {\n operationId: options.operationId,\n headers: options.headers,\n },\n },\n ],\n )\n },\n }) as unknown as DirectClient<T>\n}\n\nexport function createRpcClient<TRouter extends AnyRouter>(\n options: ClientOptions = {},\n): RpcClient<TRouter> {\n const fetcher =\n options.fetch ?? ((input, init) => globalThis.fetch(input, init))\n const link = new RPCLink<RpcContext>({\n url: rpcUrl(options.baseUrl),\n fetch: (url, init) => fetcher(url, init),\n headers: async ({ context }) => {\n const defaults =\n typeof options.headers === 'function'\n ? await options.headers()\n : options.headers\n const headers = new Headers(defaults)\n new Headers(context.headers).forEach((value, key) =>\n headers.set(key, value),\n )\n if (context.operationId) {\n headers.set(OPERATION_ID_HEADER, context.operationId)\n }\n return headers\n },\n })\n const client = createORPCClient<RouterClient<TRouter, RpcContext>>(link)\n return adaptClient(client)\n}\n\nexport function createClient<TApp extends AnyWorkerstackApp>(\n options: ClientOptions = {},\n): WorkerstackClient<TApp> {\n return createRpcClient<InferApiRouter<TApp>>(options)\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { type Store } from 'solid-js';
2
+ import type { LiveView, LiveViewSnapshot } from './live-view.js';
3
+ /** Mirrors confirmed LiveView snapshots into a keyed Solid store. */
4
+ export declare function createLiveStore<T extends {
5
+ id: unknown;
6
+ }>(view: LiveView<T>): Store<LiveViewSnapshot<T>>;
7
+ //# sourceMappingURL=solid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../src/client/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE7D,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,EACvD,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAiB5B"}
@@ -0,0 +1,21 @@
1
+ import { createStore, onCleanup, reconcile } from 'solid-js';
2
+ /** Mirrors confirmed LiveView snapshots into a keyed Solid store. */
3
+ export function createLiveStore(view) {
4
+ const initial = view.getSnapshot();
5
+ const [state, setState] = createStore({
6
+ items: [...initial.items],
7
+ status: initial.status,
8
+ error: initial.error,
9
+ });
10
+ const unsubscribe = view.subscribe(() => {
11
+ const next = view.getSnapshot();
12
+ setState((draft) => {
13
+ reconcile([...next.items], (item) => item.id)(draft.items);
14
+ draft.status = next.status;
15
+ draft.error = next.error;
16
+ });
17
+ });
18
+ onCleanup(unsubscribe);
19
+ return state;
20
+ }
21
+ //# sourceMappingURL=solid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid.js","sourceRoot":"","sources":["../../src/client/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAc,MAAM,UAAU,CAAA;AAIxE,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAC7B,IAAiB;IAEjB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAClC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC;QACpC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC/B,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAO,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC7D,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YAC1B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,WAAW,CAAC,CAAA;IACtB,OAAO,KAAmC,CAAA;AAC5C,CAAC","sourcesContent":["import { createStore, onCleanup, reconcile, type Store } from 'solid-js'\n\nimport type { LiveView, LiveViewSnapshot } from './live-view'\n\n/** Mirrors confirmed LiveView snapshots into a keyed Solid store. */\nexport function createLiveStore<T extends { id: unknown }>(\n view: LiveView<T>,\n): Store<LiveViewSnapshot<T>> {\n const initial = view.getSnapshot()\n const [state, setState] = createStore({\n items: [...initial.items],\n status: initial.status,\n error: initial.error,\n })\n const unsubscribe = view.subscribe(() => {\n const next = view.getSnapshot()\n setState((draft) => {\n reconcile([...next.items], (item: T) => item.id)(draft.items)\n draft.status = next.status\n draft.error = next.error\n })\n })\n onCleanup(unsubscribe)\n return state as Store<LiveViewSnapshot<T>>\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { LiveView, LiveViewSnapshot } from './live-view.js';
2
+ export type Readable<T> = {
3
+ subscribe(run: (value: T) => void): () => void;
4
+ };
5
+ export declare function liveStore<T>(view: LiveView<T>): Readable<LiveViewSnapshot<T>>;
6
+ //# sourceMappingURL=svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svelte.d.ts","sourceRoot":"","sources":["../../src/client/svelte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE7D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IACxB,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC/C,CAAA;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAO7E"}
@@ -0,0 +1,9 @@
1
+ export function liveStore(view) {
2
+ return {
3
+ subscribe(run) {
4
+ run(view.getSnapshot());
5
+ return view.subscribe(() => run(view.getSnapshot()));
6
+ },
7
+ };
8
+ }
9
+ //# sourceMappingURL=svelte.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svelte.js","sourceRoot":"","sources":["../../src/client/svelte.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,SAAS,CAAI,IAAiB;IAC5C,OAAO;QACL,SAAS,CAAC,GAAG;YACX,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QACtD,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["import type { LiveView, LiveViewSnapshot } from './live-view'\n\nexport type Readable<T> = {\n subscribe(run: (value: T) => void): () => void\n}\n\nexport function liveStore<T>(view: LiveView<T>): Readable<LiveViewSnapshot<T>> {\n return {\n subscribe(run) {\n run(view.getSnapshot())\n return view.subscribe(() => run(view.getSnapshot()))\n },\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { type ShallowRef } from 'vue';
2
+ import type { LiveView, LiveViewSnapshot } from './live-view.js';
3
+ /** Vue owns reactivity; LiveView supplies immutable external snapshots. */
4
+ export declare function useLiveView<T>(view: LiveView<T>): ShallowRef<LiveViewSnapshot<T>>;
5
+ //# sourceMappingURL=vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../src/client/vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAEjE,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE7D,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,CAAC,EAC3B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAChB,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CASjC"}
@@ -0,0 +1,11 @@
1
+ import { onScopeDispose, shallowRef } from 'vue';
2
+ /** Vue owns reactivity; LiveView supplies immutable external snapshots. */
3
+ export function useLiveView(view) {
4
+ const state = shallowRef(view.getSnapshot());
5
+ const unsubscribe = view.subscribe(() => {
6
+ state.value = view.getSnapshot();
7
+ });
8
+ onScopeDispose(unsubscribe);
9
+ return state;
10
+ }
11
+ //# sourceMappingURL=vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue.js","sourceRoot":"","sources":["../../src/client/vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAmB,MAAM,KAAK,CAAA;AAIjE,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CACzB,IAAiB;IAEjB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAE1C,CAAA;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IACF,cAAc,CAAC,WAAW,CAAC,CAAA;IAC3B,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["import { onScopeDispose, shallowRef, type ShallowRef } from 'vue'\n\nimport type { LiveView, LiveViewSnapshot } from './live-view'\n\n/** Vue owns reactivity; LiveView supplies immutable external snapshots. */\nexport function useLiveView<T>(\n view: LiveView<T>,\n): ShallowRef<LiveViewSnapshot<T>> {\n const state = shallowRef(view.getSnapshot()) as ShallowRef<\n LiveViewSnapshot<T>\n >\n const unsubscribe = view.subscribe(() => {\n state.value = view.getSnapshot()\n })\n onScopeDispose(unsubscribe)\n return state\n}\n"]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Typed route-map generation from the app's OpenAPI document.
3
+ *
4
+ * `generateRouteMap` turns `/api/openapi.json` into a small standalone module:
5
+ * an `ApiRoutes` type — one `Op` entry per operation, carrying its method,
6
+ * path literal, query/body/output types and whether it streams — plus a
7
+ * runtime `routes` descriptor object for that same list.
8
+ *
9
+ * The transport itself is deliberately NOT generated: a ~90-line handwritten
10
+ * client (`createRestClient`) consumes any route map. Types change with every API
11
+ * edit and are regenerated; the client never changes at all.
12
+ */
13
+ type JsonSchema = {
14
+ $ref?: string;
15
+ type?: string | string[];
16
+ anyOf?: JsonSchema[];
17
+ oneOf?: JsonSchema[];
18
+ allOf?: JsonSchema[];
19
+ const?: unknown;
20
+ enum?: unknown[];
21
+ items?: JsonSchema;
22
+ properties?: Record<string, JsonSchema>;
23
+ required?: string[];
24
+ additionalProperties?: boolean | JsonSchema;
25
+ };
26
+ /** JSON-schema subset → TypeScript type expression, with $refs inlined. */
27
+ export declare function schemaToType(schema: JsonSchema | undefined, components?: Record<string, JsonSchema>, depth?: number): string;
28
+ /**
29
+ * Deterministic operation names from the path shape:
30
+ * `/api/posts` GET → `postsList`; `/api/posts/{id}` PATCH → `postsUpdate`;
31
+ * `/api/posts/live` GET → `postsLive`; `/api/enrich` POST → `enrichCreate`.
32
+ */
33
+ export declare function operationName(path: string, method: string): string;
34
+ export declare function generateRouteMap(input: unknown): string;
35
+ export {};
36
+ //# sourceMappingURL=codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,KAAK,UAAU,GAAG;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACvC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,oBAAoB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;CAC5C,CAAA;AAoCD,2EAA2E;AAC3E,wBAAgB,YAAY,CAC1B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,EAC3C,KAAK,SAAI,GACR,MAAM,CA+DR;AAUD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBlE;AA+FD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAwDvD"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Typed route-map generation from the app's OpenAPI document.
3
+ *
4
+ * `generateRouteMap` turns `/api/openapi.json` into a small standalone module:
5
+ * an `ApiRoutes` type — one `Op` entry per operation, carrying its method,
6
+ * path literal, query/body/output types and whether it streams — plus a
7
+ * runtime `routes` descriptor object for that same list.
8
+ *
9
+ * The transport itself is deliberately NOT generated: a ~90-line handwritten
10
+ * client (`createRestClient`) consumes any route map. Types change with every API
11
+ * edit and are regenerated; the client never changes at all.
12
+ */
13
+ function pascal(value) {
14
+ return value
15
+ .split(/[^a-zA-Z0-9]+/)
16
+ .filter(Boolean)
17
+ .map((part) => part[0].toUpperCase() + part.slice(1))
18
+ .join('');
19
+ }
20
+ function camel(value) {
21
+ const asPascal = pascal(value);
22
+ return asPascal ? asPascal[0].toLowerCase() + asPascal.slice(1) : 'root';
23
+ }
24
+ /** JSON-schema subset → TypeScript type expression, with $refs inlined. */
25
+ export function schemaToType(schema, components = {}, depth = 0) {
26
+ if (!schema || depth > 4)
27
+ return 'unknown';
28
+ if (schema.$ref) {
29
+ const name = schema.$ref.split('/').pop() ?? '';
30
+ return schemaToType(components[name], components, depth + 1);
31
+ }
32
+ if (schema.const !== undefined)
33
+ return JSON.stringify(schema.const);
34
+ if (schema.enum) {
35
+ return [...new Set(schema.enum.map((value) => JSON.stringify(value)))].join(' | ');
36
+ }
37
+ const variants = schema.anyOf ?? schema.oneOf;
38
+ if (variants) {
39
+ const members = [
40
+ ...new Set(variants.map((member) => schemaToType(member, components, depth))),
41
+ ];
42
+ const withoutNull = members.filter((member) => member !== 'null');
43
+ const joined = withoutNull.join(' | ');
44
+ const core = withoutNull.length > 1 ? `(${joined})` : joined || 'unknown';
45
+ return members.length !== withoutNull.length ? `${core} | null` : core;
46
+ }
47
+ if (schema.allOf) {
48
+ return schema.allOf
49
+ .map((member) => schemaToType(member, components, depth))
50
+ .join(' & ');
51
+ }
52
+ if (Array.isArray(schema.type)) {
53
+ return schema.type
54
+ .map((entry) => (entry === 'integer' ? 'number' : entry))
55
+ .join(' | ');
56
+ }
57
+ switch (schema.type) {
58
+ case 'string':
59
+ return 'string';
60
+ case 'integer':
61
+ case 'number':
62
+ return 'number';
63
+ case 'boolean':
64
+ return 'boolean';
65
+ case 'null':
66
+ return 'null';
67
+ case 'array':
68
+ return `${schemaToType(schema.items, components, depth)}[]`;
69
+ case 'object': {
70
+ const properties = schema.properties ?? {};
71
+ const required = new Set(schema.required ?? []);
72
+ if (Object.keys(properties).length === 0) {
73
+ return schema.additionalProperties === false
74
+ ? 'Record<string, never>'
75
+ : 'Record<string, unknown>';
76
+ }
77
+ const fields = Object.entries(properties).map(([key, child]) => {
78
+ const optional = required.has(key) ? '' : '?';
79
+ return `${JSON.stringify(key)}${optional}: ${schemaToType(child, components, depth)}`;
80
+ });
81
+ return `{ ${fields.join('; ')} }`;
82
+ }
83
+ default:
84
+ return 'unknown';
85
+ }
86
+ }
87
+ const METHOD_ACTIONS = {
88
+ get: 'Get',
89
+ post: 'Create',
90
+ patch: 'Update',
91
+ put: 'Update',
92
+ delete: 'Delete',
93
+ };
94
+ /**
95
+ * Deterministic operation names from the path shape:
96
+ * `/api/posts` GET → `postsList`; `/api/posts/{id}` PATCH → `postsUpdate`;
97
+ * `/api/posts/live` GET → `postsLive`; `/api/enrich` POST → `enrichCreate`.
98
+ */
99
+ export function operationName(path, method) {
100
+ const segments = path.split('/').filter(Boolean);
101
+ if (segments[0] === 'api')
102
+ segments.shift();
103
+ const last = segments[segments.length - 1] ?? '';
104
+ const action = METHOD_ACTIONS[method] ?? pascal(method);
105
+ if (last.startsWith('{')) {
106
+ return `${camel(segments.slice(0, -1).join('_'))}${action}`;
107
+ }
108
+ const statics = segments.filter((segment) => !segment.startsWith('{'));
109
+ if (statics.length === 1 && method === 'get')
110
+ return `${camel(last)}List`;
111
+ if (statics.length === 1 && method === 'post')
112
+ return `${camel(last)}Create`;
113
+ // A deeper static path reads as its own name (`/api/posts/live`) — the
114
+ // method suffix would only add noise.
115
+ if (method === 'get')
116
+ return camel(statics.join('_'));
117
+ return `${camel(statics.join('_'))}${action}`;
118
+ }
119
+ const HTTP_METHODS = ['get', 'post', 'patch', 'put', 'delete'];
120
+ function collectOperations(spec) {
121
+ const components = spec.components?.schemas ?? {};
122
+ const operations = [];
123
+ for (const [path, methods] of Object.entries(spec.paths ?? {})) {
124
+ // Better Auth owns its client contract. Keeping auth endpoints out of the
125
+ // generic REST artifact avoids a second, less capable auth API surface.
126
+ if (path === '/api/auth' || path.startsWith('/api/auth/'))
127
+ continue;
128
+ for (const rawMethod of Object.keys(methods)) {
129
+ if (!HTTP_METHODS.includes(rawMethod))
130
+ continue;
131
+ const operation = methods[rawMethod];
132
+ if (!operation)
133
+ continue;
134
+ const parameters = operation.parameters ?? [];
135
+ const queryParameters = parameters.filter((parameter) => parameter.in === 'query');
136
+ let queryType;
137
+ if (queryParameters.length > 0) {
138
+ const fields = queryParameters.map((parameter) => {
139
+ const schema = parameter.schema ?? parameter.content?.['application/json']?.schema;
140
+ return `${JSON.stringify(parameter.name)}?: ${schemaToType(schema, components)}`;
141
+ });
142
+ queryType = `{ ${fields.join('; ')} }`;
143
+ }
144
+ const requestSchema = operation.requestBody?.content?.['application/json']?.schema;
145
+ const rawBodyType = requestSchema
146
+ ? schemaToType(requestSchema, components)
147
+ : undefined;
148
+ // oRPC emits an empty-object request body even for body-less
149
+ // procedures like DELETE; a free-form record there is noise.
150
+ const bodyType = rawBodyType === 'Record<string, unknown>' && rawMethod === 'delete'
151
+ ? undefined
152
+ : rawBodyType;
153
+ const okResponse = operation.responses?.['200'] ?? operation.responses?.['201'];
154
+ const jsonSchema = okResponse?.content?.['application/json']?.schema;
155
+ const eventSchema = okResponse?.content?.['text/event-stream']?.schema;
156
+ let outputType = 'void';
157
+ let isStream = false;
158
+ if (eventSchema) {
159
+ isStream = true;
160
+ // oRPC wraps each SSE data frame as {event, data}; unwrap the payload.
161
+ // Wrapper variants that carry no data (or map to `unknown`) would
162
+ // swallow the whole union, so they are dropped here.
163
+ const wrapper = eventSchema.oneOf ?? eventSchema.anyOf ?? [];
164
+ outputType =
165
+ [
166
+ ...new Set(wrapper
167
+ .map((variant) => variant.properties?.['data'])
168
+ .filter((variant) => Boolean(variant))
169
+ .map((variant) => schemaToType(variant, components))
170
+ .filter((type) => type !== 'unknown')),
171
+ ].join(' | ') || 'void';
172
+ }
173
+ else if (jsonSchema) {
174
+ outputType = schemaToType(jsonSchema, components);
175
+ }
176
+ operations.push({
177
+ name: operationName(path, rawMethod),
178
+ method: rawMethod.toUpperCase(),
179
+ path,
180
+ queryType,
181
+ bodyType,
182
+ outputType,
183
+ isStream,
184
+ });
185
+ }
186
+ }
187
+ return operations;
188
+ }
189
+ export function generateRouteMap(input) {
190
+ const spec = input;
191
+ const operations = collectOperations(spec);
192
+ const lines = [];
193
+ lines.push('// Generated by workerstack codegen from /api/openapi.json.');
194
+ lines.push('// Regenerate with `bun run gen`; do not edit by hand.');
195
+ lines.push('');
196
+ lines.push('/** One API operation: literals describe the wire, phantoms the shapes. */');
197
+ lines.push('export interface Op<');
198
+ lines.push(' M extends string,');
199
+ lines.push(' P extends string,');
200
+ lines.push(' Query = undefined,');
201
+ lines.push(' Body = undefined,');
202
+ lines.push(' Output = void,');
203
+ lines.push(' Stream extends boolean = false,');
204
+ lines.push('> {');
205
+ lines.push(' method: M');
206
+ lines.push(' path: P');
207
+ lines.push(' stream: Stream');
208
+ lines.push(' query?: Query');
209
+ lines.push(' body?: Body');
210
+ lines.push(' output?: Output');
211
+ lines.push('}');
212
+ lines.push('');
213
+ lines.push('export type ApiRoutes = {');
214
+ const runtimeEntries = [];
215
+ for (const operation of operations) {
216
+ const generics = [
217
+ `'${operation.method}'`,
218
+ `'${operation.path}'`,
219
+ operation.queryType ?? 'undefined',
220
+ operation.bodyType ?? 'undefined',
221
+ operation.isStream ? operation.outputType : operation.outputType,
222
+ String(operation.isStream),
223
+ ].join(', ');
224
+ lines.push(` ${operation.name}: Op<${generics}>`);
225
+ runtimeEntries.push(` ${operation.name}: { method: '${operation.method}', path: '${operation.path}'${operation.isStream ? ', stream: true' : ''} },`);
226
+ }
227
+ lines.push('}');
228
+ lines.push('');
229
+ lines.push('/** Wire descriptors for createRestClient — same keys, runtime values. */');
230
+ lines.push('export const routes = {');
231
+ lines.push(...runtimeEntries);
232
+ lines.push('} as const');
233
+ return lines.join('\n');
234
+ }
235
+ //# sourceMappingURL=codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Typed route-map generation from the app's OpenAPI document.\n *\n * `generateRouteMap` turns `/api/openapi.json` into a small standalone module:\n * an `ApiRoutes` type — one `Op` entry per operation, carrying its method,\n * path literal, query/body/output types and whether it streams — plus a\n * runtime `routes` descriptor object for that same list.\n *\n * The transport itself is deliberately NOT generated: a ~90-line handwritten\n * client (`createRestClient`) consumes any route map. Types change with every API\n * edit and are regenerated; the client never changes at all.\n */\n\ntype JsonSchema = {\n $ref?: string\n type?: string | string[]\n anyOf?: JsonSchema[]\n oneOf?: JsonSchema[]\n allOf?: JsonSchema[]\n const?: unknown\n enum?: unknown[]\n items?: JsonSchema\n properties?: Record<string, JsonSchema>\n required?: string[]\n additionalProperties?: boolean | JsonSchema\n}\n\ntype Parameter = {\n in: string\n name: string\n schema?: JsonSchema\n content?: Record<string, { schema: JsonSchema }>\n}\n\ntype Operation = {\n parameters?: Parameter[]\n requestBody?: { content?: Record<string, { schema: JsonSchema }> }\n responses?: Record<\n string,\n { content?: Record<string, { schema: JsonSchema }> }\n >\n}\n\ntype OpenApiSpec = {\n paths?: Record<string, Record<string, Operation | undefined>>\n components?: { schemas?: Record<string, JsonSchema> }\n}\n\nfunction pascal(value: string): string {\n return value\n .split(/[^a-zA-Z0-9]+/)\n .filter(Boolean)\n .map((part) => part[0]!.toUpperCase() + part.slice(1))\n .join('')\n}\n\nfunction camel(value: string): string {\n const asPascal = pascal(value)\n return asPascal ? asPascal[0]!.toLowerCase() + asPascal.slice(1) : 'root'\n}\n\n/** JSON-schema subset → TypeScript type expression, with $refs inlined. */\nexport function schemaToType(\n schema: JsonSchema | undefined,\n components: Record<string, JsonSchema> = {},\n depth = 0,\n): string {\n if (!schema || depth > 4) return 'unknown'\n if (schema.$ref) {\n const name = schema.$ref.split('/').pop() ?? ''\n return schemaToType(components[name], components, depth + 1)\n }\n if (schema.const !== undefined) return JSON.stringify(schema.const)\n if (schema.enum) {\n return [...new Set(schema.enum.map((value) => JSON.stringify(value)))].join(\n ' | ',\n )\n }\n const variants = schema.anyOf ?? schema.oneOf\n if (variants) {\n const members = [\n ...new Set(\n variants.map((member) => schemaToType(member, components, depth)),\n ),\n ]\n const withoutNull = members.filter((member) => member !== 'null')\n const joined = withoutNull.join(' | ')\n const core = withoutNull.length > 1 ? `(${joined})` : joined || 'unknown'\n return members.length !== withoutNull.length ? `${core} | null` : core\n }\n if (schema.allOf) {\n return schema.allOf\n .map((member) => schemaToType(member, components, depth))\n .join(' & ')\n }\n if (Array.isArray(schema.type)) {\n return schema.type\n .map((entry) => (entry === 'integer' ? 'number' : entry))\n .join(' | ')\n }\n switch (schema.type) {\n case 'string':\n return 'string'\n case 'integer':\n case 'number':\n return 'number'\n case 'boolean':\n return 'boolean'\n case 'null':\n return 'null'\n case 'array':\n return `${schemaToType(schema.items, components, depth)}[]`\n case 'object': {\n const properties = schema.properties ?? {}\n const required = new Set(schema.required ?? [])\n if (Object.keys(properties).length === 0) {\n return schema.additionalProperties === false\n ? 'Record<string, never>'\n : 'Record<string, unknown>'\n }\n const fields = Object.entries(properties).map(([key, child]) => {\n const optional = required.has(key) ? '' : '?'\n return `${JSON.stringify(key)}${optional}: ${schemaToType(child, components, depth)}`\n })\n return `{ ${fields.join('; ')} }`\n }\n default:\n return 'unknown'\n }\n}\n\nconst METHOD_ACTIONS: Record<string, string> = {\n get: 'Get',\n post: 'Create',\n patch: 'Update',\n put: 'Update',\n delete: 'Delete',\n}\n\n/**\n * Deterministic operation names from the path shape:\n * `/api/posts` GET → `postsList`; `/api/posts/{id}` PATCH → `postsUpdate`;\n * `/api/posts/live` GET → `postsLive`; `/api/enrich` POST → `enrichCreate`.\n */\nexport function operationName(path: string, method: string): string {\n const segments = path.split('/').filter(Boolean)\n if (segments[0] === 'api') segments.shift()\n const last = segments[segments.length - 1] ?? ''\n const action = METHOD_ACTIONS[method] ?? pascal(method)\n\n if (last.startsWith('{')) {\n return `${camel(segments.slice(0, -1).join('_'))}${action}`\n }\n const statics = segments.filter((segment) => !segment.startsWith('{'))\n if (statics.length === 1 && method === 'get') return `${camel(last)}List`\n if (statics.length === 1 && method === 'post') return `${camel(last)}Create`\n // A deeper static path reads as its own name (`/api/posts/live`) — the\n // method suffix would only add noise.\n if (method === 'get') return camel(statics.join('_'))\n return `${camel(statics.join('_'))}${action}`\n}\n\ntype EmittedOperation = {\n name: string\n method: string\n path: string\n queryType?: string\n bodyType?: string\n outputType: string\n isStream: boolean\n}\n\nconst HTTP_METHODS = ['get', 'post', 'patch', 'put', 'delete']\n\nfunction collectOperations(spec: OpenApiSpec): EmittedOperation[] {\n const components = spec.components?.schemas ?? {}\n const operations: EmittedOperation[] = []\n\n for (const [path, methods] of Object.entries(spec.paths ?? {})) {\n // Better Auth owns its client contract. Keeping auth endpoints out of the\n // generic REST artifact avoids a second, less capable auth API surface.\n if (path === '/api/auth' || path.startsWith('/api/auth/')) continue\n for (const rawMethod of Object.keys(methods)) {\n if (!HTTP_METHODS.includes(rawMethod)) continue\n const operation = methods[rawMethod]\n if (!operation) continue\n\n const parameters = operation.parameters ?? []\n const queryParameters = parameters.filter(\n (parameter) => parameter.in === 'query',\n )\n\n let queryType: string | undefined\n if (queryParameters.length > 0) {\n const fields = queryParameters.map((parameter) => {\n const schema =\n parameter.schema ?? parameter.content?.['application/json']?.schema\n return `${JSON.stringify(parameter.name)}?: ${schemaToType(schema, components)}`\n })\n queryType = `{ ${fields.join('; ')} }`\n }\n\n const requestSchema =\n operation.requestBody?.content?.['application/json']?.schema\n const rawBodyType = requestSchema\n ? schemaToType(requestSchema, components)\n : undefined\n // oRPC emits an empty-object request body even for body-less\n // procedures like DELETE; a free-form record there is noise.\n const bodyType =\n rawBodyType === 'Record<string, unknown>' && rawMethod === 'delete'\n ? undefined\n : rawBodyType\n\n const okResponse =\n operation.responses?.['200'] ?? operation.responses?.['201']\n const jsonSchema = okResponse?.content?.['application/json']?.schema\n const eventSchema = okResponse?.content?.['text/event-stream']?.schema\n\n let outputType = 'void'\n let isStream = false\n if (eventSchema) {\n isStream = true\n // oRPC wraps each SSE data frame as {event, data}; unwrap the payload.\n // Wrapper variants that carry no data (or map to `unknown`) would\n // swallow the whole union, so they are dropped here.\n const wrapper = eventSchema.oneOf ?? eventSchema.anyOf ?? []\n outputType =\n [\n ...new Set(\n wrapper\n .map((variant) => variant.properties?.['data'])\n .filter((variant): variant is JsonSchema => Boolean(variant))\n .map((variant) => schemaToType(variant, components))\n .filter((type) => type !== 'unknown'),\n ),\n ].join(' | ') || 'void'\n } else if (jsonSchema) {\n outputType = schemaToType(jsonSchema, components)\n }\n\n operations.push({\n name: operationName(path, rawMethod),\n method: rawMethod.toUpperCase(),\n path,\n queryType,\n bodyType,\n outputType,\n isStream,\n })\n }\n }\n return operations\n}\n\nexport function generateRouteMap(input: unknown): string {\n const spec = input as OpenApiSpec\n const operations = collectOperations(spec)\n\n const lines: string[] = []\n lines.push('// Generated by workerstack codegen from /api/openapi.json.')\n lines.push('// Regenerate with `bun run gen`; do not edit by hand.')\n lines.push('')\n lines.push(\n '/** One API operation: literals describe the wire, phantoms the shapes. */',\n )\n lines.push('export interface Op<')\n lines.push(' M extends string,')\n lines.push(' P extends string,')\n lines.push(' Query = undefined,')\n lines.push(' Body = undefined,')\n lines.push(' Output = void,')\n lines.push(' Stream extends boolean = false,')\n lines.push('> {')\n lines.push(' method: M')\n lines.push(' path: P')\n lines.push(' stream: Stream')\n lines.push(' query?: Query')\n lines.push(' body?: Body')\n lines.push(' output?: Output')\n lines.push('}')\n lines.push('')\n lines.push('export type ApiRoutes = {')\n\n const runtimeEntries: string[] = []\n for (const operation of operations) {\n const generics = [\n `'${operation.method}'`,\n `'${operation.path}'`,\n operation.queryType ?? 'undefined',\n operation.bodyType ?? 'undefined',\n operation.isStream ? operation.outputType : operation.outputType,\n String(operation.isStream),\n ].join(', ')\n lines.push(` ${operation.name}: Op<${generics}>`)\n runtimeEntries.push(\n ` ${operation.name}: { method: '${operation.method}', path: '${operation.path}'${\n operation.isStream ? ', stream: true' : ''\n } },`,\n )\n }\n lines.push('}')\n lines.push('')\n lines.push(\n '/** Wire descriptors for createRestClient — same keys, runtime values. */',\n )\n lines.push('export const routes = {')\n lines.push(...runtimeEntries)\n lines.push('} as const')\n\n return lines.join('\\n')\n}\n"]}
@@ -0,0 +1,129 @@
1
+ import type { AnyMiddleware, AnyRouter } from '@orpc/server';
2
+ import { betterAuth } from 'better-auth';
3
+ import type { AuthSessionResolver, SessionUserConfig, SessionUserExtraOf, TableAccessInput } from './access.js';
4
+ import type { WorkerstackApiBuilder } from './api/builder.js';
5
+ import type { DatabaseAdapter } from './database/adapter.js';
6
+ import type { DbFor } from './db.js';
7
+ import type { AnyDb } from './dialect.js';
8
+ import type { IdempotencyConfig } from './idempotency.js';
9
+ import type { MessagingConfig } from './messaging/index.js';
10
+ import type { RateLimitConfig } from './rate-limit.js';
11
+ import { type BaseEnv, type EnvConfigInput, type ValidatedEnv } from './env.js';
12
+ import { type ResolvedStorageBuckets, type StorageConfigInput } from './storage/buckets.js';
13
+ export type BetterAuthConfig = Omit<NonNullable<Parameters<typeof betterAuth>[0]>, 'database'>;
14
+ /**
15
+ * What an `auth` builder is handed. `db` is the app's own connection, typed
16
+ * from `schema` alone — that is what keeps the builder cycle-free: better-auth
17
+ * hooks living in another file get a db without importing the app whose type
18
+ * they help produce.
19
+ */
20
+ export type AuthConfigContext<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined> = {
21
+ db: DbFor<TSchema>;
22
+ env: ValidatedEnv<TEnv>;
23
+ };
24
+ export type AuthConfigInput<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined, TConfig extends BetterAuthConfig = BetterAuthConfig> = TConfig | ((ctx: AuthConfigContext<TSchema, TEnv>) => TConfig);
25
+ /**
26
+ * Identity helper for defining an auth config in a separate file with full
27
+ * type inference — no explicit generic annotations required.
28
+ *
29
+ * Follows the `defineConfig` / `defineComponent` ecosystem convention:
30
+ * the function does nothing at runtime but gives TypeScript an inference
31
+ * anchor through the `schema` parameter.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * // Static config (no db/env access needed)
36
+ * export const authConfig = defineAuth({ ... })
37
+ *
38
+ * // Builder with schema-typed db
39
+ * export const authConfig = defineAuth(schema, ({ db }) => ({
40
+ * databaseHooks: {
41
+ * user: { create: { after: async (user) => { await db.insert(...) } } }
42
+ * }
43
+ * }))
44
+ * ```
45
+ */
46
+ export declare function defineAuth<const TConfig extends BetterAuthConfig>(config: TConfig): TConfig;
47
+ export declare function defineAuth<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined, const TConfig extends BetterAuthConfig>(context: {
48
+ schema: TSchema;
49
+ env: TEnv;
50
+ }, builder: (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig): (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig;
51
+ export declare function defineAuth<TSchema extends Record<string, unknown>, const TConfig extends BetterAuthConfig, TEnv extends EnvConfigInput | undefined = undefined>(schema: TSchema, builder: (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig): (ctx: AuthConfigContext<TSchema, TEnv>) => TConfig;
52
+ /**
53
+ * The builder as {@link ResolvedConfig} carries it: schema-agnostic, because
54
+ * ResolvedConfig is not generic. {@link resolveAuthConfig} is the only caller.
55
+ */
56
+ export type AuthConfigFactory = (ctx: {
57
+ db: AnyDb;
58
+ env: BaseEnv;
59
+ }) => BetterAuthConfig;
60
+ /** Realtime declaration. Independent of schema, storage, and env. */
61
+ export type RealtimeConfigInput = boolean | {
62
+ bufferSize?: number;
63
+ resumeSeconds?: number;
64
+ };
65
+ export type WorkerstackConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = Record<string, TableAccessInput> | undefined, TStorage extends StorageConfigInput | undefined = StorageConfigInput | undefined, TEnv extends EnvConfigInput | undefined = EnvConfigInput | undefined, TCustomApiRouter extends AnyRouter | undefined = AnyRouter | undefined, TAuthConfig extends BetterAuthConfig = BetterAuthConfig, TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined> = {
66
+ schema: TSchema;
67
+ access?: TAccess;
68
+ database: {
69
+ adapter: DatabaseAdapter;
70
+ url?: string;
71
+ authToken?: string;
72
+ migrations?: string;
73
+ };
74
+ /**
75
+ * better-auth options, or a builder receiving `{ db, env }`. Use the builder
76
+ * form when database hooks need to write: it hands out the app's own
77
+ * connection, so the application never opens a second one just to satisfy a
78
+ * config that is built before the app exists.
79
+ */
80
+ auth?: AuthConfigInput<NoInfer<TSchema>, NoInfer<TEnv>, TAuthConfig>;
81
+ /**
82
+ * Reuse an application-owned session reader for the unified API while
83
+ * keeping Workerstack's auth handler available.
84
+ */
85
+ authResolver?: AuthSessionResolver<SessionUserExtraOf<TSession>>;
86
+ /** Explicitly project application fields from Better Auth into API users. */
87
+ session?: TSession;
88
+ storage?: TStorage;
89
+ messaging?: MessagingConfig;
90
+ /**
91
+ * The application's oRPC router. Pass the finished router object, or a
92
+ * callback when the router needs the framework builder at configuration
93
+ * time. Declare the router at module scope with `defineApi` and the object
94
+ * form keeps router modules free of factory wrappers.
95
+ */
96
+ api?: TCustomApiRouter | ((builder: WorkerstackApiBuilder<TSchema, ValidatedEnv<TEnv>, MessagingConfig, SessionUserExtraOf<TSession>>) => TCustomApiRouter);
97
+ /**
98
+ * Middleware applied to every procedure in the graph: generated CRUD,
99
+ * storage, realtime, health, and the application's own procedures. Declare
100
+ * each one with `o.middleware(...)` from `defineApi`.
101
+ *
102
+ * It runs before authentication, so `context.user` is not available inside
103
+ * it. Read an already-resolved caller with `context.peekSession()`.
104
+ */
105
+ middleware?: AnyMiddleware[];
106
+ rateLimit?: boolean | RateLimitConfig;
107
+ idempotency?: boolean | IdempotencyConfig;
108
+ /** Generate and serve `/api/openapi.json`. Disabled by default. */
109
+ openapi?: boolean;
110
+ realtime?: RealtimeConfigInput;
111
+ };
112
+ export type ResolvedConfig = {
113
+ database: {
114
+ adapter: DatabaseAdapter;
115
+ url: string;
116
+ authToken?: string;
117
+ migrations: string;
118
+ };
119
+ auth: BetterAuthConfig | AuthConfigFactory;
120
+ storage: ResolvedStorageBuckets;
121
+ realtime?: RealtimeConfigInput;
122
+ };
123
+ export declare function resolveConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TEnv extends EnvConfigInput | undefined = undefined, TCustomApiRouter extends AnyRouter | undefined = undefined, TAuthConfig extends BetterAuthConfig = BetterAuthConfig, TSession extends SessionUserConfig<Record<string, unknown>> | undefined = undefined>(options: WorkerstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter, TAuthConfig, TSession>, env?: BaseEnv, platformSource?: Record<string, string | undefined>): ResolvedConfig;
124
+ /** Collapse the object/builder union once the db is up. */
125
+ export declare function resolveAuthConfig(auth: ResolvedConfig['auth'], ctx: {
126
+ db: AnyDb;
127
+ env: BaseEnv;
128
+ }): BetterAuthConfig;
129
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}