@5ss/ai-tools 2.11.4 → 3.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imessage-CH49-sFn.js","names":["#http","#defaultPhone","#post","#phone"],"sources":["../src/vendors/imessage/contracts.ts","../src/vendors/imessage/domain.ts","../src/vendors/imessage/client.ts","../src/vendors/imessage/module.ts"],"sourcesContent":["import { z } from 'zod'\n\n/**\n * Host auth for the hosted photon-rest-proxy (REST → Spectrum gRPC).\n * Credentials are forwarded per request; the proxy stores nothing.\n *\n * Proxy route map (package client → HTTP):\n * - sendText → POST /v1/send\n * - editText → POST /v1/edit\n * - sendChatAction / stopTyping → POST /v1/typing\n * - setReaction → POST /v1/react\n * - clearReaction → POST /v1/clear-reaction (target message_id + emoji; proxy gap if not yet supported)\n * - unsend → POST /v1/unsend\n * - read → POST /v1/read\n * - sendMedia → POST /v1/media\n * - downloadFile → POST /v1/download (chat_id optional; proxy gap if still required)\n * - ensureChat → POST /v1/ensure-chat (host-only; proxy gap until implemented)\n */\nexport const imessageAuthSchema = z.object({\n\tbase_url: z.url().describe('Origin of the hosted photon-rest-proxy, for example https://photon-proxy.example.com'),\n\tproject_id: z.string().min(1).describe('Spectrum project id (sent as x-spectrum-project-id)'),\n\tproject_secret: z.string().min(1).describe('Spectrum project secret (sent as x-spectrum-project-secret)'),\n\tphone: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Optional default iMessage line phone when the project has multiple lines')\n})\n\nexport type ImessageAuth = z.infer<typeof imessageAuthSchema>\n\nexport const imessageChatActionSchema = z.enum([\n\t'typing',\n\t'upload_photo',\n\t'record_video',\n\t'upload_video',\n\t'record_voice',\n\t'upload_voice',\n\t'upload_document',\n\t'choose_sticker',\n\t'find_location',\n\t'record_video_note',\n\t'upload_video_note'\n])\n\nexport const imessageSendTextInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid (e.g. any;-;alice@example.com)'),\n\ttext: z.string().min(1).describe('Message text'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override for multi-line projects')\n})\n\nexport const imessageMessageOutputSchema = z.object({\n\tmessage_id: z.string().min(1).describe('Message guid (provider id for journaling)'),\n\tspace_id: z.string().describe('Chat guid (same as chat_id)')\n})\n\nexport const imessageEditTextInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\tmessage_id: z.string().min(1).describe('Message guid to edit'),\n\ttext: z.string().min(1).describe('Replacement text'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageSendChatActionInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\taction: imessageChatActionSchema.describe('Chat action; non-typing values map to typing start'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageSetReactionInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\tmessage_id: z.string().min(1).describe('Message guid to react to'),\n\temoji: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(64)\n\t\t.describe(\n\t\t\t'Tapback name (love, like, dislike, laugh, emphasize, question) or an emoji character the channel accepts'\n\t\t),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageUnsendInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\tmessage_id: z.string().min(1).describe('Message guid to unsend'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageReadInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\tmessage_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Optional; mark-read may apply to the whole chat (field kept for seam parity)'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageOkOutputSchema = z.object({\n\tok: z.boolean(),\n\tspace_id: z.string().optional()\n})\n\nexport const MAX_MEDIA_BYTES = 20 * 1024 * 1024\n\n/**\n * Clear a reaction. `message_id` is the **target** message that was reacted to;\n * `emoji` must match set-reaction. Proxy should clear by target+emoji (not reaction message id).\n */\nexport const imessageClearReactionInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\tmessage_id: z.string().min(1).describe('Target message guid that was reacted to'),\n\temoji: z.string().min(1).max(64).describe('Same tapback name or emoji used when setting the reaction'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageSendMediaInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('iMessage chat guid'),\n\tkind: z.enum(['photo', 'document']).describe('Media kind (presentation)'),\n\tbody_base64: z.string().min(1).describe('File body as base64'),\n\tfile_name: z.string().min(1).describe('File name including extension'),\n\tcaption: z.string().optional().describe('Optional caption sent as a follow-up text message'),\n\tcontent_type: z.string().optional().describe('Optional MIME type; inferred from file_name when omitted'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageDownloadFileInputSchema = z.object({\n\tfile_id: z.string().min(1).describe('Attachment guid (from inbound payload or upload)'),\n\tfile_name: z.string().min(1).optional().describe('Preferred file name for the download result'),\n\tchat_id: z.string().min(1).optional().describe('Chat guid (optional when proxy can resolve by file_id alone)'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageDownloadFileOutputSchema = z.object({\n\tfile_name: z.string(),\n\tfile_size: z.number().optional(),\n\tbody_base64: z.string().describe('Downloaded file body as base64')\n})\n\n/**\n * Create (or resolve) a chat via proxy POST /v1/ensure-chat (host-only).\n * One address = 1:1; two or more = group.\n */\nexport const imessageEnsureChatInputSchema = z.object({\n\taddresses: z\n\t\t.array(z.string().min(1))\n\t\t.min(1)\n\t\t.describe('Peer phone number(s) or email(s). One address creates a 1:1 chat; two or more create a group'),\n\tmessage: z.string().min(1).optional().describe('Optional opening text sent in the same create call'),\n\tclient_message_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Optional idempotency key for chat creation and the optional opening send'),\n\tphone: z.string().min(1).optional().describe('Optional line phone override')\n})\n\nexport const imessageEnsureChatOutputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Chat guid for later send, edit, react, or unsend'),\n\tmessage_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Guid of the opening message when message was provided and the server returned one')\n})\n\nexport type ImessageSendTextInput = z.infer<typeof imessageSendTextInputSchema>\nexport type ImessageMessageOutput = z.infer<typeof imessageMessageOutputSchema>\nexport type ImessageEditTextInput = z.infer<typeof imessageEditTextInputSchema>\nexport type ImessageSendChatActionInput = z.infer<typeof imessageSendChatActionInputSchema>\nexport type ImessageSetReactionInput = z.infer<typeof imessageSetReactionInputSchema>\nexport type ImessageUnsendInput = z.infer<typeof imessageUnsendInputSchema>\nexport type ImessageReadInput = z.infer<typeof imessageReadInputSchema>\nexport type ImessageClearReactionInput = z.infer<typeof imessageClearReactionInputSchema>\nexport type ImessageSendMediaInput = z.infer<typeof imessageSendMediaInputSchema>\nexport type ImessageDownloadFileInput = z.infer<typeof imessageDownloadFileInputSchema>\nexport type ImessageDownloadFileOutput = z.infer<typeof imessageDownloadFileOutputSchema>\nexport type ImessageEnsureChatInput = z.infer<typeof imessageEnsureChatInputSchema>\nexport type ImessageEnsureChatOutput = z.infer<typeof imessageEnsureChatOutputSchema>\n","/**\n * photon-rest-proxy response parse + failure helpers (no HTTP).\n */\n\nimport { isPlainObject, isString } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { base64ToBytes } from '../../shared/bytes'\nimport type {\n\tImessageDownloadFileInput,\n\tImessageDownloadFileOutput,\n\tImessageEnsureChatOutput,\n\tImessageMessageOutput,\n\tImessageSendMediaInput\n} from './contracts'\nimport { MAX_MEDIA_BYTES } from './contracts'\n\nexport type ImessageFailureKind = 'definite_rejection' | 'outcome_unknown'\n\nexport class ImessageClientError extends ToolError {\n\treadonly failureKind: ImessageFailureKind\n\n\tconstructor(input: {\n\t\tmessage: string\n\t\tfailureKind: ImessageFailureKind\n\t\tstatus?: number\n\t\tcode?: string\n\t\tcause?: unknown\n\t}) {\n\t\tsuper(input.message, {\n\t\t\tcode: mapStatusToToolCode(input.status, input.code),\n\t\t\tretryable: input.failureKind === 'outcome_unknown',\n\t\t\tcause: input.cause,\n\t\t\tdetails: {\n\t\t\t\tfailure_kind: input.failureKind,\n\t\t\t\tstatus: input.status,\n\t\t\t\tproxy_error: input.code\n\t\t\t}\n\t\t})\n\t\tthis.name = 'ImessageClientError'\n\t\tthis.failureKind = input.failureKind\n\t}\n}\n\nexport function isImessageDefiniteRejection(error: unknown): boolean {\n\treturn error instanceof ImessageClientError && error.failureKind === 'definite_rejection'\n}\n\nexport function isImessageOutcomeUnknown(error: unknown): boolean {\n\treturn error instanceof ImessageClientError && error.failureKind === 'outcome_unknown'\n}\n\nfunction mapStatusToToolCode(status: number | undefined, proxyCode: string | undefined): ToolError['code'] {\n\tif (status === 401) return 'bad_auth'\n\tif (status === 403) return 'forbidden'\n\tif (status === 404) return 'not_found'\n\tif (status === 400) return 'bad_input'\n\tif (status === 429) return 'rate_limited'\n\tif (proxyCode === 'unauthorized') return 'bad_auth'\n\tif (proxyCode === 'message_not_found' || proxyCode === 'not_found') return 'not_found'\n\tif (proxyCode === 'unsupported' || proxyCode === 'not_implemented') return 'unsupported'\n\treturn 'upstream'\n}\n\nfunction isDefiniteStatus(status: number): boolean {\n\treturn status === 400 || status === 401 || status === 403 || status === 404\n}\n\n/** Parse photon-rest-proxy JSON error body or throw on non-2xx. */\nexport function assertProxyOk(label: string, status: number, data: unknown): void {\n\tif (status >= 200 && status < 300) return\n\n\tlet message = `${label} failed with HTTP ${status}`\n\tlet code: string | undefined\n\tif (isPlainObject(data)) {\n\t\tconst err = data['error']\n\t\tconst detail = data['detail']\n\t\tif (isString(err) && err.length > 0) {\n\t\t\tcode = err\n\t\t\tmessage = isString(detail) && detail.length > 0 ? `${err}: ${detail}` : err\n\t\t} else if (isString(detail) && detail.length > 0) {\n\t\t\tmessage = detail\n\t\t}\n\t}\n\n\tthrow new ImessageClientError({\n\t\tmessage,\n\t\tfailureKind: isDefiniteStatus(status) ? 'definite_rejection' : 'outcome_unknown',\n\t\tstatus,\n\t\t...(code && { code })\n\t})\n}\n\nfunction requireString(data: Record<string, unknown>, key: string, label: string): string {\n\tconst value = data[key]\n\tif (!isString(value) || value.length === 0) {\n\t\tthrow new ToolError(`iMessage proxy ${label} missing ${key}`, { code: 'upstream' })\n\t}\n\treturn value\n}\n\n/** Prefer space_id; accept chat_id alias from newer proxy shapes. */\nfunction spaceOrChatId(data: Record<string, unknown>, label: string): string {\n\tconst spaceId = data['space_id']\n\tif (isString(spaceId) && spaceId.length > 0) return spaceId\n\tconst chatId = data['chat_id']\n\tif (isString(chatId) && chatId.length > 0) return chatId\n\tthrow new ToolError(`iMessage proxy ${label} missing space_id`, { code: 'upstream' })\n}\n\nexport function parseMessageResult(data: unknown, label = 'send'): ImessageMessageOutput {\n\tif (!isPlainObject(data) || data['ok'] !== true) {\n\t\tthrow new ToolError(`iMessage proxy returned an unexpected ${label} payload`, { code: 'upstream' })\n\t}\n\treturn {\n\t\tspace_id: spaceOrChatId(data, label),\n\t\tmessage_id: requireString(data, 'message_id', label)\n\t}\n}\n\nexport function parseOkResult(data: unknown): { ok: true; space_id?: string } {\n\tif (!isPlainObject(data) || data['ok'] !== true) {\n\t\tthrow new ToolError('iMessage proxy returned an unexpected ok payload', { code: 'upstream' })\n\t}\n\tconst spaceId = data['space_id']\n\tconst chatId = data['chat_id']\n\tconst id =\n\t\tisString(spaceId) && spaceId.length > 0 ? spaceId : isString(chatId) && chatId.length > 0 ? chatId : undefined\n\treturn {\n\t\tok: true,\n\t\t...(id && { space_id: id })\n\t}\n}\n\nexport function parseEnsureChatResult(data: unknown): ImessageEnsureChatOutput {\n\tif (!isPlainObject(data) || data['ok'] !== true) {\n\t\tthrow new ToolError('iMessage proxy returned an unexpected ensure-chat payload', { code: 'upstream' })\n\t}\n\tconst chatId = spaceOrChatId(data, 'ensure-chat')\n\tconst messageId = data['message_id']\n\treturn {\n\t\tchat_id: chatId,\n\t\t...(isString(messageId) && messageId.length > 0 && { message_id: messageId })\n\t}\n}\n\n/** Map messaging-style chat_id to proxy space_id body fields. */\nexport function spaceBody(\n\tchatId: string | undefined,\n\tphone: string | undefined,\n\textra: Record<string, unknown> = {}\n): Record<string, unknown> {\n\treturn {\n\t\tplatform: 'imessage',\n\t\t...extra,\n\t\t...(chatId && { space_id: chatId }),\n\t\t...(phone && { phone })\n\t}\n}\n\n/** Decode and size-check media base64 for sendMedia. */\nexport function decodeMediaBody(bodyBase64: string): void {\n\tlet bytes: Uint8Array\n\ttry {\n\t\tbytes = base64ToBytes(bodyBase64)\n\t} catch (error) {\n\t\tthrow new ToolError('Invalid base64 body', { code: 'bad_input', cause: error })\n\t}\n\tif (bytes.byteLength === 0) {\n\t\tthrow new ToolError('Media body must not be empty', { code: 'bad_input' })\n\t}\n\tif (bytes.byteLength > MAX_MEDIA_BYTES) {\n\t\tthrow new ToolError('Media exceeds 20 MiB limit', {\n\t\t\tcode: 'too_large',\n\t\t\tdetails: { max_bytes: MAX_MEDIA_BYTES, content_length: bytes.byteLength }\n\t\t})\n\t}\n}\n\n/** Build POST /v1/media JSON body (base64 already validated). */\nexport function mediaBody(input: ImessageSendMediaInput, phone: string | undefined): Record<string, unknown> {\n\tdecodeMediaBody(input.body_base64)\n\treturn spaceBody(input.chat_id, phone, {\n\t\tbody_base64: input.body_base64,\n\t\tfile_name: input.file_name,\n\t\t...(input.content_type && { mime_type: input.content_type }),\n\t\t...(input.caption && { caption: input.caption })\n\t})\n}\n\nexport function parseDownloadResult(input: ImessageDownloadFileInput, data: unknown): ImessageDownloadFileOutput {\n\tif (!isPlainObject(data) || data['ok'] !== true) {\n\t\tthrow new ToolError('iMessage proxy returned an unexpected download payload', { code: 'upstream' })\n\t}\n\tconst bodyBase64 = data['body_base64']\n\tif (!isString(bodyBase64) || bodyBase64.length === 0) {\n\t\tthrow new ToolError('iMessage proxy download missing body_base64', { code: 'upstream' })\n\t}\n\tconst name = data['file_name']\n\tconst size = data['file_size']\n\treturn {\n\t\tfile_name: input.file_name ?? (isString(name) && name.length > 0 ? name : input.file_id),\n\t\t...(typeof size === 'number' && Number.isFinite(size) && { file_size: size }),\n\t\tbody_base64: bodyBase64\n\t}\n}\n","/**\n * iMessage vendor client via hosted photon-rest-proxy (REST → Spectrum gRPC).\n * Host: `new ImessageClient(auth)`. Agent tools: `fromContext(ctx)`.\n *\n * Workers-safe: only HTTP to the proxy. No Photon SDK / gRPC in this package.\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 { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tImessageAuth,\n\tImessageClearReactionInput,\n\tImessageDownloadFileInput,\n\tImessageDownloadFileOutput,\n\tImessageEditTextInput,\n\tImessageEnsureChatInput,\n\tImessageEnsureChatOutput,\n\tImessageMessageOutput,\n\tImessageReadInput,\n\tImessageSendChatActionInput,\n\tImessageSendMediaInput,\n\tImessageSendTextInput,\n\tImessageSetReactionInput,\n\tImessageUnsendInput\n} from './contracts'\nimport { imessageAuthSchema } from './contracts'\nimport {\n\tassertProxyOk,\n\tisImessageDefiniteRejection,\n\tisImessageOutcomeUnknown,\n\tImessageClientError,\n\tmediaBody,\n\tparseDownloadResult,\n\tparseEnsureChatResult,\n\tparseMessageResult,\n\tparseOkResult,\n\tspaceBody\n} from './domain'\n\nexport type ImessageClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class ImessageClient {\n\treadonly #http: HttpService\n\treadonly #defaultPhone: string | undefined\n\n\tconstructor(auth: ImessageAuth, options: ImessageClientOptions = {}) {\n\t\tconst parsed = imessageAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid iMessage 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\tconst { base_url, project_id, project_secret, phone } = parsed.data\n\t\tthis.#defaultPhone = phone\n\t\tthis.#http = new HttpService({\n\t\t\t...options,\n\t\t\tbaseURL: base_url,\n\t\t\theaders: {\n\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t'x-spectrum-project-id': project_id,\n\t\t\t\t'x-spectrum-project-secret': project_secret\n\t\t\t},\n\t\t\tlabel: 'iMessage'\n\t\t})\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ImessageClient {\n\t\tconst auth = requireAuth(ctx, imessageAuthSchema)\n\t\treturn new ImessageClient(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#phone(override: string | undefined): string | undefined {\n\t\treturn override ?? this.#defaultPhone\n\t}\n\n\tasync #post(path: string, body: Record<string, unknown>, label: string): Promise<unknown> {\n\t\tconst res = await this.#http.post(path, body, { label, noThrow: true })\n\t\tassertProxyOk(label, res.status, res.data)\n\t\treturn res.data\n\t}\n\n\t/**\n\t * Create a chat (1:1 or group). Host-only; not an agent tool.\n\t * Proxy: POST /v1/ensure-chat (fill on proxy if not yet shipped).\n\t */\n\tasync ensureChat(input: ImessageEnsureChatInput): Promise<ImessageEnsureChatOutput> {\n\t\tconst data = await this.#post(\n\t\t\t'/v1/ensure-chat',\n\t\t\tspaceBody(undefined, this.#phone(input.phone), {\n\t\t\t\taddresses: input.addresses,\n\t\t\t\t...(input.message && { message: input.message }),\n\t\t\t\t...(input.client_message_id && { client_message_id: input.client_message_id })\n\t\t\t}),\n\t\t\t'iMessage ensureChat'\n\t\t)\n\t\treturn parseEnsureChatResult(data)\n\t}\n\n\t/** POST /v1/send */\n\tasync sendText(input: ImessageSendTextInput): Promise<ImessageMessageOutput> {\n\t\tconst data = await this.#post(\n\t\t\t'/v1/send',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), { text: input.text }),\n\t\t\t'iMessage send'\n\t\t)\n\t\treturn parseMessageResult(data, 'send')\n\t}\n\n\t/** POST /v1/edit */\n\tasync editText(input: ImessageEditTextInput): Promise<ImessageMessageOutput> {\n\t\tconst data = await this.#post(\n\t\t\t'/v1/edit',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), {\n\t\t\t\tmessage_id: input.message_id,\n\t\t\t\ttext: input.text\n\t\t\t}),\n\t\t\t'iMessage edit'\n\t\t)\n\t\t// Prefer full message payload; fall back to ok + input message_id when proxy only returns ok.\n\t\tif (isPlainObject(data) && data['ok'] === true && isString(data['message_id']) && data['message_id'].length > 0) {\n\t\t\treturn parseMessageResult(data, 'edit')\n\t\t}\n\t\tconst ok = parseOkResult(data)\n\t\treturn {\n\t\t\tspace_id: ok.space_id ?? input.chat_id,\n\t\t\tmessage_id: input.message_id\n\t\t}\n\t}\n\n\t/**\n\t * POST /v1/typing.\n\t * Non-typing chat actions map to typing start (presentation parity with other channels).\n\t */\n\tasync sendChatAction(input: ImessageSendChatActionInput): Promise<void> {\n\t\tawait this.#post(\n\t\t\t'/v1/typing',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), { action: 'start' }),\n\t\t\t'iMessage typing'\n\t\t)\n\t}\n\n\t/** Stop typing indicator. */\n\tasync stopTyping(input: { chat_id: string; phone?: string }): Promise<void> {\n\t\tawait this.#post(\n\t\t\t'/v1/typing',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), { action: 'stop' }),\n\t\t\t'iMessage typing stop'\n\t\t)\n\t}\n\n\t/** POST /v1/react — returns reaction/message guid for journaling. */\n\tasync setReaction(input: ImessageSetReactionInput): Promise<ImessageMessageOutput> {\n\t\tconst data = await this.#post(\n\t\t\t'/v1/react',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), {\n\t\t\t\tmessage_id: input.message_id,\n\t\t\t\temoji: input.emoji\n\t\t\t}),\n\t\t\t'iMessage react'\n\t\t)\n\t\treturn parseMessageResult(data, 'react')\n\t}\n\n\t/**\n\t * POST /v1/clear-reaction.\n\t * Package contract: target message_id + emoji (same as setReaction).\n\t * Proxy should clear by target+emoji; older proxies that only accept reaction message ids need a gap fill.\n\t */\n\tasync clearReaction(input: ImessageClearReactionInput): Promise<void> {\n\t\tawait this.#post(\n\t\t\t'/v1/clear-reaction',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), {\n\t\t\t\tmessage_id: input.message_id,\n\t\t\t\temoji: input.emoji\n\t\t\t}),\n\t\t\t'iMessage clearReaction'\n\t\t)\n\t}\n\n\t/** POST /v1/unsend */\n\tasync unsend(input: ImessageUnsendInput): Promise<void> {\n\t\tawait this.#post(\n\t\t\t'/v1/unsend',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), { message_id: input.message_id }),\n\t\t\t'iMessage unsend'\n\t\t)\n\t}\n\n\t/** POST /v1/read */\n\tasync read(input: ImessageReadInput): Promise<void> {\n\t\tawait this.#post(\n\t\t\t'/v1/read',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), {\n\t\t\t\t...(input.message_id && { message_id: input.message_id })\n\t\t\t}),\n\t\t\t'iMessage read'\n\t\t)\n\t}\n\n\t/** POST /v1/media */\n\tasync sendMedia(input: ImessageSendMediaInput): Promise<ImessageMessageOutput> {\n\t\tconst data = await this.#post('/v1/media', mediaBody(input, this.#phone(input.phone)), 'iMessage sendMedia')\n\t\treturn parseMessageResult(data, 'media')\n\t}\n\n\t/**\n\t * POST /v1/download.\n\t * Prefer attachment guid alone; pass chat_id when the proxy still requires a space.\n\t */\n\tasync downloadFile(input: ImessageDownloadFileInput): Promise<ImessageDownloadFileOutput> {\n\t\tconst data = await this.#post(\n\t\t\t'/v1/download',\n\t\t\tspaceBody(input.chat_id, this.#phone(input.phone), { file_id: input.file_id }),\n\t\t\t'iMessage downloadFile'\n\t\t)\n\t\treturn parseDownloadResult(input, data)\n\t}\n\n\tasync answerCallback(_input: unknown): Promise<void> {\n\t\t// No interactive callbacks on iMessage.\n\t}\n}\n\nexport { isImessageDefiniteRejection, isImessageOutcomeUnknown, ImessageClientError }\n","import { defineModule, defineTool } from '../../core/define'\nimport { ImessageClient } from './client'\nimport {\n\timessageAuthSchema,\n\timessageClearReactionInputSchema,\n\timessageDownloadFileInputSchema,\n\timessageDownloadFileOutputSchema,\n\timessageEditTextInputSchema,\n\timessageMessageOutputSchema,\n\timessageOkOutputSchema,\n\timessageReadInputSchema,\n\timessageSendChatActionInputSchema,\n\timessageSendMediaInputSchema,\n\timessageSendTextInputSchema,\n\timessageSetReactionInputSchema,\n\timessageUnsendInputSchema\n} from './contracts'\n\nexport const imessageSendTextTool = defineTool({\n\tid: 'imessage-send-text',\n\tname: 'imessageSendText',\n\tdescription:\n\t\t'Send a text message to an iMessage chat. chat_id is the chat guid (e.g. any;-;+1555…). Returns message_id (guid) for later edits, reactions, or unsend.',\n\tinputSchema: imessageSendTextInputSchema,\n\toutputSchema: imessageMessageOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => ImessageClient.fromContext(ctx).sendText(input)\n})\n\nexport const imessageEditTextTool = defineTool({\n\tid: 'imessage-edit-text',\n\tname: 'imessageEditText',\n\tdescription: 'Edit the text of a previously sent iMessage. Requires chat guid and message guid.',\n\tinputSchema: imessageEditTextInputSchema,\n\toutputSchema: imessageMessageOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => ImessageClient.fromContext(ctx).editText(input)\n})\n\nexport const imessageSendChatActionTool = defineTool({\n\tid: 'imessage-send-chat-action',\n\tname: 'imessageSendChatAction',\n\tdescription: 'Show a typing indicator in an iMessage chat while a response is being prepared.',\n\tinputSchema: imessageSendChatActionInputSchema,\n\toutputSchema: imessageOkOutputSchema,\n\tsideEffect: 'none',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => {\n\t\tawait ImessageClient.fromContext(ctx).sendChatAction(input)\n\t\treturn { ok: true, space_id: input.chat_id }\n\t}\n})\n\nexport const imessageSetReactionTool = defineTool({\n\tid: 'imessage-set-reaction',\n\tname: 'imessageSetReaction',\n\tdescription:\n\t\t'React to an iMessage with a tapback (love, like, dislike, laugh, emphasize, question) or free emoji. Returns a message guid for journaling. To clear, call clear-reaction with the same target message_id and emoji.',\n\tinputSchema: imessageSetReactionInputSchema,\n\toutputSchema: imessageMessageOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => ImessageClient.fromContext(ctx).setReaction(input)\n})\n\nexport const imessageClearReactionTool = defineTool({\n\tid: 'imessage-clear-reaction',\n\tname: 'imessageClearReaction',\n\tdescription:\n\t\t'Clear an iMessage reaction. message_id is the target message that was reacted to; emoji must match set-reaction (tapback name or emoji character).',\n\tinputSchema: imessageClearReactionInputSchema,\n\toutputSchema: imessageOkOutputSchema,\n\tsideEffect: 'delete',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => {\n\t\tawait ImessageClient.fromContext(ctx).clearReaction(input)\n\t\treturn { ok: true, space_id: input.chat_id }\n\t}\n})\n\nexport const imessageUnsendTool = defineTool({\n\tid: 'imessage-unsend',\n\tname: 'imessageUnsend',\n\tdescription: 'Unsend a previously sent iMessage using its chat guid and message guid.',\n\tinputSchema: imessageUnsendInputSchema,\n\toutputSchema: imessageOkOutputSchema,\n\tsideEffect: 'delete',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => {\n\t\tawait ImessageClient.fromContext(ctx).unsend(input)\n\t\treturn { ok: true, space_id: input.chat_id }\n\t}\n})\n\nexport const imessageReadTool = defineTool({\n\tid: 'imessage-read',\n\tname: 'imessageRead',\n\tdescription: 'Mark an iMessage conversation as read (whole chat).',\n\tinputSchema: imessageReadInputSchema,\n\toutputSchema: imessageOkOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => {\n\t\tawait ImessageClient.fromContext(ctx).read(input)\n\t\treturn { ok: true, space_id: input.chat_id }\n\t}\n})\n\nexport const imessageSendMediaTool = defineTool({\n\tid: 'imessage-send-media',\n\tname: 'imessageSendMedia',\n\tdescription:\n\t\t'Upload and send one photo or document to an iMessage chat from base64 bytes. Optional caption is sent as a follow-up text message.',\n\tinputSchema: imessageSendMediaInputSchema,\n\toutputSchema: imessageMessageOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => ImessageClient.fromContext(ctx).sendMedia(input)\n})\n\nexport const imessageDownloadFileTool = defineTool({\n\tid: 'imessage-download-file',\n\tname: 'imessageDownloadFile',\n\tdescription: 'Download attachment bytes by attachment guid (file_id from inbound or upload).',\n\tinputSchema: imessageDownloadFileInputSchema,\n\toutputSchema: imessageDownloadFileOutputSchema,\n\tsideEffect: 'none',\n\truntime: 'both',\n\tnetwork: true,\n\texecute: async (input, ctx) => ImessageClient.fromContext(ctx).downloadFile(input)\n})\n\nexport const imessageModule = defineModule({\n\tid: 'imessage',\n\ttitle: 'iMessage',\n\tdescription:\n\t\t'iMessage tools for sending and editing text or media, typing indicators, reactions, unsend, read state, and attachment download via a bound photon-rest-proxy.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: imessageAuthSchema },\n\tcategories: ['messaging', 'chat'],\n\tclassification: 'pii',\n\ttags: ['imessage', 'photon'],\n\ttools: [\n\t\timessageSendTextTool,\n\t\timessageEditTextTool,\n\t\timessageSendChatActionTool,\n\t\timessageSetReactionTool,\n\t\timessageClearReactionTool,\n\t\timessageUnsendTool,\n\t\timessageReadTool,\n\t\timessageSendMediaTool,\n\t\timessageDownloadFileTool\n\t]\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAa,qBAAqB,EAAE,OAAO;CAC1C,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS,sFAAsF;CACjH,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,qDAAqD;CAC5F,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,6DAA6D;CACxG,OAAO,EACL,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,0EAA0E;AACtF,CAAC;AAID,MAAa,2BAA2B,EAAE,KAAK;CAC9C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD,CAAC;AAED,MAAa,8BAA8B,EAAE,OAAO;CACnD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,mDAAmD;CACvF,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,cAAc;CAC/C,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,sDAAsD;AACpG,CAAC;AAED,MAAa,8BAA8B,EAAE,OAAO;CACnD,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,2CAA2C;CAClF,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS,6BAA6B;AAC5D,CAAC;AAED,MAAa,8BAA8B,EAAE,OAAO;CACnD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,sBAAsB;CAC7D,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,kBAAkB;CACnD,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,oCAAoC,EAAE,OAAO;CACzD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,QAAQ,yBAAyB,SAAS,oDAAoD;CAC9F,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,iCAAiC,EAAE,OAAO;CACtD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,0BAA0B;CACjE,OAAO,EACL,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,IAAI,EAAE,CAAC,CACP,SACA,0GACD;CACD,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO;CACjD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,wBAAwB;CAC/D,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,0BAA0B,EAAE,OAAO;CAC/C,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,YAAY,EACV,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,8EAA8E;CACzF,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,yBAAyB,EAAE,OAAO;CAC9C,IAAI,EAAE,QAAQ;CACd,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;AAC/B,CAAC;AAED,MAAa,kBAAkB,KAAK,OAAO;;;;;AAM3C,MAAa,mCAAmC,EAAE,OAAO;CACxD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,yCAAyC;CAChF,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,SAAS,2DAA2D;CACrG,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,+BAA+B,EAAE,OAAO;CACpD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACxD,MAAM,EAAE,KAAK,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,SAAS,2BAA2B;CACxE,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,qBAAqB;CAC7D,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,+BAA+B;CACrE,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,mDAAmD;CAC3F,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,0DAA0D;CACvG,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,kCAAkC,EAAE,OAAO;CACvD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,kDAAkD;CACtF,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,6CAA6C;CAC9F,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8DAA8D;CAC7G,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,mCAAmC,EAAE,OAAO;CACxD,WAAW,EAAE,OAAO;CACpB,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,gCAAgC;AAClE,CAAC;;;;;AAMD,MAAa,gCAAgC,EAAE,OAAO;CACrD,WAAW,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACxB,IAAI,CAAC,CAAC,CACN,SAAS,8FAA8F;CACzG,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,oDAAoD;CACnG,mBAAmB,EACjB,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,0EAA0E;CACrF,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,8BAA8B;AAC5E,CAAC;AAED,MAAa,iCAAiC,EAAE,OAAO;CACtD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,kDAAkD;CACtF,YAAY,EACV,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,SAAS,CAAC,CACV,SAAS,mFAAmF;AAC/F,CAAC;;;;;;ACjJD,IAAa,sBAAb,cAAyC,UAAU;CAClD;CAEA,YAAY,OAMT;EACF,MAAM,MAAM,SAAS;GACpB,MAAM,oBAAoB,MAAM,QAAQ,MAAM,IAAI;GAClD,WAAW,MAAM,gBAAgB;GACjC,OAAO,MAAM;GACb,SAAS;IACR,cAAc,MAAM;IACpB,QAAQ,MAAM;IACd,aAAa,MAAM;GACpB;EACD,CAAC;EACD,KAAK,OAAO;EACZ,KAAK,cAAc,MAAM;CAC1B;AACD;AAEA,SAAgB,4BAA4B,OAAyB;CACpE,OAAO,iBAAiB,uBAAuB,MAAM,gBAAgB;AACtE;AAEA,SAAgB,yBAAyB,OAAyB;CACjE,OAAO,iBAAiB,uBAAuB,MAAM,gBAAgB;AACtE;AAEA,SAAS,oBAAoB,QAA4B,WAAkD;CAC1G,IAAI,WAAW,KAAK,OAAO;CAC3B,IAAI,WAAW,KAAK,OAAO;CAC3B,IAAI,WAAW,KAAK,OAAO;CAC3B,IAAI,WAAW,KAAK,OAAO;CAC3B,IAAI,WAAW,KAAK,OAAO;CAC3B,IAAI,cAAc,gBAAgB,OAAO;CACzC,IAAI,cAAc,uBAAuB,cAAc,aAAa,OAAO;CAC3E,IAAI,cAAc,iBAAiB,cAAc,mBAAmB,OAAO;CAC3E,OAAO;AACR;AAEA,SAAS,iBAAiB,QAAyB;CAClD,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,WAAW;AACzE;;AAGA,SAAgB,cAAc,OAAe,QAAgB,MAAqB;CACjF,IAAI,UAAU,OAAO,SAAS,KAAK;CAEnC,IAAI,UAAU,GAAG,MAAM,oBAAoB;CAC3C,IAAI;CACJ,IAAI,cAAc,IAAI,GAAG;EACxB,MAAM,MAAM,KAAK;EACjB,MAAM,SAAS,KAAK;EACpB,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG;GACpC,OAAO;GACP,UAAU,SAAS,MAAM,KAAK,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,WAAW;EACzE,OAAO,IAAI,SAAS,MAAM,KAAK,OAAO,SAAS,GAC9C,UAAU;CAEZ;CAEA,MAAM,IAAI,oBAAoB;EAC7B;EACA,aAAa,iBAAiB,MAAM,IAAI,uBAAuB;EAC/D;EACA,GAAI,QAAQ,EAAE,KAAK;CACpB,CAAC;AACF;AAEA,SAAS,cAAc,MAA+B,KAAa,OAAuB;CACzF,MAAM,QAAQ,KAAK;CACnB,IAAI,CAAC,SAAS,KAAK,KAAK,MAAM,WAAW,GACxC,MAAM,IAAI,UAAU,kBAAkB,MAAM,WAAW,OAAO,EAAE,MAAM,WAAW,CAAC;CAEnF,OAAO;AACR;;AAGA,SAAS,cAAc,MAA+B,OAAuB;CAC5E,MAAM,UAAU,KAAK;CACrB,IAAI,SAAS,OAAO,KAAK,QAAQ,SAAS,GAAG,OAAO;CACpD,MAAM,SAAS,KAAK;CACpB,IAAI,SAAS,MAAM,KAAK,OAAO,SAAS,GAAG,OAAO;CAClD,MAAM,IAAI,UAAU,kBAAkB,MAAM,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACrF;AAEA,SAAgB,mBAAmB,MAAe,QAAQ,QAA+B;CACxF,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,UAAU,MAC1C,MAAM,IAAI,UAAU,yCAAyC,MAAM,WAAW,EAAE,MAAM,WAAW,CAAC;CAEnG,OAAO;EACN,UAAU,cAAc,MAAM,KAAK;EACnC,YAAY,cAAc,MAAM,cAAc,KAAK;CACpD;AACD;AAEA,SAAgB,cAAc,MAAgD;CAC7E,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,UAAU,MAC1C,MAAM,IAAI,UAAU,oDAAoD,EAAE,MAAM,WAAW,CAAC;CAE7F,MAAM,UAAU,KAAK;CACrB,MAAM,SAAS,KAAK;CACpB,MAAM,KACL,SAAS,OAAO,KAAK,QAAQ,SAAS,IAAI,UAAU,SAAS,MAAM,KAAK,OAAO,SAAS,IAAI,SAAS,KAAA;CACtG,OAAO;EACN,IAAI;EACJ,GAAI,MAAM,EAAE,UAAU,GAAG;CAC1B;AACD;AAEA,SAAgB,sBAAsB,MAAyC;CAC9E,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,UAAU,MAC1C,MAAM,IAAI,UAAU,6DAA6D,EAAE,MAAM,WAAW,CAAC;CAEtG,MAAM,SAAS,cAAc,MAAM,aAAa;CAChD,MAAM,YAAY,KAAK;CACvB,OAAO;EACN,SAAS;EACT,GAAI,SAAS,SAAS,KAAK,UAAU,SAAS,KAAK,EAAE,YAAY,UAAU;CAC5E;AACD;;AAGA,SAAgB,UACf,QACA,OACA,QAAiC,CAAC,GACR;CAC1B,OAAO;EACN,UAAU;EACV,GAAG;EACH,GAAI,UAAU,EAAE,UAAU,OAAO;EACjC,GAAI,SAAS,EAAE,MAAM;CACtB;AACD;;AAGA,SAAgB,gBAAgB,YAA0B;CACzD,IAAI;CACJ,IAAI;EACH,QAAQ,cAAc,UAAU;CACjC,SAAS,OAAO;EACf,MAAM,IAAI,UAAU,uBAAuB;GAAE,MAAM;GAAa,OAAO;EAAM,CAAC;CAC/E;CACA,IAAI,MAAM,eAAe,GACxB,MAAM,IAAI,UAAU,gCAAgC,EAAE,MAAM,YAAY,CAAC;CAE1E,IAAI,MAAM,aAAA,UACT,MAAM,IAAI,UAAU,8BAA8B;EACjD,MAAM;EACN,SAAS;GAAE,WAAW;GAAiB,gBAAgB,MAAM;EAAW;CACzE,CAAC;AAEH;;AAGA,SAAgB,UAAU,OAA+B,OAAoD;CAC5G,gBAAgB,MAAM,WAAW;CACjC,OAAO,UAAU,MAAM,SAAS,OAAO;EACtC,aAAa,MAAM;EACnB,WAAW,MAAM;EACjB,GAAI,MAAM,gBAAgB,EAAE,WAAW,MAAM,aAAa;EAC1D,GAAI,MAAM,WAAW,EAAE,SAAS,MAAM,QAAQ;CAC/C,CAAC;AACF;AAEA,SAAgB,oBAAoB,OAAkC,MAA2C;CAChH,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,UAAU,MAC1C,MAAM,IAAI,UAAU,0DAA0D,EAAE,MAAM,WAAW,CAAC;CAEnG,MAAM,aAAa,KAAK;CACxB,IAAI,CAAC,SAAS,UAAU,KAAK,WAAW,WAAW,GAClD,MAAM,IAAI,UAAU,+CAA+C,EAAE,MAAM,WAAW,CAAC;CAExF,MAAM,OAAO,KAAK;CAClB,MAAM,OAAO,KAAK;CAClB,OAAO;EACN,WAAW,MAAM,cAAc,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,MAAM;EAChF,GAAI,OAAO,SAAS,YAAY,OAAO,SAAS,IAAI,KAAK,EAAE,WAAW,KAAK;EAC3E,aAAa;CACd;AACD;;;;;;;;;AC/JA,IAAa,iBAAb,MAAa,eAAe;CAC3B;CACA;CAEA,YAAY,MAAoB,UAAiC,CAAC,GAAG;EACpE,MAAM,SAAS,mBAAmB,UAAU,IAAI;EAChD,IAAI,CAAC,OAAO,SACX,MAAM,IAAI,UAAU,qCAAqC;GACxD,MAAM;GACN,SAAS,EAAE,QAAQ,OAAO,MAAM,OAAO,KAAK,UAAU,MAAM,OAAO,EAAE;EACtE,CAAC;EAEF,MAAM,EAAE,UAAU,YAAY,gBAAgB,UAAU,OAAO;EAC/D,KAAKC,gBAAgB;EACrB,KAAKD,QAAQ,IAAI,YAAY;GAC5B,GAAG;GACH,SAAS;GACT,SAAS;IACR,gBAAgB;IAChB,yBAAyB;IACzB,6BAA6B;GAC9B;GACA,OAAO;EACR,CAAC;CACF;CAEA,OAAO,YAAY,KAAkC;EACpD,MAAM,OAAO,YAAY,KAAK,kBAAkB;EAChD,OAAO,IAAI,eAAe,MAAM;GAC/B,GAAI,IAAI,SAAS,EAAE,OAAO,IAAI,MAAM;GACpC,GAAI,IAAI,UAAU,EAAE,QAAQ,IAAI,OAAO;EACxC,CAAC;CACF;CAEA,OAAO,UAAkD;EACxD,OAAO,YAAY,KAAKC;CACzB;CAEA,MAAMC,MAAM,MAAc,MAA+B,OAAiC;EACzF,MAAM,MAAM,MAAM,KAAKF,MAAM,KAAK,MAAM,MAAM;GAAE;GAAO,SAAS;EAAK,CAAC;EACtE,cAAc,OAAO,IAAI,QAAQ,IAAI,IAAI;EACzC,OAAO,IAAI;CACZ;;;;;CAMA,MAAM,WAAW,OAAmE;EAUnF,OAAO,sBAAsB,MATV,KAAKE,MACvB,mBACA,UAAU,KAAA,GAAW,KAAKC,OAAO,MAAM,KAAK,GAAG;GAC9C,WAAW,MAAM;GACjB,GAAI,MAAM,WAAW,EAAE,SAAS,MAAM,QAAQ;GAC9C,GAAI,MAAM,qBAAqB,EAAE,mBAAmB,MAAM,kBAAkB;EAC7E,CAAC,GACD,qBACD,CACiC;CAClC;;CAGA,MAAM,SAAS,OAA8D;EAM5E,OAAO,mBAAmB,MALP,KAAKD,MACvB,YACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG,EAAE,MAAM,MAAM,KAAK,CAAC,GACvE,eACD,GACgC,MAAM;CACvC;;CAGA,MAAM,SAAS,OAA8D;EAC5E,MAAM,OAAO,MAAM,KAAKD,MACvB,YACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG;GAClD,YAAY,MAAM;GAClB,MAAM,MAAM;EACb,CAAC,GACD,eACD;EAEA,IAAI,cAAc,IAAI,KAAK,KAAK,UAAU,QAAQ,SAAS,KAAK,aAAa,KAAK,KAAK,aAAa,CAAC,SAAS,GAC7G,OAAO,mBAAmB,MAAM,MAAM;EAGvC,OAAO;GACN,UAFU,cAAc,IAEb,CAAC,CAAC,YAAY,MAAM;GAC/B,YAAY,MAAM;EACnB;CACD;;;;;CAMA,MAAM,eAAe,OAAmD;EACvE,MAAM,KAAKD,MACV,cACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG,EAAE,QAAQ,QAAQ,CAAC,GACtE,iBACD;CACD;;CAGA,MAAM,WAAW,OAA2D;EAC3E,MAAM,KAAKD,MACV,cACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG,EAAE,QAAQ,OAAO,CAAC,GACrE,sBACD;CACD;;CAGA,MAAM,YAAY,OAAiE;EASlF,OAAO,mBAAmB,MARP,KAAKD,MACvB,aACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG;GAClD,YAAY,MAAM;GAClB,OAAO,MAAM;EACd,CAAC,GACD,gBACD,GACgC,OAAO;CACxC;;;;;;CAOA,MAAM,cAAc,OAAkD;EACrE,MAAM,KAAKD,MACV,sBACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG;GAClD,YAAY,MAAM;GAClB,OAAO,MAAM;EACd,CAAC,GACD,wBACD;CACD;;CAGA,MAAM,OAAO,OAA2C;EACvD,MAAM,KAAKD,MACV,cACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG,EAAE,YAAY,MAAM,WAAW,CAAC,GACnF,iBACD;CACD;;CAGA,MAAM,KAAK,OAAyC;EACnD,MAAM,KAAKD,MACV,YACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG,EAClD,GAAI,MAAM,cAAc,EAAE,YAAY,MAAM,WAAW,EACxD,CAAC,GACD,eACD;CACD;;CAGA,MAAM,UAAU,OAA+D;EAE9E,OAAO,mBAAmB,MADP,KAAKD,MAAM,aAAa,UAAU,OAAO,KAAKC,OAAO,MAAM,KAAK,CAAC,GAAG,oBAAoB,GAC3E,OAAO;CACxC;;;;;CAMA,MAAM,aAAa,OAAuE;EAMzF,OAAO,oBAAoB,OAAO,MALf,KAAKD,MACvB,gBACA,UAAU,MAAM,SAAS,KAAKC,OAAO,MAAM,KAAK,GAAG,EAAE,SAAS,MAAM,QAAQ,CAAC,GAC7E,uBACD,CACsC;CACvC;CAEA,MAAM,eAAe,QAAgC,CAErD;AACD;;;ACpNA,MAAa,uBAAuB,WAAW;CAC9C,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,eAAe,YAAY,GAAG,CAAC,CAAC,SAAS,KAAK;AAC9E,CAAC;AAED,MAAa,uBAAuB,WAAW;CAC9C,IAAI;CACJ,MAAM;CACN,aAAa;CACb,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,eAAe,YAAY,GAAG,CAAC,CAAC,SAAS,KAAK;AAC9E,CAAC;AAED,MAAa,6BAA6B,WAAW;CACpD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ;EAC9B,MAAM,eAAe,YAAY,GAAG,CAAC,CAAC,eAAe,KAAK;EAC1D,OAAO;GAAE,IAAI;GAAM,UAAU,MAAM;EAAQ;CAC5C;AACD,CAAC;AAED,MAAa,0BAA0B,WAAW;CACjD,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,eAAe,YAAY,GAAG,CAAC,CAAC,YAAY,KAAK;AACjF,CAAC;AAED,MAAa,4BAA4B,WAAW;CACnD,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ;EAC9B,MAAM,eAAe,YAAY,GAAG,CAAC,CAAC,cAAc,KAAK;EACzD,OAAO;GAAE,IAAI;GAAM,UAAU,MAAM;EAAQ;CAC5C;AACD,CAAC;AAED,MAAa,qBAAqB,WAAW;CAC5C,IAAI;CACJ,MAAM;CACN,aAAa;CACb,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ;EAC9B,MAAM,eAAe,YAAY,GAAG,CAAC,CAAC,OAAO,KAAK;EAClD,OAAO;GAAE,IAAI;GAAM,UAAU,MAAM;EAAQ;CAC5C;AACD,CAAC;AAED,MAAa,mBAAmB,WAAW;CAC1C,IAAI;CACJ,MAAM;CACN,aAAa;CACb,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ;EAC9B,MAAM,eAAe,YAAY,GAAG,CAAC,CAAC,KAAK,KAAK;EAChD,OAAO;GAAE,IAAI;GAAM,UAAU,MAAM;EAAQ;CAC5C;AACD,CAAC;AAED,MAAa,wBAAwB,WAAW;CAC/C,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,eAAe,YAAY,GAAG,CAAC,CAAC,UAAU,KAAK;AAC/E,CAAC;AAED,MAAa,2BAA2B,WAAW;CAClD,IAAI;CACJ,MAAM;CACN,aAAa;CACb,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,SAAS;CACT,SAAS,OAAO,OAAO,QAAQ,eAAe,YAAY,GAAG,CAAC,CAAC,aAAa,KAAK;AAClF,CAAC;AAED,MAAa,iBAAiB,aAAa;CAC1C,IAAI;CACJ,OAAO;CACP,aACC;CACD,SAAS;CACT,MAAM;EAAE,MAAM;EAAU,QAAQ;CAAmB;CACnD,YAAY,CAAC,aAAa,MAAM;CAChC,gBAAgB;CAChB,MAAM,CAAC,YAAY,QAAQ;CAC3B,OAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;AACD,CAAC"}
@@ -61,14 +61,10 @@ declare const teamsMessagingAuthSchema: z.ZodObject<{
61
61
  }, z.core.$strip>>;
