@elizaos/plugin-elizacloud 2.0.0-alpha.8 → 2.0.11-beta.7
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/README.md +196 -0
- package/auto-enable.ts +22 -0
- package/dist/browser/index.browser.js +2 -21
- package/dist/browser/index.browser.js.map +5 -38
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.node.cjs +9112 -2265
- package/dist/cjs/index.node.js.map +68 -30
- package/dist/cloud/auth-service-types.d.ts +8 -0
- package/dist/cloud/auth-service-types.d.ts.map +1 -0
- package/dist/cloud/auth-service-types.js +36 -0
- package/dist/cloud/auth-service-types.js.map +10 -0
- package/dist/cloud/auth.d.ts +19 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +283 -0
- package/dist/cloud/auth.js.map +12 -0
- package/dist/cloud/backup.d.ts +18 -0
- package/dist/cloud/backup.d.ts.map +1 -0
- package/dist/cloud/backup.js +63 -0
- package/dist/cloud/backup.js.map +10 -0
- package/dist/cloud/base-url.d.ts +7 -0
- package/dist/cloud/base-url.d.ts.map +1 -0
- package/dist/cloud/base-url.js +29 -0
- package/dist/cloud/base-url.js.map +10 -0
- package/dist/cloud/bridge-client.d.ts +126 -0
- package/dist/cloud/bridge-client.d.ts.map +1 -0
- package/dist/cloud/bridge-client.js +384 -0
- package/dist/cloud/bridge-client.js.map +11 -0
- package/dist/cloud/clack-observer.d.ts +35 -0
- package/dist/cloud/clack-observer.d.ts.map +1 -0
- package/dist/cloud/clack-observer.js +143 -0
- package/dist/cloud/clack-observer.js.map +10 -0
- package/dist/cloud/cloud-api-key.d.ts +26 -0
- package/dist/cloud/cloud-api-key.d.ts.map +1 -0
- package/dist/cloud/cloud-api-key.js +60 -0
- package/dist/cloud/cloud-api-key.js.map +10 -0
- package/dist/cloud/cloud-manager.d.ts +33 -0
- package/dist/cloud/cloud-manager.d.ts.map +1 -0
- package/dist/cloud/cloud-manager.js +806 -0
- package/dist/cloud/cloud-manager.js.map +16 -0
- package/dist/cloud/cloud-proxy.d.ts +20 -0
- package/dist/cloud/cloud-proxy.d.ts.map +1 -0
- package/dist/cloud/cloud-proxy.js +54 -0
- package/dist/cloud/cloud-proxy.js.map +10 -0
- package/dist/cloud/cloud-wallet.d.ts +94 -0
- package/dist/cloud/cloud-wallet.d.ts.map +1 -0
- package/dist/cloud/cloud-wallet.js +362 -0
- package/dist/cloud/cloud-wallet.js.map +13 -0
- package/dist/cloud/duffel-client.d.ts +181 -0
- package/dist/cloud/duffel-client.d.ts.map +1 -0
- package/dist/cloud/duffel-client.js +506 -0
- package/dist/cloud/duffel-client.js.map +11 -0
- package/dist/cloud/index.d.ts +15 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +1811 -0
- package/dist/cloud/index.js.map +24 -0
- package/dist/cloud/lifeops-schedule-sync-client.d.ts +43 -0
- package/dist/cloud/lifeops-schedule-sync-client.d.ts.map +1 -0
- package/dist/cloud/lifeops-schedule-sync-client.js +180 -0
- package/dist/cloud/lifeops-schedule-sync-client.js.map +11 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.d.ts +89 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.d.ts.map +1 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.js +39 -0
- package/dist/cloud/lifeops-schedule-sync-contracts.js.map +10 -0
- package/dist/cloud/managed-payment-clients.d.ts +166 -0
- package/dist/cloud/managed-payment-clients.d.ts.map +1 -0
- package/dist/cloud/managed-payment-clients.js +238 -0
- package/dist/cloud/managed-payment-clients.js.map +11 -0
- package/dist/cloud/null-observer.d.ts +35 -0
- package/dist/cloud/null-observer.d.ts.map +1 -0
- package/dist/cloud/null-observer.js +45 -0
- package/dist/cloud/null-observer.js.map +10 -0
- package/dist/cloud/reconnect.d.ts +26 -0
- package/dist/cloud/reconnect.d.ts.map +1 -0
- package/dist/cloud/reconnect.js +104 -0
- package/dist/cloud/reconnect.js.map +10 -0
- package/dist/cloud/setup-observer.d.ts +98 -0
- package/dist/cloud/setup-observer.d.ts.map +1 -0
- package/dist/cloud/setup-observer.js +2 -0
- package/dist/cloud/setup-observer.js.map +9 -0
- package/dist/cloud/validate-url.d.ts +2 -0
- package/dist/cloud/validate-url.d.ts.map +1 -0
- package/dist/cloud/validate-url.js +175 -0
- package/dist/cloud/validate-url.js.map +10 -0
- package/dist/cloud/x402-payment-handler.d.ts +85 -0
- package/dist/cloud/x402-payment-handler.d.ts.map +1 -0
- package/dist/cloud/x402-payment-handler.js +119 -0
- package/dist/cloud/x402-payment-handler.js.map +10 -0
- package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
- package/dist/cloud-providers/cloud-status.js +78 -0
- package/dist/cloud-providers/cloud-status.js.map +10 -0
- package/dist/cloud-providers/container-health.d.ts.map +1 -1
- package/dist/cloud-providers/container-health.js +74 -0
- package/dist/cloud-providers/container-health.js.map +10 -0
- package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
- package/dist/cloud-providers/credit-balance.js +85 -0
- package/dist/cloud-providers/credit-balance.js.map +10 -0
- package/dist/cloud-providers/index.d.ts.map +1 -1
- package/dist/cloud-providers/index.js +24 -0
- package/dist/cloud-providers/index.js.map +9 -0
- package/dist/cloud-providers/model-registry.d.ts.map +1 -1
- package/dist/cloud-providers/model-registry.js +71 -0
- package/dist/cloud-providers/model-registry.js.map +10 -0
- package/dist/cloud-setup.d.ts +36 -0
- package/dist/cloud-setup.d.ts.map +1 -0
- package/dist/cloud-setup.js +883 -0
- package/dist/cloud-setup.js.map +14 -0
- package/dist/cloud-voice-catalog.d.ts +65 -0
- package/dist/cloud-voice-catalog.d.ts.map +1 -0
- package/dist/cloud-voice-catalog.js +278 -0
- package/dist/cloud-voice-catalog.js.map +12 -0
- package/dist/index.browser.d.ts +15 -3
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9862 -0
- package/dist/index.js.map +77 -0
- package/dist/index.node.d.ts +21 -2
- package/dist/index.node.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +182 -0
- package/dist/init.js.map +12 -0
- package/dist/lib/cloud-connection.d.ts +77 -0
- package/dist/lib/cloud-connection.d.ts.map +1 -0
- package/dist/lib/cloud-connection.js +654 -0
- package/dist/lib/cloud-connection.js.map +14 -0
- package/dist/lib/cloud-secrets.d.ts +10 -0
- package/dist/lib/cloud-secrets.d.ts.map +1 -0
- package/dist/lib/cloud-secrets.js +36 -0
- package/dist/lib/cloud-secrets.js.map +10 -0
- package/dist/lib/config-env.d.ts +5 -0
- package/dist/lib/config-env.d.ts.map +1 -0
- package/dist/lib/config-env.js +191 -0
- package/dist/lib/config-env.js.map +11 -0
- package/dist/lib/config-like.d.ts +40 -0
- package/dist/lib/config-like.d.ts.map +1 -0
- package/dist/lib/config-like.js +103 -0
- package/dist/lib/config-like.js.map +10 -0
- package/dist/lib/credential-type-map.d.ts +53 -0
- package/dist/lib/credential-type-map.d.ts.map +1 -0
- package/dist/lib/credential-type-map.js +88 -0
- package/dist/lib/credential-type-map.js.map +10 -0
- package/dist/lib/feature-flags.d.ts +2 -0
- package/dist/lib/feature-flags.d.ts.map +1 -0
- package/dist/lib/feature-flags.js +40 -0
- package/dist/lib/feature-flags.js.map +10 -0
- package/dist/lib/http.d.ts +11 -0
- package/dist/lib/http.d.ts.map +1 -0
- package/dist/lib/http.js +107 -0
- package/dist/lib/http.js.map +10 -0
- package/dist/lib/server-cloud-tts.d.ts +21 -0
- package/dist/lib/server-cloud-tts.d.ts.map +1 -0
- package/dist/lib/server-cloud-tts.js +251 -0
- package/dist/lib/server-cloud-tts.js.map +10 -0
- package/dist/lib/state-paths.d.ts +4 -0
- package/dist/lib/state-paths.d.ts.map +1 -0
- package/dist/lib/state-paths.js +52 -0
- package/dist/lib/state-paths.js.map +10 -0
- package/dist/lib/tts-debug.d.ts +6 -0
- package/dist/lib/tts-debug.d.ts.map +1 -0
- package/dist/lib/tts-debug.js +24 -0
- package/dist/lib/tts-debug.js.map +9 -0
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/embeddings.js +329 -0
- package/dist/models/embeddings.js.map +13 -0
- package/dist/models/image.d.ts.map +1 -1
- package/dist/models/image.js +401 -0
- package/dist/models/image.js.map +14 -0
- package/dist/models/index.d.ts +1 -2
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1896 -0
- package/dist/models/index.js.map +19 -0
- package/dist/models/research.d.ts.map +1 -1
- package/dist/models/research.js +341 -0
- package/dist/models/research.js.map +13 -0
- package/dist/models/speech.d.ts +61 -3
- package/dist/models/speech.d.ts.map +1 -1
- package/dist/models/speech.js +429 -0
- package/dist/models/speech.js.map +13 -0
- package/dist/models/text.d.ts +111 -3
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/text.js +1173 -0
- package/dist/models/text.js.map +14 -0
- package/dist/models/tokenization.d.ts.map +1 -1
- package/dist/models/tokenization.js +65 -0
- package/dist/models/tokenization.js.map +10 -0
- package/dist/models/transcription.d.ts.map +1 -1
- package/dist/models/transcription.js +297 -0
- package/dist/models/transcription.js.map +13 -0
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.node.js +9189 -2295
- package/dist/node/index.node.js.map +68 -30
- package/dist/plugin.d.ts +20 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +2937 -0
- package/dist/plugin.js.map +28 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +136 -0
- package/dist/providers/openai.js.map +11 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +2938 -0
- package/dist/register-routes.js.map +29 -0
- package/dist/routes/cloud-billing-routes.d.ts +9 -0
- package/dist/routes/cloud-billing-routes.d.ts.map +1 -0
- package/dist/routes/cloud-billing-routes.js +764 -0
- package/dist/routes/cloud-billing-routes.js.map +15 -0
- package/dist/routes/cloud-coding-container-routes.d.ts +8 -0
- package/dist/routes/cloud-coding-container-routes.d.ts.map +1 -0
- package/dist/routes/cloud-coding-container-routes.js +214 -0
- package/dist/routes/cloud-coding-container-routes.js.map +11 -0
- package/dist/routes/cloud-compat-routes.d.ts +10 -0
- package/dist/routes/cloud-compat-routes.d.ts.map +1 -0
- package/dist/routes/cloud-compat-routes.js +495 -0
- package/dist/routes/cloud-compat-routes.js.map +15 -0
- package/dist/routes/cloud-features-routes.d.ts +9 -0
- package/dist/routes/cloud-features-routes.d.ts.map +1 -0
- package/dist/routes/cloud-features-routes.js +124 -0
- package/dist/routes/cloud-features-routes.js.map +11 -0
- package/dist/routes/cloud-provisioning.d.ts +14 -0
- package/dist/routes/cloud-provisioning.d.ts.map +1 -0
- package/dist/routes/cloud-provisioning.js +37 -0
- package/dist/routes/cloud-provisioning.js.map +10 -0
- package/dist/routes/cloud-relay-routes.d.ts +23 -0
- package/dist/routes/cloud-relay-routes.d.ts.map +1 -0
- package/dist/routes/cloud-relay-routes.js +142 -0
- package/dist/routes/cloud-relay-routes.js.map +11 -0
- package/dist/routes/cloud-routes-autonomous.d.ts +82 -0
- package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-routes-autonomous.js +1252 -0
- package/dist/routes/cloud-routes-autonomous.js.map +18 -0
- package/dist/routes/cloud-routes.d.ts +35 -0
- package/dist/routes/cloud-routes.d.ts.map +1 -0
- package/dist/routes/cloud-routes.js +2173 -0
- package/dist/routes/cloud-routes.js.map +23 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts +14 -0
- package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes-autonomous.js +349 -0
- package/dist/routes/cloud-status-routes-autonomous.js.map +13 -0
- package/dist/routes/cloud-status-routes.d.ts +4 -0
- package/dist/routes/cloud-status-routes.d.ts.map +1 -0
- package/dist/routes/cloud-status-routes.js +695 -0
- package/dist/routes/cloud-status-routes.js.map +15 -0
- package/dist/routes/home-remote-runner-access-url.d.ts +16 -0
- package/dist/routes/home-remote-runner-access-url.d.ts.map +1 -0
- package/dist/routes/home-remote-runner-access-url.js +91 -0
- package/dist/routes/home-remote-runner-access-url.js.map +10 -0
- package/dist/routes/travel-provider-relay-routes.d.ts +9 -0
- package/dist/routes/travel-provider-relay-routes.d.ts.map +1 -0
- package/dist/routes/travel-provider-relay-routes.js +358 -0
- package/dist/routes/travel-provider-relay-routes.js.map +14 -0
- package/dist/services/cloud-auth.d.ts +140 -5
- package/dist/services/cloud-auth.d.ts.map +1 -1
- package/dist/services/cloud-auth.js +368 -0
- package/dist/services/cloud-auth.js.map +12 -0
- package/dist/services/cloud-backup.d.ts.map +1 -1
- package/dist/services/cloud-backup.js +176 -0
- package/dist/services/cloud-backup.js.map +11 -0
- package/dist/services/cloud-bootstrap.d.ts +38 -0
- package/dist/services/cloud-bootstrap.d.ts.map +1 -0
- package/dist/services/cloud-bootstrap.js +84 -0
- package/dist/services/cloud-bootstrap.js.map +10 -0
- package/dist/services/cloud-bridge.d.ts +1 -1
- package/dist/services/cloud-bridge.d.ts.map +1 -1
- package/dist/services/cloud-bridge.js +308 -0
- package/dist/services/cloud-bridge.js.map +11 -0
- package/dist/services/cloud-container.d.ts +5 -1
- package/dist/services/cloud-container.d.ts.map +1 -1
- package/dist/services/cloud-container.js +292 -0
- package/dist/services/cloud-container.js.map +11 -0
- package/dist/services/cloud-credential-provider.d.ts +55 -0
- package/dist/services/cloud-credential-provider.d.ts.map +1 -0
- package/dist/services/cloud-credential-provider.js +190 -0
- package/dist/services/cloud-credential-provider.js.map +11 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
- package/dist/services/cloud-managed-gateway-relay.js +479 -0
- package/dist/services/cloud-managed-gateway-relay.js.map +10 -0
- package/dist/services/cloud-model-registry.d.ts.map +1 -1
- package/dist/services/cloud-model-registry.js +175 -0
- package/dist/services/cloud-model-registry.js.map +10 -0
- package/dist/services/index.d.ts +3 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +29 -0
- package/dist/services/index.js.map +9 -0
- package/dist/types/cloud.d.ts +42 -19
- package/dist/types/cloud.d.ts.map +1 -1
- package/dist/types/cloud.js +52 -0
- package/dist/types/cloud.js.map +10 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +9 -0
- package/dist/utils/cloud-api.d.ts +2 -27
- package/dist/utils/cloud-api.d.ts.map +1 -1
- package/dist/utils/cloud-api.js +33 -0
- package/dist/utils/cloud-api.js.map +10 -0
- package/dist/utils/cloud-sdk/client.d.ts +133 -0
- package/dist/utils/cloud-sdk/client.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/client.js +3693 -0
- package/dist/utils/cloud-sdk/client.js.map +13 -0
- package/dist/utils/cloud-sdk/http.d.ts +37 -0
- package/dist/utils/cloud-sdk/http.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/http.js +237 -0
- package/dist/utils/cloud-sdk/http.js.map +11 -0
- package/dist/utils/cloud-sdk/index.d.ts +6 -0
- package/dist/utils/cloud-sdk/index.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/index.js +29 -0
- package/dist/utils/cloud-sdk/index.js.map +9 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts +5563 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/public-routes.js +3048 -0
- package/dist/utils/cloud-sdk/public-routes.js.map +10 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts +101 -0
- package/dist/utils/cloud-sdk/types.cloud-api.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js +2 -0
- package/dist/utils/cloud-sdk/types.cloud-api.js.map +9 -0
- package/dist/utils/cloud-sdk/types.d.ts +653 -0
- package/dist/utils/cloud-sdk/types.d.ts.map +1 -0
- package/dist/utils/cloud-sdk/types.js +29 -0
- package/dist/utils/cloud-sdk/types.js.map +10 -0
- package/dist/utils/config.d.ts +16 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +147 -0
- package/dist/utils/config.js.map +10 -0
- package/dist/utils/events.d.ts +23 -2
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/events.js +45 -0
- package/dist/utils/events.js.map +10 -0
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +103 -0
- package/dist/utils/helpers.js.map +10 -0
- package/dist/utils/responses-output.d.ts +13 -0
- package/dist/utils/responses-output.d.ts.map +1 -0
- package/dist/utils/responses-output.js +102 -0
- package/dist/utils/responses-output.js.map +10 -0
- package/dist/utils/sdk-client.d.ts +5 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/dist/utils/sdk-client.js +157 -0
- package/dist/utils/sdk-client.js.map +11 -0
- package/dist/utils/waifu-metering.d.ts +108 -0
- package/dist/utils/waifu-metering.d.ts.map +1 -0
- package/dist/utils/waifu-metering.js +166 -0
- package/dist/utils/waifu-metering.js.map +10 -0
- package/package.json +139 -21
- package/src/cloud/auth-service-types.ts +24 -0
- package/src/cloud/auth.ts +175 -0
- package/src/cloud/backup.ts +46 -0
- package/src/cloud/base-url.ts +6 -0
- package/src/cloud/bridge-client.ts +602 -0
- package/src/cloud/clack-observer.ts +189 -0
- package/src/cloud/cloud-api-key.ts +80 -0
- package/src/cloud/cloud-manager.ts +163 -0
- package/src/cloud/cloud-proxy.ts +52 -0
- package/src/cloud/cloud-wallet.ts +341 -0
- package/src/cloud/duffel-client.ts +847 -0
- package/src/cloud/index.ts +38 -0
- package/src/cloud/lifeops-schedule-sync-client.ts +245 -0
- package/src/cloud/lifeops-schedule-sync-contracts.ts +124 -0
- package/src/cloud/managed-payment-clients.ts +374 -0
- package/src/cloud/null-observer.ts +45 -0
- package/src/cloud/reconnect.ts +111 -0
- package/src/cloud/setup-observer.ts +125 -0
- package/src/cloud/validate-url.ts +187 -0
- package/src/cloud/x402-payment-handler.ts +215 -0
- package/src/cloud-providers/cloud-status.ts +75 -0
- package/src/cloud-providers/container-health.ts +68 -0
- package/src/cloud-providers/credit-balance.ts +70 -0
- package/src/cloud-providers/index.ts +3 -0
- package/src/cloud-providers/model-registry.ts +74 -0
- package/src/cloud-setup.ts +531 -0
- package/src/cloud-voice-catalog.test.ts +254 -0
- package/src/cloud-voice-catalog.ts +246 -0
- package/src/index.browser.ts +39 -0
- package/src/index.node.ts +69 -0
- package/src/index.ts +419 -0
- package/src/init.ts +39 -0
- package/src/lib/cloud-connection.ts +661 -0
- package/src/lib/cloud-secrets.ts +14 -0
- package/src/lib/config-env.ts +168 -0
- package/src/lib/config-like.ts +149 -0
- package/src/lib/credential-type-map.ts +130 -0
- package/src/lib/feature-flags.ts +26 -0
- package/src/lib/http.ts +122 -0
- package/src/lib/server-cloud-tts.ts +301 -0
- package/src/lib/state-paths.ts +28 -0
- package/src/lib/tts-debug.ts +5 -0
- package/src/models/embeddings.ts +298 -0
- package/src/models/image.ts +234 -0
- package/src/models/index.ts +16 -0
- package/src/models/research.ts +275 -0
- package/src/models/speech.ts +324 -0
- package/src/models/text.ts +1493 -0
- package/src/models/tokenization.ts +67 -0
- package/src/models/transcription.ts +101 -0
- package/src/plugin.ts +281 -0
- package/src/providers/openai.ts +16 -0
- package/src/register-routes.ts +6 -0
- package/src/routes/cloud-billing-routes.ts +744 -0
- package/src/routes/cloud-coding-container-routes.ts +198 -0
- package/src/routes/cloud-compat-routes.ts +304 -0
- package/src/routes/cloud-features-routes.ts +57 -0
- package/src/routes/cloud-provisioning.ts +37 -0
- package/src/routes/cloud-relay-routes.ts +135 -0
- package/src/routes/cloud-routes-autonomous.ts +993 -0
- package/src/routes/cloud-routes.ts +637 -0
- package/src/routes/cloud-status-routes-autonomous.ts +238 -0
- package/src/routes/cloud-status-routes.ts +73 -0
- package/src/routes/home-remote-runner-access-url.ts +83 -0
- package/src/routes/travel-provider-relay-routes.ts +193 -0
- package/src/services/cloud-auth.ts +574 -0
- package/src/services/cloud-backup.ts +208 -0
- package/src/services/cloud-bootstrap.ts +106 -0
- package/src/services/cloud-bridge.ts +386 -0
- package/src/services/cloud-container.ts +390 -0
- package/src/services/cloud-credential-provider.ts +210 -0
- package/src/services/cloud-managed-gateway-relay.ts +663 -0
- package/src/services/cloud-model-registry.ts +202 -0
- package/src/services/index.ts +17 -0
- package/{types → src/types}/cloud.ts +74 -29
- package/{types → src/types}/index.ts +25 -0
- package/src/utils/cloud-api.ts +10 -0
- package/src/utils/cloud-sdk/client.ts +774 -0
- package/src/utils/cloud-sdk/http.ts +291 -0
- package/src/utils/cloud-sdk/index.ts +23 -0
- package/src/utils/cloud-sdk/public-routes.ts +5238 -0
- package/src/utils/cloud-sdk/types.cloud-api.ts +120 -0
- package/src/utils/cloud-sdk/types.ts +760 -0
- package/src/utils/config.ts +193 -0
- package/src/utils/events.ts +65 -0
- package/src/utils/helpers.ts +107 -0
- package/src/utils/responses-output.ts +115 -0
- package/src/utils/sdk-client.ts +41 -0
- package/src/utils/waifu-metering.ts +302 -0
- package/dist/actions/check-credits.d.ts +0 -6
- package/dist/actions/check-credits.d.ts.map +0 -1
- package/dist/actions/freeze-agent.d.ts +0 -9
- package/dist/actions/freeze-agent.d.ts.map +0 -1
- package/dist/actions/index.d.ts +0 -5
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/actions/provision-agent.d.ts +0 -8
- package/dist/actions/provision-agent.d.ts.map +0 -1
- package/dist/actions/resume-agent.d.ts +0 -9
- package/dist/actions/resume-agent.d.ts.map +0 -1
- package/dist/build.d.ts +0 -3
- package/dist/build.d.ts.map +0 -1
- package/dist/generated/specs/specs.d.ts +0 -55
- package/dist/generated/specs/specs.d.ts.map +0 -1
- package/dist/models/object.d.ts +0 -4
- package/dist/models/object.d.ts.map +0 -1
- package/dist/utils/forwarded-settings.d.ts +0 -8
- package/dist/utils/forwarded-settings.d.ts.map +0 -1
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __returnValue = (v) => v;
|
|
4
|
+
function __exportSetter(name, newValue) {
|
|
5
|
+
this[name] = __returnValue.bind(null, newValue);
|
|
6
|
+
}
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, {
|
|
10
|
+
get: all[name],
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
set: __exportSetter.bind(all, name)
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
|
+
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
18
|
+
|
|
19
|
+
// src/lib/state-paths.ts
|
|
20
|
+
import fs from "node:fs";
|
|
21
|
+
import path from "node:path";
|
|
22
|
+
import {
|
|
23
|
+
getElizaNamespace,
|
|
24
|
+
resolveStateDir,
|
|
25
|
+
resolveUserPath
|
|
26
|
+
} from "@elizaos/core";
|
|
27
|
+
function resolveConfigPath(env = process.env, stateDirPath = resolveStateDir(env)) {
|
|
28
|
+
const override = env.ELIZA_CONFIG_PATH?.trim();
|
|
29
|
+
if (override)
|
|
30
|
+
return resolveUserPath(override);
|
|
31
|
+
const namespace = getElizaNamespace(env);
|
|
32
|
+
const primaryPath = path.join(stateDirPath, `${namespace}.json`);
|
|
33
|
+
if (fs.existsSync(primaryPath))
|
|
34
|
+
return primaryPath;
|
|
35
|
+
if (namespace !== "eliza") {
|
|
36
|
+
const legacyPath = path.join(stateDirPath, "eliza.json");
|
|
37
|
+
if (fs.existsSync(legacyPath))
|
|
38
|
+
return legacyPath;
|
|
39
|
+
}
|
|
40
|
+
return primaryPath;
|
|
41
|
+
}
|
|
42
|
+
var init_state_paths = () => {};
|
|
43
|
+
|
|
44
|
+
// src/lib/config-env.ts
|
|
45
|
+
import fs2 from "node:fs/promises";
|
|
46
|
+
import path2 from "node:path";
|
|
47
|
+
function parseConfigEnv(contents) {
|
|
48
|
+
const lines = contents.length === 0 ? [] : contents.split(/\r?\n/);
|
|
49
|
+
if (lines.length > 0 && lines[lines.length - 1] === "") {
|
|
50
|
+
lines.pop();
|
|
51
|
+
}
|
|
52
|
+
const index = new Map;
|
|
53
|
+
for (let i = 0;i < lines.length; i += 1) {
|
|
54
|
+
const line = lines[i] ?? "";
|
|
55
|
+
const trimmed = line.trim();
|
|
56
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
57
|
+
continue;
|
|
58
|
+
const eq = line.indexOf("=");
|
|
59
|
+
if (eq <= 0)
|
|
60
|
+
continue;
|
|
61
|
+
const key = line.slice(0, eq).trim();
|
|
62
|
+
if (KEY_PATTERN.test(key))
|
|
63
|
+
index.set(key, i);
|
|
64
|
+
}
|
|
65
|
+
return { lines, index };
|
|
66
|
+
}
|
|
67
|
+
function serialiseConfigEnv(parsed) {
|
|
68
|
+
return parsed.lines.length === 0 ? "" : `${parsed.lines.join(`
|
|
69
|
+
`)}
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
72
|
+
function encodeValue(value) {
|
|
73
|
+
if (value === "")
|
|
74
|
+
return "";
|
|
75
|
+
const needsQuoting = /[\s#"'\\]|^\s|\s$/.test(value) || /\n|\r/.test(value);
|
|
76
|
+
if (!needsQuoting)
|
|
77
|
+
return value;
|
|
78
|
+
const escaped = value.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
|
|
79
|
+
return `"${escaped}"`;
|
|
80
|
+
}
|
|
81
|
+
function validateKey(key) {
|
|
82
|
+
if (!KEY_PATTERN.test(key)) {
|
|
83
|
+
throw new Error(`persistConfigEnv: invalid key "${key}" - must match /^[A-Z][A-Z0-9_]*$/`);
|
|
84
|
+
}
|
|
85
|
+
if (BLOCKED_CONFIG_ENV_KEYS.has(key)) {
|
|
86
|
+
throw new Error(`persistConfigEnv: key "${key}" is a shell/runtime hijack vector and cannot be written`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async function readIfExists(filePath) {
|
|
90
|
+
try {
|
|
91
|
+
return await fs2.readFile(filePath, "utf8");
|
|
92
|
+
} catch (error) {
|
|
93
|
+
if (error.code === "ENOENT")
|
|
94
|
+
return null;
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async function writeAtomic(filePath, contents) {
|
|
99
|
+
const tmpPath = `${filePath}${TMP_SUFFIX}`;
|
|
100
|
+
const handle = await fs2.open(tmpPath, "w", 384);
|
|
101
|
+
try {
|
|
102
|
+
await handle.writeFile(contents, "utf8");
|
|
103
|
+
await handle.sync();
|
|
104
|
+
} finally {
|
|
105
|
+
await handle.close();
|
|
106
|
+
}
|
|
107
|
+
await fs2.rename(tmpPath, filePath);
|
|
108
|
+
}
|
|
109
|
+
function serialise(fn) {
|
|
110
|
+
const next = writeChain.then(fn, fn);
|
|
111
|
+
writeChain = next.catch(() => {
|
|
112
|
+
return;
|
|
113
|
+
});
|
|
114
|
+
return next;
|
|
115
|
+
}
|
|
116
|
+
function resolveConfigEnvPath(stateDir) {
|
|
117
|
+
return path2.join(stateDir ?? resolveStateDir(), CONFIG_ENV_FILENAME);
|
|
118
|
+
}
|
|
119
|
+
async function persistConfigEnv(key, value, opts = {}) {
|
|
120
|
+
validateKey(key);
|
|
121
|
+
await serialise(async () => {
|
|
122
|
+
const filePath = resolveConfigEnvPath(opts.stateDir);
|
|
123
|
+
await fs2.mkdir(path2.dirname(filePath), { recursive: true });
|
|
124
|
+
const existing = await readIfExists(filePath) ?? "";
|
|
125
|
+
const parsed = parseConfigEnv(existing);
|
|
126
|
+
const existingIdx = parsed.index.get(key);
|
|
127
|
+
const isDelete = value === "";
|
|
128
|
+
if (isDelete) {
|
|
129
|
+
if (existingIdx === undefined) {
|
|
130
|
+
delete process.env[key];
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
parsed.lines.splice(existingIdx, 1);
|
|
134
|
+
} else {
|
|
135
|
+
const encoded = `${key}=${encodeValue(value)}`;
|
|
136
|
+
if (existingIdx === undefined) {
|
|
137
|
+
parsed.lines.push(encoded);
|
|
138
|
+
} else {
|
|
139
|
+
parsed.lines[existingIdx] = encoded;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (existing.length > 0) {
|
|
143
|
+
await fs2.writeFile(`${filePath}${BAK_SUFFIX}`, existing, {
|
|
144
|
+
encoding: "utf8",
|
|
145
|
+
mode: 384
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
await writeAtomic(filePath, serialiseConfigEnv(parsed));
|
|
149
|
+
if (isDelete) {
|
|
150
|
+
delete process.env[key];
|
|
151
|
+
} else {
|
|
152
|
+
process.env[key] = value;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
var CONFIG_ENV_FILENAME = "config.env", BAK_SUFFIX = ".bak", TMP_SUFFIX = ".tmp", KEY_PATTERN, BLOCKED_CONFIG_ENV_KEYS, writeChain;
|
|
157
|
+
var init_config_env = __esm(() => {
|
|
158
|
+
init_state_paths();
|
|
159
|
+
KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;
|
|
160
|
+
BLOCKED_CONFIG_ENV_KEYS = new Set([
|
|
161
|
+
"NODE_OPTIONS",
|
|
162
|
+
"NODE_EXTRA_CA_CERTS",
|
|
163
|
+
"NODE_TLS_REJECT_UNAUTHORIZED",
|
|
164
|
+
"NODE_PATH",
|
|
165
|
+
"LD_PRELOAD",
|
|
166
|
+
"LD_LIBRARY_PATH",
|
|
167
|
+
"DYLD_INSERT_LIBRARIES",
|
|
168
|
+
"DYLD_LIBRARY_PATH",
|
|
169
|
+
"DYLD_FRAMEWORK_PATH",
|
|
170
|
+
"DYLD_FALLBACK_FRAMEWORK_PATH",
|
|
171
|
+
"DYLD_FALLBACK_LIBRARY_PATH",
|
|
172
|
+
"PATH",
|
|
173
|
+
"HOME",
|
|
174
|
+
"SHELL",
|
|
175
|
+
"HTTP_PROXY",
|
|
176
|
+
"HTTPS_PROXY",
|
|
177
|
+
"ALL_PROXY",
|
|
178
|
+
"NO_PROXY",
|
|
179
|
+
"SSL_CERT_FILE",
|
|
180
|
+
"SSL_CERT_DIR",
|
|
181
|
+
"CURL_CA_BUNDLE"
|
|
182
|
+
]);
|
|
183
|
+
writeChain = Promise.resolve();
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// src/lib/feature-flags.ts
|
|
187
|
+
function readBoolFlag(name, fallback = false) {
|
|
188
|
+
const raw = process.env[name];
|
|
189
|
+
if (raw === undefined || raw === null || raw === "")
|
|
190
|
+
return fallback;
|
|
191
|
+
const trimmed = String(raw).trim().toLowerCase();
|
|
192
|
+
if (trimmed === "1" || trimmed === "true" || trimmed === "yes" || trimmed === "on") {
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
if (trimmed === "0" || trimmed === "false" || trimmed === "no" || trimmed === "off") {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
return fallback;
|
|
199
|
+
}
|
|
200
|
+
function isCloudWalletEnabled() {
|
|
201
|
+
return readBoolFlag("ENABLE_CLOUD_WALLET");
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// src/cloud/cloud-wallet.ts
|
|
205
|
+
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
206
|
+
function ensureFlag() {
|
|
207
|
+
if (!isCloudWalletEnabled()) {
|
|
208
|
+
throw new CloudWalletFlagDisabledError;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
function normalizePrivateKey(raw) {
|
|
212
|
+
const trimmed = raw.trim();
|
|
213
|
+
const hex = trimmed.startsWith("0x") ? trimmed.slice(2) : trimmed;
|
|
214
|
+
if (!/^[0-9a-fA-F]{64}$/.test(hex)) {
|
|
215
|
+
throw new Error(`Malformed ${ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV}: expected 32-byte hex`);
|
|
216
|
+
}
|
|
217
|
+
return `0x${hex.toLowerCase()}`;
|
|
218
|
+
}
|
|
219
|
+
async function getOrCreateClientAddressKey(opts = {}) {
|
|
220
|
+
ensureFlag();
|
|
221
|
+
const existing = process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV];
|
|
222
|
+
if (existing && existing.trim().length > 0) {
|
|
223
|
+
const privateKey2 = normalizePrivateKey(existing);
|
|
224
|
+
const account2 = privateKeyToAccount(privateKey2);
|
|
225
|
+
return { privateKey: privateKey2, address: account2.address, minted: false };
|
|
226
|
+
}
|
|
227
|
+
const privateKey = generatePrivateKey();
|
|
228
|
+
const account = privateKeyToAccount(privateKey);
|
|
229
|
+
process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV] = privateKey;
|
|
230
|
+
await persistConfigEnv(ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV, privateKey, {
|
|
231
|
+
stateDir: opts.stateDir
|
|
232
|
+
});
|
|
233
|
+
return { privateKey, address: account.address, minted: true };
|
|
234
|
+
}
|
|
235
|
+
function inflightKey(agentId, chain) {
|
|
236
|
+
return `${agentId}::${chain}`;
|
|
237
|
+
}
|
|
238
|
+
async function provisionOne(bridge, agentId, chain, clientAddress) {
|
|
239
|
+
try {
|
|
240
|
+
return await bridge.getAgentWallet(agentId, chain);
|
|
241
|
+
} catch (error) {
|
|
242
|
+
if (!isMissingCloudWalletError(error, chain)) {
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const provisioned = await bridge.provisionWallet({
|
|
247
|
+
chainType: chain,
|
|
248
|
+
clientAddress
|
|
249
|
+
});
|
|
250
|
+
return {
|
|
251
|
+
agentWalletId: provisioned.walletId,
|
|
252
|
+
walletAddress: provisioned.address,
|
|
253
|
+
walletProvider: provisioned.provider,
|
|
254
|
+
chainType: chain
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function isMissingCloudWalletError(error, chain) {
|
|
258
|
+
if (error instanceof Error && new RegExp(`no cloud ${chain} wallet provisioned`, "i").test(error.message)) {
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
return typeof error === "object" && error !== null && "name" in error && error.name === "CloudBridgeError" && typeof error.status === "number" && error.status === 404;
|
|
262
|
+
}
|
|
263
|
+
function formatProvisionWarning(chain, error) {
|
|
264
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
265
|
+
return `Cloud ${chain} wallet import failed: ${message}`;
|
|
266
|
+
}
|
|
267
|
+
async function provisionCloudWalletsBestEffort(bridge, opts) {
|
|
268
|
+
ensureFlag();
|
|
269
|
+
const chains = opts.chains ?? ["evm", "solana"];
|
|
270
|
+
const results = await Promise.all(chains.map((chain) => {
|
|
271
|
+
const key = inflightKey(opts.agentId, chain);
|
|
272
|
+
const pending = inflight.get(key);
|
|
273
|
+
if (pending) {
|
|
274
|
+
return pending.then((descriptor) => ({
|
|
275
|
+
chain,
|
|
276
|
+
ok: true,
|
|
277
|
+
descriptor
|
|
278
|
+
}), (error) => ({
|
|
279
|
+
chain,
|
|
280
|
+
ok: false,
|
|
281
|
+
error
|
|
282
|
+
}));
|
|
283
|
+
}
|
|
284
|
+
const p = provisionOne(bridge, opts.agentId, chain, opts.clientAddress).finally(() => {
|
|
285
|
+
inflight.delete(key);
|
|
286
|
+
});
|
|
287
|
+
inflight.set(key, p);
|
|
288
|
+
return p.then((descriptor) => ({
|
|
289
|
+
chain,
|
|
290
|
+
ok: true,
|
|
291
|
+
descriptor
|
|
292
|
+
}), (error) => ({
|
|
293
|
+
chain,
|
|
294
|
+
ok: false,
|
|
295
|
+
error
|
|
296
|
+
}));
|
|
297
|
+
}));
|
|
298
|
+
const out = {};
|
|
299
|
+
const failures = [];
|
|
300
|
+
for (const result of results) {
|
|
301
|
+
if ("descriptor" in result) {
|
|
302
|
+
out[result.chain] = result.descriptor;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
failures.push({ chain: result.chain, error: result.error });
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
descriptors: out,
|
|
309
|
+
failures,
|
|
310
|
+
warnings: failures.map(({ chain, error }) => formatProvisionWarning(chain, error))
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
async function provisionCloudWallets(bridge, opts) {
|
|
314
|
+
const result = await provisionCloudWalletsBestEffort(bridge, opts);
|
|
315
|
+
if (result.failures.length > 0 && Object.keys(result.descriptors).length === 0) {
|
|
316
|
+
const firstFailure = result.failures[0];
|
|
317
|
+
if (firstFailure?.error instanceof Error) {
|
|
318
|
+
throw firstFailure.error;
|
|
319
|
+
}
|
|
320
|
+
throw new Error(result.warnings[0] ?? "Failed to provision cloud wallets");
|
|
321
|
+
}
|
|
322
|
+
return result.descriptors;
|
|
323
|
+
}
|
|
324
|
+
function persistCloudWalletCache(config, descriptors) {
|
|
325
|
+
ensureFlag();
|
|
326
|
+
const wallet = config.wallet ?? {};
|
|
327
|
+
const cloud = { ...wallet.cloud ?? {} };
|
|
328
|
+
if (descriptors.evm)
|
|
329
|
+
cloud.evm = descriptors.evm;
|
|
330
|
+
if (descriptors.solana)
|
|
331
|
+
cloud.solana = descriptors.solana;
|
|
332
|
+
wallet.cloud = cloud;
|
|
333
|
+
config.wallet = wallet;
|
|
334
|
+
}
|
|
335
|
+
function __resetCloudWalletModuleForTests() {
|
|
336
|
+
inflight.clear();
|
|
337
|
+
delete process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV];
|
|
338
|
+
}
|
|
339
|
+
var ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV = "ELIZA_CLOUD_CLIENT_ADDRESS_KEY", CloudWalletFlagDisabledError, inflight;
|
|
340
|
+
var init_cloud_wallet = __esm(() => {
|
|
341
|
+
init_config_env();
|
|
342
|
+
CloudWalletFlagDisabledError = class CloudWalletFlagDisabledError extends Error {
|
|
343
|
+
constructor() {
|
|
344
|
+
super("ENABLE_CLOUD_WALLET is off; cloud wallet code paths are inactive");
|
|
345
|
+
this.name = "CloudWalletFlagDisabledError";
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
inflight = new Map;
|
|
349
|
+
});
|
|
350
|
+
init_cloud_wallet();
|
|
351
|
+
|
|
352
|
+
export {
|
|
353
|
+
provisionCloudWalletsBestEffort,
|
|
354
|
+
provisionCloudWallets,
|
|
355
|
+
persistCloudWalletCache,
|
|
356
|
+
getOrCreateClientAddressKey,
|
|
357
|
+
__resetCloudWalletModuleForTests,
|
|
358
|
+
ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV,
|
|
359
|
+
CloudWalletFlagDisabledError
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
//# debugId=B0EB8E1A353E263464756E2164756E21
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/lib/state-paths.ts", "../src/lib/config-env.ts", "../src/lib/feature-flags.ts", "../src/cloud/cloud-wallet.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n getElizaNamespace,\n resolveStateDir,\n resolveUserPath,\n} from \"@elizaos/core\";\n\nexport { getElizaNamespace, resolveStateDir, resolveUserPath };\n\nexport function resolveConfigPath(\n env: NodeJS.ProcessEnv = process.env,\n stateDirPath: string = resolveStateDir(env),\n): string {\n const override = env.ELIZA_CONFIG_PATH?.trim();\n if (override) return resolveUserPath(override);\n\n const namespace = getElizaNamespace(env);\n const primaryPath = path.join(stateDirPath, `${namespace}.json`);\n if (fs.existsSync(primaryPath)) return primaryPath;\n\n if (namespace !== \"eliza\") {\n const legacyPath = path.join(stateDirPath, \"eliza.json\");\n if (fs.existsSync(legacyPath)) return legacyPath;\n }\n\n return primaryPath;\n}\n",
|
|
6
|
+
"import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveStateDir } from \"./state-paths\";\n\nconst CONFIG_ENV_FILENAME = \"config.env\";\nconst BAK_SUFFIX = \".bak\";\nconst TMP_SUFFIX = \".tmp\";\nconst KEY_PATTERN = /^[A-Z][A-Z0-9_]*$/;\n\nconst BLOCKED_CONFIG_ENV_KEYS: ReadonlySet<string> = new Set([\n \"NODE_OPTIONS\",\n \"NODE_EXTRA_CA_CERTS\",\n \"NODE_TLS_REJECT_UNAUTHORIZED\",\n \"NODE_PATH\",\n \"LD_PRELOAD\",\n \"LD_LIBRARY_PATH\",\n \"DYLD_INSERT_LIBRARIES\",\n \"DYLD_LIBRARY_PATH\",\n \"DYLD_FRAMEWORK_PATH\",\n \"DYLD_FALLBACK_FRAMEWORK_PATH\",\n \"DYLD_FALLBACK_LIBRARY_PATH\",\n \"PATH\",\n \"HOME\",\n \"SHELL\",\n \"HTTP_PROXY\",\n \"HTTPS_PROXY\",\n \"ALL_PROXY\",\n \"NO_PROXY\",\n \"SSL_CERT_FILE\",\n \"SSL_CERT_DIR\",\n \"CURL_CA_BUNDLE\",\n]);\n\nexport interface PersistConfigEnvOptions {\n stateDir?: string;\n}\n\ninterface ParsedConfigEnv {\n lines: string[];\n index: Map<string, number>;\n}\n\nfunction parseConfigEnv(contents: string): ParsedConfigEnv {\n const lines = contents.length === 0 ? [] : contents.split(/\\r?\\n/);\n if (lines.length > 0 && lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n const index = new Map<string, number>();\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i] ?? \"\";\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eq = line.indexOf(\"=\");\n if (eq <= 0) continue;\n const key = line.slice(0, eq).trim();\n if (KEY_PATTERN.test(key)) index.set(key, i);\n }\n return { lines, index };\n}\n\nfunction serialiseConfigEnv(parsed: ParsedConfigEnv): string {\n return parsed.lines.length === 0 ? \"\" : `${parsed.lines.join(\"\\n\")}\\n`;\n}\n\nfunction encodeValue(value: string): string {\n if (value === \"\") return \"\";\n const needsQuoting = /[\\s#\"'\\\\]|^\\s|\\s$/.test(value) || /\\n|\\r/.test(value);\n if (!needsQuoting) return value;\n const escaped = value\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\");\n return `\"${escaped}\"`;\n}\n\nfunction validateKey(key: string): void {\n if (!KEY_PATTERN.test(key)) {\n throw new Error(\n `persistConfigEnv: invalid key \"${key}\" - must match /^[A-Z][A-Z0-9_]*$/`,\n );\n }\n if (BLOCKED_CONFIG_ENV_KEYS.has(key)) {\n throw new Error(\n `persistConfigEnv: key \"${key}\" is a shell/runtime hijack vector and cannot be written`,\n );\n }\n}\n\nasync function readIfExists(filePath: string): Promise<string | null> {\n try {\n return await fs.readFile(filePath, \"utf8\");\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") return null;\n throw error;\n }\n}\n\nasync function writeAtomic(filePath: string, contents: string): Promise<void> {\n const tmpPath = `${filePath}${TMP_SUFFIX}`;\n const handle = await fs.open(tmpPath, \"w\", 0o600);\n try {\n await handle.writeFile(contents, \"utf8\");\n await handle.sync();\n } finally {\n await handle.close();\n }\n await fs.rename(tmpPath, filePath);\n}\n\nlet writeChain: Promise<unknown> = Promise.resolve();\n\nfunction serialise<T>(fn: () => Promise<T>): Promise<T> {\n const next = writeChain.then(fn, fn);\n writeChain = next.catch(() => undefined);\n return next;\n}\n\nfunction resolveConfigEnvPath(stateDir?: string): string {\n return path.join(stateDir ?? resolveStateDir(), CONFIG_ENV_FILENAME);\n}\n\nexport async function persistConfigEnv(\n key: string,\n value: string,\n opts: PersistConfigEnvOptions = {},\n): Promise<void> {\n validateKey(key);\n\n await serialise(async () => {\n const filePath = resolveConfigEnvPath(opts.stateDir);\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n const existing = (await readIfExists(filePath)) ?? \"\";\n const parsed = parseConfigEnv(existing);\n const existingIdx = parsed.index.get(key);\n const isDelete = value === \"\";\n\n if (isDelete) {\n if (existingIdx === undefined) {\n delete process.env[key];\n return;\n }\n parsed.lines.splice(existingIdx, 1);\n } else {\n const encoded = `${key}=${encodeValue(value)}`;\n if (existingIdx === undefined) {\n parsed.lines.push(encoded);\n } else {\n parsed.lines[existingIdx] = encoded;\n }\n }\n\n if (existing.length > 0) {\n await fs.writeFile(`${filePath}${BAK_SUFFIX}`, existing, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n }\n\n await writeAtomic(filePath, serialiseConfigEnv(parsed));\n if (isDelete) {\n delete process.env[key];\n } else {\n process.env[key] = value;\n }\n });\n}\n",
|
|
7
|
+
"function readBoolFlag(name: string, fallback = false): boolean {\n const raw = process.env[name];\n if (raw === undefined || raw === null || raw === \"\") return fallback;\n const trimmed = String(raw).trim().toLowerCase();\n if (\n trimmed === \"1\" ||\n trimmed === \"true\" ||\n trimmed === \"yes\" ||\n trimmed === \"on\"\n ) {\n return true;\n }\n if (\n trimmed === \"0\" ||\n trimmed === \"false\" ||\n trimmed === \"no\" ||\n trimmed === \"off\"\n ) {\n return false;\n }\n return fallback;\n}\n\nexport function isCloudWalletEnabled(): boolean {\n return readBoolFlag(\"ENABLE_CLOUD_WALLET\");\n}\n",
|
|
8
|
+
"/**\n * Cloud wallet provisioning + client-address key management.\n *\n * Gated by ENABLE_CLOUD_WALLET. Every export short-circuits when the flag\n * is off so no cloud code paths run in legacy builds.\n *\n * Responsibilities:\n * 1. Generate + persist ELIZA_CLOUD_CLIENT_ADDRESS_KEY (the local secp256k1\n * key whose address ties this install to cloud-custodied wallets).\n * 2. Provision EVM + Solana cloud wallets for an agent, guarded by a\n * single-flight mutex keyed on (agentId, chainType) to prevent duplicate\n * provision under concurrent cloud-login triggers.\n * 3. Write the resulting descriptors into the in-memory config under\n * wallet.cloud.{evm,solana}; caller persists via saveConfig().\n */\n\nimport { generatePrivateKey, privateKeyToAccount } from \"viem/accounts\";\nimport type {\n CloudBridgeError,\n CloudChainType,\n CloudWalletDescriptor,\n CloudWalletProvider,\n} from \"./bridge-client.js\";\nimport { persistConfigEnv } from \"../lib/config-env\";\nimport { isCloudWalletEnabled } from \"../lib/feature-flags\";\n\nexport const ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV =\n \"ELIZA_CLOUD_CLIENT_ADDRESS_KEY\";\n\nexport class CloudWalletFlagDisabledError extends Error {\n constructor() {\n super(\"ENABLE_CLOUD_WALLET is off; cloud wallet code paths are inactive\");\n this.name = \"CloudWalletFlagDisabledError\";\n }\n}\n\nfunction ensureFlag(): void {\n if (!isCloudWalletEnabled()) {\n throw new CloudWalletFlagDisabledError();\n }\n}\n\n/**\n * Normalize a hex private key to the 0x-prefixed form viem expects.\n */\nfunction normalizePrivateKey(raw: string): `0x${string}` {\n const trimmed = raw.trim();\n const hex = trimmed.startsWith(\"0x\") ? trimmed.slice(2) : trimmed;\n if (!/^[0-9a-fA-F]{64}$/.test(hex)) {\n throw new Error(\n `Malformed ${ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV}: expected 32-byte hex`,\n );\n }\n return `0x${hex.toLowerCase()}`;\n}\n\nexport interface GetOrCreateKeyOptions {\n /** Override state dir for config.env persistence. Used by tests. */\n stateDir?: string;\n}\n\nexport interface CloudWalletProvisionBridge {\n getAgentWallet(\n agentId: string,\n chain: CloudChainType,\n ): Promise<CloudWalletDescriptor>;\n provisionWallet(input: {\n chainType: CloudChainType;\n clientAddress: string;\n }): Promise<{\n walletId: string;\n address: string;\n chainType: CloudChainType;\n provider: CloudWalletProvider;\n }>;\n}\n\n/**\n * Read or mint the local client-address secp256k1 key.\n *\n * Priority:\n * 1. process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY] — respected as-is.\n * 2. Generate a fresh key, write to `process.env` AND disk (`config.env`)\n * so it survives restart.\n *\n * The key is in `BLOCKED_STARTUP_ENV_KEYS` so it never syncs into\n * `eliza.json` — `config.env` is the designated disk home for it.\n */\nexport async function getOrCreateClientAddressKey(\n opts: GetOrCreateKeyOptions = {},\n): Promise<{\n privateKey: `0x${string}`;\n address: `0x${string}`;\n minted: boolean;\n}> {\n ensureFlag();\n\n const existing = process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV];\n if (existing && existing.trim().length > 0) {\n const privateKey = normalizePrivateKey(existing);\n const account = privateKeyToAccount(privateKey);\n return { privateKey, address: account.address, minted: false };\n }\n\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n\n process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV] = privateKey;\n await persistConfigEnv(ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV, privateKey, {\n stateDir: opts.stateDir,\n });\n\n return { privateKey, address: account.address, minted: true };\n}\n\n// ---------------------------------------------------------------------------\n// Single-flight provisioning\n// ---------------------------------------------------------------------------\n\nconst inflight = new Map<string, Promise<CloudWalletDescriptor>>();\n\nfunction inflightKey(agentId: string, chain: CloudChainType): string {\n return `${agentId}::${chain}`;\n}\n\nasync function provisionOne(\n bridge: CloudWalletProvisionBridge,\n agentId: string,\n chain: CloudChainType,\n clientAddress: string,\n): Promise<CloudWalletDescriptor> {\n try {\n return await bridge.getAgentWallet(agentId, chain);\n } catch (error) {\n if (!isMissingCloudWalletError(error, chain)) {\n throw error;\n }\n }\n\n const provisioned = await bridge.provisionWallet({\n chainType: chain,\n clientAddress,\n });\n\n return {\n agentWalletId: provisioned.walletId,\n walletAddress: provisioned.address,\n walletProvider: provisioned.provider,\n chainType: chain,\n };\n}\n\nfunction isMissingCloudWalletError(\n error: unknown,\n chain: CloudChainType,\n): boolean {\n if (\n error instanceof Error &&\n new RegExp(`no cloud ${chain} wallet provisioned`, \"i\").test(error.message)\n ) {\n return true;\n }\n\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"name\" in error &&\n error.name === \"CloudBridgeError\" &&\n typeof (error as CloudBridgeError).status === \"number\" &&\n (error as CloudBridgeError).status === 404\n );\n}\n\nexport interface ProvisionOptions {\n agentId: string;\n clientAddress: string;\n chains?: CloudChainType[];\n}\n\nexport interface CloudWalletDescriptors {\n evm: CloudWalletDescriptor;\n solana: CloudWalletDescriptor;\n}\n\nexport interface CloudWalletProvisionFailure {\n chain: CloudChainType;\n error: unknown;\n}\n\nexport interface CloudWalletProvisionResult {\n descriptors: Partial<CloudWalletDescriptors>;\n failures: CloudWalletProvisionFailure[];\n warnings: string[];\n}\n\nfunction formatProvisionWarning(chain: CloudChainType, error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n return `Cloud ${chain} wallet import failed: ${message}`;\n}\n\n/**\n * Provision EVM + Solana cloud wallets idempotently.\n *\n * Concurrent callers for the same (agentId, chain) share a single in-flight\n * promise so we never send duplicate provision requests.\n */\nexport async function provisionCloudWalletsBestEffort(\n bridge: CloudWalletProvisionBridge,\n opts: ProvisionOptions,\n): Promise<CloudWalletProvisionResult> {\n ensureFlag();\n\n const chains: CloudChainType[] = opts.chains ?? [\"evm\", \"solana\"];\n\n const results = await Promise.all(\n chains.map((chain) => {\n const key = inflightKey(opts.agentId, chain);\n const pending = inflight.get(key);\n if (pending) {\n return pending.then(\n (descriptor) =>\n ({\n chain,\n ok: true as const,\n descriptor,\n }) as const,\n (error) =>\n ({\n chain,\n ok: false as const,\n error,\n }) as const,\n );\n }\n\n const p = provisionOne(\n bridge,\n opts.agentId,\n chain,\n opts.clientAddress,\n ).finally(() => {\n inflight.delete(key);\n });\n inflight.set(key, p);\n return p.then(\n (descriptor) =>\n ({\n chain,\n ok: true as const,\n descriptor,\n }) as const,\n (error) =>\n ({\n chain,\n ok: false as const,\n error,\n }) as const,\n );\n }),\n );\n\n const out: Partial<CloudWalletDescriptors> = {};\n const failures: CloudWalletProvisionFailure[] = [];\n for (const result of results) {\n if (\"descriptor\" in result) {\n out[result.chain] = result.descriptor;\n continue;\n }\n failures.push({ chain: result.chain, error: result.error });\n }\n\n return {\n descriptors: out,\n failures,\n warnings: failures.map(({ chain, error }) =>\n formatProvisionWarning(chain, error),\n ),\n };\n}\n\nexport async function provisionCloudWallets(\n bridge: CloudWalletProvisionBridge,\n opts: ProvisionOptions,\n): Promise<Partial<CloudWalletDescriptors>> {\n const result = await provisionCloudWalletsBestEffort(bridge, opts);\n if (\n result.failures.length > 0 &&\n Object.keys(result.descriptors).length === 0\n ) {\n const firstFailure = result.failures[0];\n if (firstFailure?.error instanceof Error) {\n throw firstFailure.error;\n }\n throw new Error(result.warnings[0] ?? \"Failed to provision cloud wallets\");\n }\n\n return result.descriptors;\n}\n\n// ---------------------------------------------------------------------------\n// Config cache write\n// ---------------------------------------------------------------------------\n\nexport interface CloudWalletCacheTarget {\n wallet?: {\n cloud?: Partial<Record<CloudChainType, CloudWalletDescriptor>>;\n [k: string]: unknown;\n };\n [k: string]: unknown;\n}\n\n/**\n * Write the descriptors into the provided config object under\n * `wallet.cloud.{evm,solana}`. Caller is responsible for persisting\n * (state.saveConfig()).\n */\nexport function persistCloudWalletCache(\n config: CloudWalletCacheTarget,\n descriptors: Partial<CloudWalletDescriptors>,\n): void {\n ensureFlag();\n\n const wallet = (config.wallet ?? {}) as NonNullable<\n CloudWalletCacheTarget[\"wallet\"]\n >;\n const cloud = { ...(wallet.cloud ?? {}) };\n if (descriptors.evm) cloud.evm = descriptors.evm;\n if (descriptors.solana) cloud.solana = descriptors.solana;\n wallet.cloud = cloud;\n config.wallet = wallet;\n}\n\n// ---------------------------------------------------------------------------\n// Test hooks\n// ---------------------------------------------------------------------------\n\n/** @internal — exposed for tests to reset state between cases. */\nexport function __resetCloudWalletModuleForTests(): void {\n inflight.clear();\n delete process.env[ELIZA_CLOUD_CLIENT_ADDRESS_KEY_ENV];\n}\n"
|
|
9
|
+
],
|
|
10
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAQO,SAAS,iBAAiB,CAC/B,MAAyB,QAAQ,KACjC,eAAuB,gBAAgB,GAAG,GAClC;AAAA,EACR,MAAM,WAAW,IAAI,mBAAmB,KAAK;AAAA,EAC7C,IAAI;AAAA,IAAU,OAAO,gBAAgB,QAAQ;AAAA,EAE7C,MAAM,YAAY,kBAAkB,GAAG;AAAA,EACvC,MAAM,cAAc,KAAK,KAAK,cAAc,GAAG,gBAAgB;AAAA,EAC/D,IAAI,GAAG,WAAW,WAAW;AAAA,IAAG,OAAO;AAAA,EAEvC,IAAI,cAAc,SAAS;AAAA,IACzB,MAAM,aAAa,KAAK,KAAK,cAAc,YAAY;AAAA,IACvD,IAAI,GAAG,WAAW,UAAU;AAAA,MAAG,OAAO;AAAA,EACxC;AAAA,EAEA,OAAO;AAAA;AAAA;;;AC1BT;AACA;AAyCA,SAAS,cAAc,CAAC,UAAmC;AAAA,EACzD,MAAM,QAAQ,SAAS,WAAW,IAAI,CAAC,IAAI,SAAS,MAAM,OAAO;AAAA,EACjE,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,IAAI;AAAA,IACtD,MAAM,IAAI;AAAA,EACZ;AAAA,EACA,MAAM,QAAQ,IAAI;AAAA,EAClB,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxC,MAAM,OAAO,MAAM,MAAM;AAAA,IACzB,MAAM,UAAU,KAAK,KAAK;AAAA,IAC1B,IAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AAAA,MAAG;AAAA,IACzC,MAAM,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC3B,IAAI,MAAM;AAAA,MAAG;AAAA,IACb,MAAM,MAAM,KAAK,MAAM,GAAG,EAAE,EAAE,KAAK;AAAA,IACnC,IAAI,YAAY,KAAK,GAAG;AAAA,MAAG,MAAM,IAAI,KAAK,CAAC;AAAA,EAC7C;AAAA,EACA,OAAO,EAAE,OAAO,MAAM;AAAA;AAGxB,SAAS,kBAAkB,CAAC,QAAiC;AAAA,EAC3D,OAAO,OAAO,MAAM,WAAW,IAAI,KAAK,GAAG,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA;AAAA;AAGnE,SAAS,WAAW,CAAC,OAAuB;AAAA,EAC1C,IAAI,UAAU;AAAA,IAAI,OAAO;AAAA,EACzB,MAAM,eAAe,oBAAoB,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK;AAAA,EAC1E,IAAI,CAAC;AAAA,IAAc,OAAO;AAAA,EAC1B,MAAM,UAAU,MACb,QAAQ,OAAO,MAAM,EACrB,QAAQ,MAAM,MAAK,EACnB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK;AAAA,EACvB,OAAO,IAAI;AAAA;AAGb,SAAS,WAAW,CAAC,KAAmB;AAAA,EACtC,IAAI,CAAC,YAAY,KAAK,GAAG,GAAG;AAAA,IAC1B,MAAM,IAAI,MACR,kCAAkC,uCACpC;AAAA,EACF;AAAA,EACA,IAAI,wBAAwB,IAAI,GAAG,GAAG;AAAA,IACpC,MAAM,IAAI,MACR,0BAA0B,6DAC5B;AAAA,EACF;AAAA;AAGF,eAAe,YAAY,CAAC,UAA0C;AAAA,EACpE,IAAI;AAAA,IACF,OAAO,MAAM,IAAG,SAAS,UAAU,MAAM;AAAA,IACzC,OAAO,OAAO;AAAA,IACd,IAAK,MAAgC,SAAS;AAAA,MAAU,OAAO;AAAA,IAC/D,MAAM;AAAA;AAAA;AAIV,eAAe,WAAW,CAAC,UAAkB,UAAiC;AAAA,EAC5E,MAAM,UAAU,GAAG,WAAW;AAAA,EAC9B,MAAM,SAAS,MAAM,IAAG,KAAK,SAAS,KAAK,GAAK;AAAA,EAChD,IAAI;AAAA,IACF,MAAM,OAAO,UAAU,UAAU,MAAM;AAAA,IACvC,MAAM,OAAO,KAAK;AAAA,YAClB;AAAA,IACA,MAAM,OAAO,MAAM;AAAA;AAAA,EAErB,MAAM,IAAG,OAAO,SAAS,QAAQ;AAAA;AAKnC,SAAS,SAAY,CAAC,IAAkC;AAAA,EACtD,MAAM,OAAO,WAAW,KAAK,IAAI,EAAE;AAAA,EACnC,aAAa,KAAK,MAAM,MAAG;AAAA,IAAG;AAAA,GAAS;AAAA,EACvC,OAAO;AAAA;AAGT,SAAS,oBAAoB,CAAC,UAA2B;AAAA,EACvD,OAAO,MAAK,KAAK,YAAY,gBAAgB,GAAG,mBAAmB;AAAA;AAGrE,eAAsB,gBAAgB,CACpC,KACA,OACA,OAAgC,CAAC,GAClB;AAAA,EACf,YAAY,GAAG;AAAA,EAEf,MAAM,UAAU,YAAY;AAAA,IAC1B,MAAM,WAAW,qBAAqB,KAAK,QAAQ;AAAA,IACnD,MAAM,IAAG,MAAM,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IAE1D,MAAM,WAAY,MAAM,aAAa,QAAQ,KAAM;AAAA,IACnD,MAAM,SAAS,eAAe,QAAQ;AAAA,IACtC,MAAM,cAAc,OAAO,MAAM,IAAI,GAAG;AAAA,IACxC,MAAM,WAAW,UAAU;AAAA,IAE3B,IAAI,UAAU;AAAA,MACZ,IAAI,gBAAgB,WAAW;AAAA,QAC7B,OAAO,QAAQ,IAAI;AAAA,QACnB;AAAA,MACF;AAAA,MACA,OAAO,MAAM,OAAO,aAAa,CAAC;AAAA,IACpC,EAAO;AAAA,MACL,MAAM,UAAU,GAAG,OAAO,YAAY,KAAK;AAAA,MAC3C,IAAI,gBAAgB,WAAW;AAAA,QAC7B,OAAO,MAAM,KAAK,OAAO;AAAA,MAC3B,EAAO;AAAA,QACL,OAAO,MAAM,eAAe;AAAA;AAAA;AAAA,IAIhC,IAAI,SAAS,SAAS,GAAG;AAAA,MACvB,MAAM,IAAG,UAAU,GAAG,WAAW,cAAc,UAAU;AAAA,QACvD,UAAU;AAAA,QACV,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,YAAY,UAAU,mBAAmB,MAAM,CAAC;AAAA,IACtD,IAAI,UAAU;AAAA,MACZ,OAAO,QAAQ,IAAI;AAAA,IACrB,EAAO;AAAA,MACL,QAAQ,IAAI,OAAO;AAAA;AAAA,GAEtB;AAAA;AAAA,IAlKG,sBAAsB,cACtB,aAAa,QACb,aAAa,QACb,aAEA,yBAqGF;AAAA;AAAA,EA5GJ;AAAA,EAKM,cAAc;AAAA,EAEd,0BAA+C,IAAI,IAAI;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EA+EG,aAA+B,QAAQ,QAAQ;AAAA;;;AC9GnD,SAAS,YAAY,CAAC,MAAc,WAAW,OAAgB;AAAA,EAC7D,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,IAAI,QAAQ,aAAa,QAAQ,QAAQ,QAAQ;AAAA,IAAI,OAAO;AAAA,EAC5D,MAAM,UAAU,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY;AAAA,EAC/C,IACE,YAAY,OACZ,YAAY,UACZ,YAAY,SACZ,YAAY,MACZ;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,IACE,YAAY,OACZ,YAAY,WACZ,YAAY,QACZ,YAAY,OACZ;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,oBAAoB,GAAY;AAAA,EAC9C,OAAO,aAAa,qBAAqB;AAAA;;;ACR3C;AAoBA,SAAS,UAAU,GAAS;AAAA,EAC1B,IAAI,CAAC,qBAAqB,GAAG;AAAA,IAC3B,MAAM,IAAI;AAAA,EACZ;AAAA;AAMF,SAAS,mBAAmB,CAAC,KAA4B;AAAA,EACvD,MAAM,UAAU,IAAI,KAAK;AAAA,EACzB,MAAM,MAAM,QAAQ,WAAW,IAAI,IAAI,QAAQ,MAAM,CAAC,IAAI;AAAA,EAC1D,IAAI,CAAC,oBAAoB,KAAK,GAAG,GAAG;AAAA,IAClC,MAAM,IAAI,MACR,aAAa,0DACf;AAAA,EACF;AAAA,EACA,OAAO,KAAK,IAAI,YAAY;AAAA;AAmC9B,eAAsB,2BAA2B,CAC/C,OAA8B,CAAC,GAK9B;AAAA,EACD,WAAW;AAAA,EAEX,MAAM,WAAW,QAAQ,IAAI;AAAA,EAC7B,IAAI,YAAY,SAAS,KAAK,EAAE,SAAS,GAAG;AAAA,IAC1C,MAAM,cAAa,oBAAoB,QAAQ;AAAA,IAC/C,MAAM,WAAU,oBAAoB,WAAU;AAAA,IAC9C,OAAO,EAAE,yBAAY,SAAS,SAAQ,SAAS,QAAQ,MAAM;AAAA,EAC/D;AAAA,EAEA,MAAM,aAAa,mBAAmB;AAAA,EACtC,MAAM,UAAU,oBAAoB,UAAU;AAAA,EAE9C,QAAQ,IAAI,sCAAsC;AAAA,EAClD,MAAM,iBAAiB,oCAAoC,YAAY;AAAA,IACrE,UAAU,KAAK;AAAA,EACjB,CAAC;AAAA,EAED,OAAO,EAAE,YAAY,SAAS,QAAQ,SAAS,QAAQ,KAAK;AAAA;AAS9D,SAAS,WAAW,CAAC,SAAiB,OAA+B;AAAA,EACnE,OAAO,GAAG,YAAY;AAAA;AAGxB,eAAe,YAAY,CACzB,QACA,SACA,OACA,eACgC;AAAA,EAChC,IAAI;AAAA,IACF,OAAO,MAAM,OAAO,eAAe,SAAS,KAAK;AAAA,IACjD,OAAO,OAAO;AAAA,IACd,IAAI,CAAC,0BAA0B,OAAO,KAAK,GAAG;AAAA,MAC5C,MAAM;AAAA,IACR;AAAA;AAAA,EAGF,MAAM,cAAc,MAAM,OAAO,gBAAgB;AAAA,IAC/C,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAAA,EAED,OAAO;AAAA,IACL,eAAe,YAAY;AAAA,IAC3B,eAAe,YAAY;AAAA,IAC3B,gBAAgB,YAAY;AAAA,IAC5B,WAAW;AAAA,EACb;AAAA;AAGF,SAAS,yBAAyB,CAChC,OACA,OACS;AAAA,EACT,IACE,iBAAiB,SACjB,IAAI,OAAO,YAAY,4BAA4B,GAAG,EAAE,KAAK,MAAM,OAAO,GAC1E;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS,sBACf,OAAQ,MAA2B,WAAW,YAC7C,MAA2B,WAAW;AAAA;AA0B3C,SAAS,sBAAsB,CAAC,OAAuB,OAAwB;AAAA,EAC7E,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EACrE,OAAO,SAAS,+BAA+B;AAAA;AASjD,eAAsB,+BAA+B,CACnD,QACA,MACqC;AAAA,EACrC,WAAW;AAAA,EAEX,MAAM,SAA2B,KAAK,UAAU,CAAC,OAAO,QAAQ;AAAA,EAEhE,MAAM,UAAU,MAAM,QAAQ,IAC5B,OAAO,IAAI,CAAC,UAAU;AAAA,IACpB,MAAM,MAAM,YAAY,KAAK,SAAS,KAAK;AAAA,IAC3C,MAAM,UAAU,SAAS,IAAI,GAAG;AAAA,IAChC,IAAI,SAAS;AAAA,MACX,OAAO,QAAQ,KACb,CAAC,gBACE;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ;AAAA,MACF,IACF,CAAC,WACE;AAAA,QACC;AAAA,QACA,IAAI;AAAA,QACJ;AAAA,MACF,EACJ;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,aACR,QACA,KAAK,SACL,OACA,KAAK,aACP,EAAE,QAAQ,MAAM;AAAA,MACd,SAAS,OAAO,GAAG;AAAA,KACpB;AAAA,IACD,SAAS,IAAI,KAAK,CAAC;AAAA,IACnB,OAAO,EAAE,KACP,CAAC,gBACE;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,IACF,IACF,CAAC,WACE;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,IACF,EACJ;AAAA,GACD,CACH;AAAA,EAEA,MAAM,MAAuC,CAAC;AAAA,EAC9C,MAAM,WAA0C,CAAC;AAAA,EACjD,WAAW,UAAU,SAAS;AAAA,IAC5B,IAAI,gBAAgB,QAAQ;AAAA,MAC1B,IAAI,OAAO,SAAS,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,SAAS,KAAK,EAAE,OAAO,OAAO,OAAO,OAAO,OAAO,MAAM,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IACA,UAAU,SAAS,IAAI,GAAG,OAAO,YAC/B,uBAAuB,OAAO,KAAK,CACrC;AAAA,EACF;AAAA;AAGF,eAAsB,qBAAqB,CACzC,QACA,MAC0C;AAAA,EAC1C,MAAM,SAAS,MAAM,gCAAgC,QAAQ,IAAI;AAAA,EACjE,IACE,OAAO,SAAS,SAAS,KACzB,OAAO,KAAK,OAAO,WAAW,EAAE,WAAW,GAC3C;AAAA,IACA,MAAM,eAAe,OAAO,SAAS;AAAA,IACrC,IAAI,cAAc,iBAAiB,OAAO;AAAA,MACxC,MAAM,aAAa;AAAA,IACrB;AAAA,IACA,MAAM,IAAI,MAAM,OAAO,SAAS,MAAM,mCAAmC;AAAA,EAC3E;AAAA,EAEA,OAAO,OAAO;AAAA;AAoBT,SAAS,uBAAuB,CACrC,QACA,aACM;AAAA,EACN,WAAW;AAAA,EAEX,MAAM,SAAU,OAAO,UAAU,CAAC;AAAA,EAGlC,MAAM,QAAQ,KAAM,OAAO,SAAS,CAAC,EAAG;AAAA,EACxC,IAAI,YAAY;AAAA,IAAK,MAAM,MAAM,YAAY;AAAA,EAC7C,IAAI,YAAY;AAAA,IAAQ,MAAM,SAAS,YAAY;AAAA,EACnD,OAAO,QAAQ;AAAA,EACf,OAAO,SAAS;AAAA;AAQX,SAAS,gCAAgC,GAAS;AAAA,EACvD,SAAS,MAAM;AAAA,EACf,OAAO,QAAQ,IAAI;AAAA;AAAA,IAzTR,qCACX,kCAEW,8BA0FP;AAAA;AAAA,EAhGN;AAAA,EAMa,+BAAN,MAAM,qCAAqC,MAAM;AAAA,IACtD,WAAW,GAAG;AAAA,MACZ,MAAM,kEAAkE;AAAA,MACxE,KAAK,OAAO;AAAA;AAAA,EAEhB;AAAA,EAqFM,WAAW,IAAI;AAAA;",
|
|
11
|
+
"debugId": "B0EB8E1A353E263464756E2164756E21",
|
|
12
|
+
"names": []
|
|
13
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
export declare class DuffelConfigError extends Error {
|
|
2
|
+
readonly code: "DUFFEL_NOT_CONFIGURED";
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
/** Direct mode hits api.duffel.com with the user's own DUFFEL_API_KEY.
|
|
6
|
+
* Cloud mode hits the local Eliza Cloud relay which performs the upstream
|
|
7
|
+
* Duffel call, applies creator markup, and meters against the user's
|
|
8
|
+
* Cloud credit balance. Cloud mode is the default. */
|
|
9
|
+
export type DuffelMode = "cloud" | "direct";
|
|
10
|
+
export interface DuffelConfig {
|
|
11
|
+
mode: DuffelMode;
|
|
12
|
+
/** Required when mode === "direct". */
|
|
13
|
+
apiKey: string | null;
|
|
14
|
+
/** Required when mode === "cloud". Local Eliza agent API base, e.g.
|
|
15
|
+
* http://127.0.0.1:31337. The relay path is appended internally. */
|
|
16
|
+
cloudRelayBaseUrl: string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function readDuffelConfigFromEnv(env?: NodeJS.ProcessEnv): DuffelConfig;
|
|
19
|
+
export interface SearchFlightsRequest {
|
|
20
|
+
/** IATA airport code for origin, e.g. "JFK". */
|
|
21
|
+
origin: string;
|
|
22
|
+
/** IATA airport code for destination, e.g. "LHR". */
|
|
23
|
+
destination: string;
|
|
24
|
+
/** ISO 8601 date string (YYYY-MM-DD). */
|
|
25
|
+
departureDate: string;
|
|
26
|
+
/**
|
|
27
|
+
* ISO 8601 date string for return leg.
|
|
28
|
+
* Omit or pass undefined for one-way search.
|
|
29
|
+
*/
|
|
30
|
+
returnDate?: string;
|
|
31
|
+
/** Number of adult passengers (default 1). */
|
|
32
|
+
passengers?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface DuffelSegment {
|
|
35
|
+
origin: string;
|
|
36
|
+
destination: string;
|
|
37
|
+
departingAt: string;
|
|
38
|
+
arrivingAt: string;
|
|
39
|
+
carrierIataCode: string;
|
|
40
|
+
flightNumber: string;
|
|
41
|
+
duration: string;
|
|
42
|
+
}
|
|
43
|
+
export interface DuffelSlice {
|
|
44
|
+
origin: string;
|
|
45
|
+
destination: string;
|
|
46
|
+
duration: string;
|
|
47
|
+
segments: DuffelSegment[];
|
|
48
|
+
}
|
|
49
|
+
export interface DuffelOfferPassenger {
|
|
50
|
+
id: string;
|
|
51
|
+
type: string;
|
|
52
|
+
givenName: string | null;
|
|
53
|
+
familyName: string | null;
|
|
54
|
+
}
|
|
55
|
+
export interface DuffelPaymentRequirements {
|
|
56
|
+
requiresInstantPayment: boolean;
|
|
57
|
+
priceGuaranteeExpiresAt: string | null;
|
|
58
|
+
paymentRequiredBy: string | null;
|
|
59
|
+
}
|
|
60
|
+
export interface DuffelOffer {
|
|
61
|
+
id: string;
|
|
62
|
+
totalAmount: string;
|
|
63
|
+
totalCurrency: string;
|
|
64
|
+
passengerCount: number;
|
|
65
|
+
slices: DuffelSlice[];
|
|
66
|
+
expiresAt: string | null;
|
|
67
|
+
/** Raw cabin class reported by Duffel for the first slice. */
|
|
68
|
+
cabinClass: string | null;
|
|
69
|
+
passengers: DuffelOfferPassenger[];
|
|
70
|
+
paymentRequirements: DuffelPaymentRequirements | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Cost envelope returned by the cloud relay. The breakdown is computed
|
|
74
|
+
* server-side (commandment 2 — no client-side math) and the local code
|
|
75
|
+
* forwards it to the UI for display. In direct mode all values are zero
|
|
76
|
+
* because no markup is charged.
|
|
77
|
+
*
|
|
78
|
+
* `markupPercent` is a *display-only* derived field: it equals
|
|
79
|
+
* `platformFeeUsd / totalUsd`, computed once at the boundary so UI
|
|
80
|
+
* components don't repeat the division. The pricing decision itself is
|
|
81
|
+
* still Cloud-side — this is the same pattern as a "discount %" badge
|
|
82
|
+
* derived from a server-supplied price.
|
|
83
|
+
*/
|
|
84
|
+
export interface DuffelCallCost {
|
|
85
|
+
/** Net cost charged to the user's Cloud credit balance, in USD. */
|
|
86
|
+
totalUsd: number;
|
|
87
|
+
/** Portion that flows to the creator as markup, in USD. */
|
|
88
|
+
creatorMarkupUsd: number;
|
|
89
|
+
/** Eliza Cloud platform fee portion, in USD. */
|
|
90
|
+
platformFeeUsd: number;
|
|
91
|
+
/** Display-only ratio of platform fee to total (e.g. 0.2 for 20%).
|
|
92
|
+
* Derived from server values, never used for pricing. Null when
|
|
93
|
+
* totalUsd is zero (direct mode or free call). */
|
|
94
|
+
markupPercent: number | null;
|
|
95
|
+
/** Whether the call was metered (true in cloud mode, false in direct mode). */
|
|
96
|
+
metered: boolean;
|
|
97
|
+
}
|
|
98
|
+
export interface SearchFlightsResult {
|
|
99
|
+
offerRequestId: string;
|
|
100
|
+
offers: DuffelOffer[];
|
|
101
|
+
cost: DuffelCallCost;
|
|
102
|
+
}
|
|
103
|
+
export interface DuffelOrderPassenger {
|
|
104
|
+
id: string;
|
|
105
|
+
givenName: string | null;
|
|
106
|
+
familyName: string | null;
|
|
107
|
+
}
|
|
108
|
+
export interface DuffelOrderPaymentStatus {
|
|
109
|
+
awaitingPayment: boolean;
|
|
110
|
+
paymentRequiredBy: string | null;
|
|
111
|
+
priceGuaranteeExpiresAt: string | null;
|
|
112
|
+
}
|
|
113
|
+
export interface DuffelOrderDocument {
|
|
114
|
+
type: string | null;
|
|
115
|
+
uniqueIdentifier: string | null;
|
|
116
|
+
}
|
|
117
|
+
export interface DuffelOrder {
|
|
118
|
+
id: string;
|
|
119
|
+
bookingReference: string | null;
|
|
120
|
+
totalAmount: string;
|
|
121
|
+
totalCurrency: string;
|
|
122
|
+
slices: DuffelSlice[];
|
|
123
|
+
passengers: DuffelOrderPassenger[];
|
|
124
|
+
paymentStatus: DuffelOrderPaymentStatus | null;
|
|
125
|
+
documents: DuffelOrderDocument[];
|
|
126
|
+
}
|
|
127
|
+
export interface DuffelPayment {
|
|
128
|
+
id: string;
|
|
129
|
+
orderId: string;
|
|
130
|
+
status: string;
|
|
131
|
+
currency: string;
|
|
132
|
+
amount: string;
|
|
133
|
+
type: string;
|
|
134
|
+
failureReason: string | null;
|
|
135
|
+
createdAt: string | null;
|
|
136
|
+
}
|
|
137
|
+
export interface DuffelOrderPassengerInput {
|
|
138
|
+
id: string;
|
|
139
|
+
title?: string;
|
|
140
|
+
gender?: string;
|
|
141
|
+
givenName: string;
|
|
142
|
+
familyName: string;
|
|
143
|
+
bornOn: string;
|
|
144
|
+
email?: string;
|
|
145
|
+
phoneNumber?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface CreateDuffelOrderRequest {
|
|
148
|
+
selectedOffers: ReadonlyArray<string>;
|
|
149
|
+
passengers: ReadonlyArray<DuffelOrderPassengerInput>;
|
|
150
|
+
type: "hold" | "instant";
|
|
151
|
+
payment?: {
|
|
152
|
+
type: "balance";
|
|
153
|
+
amount: string;
|
|
154
|
+
currency: string;
|
|
155
|
+
};
|
|
156
|
+
metadata?: Readonly<Record<string, string>>;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Search for available flight offers via the Duffel Offer Requests API.
|
|
160
|
+
*
|
|
161
|
+
* Throws `DuffelConfigError` when DUFFEL_API_KEY is absent.
|
|
162
|
+
* One-way search when `returnDate` is omitted; return search when provided.
|
|
163
|
+
*
|
|
164
|
+
*/
|
|
165
|
+
export declare function searchFlights(request: SearchFlightsRequest, config?: DuffelConfig): Promise<SearchFlightsResult>;
|
|
166
|
+
/**
|
|
167
|
+
* Retrieve a single flight offer by ID.
|
|
168
|
+
*
|
|
169
|
+
* Use after `searchFlights` to get live pricing and full details for a
|
|
170
|
+
* specific offer before presenting it to the user for approval.
|
|
171
|
+
*
|
|
172
|
+
*/
|
|
173
|
+
export declare function getOffer(id: string, config?: DuffelConfig): Promise<DuffelOffer>;
|
|
174
|
+
export declare function createOrder(request: CreateDuffelOrderRequest, config?: DuffelConfig): Promise<DuffelOrder>;
|
|
175
|
+
export declare function getOrder(orderId: string, config?: DuffelConfig): Promise<DuffelOrder>;
|
|
176
|
+
export declare function createPayment(args: {
|
|
177
|
+
orderId: string;
|
|
178
|
+
amount: string;
|
|
179
|
+
currency: string;
|
|
180
|
+
}, config?: DuffelConfig): Promise<DuffelPayment>;
|
|
181
|
+
//# sourceMappingURL=duffel-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duffel-client.d.ts","sourceRoot":"","sources":["../../src/cloud/duffel-client.ts"],"names":[],"mappings":"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"}
|