@thavguard/arc-pay 0.1.26 → 0.1.27
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/dist/cdn/arcpay.global.js +1 -1
- package/dist/cdn/arcpay.global.js.map +1 -1
- package/dist/index.cjs +7 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +7 -1
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.cjs +7 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.mjs +7 -1
- package/dist/react/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/errors.ts","../../src/core/env.ts","../../src/core/sandbox-banner.ts","../../src/elements/postmessage.ts","../../src/elements/style.ts","../../src/elements/element.ts","../../src/elements/elements.ts","../../src/core/arcpay.ts","../../src/react/provider.tsx","../../src/react/use-arcpay.ts","../../src/react/index.ts"],"names":["validatePublishableKey","React","React2"],"mappings":"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","file":"index.cjs","sourcesContent":["export type ArcPayErrorType =\n | \"validation_error\"\n | \"configuration_error\"\n | \"authentication_error\"\n | \"authorization_error\"\n | \"state_error\"\n | \"rate_limit_error\"\n | \"api_error\"\n | \"network_error\"\n | \"challenge_aborted\";\n\ninterface ArcPayErrorInit {\n type: ArcPayErrorType;\n message: string;\n code?: string;\n param?: string;\n paymentId?: string;\n declineCode?: string;\n retryable: boolean;\n requestId?: string;\n}\n\nexport class ArcPayError extends Error {\n readonly type: ArcPayErrorType;\n readonly code?: string;\n readonly param?: string;\n readonly paymentId?: string;\n readonly declineCode?: string;\n readonly retryable: boolean;\n readonly requestId?: string;\n\n constructor(init: ArcPayErrorInit) {\n super(init.message);\n this.name = \"ArcPayError\";\n this.type = init.type;\n this.code = init.code;\n this.param = init.param;\n this.paymentId = init.paymentId;\n this.declineCode = init.declineCode;\n this.retryable = init.retryable;\n this.requestId = init.requestId;\n }\n}\n\nexport const isValidationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"validation_error\";\nconst isConfigurationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"configuration_error\";\nexport const isAuthenticationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authentication_error\";\nexport const isAuthorizationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authorization_error\";\nexport const isStateError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"state_error\";\nexport const isRateLimitError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"rate_limit_error\";\nexport const isApiError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"api_error\";\nexport const isNetworkError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"network_error\";\nexport const isChallengeAborted = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"challenge_aborted\";\n","import { ArcPayError } from \"./errors\";\n\nexport type Environment = \"sandbox\" | \"live\";\n\nexport const detectEnvironment = (publishableKey: string): Environment =>\n publishableKey.startsWith(\"pk_test_\") ? \"sandbox\" : \"live\";\n\nexport const validatePublishableKey = (key: unknown): asserts key is string => {\n if (typeof key !== \"string\" || key.length === 0) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message: \"Publishable key must be a non-empty string\",\n retryable: false,\n });\n }\n if (!key.startsWith(\"pk_test_\") && !key.startsWith(\"pk_live_\")) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message:\n \"Publishable key must start with pk_test_ or pk_live_. Secret keys (sk_*) cannot be used in browser.\",\n retryable: false,\n });\n }\n};\n","const BANNER_ATTR = \"data-arcpay-sandbox-banner\";\n\nexport const showSandboxBanner = (): void => {\n if (typeof document === \"undefined\") return;\n if (document.querySelector(`[${BANNER_ATTR}]`)) return;\n\n const bar = document.createElement(\"div\");\n bar.setAttribute(BANNER_ATTR, \"\");\n bar.style.cssText =\n \"position:fixed;top:0;left:0;right:0;z-index:2147483647;background:#ffd166;color:#222;font:13px/1.4 system-ui,sans-serif;padding:6px 12px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);\";\n\n const text = document.createElement(\"span\");\n text.textContent = \"ARC PAY TEST MODE — payments are simulated\";\n bar.appendChild(text);\n\n const dismiss = document.createElement(\"button\");\n dismiss.type = \"button\";\n dismiss.setAttribute(\"data-arcpay-banner-dismiss\", \"\");\n dismiss.textContent = \"×\";\n dismiss.setAttribute(\"aria-label\", \"Dismiss test mode banner\");\n dismiss.style.cssText =\n \"margin-left:12px;background:transparent;border:0;font-size:18px;cursor:pointer;color:inherit;\";\n dismiss.addEventListener(\"click\", () => bar.remove());\n bar.appendChild(dismiss);\n\n document.body.appendChild(bar);\n};\n","import { ArcPayError } from \"../core/errors\";\n\nexport type FieldType = \"cardNumber\" | \"cardExpiry\" | \"cardCvv\";\n\n// Parent → iframe\nexport type ParentToIframe =\n | { type: \"arcpay:hello\"; origin: string; publishableKey: string; channelId: string }\n | { type: \"arcpay:style\"; payload: StyleSubset }\n | { type: \"arcpay:placeholder\"; field: FieldType; placeholder: string }\n | { type: \"arcpay:focus\" }\n | { type: \"arcpay:clear\" }\n | { type: \"arcpay:tokenize\"; paymentId: string; idempotencyKey: string };\n\n// iframe → parent\nexport type IframeToParent =\n | { type: \"arcpay:ready\" }\n | { type: \"arcpay:rejected\"; reason: string }\n | {\n type: \"arcpay:change\";\n field: FieldType;\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | {\n type: \"arcpay:tokenize-result\";\n cardTokenId: string;\n cardMask: string;\n cardScheme: string;\n cardBin: string;\n expiresIn: number;\n expiresAt: string;\n }\n | { type: \"arcpay:tokenize-error\"; errorType: string; code?: string; message: string };\n\nexport interface StyleSubset {\n base: Record<string, string>;\n invalid?: Record<string, string>;\n focus?: Record<string, string>;\n complete?: Record<string, string>;\n empty?: Record<string, string>;\n}\n\ntype TokenizeErrorType = \"validation_error\" | \"configuration_error\" | \"network_error\" | \"api_error\";\n\nconst ARCPAY_TYPE_PREFIX = \"arcpay:\";\n\nconst isArcpayMessage = (data: unknown): data is { type: string } =>\n typeof data === \"object\" &&\n data !== null &&\n \"type\" in data &&\n typeof (data as { type: unknown }).type === \"string\" &&\n (data as { type: string }).type.startsWith(ARCPAY_TYPE_PREFIX);\n\nexport const postToIframe = (\n iframe: HTMLIFrameElement,\n message: ParentToIframe,\n targetOrigin: string,\n): void => {\n if (targetOrigin === \"*\") {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"wildcard_origin_forbidden\",\n message: \"postToIframe: targetOrigin cannot be '*'\",\n retryable: false,\n });\n }\n if (!iframe.contentWindow) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"iframe_not_loaded\",\n message: \"postToIframe: iframe.contentWindow is null (iframe not mounted)\",\n retryable: false,\n });\n }\n iframe.contentWindow.postMessage(message, targetOrigin);\n};\n\nexport const postToParent = (message: IframeToParent, targetOrigin: string): void => {\n if (targetOrigin === \"*\") {\n throw new Error(\"postToParent: targetOrigin cannot be '*'\");\n }\n window.parent.postMessage(message, targetOrigin);\n};\n\nexport const parseIncoming = <T extends { type: string }>(\n event: MessageEvent,\n expectedOrigin: string,\n): T | null => {\n if (event.origin !== expectedOrigin) return null;\n if (!isArcpayMessage(event.data)) return null;\n return event.data as T;\n};\n","import type { StyleSubset } from \"./postmessage\";\nimport { ArcPayError } from \"../core/errors\";\n\nexport type HostedFieldsTheme = \"none\" | \"arcpay\";\n\nexport interface HostedFieldsAppearanceVariables {\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n fontStyle?: string;\n lineHeight?: string;\n letterSpacing?: string;\n textAlign?: string;\n colorText?: string;\n colorPlaceholder?: string;\n colorDanger?: string;\n colorSuccess?: string;\n colorBackground?: string;\n caretColor?: string;\n}\n\nexport type HostedFieldsAppearanceRule = \"base\" | \"focus\" | \"invalid\" | \"complete\" | \"empty\";\n\nexport interface HostedFieldsAppearance {\n theme?: HostedFieldsTheme;\n variables?: HostedFieldsAppearanceVariables;\n rules?: Partial<Record<HostedFieldsAppearanceRule, Record<string, string>>>;\n}\n\nconst ALLOWED_PROPERTIES = new Set([\n \"--arcpay-placeholder-color\",\n \"background-color\",\n \"caret-color\",\n \"color\",\n \"font-family\",\n \"font-size\",\n \"font-style\",\n \"font-weight\",\n \"letter-spacing\",\n \"line-height\",\n \"opacity\",\n \"text-align\",\n \"text-decoration\",\n \"text-transform\",\n]);\n\nconst ARCPAY_THEME: StyleSubset = {\n base: {\n \"font-family\":\n 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n \"font-size\": \"16px\",\n \"line-height\": \"24px\",\n color: \"#111827\",\n \"--arcpay-placeholder-color\": \"#9ca3af\",\n \"caret-color\": \"#111827\",\n },\n focus: {\n color: \"#111827\",\n },\n invalid: {\n color: \"#dc2626\",\n },\n complete: {\n color: \"#111827\",\n },\n empty: {\n color: \"#111827\",\n },\n};\n\nconst mergeBlock = (\n target: Record<string, string> | undefined,\n source: Record<string, string> | undefined,\n): Record<string, string> | undefined => {\n if (!target && !source) return undefined;\n return { ...(target ?? {}), ...(source ?? {}) };\n};\n\nconst setIfPresent = (\n block: Record<string, string>,\n key: string,\n value: string | undefined,\n): void => {\n if (value !== undefined) block[key] = value;\n};\n\nconst assertKnownTheme = (theme: HostedFieldsTheme | undefined): void => {\n if (theme === undefined || theme === \"none\" || theme === \"arcpay\") return;\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_hosted_fields_theme\",\n message: `Unsupported Hosted Fields appearance theme: ${String(theme)}`,\n retryable: false,\n });\n};\n\nconst sanitizeBlock = (block: Record<string, string>): Record<string, string> => {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(block)) {\n const normalizedKey = key.toLowerCase();\n if (!ALLOWED_PROPERTIES.has(normalizedKey)) {\n continue;\n }\n out[normalizedKey] = value;\n }\n return out;\n};\n\nexport const sanitizeStyle = (style: StyleSubset): StyleSubset => {\n const result: StyleSubset = { base: sanitizeBlock(style.base) };\n if (style.invalid !== undefined) result.invalid = sanitizeBlock(style.invalid);\n if (style.focus !== undefined) result.focus = sanitizeBlock(style.focus);\n if (style.complete !== undefined) result.complete = sanitizeBlock(style.complete);\n if (style.empty !== undefined) result.empty = sanitizeBlock(style.empty);\n return result;\n};\n\nexport const buildStyleFromAppearance = (appearance?: HostedFieldsAppearance): StyleSubset => {\n assertKnownTheme(appearance?.theme);\n const themeStyle: StyleSubset = appearance?.theme === \"arcpay\" ? ARCPAY_THEME : { base: {} };\n const variableStyle: StyleSubset = { base: {} };\n const variables = appearance?.variables;\n\n if (variables) {\n setIfPresent(variableStyle.base, \"font-family\", variables.fontFamily);\n setIfPresent(variableStyle.base, \"font-size\", variables.fontSize);\n setIfPresent(variableStyle.base, \"font-weight\", variables.fontWeight);\n setIfPresent(variableStyle.base, \"font-style\", variables.fontStyle);\n setIfPresent(variableStyle.base, \"line-height\", variables.lineHeight);\n setIfPresent(variableStyle.base, \"letter-spacing\", variables.letterSpacing);\n setIfPresent(variableStyle.base, \"text-align\", variables.textAlign);\n setIfPresent(variableStyle.base, \"color\", variables.colorText);\n setIfPresent(variableStyle.base, \"--arcpay-placeholder-color\", variables.colorPlaceholder);\n setIfPresent(variableStyle.base, \"background-color\", variables.colorBackground);\n setIfPresent(variableStyle.base, \"caret-color\", variables.caretColor);\n\n if (variables.colorDanger !== undefined) {\n variableStyle.invalid = { color: variables.colorDanger };\n }\n if (variables.colorSuccess !== undefined) {\n variableStyle.complete = { color: variables.colorSuccess };\n }\n }\n\n const rules = appearance?.rules;\n const combined: StyleSubset = {\n base: {\n ...themeStyle.base,\n ...variableStyle.base,\n ...(rules?.base ?? {}),\n },\n };\n\n const focus = mergeBlock(mergeBlock(themeStyle.focus, variableStyle.focus), rules?.focus);\n const invalid = mergeBlock(mergeBlock(themeStyle.invalid, variableStyle.invalid), rules?.invalid);\n const complete = mergeBlock(\n mergeBlock(themeStyle.complete, variableStyle.complete),\n rules?.complete,\n );\n const empty = mergeBlock(mergeBlock(themeStyle.empty, variableStyle.empty), rules?.empty);\n\n if (focus !== undefined) combined.focus = focus;\n if (invalid !== undefined) combined.invalid = invalid;\n if (complete !== undefined) combined.complete = complete;\n if (empty !== undefined) combined.empty = empty;\n\n return sanitizeStyle(combined);\n};\n","import { ArcPayError } from \"../core/errors\";\nimport {\n type FieldType,\n type ParentToIframe,\n type IframeToParent,\n postToIframe,\n parseIncoming,\n} from \"./postmessage\";\nimport { buildStyleFromAppearance, type HostedFieldsAppearance } from \"./style\";\n\nexport interface ElementOptions {\n /** Iframe-safe input appearance. Container layout remains merchant-owned CSS. */\n appearance?: HostedFieldsAppearance;\n placeholder?: string;\n}\n\nexport type ElementEvent =\n | { type: \"ready\" }\n | {\n type: \"change\";\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | { type: \"error\"; reason: string };\n\ntype Listener = (event: ElementEvent) => void;\ntype ElementEventName = ElementEvent[\"type\"];\n\nconst FIELD_TITLES: Record<FieldType, string> = {\n cardNumber: \"Arc Pay card number\",\n cardExpiry: \"Arc Pay card expiration date\",\n cardCvv: \"Arc Pay card security code\",\n};\n\nexport interface ElementContext {\n iframeBase: string;\n publishableKey: string;\n channelId: string;\n}\n\nexport class Element {\n private iframe: HTMLIFrameElement | null = null;\n private readonly listeners: Record<ElementEventName, Set<Listener>> = {\n ready: new Set<Listener>(),\n change: new Set<Listener>(),\n error: new Set<Listener>(),\n };\n private status: \"pending\" | \"ready\" | \"error\" = \"pending\";\n private messageHandler: ((e: MessageEvent) => void) | null = null;\n\n constructor(\n public readonly field: FieldType,\n private readonly options: ElementOptions,\n private readonly context: ElementContext,\n ) {}\n\n mount(target: string | HTMLElement): void {\n if (this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"already_mounted\",\n message: `Element ${this.field} is already mounted`,\n retryable: false,\n });\n }\n const container = typeof target === \"string\" ? document.querySelector(target) : target;\n if (!(container instanceof HTMLElement)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"mount_target_not_found\",\n message: `mount target not found: ${String(target)}`,\n retryable: false,\n });\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = `${this.context.iframeBase}/iframe/${this.field}`;\n iframe.style.cssText = \"border:0;width:100%;height:100%;display:block;\";\n iframe.setAttribute(\"allow\", \"payment\");\n iframe.setAttribute(\"data-arcpay-element\", this.field);\n iframe.setAttribute(\"title\", FIELD_TITLES[this.field]);\n iframe.setAttribute(\"aria-label\", FIELD_TITLES[this.field]);\n container.appendChild(iframe);\n this.iframe = iframe;\n\n const expectedOrigin = new URL(this.context.iframeBase).origin;\n\n this.messageHandler = (event: MessageEvent) => {\n // C1: source guard — only accept messages from this element's own iframe.\n // Without this, any iframe at the same origin (e.g. cardExpiry, cardCvv)\n // could trigger handlers on cardNumber and vice-versa.\n if (event.source !== this.iframe?.contentWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, expectedOrigin);\n if (!data) return;\n this.handleMessage(data);\n };\n window.addEventListener(\"message\", this.messageHandler);\n\n iframe.addEventListener(\n \"load\",\n () => {\n if (!this.iframe) return;\n const hello: ParentToIframe = {\n type: \"arcpay:hello\",\n origin: window.location.origin,\n publishableKey: this.context.publishableKey,\n channelId: this.context.channelId,\n };\n postToIframe(this.iframe, hello, expectedOrigin);\n },\n { once: true },\n );\n }\n\n private handleMessage(data: IframeToParent): void {\n if (data.type === \"arcpay:ready\") {\n this.status = \"ready\";\n if (this.options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(this.options.appearance),\n });\n }\n if (this.options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: this.options.placeholder,\n });\n }\n this.emit({ type: \"ready\" });\n } else if (data.type === \"arcpay:rejected\") {\n this.status = \"error\";\n this.emit({ type: \"error\", reason: data.reason });\n } else if (data.type === \"arcpay:change\" && data.field === this.field) {\n this.emit({\n type: \"change\",\n isValid: data.isValid,\n isEmpty: data.isEmpty,\n isComplete: data.isComplete,\n brand: data.brand,\n lastFour: data.lastFour,\n });\n }\n // arcpay:tokenize-result / arcpay:tokenize-error handled by Elements factory (Task 9).\n }\n\n update(options: { appearance?: HostedFieldsAppearance; placeholder?: string }): void {\n if (options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(options.appearance),\n });\n }\n if (options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: options.placeholder,\n });\n }\n }\n\n destroy(): void {\n if (this.iframe) {\n this.iframe.remove();\n this.iframe = null;\n }\n if (this.messageHandler) {\n window.removeEventListener(\"message\", this.messageHandler);\n this.messageHandler = null;\n }\n for (const listeners of Object.values(this.listeners)) {\n listeners.clear();\n }\n this.status = \"pending\";\n }\n\n on(event: ElementEventName, callback: Listener): () => void {\n this.listeners[event].add(callback);\n return () => this.listeners[event].delete(callback);\n }\n\n focus(): void {\n this.send({ type: \"arcpay:focus\" });\n }\n\n clear(): void {\n this.send({ type: \"arcpay:clear\" });\n }\n\n isReady(): boolean {\n return this.status === \"ready\";\n }\n\n /**\n * Internal: returns the iframe's contentWindow for source-filtering in\n * Elements.doTokenize(). Returns null when the iframe is not yet mounted\n * or when jsdom has not yet populated contentWindow (test environment).\n */\n getIframeContentWindow(): Window | null {\n return this.iframe?.contentWindow ?? null;\n }\n\n /** Internal: used by Elements factory to send tokenize commands. */\n send(message: ParentToIframe): void {\n if (!this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"not_mounted\",\n message: `Element ${this.field} is not mounted`,\n retryable: false,\n });\n }\n postToIframe(this.iframe, message, new URL(this.context.iframeBase).origin);\n }\n\n private emit(event: ElementEvent): void {\n for (const listener of this.listeners[event.type]) {\n listener(event);\n }\n }\n}\n","import { ArcPayError } from \"../core/errors\";\nimport { Element, type ElementContext, type ElementOptions } from \"./element\";\nimport type { FieldType, IframeToParent } from \"./postmessage\";\nimport { parseIncoming } from \"./postmessage\";\nimport type { TokenizeResult } from \"../tokenize/tokenize\";\nimport type { HostedFieldsAppearance } from \"./style\";\n\nexport type {};\n\nexport interface ElementsOptions {\n /** Default iframe-safe input appearance applied to elements created by this factory. */\n appearance?: HostedFieldsAppearance;\n}\n\nconst DEFAULT_IFRAME_BASE = \"https://sdk.arcpay.space\";\n\nconst createChannelId = (): string => {\n if (!globalThis.crypto?.randomUUID) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"crypto_unavailable\",\n message: \"crypto.randomUUID is required for Hosted Fields\",\n retryable: false,\n });\n }\n return globalThis.crypto.randomUUID();\n};\n\nexport class Elements {\n private readonly elementMap = new Map<FieldType, Element>();\n private readonly iframeBase: string;\n private readonly publishableKey: string;\n private readonly channelId: string;\n private tokenizeInFlight = false;\n private readonly appearance?: HostedFieldsAppearance;\n\n constructor(opts: {\n publishableKey: string;\n iframeBase?: string;\n appearance?: HostedFieldsAppearance;\n }) {\n this.publishableKey = opts.publishableKey;\n this.iframeBase = opts.iframeBase ?? DEFAULT_IFRAME_BASE;\n this.channelId = createChannelId();\n this.appearance = opts.appearance;\n }\n\n create(field: FieldType, options: ElementOptions = {}): Element {\n if (this.elementMap.has(field)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"duplicate_element\",\n message: `Element for ${field} already created`,\n retryable: false,\n });\n }\n const ctx: ElementContext = {\n iframeBase: this.iframeBase,\n publishableKey: this.publishableKey,\n channelId: this.channelId,\n };\n const element = new Element(\n field,\n {\n ...options,\n appearance: options.appearance ?? this.appearance,\n },\n ctx,\n );\n this.elementMap.set(field, element);\n return element;\n }\n\n async tokenize(paymentId: string, idempotencyKey: string): Promise<TokenizeResult> {\n // C2: concurrent-call guard — only one tokenize() may be in-flight at a time.\n if (this.tokenizeInFlight) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"tokenize_in_progress\",\n message: \"A tokenize() call is already in progress for this Elements instance\",\n retryable: false,\n });\n }\n\n const cardNumber = this.elementMap.get(\"cardNumber\");\n const cardExpiry = this.elementMap.get(\"cardExpiry\");\n const cardCvv = this.elementMap.get(\"cardCvv\");\n\n if (!cardNumber || !cardExpiry || !cardCvv) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"incomplete_elements\",\n message:\n \"All three elements (cardNumber, cardExpiry, cardCvv) must be created and mounted before tokenize()\",\n retryable: false,\n });\n }\n if (!cardNumber.isReady() || !cardExpiry.isReady() || !cardCvv.isReady()) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"elements_not_ready\",\n message: \"Wait for all elements to fire 'ready' event before tokenize()\",\n retryable: false,\n });\n }\n\n this.tokenizeInFlight = true;\n try {\n return await this.doTokenize(cardNumber, paymentId, idempotencyKey);\n } finally {\n this.tokenizeInFlight = false;\n }\n }\n\n private doTokenize(\n cardNumber: Element,\n paymentId: string,\n idempotencyKey: string,\n ): Promise<TokenizeResult> {\n const iframeOrigin = new URL(this.iframeBase).origin;\n // C1: obtain reference to the cardNumber iframe's contentWindow before\n // registering the listener so we can filter by source.\n const cardIframeWindow = cardNumber.getIframeContentWindow();\n\n return new Promise<TokenizeResult>((resolve, reject) => {\n // C3: 30-second timeout — rejects and cleans up if no result arrives.\n const timer = window.setTimeout(() => {\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type: \"network_error\",\n code: \"tokenize_timeout\",\n message: \"tokenize() timed out after 30 seconds\",\n retryable: true,\n paymentId,\n }),\n );\n }, 30_000);\n\n const onMessage = (event: MessageEvent) => {\n // C1: source guard — only accept messages from the cardNumber iframe.\n if (cardIframeWindow !== null && event.source !== cardIframeWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, iframeOrigin);\n if (!data) return;\n\n if (data.type === \"arcpay:tokenize-result\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n resolve({\n cardTokenId: data.cardTokenId,\n cardMask: data.cardMask,\n cardScheme: data.cardScheme,\n cardBin: data.cardBin,\n expiresIn: data.expiresIn,\n expiresAt: data.expiresAt,\n });\n } else if (data.type === \"arcpay:tokenize-error\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type:\n data.errorType === \"validation_error\" ||\n data.errorType === \"configuration_error\" ||\n data.errorType === \"network_error\" ||\n data.errorType === \"api_error\"\n ? data.errorType\n : \"api_error\",\n code: data.code,\n message: data.message,\n retryable: false,\n paymentId,\n }),\n );\n }\n };\n\n window.addEventListener(\"message\", onMessage);\n cardNumber.send({ type: \"arcpay:tokenize\", paymentId, idempotencyKey });\n });\n }\n\n destroy(): void {\n for (const el of this.elementMap.values()) {\n el.destroy();\n }\n this.elementMap.clear();\n }\n}\n","import {\n detectEnvironment,\n type Environment,\n validatePublishableKey as _validatePublishableKey,\n} from \"./env\";\nimport { showSandboxBanner } from \"./sandbox-banner\";\nimport { Elements, type ElementsOptions } from \"../elements/elements\";\n\nconst validatePublishableKey: (key: unknown) => asserts key is string = _validatePublishableKey;\n\nexport interface ArcPayLoadOptions {\n readonly _reserved?: never;\n}\n\nexport interface ArcPayInstance {\n readonly publishableKey: string;\n readonly environment: Environment;\n elements: (opts?: ElementsOptions) => Elements;\n}\n\nconst cache = new Map<string, Promise<ArcPayInstance>>();\n\nconst buildInstance = (publishableKey: string): ArcPayInstance => {\n if (detectEnvironment(publishableKey) === \"sandbox\") {\n showSandboxBanner();\n }\n return {\n publishableKey,\n environment: detectEnvironment(publishableKey),\n elements: (opts = {}) => new Elements({ publishableKey, ...opts }),\n };\n};\n\nfunction load(publishableKey: string): Promise<ArcPayInstance> {\n try {\n validatePublishableKey(publishableKey);\n } catch (err) {\n return Promise.reject(err);\n }\n const key = publishableKey;\n const existing = cache.get(key);\n if (existing) return existing;\n const promise = Promise.resolve(buildInstance(publishableKey));\n cache.set(key, promise);\n return promise;\n}\n\nconst resetForTests = (): void => {\n cache.clear();\n};\n\nexport const ArcPay = {\n load,\n __resetForTests: resetForTests,\n};\n","import { ArcPay, type ArcPayInstance } from \"../index\";\nimport * as React from \"react\";\n\nexport type ArcPayState =\n | { status: \"loading\"; instance: null; error: null }\n | { status: \"ready\"; instance: ArcPayInstance; error: null }\n | { status: \"error\"; instance: null; error: Error };\n\nconst Ctx = React.createContext<ArcPayState | null>(null);\n\nexport interface ArcPayProviderProps {\n publishableKey: string;\n children: React.ReactNode;\n}\n\nexport const ArcPayProvider: React.FC<ArcPayProviderProps> = ({ publishableKey, children }) => {\n const [state, setState] = React.useState<ArcPayState>({\n status: \"loading\",\n instance: null,\n error: null,\n });\n\n React.useEffect(() => {\n let canceled = false;\n ArcPay.load(publishableKey)\n .then((instance) => {\n if (!canceled) setState({ status: \"ready\", instance, error: null });\n })\n .catch((error: unknown) => {\n if (!canceled)\n setState({\n status: \"error\",\n instance: null,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n });\n return () => {\n canceled = true;\n };\n }, [publishableKey]);\n\n return <Ctx.Provider value={state}>{children}</Ctx.Provider>;\n};\n\nexport const ArcPayContext = Ctx;\n","import * as React from \"react\";\nimport { ArcPayContext, type ArcPayState } from \"./provider\";\n\nexport const useArcPay = (): ArcPayState => {\n const ctx = React.useContext(ArcPayContext);\n if (!ctx) throw new Error(\"useArcPay must be called within an ArcPayProvider\");\n return ctx;\n};\n","export { ArcPayProvider, ArcPayContext } from \"./provider\";\nexport type { ArcPayProviderProps, ArcPayState } from \"./provider\";\nexport { useArcPay } from \"./use-arcpay\";\nexport const REACT_WRAPPER_VERSION = \"0.1.26\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/errors.ts","../../src/core/env.ts","../../src/core/sandbox-banner.ts","../../src/elements/postmessage.ts","../../src/elements/style.ts","../../src/elements/element.ts","../../src/elements/elements.ts","../../src/core/arcpay.ts","../../src/react/provider.tsx","../../src/react/use-arcpay.ts","../../src/react/index.ts"],"names":["validatePublishableKey","React","React2"],"mappings":"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","file":"index.cjs","sourcesContent":["export type ArcPayErrorType =\n | \"validation_error\"\n | \"configuration_error\"\n | \"authentication_error\"\n | \"authorization_error\"\n | \"state_error\"\n | \"rate_limit_error\"\n | \"api_error\"\n | \"network_error\"\n | \"challenge_aborted\";\n\ninterface ArcPayErrorInit {\n type: ArcPayErrorType;\n message: string;\n code?: string;\n param?: string;\n paymentId?: string;\n declineCode?: string;\n retryable: boolean;\n requestId?: string;\n}\n\nexport class ArcPayError extends Error {\n readonly type: ArcPayErrorType;\n readonly code?: string;\n readonly param?: string;\n readonly paymentId?: string;\n readonly declineCode?: string;\n readonly retryable: boolean;\n readonly requestId?: string;\n\n constructor(init: ArcPayErrorInit) {\n super(init.message);\n this.name = \"ArcPayError\";\n this.type = init.type;\n this.code = init.code;\n this.param = init.param;\n this.paymentId = init.paymentId;\n this.declineCode = init.declineCode;\n this.retryable = init.retryable;\n this.requestId = init.requestId;\n }\n}\n\nexport const isValidationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"validation_error\";\nconst isConfigurationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"configuration_error\";\nexport const isAuthenticationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authentication_error\";\nexport const isAuthorizationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authorization_error\";\nexport const isStateError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"state_error\";\nexport const isRateLimitError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"rate_limit_error\";\nexport const isApiError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"api_error\";\nexport const isNetworkError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"network_error\";\nexport const isChallengeAborted = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"challenge_aborted\";\n","import { ArcPayError } from \"./errors\";\n\nexport type Environment = \"sandbox\" | \"live\";\n\nexport const detectEnvironment = (publishableKey: string): Environment =>\n publishableKey.startsWith(\"pk_test_\") ? \"sandbox\" : \"live\";\n\nexport const validatePublishableKey = (key: unknown): asserts key is string => {\n if (typeof key !== \"string\" || key.length === 0) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message: \"Publishable key must be a non-empty string\",\n retryable: false,\n });\n }\n if (!key.startsWith(\"pk_test_\") && !key.startsWith(\"pk_live_\")) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message:\n \"Publishable key must start with pk_test_ or pk_live_. Secret keys (sk_*) cannot be used in browser.\",\n retryable: false,\n });\n }\n};\n","const BANNER_ATTR = \"data-arcpay-sandbox-banner\";\n\nexport const showSandboxBanner = (): void => {\n if (typeof document === \"undefined\") return;\n if (document.querySelector(`[${BANNER_ATTR}]`)) return;\n\n const bar = document.createElement(\"div\");\n bar.setAttribute(BANNER_ATTR, \"\");\n bar.style.cssText =\n \"position:fixed;top:0;left:0;right:0;z-index:2147483647;background:#ffd166;color:#222;font:13px/1.4 system-ui,sans-serif;padding:6px 12px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);\";\n\n const text = document.createElement(\"span\");\n text.textContent = \"ARC PAY TEST MODE — payments are simulated\";\n bar.appendChild(text);\n\n const dismiss = document.createElement(\"button\");\n dismiss.type = \"button\";\n dismiss.setAttribute(\"data-arcpay-banner-dismiss\", \"\");\n dismiss.textContent = \"×\";\n dismiss.setAttribute(\"aria-label\", \"Dismiss test mode banner\");\n dismiss.style.cssText =\n \"margin-left:12px;background:transparent;border:0;font-size:18px;cursor:pointer;color:inherit;\";\n dismiss.addEventListener(\"click\", () => bar.remove());\n bar.appendChild(dismiss);\n\n document.body.appendChild(bar);\n};\n","import { ArcPayError } from \"../core/errors\";\n\nexport type FieldType = \"cardNumber\" | \"cardExpiry\" | \"cardCvv\";\n\n// Parent → iframe\nexport type ParentToIframe =\n | { type: \"arcpay:hello\"; origin: string; publishableKey: string; channelId: string }\n | { type: \"arcpay:style\"; payload: StyleSubset }\n | { type: \"arcpay:placeholder\"; field: FieldType; placeholder: string }\n | { type: \"arcpay:focus\" }\n | { type: \"arcpay:clear\" }\n | { type: \"arcpay:tokenize\"; paymentId: string; idempotencyKey: string };\n\n// iframe → parent\nexport type IframeToParent =\n | { type: \"arcpay:ready\" }\n | { type: \"arcpay:rejected\"; reason: string }\n | {\n type: \"arcpay:change\";\n field: FieldType;\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | {\n type: \"arcpay:tokenize-result\";\n cardTokenId: string;\n cardMask: string;\n cardScheme: string;\n cardBin: string;\n expiresIn: number;\n expiresAt: string;\n }\n | { type: \"arcpay:tokenize-error\"; errorType: string; code?: string; message: string };\n\nexport interface StyleSubset {\n base: Record<string, string>;\n invalid?: Record<string, string>;\n focus?: Record<string, string>;\n complete?: Record<string, string>;\n empty?: Record<string, string>;\n}\n\ntype TokenizeErrorType = \"validation_error\" | \"configuration_error\" | \"network_error\" | \"api_error\";\n\nconst ARCPAY_TYPE_PREFIX = \"arcpay:\";\n\nconst isArcpayMessage = (data: unknown): data is { type: string } =>\n typeof data === \"object\" &&\n data !== null &&\n \"type\" in data &&\n typeof (data as { type: unknown }).type === \"string\" &&\n (data as { type: string }).type.startsWith(ARCPAY_TYPE_PREFIX);\n\nexport const postToIframe = (\n iframe: HTMLIFrameElement,\n message: ParentToIframe,\n targetOrigin: string,\n): void => {\n if (targetOrigin === \"*\") {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"wildcard_origin_forbidden\",\n message: \"postToIframe: targetOrigin cannot be '*'\",\n retryable: false,\n });\n }\n if (!iframe.contentWindow) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"iframe_not_loaded\",\n message: \"postToIframe: iframe.contentWindow is null (iframe not mounted)\",\n retryable: false,\n });\n }\n iframe.contentWindow.postMessage(message, targetOrigin);\n};\n\nexport const postToParent = (message: IframeToParent, targetOrigin: string): void => {\n if (targetOrigin === \"*\") {\n throw new Error(\"postToParent: targetOrigin cannot be '*'\");\n }\n window.parent.postMessage(message, targetOrigin);\n};\n\nexport const parseIncoming = <T extends { type: string }>(\n event: MessageEvent,\n expectedOrigin: string,\n): T | null => {\n if (event.origin !== expectedOrigin) return null;\n if (!isArcpayMessage(event.data)) return null;\n return event.data as T;\n};\n","import type { StyleSubset } from \"./postmessage\";\nimport { ArcPayError } from \"../core/errors\";\n\nexport type HostedFieldsTheme = \"none\" | \"arcpay\";\n\nexport interface HostedFieldsAppearanceVariables {\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n fontStyle?: string;\n lineHeight?: string;\n letterSpacing?: string;\n textAlign?: string;\n colorText?: string;\n colorPlaceholder?: string;\n colorDanger?: string;\n colorSuccess?: string;\n colorBackground?: string;\n caretColor?: string;\n}\n\nexport type HostedFieldsAppearanceRule = \"base\" | \"focus\" | \"invalid\" | \"complete\" | \"empty\";\n\nexport interface HostedFieldsAppearance {\n theme?: HostedFieldsTheme;\n variables?: HostedFieldsAppearanceVariables;\n rules?: Partial<Record<HostedFieldsAppearanceRule, Record<string, string>>>;\n}\n\nconst ALLOWED_PROPERTIES = new Set([\n \"--arcpay-placeholder-color\",\n \"background-color\",\n \"caret-color\",\n \"color\",\n \"font-family\",\n \"font-size\",\n \"font-style\",\n \"font-weight\",\n \"letter-spacing\",\n \"line-height\",\n \"opacity\",\n \"text-align\",\n \"text-decoration\",\n \"text-transform\",\n]);\n\nconst ARCPAY_THEME: StyleSubset = {\n base: {\n \"font-family\":\n 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n \"font-size\": \"16px\",\n \"line-height\": \"24px\",\n color: \"#111827\",\n \"--arcpay-placeholder-color\": \"#9ca3af\",\n \"caret-color\": \"#111827\",\n },\n focus: {\n color: \"#111827\",\n },\n invalid: {\n color: \"#dc2626\",\n },\n complete: {\n color: \"#111827\",\n },\n empty: {\n color: \"#111827\",\n },\n};\n\nconst mergeBlock = (\n target: Record<string, string> | undefined,\n source: Record<string, string> | undefined,\n): Record<string, string> | undefined => {\n if (!target && !source) return undefined;\n return { ...(target ?? {}), ...(source ?? {}) };\n};\n\nconst setIfPresent = (\n block: Record<string, string>,\n key: string,\n value: string | undefined,\n): void => {\n if (value !== undefined) block[key] = value;\n};\n\nconst assertKnownTheme = (theme: HostedFieldsTheme | undefined): void => {\n if (theme === undefined || theme === \"none\" || theme === \"arcpay\") return;\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_hosted_fields_theme\",\n message: `Unsupported Hosted Fields appearance theme: ${String(theme)}`,\n retryable: false,\n });\n};\n\nconst sanitizeBlock = (block: Record<string, string>): Record<string, string> => {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(block)) {\n const normalizedKey = key.toLowerCase();\n if (!ALLOWED_PROPERTIES.has(normalizedKey)) {\n continue;\n }\n out[normalizedKey] = value;\n }\n return out;\n};\n\nexport const sanitizeStyle = (style: StyleSubset): StyleSubset => {\n const result: StyleSubset = { base: sanitizeBlock(style.base) };\n if (style.invalid !== undefined) result.invalid = sanitizeBlock(style.invalid);\n if (style.focus !== undefined) result.focus = sanitizeBlock(style.focus);\n if (style.complete !== undefined) result.complete = sanitizeBlock(style.complete);\n if (style.empty !== undefined) result.empty = sanitizeBlock(style.empty);\n return result;\n};\n\nexport const buildStyleFromAppearance = (appearance?: HostedFieldsAppearance): StyleSubset => {\n assertKnownTheme(appearance?.theme);\n const themeStyle: StyleSubset = appearance?.theme === \"arcpay\" ? ARCPAY_THEME : { base: {} };\n const variableStyle: StyleSubset = { base: {} };\n const variables = appearance?.variables;\n\n if (variables) {\n setIfPresent(variableStyle.base, \"font-family\", variables.fontFamily);\n setIfPresent(variableStyle.base, \"font-size\", variables.fontSize);\n setIfPresent(variableStyle.base, \"font-weight\", variables.fontWeight);\n setIfPresent(variableStyle.base, \"font-style\", variables.fontStyle);\n setIfPresent(variableStyle.base, \"line-height\", variables.lineHeight);\n setIfPresent(variableStyle.base, \"letter-spacing\", variables.letterSpacing);\n setIfPresent(variableStyle.base, \"text-align\", variables.textAlign);\n setIfPresent(variableStyle.base, \"color\", variables.colorText);\n setIfPresent(variableStyle.base, \"--arcpay-placeholder-color\", variables.colorPlaceholder);\n setIfPresent(variableStyle.base, \"background-color\", variables.colorBackground);\n setIfPresent(variableStyle.base, \"caret-color\", variables.caretColor);\n\n if (variables.colorText !== undefined && appearance?.theme === \"arcpay\") {\n variableStyle.focus = { color: variables.colorText };\n variableStyle.invalid = { color: variables.colorText };\n variableStyle.complete = { color: variables.colorText };\n variableStyle.empty = { color: variables.colorText };\n }\n if (variables.colorDanger !== undefined) {\n variableStyle.invalid = { color: variables.colorDanger };\n }\n if (variables.colorSuccess !== undefined) {\n variableStyle.complete = { color: variables.colorSuccess };\n }\n }\n\n const rules = appearance?.rules;\n const combined: StyleSubset = {\n base: {\n ...themeStyle.base,\n ...variableStyle.base,\n ...(rules?.base ?? {}),\n },\n };\n\n const focus = mergeBlock(mergeBlock(themeStyle.focus, variableStyle.focus), rules?.focus);\n const invalid = mergeBlock(mergeBlock(themeStyle.invalid, variableStyle.invalid), rules?.invalid);\n const complete = mergeBlock(\n mergeBlock(themeStyle.complete, variableStyle.complete),\n rules?.complete,\n );\n const empty = mergeBlock(mergeBlock(themeStyle.empty, variableStyle.empty), rules?.empty);\n\n if (focus !== undefined) combined.focus = focus;\n if (invalid !== undefined) combined.invalid = invalid;\n if (complete !== undefined) combined.complete = complete;\n if (empty !== undefined) combined.empty = empty;\n\n return sanitizeStyle(combined);\n};\n","import { ArcPayError } from \"../core/errors\";\nimport {\n type FieldType,\n type ParentToIframe,\n type IframeToParent,\n postToIframe,\n parseIncoming,\n} from \"./postmessage\";\nimport { buildStyleFromAppearance, type HostedFieldsAppearance } from \"./style\";\n\nexport interface ElementOptions {\n /** Iframe-safe input appearance. Container layout remains merchant-owned CSS. */\n appearance?: HostedFieldsAppearance;\n placeholder?: string;\n}\n\nexport type ElementEvent =\n | { type: \"ready\" }\n | {\n type: \"change\";\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | { type: \"error\"; reason: string };\n\ntype Listener = (event: ElementEvent) => void;\ntype ElementEventName = ElementEvent[\"type\"];\n\nconst FIELD_TITLES: Record<FieldType, string> = {\n cardNumber: \"Arc Pay card number\",\n cardExpiry: \"Arc Pay card expiration date\",\n cardCvv: \"Arc Pay card security code\",\n};\n\nexport interface ElementContext {\n iframeBase: string;\n publishableKey: string;\n channelId: string;\n}\n\nexport class Element {\n private iframe: HTMLIFrameElement | null = null;\n private readonly listeners: Record<ElementEventName, Set<Listener>> = {\n ready: new Set<Listener>(),\n change: new Set<Listener>(),\n error: new Set<Listener>(),\n };\n private status: \"pending\" | \"ready\" | \"error\" = \"pending\";\n private messageHandler: ((e: MessageEvent) => void) | null = null;\n\n constructor(\n public readonly field: FieldType,\n private readonly options: ElementOptions,\n private readonly context: ElementContext,\n ) {}\n\n mount(target: string | HTMLElement): void {\n if (this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"already_mounted\",\n message: `Element ${this.field} is already mounted`,\n retryable: false,\n });\n }\n const container = typeof target === \"string\" ? document.querySelector(target) : target;\n if (!(container instanceof HTMLElement)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"mount_target_not_found\",\n message: `mount target not found: ${String(target)}`,\n retryable: false,\n });\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = `${this.context.iframeBase}/iframe/${this.field}`;\n iframe.style.cssText = \"border:0;width:100%;height:100%;display:block;\";\n iframe.setAttribute(\"allow\", \"payment\");\n iframe.setAttribute(\"data-arcpay-element\", this.field);\n iframe.setAttribute(\"title\", FIELD_TITLES[this.field]);\n iframe.setAttribute(\"aria-label\", FIELD_TITLES[this.field]);\n container.appendChild(iframe);\n this.iframe = iframe;\n\n const expectedOrigin = new URL(this.context.iframeBase).origin;\n\n this.messageHandler = (event: MessageEvent) => {\n // C1: source guard — only accept messages from this element's own iframe.\n // Without this, any iframe at the same origin (e.g. cardExpiry, cardCvv)\n // could trigger handlers on cardNumber and vice-versa.\n if (event.source !== this.iframe?.contentWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, expectedOrigin);\n if (!data) return;\n this.handleMessage(data);\n };\n window.addEventListener(\"message\", this.messageHandler);\n\n iframe.addEventListener(\n \"load\",\n () => {\n if (!this.iframe) return;\n const hello: ParentToIframe = {\n type: \"arcpay:hello\",\n origin: window.location.origin,\n publishableKey: this.context.publishableKey,\n channelId: this.context.channelId,\n };\n postToIframe(this.iframe, hello, expectedOrigin);\n },\n { once: true },\n );\n }\n\n private handleMessage(data: IframeToParent): void {\n if (data.type === \"arcpay:ready\") {\n this.status = \"ready\";\n if (this.options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(this.options.appearance),\n });\n }\n if (this.options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: this.options.placeholder,\n });\n }\n this.emit({ type: \"ready\" });\n } else if (data.type === \"arcpay:rejected\") {\n this.status = \"error\";\n this.emit({ type: \"error\", reason: data.reason });\n } else if (data.type === \"arcpay:change\" && data.field === this.field) {\n this.emit({\n type: \"change\",\n isValid: data.isValid,\n isEmpty: data.isEmpty,\n isComplete: data.isComplete,\n brand: data.brand,\n lastFour: data.lastFour,\n });\n }\n // arcpay:tokenize-result / arcpay:tokenize-error handled by Elements factory (Task 9).\n }\n\n update(options: { appearance?: HostedFieldsAppearance; placeholder?: string }): void {\n if (options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(options.appearance),\n });\n }\n if (options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: options.placeholder,\n });\n }\n }\n\n destroy(): void {\n if (this.iframe) {\n this.iframe.remove();\n this.iframe = null;\n }\n if (this.messageHandler) {\n window.removeEventListener(\"message\", this.messageHandler);\n this.messageHandler = null;\n }\n for (const listeners of Object.values(this.listeners)) {\n listeners.clear();\n }\n this.status = \"pending\";\n }\n\n on(event: ElementEventName, callback: Listener): () => void {\n this.listeners[event].add(callback);\n return () => this.listeners[event].delete(callback);\n }\n\n focus(): void {\n this.send({ type: \"arcpay:focus\" });\n }\n\n clear(): void {\n this.send({ type: \"arcpay:clear\" });\n }\n\n isReady(): boolean {\n return this.status === \"ready\";\n }\n\n /**\n * Internal: returns the iframe's contentWindow for source-filtering in\n * Elements.doTokenize(). Returns null when the iframe is not yet mounted\n * or when jsdom has not yet populated contentWindow (test environment).\n */\n getIframeContentWindow(): Window | null {\n return this.iframe?.contentWindow ?? null;\n }\n\n /** Internal: used by Elements factory to send tokenize commands. */\n send(message: ParentToIframe): void {\n if (!this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"not_mounted\",\n message: `Element ${this.field} is not mounted`,\n retryable: false,\n });\n }\n postToIframe(this.iframe, message, new URL(this.context.iframeBase).origin);\n }\n\n private emit(event: ElementEvent): void {\n for (const listener of this.listeners[event.type]) {\n listener(event);\n }\n }\n}\n","import { ArcPayError } from \"../core/errors\";\nimport { Element, type ElementContext, type ElementOptions } from \"./element\";\nimport type { FieldType, IframeToParent } from \"./postmessage\";\nimport { parseIncoming } from \"./postmessage\";\nimport type { TokenizeResult } from \"../tokenize/tokenize\";\nimport type { HostedFieldsAppearance } from \"./style\";\n\nexport type {};\n\nexport interface ElementsOptions {\n /** Default iframe-safe input appearance applied to elements created by this factory. */\n appearance?: HostedFieldsAppearance;\n}\n\nconst DEFAULT_IFRAME_BASE = \"https://sdk.arcpay.space\";\n\nconst createChannelId = (): string => {\n if (!globalThis.crypto?.randomUUID) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"crypto_unavailable\",\n message: \"crypto.randomUUID is required for Hosted Fields\",\n retryable: false,\n });\n }\n return globalThis.crypto.randomUUID();\n};\n\nexport class Elements {\n private readonly elementMap = new Map<FieldType, Element>();\n private readonly iframeBase: string;\n private readonly publishableKey: string;\n private readonly channelId: string;\n private tokenizeInFlight = false;\n private readonly appearance?: HostedFieldsAppearance;\n\n constructor(opts: {\n publishableKey: string;\n iframeBase?: string;\n appearance?: HostedFieldsAppearance;\n }) {\n this.publishableKey = opts.publishableKey;\n this.iframeBase = opts.iframeBase ?? DEFAULT_IFRAME_BASE;\n this.channelId = createChannelId();\n this.appearance = opts.appearance;\n }\n\n create(field: FieldType, options: ElementOptions = {}): Element {\n if (this.elementMap.has(field)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"duplicate_element\",\n message: `Element for ${field} already created`,\n retryable: false,\n });\n }\n const ctx: ElementContext = {\n iframeBase: this.iframeBase,\n publishableKey: this.publishableKey,\n channelId: this.channelId,\n };\n const element = new Element(\n field,\n {\n ...options,\n appearance: options.appearance ?? this.appearance,\n },\n ctx,\n );\n this.elementMap.set(field, element);\n return element;\n }\n\n async tokenize(paymentId: string, idempotencyKey: string): Promise<TokenizeResult> {\n // C2: concurrent-call guard — only one tokenize() may be in-flight at a time.\n if (this.tokenizeInFlight) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"tokenize_in_progress\",\n message: \"A tokenize() call is already in progress for this Elements instance\",\n retryable: false,\n });\n }\n\n const cardNumber = this.elementMap.get(\"cardNumber\");\n const cardExpiry = this.elementMap.get(\"cardExpiry\");\n const cardCvv = this.elementMap.get(\"cardCvv\");\n\n if (!cardNumber || !cardExpiry || !cardCvv) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"incomplete_elements\",\n message:\n \"All three elements (cardNumber, cardExpiry, cardCvv) must be created and mounted before tokenize()\",\n retryable: false,\n });\n }\n if (!cardNumber.isReady() || !cardExpiry.isReady() || !cardCvv.isReady()) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"elements_not_ready\",\n message: \"Wait for all elements to fire 'ready' event before tokenize()\",\n retryable: false,\n });\n }\n\n this.tokenizeInFlight = true;\n try {\n return await this.doTokenize(cardNumber, paymentId, idempotencyKey);\n } finally {\n this.tokenizeInFlight = false;\n }\n }\n\n private doTokenize(\n cardNumber: Element,\n paymentId: string,\n idempotencyKey: string,\n ): Promise<TokenizeResult> {\n const iframeOrigin = new URL(this.iframeBase).origin;\n // C1: obtain reference to the cardNumber iframe's contentWindow before\n // registering the listener so we can filter by source.\n const cardIframeWindow = cardNumber.getIframeContentWindow();\n\n return new Promise<TokenizeResult>((resolve, reject) => {\n // C3: 30-second timeout — rejects and cleans up if no result arrives.\n const timer = window.setTimeout(() => {\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type: \"network_error\",\n code: \"tokenize_timeout\",\n message: \"tokenize() timed out after 30 seconds\",\n retryable: true,\n paymentId,\n }),\n );\n }, 30_000);\n\n const onMessage = (event: MessageEvent) => {\n // C1: source guard — only accept messages from the cardNumber iframe.\n if (cardIframeWindow !== null && event.source !== cardIframeWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, iframeOrigin);\n if (!data) return;\n\n if (data.type === \"arcpay:tokenize-result\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n resolve({\n cardTokenId: data.cardTokenId,\n cardMask: data.cardMask,\n cardScheme: data.cardScheme,\n cardBin: data.cardBin,\n expiresIn: data.expiresIn,\n expiresAt: data.expiresAt,\n });\n } else if (data.type === \"arcpay:tokenize-error\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type:\n data.errorType === \"validation_error\" ||\n data.errorType === \"configuration_error\" ||\n data.errorType === \"network_error\" ||\n data.errorType === \"api_error\"\n ? data.errorType\n : \"api_error\",\n code: data.code,\n message: data.message,\n retryable: false,\n paymentId,\n }),\n );\n }\n };\n\n window.addEventListener(\"message\", onMessage);\n cardNumber.send({ type: \"arcpay:tokenize\", paymentId, idempotencyKey });\n });\n }\n\n destroy(): void {\n for (const el of this.elementMap.values()) {\n el.destroy();\n }\n this.elementMap.clear();\n }\n}\n","import {\n detectEnvironment,\n type Environment,\n validatePublishableKey as _validatePublishableKey,\n} from \"./env\";\nimport { showSandboxBanner } from \"./sandbox-banner\";\nimport { Elements, type ElementsOptions } from \"../elements/elements\";\n\nconst validatePublishableKey: (key: unknown) => asserts key is string = _validatePublishableKey;\n\nexport interface ArcPayLoadOptions {\n readonly _reserved?: never;\n}\n\nexport interface ArcPayInstance {\n readonly publishableKey: string;\n readonly environment: Environment;\n elements: (opts?: ElementsOptions) => Elements;\n}\n\nconst cache = new Map<string, Promise<ArcPayInstance>>();\n\nconst buildInstance = (publishableKey: string): ArcPayInstance => {\n if (detectEnvironment(publishableKey) === \"sandbox\") {\n showSandboxBanner();\n }\n return {\n publishableKey,\n environment: detectEnvironment(publishableKey),\n elements: (opts = {}) => new Elements({ publishableKey, ...opts }),\n };\n};\n\nfunction load(publishableKey: string): Promise<ArcPayInstance> {\n try {\n validatePublishableKey(publishableKey);\n } catch (err) {\n return Promise.reject(err);\n }\n const key = publishableKey;\n const existing = cache.get(key);\n if (existing) return existing;\n const promise = Promise.resolve(buildInstance(publishableKey));\n cache.set(key, promise);\n return promise;\n}\n\nconst resetForTests = (): void => {\n cache.clear();\n};\n\nexport const ArcPay = {\n load,\n __resetForTests: resetForTests,\n};\n","import { ArcPay, type ArcPayInstance } from \"../index\";\nimport * as React from \"react\";\n\nexport type ArcPayState =\n | { status: \"loading\"; instance: null; error: null }\n | { status: \"ready\"; instance: ArcPayInstance; error: null }\n | { status: \"error\"; instance: null; error: Error };\n\nconst Ctx = React.createContext<ArcPayState | null>(null);\n\nexport interface ArcPayProviderProps {\n publishableKey: string;\n children: React.ReactNode;\n}\n\nexport const ArcPayProvider: React.FC<ArcPayProviderProps> = ({ publishableKey, children }) => {\n const [state, setState] = React.useState<ArcPayState>({\n status: \"loading\",\n instance: null,\n error: null,\n });\n\n React.useEffect(() => {\n let canceled = false;\n ArcPay.load(publishableKey)\n .then((instance) => {\n if (!canceled) setState({ status: \"ready\", instance, error: null });\n })\n .catch((error: unknown) => {\n if (!canceled)\n setState({\n status: \"error\",\n instance: null,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n });\n return () => {\n canceled = true;\n };\n }, [publishableKey]);\n\n return <Ctx.Provider value={state}>{children}</Ctx.Provider>;\n};\n\nexport const ArcPayContext = Ctx;\n","import * as React from \"react\";\nimport { ArcPayContext, type ArcPayState } from \"./provider\";\n\nexport const useArcPay = (): ArcPayState => {\n const ctx = React.useContext(ArcPayContext);\n if (!ctx) throw new Error(\"useArcPay must be called within an ArcPayProvider\");\n return ctx;\n};\n","export { ArcPayProvider, ArcPayContext } from \"./provider\";\nexport type { ArcPayProviderProps, ArcPayState } from \"./provider\";\nexport { useArcPay } from \"./use-arcpay\";\nexport const REACT_WRAPPER_VERSION = \"0.1.27\";\n"]}
|
package/dist/react/index.d.cts
CHANGED
|
@@ -23,6 +23,6 @@ declare const ArcPayContext: React.Context<ArcPayState | null>;
|
|
|
23
23
|
|
|
24
24
|
declare const useArcPay: () => ArcPayState;
|
|
25
25
|
|
|
26
|
-
declare const REACT_WRAPPER_VERSION = "0.1.
|
|
26
|
+
declare const REACT_WRAPPER_VERSION = "0.1.27";
|
|
27
27
|
|
|
28
28
|
export { ArcPayContext, ArcPayProvider, type ArcPayProviderProps, type ArcPayState, REACT_WRAPPER_VERSION, useArcPay };
|
package/dist/react/index.d.ts
CHANGED
|
@@ -23,6 +23,6 @@ declare const ArcPayContext: React.Context<ArcPayState | null>;
|
|
|
23
23
|
|
|
24
24
|
declare const useArcPay: () => ArcPayState;
|
|
25
25
|
|
|
26
|
-
declare const REACT_WRAPPER_VERSION = "0.1.
|
|
26
|
+
declare const REACT_WRAPPER_VERSION = "0.1.27";
|
|
27
27
|
|
|
28
28
|
export { ArcPayContext, ArcPayProvider, type ArcPayProviderProps, type ArcPayState, REACT_WRAPPER_VERSION, useArcPay };
|
package/dist/react/index.mjs
CHANGED
|
@@ -179,6 +179,12 @@ var buildStyleFromAppearance = (appearance) => {
|
|
|
179
179
|
setIfPresent(variableStyle.base, "--arcpay-placeholder-color", variables.colorPlaceholder);
|
|
180
180
|
setIfPresent(variableStyle.base, "background-color", variables.colorBackground);
|
|
181
181
|
setIfPresent(variableStyle.base, "caret-color", variables.caretColor);
|
|
182
|
+
if (variables.colorText !== void 0 && (appearance == null ? void 0 : appearance.theme) === "arcpay") {
|
|
183
|
+
variableStyle.focus = { color: variables.colorText };
|
|
184
|
+
variableStyle.invalid = { color: variables.colorText };
|
|
185
|
+
variableStyle.complete = { color: variables.colorText };
|
|
186
|
+
variableStyle.empty = { color: variables.colorText };
|
|
187
|
+
}
|
|
182
188
|
if (variables.colorDanger !== void 0) {
|
|
183
189
|
variableStyle.invalid = { color: variables.colorDanger };
|
|
184
190
|
}
|
|
@@ -588,7 +594,7 @@ var useArcPay = () => {
|
|
|
588
594
|
};
|
|
589
595
|
|
|
590
596
|
// src/react/index.ts
|
|
591
|
-
var REACT_WRAPPER_VERSION = "0.1.
|
|
597
|
+
var REACT_WRAPPER_VERSION = "0.1.27";
|
|
592
598
|
|
|
593
599
|
export { ArcPayContext, ArcPayProvider, REACT_WRAPPER_VERSION, useArcPay };
|
|
594
600
|
//# sourceMappingURL=index.mjs.map
|
package/dist/react/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/errors.ts","../../src/core/env.ts","../../src/core/sandbox-banner.ts","../../src/elements/postmessage.ts","../../src/elements/style.ts","../../src/elements/element.ts","../../src/elements/elements.ts","../../src/core/arcpay.ts","../../src/react/provider.tsx","../../src/react/use-arcpay.ts","../../src/react/index.ts"],"names":["validatePublishableKey","React2"],"mappings":"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","file":"index.mjs","sourcesContent":["export type ArcPayErrorType =\n | \"validation_error\"\n | \"configuration_error\"\n | \"authentication_error\"\n | \"authorization_error\"\n | \"state_error\"\n | \"rate_limit_error\"\n | \"api_error\"\n | \"network_error\"\n | \"challenge_aborted\";\n\ninterface ArcPayErrorInit {\n type: ArcPayErrorType;\n message: string;\n code?: string;\n param?: string;\n paymentId?: string;\n declineCode?: string;\n retryable: boolean;\n requestId?: string;\n}\n\nexport class ArcPayError extends Error {\n readonly type: ArcPayErrorType;\n readonly code?: string;\n readonly param?: string;\n readonly paymentId?: string;\n readonly declineCode?: string;\n readonly retryable: boolean;\n readonly requestId?: string;\n\n constructor(init: ArcPayErrorInit) {\n super(init.message);\n this.name = \"ArcPayError\";\n this.type = init.type;\n this.code = init.code;\n this.param = init.param;\n this.paymentId = init.paymentId;\n this.declineCode = init.declineCode;\n this.retryable = init.retryable;\n this.requestId = init.requestId;\n }\n}\n\nexport const isValidationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"validation_error\";\nconst isConfigurationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"configuration_error\";\nexport const isAuthenticationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authentication_error\";\nexport const isAuthorizationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authorization_error\";\nexport const isStateError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"state_error\";\nexport const isRateLimitError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"rate_limit_error\";\nexport const isApiError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"api_error\";\nexport const isNetworkError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"network_error\";\nexport const isChallengeAborted = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"challenge_aborted\";\n","import { ArcPayError } from \"./errors\";\n\nexport type Environment = \"sandbox\" | \"live\";\n\nexport const detectEnvironment = (publishableKey: string): Environment =>\n publishableKey.startsWith(\"pk_test_\") ? \"sandbox\" : \"live\";\n\nexport const validatePublishableKey = (key: unknown): asserts key is string => {\n if (typeof key !== \"string\" || key.length === 0) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message: \"Publishable key must be a non-empty string\",\n retryable: false,\n });\n }\n if (!key.startsWith(\"pk_test_\") && !key.startsWith(\"pk_live_\")) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message:\n \"Publishable key must start with pk_test_ or pk_live_. Secret keys (sk_*) cannot be used in browser.\",\n retryable: false,\n });\n }\n};\n","const BANNER_ATTR = \"data-arcpay-sandbox-banner\";\n\nexport const showSandboxBanner = (): void => {\n if (typeof document === \"undefined\") return;\n if (document.querySelector(`[${BANNER_ATTR}]`)) return;\n\n const bar = document.createElement(\"div\");\n bar.setAttribute(BANNER_ATTR, \"\");\n bar.style.cssText =\n \"position:fixed;top:0;left:0;right:0;z-index:2147483647;background:#ffd166;color:#222;font:13px/1.4 system-ui,sans-serif;padding:6px 12px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);\";\n\n const text = document.createElement(\"span\");\n text.textContent = \"ARC PAY TEST MODE — payments are simulated\";\n bar.appendChild(text);\n\n const dismiss = document.createElement(\"button\");\n dismiss.type = \"button\";\n dismiss.setAttribute(\"data-arcpay-banner-dismiss\", \"\");\n dismiss.textContent = \"×\";\n dismiss.setAttribute(\"aria-label\", \"Dismiss test mode banner\");\n dismiss.style.cssText =\n \"margin-left:12px;background:transparent;border:0;font-size:18px;cursor:pointer;color:inherit;\";\n dismiss.addEventListener(\"click\", () => bar.remove());\n bar.appendChild(dismiss);\n\n document.body.appendChild(bar);\n};\n","import { ArcPayError } from \"../core/errors\";\n\nexport type FieldType = \"cardNumber\" | \"cardExpiry\" | \"cardCvv\";\n\n// Parent → iframe\nexport type ParentToIframe =\n | { type: \"arcpay:hello\"; origin: string; publishableKey: string; channelId: string }\n | { type: \"arcpay:style\"; payload: StyleSubset }\n | { type: \"arcpay:placeholder\"; field: FieldType; placeholder: string }\n | { type: \"arcpay:focus\" }\n | { type: \"arcpay:clear\" }\n | { type: \"arcpay:tokenize\"; paymentId: string; idempotencyKey: string };\n\n// iframe → parent\nexport type IframeToParent =\n | { type: \"arcpay:ready\" }\n | { type: \"arcpay:rejected\"; reason: string }\n | {\n type: \"arcpay:change\";\n field: FieldType;\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | {\n type: \"arcpay:tokenize-result\";\n cardTokenId: string;\n cardMask: string;\n cardScheme: string;\n cardBin: string;\n expiresIn: number;\n expiresAt: string;\n }\n | { type: \"arcpay:tokenize-error\"; errorType: string; code?: string; message: string };\n\nexport interface StyleSubset {\n base: Record<string, string>;\n invalid?: Record<string, string>;\n focus?: Record<string, string>;\n complete?: Record<string, string>;\n empty?: Record<string, string>;\n}\n\ntype TokenizeErrorType = \"validation_error\" | \"configuration_error\" | \"network_error\" | \"api_error\";\n\nconst ARCPAY_TYPE_PREFIX = \"arcpay:\";\n\nconst isArcpayMessage = (data: unknown): data is { type: string } =>\n typeof data === \"object\" &&\n data !== null &&\n \"type\" in data &&\n typeof (data as { type: unknown }).type === \"string\" &&\n (data as { type: string }).type.startsWith(ARCPAY_TYPE_PREFIX);\n\nexport const postToIframe = (\n iframe: HTMLIFrameElement,\n message: ParentToIframe,\n targetOrigin: string,\n): void => {\n if (targetOrigin === \"*\") {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"wildcard_origin_forbidden\",\n message: \"postToIframe: targetOrigin cannot be '*'\",\n retryable: false,\n });\n }\n if (!iframe.contentWindow) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"iframe_not_loaded\",\n message: \"postToIframe: iframe.contentWindow is null (iframe not mounted)\",\n retryable: false,\n });\n }\n iframe.contentWindow.postMessage(message, targetOrigin);\n};\n\nexport const postToParent = (message: IframeToParent, targetOrigin: string): void => {\n if (targetOrigin === \"*\") {\n throw new Error(\"postToParent: targetOrigin cannot be '*'\");\n }\n window.parent.postMessage(message, targetOrigin);\n};\n\nexport const parseIncoming = <T extends { type: string }>(\n event: MessageEvent,\n expectedOrigin: string,\n): T | null => {\n if (event.origin !== expectedOrigin) return null;\n if (!isArcpayMessage(event.data)) return null;\n return event.data as T;\n};\n","import type { StyleSubset } from \"./postmessage\";\nimport { ArcPayError } from \"../core/errors\";\n\nexport type HostedFieldsTheme = \"none\" | \"arcpay\";\n\nexport interface HostedFieldsAppearanceVariables {\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n fontStyle?: string;\n lineHeight?: string;\n letterSpacing?: string;\n textAlign?: string;\n colorText?: string;\n colorPlaceholder?: string;\n colorDanger?: string;\n colorSuccess?: string;\n colorBackground?: string;\n caretColor?: string;\n}\n\nexport type HostedFieldsAppearanceRule = \"base\" | \"focus\" | \"invalid\" | \"complete\" | \"empty\";\n\nexport interface HostedFieldsAppearance {\n theme?: HostedFieldsTheme;\n variables?: HostedFieldsAppearanceVariables;\n rules?: Partial<Record<HostedFieldsAppearanceRule, Record<string, string>>>;\n}\n\nconst ALLOWED_PROPERTIES = new Set([\n \"--arcpay-placeholder-color\",\n \"background-color\",\n \"caret-color\",\n \"color\",\n \"font-family\",\n \"font-size\",\n \"font-style\",\n \"font-weight\",\n \"letter-spacing\",\n \"line-height\",\n \"opacity\",\n \"text-align\",\n \"text-decoration\",\n \"text-transform\",\n]);\n\nconst ARCPAY_THEME: StyleSubset = {\n base: {\n \"font-family\":\n 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n \"font-size\": \"16px\",\n \"line-height\": \"24px\",\n color: \"#111827\",\n \"--arcpay-placeholder-color\": \"#9ca3af\",\n \"caret-color\": \"#111827\",\n },\n focus: {\n color: \"#111827\",\n },\n invalid: {\n color: \"#dc2626\",\n },\n complete: {\n color: \"#111827\",\n },\n empty: {\n color: \"#111827\",\n },\n};\n\nconst mergeBlock = (\n target: Record<string, string> | undefined,\n source: Record<string, string> | undefined,\n): Record<string, string> | undefined => {\n if (!target && !source) return undefined;\n return { ...(target ?? {}), ...(source ?? {}) };\n};\n\nconst setIfPresent = (\n block: Record<string, string>,\n key: string,\n value: string | undefined,\n): void => {\n if (value !== undefined) block[key] = value;\n};\n\nconst assertKnownTheme = (theme: HostedFieldsTheme | undefined): void => {\n if (theme === undefined || theme === \"none\" || theme === \"arcpay\") return;\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_hosted_fields_theme\",\n message: `Unsupported Hosted Fields appearance theme: ${String(theme)}`,\n retryable: false,\n });\n};\n\nconst sanitizeBlock = (block: Record<string, string>): Record<string, string> => {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(block)) {\n const normalizedKey = key.toLowerCase();\n if (!ALLOWED_PROPERTIES.has(normalizedKey)) {\n continue;\n }\n out[normalizedKey] = value;\n }\n return out;\n};\n\nexport const sanitizeStyle = (style: StyleSubset): StyleSubset => {\n const result: StyleSubset = { base: sanitizeBlock(style.base) };\n if (style.invalid !== undefined) result.invalid = sanitizeBlock(style.invalid);\n if (style.focus !== undefined) result.focus = sanitizeBlock(style.focus);\n if (style.complete !== undefined) result.complete = sanitizeBlock(style.complete);\n if (style.empty !== undefined) result.empty = sanitizeBlock(style.empty);\n return result;\n};\n\nexport const buildStyleFromAppearance = (appearance?: HostedFieldsAppearance): StyleSubset => {\n assertKnownTheme(appearance?.theme);\n const themeStyle: StyleSubset = appearance?.theme === \"arcpay\" ? ARCPAY_THEME : { base: {} };\n const variableStyle: StyleSubset = { base: {} };\n const variables = appearance?.variables;\n\n if (variables) {\n setIfPresent(variableStyle.base, \"font-family\", variables.fontFamily);\n setIfPresent(variableStyle.base, \"font-size\", variables.fontSize);\n setIfPresent(variableStyle.base, \"font-weight\", variables.fontWeight);\n setIfPresent(variableStyle.base, \"font-style\", variables.fontStyle);\n setIfPresent(variableStyle.base, \"line-height\", variables.lineHeight);\n setIfPresent(variableStyle.base, \"letter-spacing\", variables.letterSpacing);\n setIfPresent(variableStyle.base, \"text-align\", variables.textAlign);\n setIfPresent(variableStyle.base, \"color\", variables.colorText);\n setIfPresent(variableStyle.base, \"--arcpay-placeholder-color\", variables.colorPlaceholder);\n setIfPresent(variableStyle.base, \"background-color\", variables.colorBackground);\n setIfPresent(variableStyle.base, \"caret-color\", variables.caretColor);\n\n if (variables.colorDanger !== undefined) {\n variableStyle.invalid = { color: variables.colorDanger };\n }\n if (variables.colorSuccess !== undefined) {\n variableStyle.complete = { color: variables.colorSuccess };\n }\n }\n\n const rules = appearance?.rules;\n const combined: StyleSubset = {\n base: {\n ...themeStyle.base,\n ...variableStyle.base,\n ...(rules?.base ?? {}),\n },\n };\n\n const focus = mergeBlock(mergeBlock(themeStyle.focus, variableStyle.focus), rules?.focus);\n const invalid = mergeBlock(mergeBlock(themeStyle.invalid, variableStyle.invalid), rules?.invalid);\n const complete = mergeBlock(\n mergeBlock(themeStyle.complete, variableStyle.complete),\n rules?.complete,\n );\n const empty = mergeBlock(mergeBlock(themeStyle.empty, variableStyle.empty), rules?.empty);\n\n if (focus !== undefined) combined.focus = focus;\n if (invalid !== undefined) combined.invalid = invalid;\n if (complete !== undefined) combined.complete = complete;\n if (empty !== undefined) combined.empty = empty;\n\n return sanitizeStyle(combined);\n};\n","import { ArcPayError } from \"../core/errors\";\nimport {\n type FieldType,\n type ParentToIframe,\n type IframeToParent,\n postToIframe,\n parseIncoming,\n} from \"./postmessage\";\nimport { buildStyleFromAppearance, type HostedFieldsAppearance } from \"./style\";\n\nexport interface ElementOptions {\n /** Iframe-safe input appearance. Container layout remains merchant-owned CSS. */\n appearance?: HostedFieldsAppearance;\n placeholder?: string;\n}\n\nexport type ElementEvent =\n | { type: \"ready\" }\n | {\n type: \"change\";\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | { type: \"error\"; reason: string };\n\ntype Listener = (event: ElementEvent) => void;\ntype ElementEventName = ElementEvent[\"type\"];\n\nconst FIELD_TITLES: Record<FieldType, string> = {\n cardNumber: \"Arc Pay card number\",\n cardExpiry: \"Arc Pay card expiration date\",\n cardCvv: \"Arc Pay card security code\",\n};\n\nexport interface ElementContext {\n iframeBase: string;\n publishableKey: string;\n channelId: string;\n}\n\nexport class Element {\n private iframe: HTMLIFrameElement | null = null;\n private readonly listeners: Record<ElementEventName, Set<Listener>> = {\n ready: new Set<Listener>(),\n change: new Set<Listener>(),\n error: new Set<Listener>(),\n };\n private status: \"pending\" | \"ready\" | \"error\" = \"pending\";\n private messageHandler: ((e: MessageEvent) => void) | null = null;\n\n constructor(\n public readonly field: FieldType,\n private readonly options: ElementOptions,\n private readonly context: ElementContext,\n ) {}\n\n mount(target: string | HTMLElement): void {\n if (this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"already_mounted\",\n message: `Element ${this.field} is already mounted`,\n retryable: false,\n });\n }\n const container = typeof target === \"string\" ? document.querySelector(target) : target;\n if (!(container instanceof HTMLElement)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"mount_target_not_found\",\n message: `mount target not found: ${String(target)}`,\n retryable: false,\n });\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = `${this.context.iframeBase}/iframe/${this.field}`;\n iframe.style.cssText = \"border:0;width:100%;height:100%;display:block;\";\n iframe.setAttribute(\"allow\", \"payment\");\n iframe.setAttribute(\"data-arcpay-element\", this.field);\n iframe.setAttribute(\"title\", FIELD_TITLES[this.field]);\n iframe.setAttribute(\"aria-label\", FIELD_TITLES[this.field]);\n container.appendChild(iframe);\n this.iframe = iframe;\n\n const expectedOrigin = new URL(this.context.iframeBase).origin;\n\n this.messageHandler = (event: MessageEvent) => {\n // C1: source guard — only accept messages from this element's own iframe.\n // Without this, any iframe at the same origin (e.g. cardExpiry, cardCvv)\n // could trigger handlers on cardNumber and vice-versa.\n if (event.source !== this.iframe?.contentWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, expectedOrigin);\n if (!data) return;\n this.handleMessage(data);\n };\n window.addEventListener(\"message\", this.messageHandler);\n\n iframe.addEventListener(\n \"load\",\n () => {\n if (!this.iframe) return;\n const hello: ParentToIframe = {\n type: \"arcpay:hello\",\n origin: window.location.origin,\n publishableKey: this.context.publishableKey,\n channelId: this.context.channelId,\n };\n postToIframe(this.iframe, hello, expectedOrigin);\n },\n { once: true },\n );\n }\n\n private handleMessage(data: IframeToParent): void {\n if (data.type === \"arcpay:ready\") {\n this.status = \"ready\";\n if (this.options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(this.options.appearance),\n });\n }\n if (this.options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: this.options.placeholder,\n });\n }\n this.emit({ type: \"ready\" });\n } else if (data.type === \"arcpay:rejected\") {\n this.status = \"error\";\n this.emit({ type: \"error\", reason: data.reason });\n } else if (data.type === \"arcpay:change\" && data.field === this.field) {\n this.emit({\n type: \"change\",\n isValid: data.isValid,\n isEmpty: data.isEmpty,\n isComplete: data.isComplete,\n brand: data.brand,\n lastFour: data.lastFour,\n });\n }\n // arcpay:tokenize-result / arcpay:tokenize-error handled by Elements factory (Task 9).\n }\n\n update(options: { appearance?: HostedFieldsAppearance; placeholder?: string }): void {\n if (options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(options.appearance),\n });\n }\n if (options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: options.placeholder,\n });\n }\n }\n\n destroy(): void {\n if (this.iframe) {\n this.iframe.remove();\n this.iframe = null;\n }\n if (this.messageHandler) {\n window.removeEventListener(\"message\", this.messageHandler);\n this.messageHandler = null;\n }\n for (const listeners of Object.values(this.listeners)) {\n listeners.clear();\n }\n this.status = \"pending\";\n }\n\n on(event: ElementEventName, callback: Listener): () => void {\n this.listeners[event].add(callback);\n return () => this.listeners[event].delete(callback);\n }\n\n focus(): void {\n this.send({ type: \"arcpay:focus\" });\n }\n\n clear(): void {\n this.send({ type: \"arcpay:clear\" });\n }\n\n isReady(): boolean {\n return this.status === \"ready\";\n }\n\n /**\n * Internal: returns the iframe's contentWindow for source-filtering in\n * Elements.doTokenize(). Returns null when the iframe is not yet mounted\n * or when jsdom has not yet populated contentWindow (test environment).\n */\n getIframeContentWindow(): Window | null {\n return this.iframe?.contentWindow ?? null;\n }\n\n /** Internal: used by Elements factory to send tokenize commands. */\n send(message: ParentToIframe): void {\n if (!this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"not_mounted\",\n message: `Element ${this.field} is not mounted`,\n retryable: false,\n });\n }\n postToIframe(this.iframe, message, new URL(this.context.iframeBase).origin);\n }\n\n private emit(event: ElementEvent): void {\n for (const listener of this.listeners[event.type]) {\n listener(event);\n }\n }\n}\n","import { ArcPayError } from \"../core/errors\";\nimport { Element, type ElementContext, type ElementOptions } from \"./element\";\nimport type { FieldType, IframeToParent } from \"./postmessage\";\nimport { parseIncoming } from \"./postmessage\";\nimport type { TokenizeResult } from \"../tokenize/tokenize\";\nimport type { HostedFieldsAppearance } from \"./style\";\n\nexport type {};\n\nexport interface ElementsOptions {\n /** Default iframe-safe input appearance applied to elements created by this factory. */\n appearance?: HostedFieldsAppearance;\n}\n\nconst DEFAULT_IFRAME_BASE = \"https://sdk.arcpay.space\";\n\nconst createChannelId = (): string => {\n if (!globalThis.crypto?.randomUUID) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"crypto_unavailable\",\n message: \"crypto.randomUUID is required for Hosted Fields\",\n retryable: false,\n });\n }\n return globalThis.crypto.randomUUID();\n};\n\nexport class Elements {\n private readonly elementMap = new Map<FieldType, Element>();\n private readonly iframeBase: string;\n private readonly publishableKey: string;\n private readonly channelId: string;\n private tokenizeInFlight = false;\n private readonly appearance?: HostedFieldsAppearance;\n\n constructor(opts: {\n publishableKey: string;\n iframeBase?: string;\n appearance?: HostedFieldsAppearance;\n }) {\n this.publishableKey = opts.publishableKey;\n this.iframeBase = opts.iframeBase ?? DEFAULT_IFRAME_BASE;\n this.channelId = createChannelId();\n this.appearance = opts.appearance;\n }\n\n create(field: FieldType, options: ElementOptions = {}): Element {\n if (this.elementMap.has(field)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"duplicate_element\",\n message: `Element for ${field} already created`,\n retryable: false,\n });\n }\n const ctx: ElementContext = {\n iframeBase: this.iframeBase,\n publishableKey: this.publishableKey,\n channelId: this.channelId,\n };\n const element = new Element(\n field,\n {\n ...options,\n appearance: options.appearance ?? this.appearance,\n },\n ctx,\n );\n this.elementMap.set(field, element);\n return element;\n }\n\n async tokenize(paymentId: string, idempotencyKey: string): Promise<TokenizeResult> {\n // C2: concurrent-call guard — only one tokenize() may be in-flight at a time.\n if (this.tokenizeInFlight) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"tokenize_in_progress\",\n message: \"A tokenize() call is already in progress for this Elements instance\",\n retryable: false,\n });\n }\n\n const cardNumber = this.elementMap.get(\"cardNumber\");\n const cardExpiry = this.elementMap.get(\"cardExpiry\");\n const cardCvv = this.elementMap.get(\"cardCvv\");\n\n if (!cardNumber || !cardExpiry || !cardCvv) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"incomplete_elements\",\n message:\n \"All three elements (cardNumber, cardExpiry, cardCvv) must be created and mounted before tokenize()\",\n retryable: false,\n });\n }\n if (!cardNumber.isReady() || !cardExpiry.isReady() || !cardCvv.isReady()) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"elements_not_ready\",\n message: \"Wait for all elements to fire 'ready' event before tokenize()\",\n retryable: false,\n });\n }\n\n this.tokenizeInFlight = true;\n try {\n return await this.doTokenize(cardNumber, paymentId, idempotencyKey);\n } finally {\n this.tokenizeInFlight = false;\n }\n }\n\n private doTokenize(\n cardNumber: Element,\n paymentId: string,\n idempotencyKey: string,\n ): Promise<TokenizeResult> {\n const iframeOrigin = new URL(this.iframeBase).origin;\n // C1: obtain reference to the cardNumber iframe's contentWindow before\n // registering the listener so we can filter by source.\n const cardIframeWindow = cardNumber.getIframeContentWindow();\n\n return new Promise<TokenizeResult>((resolve, reject) => {\n // C3: 30-second timeout — rejects and cleans up if no result arrives.\n const timer = window.setTimeout(() => {\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type: \"network_error\",\n code: \"tokenize_timeout\",\n message: \"tokenize() timed out after 30 seconds\",\n retryable: true,\n paymentId,\n }),\n );\n }, 30_000);\n\n const onMessage = (event: MessageEvent) => {\n // C1: source guard — only accept messages from the cardNumber iframe.\n if (cardIframeWindow !== null && event.source !== cardIframeWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, iframeOrigin);\n if (!data) return;\n\n if (data.type === \"arcpay:tokenize-result\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n resolve({\n cardTokenId: data.cardTokenId,\n cardMask: data.cardMask,\n cardScheme: data.cardScheme,\n cardBin: data.cardBin,\n expiresIn: data.expiresIn,\n expiresAt: data.expiresAt,\n });\n } else if (data.type === \"arcpay:tokenize-error\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type:\n data.errorType === \"validation_error\" ||\n data.errorType === \"configuration_error\" ||\n data.errorType === \"network_error\" ||\n data.errorType === \"api_error\"\n ? data.errorType\n : \"api_error\",\n code: data.code,\n message: data.message,\n retryable: false,\n paymentId,\n }),\n );\n }\n };\n\n window.addEventListener(\"message\", onMessage);\n cardNumber.send({ type: \"arcpay:tokenize\", paymentId, idempotencyKey });\n });\n }\n\n destroy(): void {\n for (const el of this.elementMap.values()) {\n el.destroy();\n }\n this.elementMap.clear();\n }\n}\n","import {\n detectEnvironment,\n type Environment,\n validatePublishableKey as _validatePublishableKey,\n} from \"./env\";\nimport { showSandboxBanner } from \"./sandbox-banner\";\nimport { Elements, type ElementsOptions } from \"../elements/elements\";\n\nconst validatePublishableKey: (key: unknown) => asserts key is string = _validatePublishableKey;\n\nexport interface ArcPayLoadOptions {\n readonly _reserved?: never;\n}\n\nexport interface ArcPayInstance {\n readonly publishableKey: string;\n readonly environment: Environment;\n elements: (opts?: ElementsOptions) => Elements;\n}\n\nconst cache = new Map<string, Promise<ArcPayInstance>>();\n\nconst buildInstance = (publishableKey: string): ArcPayInstance => {\n if (detectEnvironment(publishableKey) === \"sandbox\") {\n showSandboxBanner();\n }\n return {\n publishableKey,\n environment: detectEnvironment(publishableKey),\n elements: (opts = {}) => new Elements({ publishableKey, ...opts }),\n };\n};\n\nfunction load(publishableKey: string): Promise<ArcPayInstance> {\n try {\n validatePublishableKey(publishableKey);\n } catch (err) {\n return Promise.reject(err);\n }\n const key = publishableKey;\n const existing = cache.get(key);\n if (existing) return existing;\n const promise = Promise.resolve(buildInstance(publishableKey));\n cache.set(key, promise);\n return promise;\n}\n\nconst resetForTests = (): void => {\n cache.clear();\n};\n\nexport const ArcPay = {\n load,\n __resetForTests: resetForTests,\n};\n","import { ArcPay, type ArcPayInstance } from \"../index\";\nimport * as React from \"react\";\n\nexport type ArcPayState =\n | { status: \"loading\"; instance: null; error: null }\n | { status: \"ready\"; instance: ArcPayInstance; error: null }\n | { status: \"error\"; instance: null; error: Error };\n\nconst Ctx = React.createContext<ArcPayState | null>(null);\n\nexport interface ArcPayProviderProps {\n publishableKey: string;\n children: React.ReactNode;\n}\n\nexport const ArcPayProvider: React.FC<ArcPayProviderProps> = ({ publishableKey, children }) => {\n const [state, setState] = React.useState<ArcPayState>({\n status: \"loading\",\n instance: null,\n error: null,\n });\n\n React.useEffect(() => {\n let canceled = false;\n ArcPay.load(publishableKey)\n .then((instance) => {\n if (!canceled) setState({ status: \"ready\", instance, error: null });\n })\n .catch((error: unknown) => {\n if (!canceled)\n setState({\n status: \"error\",\n instance: null,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n });\n return () => {\n canceled = true;\n };\n }, [publishableKey]);\n\n return <Ctx.Provider value={state}>{children}</Ctx.Provider>;\n};\n\nexport const ArcPayContext = Ctx;\n","import * as React from \"react\";\nimport { ArcPayContext, type ArcPayState } from \"./provider\";\n\nexport const useArcPay = (): ArcPayState => {\n const ctx = React.useContext(ArcPayContext);\n if (!ctx) throw new Error(\"useArcPay must be called within an ArcPayProvider\");\n return ctx;\n};\n","export { ArcPayProvider, ArcPayContext } from \"./provider\";\nexport type { ArcPayProviderProps, ArcPayState } from \"./provider\";\nexport { useArcPay } from \"./use-arcpay\";\nexport const REACT_WRAPPER_VERSION = \"0.1.26\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/errors.ts","../../src/core/env.ts","../../src/core/sandbox-banner.ts","../../src/elements/postmessage.ts","../../src/elements/style.ts","../../src/elements/element.ts","../../src/elements/elements.ts","../../src/core/arcpay.ts","../../src/react/provider.tsx","../../src/react/use-arcpay.ts","../../src/react/index.ts"],"names":["validatePublishableKey","React2"],"mappings":"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","file":"index.mjs","sourcesContent":["export type ArcPayErrorType =\n | \"validation_error\"\n | \"configuration_error\"\n | \"authentication_error\"\n | \"authorization_error\"\n | \"state_error\"\n | \"rate_limit_error\"\n | \"api_error\"\n | \"network_error\"\n | \"challenge_aborted\";\n\ninterface ArcPayErrorInit {\n type: ArcPayErrorType;\n message: string;\n code?: string;\n param?: string;\n paymentId?: string;\n declineCode?: string;\n retryable: boolean;\n requestId?: string;\n}\n\nexport class ArcPayError extends Error {\n readonly type: ArcPayErrorType;\n readonly code?: string;\n readonly param?: string;\n readonly paymentId?: string;\n readonly declineCode?: string;\n readonly retryable: boolean;\n readonly requestId?: string;\n\n constructor(init: ArcPayErrorInit) {\n super(init.message);\n this.name = \"ArcPayError\";\n this.type = init.type;\n this.code = init.code;\n this.param = init.param;\n this.paymentId = init.paymentId;\n this.declineCode = init.declineCode;\n this.retryable = init.retryable;\n this.requestId = init.requestId;\n }\n}\n\nexport const isValidationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"validation_error\";\nconst isConfigurationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"configuration_error\";\nexport const isAuthenticationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authentication_error\";\nexport const isAuthorizationError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"authorization_error\";\nexport const isStateError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"state_error\";\nexport const isRateLimitError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"rate_limit_error\";\nexport const isApiError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"api_error\";\nexport const isNetworkError = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"network_error\";\nexport const isChallengeAborted = (e: unknown): e is ArcPayError =>\n e instanceof ArcPayError && e.type === \"challenge_aborted\";\n","import { ArcPayError } from \"./errors\";\n\nexport type Environment = \"sandbox\" | \"live\";\n\nexport const detectEnvironment = (publishableKey: string): Environment =>\n publishableKey.startsWith(\"pk_test_\") ? \"sandbox\" : \"live\";\n\nexport const validatePublishableKey = (key: unknown): asserts key is string => {\n if (typeof key !== \"string\" || key.length === 0) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message: \"Publishable key must be a non-empty string\",\n retryable: false,\n });\n }\n if (!key.startsWith(\"pk_test_\") && !key.startsWith(\"pk_live_\")) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_publishable_key\",\n message:\n \"Publishable key must start with pk_test_ or pk_live_. Secret keys (sk_*) cannot be used in browser.\",\n retryable: false,\n });\n }\n};\n","const BANNER_ATTR = \"data-arcpay-sandbox-banner\";\n\nexport const showSandboxBanner = (): void => {\n if (typeof document === \"undefined\") return;\n if (document.querySelector(`[${BANNER_ATTR}]`)) return;\n\n const bar = document.createElement(\"div\");\n bar.setAttribute(BANNER_ATTR, \"\");\n bar.style.cssText =\n \"position:fixed;top:0;left:0;right:0;z-index:2147483647;background:#ffd166;color:#222;font:13px/1.4 system-ui,sans-serif;padding:6px 12px;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 3px rgba(0,0,0,0.1);\";\n\n const text = document.createElement(\"span\");\n text.textContent = \"ARC PAY TEST MODE — payments are simulated\";\n bar.appendChild(text);\n\n const dismiss = document.createElement(\"button\");\n dismiss.type = \"button\";\n dismiss.setAttribute(\"data-arcpay-banner-dismiss\", \"\");\n dismiss.textContent = \"×\";\n dismiss.setAttribute(\"aria-label\", \"Dismiss test mode banner\");\n dismiss.style.cssText =\n \"margin-left:12px;background:transparent;border:0;font-size:18px;cursor:pointer;color:inherit;\";\n dismiss.addEventListener(\"click\", () => bar.remove());\n bar.appendChild(dismiss);\n\n document.body.appendChild(bar);\n};\n","import { ArcPayError } from \"../core/errors\";\n\nexport type FieldType = \"cardNumber\" | \"cardExpiry\" | \"cardCvv\";\n\n// Parent → iframe\nexport type ParentToIframe =\n | { type: \"arcpay:hello\"; origin: string; publishableKey: string; channelId: string }\n | { type: \"arcpay:style\"; payload: StyleSubset }\n | { type: \"arcpay:placeholder\"; field: FieldType; placeholder: string }\n | { type: \"arcpay:focus\" }\n | { type: \"arcpay:clear\" }\n | { type: \"arcpay:tokenize\"; paymentId: string; idempotencyKey: string };\n\n// iframe → parent\nexport type IframeToParent =\n | { type: \"arcpay:ready\" }\n | { type: \"arcpay:rejected\"; reason: string }\n | {\n type: \"arcpay:change\";\n field: FieldType;\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | {\n type: \"arcpay:tokenize-result\";\n cardTokenId: string;\n cardMask: string;\n cardScheme: string;\n cardBin: string;\n expiresIn: number;\n expiresAt: string;\n }\n | { type: \"arcpay:tokenize-error\"; errorType: string; code?: string; message: string };\n\nexport interface StyleSubset {\n base: Record<string, string>;\n invalid?: Record<string, string>;\n focus?: Record<string, string>;\n complete?: Record<string, string>;\n empty?: Record<string, string>;\n}\n\ntype TokenizeErrorType = \"validation_error\" | \"configuration_error\" | \"network_error\" | \"api_error\";\n\nconst ARCPAY_TYPE_PREFIX = \"arcpay:\";\n\nconst isArcpayMessage = (data: unknown): data is { type: string } =>\n typeof data === \"object\" &&\n data !== null &&\n \"type\" in data &&\n typeof (data as { type: unknown }).type === \"string\" &&\n (data as { type: string }).type.startsWith(ARCPAY_TYPE_PREFIX);\n\nexport const postToIframe = (\n iframe: HTMLIFrameElement,\n message: ParentToIframe,\n targetOrigin: string,\n): void => {\n if (targetOrigin === \"*\") {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"wildcard_origin_forbidden\",\n message: \"postToIframe: targetOrigin cannot be '*'\",\n retryable: false,\n });\n }\n if (!iframe.contentWindow) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"iframe_not_loaded\",\n message: \"postToIframe: iframe.contentWindow is null (iframe not mounted)\",\n retryable: false,\n });\n }\n iframe.contentWindow.postMessage(message, targetOrigin);\n};\n\nexport const postToParent = (message: IframeToParent, targetOrigin: string): void => {\n if (targetOrigin === \"*\") {\n throw new Error(\"postToParent: targetOrigin cannot be '*'\");\n }\n window.parent.postMessage(message, targetOrigin);\n};\n\nexport const parseIncoming = <T extends { type: string }>(\n event: MessageEvent,\n expectedOrigin: string,\n): T | null => {\n if (event.origin !== expectedOrigin) return null;\n if (!isArcpayMessage(event.data)) return null;\n return event.data as T;\n};\n","import type { StyleSubset } from \"./postmessage\";\nimport { ArcPayError } from \"../core/errors\";\n\nexport type HostedFieldsTheme = \"none\" | \"arcpay\";\n\nexport interface HostedFieldsAppearanceVariables {\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n fontStyle?: string;\n lineHeight?: string;\n letterSpacing?: string;\n textAlign?: string;\n colorText?: string;\n colorPlaceholder?: string;\n colorDanger?: string;\n colorSuccess?: string;\n colorBackground?: string;\n caretColor?: string;\n}\n\nexport type HostedFieldsAppearanceRule = \"base\" | \"focus\" | \"invalid\" | \"complete\" | \"empty\";\n\nexport interface HostedFieldsAppearance {\n theme?: HostedFieldsTheme;\n variables?: HostedFieldsAppearanceVariables;\n rules?: Partial<Record<HostedFieldsAppearanceRule, Record<string, string>>>;\n}\n\nconst ALLOWED_PROPERTIES = new Set([\n \"--arcpay-placeholder-color\",\n \"background-color\",\n \"caret-color\",\n \"color\",\n \"font-family\",\n \"font-size\",\n \"font-style\",\n \"font-weight\",\n \"letter-spacing\",\n \"line-height\",\n \"opacity\",\n \"text-align\",\n \"text-decoration\",\n \"text-transform\",\n]);\n\nconst ARCPAY_THEME: StyleSubset = {\n base: {\n \"font-family\":\n 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n \"font-size\": \"16px\",\n \"line-height\": \"24px\",\n color: \"#111827\",\n \"--arcpay-placeholder-color\": \"#9ca3af\",\n \"caret-color\": \"#111827\",\n },\n focus: {\n color: \"#111827\",\n },\n invalid: {\n color: \"#dc2626\",\n },\n complete: {\n color: \"#111827\",\n },\n empty: {\n color: \"#111827\",\n },\n};\n\nconst mergeBlock = (\n target: Record<string, string> | undefined,\n source: Record<string, string> | undefined,\n): Record<string, string> | undefined => {\n if (!target && !source) return undefined;\n return { ...(target ?? {}), ...(source ?? {}) };\n};\n\nconst setIfPresent = (\n block: Record<string, string>,\n key: string,\n value: string | undefined,\n): void => {\n if (value !== undefined) block[key] = value;\n};\n\nconst assertKnownTheme = (theme: HostedFieldsTheme | undefined): void => {\n if (theme === undefined || theme === \"none\" || theme === \"arcpay\") return;\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"invalid_hosted_fields_theme\",\n message: `Unsupported Hosted Fields appearance theme: ${String(theme)}`,\n retryable: false,\n });\n};\n\nconst sanitizeBlock = (block: Record<string, string>): Record<string, string> => {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(block)) {\n const normalizedKey = key.toLowerCase();\n if (!ALLOWED_PROPERTIES.has(normalizedKey)) {\n continue;\n }\n out[normalizedKey] = value;\n }\n return out;\n};\n\nexport const sanitizeStyle = (style: StyleSubset): StyleSubset => {\n const result: StyleSubset = { base: sanitizeBlock(style.base) };\n if (style.invalid !== undefined) result.invalid = sanitizeBlock(style.invalid);\n if (style.focus !== undefined) result.focus = sanitizeBlock(style.focus);\n if (style.complete !== undefined) result.complete = sanitizeBlock(style.complete);\n if (style.empty !== undefined) result.empty = sanitizeBlock(style.empty);\n return result;\n};\n\nexport const buildStyleFromAppearance = (appearance?: HostedFieldsAppearance): StyleSubset => {\n assertKnownTheme(appearance?.theme);\n const themeStyle: StyleSubset = appearance?.theme === \"arcpay\" ? ARCPAY_THEME : { base: {} };\n const variableStyle: StyleSubset = { base: {} };\n const variables = appearance?.variables;\n\n if (variables) {\n setIfPresent(variableStyle.base, \"font-family\", variables.fontFamily);\n setIfPresent(variableStyle.base, \"font-size\", variables.fontSize);\n setIfPresent(variableStyle.base, \"font-weight\", variables.fontWeight);\n setIfPresent(variableStyle.base, \"font-style\", variables.fontStyle);\n setIfPresent(variableStyle.base, \"line-height\", variables.lineHeight);\n setIfPresent(variableStyle.base, \"letter-spacing\", variables.letterSpacing);\n setIfPresent(variableStyle.base, \"text-align\", variables.textAlign);\n setIfPresent(variableStyle.base, \"color\", variables.colorText);\n setIfPresent(variableStyle.base, \"--arcpay-placeholder-color\", variables.colorPlaceholder);\n setIfPresent(variableStyle.base, \"background-color\", variables.colorBackground);\n setIfPresent(variableStyle.base, \"caret-color\", variables.caretColor);\n\n if (variables.colorText !== undefined && appearance?.theme === \"arcpay\") {\n variableStyle.focus = { color: variables.colorText };\n variableStyle.invalid = { color: variables.colorText };\n variableStyle.complete = { color: variables.colorText };\n variableStyle.empty = { color: variables.colorText };\n }\n if (variables.colorDanger !== undefined) {\n variableStyle.invalid = { color: variables.colorDanger };\n }\n if (variables.colorSuccess !== undefined) {\n variableStyle.complete = { color: variables.colorSuccess };\n }\n }\n\n const rules = appearance?.rules;\n const combined: StyleSubset = {\n base: {\n ...themeStyle.base,\n ...variableStyle.base,\n ...(rules?.base ?? {}),\n },\n };\n\n const focus = mergeBlock(mergeBlock(themeStyle.focus, variableStyle.focus), rules?.focus);\n const invalid = mergeBlock(mergeBlock(themeStyle.invalid, variableStyle.invalid), rules?.invalid);\n const complete = mergeBlock(\n mergeBlock(themeStyle.complete, variableStyle.complete),\n rules?.complete,\n );\n const empty = mergeBlock(mergeBlock(themeStyle.empty, variableStyle.empty), rules?.empty);\n\n if (focus !== undefined) combined.focus = focus;\n if (invalid !== undefined) combined.invalid = invalid;\n if (complete !== undefined) combined.complete = complete;\n if (empty !== undefined) combined.empty = empty;\n\n return sanitizeStyle(combined);\n};\n","import { ArcPayError } from \"../core/errors\";\nimport {\n type FieldType,\n type ParentToIframe,\n type IframeToParent,\n postToIframe,\n parseIncoming,\n} from \"./postmessage\";\nimport { buildStyleFromAppearance, type HostedFieldsAppearance } from \"./style\";\n\nexport interface ElementOptions {\n /** Iframe-safe input appearance. Container layout remains merchant-owned CSS. */\n appearance?: HostedFieldsAppearance;\n placeholder?: string;\n}\n\nexport type ElementEvent =\n | { type: \"ready\" }\n | {\n type: \"change\";\n isValid: boolean;\n isEmpty: boolean;\n isComplete: boolean;\n brand?: string;\n lastFour?: string;\n }\n | { type: \"error\"; reason: string };\n\ntype Listener = (event: ElementEvent) => void;\ntype ElementEventName = ElementEvent[\"type\"];\n\nconst FIELD_TITLES: Record<FieldType, string> = {\n cardNumber: \"Arc Pay card number\",\n cardExpiry: \"Arc Pay card expiration date\",\n cardCvv: \"Arc Pay card security code\",\n};\n\nexport interface ElementContext {\n iframeBase: string;\n publishableKey: string;\n channelId: string;\n}\n\nexport class Element {\n private iframe: HTMLIFrameElement | null = null;\n private readonly listeners: Record<ElementEventName, Set<Listener>> = {\n ready: new Set<Listener>(),\n change: new Set<Listener>(),\n error: new Set<Listener>(),\n };\n private status: \"pending\" | \"ready\" | \"error\" = \"pending\";\n private messageHandler: ((e: MessageEvent) => void) | null = null;\n\n constructor(\n public readonly field: FieldType,\n private readonly options: ElementOptions,\n private readonly context: ElementContext,\n ) {}\n\n mount(target: string | HTMLElement): void {\n if (this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"already_mounted\",\n message: `Element ${this.field} is already mounted`,\n retryable: false,\n });\n }\n const container = typeof target === \"string\" ? document.querySelector(target) : target;\n if (!(container instanceof HTMLElement)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"mount_target_not_found\",\n message: `mount target not found: ${String(target)}`,\n retryable: false,\n });\n }\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = `${this.context.iframeBase}/iframe/${this.field}`;\n iframe.style.cssText = \"border:0;width:100%;height:100%;display:block;\";\n iframe.setAttribute(\"allow\", \"payment\");\n iframe.setAttribute(\"data-arcpay-element\", this.field);\n iframe.setAttribute(\"title\", FIELD_TITLES[this.field]);\n iframe.setAttribute(\"aria-label\", FIELD_TITLES[this.field]);\n container.appendChild(iframe);\n this.iframe = iframe;\n\n const expectedOrigin = new URL(this.context.iframeBase).origin;\n\n this.messageHandler = (event: MessageEvent) => {\n // C1: source guard — only accept messages from this element's own iframe.\n // Without this, any iframe at the same origin (e.g. cardExpiry, cardCvv)\n // could trigger handlers on cardNumber and vice-versa.\n if (event.source !== this.iframe?.contentWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, expectedOrigin);\n if (!data) return;\n this.handleMessage(data);\n };\n window.addEventListener(\"message\", this.messageHandler);\n\n iframe.addEventListener(\n \"load\",\n () => {\n if (!this.iframe) return;\n const hello: ParentToIframe = {\n type: \"arcpay:hello\",\n origin: window.location.origin,\n publishableKey: this.context.publishableKey,\n channelId: this.context.channelId,\n };\n postToIframe(this.iframe, hello, expectedOrigin);\n },\n { once: true },\n );\n }\n\n private handleMessage(data: IframeToParent): void {\n if (data.type === \"arcpay:ready\") {\n this.status = \"ready\";\n if (this.options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(this.options.appearance),\n });\n }\n if (this.options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: this.options.placeholder,\n });\n }\n this.emit({ type: \"ready\" });\n } else if (data.type === \"arcpay:rejected\") {\n this.status = \"error\";\n this.emit({ type: \"error\", reason: data.reason });\n } else if (data.type === \"arcpay:change\" && data.field === this.field) {\n this.emit({\n type: \"change\",\n isValid: data.isValid,\n isEmpty: data.isEmpty,\n isComplete: data.isComplete,\n brand: data.brand,\n lastFour: data.lastFour,\n });\n }\n // arcpay:tokenize-result / arcpay:tokenize-error handled by Elements factory (Task 9).\n }\n\n update(options: { appearance?: HostedFieldsAppearance; placeholder?: string }): void {\n if (options.appearance) {\n this.send({\n type: \"arcpay:style\",\n payload: buildStyleFromAppearance(options.appearance),\n });\n }\n if (options.placeholder) {\n this.send({\n type: \"arcpay:placeholder\",\n field: this.field,\n placeholder: options.placeholder,\n });\n }\n }\n\n destroy(): void {\n if (this.iframe) {\n this.iframe.remove();\n this.iframe = null;\n }\n if (this.messageHandler) {\n window.removeEventListener(\"message\", this.messageHandler);\n this.messageHandler = null;\n }\n for (const listeners of Object.values(this.listeners)) {\n listeners.clear();\n }\n this.status = \"pending\";\n }\n\n on(event: ElementEventName, callback: Listener): () => void {\n this.listeners[event].add(callback);\n return () => this.listeners[event].delete(callback);\n }\n\n focus(): void {\n this.send({ type: \"arcpay:focus\" });\n }\n\n clear(): void {\n this.send({ type: \"arcpay:clear\" });\n }\n\n isReady(): boolean {\n return this.status === \"ready\";\n }\n\n /**\n * Internal: returns the iframe's contentWindow for source-filtering in\n * Elements.doTokenize(). Returns null when the iframe is not yet mounted\n * or when jsdom has not yet populated contentWindow (test environment).\n */\n getIframeContentWindow(): Window | null {\n return this.iframe?.contentWindow ?? null;\n }\n\n /** Internal: used by Elements factory to send tokenize commands. */\n send(message: ParentToIframe): void {\n if (!this.iframe) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"not_mounted\",\n message: `Element ${this.field} is not mounted`,\n retryable: false,\n });\n }\n postToIframe(this.iframe, message, new URL(this.context.iframeBase).origin);\n }\n\n private emit(event: ElementEvent): void {\n for (const listener of this.listeners[event.type]) {\n listener(event);\n }\n }\n}\n","import { ArcPayError } from \"../core/errors\";\nimport { Element, type ElementContext, type ElementOptions } from \"./element\";\nimport type { FieldType, IframeToParent } from \"./postmessage\";\nimport { parseIncoming } from \"./postmessage\";\nimport type { TokenizeResult } from \"../tokenize/tokenize\";\nimport type { HostedFieldsAppearance } from \"./style\";\n\nexport type {};\n\nexport interface ElementsOptions {\n /** Default iframe-safe input appearance applied to elements created by this factory. */\n appearance?: HostedFieldsAppearance;\n}\n\nconst DEFAULT_IFRAME_BASE = \"https://sdk.arcpay.space\";\n\nconst createChannelId = (): string => {\n if (!globalThis.crypto?.randomUUID) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"crypto_unavailable\",\n message: \"crypto.randomUUID is required for Hosted Fields\",\n retryable: false,\n });\n }\n return globalThis.crypto.randomUUID();\n};\n\nexport class Elements {\n private readonly elementMap = new Map<FieldType, Element>();\n private readonly iframeBase: string;\n private readonly publishableKey: string;\n private readonly channelId: string;\n private tokenizeInFlight = false;\n private readonly appearance?: HostedFieldsAppearance;\n\n constructor(opts: {\n publishableKey: string;\n iframeBase?: string;\n appearance?: HostedFieldsAppearance;\n }) {\n this.publishableKey = opts.publishableKey;\n this.iframeBase = opts.iframeBase ?? DEFAULT_IFRAME_BASE;\n this.channelId = createChannelId();\n this.appearance = opts.appearance;\n }\n\n create(field: FieldType, options: ElementOptions = {}): Element {\n if (this.elementMap.has(field)) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"duplicate_element\",\n message: `Element for ${field} already created`,\n retryable: false,\n });\n }\n const ctx: ElementContext = {\n iframeBase: this.iframeBase,\n publishableKey: this.publishableKey,\n channelId: this.channelId,\n };\n const element = new Element(\n field,\n {\n ...options,\n appearance: options.appearance ?? this.appearance,\n },\n ctx,\n );\n this.elementMap.set(field, element);\n return element;\n }\n\n async tokenize(paymentId: string, idempotencyKey: string): Promise<TokenizeResult> {\n // C2: concurrent-call guard — only one tokenize() may be in-flight at a time.\n if (this.tokenizeInFlight) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"tokenize_in_progress\",\n message: \"A tokenize() call is already in progress for this Elements instance\",\n retryable: false,\n });\n }\n\n const cardNumber = this.elementMap.get(\"cardNumber\");\n const cardExpiry = this.elementMap.get(\"cardExpiry\");\n const cardCvv = this.elementMap.get(\"cardCvv\");\n\n if (!cardNumber || !cardExpiry || !cardCvv) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"incomplete_elements\",\n message:\n \"All three elements (cardNumber, cardExpiry, cardCvv) must be created and mounted before tokenize()\",\n retryable: false,\n });\n }\n if (!cardNumber.isReady() || !cardExpiry.isReady() || !cardCvv.isReady()) {\n throw new ArcPayError({\n type: \"validation_error\",\n code: \"elements_not_ready\",\n message: \"Wait for all elements to fire 'ready' event before tokenize()\",\n retryable: false,\n });\n }\n\n this.tokenizeInFlight = true;\n try {\n return await this.doTokenize(cardNumber, paymentId, idempotencyKey);\n } finally {\n this.tokenizeInFlight = false;\n }\n }\n\n private doTokenize(\n cardNumber: Element,\n paymentId: string,\n idempotencyKey: string,\n ): Promise<TokenizeResult> {\n const iframeOrigin = new URL(this.iframeBase).origin;\n // C1: obtain reference to the cardNumber iframe's contentWindow before\n // registering the listener so we can filter by source.\n const cardIframeWindow = cardNumber.getIframeContentWindow();\n\n return new Promise<TokenizeResult>((resolve, reject) => {\n // C3: 30-second timeout — rejects and cleans up if no result arrives.\n const timer = window.setTimeout(() => {\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type: \"network_error\",\n code: \"tokenize_timeout\",\n message: \"tokenize() timed out after 30 seconds\",\n retryable: true,\n paymentId,\n }),\n );\n }, 30_000);\n\n const onMessage = (event: MessageEvent) => {\n // C1: source guard — only accept messages from the cardNumber iframe.\n if (cardIframeWindow !== null && event.source !== cardIframeWindow) return;\n // C4: use parseIncoming for origin + arcpay: prefix guard.\n const data = parseIncoming<IframeToParent>(event, iframeOrigin);\n if (!data) return;\n\n if (data.type === \"arcpay:tokenize-result\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n resolve({\n cardTokenId: data.cardTokenId,\n cardMask: data.cardMask,\n cardScheme: data.cardScheme,\n cardBin: data.cardBin,\n expiresIn: data.expiresIn,\n expiresAt: data.expiresAt,\n });\n } else if (data.type === \"arcpay:tokenize-error\") {\n clearTimeout(timer);\n window.removeEventListener(\"message\", onMessage);\n reject(\n new ArcPayError({\n type:\n data.errorType === \"validation_error\" ||\n data.errorType === \"configuration_error\" ||\n data.errorType === \"network_error\" ||\n data.errorType === \"api_error\"\n ? data.errorType\n : \"api_error\",\n code: data.code,\n message: data.message,\n retryable: false,\n paymentId,\n }),\n );\n }\n };\n\n window.addEventListener(\"message\", onMessage);\n cardNumber.send({ type: \"arcpay:tokenize\", paymentId, idempotencyKey });\n });\n }\n\n destroy(): void {\n for (const el of this.elementMap.values()) {\n el.destroy();\n }\n this.elementMap.clear();\n }\n}\n","import {\n detectEnvironment,\n type Environment,\n validatePublishableKey as _validatePublishableKey,\n} from \"./env\";\nimport { showSandboxBanner } from \"./sandbox-banner\";\nimport { Elements, type ElementsOptions } from \"../elements/elements\";\n\nconst validatePublishableKey: (key: unknown) => asserts key is string = _validatePublishableKey;\n\nexport interface ArcPayLoadOptions {\n readonly _reserved?: never;\n}\n\nexport interface ArcPayInstance {\n readonly publishableKey: string;\n readonly environment: Environment;\n elements: (opts?: ElementsOptions) => Elements;\n}\n\nconst cache = new Map<string, Promise<ArcPayInstance>>();\n\nconst buildInstance = (publishableKey: string): ArcPayInstance => {\n if (detectEnvironment(publishableKey) === \"sandbox\") {\n showSandboxBanner();\n }\n return {\n publishableKey,\n environment: detectEnvironment(publishableKey),\n elements: (opts = {}) => new Elements({ publishableKey, ...opts }),\n };\n};\n\nfunction load(publishableKey: string): Promise<ArcPayInstance> {\n try {\n validatePublishableKey(publishableKey);\n } catch (err) {\n return Promise.reject(err);\n }\n const key = publishableKey;\n const existing = cache.get(key);\n if (existing) return existing;\n const promise = Promise.resolve(buildInstance(publishableKey));\n cache.set(key, promise);\n return promise;\n}\n\nconst resetForTests = (): void => {\n cache.clear();\n};\n\nexport const ArcPay = {\n load,\n __resetForTests: resetForTests,\n};\n","import { ArcPay, type ArcPayInstance } from \"../index\";\nimport * as React from \"react\";\n\nexport type ArcPayState =\n | { status: \"loading\"; instance: null; error: null }\n | { status: \"ready\"; instance: ArcPayInstance; error: null }\n | { status: \"error\"; instance: null; error: Error };\n\nconst Ctx = React.createContext<ArcPayState | null>(null);\n\nexport interface ArcPayProviderProps {\n publishableKey: string;\n children: React.ReactNode;\n}\n\nexport const ArcPayProvider: React.FC<ArcPayProviderProps> = ({ publishableKey, children }) => {\n const [state, setState] = React.useState<ArcPayState>({\n status: \"loading\",\n instance: null,\n error: null,\n });\n\n React.useEffect(() => {\n let canceled = false;\n ArcPay.load(publishableKey)\n .then((instance) => {\n if (!canceled) setState({ status: \"ready\", instance, error: null });\n })\n .catch((error: unknown) => {\n if (!canceled)\n setState({\n status: \"error\",\n instance: null,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n });\n return () => {\n canceled = true;\n };\n }, [publishableKey]);\n\n return <Ctx.Provider value={state}>{children}</Ctx.Provider>;\n};\n\nexport const ArcPayContext = Ctx;\n","import * as React from \"react\";\nimport { ArcPayContext, type ArcPayState } from \"./provider\";\n\nexport const useArcPay = (): ArcPayState => {\n const ctx = React.useContext(ArcPayContext);\n if (!ctx) throw new Error(\"useArcPay must be called within an ArcPayProvider\");\n return ctx;\n};\n","export { ArcPayProvider, ArcPayContext } from \"./provider\";\nexport type { ArcPayProviderProps, ArcPayState } from \"./provider\";\nexport { useArcPay } from \"./use-arcpay\";\nexport const REACT_WRAPPER_VERSION = \"0.1.27\";\n"]}
|