devflare 1.0.0-next.5 → 1.0.0-next.50
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/LICENSE +21 -0
- package/LLM.md +17312 -2139
- package/README.md +394 -605
- package/bin/devflare.js +30 -14
- package/dist/_chunks/account-BI3WZMDy.js +462 -0
- package/dist/_chunks/account-resources-CsmVowJp.js +159 -0
- package/dist/_chunks/ai-CBEuLdoP.js +322 -0
- package/dist/_chunks/api-TzdliH-6.js +568 -0
- package/dist/_chunks/build-artifacts-DU5V0J0Z.js +483 -0
- package/dist/_chunks/build-e0KR38-4.js +24 -0
- package/dist/_chunks/cli-DuUz10Mn.js +1163 -0
- package/dist/_chunks/cloudflare-BaloqI3H.js +157 -0
- package/dist/_chunks/colors-DiK6wPJ5.js +13 -0
- package/dist/_chunks/command-utils-DA0Qx9_K.js +45 -0
- package/dist/_chunks/compiler-Zw16C9Pi.js +489 -0
- package/dist/_chunks/config-Brju62xy.js +78 -0
- package/dist/_chunks/config-path-DaL1ylZ_.js +42 -0
- package/dist/_chunks/context-CX50Y2Kb.js +2250 -0
- package/dist/_chunks/decorators-QmV57ixr.js +19 -0
- package/dist/_chunks/dependencies-C2oxFjU_.js +57 -0
- package/dist/_chunks/deploy-B-Kku1Vk.js +1032 -0
- package/dist/_chunks/dev-D4e_RRZn.js +3471 -0
- package/dist/_chunks/doctor-jm_K4dxL.js +219 -0
- package/dist/_chunks/durable-object-DMtH0XYX.js +234 -0
- package/dist/_chunks/env-S0_nMVz1.js +125 -0
- package/dist/_chunks/family-_9-mGSfO.js +143 -0
- package/dist/_chunks/generated-artifacts-dMJY4KAt.js +32 -0
- package/dist/_chunks/glob-CmQOvunB.js +56 -0
- package/dist/_chunks/init-DnkJOmpW.js +165 -0
- package/dist/_chunks/loader-Cr0_OWPy.js +1288 -0
- package/dist/_chunks/local-dev-vars-CTSa-wvF.js +81 -0
- package/dist/_chunks/local-hyperdrive-CJ90j46O.js +119 -0
- package/dist/_chunks/local-media-bindings-DsAW4AMF.js +335 -0
- package/dist/_chunks/local-secrets-DMPkmOn3.js +123 -0
- package/dist/_chunks/local-workflow-entrypoints-Cq_WJajd.js +90 -0
- package/dist/_chunks/login-FjTAAQbi.js +51 -0
- package/dist/_chunks/package-metadata-DjHBLB-z.js +39 -0
- package/dist/_chunks/preferences-BKp_7XJx.js +241 -0
- package/dist/_chunks/preview-C3Cdr8an.js +462 -0
- package/dist/_chunks/preview-registry-ClAbLTHH.js +1186 -0
- package/dist/_chunks/preview-resources-CGMBjsYB.js +359 -0
- package/dist/_chunks/previews-C7hs9-BT.js +1134 -0
- package/dist/_chunks/productions-T9Als4fE.js +411 -0
- package/dist/_chunks/ref-CYJNAAe_.js +178 -0
- package/dist/_chunks/remote-CZnP-HLJ.js +79 -0
- package/dist/_chunks/remote-config-D39BY9ji.js +132 -0
- package/dist/_chunks/resolve-package-qizBfCIm.js +152 -0
- package/dist/_chunks/rolldown-runtime-CvQ6eiug.js +14 -0
- package/dist/_chunks/routes-BFYCqHb-.js +833 -0
- package/dist/_chunks/runtime-DL-Nz3k8.js +550 -0
- package/dist/_chunks/schema-normalization-BCwTLTGp.js +660 -0
- package/dist/_chunks/secrets-DIpJGe6C.js +95 -0
- package/dist/_chunks/tail-IY-ijYmv.js +239 -0
- package/dist/_chunks/token-Dmi0KXyX.js +333 -0
- package/dist/_chunks/tokens-iVcgNXi-.js +221 -0
- package/dist/_chunks/types-DoKsMYfm.js +484 -0
- package/dist/_chunks/ui-BUoZApvE.js +103 -0
- package/dist/_chunks/usage-BBTGzjon.js +272 -0
- package/dist/_chunks/vite-CGtVNf5E.js +1267 -0
- package/dist/_chunks/vite-utils-OVLMV605.js +183 -0
- package/dist/_chunks/worker-BEZI4od1.js +410 -0
- package/dist/_chunks/worker-bundler-dTTnYU3n.js +458 -0
- package/dist/_chunks/worker-entrypoint-CQW77lG8.js +247 -0
- package/dist/_chunks/workerName-CFJsLZA-.js +23 -0
- package/dist/bridge/client.d.ts +49 -7
- 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 +6 -6
- 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 +82 -2
- package/dist/bridge/miniflare.d.ts.map +1 -1
- package/dist/bridge/proxy.d.ts +12 -11
- 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 +46 -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} +32 -8
- 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 +2 -2
- package/dist/browser-shim/handler.d.ts.map +1 -1
- package/dist/browser-shim/index.d.ts +2 -2
- package/dist/browser-shim/server.d.ts +63 -0
- package/dist/browser-shim/server.d.ts.map +1 -1
- package/dist/browser.d.ts +5411 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +80 -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 +3 -1
- 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 +2 -2
- package/dist/cli/commands/account.d.ts.map +1 -1
- package/dist/cli/commands/ai.d.ts +1 -1
- package/dist/cli/commands/ai.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 +2 -2
- 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 +9 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts +2 -2
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts +2 -2
- 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/remote.d.ts +1 -1
- package/dist/cli/commands/remote.d.ts.map +1 -1
- package/dist/cli/commands/secrets.d.ts +4 -0
- package/dist/cli/commands/secrets.d.ts.map +1 -0
- package/dist/cli/commands/tail.d.ts +44 -0
- package/dist/cli/commands/tail.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 +121 -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 +2 -2
- 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 +2 -1
- 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/gradual-deploy.d.ts +49 -0
- package/dist/cli/gradual-deploy.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 +2 -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/cli/wrangler-auth.d.ts +1 -1
- 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 +1 -1
- package/dist/cloudflare/auth.d.ts.map +1 -1
- package/dist/cloudflare/index.d.ts +61 -6
- package/dist/cloudflare/index.d.ts.map +1 -1
- package/dist/cloudflare/index.js +4 -13
- 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/remote-config.d.ts.map +1 -1
- 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 +31 -3
- 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 +298 -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/cron.d.ts +19 -0
- package/dist/config/cron.d.ts.map +1 -0
- package/dist/config/define.d.ts +8 -5
- 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 +2 -1
- 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 +29 -0
- package/dist/config/preview.d.ts.map +1 -0
- package/dist/config/ref.d.ts +16 -25
- 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 +2025 -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 +3579 -0
- package/dist/config/schema-env.d.ts.map +1 -0
- package/dist/config/schema-normalization.d.ts +265 -0
- package/dist/config/schema-normalization.d.ts.map +1 -0
- package/dist/config/schema-runtime.d.ts +508 -0
- package/dist/config/schema-runtime.d.ts.map +1 -0
- package/dist/config/schema-types-bindings-platform.d.ts +508 -0
- package/dist/config/schema-types-bindings-platform.d.ts.map +1 -0
- package/dist/config/schema-types-bindings-resources.d.ts +767 -0
- package/dist/config/schema-types-bindings-resources.d.ts.map +1 -0
- package/dist/config/schema-types-bindings.d.ts +293 -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 +424 -0
- package/dist/config/schema-types.d.ts.map +1 -0
- package/dist/config/schema.d.ts +5324 -2011
- 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-entry.d.ts +7 -0
- package/dist/config-entry.d.ts.map +1 -0
- package/dist/config-entry.js +3 -0
- package/dist/decorators/durable-object.d.ts.map +1 -1
- package/dist/decorators/index.d.ts +2 -2
- package/dist/decorators/index.js +2 -9
- 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/index.d.ts +1 -1
- package/dist/dev-server/miniflare-bindings.d.ts +81 -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 +82 -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/env.d.ts +10 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index.d.ts +8 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -298
- 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 +10 -3
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +5 -111
- package/dist/runtime/middleware.d.ts +119 -67
- 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 +18 -4
- 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/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.d.ts +1 -1
- package/dist/sveltekit/index.d.ts.map +1 -1
- package/dist/sveltekit/index.js +313 -167
- 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 +20 -2
- 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/alarm.d.ts +55 -0
- package/dist/test/alarm.d.ts.map +1 -0
- package/dist/test/binding-hints.d.ts +10 -0
- package/dist/test/binding-hints.d.ts.map +1 -0
- package/dist/test/cf.d.ts +71 -35
- 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 +20 -21
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +4971 -70
- package/dist/test/offline-bindings.d.ts +115 -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 +64 -4
- 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 +8 -27
- package/dist/test/simple-context.d.ts.map +1 -1
- package/dist/test/tail.d.ts +3 -2
- package/dist/test/tail.d.ts.map +1 -1
- package/dist/test/utilities/analytics-engine.d.ts +22 -0
- package/dist/test/utilities/analytics-engine.d.ts.map +1 -0
- 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 +43 -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/stream-flagship.d.ts +27 -0
- package/dist/test/utilities/stream-flagship.d.ts.map +1 -0
- package/dist/test/utilities/vectorize.d.ts +38 -0
- package/dist/test/utilities/vectorize.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 +13 -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/transform/durable-object.d.ts.map +1 -1
- package/dist/transform/index.d.ts +2 -2
- package/dist/transform/worker-entrypoint.d.ts +5 -0
- package/dist/transform/worker-entrypoint.d.ts.map +1 -1
- package/dist/utils/entrypoint-discovery.d.ts +6 -3
- package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
- package/dist/utils/glob.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 +163 -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 +3 -2
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +2 -339
- 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-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-entry/validate-fetch-style.d.ts +12 -0
- package/dist/worker-entry/validate-fetch-style.d.ts.map +1 -0
- package/dist/workflows/local-workflow-entrypoints.d.ts +7 -0
- package/dist/workflows/local-workflow-entrypoints.d.ts.map +1 -0
- package/package.json +159 -116
- package/R2.md +0 -170
- package/dist/account-rvrj687w.js +0 -397
- package/dist/ai-dx4fr9jh.js +0 -107
- 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-b9dmrj7b.js +0 -2417
- package/dist/doctor-fmgb3d28.js +0 -190
- package/dist/durable-object-t4kbb0yt.js +0 -13
- package/dist/index-07q6yxyc.js +0 -168
- package/dist/index-18hvb6gb.js +0 -194
- package/dist/index-1xpj0m4r.js +0 -57
- package/dist/index-37x76zdn.js +0 -4
- package/dist/index-3t6rypgc.js +0 -13
- package/dist/index-67qcae0f.js +0 -183
- package/dist/index-a855bdsx.js +0 -18
- package/dist/index-d8bdkx2h.js +0 -109
- 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-rbht7m9r.js +0 -36
- package/dist/index-tfyxa77h.js +0 -850
- package/dist/index-tk6ej9dj.js +0 -94
- package/dist/index-z14anrqp.js +0 -226
- package/dist/init-f9mgmew3.js +0 -186
- package/dist/remote-q59qk463.js +0 -97
- 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
- package/dist/worker-entrypoint-m9th0rg0.js +0 -13
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { i as listLocalSecrets, o as writeLocalSecret, r as deleteLocalSecret } from "./local-secrets-DMPkmOn3.js";
|
|
2
|
+
//#region src/cli/commands/secrets.ts
|
|
3
|
+
function getStringOption(options, key) {
|
|
4
|
+
const value = options[key];
|
|
5
|
+
return typeof value === "string" ? value : void 0;
|
|
6
|
+
}
|
|
7
|
+
function getCwd(options) {
|
|
8
|
+
return options.cwd ?? process.cwd();
|
|
9
|
+
}
|
|
10
|
+
function requireLocalFlag(parsed, logger) {
|
|
11
|
+
if (parsed.options.local === true) return true;
|
|
12
|
+
logger.error("Local Secrets Store commands require --local.");
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
function requireStoreAndName(parsed, logger) {
|
|
16
|
+
const storeId = getStringOption(parsed.options, "store");
|
|
17
|
+
const name = getStringOption(parsed.options, "name");
|
|
18
|
+
if (!storeId || !name) {
|
|
19
|
+
logger.error("Pass --store <id> and --name <name>.");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
storeId,
|
|
24
|
+
name
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function formatSecretRef(storeId, name) {
|
|
28
|
+
return `${storeId}/${name}`;
|
|
29
|
+
}
|
|
30
|
+
function usage() {
|
|
31
|
+
return [
|
|
32
|
+
"devflare secrets --local --store <id> --name <name> --value <value>",
|
|
33
|
+
"devflare secrets --local --store <id> --list",
|
|
34
|
+
"devflare secrets --local --store <id> --name <name> --delete"
|
|
35
|
+
].join("\n");
|
|
36
|
+
}
|
|
37
|
+
function runSecretsCommand(parsed, logger, options) {
|
|
38
|
+
if (!requireLocalFlag(parsed, logger)) return {
|
|
39
|
+
exitCode: 1,
|
|
40
|
+
output: usage()
|
|
41
|
+
};
|
|
42
|
+
const cwd = getCwd(options);
|
|
43
|
+
const storeId = getStringOption(parsed.options, "store");
|
|
44
|
+
if (parsed.options.list === true) {
|
|
45
|
+
const output = listLocalSecrets({
|
|
46
|
+
cwd,
|
|
47
|
+
storeId
|
|
48
|
+
}).map((row) => formatSecretRef(row.storeId, row.name)).join("\n");
|
|
49
|
+
if (output) logger.info(output);
|
|
50
|
+
return {
|
|
51
|
+
exitCode: 0,
|
|
52
|
+
output
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const required = requireStoreAndName(parsed, logger);
|
|
56
|
+
if (!required) return {
|
|
57
|
+
exitCode: 1,
|
|
58
|
+
output: usage()
|
|
59
|
+
};
|
|
60
|
+
if (parsed.options.delete === true) {
|
|
61
|
+
deleteLocalSecret({
|
|
62
|
+
cwd,
|
|
63
|
+
storeId: required.storeId,
|
|
64
|
+
name: required.name
|
|
65
|
+
});
|
|
66
|
+
const output = formatSecretRef(required.storeId, required.name);
|
|
67
|
+
logger.success(`Deleted local secret ${output}`);
|
|
68
|
+
return {
|
|
69
|
+
exitCode: 0,
|
|
70
|
+
output
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const value = getStringOption(parsed.options, "value");
|
|
74
|
+
if (value === void 0) {
|
|
75
|
+
logger.error("Pass --value <value>, --list, or --delete.");
|
|
76
|
+
return {
|
|
77
|
+
exitCode: 1,
|
|
78
|
+
output: usage()
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
writeLocalSecret({
|
|
82
|
+
cwd,
|
|
83
|
+
storeId: required.storeId,
|
|
84
|
+
name: required.name,
|
|
85
|
+
value
|
|
86
|
+
});
|
|
87
|
+
const output = formatSecretRef(required.storeId, required.name);
|
|
88
|
+
logger.success(`Stored local secret ${output}`);
|
|
89
|
+
return {
|
|
90
|
+
exitCode: 0,
|
|
91
|
+
output
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { runSecretsCommand };
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { r as loadConfig } from "./loader-Cr0_OWPy.js";
|
|
2
|
+
import { p as getApiToken } from "./api-TzdliH-6.js";
|
|
3
|
+
import { d as green, f as logLine, g as yellow, h as whiteDim, m as red, o as dim, r as createCliTheme } from "./ui-BUoZApvE.js";
|
|
4
|
+
import { r as resolveCloudflareAccountId, t as asOptionalString } from "./command-utils-DA0Qx9_K.js";
|
|
5
|
+
//#region src/cli/commands/tail.ts
|
|
6
|
+
const CLOUDFLARE_API_BASE = "https://api.cloudflare.com/client/v4";
|
|
7
|
+
const TAIL_SUBPROTOCOL = "trace-v1";
|
|
8
|
+
function parseTailFormat(value) {
|
|
9
|
+
const normalized = asOptionalString(value)?.toLowerCase();
|
|
10
|
+
if (normalized === void 0 || normalized === "pretty") return "pretty";
|
|
11
|
+
if (normalized === "json") return "json";
|
|
12
|
+
throw new Error(`--format must be "pretty" or "json", received "${String(value)}".`);
|
|
13
|
+
}
|
|
14
|
+
function formatTimestamp(timestamp) {
|
|
15
|
+
if (typeof timestamp !== "number" || !Number.isFinite(timestamp)) return (/* @__PURE__ */ new Date()).toISOString();
|
|
16
|
+
return new Date(timestamp).toISOString();
|
|
17
|
+
}
|
|
18
|
+
function describeTriggerEvent(event) {
|
|
19
|
+
if (!event) return "event";
|
|
20
|
+
if (event.request?.url) return `${event.request.method ?? "GET"} ${event.request.url}`;
|
|
21
|
+
if (event.cron) return `cron ${event.cron}`;
|
|
22
|
+
if (event.queue) return `queue ${event.queue}`;
|
|
23
|
+
if (event.mailFrom) return `email from ${event.mailFrom}`;
|
|
24
|
+
if (event.rpcMethod) return `rpc ${event.rpcMethod}`;
|
|
25
|
+
return "event";
|
|
26
|
+
}
|
|
27
|
+
function stringifyLogMessage(message) {
|
|
28
|
+
if (typeof message === "string") return message;
|
|
29
|
+
if (Array.isArray(message)) return message.map((part) => stringifyLogMessage(part)).join(" ");
|
|
30
|
+
if (message === void 0) return "";
|
|
31
|
+
try {
|
|
32
|
+
return JSON.stringify(message);
|
|
33
|
+
} catch {
|
|
34
|
+
return String(message);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Render one trace event as the lines `devflare tail` prints in pretty mode.
|
|
39
|
+
* Returns an ordered list of `{ level, text }` so the caller can route each
|
|
40
|
+
* line to the matching logger method (and tests can assert content without
|
|
41
|
+
* ANSI noise).
|
|
42
|
+
*/
|
|
43
|
+
function formatTailEventLines(event) {
|
|
44
|
+
const lines = [];
|
|
45
|
+
const timestamp = formatTimestamp(event.eventTimestamp);
|
|
46
|
+
const outcome = event.outcome ?? "unknown";
|
|
47
|
+
const trigger = describeTriggerEvent(event.event);
|
|
48
|
+
const scriptName = event.scriptName ? ` ${event.scriptName}` : "";
|
|
49
|
+
lines.push({
|
|
50
|
+
level: outcome === "ok" ? "info" : "error",
|
|
51
|
+
text: `[${timestamp}]${scriptName} ${trigger} — ${outcome}`
|
|
52
|
+
});
|
|
53
|
+
for (const log of event.logs ?? []) {
|
|
54
|
+
const level = log.level ?? "log";
|
|
55
|
+
const text = stringifyLogMessage(log.message);
|
|
56
|
+
lines.push({
|
|
57
|
+
level: level === "error" || level === "warn" ? level : "info",
|
|
58
|
+
text: ` ${level}: ${text}`
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
for (const exception of event.exceptions ?? []) {
|
|
62
|
+
const name = exception.name ?? "Error";
|
|
63
|
+
const message = exception.message ?? "";
|
|
64
|
+
lines.push({
|
|
65
|
+
level: "error",
|
|
66
|
+
text: ` exception ${name}: ${message}`
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return lines;
|
|
70
|
+
}
|
|
71
|
+
async function readEnvelope(response, endpoint) {
|
|
72
|
+
const text = await response.text();
|
|
73
|
+
let parsed;
|
|
74
|
+
try {
|
|
75
|
+
parsed = JSON.parse(text);
|
|
76
|
+
} catch {
|
|
77
|
+
throw new Error(`Cloudflare ${endpoint} returned an invalid response (status ${response.status}).`);
|
|
78
|
+
}
|
|
79
|
+
if (!parsed.success) {
|
|
80
|
+
const first = parsed.errors?.[0];
|
|
81
|
+
throw new Error(first ? `Cloudflare ${endpoint} failed (${first.code}): ${first.message}` : `Cloudflare ${endpoint} failed (status ${response.status}).`);
|
|
82
|
+
}
|
|
83
|
+
return parsed.result;
|
|
84
|
+
}
|
|
85
|
+
async function createTail(accountId, workerName, token) {
|
|
86
|
+
const result = await readEnvelope(await fetch(`${CLOUDFLARE_API_BASE}/accounts/${accountId}/workers/scripts/${encodeURIComponent(workerName)}/tails`, {
|
|
87
|
+
method: "POST",
|
|
88
|
+
headers: {
|
|
89
|
+
Authorization: `Bearer ${token}`,
|
|
90
|
+
"Content-Type": "application/json"
|
|
91
|
+
}
|
|
92
|
+
}), `create tail for ${workerName}`);
|
|
93
|
+
return {
|
|
94
|
+
id: result.id,
|
|
95
|
+
url: result.url,
|
|
96
|
+
expiresAt: result.expires_at
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async function deleteTail(accountId, workerName, tailId, token) {
|
|
100
|
+
const response = await fetch(`${CLOUDFLARE_API_BASE}/accounts/${accountId}/workers/scripts/${encodeURIComponent(workerName)}/tails/${encodeURIComponent(tailId)}`, {
|
|
101
|
+
method: "DELETE",
|
|
102
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
103
|
+
});
|
|
104
|
+
if (!response.ok) await readEnvelope(response, `delete tail ${tailId}`);
|
|
105
|
+
}
|
|
106
|
+
function parseTailMessage(raw) {
|
|
107
|
+
const parsed = JSON.parse(raw);
|
|
108
|
+
if (Array.isArray(parsed)) return parsed;
|
|
109
|
+
return [parsed];
|
|
110
|
+
}
|
|
111
|
+
async function resolveWorkerName(parsed, cwd, configFile, fallbackArg) {
|
|
112
|
+
const explicit = asOptionalString(parsed.options.worker) ?? fallbackArg;
|
|
113
|
+
if (explicit) return explicit;
|
|
114
|
+
try {
|
|
115
|
+
return (await loadConfig({
|
|
116
|
+
cwd,
|
|
117
|
+
configFile
|
|
118
|
+
})).name;
|
|
119
|
+
} catch {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async function runTailCommand(parsed, logger, options) {
|
|
124
|
+
const theme = createCliTheme(parsed.options);
|
|
125
|
+
const cwd = options.cwd ?? process.cwd();
|
|
126
|
+
const configFile = asOptionalString(parsed.options.config);
|
|
127
|
+
let format;
|
|
128
|
+
try {
|
|
129
|
+
format = parseTailFormat(parsed.options.format);
|
|
130
|
+
} catch (error) {
|
|
131
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
132
|
+
return { exitCode: 1 };
|
|
133
|
+
}
|
|
134
|
+
const fallbackArg = parsed.args[0];
|
|
135
|
+
const workerName = await resolveWorkerName(parsed, cwd, configFile, fallbackArg);
|
|
136
|
+
if (!workerName) {
|
|
137
|
+
logger.error("No Worker name could be resolved.");
|
|
138
|
+
logLine(logger, dim("Pass a Worker name (`devflare tail <worker>`), --worker <name>, or run inside a configured package.", theme));
|
|
139
|
+
return { exitCode: 1 };
|
|
140
|
+
}
|
|
141
|
+
const token = await getApiToken();
|
|
142
|
+
if (!token) {
|
|
143
|
+
logger.error("Not authenticated with Cloudflare.");
|
|
144
|
+
logLine(logger, dim("Run `devflare login` first, or set CLOUDFLARE_API_TOKEN.", theme));
|
|
145
|
+
return { exitCode: 1 };
|
|
146
|
+
}
|
|
147
|
+
let configuredAccountId;
|
|
148
|
+
try {
|
|
149
|
+
configuredAccountId = (await loadConfig({
|
|
150
|
+
cwd,
|
|
151
|
+
configFile
|
|
152
|
+
})).accountId;
|
|
153
|
+
} catch {
|
|
154
|
+
configuredAccountId = void 0;
|
|
155
|
+
}
|
|
156
|
+
const accountId = await resolveCloudflareAccountId({
|
|
157
|
+
explicitAccountId: asOptionalString(parsed.options.account),
|
|
158
|
+
configuredAccountId
|
|
159
|
+
});
|
|
160
|
+
if (!accountId) {
|
|
161
|
+
logger.error("No Cloudflare account could be resolved.");
|
|
162
|
+
logLine(logger, dim("Use --account <id> or set accountId in devflare.config.* / CLOUDFLARE_ACCOUNT_ID.", theme));
|
|
163
|
+
return { exitCode: 1 };
|
|
164
|
+
}
|
|
165
|
+
logLine(logger);
|
|
166
|
+
logLine(logger, `${yellow("tail", theme)} ${dim("Streaming live logs from Cloudflare", theme)}`);
|
|
167
|
+
logLine(logger, `${dim("worker", theme)} ${green(workerName, theme)}`);
|
|
168
|
+
logLine(logger, `${dim("account", theme)} ${whiteDim(accountId, theme)}`);
|
|
169
|
+
let createdTail;
|
|
170
|
+
try {
|
|
171
|
+
createdTail = await createTail(accountId, workerName, token);
|
|
172
|
+
} catch (error) {
|
|
173
|
+
logger.error(error instanceof Error ? error.message : String(error));
|
|
174
|
+
return { exitCode: 1 };
|
|
175
|
+
}
|
|
176
|
+
logLine(logger, dim(`Connected to tail ${createdTail.id}${createdTail.expiresAt ? ` (expires ${createdTail.expiresAt})` : ""}. Press Ctrl-C to stop.`, theme));
|
|
177
|
+
const { WebSocket: WsWebSocket } = await import("ws");
|
|
178
|
+
return new Promise((resolve) => {
|
|
179
|
+
let settled = false;
|
|
180
|
+
const socket = new WsWebSocket(createdTail.url, TAIL_SUBPROTOCOL, { headers: {
|
|
181
|
+
Authorization: `Bearer ${token}`,
|
|
182
|
+
"User-Agent": "devflare"
|
|
183
|
+
} });
|
|
184
|
+
const cleanup = async (exitCode) => {
|
|
185
|
+
if (settled) return;
|
|
186
|
+
settled = true;
|
|
187
|
+
try {
|
|
188
|
+
socket.close();
|
|
189
|
+
} catch {}
|
|
190
|
+
process.off("SIGINT", onSigint);
|
|
191
|
+
try {
|
|
192
|
+
await deleteTail(accountId, workerName, createdTail.id, token);
|
|
193
|
+
} catch (error) {
|
|
194
|
+
logger.warn(`Could not delete the tail session ${createdTail.id}; it will expire on its own. ${error instanceof Error ? error.message : String(error)}`);
|
|
195
|
+
}
|
|
196
|
+
resolve({ exitCode });
|
|
197
|
+
};
|
|
198
|
+
const onSigint = () => {
|
|
199
|
+
logLine(logger);
|
|
200
|
+
logLine(logger, dim("Stopping tail…", theme));
|
|
201
|
+
cleanup(0);
|
|
202
|
+
};
|
|
203
|
+
process.on("SIGINT", onSigint);
|
|
204
|
+
socket.on("open", () => {
|
|
205
|
+
logger.success("Tail stream open");
|
|
206
|
+
});
|
|
207
|
+
socket.on("message", (data) => {
|
|
208
|
+
const raw = typeof data === "string" ? data : String(data);
|
|
209
|
+
let events;
|
|
210
|
+
try {
|
|
211
|
+
events = parseTailMessage(raw);
|
|
212
|
+
} catch {
|
|
213
|
+
logger.warn(`Received a non-JSON tail message: ${raw.slice(0, 200)}`);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
for (const event of events) {
|
|
217
|
+
if (format === "json") {
|
|
218
|
+
logger.log(JSON.stringify(event));
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
for (const line of formatTailEventLines(event)) if (line.level === "error") logLine(logger, red(line.text, theme));
|
|
222
|
+
else if (line.level === "warn") logLine(logger, yellow(line.text, theme));
|
|
223
|
+
else logLine(logger, line.text);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
socket.on("error", (error) => {
|
|
227
|
+
logger.error(`Tail stream error: ${error.message}`);
|
|
228
|
+
cleanup(1);
|
|
229
|
+
});
|
|
230
|
+
socket.on("close", () => {
|
|
231
|
+
if (!settled) {
|
|
232
|
+
logLine(logger, dim("Tail stream closed.", theme));
|
|
233
|
+
cleanup(0);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
//#endregion
|
|
239
|
+
export { runTailCommand };
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import { n as CloudflareAPIError, t as AuthenticationError } from "./api-TzdliH-6.js";
|
|
2
|
+
import { d as getPrimaryAccount, i as getWorkspaceAccountId } from "./preferences-BKp_7XJx.js";
|
|
3
|
+
import { d as green, f as logLine, g as yellow, h as whiteDim, o as dim, p as logTable, r as createCliTheme } from "./ui-BUoZApvE.js";
|
|
4
|
+
import { a as listAccountTokenPermissionGroups, c as selectAllReusablePermissionGroups, i as listAccountOwnedAPITokens, l as selectDevflarePermissionGroups, n as deleteAccountOwnedAPIToken, o as normalizeDevflareTokenName, r as filterDevflareManagedTokens, s as rollAccountOwnedAPITokenValue, t as createAccountOwnedAPIToken, u as stripDevflareTokenNamePrefix } from "./tokens-iVcgNXi-.js";
|
|
5
|
+
//#region src/cli/commands/token.ts
|
|
6
|
+
const CLI_API_OPTIONS = { timeout: 1e4 };
|
|
7
|
+
const TOKENS_USAGE = "devflare tokens <bootstrap-token> (--list | --new [token-name] | --roll [token-name] | --delete [token-name] | --delete-all) [--account <id>] [--all-flags]";
|
|
8
|
+
const TOKEN_OPERATION_SUMMARY_LINES = [
|
|
9
|
+
"--list List Devflare-managed account-owned tokens",
|
|
10
|
+
"--new [name] Create a Devflare-managed account-owned token",
|
|
11
|
+
"--roll [name] Roll a Devflare-managed account-owned token secret",
|
|
12
|
+
"--delete [name] Delete a Devflare-managed account-owned token",
|
|
13
|
+
"--delete-all Delete every Devflare-managed account-owned token",
|
|
14
|
+
"--all-flags With --new, include every reusable account/zone-scoped permission group"
|
|
15
|
+
];
|
|
16
|
+
function getTrimmedStringOption(options, key) {
|
|
17
|
+
const value = options[key];
|
|
18
|
+
if (typeof value !== "string") return;
|
|
19
|
+
return value.trim() || void 0;
|
|
20
|
+
}
|
|
21
|
+
function formatTokenTimestamp(value) {
|
|
22
|
+
if (!value) return "—";
|
|
23
|
+
return value.toISOString().replace(/:\d{2}\.\d{3}Z$/, "Z").replace("T", " ");
|
|
24
|
+
}
|
|
25
|
+
function sortTokens(tokens) {
|
|
26
|
+
return [...tokens].sort((left, right) => {
|
|
27
|
+
const nameComparison = left.name.localeCompare(right.name);
|
|
28
|
+
if (nameComparison !== 0) return nameComparison;
|
|
29
|
+
return (right.modifiedOn?.getTime() ?? 0) - (left.modifiedOn?.getTime() ?? 0);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function logUsage(logger, theme) {
|
|
33
|
+
logLine(logger);
|
|
34
|
+
logLine(logger, `${dim("Usage:", theme)} ${TOKENS_USAGE}`);
|
|
35
|
+
logLine(logger, dim("Operations:", theme));
|
|
36
|
+
for (const line of TOKEN_OPERATION_SUMMARY_LINES) logLine(logger, ` ${line}`);
|
|
37
|
+
logLine(logger, dim("Token names are normalized to the devflare- prefix automatically.", theme));
|
|
38
|
+
logLine(logger, dim("The bootstrap token must include Cloudflare API token management permissions.", theme));
|
|
39
|
+
logLine(logger);
|
|
40
|
+
}
|
|
41
|
+
function resolveTokenOperation(parsed) {
|
|
42
|
+
const newOption = parsed.options.new;
|
|
43
|
+
const rollOption = parsed.options.roll;
|
|
44
|
+
const deleteOption = parsed.options.delete;
|
|
45
|
+
const requestedOperations = [
|
|
46
|
+
newOption !== void 0 ? "new" : null,
|
|
47
|
+
rollOption !== void 0 ? "roll" : null,
|
|
48
|
+
deleteOption !== void 0 ? "delete" : null,
|
|
49
|
+
parsed.options.list === true ? "list" : null,
|
|
50
|
+
parsed.options["delete-all"] === true ? "delete-all" : null
|
|
51
|
+
].filter(Boolean);
|
|
52
|
+
if (parsed.options["all-flags"] && !requestedOperations.includes("new")) return "--all-flags can only be used together with --new.";
|
|
53
|
+
if (requestedOperations.length === 0) return "Choose one token operation: --list, --new, --roll, --delete, or --delete-all.";
|
|
54
|
+
if (requestedOperations.length > 1) return "Choose only one token operation at a time.";
|
|
55
|
+
switch (requestedOperations[0]) {
|
|
56
|
+
case "new": return {
|
|
57
|
+
kind: "new",
|
|
58
|
+
requestedName: typeof newOption === "string" ? newOption.trim() || void 0 : void 0
|
|
59
|
+
};
|
|
60
|
+
case "roll": return {
|
|
61
|
+
kind: "roll",
|
|
62
|
+
requestedName: typeof rollOption === "string" ? rollOption.trim() || void 0 : void 0
|
|
63
|
+
};
|
|
64
|
+
case "delete": return {
|
|
65
|
+
kind: "delete",
|
|
66
|
+
requestedName: typeof deleteOption === "string" ? deleteOption.trim() || void 0 : void 0
|
|
67
|
+
};
|
|
68
|
+
case "list": return { kind: "list" };
|
|
69
|
+
case "delete-all": return { kind: "delete-all" };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function formatManagedTokenDisplayName(name) {
|
|
73
|
+
return stripDevflareTokenNamePrefix(name);
|
|
74
|
+
}
|
|
75
|
+
async function promptForTokenName(logger, theme, message) {
|
|
76
|
+
while (true) {
|
|
77
|
+
const selected = await logger.prompt(message, {
|
|
78
|
+
type: "text",
|
|
79
|
+
placeholder: "preview",
|
|
80
|
+
cancel: "symbol"
|
|
81
|
+
});
|
|
82
|
+
if (typeof selected === "symbol") {
|
|
83
|
+
logLine(logger, dim("Cancelled", theme));
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const trimmedValue = selected.trim();
|
|
87
|
+
if (trimmedValue) return trimmedValue;
|
|
88
|
+
logger.error("Token name is required.");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function resolveTokenName(requestedName, logger, theme, promptMessage) {
|
|
92
|
+
const rawName = requestedName ?? await promptForTokenName(logger, theme, promptMessage);
|
|
93
|
+
if (!rawName) return null;
|
|
94
|
+
return normalizeDevflareTokenName(rawName);
|
|
95
|
+
}
|
|
96
|
+
async function resolveNamedManagedTokens(accountId, accountSource, bootstrapToken, requestedName, logger, theme, options) {
|
|
97
|
+
const tokenName = await resolveTokenName(requestedName, logger, theme, options.promptMessage);
|
|
98
|
+
if (!tokenName) return { exitCode: 0 };
|
|
99
|
+
logLine(logger);
|
|
100
|
+
logLine(logger, `${yellow("tokens", theme)} ${dim(`${options.actionLabel} a Devflare-managed account-owned token…`, theme)}`);
|
|
101
|
+
logLine(logger, `${dim("Account:", theme)} ${green(accountId, theme)} ${whiteDim(`(${accountSource})`, theme)}`);
|
|
102
|
+
logLine(logger, `${dim("Name:", theme)} ${green(tokenName, theme)}`);
|
|
103
|
+
const matchingTokens = filterDevflareManagedTokens(await listAccountOwnedAPITokens(accountId, {
|
|
104
|
+
...CLI_API_OPTIONS,
|
|
105
|
+
token: bootstrapToken
|
|
106
|
+
})).filter((token) => token.name === tokenName);
|
|
107
|
+
if (matchingTokens.length === 0) {
|
|
108
|
+
logger.error(`No Devflare-managed token named ${tokenName} was found.`);
|
|
109
|
+
return { exitCode: 1 };
|
|
110
|
+
}
|
|
111
|
+
if (matchingTokens.length > 1) logLine(logger, dim(`Found ${matchingTokens.length} tokens with that name. ${options.multipleMatchMessage}.`, theme));
|
|
112
|
+
return {
|
|
113
|
+
tokenName,
|
|
114
|
+
matchingTokens
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
async function resolveRequestedAccountId(requestedAccountId, bootstrapToken) {
|
|
118
|
+
if (requestedAccountId) return {
|
|
119
|
+
accountId: requestedAccountId,
|
|
120
|
+
source: "flag"
|
|
121
|
+
};
|
|
122
|
+
const workspaceAccountId = getWorkspaceAccountId();
|
|
123
|
+
if (workspaceAccountId) return {
|
|
124
|
+
accountId: workspaceAccountId,
|
|
125
|
+
source: "workspace"
|
|
126
|
+
};
|
|
127
|
+
const primaryAccount = await getPrimaryAccount({
|
|
128
|
+
...CLI_API_OPTIONS,
|
|
129
|
+
token: bootstrapToken
|
|
130
|
+
});
|
|
131
|
+
if (!primaryAccount) throw new Error("No Cloudflare accounts found for this bootstrap token");
|
|
132
|
+
return {
|
|
133
|
+
accountId: primaryAccount.id,
|
|
134
|
+
source: "primary"
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
async function createManagedToken(accountId, accountSource, bootstrapToken, requestedName, includeAllFlags, logger, theme) {
|
|
138
|
+
const tokenName = await resolveTokenName(requestedName, logger, theme, "Enter a Devflare token name:");
|
|
139
|
+
if (!tokenName) return { exitCode: 0 };
|
|
140
|
+
logLine(logger);
|
|
141
|
+
logLine(logger, `${yellow("tokens", theme)} ${dim("Creating an account-owned Devflare token…", theme)}`);
|
|
142
|
+
logLine(logger, `${dim("Account:", theme)} ${green(accountId, theme)} ${whiteDim(`(${accountSource})`, theme)}`);
|
|
143
|
+
logLine(logger, `${dim("Name:", theme)} ${green(tokenName, theme)}`);
|
|
144
|
+
const permissionGroups = await listAccountTokenPermissionGroups(accountId, {
|
|
145
|
+
...CLI_API_OPTIONS,
|
|
146
|
+
token: bootstrapToken
|
|
147
|
+
});
|
|
148
|
+
if (permissionGroups.length === 0) {
|
|
149
|
+
logger.error("Cloudflare returned zero account token permission groups for this account.");
|
|
150
|
+
return { exitCode: 1 };
|
|
151
|
+
}
|
|
152
|
+
const selectedPermissionGroups = includeAllFlags ? selectAllReusablePermissionGroups(permissionGroups) : selectDevflarePermissionGroups(permissionGroups);
|
|
153
|
+
const createdToken = await createAccountOwnedAPIToken(accountId, {
|
|
154
|
+
name: tokenName,
|
|
155
|
+
permissionGroups: selectedPermissionGroups
|
|
156
|
+
}, {
|
|
157
|
+
...CLI_API_OPTIONS,
|
|
158
|
+
token: bootstrapToken
|
|
159
|
+
});
|
|
160
|
+
if (!createdToken.value) {
|
|
161
|
+
logger.error("Cloudflare created the token but did not return a token value.");
|
|
162
|
+
return { exitCode: 1 };
|
|
163
|
+
}
|
|
164
|
+
logger.success(`Created ${createdToken.name || tokenName}`);
|
|
165
|
+
logLine(logger, `${dim("Permission groups:", theme)} ${selectedPermissionGroups.length} ${includeAllFlags ? "reusable account/zone-scoped" : "Devflare-relevant account/zone-scoped"} selected from ${permissionGroups.length} available`);
|
|
166
|
+
if (includeAllFlags) {
|
|
167
|
+
logLine(logger, dim("Account-owned Devflare tokens include account resources plus all zones in the account; user-scoped groups are skipped automatically.", theme));
|
|
168
|
+
logLine(logger, dim("Account API Tokens permissions are still excluded because Cloudflare does not allow sub-tokens to manage other tokens.", theme));
|
|
169
|
+
}
|
|
170
|
+
logger.warn("Cloudflare only returns the token secret once. Store it safely now.");
|
|
171
|
+
logger.log(createdToken.value);
|
|
172
|
+
return {
|
|
173
|
+
exitCode: 0,
|
|
174
|
+
output: createdToken.value
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
async function listManagedTokens(accountId, accountSource, bootstrapToken, logger, theme) {
|
|
178
|
+
logLine(logger);
|
|
179
|
+
logLine(logger, `${yellow("tokens", theme)} ${dim("Listing Devflare-managed account-owned tokens…", theme)}`);
|
|
180
|
+
logLine(logger, `${dim("Account:", theme)} ${green(accountId, theme)} ${whiteDim(`(${accountSource})`, theme)}`);
|
|
181
|
+
const accountTokens = await listAccountOwnedAPITokens(accountId, {
|
|
182
|
+
...CLI_API_OPTIONS,
|
|
183
|
+
token: bootstrapToken
|
|
184
|
+
});
|
|
185
|
+
const managedTokens = sortTokens(filterDevflareManagedTokens(accountTokens));
|
|
186
|
+
if (managedTokens.length === 0) {
|
|
187
|
+
logLine(logger, dim("No Devflare-managed account-owned tokens found for this account.", theme));
|
|
188
|
+
return {
|
|
189
|
+
exitCode: 0,
|
|
190
|
+
output: ""
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
logTable(logger, {
|
|
194
|
+
title: "Devflare-managed tokens",
|
|
195
|
+
rows: managedTokens,
|
|
196
|
+
columns: [
|
|
197
|
+
{
|
|
198
|
+
label: "Name",
|
|
199
|
+
value: (token) => formatManagedTokenDisplayName(token.name),
|
|
200
|
+
width: 46
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
label: "Status",
|
|
204
|
+
value: (token) => token.status ?? "unknown",
|
|
205
|
+
width: 10
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
label: "Token ID",
|
|
209
|
+
value: (token) => token.id.slice(0, 12),
|
|
210
|
+
width: 12
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
label: "Modified",
|
|
214
|
+
value: (token) => formatTokenTimestamp(token.modifiedOn)
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
theme
|
|
218
|
+
});
|
|
219
|
+
const untouchedTokenCount = accountTokens.length - managedTokens.length;
|
|
220
|
+
if (untouchedTokenCount > 0) logLine(logger, dim(`Left ${untouchedTokenCount} non-Devflare token(s) out of this list.`, theme));
|
|
221
|
+
return {
|
|
222
|
+
exitCode: 0,
|
|
223
|
+
output: managedTokens.map((token) => formatManagedTokenDisplayName(token.name)).join("\n")
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
async function rollManagedTokensByName(accountId, accountSource, bootstrapToken, requestedName, logger, theme) {
|
|
227
|
+
const selectedTokens = await resolveNamedManagedTokens(accountId, accountSource, bootstrapToken, requestedName, logger, theme, {
|
|
228
|
+
promptMessage: "Enter the Devflare token name to roll:",
|
|
229
|
+
actionLabel: "Rolling",
|
|
230
|
+
multipleMatchMessage: "Rolling all exact matches"
|
|
231
|
+
});
|
|
232
|
+
if ("exitCode" in selectedTokens) return selectedTokens;
|
|
233
|
+
const { tokenName, matchingTokens } = selectedTokens;
|
|
234
|
+
const rolledValues = [];
|
|
235
|
+
for (const token of matchingTokens) {
|
|
236
|
+
const rolledValue = await rollAccountOwnedAPITokenValue(accountId, token.id, {
|
|
237
|
+
...CLI_API_OPTIONS,
|
|
238
|
+
token: bootstrapToken
|
|
239
|
+
});
|
|
240
|
+
rolledValues.push(rolledValue);
|
|
241
|
+
}
|
|
242
|
+
logger.success(`Rolled ${matchingTokens.length} Devflare-managed token(s) named ${tokenName}`);
|
|
243
|
+
logger.warn("Cloudflare only returns the new token secret once. Store it safely now.");
|
|
244
|
+
if (rolledValues.length === 1) logger.log(rolledValues[0]);
|
|
245
|
+
else for (const [index, value] of rolledValues.entries()) logLine(logger, `${dim(`${matchingTokens[index].id.slice(0, 12)}:`, theme)} ${value}`);
|
|
246
|
+
return {
|
|
247
|
+
exitCode: 0,
|
|
248
|
+
output: rolledValues.join("\n")
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
async function deleteManagedTokensByName(accountId, accountSource, bootstrapToken, requestedName, logger, theme) {
|
|
252
|
+
const selectedTokens = await resolveNamedManagedTokens(accountId, accountSource, bootstrapToken, requestedName, logger, theme, {
|
|
253
|
+
promptMessage: "Enter the Devflare token name to delete:",
|
|
254
|
+
actionLabel: "Deleting",
|
|
255
|
+
multipleMatchMessage: "Deleting all exact matches"
|
|
256
|
+
});
|
|
257
|
+
if ("exitCode" in selectedTokens) return selectedTokens;
|
|
258
|
+
const { tokenName, matchingTokens } = selectedTokens;
|
|
259
|
+
for (const token of matchingTokens) await deleteAccountOwnedAPIToken(accountId, token.id, {
|
|
260
|
+
...CLI_API_OPTIONS,
|
|
261
|
+
token: bootstrapToken
|
|
262
|
+
});
|
|
263
|
+
logger.success(`Deleted ${matchingTokens.length} Devflare-managed token(s) named ${tokenName}`);
|
|
264
|
+
return {
|
|
265
|
+
exitCode: 0,
|
|
266
|
+
output: matchingTokens.map((token) => token.id).join("\n")
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
async function deleteAllManagedTokens(accountId, accountSource, bootstrapToken, logger, theme) {
|
|
270
|
+
logLine(logger);
|
|
271
|
+
logLine(logger, `${yellow("tokens", theme)} ${dim("Deleting all Devflare-managed account-owned tokens…", theme)}`);
|
|
272
|
+
logLine(logger, `${dim("Account:", theme)} ${green(accountId, theme)} ${whiteDim(`(${accountSource})`, theme)}`);
|
|
273
|
+
const accountTokens = await listAccountOwnedAPITokens(accountId, {
|
|
274
|
+
...CLI_API_OPTIONS,
|
|
275
|
+
token: bootstrapToken
|
|
276
|
+
});
|
|
277
|
+
const managedTokens = filterDevflareManagedTokens(accountTokens);
|
|
278
|
+
if (managedTokens.length === 0) {
|
|
279
|
+
logger.success("No Devflare-managed tokens were found, so nothing was deleted.");
|
|
280
|
+
return { exitCode: 0 };
|
|
281
|
+
}
|
|
282
|
+
for (const token of managedTokens) await deleteAccountOwnedAPIToken(accountId, token.id, {
|
|
283
|
+
...CLI_API_OPTIONS,
|
|
284
|
+
token: bootstrapToken
|
|
285
|
+
});
|
|
286
|
+
logger.success(`Deleted ${managedTokens.length} Devflare-managed token(s)`);
|
|
287
|
+
const untouchedTokenCount = accountTokens.length - managedTokens.length;
|
|
288
|
+
if (untouchedTokenCount > 0) logLine(logger, dim(`Left ${untouchedTokenCount} non-Devflare token(s) untouched.`, theme));
|
|
289
|
+
return {
|
|
290
|
+
exitCode: 0,
|
|
291
|
+
output: managedTokens.map((token) => token.id).join("\n")
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
async function runTokenCommand(parsed, logger, _options) {
|
|
295
|
+
const bootstrapToken = parsed.args[0]?.trim();
|
|
296
|
+
const theme = createCliTheme(parsed.options);
|
|
297
|
+
if (!bootstrapToken) {
|
|
298
|
+
logUsage(logger, theme);
|
|
299
|
+
return { exitCode: 1 };
|
|
300
|
+
}
|
|
301
|
+
const tokenOperation = resolveTokenOperation(parsed);
|
|
302
|
+
if (typeof tokenOperation === "string") {
|
|
303
|
+
logUsage(logger, theme);
|
|
304
|
+
return { exitCode: 1 };
|
|
305
|
+
}
|
|
306
|
+
const requestedAccountId = getTrimmedStringOption(parsed.options, "account");
|
|
307
|
+
try {
|
|
308
|
+
const { accountId, source } = await resolveRequestedAccountId(requestedAccountId, bootstrapToken);
|
|
309
|
+
switch (tokenOperation.kind) {
|
|
310
|
+
case "new": return createManagedToken(accountId, source, bootstrapToken, tokenOperation.requestedName, parsed.options["all-flags"] === true, logger, theme);
|
|
311
|
+
case "roll": return rollManagedTokensByName(accountId, source, bootstrapToken, tokenOperation.requestedName, logger, theme);
|
|
312
|
+
case "list": return listManagedTokens(accountId, source, bootstrapToken, logger, theme);
|
|
313
|
+
case "delete": return deleteManagedTokensByName(accountId, source, bootstrapToken, tokenOperation.requestedName, logger, theme);
|
|
314
|
+
case "delete-all": return deleteAllManagedTokens(accountId, source, bootstrapToken, logger, theme);
|
|
315
|
+
}
|
|
316
|
+
} catch (error) {
|
|
317
|
+
if (error instanceof AuthenticationError) {
|
|
318
|
+
logger.error(error.message);
|
|
319
|
+
return { exitCode: 1 };
|
|
320
|
+
}
|
|
321
|
+
if (error instanceof CloudflareAPIError) {
|
|
322
|
+
logger.error(`API Error: ${error.message}`);
|
|
323
|
+
return { exitCode: 1 };
|
|
324
|
+
}
|
|
325
|
+
if (error instanceof Error) {
|
|
326
|
+
logger.error(error.message);
|
|
327
|
+
return { exitCode: 1 };
|
|
328
|
+
}
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
//#endregion
|
|
333
|
+
export { runTokenCommand };
|