@nimbus-sh/worker 0.9.0 → 0.11.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 (286) hide show
  1. package/NOTICE.md +5 -0
  2. package/README.md +10 -0
  3. package/dist/_shared/session-router.d.ts +7 -0
  4. package/dist/_shared/session-router.d.ts.map +1 -1
  5. package/dist/_shared/session-router.js +7 -0
  6. package/dist/bindings/body.d.ts +6 -0
  7. package/dist/bindings/body.d.ts.map +1 -0
  8. package/dist/bindings/body.js +37 -0
  9. package/dist/bindings/kv.d.ts +0 -2
  10. package/dist/bindings/kv.d.ts.map +1 -1
  11. package/dist/bindings/kv.js +3 -42
  12. package/dist/bindings/r2.d.ts +0 -2
  13. package/dist/bindings/r2.d.ts.map +1 -1
  14. package/dist/bindings/r2.js +4 -44
  15. package/dist/esbuild-cli-artifact.generated.d.ts +18 -0
  16. package/dist/esbuild-cli-artifact.generated.d.ts.map +1 -0
  17. package/dist/esbuild-cli-artifact.generated.js +17 -0
  18. package/dist/esbuild-wasm-bundle.generated.d.ts +24 -24
  19. package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -1
  20. package/dist/esbuild-wasm-bundle.generated.js +24 -24
  21. package/dist/facets/cirrus-real.d.ts.map +1 -1
  22. package/dist/facets/cirrus-real.js +11 -6
  23. package/dist/facets/compose.d.ts +11 -7
  24. package/dist/facets/compose.d.ts.map +1 -1
  25. package/dist/facets/compose.js +8 -31
  26. package/dist/facets/data-plan.d.ts +79 -0
  27. package/dist/facets/data-plan.d.ts.map +1 -0
  28. package/dist/facets/data-plan.js +477 -0
  29. package/dist/facets/esbuild-bundle-pool.d.ts +1 -1
  30. package/dist/facets/esbuild-bundle-pool.js +3 -3
  31. package/dist/facets/esbuild-transform.d.ts +38 -8
  32. package/dist/facets/esbuild-transform.d.ts.map +1 -1
  33. package/dist/facets/esbuild-transform.js +219 -19
  34. package/dist/facets/exec-telemetry.d.ts +7 -3
  35. package/dist/facets/exec-telemetry.d.ts.map +1 -1
  36. package/dist/facets/manager.d.ts +198 -69
  37. package/dist/facets/manager.d.ts.map +1 -1
  38. package/dist/facets/manager.js +1276 -652
  39. package/dist/facets/opencode-staging.d.ts +0 -2
  40. package/dist/facets/opencode-staging.d.ts.map +1 -1
  41. package/dist/facets/opencode-staging.js +5 -11
  42. package/dist/facets/process.d.ts +4 -0
  43. package/dist/facets/process.d.ts.map +1 -1
  44. package/dist/facets/process.js +3 -0
  45. package/dist/facets/read-profile.d.ts +149 -0
  46. package/dist/facets/read-profile.d.ts.map +1 -0
  47. package/dist/facets/read-profile.js +483 -0
  48. package/dist/facets/real-vite-hmr.d.ts +2 -0
  49. package/dist/facets/real-vite-hmr.d.ts.map +1 -1
  50. package/dist/facets/real-vite-hmr.js +3 -2
  51. package/dist/facets/resident-identity.d.ts +0 -1
  52. package/dist/facets/resident-identity.d.ts.map +1 -1
  53. package/dist/facets/resident-identity.js +0 -3
  54. package/dist/facets/wasm-swap-registry.d.ts +34 -25
  55. package/dist/facets/wasm-swap-registry.d.ts.map +1 -1
  56. package/dist/facets/wasm-swap-registry.js +62 -56
  57. package/dist/facets/ws-terminal.d.ts +4 -4
  58. package/dist/facets/ws-terminal.d.ts.map +1 -1
  59. package/dist/facets/ws-terminal.js +4 -5
  60. package/dist/git/commands.d.ts +33 -10
  61. package/dist/git/commands.d.ts.map +1 -1
  62. package/dist/git/commands.js +1891 -197
  63. package/dist/git/network-facet.d.ts +12 -2
  64. package/dist/git/network-facet.d.ts.map +1 -1
  65. package/dist/git/network-facet.js +69 -18
  66. package/dist/git/unified-diff.d.ts +74 -0
  67. package/dist/git/unified-diff.d.ts.map +1 -0
  68. package/dist/git/unified-diff.js +676 -0
  69. package/dist/git-bundle.generated.d.ts +7 -11
  70. package/dist/git-bundle.generated.d.ts.map +1 -1
  71. package/dist/git-bundle.generated.js +7 -11
  72. package/dist/hosted/commands.d.ts.map +1 -1
  73. package/dist/hosted/commands.js +64 -245
  74. package/dist/hosted/runtime.d.ts +22 -15
  75. package/dist/hosted/runtime.d.ts.map +1 -1
  76. package/dist/hosted/runtime.js +72 -14
  77. package/dist/hosted/services.d.ts +8 -1
  78. package/dist/hosted/services.d.ts.map +1 -1
  79. package/dist/hosted/services.js +12 -13
  80. package/dist/hosted/session.d.ts +165 -0
  81. package/dist/hosted/session.d.ts.map +1 -0
  82. package/dist/hosted/session.js +132 -0
  83. package/dist/loaders/generated-workers.d.ts +6 -3
  84. package/dist/loaders/generated-workers.d.ts.map +1 -1
  85. package/dist/loaders/generated-workers.js +8 -5
  86. package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -1
  87. package/dist/loaders/npm-resolve-preamble.js +0 -27
  88. package/dist/loaders/pre-bundle-preamble.d.ts +6 -3
  89. package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -1
  90. package/dist/loaders/pre-bundle-preamble.js +13 -8
  91. package/dist/node-shims-artifact.generated.d.ts +13 -4
  92. package/dist/node-shims-artifact.generated.d.ts.map +1 -1
  93. package/dist/node-shims-artifact.generated.js +16 -7
  94. package/dist/npm/bin-links.d.ts +3 -1
  95. package/dist/npm/bin-links.d.ts.map +1 -1
  96. package/dist/npm/bin-links.js +32 -8
  97. package/dist/npm/cache.d.ts +11 -1
  98. package/dist/npm/cache.d.ts.map +1 -1
  99. package/dist/npm/cache.js +21 -7
  100. package/dist/npm/install-batch-facet.d.ts +4 -2
  101. package/dist/npm/install-batch-facet.d.ts.map +1 -1
  102. package/dist/npm/install-batch-facet.js +32 -18
  103. package/dist/npm/installer.d.ts +23 -3
  104. package/dist/npm/installer.d.ts.map +1 -1
  105. package/dist/npm/installer.js +330 -131
  106. package/dist/npm/npx-install.d.ts +3 -1
  107. package/dist/npm/npx-install.d.ts.map +1 -1
  108. package/dist/npm/npx-install.js +4 -1
  109. package/dist/npm/package-lock.d.ts +32 -0
  110. package/dist/npm/package-lock.d.ts.map +1 -0
  111. package/dist/npm/package-lock.js +65 -0
  112. package/dist/npm/placement.d.ts +16 -0
  113. package/dist/npm/placement.d.ts.map +1 -0
  114. package/dist/npm/placement.js +33 -0
  115. package/dist/npm/pre-bundle-facet.d.ts +1 -30
  116. package/dist/npm/pre-bundle-facet.d.ts.map +1 -1
  117. package/dist/npm/pre-bundle-facet.js +3 -5
  118. package/dist/npm/r2-cache.d.ts +12 -6
  119. package/dist/npm/r2-cache.d.ts.map +1 -1
  120. package/dist/npm/r2-cache.js +34 -16
  121. package/dist/npm/resolve-one-facet.d.ts +3 -0
  122. package/dist/npm/resolve-one-facet.d.ts.map +1 -1
  123. package/dist/npm/resolve-one-facet.js +15 -3
  124. package/dist/npm/resolver.d.ts +11 -13
  125. package/dist/npm/resolver.d.ts.map +1 -1
  126. package/dist/npm/resolver.js +12 -25
  127. package/dist/opencode-artifact.generated.js +2 -2
  128. package/dist/replica/routing.d.ts +2 -38
  129. package/dist/replica/routing.d.ts.map +1 -1
  130. package/dist/replica/routing.js +3 -55
  131. package/dist/router/index.d.ts.map +1 -1
  132. package/dist/router/index.js +15 -2
  133. package/dist/router/public-directory.d.ts +18 -0
  134. package/dist/router/public-directory.d.ts.map +1 -1
  135. package/dist/router/public-directory.js +1 -1
  136. package/dist/router/remote-api.d.ts +3 -1
  137. package/dist/router/remote-api.d.ts.map +1 -1
  138. package/dist/router/remote-api.js +42 -79
  139. package/dist/runtime/bash-repl.js +2 -2
  140. package/dist/runtime/bun-repl.d.ts.map +1 -1
  141. package/dist/runtime/bun-repl.js +2 -13
  142. package/dist/runtime/cpython-resident.d.ts.map +1 -1
  143. package/dist/runtime/cpython-resident.js +2 -10
  144. package/dist/runtime/esbuild-wasm-bytes.d.ts +37 -18
  145. package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -1
  146. package/dist/runtime/esbuild-wasm-bytes.js +66 -92
  147. package/dist/runtime/facet-loader-host.d.ts.map +1 -1
  148. package/dist/runtime/facet-loader-host.js +0 -7
  149. package/dist/runtime/git-bundle-artifact.d.ts +17 -0
  150. package/dist/runtime/git-bundle-artifact.d.ts.map +1 -0
  151. package/dist/runtime/git-bundle-artifact.js +25 -0
  152. package/dist/runtime/node-repl.d.ts.map +1 -1
  153. package/dist/runtime/node-repl.js +2 -13
  154. package/dist/runtime/node-shims-artifact.d.ts +22 -23
  155. package/dist/runtime/node-shims-artifact.d.ts.map +1 -1
  156. package/dist/runtime/node-shims-artifact.js +48 -78
  157. package/dist/runtime/node-shims.d.ts.map +1 -1
  158. package/dist/runtime/node-shims.js +2358 -996
  159. package/dist/runtime/opencode-artifact.d.ts.map +1 -1
  160. package/dist/runtime/opencode-artifact.js +17 -53
  161. package/dist/runtime/opencode-facet-runner.d.ts +3 -6
  162. package/dist/runtime/opencode-facet-runner.d.ts.map +1 -1
  163. package/dist/runtime/opencode-facet-runner.js +45 -10
  164. package/dist/runtime/opentui-wasm-bytes.d.ts.map +1 -1
  165. package/dist/runtime/opentui-wasm-bytes.js +16 -49
  166. package/dist/runtime/package-manager.d.ts +0 -2
  167. package/dist/runtime/package-manager.d.ts.map +1 -1
  168. package/dist/runtime/package-manager.js +0 -3
  169. package/dist/runtime/python-repl.d.ts.map +1 -1
  170. package/dist/runtime/python-repl.js +4 -35
  171. package/dist/runtime/repl-session.d.ts +10 -0
  172. package/dist/runtime/repl-session.d.ts.map +1 -1
  173. package/dist/runtime/repl-session.js +7 -0
  174. package/dist/runtime/ruby-repl.d.ts.map +1 -1
  175. package/dist/runtime/ruby-repl.js +2 -2
  176. package/dist/runtime/ruby-resident.d.ts.map +1 -1
  177. package/dist/runtime/ruby-resident.js +41 -51
  178. package/dist/runtime/runtime-catalog.d.ts +10 -3
  179. package/dist/runtime/runtime-catalog.d.ts.map +1 -1
  180. package/dist/runtime/runtime-catalog.js +125 -15
  181. package/dist/runtime/sqlite-wasm-bytes.d.ts +4 -4
  182. package/dist/runtime/sqlite-wasm-bytes.d.ts.map +1 -1
  183. package/dist/runtime/sqlite-wasm-bytes.js +21 -57
  184. package/dist/runtime/staged-source.d.ts +67 -0
  185. package/dist/runtime/staged-source.d.ts.map +1 -0
  186. package/dist/runtime/staged-source.js +113 -0
  187. package/dist/runtime/wasi/preamble.d.ts +0 -22
  188. package/dist/runtime/wasi/preamble.d.ts.map +1 -1
  189. package/dist/runtime/wasi/preamble.js +98 -1425
  190. package/dist/runtime-catalog.generated.js +1 -1
  191. package/dist/session/agent.d.ts +14 -2
  192. package/dist/session/agent.d.ts.map +1 -1
  193. package/dist/session/agent.js +57 -19
  194. package/dist/session/ai.d.ts +0 -11
  195. package/dist/session/ai.d.ts.map +1 -1
  196. package/dist/session/ai.js +0 -4
  197. package/dist/session/fs-watch.d.ts +0 -11
  198. package/dist/session/fs-watch.d.ts.map +1 -1
  199. package/dist/session/fs-watch.js +0 -21
  200. package/dist/session/hibernation.d.ts +68 -2
  201. package/dist/session/hibernation.d.ts.map +1 -1
  202. package/dist/session/hibernation.js +95 -1
  203. package/dist/session/init-phases.d.ts +1 -2
  204. package/dist/session/init-phases.d.ts.map +1 -1
  205. package/dist/session/init-phases.js +1 -2
  206. package/dist/session/init.d.ts.map +1 -1
  207. package/dist/session/init.js +7 -20
  208. package/dist/session/keys.d.ts +0 -3
  209. package/dist/session/keys.d.ts.map +1 -1
  210. package/dist/session/keys.js +0 -3
  211. package/dist/session/legacy-reset.d.ts +11 -0
  212. package/dist/session/legacy-reset.d.ts.map +1 -0
  213. package/dist/session/legacy-reset.js +16 -0
  214. package/dist/session/nimbus-session.d.ts +50 -16
  215. package/dist/session/nimbus-session.d.ts.map +1 -1
  216. package/dist/session/nimbus-session.js +77 -71
  217. package/dist/session/npm-install-port.d.ts.map +1 -1
  218. package/dist/session/npm-install-port.js +2 -0
  219. package/dist/session/programmatic.d.ts +13 -18
  220. package/dist/session/programmatic.d.ts.map +1 -1
  221. package/dist/session/programmatic.js +53 -39
  222. package/dist/session/replica-routes.d.ts +2 -3
  223. package/dist/session/replica-routes.d.ts.map +1 -1
  224. package/dist/session/replica-routes.js +3 -10
  225. package/dist/session/routes.d.ts.map +1 -1
  226. package/dist/session/routes.js +11 -12
  227. package/dist/session/rpc.d.ts +108 -21
  228. package/dist/session/rpc.d.ts.map +1 -1
  229. package/dist/session/rpc.js +194 -39
  230. package/dist/session/start-real-vite.js +2 -2
  231. package/dist/session/state-store.d.ts +1 -17
  232. package/dist/session/state-store.d.ts.map +1 -1
  233. package/dist/session/state-store.js +3 -53
  234. package/dist/session/supervisor-op.d.ts +7 -0
  235. package/dist/session/supervisor-op.d.ts.map +1 -1
  236. package/dist/session/supervisor-op.js +6 -1
  237. package/dist/session/supervisor-rpc.d.ts +116 -19
  238. package/dist/session/supervisor-rpc.d.ts.map +1 -1
  239. package/dist/session/supervisor-rpc.js +194 -84
  240. package/dist/session/vite-command.d.ts.map +1 -1
  241. package/dist/session/vite-command.js +17 -14
  242. package/dist/session/ws.d.ts.map +1 -1
  243. package/dist/session/ws.js +20 -8
  244. package/dist/shell/npm-bin-entrypoints.d.ts.map +1 -1
  245. package/dist/shell/npm-bin-entrypoints.js +30 -5
  246. package/dist/vfs/facet-resident-limits.d.ts +33 -0
  247. package/dist/vfs/facet-resident-limits.d.ts.map +1 -0
  248. package/dist/vfs/facet-resident-limits.js +33 -0
  249. package/dist/vfs/facet-resident-store.d.ts +2 -10
  250. package/dist/vfs/facet-resident-store.d.ts.map +1 -1
  251. package/dist/vfs/facet-resident-store.js +1594 -219
  252. package/dist/workspace-host.d.ts +3 -1
  253. package/dist/workspace-host.d.ts.map +1 -1
  254. package/dist/workspace-host.js +2 -0
  255. package/dist/wrangler/nimbus-wrangler.d.ts +0 -2
  256. package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -1
  257. package/dist/wrangler/nimbus-wrangler.js +8 -22
  258. package/package.json +34 -7
  259. package/public/_assets/esbuild-0.24.2.js +2380 -0
  260. package/public/_assets/opencode/1.16.2/index-attach.js +2 -2
  261. package/public/_assets/runtime/esbuild-cli-c4fda380d52befc1.js +6892 -0
  262. package/public/_assets/runtime/git-de3e60c9f3ff006a.js +103 -0
  263. package/public/_assets/runtime/{node-shims-acaa037e6d26ec0d.js → node-shims-06565b121555c194.js} +2879 -992
  264. package/public/_assets/runtime/resident-store-6ffb1939c53d982f.js +2264 -0
  265. package/public/_assets/runtime/vfs-write-ledger-e501e8fc793bc2c1.js +889 -0
  266. package/scripts/build-opencode-attach-entry.mjs +51 -1
  267. package/scripts/bundle-esbuild-wasm.mjs +55 -39
  268. package/scripts/bundle-facet-workers.mjs +159 -10
  269. package/scripts/bundle-git.mjs +88 -27
  270. package/scripts/bundle-node-shims.mjs +72 -46
  271. package/scripts/bundle-runtime.mjs +18 -421
  272. package/scripts/cf-git-patch.mjs +137 -0
  273. package/scripts/patch-install-deps.mjs +49 -96
  274. package/scripts/runtime-specs.mjs +435 -0
  275. package/vendor/git-http.generated.d.ts +82 -0
  276. package/vendor/git-upstream.generated.d.ts +4378 -0
  277. package/vendor/git.LICENSE +7 -0
  278. package/vendor/git.generated.d.mts +21 -0
  279. package/vendor/git.generated.mjs +103 -0
  280. package/dist/replica/suspension.d.ts +0 -36
  281. package/dist/replica/suspension.d.ts.map +0 -1
  282. package/dist/replica/suspension.js +0 -49
  283. package/dist/runtime/static-server.d.ts +0 -3
  284. package/dist/runtime/static-server.d.ts.map +0 -1
  285. package/dist/runtime/static-server.js +0 -133
  286. package/scripts/clean-dist.mjs +0 -7
