imessage-sdk 0.1.0-beta.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/LICENSE +21 -0
- package/README.md +465 -0
- package/dist/index.d.ts +105 -0
- package/dist/index.js +438 -0
- package/dist/index.js.map +1 -0
- package/dist/provider-CCW_6OWg.d.ts +265 -0
- package/dist/providers/blooio.d.ts +76 -0
- package/dist/providers/blooio.js +655 -0
- package/dist/providers/blooio.js.map +1 -0
- package/dist/providers/photon.d.ts +66 -0
- package/dist/providers/photon.js +958 -0
- package/dist/providers/photon.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/errors.ts","../../src/core/provider.ts","../../src/providers/photon.ts"],"names":["photon","PhotonError","PhotonAuthenticationError","PhotonNotFoundError","PhotonRateLimitError","PhotonValidationError","PhotonConnectionError","line","providerEventId"],"mappings":"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","file":"photon.js","sourcesContent":["export interface IMessageSDKErrorOptions {\n readonly provider?: string;\n readonly connectionId?: string;\n readonly code?: string;\n readonly statusCode?: number;\n readonly retryable?: boolean;\n readonly retryAfter?: number;\n readonly traceId?: string;\n readonly raw?: unknown;\n}\n\nexport class IMessageSDKError extends Error {\n readonly provider: string | undefined;\n readonly connectionId: string | undefined;\n readonly code: string | undefined;\n readonly statusCode: number | undefined;\n readonly retryable: boolean;\n readonly retryAfter: number | undefined;\n readonly traceId: string | undefined;\n readonly raw: unknown;\n\n constructor(message: string, options: IMessageSDKErrorOptions = {}) {\n super(message);\n this.name = new.target.name;\n this.provider = options.provider;\n this.connectionId = options.connectionId;\n this.code = options.code;\n this.statusCode = options.statusCode;\n this.retryable = options.retryable ?? false;\n this.retryAfter = options.retryAfter;\n this.traceId = options.traceId;\n this.raw = options.raw;\n }\n}\n\nexport class ValidationError extends IMessageSDKError {}\n\nexport class AuthenticationError extends IMessageSDKError {}\n\nexport class NotFoundError extends IMessageSDKError {}\n\nexport class ConflictError extends IMessageSDKError {}\n\nexport class RateLimitError extends IMessageSDKError {}\n\nexport class ProviderUnavailableError extends IMessageSDKError {}\n\n/** A send may have reached the provider, so blindly retrying could duplicate it. */\nexport class AmbiguousDeliveryError extends IMessageSDKError {}\n\nexport class UnsupportedCapabilityError extends IMessageSDKError {\n readonly capability: string;\n\n constructor(\n capability: string,\n options: Pick<IMessageSDKErrorOptions, \"provider\" | \"connectionId\"> = {},\n ) {\n super(`The selected provider does not support ${capability}.`, {\n ...options,\n code: \"unsupported_capability\",\n });\n this.capability = capability;\n }\n}\n\nexport class WebhookVerificationError extends IMessageSDKError {\n constructor(\n options: Pick<IMessageSDKErrorOptions, \"provider\" | \"connectionId\"> = {},\n ) {\n super(\"Webhook signature verification failed.\", {\n ...options,\n code: \"webhook_verification_failed\",\n });\n }\n}\n\nexport class ClientClosedError extends IMessageSDKError {\n constructor(\n options: Pick<IMessageSDKErrorOptions, \"provider\" | \"connectionId\"> = {},\n ) {\n super(\"This iMessage client has already been closed.\", {\n ...options,\n code: \"client_closed\",\n });\n }\n}\n","import type { IMessageCapabilities } from \"./capabilities.js\";\nimport type { ProviderEvent } from \"./events.js\";\nimport type {\n AddReactionInput,\n EditMessageInput,\n IMessageProviderName,\n MessageLocator,\n OpenConversationInput,\n ProviderConversation,\n ProviderMessage,\n ProviderSentMessage,\n RemoveReactionInput,\n SendMessageInput,\n SubscribeOptions,\n} from \"./types.js\";\n\nexport interface ProviderMessages {\n send(input: SendMessageInput): Promise<ProviderSentMessage>;\n get?(message: MessageLocator): Promise<ProviderMessage | null>;\n edit?(\n message: MessageLocator,\n input: EditMessageInput,\n ): Promise<ProviderMessage>;\n delete?(message: MessageLocator): Promise<void>;\n}\n\nexport interface ProviderConversations {\n open(input: OpenConversationInput): Promise<ProviderConversation>;\n get?(conversationId: string): Promise<ProviderConversation | null>;\n markRead?(conversationId: string): Promise<void>;\n}\n\nexport interface ProviderReactions {\n add(input: AddReactionInput): Promise<void>;\n remove(input: RemoveReactionInput): Promise<void>;\n}\n\nexport interface ProviderTyping {\n start(conversationId: string): Promise<void>;\n stop?(conversationId: string): Promise<void>;\n}\n\nexport interface ProviderWebhooks {\n verify(request: Request): Promise<boolean>;\n parse(request: Request): Promise<readonly ProviderEvent[]>;\n}\n\nexport interface ProviderEvents {\n subscribe(options?: SubscribeOptions): AsyncIterable<ProviderEvent>;\n}\n\n/**\n * Contract implemented by a provider adapter.\n *\n * The complete adapter is exposed at `client.providers.<name>`, so\n * provider-specific APIs should be defined directly on the concrete provider.\n */\nexport interface IMessageProvider<\n TName extends IMessageProviderName = IMessageProviderName,\n TCapabilities extends IMessageCapabilities = IMessageCapabilities,\n> {\n readonly name: TName;\n readonly capabilities: TCapabilities;\n readonly messages: ProviderMessages;\n readonly conversations: ProviderConversations;\n readonly reactions?: ProviderReactions;\n readonly typing?: ProviderTyping;\n readonly webhooks?: ProviderWebhooks;\n readonly events?: ProviderEvents;\n close?(): Promise<void>;\n}\n\nexport type AnyIMessageProvider = IMessageProvider<\n IMessageProviderName,\n IMessageCapabilities\n>;\n\n/** Preserves the concrete name, capabilities, and methods of an adapter. */\nexport function defineProvider<const TProvider extends AnyIMessageProvider>(\n provider: TProvider,\n): TProvider {\n return provider;\n}\n","import {\n AuthenticationError as PhotonAuthenticationError,\n ConnectionError as PhotonConnectionError,\n IMessageError as PhotonError,\n NotFoundError as PhotonNotFoundError,\n RateLimitError as PhotonRateLimitError,\n ValidationError as PhotonValidationError,\n createClient,\n} from \"@photon-ai/advanced-imessage\";\nimport type {\n AdvancedIMessage,\n Chat,\n Message as PhotonMessage,\n MessageContent,\n MessageEvent,\n RetryOptions,\n SettableMessageReaction,\n TypedEventStream,\n} from \"@photon-ai/advanced-imessage\";\nimport { cloud, SpectrumCloudError } from \"@spectrum-ts/core\";\nimport type { TokenData } from \"@spectrum-ts/core\";\nimport { z } from \"zod\";\n\nimport {\n AmbiguousDeliveryError,\n AuthenticationError,\n ConflictError,\n IMessageSDKError,\n NotFoundError,\n ProviderUnavailableError,\n RateLimitError,\n ValidationError,\n} from \"../core/errors.js\";\nimport type { ProviderEvent } from \"../core/events.js\";\nimport { defineProvider } from \"../core/provider.js\";\nimport type {\n IMessageProvider,\n ProviderConversations,\n ProviderEvents,\n ProviderMessages,\n ProviderReactions,\n ProviderTyping,\n ProviderWebhooks,\n} from \"../core/provider.js\";\nimport type {\n IMessageAddress,\n IMessageAttachment,\n IMessageAttachmentInput,\n IMessageReaction,\n IMessageService,\n IMessageStatus,\n MessageLocator,\n ProviderConversation,\n ProviderMessage,\n ProviderSentMessage,\n SubscribeOptions,\n} from \"../core/types.js\";\n\nconst SHARED_ADDRESS = \"imessage.spectrum.photon.codes:443\";\nconst SHARED_PHONE = \"shared\";\nconst TOKEN_EXPIRY_BUFFER_MS = 30_000;\nconst TOKEN_RENEWAL_RATIO = 0.8;\nconst TOKEN_RETRY_MS = 30_000;\nconst WEBHOOK_TOLERANCE_SECONDS = 300;\n\nexport const PHOTON_CAPABILITIES = {\n messages: {\n text: true,\n attachments: true,\n replies: true,\n get: true,\n edit: false,\n delete: false,\n },\n conversations: {\n direct: true,\n groups: false,\n get: true,\n markRead: true,\n },\n interactions: {\n reactions: true,\n typingStart: true,\n typingStop: true,\n readReceipts: true,\n },\n events: {\n webhooks: true,\n stream: false,\n },\n} as const;\n\nexport interface PhotonOptions {\n readonly projectId?: string;\n readonly projectSecret?: string;\n /** Dedicated line to bind to. Optional when the project has exactly one line. */\n readonly phone?: string;\n readonly webhookSecret?: string;\n readonly timeout?: number;\n readonly retry?: boolean | RetryOptions;\n}\n\nexport interface PhotonLine {\n readonly phone: string;\n readonly instanceId: string;\n readonly type: \"dedicated\" | \"shared\";\n}\n\nexport interface PhotonConnection {\n getLine(): Promise<PhotonLine>;\n}\n\nexport interface PhotonMessages\n extends Omit<ProviderMessages, \"edit\" | \"delete\"> {\n get(message: MessageLocator): Promise<ProviderMessage | null>;\n}\n\nexport interface PhotonConversations extends ProviderConversations {\n get(conversationId: string): Promise<ProviderConversation | null>;\n markRead(conversationId: string): Promise<void>;\n}\n\nexport interface PhotonProvider\n extends IMessageProvider<\"photon\", typeof PHOTON_CAPABILITIES> {\n readonly messages: PhotonMessages;\n readonly conversations: PhotonConversations;\n readonly reactions: ProviderReactions;\n readonly typing: Required<ProviderTyping>;\n readonly webhooks: ProviderWebhooks;\n readonly events: ProviderEvents;\n readonly connection: PhotonConnection;\n}\n\ninterface CloudConnection {\n readonly client: AdvancedIMessage;\n readonly line: PhotonLine;\n close(): Promise<void>;\n}\n\nconst WebhookAttachmentSchema = z.object({\n type: z.literal(\"attachment\"),\n id: z.string().min(1),\n name: z.string().min(1),\n mimeType: z.string().min(1),\n size: z.number().finite().nonnegative().optional(),\n});\n\nconst WebhookMessageSchema = z.object({\n id: z.string().min(1),\n direction: z.literal(\"inbound\"),\n timestamp: z.iso.datetime(),\n sender: z.object({ id: z.string().min(1) }),\n space: z.object({\n id: z.string().min(1),\n phone: z.string().min(1).optional(),\n }),\n content: z.union([\n z.object({ type: z.literal(\"text\"), text: z.string() }),\n WebhookAttachmentSchema,\n z.object({\n type: z.literal(\"reaction\"),\n emoji: z.string().min(1),\n target: z.object({ id: z.string().min(1) }),\n }),\n z.object({\n type: z.literal(\"group\"),\n items: z.array(\n z.object({\n content: WebhookAttachmentSchema,\n }),\n ),\n }),\n ]),\n});\n\nconst WebhookPayloadSchema = z.object({\n event: z.literal(\"messages\"),\n message: WebhookMessageSchema,\n space: z.object({\n id: z.string().min(1),\n phone: z.string().min(1).optional(),\n }),\n});\n\nfunction address(value: string): IMessageAddress {\n return { kind: value.includes(\"@\") ? \"email\" : \"phone\", value };\n}\n\nfunction mapService(value: string): IMessageService {\n switch (value) {\n case \"iMessage\":\n return \"imessage\";\n case \"SMS\":\n return \"sms\";\n case \"RCS\":\n return \"rcs\";\n default:\n return \"unknown\";\n }\n}\n\nfunction mapStatus(message: PhotonMessage): IMessageStatus {\n if (message.sendErrorCode !== 0 || message.isCorrupt) return \"failed\";\n if (message.dateRead !== undefined) return \"read\";\n if (message.dateDelivered !== undefined || message.isDelivered) {\n return \"delivered\";\n }\n if (message.isSent) return \"sent\";\n return \"pending\";\n}\n\nfunction providerStatus(message: PhotonMessage): string {\n if (message.dateRetracted !== undefined) return \"unsent\";\n if (message.sendErrorCode !== 0) return `error:${message.sendErrorCode}`;\n return mapStatus(message);\n}\n\nfunction attachmentKind(mimeType: string): IMessageAttachment[\"kind\"] {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\nfunction mapAttachment(\n attachment: PhotonMessage[\"content\"][\"attachments\"][number],\n): IMessageAttachment {\n return {\n kind: attachmentKind(attachment.mimeType),\n id: attachment.guid,\n filename: attachment.fileName,\n contentType: attachment.mimeType,\n size: attachment.totalBytes,\n raw: attachment,\n };\n}\n\nfunction mapConversation(chat: Chat): ProviderConversation {\n return {\n providerConversationId: chat.guid,\n participants: chat.participants.map((participant) =>\n address(participant.address),\n ),\n raw: chat,\n };\n}\n\nfunction replyReference(message: PhotonMessage):\n | { readonly messageId: string; readonly partIndex?: number }\n | undefined {\n const messageId = message.replyTargetGuid ?? message.threadOriginatorGuid;\n if (messageId === undefined) return undefined;\n const rawPart = message.threadOriginatorPart;\n const partIndex = rawPart === undefined ? undefined : Number(rawPart);\n return {\n messageId,\n ...(partIndex !== undefined && Number.isInteger(partIndex)\n ? { partIndex }\n : {}),\n };\n}\n\nfunction messageText(content: MessageContent): string {\n return content.text ?? \"\";\n}\n\nasync function attachmentBytes(\n attachment: IMessageAttachmentInput,\n): Promise<Uint8Array> {\n switch (attachment.source.type) {\n case \"bytes\":\n return attachment.source.data;\n case \"blob\":\n return new Uint8Array(await attachment.source.data.arrayBuffer());\n case \"url\": {\n let response: Response;\n try {\n response = await fetch(attachment.source.url);\n } catch (cause) {\n throw new ProviderUnavailableError(\n `Could not download Photon attachment ${attachment.source.url}.`,\n {\n provider: \"photon\",\n code: \"attachment_download_failed\",\n retryable: true,\n raw: cause,\n },\n );\n }\n if (!response.ok) {\n throw new ProviderUnavailableError(\n `Attachment download failed with HTTP ${response.status}.`,\n {\n provider: \"photon\",\n code: \"attachment_download_failed\",\n statusCode: response.status,\n retryable: response.status >= 500,\n },\n );\n }\n return new Uint8Array(await response.arrayBuffer());\n }\n }\n}\n\nfunction attachmentFilename(attachment: IMessageAttachmentInput): string {\n if (attachment.filename !== undefined && attachment.filename.length > 0) {\n return attachment.filename;\n }\n if (attachment.source.type === \"url\") {\n try {\n const name = new URL(attachment.source.url).pathname.split(\"/\").at(-1);\n if (name !== undefined && name.length > 0) return name;\n } catch {\n // The download produces the validation error with provider context.\n }\n }\n const extension =\n attachment.kind === \"image\"\n ? \"jpg\"\n : attachment.kind === \"video\"\n ? \"mp4\"\n : \"bin\";\n return `attachment.${extension}`;\n}\n\nfunction mapReaction(\n reaction: IMessageReaction,\n): SettableMessageReaction {\n return { kind: reaction };\n}\n\nfunction normalizeReaction(\n reaction: PhotonMessage[\"reaction\"] | { readonly kind: string; readonly emoji?: string },\n): IMessageReaction | undefined {\n switch (reaction?.kind) {\n case \"love\":\n case \"like\":\n case \"dislike\":\n case \"laugh\":\n case \"emphasize\":\n case \"question\":\n return reaction.kind;\n case \"emoji\":\n return normalizeWebhookReaction(reaction.emoji ?? \"\");\n default:\n return undefined;\n }\n}\n\nfunction normalizeWebhookReaction(value: string): IMessageReaction | undefined {\n switch (value.toLowerCase()) {\n case \"love\":\n case \"❤️\":\n case \"❤\":\n return \"love\";\n case \"like\":\n case \"👍\":\n return \"like\";\n case \"dislike\":\n case \"👎\":\n return \"dislike\";\n case \"laugh\":\n case \"😂\":\n return \"laugh\";\n case \"emphasize\":\n case \"‼️\":\n case \"!!\":\n return \"emphasize\";\n case \"question\":\n case \"❓\":\n case \"?\":\n return \"question\";\n default:\n return undefined;\n }\n}\n\nfunction errorOptions(error: unknown) {\n const photon = error instanceof PhotonError ? error : undefined;\n return {\n provider: \"photon\",\n ...(photon?.code === undefined ? {} : { code: photon.code }),\n ...(photon?.retryable === undefined\n ? {}\n : { retryable: photon.retryable }),\n raw: error,\n } as const;\n}\n\nfunction mapError(error: unknown, operation: string): never {\n if (error instanceof IMessageSDKError) throw error;\n if (\n (error instanceof PhotonError && error.code === \"duplicateMessage\") ||\n (error instanceof Error &&\n /operation already processed with this client message id/i.test(\n error.message,\n ))\n ) {\n throw new ConflictError(\n \"Photon already processed this idempotency key; the duplicate operation was not sent again.\",\n {\n ...errorOptions(error),\n code: \"duplicate_message\",\n },\n );\n }\n if (error instanceof SpectrumCloudError) {\n const options = {\n provider: \"photon\",\n code: error.code,\n statusCode: error.status,\n raw: error,\n } as const;\n if (error.status === 401 || error.status === 403) {\n throw new AuthenticationError(error.message, options);\n }\n if (error.status === 429) {\n throw new RateLimitError(error.message, {\n ...options,\n retryable: true,\n });\n }\n if (error.status >= 500) {\n throw new ProviderUnavailableError(error.message, {\n ...options,\n retryable: true,\n });\n }\n throw new IMessageSDKError(error.message, options);\n }\n if (error instanceof PhotonAuthenticationError) {\n if (\n error.code === \"unauthorized\" &&\n /target not allowed for this project/i.test(error.message)\n ) {\n throw new AuthenticationError(\n \"Photon rejected this recipient because the target is not allowed for the Spectrum project. Use a permitted or opted-in project user; initiating a conversation with a new contact requires a Photon plan that supports cold outreach.\",\n {\n ...errorOptions(error),\n code: \"photon_target_not_allowed\",\n },\n );\n }\n throw new AuthenticationError(error.message, errorOptions(error));\n }\n if (error instanceof PhotonNotFoundError) {\n throw new NotFoundError(error.message, errorOptions(error));\n }\n if (error instanceof PhotonRateLimitError) {\n throw new RateLimitError(error.message, errorOptions(error));\n }\n if (error instanceof PhotonValidationError) {\n throw new ValidationError(error.message, errorOptions(error));\n }\n if (error instanceof PhotonConnectionError) {\n if (operation === \"messages.send\") {\n throw new AmbiguousDeliveryError(\n \"The Photon send result is unknown; retry only with the same idempotency key.\",\n { ...errorOptions(error), code: \"ambiguous_delivery\", retryable: true },\n );\n }\n throw new ProviderUnavailableError(error.message, {\n ...errorOptions(error),\n retryable: true,\n });\n }\n const message = error instanceof Error ? error.message : `Photon ${operation} failed.`;\n if (/unknown server error occurred/i.test(message)) {\n throw new ProviderUnavailableError(message, {\n provider: \"photon\",\n code: \"photon_server_error\",\n retryable: true,\n raw: error,\n });\n }\n throw new IMessageSDKError(message, {\n provider: \"photon\",\n code: \"photon_error\",\n raw: error,\n });\n}\n\nasync function createCloudConnection(\n options: PhotonOptions,\n): Promise<CloudConnection> {\n const projectId = options.projectId;\n const projectSecret = options.projectSecret;\n if (\n projectId === undefined ||\n projectId.length === 0 ||\n projectSecret === undefined ||\n projectSecret.length === 0\n ) {\n throw new AuthenticationError(\n \"Photon project credentials are required. Pass projectId and projectSecret or set PHOTON_PROJECT_ID and PHOTON_PROJECT_SECRET.\",\n { provider: \"photon\", code: \"missing_project_credentials\" },\n );\n }\n let tokenData = await cloud.issueImessageTokens(\n projectId,\n projectSecret,\n );\n let expiresAt = Date.now() + tokenData.expiresIn * 1_000;\n let renewalTimer: ReturnType<typeof setTimeout> | undefined;\n let closed = false;\n\n const selectLine = (data: TokenData): PhotonLine => {\n if (data.type === \"shared\") {\n return { phone: SHARED_PHONE, instanceId: \"shared\", type: \"shared\" };\n }\n const lines = Object.entries(data.numbers).flatMap(\n ([instanceId, phone]) =>\n phone === null ? [] : [{ phone, instanceId, type: \"dedicated\" as const }],\n );\n if (options.phone !== undefined) {\n const selected = lines.find((line) => line.phone === options.phone);\n if (selected === undefined) {\n throw new ValidationError(\n `Photon phone ${options.phone} is not available to this Spectrum project.`,\n {\n provider: \"photon\",\n code: \"photon_phone_not_found\",\n raw: { availablePhones: lines.map((line) => line.phone) },\n },\n );\n }\n return selected;\n }\n if (lines.length !== 1 || lines[0] === undefined) {\n throw new ValidationError(\n \"Photon phone is required when the Spectrum project does not have exactly one dedicated line.\",\n {\n provider: \"photon\",\n code: \"photon_phone_required\",\n raw: { availablePhones: lines.map((line) => line.phone) },\n },\n );\n }\n return lines[0];\n };\n\n const line = selectLine(tokenData);\n\n function retryRefresh(): void {\n void refresh().catch(() => {\n if (!closed) {\n renewalTimer = setTimeout(retryRefresh, TOKEN_RETRY_MS);\n renewalTimer.unref?.();\n }\n });\n }\n\n const scheduleRenewal = (): void => {\n if (closed) return;\n if (renewalTimer !== undefined) clearTimeout(renewalTimer);\n const delay = Math.max(tokenData.expiresIn * 1_000 * TOKEN_RENEWAL_RATIO, 5_000);\n renewalTimer = setTimeout(retryRefresh, delay);\n renewalTimer.unref?.();\n };\n\n let refreshPromise: Promise<void> | undefined;\n const refresh = (): Promise<void> => {\n if (refreshPromise !== undefined) return refreshPromise;\n refreshPromise = cloud\n .issueImessageTokens(projectId, projectSecret)\n .then((next) => {\n const nextLine = selectLine(next);\n if (nextLine.instanceId !== line.instanceId) {\n throw new ValidationError(\"The selected Photon line changed during token renewal.\", {\n provider: \"photon\",\n code: \"photon_line_changed\",\n });\n }\n tokenData = next;\n expiresAt = Date.now() + next.expiresIn * 1_000;\n scheduleRenewal();\n })\n .finally(() => {\n refreshPromise = undefined;\n });\n return refreshPromise;\n };\n\n const getToken = async (): Promise<string> => {\n if (Date.now() >= expiresAt - TOKEN_EXPIRY_BUFFER_MS) await refresh();\n if (tokenData.type === \"shared\") return tokenData.token;\n const token = tokenData.auth[line.instanceId];\n if (token === undefined) {\n throw new AuthenticationError(\"Photon did not issue a token for the selected line.\", {\n provider: \"photon\",\n code: \"photon_line_token_missing\",\n });\n }\n return token;\n };\n\n const client = createClient({\n address:\n line.type === \"shared\"\n ? SHARED_ADDRESS\n : `${line.instanceId}.imsg.photon.codes:443`,\n token: getToken,\n tls: true,\n retry: options.retry ?? true,\n autoIdempotency: true,\n ...(options.timeout === undefined ? {} : { timeout: options.timeout }),\n });\n scheduleRenewal();\n\n return {\n client,\n line,\n async close() {\n if (closed) return;\n closed = true;\n if (renewalTimer !== undefined) clearTimeout(renewalTimer);\n await client.close();\n },\n };\n}\n\nfunction constantTimeEqual(left: string, right: string): boolean {\n if (left.length !== right.length) return false;\n let difference = 0;\n for (let index = 0; index < left.length; index += 1) {\n difference |= left.charCodeAt(index) ^ right.charCodeAt(index);\n }\n return difference === 0;\n}\n\nasync function hmacSha256(secret: string, value: string): Promise<string> {\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const result = await crypto.subtle.sign(\"HMAC\", key, encoder.encode(value));\n return Array.from(new Uint8Array(result), (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n ).join(\"\");\n}\n\nfunction webhookAttachments(\n content: z.infer<typeof WebhookMessageSchema>[\"content\"],\n): IMessageAttachment[] {\n const values =\n content.type === \"attachment\"\n ? [content]\n : content.type === \"group\"\n ? content.items.map((item) => item.content)\n : [];\n return values.map((item) => ({\n kind: attachmentKind(item.mimeType),\n id: item.id,\n filename: item.name,\n contentType: item.mimeType,\n ...(item.size === undefined ? {} : { size: item.size }),\n raw: item,\n }));\n}\n\n/** Creates a Photon provider backed by a Spectrum Cloud project. */\nexport function photon(options: PhotonOptions = {}): PhotonProvider {\n const projectId = options.projectId ?? process.env[\"PHOTON_PROJECT_ID\"];\n const projectSecret =\n options.projectSecret ?? process.env[\"PHOTON_PROJECT_SECRET\"];\n const phone = options.phone ?? process.env[\"PHOTON_PHONE_NUMBER\"];\n const webhookSecret =\n options.webhookSecret ?? process.env[\"PHOTON_WEBHOOK_SECRET\"];\n const config: PhotonOptions = {\n ...options,\n ...(projectId === undefined ? {} : { projectId }),\n ...(projectSecret === undefined ? {} : { projectSecret }),\n ...(phone === undefined ? {} : { phone }),\n ...(webhookSecret === undefined ? {} : { webhookSecret }),\n };\n let connectionPromise: Promise<CloudConnection> | undefined;\n const chatCache = new Map<string, Chat>();\n const activeStreams = new Set<TypedEventStream<unknown>>();\n\n const connection = (): Promise<CloudConnection> => {\n connectionPromise ??= createCloudConnection(config);\n return connectionPromise;\n };\n\n const run = async <T>(operation: string, fn: (value: CloudConnection) => Promise<T>): Promise<T> => {\n try {\n return await fn(await connection());\n } catch (error) {\n return mapError(error, operation);\n }\n };\n\n const getChat = async (client: AdvancedIMessage, id: string): Promise<Chat> => {\n const cached = chatCache.get(id);\n if (cached !== undefined) return cached;\n const chat = await client.chats.get(id);\n chatCache.set(id, chat);\n return chat;\n };\n\n const mapMessage = async (\n client: AdvancedIMessage,\n message: PhotonMessage,\n fallbackConversationId?: string,\n ): Promise<ProviderMessage> => {\n const conversationId =\n fallbackConversationId ?? message.chatGuids[0] ?? \"unknown\";\n let chat: Chat | undefined;\n try {\n chat = await getChat(client, conversationId);\n } catch {\n chat = undefined;\n }\n const line = (await connection()).line;\n const direction = message.isFromMe ? \"outbound\" : \"inbound\";\n const ownAddress = address(line.phone);\n const sender =\n direction === \"outbound\"\n ? ownAddress\n : message.sender === undefined\n ? address(\"unknown\")\n : address(message.sender.address);\n const recipients =\n direction === \"outbound\"\n ? (chat?.participants.map((participant) =>\n address(participant.address),\n ) ?? [])\n : [ownAddress];\n const replyTo = replyReference(message);\n return {\n providerMessageId: message.guid,\n conversationId,\n direction,\n sender,\n recipients,\n text: messageText(message.content),\n attachments: message.content.attachments.map(mapAttachment),\n ...(replyTo === undefined ? {} : { replyTo }),\n service: mapService(chat?.service ?? message.sender?.service ?? \"iMessage\"),\n status: mapStatus(message),\n providerStatus: providerStatus(message),\n createdAt: message.dateCreated,\n ...(message.isSent ? { sentAt: message.dateCreated } : {}),\n ...(message.dateDelivered === undefined\n ? {}\n : { deliveredAt: message.dateDelivered }),\n ...(message.dateRead === undefined ? {} : { readAt: message.dateRead }),\n raw: message,\n };\n };\n\n const syntheticEventMessage = async (\n client: AdvancedIMessage,\n event: Extract<MessageEvent, { readonly messageGuid: string }>,\n ): Promise<ProviderMessage> => {\n try {\n return await mapMessage(client, await client.messages.get(event.messageGuid), event.chatGuid);\n } catch {\n const line = (await connection()).line;\n const text = event.type === \"message.edited\" ? messageText(event.content) : \"\";\n return {\n providerMessageId: event.messageGuid,\n conversationId: event.chatGuid,\n direction: event.isFromMe ? \"outbound\" : \"inbound\",\n sender:\n event.actor === undefined\n ? address(line.phone)\n : address(event.actor.address),\n recipients: [],\n text,\n attachments: [],\n service: mapService(event.actor?.service ?? \"iMessage\"),\n status: event.type === \"message.read\" ? \"read\" : \"sent\",\n providerStatus: event.type,\n createdAt: event.occurredAt,\n ...(event.type === \"message.read\" ? { readAt: event.readAt } : {}),\n raw: event,\n };\n }\n };\n\n const mapStreamEvent = async (\n client: AdvancedIMessage,\n event: MessageEvent,\n ): Promise<ProviderEvent | undefined> => {\n const base = {\n id: `photon:${event.sequence}`,\n providerEventId: String(event.sequence),\n timestamp: event.occurredAt,\n raw: event,\n } as const;\n switch (event.type) {\n case \"message.received\":\n return {\n ...base,\n type: event.isFromMe ? \"message.sent\" : \"message.received\",\n message: await mapMessage(client, event.message, event.chatGuid),\n };\n case \"message.edited\":\n return {\n ...base,\n type: \"message.edited\",\n message: await syntheticEventMessage(client, event),\n };\n case \"message.read\":\n return {\n ...base,\n type: \"message.read\",\n message: await syntheticEventMessage(client, event),\n };\n case \"message.unsent\":\n return {\n ...base,\n type: \"message.deleted\",\n conversationId: event.chatGuid,\n messageId: event.messageGuid,\n };\n case \"message.reactionAdded\":\n case \"message.reactionRemoved\": {\n const reaction = normalizeReaction(event.reaction);\n if (reaction === undefined) return undefined;\n const line = (await connection()).line;\n return {\n ...base,\n type:\n event.type === \"message.reactionAdded\"\n ? \"reaction.added\"\n : \"reaction.removed\",\n conversationId: event.chatGuid,\n messageId: event.messageGuid,\n actor:\n event.actor === undefined\n ? address(line.phone)\n : address(event.actor.address),\n reaction,\n ...(event.targetPartIndex === undefined\n ? {}\n : { partIndex: event.targetPartIndex }),\n };\n }\n case \"message.stickerPlaced\":\n return undefined;\n }\n };\n\n const messages: PhotonMessages = {\n async send(input): Promise<ProviderSentMessage> {\n return run(\"messages.send\", async ({ client }) => {\n let chatId = input.conversationId;\n if (chatId === undefined) {\n const recipients = Array.isArray(input.to) ? input.to : [input.to];\n const result = await client.chats.create(\n recipients.map((recipient) => recipient.value),\n input.idempotencyKey === undefined\n ? undefined\n : { clientMessageId: `${input.idempotencyKey}:chat` },\n );\n chatCache.set(result.chat.guid, result.chat);\n chatId = result.chat.guid;\n }\n const replyTo =\n input.replyTo === undefined\n ? undefined\n : input.replyTo.partIndex === undefined\n ? input.replyTo.messageId\n : {\n guid: input.replyTo.messageId,\n partIndex: input.replyTo.partIndex,\n };\n const uploaded = await Promise.all(\n (input.attachments ?? []).map(async (attachment) => {\n return client.attachments.upload({\n fileName: attachmentFilename(attachment),\n data: await attachmentBytes(attachment),\n });\n }),\n );\n const common = {\n ...(input.idempotencyKey === undefined\n ? {}\n : { clientMessageId: input.idempotencyKey }),\n ...(replyTo === undefined ? {} : { replyTo }),\n };\n let sent: PhotonMessage;\n if (uploaded.length === 0) {\n sent = await client.messages.sendText(chatId, input.text ?? \"\", common);\n } else if (uploaded.length === 1 && input.text === undefined) {\n const first = uploaded[0];\n if (first === undefined) throw new ValidationError(\"Attachment upload failed.\");\n sent = await client.messages.sendAttachment(\n chatId,\n first.attachment.guid,\n common,\n );\n } else {\n sent = await client.messages.sendMultipart(\n chatId,\n [\n ...(input.text === undefined ? [] : [{ text: input.text }]),\n ...uploaded.map((result) => ({\n attachmentGuid: result.attachment.guid,\n attachmentName: result.attachment.fileName,\n })),\n ],\n common,\n );\n }\n return (await mapMessage(client, sent, chatId)) as ProviderSentMessage;\n });\n },\n\n async get(message) {\n try {\n return await run(\"messages.get\", async ({ client }) =>\n mapMessage(client, await client.messages.get(message.messageId), message.conversationId),\n );\n } catch (error) {\n if (error instanceof NotFoundError) return null;\n throw error;\n }\n },\n\n };\n\n const conversations: PhotonConversations = {\n async open(input) {\n return run(\"conversations.open\", async ({ client }) => {\n const result = await client.chats.create(\n input.participants.map((participant) => participant.value),\n );\n chatCache.set(result.chat.guid, result.chat);\n return mapConversation(result.chat);\n });\n },\n\n async get(id) {\n try {\n return await run(\"conversations.get\", async ({ client }) =>\n mapConversation(await getChat(client, id)),\n );\n } catch (error) {\n if (error instanceof NotFoundError) return null;\n throw error;\n }\n },\n\n async markRead(id) {\n await run(\"conversations.markRead\", async ({ client }) => {\n await client.chats.markRead(id);\n });\n },\n };\n\n const events: ProviderEvents = {\n subscribe(subscribeOptions: SubscribeOptions = {}) {\n const iterable: AsyncIterable<ProviderEvent> = {\n async *[Symbol.asyncIterator]() {\n const { client } = await connection();\n const live = client.messages.subscribeEvents();\n activeStreams.add(live as TypedEventStream<unknown>);\n const abort = (): void => {\n void live.close();\n };\n subscribeOptions.signal?.addEventListener(\"abort\", abort, {\n once: true,\n });\n const seen = new Set<number>();\n const liveIterator = live[Symbol.asyncIterator]();\n let nextLive = liveIterator.next();\n try {\n if (subscribeOptions.cursor !== undefined) {\n const cursor = Number(subscribeOptions.cursor);\n if (!Number.isSafeInteger(cursor) || cursor < 0) {\n throw new ValidationError(\n \"Photon event cursor must be a non-negative integer sequence.\",\n { provider: \"photon\", code: \"invalid_event_cursor\" },\n );\n }\n const catchUp = client.events.catchUp(cursor);\n activeStreams.add(catchUp as TypedEventStream<unknown>);\n try {\n for await (const event of catchUp) {\n if (subscribeOptions.signal?.aborted === true) return;\n if (event.type === \"catchup.complete\") break;\n if (!event.type.startsWith(\"message.\")) continue;\n const messageEvent = event as MessageEvent;\n seen.add(messageEvent.sequence);\n const mapped = await mapStreamEvent(client, messageEvent);\n if (mapped !== undefined) yield mapped;\n }\n } finally {\n activeStreams.delete(catchUp as TypedEventStream<unknown>);\n await catchUp.close();\n }\n }\n while (true) {\n const result = await nextLive;\n if (result.done === true) return;\n nextLive = liveIterator.next();\n const event = result.value;\n if (subscribeOptions.signal?.aborted === true) return;\n if (seen.has(event.sequence)) continue;\n const mapped = await mapStreamEvent(client, event);\n if (mapped !== undefined) yield mapped;\n }\n } catch (error) {\n mapError(error, \"events.subscribe\");\n } finally {\n subscribeOptions.signal?.removeEventListener(\"abort\", abort);\n activeStreams.delete(live as TypedEventStream<unknown>);\n await live.close();\n }\n },\n };\n return iterable;\n },\n };\n\n return defineProvider({\n name: \"photon\",\n capabilities: PHOTON_CAPABILITIES,\n messages,\n conversations,\n reactions: {\n async add(input) {\n await run(\"reactions.add\", async ({ client }) => {\n await client.messages.setReaction(\n input.conversationId,\n input.messageId,\n mapReaction(input.reaction),\n true,\n input.partIndex === undefined ? undefined : { partIndex: input.partIndex },\n );\n });\n },\n async remove(input) {\n await run(\"reactions.remove\", async ({ client }) => {\n await client.messages.setReaction(\n input.conversationId,\n input.messageId,\n mapReaction(input.reaction),\n false,\n input.partIndex === undefined ? undefined : { partIndex: input.partIndex },\n );\n });\n },\n },\n typing: {\n async start(id) {\n await run(\"typing.start\", async ({ client }) => {\n await client.chats.setTyping(id, true);\n });\n },\n async stop(id) {\n await run(\"typing.stop\", async ({ client }) => {\n await client.chats.setTyping(id, false);\n });\n },\n },\n webhooks: {\n async verify(request) {\n if (config.webhookSecret === undefined) return false;\n const timestamp = request.headers.get(\"x-spectrum-timestamp\");\n const signature = request.headers.get(\"x-spectrum-signature\");\n if (timestamp === null || signature === null) return false;\n const numericTimestamp = Number(timestamp);\n const age = Math.abs(Math.floor(Date.now() / 1_000) - numericTimestamp);\n if (!Number.isFinite(age) || age > WEBHOOK_TOLERANCE_SECONDS) return false;\n const rawBody = await request.text();\n const digest = await hmacSha256(\n config.webhookSecret,\n `v0:${timestamp}:${rawBody}`,\n );\n return constantTimeEqual(`v0=${digest}`, signature.toLowerCase());\n },\n async parse(request) {\n const parsed = WebhookPayloadSchema.safeParse(await request.json());\n if (!parsed.success) return [];\n const { message, space } = parsed.data;\n if (message.content.type === \"reaction\") {\n const reaction = normalizeWebhookReaction(message.content.emoji);\n if (reaction === undefined) return [];\n const providerEventId = request.headers.get(\"x-spectrum-webhook-id\");\n return [\n {\n id: message.id,\n ...(providerEventId === null ? {} : { providerEventId }),\n type: \"reaction.added\",\n timestamp: new Date(message.timestamp),\n conversationId: space.id,\n messageId: message.content.target.id,\n actor: address(message.sender.id),\n reaction,\n raw: parsed.data,\n },\n ];\n }\n const own = address(space.phone ?? config.phone ?? SHARED_PHONE);\n const providerEventId = request.headers.get(\"x-spectrum-webhook-id\");\n return [\n {\n id: message.id,\n ...(providerEventId === null ? {} : { providerEventId }),\n type: \"message.received\",\n timestamp: new Date(message.timestamp),\n message: {\n providerMessageId: message.id,\n conversationId: space.id,\n direction: \"inbound\",\n sender: address(message.sender.id),\n recipients: [own],\n text: message.content.type === \"text\" ? message.content.text : \"\",\n attachments: webhookAttachments(message.content),\n service: \"imessage\",\n status: \"delivered\",\n providerStatus: \"received\",\n createdAt: new Date(message.timestamp),\n raw: message,\n },\n raw: parsed.data,\n },\n ];\n },\n },\n events,\n connection: {\n async getLine() {\n return (await connection()).line;\n },\n },\n async close() {\n await Promise.all(\n [...activeStreams].map(async (stream) => await stream.close()),\n );\n activeStreams.clear();\n if (connectionPromise !== undefined) {\n await (await connectionPromise).close();\n }\n },\n });\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "imessage-sdk",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"description": "Provider-neutral TypeScript SDK for iMessage infrastructure",
|
|
5
|
+
"author": "jmisilo",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"imessage",
|
|
8
|
+
"messaging",
|
|
9
|
+
"sdk",
|
|
10
|
+
"typescript",
|
|
11
|
+
"blooio",
|
|
12
|
+
"photon"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/jmisilo/imessage-sdk.git",
|
|
17
|
+
"directory": "packages/imessage-sdk"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/jmisilo/imessage-sdk/tree/main/packages/imessage-sdk#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/jmisilo/imessage-sdk/issues"
|
|
22
|
+
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"type": "module",
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"LICENSE",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"main": "./dist/index.js",
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"types": "./dist/index.d.ts",
|
|
36
|
+
"import": "./dist/index.js",
|
|
37
|
+
"default": "./dist/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./providers/blooio": {
|
|
40
|
+
"types": "./dist/providers/blooio.d.ts",
|
|
41
|
+
"import": "./dist/providers/blooio.js",
|
|
42
|
+
"default": "./dist/providers/blooio.js"
|
|
43
|
+
},
|
|
44
|
+
"./providers/photon": {
|
|
45
|
+
"types": "./dist/providers/photon.d.ts",
|
|
46
|
+
"import": "./dist/providers/photon.js",
|
|
47
|
+
"default": "./dist/providers/photon.js"
|
|
48
|
+
},
|
|
49
|
+
"./package.json": "./package.json"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=20"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"build": "tsup",
|
|
56
|
+
"dev": "tsup --watch",
|
|
57
|
+
"prepack": "pnpm build",
|
|
58
|
+
"test": "vitest run",
|
|
59
|
+
"test:integration:blooio": "BLOOIO_LIVE_TEST=1 vitest run test/blooio.integration.test.ts",
|
|
60
|
+
"test:integration:photon": "PHOTON_LIVE_TEST=1 vitest run test/photon.integration.test.ts",
|
|
61
|
+
"test:integration:photon-stream": "PHOTON_LIVE_STREAM_TEST=1 vitest run test/photon.integration.test.ts",
|
|
62
|
+
"test:watch": "vitest",
|
|
63
|
+
"typecheck": "tsc --project tsconfig.json --noEmit"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public",
|
|
67
|
+
"provenance": true
|
|
68
|
+
},
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"@photon-ai/advanced-imessage": "^1.0.0",
|
|
71
|
+
"@spectrum-ts/core": "^9.3.1",
|
|
72
|
+
"zod": "^4.4.3"
|
|
73
|
+
}
|
|
74
|
+
}
|