@metamask-previews/kyc-controller 0.0.0-preview-abca9bcea → 0.0.0-preview-ec24abb79

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +0 -12
  2. package/dist/KycController-method-action-types.cjs.map +1 -1
  3. package/dist/KycController-method-action-types.d.cts +4 -6
  4. package/dist/KycController-method-action-types.d.cts.map +1 -1
  5. package/dist/KycController-method-action-types.d.mts +4 -6
  6. package/dist/KycController-method-action-types.d.mts.map +1 -1
  7. package/dist/KycController-method-action-types.mjs.map +1 -1
  8. package/dist/KycController.cjs +300 -191
  9. package/dist/KycController.cjs.map +1 -1
  10. package/dist/KycController.d.cts +40 -46
  11. package/dist/KycController.d.cts.map +1 -1
  12. package/dist/KycController.d.mts +40 -46
  13. package/dist/KycController.d.mts.map +1 -1
  14. package/dist/KycController.mjs +299 -188
  15. package/dist/KycController.mjs.map +1 -1
  16. package/dist/KycService-method-action-types.cjs.map +1 -1
  17. package/dist/KycService-method-action-types.d.cts +6 -23
  18. package/dist/KycService-method-action-types.d.cts.map +1 -1
  19. package/dist/KycService-method-action-types.d.mts +6 -23
  20. package/dist/KycService-method-action-types.d.mts.map +1 -1
  21. package/dist/KycService-method-action-types.mjs.map +1 -1
  22. package/dist/KycService.cjs +119 -100
  23. package/dist/KycService.cjs.map +1 -1
  24. package/dist/KycService.d.cts +12 -38
  25. package/dist/KycService.d.cts.map +1 -1
  26. package/dist/KycService.d.mts +12 -38
  27. package/dist/KycService.d.mts.map +1 -1
  28. package/dist/KycService.mjs +119 -100
  29. package/dist/KycService.mjs.map +1 -1
  30. package/dist/index.cjs +1 -3
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.d.cts +4 -4
  33. package/dist/index.d.cts.map +1 -1
  34. package/dist/index.d.mts +4 -4
  35. package/dist/index.d.mts.map +1 -1
  36. package/dist/index.mjs +1 -1
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/types.cjs.map +1 -1
  39. package/dist/types.d.cts +5 -53
  40. package/dist/types.d.cts.map +1 -1
  41. package/dist/types.d.mts +5 -53
  42. package/dist/types.d.mts.map +1 -1
  43. package/dist/types.mjs.map +1 -1
  44. package/dist/ukyc/wrapEncryptionKey.cjs +9 -4
  45. package/dist/ukyc/wrapEncryptionKey.cjs.map +1 -1
  46. package/dist/ukyc/wrapEncryptionKey.d.cts +10 -8
  47. package/dist/ukyc/wrapEncryptionKey.d.cts.map +1 -1
  48. package/dist/ukyc/wrapEncryptionKey.d.mts +10 -8
  49. package/dist/ukyc/wrapEncryptionKey.d.mts.map +1 -1
  50. package/dist/ukyc/wrapEncryptionKey.mjs +9 -4
  51. package/dist/ukyc/wrapEncryptionKey.mjs.map +1 -1
  52. package/package.json +2 -2
  53. package/dist/logger.cjs +0 -9
  54. package/dist/logger.cjs.map +0 -1
  55. package/dist/logger.d.cts +0 -6
  56. package/dist/logger.d.cts.map +0 -1
  57. package/dist/logger.d.mts +0 -6
  58. package/dist/logger.d.mts.map +0 -1
  59. package/dist/logger.mjs +0 -6
  60. package/dist/logger.mjs.map +0 -1
  61. package/dist/vendorDisclaimerAcceptance.cjs +0 -74
  62. package/dist/vendorDisclaimerAcceptance.cjs.map +0 -1
  63. package/dist/vendorDisclaimerAcceptance.d.cts +0 -39
  64. package/dist/vendorDisclaimerAcceptance.d.cts.map +0 -1
  65. package/dist/vendorDisclaimerAcceptance.d.mts +0 -39
  66. package/dist/vendorDisclaimerAcceptance.d.mts.map +0 -1
  67. package/dist/vendorDisclaimerAcceptance.mjs +0 -67
  68. package/dist/vendorDisclaimerAcceptance.mjs.map +0 -1
  69. package/dist/vendors/MoonPayFrameHandler.cjs +0 -235
  70. package/dist/vendors/MoonPayFrameHandler.cjs.map +0 -1
  71. package/dist/vendors/MoonPayFrameHandler.d.cts +0 -74
  72. package/dist/vendors/MoonPayFrameHandler.d.cts.map +0 -1
  73. package/dist/vendors/MoonPayFrameHandler.d.mts +0 -74
  74. package/dist/vendors/MoonPayFrameHandler.d.mts.map +0 -1
  75. package/dist/vendors/MoonPayFrameHandler.mjs +0 -230
  76. package/dist/vendors/MoonPayFrameHandler.mjs.map +0 -1
