@usdctofiat/offramp 4.4.7 → 4.4.9

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/react.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  isPeerExtensionMetadataBridgeAvailable,
11
11
  offramp,
12
12
  peerExtensionSdk
13
- } from "./chunk-4DUIEYWQ.js";
13
+ } from "./chunk-QOVUUH5L.js";
14
14
 
15
15
  // src/hooks/useOfframp.ts
16
16
  import { useCallback, useRef, useState } from "react";
@@ -241,8 +241,8 @@ function usePeerExtensionRegistration(platform, options = {}) {
241
241
  [startRegistrationCapture]
242
242
  );
243
243
  const completeRegistration = useCallback2(
244
- async (walletClient, params, options2 = {}) => {
245
- const metadata = options2.capturedMetadata ?? capturedMetadata;
244
+ async (walletClient, params, registrationOptions = {}) => {
245
+ const metadata = registrationOptions.capturedMetadata ?? capturedMetadata;
246
246
  if (!metadata) {
247
247
  const message = "No Peer metadata captured yet. Start registration first.";
248
248
  setError(message);
@@ -256,7 +256,7 @@ function usePeerExtensionRegistration(platform, options = {}) {
256
256
  identifier: params.identifier,
257
257
  capturedMetadata: metadata
258
258
  });
259
- return await offramp(walletClient, params, options2.onProgress);
259
+ return await offramp(walletClient, params, registrationOptions.onProgress);
260
260
  } catch (err) {
261
261
  setError(
262
262
  err instanceof Error ? err.message : "Couldn't complete Peer extension registration. Try capturing metadata again."
@@ -266,7 +266,7 @@ function usePeerExtensionRegistration(platform, options = {}) {
266
266
  if (mountedRef.current) setBusy(false);
267
267
  }
268
268
  },
269
- [callerAddress, capturedMetadata]
269
+ [capturedMetadata]
270
270
  );
271
271
  return {
272
272
  phase,
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/useOfframp.ts","../src/hooks/usePeerExtensionRegistration.ts"],"sourcesContent":["import { useCallback, useRef, useState } from \"react\";\nimport type { WalletClient } from \"viem\";\nimport type {\n OfframpCreateOptions,\n OfframpParams,\n OfframpResult,\n OfframpState,\n OfframpStep,\n DepositInfo,\n} from \"../types\";\nimport { createOfframp } from \"../offramp\";\nimport { deposits as depositsFn, close as closeFn } from \"../queries\";\nimport { OfframpError } from \"../errors\";\n\nexport interface UseOfframpReturn {\n state: OfframpState;\n step: OfframpStep | null;\n txHash: string | null;\n depositId: string | null;\n lastError: OfframpError | null;\n /** @deprecated Use `lastError` instead. */\n error: OfframpError | null;\n isLoading: boolean;\n offramp: (walletClient: WalletClient, params: OfframpParams) => Promise<OfframpResult>;\n deposits: (walletAddress: string) => Promise<DepositInfo[]>;\n close: (walletClient: WalletClient, depositId: string, escrowAddress?: string) => Promise<string>;\n reset: () => void;\n}\n\nfunction mapStepToState(step: OfframpStep): OfframpState {\n if (step === \"resuming\" || step === \"restricting\") return \"delegating\";\n if (step === \"done\") return \"done\";\n return step;\n}\n\nexport function useOfframp(defaultOptions: OfframpCreateOptions = {}): UseOfframpReturn {\n const [state, setState] = useState<OfframpState>(\"idle\");\n const [step, setStep] = useState<OfframpStep | null>(null);\n const [txHash, setTxHash] = useState<string | null>(null);\n const [depositId, setDepositId] = useState<string | null>(null);\n const [lastError, setLastError] = useState<OfframpError | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const lockRef = useRef(false);\n\n const reset = useCallback(() => {\n setState(\"idle\");\n setStep(null);\n setTxHash(null);\n setDepositId(null);\n setLastError(null);\n setIsLoading(false);\n lockRef.current = false;\n }, []);\n\n const offramp = useCallback(\n async (walletClient: WalletClient, params: OfframpParams): Promise<OfframpResult> => {\n if (lockRef.current) throw new OfframpError(\"Deposit already in progress\", \"VALIDATION\");\n lockRef.current = true;\n setIsLoading(true);\n setState(\"idle\");\n setLastError(null);\n setStep(null);\n setTxHash(null);\n setDepositId(null);\n\n try {\n const sdk = createOfframp({\n walletClient,\n integratorId: params.integratorId ?? defaultOptions.integratorId,\n referralId: params.referralId ?? defaultOptions.referralId,\n telemetry: defaultOptions.telemetry,\n });\n const result = await sdk.createDeposit(params, (progress) => {\n setStep(progress.step);\n setState(mapStepToState(progress.step));\n if (progress.txHash) setTxHash(progress.txHash);\n if (progress.depositId) setDepositId(progress.depositId);\n });\n setState(\"done\");\n setDepositId(result.depositId);\n setTxHash(result.txHash);\n return result;\n } catch (err) {\n const offrampError =\n err instanceof OfframpError\n ? err\n : new OfframpError(\n err instanceof Error ? err.message : \"Offramp failed\",\n \"DEPOSIT_FAILED\",\n );\n setLastError(offrampError);\n setState(\"error\");\n throw offrampError;\n } finally {\n setIsLoading(false);\n lockRef.current = false;\n }\n },\n [defaultOptions.integratorId, defaultOptions.referralId, defaultOptions.telemetry],\n );\n\n return {\n state,\n step,\n txHash,\n depositId,\n lastError,\n error: lastError,\n isLoading,\n offramp,\n deposits: depositsFn,\n close: closeFn,\n reset,\n };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { WalletClient } from \"viem\";\nimport { offramp as createDeposit } from \"../deposit\";\nimport {\n peerExtensionSdk,\n isPeerExtensionMetadataBridgeAvailable,\n type PeerExtensionState,\n DEFAULT_EXTENSION_INSTALL_URL,\n type PeerMetadataMessage,\n} from \"../extension\";\nimport {\n completePeerExtensionRegistration,\n getPeerExtensionRegistrationAuthParams,\n getPeerExtensionRegistrationInfo,\n type PeerExtensionRegistrationInfo,\n type PlatformEntry,\n} from \"../platforms\";\nimport type { OfframpParams, OfframpResult, OnProgress } from \"../types\";\n\n/**\n * Phase surfaced to callers:\n * - `checking` — polling the extension state on mount\n * - `needs_install` — the Peer extension is not installed; call\n * `installExtension()` or surface the install URL\n * - `needs_connection` — the extension is installed but this origin is not\n * yet approved; call `connectExtension()` to trigger the Peer approval\n * prompt\n * - `ready` — extension installed and origin approved; call\n * `startRegistrationCapture()` to launch headless metadata capture, or just\n * retry the `offramp(...)` call\n * - `unsupported` — the provided platform does not require extension\n * registration; the hook is a no-op for it\n */\nexport type PeerExtensionRegistrationPhase =\n | \"checking\"\n | \"needs_install\"\n | \"needs_connection\"\n | \"ready\"\n | \"unsupported\";\n\nexport interface UsePeerExtensionRegistrationReturn {\n /** Current handshake phase. */\n phase: PeerExtensionRegistrationPhase;\n /**\n * Registration metadata for this platform (prompt copy, CTA label, min\n * extension version). `null` for platforms that don't require extension\n * registration, in which case `phase === \"unsupported\"`.\n */\n info: PeerExtensionRegistrationInfo | null;\n /** True while a `requestConnection()` or initial state check is in flight. */\n busy: boolean;\n /** Last error from `requestConnection()` / `authenticate()`, if any. */\n error: string | null;\n /** Last metadata payload captured for this platform. */\n capturedMetadata: PeerMetadataMessage | null;\n /** Re-poll `peerExtensionSdk.getState()`. Call after the user finishes metadata capture. */\n refresh: () => Promise<void>;\n /**\n * Open the Chrome Web Store listing for the Peer extension. Falls back to\n * `window.open(DEFAULT_EXTENSION_INSTALL_URL)` outside of browsers where\n * `openInstallPage()` would throw.\n */\n installExtension: () => void;\n /**\n * Request an origin connection. Triggers the Peer extension's approval\n * prompt. Returns `true` if the user approved, `false` otherwise.\n */\n connectExtension: () => Promise<boolean>;\n /**\n * Launch headless Peer metadata capture for this provider. Safe to call from\n * any phase — the hook will fall back to install/connect if those steps\n * aren't done yet.\n */\n startRegistrationCapture: () => Promise<void>;\n /**\n * Deprecated compatibility alias for `startRegistrationCapture()`.\n */\n openVerifySidebar: () => Promise<void>;\n completeRegistration: (\n walletClient: WalletClient,\n params: OfframpParams,\n options?: {\n capturedMetadata?: PeerMetadataMessage;\n onProgress?: OnProgress;\n attestationServiceUrl?: string | null;\n },\n ) => Promise<OfframpResult>;\n}\n\n/**\n * React hook that drives the Peer extension handshake required for PayPal\n * and Wise makers.\n *\n * ```tsx\n * import { PLATFORMS } from \"@usdctofiat/offramp\";\n * import { useOfframp, usePeerExtensionRegistration } from \"@usdctofiat/offramp/react\";\n *\n * function PayPalSellButton() {\n * const { offramp, lastError } = useOfframp();\n * const peer = usePeerExtensionRegistration(PLATFORMS.PAYPAL);\n *\n * const needsExtension = lastError?.code === \"EXTENSION_REGISTRATION_REQUIRED\";\n *\n * return (\n * <>\n * <button onClick={() => offramp(walletClient, params)}>Sell USDC</button>\n * {needsExtension && peer.phase === \"needs_install\" && (\n * <button onClick={peer.installExtension}>Install Peer Extension</button>\n * )}\n * {needsExtension && peer.phase === \"needs_connection\" && (\n * <button onClick={peer.connectExtension} disabled={peer.busy}>\n * Connect Peer Extension\n * </button>\n * )}\n * {needsExtension && peer.phase === \"ready\" && (\n * <button onClick={peer.startRegistrationCapture}>Register with Peer</button>\n * )}\n * </>\n * );\n * }\n * ```\n */\nexport function usePeerExtensionRegistration(\n platform: PlatformEntry | null | undefined,\n options: { callerAddress?: string | null; attestationServiceUrl?: string | null } = {},\n): UsePeerExtensionRegistrationReturn {\n const platformId = platform?.id ?? null;\n const info = platformId ? getPeerExtensionRegistrationInfo(platformId) : null;\n const callerAddress = options.callerAddress?.trim() || null;\n const attestationServiceUrl = options.attestationServiceUrl ?? null;\n const authParams = useMemo(\n () =>\n platformId\n ? getPeerExtensionRegistrationAuthParams(platformId, {\n attestationServiceUrl,\n callerAddress,\n })\n : null,\n [attestationServiceUrl, callerAddress, platformId],\n );\n const [phase, setPhase] = useState<PeerExtensionRegistrationPhase>(\n info ? \"checking\" : \"unsupported\",\n );\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [capturedMetadata, setCapturedMetadata] = useState<PeerMetadataMessage | null>(null);\n const mountedRef = useRef(true);\n const providerId = info?.providerId ?? null;\n const metadataPlatform = authParams?.platform ?? null;\n\n const refresh = useCallback(async () => {\n if (!providerId) {\n setPhase(\"unsupported\");\n return;\n }\n try {\n const state = await peerExtensionSdk.getState();\n if (!mountedRef.current) return;\n if (state === \"ready\" && !isPeerExtensionMetadataBridgeAvailable()) {\n setPhase(\"needs_install\");\n return;\n }\n setPhase(mapSdkState(state));\n } catch {\n if (!mountedRef.current) return;\n setPhase(\"needs_install\");\n }\n }, [providerId]);\n\n useEffect(() => {\n mountedRef.current = true;\n setError(null);\n setBusy(false);\n setCapturedMetadata(null);\n if (!providerId) {\n setPhase(\"unsupported\");\n } else {\n setPhase(\"checking\");\n refresh();\n }\n return () => {\n mountedRef.current = false;\n };\n }, [providerId, refresh]);\n\n useEffect(() => {\n setCapturedMetadata(null);\n if (!metadataPlatform) return;\n\n try {\n return peerExtensionSdk.onMetadataMessage((message) => {\n if (!mountedRef.current || message.platform !== metadataPlatform) return;\n setCapturedMetadata(message);\n if (message.errorMessage) {\n setError(message.errorMessage);\n }\n });\n } catch {\n return;\n }\n }, [metadataPlatform, phase]);\n\n const installExtension = useCallback(() => {\n setError(null);\n try {\n peerExtensionSdk.openInstallPage();\n } catch {\n if (typeof window !== \"undefined\") {\n window.open(DEFAULT_EXTENSION_INSTALL_URL, \"_blank\", \"noopener,noreferrer\");\n }\n }\n }, []);\n\n const connectExtension = useCallback(async (): Promise<boolean> => {\n if (!authParams) return false;\n setError(null);\n setBusy(true);\n try {\n const approved = await peerExtensionSdk.requestConnection();\n if (!mountedRef.current) return approved;\n if (approved) {\n setPhase(isPeerExtensionMetadataBridgeAvailable() ? \"ready\" : \"needs_install\");\n } else {\n setError(\"Connection was not approved. Try again once you've approved Peer.\");\n }\n return approved;\n } catch (err) {\n if (!mountedRef.current) return false;\n setError(\n err instanceof Error\n ? err.message\n : \"Couldn't request a Peer extension connection. Make sure Peer is installed and enabled.\",\n );\n refresh();\n return false;\n } finally {\n if (mountedRef.current) setBusy(false);\n }\n }, [authParams, refresh]);\n\n const startRegistrationCapture = useCallback(async () => {\n if (!authParams) return;\n setError(null);\n setBusy(true);\n try {\n const state = await peerExtensionSdk.getState().catch(() => \"needs_install\" as const);\n if (!mountedRef.current) return;\n const nextPhase =\n state === \"ready\" && !isPeerExtensionMetadataBridgeAvailable()\n ? \"needs_install\"\n : mapSdkState(state);\n setPhase(nextPhase);\n if (nextPhase === \"needs_install\") {\n installExtension();\n return;\n }\n if (nextPhase === \"needs_connection\") {\n const approved = await peerExtensionSdk.requestConnection();\n if (!mountedRef.current) return;\n if (!approved) {\n setError(\"Connection was not approved. Try again once you've approved Peer.\");\n return;\n }\n if (!isPeerExtensionMetadataBridgeAvailable()) {\n setPhase(\"needs_install\");\n installExtension();\n return;\n }\n setPhase(\"ready\");\n }\n setCapturedMetadata(null);\n peerExtensionSdk.authenticate(authParams);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : \"Couldn't start Peer extension registration. Make sure Peer is enabled.\",\n );\n refresh();\n } finally {\n if (mountedRef.current) setBusy(false);\n }\n }, [authParams, installExtension, refresh]);\n\n const openVerifySidebar = useCallback(\n async () => startRegistrationCapture(),\n [startRegistrationCapture],\n );\n\n const completeRegistration = useCallback(\n async (\n walletClient: WalletClient,\n params: OfframpParams,\n options: {\n capturedMetadata?: PeerMetadataMessage;\n onProgress?: OnProgress;\n attestationServiceUrl?: string | null;\n } = {},\n ): Promise<OfframpResult> => {\n const metadata = options.capturedMetadata ?? capturedMetadata;\n if (!metadata) {\n const message = \"No Peer metadata captured yet. Start registration first.\";\n setError(message);\n throw new Error(message);\n }\n\n setError(null);\n setBusy(true);\n try {\n await completePeerExtensionRegistration({\n platform: params.platform,\n identifier: params.identifier,\n capturedMetadata: metadata,\n });\n return await createDeposit(walletClient, params, options.onProgress);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : \"Couldn't complete Peer extension registration. Try capturing metadata again.\",\n );\n throw err;\n } finally {\n if (mountedRef.current) setBusy(false);\n }\n },\n [callerAddress, capturedMetadata],\n );\n\n return {\n phase,\n info,\n busy,\n error,\n capturedMetadata,\n refresh,\n installExtension,\n connectExtension,\n startRegistrationCapture,\n openVerifySidebar,\n completeRegistration,\n };\n}\n\nfunction mapSdkState(state: PeerExtensionState): PeerExtensionRegistrationPhase {\n if (state === \"needs_install\") return \"needs_install\";\n if (state === \"needs_connection\") return \"needs_connection\";\n return \"ready\";\n}\n"],"mappings":"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","names":["offramp","useCallback","useRef","useState","useState","useRef","useCallback","options"]}
1
+ {"version":3,"sources":["../src/hooks/useOfframp.ts","../src/hooks/usePeerExtensionRegistration.ts"],"sourcesContent":["import { useCallback, useRef, useState } from \"react\";\nimport type { WalletClient } from \"viem\";\nimport type {\n OfframpCreateOptions,\n OfframpParams,\n OfframpResult,\n OfframpState,\n OfframpStep,\n DepositInfo,\n} from \"../types\";\nimport { createOfframp } from \"../offramp\";\nimport { deposits as depositsFn, close as closeFn } from \"../queries\";\nimport { OfframpError } from \"../errors\";\n\nexport interface UseOfframpReturn {\n state: OfframpState;\n step: OfframpStep | null;\n txHash: string | null;\n depositId: string | null;\n lastError: OfframpError | null;\n /** @deprecated Use `lastError` instead. */\n error: OfframpError | null;\n isLoading: boolean;\n offramp: (walletClient: WalletClient, params: OfframpParams) => Promise<OfframpResult>;\n deposits: (walletAddress: string) => Promise<DepositInfo[]>;\n close: (walletClient: WalletClient, depositId: string, escrowAddress?: string) => Promise<string>;\n reset: () => void;\n}\n\nfunction mapStepToState(step: OfframpStep): OfframpState {\n if (step === \"resuming\" || step === \"restricting\") return \"delegating\";\n if (step === \"done\") return \"done\";\n return step;\n}\n\nexport function useOfframp(defaultOptions: OfframpCreateOptions = {}): UseOfframpReturn {\n const [state, setState] = useState<OfframpState>(\"idle\");\n const [step, setStep] = useState<OfframpStep | null>(null);\n const [txHash, setTxHash] = useState<string | null>(null);\n const [depositId, setDepositId] = useState<string | null>(null);\n const [lastError, setLastError] = useState<OfframpError | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const lockRef = useRef(false);\n\n const reset = useCallback(() => {\n setState(\"idle\");\n setStep(null);\n setTxHash(null);\n setDepositId(null);\n setLastError(null);\n setIsLoading(false);\n lockRef.current = false;\n }, []);\n\n const offramp = useCallback(\n async (walletClient: WalletClient, params: OfframpParams): Promise<OfframpResult> => {\n if (lockRef.current) throw new OfframpError(\"Deposit already in progress\", \"VALIDATION\");\n lockRef.current = true;\n setIsLoading(true);\n setState(\"idle\");\n setLastError(null);\n setStep(null);\n setTxHash(null);\n setDepositId(null);\n\n try {\n const sdk = createOfframp({\n walletClient,\n integratorId: params.integratorId ?? defaultOptions.integratorId,\n referralId: params.referralId ?? defaultOptions.referralId,\n telemetry: defaultOptions.telemetry,\n });\n const result = await sdk.createDeposit(params, (progress) => {\n setStep(progress.step);\n setState(mapStepToState(progress.step));\n if (progress.txHash) setTxHash(progress.txHash);\n if (progress.depositId) setDepositId(progress.depositId);\n });\n setState(\"done\");\n setDepositId(result.depositId);\n setTxHash(result.txHash);\n return result;\n } catch (err) {\n const offrampError =\n err instanceof OfframpError\n ? err\n : new OfframpError(\n err instanceof Error ? err.message : \"Offramp failed\",\n \"DEPOSIT_FAILED\",\n );\n setLastError(offrampError);\n setState(\"error\");\n throw offrampError;\n } finally {\n setIsLoading(false);\n lockRef.current = false;\n }\n },\n [defaultOptions.integratorId, defaultOptions.referralId, defaultOptions.telemetry],\n );\n\n return {\n state,\n step,\n txHash,\n depositId,\n lastError,\n error: lastError,\n isLoading,\n offramp,\n deposits: depositsFn,\n close: closeFn,\n reset,\n };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { WalletClient } from \"viem\";\nimport { offramp as createDeposit } from \"../deposit\";\nimport {\n peerExtensionSdk,\n isPeerExtensionMetadataBridgeAvailable,\n type PeerExtensionState,\n DEFAULT_EXTENSION_INSTALL_URL,\n type PeerMetadataMessage,\n} from \"../extension\";\nimport {\n completePeerExtensionRegistration,\n getPeerExtensionRegistrationAuthParams,\n getPeerExtensionRegistrationInfo,\n type PeerExtensionRegistrationInfo,\n type PlatformEntry,\n} from \"../platforms\";\nimport type { OfframpParams, OfframpResult, OnProgress } from \"../types\";\n\n/**\n * Phase surfaced to callers:\n * - `checking` — polling the extension state on mount\n * - `needs_install` — the Peer extension is not installed; call\n * `installExtension()` or surface the install URL\n * - `needs_connection` — the extension is installed but this origin is not\n * yet approved; call `connectExtension()` to trigger the Peer approval\n * prompt\n * - `ready` — extension installed and origin approved; call\n * `startRegistrationCapture()` to launch headless metadata capture, or just\n * retry the `offramp(...)` call\n * - `unsupported` — the provided platform does not require extension\n * registration; the hook is a no-op for it\n */\nexport type PeerExtensionRegistrationPhase =\n | \"checking\"\n | \"needs_install\"\n | \"needs_connection\"\n | \"ready\"\n | \"unsupported\";\n\nexport interface UsePeerExtensionRegistrationReturn {\n /** Current handshake phase. */\n phase: PeerExtensionRegistrationPhase;\n /**\n * Registration metadata for this platform (prompt copy, CTA label, min\n * extension version). `null` for platforms that don't require extension\n * registration, in which case `phase === \"unsupported\"`.\n */\n info: PeerExtensionRegistrationInfo | null;\n /** True while a `requestConnection()` or initial state check is in flight. */\n busy: boolean;\n /** Last error from `requestConnection()` / `authenticate()`, if any. */\n error: string | null;\n /** Last metadata payload captured for this platform. */\n capturedMetadata: PeerMetadataMessage | null;\n /** Re-poll `peerExtensionSdk.getState()`. Call after the user finishes metadata capture. */\n refresh: () => Promise<void>;\n /**\n * Open the Chrome Web Store listing for the Peer extension. Falls back to\n * `window.open(DEFAULT_EXTENSION_INSTALL_URL)` outside of browsers where\n * `openInstallPage()` would throw.\n */\n installExtension: () => void;\n /**\n * Request an origin connection. Triggers the Peer extension's approval\n * prompt. Returns `true` if the user approved, `false` otherwise.\n */\n connectExtension: () => Promise<boolean>;\n /**\n * Launch headless Peer metadata capture for this provider. Safe to call from\n * any phase — the hook will fall back to install/connect if those steps\n * aren't done yet.\n */\n startRegistrationCapture: () => Promise<void>;\n /**\n * Deprecated compatibility alias for `startRegistrationCapture()`.\n */\n openVerifySidebar: () => Promise<void>;\n completeRegistration: (\n walletClient: WalletClient,\n params: OfframpParams,\n options?: {\n capturedMetadata?: PeerMetadataMessage;\n onProgress?: OnProgress;\n attestationServiceUrl?: string | null;\n },\n ) => Promise<OfframpResult>;\n}\n\n/**\n * React hook that drives the Peer extension handshake required for PayPal\n * and Wise makers.\n *\n * ```tsx\n * import { PLATFORMS } from \"@usdctofiat/offramp\";\n * import { useOfframp, usePeerExtensionRegistration } from \"@usdctofiat/offramp/react\";\n *\n * function PayPalSellButton() {\n * const { offramp, lastError } = useOfframp();\n * const peer = usePeerExtensionRegistration(PLATFORMS.PAYPAL);\n *\n * const needsExtension = lastError?.code === \"EXTENSION_REGISTRATION_REQUIRED\";\n *\n * return (\n * <>\n * <button onClick={() => offramp(walletClient, params)}>Sell USDC</button>\n * {needsExtension && peer.phase === \"needs_install\" && (\n * <button onClick={peer.installExtension}>Install Peer Extension</button>\n * )}\n * {needsExtension && peer.phase === \"needs_connection\" && (\n * <button onClick={peer.connectExtension} disabled={peer.busy}>\n * Connect Peer Extension\n * </button>\n * )}\n * {needsExtension && peer.phase === \"ready\" && (\n * <button onClick={peer.startRegistrationCapture}>Register with Peer</button>\n * )}\n * </>\n * );\n * }\n * ```\n */\nexport function usePeerExtensionRegistration(\n platform: PlatformEntry | null | undefined,\n options: { callerAddress?: string | null; attestationServiceUrl?: string | null } = {},\n): UsePeerExtensionRegistrationReturn {\n const platformId = platform?.id ?? null;\n const info = platformId ? getPeerExtensionRegistrationInfo(platformId) : null;\n const callerAddress = options.callerAddress?.trim() || null;\n const attestationServiceUrl = options.attestationServiceUrl ?? null;\n const authParams = useMemo(\n () =>\n platformId\n ? getPeerExtensionRegistrationAuthParams(platformId, {\n attestationServiceUrl,\n callerAddress,\n })\n : null,\n [attestationServiceUrl, callerAddress, platformId],\n );\n const [phase, setPhase] = useState<PeerExtensionRegistrationPhase>(\n info ? \"checking\" : \"unsupported\",\n );\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [capturedMetadata, setCapturedMetadata] = useState<PeerMetadataMessage | null>(null);\n const mountedRef = useRef(true);\n const providerId = info?.providerId ?? null;\n const metadataPlatform = authParams?.platform ?? null;\n\n const refresh = useCallback(async () => {\n if (!providerId) {\n setPhase(\"unsupported\");\n return;\n }\n try {\n const state = await peerExtensionSdk.getState();\n if (!mountedRef.current) return;\n if (state === \"ready\" && !isPeerExtensionMetadataBridgeAvailable()) {\n setPhase(\"needs_install\");\n return;\n }\n setPhase(mapSdkState(state));\n } catch {\n if (!mountedRef.current) return;\n setPhase(\"needs_install\");\n }\n }, [providerId]);\n\n useEffect(() => {\n mountedRef.current = true;\n setError(null);\n setBusy(false);\n setCapturedMetadata(null);\n if (!providerId) {\n setPhase(\"unsupported\");\n } else {\n setPhase(\"checking\");\n refresh();\n }\n return () => {\n mountedRef.current = false;\n };\n }, [providerId, refresh]);\n\n useEffect(() => {\n setCapturedMetadata(null);\n if (!metadataPlatform) return;\n\n try {\n return peerExtensionSdk.onMetadataMessage((message) => {\n if (!mountedRef.current || message.platform !== metadataPlatform) return;\n setCapturedMetadata(message);\n if (message.errorMessage) {\n setError(message.errorMessage);\n }\n });\n } catch {\n return;\n }\n }, [metadataPlatform, phase]);\n\n const installExtension = useCallback(() => {\n setError(null);\n try {\n peerExtensionSdk.openInstallPage();\n } catch {\n if (typeof window !== \"undefined\") {\n window.open(DEFAULT_EXTENSION_INSTALL_URL, \"_blank\", \"noopener,noreferrer\");\n }\n }\n }, []);\n\n const connectExtension = useCallback(async (): Promise<boolean> => {\n if (!authParams) return false;\n setError(null);\n setBusy(true);\n try {\n const approved = await peerExtensionSdk.requestConnection();\n if (!mountedRef.current) return approved;\n if (approved) {\n setPhase(isPeerExtensionMetadataBridgeAvailable() ? \"ready\" : \"needs_install\");\n } else {\n setError(\"Connection was not approved. Try again once you've approved Peer.\");\n }\n return approved;\n } catch (err) {\n if (!mountedRef.current) return false;\n setError(\n err instanceof Error\n ? err.message\n : \"Couldn't request a Peer extension connection. Make sure Peer is installed and enabled.\",\n );\n refresh();\n return false;\n } finally {\n if (mountedRef.current) setBusy(false);\n }\n }, [authParams, refresh]);\n\n const startRegistrationCapture = useCallback(async () => {\n if (!authParams) return;\n setError(null);\n setBusy(true);\n try {\n const state = await peerExtensionSdk.getState().catch(() => \"needs_install\" as const);\n if (!mountedRef.current) return;\n const nextPhase =\n state === \"ready\" && !isPeerExtensionMetadataBridgeAvailable()\n ? \"needs_install\"\n : mapSdkState(state);\n setPhase(nextPhase);\n if (nextPhase === \"needs_install\") {\n installExtension();\n return;\n }\n if (nextPhase === \"needs_connection\") {\n const approved = await peerExtensionSdk.requestConnection();\n if (!mountedRef.current) return;\n if (!approved) {\n setError(\"Connection was not approved. Try again once you've approved Peer.\");\n return;\n }\n if (!isPeerExtensionMetadataBridgeAvailable()) {\n setPhase(\"needs_install\");\n installExtension();\n return;\n }\n setPhase(\"ready\");\n }\n setCapturedMetadata(null);\n peerExtensionSdk.authenticate(authParams);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : \"Couldn't start Peer extension registration. Make sure Peer is enabled.\",\n );\n refresh();\n } finally {\n if (mountedRef.current) setBusy(false);\n }\n }, [authParams, installExtension, refresh]);\n\n const openVerifySidebar = useCallback(\n async () => startRegistrationCapture(),\n [startRegistrationCapture],\n );\n\n const completeRegistration = useCallback(\n async (\n walletClient: WalletClient,\n params: OfframpParams,\n registrationOptions: {\n capturedMetadata?: PeerMetadataMessage;\n onProgress?: OnProgress;\n attestationServiceUrl?: string | null;\n } = {},\n ): Promise<OfframpResult> => {\n const metadata = registrationOptions.capturedMetadata ?? capturedMetadata;\n if (!metadata) {\n const message = \"No Peer metadata captured yet. Start registration first.\";\n setError(message);\n throw new Error(message);\n }\n\n setError(null);\n setBusy(true);\n try {\n await completePeerExtensionRegistration({\n platform: params.platform,\n identifier: params.identifier,\n capturedMetadata: metadata,\n });\n return await createDeposit(walletClient, params, registrationOptions.onProgress);\n } catch (err) {\n setError(\n err instanceof Error\n ? err.message\n : \"Couldn't complete Peer extension registration. Try capturing metadata again.\",\n );\n throw err;\n } finally {\n if (mountedRef.current) setBusy(false);\n }\n },\n [capturedMetadata],\n );\n\n return {\n phase,\n info,\n busy,\n error,\n capturedMetadata,\n refresh,\n installExtension,\n connectExtension,\n startRegistrationCapture,\n openVerifySidebar,\n completeRegistration,\n };\n}\n\nfunction mapSdkState(state: PeerExtensionState): PeerExtensionRegistrationPhase {\n if (state === \"needs_install\") return \"needs_install\";\n if (state === \"needs_connection\") return \"needs_connection\";\n return \"ready\";\n}\n"],"mappings":"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","names":["offramp","useCallback","useRef","useState","useState","useRef","useCallback"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usdctofiat/offramp",
3
- "version": "4.4.7",
3
+ "version": "4.4.9",
4
4
  "description": "USDC-to-fiat offramp SDK — create delegated deposits in one function call",
5
5
  "license": "MIT",
6
6
  "author": "Galleon Labs",