package/NOTICE.md CHANGED
@@ -4,3 +4,8 @@ This package is part of Nimbus. It includes the Worker runtime, generated
4
4
  browser assets, runtime packaging scripts, and integration code for third-party
5
5
  runtime components. See the project notices at
6
6
  https://github.com/AshishKumar4/Nimbus/blob/main/NOTICE.md.
7
+
8
+ The generated Git module in `vendor/git.generated.mjs` contains the cf-git
9
+ fork of isomorphic-git, with Nimbus' tracked build-time patch. Its MIT license
10
+ is included in `vendor/git.LICENSE`; bundled dependency notices are retained
11
+ in the generated module.
package/README.md CHANGED
@@ -83,6 +83,8 @@ export default createNimbusHandler({
83
83
  "compatibility_date": "2026-04-01",
84
84
  "compatibility_flags": ["nodejs_compat"],
85
85
  "placement": { "mode": "smart" },
86
+ // Shell commands run in the session DO. The 30 s default kills long ones.
87
+ "limits": { "cpu_ms": 300000 },
86
88
  "assets": {
87
89
  "directory": "node_modules/@nimbus-sh/worker/public",
88
90
  "binding": "ASSETS",
@@ -213,6 +215,13 @@ Applications normally call it through `Nimbus.connect({ endpoint, token,
213
215
  config })`. The route requires a valid Nimbus JWT and `sandbox:use` scope.
214
216
  `box.destroy()` additionally requires `session:destroy` or `session:admin`.
215
217
 
218
+ With the remote API enabled, `DELETE /s/<id>/` is the same operation under
219
+ the same authorization as `box.destroy()`, and answers
220
+ `{ ok: true, result: { ok, killed, destroyedAt, reason } }`. An
221
+ `X-Nimbus-Cleanup-Reason` header supplies the reason. The session root
222
+ serves the UI only to `GET` and `HEAD`; any other method is `405`, and so is
223
+ `DELETE` when the remote API is off.
224
+
216
225
  For an app server, start the process and expose its virtual port:
217
226
 
218
227
  ```ts
@@ -288,6 +297,7 @@ npx wrangler secret put NIMBUS_CLOUDFLARE_API_TOKEN
288
297
  | `@nimbus-sh/worker` | Runtime implementation package used by the SDK entrypoint. |
289
298
  | `@nimbus-sh/worker/router` | Runtime router implementation and hook types. |
290
299
  | `@nimbus-sh/worker/auth` | Runtime auth implementation re-exported by `@nimbus-sh/sdk/token`. |
300
+ | `@nimbus-sh/worker/workspace-host` | `composeHostedRuntime`: the runtime over a `NimbusWorkspace` in your own Durable Object. Its `lifecycle.schedule` must be backed by an alarm; see [Use as a library](https://nimbus-os.dev/docs/sdk/library/). |
291
301
 
292
302
  ## Required bindings
293
303
 
@@ -75,6 +75,13 @@ export declare const CALLER_SCOPES_HEADER = "x-nimbus-caller-scopes";
75
75
  * starting with that exact prefix-then-colon when JWT_SECRET is set).
76
76
  */
77
77
  export declare const LEGACY_PUBLIC_DO_SEGMENT = "legacy:public:_";
78
+ /**
79
+ * The tenant of every anonymous session a deployment hands out (the hosted
80
+ * demo's `anon:anon:<sid>`). Anyone can mint such sessions, so they are one
81
+ * principal, and one that may read what verified tenants share but never
82
+ * write to it (read-profile.ts).
83
+ */
84
+ export declare const ANONYMOUS_TENANT = "anon";
78
85
  export interface ParsedSessionRoute {
79
86
  /** Session ID portion (unverified until `isValidSessionId` check). */
80
87
  sessionId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session-router.d.ts","sourceRoot":"","sources":["../../src/_shared/session-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,gCAAgC,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAS1D,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAa7E;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AACD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,QAAQ,CAAC,CA8CnB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CA8BT;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAapE"}
1
+ {"version":3,"file":"session-router.d.ts","sourceRoot":"","sources":["../../src/_shared/session-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,gCAAgC,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,oBAAoB,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,SAAS,CAAC;AASvC,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAa7E;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AACD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,QAAQ,CAAC,CA8CnB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CA8BT;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAapE"}
@@ -76,6 +76,13 @@ export const CALLER_SCOPES_HEADER = 'x-nimbus-caller-scopes';
76
76
  * starting with that exact prefix-then-colon when JWT_SECRET is set).
77
77
  */
78
78
  export const LEGACY_PUBLIC_DO_SEGMENT = 'legacy:public:_';
79
+ /**
80
+ * The tenant of every anonymous session a deployment hands out (the hosted
81
+ * demo's `anon:anon:<sid>`). Anyone can mint such sessions, so they are one
82
+ * principal, and one that may read what verified tenants share but never
83
+ * write to it (read-profile.ts).
84
+ */
85
+ export const ANONYMOUS_TENANT = 'anon';
79
86
  /**
80
87
  * Match `/s/<id>(/<rest>)?` with `<id>` being ANY lowercase-letters-digits-
81
88
  * dashes token. Shape validation happens in a second step so we can return
@@ -0,0 +1,6 @@
1
+ import type { CredentialedVfs } from '@nimbus-sh/core/vfs/sqlite-vfs.js';
2
+ type BindingBody = string | ArrayBuffer | ArrayBufferView | ReadableStream<Uint8Array | ArrayBuffer> | Blob | null | undefined;
3
+ export declare function ensureBindingDir(vfs: Pick<CredentialedVfs, 'exists' | 'mkdir'>, path: string): void;
4
+ export declare function coerceBindingBody(value: BindingBody): Promise<Uint8Array>;
5
+ export {};
6
+ //# sourceMappingURL=body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../src/bindings/body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,KAAK,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/H,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEnG;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAuB/E"}
@@ -0,0 +1,37 @@
1
+ export function ensureBindingDir(vfs, path) {
2
+ if (!vfs.exists(path))
3
+ vfs.mkdir(path, { recursive: true });
4
+ }
5
+ export async function coerceBindingBody(value) {
6
+ if (value == null)
7
+ return new Uint8Array(0);
8
+ if (typeof value === 'string')
9
+ return new TextEncoder().encode(value);
10
+ if (value instanceof Uint8Array)
11
+ return value;
12
+ if (value instanceof ArrayBuffer)
13
+ return new Uint8Array(value);
14
+ if (ArrayBuffer.isView(value))
15
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
16
+ if (typeof value === 'object' && 'getReader' in value && typeof value.getReader === 'function') {
17
+ const chunks = [];
18
+ let total = 0;
19
+ const reader = value.getReader();
20
+ for (;;) {
21
+ const { value: chunk, done } = await reader.read();
22
+ if (done)
23
+ break;
24
+ const bytes = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);
25
+ chunks.push(bytes);
26
+ total += bytes.length;
27
+ }
28
+ const out = new Uint8Array(total);
29
+ let offset = 0;
30
+ for (const chunk of chunks) {
31
+ out.set(chunk, offset);
32
+ offset += chunk.length;
33
+ }
34
+ return out;
35
+ }
36
+ return new TextEncoder().encode(String(value));
37
+ }
@@ -70,8 +70,6 @@ export declare class KvEmulator {
70
70
  put(key: string, value: string | ArrayBuffer | ArrayBufferView | ReadableStream | Uint8Array | null, options?: KvPutOptions): Promise<void>;
71
71
  delete(key: string): Promise<void>;
72
72
  list(options?: KvListOptions): Promise<KvListResult>;
73
- private _ensureDir;
74
- private _coerceBody;
75
73
  private _project;
76
74
  private _readResolved;
77
75
  private _readMeta;
@@ -1 +1 @@
1
- {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/bindings/kv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;IAC9D,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAWD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,MAAM,GAAG,IAAI,CAAiB;AAgBlE,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,KAAK,CAAsB;gBAEvB,IAAI,EAAE,iBAAiB;IAS7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAO/D,eAAe,CAAC,CAAC,GAAG,OAAO,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAC9B,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAQpE,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,UAAU,GAAG,IAAI,EAClF,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IAwBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA8C1D,OAAO,CAAC,UAAU;YAMJ,WAAW;IA2BzB,OAAO,CAAC,QAAQ;YA0BF,aAAa;IAa3B,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../src/bindings/kv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;IAC9D,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAWD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,MAAM,GAAG,IAAI,CAAiB;AAgBlE,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,KAAK,CAAsB;gBAEvB,IAAI,EAAE,iBAAiB;IAS7B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAO/D,eAAe,CAAC,CAAC,GAAG,OAAO,EAC/B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,GAC9B,OAAO,CAAC;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAQpE,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,UAAU,GAAG,IAAI,EAClF,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IAwBV,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASlC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgD1D,OAAO,CAAC,QAAQ;YA0BF,aAAa;IAa3B,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;CAOtB"}
@@ -23,6 +23,7 @@
23
23
  * Test seam: `_setKvNow(() => ts)` replaces the wall clock (Date.now/1000)
24
24
  * for TTL probes. Production reads Date.now() / 1000.
25
25
  */
26
+ import { coerceBindingBody, ensureBindingDir } from './body.js';
26
27
  // ── Test seam: clock ────────────────────────────────────────────────────
27
28
  let _kvNow = () => Math.floor(Date.now() / 1000);
28
29
  export function _setKvNow(fn) { _kvNow = fn; }
@@ -70,8 +71,8 @@ export class KvEmulator {
70
71
  }
71
72
  async put(key, value, options) {
72
73
  const enc = encKey(key);
73
- const bodyBlob = await this._coerceBody(value);
74
- this._ensureDir();
74
+ const bodyBlob = await coerceBindingBody(value);
75
+ ensureBindingDir(this.vfs, this.dir);
75
76
  this.vfs.writeFile(this.dir + '/' + enc, bodyBlob);
76
77
  // Build sidecar
77
78
  const meta = { v: 1 };
@@ -160,46 +161,6 @@ export class KvEmulator {
160
161
  return out;
161
162
  }
162
163
  // ── internals ─────────────────────────────────────────────────────────
163
- _ensureDir() {
164
- if (!this.vfs.exists(this.dir)) {
165
- this.vfs.mkdir(this.dir, { recursive: true });
166
- }
167
- }
168
- async _coerceBody(value) {
169
- if (value == null)
170
- return new Uint8Array(0);
171
- if (typeof value === 'string')
172
- return new TextEncoder().encode(value);
173
- if (value instanceof Uint8Array)
174
- return value;
175
- if (value instanceof ArrayBuffer)
176
- return new Uint8Array(value);
177
- if (ArrayBuffer.isView(value))
178
- return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
179
- if (typeof value === 'object' && typeof value.getReader === 'function') {
180
- // ReadableStream — drain
181
- const chunks = [];
182
- let total = 0;
183
- const reader = value.getReader();
184
- while (true) {
185
- const { value: chunk, done } = await reader.read();
186
- if (done)
187
- break;
188
- const u = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);
189
- chunks.push(u);
190
- total += u.length;
191
- }
192
- const out = new Uint8Array(total);
193
- let off = 0;
194
- for (const c of chunks) {
195
- out.set(c, off);
196
- off += c.length;
197
- }
198
- return out;
199
- }
200
- // Fallback — try toString
201
- return new TextEncoder().encode(String(value));
202
- }
203
164
  _project(body, type) {
204
165
  const t = type || 'text';
205
166
  if (t === 'text')
@@ -120,8 +120,6 @@ export declare class R2Emulator {
120
120
  }>;
121
121
  createMultipartUpload(_key: string, _options?: any): Promise<never>;
122
122
  resumeMultipartUpload(_key: string, _uploadId: string): Promise<never>;
123
- private _ensureDir;
124
- private _coerceBody;
125
123
  private _readSide;
126
124
  private _readSideEnc;
127
125
  private _readBody;
@@ -1 +1 @@
1
- {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../../src/bindings/r2.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../../src/bindings/r2.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@
27
27
  * every call (the body is one-shot per real-R2 contract), plus convenience
28
28
  * helpers text() / arrayBuffer() / json() / blob().
29
29
  */
30
+ import { coerceBindingBody, ensureBindingDir } from './body.js';
30
31
  // ── Path helpers ────────────────────────────────────────────────────────
31
32
  function encKey(key) {
32
33
  return encodeURIComponent(key);
@@ -136,7 +137,8 @@ export class R2Emulator {
136
137
  return null;
137
138
  }
138
139
  }
139
- const body = await this._coerceBody(value);
140
+ const body = typeof Blob !== 'undefined' && value instanceof Blob
141
+ ? new Uint8Array(await value.arrayBuffer()) : await coerceBindingBody(value);
140
142
  const etag = await this._sha256Hex(body);
141
143
  // Verify integrity hashes if supplied
142
144
  if (options?.md5 || options?.sha1 || options?.sha256 || options?.sha512) {
@@ -160,7 +162,7 @@ export class R2Emulator {
160
162
  side.httpMetadata = options.httpMetadata;
161
163
  if (options?.customMetadata)
162
164
  side.customMetadata = options.customMetadata;
163
- this._ensureDir();
165
+ ensureBindingDir(this.vfs, this.dir);
164
166
  const enc = encKey(key);
165
167
  this.vfs.writeFile(this.dir + '/' + enc, body);
166
168
  this.vfs.writeFile(this.dir + '/' + enc + '.meta', JSON.stringify(side));
@@ -248,48 +250,6 @@ export class R2Emulator {
248
250
  throw new Error('R2 multipart uploads not supported in nimbus-wrangler dev (W10.5 candidate)');
249
251
  }
250
252
  // ── internals ─────────────────────────────────────────────────────────
251
- _ensureDir() {
252
- if (!this.vfs.exists(this.dir)) {
253
- this.vfs.mkdir(this.dir, { recursive: true });
254
- }
255
- }
256
- async _coerceBody(value) {
257
- if (value == null)
258
- return new Uint8Array(0);
259
- if (typeof value === 'string')
260
- return new TextEncoder().encode(value);
261
- if (value instanceof Uint8Array)
262
- return value;
263
- if (value instanceof ArrayBuffer)
264
- return new Uint8Array(value);
265
- if (ArrayBuffer.isView(value))
266
- return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
267
- if (typeof value === 'object' && typeof value.getReader === 'function') {
268
- const chunks = [];
269
- let total = 0;
270
- const reader = value.getReader();
271
- while (true) {
272
- const { value: chunk, done } = await reader.read();
273
- if (done)
274
- break;
275
- const u = chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk);
276
- chunks.push(u);
277
- total += u.length;
278
- }
279
- const out = new Uint8Array(total);
280
- let off = 0;
281
- for (const c of chunks) {
282
- out.set(c, off);
283
- off += c.length;
284
- }
285
- return out;
286
- }
287
- if (typeof Blob !== 'undefined' && value instanceof Blob) {
288
- const ab = await value.arrayBuffer();
289
- return new Uint8Array(ab);
290
- }
291
- return new TextEncoder().encode(String(value));
292
- }
293
253
  _readSide(key) {
294
254
  return this._readSideEnc(encKey(key));
295
255
  }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * esbuild-cli-artifact.generated.ts — AUTO-GENERATED by
3
+ * scripts/bundle-facet-workers.mjs. DO NOT EDIT.
4
+ *
5
+ * Pins the staged runner of the `esbuild` command: esbuild-wasm/wasm_exec.js
6
+ * (Go js/wasm glue, as __esbuildGoRuntime) followed by @nimbus-sh/core
7
+ * src/runtime/esbuild-cli/preamble.ts as an IIFE. Only the session's esbuild
8
+ * facet evaluates it, so src/runtime/esbuild-wasm-bytes.ts fetches it from
9
+ * ASSETS when that facet is built, instead of the Worker bundle carrying it.
10
+ * ESBUILD_CLI_BUILD_ID is a content-hash prefix, ESBUILD_CLI_SHA256 the
11
+ * digest every fetch is verified against.
12
+ *
13
+ * Size: 244.86 KiB
14
+ */
15
+ export declare const ESBUILD_CLI_ASSET_PATH: string;
16
+ export declare const ESBUILD_CLI_BUILD_ID: string;
17
+ export declare const ESBUILD_CLI_SHA256: string;
18
+ //# sourceMappingURL=esbuild-cli-artifact.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esbuild-cli-artifact.generated.d.ts","sourceRoot":"","sources":["../src/esbuild-cli-artifact.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,sBAAsB,EAAE,MAA2D,CAAC;AACjG,eAAO,MAAM,oBAAoB,EAAE,MAA2B,CAAC;AAC/D,eAAO,MAAM,kBAAkB,EAAE,MAA2E,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * esbuild-cli-artifact.generated.ts — AUTO-GENERATED by
3
+ * scripts/bundle-facet-workers.mjs. DO NOT EDIT.
4
+ *
5
+ * Pins the staged runner of the `esbuild` command: esbuild-wasm/wasm_exec.js
6
+ * (Go js/wasm glue, as __esbuildGoRuntime) followed by @nimbus-sh/core
7
+ * src/runtime/esbuild-cli/preamble.ts as an IIFE. Only the session's esbuild
8
+ * facet evaluates it, so src/runtime/esbuild-wasm-bytes.ts fetches it from
9
+ * ASSETS when that facet is built, instead of the Worker bundle carrying it.
10
+ * ESBUILD_CLI_BUILD_ID is a content-hash prefix, ESBUILD_CLI_SHA256 the
11
+ * digest every fetch is verified against.
12
+ *
13
+ * Size: 244.86 KiB
14
+ */
15
+ export const ESBUILD_CLI_ASSET_PATH = "/_assets/runtime/esbuild-cli-c4fda380d52befc1.js";
16
+ export const ESBUILD_CLI_BUILD_ID = "c4fda380d52befc1";
17
+ export const ESBUILD_CLI_SHA256 = "c4fda380d52befc178dc8202897f14f04117662f2611d0c2f6e6c55c1fffb78f";
@@ -2,30 +2,14 @@
2
2
  * esbuild-wasm-bundle.generated.ts — AUTO-GENERATED by scripts/bundle-esbuild-wasm.mjs
3
3
  * DO NOT EDIT.
4
4
  *
5
- * Bundled esbuild-wasm 0.24.2 adapter for use inside NimbusIsolatePool
6
- * isolates. Only the JS adapter is bundled here (~117 KiB); the wasm
7
- * binary itself lives in the static-assets layer at
8
- * public/_assets/esbuild-0.24.2.wasm and is fetched on demand by
9
- * src/esbuild-wasm-bytes.ts.
5
+ * Digests of the staged esbuild-wasm 0.24.2 artifacts. Both live in
6
+ * the static-assets layer, public/_assets/esbuild-0.24.2.{wasm,js},
7
+ * and are fetched on demand and verified by src/runtime/esbuild-wasm-bytes.ts.
10
8
  *
11
- * Phase 2 A'.5 moved the base64 wasm string OUT of the supervisor
12
- * bundle (was 16 MiB UTF-8 → 21 MiB UTF-16 in JS string overhead).
13
- * If you're reading this and wondering where the bytes are: env.ASSETS.
14
- */
15
- export declare const ESBUILD_WASM_VERSION: string;
16
- /**
17
- * SHA-256 of the staged public/_assets/esbuild-0.24.2.wasm bytes.
18
- * src/runtime/esbuild-wasm-bytes.ts verifies every fetch against it — the L2
19
- * (caches.default) tier included — before the bytes reach workerd's loader.
20
- */
21
- export declare const ESBUILD_WASM_SHA256: string;
22
- /**
23
- * Function body that, when wrapped in `new Function(...)()`, returns
24
- * the esbuild-wasm namespace (build, transform, initialize, ...).
25
- *
26
- * Source: node_modules/esbuild-wasm/esm/browser.js with the trailing
27
- * `export { ... }` rewritten to `return { ... };`. Why the browser
28
- * build:
9
+ * The JS adapter is node_modules/esbuild-wasm/esm/browser.js with the
10
+ * trailing `export { ... }` rewritten to `return { ... };`, so that
11
+ * `new Function(body)()` yields the esbuild namespace inside a facet.
12
+ * Why the browser build:
29
13
  * - Pure ESM with no `createRequire`, no `require("fs")`, and
30
14
  * no `process.binding` — safe to evaluate inside a workerd
31
15
  * dynamic-worker isolate.
@@ -43,5 +27,21 @@ export declare const ESBUILD_WASM_SHA256: string;
43
27
  * patterns (createRequire / dynamic node-builtin require / process.binding)
44
28
  * and bails loud if a future release reintroduces them.
45
29
  */
46
- export declare const ESBUILD_WASM_JS_FN_BODY: string;
30
+ export declare const ESBUILD_WASM_VERSION: string;
31
+ /**
32
+ * Where the artifacts live inside env.ASSETS. Version-named, so a bump
33
+ * lands under a new name and never serves a stale cache entry. Naming them
34
+ * here is what puts them under scripts/dist-integrity.mjs's staged-asset
35
+ * check, which discovers asset paths by value in generated modules.
36
+ */
37
+ export declare const ESBUILD_WASM_ASSET_PATH: string;
38
+ export declare const ESBUILD_JS_ASSET_PATH: string;
39
+ /**
40
+ * SHA-256 of the staged public/_assets/esbuild-0.24.2.wasm bytes.
41
+ * src/runtime/esbuild-wasm-bytes.ts verifies every fetch against it — the L2
42
+ * (caches.default) tier included — before the bytes reach workerd's loader.
43
+ */
44
+ export declare const ESBUILD_WASM_SHA256: string;
45
+ /** SHA-256 of the staged public/_assets/esbuild-0.24.2.js adapter, checked the same way. */
46
+ export declare const ESBUILD_JS_SHA256: string;
47
47
  //# sourceMappingURL=esbuild-wasm-bundle.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"esbuild-wasm-bundle.generated.d.ts","sourceRoot":"","sources":["../src/esbuild-wasm-bundle.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,oBAAoB,EAAE,MAAiB,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAA2E,CAAC;AAE9G;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAA4+xH,CAAC"}
1
+ {"version":3,"file":"esbuild-wasm-bundle.generated.d.ts","sourceRoot":"","sources":["../src/esbuild-wasm-bundle.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAiB,CAAC;AACrD;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAuC,CAAC;AAC9E,eAAO,MAAM,qBAAqB,EAAE,MAAqC,CAAC;AAC1E;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAA2E,CAAC;AAC9G,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,EAAE,MAA2E,CAAC"}