@@ -1,74 +0,0 @@
1
- import type { KycPhase, KycVendor } from "../types.cjs";
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.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MoonPayFrameHandler.d.cts","sourceRoot":"","sources":["../../src/vendors/MoonPayFrameHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAoB;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;;gBAiBlB,EACV,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,eAAe,EACf,wBAAwB,GACzB,EAAE,0BAA0B;IAQ7B;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;;;;OAKG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IA6EnE;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAiBnC;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAgBlC;;;;OAIG;IACH,kBAAkB,IAAI,MAAM;CAsD7B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIlE"}
@@ -1,74 +0,0 @@
1
- import type { KycPhase, KycVendor } from "../types.mjs";
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.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MoonPayFrameHandler.d.mts","sourceRoot":"","sources":["../../src/vendors/MoonPayFrameHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAoB;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;;gBAiBlB,EACV,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,eAAe,EACf,wBAAwB,GACzB,EAAE,0BAA0B;IAQ7B;;OAEG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;;;;OAKG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IA6EnE;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAiBnC;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAgBlC;;;;OAIG;IACH,kBAAkB,IAAI,MAAM;CAsD7B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIlE"}
@@ -1,230 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _MoonPayFrameHandler_instances, _MoonPayFrameHandler_getState, _MoonPayFrameHandler_update, _MoonPayFrameHandler_fail, _MoonPayFrameHandler_onAuthenticated, _MoonPayFrameHandler_requireTermsReacceptance, _MoonPayFrameHandler_frameKeypair, _MoonPayFrameHandler_authClientToken, _MoonPayFrameHandler_handleCheckOutcome, _MoonPayFrameHandler_handleAuthOutcome;
13
- import { decryptCredentials, generateKeyPair } from "../crypto.mjs";
14
- const FRAMES_BASE_URL = 'https://blocks.moonpay.com/platform/v1';
15
- const CHANNEL_CHECK = 'ch_1';
16
- const CHANNEL_AUTH = 'ch_2';
17
- const CHANNEL_RESET = 'ch_reset';
18
- /**
19
- * Owns MoonPay Check/Auth frame state and protocol handling.
20
- */
21
- export class MoonPayFrameHandler {
22
- constructor({ getState, update, fail, onAuthenticated, requireTermsReacceptance, }) {
23
- _MoonPayFrameHandler_instances.add(this);
24
- _MoonPayFrameHandler_getState.set(this, void 0);
25
- _MoonPayFrameHandler_update.set(this, void 0);
26
- _MoonPayFrameHandler_fail.set(this, void 0);
27
- _MoonPayFrameHandler_onAuthenticated.set(this, void 0);
28
- _MoonPayFrameHandler_requireTermsReacceptance.set(this, void 0);
29
- /** MoonPay Check/Auth frame X25519 keypair (never persisted). */
30
- _MoonPayFrameHandler_frameKeypair.set(this, null);
31
- /** Auth-frame client token, kept out of controller state. */
32
- _MoonPayFrameHandler_authClientToken.set(this, null);
33
- __classPrivateFieldSet(this, _MoonPayFrameHandler_getState, getState, "f");
34
- __classPrivateFieldSet(this, _MoonPayFrameHandler_update, update, "f");
35
- __classPrivateFieldSet(this, _MoonPayFrameHandler_fail, fail, "f");
36
- __classPrivateFieldSet(this, _MoonPayFrameHandler_onAuthenticated, onAuthenticated, "f");
37
- __classPrivateFieldSet(this, _MoonPayFrameHandler_requireTermsReacceptance, requireTermsReacceptance, "f");
38
- }
39
- /**
40
- * Creates a fresh keypair for a new MoonPay flow.
41
- */
42
- startFlow() {
43
- __classPrivateFieldSet(this, _MoonPayFrameHandler_frameKeypair, generateKeyPair(), "f");
44
- }
45
- /**
46
- * Ensures an in-progress MoonPay flow has a frame keypair.
47
- */
48
- ensureKeypair() {
49
- __classPrivateFieldSet(this, _MoonPayFrameHandler_frameKeypair, __classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f") ?? generateKeyPair(), "f");
50
- }
51
- /**
52
- * Clears all non-persisted MoonPay frame artifacts.
53
- */
54
- clear() {
55
- __classPrivateFieldSet(this, _MoonPayFrameHandler_frameKeypair, null, "f");
56
- __classPrivateFieldSet(this, _MoonPayFrameHandler_authClientToken, null, "f");
57
- }
58
- /**
59
- * Clears authentication associated with an earlier MoonPay session.
60
- */
61
- clearAuthentication() {
62
- __classPrivateFieldSet(this, _MoonPayFrameHandler_authClientToken, null, "f");
63
- }
64
- /**
65
- * Handles a message posted by a MoonPay Check/Auth frame.
66
- *
67
- * @param message - The raw message posted by the frame.
68
- * @returns An object whose optional `reply` should be posted back.
69
- */
70
- async handleMessage(message) {
71
- const payload = message;
72
- if (!payload) {
73
- return {};
74
- }
75
- if (payload.kind === 'handshake') {
76
- const channelId = payload.meta?.channelId;
77
- return { reply: { version: 2, meta: { channelId }, kind: 'ack' } };
78
- }
79
- if (payload.kind !== 'complete') {
80
- return {};
81
- }
82
- const channelId = payload.meta?.channelId;
83
- const state = __classPrivateFieldGet(this, _MoonPayFrameHandler_getState, "f").call(this);
84
- // Only honor a completion for the MoonPay frame the flow is currently
85
- // waiting on. This drops stale or duplicate messages after reset, phase
86
- // advancement, or a vendor switch so they cannot restore tokens or rewind
87
- // the flow. Unlike awaited controller work, external frame messages are
88
- // not protected by the controller's generation guard.
89
- let expectedPhase = null;
90
- if (channelId === CHANNEL_CHECK) {
91
- expectedPhase = 'check';
92
- }
93
- else if (channelId === CHANNEL_AUTH) {
94
- expectedPhase = 'auth';
95
- }
96
- if (!expectedPhase ||
97
- state.phase !== expectedPhase ||
98
- state.activeVendor !== 'moonpay') {
99
- return {};
100
- }
101
- const status = payload.payload?.status;
102
- const credentialsEnvelope = payload.payload?.credentials;
103
- const customerId = payload.payload?.customer?.id ?? null;
104
- if (customerId) {
105
- __classPrivateFieldGet(this, _MoonPayFrameHandler_update, "f").call(this, (draft) => {
106
- draft.moonpayCustomerId = customerId;
107
- });
108
- }
109
- if (!status) {
110
- return {};
111
- }
112
- let accessToken;
113
- let clientToken;
114
- if (credentialsEnvelope && __classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f")) {
115
- try {
116
- const { credentials } = decryptCredentials(credentialsEnvelope, __classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f").privateKey);
117
- accessToken = credentials.accessToken;
118
- clientToken = credentials.clientToken;
119
- }
120
- catch (error) {
121
- __classPrivateFieldGet(this, _MoonPayFrameHandler_fail, "f").call(this, `Failed to decrypt frame credentials: ${String(error)}`);
122
- return {};
123
- }
124
- }
125
- if (channelId === CHANNEL_CHECK) {
126
- await __classPrivateFieldGet(this, _MoonPayFrameHandler_instances, "m", _MoonPayFrameHandler_handleCheckOutcome).call(this, status, accessToken, clientToken);
127
- }
128
- else {
129
- await __classPrivateFieldGet(this, _MoonPayFrameHandler_instances, "m", _MoonPayFrameHandler_handleAuthOutcome).call(this, status, accessToken);
130
- }
131
- return {};
132
- }
133
- /**
134
- * Builds the Check-frame URL, or `null` when no session exists yet.
135
- *
136
- * @returns The Check-frame URL or `null`.
137
- */
138
- buildCheckFrameUrl() {
139
- const state = __classPrivateFieldGet(this, _MoonPayFrameHandler_getState, "f").call(this);
140
- if (state.activeVendor !== 'moonpay' ||
141
- !state.moonpaySessionToken ||
142
- !__classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f")) {
143
- return null;
144
- }
145
- const url = new URL(`${FRAMES_BASE_URL}/check-connection`);
146
- url.searchParams.set('sessionToken', state.moonpaySessionToken);
147
- url.searchParams.set('publicKey', __classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f").publicKeyHex);
148
- url.searchParams.set('channelId', CHANNEL_CHECK);
149
- url.searchParams.set('skipKyc', 'true');
150
- return url.toString();
151
- }
152
- /**
153
- * Builds the Auth-frame URL, or `null` when no client token is available.
154
- *
155
- * @returns The Auth-frame URL or `null`.
156
- */
157
- buildAuthFrameUrl() {
158
- const state = __classPrivateFieldGet(this, _MoonPayFrameHandler_getState, "f").call(this);
159
- if (state.activeVendor !== 'moonpay' ||
160
- !__classPrivateFieldGet(this, _MoonPayFrameHandler_authClientToken, "f") ||
161
- !__classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f")) {
162
- return null;
163
- }
164
- const url = new URL(`${FRAMES_BASE_URL}/auth`);
165
- url.searchParams.set('clientToken', __classPrivateFieldGet(this, _MoonPayFrameHandler_authClientToken, "f"));
166
- url.searchParams.set('publicKey', __classPrivateFieldGet(this, _MoonPayFrameHandler_frameKeypair, "f").publicKeyHex);
167
- url.searchParams.set('channelId', CHANNEL_AUTH);
168
- return url.toString();
169
- }
170
- /**
171
- * Builds the Reset-frame URL.
172
- *
173
- * @returns The Reset-frame URL.
174
- */
175
- buildResetFrameUrl() {
176
- const url = new URL(`${FRAMES_BASE_URL}/reset`);
177
- url.searchParams.set('channelId', CHANNEL_RESET);
178
- return url.toString();
179
- }
180
- }
181
- _MoonPayFrameHandler_getState = new WeakMap(), _MoonPayFrameHandler_update = new WeakMap(), _MoonPayFrameHandler_fail = new WeakMap(), _MoonPayFrameHandler_onAuthenticated = new WeakMap(), _MoonPayFrameHandler_requireTermsReacceptance = new WeakMap(), _MoonPayFrameHandler_frameKeypair = new WeakMap(), _MoonPayFrameHandler_authClientToken = new WeakMap(), _MoonPayFrameHandler_instances = new WeakSet(), _MoonPayFrameHandler_handleCheckOutcome = async function _MoonPayFrameHandler_handleCheckOutcome(status, accessToken, clientToken) {
182
- if (status === 'active' && accessToken) {
183
- __classPrivateFieldGet(this, _MoonPayFrameHandler_update, "f").call(this, (state) => {
184
- state.moonpayAccessToken = accessToken;
185
- state.phase = 'form';
186
- state.statusMessage = 'Already authenticated. Review to submit.';
187
- });
188
- await __classPrivateFieldGet(this, _MoonPayFrameHandler_onAuthenticated, "f").call(this);
189
- return;
190
- }
191
- if (status === 'connectionRequired' && clientToken) {
192
- __classPrivateFieldSet(this, _MoonPayFrameHandler_authClientToken, clientToken, "f");
193
- __classPrivateFieldGet(this, _MoonPayFrameHandler_update, "f").call(this, (state) => {
194
- state.phase = 'auth';
195
- state.statusMessage = 'Verify your email via OTP in the Auth frame.';
196
- });
197
- return;
198
- }
199
- if (status === 'termsAcceptanceRequired') {
200
- __classPrivateFieldGet(this, _MoonPayFrameHandler_requireTermsReacceptance, "f").call(this);
201
- return;
202
- }
203
- __classPrivateFieldGet(this, _MoonPayFrameHandler_fail, "f").call(this, `Check frame returned status: ${status}`);
204
- }, _MoonPayFrameHandler_handleAuthOutcome = async function _MoonPayFrameHandler_handleAuthOutcome(status, accessToken) {
205
- if (status === 'active' && accessToken) {
206
- __classPrivateFieldGet(this, _MoonPayFrameHandler_update, "f").call(this, (state) => {
207
- state.moonpayAccessToken = accessToken;
208
- state.phase = 'form';
209
- state.statusMessage = 'Authenticated. Review to submit.';
210
- });
211
- await __classPrivateFieldGet(this, _MoonPayFrameHandler_onAuthenticated, "f").call(this);
212
- return;
213
- }
214
- if (status === 'termsAcceptanceRequired') {
215
- __classPrivateFieldGet(this, _MoonPayFrameHandler_requireTermsReacceptance, "f").call(this);
216
- return;
217
- }
218
- __classPrivateFieldGet(this, _MoonPayFrameHandler_fail, "f").call(this, `Auth frame returned status: ${status}`);
219
- };
220
- /**
221
- * Drops persisted-in-memory MoonPay session artifacts from controller state.
222
- *
223
- * @param state - The state to mutate.
224
- */
225
- export function clearMoonPaySession(state) {
226
- state.moonpayCustomerId = null;
227
- state.moonpaySessionToken = null;
228
- state.moonpayAccessToken = null;
229
- }
230
- //# sourceMappingURL=MoonPayFrameHandler.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MoonPayFrameHandler.mjs","sourceRoot":"","sources":["../../src/vendors/MoonPayFrameHandler.ts"],"names":[],"mappings":"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","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 url.searchParams.set('skipKyc', 'true');\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"]}