UNPKG

penpal

Version:

Penpal simplifies communication with iframes, workers, and windows by using promise-based methods on top of postMessage.

1 lines 75.6 kB
{"version":3,"sources":["../src/PenpalError.ts","../src/errorSerialization.ts","../src/Reply.ts","../src/namespace.ts","../src/guards.ts","../src/methodSerialization.ts","../src/connectCallHandler.ts","../src/generateId.ts","../src/CallOptions.ts","../src/connectRemoteProxy.ts","../src/getPromiseWithResolvers.ts","../src/PenpalBugError.ts","../src/backwardCompatibility.ts","../src/shakeHands.ts","../src/once.ts","../src/connect.ts","../src/messengers/WindowMessenger.ts","../src/messengers/WorkerMessenger.ts","../src/messengers/PortMessenger.ts","../src/ErrorCodeObj.ts","../src/debug.ts"],"names":["brand"],"mappings":"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","file":"penpal.mjs","sourcesContent":["import { ErrorCode } from './types.js';\n\nclass PenpalError extends Error {\n public code: ErrorCode;\n\n constructor(code: ErrorCode, message: string) {\n super(message);\n this.name = 'PenpalError';\n this.code = code;\n }\n}\n\nexport default PenpalError;\n","import { SerializedError } from './types.js';\nimport PenpalError from './PenpalError.js';\n\n/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = (error: Error): SerializedError => ({\n name: error.name,\n message: error.message,\n stack: error.stack,\n penpalCode: error instanceof PenpalError ? error.code : undefined,\n});\n\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = ({\n name,\n message,\n stack,\n penpalCode,\n}: SerializedError): Error => {\n const deserializedError = penpalCode\n ? new PenpalError(penpalCode, message)\n : new Error(message);\n\n deserializedError.name = name;\n deserializedError.stack = stack;\n\n return deserializedError;\n};\n","const brand: unique symbol = Symbol('Reply');\n\nclass Reply<T = unknown> {\n readonly value: T;\n readonly transferables?: Transferable[];\n\n // Allows TypeScript to distinguish between an actual instance of this\n // class versus an object that looks structurally similar.\n // eslint-disable-next-line no-unused-private-class-members\n #brand = brand;\n\n constructor(\n value: T,\n options?: {\n transferables?: Transferable[];\n }\n ) {\n this.value = value;\n this.transferables = options?.transferables;\n }\n}\n\nexport default Reply;\n","export default 'penpal' as const;\n","import namespace from './namespace.js';\nimport {\n Ack2Message,\n CallMessage,\n Message,\n ReplyMessage,\n Ack1Message,\n SynMessage,\n DestroyMessage,\n} from './types.js';\n\nexport const isObject = (\n value: unknown\n): value is Record<string | number | symbol, unknown> => {\n return typeof value === 'object' && value !== null;\n};\n\nexport const isFunction = (value: unknown) => {\n return typeof value === 'function';\n};\n\nexport const isMessage = (data: unknown): data is Message => {\n return isObject(data) && data.namespace === namespace;\n};\n\nexport const isSynMessage = (message: Message): message is SynMessage => {\n return message.type === 'SYN';\n};\n\nexport const isAck1Message = (message: Message): message is Ack1Message => {\n return message.type === 'ACK1';\n};\n\nexport const isAck2Message = (message: Message): message is Ack2Message => {\n return message.type === 'ACK2';\n};\n\nexport const isCallMessage = (message: Message): message is CallMessage => {\n return message.type === 'CALL';\n};\n\nexport const isReplyMessage = (message: Message): message is ReplyMessage => {\n return message.type === 'REPLY';\n};\n\nexport const isDestroyMessage = (\n message: Message\n): message is DestroyMessage => {\n return message.type === 'DESTROY';\n};\n","import { MethodPath, Methods } from './types.js';\nimport { isFunction, isObject } from './guards.js';\n\n// TODO: Used for backward-compatibility. Remove in next major version.\n/**\n * Given an object of (nested) keys to functions, extract paths to each function.\n *\n * @example\n * Given this Method object:\n * {\n * one: {\n * two: () => {}\n * }\n * three: () => {}\n * }\n *\n * the extracted MethodPath[] would be:\n * [\n * ['one', 'two'],\n * ['three']\n * ]\n */\nexport const extractMethodPathsFromMethods = (\n methods: Methods,\n currentPath: MethodPath = []\n) => {\n const methodPaths: MethodPath[] = [];\n\n for (const key of Object.keys(methods)) {\n const value = methods[key];\n\n if (isFunction(value)) {\n methodPaths.push([...currentPath, key]);\n } else if (isObject(value)) {\n methodPaths.push(\n ...extractMethodPathsFromMethods(value, [...currentPath, key])\n );\n }\n }\n\n return methodPaths;\n};\n\nexport const getMethodAtMethodPath = (\n methodPath: MethodPath,\n methods: Methods\n) => {\n const result = methodPath.reduce<Methods | Function | undefined>(\n (acc, pathSegment) => {\n return isObject(acc) ? acc[pathSegment] : undefined;\n },\n methods\n );\n\n return isFunction(result) ? result : undefined;\n};\n\nexport const formatMethodPath = (methodPath: MethodPath) => {\n return methodPath.join('.');\n};\n","import { serializeError } from './errorSerialization.js';\nimport { Message, ReplyMessage, Methods, Log } from './types.js';\nimport Reply from './Reply.js';\nimport Messenger from './messengers/Messenger.js';\nimport PenpalError from './PenpalError.js';\nimport {\n formatMethodPath,\n getMethodAtMethodPath,\n} from './methodSerialization.js';\nimport { isCallMessage } from './guards.js';\nimport namespace from './namespace.js';\n\nconst createErrorReplyMessage = (\n channel: string | undefined,\n callId: string,\n error: unknown\n): ReplyMessage => ({\n namespace,\n channel,\n type: 'REPLY',\n callId,\n isError: true,\n ...(error instanceof Error\n ? { value: serializeError(error), isSerializedErrorInstance: true }\n : { value: error }),\n});\n\n/**\n * Listens for \"call\" messages from the remote, executes the corresponding method,\n * and responds with the return value or error.\n */\nconst connectCallHandler = (\n messenger: Messenger,\n methods: Methods,\n channel: string | undefined,\n log: Log | undefined\n) => {\n let isDestroyed = false;\n\n const handleMessage = async (message: Message) => {\n if (isDestroyed) {\n // It's possible to throw an error here, but it would only be catchable\n // using window.onerror since we're in an asynchronously-called function.\n // There is no method call the consumer is making that they could wrap in\n // a try-catch. Even if the consumer were to catch the error somehow,\n // the value of doing so is questionable.\n return;\n }\n\n if (!isCallMessage(message)) {\n return;\n }\n\n log?.(`Received ${formatMethodPath(message.methodPath)}() call`, message);\n\n const { methodPath, args, id: callId } = message;\n let replyMessage: ReplyMessage;\n let transferables: Transferable[] | undefined;\n\n try {\n const method = getMethodAtMethodPath(methodPath, methods);\n\n if (!method) {\n throw new PenpalError(\n 'METHOD_NOT_FOUND',\n `Method \\`${formatMethodPath(methodPath)}\\` is not found.`\n );\n }\n\n let value: unknown = await method(...args);\n\n if (value instanceof Reply) {\n transferables = value.transferables;\n value = await value.value;\n }\n\n replyMessage = {\n namespace,\n channel,\n type: 'REPLY',\n callId,\n value,\n };\n } catch (error) {\n replyMessage = createErrorReplyMessage(channel, callId, error);\n }\n\n // Although we checked this at the beginning of the function, we need to\n // check it again because we've made async calls, and the connection may\n // have been destroyed in the meantime.\n if (isDestroyed) {\n return;\n }\n\n try {\n log?.(`Sending ${formatMethodPath(methodPath)}() reply`, replyMessage);\n messenger.sendMessage(replyMessage, transferables);\n } catch (error) {\n // If a consumer attempts to send an object that's not\n // cloneable (e.g., window), we want to ensure the receiver's promise\n // gets rejected.\n if ((error as Error).name === 'DataCloneError') {\n replyMessage = createErrorReplyMessage(channel, callId, error as Error);\n log?.(`Sending ${formatMethodPath(methodPath)}() reply`, replyMessage);\n messenger.sendMessage(replyMessage);\n }\n throw error;\n }\n };\n\n messenger.addMessageHandler(handleMessage);\n\n return () => {\n isDestroyed = true;\n messenger.removeMessageHandler(handleMessage);\n };\n};\n\nexport default connectCallHandler;\n","/**\n * @return A unique ID\n */\n// crypto.randomUUID is not available in insecure contexts.\nexport default crypto.randomUUID?.bind(crypto) ??\n (() =>\n new Array(4)\n .fill(0)\n .map(() =>\n Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)\n )\n .join('-'));\n","const brand: unique symbol = Symbol('CallOptions');\n\nclass CallOptions {\n readonly transferables?: Transferable[];\n readonly timeout?: number;\n\n // Allows TypeScript to distinguish between an actual instance of this\n // class versus an object that looks structurally similar.\n // eslint-disable-next-line no-unused-private-class-members\n #brand = brand;\n\n constructor(options?: { transferables?: Transferable[]; timeout?: number }) {\n this.transferables = options?.transferables;\n this.timeout = options?.timeout;\n }\n}\n\nexport default CallOptions;\n","import generateId from './generateId.js';\nimport { deserializeError } from './errorSerialization.js';\nimport { formatMethodPath } from './methodSerialization.js';\nimport {\n Message,\n RemoteProxy,\n Methods,\n MethodPath,\n CallMessage,\n Log,\n} from './types.js';\nimport CallOptions from './CallOptions.js';\nimport Messenger from './messengers/Messenger.js';\nimport PenpalError from './PenpalError.js';\nimport { isReplyMessage } from './guards.js';\nimport namespace from './namespace.js';\n\ntype ReplyHandler = {\n methodPath: MethodPath;\n resolve: (value: unknown) => void;\n reject: (reason: unknown) => void;\n timeoutId?: number;\n};\n\nconst methodsToTreatAsNative = new Set(['apply', 'call', 'bind']);\n\nconst createRemoteProxy = (\n callback: (path: MethodPath, args: unknown[]) => void,\n log?: Log,\n path: MethodPath = []\n): Methods => {\n return new Proxy(\n path.length\n ? () => {\n // Intentionally empty\n }\n : Object.create(null),\n {\n get(target, prop: string) {\n // If a promise is resolved with this proxy object, the JavaScript\n // runtime will look for a `then` property on this object to determine\n // if it should be treated as a promise (to support promise chaining).\n // If we don't return undefined here, the JavaScript runtime will treat\n // this object as a promise and attempt to call `then`, which will\n // then send a call message to the remote. This is not what we want.\n if (prop === 'then') {\n return;\n }\n\n // Because we're using a proxy and because Penpal supports developers\n // exposing nested methods, we have a predicament. If a developer\n // calls, for example, remote.auth.apply(), are they\n // attempting to call a nested apply() method that a developer has\n // explicitly exposed from the remote? Could they instead be attempting\n // to call Function.prototype.apply() on the remote.auth() method?\n // Without the remote telling the local Penpal which methods the\n // developer has exposed, it has no way of knowing (and the main reason\n // we use a proxy is so that Penpal doesn't have to communicate which\n // methods are exposed). So, we treat certain methods as native methods\n // and return the native method rather than a proxy. The downside of\n // this is that if a developer has explicitly exposed a nested method\n // with the same name as one of these native method names, the developer\n // will be unable to call the exposed remote method because they will\n // be calling the method on the Function prototype instead.\n if (path.length && methodsToTreatAsNative.has(prop)) {\n return Reflect.get(target, prop);\n }\n\n return createRemoteProxy(callback, log, [...path, prop]);\n },\n apply(target, _thisArg, args) {\n return callback(path, args);\n },\n }\n );\n};\n\nconst getDestroyedConnectionMethodCallError = (methodPath: MethodPath) => {\n return new PenpalError(\n 'CONNECTION_DESTROYED',\n `Method call ${formatMethodPath(\n methodPath\n )}() failed due to destroyed connection`\n );\n};\n\n/**\n * Creates a proxy. When methods are called on the proxy, a \"call\" message will\n * be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n */\nconst connectRemoteProxy = <TMethods extends Methods>(\n messenger: Messenger,\n channel: string | undefined,\n log: Log | undefined\n) => {\n let isDestroyed = false;\n const replyHandlers = new Map<string, ReplyHandler>();\n\n const handleMessage = (message: Message) => {\n if (!isReplyMessage(message)) {\n return;\n }\n\n const { callId, value, isError, isSerializedErrorInstance } = message;\n const replyHandler = replyHandlers.get(callId);\n\n if (!replyHandler) {\n return;\n }\n\n replyHandlers.delete(callId);\n log?.(\n `Received ${formatMethodPath(replyHandler.methodPath)}() call`,\n message\n );\n\n if (isError) {\n replyHandler.reject(\n isSerializedErrorInstance ? deserializeError(value) : value\n );\n } else {\n replyHandler.resolve(value);\n }\n };\n\n messenger.addMessageHandler(handleMessage);\n\n const remoteProxy = createRemoteProxy((methodPath, args) => {\n if (isDestroyed) {\n throw getDestroyedConnectionMethodCallError(methodPath);\n }\n\n const callId = generateId();\n const lastArg = args[args.length - 1];\n const lastArgIsOptions = lastArg instanceof CallOptions;\n const { timeout, transferables } = lastArgIsOptions ? lastArg : {};\n const argsWithoutOptions = lastArgIsOptions ? args.slice(0, -1) : args;\n\n return new Promise((resolve, reject) => {\n // We reference `window.setTimeout` instead of just `setTimeout`\n // so that the TypeScript engine doesn't\n // get confused when running tests. Something within\n // Karma + @rollup/plugin-typescript leaks node types into source\n // files when running tests. Node's setTimeout has a return type of\n // Timeout rather than number, resulting in a build error when\n // running tests if we don't disambiguate the browser setTimeout\n // from node's setTimeout. There may be a better way to configure\n // Karma + Rollup + Typescript to avoid node type leakage.\n const timeoutId =\n timeout !== undefined\n ? window.setTimeout(() => {\n replyHandlers.delete(callId);\n reject(\n new PenpalError(\n 'METHOD_CALL_TIMEOUT',\n `Method call ${formatMethodPath(\n methodPath\n )}() timed out after ${timeout}ms`\n )\n );\n }, timeout)\n : undefined;\n\n replyHandlers.set(callId, { methodPath, resolve, reject, timeoutId });\n\n try {\n const callMessage: CallMessage = {\n namespace,\n channel,\n type: 'CALL',\n id: callId,\n methodPath,\n args: argsWithoutOptions,\n };\n log?.(`Sending ${formatMethodPath(methodPath)}() call`, callMessage);\n messenger.sendMessage(callMessage, transferables);\n } catch (error) {\n reject(\n new PenpalError('TRANSMISSION_FAILED', (error as Error).message)\n );\n }\n });\n }, log) as RemoteProxy<TMethods>;\n\n const destroy = () => {\n isDestroyed = true;\n messenger.removeMessageHandler(handleMessage);\n\n for (const { methodPath, reject, timeoutId } of replyHandlers.values()) {\n clearTimeout(timeoutId);\n reject(getDestroyedConnectionMethodCallError(methodPath));\n }\n\n replyHandlers.clear();\n };\n\n return {\n remoteProxy,\n destroy,\n };\n};\n\nexport default connectRemoteProxy;\n","// Just use the native Promise.withResolvers() once it gains a bit more\n// adoption. Safari was the last major browser to support it, which happened\n// on March 5, 2024 in Safari 17.4.\nconst getPromiseWithResolvers = <ResolvedValueType, RejectedValueType>() => {\n let resolve: (value: ResolvedValueType) => void;\n let reject: (error: RejectedValueType) => void;\n\n const promise = new Promise<ResolvedValueType>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n promise,\n resolve: resolve!,\n reject: reject!,\n };\n};\n\nexport default getPromiseWithResolvers;\n","/**\n * Error class that is thrown when we've reached a situation that we believe to\n * be a bug in Penpal and not anything the consumer has done.\n */\nclass PenpalBugError extends Error {\n constructor(message: string) {\n super(\n `You've hit a bug in Penpal. Please file an issue with the following information: ${message}`\n );\n }\n}\n\nexport default PenpalBugError;\n","import { Message, MethodPath } from './types.js';\nimport namespace from './namespace.js';\nimport {\n isCallMessage,\n isReplyMessage,\n isAck1Message,\n isObject,\n} from './guards.js';\nimport PenpalBugError from './PenpalBugError.js';\n\nexport const DEPRECATED_PENPAL_PARTICIPANT_ID = 'deprecated-penpal';\n\n// TODO: This file is used for backward-compatibility. Remove in next major version.\n\nenum DeprecatedMessageType {\n Call = 'call',\n Reply = 'reply',\n Syn = 'syn',\n SynAck = 'synAck',\n Ack = 'ack',\n}\n\nenum DeprecatedResolution {\n Fulfilled = 'fulfilled',\n Rejected = 'rejected',\n}\n\ntype DeprecatedSynMessage = {\n penpal: DeprecatedMessageType.Syn;\n};\n\ntype DeprecatedSynAckMessage = {\n penpal: DeprecatedMessageType.SynAck;\n methodNames: string[];\n};\n\ntype DeprecatedAckMessage = {\n penpal: DeprecatedMessageType.Ack;\n methodNames: string[];\n};\n\ntype DeprecatedCallMessage = {\n penpal: DeprecatedMessageType.Call;\n id: number;\n methodName: string;\n args: unknown[];\n};\n\ntype DeprecatedSerializedError = {\n name: string;\n message: string;\n stack?: string;\n};\n\ntype DeprecatedReplyMessage = {\n penpal: DeprecatedMessageType.Reply;\n id: number;\n} & (\n | {\n resolution: DeprecatedResolution.Fulfilled;\n returnValue: unknown;\n returnValueIsError?: false;\n }\n | {\n resolution: DeprecatedResolution.Rejected;\n returnValue: unknown;\n returnValueIsError?: false;\n }\n | {\n resolution: DeprecatedResolution.Rejected;\n returnValue: DeprecatedSerializedError;\n returnValueIsError: true;\n }\n);\n\nexport type DeprecatedMessage =\n | DeprecatedSynMessage\n | DeprecatedSynAckMessage\n | DeprecatedAckMessage\n | DeprecatedCallMessage\n | DeprecatedReplyMessage;\n\nexport const isDeprecatedMessage = (\n data: unknown\n): data is DeprecatedMessage => {\n return isObject(data) && 'penpal' in data;\n};\n\nconst upgradeMethodPath = (methodPath: string): MethodPath =>\n methodPath.split('.');\nconst downgradeMethodPath = (methodPath: MethodPath) => methodPath.join('.');\n\nconst getUnexpectedMessageError = (message: unknown) => {\n return new PenpalBugError(\n `Unexpected message to translate: ${JSON.stringify(message)}`\n );\n};\n\nexport const upgradeMessage = (message: DeprecatedMessage): Message => {\n if (message.penpal === DeprecatedMessageType.Syn) {\n return {\n namespace,\n channel: undefined,\n type: 'SYN',\n participantId: DEPRECATED_PENPAL_PARTICIPANT_ID,\n };\n }\n\n if (message.penpal === DeprecatedMessageType.Ack) {\n return {\n namespace,\n channel: undefined,\n type: 'ACK2',\n };\n }\n\n if (message.penpal === DeprecatedMessageType.Call) {\n return {\n namespace,\n channel: undefined,\n type: 'CALL',\n // Actually converting the ID to a string would break communication.\n id: (message.id as unknown) as string,\n methodPath: upgradeMethodPath(message.methodName),\n args: message.args,\n };\n }\n\n if (message.penpal === DeprecatedMessageType.Reply) {\n if (message.resolution === DeprecatedResolution.Fulfilled) {\n return {\n namespace,\n channel: undefined,\n type: 'REPLY',\n // Actually converting the ID to a string would break communication.\n callId: (message.id as unknown) as string,\n value: message.returnValue,\n };\n } else {\n return {\n namespace,\n channel: undefined,\n type: 'REPLY',\n // Actually converting the ID to a string would break communication.\n callId: (message.id as unknown) as string,\n isError: true,\n ...(message.returnValueIsError\n ? {\n value: message.returnValue,\n isSerializedErrorInstance: true,\n }\n : {\n value: message.returnValue,\n }),\n };\n }\n }\n\n throw getUnexpectedMessageError(message);\n};\n\nexport const downgradeMessage = (message: Message): DeprecatedMessage => {\n if (isAck1Message(message)) {\n return {\n penpal: DeprecatedMessageType.SynAck,\n methodNames: message.methodPaths.map(downgradeMethodPath),\n };\n }\n\n if (isCallMessage(message)) {\n return {\n penpal: DeprecatedMessageType.Call,\n // Actually converting the ID to a number would break communication.\n id: (message.id as unknown) as number,\n methodName: downgradeMethodPath(message.methodPath),\n args: message.args,\n };\n }\n\n if (isReplyMessage(message)) {\n if (message.isError) {\n return {\n penpal: DeprecatedMessageType.Reply,\n // Actually converting the ID to a number would break communication.\n id: (message.callId as unknown) as number,\n resolution: DeprecatedResolution.Rejected,\n ...(message.isSerializedErrorInstance\n ? {\n returnValue: message.value,\n returnValueIsError: true,\n }\n : { returnValue: message.value }),\n };\n } else {\n return {\n penpal: DeprecatedMessageType.Reply,\n // Actually converting the ID to a number would break communication.\n id: (message.callId as unknown) as number,\n resolution: DeprecatedResolution.Fulfilled,\n returnValue: message.value,\n };\n }\n }\n\n throw getUnexpectedMessageError(message);\n};\n","import Messenger from './messengers/Messenger.js';\nimport {\n Ack2Message,\n Methods,\n Message,\n RemoteProxy,\n Ack1Message,\n SynMessage,\n Log,\n} from './types.js';\nimport PenpalError from './PenpalError.js';\nimport connectCallHandler from './connectCallHandler.js';\nimport connectRemoteProxy from './connectRemoteProxy.js';\nimport { isAck2Message, isAck1Message, isSynMessage } from './guards.js';\nimport getPromiseWithResolvers from './getPromiseWithResolvers.js';\nimport { extractMethodPathsFromMethods } from './methodSerialization.js';\nimport generateId from './generateId.js';\nimport { DEPRECATED_PENPAL_PARTICIPANT_ID } from './backwardCompatibility.js';\nimport namespace from './namespace.js';\n\ntype Options = {\n messenger: Messenger;\n methods: Methods;\n timeout: number | undefined;\n channel: string | undefined;\n log: Log | undefined;\n};\n\ntype HandshakeResult<TMethods extends Methods> = {\n remoteProxy: RemoteProxy<TMethods>;\n destroy: () => void;\n};\n\n/**\n * Attempts to establish communication with the remote via a handshake protocol.\n * The handshake protocol fulfills a few requirements:\n *\n * 1. One participant in the handshake may not be available when the other\n * participant starts the handshake. For example, a document inside an iframe\n * may not be loaded when the parent window starts a handshake.\n * 2. While #1 could be solved by having the consumer of Penpal specify which\n * participant should initiate the handshake, we'd rather avoid this\n * unnecessary cognitive load.\n * 3. While #1 could be solved by having the consumer of Penpal specify which\n * participant is the \"parent\" or \"child\" and then having Penpal assume\n * the child should initiate the handshake, we'd rather avoid parent-child\n * terminology since Penpal can support communication between two\n * participants where neither would be considered a parent nor child. It may\n * also be too presumptive that the child should always initiate the\n * handshake.\n * 4. For robustness, each participant must know that the other participant is\n * receiving its messages for the handshak