@5ss/ai-tools 3.7.3 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +1 -0
- package/dist/{bedrock-agentcore-browser-yrEY9cUi.js → bedrock-agentcore-browser-DINOmO6a.js} +2 -2
- package/dist/{bedrock-agentcore-browser-yrEY9cUi.js.map → bedrock-agentcore-browser-DINOmO6a.js.map} +1 -1
- package/dist/{bedrock-agentcore-code-interpreter-BnJnDxCp.js → bedrock-agentcore-code-interpreter-Doon_lrN.js} +2 -2
- package/dist/{bedrock-agentcore-code-interpreter-BnJnDxCp.js.map → bedrock-agentcore-code-interpreter-Doon_lrN.js.map} +1 -1
- package/dist/{cloudflare-browser-D9pG4RTj.js → cloudflare-browser-Ct8U4_Ru.js} +3 -3
- package/dist/{cloudflare-browser-D9pG4RTj.js.map → cloudflare-browser-Ct8U4_Ru.js.map} +1 -1
- package/dist/{cloudflare-email-bsq902dg.js → cloudflare-email-oS9Ku8a6.js} +2 -2
- package/dist/{cloudflare-email-bsq902dg.js.map → cloudflare-email-oS9Ku8a6.js.map} +1 -1
- package/dist/{cloudflare-sandbox-DHE4fmiq.js → cloudflare-sandbox-kpfw9aT6.js} +3 -3
- package/dist/{cloudflare-sandbox-DHE4fmiq.js.map → cloudflare-sandbox-kpfw9aT6.js.map} +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/{define-DdFALdNf.js → define-CbQI8dAN.js} +2 -1
- package/dist/{define-DdFALdNf.js.map → define-CbQI8dAN.js.map} +1 -1
- package/dist/{eventbridge-scheduler-ICepMPWG.js → eventbridge-scheduler-CTgSZgZZ.js} +2 -2
- package/dist/{eventbridge-scheduler-ICepMPWG.js.map → eventbridge-scheduler-CTgSZgZZ.js.map} +1 -1
- package/dist/{imessage-B-0DZfMa.js → imessage-u90N3KVq.js} +2 -2
- package/dist/{imessage-B-0DZfMa.js.map → imessage-u90N3KVq.js.map} +1 -1
- package/dist/index-ByHp3nZm.d.ts.map +1 -1
- package/dist/index-CZX5OeOF.d.ts.map +1 -1
- package/dist/{mastra-vector-qKG3L-Rw.js → mastra-vector-BillORtZ.js} +2 -2
- package/dist/{mastra-vector-qKG3L-Rw.js.map → mastra-vector-BillORtZ.js.map} +1 -1
- package/dist/modules/artifacts/index.js +2 -2
- package/dist/modules/browser/index.js +3 -3
- package/dist/modules/calendar/index.js +1 -1
- package/dist/modules/code-sandbox/index.js +3 -3
- package/dist/modules/content-type/index.js +1 -1
- package/dist/modules/crypto/index.js +1 -1
- package/dist/modules/document-extract/index.js +2 -2
- package/dist/modules/document-render/index.js +2 -2
- package/dist/modules/email/index.js +3 -3
- package/dist/modules/email-message/index.js +1 -1
- package/dist/modules/files/index.js +2 -2
- package/dist/modules/image/index.js +2 -2
- package/dist/modules/messaging/index.js +6 -6
- package/dist/modules/queue/index.js +2 -2
- package/dist/modules/rag/index.js +2 -2
- package/dist/modules/scheduler/index.js +2 -2
- package/dist/modules/skills/index.js +1 -1
- package/dist/modules/tasks/index.js +1 -1
- package/dist/modules/vector-store/index.js +1 -1
- package/dist/modules/web-fetch/index.js +1 -1
- package/dist/{pinecone-tmtu3ZS5.js → pinecone-CLetgKeA.js} +2 -2
- package/dist/{pinecone-tmtu3ZS5.js.map → pinecone-CLetgKeA.js.map} +1 -1
- package/dist/{qdrant-zbCHUsnv.js → qdrant-DhnitNEu.js} +2 -2
- package/dist/{qdrant-zbCHUsnv.js.map → qdrant-DhnitNEu.js.map} +1 -1
- package/dist/{resend-Cfgm4HuV.js → resend-BBrjcYvB.js} +2 -2
- package/dist/{resend-Cfgm4HuV.js.map → resend-BBrjcYvB.js.map} +1 -1
- package/dist/{s3-TKCIZZ2q.js → s3-BpivS7pv.js} +36 -21
- package/dist/s3-BpivS7pv.js.map +1 -0
- package/dist/{slack-D6XzBS3b.js → slack-D9OmRfO9.js} +2 -2
- package/dist/{slack-D6XzBS3b.js.map → slack-D9OmRfO9.js.map} +1 -1
- package/dist/{sqs-B50DWyTf.js → sqs-BPNYdTpw.js} +2 -2
- package/dist/{sqs-B50DWyTf.js.map → sqs-BPNYdTpw.js.map} +1 -1
- package/dist/{supabase-vector-CDKOyvj1.js → supabase-vector-wRNCS3GC.js} +2 -2
- package/dist/{supabase-vector-CDKOyvj1.js.map → supabase-vector-wRNCS3GC.js.map} +1 -1
- package/dist/{teams-bGfle6pU.js → teams-SteU8V5H.js} +2 -2
- package/dist/{teams-bGfle6pU.js.map → teams-SteU8V5H.js.map} +1 -1
- package/dist/{telegram-B-TZi9fM.js → telegram-Buo2ZFGj.js} +2 -2
- package/dist/{telegram-B-TZi9fM.js.map → telegram-Buo2ZFGj.js.map} +1 -1
- package/dist/{textract-CthgcP6w.js → textract-BCNadrCr.js} +3 -3
- package/dist/{textract-CthgcP6w.js.map → textract-BCNadrCr.js.map} +1 -1
- package/dist/{vector-store-DrwuMOne.js → vector-store-DvqvDSLb.js} +6 -6
- package/dist/{vector-store-DrwuMOne.js.map → vector-store-DvqvDSLb.js.map} +1 -1
- package/dist/vendors/amazon-sp-api/index.js +1 -1
- package/dist/vendors/bedrock-agentcore-browser/index.js +1 -1
- package/dist/vendors/bedrock-agentcore-code-interpreter/index.js +1 -1
- package/dist/vendors/cloudflare-browser/index.js +1 -1
- package/dist/vendors/cloudflare-email/index.js +1 -1
- package/dist/vendors/cloudflare-sandbox/index.js +1 -1
- package/dist/vendors/eventbridge-scheduler/index.js +1 -1
- package/dist/vendors/imessage/index.js +1 -1
- package/dist/vendors/katana/index.js +1 -1
- package/dist/vendors/mastra-vector/index.js +1 -1
- package/dist/vendors/pinecone/index.js +1 -1
- package/dist/vendors/qdrant/index.js +1 -1
- package/dist/vendors/resend/index.js +1 -1
- package/dist/vendors/s3/index.js +1 -1
- package/dist/vendors/shipstation/index.js +1 -1
- package/dist/vendors/slack/index.js +1 -1
- package/dist/vendors/sqs/index.js +1 -1
- package/dist/vendors/supabase-vector/index.js +1 -1
- package/dist/vendors/teams/index.js +1 -1
- package/dist/vendors/telegram/index.js +1 -1
- package/dist/vendors/textract/index.js +1 -1
- package/dist/vendors/walmart/index.d.ts +421 -0
- package/dist/vendors/walmart/index.d.ts.map +1 -0
- package/dist/vendors/walmart/index.js +517 -0
- package/dist/vendors/walmart/index.js.map +1 -0
- package/dist/vendors/woocommerce/index.js +1 -1
- package/logos/README.md +1 -0
- package/logos/pack-logos.json +1 -0
- package/logos/walmart.svg +8 -0
- package/package.json +5 -1
- package/dist/s3-TKCIZZ2q.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to `@5ss/ai-tools` are documented here.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Releases are cut by [semantic-release](https://semantic-release.gitbook.io/) on every push to `main`.
|
|
6
6
|
|
|
7
|
+
## [3.8.0](https://github.com/five-star-solutions-co/ai-tools/compare/v3.7.3...v3.8.0) (2026-08-30)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **core:** support walmart vendor ([5d28fc3](https://github.com/five-star-solutions-co/ai-tools/commit/5d28fc34886796688e2ae9d90a8fb2e1061deb0d))
|
|
12
|
+
|
|
7
13
|
## [3.7.3](https://github.com/five-star-solutions-co/ai-tools/compare/v3.7.2...v3.7.3) (2026-08-29)
|
|
8
14
|
|
|
9
15
|
### Code Refactoring
|
|
@@ -164,6 +170,7 @@ Public surfaces removed or renamed since **v1.6.1** — next release **must** be
|
|
|
164
170
|
### Added
|
|
165
171
|
|
|
166
172
|
- ShipStation V2 vendor pack with API-key auth and paginated label and shipment read tools.
|
|
173
|
+
- Walmart Marketplace US vendor pack with OAuth, paginated orders, items, returns, reconciliation dates, and host-facing report download bytes.
|
|
167
174
|
|
|
168
175
|
### Notes (compat preserved)
|
|
169
176
|
|
package/README.md
CHANGED
|
@@ -162,6 +162,7 @@ defineTool / defineModule
|
|
|
162
162
|
| `@5ss/ai-tools/katana` | sales/purchase/manufacturing orders, products, materials, customers, suppliers, inventory | [katana](./docs/vendors/katana.md) |
|
|
163
163
|
| `@5ss/ai-tools/amazon-sp-api` | orders + items, FBA inventory, reports + documents, catalog search | [amazon-sp-api](./docs/vendors/amazon-sp-api.md) |
|
|
164
164
|
| `@5ss/ai-tools/shipstation` | paginated labels and shipments | [shipstation](./docs/vendors/shipstation.md) |
|
|
165
|
+
| `@5ss/ai-tools/walmart` | orders, items, returns, recon dates + host report download | [walmart](./docs/vendors/walmart.md) |
|
|
165
166
|
|
|
166
167
|
Auth fields are **snake_case** (`api_key`, `bot_token`, `access_key_id`, …).
|
|
167
168
|
|
package/dist/{bedrock-agentcore-browser-yrEY9cUi.js → bedrock-agentcore-browser-DINOmO6a.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as ToolError } from "./errors-DoSpNHvs.js";
|
|
2
|
-
import { n as defineModule, r as defineTool } from "./define-
|
|
2
|
+
import { n as defineModule, r as defineTool } from "./define-CbQI8dAN.js";
|
|
3
3
|
import { n as requireAuth } from "./provider-CgDAlg6K.js";
|
|
4
4
|
import { t as AwsService } from "./aws-service-Cn_ozX4X.js";
|
|
5
5
|
import { isPlainObject, isString } from "es-toolkit";
|
|
@@ -179,4 +179,4 @@ const bedrockAgentCoreBrowserModule = defineModule({
|
|
|
179
179
|
//#endregion
|
|
180
180
|
export { BedrockAgentCoreBrowserClient as a, browserSessionIdInputSchema as c, browserStreamSchema as d, bedrockAgentCoreBrowserStopSessionTool as i, browserSessionOutputSchema as l, bedrockAgentCoreBrowserModule as n, DEFAULT_BROWSER_ID as o, bedrockAgentCoreBrowserStartSessionTool as r, bedrockAgentCoreBrowserAuthSchema as s, bedrockAgentCoreBrowserGetSessionTool as t, browserStartSessionInputSchema as u };
|
|
181
181
|
|
|
182
|
-
//# sourceMappingURL=bedrock-agentcore-browser-
|
|
182
|
+
//# sourceMappingURL=bedrock-agentcore-browser-DINOmO6a.js.map
|
package/dist/{bedrock-agentcore-browser-yrEY9cUi.js.map → bedrock-agentcore-browser-DINOmO6a.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bedrock-agentcore-browser-yrEY9cUi.js","names":["#auth","#aws","#browserId","#base","#mapSession"],"sources":["../src/vendors/bedrock-agentcore-browser/contracts.ts","../src/vendors/bedrock-agentcore-browser/client.ts","../src/vendors/bedrock-agentcore-browser/module.ts"],"sourcesContent":["/**\n * Amazon Bedrock AgentCore Browser contracts (session lifecycle + stream metadata).\n * Interactive automation uses stream endpoints (host/Playwright) — not faked REST click tools.\n */\n\nimport { z } from 'zod'\n\nexport const DEFAULT_BROWSER_ID = 'aws.browser.v1'\n\nexport const bedrockAgentCoreBrowserAuthSchema = z.object({\n\taccess_key_id: z.string().min(1).describe('AWS access key id'),\n\tsecret_access_key: z.string().min(1).describe('AWS secret access key'),\n\tregion: z.string().min(1).describe('AWS region for Bedrock AgentCore'),\n\tsession_token: z.string().min(1).optional().describe('Optional session token'),\n\tbrowser_id: z.string().min(1).optional().describe('Browser resource id (default aws.browser.v1)')\n})\n\nexport type BedrockAgentCoreBrowserAuth = z.infer<typeof bedrockAgentCoreBrowserAuthSchema>\n\nconst sessionId = z.string().min(1).max(40).describe('Browser session id')\n\nexport const browserStartSessionInputSchema = z.object({\n\tname: z.string().min(1).max(100).optional().describe('Optional session name'),\n\tsession_timeout_seconds: z.int().min(1).max(28_800).optional().describe('Session TTL in seconds (max 8 hours)'),\n\tviewport_width: z.int().min(1).max(10_000).optional().describe('Viewport width in pixels'),\n\tviewport_height: z.int().min(1).max(10_000).optional().describe('Viewport height in pixels')\n})\n\nexport const browserSessionIdInputSchema = z.object({\n\tsession_id: sessionId\n})\n\nexport const browserStreamSchema = z.object({\n\tautomation_stream_endpoint: z.string().optional().describe('Automation WebSocket/stream endpoint when returned'),\n\tautomation_stream_status: z.string().optional().describe('Automation stream status when returned'),\n\tlive_view_stream_endpoint: z.string().optional().describe('Live view stream endpoint when returned')\n})\n\nexport const browserSessionOutputSchema = z.object({\n\tsession_id: z.string().describe('Browser session id'),\n\tbrowser_id: z.string().optional().describe('Browser resource id'),\n\tcreated_at: z.string().optional(),\n\tstatus: z.string().optional().describe('Session status when returned'),\n\tstreams: browserStreamSchema.optional().describe('Automation and live-view stream metadata')\n})\n\nexport type BrowserStartSessionInput = z.infer<typeof browserStartSessionInputSchema>\nexport type BrowserSessionIdInput = z.infer<typeof browserSessionIdInputSchema>\nexport type BrowserSessionOutput = z.infer<typeof browserSessionOutputSchema>\n","/**\n * Bedrock AgentCore Browser client — session lifecycle + stream endpoints.\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { AwsService } from '../../transport/aws-service'\nimport type { AwsServiceOptions } from '../../transport/aws-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tBedrockAgentCoreBrowserAuth,\n\tBrowserSessionIdInput,\n\tBrowserSessionOutput,\n\tBrowserStartSessionInput\n} from './contracts'\nimport { DEFAULT_BROWSER_ID, bedrockAgentCoreBrowserAuthSchema } from './contracts'\n\nexport type BedrockAgentCoreBrowserClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class BedrockAgentCoreBrowserClient {\n\treadonly #auth: BedrockAgentCoreBrowserAuth\n\treadonly #aws: AwsService\n\treadonly #browserId: string\n\n\tconstructor(auth: BedrockAgentCoreBrowserAuth, options: BedrockAgentCoreBrowserClientOptions = {}) {\n\t\tconst parsed = bedrockAgentCoreBrowserAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Bedrock AgentCore Browser auth', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#browserId = this.#auth.browser_id ?? DEFAULT_BROWSER_ID\n\t\tconst awsOptions: AwsServiceOptions = {\n\t\t\taccessKeyId: this.#auth.access_key_id,\n\t\t\tsecretAccessKey: this.#auth.secret_access_key,\n\t\t\tregion: this.#auth.region,\n\t\t\tservice: 'bedrock-agentcore',\n\t\t\tbaseURL: `https://bedrock-agentcore.${this.#auth.region}.amazonaws.com`,\n\t\t\tlabel: 'Bedrock AgentCore Browser'\n\t\t}\n\t\tif (options.fetch) awsOptions.fetch = options.fetch\n\t\tif (options.signal) awsOptions.signal = options.signal\n\t\tif (this.#auth.session_token) awsOptions.sessionToken = this.#auth.session_token\n\t\tthis.#aws = new AwsService(awsOptions)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): BedrockAgentCoreBrowserClient {\n\t\tconst auth = requireAuth(ctx, bedrockAgentCoreBrowserAuthSchema)\n\t\tconst options: BedrockAgentCoreBrowserClientOptions = {}\n\t\tif (ctx.fetch) options.fetch = ctx.fetch\n\t\tif (ctx.signal) options.signal = ctx.signal\n\t\treturn new BedrockAgentCoreBrowserClient(auth, options)\n\t}\n\n\t#base(): string {\n\t\treturn `/browsers/${encodeURIComponent(this.#browserId)}`\n\t}\n\n\tasync startSession(input: BrowserStartSessionInput = {}): Promise<BrowserSessionOutput> {\n\t\tconst body: Record<string, unknown> = {}\n\t\tif (input.name) body['name'] = input.name\n\t\tif (input.session_timeout_seconds !== undefined) body['sessionTimeoutSeconds'] = input.session_timeout_seconds\n\t\tif (input.viewport_width !== undefined || input.viewport_height !== undefined) {\n\t\t\tbody['viewPort'] = {\n\t\t\t\twidth: input.viewport_width ?? 1280,\n\t\t\t\theight: input.viewport_height ?? 720\n\t\t\t}\n\t\t}\n\t\tconst { data } = await this.#aws.put(`${this.#base()}/sessions/start`, body)\n\t\treturn this.#mapSession(data)\n\t}\n\n\tasync stopSession(input: BrowserSessionIdInput): Promise<BrowserSessionOutput> {\n\t\tconst { data } = await this.#aws.put(\n\t\t\t`${this.#base()}/sessions/stop?sessionId=${encodeURIComponent(input.session_id)}`,\n\t\t\t{}\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\tasync getSession(input: BrowserSessionIdInput): Promise<BrowserSessionOutput> {\n\t\tconst { data } = await this.#aws.get(\n\t\t\t`${this.#base()}/sessions/get?sessionId=${encodeURIComponent(input.session_id)}`\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\t#mapSession(data: unknown, fallbackSessionId?: string): BrowserSessionOutput {\n\t\tif (!isPlainObject(data)) {\n\t\t\tif (fallbackSessionId) return { session_id: fallbackSessionId, browser_id: this.#browserId }\n\t\t\tthrow new ToolError('Unexpected browser session response', { code: 'upstream' })\n\t\t}\n\t\tconst sessionId = isString(data['sessionId']) ? data['sessionId'] : fallbackSessionId\n\t\tif (!sessionId) throw new ToolError('Browser session response missing sessionId', { code: 'upstream' })\n\t\tconst out: BrowserSessionOutput = {\n\t\t\tsession_id: sessionId,\n\t\t\tbrowser_id: isString(data['browserIdentifier']) ? data['browserIdentifier'] : this.#browserId\n\t\t}\n\t\tif (isString(data['createdAt'])) out.created_at = data['createdAt']\n\t\tif (isString(data['status'])) out.status = data['status']\n\n\t\tconst streams = isPlainObject(data['streams']) ? data['streams'] : undefined\n\t\tif (streams) {\n\t\t\tconst automation = isPlainObject(streams['automationStream']) ? streams['automationStream'] : undefined\n\t\t\tconst live = isPlainObject(streams['liveViewStream']) ? streams['liveViewStream'] : undefined\n\t\t\tconst mapped: NonNullable<BrowserSessionOutput['streams']> = {}\n\t\t\tif (automation && isString(automation['streamEndpoint'])) {\n\t\t\t\tmapped.automation_stream_endpoint = automation['streamEndpoint']\n\t\t\t}\n\t\t\tif (automation && isString(automation['streamStatus'])) {\n\t\t\t\tmapped.automation_stream_status = automation['streamStatus']\n\t\t\t}\n\t\t\tif (live && isString(live['streamEndpoint'])) {\n\t\t\t\tmapped.live_view_stream_endpoint = live['streamEndpoint']\n\t\t\t}\n\t\t\tif (Object.keys(mapped).length > 0) out.streams = mapped\n\t\t}\n\t\treturn out\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { BedrockAgentCoreBrowserClient } from './client'\nimport {\n\tbedrockAgentCoreBrowserAuthSchema,\n\tbrowserSessionIdInputSchema,\n\tbrowserSessionOutputSchema,\n\tbrowserStartSessionInputSchema\n} from './contracts'\n\nconst id = 'bedrock-agentcore-browser'\n\nexport const bedrockAgentCoreBrowserStartSessionTool = defineTool({\n\tid: `${id}-start-session`,\n\tname: 'bedrockAgentCoreBrowserStartSession',\n\tdescription:\n\t\t'Start a Bedrock AgentCore browser session. Returns session_id and stream endpoints (automation / live view) when provided. Interactive page control uses those streams outside this pack.',\n\tinputSchema: browserStartSessionInputSchema,\n\toutputSchema: browserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreBrowserClient.fromContext(ctx).startSession(input)\n})\n\nexport const bedrockAgentCoreBrowserStopSessionTool = defineTool({\n\tid: `${id}-stop-session`,\n\tname: 'bedrockAgentCoreBrowserStopSession',\n\tdescription: 'Stop a Bedrock AgentCore browser session by session_id.',\n\tinputSchema: browserSessionIdInputSchema,\n\toutputSchema: browserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreBrowserClient.fromContext(ctx).stopSession(input)\n})\n\nexport const bedrockAgentCoreBrowserGetSessionTool = defineTool({\n\tid: `${id}-get-session`,\n\tname: 'bedrockAgentCoreBrowserGetSession',\n\tdescription: 'Get a Bedrock AgentCore browser session, including status and stream endpoints when available.',\n\tinputSchema: browserSessionIdInputSchema,\n\toutputSchema: browserSessionOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreBrowserClient.fromContext(ctx).getSession(input)\n})\n\nexport const bedrockAgentCoreBrowserModule = defineModule({\n\tid,\n\ttitle: 'Bedrock AgentCore Browser',\n\tdescription:\n\t\t'Amazon Bedrock AgentCore Browser session lifecycle and stream metadata. These tools start, inspect, and stop sessions; page interaction occurs through the returned automation stream.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: bedrockAgentCoreBrowserAuthSchema },\n\tcategories: ['browser', 'aws'],\n\tclassification: 'standard',\n\ttags: ['agentcore', 'session'],\n\ttools: [\n\t\tbedrockAgentCoreBrowserStartSessionTool,\n\t\tbedrockAgentCoreBrowserStopSessionTool,\n\t\tbedrockAgentCoreBrowserGetSessionTool\n\t]\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bedrock-agentcore-browser-DINOmO6a.js","names":["#auth","#aws","#browserId","#base","#mapSession"],"sources":["../src/vendors/bedrock-agentcore-browser/contracts.ts","../src/vendors/bedrock-agentcore-browser/client.ts","../src/vendors/bedrock-agentcore-browser/module.ts"],"sourcesContent":["/**\n * Amazon Bedrock AgentCore Browser contracts (session lifecycle + stream metadata).\n * Interactive automation uses stream endpoints (host/Playwright) — not faked REST click tools.\n */\n\nimport { z } from 'zod'\n\nexport const DEFAULT_BROWSER_ID = 'aws.browser.v1'\n\nexport const bedrockAgentCoreBrowserAuthSchema = z.object({\n\taccess_key_id: z.string().min(1).describe('AWS access key id'),\n\tsecret_access_key: z.string().min(1).describe('AWS secret access key'),\n\tregion: z.string().min(1).describe('AWS region for Bedrock AgentCore'),\n\tsession_token: z.string().min(1).optional().describe('Optional session token'),\n\tbrowser_id: z.string().min(1).optional().describe('Browser resource id (default aws.browser.v1)')\n})\n\nexport type BedrockAgentCoreBrowserAuth = z.infer<typeof bedrockAgentCoreBrowserAuthSchema>\n\nconst sessionId = z.string().min(1).max(40).describe('Browser session id')\n\nexport const browserStartSessionInputSchema = z.object({\n\tname: z.string().min(1).max(100).optional().describe('Optional session name'),\n\tsession_timeout_seconds: z.int().min(1).max(28_800).optional().describe('Session TTL in seconds (max 8 hours)'),\n\tviewport_width: z.int().min(1).max(10_000).optional().describe('Viewport width in pixels'),\n\tviewport_height: z.int().min(1).max(10_000).optional().describe('Viewport height in pixels')\n})\n\nexport const browserSessionIdInputSchema = z.object({\n\tsession_id: sessionId\n})\n\nexport const browserStreamSchema = z.object({\n\tautomation_stream_endpoint: z.string().optional().describe('Automation WebSocket/stream endpoint when returned'),\n\tautomation_stream_status: z.string().optional().describe('Automation stream status when returned'),\n\tlive_view_stream_endpoint: z.string().optional().describe('Live view stream endpoint when returned')\n})\n\nexport const browserSessionOutputSchema = z.object({\n\tsession_id: z.string().describe('Browser session id'),\n\tbrowser_id: z.string().optional().describe('Browser resource id'),\n\tcreated_at: z.string().optional(),\n\tstatus: z.string().optional().describe('Session status when returned'),\n\tstreams: browserStreamSchema.optional().describe('Automation and live-view stream metadata')\n})\n\nexport type BrowserStartSessionInput = z.infer<typeof browserStartSessionInputSchema>\nexport type BrowserSessionIdInput = z.infer<typeof browserSessionIdInputSchema>\nexport type BrowserSessionOutput = z.infer<typeof browserSessionOutputSchema>\n","/**\n * Bedrock AgentCore Browser client — session lifecycle + stream endpoints.\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { AwsService } from '../../transport/aws-service'\nimport type { AwsServiceOptions } from '../../transport/aws-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tBedrockAgentCoreBrowserAuth,\n\tBrowserSessionIdInput,\n\tBrowserSessionOutput,\n\tBrowserStartSessionInput\n} from './contracts'\nimport { DEFAULT_BROWSER_ID, bedrockAgentCoreBrowserAuthSchema } from './contracts'\n\nexport type BedrockAgentCoreBrowserClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class BedrockAgentCoreBrowserClient {\n\treadonly #auth: BedrockAgentCoreBrowserAuth\n\treadonly #aws: AwsService\n\treadonly #browserId: string\n\n\tconstructor(auth: BedrockAgentCoreBrowserAuth, options: BedrockAgentCoreBrowserClientOptions = {}) {\n\t\tconst parsed = bedrockAgentCoreBrowserAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Bedrock AgentCore Browser auth', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#browserId = this.#auth.browser_id ?? DEFAULT_BROWSER_ID\n\t\tconst awsOptions: AwsServiceOptions = {\n\t\t\taccessKeyId: this.#auth.access_key_id,\n\t\t\tsecretAccessKey: this.#auth.secret_access_key,\n\t\t\tregion: this.#auth.region,\n\t\t\tservice: 'bedrock-agentcore',\n\t\t\tbaseURL: `https://bedrock-agentcore.${this.#auth.region}.amazonaws.com`,\n\t\t\tlabel: 'Bedrock AgentCore Browser'\n\t\t}\n\t\tif (options.fetch) awsOptions.fetch = options.fetch\n\t\tif (options.signal) awsOptions.signal = options.signal\n\t\tif (this.#auth.session_token) awsOptions.sessionToken = this.#auth.session_token\n\t\tthis.#aws = new AwsService(awsOptions)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): BedrockAgentCoreBrowserClient {\n\t\tconst auth = requireAuth(ctx, bedrockAgentCoreBrowserAuthSchema)\n\t\tconst options: BedrockAgentCoreBrowserClientOptions = {}\n\t\tif (ctx.fetch) options.fetch = ctx.fetch\n\t\tif (ctx.signal) options.signal = ctx.signal\n\t\treturn new BedrockAgentCoreBrowserClient(auth, options)\n\t}\n\n\t#base(): string {\n\t\treturn `/browsers/${encodeURIComponent(this.#browserId)}`\n\t}\n\n\tasync startSession(input: BrowserStartSessionInput = {}): Promise<BrowserSessionOutput> {\n\t\tconst body: Record<string, unknown> = {}\n\t\tif (input.name) body['name'] = input.name\n\t\tif (input.session_timeout_seconds !== undefined) body['sessionTimeoutSeconds'] = input.session_timeout_seconds\n\t\tif (input.viewport_width !== undefined || input.viewport_height !== undefined) {\n\t\t\tbody['viewPort'] = {\n\t\t\t\twidth: input.viewport_width ?? 1280,\n\t\t\t\theight: input.viewport_height ?? 720\n\t\t\t}\n\t\t}\n\t\tconst { data } = await this.#aws.put(`${this.#base()}/sessions/start`, body)\n\t\treturn this.#mapSession(data)\n\t}\n\n\tasync stopSession(input: BrowserSessionIdInput): Promise<BrowserSessionOutput> {\n\t\tconst { data } = await this.#aws.put(\n\t\t\t`${this.#base()}/sessions/stop?sessionId=${encodeURIComponent(input.session_id)}`,\n\t\t\t{}\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\tasync getSession(input: BrowserSessionIdInput): Promise<BrowserSessionOutput> {\n\t\tconst { data } = await this.#aws.get(\n\t\t\t`${this.#base()}/sessions/get?sessionId=${encodeURIComponent(input.session_id)}`\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\t#mapSession(data: unknown, fallbackSessionId?: string): BrowserSessionOutput {\n\t\tif (!isPlainObject(data)) {\n\t\t\tif (fallbackSessionId) return { session_id: fallbackSessionId, browser_id: this.#browserId }\n\t\t\tthrow new ToolError('Unexpected browser session response', { code: 'upstream' })\n\t\t}\n\t\tconst sessionId = isString(data['sessionId']) ? data['sessionId'] : fallbackSessionId\n\t\tif (!sessionId) throw new ToolError('Browser session response missing sessionId', { code: 'upstream' })\n\t\tconst out: BrowserSessionOutput = {\n\t\t\tsession_id: sessionId,\n\t\t\tbrowser_id: isString(data['browserIdentifier']) ? data['browserIdentifier'] : this.#browserId\n\t\t}\n\t\tif (isString(data['createdAt'])) out.created_at = data['createdAt']\n\t\tif (isString(data['status'])) out.status = data['status']\n\n\t\tconst streams = isPlainObject(data['streams']) ? data['streams'] : undefined\n\t\tif (streams) {\n\t\t\tconst automation = isPlainObject(streams['automationStream']) ? streams['automationStream'] : undefined\n\t\t\tconst live = isPlainObject(streams['liveViewStream']) ? streams['liveViewStream'] : undefined\n\t\t\tconst mapped: NonNullable<BrowserSessionOutput['streams']> = {}\n\t\t\tif (automation && isString(automation['streamEndpoint'])) {\n\t\t\t\tmapped.automation_stream_endpoint = automation['streamEndpoint']\n\t\t\t}\n\t\t\tif (automation && isString(automation['streamStatus'])) {\n\t\t\t\tmapped.automation_stream_status = automation['streamStatus']\n\t\t\t}\n\t\t\tif (live && isString(live['streamEndpoint'])) {\n\t\t\t\tmapped.live_view_stream_endpoint = live['streamEndpoint']\n\t\t\t}\n\t\t\tif (Object.keys(mapped).length > 0) out.streams = mapped\n\t\t}\n\t\treturn out\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { BedrockAgentCoreBrowserClient } from './client'\nimport {\n\tbedrockAgentCoreBrowserAuthSchema,\n\tbrowserSessionIdInputSchema,\n\tbrowserSessionOutputSchema,\n\tbrowserStartSessionInputSchema\n} from './contracts'\n\nconst id = 'bedrock-agentcore-browser'\n\nexport const bedrockAgentCoreBrowserStartSessionTool = defineTool({\n\tid: `${id}-start-session`,\n\tname: 'bedrockAgentCoreBrowserStartSession',\n\tdescription:\n\t\t'Start a Bedrock AgentCore browser session. Returns session_id and stream endpoints (automation / live view) when provided. Interactive page control uses those streams outside this pack.',\n\tinputSchema: browserStartSessionInputSchema,\n\toutputSchema: browserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreBrowserClient.fromContext(ctx).startSession(input)\n})\n\nexport const bedrockAgentCoreBrowserStopSessionTool = defineTool({\n\tid: `${id}-stop-session`,\n\tname: 'bedrockAgentCoreBrowserStopSession',\n\tdescription: 'Stop a Bedrock AgentCore browser session by session_id.',\n\tinputSchema: browserSessionIdInputSchema,\n\toutputSchema: browserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreBrowserClient.fromContext(ctx).stopSession(input)\n})\n\nexport const bedrockAgentCoreBrowserGetSessionTool = defineTool({\n\tid: `${id}-get-session`,\n\tname: 'bedrockAgentCoreBrowserGetSession',\n\tdescription: 'Get a Bedrock AgentCore browser session, including status and stream endpoints when available.',\n\tinputSchema: browserSessionIdInputSchema,\n\toutputSchema: browserSessionOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreBrowserClient.fromContext(ctx).getSession(input)\n})\n\nexport const bedrockAgentCoreBrowserModule = defineModule({\n\tid,\n\ttitle: 'Bedrock AgentCore Browser',\n\tdescription:\n\t\t'Amazon Bedrock AgentCore Browser session lifecycle and stream metadata. These tools start, inspect, and stop sessions; page interaction occurs through the returned automation stream.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: bedrockAgentCoreBrowserAuthSchema },\n\tcategories: ['browser', 'aws'],\n\tclassification: 'standard',\n\ttags: ['agentcore', 'session'],\n\ttools: [\n\t\tbedrockAgentCoreBrowserStartSessionTool,\n\t\tbedrockAgentCoreBrowserStopSessionTool,\n\t\tbedrockAgentCoreBrowserGetSessionTool\n\t]\n})\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as ToolError } from "./errors-DoSpNHvs.js";
|
|
2
|
-
import { n as defineModule, r as defineTool } from "./define-
|
|
2
|
+
import { n as defineModule, r as defineTool } from "./define-CbQI8dAN.js";
|
|
3
3
|
import { n as requireAuth } from "./provider-CgDAlg6K.js";
|
|
4
4
|
import { t as AwsService } from "./aws-service-Cn_ozX4X.js";
|
|
5
5
|
import { isPlainObject, isString } from "es-toolkit";
|
|
@@ -354,4 +354,4 @@ const bedrockAgentCoreCodeInterpreterModule = defineModule({
|
|
|
354
354
|
//#endregion
|
|
355
355
|
export { startCommandInputSchema as A, executeCommandInputSchema as C, removeFilesInputSchema as D, readFilesInputSchema as E, taskIdInputSchema as M, writeFilesInputSchema as N, sessionIdInputSchema as O, executeCodeInputSchema as S, listFilesInputSchema as T, MAX_COMMAND_CHARS as _, bedrockAgentCoreCodeInterpreterListFilesTool as a, MAX_WRITE_FILES as b, bedrockAgentCoreCodeInterpreterRemoveFilesTool as c, bedrockAgentCoreCodeInterpreterStopSessionTool as d, bedrockAgentCoreCodeInterpreterStopTaskTool as f, MAX_CODE_CHARS as g, DEFAULT_CODE_INTERPRETER_ID as h, bedrockAgentCoreCodeInterpreterGetTaskTool as i, startSessionInputSchema as j, sessionOutputSchema as k, bedrockAgentCoreCodeInterpreterStartCommandTool as l, BedrockAgentCoreCodeInterpreterClient as m, bedrockAgentCoreCodeInterpreterExecuteCommandTool as n, bedrockAgentCoreCodeInterpreterModule as o, bedrockAgentCoreCodeInterpreterWriteFilesTool as p, bedrockAgentCoreCodeInterpreterGetSessionTool as r, bedrockAgentCoreCodeInterpreterReadFilesTool as s, bedrockAgentCoreCodeInterpreterExecuteCodeTool as t, bedrockAgentCoreCodeInterpreterStartSessionTool as u, MAX_FILE_PATHS as v, invokeResultSchema as w, bedrockAgentCoreCodeInterpreterAuthSchema as x, MAX_FILE_TEXT as y };
|
|
356
356
|
|
|
357
|
-
//# sourceMappingURL=bedrock-agentcore-code-interpreter-
|
|
357
|
+
//# sourceMappingURL=bedrock-agentcore-code-interpreter-Doon_lrN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bedrock-agentcore-code-interpreter-BnJnDxCp.js","names":["#auth","#aws","#interpreterId","#base","#mapSession","#invoke"],"sources":["../src/vendors/bedrock-agentcore-code-interpreter/contracts.ts","../src/vendors/bedrock-agentcore-code-interpreter/client.ts","../src/vendors/bedrock-agentcore-code-interpreter/module.ts"],"sourcesContent":["/**\n * Amazon Bedrock AgentCore Code Interpreter contracts.\n */\n\nimport { z } from 'zod'\n\nexport const DEFAULT_CODE_INTERPRETER_ID = 'aws.codeinterpreter.v1'\nexport const MAX_CODE_CHARS = 200_000\nexport const MAX_COMMAND_CHARS = 20_000\nexport const MAX_FILE_PATHS = 50\nexport const MAX_WRITE_FILES = 20\nexport const MAX_FILE_TEXT = 500_000\n\nexport const bedrockAgentCoreCodeInterpreterAuthSchema = z.object({\n\taccess_key_id: z.string().min(1).describe('AWS access key id'),\n\tsecret_access_key: z.string().min(1).describe('AWS secret access key'),\n\tregion: z.string().min(1).describe('AWS region for Bedrock AgentCore'),\n\tsession_token: z.string().min(1).optional().describe('Optional session token'),\n\tcode_interpreter_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Code interpreter resource id (default aws.codeinterpreter.v1)')\n})\n\nexport type BedrockAgentCoreCodeInterpreterAuth = z.infer<typeof bedrockAgentCoreCodeInterpreterAuthSchema>\n\nconst sessionId = z.string().min(1).max(40).describe('Code interpreter session id')\n\nexport const startSessionInputSchema = z.object({\n\tname: z.string().min(1).max(100).optional().describe('Optional session name'),\n\tsession_timeout_seconds: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(28_800)\n\t\t.optional()\n\t\t.describe('Session TTL in seconds (default provider-side, max 8 hours)')\n})\n\nexport const sessionIdInputSchema = z.object({\n\tsession_id: sessionId\n})\n\nexport const sessionOutputSchema = z.object({\n\tsession_id: z.string().describe('Session id'),\n\tcode_interpreter_id: z.string().optional().describe('Interpreter id'),\n\tcreated_at: z.string().optional().describe('Creation timestamp when returned'),\n\tstatus: z.string().optional().describe('Session status when returned')\n})\n\nexport const executeCodeInputSchema = z.object({\n\tsession_id: sessionId,\n\tcode: z.string().min(1).max(MAX_CODE_CHARS).describe('Source code to execute'),\n\tlanguage: z.string().min(1).max(40).optional().describe('Language (default python)')\n})\n\nexport const executeCommandInputSchema = z.object({\n\tsession_id: sessionId,\n\tcommand: z.string().min(1).max(MAX_COMMAND_CHARS).describe('Shell command to run')\n})\n\nexport const startCommandInputSchema = executeCommandInputSchema\n\nexport const taskIdInputSchema = z.object({\n\tsession_id: sessionId,\n\ttask_id: z.string().min(1).max(200).describe('Async task id from start-command')\n})\n\nexport const listFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tdirectory_path: z.string().max(1024).optional().describe('Directory path (default session root)')\n})\n\nexport const readFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tpaths: z.array(z.string().min(1).max(1024)).min(1).max(MAX_FILE_PATHS).describe('File paths to read')\n})\n\nexport const writeFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tfiles: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tpath: z.string().min(1).max(1024).describe('Path to write'),\n\t\t\t\ttext: z.string().max(MAX_FILE_TEXT).describe('Utf8 file contents')\n\t\t\t})\n\t\t)\n\t\t.min(1)\n\t\t.max(MAX_WRITE_FILES)\n\t\t.describe('Files to write')\n})\n\nexport const removeFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tpaths: z.array(z.string().min(1).max(1024)).min(1).max(MAX_FILE_PATHS).describe('Paths to remove')\n})\n\nexport const invokeResultSchema = z.object({\n\tsession_id: z.string(),\n\tname: z.string().describe('Invoke tool name'),\n\tresult: z.unknown().optional().describe('Provider result payload'),\n\traw: z.unknown().optional().describe('Full provider response when useful')\n})\n\nexport type StartSessionInput = z.infer<typeof startSessionInputSchema>\nexport type SessionIdInput = z.infer<typeof sessionIdInputSchema>\nexport type SessionOutput = z.infer<typeof sessionOutputSchema>\nexport type ExecuteCodeInput = z.infer<typeof executeCodeInputSchema>\nexport type ExecuteCommandInput = z.infer<typeof executeCommandInputSchema>\nexport type StartCommandInput = z.infer<typeof startCommandInputSchema>\nexport type TaskIdInput = z.infer<typeof taskIdInputSchema>\nexport type ListFilesInput = z.infer<typeof listFilesInputSchema>\nexport type ReadFilesInput = z.infer<typeof readFilesInputSchema>\nexport type WriteFilesInput = z.infer<typeof writeFilesInputSchema>\nexport type RemoveFilesInput = z.infer<typeof removeFilesInputSchema>\nexport type InvokeResult = z.infer<typeof invokeResultSchema>\n","/**\n * Bedrock AgentCore Code Interpreter client (AwsService SigV4).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { AwsService } from '../../transport/aws-service'\nimport type { AwsServiceOptions } from '../../transport/aws-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tBedrockAgentCoreCodeInterpreterAuth,\n\tExecuteCodeInput,\n\tExecuteCommandInput,\n\tInvokeResult,\n\tListFilesInput,\n\tReadFilesInput,\n\tRemoveFilesInput,\n\tSessionIdInput,\n\tSessionOutput,\n\tStartCommandInput,\n\tStartSessionInput,\n\tTaskIdInput,\n\tWriteFilesInput\n} from './contracts'\nimport { DEFAULT_CODE_INTERPRETER_ID, bedrockAgentCoreCodeInterpreterAuthSchema } from './contracts'\n\nexport type BedrockAgentCoreCodeInterpreterClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class BedrockAgentCoreCodeInterpreterClient {\n\treadonly #auth: BedrockAgentCoreCodeInterpreterAuth\n\treadonly #aws: AwsService\n\treadonly #interpreterId: string\n\n\tconstructor(auth: BedrockAgentCoreCodeInterpreterAuth, options: BedrockAgentCoreCodeInterpreterClientOptions = {}) {\n\t\tconst parsed = bedrockAgentCoreCodeInterpreterAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Bedrock AgentCore Code Interpreter auth', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#interpreterId = this.#auth.code_interpreter_id ?? DEFAULT_CODE_INTERPRETER_ID\n\t\tconst awsOptions: AwsServiceOptions = {\n\t\t\taccessKeyId: this.#auth.access_key_id,\n\t\t\tsecretAccessKey: this.#auth.secret_access_key,\n\t\t\tregion: this.#auth.region,\n\t\t\tservice: 'bedrock-agentcore',\n\t\t\tbaseURL: `https://bedrock-agentcore.${this.#auth.region}.amazonaws.com`,\n\t\t\tlabel: 'Bedrock AgentCore Code Interpreter'\n\t\t}\n\t\tif (options.fetch) awsOptions.fetch = options.fetch\n\t\tif (options.signal) awsOptions.signal = options.signal\n\t\tif (this.#auth.session_token) awsOptions.sessionToken = this.#auth.session_token\n\t\tthis.#aws = new AwsService(awsOptions)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): BedrockAgentCoreCodeInterpreterClient {\n\t\tconst auth = requireAuth(ctx, bedrockAgentCoreCodeInterpreterAuthSchema)\n\t\tconst options: BedrockAgentCoreCodeInterpreterClientOptions = {}\n\t\tif (ctx.fetch) options.fetch = ctx.fetch\n\t\tif (ctx.signal) options.signal = ctx.signal\n\t\treturn new BedrockAgentCoreCodeInterpreterClient(auth, options)\n\t}\n\n\t#base(): string {\n\t\treturn `/code-interpreters/${encodeURIComponent(this.#interpreterId)}`\n\t}\n\n\tasync startSession(input: StartSessionInput = {}): Promise<SessionOutput> {\n\t\tconst body: Record<string, unknown> = {}\n\t\tif (input.name) body['name'] = input.name\n\t\tif (input.session_timeout_seconds !== undefined) body['sessionTimeoutSeconds'] = input.session_timeout_seconds\n\t\tconst { data } = await this.#aws.put(`${this.#base()}/sessions/start`, body)\n\t\treturn this.#mapSession(data)\n\t}\n\n\tasync stopSession(input: SessionIdInput): Promise<SessionOutput> {\n\t\tconst { data } = await this.#aws.put(\n\t\t\t`${this.#base()}/sessions/stop?sessionId=${encodeURIComponent(input.session_id)}`,\n\t\t\t{}\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\tasync getSession(input: SessionIdInput): Promise<SessionOutput> {\n\t\tconst { data } = await this.#aws.get(\n\t\t\t`${this.#base()}/sessions/get?sessionId=${encodeURIComponent(input.session_id)}`\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\tasync executeCode(input: ExecuteCodeInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'executeCode', {\n\t\t\tlanguage: input.language ?? 'python',\n\t\t\tcode: input.code\n\t\t})\n\t}\n\n\tasync executeCommand(input: ExecuteCommandInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'executeCommand', { command: input.command })\n\t}\n\n\tasync startCommand(input: StartCommandInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'startCommandExecution', { command: input.command })\n\t}\n\n\tasync getTask(input: TaskIdInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'getTask', { taskId: input.task_id })\n\t}\n\n\tasync stopTask(input: TaskIdInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'stopTask', { taskId: input.task_id })\n\t}\n\n\tasync listFiles(input: ListFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'listFiles', {\n\t\t\tdirectoryPath: input.directory_path ?? ''\n\t\t})\n\t}\n\n\tasync readFiles(input: ReadFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'readFiles', { paths: input.paths })\n\t}\n\n\tasync writeFiles(input: WriteFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'writeFiles', {\n\t\t\tcontent: input.files.map((f) => ({ path: f.path, text: f.text }))\n\t\t})\n\t}\n\n\tasync removeFiles(input: RemoveFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'removeFiles', { paths: input.paths })\n\t}\n\n\tasync #invoke(sessionId: string, name: string, args: Record<string, unknown>): Promise<InvokeResult> {\n\t\tconst { data } = await this.#aws.post(\n\t\t\t`${this.#base()}/tools/invoke`,\n\t\t\t{ name, arguments: args },\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\t'x-amzn-code-interpreter-session-id': sessionId,\n\t\t\t\t\tAccept: 'application/json'\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t\tconst out: InvokeResult = { session_id: sessionId, name, raw: data }\n\t\tif (isPlainObject(data)) {\n\t\t\tif ('result' in data) out.result = data['result']\n\t\t\telse out.result = data\n\t\t} else {\n\t\t\tout.result = data\n\t\t}\n\t\treturn out\n\t}\n\n\t#mapSession(data: unknown, fallbackSessionId?: string): SessionOutput {\n\t\tif (!isPlainObject(data)) {\n\t\t\tif (fallbackSessionId) return { session_id: fallbackSessionId, code_interpreter_id: this.#interpreterId }\n\t\t\tthrow new ToolError('Unexpected session response', { code: 'upstream' })\n\t\t}\n\t\tconst sessionId = isString(data['sessionId']) ? data['sessionId'] : fallbackSessionId\n\t\tif (!sessionId) throw new ToolError('Session response missing sessionId', { code: 'upstream' })\n\t\tconst out: SessionOutput = {\n\t\t\tsession_id: sessionId,\n\t\t\tcode_interpreter_id: isString(data['codeInterpreterIdentifier'])\n\t\t\t\t? data['codeInterpreterIdentifier']\n\t\t\t\t: this.#interpreterId\n\t\t}\n\t\tif (isString(data['createdAt'])) out.created_at = data['createdAt']\n\t\tif (isString(data['status'])) out.status = data['status']\n\t\treturn out\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { BedrockAgentCoreCodeInterpreterClient } from './client'\nimport {\n\tbedrockAgentCoreCodeInterpreterAuthSchema,\n\texecuteCodeInputSchema,\n\texecuteCommandInputSchema,\n\tinvokeResultSchema,\n\tlistFilesInputSchema,\n\treadFilesInputSchema,\n\tremoveFilesInputSchema,\n\tsessionIdInputSchema,\n\tsessionOutputSchema,\n\tstartCommandInputSchema,\n\tstartSessionInputSchema,\n\ttaskIdInputSchema,\n\twriteFilesInputSchema\n} from './contracts'\n\nconst id = 'bedrock-agentcore-code-interpreter'\n\nexport const bedrockAgentCoreCodeInterpreterStartSessionTool = defineTool({\n\tid: `${id}-start-session`,\n\tname: 'bedrockAgentCoreCodeInterpreterStartSession',\n\tdescription:\n\t\t'Start a Bedrock AgentCore code interpreter session and return session_id. Use only when arbitrary code, commands, or temporary files are required and no purpose-built tool covers the task. Do not start it to build or edit supported deliverables.',\n\tinputSchema: startSessionInputSchema,\n\toutputSchema: sessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).startSession(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterStopSessionTool = defineTool({\n\tid: `${id}-stop-session`,\n\tname: 'bedrockAgentCoreCodeInterpreterStopSession',\n\tdescription:\n\t\t'Stop a Bedrock AgentCore code interpreter session by session_id and release temporary resources. Call after interpreter work is complete.',\n\tinputSchema: sessionIdInputSchema,\n\toutputSchema: sessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).stopSession(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterGetSessionTool = defineTool({\n\tid: `${id}-get-session`,\n\tname: 'bedrockAgentCoreCodeInterpreterGetSession',\n\tdescription:\n\t\t'Get status and metadata for a Bedrock AgentCore code interpreter session. Use before continuing work on an existing session; this does not execute code.',\n\tinputSchema: sessionIdInputSchema,\n\toutputSchema: sessionOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).getSession(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterExecuteCodeTool = defineTool({\n\tid: `${id}-execute-code`,\n\tname: 'bedrockAgentCoreCodeInterpreterExecuteCode',\n\tdescription:\n\t\t'Execute code in an active Bedrock AgentCore session. Use as a fallback for computation or automation with no dedicated tool. Do not replace purpose-built document, spreadsheet, presentation, PDF, image, render, or conversion tools.',\n\tinputSchema: executeCodeInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).executeCode(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterExecuteCommandTool = defineTool({\n\tid: `${id}-execute-command`,\n\tname: 'bedrockAgentCoreCodeInterpreterExecuteCommand',\n\tdescription:\n\t\t'Run a shell command in an active Bedrock AgentCore session. Use as a fallback for command-line work with no dedicated tool. Do not generate supported deliverables with command-line libraries when a purpose-built tool exists.',\n\tinputSchema: executeCommandInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).executeCommand(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterStartCommandTool = defineTool({\n\tid: `${id}-start-command`,\n\tname: 'bedrockAgentCoreCodeInterpreterStartCommand',\n\tdescription:\n\t\t'Start a long-running command in an active Bedrock AgentCore session and return a task id. Use only for fallback command work that exceeds one call; poll with get-task.',\n\tinputSchema: startCommandInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).startCommand(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterGetTaskTool = defineTool({\n\tid: `${id}-get-task`,\n\tname: 'bedrockAgentCoreCodeInterpreterGetTask',\n\tdescription:\n\t\t'Get the status or result of an asynchronous Bedrock AgentCore command task. Use only with a task id returned by start-command; this does not start new work.',\n\tinputSchema: taskIdInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).getTask(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterStopTaskTool = defineTool({\n\tid: `${id}-stop-task`,\n\tname: 'bedrockAgentCoreCodeInterpreterStopTask',\n\tdescription:\n\t\t'Stop an asynchronous Bedrock AgentCore command task. Use only with a task id returned by start-command when the running work should be cancelled.',\n\tinputSchema: taskIdInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).stopTask(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterListFilesTool = defineTool({\n\tid: `${id}-list-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterListFiles',\n\tdescription:\n\t\t'List temporary files in a Bedrock AgentCore session directory. Use to locate interpreter intermediates, not durable workspace files or ArtifactRefs.',\n\tinputSchema: listFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).listFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterReadFilesTool = defineTool({\n\tid: `${id}-read-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterReadFiles',\n\tdescription:\n\t\t'Read temporary files from a Bedrock AgentCore session by path. Use only within the interpreter workflow; use format-aware readers for supported ArtifactRefs.',\n\tinputSchema: readFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).readFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterWriteFilesTool = defineTool({\n\tid: `${id}-write-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterWriteFiles',\n\tdescription:\n\t\t'Write temporary text files into a Bedrock AgentCore session for intermediate computation. Do not use this as a final document builder or durable artifact store.',\n\tinputSchema: writeFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).writeFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterRemoveFilesTool = defineTool({\n\tid: `${id}-remove-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterRemoveFiles',\n\tdescription:\n\t\t'Remove temporary files from a Bedrock AgentCore session by path. Use only for interpreter cleanup; this does not delete durable workspace files or ArtifactRefs.',\n\tinputSchema: removeFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).removeFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterModule = defineModule({\n\tid,\n\ttitle: 'Bedrock AgentCore Code Interpreter',\n\tdescription:\n\t\t'General-purpose Bedrock AgentCore execution fallback for arbitrary code, commands, and temporary files when no purpose-built tool covers the task.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: bedrockAgentCoreCodeInterpreterAuthSchema },\n\tcategories: ['compute', 'sandbox', 'aws'],\n\tclassification: 'standard',\n\ttags: ['agentcore', 'exec'],\n\ttools: [\n\t\tbedrockAgentCoreCodeInterpreterStartSessionTool,\n\t\tbedrockAgentCoreCodeInterpreterStopSessionTool,\n\t\tbedrockAgentCoreCodeInterpreterGetSessionTool,\n\t\tbedrockAgentCoreCodeInterpreterExecuteCodeTool,\n\t\tbedrockAgentCoreCodeInterpreterExecuteCommandTool,\n\t\tbedrockAgentCoreCodeInterpreterStartCommandTool,\n\t\tbedrockAgentCoreCodeInterpreterGetTaskTool,\n\t\tbedrockAgentCoreCodeInterpreterStopTaskTool,\n\t\tbedrockAgentCoreCodeInterpreterListFilesTool,\n\t\tbedrockAgentCoreCodeInterpreterReadFilesTool,\n\t\tbedrockAgentCoreCodeInterpreterWriteFilesTool,\n\t\tbedrockAgentCoreCodeInterpreterRemoveFilesTool\n\t]\n})\n"],"mappings":";;;;;;;;;;AAMA,MAAa,8BAA8B;AAC3C,MAAa,iBAAiB;AAC9B,MAAa,oBAAoB;AACjC,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB;AAC/B,MAAa,gBAAgB;AAE7B,MAAa,4CAA4C,EAAE,OAAO;CACjE,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,mBAAmB;CAC7D,mBAAmB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,uBAAuB;CACrE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,kCAAkC;CACrE,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,wBAAwB;CAC7E,qBAAqB,EACnB,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,+DAA+D;AAC3E,CAAC;AAID,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,6BAA6B;AAElF,MAAa,0BAA0B,EAAE,OAAO;CAC/C,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,uBAAuB;CAC5E,yBAAyB,EACvB,IAAI,CAAC,CACL,IAAI,CAAC,CAAC,CACN,IAAI,KAAM,CAAC,CACX,SAAS,CAAC,CACV,SAAS,6DAA6D;AACzE,CAAC;AAED,MAAa,uBAAuB,EAAE,OAAO,EAC5C,YAAY,UACb,CAAC;AAED,MAAa,sBAAsB,EAAE,OAAO;CAC3C,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS,YAAY;CAC5C,qBAAqB,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,gBAAgB;CACpE,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,kCAAkC;CAC7E,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AACtE,CAAC;AAED,MAAa,yBAAyB,EAAE,OAAO;CAC9C,YAAY;CACZ,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,SAAS,wBAAwB;CAC7E,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,2BAA2B;AACpF,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO;CACjD,YAAY;CACZ,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,SAAS,sBAAsB;AAClF,CAAC;AAED,MAAa,0BAA0B;AAEvC,MAAa,oBAAoB,EAAE,OAAO;CACzC,YAAY;CACZ,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,kCAAkC;AAChF,CAAC;AAED,MAAa,uBAAuB,EAAE,OAAO;CAC5C,YAAY;CACZ,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,uCAAuC;AACjG,CAAC;AAED,MAAa,uBAAuB,EAAE,OAAO;CAC5C,YAAY;CACZ,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,EAAkB,CAAC,CAAC,SAAS,oBAAoB;AACrG,CAAC;AAED,MAAa,wBAAwB,EAAE,OAAO;CAC7C,YAAY;CACZ,OAAO,EACL,MACA,EAAE,OAAO;EACR,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,eAAe;EAC1D,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,SAAS,oBAAoB;CAClE,CAAC,CACF,CAAC,CACA,IAAI,CAAC,CAAC,CACN,IAAA,EAAmB,CAAC,CACpB,SAAS,gBAAgB;AAC5B,CAAC;AAED,MAAa,yBAAyB,EAAE,OAAO;CAC9C,YAAY;CACZ,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,EAAkB,CAAC,CAAC,SAAS,iBAAiB;AAClG,CAAC;AAED,MAAa,qBAAqB,EAAE,OAAO;CAC1C,YAAY,EAAE,OAAO;CACrB,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,kBAAkB;CAC5C,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,yBAAyB;CACjE,KAAK,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,oCAAoC;AAC1E,CAAC;;;;;;ACvED,IAAa,wCAAb,MAAa,sCAAsC;CAClD;CACA;CACA;CAEA,YAAY,MAA2C,UAAwD,CAAC,GAAG;EAClH,MAAM,SAAS,0CAA0C,UAAU,IAAI;EACvE,IAAI,CAAC,OAAO,SACX,MAAM,IAAI,UAAU,mDAAmD;GACtE,MAAM;GACN,SAAS,EAAE,QAAQ,OAAO,MAAM,OAAO,KAAK,UAAU,MAAM,OAAO,EAAE;EACtE,CAAC;EAEF,KAAKA,QAAQ,OAAO;EACpB,KAAKE,iBAAiB,KAAKF,MAAM,uBAAA;EACjC,MAAM,aAAgC;GACrC,aAAa,KAAKA,MAAM;GACxB,iBAAiB,KAAKA,MAAM;GAC5B,QAAQ,KAAKA,MAAM;GACnB,SAAS;GACT,SAAS,6BAA6B,KAAKA,MAAM,OAAO;GACxD,OAAO;EACR;EACA,IAAI,QAAQ,OAAO,WAAW,QAAQ,QAAQ;EAC9C,IAAI,QAAQ,QAAQ,WAAW,SAAS,QAAQ;EAChD,IAAI,KAAKA,MAAM,eAAe,WAAW,eAAe,KAAKA,MAAM;EACnE,KAAKC,OAAO,IAAI,WAAW,UAAU;CACtC;CAEA,OAAO,YAAY,KAAyD;EAC3E,MAAM,OAAO,YAAY,KAAK,yCAAyC;EACvE,MAAM,UAAwD,CAAC;EAC/D,IAAI,IAAI,OAAO,QAAQ,QAAQ,IAAI;EACnC,IAAI,IAAI,QAAQ,QAAQ,SAAS,IAAI;EACrC,OAAO,IAAI,sCAAsC,MAAM,OAAO;CAC/D;CAEA,QAAgB;EACf,OAAO,sBAAsB,mBAAmB,KAAKC,cAAc;CACpE;CAEA,MAAM,aAAa,QAA2B,CAAC,GAA2B;EACzE,MAAM,OAAgC,CAAC;EACvC,IAAI,MAAM,MAAM,KAAK,UAAU,MAAM;EACrC,IAAI,MAAM,4BAA4B,KAAA,GAAW,KAAK,2BAA2B,MAAM;EACvF,MAAM,EAAE,SAAS,MAAM,KAAKD,KAAK,IAAI,GAAG,KAAKE,MAAM,EAAE,kBAAkB,IAAI;EAC3E,OAAO,KAAKC,YAAY,IAAI;CAC7B;CAEA,MAAM,YAAY,OAA+C;EAChE,MAAM,EAAE,SAAS,MAAM,KAAKH,KAAK,IAChC,GAAG,KAAKE,MAAM,EAAE,2BAA2B,mBAAmB,MAAM,UAAU,KAC9E,CAAC,CACF;EACA,OAAO,KAAKC,YAAY,MAAM,MAAM,UAAU;CAC/C;CAEA,MAAM,WAAW,OAA+C;EAC/D,MAAM,EAAE,SAAS,MAAM,KAAKH,KAAK,IAChC,GAAG,KAAKE,MAAM,EAAE,0BAA0B,mBAAmB,MAAM,UAAU,GAC9E;EACA,OAAO,KAAKC,YAAY,MAAM,MAAM,UAAU;CAC/C;CAEA,MAAM,YAAY,OAAgD;EACjE,OAAO,KAAKC,QAAQ,MAAM,YAAY,eAAe;GACpD,UAAU,MAAM,YAAY;GAC5B,MAAM,MAAM;EACb,CAAC;CACF;CAEA,MAAM,eAAe,OAAmD;EACvE,OAAO,KAAKA,QAAQ,MAAM,YAAY,kBAAkB,EAAE,SAAS,MAAM,QAAQ,CAAC;CACnF;CAEA,MAAM,aAAa,OAAiD;EACnE,OAAO,KAAKA,QAAQ,MAAM,YAAY,yBAAyB,EAAE,SAAS,MAAM,QAAQ,CAAC;CAC1F;CAEA,MAAM,QAAQ,OAA2C;EACxD,OAAO,KAAKA,QAAQ,MAAM,YAAY,WAAW,EAAE,QAAQ,MAAM,QAAQ,CAAC;CAC3E;CAEA,MAAM,SAAS,OAA2C;EACzD,OAAO,KAAKA,QAAQ,MAAM,YAAY,YAAY,EAAE,QAAQ,MAAM,QAAQ,CAAC;CAC5E;CAEA,MAAM,UAAU,OAA8C;EAC7D,OAAO,KAAKA,QAAQ,MAAM,YAAY,aAAa,EAClD,eAAe,MAAM,kBAAkB,GACxC,CAAC;CACF;CAEA,MAAM,UAAU,OAA8C;EAC7D,OAAO,KAAKA,QAAQ,MAAM,YAAY,aAAa,EAAE,OAAO,MAAM,MAAM,CAAC;CAC1E;CAEA,MAAM,WAAW,OAA+C;EAC/D,OAAO,KAAKA,QAAQ,MAAM,YAAY,cAAc,EACnD,SAAS,MAAM,MAAM,KAAK,OAAO;GAAE,MAAM,EAAE;GAAM,MAAM,EAAE;EAAK,EAAE,EACjE,CAAC;CACF;CAEA,MAAM,YAAY,OAAgD;EACjE,OAAO,KAAKA,QAAQ,MAAM,YAAY,eAAe,EAAE,OAAO,MAAM,MAAM,CAAC;CAC5E;CAEA,MAAMA,QAAQ,WAAmB,MAAc,MAAsD;EACpG,MAAM,EAAE,SAAS,MAAM,KAAKJ,KAAK,KAChC,GAAG,KAAKE,MAAM,EAAE,gBAChB;GAAE;GAAM,WAAW;EAAK,GACxB,EACC,SAAS;GACR,sCAAsC;GACtC,QAAQ;EACT,EACD,CACD;EACA,MAAM,MAAoB;GAAE,YAAY;GAAW;GAAM,KAAK;EAAK;EACnE,IAAI,cAAc,IAAI,GACrB,IAAI,YAAY,MAAM,IAAI,SAAS,KAAK;OACnC,IAAI,SAAS;OAElB,IAAI,SAAS;EAEd,OAAO;CACR;CAEA,YAAY,MAAe,mBAA2C;EACrE,IAAI,CAAC,cAAc,IAAI,GAAG;GACzB,IAAI,mBAAmB,OAAO;IAAE,YAAY;IAAmB,qBAAqB,KAAKD;GAAe;GACxG,MAAM,IAAI,UAAU,+BAA+B,EAAE,MAAM,WAAW,CAAC;EACxE;EACA,MAAM,YAAY,SAAS,KAAK,YAAY,IAAI,KAAK,eAAe;EACpE,IAAI,CAAC,WAAW,MAAM,IAAI,UAAU,sCAAsC,EAAE,MAAM,WAAW,CAAC;EAC9F,MAAM,MAAqB;GAC1B,YAAY;GACZ,qBAAqB,SAAS,KAAK,4BAA4B,IAC5D,KAAK,+BACL,KAAKA;EACT;EACA,IAAI,SAAS,KAAK,YAAY,GAAG,IAAI,aAAa,KAAK;EACvD,IAAI,SAAS,KAAK,SAAS,GAAG,IAAI,SAAS,KAAK;EAChD,OAAO;CACR;AACD;;;AC9JA,MAAM,KAAK;AAEX,MAAa,kDAAkD,WAAW;CACzE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,aAAa,KAAK;AACzG,CAAC;AAED,MAAa,iDAAiD,WAAW;CACxE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,YAAY,KAAK;AACxG,CAAC;AAED,MAAa,gDAAgD,WAAW;CACvE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,WAAW,KAAK;AACvG,CAAC;AAED,MAAa,iDAAiD,WAAW;CACxE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,YAAY,KAAK;AACxG,CAAC;AAED,MAAa,oDAAoD,WAAW;CAC3E,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,eAAe,KAAK;AAC3G,CAAC;AAED,MAAa,kDAAkD,WAAW;CACzE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,aAAa,KAAK;AACzG,CAAC;AAED,MAAa,6CAA6C,WAAW;CACpE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,QAAQ,KAAK;AACpG,CAAC;AAED,MAAa,8CAA8C,WAAW;CACrE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,SAAS,KAAK;AACrG,CAAC;AAED,MAAa,+CAA+C,WAAW;CACtE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,UAAU,KAAK;AACtG,CAAC;AAED,MAAa,+CAA+C,WAAW;CACtE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,UAAU,KAAK;AACtG,CAAC;AAED,MAAa,gDAAgD,WAAW;CACvE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,WAAW,KAAK;AACvG,CAAC;AAED,MAAa,iDAAiD,WAAW;CACxE,IAAI,GAAG,GAAG;CACV,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,sCAAsC,YAAY,GAAG,CAAC,CAAC,YAAY,KAAK;AACxG,CAAC;AAED,MAAa,wCAAwC,aAAa;CACjE;CACA,OAAO;CACP,aACC;CACD,SAAS;CACT,MAAM;EAAE,MAAM;EAAU,QAAQ;CAA0C;CAC1E,YAAY;EAAC;EAAW;EAAW;CAAK;CACxC,gBAAgB;CAChB,MAAM,CAAC,aAAa,MAAM;CAC1B,OAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;AACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"bedrock-agentcore-code-interpreter-Doon_lrN.js","names":["#auth","#aws","#interpreterId","#base","#mapSession","#invoke"],"sources":["../src/vendors/bedrock-agentcore-code-interpreter/contracts.ts","../src/vendors/bedrock-agentcore-code-interpreter/client.ts","../src/vendors/bedrock-agentcore-code-interpreter/module.ts"],"sourcesContent":["/**\n * Amazon Bedrock AgentCore Code Interpreter contracts.\n */\n\nimport { z } from 'zod'\n\nexport const DEFAULT_CODE_INTERPRETER_ID = 'aws.codeinterpreter.v1'\nexport const MAX_CODE_CHARS = 200_000\nexport const MAX_COMMAND_CHARS = 20_000\nexport const MAX_FILE_PATHS = 50\nexport const MAX_WRITE_FILES = 20\nexport const MAX_FILE_TEXT = 500_000\n\nexport const bedrockAgentCoreCodeInterpreterAuthSchema = z.object({\n\taccess_key_id: z.string().min(1).describe('AWS access key id'),\n\tsecret_access_key: z.string().min(1).describe('AWS secret access key'),\n\tregion: z.string().min(1).describe('AWS region for Bedrock AgentCore'),\n\tsession_token: z.string().min(1).optional().describe('Optional session token'),\n\tcode_interpreter_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Code interpreter resource id (default aws.codeinterpreter.v1)')\n})\n\nexport type BedrockAgentCoreCodeInterpreterAuth = z.infer<typeof bedrockAgentCoreCodeInterpreterAuthSchema>\n\nconst sessionId = z.string().min(1).max(40).describe('Code interpreter session id')\n\nexport const startSessionInputSchema = z.object({\n\tname: z.string().min(1).max(100).optional().describe('Optional session name'),\n\tsession_timeout_seconds: z\n\t\t.int()\n\t\t.min(1)\n\t\t.max(28_800)\n\t\t.optional()\n\t\t.describe('Session TTL in seconds (default provider-side, max 8 hours)')\n})\n\nexport const sessionIdInputSchema = z.object({\n\tsession_id: sessionId\n})\n\nexport const sessionOutputSchema = z.object({\n\tsession_id: z.string().describe('Session id'),\n\tcode_interpreter_id: z.string().optional().describe('Interpreter id'),\n\tcreated_at: z.string().optional().describe('Creation timestamp when returned'),\n\tstatus: z.string().optional().describe('Session status when returned')\n})\n\nexport const executeCodeInputSchema = z.object({\n\tsession_id: sessionId,\n\tcode: z.string().min(1).max(MAX_CODE_CHARS).describe('Source code to execute'),\n\tlanguage: z.string().min(1).max(40).optional().describe('Language (default python)')\n})\n\nexport const executeCommandInputSchema = z.object({\n\tsession_id: sessionId,\n\tcommand: z.string().min(1).max(MAX_COMMAND_CHARS).describe('Shell command to run')\n})\n\nexport const startCommandInputSchema = executeCommandInputSchema\n\nexport const taskIdInputSchema = z.object({\n\tsession_id: sessionId,\n\ttask_id: z.string().min(1).max(200).describe('Async task id from start-command')\n})\n\nexport const listFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tdirectory_path: z.string().max(1024).optional().describe('Directory path (default session root)')\n})\n\nexport const readFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tpaths: z.array(z.string().min(1).max(1024)).min(1).max(MAX_FILE_PATHS).describe('File paths to read')\n})\n\nexport const writeFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tfiles: z\n\t\t.array(\n\t\t\tz.object({\n\t\t\t\tpath: z.string().min(1).max(1024).describe('Path to write'),\n\t\t\t\ttext: z.string().max(MAX_FILE_TEXT).describe('Utf8 file contents')\n\t\t\t})\n\t\t)\n\t\t.min(1)\n\t\t.max(MAX_WRITE_FILES)\n\t\t.describe('Files to write')\n})\n\nexport const removeFilesInputSchema = z.object({\n\tsession_id: sessionId,\n\tpaths: z.array(z.string().min(1).max(1024)).min(1).max(MAX_FILE_PATHS).describe('Paths to remove')\n})\n\nexport const invokeResultSchema = z.object({\n\tsession_id: z.string(),\n\tname: z.string().describe('Invoke tool name'),\n\tresult: z.unknown().optional().describe('Provider result payload'),\n\traw: z.unknown().optional().describe('Full provider response when useful')\n})\n\nexport type StartSessionInput = z.infer<typeof startSessionInputSchema>\nexport type SessionIdInput = z.infer<typeof sessionIdInputSchema>\nexport type SessionOutput = z.infer<typeof sessionOutputSchema>\nexport type ExecuteCodeInput = z.infer<typeof executeCodeInputSchema>\nexport type ExecuteCommandInput = z.infer<typeof executeCommandInputSchema>\nexport type StartCommandInput = z.infer<typeof startCommandInputSchema>\nexport type TaskIdInput = z.infer<typeof taskIdInputSchema>\nexport type ListFilesInput = z.infer<typeof listFilesInputSchema>\nexport type ReadFilesInput = z.infer<typeof readFilesInputSchema>\nexport type WriteFilesInput = z.infer<typeof writeFilesInputSchema>\nexport type RemoveFilesInput = z.infer<typeof removeFilesInputSchema>\nexport type InvokeResult = z.infer<typeof invokeResultSchema>\n","/**\n * Bedrock AgentCore Code Interpreter client (AwsService SigV4).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { AwsService } from '../../transport/aws-service'\nimport type { AwsServiceOptions } from '../../transport/aws-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tBedrockAgentCoreCodeInterpreterAuth,\n\tExecuteCodeInput,\n\tExecuteCommandInput,\n\tInvokeResult,\n\tListFilesInput,\n\tReadFilesInput,\n\tRemoveFilesInput,\n\tSessionIdInput,\n\tSessionOutput,\n\tStartCommandInput,\n\tStartSessionInput,\n\tTaskIdInput,\n\tWriteFilesInput\n} from './contracts'\nimport { DEFAULT_CODE_INTERPRETER_ID, bedrockAgentCoreCodeInterpreterAuthSchema } from './contracts'\n\nexport type BedrockAgentCoreCodeInterpreterClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class BedrockAgentCoreCodeInterpreterClient {\n\treadonly #auth: BedrockAgentCoreCodeInterpreterAuth\n\treadonly #aws: AwsService\n\treadonly #interpreterId: string\n\n\tconstructor(auth: BedrockAgentCoreCodeInterpreterAuth, options: BedrockAgentCoreCodeInterpreterClientOptions = {}) {\n\t\tconst parsed = bedrockAgentCoreCodeInterpreterAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Bedrock AgentCore Code Interpreter auth', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#interpreterId = this.#auth.code_interpreter_id ?? DEFAULT_CODE_INTERPRETER_ID\n\t\tconst awsOptions: AwsServiceOptions = {\n\t\t\taccessKeyId: this.#auth.access_key_id,\n\t\t\tsecretAccessKey: this.#auth.secret_access_key,\n\t\t\tregion: this.#auth.region,\n\t\t\tservice: 'bedrock-agentcore',\n\t\t\tbaseURL: `https://bedrock-agentcore.${this.#auth.region}.amazonaws.com`,\n\t\t\tlabel: 'Bedrock AgentCore Code Interpreter'\n\t\t}\n\t\tif (options.fetch) awsOptions.fetch = options.fetch\n\t\tif (options.signal) awsOptions.signal = options.signal\n\t\tif (this.#auth.session_token) awsOptions.sessionToken = this.#auth.session_token\n\t\tthis.#aws = new AwsService(awsOptions)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): BedrockAgentCoreCodeInterpreterClient {\n\t\tconst auth = requireAuth(ctx, bedrockAgentCoreCodeInterpreterAuthSchema)\n\t\tconst options: BedrockAgentCoreCodeInterpreterClientOptions = {}\n\t\tif (ctx.fetch) options.fetch = ctx.fetch\n\t\tif (ctx.signal) options.signal = ctx.signal\n\t\treturn new BedrockAgentCoreCodeInterpreterClient(auth, options)\n\t}\n\n\t#base(): string {\n\t\treturn `/code-interpreters/${encodeURIComponent(this.#interpreterId)}`\n\t}\n\n\tasync startSession(input: StartSessionInput = {}): Promise<SessionOutput> {\n\t\tconst body: Record<string, unknown> = {}\n\t\tif (input.name) body['name'] = input.name\n\t\tif (input.session_timeout_seconds !== undefined) body['sessionTimeoutSeconds'] = input.session_timeout_seconds\n\t\tconst { data } = await this.#aws.put(`${this.#base()}/sessions/start`, body)\n\t\treturn this.#mapSession(data)\n\t}\n\n\tasync stopSession(input: SessionIdInput): Promise<SessionOutput> {\n\t\tconst { data } = await this.#aws.put(\n\t\t\t`${this.#base()}/sessions/stop?sessionId=${encodeURIComponent(input.session_id)}`,\n\t\t\t{}\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\tasync getSession(input: SessionIdInput): Promise<SessionOutput> {\n\t\tconst { data } = await this.#aws.get(\n\t\t\t`${this.#base()}/sessions/get?sessionId=${encodeURIComponent(input.session_id)}`\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id)\n\t}\n\n\tasync executeCode(input: ExecuteCodeInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'executeCode', {\n\t\t\tlanguage: input.language ?? 'python',\n\t\t\tcode: input.code\n\t\t})\n\t}\n\n\tasync executeCommand(input: ExecuteCommandInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'executeCommand', { command: input.command })\n\t}\n\n\tasync startCommand(input: StartCommandInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'startCommandExecution', { command: input.command })\n\t}\n\n\tasync getTask(input: TaskIdInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'getTask', { taskId: input.task_id })\n\t}\n\n\tasync stopTask(input: TaskIdInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'stopTask', { taskId: input.task_id })\n\t}\n\n\tasync listFiles(input: ListFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'listFiles', {\n\t\t\tdirectoryPath: input.directory_path ?? ''\n\t\t})\n\t}\n\n\tasync readFiles(input: ReadFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'readFiles', { paths: input.paths })\n\t}\n\n\tasync writeFiles(input: WriteFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'writeFiles', {\n\t\t\tcontent: input.files.map((f) => ({ path: f.path, text: f.text }))\n\t\t})\n\t}\n\n\tasync removeFiles(input: RemoveFilesInput): Promise<InvokeResult> {\n\t\treturn this.#invoke(input.session_id, 'removeFiles', { paths: input.paths })\n\t}\n\n\tasync #invoke(sessionId: string, name: string, args: Record<string, unknown>): Promise<InvokeResult> {\n\t\tconst { data } = await this.#aws.post(\n\t\t\t`${this.#base()}/tools/invoke`,\n\t\t\t{ name, arguments: args },\n\t\t\t{\n\t\t\t\theaders: {\n\t\t\t\t\t'x-amzn-code-interpreter-session-id': sessionId,\n\t\t\t\t\tAccept: 'application/json'\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t\tconst out: InvokeResult = { session_id: sessionId, name, raw: data }\n\t\tif (isPlainObject(data)) {\n\t\t\tif ('result' in data) out.result = data['result']\n\t\t\telse out.result = data\n\t\t} else {\n\t\t\tout.result = data\n\t\t}\n\t\treturn out\n\t}\n\n\t#mapSession(data: unknown, fallbackSessionId?: string): SessionOutput {\n\t\tif (!isPlainObject(data)) {\n\t\t\tif (fallbackSessionId) return { session_id: fallbackSessionId, code_interpreter_id: this.#interpreterId }\n\t\t\tthrow new ToolError('Unexpected session response', { code: 'upstream' })\n\t\t}\n\t\tconst sessionId = isString(data['sessionId']) ? data['sessionId'] : fallbackSessionId\n\t\tif (!sessionId) throw new ToolError('Session response missing sessionId', { code: 'upstream' })\n\t\tconst out: SessionOutput = {\n\t\t\tsession_id: sessionId,\n\t\t\tcode_interpreter_id: isString(data['codeInterpreterIdentifier'])\n\t\t\t\t? data['codeInterpreterIdentifier']\n\t\t\t\t: this.#interpreterId\n\t\t}\n\t\tif (isString(data['createdAt'])) out.created_at = data['createdAt']\n\t\tif (isString(data['status'])) out.status = data['status']\n\t\treturn out\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { BedrockAgentCoreCodeInterpreterClient } from './client'\nimport {\n\tbedrockAgentCoreCodeInterpreterAuthSchema,\n\texecuteCodeInputSchema,\n\texecuteCommandInputSchema,\n\tinvokeResultSchema,\n\tlistFilesInputSchema,\n\treadFilesInputSchema,\n\tremoveFilesInputSchema,\n\tsessionIdInputSchema,\n\tsessionOutputSchema,\n\tstartCommandInputSchema,\n\tstartSessionInputSchema,\n\ttaskIdInputSchema,\n\twriteFilesInputSchema\n} from './contracts'\n\nconst id = 'bedrock-agentcore-code-interpreter'\n\nexport const bedrockAgentCoreCodeInterpreterStartSessionTool = defineTool({\n\tid: `${id}-start-session`,\n\tname: 'bedrockAgentCoreCodeInterpreterStartSession',\n\tdescription:\n\t\t'Start a Bedrock AgentCore code interpreter session and return session_id. Use only when arbitrary code, commands, or temporary files are required and no purpose-built tool covers the task. Do not start it to build or edit supported deliverables.',\n\tinputSchema: startSessionInputSchema,\n\toutputSchema: sessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).startSession(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterStopSessionTool = defineTool({\n\tid: `${id}-stop-session`,\n\tname: 'bedrockAgentCoreCodeInterpreterStopSession',\n\tdescription:\n\t\t'Stop a Bedrock AgentCore code interpreter session by session_id and release temporary resources. Call after interpreter work is complete.',\n\tinputSchema: sessionIdInputSchema,\n\toutputSchema: sessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).stopSession(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterGetSessionTool = defineTool({\n\tid: `${id}-get-session`,\n\tname: 'bedrockAgentCoreCodeInterpreterGetSession',\n\tdescription:\n\t\t'Get status and metadata for a Bedrock AgentCore code interpreter session. Use before continuing work on an existing session; this does not execute code.',\n\tinputSchema: sessionIdInputSchema,\n\toutputSchema: sessionOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).getSession(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterExecuteCodeTool = defineTool({\n\tid: `${id}-execute-code`,\n\tname: 'bedrockAgentCoreCodeInterpreterExecuteCode',\n\tdescription:\n\t\t'Execute code in an active Bedrock AgentCore session. Use as a fallback for computation or automation with no dedicated tool. Do not replace purpose-built document, spreadsheet, presentation, PDF, image, render, or conversion tools.',\n\tinputSchema: executeCodeInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).executeCode(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterExecuteCommandTool = defineTool({\n\tid: `${id}-execute-command`,\n\tname: 'bedrockAgentCoreCodeInterpreterExecuteCommand',\n\tdescription:\n\t\t'Run a shell command in an active Bedrock AgentCore session. Use as a fallback for command-line work with no dedicated tool. Do not generate supported deliverables with command-line libraries when a purpose-built tool exists.',\n\tinputSchema: executeCommandInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).executeCommand(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterStartCommandTool = defineTool({\n\tid: `${id}-start-command`,\n\tname: 'bedrockAgentCoreCodeInterpreterStartCommand',\n\tdescription:\n\t\t'Start a long-running command in an active Bedrock AgentCore session and return a task id. Use only for fallback command work that exceeds one call; poll with get-task.',\n\tinputSchema: startCommandInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).startCommand(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterGetTaskTool = defineTool({\n\tid: `${id}-get-task`,\n\tname: 'bedrockAgentCoreCodeInterpreterGetTask',\n\tdescription:\n\t\t'Get the status or result of an asynchronous Bedrock AgentCore command task. Use only with a task id returned by start-command; this does not start new work.',\n\tinputSchema: taskIdInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).getTask(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterStopTaskTool = defineTool({\n\tid: `${id}-stop-task`,\n\tname: 'bedrockAgentCoreCodeInterpreterStopTask',\n\tdescription:\n\t\t'Stop an asynchronous Bedrock AgentCore command task. Use only with a task id returned by start-command when the running work should be cancelled.',\n\tinputSchema: taskIdInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).stopTask(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterListFilesTool = defineTool({\n\tid: `${id}-list-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterListFiles',\n\tdescription:\n\t\t'List temporary files in a Bedrock AgentCore session directory. Use to locate interpreter intermediates, not durable workspace files or ArtifactRefs.',\n\tinputSchema: listFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).listFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterReadFilesTool = defineTool({\n\tid: `${id}-read-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterReadFiles',\n\tdescription:\n\t\t'Read temporary files from a Bedrock AgentCore session by path. Use only within the interpreter workflow; use format-aware readers for supported ArtifactRefs.',\n\tinputSchema: readFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).readFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterWriteFilesTool = defineTool({\n\tid: `${id}-write-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterWriteFiles',\n\tdescription:\n\t\t'Write temporary text files into a Bedrock AgentCore session for intermediate computation. Do not use this as a final document builder or durable artifact store.',\n\tinputSchema: writeFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).writeFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterRemoveFilesTool = defineTool({\n\tid: `${id}-remove-files`,\n\tname: 'bedrockAgentCoreCodeInterpreterRemoveFiles',\n\tdescription:\n\t\t'Remove temporary files from a Bedrock AgentCore session by path. Use only for interpreter cleanup; this does not delete durable workspace files or ArtifactRefs.',\n\tinputSchema: removeFilesInputSchema,\n\toutputSchema: invokeResultSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => BedrockAgentCoreCodeInterpreterClient.fromContext(ctx).removeFiles(input)\n})\n\nexport const bedrockAgentCoreCodeInterpreterModule = defineModule({\n\tid,\n\ttitle: 'Bedrock AgentCore Code Interpreter',\n\tdescription:\n\t\t'General-purpose Bedrock AgentCore execution fallback for arbitrary code, commands, and temporary files when no purpose-built tool covers the task.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: bedrockAgentCoreCodeInterpreterAuthSchema },\n\tcategories: ['compute', 'sandbox', 'aws'],\n\tclassification: 'standard',\n\ttags: ['agentcore', 'exec'],\n\ttools: [\n\t\tbedrockAgentCoreCodeInterpreterStartSessionTool,\n\t\tbedrockAgentCoreCodeInterpreterStopSessionTool,\n\t\tbedrockAgentCoreCodeInterpreterGetSessionTool,\n\t\tbedrockAgentCoreCodeInterpreterExecuteCodeTool,\n\t\tbedrockAgentCoreCodeInterpreterExecuteCommandTool,\n\t\tbedrockAgentCoreCodeInterpreterStartCommandTool,\n\t\tbedrockAgentCoreCodeInterpreterGetTaskTool,\n\t\tbedrockAgentCoreCodeInterpreterStopTaskTool,\n\t\tbedrockAgentCoreCodeInterpreterListFilesTool,\n\t\tbedrockAgentCoreCodeInterpreterReadFilesTool,\n\t\tbedrockAgentCoreCodeInterpreterWriteFilesTool,\n\t\tbedrockAgentCoreCodeInterpreterRemoveFilesTool\n\t]\n})\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as ToolError } from "./errors-DoSpNHvs.js";
|
|
2
|
-
import { n as defineModule, r as defineTool } from "./define-
|
|
2
|
+
import { n as defineModule, r as defineTool } from "./define-CbQI8dAN.js";
|
|
3
3
|
import { n as requireAuth } from "./provider-CgDAlg6K.js";
|
|
4
4
|
import { t as artifactRefSchema } from "./artifact-D064mHfK.js";
|
|
5
5
|
import { t as HttpService } from "./http-service-BMBIryAL.js";
|
|
6
|
-
import { m as s3AuthSchema, p as S3Client } from "./s3-
|
|
6
|
+
import { m as s3AuthSchema, p as S3Client } from "./s3-BpivS7pv.js";
|
|
7
7
|
import { isNumber, isPlainObject, isString } from "es-toolkit";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
import { compile } from "html-to-text";
|
|
@@ -425,4 +425,4 @@ const cloudflareBrowserModule = defineModule({
|
|
|
425
425
|
//#endregion
|
|
426
426
|
export { cloudflareBrowserViewportSchema as C, cloudflareBrowserStartSessionInputSchema as S, cloudflareBrowserRenderScreenshotInputSchema as _, cloudflareBrowserStartSessionTool as a, cloudflareBrowserSessionIdInputSchema as b, CloudflareBrowserClient as c, MAX_HTML_CHARS as d, cloudflareBrowserAuthSchema as f, cloudflareBrowserRenderPdfInputSchema as g, cloudflareBrowserRenderOutputSchema as h, cloudflareBrowserRenderScreenshotTool as i, plainTextFromHtml as l, cloudflareBrowserEngineSchema as m, cloudflareBrowserModule as n, cloudflareBrowserStopSessionTool as o, cloudflareBrowserClientAuthSchema as p, cloudflareBrowserRenderPdfTool as r, mintCloudflareBrowserCdpConnection as s, cloudflareBrowserGetSessionTool as t, titleFromHtml as u, cloudflareBrowserRenderSourceSchema as v, cloudflareBrowserSessionOutputSchema as x, cloudflareBrowserSessionAuthSchema as y };
|
|
427
427
|
|
|
428
|
-
//# sourceMappingURL=cloudflare-browser-
|
|
428
|
+
//# sourceMappingURL=cloudflare-browser-Ct8U4_Ru.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-browser-D9pG4RTj.js","names":["#auth","#http","#storage","#engine","#mapSession","#renderAndStore"],"sources":["../src/vendors/cloudflare-browser/contracts.ts","../src/vendors/cloudflare-browser/domain.ts","../src/vendors/cloudflare-browser/client.ts","../src/vendors/cloudflare-browser/cdp.ts","../src/vendors/cloudflare-browser/module.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { s3AuthSchema } from '../s3'\n\nexport const MAX_HTML_CHARS = 2_000_000\n\n/**\n * Cloudflare Browser Run engine (`?browser=`).\n * `chromium` is the product default (omit query). `kitesurf` is the lightweight Workers engine.\n */\nexport const cloudflareBrowserEngineSchema = z\n\t.enum(['chromium', 'kitesurf'])\n\t.describe(\n\t\t'Browser engine: kitesurf for cheaper agent screenshots/HTML extraction; chromium for pixel-perfect or complex sites (default)'\n\t)\n\nexport type CloudflareBrowserEngine = z.infer<typeof cloudflareBrowserEngineSchema>\n\nexport const cloudflareBrowserSessionAuthSchema = z.object({\n\taccount_id: z.string().min(1).describe('Cloudflare account id'),\n\tapi_token: z.string().min(1).describe('Cloudflare API token with Browser Rendering permission'),\n\tbrowser: cloudflareBrowserEngineSchema\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Default Browser Run engine for sessions and quick actions (chromium | kitesurf). Per-call browser overrides this when set.'\n\t\t)\n})\n\nexport const cloudflareBrowserClientAuthSchema = cloudflareBrowserSessionAuthSchema.extend({\n\tstorage: s3AuthSchema.optional().describe('Object storage required for rendered ArtifactRef output')\n})\n\nexport const cloudflareBrowserAuthSchema = cloudflareBrowserSessionAuthSchema.extend({\n\tstorage: s3AuthSchema.describe('Object storage for rendered ArtifactRef output')\n})\n\nexport type CloudflareBrowserAuth = z.infer<typeof cloudflareBrowserAuthSchema>\nexport type CloudflareBrowserClientAuth = z.infer<typeof cloudflareBrowserClientAuthSchema>\nexport type CloudflareBrowserSessionAuth = z.infer<typeof cloudflareBrowserSessionAuthSchema>\n\nexport const cloudflareBrowserStartSessionInputSchema = z.object({\n\tkeep_alive_seconds: z\n\t\t.int()\n\t\t.min(60)\n\t\t.max(600)\n\t\t.optional()\n\t\t.describe('How long the browser session remains available, from 60 to 600 seconds'),\n\tbrowser: cloudflareBrowserEngineSchema.optional().describe('Override auth default engine for this session')\n})\n\nexport const cloudflareBrowserSessionIdInputSchema = z.object({\n\tsession_id: z.string().uuid().describe('Cloudflare browser session id')\n})\n\nexport const cloudflareBrowserSessionOutputSchema = z.object({\n\tsession_id: z.string().describe('Cloudflare browser session id'),\n\tstatus: z.string().optional().describe('Current session status'),\n\twebsocket_debugger_url: z.string().optional().describe('WebSocket endpoint for Chrome DevTools Protocol'),\n\tdevtools_frontend_url: z.string().optional().describe('Hosted DevTools and live-view URL')\n})\n\nexport type CloudflareBrowserStartSessionInput = z.infer<typeof cloudflareBrowserStartSessionInputSchema>\nexport type CloudflareBrowserSessionIdInput = z.infer<typeof cloudflareBrowserSessionIdInputSchema>\nexport type CloudflareBrowserSessionOutput = z.infer<typeof cloudflareBrowserSessionOutputSchema>\n\nexport const cloudflareBrowserViewportSchema = z.object({\n\twidth: z.int().min(1).max(8_000).describe('Viewport width in CSS pixels'),\n\theight: z.int().min(1).max(8_000).describe('Viewport height in CSS pixels'),\n\tdevice_scale_factor: z.number().min(0.1).max(4).optional().describe('Device scale factor (default 1)')\n})\n\nexport const cloudflareBrowserRenderSourceSchema = z\n\t.object({\n\t\thtml: z.string().min(1).max(MAX_HTML_CHARS).optional().describe('HTML document body to render'),\n\t\turl: z.url().optional().describe('Absolute http(s) URL to open and render')\n\t})\n\t.refine((v) => Boolean(v.html?.trim() || v.url), {\n\t\tmessage: 'Provide html or url'\n\t})\n\t.refine((v) => !(v.html && v.url), {\n\t\tmessage: 'Provide only one of html or url'\n\t})\n\nexport const cloudflareBrowserRenderPdfInputSchema = z.object({\n\tsource: cloudflareBrowserRenderSourceSchema.describe('HTML string or URL to print'),\n\toutput_key: z.string().min(1).optional().describe('Object key for the PDF. Defaults under renders/'),\n\tfilename: z.string().min(1).optional().describe('Display filename for the result ArtifactRef'),\n\tbrowser: cloudflareBrowserEngineSchema.optional().describe('Override auth default engine for this render')\n})\n\nexport const cloudflareBrowserRenderScreenshotInputSchema = z.object({\n\tsource: cloudflareBrowserRenderSourceSchema.describe('HTML string or URL to capture'),\n\toutput_key: z.string().min(1).optional().describe('Object key for the PNG. Defaults under renders/'),\n\tfilename: z.string().min(1).optional().describe('Display filename for the result ArtifactRef'),\n\tviewport: cloudflareBrowserViewportSchema.optional().describe('Optional screenshot viewport'),\n\tbrowser: cloudflareBrowserEngineSchema.optional().describe('Override auth default engine for this capture')\n})\n\nexport const cloudflareBrowserRenderOutputSchema = z.object({\n\tresult: artifactRefSchema,\n\tkind: z.enum(['pdf', 'screenshot'])\n})\n\nexport type CloudflareBrowserViewport = z.infer<typeof cloudflareBrowserViewportSchema>\nexport type CloudflareBrowserRenderSource = z.infer<typeof cloudflareBrowserRenderSourceSchema>\nexport type CloudflareBrowserRenderPdfInput = z.infer<typeof cloudflareBrowserRenderPdfInputSchema>\nexport type CloudflareBrowserRenderScreenshotInput = z.infer<typeof cloudflareBrowserRenderScreenshotInputSchema>\nexport type CloudflareBrowserRenderOutput = z.infer<typeof cloudflareBrowserRenderOutputSchema>\n","/**\n * Cloudflare Browser Rendering payload helpers (no HTTP).\n * HTML → text / title via html-to-text (edge + node). No hand-rolled HTML parsers.\n */\n\nimport { compile } from 'html-to-text'\n\nimport { ToolError } from '../../core/errors'\nimport type { CloudflareBrowserEngine, CloudflareBrowserRenderSource } from './contracts'\n\n/**\n * Query bag for Browser Run `?browser=`.\n * Only emits when non-default (kitesurf); chromium is the API default when omitted.\n */\nexport function browserEngineQuery(\n\tengine: CloudflareBrowserEngine | undefined\n): { browser: 'kitesurf' } | Record<string, never> {\n\tif (engine === 'kitesurf') return { browser: 'kitesurf' }\n\treturn {}\n}\n\n/** Prefer per-call engine, then host auth default. */\nexport function resolveBrowserEngine(\n\toverride: CloudflareBrowserEngine | undefined,\n\tauthDefault: CloudflareBrowserEngine | undefined\n): CloudflareBrowserEngine | undefined {\n\treturn override ?? authDefault\n}\n\n/** Resource types blocked by default (no network subresources). */\nexport const blockedBrowserResourceTypes = [\n\t'document',\n\t'stylesheet',\n\t'image',\n\t'media',\n\t'font',\n\t'script',\n\t'texttrack',\n\t'xhr',\n\t'fetch',\n\t'prefetch',\n\t'eventsource',\n\t'websocket',\n\t'manifest',\n\t'signedexchange',\n\t'ping',\n\t'cspviolationreport',\n\t'preflight',\n\t'other'\n] as const\n\nconst htmlToPlainText = compile({\n\tdecodeEntities: true,\n\tpreserveNewlines: false,\n\twordwrap: false,\n\tselectors: [\n\t\t{ selector: 'script', format: 'skip' },\n\t\t{ selector: 'style', format: 'skip' },\n\t\t{ selector: 'noscript', format: 'skip' }\n\t]\n})\n\nconst htmlToTitle = compile({\n\tdecodeEntities: true,\n\twordwrap: false,\n\tbaseElements: { selectors: ['title'], orderBy: 'occurrence', returnDomByDefault: false },\n\tselectors: [{ selector: 'title', format: 'inline' }]\n})\n\nexport function sourceBody(source: CloudflareBrowserRenderSource): Record<string, unknown> {\n\tif (source.html) return { html: source.html }\n\tif (source.url) return { url: source.url }\n\tthrow new ToolError('Provide html or url', { code: 'bad_input' })\n}\n\nexport function assertBinaryPrefix(bytes: Uint8Array, kind: 'pdf' | 'screenshot'): void {\n\tif (kind === 'pdf') {\n\t\tconst sig = new TextEncoder().encode('%PDF-')\n\t\tconst ok = bytes.byteLength >= sig.byteLength && sig.every((b, i) => bytes[i] === b)\n\t\tif (!ok) throw new ToolError('Cloudflare Browser returned non-PDF body', { code: 'upstream' })\n\t\treturn\n\t}\n\tconst png = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\tconst ok = bytes.byteLength >= png.byteLength && png.every((b, i) => bytes[i] === b)\n\tif (!ok) throw new ToolError('Cloudflare Browser returned non-PNG body', { code: 'upstream' })\n}\n\nexport function defaultRenderKey(kind: 'pdf' | 'screenshot', outputKey: string | undefined): string {\n\tif (outputKey) return outputKey\n\tconst stamp = Date.now()\n\treturn kind === 'pdf' ? `renders/${stamp}.pdf` : `renders/${stamp}.png`\n}\n\n/** Document title via html-to-text (not a hand-rolled HTML parser). */\nexport function titleFromHtml(html: string): string | undefined {\n\tconst title = htmlToTitle(html).trim()\n\treturn title.length > 0 ? title : undefined\n}\n\n/** Visible page text via html-to-text. */\nexport function plainTextFromHtml(html: string): string {\n\treturn htmlToPlainText(html).trim()\n}\n","/**\n * Cloudflare Browser Rendering vendor client (HTML/URL → PDF or screenshot).\n * Host: `new CloudflareBrowserClient(auth)`. Agent tools: `fromContext(ctx)`.\n */\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { isNumber, isPlainObject, isString } from 'es-toolkit'\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport { S3Client } from '../s3'\nimport type {\n\tCloudflareBrowserClientAuth,\n\tCloudflareBrowserEngine,\n\tCloudflareBrowserRenderOutput,\n\tCloudflareBrowserRenderPdfInput,\n\tCloudflareBrowserRenderScreenshotInput,\n\tCloudflareBrowserSessionIdInput,\n\tCloudflareBrowserSessionOutput,\n\tCloudflareBrowserStartSessionInput\n} from './contracts'\nimport {\n\tcloudflareBrowserClientAuthSchema,\n\tcloudflareBrowserRenderOutputSchema,\n\tcloudflareBrowserSessionOutputSchema\n} from './contracts'\nimport {\n\tassertBinaryPrefix,\n\tbrowserEngineQuery,\n\tdefaultRenderKey,\n\tresolveBrowserEngine,\n\tsourceBody,\n\ttitleFromHtml\n} from './domain'\n\nexport type CloudflareBrowserClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class CloudflareBrowserClient {\n\treadonly #auth: CloudflareBrowserClientAuth\n\treadonly #http: HttpService\n\treadonly #storage?: S3Client\n\n\tconstructor(auth: CloudflareBrowserClientAuth, options: CloudflareBrowserClientOptions = {}) {\n\t\tconst parsed = cloudflareBrowserClientAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Cloudflare Browser auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#http = new HttpService({\n\t\t\t...options,\n\t\t\tbaseURL: `https://api.cloudflare.com/client/v4/accounts/${encodeURIComponent(this.#auth.account_id)}`,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${this.#auth.api_token}`\n\t\t\t},\n\t\t\ttimeout: 60_000,\n\t\t\tlabel: 'Cloudflare Browser'\n\t\t})\n\t\tif (this.#auth.storage) this.#storage = new S3Client(this.#auth.storage, options)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): CloudflareBrowserClient {\n\t\tconst auth = requireAuth(ctx, cloudflareBrowserClientAuthSchema)\n\t\treturn new CloudflareBrowserClient(auth, {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tasync startSession(input: CloudflareBrowserStartSessionInput = {}): Promise<CloudflareBrowserSessionOutput> {\n\t\tconst { data } = await this.#http.post('/browser-rendering/devtools/browser', undefined, {\n\t\t\tquery: {\n\t\t\t\t...(input.keep_alive_seconds !== undefined && { keep_alive: input.keep_alive_seconds * 1_000 }),\n\t\t\t\t...browserEngineQuery(this.#engine(input.browser))\n\t\t\t}\n\t\t})\n\t\treturn this.#mapSession(data, undefined, 'active')\n\t}\n\n\tasync getSession(input: CloudflareBrowserSessionIdInput): Promise<CloudflareBrowserSessionOutput> {\n\t\tconst { data } = await this.#http.get(`/browser-rendering/devtools/session/${encodeURIComponent(input.session_id)}`)\n\t\treturn this.#mapSession(data, input.session_id, 'active')\n\t}\n\n\tasync stopSession(input: CloudflareBrowserSessionIdInput): Promise<CloudflareBrowserSessionOutput> {\n\t\tconst { data } = await this.#http.delete(\n\t\t\t`/browser-rendering/devtools/browser/${encodeURIComponent(input.session_id)}`\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id, 'closing')\n\t}\n\n\t/** Browser Rendering PDF; store result in object storage. */\n\tasync renderPdf(input: CloudflareBrowserRenderPdfInput): Promise<CloudflareBrowserRenderOutput> {\n\t\treturn this.#renderAndStore('pdf', input)\n\t}\n\n\t/** Browser Rendering screenshot (PNG); store result in object storage. */\n\tasync renderScreenshot(input: CloudflareBrowserRenderScreenshotInput): Promise<CloudflareBrowserRenderOutput> {\n\t\treturn this.#renderAndStore('screenshot', input)\n\t}\n\n\t/**\n\t * One-shot rendered HTML for a URL or HTML source (Browser Rendering content API).\n\t * Not session-bound CDP; used for seam navigate/snapshot on Cloudflare.\n\t */\n\tasync fetchContent(input: {\n\t\turl?: string\n\t\thtml?: string\n\t\tbrowser?: CloudflareBrowserEngine\n\t}): Promise<{ html: string; title?: string }> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\t...sourceBody({\n\t\t\t\t...(input.url && { url: input.url }),\n\t\t\t\t...(input.html && { html: input.html })\n\t\t\t}),\n\t\t\tsetJavaScriptEnabled: true\n\t\t}\n\t\tconst { data } = await this.#http.post('/browser-rendering/content', body, {\n\t\t\tlabel: 'Cloudflare Browser content',\n\t\t\theaders: { 'Content-Type': 'application/json', Accept: 'text/html, application/json' },\n\t\t\tquery: browserEngineQuery(this.#engine(input.browser))\n\t\t})\n\t\tif (isString(data)) {\n\t\t\tconst out: { html: string; title?: string } = { html: data }\n\t\t\tconst title = titleFromHtml(data)\n\t\t\tif (title) out.title = title\n\t\t\treturn out\n\t\t}\n\t\tif (isPlainObject(data)) {\n\t\t\tconst result = data['result']\n\t\t\tconst html = isString(result) ? result : isString(data['html']) ? data['html'] : undefined\n\t\t\tif (html) {\n\t\t\t\tconst out: { html: string; title?: string } = { html }\n\t\t\t\tconst title = titleFromHtml(html)\n\t\t\t\tif (title) out.title = title\n\t\t\t\treturn out\n\t\t\t}\n\t\t}\n\t\tthrow new ToolError('Cloudflare Browser content response missing HTML', { code: 'upstream' })\n\t}\n\n\tasync #renderAndStore(\n\t\tkind: 'pdf' | 'screenshot',\n\t\tinput: CloudflareBrowserRenderPdfInput | CloudflareBrowserRenderScreenshotInput\n\t): Promise<CloudflareBrowserRenderOutput> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\t...sourceBody(input.source),\n\t\t\tsetJavaScriptEnabled: true\n\t\t}\n\t\tif (kind === 'pdf') {\n\t\t\tbody['preferCSSPageSize'] = true\n\t\t\tbody['printBackground'] = true\n\t\t} else {\n\t\t\tbody['fullPage'] = true\n\t\t\tbody['type'] = 'png'\n\t\t\tif ('viewport' in input && input.viewport) {\n\t\t\t\tconst viewport: Record<string, unknown> = {\n\t\t\t\t\twidth: input.viewport.width,\n\t\t\t\t\theight: input.viewport.height\n\t\t\t\t}\n\t\t\t\tif (input.viewport.device_scale_factor !== undefined) {\n\t\t\t\t\tviewport['deviceScaleFactor'] = input.viewport.device_scale_factor\n\t\t\t\t}\n\t\t\t\tbody['viewport'] = viewport\n\t\t\t}\n\t\t}\n\n\t\tconst path = kind === 'pdf' ? '/browser-rendering/pdf' : '/browser-rendering/screenshot'\n\t\tconst accept = kind === 'pdf' ? 'application/pdf' : 'image/png'\n\t\tconst { bytes } = await this.#http.bytes('POST', path, {\n\t\t\tlabel: `Cloudflare Browser ${kind}`,\n\t\t\tbody,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: accept\n\t\t\t},\n\t\t\tquery: browserEngineQuery(this.#engine(input.browser))\n\t\t})\n\t\tassertBinaryPrefix(bytes, kind)\n\n\t\tconst mediaType = kind === 'pdf' ? 'application/pdf' : 'image/png'\n\t\tconst key = defaultRenderKey(kind, input.output_key)\n\t\tconst filename = input.filename ?? (kind === 'pdf' ? 'render.pdf' : 'render.png')\n\t\tconst storage = this.#storage\n\t\tif (!storage) {\n\t\t\tthrow new ToolError('Cloudflare Browser rendering requires object storage', { code: 'bad_auth' })\n\t\t}\n\t\tawait storage.putBytes(key, bytes, mediaType)\n\n\t\tconst result = artifactRefSchema.parse({\n\t\t\tstore: 'object',\n\t\t\tkey,\n\t\t\tmedia_type: mediaType,\n\t\t\tfilename,\n\t\t\tbyte_length: bytes.byteLength\n\t\t})\n\t\treturn cloudflareBrowserRenderOutputSchema.parse({ result, kind })\n\t}\n\n\t#engine(override?: CloudflareBrowserEngine): CloudflareBrowserEngine | undefined {\n\t\treturn resolveBrowserEngine(override, this.#auth.browser)\n\t}\n\n\t#mapSession(data: unknown, fallbackSessionId?: string, fallbackStatus?: string): CloudflareBrowserSessionOutput {\n\t\tconst payload = isPlainObject(data) && isPlainObject(data['result']) ? data['result'] : data\n\t\tif (!isPlainObject(payload)) {\n\t\t\tthrow new ToolError('Unexpected Cloudflare Browser session response', { code: 'upstream' })\n\t\t}\n\t\tconst sessionId = isString(payload['sessionId']) ? payload['sessionId'] : fallbackSessionId\n\t\tif (!sessionId) {\n\t\t\tthrow new ToolError('Cloudflare Browser session response missing sessionId', { code: 'upstream' })\n\t\t}\n\t\tconst output: CloudflareBrowserSessionOutput = { session_id: sessionId }\n\t\tif (isString(payload['status'])) {\n\t\t\toutput.status = payload['status']\n\t\t} else if (isString(payload['closeReason']) || isNumber(payload['endTime'])) {\n\t\t\toutput.status = 'closed'\n\t\t} else if (fallbackStatus) {\n\t\t\toutput.status = fallbackStatus\n\t\t}\n\t\tif (isString(payload['webSocketDebuggerUrl'])) {\n\t\t\toutput.websocket_debugger_url = payload['webSocketDebuggerUrl']\n\t\t}\n\t\tif (isString(payload['devtoolsFrontendUrl'])) {\n\t\t\toutput.devtools_frontend_url = payload['devtoolsFrontendUrl']\n\t\t}\n\t\treturn cloudflareBrowserSessionOutputSchema.parse(output)\n\t}\n}\n","/**\n * Cloudflare Browser Rendering CDP mint (no HTTP).\n * Turns a session payload into Playwright / AgentBrowser connection options.\n */\n\nimport { ToolError } from '../../core/errors'\nimport type { CloudflareBrowserEngine, CloudflareBrowserSessionOutput } from './contracts'\nimport { browserEngineQuery } from './domain'\n\nexport type CloudflareBrowserCdpConnection = {\n\tsession_id: string\n\twebsocket_url: string\n\t/**\n\t * Headers for the WebSocket upgrade when the host must attach the API token.\n\t * Cloudflare's webSocketDebuggerUrl is often self-contained; pass api_token when your\n\t * runtime requires Authorization on the upgrade.\n\t */\n\theaders: Record<string, string>\n\tlive_view_url?: string\n\tstatus?: string\n}\n\nexport type MintCloudflareBrowserCdpOptions = {\n\t/** Cloudflare API token — sets Authorization: Bearer when provided. */\n\tapi_token?: string\n\t/** Extra headers; caller keys win over defaults. */\n\theaders?: Record<string, string>\n\t/**\n\t * Ensure `browser=kitesurf` on the WebSocket URL when the session was started with Kitesurf\n\t * and the upstream URL omitted the query (idempotent if already present).\n\t */\n\tbrowser?: CloudflareBrowserEngine\n}\n\n/**\n * Append engine query params without clobbering existing search keys.\n */\nfunction withBrowserQuery(websocketUrl: string, engine: CloudflareBrowserEngine | undefined): string {\n\tconst extra = browserEngineQuery(engine)\n\tif (!('browser' in extra)) return websocketUrl\n\tconst url = new URL(websocketUrl)\n\tif (!url.searchParams.has('browser')) {\n\t\turl.searchParams.set('browser', extra.browser)\n\t}\n\treturn url.toString()\n}\n\n/**\n * Mint CDP connection options from a Cloudflare Browser session (startSession / getSession).\n */\nexport function mintCloudflareBrowserCdpConnection(\n\tsession: CloudflareBrowserSessionOutput,\n\toptions: MintCloudflareBrowserCdpOptions = {}\n): CloudflareBrowserCdpConnection {\n\tconst rawUrl = session.websocket_debugger_url?.trim()\n\tif (!rawUrl) {\n\t\tthrow new ToolError('Cloudflare Browser session has no websocket_debugger_url; start or get the session first', {\n\t\t\tcode: 'bad_input',\n\t\t\tdetails: { session_id: session.session_id }\n\t\t})\n\t}\n\n\tconst headers: Record<string, string> = {}\n\tif (options.api_token) {\n\t\theaders['Authorization'] = `Bearer ${options.api_token}`\n\t}\n\tif (options.headers) {\n\t\tObject.assign(headers, options.headers)\n\t}\n\n\tconst out: CloudflareBrowserCdpConnection = {\n\t\tsession_id: session.session_id,\n\t\twebsocket_url: withBrowserQuery(rawUrl, options.browser),\n\t\theaders\n\t}\n\tif (session.devtools_frontend_url) out.live_view_url = session.devtools_frontend_url\n\tif (session.status) out.status = session.status\n\treturn out\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { CloudflareBrowserClient } from './client'\nimport {\n\tcloudflareBrowserClientAuthSchema,\n\tcloudflareBrowserRenderOutputSchema,\n\tcloudflareBrowserRenderPdfInputSchema,\n\tcloudflareBrowserRenderScreenshotInputSchema,\n\tcloudflareBrowserSessionIdInputSchema,\n\tcloudflareBrowserSessionOutputSchema,\n\tcloudflareBrowserStartSessionInputSchema\n} from './contracts'\n\nexport const cloudflareBrowserRenderPdfTool = defineTool({\n\tid: 'cloudflare-browser-render-pdf',\n\tname: 'cloudflareBrowserRenderPdf',\n\tdescription:\n\t\t'Render HTML or a URL to a PDF via Cloudflare Browser Rendering. Writes the PDF to object storage and returns an ArtifactRef.',\n\tinputSchema: cloudflareBrowserRenderPdfInputSchema,\n\toutputSchema: cloudflareBrowserRenderOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).renderPdf(input)\n})\n\nexport const cloudflareBrowserRenderScreenshotTool = defineTool({\n\tid: 'cloudflare-browser-render-screenshot',\n\tname: 'cloudflareBrowserRenderScreenshot',\n\tdescription:\n\t\t'Capture a PNG screenshot of HTML or a URL via Cloudflare Browser Rendering. Writes the image to object storage and returns an ArtifactRef.',\n\tinputSchema: cloudflareBrowserRenderScreenshotInputSchema,\n\toutputSchema: cloudflareBrowserRenderOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).renderScreenshot(input)\n})\n\nexport const cloudflareBrowserStartSessionTool = defineTool({\n\tid: 'cloudflare-browser-start-session',\n\tname: 'cloudflareBrowserStartSession',\n\tdescription:\n\t\t'Start a Cloudflare Browser Run session for interactive browser control and return its connection metadata. This creates a session; it does not navigate or render content.',\n\tinputSchema: cloudflareBrowserStartSessionInputSchema,\n\toutputSchema: cloudflareBrowserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).startSession(input)\n})\n\nexport const cloudflareBrowserGetSessionTool = defineTool({\n\tid: 'cloudflare-browser-get-session',\n\tname: 'cloudflareBrowserGetSession',\n\tdescription:\n\t\t'Get the status and connection metadata for an existing Cloudflare Browser Run session. Use this to reconnect or check whether the session is still available.',\n\tinputSchema: cloudflareBrowserSessionIdInputSchema,\n\toutputSchema: cloudflareBrowserSessionOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).getSession(input)\n})\n\nexport const cloudflareBrowserStopSessionTool = defineTool({\n\tid: 'cloudflare-browser-stop-session',\n\tname: 'cloudflareBrowserStopSession',\n\tdescription: 'Close a Cloudflare Browser Run session by session id.',\n\tinputSchema: cloudflareBrowserSessionIdInputSchema,\n\toutputSchema: cloudflareBrowserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).stopSession(input)\n})\n\nexport const cloudflareBrowserModule = defineModule({\n\tid: 'cloudflare-browser',\n\ttitle: 'Cloudflare Browser Run',\n\tdescription:\n\t\t'Cloudflare Browser Run vendor pack for browser sessions plus HTML/URL PDF and screenshot quick actions.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: cloudflareBrowserClientAuthSchema },\n\tcategories: ['browser', 'cloudflare'],\n\tclassification: 'standard',\n\ttags: ['render', 'cdp', 'session'],\n\ttools: [\n\t\tcloudflareBrowserStartSessionTool,\n\t\tcloudflareBrowserGetSessionTool,\n\t\tcloudflareBrowserStopSessionTool,\n\t\tcloudflareBrowserRenderPdfTool,\n\t\tcloudflareBrowserRenderScreenshotTool\n\t]\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloudflare-browser-Ct8U4_Ru.js","names":["#auth","#http","#storage","#engine","#mapSession","#renderAndStore"],"sources":["../src/vendors/cloudflare-browser/contracts.ts","../src/vendors/cloudflare-browser/domain.ts","../src/vendors/cloudflare-browser/client.ts","../src/vendors/cloudflare-browser/cdp.ts","../src/vendors/cloudflare-browser/module.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { s3AuthSchema } from '../s3'\n\nexport const MAX_HTML_CHARS = 2_000_000\n\n/**\n * Cloudflare Browser Run engine (`?browser=`).\n * `chromium` is the product default (omit query). `kitesurf` is the lightweight Workers engine.\n */\nexport const cloudflareBrowserEngineSchema = z\n\t.enum(['chromium', 'kitesurf'])\n\t.describe(\n\t\t'Browser engine: kitesurf for cheaper agent screenshots/HTML extraction; chromium for pixel-perfect or complex sites (default)'\n\t)\n\nexport type CloudflareBrowserEngine = z.infer<typeof cloudflareBrowserEngineSchema>\n\nexport const cloudflareBrowserSessionAuthSchema = z.object({\n\taccount_id: z.string().min(1).describe('Cloudflare account id'),\n\tapi_token: z.string().min(1).describe('Cloudflare API token with Browser Rendering permission'),\n\tbrowser: cloudflareBrowserEngineSchema\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Default Browser Run engine for sessions and quick actions (chromium | kitesurf). Per-call browser overrides this when set.'\n\t\t)\n})\n\nexport const cloudflareBrowserClientAuthSchema = cloudflareBrowserSessionAuthSchema.extend({\n\tstorage: s3AuthSchema.optional().describe('Object storage required for rendered ArtifactRef output')\n})\n\nexport const cloudflareBrowserAuthSchema = cloudflareBrowserSessionAuthSchema.extend({\n\tstorage: s3AuthSchema.describe('Object storage for rendered ArtifactRef output')\n})\n\nexport type CloudflareBrowserAuth = z.infer<typeof cloudflareBrowserAuthSchema>\nexport type CloudflareBrowserClientAuth = z.infer<typeof cloudflareBrowserClientAuthSchema>\nexport type CloudflareBrowserSessionAuth = z.infer<typeof cloudflareBrowserSessionAuthSchema>\n\nexport const cloudflareBrowserStartSessionInputSchema = z.object({\n\tkeep_alive_seconds: z\n\t\t.int()\n\t\t.min(60)\n\t\t.max(600)\n\t\t.optional()\n\t\t.describe('How long the browser session remains available, from 60 to 600 seconds'),\n\tbrowser: cloudflareBrowserEngineSchema.optional().describe('Override auth default engine for this session')\n})\n\nexport const cloudflareBrowserSessionIdInputSchema = z.object({\n\tsession_id: z.string().uuid().describe('Cloudflare browser session id')\n})\n\nexport const cloudflareBrowserSessionOutputSchema = z.object({\n\tsession_id: z.string().describe('Cloudflare browser session id'),\n\tstatus: z.string().optional().describe('Current session status'),\n\twebsocket_debugger_url: z.string().optional().describe('WebSocket endpoint for Chrome DevTools Protocol'),\n\tdevtools_frontend_url: z.string().optional().describe('Hosted DevTools and live-view URL')\n})\n\nexport type CloudflareBrowserStartSessionInput = z.infer<typeof cloudflareBrowserStartSessionInputSchema>\nexport type CloudflareBrowserSessionIdInput = z.infer<typeof cloudflareBrowserSessionIdInputSchema>\nexport type CloudflareBrowserSessionOutput = z.infer<typeof cloudflareBrowserSessionOutputSchema>\n\nexport const cloudflareBrowserViewportSchema = z.object({\n\twidth: z.int().min(1).max(8_000).describe('Viewport width in CSS pixels'),\n\theight: z.int().min(1).max(8_000).describe('Viewport height in CSS pixels'),\n\tdevice_scale_factor: z.number().min(0.1).max(4).optional().describe('Device scale factor (default 1)')\n})\n\nexport const cloudflareBrowserRenderSourceSchema = z\n\t.object({\n\t\thtml: z.string().min(1).max(MAX_HTML_CHARS).optional().describe('HTML document body to render'),\n\t\turl: z.url().optional().describe('Absolute http(s) URL to open and render')\n\t})\n\t.refine((v) => Boolean(v.html?.trim() || v.url), {\n\t\tmessage: 'Provide html or url'\n\t})\n\t.refine((v) => !(v.html && v.url), {\n\t\tmessage: 'Provide only one of html or url'\n\t})\n\nexport const cloudflareBrowserRenderPdfInputSchema = z.object({\n\tsource: cloudflareBrowserRenderSourceSchema.describe('HTML string or URL to print'),\n\toutput_key: z.string().min(1).optional().describe('Object key for the PDF. Defaults under renders/'),\n\tfilename: z.string().min(1).optional().describe('Display filename for the result ArtifactRef'),\n\tbrowser: cloudflareBrowserEngineSchema.optional().describe('Override auth default engine for this render')\n})\n\nexport const cloudflareBrowserRenderScreenshotInputSchema = z.object({\n\tsource: cloudflareBrowserRenderSourceSchema.describe('HTML string or URL to capture'),\n\toutput_key: z.string().min(1).optional().describe('Object key for the PNG. Defaults under renders/'),\n\tfilename: z.string().min(1).optional().describe('Display filename for the result ArtifactRef'),\n\tviewport: cloudflareBrowserViewportSchema.optional().describe('Optional screenshot viewport'),\n\tbrowser: cloudflareBrowserEngineSchema.optional().describe('Override auth default engine for this capture')\n})\n\nexport const cloudflareBrowserRenderOutputSchema = z.object({\n\tresult: artifactRefSchema,\n\tkind: z.enum(['pdf', 'screenshot'])\n})\n\nexport type CloudflareBrowserViewport = z.infer<typeof cloudflareBrowserViewportSchema>\nexport type CloudflareBrowserRenderSource = z.infer<typeof cloudflareBrowserRenderSourceSchema>\nexport type CloudflareBrowserRenderPdfInput = z.infer<typeof cloudflareBrowserRenderPdfInputSchema>\nexport type CloudflareBrowserRenderScreenshotInput = z.infer<typeof cloudflareBrowserRenderScreenshotInputSchema>\nexport type CloudflareBrowserRenderOutput = z.infer<typeof cloudflareBrowserRenderOutputSchema>\n","/**\n * Cloudflare Browser Rendering payload helpers (no HTTP).\n * HTML → text / title via html-to-text (edge + node). No hand-rolled HTML parsers.\n */\n\nimport { compile } from 'html-to-text'\n\nimport { ToolError } from '../../core/errors'\nimport type { CloudflareBrowserEngine, CloudflareBrowserRenderSource } from './contracts'\n\n/**\n * Query bag for Browser Run `?browser=`.\n * Only emits when non-default (kitesurf); chromium is the API default when omitted.\n */\nexport function browserEngineQuery(\n\tengine: CloudflareBrowserEngine | undefined\n): { browser: 'kitesurf' } | Record<string, never> {\n\tif (engine === 'kitesurf') return { browser: 'kitesurf' }\n\treturn {}\n}\n\n/** Prefer per-call engine, then host auth default. */\nexport function resolveBrowserEngine(\n\toverride: CloudflareBrowserEngine | undefined,\n\tauthDefault: CloudflareBrowserEngine | undefined\n): CloudflareBrowserEngine | undefined {\n\treturn override ?? authDefault\n}\n\n/** Resource types blocked by default (no network subresources). */\nexport const blockedBrowserResourceTypes = [\n\t'document',\n\t'stylesheet',\n\t'image',\n\t'media',\n\t'font',\n\t'script',\n\t'texttrack',\n\t'xhr',\n\t'fetch',\n\t'prefetch',\n\t'eventsource',\n\t'websocket',\n\t'manifest',\n\t'signedexchange',\n\t'ping',\n\t'cspviolationreport',\n\t'preflight',\n\t'other'\n] as const\n\nconst htmlToPlainText = compile({\n\tdecodeEntities: true,\n\tpreserveNewlines: false,\n\twordwrap: false,\n\tselectors: [\n\t\t{ selector: 'script', format: 'skip' },\n\t\t{ selector: 'style', format: 'skip' },\n\t\t{ selector: 'noscript', format: 'skip' }\n\t]\n})\n\nconst htmlToTitle = compile({\n\tdecodeEntities: true,\n\twordwrap: false,\n\tbaseElements: { selectors: ['title'], orderBy: 'occurrence', returnDomByDefault: false },\n\tselectors: [{ selector: 'title', format: 'inline' }]\n})\n\nexport function sourceBody(source: CloudflareBrowserRenderSource): Record<string, unknown> {\n\tif (source.html) return { html: source.html }\n\tif (source.url) return { url: source.url }\n\tthrow new ToolError('Provide html or url', { code: 'bad_input' })\n}\n\nexport function assertBinaryPrefix(bytes: Uint8Array, kind: 'pdf' | 'screenshot'): void {\n\tif (kind === 'pdf') {\n\t\tconst sig = new TextEncoder().encode('%PDF-')\n\t\tconst ok = bytes.byteLength >= sig.byteLength && sig.every((b, i) => bytes[i] === b)\n\t\tif (!ok) throw new ToolError('Cloudflare Browser returned non-PDF body', { code: 'upstream' })\n\t\treturn\n\t}\n\tconst png = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])\n\tconst ok = bytes.byteLength >= png.byteLength && png.every((b, i) => bytes[i] === b)\n\tif (!ok) throw new ToolError('Cloudflare Browser returned non-PNG body', { code: 'upstream' })\n}\n\nexport function defaultRenderKey(kind: 'pdf' | 'screenshot', outputKey: string | undefined): string {\n\tif (outputKey) return outputKey\n\tconst stamp = Date.now()\n\treturn kind === 'pdf' ? `renders/${stamp}.pdf` : `renders/${stamp}.png`\n}\n\n/** Document title via html-to-text (not a hand-rolled HTML parser). */\nexport function titleFromHtml(html: string): string | undefined {\n\tconst title = htmlToTitle(html).trim()\n\treturn title.length > 0 ? title : undefined\n}\n\n/** Visible page text via html-to-text. */\nexport function plainTextFromHtml(html: string): string {\n\treturn htmlToPlainText(html).trim()\n}\n","/**\n * Cloudflare Browser Rendering vendor client (HTML/URL → PDF or screenshot).\n * Host: `new CloudflareBrowserClient(auth)`. Agent tools: `fromContext(ctx)`.\n */\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { isNumber, isPlainObject, isString } from 'es-toolkit'\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport { S3Client } from '../s3'\nimport type {\n\tCloudflareBrowserClientAuth,\n\tCloudflareBrowserEngine,\n\tCloudflareBrowserRenderOutput,\n\tCloudflareBrowserRenderPdfInput,\n\tCloudflareBrowserRenderScreenshotInput,\n\tCloudflareBrowserSessionIdInput,\n\tCloudflareBrowserSessionOutput,\n\tCloudflareBrowserStartSessionInput\n} from './contracts'\nimport {\n\tcloudflareBrowserClientAuthSchema,\n\tcloudflareBrowserRenderOutputSchema,\n\tcloudflareBrowserSessionOutputSchema\n} from './contracts'\nimport {\n\tassertBinaryPrefix,\n\tbrowserEngineQuery,\n\tdefaultRenderKey,\n\tresolveBrowserEngine,\n\tsourceBody,\n\ttitleFromHtml\n} from './domain'\n\nexport type CloudflareBrowserClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class CloudflareBrowserClient {\n\treadonly #auth: CloudflareBrowserClientAuth\n\treadonly #http: HttpService\n\treadonly #storage?: S3Client\n\n\tconstructor(auth: CloudflareBrowserClientAuth, options: CloudflareBrowserClientOptions = {}) {\n\t\tconst parsed = cloudflareBrowserClientAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Cloudflare Browser auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#http = new HttpService({\n\t\t\t...options,\n\t\t\tbaseURL: `https://api.cloudflare.com/client/v4/accounts/${encodeURIComponent(this.#auth.account_id)}`,\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${this.#auth.api_token}`\n\t\t\t},\n\t\t\ttimeout: 60_000,\n\t\t\tlabel: 'Cloudflare Browser'\n\t\t})\n\t\tif (this.#auth.storage) this.#storage = new S3Client(this.#auth.storage, options)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): CloudflareBrowserClient {\n\t\tconst auth = requireAuth(ctx, cloudflareBrowserClientAuthSchema)\n\t\treturn new CloudflareBrowserClient(auth, {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tasync startSession(input: CloudflareBrowserStartSessionInput = {}): Promise<CloudflareBrowserSessionOutput> {\n\t\tconst { data } = await this.#http.post('/browser-rendering/devtools/browser', undefined, {\n\t\t\tquery: {\n\t\t\t\t...(input.keep_alive_seconds !== undefined && { keep_alive: input.keep_alive_seconds * 1_000 }),\n\t\t\t\t...browserEngineQuery(this.#engine(input.browser))\n\t\t\t}\n\t\t})\n\t\treturn this.#mapSession(data, undefined, 'active')\n\t}\n\n\tasync getSession(input: CloudflareBrowserSessionIdInput): Promise<CloudflareBrowserSessionOutput> {\n\t\tconst { data } = await this.#http.get(`/browser-rendering/devtools/session/${encodeURIComponent(input.session_id)}`)\n\t\treturn this.#mapSession(data, input.session_id, 'active')\n\t}\n\n\tasync stopSession(input: CloudflareBrowserSessionIdInput): Promise<CloudflareBrowserSessionOutput> {\n\t\tconst { data } = await this.#http.delete(\n\t\t\t`/browser-rendering/devtools/browser/${encodeURIComponent(input.session_id)}`\n\t\t)\n\t\treturn this.#mapSession(data, input.session_id, 'closing')\n\t}\n\n\t/** Browser Rendering PDF; store result in object storage. */\n\tasync renderPdf(input: CloudflareBrowserRenderPdfInput): Promise<CloudflareBrowserRenderOutput> {\n\t\treturn this.#renderAndStore('pdf', input)\n\t}\n\n\t/** Browser Rendering screenshot (PNG); store result in object storage. */\n\tasync renderScreenshot(input: CloudflareBrowserRenderScreenshotInput): Promise<CloudflareBrowserRenderOutput> {\n\t\treturn this.#renderAndStore('screenshot', input)\n\t}\n\n\t/**\n\t * One-shot rendered HTML for a URL or HTML source (Browser Rendering content API).\n\t * Not session-bound CDP; used for seam navigate/snapshot on Cloudflare.\n\t */\n\tasync fetchContent(input: {\n\t\turl?: string\n\t\thtml?: string\n\t\tbrowser?: CloudflareBrowserEngine\n\t}): Promise<{ html: string; title?: string }> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\t...sourceBody({\n\t\t\t\t...(input.url && { url: input.url }),\n\t\t\t\t...(input.html && { html: input.html })\n\t\t\t}),\n\t\t\tsetJavaScriptEnabled: true\n\t\t}\n\t\tconst { data } = await this.#http.post('/browser-rendering/content', body, {\n\t\t\tlabel: 'Cloudflare Browser content',\n\t\t\theaders: { 'Content-Type': 'application/json', Accept: 'text/html, application/json' },\n\t\t\tquery: browserEngineQuery(this.#engine(input.browser))\n\t\t})\n\t\tif (isString(data)) {\n\t\t\tconst out: { html: string; title?: string } = { html: data }\n\t\t\tconst title = titleFromHtml(data)\n\t\t\tif (title) out.title = title\n\t\t\treturn out\n\t\t}\n\t\tif (isPlainObject(data)) {\n\t\t\tconst result = data['result']\n\t\t\tconst html = isString(result) ? result : isString(data['html']) ? data['html'] : undefined\n\t\t\tif (html) {\n\t\t\t\tconst out: { html: string; title?: string } = { html }\n\t\t\t\tconst title = titleFromHtml(html)\n\t\t\t\tif (title) out.title = title\n\t\t\t\treturn out\n\t\t\t}\n\t\t}\n\t\tthrow new ToolError('Cloudflare Browser content response missing HTML', { code: 'upstream' })\n\t}\n\n\tasync #renderAndStore(\n\t\tkind: 'pdf' | 'screenshot',\n\t\tinput: CloudflareBrowserRenderPdfInput | CloudflareBrowserRenderScreenshotInput\n\t): Promise<CloudflareBrowserRenderOutput> {\n\t\tconst body: Record<string, unknown> = {\n\t\t\t...sourceBody(input.source),\n\t\t\tsetJavaScriptEnabled: true\n\t\t}\n\t\tif (kind === 'pdf') {\n\t\t\tbody['preferCSSPageSize'] = true\n\t\t\tbody['printBackground'] = true\n\t\t} else {\n\t\t\tbody['fullPage'] = true\n\t\t\tbody['type'] = 'png'\n\t\t\tif ('viewport' in input && input.viewport) {\n\t\t\t\tconst viewport: Record<string, unknown> = {\n\t\t\t\t\twidth: input.viewport.width,\n\t\t\t\t\theight: input.viewport.height\n\t\t\t\t}\n\t\t\t\tif (input.viewport.device_scale_factor !== undefined) {\n\t\t\t\t\tviewport['deviceScaleFactor'] = input.viewport.device_scale_factor\n\t\t\t\t}\n\t\t\t\tbody['viewport'] = viewport\n\t\t\t}\n\t\t}\n\n\t\tconst path = kind === 'pdf' ? '/browser-rendering/pdf' : '/browser-rendering/screenshot'\n\t\tconst accept = kind === 'pdf' ? 'application/pdf' : 'image/png'\n\t\tconst { bytes } = await this.#http.bytes('POST', path, {\n\t\t\tlabel: `Cloudflare Browser ${kind}`,\n\t\t\tbody,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\tAccept: accept\n\t\t\t},\n\t\t\tquery: browserEngineQuery(this.#engine(input.browser))\n\t\t})\n\t\tassertBinaryPrefix(bytes, kind)\n\n\t\tconst mediaType = kind === 'pdf' ? 'application/pdf' : 'image/png'\n\t\tconst key = defaultRenderKey(kind, input.output_key)\n\t\tconst filename = input.filename ?? (kind === 'pdf' ? 'render.pdf' : 'render.png')\n\t\tconst storage = this.#storage\n\t\tif (!storage) {\n\t\t\tthrow new ToolError('Cloudflare Browser rendering requires object storage', { code: 'bad_auth' })\n\t\t}\n\t\tawait storage.putBytes(key, bytes, mediaType)\n\n\t\tconst result = artifactRefSchema.parse({\n\t\t\tstore: 'object',\n\t\t\tkey,\n\t\t\tmedia_type: mediaType,\n\t\t\tfilename,\n\t\t\tbyte_length: bytes.byteLength\n\t\t})\n\t\treturn cloudflareBrowserRenderOutputSchema.parse({ result, kind })\n\t}\n\n\t#engine(override?: CloudflareBrowserEngine): CloudflareBrowserEngine | undefined {\n\t\treturn resolveBrowserEngine(override, this.#auth.browser)\n\t}\n\n\t#mapSession(data: unknown, fallbackSessionId?: string, fallbackStatus?: string): CloudflareBrowserSessionOutput {\n\t\tconst payload = isPlainObject(data) && isPlainObject(data['result']) ? data['result'] : data\n\t\tif (!isPlainObject(payload)) {\n\t\t\tthrow new ToolError('Unexpected Cloudflare Browser session response', { code: 'upstream' })\n\t\t}\n\t\tconst sessionId = isString(payload['sessionId']) ? payload['sessionId'] : fallbackSessionId\n\t\tif (!sessionId) {\n\t\t\tthrow new ToolError('Cloudflare Browser session response missing sessionId', { code: 'upstream' })\n\t\t}\n\t\tconst output: CloudflareBrowserSessionOutput = { session_id: sessionId }\n\t\tif (isString(payload['status'])) {\n\t\t\toutput.status = payload['status']\n\t\t} else if (isString(payload['closeReason']) || isNumber(payload['endTime'])) {\n\t\t\toutput.status = 'closed'\n\t\t} else if (fallbackStatus) {\n\t\t\toutput.status = fallbackStatus\n\t\t}\n\t\tif (isString(payload['webSocketDebuggerUrl'])) {\n\t\t\toutput.websocket_debugger_url = payload['webSocketDebuggerUrl']\n\t\t}\n\t\tif (isString(payload['devtoolsFrontendUrl'])) {\n\t\t\toutput.devtools_frontend_url = payload['devtoolsFrontendUrl']\n\t\t}\n\t\treturn cloudflareBrowserSessionOutputSchema.parse(output)\n\t}\n}\n","/**\n * Cloudflare Browser Rendering CDP mint (no HTTP).\n * Turns a session payload into Playwright / AgentBrowser connection options.\n */\n\nimport { ToolError } from '../../core/errors'\nimport type { CloudflareBrowserEngine, CloudflareBrowserSessionOutput } from './contracts'\nimport { browserEngineQuery } from './domain'\n\nexport type CloudflareBrowserCdpConnection = {\n\tsession_id: string\n\twebsocket_url: string\n\t/**\n\t * Headers for the WebSocket upgrade when the host must attach the API token.\n\t * Cloudflare's webSocketDebuggerUrl is often self-contained; pass api_token when your\n\t * runtime requires Authorization on the upgrade.\n\t */\n\theaders: Record<string, string>\n\tlive_view_url?: string\n\tstatus?: string\n}\n\nexport type MintCloudflareBrowserCdpOptions = {\n\t/** Cloudflare API token — sets Authorization: Bearer when provided. */\n\tapi_token?: string\n\t/** Extra headers; caller keys win over defaults. */\n\theaders?: Record<string, string>\n\t/**\n\t * Ensure `browser=kitesurf` on the WebSocket URL when the session was started with Kitesurf\n\t * and the upstream URL omitted the query (idempotent if already present).\n\t */\n\tbrowser?: CloudflareBrowserEngine\n}\n\n/**\n * Append engine query params without clobbering existing search keys.\n */\nfunction withBrowserQuery(websocketUrl: string, engine: CloudflareBrowserEngine | undefined): string {\n\tconst extra = browserEngineQuery(engine)\n\tif (!('browser' in extra)) return websocketUrl\n\tconst url = new URL(websocketUrl)\n\tif (!url.searchParams.has('browser')) {\n\t\turl.searchParams.set('browser', extra.browser)\n\t}\n\treturn url.toString()\n}\n\n/**\n * Mint CDP connection options from a Cloudflare Browser session (startSession / getSession).\n */\nexport function mintCloudflareBrowserCdpConnection(\n\tsession: CloudflareBrowserSessionOutput,\n\toptions: MintCloudflareBrowserCdpOptions = {}\n): CloudflareBrowserCdpConnection {\n\tconst rawUrl = session.websocket_debugger_url?.trim()\n\tif (!rawUrl) {\n\t\tthrow new ToolError('Cloudflare Browser session has no websocket_debugger_url; start or get the session first', {\n\t\t\tcode: 'bad_input',\n\t\t\tdetails: { session_id: session.session_id }\n\t\t})\n\t}\n\n\tconst headers: Record<string, string> = {}\n\tif (options.api_token) {\n\t\theaders['Authorization'] = `Bearer ${options.api_token}`\n\t}\n\tif (options.headers) {\n\t\tObject.assign(headers, options.headers)\n\t}\n\n\tconst out: CloudflareBrowserCdpConnection = {\n\t\tsession_id: session.session_id,\n\t\twebsocket_url: withBrowserQuery(rawUrl, options.browser),\n\t\theaders\n\t}\n\tif (session.devtools_frontend_url) out.live_view_url = session.devtools_frontend_url\n\tif (session.status) out.status = session.status\n\treturn out\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { CloudflareBrowserClient } from './client'\nimport {\n\tcloudflareBrowserClientAuthSchema,\n\tcloudflareBrowserRenderOutputSchema,\n\tcloudflareBrowserRenderPdfInputSchema,\n\tcloudflareBrowserRenderScreenshotInputSchema,\n\tcloudflareBrowserSessionIdInputSchema,\n\tcloudflareBrowserSessionOutputSchema,\n\tcloudflareBrowserStartSessionInputSchema\n} from './contracts'\n\nexport const cloudflareBrowserRenderPdfTool = defineTool({\n\tid: 'cloudflare-browser-render-pdf',\n\tname: 'cloudflareBrowserRenderPdf',\n\tdescription:\n\t\t'Render HTML or a URL to a PDF via Cloudflare Browser Rendering. Writes the PDF to object storage and returns an ArtifactRef.',\n\tinputSchema: cloudflareBrowserRenderPdfInputSchema,\n\toutputSchema: cloudflareBrowserRenderOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).renderPdf(input)\n})\n\nexport const cloudflareBrowserRenderScreenshotTool = defineTool({\n\tid: 'cloudflare-browser-render-screenshot',\n\tname: 'cloudflareBrowserRenderScreenshot',\n\tdescription:\n\t\t'Capture a PNG screenshot of HTML or a URL via Cloudflare Browser Rendering. Writes the image to object storage and returns an ArtifactRef.',\n\tinputSchema: cloudflareBrowserRenderScreenshotInputSchema,\n\toutputSchema: cloudflareBrowserRenderOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).renderScreenshot(input)\n})\n\nexport const cloudflareBrowserStartSessionTool = defineTool({\n\tid: 'cloudflare-browser-start-session',\n\tname: 'cloudflareBrowserStartSession',\n\tdescription:\n\t\t'Start a Cloudflare Browser Run session for interactive browser control and return its connection metadata. This creates a session; it does not navigate or render content.',\n\tinputSchema: cloudflareBrowserStartSessionInputSchema,\n\toutputSchema: cloudflareBrowserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).startSession(input)\n})\n\nexport const cloudflareBrowserGetSessionTool = defineTool({\n\tid: 'cloudflare-browser-get-session',\n\tname: 'cloudflareBrowserGetSession',\n\tdescription:\n\t\t'Get the status and connection metadata for an existing Cloudflare Browser Run session. Use this to reconnect or check whether the session is still available.',\n\tinputSchema: cloudflareBrowserSessionIdInputSchema,\n\toutputSchema: cloudflareBrowserSessionOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).getSession(input)\n})\n\nexport const cloudflareBrowserStopSessionTool = defineTool({\n\tid: 'cloudflare-browser-stop-session',\n\tname: 'cloudflareBrowserStopSession',\n\tdescription: 'Close a Cloudflare Browser Run session by session id.',\n\tinputSchema: cloudflareBrowserSessionIdInputSchema,\n\toutputSchema: cloudflareBrowserSessionOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => CloudflareBrowserClient.fromContext(ctx).stopSession(input)\n})\n\nexport const cloudflareBrowserModule = defineModule({\n\tid: 'cloudflare-browser',\n\ttitle: 'Cloudflare Browser Run',\n\tdescription:\n\t\t'Cloudflare Browser Run vendor pack for browser sessions plus HTML/URL PDF and screenshot quick actions.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: cloudflareBrowserClientAuthSchema },\n\tcategories: ['browser', 'cloudflare'],\n\tclassification: 'standard',\n\ttags: ['render', 'cdp', 'session'],\n\ttools: [\n\t\tcloudflareBrowserStartSessionTool,\n\t\tcloudflareBrowserGetSessionTool,\n\t\tcloudflareBrowserStopSessionTool,\n\t\tcloudflareBrowserRenderPdfTool,\n\t\tcloudflareBrowserRenderScreenshotTool\n\t]\n})\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as ToolError } from "./errors-DoSpNHvs.js";
|
|
2
|
-
import { n as defineModule, r as defineTool } from "./define-
|
|
2
|
+
import { n as defineModule, r as defineTool } from "./define-CbQI8dAN.js";
|
|
3
3
|
import { n as requireAuth } from "./provider-CgDAlg6K.js";
|
|
4
4
|
import { t as HttpService } from "./http-service-BMBIryAL.js";
|
|
5
5
|
import { n as runBatchItems, t as batchResultSchema } from "./batch-Co1ujeAW.js";
|
|
@@ -194,4 +194,4 @@ const cloudflareEmailModule = defineModule({
|
|
|
194
194
|
//#endregion
|
|
195
195
|
export { cloudflareEmailAuthSchema as a, cloudflareEmailSendInputSchema as c, CloudflareEmailClient as i, cloudflareEmailSendOutputSchema as l, cloudflareEmailSendBatchTool as n, cloudflareEmailSendBatchInputSchema as o, cloudflareEmailSendTool as r, cloudflareEmailSendBatchOutputSchema as s, cloudflareEmailModule as t };
|
|
196
196
|
|
|
197
|
-
//# sourceMappingURL=cloudflare-email-
|
|
197
|
+
//# sourceMappingURL=cloudflare-email-oS9Ku8a6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare-email-bsq902dg.js","names":["#auth","#http"],"sources":["../src/vendors/cloudflare-email/contracts.ts","../src/vendors/cloudflare-email/domain.ts","../src/vendors/cloudflare-email/client.ts","../src/vendors/cloudflare-email/module.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { batchResultSchema } from '../../shared/batch'\nimport type { NamedAddress } from '../_email'\nimport { attachmentSchema, MAX_BATCH_EMAILS, MAX_EMAIL_BYTES, namedAddressSchema } from '../_email'\n\nexport { MAX_BATCH_EMAILS, MAX_EMAIL_BYTES, namedAddressSchema, attachmentSchema }\nexport type { NamedAddress }\n\nexport const cloudflareEmailAuthSchema = z.object({\n\taccount_id: z.string().min(1).describe('Cloudflare account id'),\n\tapi_token: z.string().min(1).describe('Cloudflare API token with Email Sending permission')\n})\n\nexport type CloudflareEmailAuth = z.infer<typeof cloudflareEmailAuthSchema>\n\nexport const cloudflareEmailSendInputSchema = z\n\t.object({\n\t\tto: z\n\t\t\t.union([namedAddressSchema, z.array(namedAddressSchema).min(1).max(50)])\n\t\t\t.describe('Primary recipient address or list (max 50 combined to/cc/bcc)'),\n\t\tfrom: namedAddressSchema.describe('Verified sender address on the sending domain'),\n\t\tsubject: z.string().min(1).max(998).describe('Email subject line'),\n\t\thtml: z.string().optional().describe('HTML body. Provide html and/or text'),\n\t\ttext: z.string().optional().describe('Plain text body. Provide html and/or text'),\n\t\tcc: z\n\t\t\t.union([namedAddressSchema, z.array(namedAddressSchema).max(50)])\n\t\t\t.optional()\n\t\t\t.describe('CC recipients'),\n\t\tbcc: z\n\t\t\t.union([namedAddressSchema, z.array(namedAddressSchema).max(50)])\n\t\t\t.optional()\n\t\t\t.describe('BCC recipients'),\n\t\treply_to: namedAddressSchema.optional().describe('Reply-To address'),\n\t\theaders: z.record(z.string(), z.string()).optional().describe('Custom headers as a string map'),\n\t\tattachments: z\n\t\t\t.array(attachmentSchema)\n\t\t\t.max(32)\n\t\t\t.optional()\n\t\t\t.describe('Up to 32 base64 attachments. Total message must stay under 5 MiB')\n\t})\n\t.refine((v) => Boolean(v.html?.trim() || v.text?.trim()), {\n\t\tmessage: 'Provide html and/or text body'\n\t})\n\nexport const cloudflareEmailSendOutputSchema = z.object({\n\tsuccess: z.boolean().describe('Whether Cloudflare accepted the request'),\n\taccepted: z.array(z.string()).optional().describe('Addresses delivered and/or queued when known'),\n\trejected: z.array(z.string()).optional().describe('Addresses permanently rejected when known')\n})\n\nexport const cloudflareEmailSendBatchInputSchema = z.object({\n\tmessages: z.array(cloudflareEmailSendInputSchema).min(1).max(MAX_BATCH_EMAILS).describe('Messages to send (max 20)')\n})\n\nexport const cloudflareEmailSendBatchOutputSchema = batchResultSchema(cloudflareEmailSendOutputSchema)\n\nexport type CloudflareEmailSendInput = z.infer<typeof cloudflareEmailSendInputSchema>\nexport type CloudflareEmailSendOutput = z.infer<typeof cloudflareEmailSendOutputSchema>\nexport type CloudflareEmailSendBatchInput = z.infer<typeof cloudflareEmailSendBatchInputSchema>\nexport type CloudflareEmailSendBatchOutput = z.infer<typeof cloudflareEmailSendBatchOutputSchema>\n","/**\n * Cloudflare Email Sending payload + envelope parse.\n * Vertical helpers: `vendors/_email`.\n */\n\nimport { isNumber, isPlainObject, isString, pick } from 'es-toolkit'\nimport { isArray } from 'es-toolkit/compat'\n\nimport { ToolError } from '../../core/errors'\nimport { addressObject, addressObjectList, assertEmailSize, assertRecipientLimit } from '../_email'\nimport type { CloudflareEmailSendInput, CloudflareEmailSendOutput } from './contracts'\n\nexport function buildSendPayload(input: CloudflareEmailSendInput): Record<string, unknown> {\n\treturn {\n\t\t...pick(input, ['subject', 'html', 'text', 'headers']),\n\t\tto: addressObjectList(input.to),\n\t\tfrom: addressObject(input.from),\n\t\tcc: addressObjectList(input.cc),\n\t\tbcc: addressObjectList(input.bcc),\n\t\t...(input.reply_to && { replyTo: addressObject(input.reply_to) }),\n\t\t...(input.attachments && {\n\t\t\tattachments: input.attachments.map((att) => ({\n\t\t\t\tcontent: att.content,\n\t\t\t\tfilename: att.filename,\n\t\t\t\ttype: att.type,\n\t\t\t\t...(att.disposition && { disposition: att.disposition }),\n\t\t\t\t// Cloudflare Email Sending uses camelCase wire fields (same as replyTo).\n\t\t\t\t...(att.content_id && { contentId: att.content_id })\n\t\t\t}))\n\t\t})\n\t}\n}\n\nexport function preflightSend(input: CloudflareEmailSendInput): Record<string, unknown> {\n\tassertRecipientLimit(input)\n\tconst payload = buildSendPayload(input)\n\tassertEmailSize(\n\t\tpayload,\n\t\tinput.attachments?.map((a) => a.content)\n\t)\n\treturn payload\n}\n\nfunction stringArray(value: unknown): string[] {\n\treturn isArray(value) ? value.filter(isString) : []\n}\n\nfunction firstError(errors: unknown): { message?: string; code?: number } {\n\tif (!isArray(errors) || errors.length === 0) return {}\n\tconst first = errors[0]\n\tif (!isPlainObject(first)) return {}\n\tconst message = first['message']\n\tconst code = first['code']\n\treturn {\n\t\t...(isString(message) && message.length > 0 && { message }),\n\t\t...(isNumber(code) && Number.isFinite(code) && { code })\n\t}\n}\n\n/** Map Cloudflare `{ success, result | errors }` to tool output or ToolError. */\nexport function parseSendResult(data: unknown): CloudflareEmailSendOutput {\n\tif (!isPlainObject(data)) {\n\t\tthrow new ToolError('Cloudflare Email returned an unexpected payload', { code: 'upstream' })\n\t}\n\n\tif (data['success'] === false) {\n\t\tconst { message, code: cfCode } = firstError(data['errors'])\n\t\tconst text = message ?? 'Email API rejected the send'\n\t\tconst lower = text.toLowerCase()\n\t\tconst code =\n\t\t\tlower.includes('unauthorized') || lower.includes('authentication') || cfCode === 10000\n\t\t\t\t? 'bad_auth'\n\t\t\t\t: lower.includes('forbidden') || lower.includes('permission')\n\t\t\t\t\t? 'forbidden'\n\t\t\t\t\t: lower.includes('rate') || lower.includes('too many')\n\t\t\t\t\t\t? 'rate_limited'\n\t\t\t\t\t\t: lower.includes('too large') || lower.includes('size')\n\t\t\t\t\t\t\t? 'too_large'\n\t\t\t\t\t\t\t: 'upstream'\n\t\tthrow new ToolError(text, {\n\t\t\tcode,\n\t\t\tretryable: code === 'rate_limited',\n\t\t\tdetails: {\n\t\t\t\tsuccess: false,\n\t\t\t\tcloudflare_error_code: cfCode\n\t\t\t}\n\t\t})\n\t}\n\n\tconst result = data['result']\n\tif (!isPlainObject(result)) {\n\t\tthrow new ToolError('Cloudflare Email returned no result object', { code: 'upstream' })\n\t}\n\n\tconst delivered = stringArray(result['delivered'])\n\tconst queued = stringArray(result['queued'])\n\tconst rejected = stringArray(result['permanent_bounces'])\n\tconst accepted = [...delivered, ...queued]\n\n\treturn {\n\t\tsuccess: data['success'] === true,\n\t\t...(accepted.length > 0 && { accepted }),\n\t\t...(rejected.length > 0 && { rejected })\n\t}\n}\n","/**\n * Cloudflare Email Sending vendor client.\n * Host: `new CloudflareEmailClient(auth)`. Agent tools: `fromContext(ctx)`.\n */\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { runBatchItems } from '../../shared/batch'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tCloudflareEmailAuth,\n\tCloudflareEmailSendBatchInput,\n\tCloudflareEmailSendBatchOutput,\n\tCloudflareEmailSendInput,\n\tCloudflareEmailSendOutput\n} from './contracts'\nimport { cloudflareEmailAuthSchema } from './contracts'\nimport { parseSendResult, preflightSend } from './domain'\n\nexport type CloudflareEmailClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class CloudflareEmailClient {\n\treadonly #auth: CloudflareEmailAuth\n\treadonly #http: HttpService\n\n\tconstructor(auth: CloudflareEmailAuth, options: CloudflareEmailClientOptions = {}) {\n\t\tconst parsed = cloudflareEmailAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Cloudflare Email auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#http = new HttpService({\n\t\t\t...options,\n\t\t\tbaseURL: 'https://api.cloudflare.com/client/v4',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${this.#auth.api_token}`,\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tlabel: 'Cloudflare Email'\n\t\t})\n\t}\n\n\tstatic fromContext(ctx: ToolContext): CloudflareEmailClient {\n\t\tconst auth = requireAuth(ctx, cloudflareEmailAuthSchema)\n\t\treturn new CloudflareEmailClient(auth, {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\t/** POST /accounts/{account_id}/email/sending/send */\n\tasync send(input: CloudflareEmailSendInput): Promise<CloudflareEmailSendOutput> {\n\t\tconst payload = preflightSend(input)\n\t\tconst path = `/accounts/${encodeURIComponent(this.#auth.account_id)}/email/sending/send`\n\t\tconst { data } = await this.#http.post(path, payload, { label: 'Cloudflare Email send' })\n\t\treturn parseSendResult(data)\n\t}\n\n\t/** Sequential batch of independent sends (partial failure OK). */\n\tasync sendBatch(input: CloudflareEmailSendBatchInput): Promise<CloudflareEmailSendBatchOutput> {\n\t\treturn runBatchItems(input.messages, (message) => this.send(message))\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { CloudflareEmailClient } from './client'\nimport {\n\tcloudflareEmailAuthSchema,\n\tcloudflareEmailSendBatchInputSchema,\n\tcloudflareEmailSendBatchOutputSchema,\n\tcloudflareEmailSendInputSchema,\n\tcloudflareEmailSendOutputSchema\n} from './contracts'\n\n/** Single-email send tool. Host binds auth via withAuth. */\nexport const cloudflareEmailSendTool = defineTool({\n\tid: 'cloudflare-email-send',\n\tname: 'cloudflareEmailSend',\n\tdescription:\n\t\t'Send one email via Cloudflare Email Sending. Subject plus html and/or text. Optional cc, bcc, reply_to, headers, base64 attachments. Total under 5 MiB.',\n\tinputSchema: cloudflareEmailSendInputSchema,\n\toutputSchema: cloudflareEmailSendOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareEmailClient.fromContext(ctx).send(input)\n})\n\n/** Batch send (max 20). Per-message success/error; does not abort the batch. */\nexport const cloudflareEmailSendBatchTool = defineTool({\n\tid: 'cloudflare-email-send-batch',\n\tname: 'cloudflareEmailSendBatch',\n\tdescription:\n\t\t'Send up to 20 emails via Cloudflare Email Sending. Per-message success or error without aborting the batch.',\n\tinputSchema: cloudflareEmailSendBatchInputSchema,\n\toutputSchema: cloudflareEmailSendBatchOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareEmailClient.fromContext(ctx).sendBatch(input)\n})\n\nexport const cloudflareEmailModule = defineModule({\n\tid: 'cloudflare-email',\n\ttitle: 'Cloudflare Email',\n\tdescription:\n\t\t'Cloudflare Email Sending vendor pack: send one email or a batch (max 20). Not a multi-provider email seam.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: cloudflareEmailAuthSchema },\n\tcategories: ['email', 'cloudflare'],\n\tclassification: 'pii',\n\ttags: ['send'],\n\ttools: [cloudflareEmailSendTool, cloudflareEmailSendBatchTool]\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloudflare-email-oS9Ku8a6.js","names":["#auth","#http"],"sources":["../src/vendors/cloudflare-email/contracts.ts","../src/vendors/cloudflare-email/domain.ts","../src/vendors/cloudflare-email/client.ts","../src/vendors/cloudflare-email/module.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { batchResultSchema } from '../../shared/batch'\nimport type { NamedAddress } from '../_email'\nimport { attachmentSchema, MAX_BATCH_EMAILS, MAX_EMAIL_BYTES, namedAddressSchema } from '../_email'\n\nexport { MAX_BATCH_EMAILS, MAX_EMAIL_BYTES, namedAddressSchema, attachmentSchema }\nexport type { NamedAddress }\n\nexport const cloudflareEmailAuthSchema = z.object({\n\taccount_id: z.string().min(1).describe('Cloudflare account id'),\n\tapi_token: z.string().min(1).describe('Cloudflare API token with Email Sending permission')\n})\n\nexport type CloudflareEmailAuth = z.infer<typeof cloudflareEmailAuthSchema>\n\nexport const cloudflareEmailSendInputSchema = z\n\t.object({\n\t\tto: z\n\t\t\t.union([namedAddressSchema, z.array(namedAddressSchema).min(1).max(50)])\n\t\t\t.describe('Primary recipient address or list (max 50 combined to/cc/bcc)'),\n\t\tfrom: namedAddressSchema.describe('Verified sender address on the sending domain'),\n\t\tsubject: z.string().min(1).max(998).describe('Email subject line'),\n\t\thtml: z.string().optional().describe('HTML body. Provide html and/or text'),\n\t\ttext: z.string().optional().describe('Plain text body. Provide html and/or text'),\n\t\tcc: z\n\t\t\t.union([namedAddressSchema, z.array(namedAddressSchema).max(50)])\n\t\t\t.optional()\n\t\t\t.describe('CC recipients'),\n\t\tbcc: z\n\t\t\t.union([namedAddressSchema, z.array(namedAddressSchema).max(50)])\n\t\t\t.optional()\n\t\t\t.describe('BCC recipients'),\n\t\treply_to: namedAddressSchema.optional().describe('Reply-To address'),\n\t\theaders: z.record(z.string(), z.string()).optional().describe('Custom headers as a string map'),\n\t\tattachments: z\n\t\t\t.array(attachmentSchema)\n\t\t\t.max(32)\n\t\t\t.optional()\n\t\t\t.describe('Up to 32 base64 attachments. Total message must stay under 5 MiB')\n\t})\n\t.refine((v) => Boolean(v.html?.trim() || v.text?.trim()), {\n\t\tmessage: 'Provide html and/or text body'\n\t})\n\nexport const cloudflareEmailSendOutputSchema = z.object({\n\tsuccess: z.boolean().describe('Whether Cloudflare accepted the request'),\n\taccepted: z.array(z.string()).optional().describe('Addresses delivered and/or queued when known'),\n\trejected: z.array(z.string()).optional().describe('Addresses permanently rejected when known')\n})\n\nexport const cloudflareEmailSendBatchInputSchema = z.object({\n\tmessages: z.array(cloudflareEmailSendInputSchema).min(1).max(MAX_BATCH_EMAILS).describe('Messages to send (max 20)')\n})\n\nexport const cloudflareEmailSendBatchOutputSchema = batchResultSchema(cloudflareEmailSendOutputSchema)\n\nexport type CloudflareEmailSendInput = z.infer<typeof cloudflareEmailSendInputSchema>\nexport type CloudflareEmailSendOutput = z.infer<typeof cloudflareEmailSendOutputSchema>\nexport type CloudflareEmailSendBatchInput = z.infer<typeof cloudflareEmailSendBatchInputSchema>\nexport type CloudflareEmailSendBatchOutput = z.infer<typeof cloudflareEmailSendBatchOutputSchema>\n","/**\n * Cloudflare Email Sending payload + envelope parse.\n * Vertical helpers: `vendors/_email`.\n */\n\nimport { isNumber, isPlainObject, isString, pick } from 'es-toolkit'\nimport { isArray } from 'es-toolkit/compat'\n\nimport { ToolError } from '../../core/errors'\nimport { addressObject, addressObjectList, assertEmailSize, assertRecipientLimit } from '../_email'\nimport type { CloudflareEmailSendInput, CloudflareEmailSendOutput } from './contracts'\n\nexport function buildSendPayload(input: CloudflareEmailSendInput): Record<string, unknown> {\n\treturn {\n\t\t...pick(input, ['subject', 'html', 'text', 'headers']),\n\t\tto: addressObjectList(input.to),\n\t\tfrom: addressObject(input.from),\n\t\tcc: addressObjectList(input.cc),\n\t\tbcc: addressObjectList(input.bcc),\n\t\t...(input.reply_to && { replyTo: addressObject(input.reply_to) }),\n\t\t...(input.attachments && {\n\t\t\tattachments: input.attachments.map((att) => ({\n\t\t\t\tcontent: att.content,\n\t\t\t\tfilename: att.filename,\n\t\t\t\ttype: att.type,\n\t\t\t\t...(att.disposition && { disposition: att.disposition }),\n\t\t\t\t// Cloudflare Email Sending uses camelCase wire fields (same as replyTo).\n\t\t\t\t...(att.content_id && { contentId: att.content_id })\n\t\t\t}))\n\t\t})\n\t}\n}\n\nexport function preflightSend(input: CloudflareEmailSendInput): Record<string, unknown> {\n\tassertRecipientLimit(input)\n\tconst payload = buildSendPayload(input)\n\tassertEmailSize(\n\t\tpayload,\n\t\tinput.attachments?.map((a) => a.content)\n\t)\n\treturn payload\n}\n\nfunction stringArray(value: unknown): string[] {\n\treturn isArray(value) ? value.filter(isString) : []\n}\n\nfunction firstError(errors: unknown): { message?: string; code?: number } {\n\tif (!isArray(errors) || errors.length === 0) return {}\n\tconst first = errors[0]\n\tif (!isPlainObject(first)) return {}\n\tconst message = first['message']\n\tconst code = first['code']\n\treturn {\n\t\t...(isString(message) && message.length > 0 && { message }),\n\t\t...(isNumber(code) && Number.isFinite(code) && { code })\n\t}\n}\n\n/** Map Cloudflare `{ success, result | errors }` to tool output or ToolError. */\nexport function parseSendResult(data: unknown): CloudflareEmailSendOutput {\n\tif (!isPlainObject(data)) {\n\t\tthrow new ToolError('Cloudflare Email returned an unexpected payload', { code: 'upstream' })\n\t}\n\n\tif (data['success'] === false) {\n\t\tconst { message, code: cfCode } = firstError(data['errors'])\n\t\tconst text = message ?? 'Email API rejected the send'\n\t\tconst lower = text.toLowerCase()\n\t\tconst code =\n\t\t\tlower.includes('unauthorized') || lower.includes('authentication') || cfCode === 10000\n\t\t\t\t? 'bad_auth'\n\t\t\t\t: lower.includes('forbidden') || lower.includes('permission')\n\t\t\t\t\t? 'forbidden'\n\t\t\t\t\t: lower.includes('rate') || lower.includes('too many')\n\t\t\t\t\t\t? 'rate_limited'\n\t\t\t\t\t\t: lower.includes('too large') || lower.includes('size')\n\t\t\t\t\t\t\t? 'too_large'\n\t\t\t\t\t\t\t: 'upstream'\n\t\tthrow new ToolError(text, {\n\t\t\tcode,\n\t\t\tretryable: code === 'rate_limited',\n\t\t\tdetails: {\n\t\t\t\tsuccess: false,\n\t\t\t\tcloudflare_error_code: cfCode\n\t\t\t}\n\t\t})\n\t}\n\n\tconst result = data['result']\n\tif (!isPlainObject(result)) {\n\t\tthrow new ToolError('Cloudflare Email returned no result object', { code: 'upstream' })\n\t}\n\n\tconst delivered = stringArray(result['delivered'])\n\tconst queued = stringArray(result['queued'])\n\tconst rejected = stringArray(result['permanent_bounces'])\n\tconst accepted = [...delivered, ...queued]\n\n\treturn {\n\t\tsuccess: data['success'] === true,\n\t\t...(accepted.length > 0 && { accepted }),\n\t\t...(rejected.length > 0 && { rejected })\n\t}\n}\n","/**\n * Cloudflare Email Sending vendor client.\n * Host: `new CloudflareEmailClient(auth)`. Agent tools: `fromContext(ctx)`.\n */\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { runBatchItems } from '../../shared/batch'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tCloudflareEmailAuth,\n\tCloudflareEmailSendBatchInput,\n\tCloudflareEmailSendBatchOutput,\n\tCloudflareEmailSendInput,\n\tCloudflareEmailSendOutput\n} from './contracts'\nimport { cloudflareEmailAuthSchema } from './contracts'\nimport { parseSendResult, preflightSend } from './domain'\n\nexport type CloudflareEmailClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class CloudflareEmailClient {\n\treadonly #auth: CloudflareEmailAuth\n\treadonly #http: HttpService\n\n\tconstructor(auth: CloudflareEmailAuth, options: CloudflareEmailClientOptions = {}) {\n\t\tconst parsed = cloudflareEmailAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Cloudflare Email auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#http = new HttpService({\n\t\t\t...options,\n\t\t\tbaseURL: 'https://api.cloudflare.com/client/v4',\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${this.#auth.api_token}`,\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tlabel: 'Cloudflare Email'\n\t\t})\n\t}\n\n\tstatic fromContext(ctx: ToolContext): CloudflareEmailClient {\n\t\tconst auth = requireAuth(ctx, cloudflareEmailAuthSchema)\n\t\treturn new CloudflareEmailClient(auth, {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\t/** POST /accounts/{account_id}/email/sending/send */\n\tasync send(input: CloudflareEmailSendInput): Promise<CloudflareEmailSendOutput> {\n\t\tconst payload = preflightSend(input)\n\t\tconst path = `/accounts/${encodeURIComponent(this.#auth.account_id)}/email/sending/send`\n\t\tconst { data } = await this.#http.post(path, payload, { label: 'Cloudflare Email send' })\n\t\treturn parseSendResult(data)\n\t}\n\n\t/** Sequential batch of independent sends (partial failure OK). */\n\tasync sendBatch(input: CloudflareEmailSendBatchInput): Promise<CloudflareEmailSendBatchOutput> {\n\t\treturn runBatchItems(input.messages, (message) => this.send(message))\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { CloudflareEmailClient } from './client'\nimport {\n\tcloudflareEmailAuthSchema,\n\tcloudflareEmailSendBatchInputSchema,\n\tcloudflareEmailSendBatchOutputSchema,\n\tcloudflareEmailSendInputSchema,\n\tcloudflareEmailSendOutputSchema\n} from './contracts'\n\n/** Single-email send tool. Host binds auth via withAuth. */\nexport const cloudflareEmailSendTool = defineTool({\n\tid: 'cloudflare-email-send',\n\tname: 'cloudflareEmailSend',\n\tdescription:\n\t\t'Send one email via Cloudflare Email Sending. Subject plus html and/or text. Optional cc, bcc, reply_to, headers, base64 attachments. Total under 5 MiB.',\n\tinputSchema: cloudflareEmailSendInputSchema,\n\toutputSchema: cloudflareEmailSendOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareEmailClient.fromContext(ctx).send(input)\n})\n\n/** Batch send (max 20). Per-message success/error; does not abort the batch. */\nexport const cloudflareEmailSendBatchTool = defineTool({\n\tid: 'cloudflare-email-send-batch',\n\tname: 'cloudflareEmailSendBatch',\n\tdescription:\n\t\t'Send up to 20 emails via Cloudflare Email Sending. Per-message success or error without aborting the batch.',\n\tinputSchema: cloudflareEmailSendBatchInputSchema,\n\toutputSchema: cloudflareEmailSendBatchOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\texecute: async (input, ctx) => CloudflareEmailClient.fromContext(ctx).sendBatch(input)\n})\n\nexport const cloudflareEmailModule = defineModule({\n\tid: 'cloudflare-email',\n\ttitle: 'Cloudflare Email',\n\tdescription:\n\t\t'Cloudflare Email Sending vendor pack: send one email or a batch (max 20). Not a multi-provider email seam.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: cloudflareEmailAuthSchema },\n\tcategories: ['email', 'cloudflare'],\n\tclassification: 'pii',\n\ttags: ['send'],\n\ttools: [cloudflareEmailSendTool, cloudflareEmailSendBatchTool]\n})\n"],"mappings":"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"}
|