@metamask-previews/kyc-controller 0.10.0-preview-32b6da31c → 0.10.0-preview-eefc6963e

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/CHANGELOG.md CHANGED
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Removed
11
+
12
+ - **BREAKING:** Remove `MoonPayFrameHandler`, `MoonPayFrameHandlerOptions`, and `clearMoonPaySession` ([#10850](https://github.com/MetaMask/core/pull/10850))
13
+ - Clients that embedded MoonPay Check/Auth frames must implement that protocol themselves
14
+
10
15
  ## [0.10.0]
11
16
 
12
17
  ### Added
package/dist/index.d.ts CHANGED
@@ -19,6 +19,4 @@ export { encodeStorageAccessTokenForHeader, signStorageAccessToken, } from './uk
19
19
  export type { SignStorageAccessTokenParams, UkycStorageAccessToken, UkycStorageAccessTokenPayload, UkycStorageOperation, UkycTokenPresenter, } from './ukyc/storageAccessToken.js';
20
20
  export { mintUkycTestToken } from './ukyc/testToken.js';
21
21
  export type { MintedUkycTestToken, MintUkycTestTokenParams, } from './ukyc/testToken.js';
22
- export { clearMoonPaySession, MoonPayFrameHandler, } from './vendors/MoonPayFrameHandler.js';
23
- export type { MoonPayFrameHandlerOptions } from './vendors/MoonPayFrameHandler.js';
24
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,5 +11,4 @@ export { UKYC_CAPABILITY_AUTH_SCHEME, UKYC_KWIL_AUDIENCE, UKYC_STORAGE_ACCESS_TO
11
11
  export { deriveClientMaterial, encodeClientMaterial, } from './ukyc/deriveClientMaterial.js';
12
12
  export { encodeStorageAccessTokenForHeader, signStorageAccessToken, } from './ukyc/storageAccessToken.js';
13
13
  export { mintUkycTestToken } from './ukyc/testToken.js';
14
- export { clearMoonPaySession, MoonPayFrameHandler, } from './vendors/MoonPayFrameHandler.js';
15
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,wCAAwC,EACxC,sCAAsC,EACtC,0BAA0B,EAC1B,cAAc,GACf,MAAM,oBAAoB,CAAC;AA+B5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6C1D,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQlE,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAkBrE,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,4CAA4C,EAC5C,mCAAmC,EACnC,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAQpB,iFAAiF;AACjF,gEAAgE;AAChE,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,kCAAkC,EAClC,mCAAmC,EACnC,iCAAiC,GAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EACL,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAMxD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kCAAkC,CAAC","sourcesContent":["export {\n KycController,\n getDefaultKycControllerState,\n getDefaultKycProviderDisclaimersAccepted,\n getDefaultKycVendorDisclaimersAccepted,\n KYC_PROVIDER_FLOW_STATUSES,\n controllerName,\n} from './KycController.js';\nexport type {\n KycControllerActions,\n KycControllerEvents,\n KycControllerGetStateAction,\n KycControllerMessenger,\n KycControllerOptions,\n KycControllerState,\n KycControllerStateChangeEvent,\n FetchSessionDisclaimersParams,\n KycProviderFlowStatus,\n} from './KycController.js';\nexport type {\n KycControllerClearStateAction,\n KycControllerFetchSessionDisclaimersAction,\n KycControllerFetchVendorDisclaimersAction,\n KycControllerGetProviderFlowStatusAction,\n KycControllerGetSessionStatusForVendorAction,\n KycControllerHasCompletedSessionDisclaimersAction,\n KycControllerHasCompletedVendorDisclaimersAction,\n KycControllerLaunchProviderFlowAction,\n KycControllerRecordSessionDisclaimersAction,\n KycControllerRecordVendorDisclaimersAction,\n KycControllerFetchSessionStatusOnceAction,\n KycControllerReadSessionStatusAction,\n KycControllerRefreshSessionStatusAction,\n KycControllerResetAction,\n KycControllerStartSessionAction,\n KycControllerStartSessionStatusPollingAction,\n} from './KycController-method-action-types.js';\n\nexport { KycService, serviceName } from './KycService.js';\nexport type {\n ApplicantAccessTokenResponse,\n CapabilityAuthorization,\n CreateVendorCustomerParams,\n CreateMoonpaySessionParams,\n CreateUkycSessionParams,\n EncryptionSchema,\n FetchSessionDisclaimersByCountryParams,\n FetchSessionDisclaimersBySessionIdParams,\n GetSessionStatusParams,\n ResetWrappingKeysParams,\n VendorCustomerResponse,\n JwksResponse,\n KycServiceActions,\n KycServiceCacheUpdatedEvent,\n KycServiceEvents,\n KycServiceGranularCacheUpdatedEvent,\n KycServiceInvalidateQueriesAction,\n KycServiceMessenger,\n KycServiceOptions,\n SetAuthorizationsParams,\n SubmitSessionDisclaimersParams,\n SubmitVendorDisclaimersParams,\n UkycSessionResponse,\n} from './KycService.js';\nexport type {\n KycServiceCreateVendorCustomerAction,\n KycServiceCreateJourneyAction,\n KycServiceCreateMoonpaySessionAction,\n KycServiceCreateUkycSessionAction,\n KycServiceFetchIdosEnclaveJwksAction,\n KycServiceFetchIdosRelayJwksAction,\n KycServiceFetchSessionDisclaimersByCountryAction,\n KycServiceFetchSessionDisclaimersBySessionIdAction,\n KycServiceFetchVendorDisclaimersAction,\n KycServiceGetGeoCountryAction,\n KycServiceGetSessionStatusAction,\n KycServiceGetSessionStatusForVendorAction,\n KycServiceResetWrappingKeysAction,\n KycServiceSetAuthorizationsAction,\n KycServiceSubmitSessionDisclaimersAction,\n KycServiceSubmitVendorDisclaimersAction,\n} from './KycService-method-action-types.js';\n\nexport { selectKycSessionStatus, selectKycVendor } from './selectors.js';\n\nexport { alpha2ToAlpha3, ALPHA2_TO_ALPHA3 } from './countryCodes.js';\nexport { decryptCredentials, generateKeyPair } from './crypto.js';\nexport type {\n DecryptedCredentials,\n DecryptResult,\n EncryptedCredentialsEnvelope,\n X25519KeyPair,\n} from './crypto.js';\n\nexport { KYC_STATUSES, TERMINAL_SESSION_STATUSES } from './types.js';\nexport type {\n KycCatalogDocument,\n KycConsentDocument,\n KycConsentRecord,\n KycDisclaimer,\n KycDisclaimersCatalog,\n KycPhase,\n KycProduct,\n KycProviderDisclaimersAccepted,\n KycSessionDisclaimers,\n KycSessionStatus,\n KycVendor,\n KycIronVendorDisclaimersAccepted,\n KycMoonpayVendorDisclaimersAccepted,\n KycVendorDisclaimersAccepted,\n KycVendorSigning,\n} from './types.js';\nexport {\n FINAL_STATUSES_TO_SKIP_AUTH_REFRESH,\n CAPABILITY_AUTHORIZATION_STATUSES,\n CAPABILITY_AUTHORIZATION_STATUSES_TO_REFRESH,\n needsCapabilityAuthorizationRefresh,\n FINAL_STATUSES_TO_STOP_POLLING,\n} from './types.js';\nexport type {\n KycSumSubLaunchParams,\n KycSumSubLauncher,\n KycSumSubSdkStatus,\n KycSumSubStatus,\n} from './providers/sumsub.js';\n\n// UKYC storage-access-token utilities. Exported so a signed capability token can\n// be minted for testing UKYC Storage (see `mintUkycTestToken`).\nexport {\n UKYC_CAPABILITY_AUTH_SCHEME,\n UKYC_KWIL_AUDIENCE,\n UKYC_STORAGE_ACCESS_TOKEN_AUDIENCE,\n UKYC_STORAGE_ACCESS_TOKEN_AUDIENCES,\n UKYC_STORAGE_ACCESS_TOKEN_VERSION,\n} from './ukyc/constants.js';\nexport {\n deriveClientMaterial,\n encodeClientMaterial,\n} from './ukyc/deriveClientMaterial.js';\nexport type {\n EncodedUkycClientMaterial,\n UkycClientMaterial,\n} from './ukyc/deriveClientMaterial.js';\nexport {\n encodeStorageAccessTokenForHeader,\n signStorageAccessToken,\n} from './ukyc/storageAccessToken.js';\nexport type {\n SignStorageAccessTokenParams,\n UkycStorageAccessToken,\n UkycStorageAccessTokenPayload,\n UkycStorageOperation,\n UkycTokenPresenter,\n} from './ukyc/storageAccessToken.js';\nexport { mintUkycTestToken } from './ukyc/testToken.js';\nexport type {\n MintedUkycTestToken,\n MintUkycTestTokenParams,\n} from './ukyc/testToken.js';\n\nexport {\n clearMoonPaySession,\n MoonPayFrameHandler,\n} from './vendors/MoonPayFrameHandler.js';\nexport type { MoonPayFrameHandlerOptions } from './vendors/MoonPayFrameHandler.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,wCAAwC,EACxC,sCAAsC,EACtC,0BAA0B,EAC1B,cAAc,GACf,MAAM,oBAAoB,CAAC;AA+B5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6C1D,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQlE,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAkBrE,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,4CAA4C,EAC5C,mCAAmC,EACnC,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAQpB,iFAAiF;AACjF,gEAAgE;AAChE,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,kCAAkC,EAClC,mCAAmC,EACnC,iCAAiC,GAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAKxC,OAAO,EACL,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAQtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export {\n KycController,\n getDefaultKycControllerState,\n getDefaultKycProviderDisclaimersAccepted,\n getDefaultKycVendorDisclaimersAccepted,\n KYC_PROVIDER_FLOW_STATUSES,\n controllerName,\n} from './KycController.js';\nexport type {\n KycControllerActions,\n KycControllerEvents,\n KycControllerGetStateAction,\n KycControllerMessenger,\n KycControllerOptions,\n KycControllerState,\n KycControllerStateChangeEvent,\n FetchSessionDisclaimersParams,\n KycProviderFlowStatus,\n} from './KycController.js';\nexport type {\n KycControllerClearStateAction,\n KycControllerFetchSessionDisclaimersAction,\n KycControllerFetchVendorDisclaimersAction,\n KycControllerGetProviderFlowStatusAction,\n KycControllerGetSessionStatusForVendorAction,\n KycControllerHasCompletedSessionDisclaimersAction,\n KycControllerHasCompletedVendorDisclaimersAction,\n KycControllerLaunchProviderFlowAction,\n KycControllerRecordSessionDisclaimersAction,\n KycControllerRecordVendorDisclaimersAction,\n KycControllerFetchSessionStatusOnceAction,\n KycControllerReadSessionStatusAction,\n KycControllerRefreshSessionStatusAction,\n KycControllerResetAction,\n KycControllerStartSessionAction,\n KycControllerStartSessionStatusPollingAction,\n} from './KycController-method-action-types.js';\n\nexport { KycService, serviceName } from './KycService.js';\nexport type {\n ApplicantAccessTokenResponse,\n CapabilityAuthorization,\n CreateVendorCustomerParams,\n CreateMoonpaySessionParams,\n CreateUkycSessionParams,\n EncryptionSchema,\n FetchSessionDisclaimersByCountryParams,\n FetchSessionDisclaimersBySessionIdParams,\n GetSessionStatusParams,\n ResetWrappingKeysParams,\n VendorCustomerResponse,\n JwksResponse,\n KycServiceActions,\n KycServiceCacheUpdatedEvent,\n KycServiceEvents,\n KycServiceGranularCacheUpdatedEvent,\n KycServiceInvalidateQueriesAction,\n KycServiceMessenger,\n KycServiceOptions,\n SetAuthorizationsParams,\n SubmitSessionDisclaimersParams,\n SubmitVendorDisclaimersParams,\n UkycSessionResponse,\n} from './KycService.js';\nexport type {\n KycServiceCreateVendorCustomerAction,\n KycServiceCreateJourneyAction,\n KycServiceCreateMoonpaySessionAction,\n KycServiceCreateUkycSessionAction,\n KycServiceFetchIdosEnclaveJwksAction,\n KycServiceFetchIdosRelayJwksAction,\n KycServiceFetchSessionDisclaimersByCountryAction,\n KycServiceFetchSessionDisclaimersBySessionIdAction,\n KycServiceFetchVendorDisclaimersAction,\n KycServiceGetGeoCountryAction,\n KycServiceGetSessionStatusAction,\n KycServiceGetSessionStatusForVendorAction,\n KycServiceResetWrappingKeysAction,\n KycServiceSetAuthorizationsAction,\n KycServiceSubmitSessionDisclaimersAction,\n KycServiceSubmitVendorDisclaimersAction,\n} from './KycService-method-action-types.js';\n\nexport { selectKycSessionStatus, selectKycVendor } from './selectors.js';\n\nexport { alpha2ToAlpha3, ALPHA2_TO_ALPHA3 } from './countryCodes.js';\nexport { decryptCredentials, generateKeyPair } from './crypto.js';\nexport type {\n DecryptedCredentials,\n DecryptResult,\n EncryptedCredentialsEnvelope,\n X25519KeyPair,\n} from './crypto.js';\n\nexport { KYC_STATUSES, TERMINAL_SESSION_STATUSES } from './types.js';\nexport type {\n KycCatalogDocument,\n KycConsentDocument,\n KycConsentRecord,\n KycDisclaimer,\n KycDisclaimersCatalog,\n KycPhase,\n KycProduct,\n KycProviderDisclaimersAccepted,\n KycSessionDisclaimers,\n KycSessionStatus,\n KycVendor,\n KycIronVendorDisclaimersAccepted,\n KycMoonpayVendorDisclaimersAccepted,\n KycVendorDisclaimersAccepted,\n KycVendorSigning,\n} from './types.js';\nexport {\n FINAL_STATUSES_TO_SKIP_AUTH_REFRESH,\n CAPABILITY_AUTHORIZATION_STATUSES,\n CAPABILITY_AUTHORIZATION_STATUSES_TO_REFRESH,\n needsCapabilityAuthorizationRefresh,\n FINAL_STATUSES_TO_STOP_POLLING,\n} from './types.js';\nexport type {\n KycSumSubLaunchParams,\n KycSumSubLauncher,\n KycSumSubSdkStatus,\n KycSumSubStatus,\n} from './providers/sumsub.js';\n\n// UKYC storage-access-token utilities. Exported so a signed capability token can\n// be minted for testing UKYC Storage (see `mintUkycTestToken`).\nexport {\n UKYC_CAPABILITY_AUTH_SCHEME,\n UKYC_KWIL_AUDIENCE,\n UKYC_STORAGE_ACCESS_TOKEN_AUDIENCE,\n UKYC_STORAGE_ACCESS_TOKEN_AUDIENCES,\n UKYC_STORAGE_ACCESS_TOKEN_VERSION,\n} from './ukyc/constants.js';\nexport {\n deriveClientMaterial,\n encodeClientMaterial,\n} from './ukyc/deriveClientMaterial.js';\nexport type {\n EncodedUkycClientMaterial,\n UkycClientMaterial,\n} from './ukyc/deriveClientMaterial.js';\nexport {\n encodeStorageAccessTokenForHeader,\n signStorageAccessToken,\n} from './ukyc/storageAccessToken.js';\nexport type {\n SignStorageAccessTokenParams,\n UkycStorageAccessToken,\n UkycStorageAccessTokenPayload,\n UkycStorageOperation,\n UkycTokenPresenter,\n} from './ukyc/storageAccessToken.js';\nexport { mintUkycTestToken } from './ukyc/testToken.js';\nexport type {\n MintedUkycTestToken,\n MintUkycTestTokenParams,\n} from './ukyc/testToken.js';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/kyc-controller",
3
- "version": "0.10.0-preview-32b6da31c",
3
+ "version": "0.10.0-preview-eefc6963e",
4
4
  "description": "Shared KYC / identity verification controller used across MetaMask clients",
5
5
  "keywords": [
6
6
  "Ethereum",
@@ -1,74 +0,0 @@
1
- import type { KycPhase, KycVendor } from '../types.js';
2
- type MoonPayFrameState = {
3
- activeVendor: KycVendor;
4
- moonpayAccessToken: string | null;
5
- moonpayCustomerId: string | null;
6
- moonpaySessionToken: string | null;
7
- phase: KycPhase;
8
- statusMessage: string;
9
- };
10
- export type MoonPayFrameHandlerOptions = {
11
- getState: () => MoonPayFrameState;
12
- update: (updater: (state: MoonPayFrameState) => void) => void;
13
- fail: (message: string) => void;
14
- onAuthenticated: () => Promise<void>;
15
- requireTermsReacceptance: () => void;
16
- };
17
- /**
18
- * Owns MoonPay Check/Auth frame state and protocol handling.
19
- */
20
- export declare class MoonPayFrameHandler {
21
- #private;
22
- constructor({ getState, update, fail, onAuthenticated, requireTermsReacceptance, }: MoonPayFrameHandlerOptions);
23
- /**
24
- * Creates a fresh keypair for a new MoonPay flow.
25
- */
26
- startFlow(): void;
27
- /**
28
- * Ensures an in-progress MoonPay flow has a frame keypair.
29
- */
30
- ensureKeypair(): void;
31
- /**
32
- * Clears all non-persisted MoonPay frame artifacts.
33
- */
34
- clear(): void;
35
- /**
36
- * Clears authentication associated with an earlier MoonPay session.
37
- */
38
- clearAuthentication(): void;
39
- /**
40
- * Handles a message posted by a MoonPay Check/Auth frame.
41
- *
42
- * @param message - The raw message posted by the frame.
43
- * @returns An object whose optional `reply` should be posted back.
44
- */
45
- handleMessage(message: unknown): Promise<{
46
- reply?: unknown;
47
- }>;
48
- /**
49
- * Builds the Check-frame URL, or `null` when no session exists yet.
50
- *
51
- * @returns The Check-frame URL or `null`.
52
- */
53
- buildCheckFrameUrl(): string | null;
54
- /**
55
- * Builds the Auth-frame URL, or `null` when no client token is available.
56
- *
57
- * @returns The Auth-frame URL or `null`.
58
- */
59
- buildAuthFrameUrl(): string | null;
60
- /**
61
- * Builds the Reset-frame URL.
62
- *
63
- * @returns The Reset-frame URL.
64
- */
65
- buildResetFrameUrl(): string;
66
- }
67
- /**
68
- * Drops persisted-in-memory MoonPay session artifacts from controller state.
69
- *
70
- * @param state - The state to mutate.
71
- */
72
- export declare function clearMoonPaySession(state: MoonPayFrameState): void;
73
- export {};
74
- //# sourceMappingURL=MoonPayFrameHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MoonPayFrameHandler.d.ts","sourceRoot":"","sources":["../../src/vendors/MoonPayFrameHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOvD,KAAK,iBAAiB,GAAG;IACvB,YAAY,EAAE,SAAS,CAAC;IACxB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,KAAK,EAAE,QAAQ,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAoBF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,MAAM,iBAAiB,CAAC;IAClC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,wBAAwB,EAAE,MAAM,IAAI,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,qBAAa,mBAAmB;;IAiB9B,YAAY,EACV,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,eAAe,EACf,wBAAwB,GACzB,EAAE,0BAA0B,EAM5B;IAED;;OAEG;IACH,SAAS,IAAI,IAAI,CAEhB;IAED;;OAEG;IACH,aAAa,IAAI,IAAI,CAEpB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAGZ;IAED;;OAEG;IACH,mBAAmB,IAAI,IAAI,CAE1B;IAED;;;;;OAKG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CA2ElE;IAED;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAclC;IAED;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAcjC;IAED;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,CAI3B;CAkDF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIlE"}
@@ -1,217 +0,0 @@
1
- import { decryptCredentials, generateKeyPair } from '../crypto.js';
2
- const FRAMES_BASE_URL = 'https://blocks.moonpay.com/platform/v1';
3
- const CHANNEL_CHECK = 'ch_1';
4
- const CHANNEL_AUTH = 'ch_2';
5
- const CHANNEL_RESET = 'ch_reset';
6
- /**
7
- * Owns MoonPay Check/Auth frame state and protocol handling.
8
- */
9
- export class MoonPayFrameHandler {
10
- #getState;
11
- #update;
12
- #fail;
13
- #onAuthenticated;
14
- #requireTermsReacceptance;
15
- /** MoonPay Check/Auth frame X25519 keypair (never persisted). */
16
- #frameKeypair = null;
17
- /** Auth-frame client token, kept out of controller state. */
18
- #authClientToken = null;
19
- constructor({ getState, update, fail, onAuthenticated, requireTermsReacceptance, }) {
20
- this.#getState = getState;
21
- this.#update = update;
22
- this.#fail = fail;
23
- this.#onAuthenticated = onAuthenticated;
24
- this.#requireTermsReacceptance = requireTermsReacceptance;
25
- }
26
- /**
27
- * Creates a fresh keypair for a new MoonPay flow.
28
- */
29
- startFlow() {
30
- this.#frameKeypair = generateKeyPair();
31
- }
32
- /**
33
- * Ensures an in-progress MoonPay flow has a frame keypair.
34
- */
35
- ensureKeypair() {
36
- this.#frameKeypair ??= generateKeyPair();
37
- }
38
- /**
39
- * Clears all non-persisted MoonPay frame artifacts.
40
- */
41
- clear() {
42
- this.#frameKeypair = null;
43
- this.#authClientToken = null;
44
- }
45
- /**
46
- * Clears authentication associated with an earlier MoonPay session.
47
- */
48
- clearAuthentication() {
49
- this.#authClientToken = null;
50
- }
51
- /**
52
- * Handles a message posted by a MoonPay Check/Auth frame.
53
- *
54
- * @param message - The raw message posted by the frame.
55
- * @returns An object whose optional `reply` should be posted back.
56
- */
57
- async handleMessage(message) {
58
- const payload = message;
59
- if (!payload) {
60
- return {};
61
- }
62
- if (payload.kind === 'handshake') {
63
- const channelId = payload.meta?.channelId;
64
- return { reply: { version: 2, meta: { channelId }, kind: 'ack' } };
65
- }
66
- if (payload.kind !== 'complete') {
67
- return {};
68
- }
69
- const channelId = payload.meta?.channelId;
70
- const state = this.#getState();
71
- // Only honor a completion for the MoonPay frame the flow is currently
72
- // waiting on. This drops stale or duplicate messages after reset, phase
73
- // advancement, or a vendor switch so they cannot restore tokens or rewind
74
- // the flow. Unlike awaited controller work, external frame messages are
75
- // not protected by the controller's generation guard.
76
- let expectedPhase = null;
77
- if (channelId === CHANNEL_CHECK) {
78
- expectedPhase = 'check';
79
- }
80
- else if (channelId === CHANNEL_AUTH) {
81
- expectedPhase = 'auth';
82
- }
83
- if (!expectedPhase ||
84
- state.phase !== expectedPhase ||
85
- state.activeVendor !== 'moonpay') {
86
- return {};
87
- }
88
- const status = payload.payload?.status;
89
- const credentialsEnvelope = payload.payload?.credentials;
90
- const customerId = payload.payload?.customer?.id ?? null;
91
- if (customerId) {
92
- this.#update((draft) => {
93
- draft.moonpayCustomerId = customerId;
94
- });
95
- }
96
- if (!status) {
97
- return {};
98
- }
99
- let accessToken;
100
- let clientToken;
101
- if (credentialsEnvelope && this.#frameKeypair) {
102
- try {
103
- const { credentials } = decryptCredentials(credentialsEnvelope, this.#frameKeypair.privateKey);
104
- accessToken = credentials.accessToken;
105
- clientToken = credentials.clientToken;
106
- }
107
- catch (error) {
108
- this.#fail(`Failed to decrypt frame credentials: ${String(error)}`);
109
- return {};
110
- }
111
- }
112
- if (channelId === CHANNEL_CHECK) {
113
- await this.#handleCheckOutcome(status, accessToken, clientToken);
114
- }
115
- else {
116
- await this.#handleAuthOutcome(status, accessToken);
117
- }
118
- return {};
119
- }
120
- /**
121
- * Builds the Check-frame URL, or `null` when no session exists yet.
122
- *
123
- * @returns The Check-frame URL or `null`.
124
- */
125
- buildCheckFrameUrl() {
126
- const state = this.#getState();
127
- if (state.activeVendor !== 'moonpay' ||
128
- !state.moonpaySessionToken ||
129
- !this.#frameKeypair) {
130
- return null;
131
- }
132
- const url = new URL(`${FRAMES_BASE_URL}/check-connection`);
133
- url.searchParams.set('sessionToken', state.moonpaySessionToken);
134
- url.searchParams.set('publicKey', this.#frameKeypair.publicKeyHex);
135
- url.searchParams.set('channelId', CHANNEL_CHECK);
136
- return url.toString();
137
- }
138
- /**
139
- * Builds the Auth-frame URL, or `null` when no client token is available.
140
- *
141
- * @returns The Auth-frame URL or `null`.
142
- */
143
- buildAuthFrameUrl() {
144
- const state = this.#getState();
145
- if (state.activeVendor !== 'moonpay' ||
146
- !this.#authClientToken ||
147
- !this.#frameKeypair) {
148
- return null;
149
- }
150
- const url = new URL(`${FRAMES_BASE_URL}/auth`);
151
- url.searchParams.set('clientToken', this.#authClientToken);
152
- url.searchParams.set('publicKey', this.#frameKeypair.publicKeyHex);
153
- url.searchParams.set('channelId', CHANNEL_AUTH);
154
- return url.toString();
155
- }
156
- /**
157
- * Builds the Reset-frame URL.
158
- *
159
- * @returns The Reset-frame URL.
160
- */
161
- buildResetFrameUrl() {
162
- const url = new URL(`${FRAMES_BASE_URL}/reset`);
163
- url.searchParams.set('channelId', CHANNEL_RESET);
164
- return url.toString();
165
- }
166
- async #handleCheckOutcome(status, accessToken, clientToken) {
167
- if (status === 'active' && accessToken) {
168
- this.#update((state) => {
169
- state.moonpayAccessToken = accessToken;
170
- state.phase = 'form';
171
- state.statusMessage = 'Already authenticated. Review to submit.';
172
- });
173
- await this.#onAuthenticated();
174
- return;
175
- }
176
- if (status === 'connectionRequired' && clientToken) {
177
- this.#authClientToken = clientToken;
178
- this.#update((state) => {
179
- state.phase = 'auth';
180
- state.statusMessage = 'Verify your email via OTP in the Auth frame.';
181
- });
182
- return;
183
- }
184
- if (status === 'termsAcceptanceRequired') {
185
- this.#requireTermsReacceptance();
186
- return;
187
- }
188
- this.#fail(`Check frame returned status: ${status}`);
189
- }
190
- async #handleAuthOutcome(status, accessToken) {
191
- if (status === 'active' && accessToken) {
192
- this.#update((state) => {
193
- state.moonpayAccessToken = accessToken;
194
- state.phase = 'form';
195
- state.statusMessage = 'Authenticated. Review to submit.';
196
- });
197
- await this.#onAuthenticated();
198
- return;
199
- }
200
- if (status === 'termsAcceptanceRequired') {
201
- this.#requireTermsReacceptance();
202
- return;
203
- }
204
- this.#fail(`Auth frame returned status: ${status}`);
205
- }
206
- }
207
- /**
208
- * Drops persisted-in-memory MoonPay session artifacts from controller state.
209
- *
210
- * @param state - The state to mutate.
211
- */
212
- export function clearMoonPaySession(state) {
213
- state.moonpayCustomerId = null;
214
- state.moonpaySessionToken = null;
215
- state.moonpayAccessToken = null;
216
- }
217
- //# sourceMappingURL=MoonPayFrameHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MoonPayFrameHandler.js","sourceRoot":"","sources":["../../src/vendors/MoonPayFrameHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAInE,MAAM,eAAe,GAAG,wCAAwC,CAAC;AACjE,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,aAAa,GAAG,UAAU,CAAC;AAqCjC;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACrB,SAAS,CAAyC;IAElD,OAAO,CAAuC;IAE9C,KAAK,CAAqC;IAE1C,gBAAgB,CAAgD;IAEhE,yBAAyB,CAAyD;IAE3F,iEAAiE;IACjE,aAAa,GAAyB,IAAI,CAAC;IAE3C,6DAA6D;IAC7D,gBAAgB,GAAkB,IAAI,CAAC;IAEvC,YAAY,EACV,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,eAAe,EACf,wBAAwB,GACG;QAC3B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,aAAa,GAAG,eAAe,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,aAAa;QACX,IAAI,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,MAAM,OAAO,GAAG,OAAmC,CAAC;QAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrE,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAE/B,sEAAsE;QACtE,wEAAwE;QACxE,0EAA0E;QAC1E,wEAAwE;QACxE,sDAAsD;QACtD,IAAI,aAAa,GAAoB,IAAI,CAAC;QAC1C,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAChC,aAAa,GAAG,OAAO,CAAC;QAC1B,CAAC;aAAM,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;YACtC,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC;QAED,IACE,CAAC,aAAa;YACd,KAAK,CAAC,KAAK,KAAK,aAAa;YAC7B,KAAK,CAAC,YAAY,KAAK,SAAS,EAChC,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;QACvC,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC;QAEzD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,KAAK,CAAC,iBAAiB,GAAG,UAAU,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,WAA+B,CAAC;QACpC,IAAI,WAA+B,CAAC;QACpC,IAAI,mBAAmB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CACxC,mBAAmB,EACnB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC9B,CAAC;gBACF,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;gBACtC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,CAAC,wCAAwC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACpE,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;OAIG;IACH,kBAAkB;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IACE,KAAK,CAAC,YAAY,KAAK,SAAS;YAChC,CAAC,KAAK,CAAC,mBAAmB;YAC1B,CAAC,IAAI,CAAC,aAAa,EACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,eAAe,mBAAmB,CAAC,CAAC;QAC3D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACnE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,iBAAiB;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IACE,KAAK,CAAC,YAAY,KAAK,SAAS;YAChC,CAAC,IAAI,CAAC,gBAAgB;YACtB,CAAC,IAAI,CAAC,aAAa,EACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,eAAe,OAAO,CAAC,CAAC;QAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACnE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,kBAAkB;QAChB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,eAAe,QAAQ,CAAC,CAAC;QAChD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,MAAmB,EACnB,WAAoB,EACpB,WAAoB;QAEpB,IAAI,MAAM,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,KAAK,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBACvC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;gBACrB,KAAK,CAAC,aAAa,GAAG,0CAA0C,CAAC;YACnE,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,oBAAoB,IAAI,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;gBACrB,KAAK,CAAC,aAAa,GAAG,8CAA8C,CAAC;YACvE,CAAC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;YACzC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAmB,EACnB,WAAoB;QAEpB,IAAI,MAAM,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,KAAK,CAAC,kBAAkB,GAAG,WAAW,CAAC;gBACvC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;gBACrB,KAAK,CAAC,aAAa,GAAG,kCAAkC,CAAC;YAC3D,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,yBAAyB,EAAE,CAAC;YACzC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;AAClC,CAAC","sourcesContent":["import { decryptCredentials, generateKeyPair } from '../crypto.js';\nimport type { EncryptedCredentialsEnvelope, X25519KeyPair } from '../crypto.js';\nimport type { KycPhase, KycVendor } from '../types.js';\n\nconst FRAMES_BASE_URL = 'https://blocks.moonpay.com/platform/v1';\nconst CHANNEL_CHECK = 'ch_1';\nconst CHANNEL_AUTH = 'ch_2';\nconst CHANNEL_RESET = 'ch_reset';\n\ntype MoonPayFrameState = {\n activeVendor: KycVendor;\n moonpayAccessToken: string | null;\n moonpayCustomerId: string | null;\n moonpaySessionToken: string | null;\n phase: KycPhase;\n statusMessage: string;\n};\n\ntype FrameMessage = {\n meta?: { channelId?: string };\n kind?: string;\n payload?: {\n status?:\n | 'active'\n | 'connectionRequired'\n | 'termsAcceptanceRequired'\n | 'pending'\n | 'unavailable'\n | 'failed';\n credentials?: EncryptedCredentialsEnvelope | string;\n customer?: { id?: string };\n };\n};\n\ntype FrameStatus = NonNullable<FrameMessage['payload']>['status'];\n\nexport type MoonPayFrameHandlerOptions = {\n getState: () => MoonPayFrameState;\n update: (updater: (state: MoonPayFrameState) => void) => void;\n fail: (message: string) => void;\n onAuthenticated: () => Promise<void>;\n requireTermsReacceptance: () => void;\n};\n\n/**\n * Owns MoonPay Check/Auth frame state and protocol handling.\n */\nexport class MoonPayFrameHandler {\n readonly #getState: MoonPayFrameHandlerOptions['getState'];\n\n readonly #update: MoonPayFrameHandlerOptions['update'];\n\n readonly #fail: MoonPayFrameHandlerOptions['fail'];\n\n readonly #onAuthenticated: MoonPayFrameHandlerOptions['onAuthenticated'];\n\n readonly #requireTermsReacceptance: MoonPayFrameHandlerOptions['requireTermsReacceptance'];\n\n /** MoonPay Check/Auth frame X25519 keypair (never persisted). */\n #frameKeypair: X25519KeyPair | null = null;\n\n /** Auth-frame client token, kept out of controller state. */\n #authClientToken: string | null = null;\n\n constructor({\n getState,\n update,\n fail,\n onAuthenticated,\n requireTermsReacceptance,\n }: MoonPayFrameHandlerOptions) {\n this.#getState = getState;\n this.#update = update;\n this.#fail = fail;\n this.#onAuthenticated = onAuthenticated;\n this.#requireTermsReacceptance = requireTermsReacceptance;\n }\n\n /**\n * Creates a fresh keypair for a new MoonPay flow.\n */\n startFlow(): void {\n this.#frameKeypair = generateKeyPair();\n }\n\n /**\n * Ensures an in-progress MoonPay flow has a frame keypair.\n */\n ensureKeypair(): void {\n this.#frameKeypair ??= generateKeyPair();\n }\n\n /**\n * Clears all non-persisted MoonPay frame artifacts.\n */\n clear(): void {\n this.#frameKeypair = null;\n this.#authClientToken = null;\n }\n\n /**\n * Clears authentication associated with an earlier MoonPay session.\n */\n clearAuthentication(): void {\n this.#authClientToken = null;\n }\n\n /**\n * Handles a message posted by a MoonPay Check/Auth frame.\n *\n * @param message - The raw message posted by the frame.\n * @returns An object whose optional `reply` should be posted back.\n */\n async handleMessage(message: unknown): Promise<{ reply?: unknown }> {\n const payload = message as FrameMessage | undefined;\n\n if (!payload) {\n return {};\n }\n\n if (payload.kind === 'handshake') {\n const channelId = payload.meta?.channelId;\n return { reply: { version: 2, meta: { channelId }, kind: 'ack' } };\n }\n\n if (payload.kind !== 'complete') {\n return {};\n }\n\n const channelId = payload.meta?.channelId;\n const state = this.#getState();\n\n // Only honor a completion for the MoonPay frame the flow is currently\n // waiting on. This drops stale or duplicate messages after reset, phase\n // advancement, or a vendor switch so they cannot restore tokens or rewind\n // the flow. Unlike awaited controller work, external frame messages are\n // not protected by the controller's generation guard.\n let expectedPhase: KycPhase | null = null;\n if (channelId === CHANNEL_CHECK) {\n expectedPhase = 'check';\n } else if (channelId === CHANNEL_AUTH) {\n expectedPhase = 'auth';\n }\n\n if (\n !expectedPhase ||\n state.phase !== expectedPhase ||\n state.activeVendor !== 'moonpay'\n ) {\n return {};\n }\n\n const status = payload.payload?.status;\n const credentialsEnvelope = payload.payload?.credentials;\n const customerId = payload.payload?.customer?.id ?? null;\n\n if (customerId) {\n this.#update((draft) => {\n draft.moonpayCustomerId = customerId;\n });\n }\n\n if (!status) {\n return {};\n }\n\n let accessToken: string | undefined;\n let clientToken: string | undefined;\n if (credentialsEnvelope && this.#frameKeypair) {\n try {\n const { credentials } = decryptCredentials(\n credentialsEnvelope,\n this.#frameKeypair.privateKey,\n );\n accessToken = credentials.accessToken;\n clientToken = credentials.clientToken;\n } catch (error) {\n this.#fail(`Failed to decrypt frame credentials: ${String(error)}`);\n return {};\n }\n }\n\n if (channelId === CHANNEL_CHECK) {\n await this.#handleCheckOutcome(status, accessToken, clientToken);\n } else {\n await this.#handleAuthOutcome(status, accessToken);\n }\n return {};\n }\n\n /**\n * Builds the Check-frame URL, or `null` when no session exists yet.\n *\n * @returns The Check-frame URL or `null`.\n */\n buildCheckFrameUrl(): string | null {\n const state = this.#getState();\n if (\n state.activeVendor !== 'moonpay' ||\n !state.moonpaySessionToken ||\n !this.#frameKeypair\n ) {\n return null;\n }\n const url = new URL(`${FRAMES_BASE_URL}/check-connection`);\n url.searchParams.set('sessionToken', state.moonpaySessionToken);\n url.searchParams.set('publicKey', this.#frameKeypair.publicKeyHex);\n url.searchParams.set('channelId', CHANNEL_CHECK);\n return url.toString();\n }\n\n /**\n * Builds the Auth-frame URL, or `null` when no client token is available.\n *\n * @returns The Auth-frame URL or `null`.\n */\n buildAuthFrameUrl(): string | null {\n const state = this.#getState();\n if (\n state.activeVendor !== 'moonpay' ||\n !this.#authClientToken ||\n !this.#frameKeypair\n ) {\n return null;\n }\n const url = new URL(`${FRAMES_BASE_URL}/auth`);\n url.searchParams.set('clientToken', this.#authClientToken);\n url.searchParams.set('publicKey', this.#frameKeypair.publicKeyHex);\n url.searchParams.set('channelId', CHANNEL_AUTH);\n return url.toString();\n }\n\n /**\n * Builds the Reset-frame URL.\n *\n * @returns The Reset-frame URL.\n */\n buildResetFrameUrl(): string {\n const url = new URL(`${FRAMES_BASE_URL}/reset`);\n url.searchParams.set('channelId', CHANNEL_RESET);\n return url.toString();\n }\n\n async #handleCheckOutcome(\n status: FrameStatus,\n accessToken?: string,\n clientToken?: string,\n ): Promise<void> {\n if (status === 'active' && accessToken) {\n this.#update((state) => {\n state.moonpayAccessToken = accessToken;\n state.phase = 'form';\n state.statusMessage = 'Already authenticated. Review to submit.';\n });\n await this.#onAuthenticated();\n return;\n }\n if (status === 'connectionRequired' && clientToken) {\n this.#authClientToken = clientToken;\n this.#update((state) => {\n state.phase = 'auth';\n state.statusMessage = 'Verify your email via OTP in the Auth frame.';\n });\n return;\n }\n if (status === 'termsAcceptanceRequired') {\n this.#requireTermsReacceptance();\n return;\n }\n this.#fail(`Check frame returned status: ${status}`);\n }\n\n async #handleAuthOutcome(\n status: FrameStatus,\n accessToken?: string,\n ): Promise<void> {\n if (status === 'active' && accessToken) {\n this.#update((state) => {\n state.moonpayAccessToken = accessToken;\n state.phase = 'form';\n state.statusMessage = 'Authenticated. Review to submit.';\n });\n await this.#onAuthenticated();\n return;\n }\n if (status === 'termsAcceptanceRequired') {\n this.#requireTermsReacceptance();\n return;\n }\n this.#fail(`Auth frame returned status: ${status}`);\n }\n}\n\n/**\n * Drops persisted-in-memory MoonPay session artifacts from controller state.\n *\n * @param state - The state to mutate.\n */\nexport function clearMoonPaySession(state: MoonPayFrameState): void {\n state.moonpayCustomerId = null;\n state.moonpaySessionToken = null;\n state.moonpayAccessToken = null;\n}\n"]}