@elizaos/plugin-elizacloud 2.0.0-beta.1 → 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/README.md +20 -44
- package/auto-enable.ts +10 -5
- package/dist/browser/index.browser.js +2 -2
- package/dist/browser/index.browser.js.map +4 -4
- package/dist/cjs/index.node.cjs +2874 -5915
- package/dist/cjs/index.node.js.map +47 -116
- 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.js +4 -51
- package/dist/cloud/auth.js.map +4 -4
- package/dist/cloud/base-url.d.ts +6 -2
- package/dist/cloud/base-url.d.ts.map +1 -1
- package/dist/cloud/base-url.js +3 -51
- package/dist/cloud/base-url.js.map +3 -3
- package/dist/cloud/bridge-client.d.ts +3 -3
- package/dist/cloud/bridge-client.d.ts.map +1 -1
- package/dist/cloud/bridge-client.js +3 -51
- package/dist/cloud/bridge-client.js.map +3 -3
- 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-manager.js +45 -92
- package/dist/cloud/cloud-manager.js.map +6 -6
- package/dist/cloud/cloud-wallet.js +2 -4835
- package/dist/cloud/cloud-wallet.js.map +3 -82
- 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 +6 -0
- package/dist/cloud/index.d.ts.map +1 -1
- package/dist/cloud/index.js +1782 -1
- package/dist/cloud/index.js.map +18 -3
- 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/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.map +1 -1
- package/dist/cloud/validate-url.js +2 -1
- package/dist/cloud/validate-url.js.map +3 -3
- 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-setup.d.ts +36 -0
- package/dist/cloud-setup.d.ts.map +1 -0
- package/dist/{onboarding.js → cloud-setup.js} +139 -139
- 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 +11 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5416 -8405
- package/dist/index.js.map +48 -116
- package/dist/index.node.d.ts +8 -1
- package/dist/index.node.d.ts.map +1 -1
- package/dist/init.js +17 -4
- package/dist/init.js.map +4 -4
- package/dist/lib/cloud-connection.d.ts +0 -1
- package/dist/lib/cloud-connection.d.ts.map +1 -1
- package/dist/lib/cloud-connection.js +14 -91
- package/dist/lib/cloud-connection.js.map +7 -7
- package/dist/lib/cloud-secrets.d.ts +5 -18
- package/dist/lib/cloud-secrets.d.ts.map +1 -1
- package/dist/lib/cloud-secrets.js +8 -36
- package/dist/lib/cloud-secrets.js.map +3 -3
- package/dist/lib/config-like.d.ts +1 -1
- package/dist/lib/config-like.d.ts.map +1 -1
- package/dist/lib/config-like.js +3 -3
- package/dist/lib/config-like.js.map +3 -3
- package/dist/lib/credential-type-map.d.ts +1 -1
- package/dist/lib/credential-type-map.js.map +1 -1
- package/dist/lib/http.d.ts +0 -11
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js.map +2 -2
- package/dist/lib/server-cloud-tts.d.ts +12 -25
- package/dist/lib/server-cloud-tts.d.ts.map +1 -1
- package/dist/lib/server-cloud-tts.js +31 -329
- package/dist/lib/server-cloud-tts.js.map +4 -7
- package/dist/lib/tts-debug.d.ts +5 -3
- package/dist/lib/tts-debug.d.ts.map +1 -1
- package/dist/lib/tts-debug.js +1 -34
- package/dist/lib/tts-debug.js.map +3 -4
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/embeddings.js +79 -69
- package/dist/models/embeddings.js.map +6 -6
- package/dist/models/image.d.ts.map +1 -1
- package/dist/models/image.js +42 -15
- package/dist/models/image.js.map +6 -6
- package/dist/models/index.js +676 -166
- package/dist/models/index.js.map +11 -12
- package/dist/models/research.d.ts.map +1 -1
- package/dist/models/research.js +24 -7
- package/dist/models/research.js.map +6 -6
- package/dist/models/speech.d.ts +61 -3
- package/dist/models/speech.d.ts.map +1 -1
- package/dist/models/speech.js +173 -17
- package/dist/models/speech.js.map +5 -5
- package/dist/models/text.d.ts +106 -1
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/text.js +452 -82
- package/dist/models/text.js.map +7 -8
- package/dist/models/tokenization.d.ts.map +1 -1
- package/dist/models/tokenization.js.map +2 -2
- package/dist/models/transcription.d.ts.map +1 -1
- package/dist/models/transcription.js +20 -6
- package/dist/models/transcription.js.map +5 -5
- package/dist/node/index.node.js +2828 -5838
- package/dist/node/index.node.js.map +47 -116
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +376 -5050
- package/dist/plugin.js.map +16 -92
- package/dist/providers/openai.js +11 -2
- package/dist/providers/openai.js.map +3 -3
- package/dist/register-routes.js +376 -5050
- package/dist/register-routes.js.map +16 -92
- package/dist/routes/cloud-billing-routes.d.ts.map +1 -1
- package/dist/routes/cloud-billing-routes.js +17 -60
- package/dist/routes/cloud-billing-routes.js.map +8 -7
- 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.map +1 -1
- package/dist/routes/cloud-compat-routes.js +17 -60
- package/dist/routes/cloud-compat-routes.js.map +8 -7
- package/dist/routes/cloud-features-routes.js +2 -2
- package/dist/routes/cloud-features-routes.js.map +4 -4
- package/dist/routes/cloud-relay-routes.d.ts +2 -1
- package/dist/routes/cloud-relay-routes.d.ts.map +1 -1
- package/dist/routes/cloud-relay-routes.js +84 -2
- package/dist/routes/cloud-relay-routes.js.map +5 -4
- package/dist/routes/cloud-routes-autonomous.d.ts +3 -4
- package/dist/routes/cloud-routes-autonomous.d.ts.map +1 -1
- package/dist/routes/cloud-routes-autonomous.js +11 -4893
- package/dist/routes/cloud-routes-autonomous.js.map +8 -87
- package/dist/routes/cloud-routes.d.ts +2 -2
- package/dist/routes/cloud-routes.d.ts.map +1 -1
- package/dist/routes/cloud-routes.js +343 -5058
- package/dist/routes/cloud-routes.js.map +13 -90
- package/dist/routes/cloud-status-routes-autonomous.d.ts +1 -2
- package/dist/routes/cloud-status-routes-autonomous.d.ts.map +1 -1
- package/dist/routes/cloud-status-routes-autonomous.js +4 -51
- package/dist/routes/cloud-status-routes-autonomous.js.map +5 -5
- package/dist/routes/cloud-status-routes.js +14 -90
- package/dist/routes/cloud-status-routes.js.map +7 -7
- 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 +1 -1
- package/dist/services/cloud-auth.d.ts.map +1 -1
- package/dist/services/cloud-auth.js +7 -2
- package/dist/services/cloud-auth.js.map +4 -4
- package/dist/services/cloud-backup.js.map +2 -2
- package/dist/services/cloud-bootstrap.d.ts.map +1 -1
- package/dist/services/cloud-bootstrap.js.map +2 -2
- package/dist/services/cloud-bridge.js.map +3 -3
- 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 +52 -1
- package/dist/services/cloud-container.js.map +4 -4
- package/dist/services/cloud-credential-provider.js.map +2 -2
- package/dist/services/cloud-model-registry.js.map +2 -2
- package/dist/types/cloud.d.ts +1 -0
- package/dist/types/cloud.d.ts.map +1 -1
- package/dist/types/cloud.js.map +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cloud-sdk/client.d.ts.map +1 -1
- package/dist/utils/cloud-sdk/client.js +136 -4
- package/dist/utils/cloud-sdk/client.js.map +5 -5
- package/dist/utils/cloud-sdk/http.js.map +1 -1
- package/dist/utils/cloud-sdk/public-routes.d.ts +186 -0
- package/dist/utils/cloud-sdk/public-routes.d.ts.map +1 -1
- package/dist/utils/cloud-sdk/public-routes.js +99 -1
- package/dist/utils/cloud-sdk/public-routes.js.map +3 -3
- package/dist/utils/cloud-sdk/types.d.ts +0 -2
- package/dist/utils/cloud-sdk/types.d.ts.map +1 -1
- package/dist/utils/cloud-sdk/types.js.map +1 -1
- package/dist/utils/config.d.ts +10 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -2
- package/dist/utils/config.js.map +3 -3
- package/dist/utils/events.d.ts +23 -2
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/events.js +5 -3
- package/dist/utils/events.js.map +3 -3
- package/dist/utils/sdk-client.d.ts.map +1 -1
- package/dist/utils/sdk-client.js +17 -4
- package/dist/utils/sdk-client.js.map +4 -4
- 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 +51 -22
- package/src/cloud/auth-service-types.ts +24 -0
- package/src/cloud/base-url.ts +6 -62
- package/src/cloud/clack-observer.ts +189 -0
- package/src/cloud/duffel-client.ts +847 -0
- package/src/cloud/index.ts +10 -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/setup-observer.ts +125 -0
- package/src/cloud/validate-url.ts +7 -1
- package/src/cloud/x402-payment-handler.ts +215 -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 +29 -0
- package/src/index.node.ts +31 -1
- package/src/index.ts +76 -4
- package/src/lib/cloud-connection.ts +2 -4
- package/src/lib/cloud-secrets.ts +10 -54
- package/src/lib/config-like.ts +1 -1
- package/src/lib/credential-type-map.ts +2 -2
- package/src/lib/http.ts +0 -17
- package/src/lib/server-cloud-tts.ts +33 -341
- package/src/lib/tts-debug.ts +5 -34
- package/src/models/embeddings.ts +140 -76
- package/src/models/image.ts +29 -14
- package/src/models/research.ts +11 -1
- package/src/models/speech.ts +269 -23
- package/src/models/text.ts +704 -110
- package/src/models/tokenization.ts +2 -2
- package/src/models/transcription.ts +7 -3
- package/src/plugin.ts +38 -0
- package/src/routes/cloud-billing-routes.ts +4 -14
- package/src/routes/cloud-coding-container-routes.ts +198 -0
- package/src/routes/cloud-compat-routes.ts +4 -14
- package/src/routes/cloud-features-routes.ts +1 -1
- package/src/routes/cloud-relay-routes.ts +47 -1
- package/src/routes/cloud-routes-autonomous.ts +7 -10
- package/src/routes/cloud-routes.ts +68 -7
- package/src/routes/cloud-status-routes-autonomous.ts +6 -2
- 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 +9 -2
- package/src/services/cloud-bootstrap.ts +1 -3
- package/src/services/cloud-bridge.ts +1 -1
- package/src/services/cloud-container.ts +93 -0
- package/src/services/cloud-credential-provider.ts +1 -1
- package/src/services/cloud-model-registry.ts +1 -1
- package/src/types/cloud.ts +22 -0
- package/src/types/index.ts +19 -0
- package/src/utils/cloud-sdk/client.ts +42 -3
- package/src/utils/cloud-sdk/public-routes.ts +168 -0
- package/src/utils/cloud-sdk/types.ts +0 -2
- package/src/utils/config.ts +20 -1
- package/src/utils/events.ts +30 -2
- package/src/utils/sdk-client.ts +5 -1
- package/src/utils/waifu-metering.ts +302 -0
- package/dist/onboarding.d.ts +0 -35
- package/dist/onboarding.d.ts.map +0 -1
- package/dist/onboarding.js.map +0 -14
- package/src/onboarding.ts +0 -396
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cloud/x402-payment-handler.ts", "../src/cloud/duffel-client.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * x402 (HTTP 402 Payment Required) handler for Eliza Cloud relays.\n *\n * Spec reference: https://www.x402.org\n *\n * When the user's Cloud credit balance can't cover a metered call, the\n * Cloud relay returns HTTP 402 with a `payment-requirements` envelope —\n * either as a `WWW-Authenticate: x402 <json>` header or as a JSON body\n * with a top-level `paymentRequirements` array. Each requirement\n * describes one acceptable payment option (asset, network, recipient,\n * amount).\n *\n * This module is intentionally thin:\n * - `parseX402Response` extracts requirements from a Response.\n * - `PaymentRequiredError` carries them up to the action layer.\n * - `requestPayment` is the agent-side bridge: today it surfaces the\n * requirement back to the owner via the runtime logger so the UI /\n * planner can route the user to the existing wallet top-up flow.\n * Auto-pay intentionally lives outside this bridge — the actual money\n * movement is Cloud-side and gated by the wallet UI (commandment 4).\n *\n * No silent failures: a malformed 402 throws so the action layer can\n * surface a clear \"payment-required\" message rather than treating the\n * upstream as a generic HTTP error.\n */\n\nimport { type IAgentRuntime, logger } from \"@elizaos/core\";\n\n/**\n * One acceptable payment option as advertised by the server.\n *\n * Fields mirror the x402 spec's `paymentRequirements` entry. We type\n * everything as required so silent partial parses are impossible — the\n * parser either yields a complete requirement or rejects it.\n */\nexport interface X402PaymentRequirement {\n /** Decimal amount in the asset's smallest unit (e.g. \"1500000\" for\n * 1.50 USDC). String, not number, to preserve precision. */\n readonly amount: string;\n /** Asset symbol or ERC-20 contract address (e.g. \"USDC\"). */\n readonly asset: string;\n /** Network identifier (e.g. \"base\", \"ethereum\", \"solana\"). */\n readonly network: string;\n /** Recipient address that should receive the payment. */\n readonly payTo: string;\n /** Payment scheme — currently x402 supports \"exact\" only. */\n readonly scheme: string;\n /** ISO-8601 deadline after which the requirement is no longer valid. */\n readonly expiresAt: string | null;\n /** Human-readable description of the resource being purchased. */\n readonly description: string | null;\n}\n\n/**\n * Wire shape we accept from JSON bodies. Loose at the boundary, strict\n * after parsing.\n */\ninterface RawRequirement {\n readonly amount?: unknown;\n readonly asset?: unknown;\n readonly network?: unknown;\n readonly payTo?: unknown;\n readonly scheme?: unknown;\n readonly expiresAt?: unknown;\n readonly description?: unknown;\n}\n\ninterface RawX402Body {\n readonly paymentRequirements?: ReadonlyArray<RawRequirement>;\n readonly accepts?: ReadonlyArray<RawRequirement>;\n}\n\nfunction readString(value: unknown): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction readAmount(value: unknown): string | null {\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction normalizeRequirement(\n raw: RawRequirement | null | undefined,\n): X402PaymentRequirement | null {\n if (!raw || typeof raw !== \"object\") return null;\n const amount = readAmount(raw.amount);\n const asset = readString(raw.asset);\n const network = readString(raw.network);\n const payTo = readString(raw.payTo);\n if (!amount || !asset || !network || !payTo) return null;\n const scheme = readString(raw.scheme) ?? \"exact\";\n return {\n amount,\n asset,\n network,\n payTo,\n scheme,\n expiresAt: readString(raw.expiresAt),\n description: readString(raw.description),\n };\n}\n\nfunction parseRequirementsArray(\n raw: ReadonlyArray<RawRequirement> | undefined,\n): X402PaymentRequirement[] {\n if (!Array.isArray(raw)) return [];\n const out: X402PaymentRequirement[] = [];\n for (const entry of raw) {\n const normalized = normalizeRequirement(entry);\n if (normalized) out.push(normalized);\n }\n return out;\n}\n\n/**\n * Pull payment requirements out of an x402 response. Tries the header\n * form first (lowest-overhead per spec), then falls back to the JSON\n * body. Returns `null` when the response carries no parseable\n * requirements — callers should treat that as a generic 402 and\n * surface the upstream status text.\n */\nexport async function parseX402Response(\n response: Response,\n): Promise<X402PaymentRequirement[] | null> {\n const headerValue = response.headers.get(\"www-authenticate\");\n if (headerValue?.toLowerCase().startsWith(\"x402\")) {\n const jsonPart = headerValue.slice(4).trim();\n if (jsonPart.length > 0) {\n const parsed = JSON.parse(jsonPart) as RawX402Body | RawRequirement[];\n const requirements = Array.isArray(parsed)\n ? parseRequirementsArray(parsed)\n : parseRequirementsArray(parsed.paymentRequirements ?? parsed.accepts);\n if (requirements.length > 0) return requirements;\n }\n }\n // Fall back to body parse. Clone so the caller can still read it.\n const cloned = response.clone();\n const text = await cloned.text();\n if (text.length === 0) return null;\n const body = JSON.parse(text) as RawX402Body;\n const requirements = parseRequirementsArray(\n body.paymentRequirements ?? body.accepts,\n );\n return requirements.length > 0 ? requirements : null;\n}\n\n/**\n * Thrown by adapters when an upstream metered call returns 402 with\n * actionable payment requirements. Action handlers convert this into an\n * approval-queue entry so the user sees both the cost and the\n * top-up prompt together.\n */\nexport class PaymentRequiredError extends Error {\n readonly code = \"PAYMENT_REQUIRED\" as const;\n readonly requirements: ReadonlyArray<X402PaymentRequirement>;\n\n constructor(\n requirements: ReadonlyArray<X402PaymentRequirement>,\n message?: string,\n ) {\n const text =\n message ??\n `Eliza Cloud returned HTTP 402 — your credit balance can't cover this call. ${requirements.length} payment option(s) available.`;\n super(text);\n this.name = \"PaymentRequiredError\";\n this.requirements = requirements;\n }\n}\n\nexport interface PaymentReceipt {\n readonly status: \"surfaced\" | \"paid\";\n readonly requirement: X402PaymentRequirement;\n /** Transaction id when status === \"paid\", null when only surfaced. */\n readonly txId: string | null;\n}\n\n/**\n * Bridge from a raw payment requirement to user action. For now this\n * does not auto-pay: the actual money movement happens in the existing\n * wallet UI (Cloud-side). We log the requirement so the agent's\n * messaging surface and the desktop dev console both pick it up, then\n * return a \"surfaced\" receipt for the action layer to forward into the\n * approval queue.\n */\nexport async function requestPayment(\n runtime: IAgentRuntime,\n requirements: ReadonlyArray<X402PaymentRequirement>,\n): Promise<PaymentReceipt> {\n if (requirements.length === 0) {\n throw new Error(\n \"[x402] requestPayment called with no requirements — adapter bug\",\n );\n }\n const preferred = requirements[0];\n logger.warn(\n {\n boundary: \"elizacloud\",\n integration: \"x402\",\n asset: preferred.asset,\n network: preferred.network,\n amount: preferred.amount,\n runtimeId: runtime.agentId,\n },\n `[x402] payment-required: ${preferred.amount} ${preferred.asset} on ${preferred.network} → ${preferred.payTo}${preferred.description ? ` (${preferred.description})` : \"\"}`,\n );\n return { status: \"surfaced\", requirement: preferred, txId: null };\n}\n",
|
|
6
|
+
"import { logger } from \"@elizaos/core\";\nimport {\n PaymentRequiredError,\n parseX402Response,\n} from \"./x402-payment-handler.js\";\n\n// ---------------------------------------------------------------------------\n// Config\n// ---------------------------------------------------------------------------\n\nexport class DuffelConfigError extends Error {\n readonly code = \"DUFFEL_NOT_CONFIGURED\" as const;\n constructor(message: string) {\n super(message);\n this.name = \"DuffelConfigError\";\n }\n}\n\n/** Direct mode hits api.duffel.com with the user's own DUFFEL_API_KEY.\n * Cloud mode hits the local Eliza Cloud relay which performs the upstream\n * Duffel call, applies creator markup, and meters against the user's\n * Cloud credit balance. Cloud mode is the default. */\nexport type DuffelMode = \"cloud\" | \"direct\";\n\nexport interface DuffelConfig {\n mode: DuffelMode;\n /** Required when mode === \"direct\". */\n apiKey: string | null;\n /** Required when mode === \"cloud\". Local Eliza agent API base, e.g.\n * http://127.0.0.1:31337. The relay path is appended internally. */\n cloudRelayBaseUrl: string | null;\n}\n\nconst DUFFEL_API_BASE_DEFAULT = \"https://api.duffel.com\";\nconst DUFFEL_API_VERSION = \"v2\";\nconst DEFAULT_CLOUD_RELAY_BASE = \"http://127.0.0.1:31337\";\n\ninterface DuffelTelemetrySpan {\n success(meta?: Record<string, unknown>): void;\n failure(meta?: Record<string, unknown>): void;\n}\n\nconst NOOP_DUFFEL_SPAN: DuffelTelemetrySpan = {\n success() {},\n failure() {},\n};\n\n/** Honour the mockoon redirect (or any explicit `LIFEOPS_DUFFEL_API_BASE`\n * override) so direct-mode tests can swap Duffel for a local mock. */\nfunction getDuffelApiBase(): string {\n return process.env.LIFEOPS_DUFFEL_API_BASE?.trim() || DUFFEL_API_BASE_DEFAULT;\n}\n\nfunction resolveDirectFlag(env: NodeJS.ProcessEnv): boolean {\n const value = env.ELIZA_DUFFEL_DIRECT?.trim().toLowerCase();\n return value === \"1\" || value === \"true\";\n}\n\nfunction resolveLocalApiBase(env: NodeJS.ProcessEnv): string {\n const port = env.ELIZA_API_PORT?.trim();\n if (port && /^\\d+$/.test(port)) {\n return `http://127.0.0.1:${port}`;\n }\n return DEFAULT_CLOUD_RELAY_BASE;\n}\n\nexport function readDuffelConfigFromEnv(\n env: NodeJS.ProcessEnv = process.env,\n): DuffelConfig {\n if (resolveDirectFlag(env)) {\n const apiKey = env.DUFFEL_API_KEY?.trim();\n if (!apiKey) {\n throw new DuffelConfigError(\n \"Duffel direct mode requested but DUFFEL_API_KEY is not set.\",\n );\n }\n return { mode: \"direct\", apiKey, cloudRelayBaseUrl: null };\n }\n\n return {\n mode: \"cloud\",\n apiKey: null,\n cloudRelayBaseUrl: resolveLocalApiBase(env),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Input types\n// ---------------------------------------------------------------------------\n\nexport interface SearchFlightsRequest {\n /** IATA airport code for origin, e.g. \"JFK\". */\n origin: string;\n /** IATA airport code for destination, e.g. \"LHR\". */\n destination: string;\n /** ISO 8601 date string (YYYY-MM-DD). */\n departureDate: string;\n /**\n * ISO 8601 date string for return leg.\n * Omit or pass undefined for one-way search.\n */\n returnDate?: string;\n /** Number of adult passengers (default 1). */\n passengers?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Response types\n// ---------------------------------------------------------------------------\n\nexport interface DuffelSegment {\n origin: string;\n destination: string;\n departingAt: string;\n arrivingAt: string;\n carrierIataCode: string;\n flightNumber: string;\n duration: string;\n}\n\nexport interface DuffelSlice {\n origin: string;\n destination: string;\n duration: string;\n segments: DuffelSegment[];\n}\n\nexport interface DuffelOfferPassenger {\n id: string;\n type: string;\n givenName: string | null;\n familyName: string | null;\n}\n\nexport interface DuffelPaymentRequirements {\n requiresInstantPayment: boolean;\n priceGuaranteeExpiresAt: string | null;\n paymentRequiredBy: string | null;\n}\n\nexport interface DuffelOffer {\n id: string;\n totalAmount: string;\n totalCurrency: string;\n passengerCount: number;\n slices: DuffelSlice[];\n expiresAt: string | null;\n /** Raw cabin class reported by Duffel for the first slice. */\n cabinClass: string | null;\n passengers: DuffelOfferPassenger[];\n paymentRequirements: DuffelPaymentRequirements | null;\n}\n\n/**\n * Cost envelope returned by the cloud relay. The breakdown is computed\n * server-side (commandment 2 — no client-side math) and the local code\n * forwards it to the UI for display. In direct mode all values are zero\n * because no markup is charged.\n *\n * `markupPercent` is a *display-only* derived field: it equals\n * `platformFeeUsd / totalUsd`, computed once at the boundary so UI\n * components don't repeat the division. The pricing decision itself is\n * still Cloud-side — this is the same pattern as a \"discount %\" badge\n * derived from a server-supplied price.\n */\nexport interface DuffelCallCost {\n /** Net cost charged to the user's Cloud credit balance, in USD. */\n totalUsd: number;\n /** Portion that flows to the creator as markup, in USD. */\n creatorMarkupUsd: number;\n /** Eliza Cloud platform fee portion, in USD. */\n platformFeeUsd: number;\n /** Display-only ratio of platform fee to total (e.g. 0.2 for 20%).\n * Derived from server values, never used for pricing. Null when\n * totalUsd is zero (direct mode or free call). */\n markupPercent: number | null;\n /** Whether the call was metered (true in cloud mode, false in direct mode). */\n metered: boolean;\n}\n\nconst DIRECT_MODE_COST: DuffelCallCost = {\n totalUsd: 0,\n creatorMarkupUsd: 0,\n platformFeeUsd: 0,\n markupPercent: null,\n metered: false,\n};\n\nexport interface SearchFlightsResult {\n offerRequestId: string;\n offers: DuffelOffer[];\n cost: DuffelCallCost;\n}\n\nexport interface DuffelOrderPassenger {\n id: string;\n givenName: string | null;\n familyName: string | null;\n}\n\nexport interface DuffelOrderPaymentStatus {\n awaitingPayment: boolean;\n paymentRequiredBy: string | null;\n priceGuaranteeExpiresAt: string | null;\n}\n\nexport interface DuffelOrderDocument {\n type: string | null;\n uniqueIdentifier: string | null;\n}\n\nexport interface DuffelOrder {\n id: string;\n bookingReference: string | null;\n totalAmount: string;\n totalCurrency: string;\n slices: DuffelSlice[];\n passengers: DuffelOrderPassenger[];\n paymentStatus: DuffelOrderPaymentStatus | null;\n documents: DuffelOrderDocument[];\n}\n\nexport interface DuffelPayment {\n id: string;\n orderId: string;\n status: string;\n currency: string;\n amount: string;\n type: string;\n failureReason: string | null;\n createdAt: string | null;\n}\n\nexport interface DuffelOrderPassengerInput {\n id: string;\n title?: string;\n gender?: string;\n givenName: string;\n familyName: string;\n bornOn: string;\n email?: string;\n phoneNumber?: string;\n}\n\nexport interface CreateDuffelOrderRequest {\n selectedOffers: ReadonlyArray<string>;\n passengers: ReadonlyArray<DuffelOrderPassengerInput>;\n type: \"hold\" | \"instant\";\n payment?: {\n type: \"balance\";\n amount: string;\n currency: string;\n };\n metadata?: Readonly<Record<string, string>>;\n}\n\n// ---------------------------------------------------------------------------\n// Internal Duffel API response shapes (minimal — only fields we use)\n// ---------------------------------------------------------------------------\n\ninterface DuffelApiOffer {\n id: string;\n total_amount: string;\n total_currency: string;\n expires_at: string | null;\n slices: Array<{\n origin: { iata_code: string };\n destination: { iata_code: string };\n duration: string;\n segments: Array<{\n origin: { iata_code: string };\n destination: { iata_code: string };\n departing_at: string;\n arriving_at: string;\n operating_carrier: { iata_code: string };\n flight_number: string | null;\n duration: string;\n }>;\n fare_brand_name: string | null;\n }>;\n passengers: Array<{\n id?: string;\n type?: string;\n given_name?: string | null;\n family_name?: string | null;\n }>;\n payment_requirements?: {\n requires_instant_payment?: boolean;\n price_guarantee_expires_at?: string | null;\n payment_required_by?: string | null;\n };\n}\n\ninterface DuffelOfferRequestResponse {\n data: {\n id: string;\n offers: DuffelApiOffer[];\n };\n}\n\ninterface DuffelOfferResponse {\n data: DuffelApiOffer;\n}\n\ninterface DuffelApiOrder {\n id: string;\n booking_reference?: string | null;\n total_amount: string;\n total_currency: string;\n slices: DuffelApiOffer[\"slices\"];\n passengers: Array<{\n id?: string;\n given_name?: string | null;\n family_name?: string | null;\n }>;\n payment_status?: {\n awaiting_payment?: boolean;\n payment_required_by?: string | null;\n price_guarantee_expires_at?: string | null;\n };\n documents?: Array<{\n type?: string | null;\n unique_identifier?: string | null;\n }>;\n}\n\ninterface DuffelOrderResponse {\n data: DuffelApiOrder;\n}\n\ninterface DuffelPaymentResponse {\n data: {\n id: string;\n order_id: string;\n status: string;\n currency: string;\n amount: string;\n type: string;\n failure_reason?: string | null;\n created_at?: string | null;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction buildHeaders(apiKey: string): Record<string, string> {\n return {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n \"Duffel-Version\": DUFFEL_API_VERSION,\n Accept: \"application/json\",\n };\n}\n\nfunction mapOffer(raw: DuffelApiOffer): DuffelOffer {\n const cabinClass = raw.slices[0]?.fare_brand_name ?? null;\n\n const slices: DuffelSlice[] = raw.slices.map((slice) => ({\n origin: slice.origin.iata_code,\n destination: slice.destination.iata_code,\n duration: slice.duration,\n segments: slice.segments.map((seg) => ({\n origin: seg.origin.iata_code,\n destination: seg.destination.iata_code,\n departingAt: seg.departing_at,\n arrivingAt: seg.arriving_at,\n carrierIataCode: seg.operating_carrier.iata_code,\n flightNumber: seg.flight_number ?? \"\",\n duration: seg.duration,\n })),\n }));\n const passengers: DuffelOfferPassenger[] = raw.passengers.map(\n (passenger, index) => ({\n id: passenger.id?.trim() || `passenger_${index}`,\n type: passenger.type?.trim() || \"adult\",\n givenName: passenger.given_name?.trim() || null,\n familyName: passenger.family_name?.trim() || null,\n }),\n );\n const paymentRequirements = raw.payment_requirements\n ? {\n requiresInstantPayment:\n raw.payment_requirements.requires_instant_payment !== false,\n priceGuaranteeExpiresAt:\n raw.payment_requirements.price_guarantee_expires_at ?? null,\n paymentRequiredBy: raw.payment_requirements.payment_required_by ?? null,\n }\n : null;\n\n return {\n id: raw.id,\n totalAmount: raw.total_amount,\n totalCurrency: raw.total_currency,\n passengerCount: passengers.length > 0 ? passengers.length : 1,\n slices,\n expiresAt: raw.expires_at,\n cabinClass,\n passengers,\n paymentRequirements,\n };\n}\n\nfunction mapOrder(raw: DuffelApiOrder): DuffelOrder {\n return {\n id: raw.id,\n bookingReference: raw.booking_reference ?? null,\n totalAmount: raw.total_amount,\n totalCurrency: raw.total_currency,\n slices: raw.slices.map((slice) => ({\n origin: slice.origin.iata_code,\n destination: slice.destination.iata_code,\n duration: slice.duration,\n segments: slice.segments.map((segment) => ({\n origin: segment.origin.iata_code,\n destination: segment.destination.iata_code,\n departingAt: segment.departing_at,\n arrivingAt: segment.arriving_at,\n carrierIataCode: segment.operating_carrier.iata_code,\n flightNumber: segment.flight_number ?? \"\",\n duration: segment.duration,\n })),\n })),\n passengers: raw.passengers.map((passenger, index) => ({\n id: passenger.id?.trim() || `passenger_${index}`,\n givenName: passenger.given_name?.trim() || null,\n familyName: passenger.family_name?.trim() || null,\n })),\n paymentStatus: raw.payment_status\n ? {\n awaitingPayment: raw.payment_status.awaiting_payment === true,\n paymentRequiredBy: raw.payment_status.payment_required_by ?? null,\n priceGuaranteeExpiresAt:\n raw.payment_status.price_guarantee_expires_at ?? null,\n }\n : null,\n documents: (raw.documents ?? []).map((document) => ({\n type: document.type ?? null,\n uniqueIdentifier: document.unique_identifier ?? null,\n })),\n };\n}\n\nfunction mapPayment(raw: DuffelPaymentResponse[\"data\"]): DuffelPayment {\n return {\n id: raw.id,\n orderId: raw.order_id,\n status: raw.status,\n currency: raw.currency,\n amount: raw.amount,\n type: raw.type,\n failureReason: raw.failure_reason ?? null,\n createdAt: raw.created_at ?? null,\n };\n}\n\n/**\n * Cost meta envelope returned by the Eliza Cloud relay alongside the\n * Duffel payload. Defined server-side; the client trusts whatever Cloud\n * returns and never recomputes (commandment 2).\n */\ninterface RelayCostMeta {\n total_usd?: number;\n creator_markup_usd?: number;\n platform_fee_usd?: number;\n}\n\ninterface RelayMeta {\n cost?: RelayCostMeta;\n}\n\ninterface RelayEnvelope {\n _meta?: RelayMeta;\n}\n\nfunction readRelayCost(envelope: unknown): DuffelCallCost {\n if (\n envelope === null ||\n typeof envelope !== \"object\" ||\n !(\"_meta\" in envelope)\n ) {\n throw new Error(\n \"Duffel cloud relay response missing _meta envelope. Update Eliza Cloud or set ELIZA_DUFFEL_DIRECT=1.\",\n );\n }\n const meta = (envelope as RelayEnvelope)._meta;\n const cost = meta?.cost;\n if (\n !cost ||\n typeof cost.total_usd !== \"number\" ||\n typeof cost.creator_markup_usd !== \"number\" ||\n typeof cost.platform_fee_usd !== \"number\"\n ) {\n throw new Error(\n \"Duffel cloud relay returned malformed _meta.cost. Refusing to proceed without billing receipt.\",\n );\n }\n const totalUsd = cost.total_usd;\n const platformFeeUsd = cost.platform_fee_usd;\n const markupPercent = totalUsd > 0 ? platformFeeUsd / totalUsd : null;\n return {\n totalUsd,\n creatorMarkupUsd: cost.creator_markup_usd,\n platformFeeUsd,\n markupPercent,\n metered: true,\n };\n}\n\ninterface DuffelFetchResult<T> {\n data: T;\n cost: DuffelCallCost;\n}\n\ninterface DuffelRequest {\n config: DuffelConfig;\n method: \"GET\" | \"POST\";\n /** Path on api.duffel.com (e.g. \"/air/offer_requests\"). */\n directPath: string;\n /** Path on the local cloud relay (e.g. \"/api/cloud/travel-providers/duffel/offer-requests\"). */\n cloudRelayPath: string;\n body?: unknown;\n operation: string;\n}\n\nasync function duffelFetch<T>(\n args: DuffelRequest,\n): Promise<DuffelFetchResult<T>> {\n const { config, method, directPath, cloudRelayPath, body, operation } = args;\n\n const isCloud = config.mode === \"cloud\";\n const url = isCloud\n ? `${config.cloudRelayBaseUrl ?? \"\"}${cloudRelayPath}`\n : `${getDuffelApiBase()}${directPath}`;\n\n const headers = isCloud\n ? { \"Content-Type\": \"application/json\", Accept: \"application/json\" }\n : buildHeaders(config.apiKey ?? \"\");\n\n const span = NOOP_DUFFEL_SPAN;\n\n let response: Response;\n try {\n response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(30_000),\n });\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n logger.error(\n {\n boundary: \"elizacloud\",\n integration: \"duffel\",\n operation,\n mode: config.mode,\n err: error instanceof Error ? error : undefined,\n },\n `[elizacloud-duffel] Duffel ${operation} network error: ${msg}`,\n );\n span.failure({ error, errorKind: \"network_error\" });\n throw new Error(`Duffel ${operation} failed: ${msg}`);\n }\n\n if (response.status === 402 && isCloud) {\n // x402 payment-required: surface as a typed PaymentRequiredError so\n // the action layer can route the user to the wallet top-up flow\n // rather than treating this as a generic HTTP failure. The Cloud\n // billing layer emits 402 only when the user's credit balance can't\n // cover the call — see docs/cloud-travel-billing.md.\n const requirements = await parseX402Response(response);\n logger.warn(\n {\n boundary: \"elizacloud\",\n integration: \"duffel\",\n operation,\n mode: config.mode,\n statusCode: 402,\n requirementCount: requirements?.length ?? 0,\n },\n `[elizacloud-duffel] Duffel ${operation} returned 402 payment-required`,\n );\n span.failure({ statusCode: 402, errorKind: \"payment_required\" });\n if (!requirements || requirements.length === 0) {\n throw new PaymentRequiredError(\n [],\n `Duffel ${operation} requires payment but the upstream did not advertise any payment options.`,\n );\n }\n throw new PaymentRequiredError(requirements);\n }\n\n if (!response.ok) {\n const errorBody = await response.text().catch(() => \"\");\n const errorMsg = errorBody || `HTTP ${response.status}`;\n logger.warn(\n {\n boundary: \"elizacloud\",\n integration: \"duffel\",\n operation,\n mode: config.mode,\n statusCode: response.status,\n },\n `[elizacloud-duffel] Duffel ${operation} HTTP error: ${errorMsg}`,\n );\n span.failure({ statusCode: response.status, errorKind: \"http_error\" });\n throw new Error(\n `Duffel ${operation} failed (${response.status}): ${errorMsg}`,\n );\n }\n\n const payload = (await response.json()) as T;\n span.success({ statusCode: response.status });\n\n const cost = isCloud ? readRelayCost(payload) : DIRECT_MODE_COST;\n return { data: payload, cost };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Search for available flight offers via the Duffel Offer Requests API.\n *\n * Throws `DuffelConfigError` when DUFFEL_API_KEY is absent.\n * One-way search when `returnDate` is omitted; return search when provided.\n *\n */\nexport async function searchFlights(\n request: SearchFlightsRequest,\n config?: DuffelConfig,\n): Promise<SearchFlightsResult> {\n const resolvedConfig = config ?? readDuffelConfigFromEnv();\n const passengerCount = Math.max(1, Math.round(request.passengers ?? 1));\n\n const slices: Array<{\n origin: string;\n destination: string;\n departure_date: string;\n }> = [\n {\n origin: request.origin.toUpperCase().trim(),\n destination: request.destination.toUpperCase().trim(),\n departure_date: request.departureDate,\n },\n ];\n if (request.returnDate) {\n slices.push({\n origin: request.destination.toUpperCase().trim(),\n destination: request.origin.toUpperCase().trim(),\n departure_date: request.returnDate,\n });\n }\n\n const requestBody = {\n data: {\n slices,\n passengers: Array.from({ length: passengerCount }, () => ({\n type: \"adult\",\n })),\n cabin_class: \"economy\",\n },\n };\n\n logger.info(\n {\n boundary: \"elizacloud\",\n integration: \"duffel\",\n origin: request.origin,\n destination: request.destination,\n },\n `[elizacloud-duffel] Searching flights ${request.origin} → ${request.destination} on ${request.departureDate}`,\n );\n\n const { data: responseData, cost } =\n await duffelFetch<DuffelOfferRequestResponse>({\n config: resolvedConfig,\n method: \"POST\",\n directPath: \"/air/offer_requests?return_offers=true\",\n cloudRelayPath: \"/api/cloud/travel-providers/duffel/offer-requests\",\n body: requestBody,\n operation: \"offer_request\",\n });\n\n const offers = responseData.data.offers.map(mapOffer);\n\n logger.info(\n {\n boundary: \"elizacloud\",\n integration: \"duffel\",\n offerRequestId: responseData.data.id,\n offerCount: offers.length,\n costUsd: cost.totalUsd,\n },\n `[elizacloud-duffel] Duffel returned ${offers.length} offers for request ${responseData.data.id}`,\n );\n\n return {\n offerRequestId: responseData.data.id,\n offers,\n cost,\n };\n}\n\n/**\n * Retrieve a single flight offer by ID.\n *\n * Use after `searchFlights` to get live pricing and full details for a\n * specific offer before presenting it to the user for approval.\n *\n */\nexport async function getOffer(\n id: string,\n config?: DuffelConfig,\n): Promise<DuffelOffer> {\n const resolvedConfig = config ?? readDuffelConfigFromEnv();\n\n if (!id || id.trim().length === 0) {\n throw new Error(\"Duffel getOffer: offer id is required\");\n }\n\n const { data: responseData } = await duffelFetch<DuffelOfferResponse>({\n config: resolvedConfig,\n method: \"GET\",\n directPath: `/air/offers/${encodeURIComponent(id.trim())}`,\n cloudRelayPath: `/api/cloud/travel-providers/duffel/offers/${encodeURIComponent(id.trim())}`,\n operation: \"offer_retrieve\",\n });\n\n return mapOffer(responseData.data);\n}\n\nexport async function createOrder(\n request: CreateDuffelOrderRequest,\n config?: DuffelConfig,\n): Promise<DuffelOrder> {\n const resolvedConfig = config ?? readDuffelConfigFromEnv();\n if (request.selectedOffers.length !== 1) {\n throw new Error(\n \"Duffel createOrder: exactly one selected offer is required\",\n );\n }\n if (request.passengers.length === 0) {\n throw new Error(\"Duffel createOrder: at least one passenger is required\");\n }\n\n const data: Record<string, unknown> = {\n type: request.type,\n selected_offers: [...request.selectedOffers],\n passengers: request.passengers.map((passenger) => ({\n id: passenger.id,\n title: passenger.title,\n gender: passenger.gender,\n given_name: passenger.givenName,\n family_name: passenger.familyName,\n born_on: passenger.bornOn,\n email: passenger.email,\n phone_number: passenger.phoneNumber,\n })),\n };\n if (request.payment) {\n data.payments = [\n {\n type: request.payment.type,\n amount: request.payment.amount,\n currency: request.payment.currency,\n },\n ];\n }\n if (request.metadata && Object.keys(request.metadata).length > 0) {\n data.metadata = request.metadata;\n }\n\n const { data: response } = await duffelFetch<DuffelOrderResponse>({\n config: resolvedConfig,\n method: \"POST\",\n directPath: \"/air/orders\",\n cloudRelayPath: \"/api/cloud/travel-providers/duffel/orders\",\n body: { data },\n operation: \"order_create\",\n });\n\n return mapOrder(response.data);\n}\n\nexport async function getOrder(\n orderId: string,\n config?: DuffelConfig,\n): Promise<DuffelOrder> {\n const resolvedConfig = config ?? readDuffelConfigFromEnv();\n if (!orderId || orderId.trim().length === 0) {\n throw new Error(\"Duffel getOrder: order id is required\");\n }\n\n const { data: response } = await duffelFetch<DuffelOrderResponse>({\n config: resolvedConfig,\n method: \"GET\",\n directPath: `/air/orders/${encodeURIComponent(orderId.trim())}`,\n cloudRelayPath: `/api/cloud/travel-providers/duffel/orders/${encodeURIComponent(orderId.trim())}`,\n operation: \"order_retrieve\",\n });\n\n return mapOrder(response.data);\n}\n\nexport async function createPayment(\n args: {\n orderId: string;\n amount: string;\n currency: string;\n },\n config?: DuffelConfig,\n): Promise<DuffelPayment> {\n const resolvedConfig = config ?? readDuffelConfigFromEnv();\n if (args.orderId.trim().length === 0) {\n throw new Error(\"Duffel createPayment: order id is required\");\n }\n if (args.amount.trim().length === 0) {\n throw new Error(\"Duffel createPayment: amount is required\");\n }\n if (args.currency.trim().length === 0) {\n throw new Error(\"Duffel createPayment: currency is required\");\n }\n\n const { data: response } = await duffelFetch<DuffelPaymentResponse>({\n config: resolvedConfig,\n method: \"POST\",\n directPath: \"/air/payments\",\n cloudRelayPath: \"/api/cloud/travel-providers/duffel/payments\",\n body: {\n data: {\n order_id: args.orderId.trim(),\n payment: {\n type: \"balance\",\n amount: args.amount.trim(),\n currency: args.currency.trim().toUpperCase(),\n },\n },\n },\n operation: \"payment_create\",\n });\n\n return mapPayment(response.data);\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "ED2CEB38A73C762A64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
package/dist/cloud/index.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
export { type CloudLoginOptions, type CloudLoginResult, cloudLogin, } from "./auth.js";
|
|
2
2
|
export { BackupScheduler } from "./backup.js";
|
|
3
|
+
export { isCloudAuthApiKeyService, normalizeCloudApiKey, type CloudAuthApiKeyService, } from "./auth-service-types.js";
|
|
3
4
|
export { normalizeCloudSiteUrl, resolveCloudApiBaseUrl, } from "./base-url.js";
|
|
5
|
+
export * from "./duffel-client.js";
|
|
6
|
+
export * from "./lifeops-schedule-sync-client.js";
|
|
7
|
+
export * from "./lifeops-schedule-sync-contracts.js";
|
|
4
8
|
export { type BackupInfo, type CloudAgent, type CloudAgentCreateParams, ElizaCloudClient, type ProvisionInfo, } from "./bridge-client.js";
|
|
5
9
|
export { type CloudConnectionStatus, CloudManager, type CloudManagerCallbacks, } from "./cloud-manager.js";
|
|
6
10
|
export { CloudRuntimeProxy } from "./cloud-proxy.js";
|
|
11
|
+
export * from "./managed-payment-clients.js";
|
|
12
|
+
export * from "./x402-payment-handler.js";
|
|
7
13
|
export { ConnectionMonitor, type ConnectionMonitorCallbacks, } from "./reconnect.js";
|
|
8
14
|
export { validateCloudBaseUrl } from "./validate-url.js";
|
|
9
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,qBAAqB,EAC1B,YAAY,EACZ,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,qBAAqB,EAC1B,YAAY,EACZ,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,KAAK,0BAA0B,GAChC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
|