62
62
  }, z.core.$strip>;
63
63
  declare const imessageMessagingAuthSchema: z.ZodObject<{
64
- project_id: z.ZodOptional<z.ZodString>;
65
- project_secret: z.ZodOptional<z.ZodString>;
66
- address: z.ZodOptional<z.ZodString>;
67
- token: z.ZodOptional<z.ZodString>;
68
- server: z.ZodOptional<z.ZodString>;
69
- spectrum_cloud_url: z.ZodOptional<z.ZodURL>;
70
- spectrum_imessage_address: z.ZodOptional<z.ZodString>;
71
- tls: z.ZodOptional<z.ZodBoolean>;
64
+ base_url: z.ZodURL;
65
+ project_id: z.ZodString;
66
+ project_secret: z.ZodString;
67
+ phone: z.ZodOptional<z.ZodString>;
72
68
  provider: z.ZodLiteral<"imessage">;
73
69
  storage: z.ZodOptional<z.ZodObject<{
74
70
  access_key_id: z.ZodString;
@@ -123,14 +119,10 @@ declare const messagingAuthSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
123
119
  key_prefix: z.ZodOptional<z.ZodString>;
124
120
  }, z.core.$strip>>;
125
121
  }, z.core.$strip>, z.ZodObject<{
126
- project_id: z.ZodOptional<z.ZodString>;
127
- project_secret: z.ZodOptional<z.ZodString>;
128
- address: z.ZodOptional<z.ZodString>;
129
- token: z.ZodOptional<z.ZodString>;
130
- server: z.ZodOptional<z.ZodString>;
131
- spectrum_cloud_url: z.ZodOptional<z.ZodURL>;
132
- spectrum_imessage_address: z.ZodOptional<z.ZodString>;
133
- tls: z.ZodOptional<z.ZodBoolean>;
122
+ base_url: z.ZodURL;
123
+ project_id: z.ZodString;
124
+ project_secret: z.ZodString;
125
+ phone: z.ZodOptional<z.ZodString>;
134
126
  provider: z.ZodLiteral<"imessage">;
135
127
  storage: z.ZodOptional<z.ZodObject<{
136
128
  access_key_id: z.ZodString;
@@ -584,14 +576,10 @@ declare const messagingModule: ModuleDefinition<{
584
576
  key_prefix?: string | undefined;
585
577
  } | undefined;
586
578
  } | {
587
- project_id?: string | undefined;
588
- project_secret?: string | undefined;
589
- address?: string | undefined;
590
- token?: string | undefined;
591
- server?: string | undefined;
592
- spectrum_cloud_url?: string | undefined;
593
- spectrum_imessage_address?: string | undefined;
594
- tls?: boolean | undefined;
579
+ base_url: string;
580
+ project_id: string;
581
+ project_secret: string;
582
+ phone?: string | undefined;
595
583
  provider: "imessage";
596
584
  storage?: {
597
585
  access_key_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/messaging/contracts.ts","../../../src/modules/messaging/client.ts","../../../src/modules/messaging/domain.ts","../../../src/modules/messaging/module.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/messaging/contracts.ts","../../../src/modules/messaging/client.ts","../../../src/modules/messaging/domain.ts","../../../src/modules/messaging/module.ts"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { S as isImessageOutcomeUnknown, T as imessageAuthSchema, w as MAX_MEDIA_BYTES, x as isImessageDefiniteRejection } from "../../imessage-CofjmONG.js";
2
1
  import { t as ToolError } from "../../errors-DoSpNHvs.js";
3
2
  import { n as defineModule, r as defineTool } from "../../define-ieoksEQ0.js";
4
3
  import { n as requireAuth } from "../../provider-CgDAlg6K.js";
5
4
  import { n as bytesToBase64, t as base64ToBytes } from "../../bytes-BxpimpQx.js";
6
5
  import { m as s3AuthSchema, p as S3Client } from "../../s3-Dj7Teh-A.js";
7
6
  import { n as runBatchItems, t as batchResultSchema } from "../../batch-Co1ujeAW.js";
7
+ import { d as ImessageClient, g as imessageAuthSchema, h as MAX_MEDIA_BYTES, m as isImessageOutcomeUnknown, p as isImessageDefiniteRejection } from "../../imessage-CH49-sFn.js";
8
8
  import { n as createTypingPulse, t as createLiveMessage } from "../../transport-B4vn-XiQ.js";
9
9
  import { A as slackAuthSchema, C as isSlackOutcomeUnknown, S as isSlackDefiniteRejection, b as SlackClient, w as MAX_MEDIA_BYTES$1 } from "../../slack-AjJDNnXJ.js";
10
10
  import { _ as isTeamsOutcomeUnknown, b as teamsAuthSchema, g as isTeamsDefiniteRejection, m as TeamsClient, v as MAX_MEDIA_BYTES$2 } from "../../teams-CvxYLAi5.js";
@@ -417,74 +417,56 @@ async function sendMediaBatchSequential(sendOne, input) {
417
417
  //#region src/modules/messaging/providers/imessage.ts
418
418
  /**
419
419
  * iMessage provider for the messaging seam.
420
- * Wraps `ImessageClient` (Photon Spectrum Cloud + Advanced iMessage gRPC).
421
- *
422
- * Vendor client is loaded via dynamic import so edge/browser packaging of the
423
- * messaging seam does not pull Node-only gRPC peers until iMessage is used.
420
+ * Wraps `ImessageClient` (hosted photon-rest-proxy over HTTP).
424
421
  */
425
422
  var ImessageMessagingProvider = class {
426
- #auth;
427
- #options;
428
423
  #client;
429
- #ready;
430
424
  constructor(auth, options = {}) {
431
- this.#auth = auth;
432
- this.#options = options;
433
- }
434
- async #sdk() {
435
- if (this.#client) return this.#client;
436
- this.#ready ??= (async () => {
437
- const { ImessageClient } = await import("../../imessage-CofjmONG.js").then((n) => n.f);
438
- const { provider: _p, storage: _s, ...vendorAuth } = this.#auth;
439
- const client = new ImessageClient(vendorAuth, this.#options);
440
- this.#client = client;
441
- return client;
442
- })();
443
- return this.#ready;
425
+ const { provider: _p, storage: _s, ...vendorAuth } = auth;
426
+ this.#client = new ImessageClient(vendorAuth, options);
444
427
  }
445
428
  async sendText(input) {
446
- return { message_id: (await (await this.#sdk()).sendText({
429
+ return { message_id: (await this.#client.sendText({
447
430
  chat_id: input.chat_id,
448
431
  text: input.text
449
432
  })).message_id };
450
433
  }
451
434
  async editText(input) {
452
- return { message_id: (await (await this.#sdk()).editText({
435
+ return { message_id: (await this.#client.editText({
453
436
  chat_id: input.chat_id,
454
437
  message_id: input.message_id,
455
438
  text: input.text
456
- })).message_id ?? input.message_id };
439
+ })).message_id };
457
440
  }
458
441
  async sendChatAction(input) {
459
- await (await this.#sdk()).sendChatAction({
442
+ await this.#client.sendChatAction({
460
443
  chat_id: input.chat_id,
461
444
  action: input.action
462
445
  });
463
446
  }
464
447
  async stopTyping(input) {
465
- await (await this.#sdk()).stopTyping({ chat_id: input.chat_id });
448
+ await this.#client.stopTyping({ chat_id: input.chat_id });
466
449
  }
467
450
  async setReaction(input) {
468
- return { message_id: (await (await this.#sdk()).setReaction({
451
+ return { message_id: (await this.#client.setReaction({
469
452
  chat_id: input.chat_id,
470
453
  message_id: input.message_id,
471
454
  emoji: input.emoji
472
455
  })).message_id };
473
456
  }
474
457
  /**
475
- * Clears via setReaction(isSet=false). Requires emoji matching setReaction.
476
- * `message_id` is the **target** message guid.
458
+ * Clears via proxy target message_id + emoji (same contract as setReaction).
477
459
  */
478
460
  async clearReaction(input) {
479
461
  if (!input.emoji) throw new ToolError("iMessage clearReaction requires emoji (same tapback/emoji used when setting)", { code: "bad_input" });
480
- await (await this.#sdk()).clearReaction({
462
+ await this.#client.clearReaction({
481
463
  chat_id: input.chat_id,
482
464
  message_id: input.message_id,
483
465
  emoji: input.emoji
484
466
  });
485
467
  }
486
468
  async sendMedia(input) {
487
- return { message_id: (await (await this.#sdk()).sendMedia({
469
+ return { message_id: (await this.#client.sendMedia({
488
470
  chat_id: input.chat_id,
489
471
  kind: input.kind,
490
472
  body_base64: input.body_base64,
@@ -497,18 +479,21 @@ var ImessageMessagingProvider = class {
497
479
  return sendMediaBatchSequential((item) => this.sendMedia(item), input);
498
480
  }
499
481
  async downloadFile(input) {
500
- const fileId = input.chat_id ? input.file_id : splitImessageFileRef(input.file_id).file_id ?? input.file_id;
501
- return (await this.#sdk()).downloadFile({
502
- file_id: fileId,
503
- ...input.chat_id && { chat_id: input.chat_id },
482
+ const ref = input.chat_id ? {
483
+ chat_id: input.chat_id,
484
+ file_id: input.file_id
485
+ } : splitImessageFileRef(input.file_id);
486
+ return this.#client.downloadFile({
487
+ file_id: ref.file_id,
488
+ ...ref.chat_id && { chat_id: ref.chat_id },
504
489
  ...input.file_name && { file_name: input.file_name }
505
490
  });
506
491
  }
507
492
  async answerCallback(_input) {
508
- await (await this.#sdk()).answerCallback({});
493
+ await this.#client.answerCallback({});
509
494
  }
510
495
  async read(input) {
511
- await (await this.#sdk()).read({
496
+ await this.#client.read({
512
497
  chat_id: input.chat_id,
513
498
  ...input.message_id && { message_id: input.message_id }
514
499
  });
@@ -835,7 +820,7 @@ var TelegramMessagingProvider = class {
835
820
  //#endregion
836
821
  //#region src/modules/messaging/client.ts
837
822
  /**
838
- * Messaging seam client — picks telegram / slack / teams / imessage from host auth.
823
+ * Messaging seam client — picks telegram / slack / teams / imessage (proxy) from host auth.
839
824
  * Resolves ArtifactRef media via optional nested S3 storage before channel calls.
840
825
  */
841
826
  function transportOptions(ctx) {