devflare 1.0.0-next.3 → 1.0.0-next.30
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/LLM.md +15961 -1751
- package/README.md +389 -605
- package/bin/devflare.js +24 -14
- package/dist/account-fvf5gxc9.js +475 -0
- package/dist/api-2n6dd2ws.js +33 -0
- package/dist/bridge/client.d.ts +48 -6
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/gateway-runtime.d.ts +8 -0
- package/dist/bridge/gateway-runtime.d.ts.map +1 -0
- package/dist/bridge/index.d.ts +3 -3
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/log.d.ts +5 -0
- package/dist/bridge/log.d.ts.map +1 -0
- package/dist/bridge/miniflare.d.ts +74 -1
- package/dist/bridge/miniflare.d.ts.map +1 -1
- package/dist/bridge/proxy.d.ts +11 -10
- package/dist/bridge/proxy.d.ts.map +1 -1
- package/dist/bridge/server.d.ts +2 -1
- package/dist/bridge/server.d.ts.map +1 -1
- package/dist/bridge/v2/body-streams.d.ts +53 -0
- package/dist/bridge/v2/body-streams.d.ts.map +1 -0
- package/dist/bridge/v2/codec.d.ts +106 -0
- package/dist/bridge/v2/codec.d.ts.map +1 -0
- package/dist/bridge/v2/control-messages.d.ts +51 -0
- package/dist/bridge/v2/control-messages.d.ts.map +1 -0
- package/dist/bridge/v2/frames.d.ts +109 -0
- package/dist/bridge/v2/frames.d.ts.map +1 -0
- package/dist/bridge/v2/index.d.ts +11 -0
- package/dist/bridge/v2/index.d.ts.map +1 -0
- package/dist/bridge/v2/serialization.d.ts +48 -0
- package/dist/bridge/v2/serialization.d.ts.map +1 -0
- package/dist/bridge/v2/transport.d.ts +31 -0
- package/dist/bridge/v2/transport.d.ts.map +1 -0
- package/dist/bridge/v2/value-codec.d.ts +61 -0
- package/dist/bridge/v2/value-codec.d.ts.map +1 -0
- package/dist/bridge/{serialization.d.ts → v2/value-serialization.d.ts} +40 -18
- package/dist/bridge/v2/value-serialization.d.ts.map +1 -0
- package/dist/bridge/{protocol.d.ts → v2/wire.d.ts} +28 -4
- package/dist/bridge/v2/wire.d.ts.map +1 -0
- package/dist/bridge/v2/ws-relay.d.ts +53 -0
- package/dist/bridge/v2/ws-relay.d.ts.map +1 -0
- package/dist/browser-shim/handler.d.ts +1 -1
- package/dist/browser-shim/handler.d.ts.map +1 -1
- package/dist/browser-shim/server.d.ts +63 -0
- package/dist/browser-shim/server.d.ts.map +1 -1
- package/dist/browser.d.ts +4585 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +147 -0
- package/dist/build-x1fhfsgs.js +54 -0
- package/dist/bundler/defaults.d.ts +23 -0
- package/dist/bundler/defaults.d.ts.map +1 -0
- package/dist/bundler/do-bundler.d.ts +7 -0
- package/dist/bundler/do-bundler.d.ts.map +1 -1
- package/dist/bundler/index.d.ts +2 -0
- package/dist/bundler/index.d.ts.map +1 -1
- package/dist/bundler/rolldown-shared.d.ts +53 -0
- package/dist/bundler/rolldown-shared.d.ts.map +1 -0
- package/dist/bundler/worker-bundler.d.ts +13 -0
- package/dist/bundler/worker-bundler.d.ts.map +1 -0
- package/dist/bundler/worker-compat.d.ts +4 -0
- package/dist/bundler/worker-compat.d.ts.map +1 -0
- package/dist/cli/build-manifest.d.ts +66 -0
- package/dist/cli/build-manifest.d.ts.map +1 -0
- package/dist/cli/command-utils.d.ts +18 -0
- package/dist/cli/command-utils.d.ts.map +1 -0
- package/dist/cli/commands/account.d.ts +1 -1
- package/dist/cli/commands/account.d.ts.map +1 -1
- package/dist/cli/commands/build-artifacts.d.ts +40 -0
- package/dist/cli/commands/build-artifacts.d.ts.map +1 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/config.d.ts +4 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/deploy/metadata.d.ts +18 -0
- package/dist/cli/commands/deploy/metadata.d.ts.map +1 -0
- package/dist/cli/commands/deploy/prepare.d.ts +23 -0
- package/dist/cli/commands/deploy/prepare.d.ts.map +1 -0
- package/dist/cli/commands/deploy/runtime.d.ts +4 -0
- package/dist/cli/commands/deploy/runtime.d.ts.map +1 -0
- package/dist/cli/commands/deploy/verification.d.ts +36 -0
- package/dist/cli/commands/deploy/verification.d.ts.map +1 -0
- package/dist/cli/commands/deploy.d.ts +2 -2
- package/dist/cli/commands/deploy.d.ts.map +1 -1
- package/dist/cli/commands/dev.d.ts +8 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/login.d.ts +4 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/cleanup.d.ts +9 -0
- package/dist/cli/commands/previews-support/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/family.d.ts +10 -0
- package/dist/cli/commands/previews-support/family.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/render.d.ts +8 -0
- package/dist/cli/commands/previews-support/render.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/theme.d.ts +10 -0
- package/dist/cli/commands/previews-support/theme.d.ts.map +1 -0
- package/dist/cli/commands/previews-support/types.d.ts +70 -0
- package/dist/cli/commands/previews-support/types.d.ts.map +1 -0
- package/dist/cli/commands/previews.d.ts +4 -0
- package/dist/cli/commands/previews.d.ts.map +1 -0
- package/dist/cli/commands/productions.d.ts +4 -0
- package/dist/cli/commands/productions.d.ts.map +1 -0
- package/dist/cli/commands/secrets.d.ts +4 -0
- package/dist/cli/commands/secrets.d.ts.map +1 -0
- package/dist/cli/commands/token.d.ts +4 -0
- package/dist/cli/commands/token.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/discovery.d.ts +7 -0
- package/dist/cli/commands/type-generation/discovery.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/generator.d.ts +112 -0
- package/dist/cli/commands/type-generation/generator.d.ts.map +1 -0
- package/dist/cli/commands/type-generation/models.d.ts +27 -0
- package/dist/cli/commands/type-generation/models.d.ts.map +1 -0
- package/dist/cli/commands/types.d.ts.map +1 -1
- package/dist/cli/commands/worker.d.ts +4 -0
- package/dist/cli/commands/worker.d.ts.map +1 -0
- package/dist/cli/config-path.d.ts +6 -0
- package/dist/cli/config-path.d.ts.map +1 -0
- package/dist/cli/dependencies.d.ts +1 -0
- package/dist/cli/dependencies.d.ts.map +1 -1
- package/dist/cli/deploy-strategy.d.ts +17 -0
- package/dist/cli/deploy-strategy.d.ts.map +1 -0
- package/dist/cli/deploy-target.d.ts +17 -0
- package/dist/cli/deploy-target.d.ts.map +1 -0
- package/dist/cli/generated-artifacts.d.ts +12 -0
- package/dist/cli/generated-artifacts.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/account.d.ts +3 -0
- package/dist/cli/help-pages/pages/account.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/core.d.ts +4 -0
- package/dist/cli/help-pages/pages/core.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/index.d.ts +3 -0
- package/dist/cli/help-pages/pages/index.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/misc.d.ts +3 -0
- package/dist/cli/help-pages/pages/misc.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/previews.d.ts +3 -0
- package/dist/cli/help-pages/pages/previews.d.ts.map +1 -0
- package/dist/cli/help-pages/pages/productions.d.ts +3 -0
- package/dist/cli/help-pages/pages/productions.d.ts.map +1 -0
- package/dist/cli/help-pages/render.d.ts +12 -0
- package/dist/cli/help-pages/render.d.ts.map +1 -0
- package/dist/cli/help-pages/shared.d.ts +15 -0
- package/dist/cli/help-pages/shared.d.ts.map +1 -0
- package/dist/cli/help-pages/types.d.ts +23 -0
- package/dist/cli/help-pages/types.d.ts.map +1 -0
- package/dist/cli/help.d.ts +6 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +12 -0
- package/dist/cli/package-metadata.d.ts +16 -0
- package/dist/cli/package-metadata.d.ts.map +1 -0
- package/dist/cli/preview-bindings.d.ts +49 -0
- package/dist/cli/preview-bindings.d.ts.map +1 -0
- package/dist/cli/preview.d.ts +10 -0
- package/dist/cli/preview.d.ts.map +1 -0
- package/dist/cli/ui.d.ts +37 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/workspace-build-guard.d.ts +14 -0
- package/dist/cli/workspace-build-guard.d.ts.map +1 -0
- package/dist/cloudflare/account-core.d.ts +6 -0
- package/dist/cloudflare/account-core.d.ts.map +1 -0
- package/dist/cloudflare/account-resources.d.ts +40 -0
- package/dist/cloudflare/account-resources.d.ts.map +1 -0
- package/dist/cloudflare/account-status.d.ts +11 -0
- package/dist/cloudflare/account-status.d.ts.map +1 -0
- package/dist/cloudflare/account-workers.d.ts +14 -0
- package/dist/cloudflare/account-workers.d.ts.map +1 -0
- package/dist/cloudflare/account.d.ts +7 -64
- package/dist/cloudflare/account.d.ts.map +1 -1
- package/dist/cloudflare/api.d.ts +71 -3
- package/dist/cloudflare/api.d.ts.map +1 -1
- package/dist/cloudflare/auth.d.ts.map +1 -1
- package/dist/cloudflare/index.d.ts +57 -2
- package/dist/cloudflare/index.d.ts.map +1 -1
- package/dist/cloudflare/index.js +49 -2
- package/dist/cloudflare/known-permission-group-ids.generated.d.ts +10 -0
- package/dist/cloudflare/known-permission-group-ids.generated.d.ts.map +1 -0
- package/dist/cloudflare/kv-namespace.d.ts +4 -0
- package/dist/cloudflare/kv-namespace.d.ts.map +1 -0
- package/dist/cloudflare/preferences.d.ts +7 -0
- package/dist/cloudflare/preferences.d.ts.map +1 -1
- package/dist/cloudflare/preview-registry-cache.d.ts +6 -0
- package/dist/cloudflare/preview-registry-cache.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-inference.d.ts +14 -0
- package/dist/cloudflare/preview-registry-inference.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-records.d.ts +4 -0
- package/dist/cloudflare/preview-registry-records.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-shape.d.ts +47 -0
- package/dist/cloudflare/preview-registry-shape.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-store.d.ts +14 -0
- package/dist/cloudflare/preview-registry-store.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-transport.d.ts +4 -0
- package/dist/cloudflare/preview-registry-transport.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry-types.d.ts +103 -0
- package/dist/cloudflare/preview-registry-types.d.ts.map +1 -0
- package/dist/cloudflare/preview-registry.d.ts +42 -0
- package/dist/cloudflare/preview-registry.d.ts.map +1 -0
- package/dist/cloudflare/preview-urls.d.ts +3 -0
- package/dist/cloudflare/preview-urls.d.ts.map +1 -0
- package/dist/cloudflare/registry-schema.d.ts +253 -0
- package/dist/cloudflare/registry-schema.d.ts.map +1 -0
- package/dist/cloudflare/tokens.d.ts +44 -0
- package/dist/cloudflare/tokens.d.ts.map +1 -0
- package/dist/cloudflare/types.d.ts +124 -7
- package/dist/cloudflare/types.d.ts.map +1 -1
- package/dist/cloudflare/usage.d.ts +30 -2
- package/dist/cloudflare/usage.d.ts.map +1 -1
- package/dist/config/binding-resolution-helpers.d.ts +41 -0
- package/dist/config/binding-resolution-helpers.d.ts.map +1 -0
- package/dist/config/compatibility.d.ts +3 -0
- package/dist/config/compatibility.d.ts.map +1 -0
- package/dist/config/compiler/bindings.d.ts +14 -0
- package/dist/config/compiler/bindings.d.ts.map +1 -0
- package/dist/config/compiler/core-helpers.d.ts +6 -0
- package/dist/config/compiler/core-helpers.d.ts.map +1 -0
- package/dist/config/compiler/do-workers.d.ts +34 -0
- package/dist/config/compiler/do-workers.d.ts.map +1 -0
- package/dist/config/compiler/paths.d.ts +18 -0
- package/dist/config/compiler/paths.d.ts.map +1 -0
- package/dist/config/compiler/types.d.ts +267 -0
- package/dist/config/compiler/types.d.ts.map +1 -0
- package/dist/config/compiler.d.ts +22 -134
- package/dist/config/compiler.d.ts.map +1 -1
- package/dist/config/define.d.ts +7 -4
- package/dist/config/define.d.ts.map +1 -1
- package/dist/config/deploy-resources.d.ts +58 -0
- package/dist/config/deploy-resources.d.ts.map +1 -0
- package/dist/config/env-vars.d.ts +309 -0
- package/dist/config/env-vars.d.ts.map +1 -0
- package/dist/config/framework-providers.d.ts +9 -0
- package/dist/config/framework-providers.d.ts.map +1 -0
- package/dist/config/index.d.ts +12 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/loader.d.ts +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/local-dev-vars.d.ts +15 -0
- package/dist/config/local-dev-vars.d.ts.map +1 -0
- package/dist/config/preview-resources.d.ts +83 -0
- package/dist/config/preview-resources.d.ts.map +1 -0
- package/dist/config/preview.d.ts +31 -0
- package/dist/config/preview.d.ts.map +1 -0
- package/dist/config/ref.d.ts +14 -23
- package/dist/config/ref.d.ts.map +1 -1
- package/dist/config/resolve-phased.d.ts +72 -0
- package/dist/config/resolve-phased.d.ts.map +1 -0
- package/dist/config/resolve.d.ts +11 -0
- package/dist/config/resolve.d.ts.map +1 -0
- package/dist/config/resource-resolution.d.ts +80 -0
- package/dist/config/resource-resolution.d.ts.map +1 -0
- package/dist/config/schema-bindings.d.ts +1495 -0
- package/dist/config/schema-bindings.d.ts.map +1 -0
- package/dist/config/schema-build.d.ts +67 -0
- package/dist/config/schema-build.d.ts.map +1 -0
- package/dist/config/schema-env.d.ts +3005 -0
- package/dist/config/schema-env.d.ts.map +1 -0
- package/dist/config/schema-normalization.d.ts +184 -0
- package/dist/config/schema-normalization.d.ts.map +1 -0
- package/dist/config/schema-runtime.d.ts +500 -0
- package/dist/config/schema-runtime.d.ts.map +1 -0
- package/dist/config/schema-types-bindings-platform.d.ts +378 -0
- package/dist/config/schema-types-bindings-platform.d.ts.map +1 -0
- package/dist/config/schema-types-bindings-resources.d.ts +551 -0
- package/dist/config/schema-types-bindings-resources.d.ts.map +1 -0
- package/dist/config/schema-types-bindings.d.ts +254 -0
- package/dist/config/schema-types-bindings.d.ts.map +1 -0
- package/dist/config/schema-types-build.d.ts +86 -0
- package/dist/config/schema-types-build.d.ts.map +1 -0
- package/dist/config/schema-types-runtime.d.ts +917 -0
- package/dist/config/schema-types-runtime.d.ts.map +1 -0
- package/dist/config/schema-types.d.ts +390 -0
- package/dist/config/schema-types.d.ts.map +1 -0
- package/dist/config/schema.d.ts +4495 -2214
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/service-bindings-validation.d.ts +36 -0
- package/dist/config/service-bindings-validation.d.ts.map +1 -0
- package/dist/config-2d6x21jn.js +105 -0
- package/dist/config-entry.d.ts +7 -0
- package/dist/config-entry.d.ts.map +1 -0
- package/dist/config-entry.js +16 -0
- package/dist/decorators/durable-object.d.ts.map +1 -1
- package/dist/deploy-g85w9drn.js +1066 -0
- package/dist/dev-server/d1-migrations.d.ts +36 -0
- package/dist/dev-server/d1-migrations.d.ts.map +1 -0
- package/dist/dev-server/dev-server-state.d.ts +59 -0
- package/dist/dev-server/dev-server-state.d.ts.map +1 -0
- package/dist/dev-server/gateway-script.d.ts +21 -0
- package/dist/dev-server/gateway-script.d.ts.map +1 -0
- package/dist/dev-server/miniflare-bindings.d.ts +59 -0
- package/dist/dev-server/miniflare-bindings.d.ts.map +1 -0
- package/dist/dev-server/miniflare-dev-config.d.ts +36 -0
- package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -0
- package/dist/dev-server/miniflare-log.d.ts +20 -0
- package/dist/dev-server/miniflare-log.d.ts.map +1 -0
- package/dist/dev-server/miniflare-worker-config.d.ts +74 -0
- package/dist/dev-server/miniflare-worker-config.d.ts.map +1 -0
- package/dist/dev-server/reload-queue.d.ts +13 -0
- package/dist/dev-server/reload-queue.d.ts.map +1 -0
- package/dist/dev-server/runtime-stdio.d.ts +8 -0
- package/dist/dev-server/runtime-stdio.d.ts.map +1 -0
- package/dist/dev-server/server-startup-helpers.d.ts +84 -0
- package/dist/dev-server/server-startup-helpers.d.ts.map +1 -0
- package/dist/dev-server/server.d.ts +2 -0
- package/dist/dev-server/server.d.ts.map +1 -1
- package/dist/dev-server/vite-process.d.ts +15 -0
- package/dist/dev-server/vite-process.d.ts.map +1 -0
- package/dist/dev-server/vite-utils.d.ts +19 -1
- package/dist/dev-server/vite-utils.d.ts.map +1 -1
- package/dist/dev-server/worker-source-watcher.d.ts +17 -0
- package/dist/dev-server/worker-source-watcher.d.ts.map +1 -0
- package/dist/dev-server/worker-surface-paths.d.ts +6 -0
- package/dist/dev-server/worker-surface-paths.d.ts.map +1 -0
- package/dist/dev-ymkq3thq.js +2609 -0
- package/dist/{doctor-fmgb3d28.js → doctor-sjrcz7x9.js} +104 -35
- package/dist/{durable-object-t4kbb0yt.js → durable-object-v3gsnybk.js} +1 -1
- package/dist/env.d.ts +10 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index-0gtmnw0m.js +895 -0
- package/dist/index-11p28kxx.js +256 -0
- package/dist/index-15fpa5tx.js +232 -0
- package/dist/index-1d4jg11n.js +542 -0
- package/dist/index-2sc756r1.js +1578 -0
- package/dist/index-3edvz3hs.js +124 -0
- package/dist/index-3jme4hgw.js +1234 -0
- package/dist/index-467tm7r4.js +1033 -0
- package/dist/index-5yvpk954.js +699 -0
- package/dist/index-627srx16.js +45 -0
- package/dist/index-62b3gt2g.js +12 -0
- package/dist/index-6sj0v0dk.js +2284 -0
- package/dist/index-706k4606.js +52 -0
- package/dist/index-7zfv1g9m.js +147 -0
- package/dist/index-85yjb686.js +413 -0
- package/dist/index-aabgympv.js +39 -0
- package/dist/{index-z14anrqp.js → index-aqrwyy57.js} +93 -31
- package/dist/index-c4jmfzz7.js +109 -0
- package/dist/index-c8p4njqy.js +479 -0
- package/dist/index-dm9q84c7.js +360 -0
- package/dist/index-fjmdb57t.js +581 -0
- package/dist/index-g4fcnwhc.js +1205 -0
- package/dist/{index-18hvb6gb.js → index-gn5wy09x.js} +13 -2
- package/dist/index-hpwa6vsw.js +239 -0
- package/dist/index-mg8vwqxf.js +514 -0
- package/dist/index-pmeashfz.js +476 -0
- package/dist/{index-07q6yxyc.js → index-q8f4kawk.js} +68 -32
- package/dist/index-qmmqww7h.js +133 -0
- package/dist/{index-rbht7m9r.js → index-qwgr4q7s.js} +2 -1
- package/dist/index-qz6nbwpw.js +111 -0
- package/dist/index-sqkbyw0c.js +1428 -0
- package/dist/index-stgn34cr.js +148 -0
- package/dist/index-t9y0sve5.js +155 -0
- package/dist/index-thwacc28.js +74 -0
- package/dist/index-vhqww6tt.js +307 -0
- package/dist/{index-1xpj0m4r.js → index-z9gy8w6b.js} +1 -1
- package/dist/index-za0r01bx.js +588 -0
- package/dist/index-zwmphmc5.js +185 -0
- package/dist/index.d.ts +3 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -269
- package/dist/{init-f9mgmew3.js → init-cwpergap.js} +63 -69
- package/dist/login-fthspvbx.js +77 -0
- package/dist/previews-aa16z2hj.js +1337 -0
- package/dist/productions-vemjgfz0.js +505 -0
- package/dist/runtime/context-events.d.ts +13 -0
- package/dist/runtime/context-events.d.ts.map +1 -0
- package/dist/runtime/context-types.d.ts +82 -0
- package/dist/runtime/context-types.d.ts.map +1 -0
- package/dist/runtime/context.d.ts +20 -44
- package/dist/runtime/context.d.ts.map +1 -1
- package/dist/runtime/exports.d.ts +70 -55
- package/dist/runtime/exports.d.ts.map +1 -1
- package/dist/runtime/index.d.ts +8 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +108 -99
- package/dist/runtime/middleware.d.ts +102 -60
- package/dist/runtime/middleware.d.ts.map +1 -1
- package/dist/runtime/router/index.d.ts +7 -0
- package/dist/runtime/router/index.d.ts.map +1 -0
- package/dist/runtime/router/types.d.ts +24 -0
- package/dist/runtime/router/types.d.ts.map +1 -0
- package/dist/runtime/validation.d.ts +17 -3
- package/dist/runtime/validation.d.ts.map +1 -1
- package/dist/secrets/local-secrets.d.ts +46 -0
- package/dist/secrets/local-secrets.d.ts.map +1 -0
- package/dist/secrets-b0x50dd1.js +91 -0
- package/dist/shims/local-hyperdrive.d.ts +12 -0
- package/dist/shims/local-hyperdrive.d.ts.map +1 -0
- package/dist/shims/local-media-bindings.d.ts +19 -0
- package/dist/shims/local-media-bindings.d.ts.map +1 -0
- package/dist/shims/local-worker-loader.d.ts +3 -0
- package/dist/shims/local-worker-loader.d.ts.map +1 -0
- package/dist/sveltekit/index.js +169 -75
- package/dist/sveltekit/local-bindings.d.ts +4 -0
- package/dist/sveltekit/local-bindings.d.ts.map +1 -0
- package/dist/sveltekit/platform.d.ts +19 -1
- package/dist/sveltekit/platform.d.ts.map +1 -1
- package/dist/test/ai-search.d.ts +39 -0
- package/dist/test/ai-search.d.ts.map +1 -0
- package/dist/test/binding-hints.d.ts +11 -0
- package/dist/test/binding-hints.d.ts.map +1 -0
- package/dist/test/cf.d.ts +35 -21
- package/dist/test/cf.d.ts.map +1 -1
- package/dist/test/containers.d.ts +87 -0
- package/dist/test/containers.d.ts.map +1 -0
- package/dist/test/email.d.ts +16 -7
- package/dist/test/email.d.ts.map +1 -1
- package/dist/test/index.d.ts +5 -8
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +4641 -43
- package/dist/test/offline-bindings.d.ts +65 -0
- package/dist/test/offline-bindings.d.ts.map +1 -0
- package/dist/test/queue.d.ts.map +1 -1
- package/dist/test/remote-ai.d.ts.map +1 -1
- package/dist/test/remote-cloudflare.d.ts +13 -0
- package/dist/test/remote-cloudflare.d.ts.map +1 -0
- package/dist/test/remote-vectorize.d.ts.map +1 -1
- package/dist/test/resolve-service-bindings.d.ts +63 -3
- package/dist/test/resolve-service-bindings.d.ts.map +1 -1
- package/dist/test/scheduled.d.ts.map +1 -1
- package/dist/test/should-skip.d.ts +14 -18
- package/dist/test/should-skip.d.ts.map +1 -1
- package/dist/test/simple-context-bindings.d.ts +13 -0
- package/dist/test/simple-context-bindings.d.ts.map +1 -0
- package/dist/test/simple-context-durable-objects.d.ts +6 -0
- package/dist/test/simple-context-durable-objects.d.ts.map +1 -0
- package/dist/test/simple-context-env.d.ts +35 -0
- package/dist/test/simple-context-env.d.ts.map +1 -0
- package/dist/test/simple-context-gateway-script.d.ts +2 -0
- package/dist/test/simple-context-gateway-script.d.ts.map +1 -0
- package/dist/test/simple-context-handlers.d.ts +12 -0
- package/dist/test/simple-context-handlers.d.ts.map +1 -0
- package/dist/test/simple-context-lifecycle.d.ts +32 -0
- package/dist/test/simple-context-lifecycle.d.ts.map +1 -0
- package/dist/test/simple-context-mfconfig.d.ts +10 -0
- package/dist/test/simple-context-mfconfig.d.ts.map +1 -0
- package/dist/test/simple-context-multi-worker.d.ts +16 -0
- package/dist/test/simple-context-multi-worker.d.ts.map +1 -0
- package/dist/test/simple-context-paths.d.ts +40 -0
- package/dist/test/simple-context-paths.d.ts.map +1 -0
- package/dist/test/simple-context-runtime.d.ts +19 -0
- package/dist/test/simple-context-runtime.d.ts.map +1 -0
- package/dist/test/simple-context-startup.d.ts +11 -0
- package/dist/test/simple-context-startup.d.ts.map +1 -0
- package/dist/test/simple-context-transport.d.ts +14 -0
- package/dist/test/simple-context-transport.d.ts.map +1 -0
- package/dist/test/simple-context.d.ts +7 -26
- package/dist/test/simple-context.d.ts.map +1 -1
- package/dist/test/tail.d.ts +2 -1
- package/dist/test/tail.d.ts.map +1 -1
- package/dist/test/utilities/artifacts.d.ts +11 -0
- package/dist/test/utilities/artifacts.d.ts.map +1 -0
- package/dist/test/utilities/context.d.ts +39 -0
- package/dist/test/utilities/context.d.ts.map +1 -0
- package/dist/test/utilities/d1.d.ts +21 -0
- package/dist/test/utilities/d1.d.ts.map +1 -0
- package/dist/test/utilities/env.d.ts +40 -0
- package/dist/test/utilities/env.d.ts.map +1 -0
- package/dist/test/utilities/kv.d.ts +11 -0
- package/dist/test/utilities/kv.d.ts.map +1 -0
- package/dist/test/utilities/media.d.ts +16 -0
- package/dist/test/utilities/media.d.ts.map +1 -0
- package/dist/test/utilities/platform.d.ts +41 -0
- package/dist/test/utilities/platform.d.ts.map +1 -0
- package/dist/test/utilities/queue.d.ts +5 -0
- package/dist/test/utilities/queue.d.ts.map +1 -0
- package/dist/test/utilities/r2.d.ts +2 -0
- package/dist/test/utilities/r2.d.ts.map +1 -0
- package/dist/test/utilities/workflows.d.ts +26 -0
- package/dist/test/utilities/workflows.d.ts.map +1 -0
- package/dist/test/utilities.d.ts +10 -98
- package/dist/test/utilities.d.ts.map +1 -1
- package/dist/test/worker.d.ts +6 -0
- package/dist/test/worker.d.ts.map +1 -1
- package/dist/token-35jcdqq8.js +419 -0
- package/dist/transform/durable-object.d.ts.map +1 -1
- package/dist/transform/worker-entrypoint.d.ts +5 -0
- package/dist/transform/worker-entrypoint.d.ts.map +1 -1
- package/dist/types-03w8zkg6.js +705 -0
- package/dist/utils/entrypoint-discovery.d.ts +6 -3
- package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
- package/dist/utils/resolve-package.d.ts.map +1 -1
- package/dist/utils/send-email.d.ts +15 -0
- package/dist/utils/send-email.d.ts.map +1 -0
- package/dist/utils/send-email.js +19 -0
- package/dist/vite/config-file.d.ts +25 -0
- package/dist/vite/config-file.d.ts.map +1 -0
- package/dist/vite/index.d.ts +1 -0
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +25 -331
- package/dist/vite/plugin-config-hook.d.ts +28 -0
- package/dist/vite/plugin-config-hook.d.ts.map +1 -0
- package/dist/vite/plugin-context.d.ts +27 -0
- package/dist/vite/plugin-context.d.ts.map +1 -0
- package/dist/vite/plugin-durable-objects.d.ts +18 -0
- package/dist/vite/plugin-durable-objects.d.ts.map +1 -0
- package/dist/vite/plugin-programmatic.d.ts +44 -0
- package/dist/vite/plugin-programmatic.d.ts.map +1 -0
- package/dist/vite/plugin-service-bindings.d.ts +13 -0
- package/dist/vite/plugin-service-bindings.d.ts.map +1 -0
- package/dist/vite/plugin-transform.d.ts +41 -0
- package/dist/vite/plugin-transform.d.ts.map +1 -0
- package/dist/vite/plugin.d.ts +10 -41
- package/dist/vite/plugin.d.ts.map +1 -1
- package/dist/worker-55q6b8nc.js +513 -0
- package/dist/worker-entry/composed-worker.d.ts +7 -0
- package/dist/worker-entry/composed-worker.d.ts.map +1 -0
- package/dist/worker-entry/durable-object-discovery.d.ts +20 -0
- package/dist/worker-entry/durable-object-discovery.d.ts.map +1 -0
- package/dist/worker-entry/extensions.d.ts +5 -0
- package/dist/worker-entry/extensions.d.ts.map +1 -0
- package/dist/worker-entry/routes.d.ts +22 -0
- package/dist/worker-entry/routes.d.ts.map +1 -0
- package/dist/worker-entry/surface-paths.d.ts +26 -0
- package/dist/worker-entry/surface-paths.d.ts.map +1 -0
- package/dist/{worker-entrypoint-m9th0rg0.js → worker-entrypoint-3rmzd4c1.js} +3 -1
- package/dist/workflows/local-workflow-entrypoints.d.ts +7 -0
- package/dist/workflows/local-workflow-entrypoints.d.ts.map +1 -0
- package/package.json +154 -115
- package/dist/account-rvrj687w.js +0 -397
- package/dist/bridge/protocol.d.ts.map +0 -1
- package/dist/bridge/serialization.d.ts.map +0 -1
- package/dist/browser-shim/worker.d.ts +0 -14
- package/dist/browser-shim/worker.d.ts.map +0 -1
- package/dist/build-mnf6v8gd.js +0 -53
- package/dist/deploy-nhceck39.js +0 -70
- package/dist/dev-pa8dhm20.js +0 -2162
- package/dist/index-67qcae0f.js +0 -183
- package/dist/index-ep3445yc.js +0 -2225
- package/dist/index-gz1gndna.js +0 -307
- package/dist/index-hcex3rgh.js +0 -266
- package/dist/index-m2q41jwa.js +0 -462
- package/dist/index-n7rs26ft.js +0 -77
- package/dist/index-pf5s73n9.js +0 -1413
- package/dist/index-tfyxa77h.js +0 -850
- package/dist/index-tk6ej9dj.js +0 -94
- package/dist/test/bridge-context.d.ts +0 -76
- package/dist/test/bridge-context.d.ts.map +0 -1
- package/dist/test/multi-worker-context.d.ts +0 -114
- package/dist/test/multi-worker-context.d.ts.map +0 -1
- package/dist/types-5nyrz1sz.js +0 -454
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import {
|
|
2
|
+
apiDelete,
|
|
3
|
+
apiGetAll,
|
|
4
|
+
apiPost,
|
|
5
|
+
apiPut
|
|
6
|
+
} from "./index-mg8vwqxf.js";
|
|
7
|
+
|
|
8
|
+
// src/cloudflare/known-permission-group-ids.generated.ts
|
|
9
|
+
var KNOWN_PERMISSION_GROUP_IDS_DATA = {
|
|
10
|
+
WORKERS_SCRIPTS_WRITE: null,
|
|
11
|
+
WORKERS_SCRIPTS_READ: null,
|
|
12
|
+
ACCOUNT_SETTINGS_READ: null,
|
|
13
|
+
WORKERS_KV_STORAGE_WRITE: null,
|
|
14
|
+
WORKERS_KV_STORAGE_READ: null,
|
|
15
|
+
ACCOUNT_API_TOKENS_WRITE: null,
|
|
16
|
+
ACCOUNT_API_TOKENS_READ: null
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// src/cloudflare/tokens.ts
|
|
20
|
+
var MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS = 300;
|
|
21
|
+
var DEVFLARE_MANAGED_TOKEN_PREFIX = "devflare-";
|
|
22
|
+
var ACCOUNT_OWNED_TOKEN_SCOPE = "com.cloudflare.api.account";
|
|
23
|
+
var ACCOUNT_ZONE_OWNED_TOKEN_SCOPE = "com.cloudflare.api.account.zone";
|
|
24
|
+
var ACCOUNT_API_TOKENS_PERMISSION_GROUP_NAME_PATTERN = /^Account API Tokens\b/i;
|
|
25
|
+
var DEVFLARE_MANAGED_TOKEN_NAME_PATTERN = /^devflare-/i;
|
|
26
|
+
var DEVFLARE_PERMISSION_GROUP_NAME_PATTERNS = [
|
|
27
|
+
/^Account Analytics /i,
|
|
28
|
+
/^Account Settings /i,
|
|
29
|
+
/^Account Filter Lists /i,
|
|
30
|
+
/^AI /i,
|
|
31
|
+
/^Analytics /i,
|
|
32
|
+
/^Browser Rendering /i,
|
|
33
|
+
/^Cache Purge\b/i,
|
|
34
|
+
/^D1 /i,
|
|
35
|
+
/^DNS /i,
|
|
36
|
+
/^Email /i,
|
|
37
|
+
/^Hyperdrive /i,
|
|
38
|
+
/^Images /i,
|
|
39
|
+
/^Logs /i,
|
|
40
|
+
/^Logpush /i,
|
|
41
|
+
/^Pages /i,
|
|
42
|
+
/^Queues /i,
|
|
43
|
+
/^R2 /i,
|
|
44
|
+
/^SSL and Certificates /i,
|
|
45
|
+
/^Stream /i,
|
|
46
|
+
/^Vectorize /i,
|
|
47
|
+
/^Workers /i,
|
|
48
|
+
/^Zone Settings /i,
|
|
49
|
+
/^Zone /i
|
|
50
|
+
];
|
|
51
|
+
function deriveKnownPermissionGroupIds(data) {
|
|
52
|
+
const result = {};
|
|
53
|
+
for (const key of Object.keys(data)) {
|
|
54
|
+
const value = data[key];
|
|
55
|
+
result[key] = value === null ? undefined : value;
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
var KNOWN_PERMISSION_GROUP_IDS = deriveKnownPermissionGroupIds(KNOWN_PERMISSION_GROUP_IDS_DATA);
|
|
60
|
+
function dedupePermissionGroups(permissionGroups) {
|
|
61
|
+
const seenIds = new Set;
|
|
62
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
63
|
+
if (seenIds.has(permissionGroup.id)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
seenIds.add(permissionGroup.id);
|
|
67
|
+
return true;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function dedupePermissionGroupIds(permissionGroupIds) {
|
|
71
|
+
return Array.from(new Set(permissionGroupIds.map((id) => id.trim()).filter(Boolean)));
|
|
72
|
+
}
|
|
73
|
+
function dedupeScopedPermissionGroups(permissionGroups) {
|
|
74
|
+
const seenIds = new Set;
|
|
75
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
76
|
+
const id = permissionGroup.id.trim();
|
|
77
|
+
if (!id || seenIds.has(id)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
seenIds.add(id);
|
|
81
|
+
return true;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function permissionGroupHasScope(permissionGroup, scope) {
|
|
85
|
+
return permissionGroup.scopes.some((value) => value.trim() === scope);
|
|
86
|
+
}
|
|
87
|
+
function buildCreateTokenPoliciesFromPermissionGroups(accountId, permissionGroups) {
|
|
88
|
+
const dedupedPermissionGroups = dedupeScopedPermissionGroups(permissionGroups);
|
|
89
|
+
const accountPermissionGroupIds = dedupePermissionGroupIds(dedupedPermissionGroups.filter((permissionGroup) => permissionGroupHasScope(permissionGroup, ACCOUNT_OWNED_TOKEN_SCOPE)).map((permissionGroup) => permissionGroup.id));
|
|
90
|
+
const zonePermissionGroupIds = dedupePermissionGroupIds(dedupedPermissionGroups.filter((permissionGroup) => permissionGroupHasScope(permissionGroup, ACCOUNT_ZONE_OWNED_TOKEN_SCOPE)).map((permissionGroup) => permissionGroup.id));
|
|
91
|
+
const policies = [];
|
|
92
|
+
if (accountPermissionGroupIds.length > 0) {
|
|
93
|
+
policies.push({
|
|
94
|
+
effect: "allow",
|
|
95
|
+
resources: {
|
|
96
|
+
[`com.cloudflare.api.account.${accountId}`]: "*"
|
|
97
|
+
},
|
|
98
|
+
permission_groups: accountPermissionGroupIds.map((id) => ({ id }))
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (zonePermissionGroupIds.length > 0) {
|
|
102
|
+
policies.push({
|
|
103
|
+
effect: "allow",
|
|
104
|
+
resources: {
|
|
105
|
+
[`com.cloudflare.api.account.${accountId}`]: {
|
|
106
|
+
[`${ACCOUNT_ZONE_OWNED_TOKEN_SCOPE}.*`]: "*"
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
permission_groups: zonePermissionGroupIds.map((id) => ({ id }))
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return policies;
|
|
113
|
+
}
|
|
114
|
+
function buildCreateTokenPoliciesFromPermissionGroupIds(accountId, permissionGroupIds) {
|
|
115
|
+
const dedupedPermissionGroupIds = dedupePermissionGroupIds(permissionGroupIds);
|
|
116
|
+
if (dedupedPermissionGroupIds.length === 0) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
return [
|
|
120
|
+
{
|
|
121
|
+
effect: "allow",
|
|
122
|
+
resources: {
|
|
123
|
+
[`com.cloudflare.api.account.${accountId}`]: "*"
|
|
124
|
+
},
|
|
125
|
+
permission_groups: dedupedPermissionGroupIds.map((id) => ({ id }))
|
|
126
|
+
}
|
|
127
|
+
];
|
|
128
|
+
}
|
|
129
|
+
function excludeAccountApiTokensPermissionGroups(permissionGroups) {
|
|
130
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
131
|
+
return !ACCOUNT_API_TOKENS_PERMISSION_GROUP_NAME_PATTERN.test(permissionGroup.name);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function keepAccountOwnedTokenCompatiblePermissionGroups(permissionGroups) {
|
|
135
|
+
return permissionGroups.filter((permissionGroup) => {
|
|
136
|
+
return permissionGroup.scopes.some((scope) => {
|
|
137
|
+
const normalizedScope = scope.trim();
|
|
138
|
+
return normalizedScope === ACCOUNT_OWNED_TOKEN_SCOPE || normalizedScope === ACCOUNT_ZONE_OWNED_TOKEN_SCOPE;
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function selectReusableAccountOwnedTokenPermissionGroups(permissionGroups) {
|
|
143
|
+
return dedupePermissionGroups(excludeAccountApiTokensPermissionGroups(keepAccountOwnedTokenCompatiblePermissionGroups(permissionGroups)));
|
|
144
|
+
}
|
|
145
|
+
function parseOptionalDate(value) {
|
|
146
|
+
if (!value) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const parsed = new Date(value);
|
|
150
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed;
|
|
151
|
+
}
|
|
152
|
+
function mapAccountOwnedAPITokenPolicy(policy) {
|
|
153
|
+
return {
|
|
154
|
+
id: policy.id,
|
|
155
|
+
effect: policy.effect,
|
|
156
|
+
permissionGroups: policy.permission_groups?.map((permissionGroup) => ({
|
|
157
|
+
id: permissionGroup.id,
|
|
158
|
+
name: permissionGroup.name
|
|
159
|
+
}))
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
function mapAccountOwnedAPIToken(token) {
|
|
163
|
+
return {
|
|
164
|
+
id: token.id,
|
|
165
|
+
name: token.name ?? token.id,
|
|
166
|
+
status: token.status,
|
|
167
|
+
value: token.value,
|
|
168
|
+
issuedOn: parseOptionalDate(token.issued_on),
|
|
169
|
+
modifiedOn: parseOptionalDate(token.modified_on),
|
|
170
|
+
lastUsedOn: parseOptionalDate(token.last_used_on),
|
|
171
|
+
policies: token.policies?.map(mapAccountOwnedAPITokenPolicy)
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function isDevflareManagedTokenName(name) {
|
|
175
|
+
return DEVFLARE_MANAGED_TOKEN_NAME_PATTERN.test(name.trim());
|
|
176
|
+
}
|
|
177
|
+
function normalizeDevflareTokenName(name) {
|
|
178
|
+
const trimmedName = name.trim();
|
|
179
|
+
if (!trimmedName) {
|
|
180
|
+
throw new Error("Devflare token name cannot be empty");
|
|
181
|
+
}
|
|
182
|
+
const suffix = isDevflareManagedTokenName(trimmedName) ? trimmedName.replace(DEVFLARE_MANAGED_TOKEN_NAME_PATTERN, "") : trimmedName;
|
|
183
|
+
if (!suffix) {
|
|
184
|
+
throw new Error("Devflare token name cannot be empty");
|
|
185
|
+
}
|
|
186
|
+
return `${DEVFLARE_MANAGED_TOKEN_PREFIX}${suffix}`;
|
|
187
|
+
}
|
|
188
|
+
function stripDevflareTokenNamePrefix(name) {
|
|
189
|
+
const trimmedName = name.trim();
|
|
190
|
+
if (!trimmedName) {
|
|
191
|
+
return trimmedName;
|
|
192
|
+
}
|
|
193
|
+
const strippedName = trimmedName.replace(DEVFLARE_MANAGED_TOKEN_NAME_PATTERN, "");
|
|
194
|
+
return strippedName || trimmedName;
|
|
195
|
+
}
|
|
196
|
+
function filterDevflareManagedTokens(tokens) {
|
|
197
|
+
return tokens.filter((token) => isDevflareManagedTokenName(token.name));
|
|
198
|
+
}
|
|
199
|
+
function selectDevflarePermissionGroups(permissionGroups) {
|
|
200
|
+
const selectedPermissionGroups = dedupePermissionGroups(selectReusableAccountOwnedTokenPermissionGroups(permissionGroups).filter((permissionGroup) => {
|
|
201
|
+
return DEVFLARE_PERMISSION_GROUP_NAME_PATTERNS.some((pattern) => {
|
|
202
|
+
return pattern.test(permissionGroup.name);
|
|
203
|
+
});
|
|
204
|
+
}));
|
|
205
|
+
if (selectedPermissionGroups.length === 0) {
|
|
206
|
+
throw new Error("Could not map the available Cloudflare permission groups to a Devflare token policy.");
|
|
207
|
+
}
|
|
208
|
+
if (selectedPermissionGroups.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
|
|
209
|
+
throw new Error(`Devflare selected ${selectedPermissionGroups.length} permission groups, which exceeds Cloudflare's ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS}-group limit for account-owned tokens.`);
|
|
210
|
+
}
|
|
211
|
+
return selectedPermissionGroups;
|
|
212
|
+
}
|
|
213
|
+
function selectAllReusablePermissionGroups(permissionGroups) {
|
|
214
|
+
const selectedPermissionGroups = selectReusableAccountOwnedTokenPermissionGroups(permissionGroups);
|
|
215
|
+
if (selectedPermissionGroups.length === 0) {
|
|
216
|
+
throw new Error("Could not find any reusable account/zone-scoped Cloudflare permission groups for this Devflare token.");
|
|
217
|
+
}
|
|
218
|
+
if (selectedPermissionGroups.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
|
|
219
|
+
throw new Error(`Devflare selected ${selectedPermissionGroups.length} permission groups, which exceeds Cloudflare's ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS}-group limit for account-owned tokens.`);
|
|
220
|
+
}
|
|
221
|
+
return selectedPermissionGroups;
|
|
222
|
+
}
|
|
223
|
+
async function listAccountTokenPermissionGroups(accountId, options) {
|
|
224
|
+
const permissionGroups = await apiGetAll(`/accounts/${accountId}/tokens/permission_groups`, options);
|
|
225
|
+
return dedupePermissionGroups(permissionGroups);
|
|
226
|
+
}
|
|
227
|
+
async function listAccountOwnedAPITokens(accountId, options) {
|
|
228
|
+
const tokens = await apiGetAll(`/accounts/${accountId}/tokens`, options);
|
|
229
|
+
return tokens.map(mapAccountOwnedAPIToken);
|
|
230
|
+
}
|
|
231
|
+
async function deleteAccountOwnedAPIToken(accountId, tokenId, options) {
|
|
232
|
+
return apiDelete(`/accounts/${accountId}/tokens/${tokenId}`, options);
|
|
233
|
+
}
|
|
234
|
+
async function rollAccountOwnedAPITokenValue(accountId, tokenId, options) {
|
|
235
|
+
return apiPut(`/accounts/${accountId}/tokens/${tokenId}/value`, {}, options);
|
|
236
|
+
}
|
|
237
|
+
async function createAccountOwnedAPIToken(accountId, options, clientOptions) {
|
|
238
|
+
const permissionGroupIds = dedupePermissionGroupIds(options.permissionGroups?.map((permissionGroup) => permissionGroup.id) ?? options.permissionGroupIds ?? []);
|
|
239
|
+
if (permissionGroupIds.length === 0) {
|
|
240
|
+
throw new Error("Cannot create a Devflare token without any permission groups");
|
|
241
|
+
}
|
|
242
|
+
if (permissionGroupIds.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
|
|
243
|
+
throw new Error(`Cannot create a Devflare token with more than ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS} permission groups.`);
|
|
244
|
+
}
|
|
245
|
+
const policies = options.permissionGroups ? buildCreateTokenPoliciesFromPermissionGroups(accountId, options.permissionGroups) : buildCreateTokenPoliciesFromPermissionGroupIds(accountId, permissionGroupIds);
|
|
246
|
+
if (policies.length === 0) {
|
|
247
|
+
throw new Error("Cannot create a Devflare token without any account- or zone-scoped permission groups");
|
|
248
|
+
}
|
|
249
|
+
const createdToken = await apiPost(`/accounts/${accountId}/tokens`, {
|
|
250
|
+
name: options.name,
|
|
251
|
+
policies
|
|
252
|
+
}, clientOptions);
|
|
253
|
+
return mapAccountOwnedAPIToken(createdToken);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export { normalizeDevflareTokenName, stripDevflareTokenNamePrefix, filterDevflareManagedTokens, selectDevflarePermissionGroups, selectAllReusablePermissionGroups, listAccountTokenPermissionGroups, listAccountOwnedAPITokens, deleteAccountOwnedAPIToken, rollAccountOwnedAPITokenValue, createAccountOwnedAPIToken };
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DEVFLARE_KV_NAMESPACE_TITLE,
|
|
3
|
+
getEffectiveAccountId,
|
|
4
|
+
getOrCreateNamedKVNamespace,
|
|
5
|
+
getPrimaryAccount
|
|
6
|
+
} from "./index-1d4jg11n.js";
|
|
7
|
+
import {
|
|
8
|
+
isAuthenticated,
|
|
9
|
+
kvGet,
|
|
10
|
+
kvPut
|
|
11
|
+
} from "./index-mg8vwqxf.js";
|
|
12
|
+
|
|
13
|
+
// src/cloudflare/usage.ts
|
|
14
|
+
var USAGE_KEY_PREFIX = "usage:";
|
|
15
|
+
var LIMITS_KEY = "limits";
|
|
16
|
+
var DEFAULT_LIMITS = {
|
|
17
|
+
aiTokensPerDay: 1e4,
|
|
18
|
+
aiRequestsPerDay: 100,
|
|
19
|
+
vectorizeOpsPerDay: 1000,
|
|
20
|
+
enabled: true
|
|
21
|
+
};
|
|
22
|
+
async function getOrCreateUsageNamespace(accountId) {
|
|
23
|
+
return getOrCreateNamedKVNamespace(accountId, DEVFLARE_KV_NAMESPACE_TITLE);
|
|
24
|
+
}
|
|
25
|
+
function getTodayDate() {
|
|
26
|
+
return new Date().toISOString().split("T")[0];
|
|
27
|
+
}
|
|
28
|
+
function buildUsageKey(service, date) {
|
|
29
|
+
return `${USAGE_KEY_PREFIX}${service}:${date}`;
|
|
30
|
+
}
|
|
31
|
+
async function getUsage(accountId, service, date) {
|
|
32
|
+
const targetDate = date ?? getTodayDate();
|
|
33
|
+
const namespaceId = await getOrCreateUsageNamespace(accountId);
|
|
34
|
+
const key = buildUsageKey(service, targetDate);
|
|
35
|
+
const value = await kvGet(accountId, namespaceId, key);
|
|
36
|
+
if (value === null) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
return JSON.parse(value);
|
|
41
|
+
} catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
var MAX_RECORD_USAGE_ATTEMPTS = 5;
|
|
46
|
+
async function recordUsage(accountId, service, count = 1, deps = {}) {
|
|
47
|
+
const kvGetFn = deps.kvGet ?? kvGet;
|
|
48
|
+
const kvPutFn = deps.kvPut ?? kvPut;
|
|
49
|
+
const getNamespaceId = deps.getNamespaceId ?? getOrCreateUsageNamespace;
|
|
50
|
+
const sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
51
|
+
const now = deps.now ?? (() => new Date);
|
|
52
|
+
const maxAttempts = deps.maxAttempts ?? MAX_RECORD_USAGE_ATTEMPTS;
|
|
53
|
+
const warn = deps.warn ?? ((message) => console.warn(message));
|
|
54
|
+
const today = now().toISOString().split("T")[0];
|
|
55
|
+
const namespaceId = await getNamespaceId(accountId);
|
|
56
|
+
const key = buildUsageKey(service, today);
|
|
57
|
+
let lastWritten = null;
|
|
58
|
+
let lastObserved = null;
|
|
59
|
+
for (let attempt = 0;attempt < maxAttempts; attempt++) {
|
|
60
|
+
const existingRaw = await kvGetFn(accountId, namespaceId, key);
|
|
61
|
+
let existing = null;
|
|
62
|
+
if (existingRaw !== null) {
|
|
63
|
+
try {
|
|
64
|
+
existing = JSON.parse(existingRaw);
|
|
65
|
+
} catch {
|
|
66
|
+
existing = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
lastObserved = existing;
|
|
70
|
+
const record = {
|
|
71
|
+
service,
|
|
72
|
+
date: today,
|
|
73
|
+
count: (existing?.count ?? 0) + count,
|
|
74
|
+
updatedAt: now().toISOString()
|
|
75
|
+
};
|
|
76
|
+
await kvPutFn(accountId, namespaceId, key, JSON.stringify(record));
|
|
77
|
+
lastWritten = record;
|
|
78
|
+
const verifyRaw = await kvGetFn(accountId, namespaceId, key);
|
|
79
|
+
if (verifyRaw !== null) {
|
|
80
|
+
try {
|
|
81
|
+
const verify = JSON.parse(verifyRaw);
|
|
82
|
+
if (verify.updatedAt === record.updatedAt && verify.count === record.count) {
|
|
83
|
+
return record;
|
|
84
|
+
}
|
|
85
|
+
} catch {}
|
|
86
|
+
}
|
|
87
|
+
if (attempt < maxAttempts - 1) {
|
|
88
|
+
const backoffMs = Math.min(25 * 2 ** attempt, 400);
|
|
89
|
+
await sleep(backoffMs);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
warn(`[devflare] recordUsage: could not confirm usage write for ${service} after ${maxAttempts} attempts ` + "due to concurrent writes; usage counts are best-effort under concurrency.");
|
|
93
|
+
return lastWritten ?? {
|
|
94
|
+
service,
|
|
95
|
+
date: today,
|
|
96
|
+
count: (lastObserved?.count ?? 0) + count,
|
|
97
|
+
updatedAt: now().toISOString()
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function resetUsage(accountId, service) {
|
|
101
|
+
const today = getTodayDate();
|
|
102
|
+
const namespaceId = await getOrCreateUsageNamespace(accountId);
|
|
103
|
+
const key = buildUsageKey(service, today);
|
|
104
|
+
const record = {
|
|
105
|
+
service,
|
|
106
|
+
date: today,
|
|
107
|
+
count: 0,
|
|
108
|
+
updatedAt: new Date().toISOString()
|
|
109
|
+
};
|
|
110
|
+
await kvPut(accountId, namespaceId, key, JSON.stringify(record));
|
|
111
|
+
}
|
|
112
|
+
async function getLimits(accountId) {
|
|
113
|
+
const namespaceId = await getOrCreateUsageNamespace(accountId);
|
|
114
|
+
const value = await kvGet(accountId, namespaceId, LIMITS_KEY);
|
|
115
|
+
if (value === null) {
|
|
116
|
+
return DEFAULT_LIMITS;
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
return { ...DEFAULT_LIMITS, ...JSON.parse(value) };
|
|
120
|
+
} catch {
|
|
121
|
+
return DEFAULT_LIMITS;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function setLimits(accountId, limits) {
|
|
125
|
+
const namespaceId = await getOrCreateUsageNamespace(accountId);
|
|
126
|
+
const current = await getLimits(accountId);
|
|
127
|
+
const updated = {
|
|
128
|
+
...current,
|
|
129
|
+
...limits
|
|
130
|
+
};
|
|
131
|
+
await kvPut(accountId, namespaceId, LIMITS_KEY, JSON.stringify(updated));
|
|
132
|
+
return updated;
|
|
133
|
+
}
|
|
134
|
+
async function setLimitsEnabled(accountId, enabled) {
|
|
135
|
+
return setLimits(accountId, { enabled });
|
|
136
|
+
}
|
|
137
|
+
async function isWithinLimits(accountId, service) {
|
|
138
|
+
const limits = await getLimits(accountId);
|
|
139
|
+
if (!limits.enabled) {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
const usage = await getUsage(accountId, service);
|
|
143
|
+
const currentCount = usage?.count ?? 0;
|
|
144
|
+
switch (service) {
|
|
145
|
+
case "ai":
|
|
146
|
+
if (limits.aiRequestsPerDay && currentCount >= limits.aiRequestsPerDay) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
case "vectorize":
|
|
151
|
+
if (limits.vectorizeOpsPerDay && currentCount >= limits.vectorizeOpsPerDay) {
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
default:
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function getUsageSummary(accountId, service) {
|
|
160
|
+
const limits = await getLimits(accountId);
|
|
161
|
+
const usage = await getUsage(accountId, service);
|
|
162
|
+
const currentCount = usage?.count ?? 0;
|
|
163
|
+
let limit;
|
|
164
|
+
switch (service) {
|
|
165
|
+
case "ai":
|
|
166
|
+
limit = limits.aiRequestsPerDay;
|
|
167
|
+
break;
|
|
168
|
+
case "vectorize":
|
|
169
|
+
limit = limits.vectorizeOpsPerDay;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
const withinLimit = limit === undefined || currentCount < limit;
|
|
173
|
+
const percentUsed = limit ? currentCount / limit * 100 : undefined;
|
|
174
|
+
return {
|
|
175
|
+
service,
|
|
176
|
+
today: currentCount,
|
|
177
|
+
limit,
|
|
178
|
+
withinLimit,
|
|
179
|
+
percentUsed
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async function getAllUsageSummaries(accountId) {
|
|
183
|
+
const trackedServices = ["ai", "vectorize"];
|
|
184
|
+
return Promise.all(trackedServices.map((s) => getUsageSummary(accountId, s)));
|
|
185
|
+
}
|
|
186
|
+
async function canProceedWithTest(accountId, service) {
|
|
187
|
+
const limits = await getLimits(accountId);
|
|
188
|
+
if (!limits.enabled) {
|
|
189
|
+
return { allowed: true };
|
|
190
|
+
}
|
|
191
|
+
const withinLimits = await isWithinLimits(accountId, service);
|
|
192
|
+
if (!withinLimits) {
|
|
193
|
+
const summary = await getUsageSummary(accountId, service);
|
|
194
|
+
return {
|
|
195
|
+
allowed: false,
|
|
196
|
+
reason: `Daily limit exceeded for ${service}: ${summary.today}/${summary.limit} (${summary.percentUsed?.toFixed(1)}%)`
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return { allowed: true };
|
|
200
|
+
}
|
|
201
|
+
async function recordTestUsage(accountId, service, count = 1) {
|
|
202
|
+
await recordUsage(accountId, service, count);
|
|
203
|
+
}
|
|
204
|
+
async function shouldSkip(service) {
|
|
205
|
+
try {
|
|
206
|
+
const isAuth = await isAuthenticated();
|
|
207
|
+
if (!isAuth) {
|
|
208
|
+
console.log(`⏭️ ${service.toUpperCase()} tests skipped: Not authenticated. Run: bunx wrangler login`);
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
const primary = await getPrimaryAccount();
|
|
212
|
+
if (!primary) {
|
|
213
|
+
console.log(`⏭️ ${service.toUpperCase()} tests skipped: No Cloudflare account found`);
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
const { accountId } = await getEffectiveAccountId(primary.id);
|
|
217
|
+
try {
|
|
218
|
+
const { allowed, reason } = await canProceedWithTest(accountId, service);
|
|
219
|
+
if (!allowed) {
|
|
220
|
+
console.log(`⏭️ ${service.toUpperCase()} tests skipped: ${reason}`);
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
} catch {}
|
|
224
|
+
return false;
|
|
225
|
+
} catch (error) {
|
|
226
|
+
const message = error instanceof Error ? error.message : "Unknown error";
|
|
227
|
+
console.log(`⏭️ ${service.toUpperCase()} tests skipped: ${message}`);
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export { getUsage, recordUsage, resetUsage, getLimits, setLimits, setLimitsEnabled, isWithinLimits, getUsageSummary, getAllUsageSummaries, canProceedWithTest, recordTestUsage, shouldSkip };
|