@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.
- package/NOTICE.md +5 -0
- package/README.md +10 -0
- package/dist/_shared/session-router.d.ts +7 -0
- package/dist/_shared/session-router.d.ts.map +1 -1
- package/dist/_shared/session-router.js +7 -0
- package/dist/bindings/body.d.ts +6 -0
- package/dist/bindings/body.d.ts.map +1 -0
- package/dist/bindings/body.js +37 -0
- package/dist/bindings/kv.d.ts +0 -2
- package/dist/bindings/kv.d.ts.map +1 -1
- package/dist/bindings/kv.js +3 -42
- package/dist/bindings/r2.d.ts +0 -2
- package/dist/bindings/r2.d.ts.map +1 -1
- package/dist/bindings/r2.js +4 -44
- package/dist/esbuild-cli-artifact.generated.d.ts +18 -0
- package/dist/esbuild-cli-artifact.generated.d.ts.map +1 -0
- package/dist/esbuild-cli-artifact.generated.js +17 -0
- package/dist/esbuild-wasm-bundle.generated.d.ts +24 -24
- package/dist/esbuild-wasm-bundle.generated.d.ts.map +1 -1
- package/dist/esbuild-wasm-bundle.generated.js +24 -24
- package/dist/facets/cirrus-real.d.ts.map +1 -1
- package/dist/facets/cirrus-real.js +11 -6
- package/dist/facets/compose.d.ts +11 -7
- package/dist/facets/compose.d.ts.map +1 -1
- package/dist/facets/compose.js +8 -31
- package/dist/facets/data-plan.d.ts +79 -0
- package/dist/facets/data-plan.d.ts.map +1 -0
- package/dist/facets/data-plan.js +477 -0
- package/dist/facets/esbuild-bundle-pool.d.ts +1 -1
- package/dist/facets/esbuild-bundle-pool.js +3 -3
- package/dist/facets/esbuild-transform.d.ts +38 -8
- package/dist/facets/esbuild-transform.d.ts.map +1 -1
- package/dist/facets/esbuild-transform.js +219 -19
- package/dist/facets/exec-telemetry.d.ts +7 -3
- package/dist/facets/exec-telemetry.d.ts.map +1 -1
- package/dist/facets/manager.d.ts +198 -69
- package/dist/facets/manager.d.ts.map +1 -1
- package/dist/facets/manager.js +1276 -652
- package/dist/facets/opencode-staging.d.ts +0 -2
- package/dist/facets/opencode-staging.d.ts.map +1 -1
- package/dist/facets/opencode-staging.js +5 -11
- package/dist/facets/process.d.ts +4 -0
- package/dist/facets/process.d.ts.map +1 -1
- package/dist/facets/process.js +3 -0
- package/dist/facets/read-profile.d.ts +149 -0
- package/dist/facets/read-profile.d.ts.map +1 -0
- package/dist/facets/read-profile.js +483 -0
- package/dist/facets/real-vite-hmr.d.ts +2 -0
- package/dist/facets/real-vite-hmr.d.ts.map +1 -1
- package/dist/facets/real-vite-hmr.js +3 -2
- package/dist/facets/resident-identity.d.ts +0 -1
- package/dist/facets/resident-identity.d.ts.map +1 -1
- package/dist/facets/resident-identity.js +0 -3
- package/dist/facets/wasm-swap-registry.d.ts +34 -25
- package/dist/facets/wasm-swap-registry.d.ts.map +1 -1
- package/dist/facets/wasm-swap-registry.js +62 -56
- package/dist/facets/ws-terminal.d.ts +4 -4
- package/dist/facets/ws-terminal.d.ts.map +1 -1
- package/dist/facets/ws-terminal.js +4 -5
- package/dist/git/commands.d.ts +33 -10
- package/dist/git/commands.d.ts.map +1 -1
- package/dist/git/commands.js +1891 -197
- package/dist/git/network-facet.d.ts +12 -2
- package/dist/git/network-facet.d.ts.map +1 -1
- package/dist/git/network-facet.js +69 -18
- package/dist/git/unified-diff.d.ts +74 -0
- package/dist/git/unified-diff.d.ts.map +1 -0
- package/dist/git/unified-diff.js +676 -0
- package/dist/git-bundle.generated.d.ts +7 -11
- package/dist/git-bundle.generated.d.ts.map +1 -1
- package/dist/git-bundle.generated.js +7 -11
- package/dist/hosted/commands.d.ts.map +1 -1
- package/dist/hosted/commands.js +64 -245
- package/dist/hosted/runtime.d.ts +22 -15
- package/dist/hosted/runtime.d.ts.map +1 -1
- package/dist/hosted/runtime.js +72 -14
- package/dist/hosted/services.d.ts +8 -1
- package/dist/hosted/services.d.ts.map +1 -1
- package/dist/hosted/services.js +12 -13
- package/dist/hosted/session.d.ts +165 -0
- package/dist/hosted/session.d.ts.map +1 -0
- package/dist/hosted/session.js +132 -0
- package/dist/loaders/generated-workers.d.ts +6 -3
- package/dist/loaders/generated-workers.d.ts.map +1 -1
- package/dist/loaders/generated-workers.js +8 -5
- package/dist/loaders/npm-resolve-preamble.d.ts.map +1 -1
- package/dist/loaders/npm-resolve-preamble.js +0 -27
- package/dist/loaders/pre-bundle-preamble.d.ts +6 -3
- package/dist/loaders/pre-bundle-preamble.d.ts.map +1 -1
- package/dist/loaders/pre-bundle-preamble.js +13 -8
- package/dist/node-shims-artifact.generated.d.ts +13 -4
- package/dist/node-shims-artifact.generated.d.ts.map +1 -1
- package/dist/node-shims-artifact.generated.js +16 -7
- package/dist/npm/bin-links.d.ts +3 -1
- package/dist/npm/bin-links.d.ts.map +1 -1
- package/dist/npm/bin-links.js +32 -8
- package/dist/npm/cache.d.ts +11 -1
- package/dist/npm/cache.d.ts.map +1 -1
- package/dist/npm/cache.js +21 -7
- package/dist/npm/install-batch-facet.d.ts +4 -2
- package/dist/npm/install-batch-facet.d.ts.map +1 -1
- package/dist/npm/install-batch-facet.js +32 -18
- package/dist/npm/installer.d.ts +23 -3
- package/dist/npm/installer.d.ts.map +1 -1
- package/dist/npm/installer.js +330 -131
- package/dist/npm/npx-install.d.ts +3 -1
- package/dist/npm/npx-install.d.ts.map +1 -1
- package/dist/npm/npx-install.js +4 -1
- package/dist/npm/package-lock.d.ts +32 -0
- package/dist/npm/package-lock.d.ts.map +1 -0
- package/dist/npm/package-lock.js +65 -0
- package/dist/npm/placement.d.ts +16 -0
- package/dist/npm/placement.d.ts.map +1 -0
- package/dist/npm/placement.js +33 -0
- package/dist/npm/pre-bundle-facet.d.ts +1 -30
- package/dist/npm/pre-bundle-facet.d.ts.map +1 -1
- package/dist/npm/pre-bundle-facet.js +3 -5
- package/dist/npm/r2-cache.d.ts +12 -6
- package/dist/npm/r2-cache.d.ts.map +1 -1
- package/dist/npm/r2-cache.js +34 -16
- package/dist/npm/resolve-one-facet.d.ts +3 -0
- package/dist/npm/resolve-one-facet.d.ts.map +1 -1
- package/dist/npm/resolve-one-facet.js +15 -3
- package/dist/npm/resolver.d.ts +11 -13
- package/dist/npm/resolver.d.ts.map +1 -1
- package/dist/npm/resolver.js +12 -25
- package/dist/opencode-artifact.generated.js +2 -2
- package/dist/replica/routing.d.ts +2 -38
- package/dist/replica/routing.d.ts.map +1 -1
- package/dist/replica/routing.js +3 -55
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +15 -2
- package/dist/router/public-directory.d.ts +18 -0
- package/dist/router/public-directory.d.ts.map +1 -1
- package/dist/router/public-directory.js +1 -1
- package/dist/router/remote-api.d.ts +3 -1
- package/dist/router/remote-api.d.ts.map +1 -1
- package/dist/router/remote-api.js +42 -79
- package/dist/runtime/bash-repl.js +2 -2
- package/dist/runtime/bun-repl.d.ts.map +1 -1
- package/dist/runtime/bun-repl.js +2 -13
- package/dist/runtime/cpython-resident.d.ts.map +1 -1
- package/dist/runtime/cpython-resident.js +2 -10
- package/dist/runtime/esbuild-wasm-bytes.d.ts +37 -18
- package/dist/runtime/esbuild-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/esbuild-wasm-bytes.js +66 -92
- package/dist/runtime/facet-loader-host.d.ts.map +1 -1
- package/dist/runtime/facet-loader-host.js +0 -7
- package/dist/runtime/git-bundle-artifact.d.ts +17 -0
- package/dist/runtime/git-bundle-artifact.d.ts.map +1 -0
- package/dist/runtime/git-bundle-artifact.js +25 -0
- package/dist/runtime/node-repl.d.ts.map +1 -1
- package/dist/runtime/node-repl.js +2 -13
- package/dist/runtime/node-shims-artifact.d.ts +22 -23
- package/dist/runtime/node-shims-artifact.d.ts.map +1 -1
- package/dist/runtime/node-shims-artifact.js +48 -78
- package/dist/runtime/node-shims.d.ts.map +1 -1
- package/dist/runtime/node-shims.js +2358 -996
- package/dist/runtime/opencode-artifact.d.ts.map +1 -1
- package/dist/runtime/opencode-artifact.js +17 -53
- package/dist/runtime/opencode-facet-runner.d.ts +3 -6
- package/dist/runtime/opencode-facet-runner.d.ts.map +1 -1
- package/dist/runtime/opencode-facet-runner.js +45 -10
- package/dist/runtime/opentui-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/opentui-wasm-bytes.js +16 -49
- package/dist/runtime/package-manager.d.ts +0 -2
- package/dist/runtime/package-manager.d.ts.map +1 -1
- package/dist/runtime/package-manager.js +0 -3
- package/dist/runtime/python-repl.d.ts.map +1 -1
- package/dist/runtime/python-repl.js +4 -35
- package/dist/runtime/repl-session.d.ts +10 -0
- package/dist/runtime/repl-session.d.ts.map +1 -1
- package/dist/runtime/repl-session.js +7 -0
- package/dist/runtime/ruby-repl.d.ts.map +1 -1
- package/dist/runtime/ruby-repl.js +2 -2
- package/dist/runtime/ruby-resident.d.ts.map +1 -1
- package/dist/runtime/ruby-resident.js +41 -51
- package/dist/runtime/runtime-catalog.d.ts +10 -3
- package/dist/runtime/runtime-catalog.d.ts.map +1 -1
- package/dist/runtime/runtime-catalog.js +125 -15
- package/dist/runtime/sqlite-wasm-bytes.d.ts +4 -4
- package/dist/runtime/sqlite-wasm-bytes.d.ts.map +1 -1
- package/dist/runtime/sqlite-wasm-bytes.js +21 -57
- package/dist/runtime/staged-source.d.ts +67 -0
- package/dist/runtime/staged-source.d.ts.map +1 -0
- package/dist/runtime/staged-source.js +113 -0
- package/dist/runtime/wasi/preamble.d.ts +0 -22
- package/dist/runtime/wasi/preamble.d.ts.map +1 -1
- package/dist/runtime/wasi/preamble.js +98 -1425
- package/dist/runtime-catalog.generated.js +1 -1
- package/dist/session/agent.d.ts +14 -2
- package/dist/session/agent.d.ts.map +1 -1
- package/dist/session/agent.js +57 -19
- package/dist/session/ai.d.ts +0 -11
- package/dist/session/ai.d.ts.map +1 -1
- package/dist/session/ai.js +0 -4
- package/dist/session/fs-watch.d.ts +0 -11
- package/dist/session/fs-watch.d.ts.map +1 -1
- package/dist/session/fs-watch.js +0 -21
- package/dist/session/hibernation.d.ts +68 -2
- package/dist/session/hibernation.d.ts.map +1 -1
- package/dist/session/hibernation.js +95 -1
- package/dist/session/init-phases.d.ts +1 -2
- package/dist/session/init-phases.d.ts.map +1 -1
- package/dist/session/init-phases.js +1 -2
- package/dist/session/init.d.ts.map +1 -1
- package/dist/session/init.js +7 -20
- package/dist/session/keys.d.ts +0 -3
- package/dist/session/keys.d.ts.map +1 -1
- package/dist/session/keys.js +0 -3
- package/dist/session/legacy-reset.d.ts +11 -0
- package/dist/session/legacy-reset.d.ts.map +1 -0
- package/dist/session/legacy-reset.js +16 -0
- package/dist/session/nimbus-session.d.ts +50 -16
- package/dist/session/nimbus-session.d.ts.map +1 -1
- package/dist/session/nimbus-session.js +77 -71
- package/dist/session/npm-install-port.d.ts.map +1 -1
- package/dist/session/npm-install-port.js +2 -0
- package/dist/session/programmatic.d.ts +13 -18
- package/dist/session/programmatic.d.ts.map +1 -1
- package/dist/session/programmatic.js +53 -39
- package/dist/session/replica-routes.d.ts +2 -3
- package/dist/session/replica-routes.d.ts.map +1 -1
- package/dist/session/replica-routes.js +3 -10
- package/dist/session/routes.d.ts.map +1 -1
- package/dist/session/routes.js +11 -12
- package/dist/session/rpc.d.ts +108 -21
- package/dist/session/rpc.d.ts.map +1 -1
- package/dist/session/rpc.js +194 -39
- package/dist/session/start-real-vite.js +2 -2
- package/dist/session/state-store.d.ts +1 -17
- package/dist/session/state-store.d.ts.map +1 -1
- package/dist/session/state-store.js +3 -53
- package/dist/session/supervisor-op.d.ts +7 -0
- package/dist/session/supervisor-op.d.ts.map +1 -1
- package/dist/session/supervisor-op.js +6 -1
- package/dist/session/supervisor-rpc.d.ts +116 -19
- package/dist/session/supervisor-rpc.d.ts.map +1 -1
- package/dist/session/supervisor-rpc.js +194 -84
- package/dist/session/vite-command.d.ts.map +1 -1
- package/dist/session/vite-command.js +17 -14
- package/dist/session/ws.d.ts.map +1 -1
- package/dist/session/ws.js +20 -8
- package/dist/shell/npm-bin-entrypoints.d.ts.map +1 -1
- package/dist/shell/npm-bin-entrypoints.js +30 -5
- package/dist/vfs/facet-resident-limits.d.ts +33 -0
- package/dist/vfs/facet-resident-limits.d.ts.map +1 -0
- package/dist/vfs/facet-resident-limits.js +33 -0
- package/dist/vfs/facet-resident-store.d.ts +2 -10
- package/dist/vfs/facet-resident-store.d.ts.map +1 -1
- package/dist/vfs/facet-resident-store.js +1594 -219
- package/dist/workspace-host.d.ts +3 -1
- package/dist/workspace-host.d.ts.map +1 -1
- package/dist/workspace-host.js +2 -0
- package/dist/wrangler/nimbus-wrangler.d.ts +0 -2
- package/dist/wrangler/nimbus-wrangler.d.ts.map +1 -1
- package/dist/wrangler/nimbus-wrangler.js +8 -22
- package/package.json +34 -7
- package/public/_assets/esbuild-0.24.2.js +2380 -0
- package/public/_assets/opencode/1.16.2/index-attach.js +2 -2
- package/public/_assets/runtime/esbuild-cli-c4fda380d52befc1.js +6892 -0
- package/public/_assets/runtime/git-de3e60c9f3ff006a.js +103 -0
- package/public/_assets/runtime/{node-shims-acaa037e6d26ec0d.js → node-shims-06565b121555c194.js} +2879 -992
- package/public/_assets/runtime/resident-store-6ffb1939c53d982f.js +2264 -0
- package/public/_assets/runtime/vfs-write-ledger-e501e8fc793bc2c1.js +889 -0
- package/scripts/build-opencode-attach-entry.mjs +51 -1
- package/scripts/bundle-esbuild-wasm.mjs +55 -39
- package/scripts/bundle-facet-workers.mjs +159 -10
- package/scripts/bundle-git.mjs +88 -27
- package/scripts/bundle-node-shims.mjs +72 -46
- package/scripts/bundle-runtime.mjs +18 -421
- package/scripts/cf-git-patch.mjs +137 -0
- package/scripts/patch-install-deps.mjs +49 -96
- package/scripts/runtime-specs.mjs +435 -0
- package/vendor/git-http.generated.d.ts +82 -0
- package/vendor/git-upstream.generated.d.ts +4378 -0
- package/vendor/git.LICENSE +7 -0
- package/vendor/git.generated.d.mts +21 -0
- package/vendor/git.generated.mjs +103 -0
- package/dist/replica/suspension.d.ts +0 -36
- package/dist/replica/suspension.d.ts.map +0 -1
- package/dist/replica/suspension.js +0 -49
- package/dist/runtime/static-server.d.ts +0 -3
- package/dist/runtime/static-server.d.ts.map +0 -1
- package/dist/runtime/static-server.js +0 -133
- 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;
|
|
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
|
+
}
|
package/dist/bindings/kv.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/bindings/kv.js
CHANGED
|
@@ -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
|
|
74
|
-
this.
|
|
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')
|
package/dist/bindings/r2.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"r2.d.ts","sourceRoot":"","sources":["../../src/bindings/r2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAKzE,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,aAAa,CAAC,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,cAAc,GAAG,gBAAgB,CAAC,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,eAAe,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,CAAC;CACN;AAaD,qBAAa,QAAQ;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,YAAY,EAAE,cAAc,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE3B,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;CAUzC;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACxC,gBAAgB;IAChB,OAAO,CAAC,KAAK,CAAa;gBAEd,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU;IAK1D,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,CASrC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAuD;IAExE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAGvB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAKnC,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC;IAG3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,KAAK,CAAsB;gBAEvB,IAAI,EAAE,iBAAiB;IAS7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAM3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAYtE,GAAG,CACP,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,cAAc,GAAG,WAAW,GAAG,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,EAClF,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA+CrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;IAsDI,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IAGnE,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAQ5E,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;YAWL,UAAU;IAUxB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAOtB"}
|
package/dist/bindings/r2.js
CHANGED
|
@@ -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 =
|
|
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.
|
|
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
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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
|
|
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
|
|
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"}
|