iterate 0.3.0 → 0.4.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 (241) hide show
  1. package/README.md +164 -82
  2. package/dist/{next/api.d.ts → api.d.ts} +197 -33
  3. package/dist/{next/app-server.d.ts → app-server.d.ts} +7 -0
  4. package/dist/{next/app-server.mjs → app-server.mjs} +17 -15
  5. package/dist/app-server.mjs.map +1 -0
  6. package/dist/{next/app-session.mjs → app-session.mjs} +12 -15
  7. package/dist/app-session.mjs.map +1 -0
  8. package/dist/{next/app.mjs → app.mjs} +53 -14
  9. package/dist/app.mjs.map +1 -0
  10. package/dist/{next/client → client}/live-state.d.ts +11 -11
  11. package/dist/client/oauth.d.ts +17 -0
  12. package/dist/{next/client → client}/react.d.ts +10 -42
  13. package/dist/{next/client → client}/socket.d.ts +1 -0
  14. package/dist/client.mjs +156 -4
  15. package/dist/client.mjs.map +1 -0
  16. package/dist/{next/expression.d.ts → expression.d.ts} +11 -69
  17. package/dist/{next/expression.mjs → expression.mjs} +11 -109
  18. package/dist/expression.mjs.map +1 -0
  19. package/dist/lib-BWr-5mFO.mjs +36 -0
  20. package/dist/lib-BWr-5mFO.mjs.map +1 -0
  21. package/dist/{next/lib.d.ts → lib.d.ts} +16 -2
  22. package/dist/{next/lib.mjs → lib.mjs} +32 -3
  23. package/dist/lib.mjs.map +1 -0
  24. package/dist/node.d.ts +15 -3
  25. package/dist/node.mjs +36 -174
  26. package/dist/node.mjs.map +1 -1
  27. package/dist/{next/oauth-scopes.mjs → oauth-scopes.mjs} +1 -1
  28. package/dist/oauth-scopes.mjs.map +1 -0
  29. package/dist/{next/oauth.mjs → oauth.mjs} +14 -2
  30. package/dist/oauth.mjs.map +1 -0
  31. package/dist/principal.d.ts +8 -0
  32. package/dist/principal.mjs +8 -0
  33. package/dist/principal.mjs.map +1 -0
  34. package/dist/project-ingress.d.ts +58 -0
  35. package/dist/project-ingress.mjs +104 -0
  36. package/dist/project-ingress.mjs.map +1 -0
  37. package/dist/{next/react.mjs → react.mjs} +12 -12
  38. package/dist/react.mjs.map +1 -0
  39. package/dist/sdk/auth.d.ts +25 -0
  40. package/dist/sdk/index.d.ts +155 -0
  41. package/dist/sdk/record-pipelined-steps.d.ts +19 -0
  42. package/dist/sdk.mjs +245 -2
  43. package/dist/sdk.mjs.map +1 -0
  44. package/dist/{next/stream → stream}/processor.d.ts +28 -23
  45. package/dist/{next/stream → stream}/processor.mjs +48 -25
  46. package/dist/stream/processor.mjs.map +1 -0
  47. package/dist/{next/stream → stream}/run.d.ts +9 -6
  48. package/dist/{next/stream → stream}/run.mjs +13 -8
  49. package/dist/stream/run.mjs.map +1 -0
  50. package/dist/stream/test-support.d.ts +45 -0
  51. package/dist/stream/test-support.mjs +196 -0
  52. package/dist/stream/test-support.mjs.map +1 -0
  53. package/package.json +65 -219
  54. package/THIRD_PARTY_NOTICES.md +0 -55
  55. package/bin/iterate.js +0 -94
  56. package/dist/api-url-B6404M82.mjs +0 -17
  57. package/dist/api-url-B6404M82.mjs.map +0 -1
  58. package/dist/app-ref-BipL0feU.mjs +0 -35
  59. package/dist/app-ref-BipL0feU.mjs.map +0 -1
  60. package/dist/app-ref-C1CrgXqX.mjs +0 -7
  61. package/dist/app-ref-C1CrgXqX.mjs.map +0 -1
  62. package/dist/app-ref-DYai_om1.mjs +0 -7
  63. package/dist/app-ref-DYai_om1.mjs.map +0 -1
  64. package/dist/cli-D0c-pDL_.mjs +0 -1010
  65. package/dist/cli-D0c-pDL_.mjs.map +0 -1
  66. package/dist/client.d.ts +0 -3
  67. package/dist/cloudflare-BTm90gQ4.mjs +0 -951
  68. package/dist/cloudflare-BTm90gQ4.mjs.map +0 -1
  69. package/dist/contract-s4FW4eES.mjs +0 -309
  70. package/dist/contract-s4FW4eES.mjs.map +0 -1
  71. package/dist/document-review/index.d.ts +0 -5
  72. package/dist/document-review/types.d.ts +0 -107
  73. package/dist/document-review.mjs +0 -7015
  74. package/dist/document-review.mjs.map +0 -1
  75. package/dist/durable-object-processor-durability-CNsTjAJS.mjs +0 -205
  76. package/dist/durable-object-processor-durability-CNsTjAJS.mjs.map +0 -1
  77. package/dist/idempotency-DleloJNt.mjs +0 -28
  78. package/dist/idempotency-DleloJNt.mjs.map +0 -1
  79. package/dist/index.d.mts +0 -5
  80. package/dist/index.mjs +0 -8
  81. package/dist/index.mjs.map +0 -1
  82. package/dist/itx/api-url.d.ts +0 -6
  83. package/dist/itx/itx-node-client.d.ts +0 -65
  84. package/dist/itx/itx-session.d.ts +0 -215
  85. package/dist/itx/owned-rpc-session.d.ts +0 -14
  86. package/dist/itx/query-client.d.ts +0 -10
  87. package/dist/itx-api.generated.d.ts +0 -6195
  88. package/dist/itx-session-sjud8GiT.mjs +0 -534
  89. package/dist/itx-session-sjud8GiT.mjs.map +0 -1
  90. package/dist/live-state-BJNqOwFw.mjs +0 -299
  91. package/dist/live-state-BJNqOwFw.mjs.map +0 -1
  92. package/dist/next/app-server.mjs.map +0 -1
  93. package/dist/next/app-session.mjs.map +0 -1
  94. package/dist/next/app.mjs.map +0 -1
  95. package/dist/next/client/oauth.d.ts +0 -12
  96. package/dist/next/client.mjs +0 -156
  97. package/dist/next/client.mjs.map +0 -1
  98. package/dist/next/expression.mjs.map +0 -1
  99. package/dist/next/lib.mjs.map +0 -1
  100. package/dist/next/oauth-scopes.mjs.map +0 -1
  101. package/dist/next/oauth.mjs.map +0 -1
  102. package/dist/next/principal.d.ts +0 -64
  103. package/dist/next/principal.mjs +0 -98
  104. package/dist/next/principal.mjs.map +0 -1
  105. package/dist/next/project-ingress.d.ts +0 -37
  106. package/dist/next/project-ingress.mjs +0 -75
  107. package/dist/next/project-ingress.mjs.map +0 -1
  108. package/dist/next/react.mjs.map +0 -1
  109. package/dist/next/sdk/auth.d.ts +0 -5
  110. package/dist/next/sdk/index.d.ts +0 -112
  111. package/dist/next/sdk.mjs +0 -139
  112. package/dist/next/sdk.mjs.map +0 -1
  113. package/dist/next/stream/processor.mjs.map +0 -1
  114. package/dist/next/stream/run.mjs.map +0 -1
  115. package/dist/next-node.d.ts +0 -15
  116. package/dist/next-node.mjs +0 -51
  117. package/dist/next-node.mjs.map +0 -1
  118. package/dist/processor-host-capabilities-BMFH3KTM.mjs +0 -56
  119. package/dist/processor-host-capabilities-BMFH3KTM.mjs.map +0 -1
  120. package/dist/processors/cloudflare.d.ts +0 -3
  121. package/dist/processors/durable-object-processor-durability.d.ts +0 -79
  122. package/dist/processors/event-consumption-metrics.d.ts +0 -82
  123. package/dist/processors/idempotency.d.ts +0 -13
  124. package/dist/processors/index.d.ts +0 -12
  125. package/dist/processors/processor-contracts.d.ts +0 -342
  126. package/dist/processors/processor-facet.d.ts +0 -186
  127. package/dist/processors/processor-host-capabilities.d.ts +0 -60
  128. package/dist/processors/prompt-sections.d.ts +0 -17
  129. package/dist/processors/rpc-types.d.ts +0 -515
  130. package/dist/processors/schemas.d.ts +0 -102
  131. package/dist/processors/stream-handle.d.ts +0 -45
  132. package/dist/processors/stream-processor-keepalive.d.ts +0 -95
  133. package/dist/processors/stream-processor-registry.d.ts +0 -233
  134. package/dist/processors/stream-processor-runner.d.ts +0 -289
  135. package/dist/processors/stream-processor.d.ts +0 -339
  136. package/dist/processors/stream-runtime-metrics.d.ts +0 -107
  137. package/dist/processors/testing.d.ts +0 -302
  138. package/dist/processors-BoNyeBfQ.mjs +0 -10
  139. package/dist/processors-BoNyeBfQ.mjs.map +0 -1
  140. package/dist/processors-cloudflare.mjs +0 -3
  141. package/dist/processors-testing.mjs +0 -435
  142. package/dist/processors-testing.mjs.map +0 -1
  143. package/dist/processors.mjs +0 -52
  144. package/dist/processors.mjs.map +0 -1
  145. package/dist/protocol-DnK_f2m6.mjs +0 -251
  146. package/dist/protocol-DnK_f2m6.mjs.map +0 -1
  147. package/dist/sdk/capnweb/index.d.ts +0 -2
  148. package/dist/sdk/capnweb/live-state/compact.d.ts +0 -5
  149. package/dist/sdk/capnweb/live-state/diff.d.ts +0 -41
  150. package/dist/sdk/capnweb/live-state/engine.d.ts +0 -44
  151. package/dist/sdk/capnweb/live-state/index.d.ts +0 -41
  152. package/dist/sdk/capnweb/live-state/protocol.d.ts +0 -87
  153. package/dist/sdk/capnweb/live-state/retain.d.ts +0 -23
  154. package/dist/sdk/capnweb/live-state/store.d.ts +0 -20
  155. package/dist/sdk/capnweb/live-state/types.d.ts +0 -11
  156. package/dist/sdk/capnweb/react.d.ts +0 -45
  157. package/dist/sdk/capnweb/react.mjs +0 -316
  158. package/dist/sdk/capnweb/react.mjs.map +0 -1
  159. package/dist/sdk/capnweb.mjs +0 -4
  160. package/dist/sdk/itx/react.d.ts +0 -191
  161. package/dist/sdk/itx/react.mjs +0 -383
  162. package/dist/sdk/itx/react.mjs.map +0 -1
  163. package/dist/sdk-DMB-IM11.mjs +0 -933
  164. package/dist/sdk-DMB-IM11.mjs.map +0 -1
  165. package/dist/sdk.d.ts +0 -339
  166. package/dist/serve-itx.d.ts +0 -46
  167. package/dist/starter-apps/flake-dashboard/app-ref.d.ts +0 -31
  168. package/dist/starter-apps/flake-dashboard/configured-worker.mjs +0 -1055
  169. package/dist/starter-apps/flake-dashboard/configured-worker.mjs.map +0 -1
  170. package/dist/starter-apps/flake-dashboard/contract.d.ts +0 -4839
  171. package/dist/starter-apps/flake-dashboard/contract.mjs +0 -2
  172. package/dist/starter-apps/flake-dashboard/index.d.ts +0 -17
  173. package/dist/starter-apps/flake-dashboard/index.mjs +0 -56
  174. package/dist/starter-apps/flake-dashboard/index.mjs.map +0 -1
  175. package/dist/starter-apps/flake-dashboard/worker.d.ts +0 -4607
  176. package/dist/starter-apps/github-ai-linter/ai-linter.d.ts +0 -8914
  177. package/dist/starter-apps/github-ai-linter/configured-worker.mjs +0 -17987
  178. package/dist/starter-apps/github-ai-linter/configured-worker.mjs.map +0 -1
  179. package/dist/starter-apps/github-ai-linter/contract.d.ts +0 -9193
  180. package/dist/starter-apps/github-ai-linter/index.d.ts +0 -10
  181. package/dist/starter-apps/github-ai-linter/index.mjs +0 -36
  182. package/dist/starter-apps/github-ai-linter/index.mjs.map +0 -1
  183. package/dist/starter-apps/github-ai-linter/prompt.d.ts +0 -13
  184. package/dist/starter-apps/github-ai-linter/review-bot.d.ts +0 -808
  185. package/dist/starter-apps/github-ai-linter/rules.d.ts +0 -34
  186. package/dist/starter-apps/github-ai-linter/worker-ref.d.ts +0 -19
  187. package/dist/starter-apps/github-ai-linter/worker.d.ts +0 -19
  188. package/dist/starter-apps/github-ai-linter/worker.mjs +0 -947
  189. package/dist/starter-apps/github-ai-linter/worker.mjs.map +0 -1
  190. package/dist/starter-apps/guestbook/app-ref.d.ts +0 -27
  191. package/dist/starter-apps/guestbook/client.d.ts +0 -7
  192. package/dist/starter-apps/guestbook/client.mjs +0 -59
  193. package/dist/starter-apps/guestbook/configured-worker.mjs +0 -205
  194. package/dist/starter-apps/guestbook/configured-worker.mjs.map +0 -1
  195. package/dist/starter-apps/guestbook/index.d.ts +0 -9
  196. package/dist/starter-apps/guestbook/index.mjs +0 -31
  197. package/dist/starter-apps/guestbook/index.mjs.map +0 -1
  198. package/dist/starter-apps/guestbook/processor.d.ts +0 -2267
  199. package/dist/starter-apps/guestbook/worker.d.ts +0 -26
  200. package/dist/starter-apps/guestbook/worker.mjs +0 -191
  201. package/dist/starter-apps/guestbook/worker.mjs.map +0 -1
  202. package/dist/starter-apps/media/configured-worker.mjs +0 -577
  203. package/dist/starter-apps/media/configured-worker.mjs.map +0 -1
  204. package/dist/starter-apps/media/index.mjs +0 -36
  205. package/dist/starter-apps/media/index.mjs.map +0 -1
  206. package/dist/starter-apps/media/ref.mjs +0 -20
  207. package/dist/starter-apps/media/ref.mjs.map +0 -1
  208. package/dist/starter-apps/media/worker.mjs +0 -579
  209. package/dist/starter-apps/media/worker.mjs.map +0 -1
  210. package/dist/starter-apps/notes/configured-worker.mjs +0 -6134
  211. package/dist/starter-apps/notes/configured-worker.mjs.map +0 -1
  212. package/dist/starter-apps/notes/index.mjs +0 -23
  213. package/dist/starter-apps/notes/index.mjs.map +0 -1
  214. package/dist/starter-apps/notes/ref.mjs +0 -21
  215. package/dist/starter-apps/notes/ref.mjs.map +0 -1
  216. package/dist/starter-apps/notes/worker.mjs +0 -427
  217. package/dist/starter-apps/notes/worker.mjs.map +0 -1
  218. package/dist/starter-apps/todo/client.mjs +0 -59
  219. package/dist/starter-apps/todo/configured-worker.mjs +0 -2864
  220. package/dist/starter-apps/todo/configured-worker.mjs.map +0 -1
  221. package/dist/starter-apps/todo/index.d.ts +0 -8
  222. package/dist/starter-apps/todo/index.mjs +0 -29
  223. package/dist/starter-apps/todo/index.mjs.map +0 -1
  224. package/dist/stream-processor-keepalive-DAQTP6m3.mjs +0 -2082
  225. package/dist/stream-processor-keepalive-DAQTP6m3.mjs.map +0 -1
  226. package/dist/usingCtx-mZx5nsAW.mjs +0 -11800
  227. package/dist/usingCtx-mZx5nsAW.mjs.map +0 -1
  228. package/dist/worker-ref-DZxPDmb_.mjs +0 -390
  229. package/dist/worker-ref-DZxPDmb_.mjs.map +0 -1
  230. package/dist/worker.d.mts +0 -33
  231. package/dist/worker.mjs +0 -18
  232. package/dist/worker.mjs.map +0 -1
  233. package/menubar/Iterate.entitlements +0 -12
  234. package/menubar/Iterate.swift +0 -914
  235. package/menubar/IterateIcon.swift +0 -145
  236. package/menubar/README.md +0 -28
  237. package/menubar/build-menubar-app.sh +0 -59
  238. /package/dist/{next/api.mjs → api.mjs} +0 -0
  239. /package/dist/{next/app-session.d.ts → app-session.d.ts} +0 -0
  240. /package/dist/{next/app.d.ts → app.d.ts} +0 -0
  241. /package/dist/{next/oauth-scopes.d.ts → oauth-scopes.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"configured-worker.mjs","names":["z.object","z\n .object","z.string","z\n .array","z\n .string","z\n .object","#ensureInitialized","guestbookClientSource","#app","#liveState"],"sources":["../../../src/starter-apps/guestbook/app-ref.ts","../../../src/starter-apps/guestbook/processor.ts","../../../src/starter-apps/guestbook/worker.ts"],"sourcesContent":["// The Guestbook's physical identity. Keeping the durable key stable preserves\n// its processor storage while the implementation moves out of config repos.\nimport type { StreamEventInput } from \"../../processors/index.ts\";\nimport type { StatefulDynamicWorkerRef } from \"../../sdk.ts\";\n\nexport const guestbookStreamPath = \"/guestbook\";\n\nexport const guestbookWorkerRef = {\n className: \"GuestbookApp\",\n // \"-stream\" keeps clear of a retired predecessor's durable identity.\n durableWorkerKey: \"app-guestbook-stream\",\n path: \"/\",\n source: {\n createWorker: {\n entryPoint: \"node_modules/iterate/dist/starter-apps/guestbook/configured-worker.mjs\",\n files: {\n include: [\"package.json\"],\n repoPath: \"/repos/config\",\n type: \"repo\",\n },\n },\n },\n type: \"stateful\",\n} satisfies StatefulDynamicWorkerRef;\n\n/**\n * The Guestbook's creation facts. The project worker owns committed event\n * delivery through GuestbookApp.processEvent; no stream ever carries an\n * app-specific subscription for the Guestbook (streams that predate the\n * current subscription model are recreated, not migrated), so there is no\n * retirement fact to append — removing a key that was never configured is a\n * hard error.\n */\nexport function guestbookCreationEvents(): StreamEventInput[] {\n return [\n {\n type: \"events.iterate.com/guestbook/created\",\n payload: { config: { title: \"Guestbook\" } },\n idempotencyKey: \"guestbook/created\",\n },\n ];\n}\n","// The guestbook's stream processor: it folds the signatures on the project\n// stream at /guestbook into a birth certificate plus an append-only list of\n// entries. The reduce is the whole processor — pure fold, no side effects.\nimport { z } from \"zod\";\nimport { defineProcessorContract, StreamProcessor } from \"../../processors/index.ts\";\nimport type { ProcessorState, ReduceArgs } from \"../../processors/index.ts\";\n\nexport const GuestbookProcessorContract = defineProcessorContract({\n slug: \"guestbook\",\n version: \"0.1.0\",\n description: \"Reduces guestbook signatures on /guestbook.\",\n stateSchema: z.object({\n birthCertificate: z\n .object({\n config: z.object({\n title: z.string().meta({ description: \"Display title shown on the public page.\" }),\n }),\n })\n .nullable()\n .default(null)\n .meta({\n description: \"Existence marker: null until guestbook/created reduces. Signing requires it.\",\n }),\n entries: z\n .array(\n z.object({\n name: z.string().meta({ description: \"Signer display name.\" }),\n message: z.string().meta({ description: \"Note left by the signer.\" }),\n signedAt: z\n .string()\n .meta({ description: \"ISO-8601 time from the stream event createdAt.\" }),\n }),\n )\n .default([])\n .meta({ description: \"Signatures in stream order (oldest first).\" }),\n }),\n events: {\n \"events.iterate.com/guestbook/created\": {\n description:\n \"The guestbook exists: its birth certificate, the first event in its domain history. \" +\n \"Appended (idempotency-keyed) by whoever signs first or opens the API.\",\n payloadSchema: z.object({\n config: z\n .object({\n title: z.string().meta({ description: \"Display title for the guestbook.\" }),\n })\n .meta({ description: \"Initial configuration.\" }),\n }),\n examples: [\n {\n description: \"A guestbook born with its display title.\",\n payload: { config: { title: \"Guestbook\" } },\n },\n ],\n },\n \"events.iterate.com/guestbook/entry-signed\": {\n description: \"Someone signed the guestbook: their name and message.\",\n payloadSchema: z.object({\n name: z.string().trim().min(1).meta({ description: \"Signer display name.\" }),\n message: z.string().trim().min(1).meta({ description: \"Note left by the signer.\" }),\n }),\n examples: [\n {\n description: \"A visitor left a note.\",\n payload: { name: \"Ada\", message: \"Lovely worker you have here.\" },\n },\n ],\n },\n },\n consumes: [\"events.iterate.com/guestbook/created\", \"events.iterate.com/guestbook/entry-signed\"],\n emits: [],\n});\nexport type GuestbookProcessorContract = typeof GuestbookProcessorContract;\n\nexport type GuestbookState = ProcessorState<GuestbookProcessorContract>;\n\nexport class GuestbookProcessor extends StreamProcessor<GuestbookProcessorContract> {\n readonly contract = GuestbookProcessorContract;\n\n protected override reduce({ event, state }: ReduceArgs<GuestbookProcessorContract>) {\n switch (event.type) {\n case \"events.iterate.com/guestbook/created\":\n // Idempotency-keyed at the source, but a duplicate that slips through\n // folds to a no-op rather than wedging the frame.\n if (state.birthCertificate !== null) return state;\n return { ...state, birthCertificate: event.payload };\n case \"events.iterate.com/guestbook/entry-signed\":\n return {\n ...state,\n entries: [...state.entries, { ...event.payload, signedAt: event.createdAt }],\n };\n default:\n return state;\n }\n }\n}\n","/// <reference path=\"./virtual-client.d.ts\" />\nimport guestbookClientSource from \"iterate:guestbook-client-source\";\nimport {\n LiveStateRpcTarget,\n RpcTarget,\n newWorkersWebSocketRpcResponse,\n type LiveStateRpc,\n} from \"../../sdk/capnweb/index.ts\";\nimport type { StreamProcessorRegistry } from \"../../processors/cloudflare.ts\";\nimport {\n StreamProcessorDurableObject,\n type ProcessorHostDeps,\n type StreamEvent,\n} from \"../../sdk.ts\";\nimport { guestbookCreationEvents, guestbookStreamPath } from \"./app-ref.ts\";\nimport { GuestbookProcessor, type GuestbookState } from \"./processor.ts\";\n\n/** One packaged Durable Object owns the page, API, processor, and live value.\n * `alarm()`, the `processor` wake door, `snapshot()`, and `registry()` come\n * from {@link StreamProcessorDurableObject}; all this class writes is how to\n * build its processor plus its own HTTP + append verbs. */\nexport class GuestbookApp extends StreamProcessorDurableObject<GuestbookState> {\n protected readonly streamPath = guestbookStreamPath;\n protected createProcessor(deps: ProcessorHostDeps) {\n return new GuestbookProcessor(deps);\n }\n\n /** Lazily initialize the stream. The idempotency-keyed creation fact may be\n * offered by every caller. */\n async #ensureInitialized(): Promise<StreamProcessorRegistry<GuestbookState>> {\n const registry = await this.registry();\n await registry.catchUp(\"guestbook\");\n using project = await this.env.ITX.get();\n await project.streams.get(guestbookStreamPath).append(...guestbookCreationEvents());\n await registry.catchUp(\"guestbook\");\n return registry;\n }\n\n /** Project-worker event delivery calls this after a durable Guestbook event\n * commits. Catch-up owns validation, ordering, checkpointing, and dedupe. */\n async syncEvent(event: StreamEvent): Promise<void> {\n if (event.path !== guestbookStreamPath) return;\n const registry = await this.#ensureInitialized();\n await registry.catchUp(\"guestbook\");\n registry.refreshLive();\n }\n\n /** Internal worker RPC surface used to verify source upgrades and delivery. */\n async getState(): Promise<GuestbookState> {\n await this.#ensureInitialized();\n return (await this.snapshot()).state;\n }\n\n async sign(name: string, message: string): Promise<void> {\n const trimmedName = name.trim().slice(0, 80);\n const trimmedMessage = message.trim().slice(0, 500);\n if (trimmedName.length === 0 || trimmedMessage.length === 0) {\n throw new TypeError(\"Name and message are required\");\n }\n const registry = await this.#ensureInitialized();\n using project = await this.env.ITX.get();\n await project.streams.get(guestbookStreamPath).append({\n type: \"events.iterate.com/guestbook/entry-signed\",\n payload: { message: trimmedMessage, name: trimmedName },\n idempotencyKey: `guestbook/entry:${crypto.randomUUID()}`,\n });\n await registry.catchUp(\"guestbook\");\n registry.refreshLive();\n }\n\n async fetch(request: Request): Promise<Response> {\n const url = new URL(request.url);\n if (url.pathname === \"/api\") {\n const registry = await this.#ensureInitialized();\n await registry.loadAndRefreshLive();\n return newWorkersWebSocketRpcResponse(request, new GuestbookApi(this, registry));\n }\n if (request.method === \"GET\" && url.pathname === \"/apps/guestbook/client.js\") {\n return new Response(guestbookClientSource, {\n headers: {\n \"content-type\": \"application/javascript; charset=utf-8\",\n \"x-content-type-options\": \"nosniff\",\n },\n });\n }\n if (request.method !== \"GET\" || url.pathname !== \"/\") {\n return new Response(\"not found\", { status: 404 });\n }\n return new Response(\n `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>Guestbook</title>\n <style>\n :root { color-scheme: light dark; font-family: system-ui, sans-serif; }\n body { margin: 0; padding: 2rem; }\n main { margin: 0 auto; max-width: 38rem; }\n form { display: grid; gap: .75rem; }\n input, textarea, button { font: inherit; padding: .6rem; }\n article { border-block-start: 1px solid #8886; margin-block-start: 1.25rem; padding-block-start: 1rem; }\n time { opacity: .65; }\n [role=\"alert\"] { color: #c33; }\n </style>\n </head>\n <body>\n <main id=\"root\"><p>Loading…</p></main>\n <script type=\"module\" src=\"/apps/guestbook/client.js\"></script>\n </body>\n</html>`,\n {\n headers: {\n \"content-type\": \"text/html; charset=utf-8\",\n \"x-content-type-options\": \"nosniff\",\n },\n },\n );\n }\n}\n\nexport class GuestbookApi extends RpcTarget {\n readonly #app: GuestbookApp;\n readonly #liveState: LiveStateRpcTarget<GuestbookState>;\n\n constructor(app: GuestbookApp, registry: StreamProcessorRegistry<GuestbookState>) {\n super();\n this.#app = app;\n this.#liveState = new LiveStateRpcTarget(registry);\n }\n\n get liveState(): LiveStateRpc<GuestbookState> {\n return this.#liveState;\n }\n\n async sign(name: string, message: string): Promise<void> {\n await this.#app.sign(name, message);\n }\n}\n"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { ItxBinding, StreamEvent } from "../../sdk.ts";
2
- export declare const GuestbookApp: {
3
- create(env: {
4
- ITX: Pick<ItxBinding, "fetch" | "get">;
5
- }): {
6
- fetch(request: Request): Promise<Response>;
7
- processEvent(event: StreamEvent): Promise<void>;
8
- };
9
- };
@@ -1,31 +0,0 @@
1
- import { t as _usingCtx } from "../../usingCtx-inzbY1Qz.mjs";
2
- import { r as guestbookWorkerRef } from "../../app-ref-BipL0feU.mjs";
3
- //#region src/starter-apps/guestbook/index.ts
4
- const GuestbookApp = { create(env) {
5
- return {
6
- async fetch(request) {
7
- const headers = new Headers(request.headers);
8
- headers.set("x-iterate-worker-dispatch", JSON.stringify({
9
- buildBudgetMs: 15e3,
10
- ref: guestbookWorkerRef
11
- }));
12
- return await env.ITX.fetch(new Request(request, { headers }));
13
- },
14
- async processEvent(event) {
15
- try {
16
- var _usingCtx$1 = _usingCtx();
17
- if (event.path !== "/guestbook") return;
18
- const project = _usingCtx$1.u(await env.ITX.get());
19
- await _usingCtx$1.u(project.workers.get(guestbookWorkerRef)).syncEvent(event);
20
- } catch (_) {
21
- _usingCtx$1.e = _;
22
- } finally {
23
- _usingCtx$1.d();
24
- }
25
- }
26
- };
27
- } };
28
- //#endregion
29
- export { GuestbookApp };
30
-
31
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/starter-apps/guestbook/index.ts"],"sourcesContent":["import type { DynamicWorkerCapability, ItxBinding, StreamEvent } from \"../../sdk.ts\";\nimport { guestbookStreamPath, guestbookWorkerRef } from \"./app-ref.ts\";\nimport type { GuestbookApp as GuestbookWorker } from \"./worker.ts\";\n\nexport const GuestbookApp = {\n create(env: { ITX: Pick<ItxBinding, \"fetch\" | \"get\"> }) {\n return {\n async fetch(request: Request): Promise<Response> {\n const headers = new Headers(request.headers);\n headers.set(\n \"x-iterate-worker-dispatch\",\n JSON.stringify({ buildBudgetMs: 15_000, ref: guestbookWorkerRef }),\n );\n return await env.ITX.fetch(new Request(request, { headers }));\n },\n async processEvent(event: StreamEvent): Promise<void> {\n if (event.path !== guestbookStreamPath) return;\n using project = await env.ITX.get();\n using worker = project.workers.get(guestbookWorkerRef) as DynamicWorkerCapability<\n Pick<GuestbookWorker, \"syncEvent\">\n >;\n await worker.syncEvent(event);\n },\n };\n },\n};\n"],"mappings":";;;AAIA,MAAa,eAAe,EAC1B,OAAO,KAAiD;CACtD,OAAO;EACL,MAAM,MAAM,SAAqC;GAC/C,MAAM,UAAU,IAAI,QAAQ,QAAQ,OAAO;GAC3C,QAAQ,IACN,6BACA,KAAK,UAAU;IAAE,eAAe;IAAQ,KAAK;GAAmB,CAAC,CACnE;GACA,OAAO,MAAM,IAAI,IAAI,MAAM,IAAI,QAAQ,SAAS,EAAE,QAAQ,CAAC,CAAC;EAC9D;EACA,MAAM,aAAa,OAAmC;;;IACpD,IAAI,MAAM,SAAA,cAA8B;IACxC,MAAM,UAAA,YAAA,EAAU,MAAM,IAAI,IAAI,IAAI,CAAA;IAIlC,MAAA,YAAA,EAHe,QAAQ,QAAQ,IAAI,kBAAkB,CAG1C,CAAC,CAAC,UAAU,KAAK;;;;;;EAC9B;CACF;AACF,EACF"}