@shielded-x402/client 0.2.1 → 0.2.3

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 (66) hide show
  1. package/dist/circuits/spend_change.json +156 -156
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/walletState.d.ts +56 -0
  7. package/dist/walletState.d.ts.map +1 -0
  8. package/dist/walletState.js +274 -0
  9. package/dist/walletState.js.map +1 -0
  10. package/package.json +3 -3
  11. package/dist/packages/shared-types/src/crypto-spec.d.ts +0 -16
  12. package/dist/packages/shared-types/src/crypto-spec.d.ts.map +0 -1
  13. package/dist/packages/shared-types/src/crypto-spec.js +0 -15
  14. package/dist/packages/shared-types/src/crypto-spec.js.map +0 -1
  15. package/dist/packages/shared-types/src/index.d.ts +0 -4
  16. package/dist/packages/shared-types/src/index.d.ts.map +0 -1
  17. package/dist/packages/shared-types/src/index.js +0 -4
  18. package/dist/packages/shared-types/src/index.js.map +0 -1
  19. package/dist/packages/shared-types/src/types.d.ts +0 -115
  20. package/dist/packages/shared-types/src/types.d.ts.map +0 -1
  21. package/dist/packages/shared-types/src/types.js +0 -2
  22. package/dist/packages/shared-types/src/types.js.map +0 -1
  23. package/dist/packages/shared-types/src/x402.d.ts +0 -20
  24. package/dist/packages/shared-types/src/x402.d.ts.map +0 -1
  25. package/dist/packages/shared-types/src/x402.js +0 -96
  26. package/dist/packages/shared-types/src/x402.js.map +0 -1
  27. package/dist/sdk/client/src/client.d.ts +0 -26
  28. package/dist/sdk/client/src/client.d.ts.map +0 -1
  29. package/dist/sdk/client/src/client.js +0 -174
  30. package/dist/sdk/client/src/client.js.map +0 -1
  31. package/dist/sdk/client/src/crypto.d.ts +0 -5
  32. package/dist/sdk/client/src/crypto.d.ts.map +0 -1
  33. package/dist/sdk/client/src/crypto.js +0 -15
  34. package/dist/sdk/client/src/crypto.js.map +0 -1
  35. package/dist/sdk/client/src/index.d.ts +0 -10
  36. package/dist/sdk/client/src/index.d.ts.map +0 -1
  37. package/dist/sdk/client/src/index.js +0 -10
  38. package/dist/sdk/client/src/index.js.map +0 -1
  39. package/dist/sdk/client/src/indexer.d.ts +0 -22
  40. package/dist/sdk/client/src/indexer.d.ts.map +0 -1
  41. package/dist/sdk/client/src/indexer.js +0 -20
  42. package/dist/sdk/client/src/indexer.js.map +0 -1
  43. package/dist/sdk/client/src/merkle.d.ts +0 -11
  44. package/dist/sdk/client/src/merkle.d.ts.map +0 -1
  45. package/dist/sdk/client/src/merkle.js +0 -63
  46. package/dist/sdk/client/src/merkle.js.map +0 -1
  47. package/dist/sdk/client/src/notes.d.ts +0 -19
  48. package/dist/sdk/client/src/notes.d.ts.map +0 -1
  49. package/dist/sdk/client/src/notes.js +0 -105
  50. package/dist/sdk/client/src/notes.js.map +0 -1
  51. package/dist/sdk/client/src/proofProvider.d.ts +0 -33
  52. package/dist/sdk/client/src/proofProvider.d.ts.map +0 -1
  53. package/dist/sdk/client/src/proofProvider.js +0 -207
  54. package/dist/sdk/client/src/proofProvider.js.map +0 -1
  55. package/dist/sdk/client/src/relayerFetch.d.ts +0 -36
  56. package/dist/sdk/client/src/relayerFetch.d.ts.map +0 -1
  57. package/dist/sdk/client/src/relayerFetch.js +0 -195
  58. package/dist/sdk/client/src/relayerFetch.js.map +0 -1
  59. package/dist/sdk/client/src/shieldedFetch.d.ts +0 -39
  60. package/dist/sdk/client/src/shieldedFetch.d.ts.map +0 -1
  61. package/dist/sdk/client/src/shieldedFetch.js +0 -88
  62. package/dist/sdk/client/src/shieldedFetch.js.map +0 -1
  63. package/dist/sdk/client/src/types.d.ts +0 -57
  64. package/dist/sdk/client/src/types.d.ts.map +0 -1
  65. package/dist/sdk/client/src/types.js +0 -2
  66. package/dist/sdk/client/src/types.js.map +0 -1
@@ -1,105 +0,0 @@
1
- import { createCipheriv, createDecipheriv, createECDH, hkdfSync, randomBytes } from 'node:crypto';
2
- const NOTE_ENC_VERSION = 1;
3
- const INFO_LABEL = Buffer.from('shielded-x402:note-ecdh:v1', 'utf8');
4
- export function generateNoteEncryptionKeyPair() {
5
- const ecdh = createECDH('secp256k1');
6
- ecdh.generateKeys();
7
- return {
8
- privateKey: (`0x${ecdh.getPrivateKey().toString('hex')}`),
9
- publicKey: (`0x${ecdh.getPublicKey(undefined, 'uncompressed').toString('hex')}`)
10
- };
11
- }
12
- export function serializeNote(note) {
13
- return JSON.stringify({
14
- amount: note.amount.toString(),
15
- rho: note.rho,
16
- pkHash: note.pkHash,
17
- commitment: note.commitment,
18
- leafIndex: note.leafIndex
19
- });
20
- }
21
- export function deserializeNote(value) {
22
- const parsed = JSON.parse(value);
23
- return {
24
- amount: BigInt(parsed.amount),
25
- rho: parsed.rho,
26
- pkHash: parsed.pkHash,
27
- commitment: parsed.commitment,
28
- leafIndex: parsed.leafIndex
29
- };
30
- }
31
- export function encryptNoteSymmetric(note, key) {
32
- const iv = randomBytes(12);
33
- const cipher = createCipheriv('aes-256-gcm', key, iv);
34
- const payload = Buffer.from(serializeNote(note), 'utf8');
35
- const encrypted = Buffer.concat([cipher.update(payload), cipher.final()]);
36
- const tag = cipher.getAuthTag();
37
- return (`0x${Buffer.concat([iv, tag, encrypted]).toString('hex')}`);
38
- }
39
- export function decryptNoteSymmetric(ciphertext, key) {
40
- const bytes = Buffer.from(ciphertext.slice(2), 'hex');
41
- const iv = bytes.subarray(0, 12);
42
- const tag = bytes.subarray(12, 28);
43
- const encrypted = bytes.subarray(28);
44
- const decipher = createDecipheriv('aes-256-gcm', key, iv);
45
- decipher.setAuthTag(tag);
46
- const plaintext = Buffer.concat([decipher.update(encrypted), decipher.final()]);
47
- return deserializeNote(plaintext.toString('utf8'));
48
- }
49
- function deriveAesKey(sharedSecret) {
50
- const key = hkdfSync('sha256', sharedSecret, Buffer.alloc(0), INFO_LABEL, 32);
51
- return Buffer.from(key);
52
- }
53
- export function encryptNoteForPublicKey(note, recipientPublicKey, aad) {
54
- const recipientPub = Buffer.from(recipientPublicKey.slice(2), 'hex');
55
- const eph = createECDH('secp256k1');
56
- eph.generateKeys();
57
- const sharedSecret = eph.computeSecret(recipientPub);
58
- const aesKey = deriveAesKey(sharedSecret);
59
- const iv = randomBytes(12);
60
- const cipher = createCipheriv('aes-256-gcm', aesKey, iv);
61
- if (aad) {
62
- cipher.setAAD(Buffer.from(aad));
63
- }
64
- const payload = Buffer.from(serializeNote(note), 'utf8');
65
- const encrypted = Buffer.concat([cipher.update(payload), cipher.final()]);
66
- const tag = cipher.getAuthTag();
67
- const ephPub = eph.getPublicKey(undefined, 'uncompressed');
68
- const envelope = Buffer.concat([
69
- Buffer.from([NOTE_ENC_VERSION]),
70
- ephPub,
71
- iv,
72
- tag,
73
- encrypted
74
- ]);
75
- return (`0x${envelope.toString('hex')}`);
76
- }
77
- export function decryptNoteWithPrivateKey(envelopeCiphertext, recipientPrivateKey, aad) {
78
- const bytes = Buffer.from(envelopeCiphertext.slice(2), 'hex');
79
- if (bytes.length < 1 + 65 + 12 + 16) {
80
- throw new Error('invalid envelope length');
81
- }
82
- const version = bytes[0];
83
- if (version !== NOTE_ENC_VERSION) {
84
- throw new Error(`unsupported note envelope version: ${version}`);
85
- }
86
- const ephPub = bytes.subarray(1, 66);
87
- const iv = bytes.subarray(66, 78);
88
- const tag = bytes.subarray(78, 94);
89
- const encrypted = bytes.subarray(94);
90
- const recipient = createECDH('secp256k1');
91
- recipient.setPrivateKey(Buffer.from(recipientPrivateKey.slice(2), 'hex'));
92
- const sharedSecret = recipient.computeSecret(ephPub);
93
- const aesKey = deriveAesKey(sharedSecret);
94
- const decipher = createDecipheriv('aes-256-gcm', aesKey, iv);
95
- if (aad) {
96
- decipher.setAAD(Buffer.from(aad));
97
- }
98
- decipher.setAuthTag(tag);
99
- const plaintext = Buffer.concat([decipher.update(encrypted), decipher.final()]);
100
- return deserializeNote(plaintext.toString('utf8'));
101
- }
102
- // Backward-compatible aliases.
103
- export const encryptNote = encryptNoteSymmetric;
104
- export const decryptNote = decryptNoteSymmetric;
105
- //# sourceMappingURL=notes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"notes.js","sourceRoot":"","sources":["../../../../src/notes.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- import type { ProofProvider } from './types.js';
2
- export interface NoirJsProgramExecutor {
3
- execute: (input: Record<string, unknown>) => Promise<{
4
- witness: unknown;
5
- }>;
6
- }
7
- export interface NoirJsBackend {
8
- generateProof: (witness: unknown) => Promise<{
9
- proof: unknown;
10
- publicInputs?: unknown;
11
- }>;
12
- }
13
- export interface NoirJsProofProviderConfig {
14
- noir: NoirJsProgramExecutor;
15
- backend: NoirJsBackend;
16
- enforcePublicInputsMatch?: boolean;
17
- }
18
- export interface NoirCircuitArtifact {
19
- bytecode: string;
20
- [key: string]: unknown;
21
- }
22
- export declare function createNoirJsProofProvider(config: NoirJsProofProviderConfig): ProofProvider;
23
- /**
24
- * Convenience factory for Node agent apps:
25
- * instantiates Noir + UltraHonkBackend from a compiled Noir circuit artifact.
26
- */
27
- export declare function createNoirJsProofProviderFromCircuit(circuit: NoirCircuitArtifact, config?: Omit<NoirJsProofProviderConfig, 'noir' | 'backend'>): Promise<ProofProvider>;
28
- /**
29
- * Highest-level convenience for agent apps:
30
- * loads the bundled spend_change artifact from this package.
31
- */
32
- export declare function createNoirJsProofProviderFromDefaultCircuit(config?: Omit<NoirJsProofProviderConfig, 'noir' | 'backend'>): Promise<ProofProvider>;
33
- //# sourceMappingURL=proofProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proofProvider.d.ts","sourceRoot":"","sources":["../../../../src/proofProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAA6C,MAAM,YAAY,CAAC;AA2I3F,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,OAAO,EAAE,aAAa,CAAC;IACvB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA+BD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,aAAa,CAsB1F;AAED;;;GAGG;AACH,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC,GAC3D,OAAO,CAAC,aAAa,CAAC,CAoBxB;AAED;;;GAGG;AACH,wBAAsB,2CAA2C,CAC/D,MAAM,CAAC,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC,GAC3D,OAAO,CAAC,aAAa,CAAC,CAGxB"}
@@ -1,207 +0,0 @@
1
- import { CRYPTO_SPEC } from '@shielded-x402/shared-types';
2
- import { pad } from 'viem';
3
- const BN254_FIELD_MODULUS = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
4
- const MERKLE_DEPTH = CRYPTO_SPEC.merkleTreeDepth;
5
- const toHexWord = (value) => `0x${value.toString(16).padStart(64, '0')}`;
6
- const normalizeHex = (value) => {
7
- const trimmed = value.trim().toLowerCase();
8
- if (!trimmed.startsWith('0x')) {
9
- return `0x${BigInt(trimmed).toString(16)}`;
10
- }
11
- return trimmed;
12
- };
13
- const hexToBytes32 = (value) => {
14
- const hex = value.slice(2).padStart(64, '0');
15
- const bytes = [];
16
- for (let i = 0; i < 64; i += 2) {
17
- bytes.push(Number.parseInt(hex.slice(i, i + 2), 16));
18
- }
19
- return bytes;
20
- };
21
- const fieldHexToDecimal = (value, label) => {
22
- const scalar = BigInt(value);
23
- if (scalar >= BN254_FIELD_MODULUS) {
24
- throw new Error(`${label} exceeds BN254 field modulus; provide a field-safe value`);
25
- }
26
- return scalar.toString(10);
27
- };
28
- const normalizePublicInputWord = (value) => {
29
- if (typeof value === 'string') {
30
- return toHexWord(BigInt(normalizeHex(value)));
31
- }
32
- if (typeof value === 'bigint') {
33
- return toHexWord(value);
34
- }
35
- if (typeof value === 'number') {
36
- return toHexWord(BigInt(value));
37
- }
38
- throw new Error(`unsupported public input value type: ${typeof value}`);
39
- };
40
- const collapseExpandedPublicInputs = (publicInputs) => {
41
- if (publicInputs.length < 161)
42
- return null;
43
- const readWord = (start) => {
44
- const bytes = [];
45
- for (let i = 0; i < 32; i += 1) {
46
- const item = publicInputs[start + i];
47
- if (!item)
48
- throw new Error('invalid expanded public input');
49
- const n = BigInt(item);
50
- if (n < 0n || n > 255n)
51
- throw new Error('expanded public input byte out of range');
52
- bytes.push(Number(n));
53
- }
54
- return `0x${Buffer.from(bytes).toString('hex')}`;
55
- };
56
- return [
57
- readWord(0),
58
- readWord(32),
59
- readWord(64),
60
- readWord(96),
61
- readWord(128),
62
- toHexWord(BigInt(publicInputs[160] ?? '0x0'))
63
- ];
64
- };
65
- const normalizePublicInputs = (values) => {
66
- if (!Array.isArray(values))
67
- return [];
68
- const words = values.map((value) => normalizePublicInputWord(value));
69
- if (words.length === 6)
70
- return words;
71
- const collapsed = collapseExpandedPublicInputs(words);
72
- return collapsed ?? words;
73
- };
74
- const normalizeProofHex = (value) => {
75
- if (typeof value === 'string') {
76
- return normalizeHex(value);
77
- }
78
- if (value instanceof Uint8Array) {
79
- return `0x${Buffer.from(value).toString('hex')}`;
80
- }
81
- if (value && typeof value === 'object' && 'proof' in value) {
82
- return normalizeProofHex(value.proof);
83
- }
84
- throw new Error('unsupported proof value');
85
- };
86
- const toNoirInput = (request) => {
87
- if (request.witness.path.length > MERKLE_DEPTH || request.witness.indexBits.length > MERKLE_DEPTH) {
88
- throw new Error(`merkle witness exceeds configured depth ${MERKLE_DEPTH}`);
89
- }
90
- const pathBytes = request.witness.path.slice(0, MERKLE_DEPTH).map((value) => hexToBytes32(value));
91
- const merklePath = [...pathBytes];
92
- while (merklePath.length < MERKLE_DEPTH) {
93
- merklePath.push(new Array(32).fill(0));
94
- }
95
- const indexBits = request.witness.indexBits.slice(0, MERKLE_DEPTH);
96
- while (indexBits.length < MERKLE_DEPTH) {
97
- indexBits.push(0);
98
- }
99
- const normalizedIndexBits = indexBits.map((bit) => {
100
- if (bit !== 0 && bit !== 1) {
101
- throw new Error('merkle witness indexBits must be 0/1');
102
- }
103
- return bit;
104
- });
105
- return {
106
- note_amount: request.note.amount.toString(10),
107
- note_rho: fieldHexToDecimal(request.note.rho, 'note.rho'),
108
- note_pk_hash: fieldHexToDecimal(request.note.pkHash, 'note.pkHash'),
109
- nullifier_secret: fieldHexToDecimal(request.nullifierSecret, 'nullifierSecret'),
110
- merkle_path: merklePath,
111
- index_bits: normalizedIndexBits,
112
- merchant_pk_hash: fieldHexToDecimal(request.merchantPubKey, 'merchantPubKey'),
113
- merchant_rho: fieldHexToDecimal(request.merchantRho, 'merchantRho'),
114
- change_pk_hash: fieldHexToDecimal(request.changePkHash, 'changePkHash'),
115
- change_rho: fieldHexToDecimal(request.changeRho, 'changeRho'),
116
- pay_amount: request.amount.toString(10),
117
- challenge_nonce: hexToBytes32(request.challengeNonce),
118
- merchant_address_word: hexToBytes32(pad(request.merchantAddress, { size: 32 }))
119
- };
120
- };
121
- const equalPublicInputs = (left, right) => {
122
- if (left.length !== right.length)
123
- return false;
124
- for (let i = 0; i < left.length; i += 1) {
125
- if ((left[i] ?? '').toLowerCase() !== (right[i] ?? '').toLowerCase()) {
126
- return false;
127
- }
128
- }
129
- return true;
130
- };
131
- const isNoirCircuitArtifact = (value) => {
132
- return Boolean(value &&
133
- typeof value === 'object' &&
134
- typeof value.bytecode === 'string');
135
- };
136
- const loadBundledSpendChangeCircuit = async () => {
137
- const dynamicImport = new Function('m', 'return import(m)');
138
- // Node-safe path: avoid JSON module import-attribute issues by reading raw file.
139
- try {
140
- const fs = await dynamicImport('node:fs/promises');
141
- const raw = await fs.readFile(new URL('./circuits/spend_change.json', import.meta.url), 'utf8');
142
- const parsed = JSON.parse(raw);
143
- if (isNoirCircuitArtifact(parsed))
144
- return parsed;
145
- }
146
- catch {
147
- // Fall through to runtime module import fallback.
148
- }
149
- const module = await dynamicImport('./circuits/spend_change.json');
150
- const candidate = module.default ?? module;
151
- if (!isNoirCircuitArtifact(candidate)) {
152
- throw new Error('bundled spend_change circuit artifact is invalid');
153
- }
154
- return candidate;
155
- };
156
- export function createNoirJsProofProvider(config) {
157
- return {
158
- async generateProof(request) {
159
- const noirInput = toNoirInput(request);
160
- const { witness } = await config.noir.execute(noirInput);
161
- const generated = await config.backend.generateProof(witness);
162
- const proof = normalizeProofHex(generated.proof);
163
- const normalized = normalizePublicInputs(generated.publicInputs);
164
- const useNormalized = normalized.length > 0;
165
- const finalPublicInputs = useNormalized ? normalized : request.expectedPublicInputs;
166
- if ((config.enforcePublicInputsMatch ?? true) && !equalPublicInputs(finalPublicInputs, request.expectedPublicInputs)) {
167
- throw new Error('proof provider public inputs mismatch with SDK-computed values');
168
- }
169
- return {
170
- proof,
171
- publicInputs: finalPublicInputs
172
- };
173
- }
174
- };
175
- }
176
- /**
177
- * Convenience factory for Node agent apps:
178
- * instantiates Noir + UltraHonkBackend from a compiled Noir circuit artifact.
179
- */
180
- export async function createNoirJsProofProviderFromCircuit(circuit, config) {
181
- const dynamicImport = new Function('m', 'return import(m)');
182
- const noirPkg = await dynamicImport('@noir-lang/noir_js');
183
- const bbPkg = await dynamicImport('@aztec/bb.js');
184
- const Noir = noirPkg.Noir;
185
- const UltraHonkBackend = bbPkg.UltraHonkBackend;
186
- const noir = new Noir(circuit);
187
- const backend = new UltraHonkBackend(circuit.bytecode);
188
- const providerConfig = {
189
- noir,
190
- backend
191
- };
192
- if (config?.enforcePublicInputsMatch !== undefined) {
193
- providerConfig.enforcePublicInputsMatch = config.enforcePublicInputsMatch;
194
- }
195
- return createNoirJsProofProvider({
196
- ...providerConfig
197
- });
198
- }
199
- /**
200
- * Highest-level convenience for agent apps:
201
- * loads the bundled spend_change artifact from this package.
202
- */
203
- export async function createNoirJsProofProviderFromDefaultCircuit(config) {
204
- const circuit = await loadBundledSpendChangeCircuit();
205
- return createNoirJsProofProviderFromCircuit(circuit, config);
206
- }
207
- //# sourceMappingURL=proofProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"proofProvider.js","sourceRoot":"","sources":["../../../../src/proofProvider.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import { type Hex, type PaymentRequirement, type ShieldedNote } from '@shielded-x402/shared-types';
2
- import { ShieldedClientSDK } from './client.js';
3
- import type { MerkleWitness } from './merkle.js';
4
- export interface RelayedShieldedFetchContext {
5
- note: ShieldedNote;
6
- witness: MerkleWitness;
7
- payerPkHash: Hex;
8
- }
9
- export interface ResolveRelayedContextArgs {
10
- input: string;
11
- init: RequestInit;
12
- requirement: PaymentRequirement;
13
- challengeResponse: Response;
14
- }
15
- export interface UnsupportedRelayedRailArgs {
16
- input: string;
17
- init: RequestInit;
18
- requirement: PaymentRequirement;
19
- challengeResponse: Response;
20
- }
21
- export interface CreateRelayedShieldedFetchConfig {
22
- sdk: ShieldedClientSDK;
23
- relayerEndpoint: string;
24
- relayerPath?: string;
25
- relayerChallengePath?: string;
26
- resolveContext: (args: ResolveRelayedContextArgs) => Promise<RelayedShieldedFetchContext>;
27
- challengeUrlResolver?: (args: {
28
- input: string;
29
- requirement?: PaymentRequirement;
30
- }) => string | undefined;
31
- onUnsupportedRail?: (args: UnsupportedRelayedRailArgs) => Promise<Response>;
32
- fetchImpl?: typeof fetch;
33
- }
34
- export type RelayedShieldedFetch = (input: string | URL, init?: RequestInit) => Promise<Response>;
35
- export declare function createRelayedShieldedFetch(config: CreateRelayedShieldedFetchConfig): RelayedShieldedFetch;
36
- //# sourceMappingURL=relayerFetch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relayerFetch.d.ts","sourceRoot":"","sources":["../../../../src/relayerFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,GAAG,EACR,KAAK,kBAAkB,EAKvB,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,kBAAkB,CAAC;IAChC,iBAAiB,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,kBAAkB,CAAC;IAChC,iBAAiB,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC/C,GAAG,EAAE,iBAAiB,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1F,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,kBAAkB,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IACzG,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5E,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAyHlG,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gCAAgC,GAAG,oBAAoB,CAuHzG"}
@@ -1,195 +0,0 @@
1
- import { parsePaymentRequiredEnvelope, parsePaymentRequiredHeader, RELAYER_ROUTES, X402_HEADERS } from '@shielded-x402/shared-types';
2
- function normalizeInput(input) {
3
- if (typeof input === 'string')
4
- return input;
5
- return input.toString();
6
- }
7
- function headersToRecord(headers) {
8
- if (!headers)
9
- return {};
10
- const out = {};
11
- const cast = new Headers(headers);
12
- cast.forEach((value, key) => {
13
- out[key] = value;
14
- });
15
- return out;
16
- }
17
- function bytesToBase64(bytes) {
18
- return Buffer.from(bytes).toString('base64');
19
- }
20
- function serializedToFetchInit(method, serialized) {
21
- const init = {
22
- method,
23
- headers: serialized.headers
24
- };
25
- if (method !== 'GET' && method !== 'HEAD' && serialized.bodyBase64 !== undefined) {
26
- init.body = Buffer.from(serialized.bodyBase64, 'base64');
27
- }
28
- return init;
29
- }
30
- async function requestShieldedRequirementFromRelayer(baseFetch, relayerEndpoint, relayerChallengePath, merchantRequest, merchantPaymentRequiredHeader) {
31
- const challengeRequest = {
32
- merchantRequest,
33
- merchantPaymentRequiredHeader
34
- };
35
- const response = await baseFetch(`${relayerEndpoint.replace(/\/$/, '')}${relayerChallengePath}`, {
36
- method: 'POST',
37
- headers: {
38
- 'content-type': 'application/json'
39
- },
40
- body: JSON.stringify(challengeRequest)
41
- });
42
- if (!response.ok) {
43
- const body = await response.text();
44
- throw new Error(`relayer challenge request failed: ${response.status} ${body}`);
45
- }
46
- const payload = (await response.json());
47
- if (payload.requirement) {
48
- return payload.requirement;
49
- }
50
- if (payload.paymentRequiredHeader) {
51
- return parsePaymentRequiredHeader(payload.paymentRequiredHeader);
52
- }
53
- throw new Error('relayer challenge response missing requirement');
54
- }
55
- async function serializeMerchantRequestBody(method, headers, body) {
56
- const normalizedMethod = method.toUpperCase();
57
- const supportsBody = normalizedMethod !== 'GET' && normalizedMethod !== 'HEAD';
58
- const requestInit = {
59
- method: normalizedMethod
60
- };
61
- if (headers !== undefined) {
62
- requestInit.headers = headers;
63
- }
64
- if (supportsBody && body !== undefined && body !== null) {
65
- requestInit.body = body;
66
- }
67
- const request = new Request('http://relay.local', requestInit);
68
- const serializedHeaders = headersToRecord(request.headers);
69
- if (!supportsBody || body === undefined || body === null) {
70
- return { headers: serializedHeaders };
71
- }
72
- const bytes = new Uint8Array(await request.arrayBuffer());
73
- return {
74
- headers: serializedHeaders,
75
- bodyBase64: bytesToBase64(bytes)
76
- };
77
- }
78
- function toRelayResultResponse(relayResponse) {
79
- const settlementIdHeader = { 'x-relayer-settlement-id': relayResponse.settlementId };
80
- if (!relayResponse.merchantResult) {
81
- const status = relayResponse.status === 'DONE' ? 200 : 502;
82
- return new Response(JSON.stringify(relayResponse), {
83
- status,
84
- headers: {
85
- ...settlementIdHeader,
86
- 'content-type': 'application/json'
87
- }
88
- });
89
- }
90
- return new Response(Buffer.from(relayResponse.merchantResult.bodyBase64, 'base64'), {
91
- status: relayResponse.merchantResult.status,
92
- headers: {
93
- ...relayResponse.merchantResult.headers,
94
- ...settlementIdHeader
95
- }
96
- });
97
- }
98
- export function createRelayedShieldedFetch(config) {
99
- const baseFetch = config.fetchImpl ?? fetch;
100
- const relayerPath = config.relayerPath ?? RELAYER_ROUTES.pay;
101
- const relayerChallengePath = config.relayerChallengePath ?? RELAYER_ROUTES.challenge;
102
- return async (input, init) => {
103
- const normalizedInput = normalizeInput(input);
104
- const requestInit = init ?? {};
105
- const method = (requestInit.method ?? 'GET').toUpperCase();
106
- const serializedRequest = await serializeMerchantRequestBody(method, requestInit.headers, requestInit.body);
107
- const baseMerchantRequest = {
108
- url: normalizedInput,
109
- method,
110
- headers: serializedRequest.headers,
111
- ...(serializedRequest.bodyBase64 !== undefined
112
- ? { bodyBase64: serializedRequest.bodyBase64 }
113
- : {})
114
- };
115
- const first = await baseFetch(normalizedInput, serializedToFetchInit(method, serializedRequest));
116
- if (first.status !== 402)
117
- return first;
118
- const merchantRequiredHeader = first.headers.get(X402_HEADERS.paymentRequired);
119
- if (!merchantRequiredHeader) {
120
- throw new Error(`missing ${X402_HEADERS.paymentRequired} header`);
121
- }
122
- parsePaymentRequiredEnvelope(merchantRequiredHeader);
123
- let requirement;
124
- let parsedRequirement;
125
- try {
126
- parsedRequirement = config.sdk.parse402Response(first).requirement;
127
- }
128
- catch {
129
- parsedRequirement = undefined;
130
- }
131
- if (parsedRequirement?.rail === 'shielded-usdc') {
132
- requirement = parsedRequirement;
133
- }
134
- else {
135
- const challengeUrl = config.challengeUrlResolver?.(parsedRequirement
136
- ? {
137
- input: normalizedInput,
138
- requirement: parsedRequirement
139
- }
140
- : {
141
- input: normalizedInput
142
- });
143
- try {
144
- requirement = await requestShieldedRequirementFromRelayer(baseFetch, config.relayerEndpoint, relayerChallengePath, {
145
- ...baseMerchantRequest,
146
- ...(challengeUrl ? { challengeUrl } : {})
147
- }, merchantRequiredHeader);
148
- }
149
- catch (error) {
150
- if (parsedRequirement && config.onUnsupportedRail) {
151
- return config.onUnsupportedRail({
152
- input: normalizedInput,
153
- init: requestInit,
154
- requirement: parsedRequirement,
155
- challengeResponse: first
156
- });
157
- }
158
- throw error;
159
- }
160
- }
161
- const context = await config.resolveContext({
162
- input: normalizedInput,
163
- init: requestInit,
164
- requirement,
165
- challengeResponse: first
166
- });
167
- const prepared = await config.sdk.prepare402Payment(requirement, context.note, context.witness, context.payerPkHash, serializedRequest.headers);
168
- const paymentSignatureHeader = prepared.headers.get(X402_HEADERS.paymentSignature);
169
- if (!paymentSignatureHeader) {
170
- throw new Error('failed to build relayer payment headers');
171
- }
172
- const challengeUrl = config.challengeUrlResolver?.({
173
- input: normalizedInput,
174
- requirement
175
- });
176
- const relayRequest = {
177
- merchantRequest: {
178
- ...baseMerchantRequest,
179
- ...(challengeUrl ? { challengeUrl } : {})
180
- },
181
- requirement,
182
- paymentSignatureHeader
183
- };
184
- const relayerResponse = await baseFetch(`${config.relayerEndpoint.replace(/\/$/, '')}${relayerPath}`, {
185
- method: 'POST',
186
- headers: {
187
- 'content-type': 'application/json'
188
- },
189
- body: JSON.stringify(relayRequest)
190
- });
191
- const relayPayload = (await relayerResponse.json());
192
- return toRelayResultResponse(relayPayload);
193
- };
194
- }
195
- //# sourceMappingURL=relayerFetch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relayerFetch.js","sourceRoot":"","sources":["../../../../src/relayerFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,cAAc,EACd,YAAY,EAQb,MAAM,6BAA6B,CAAC;AAqCrC,SAAS,cAAc,CAAC,KAAmB;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,OAAgC;IACvD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAc,EACd,UAAoE;IAEpE,MAAM,IAAI,GAAgB;QACxB,MAAM;QACN,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;IACF,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjF,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qCAAqC,CAClD,SAAuB,EACvB,eAAuB,EACvB,oBAA4B,EAC5B,eAA2D,EAC3D,6BAAqC;IAErC,MAAM,gBAAgB,GAA4B;QAChD,eAAe;QACf,6BAA6B;KAC9B,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,oBAAoB,EAAE,EAAE;QAC/F,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;KACvC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;IACpE,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,WAAW,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAClC,OAAO,0BAA0B,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACpE,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,MAAc,EACd,OAAgC,EAChC,IAAiC;IAEjC,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,YAAY,GAAG,gBAAgB,KAAK,KAAK,IAAI,gBAAgB,KAAK,MAAM,CAAC;IAC/E,MAAM,WAAW,GAAgB;QAC/B,MAAM,EAAE,gBAAgB;KACzB,CAAC;IACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxD,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAE/D,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,YAAY,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,OAAO;QACL,OAAO,EAAE,iBAAiB;QAC1B,UAAU,EAAE,aAAa,CAAC,KAAK,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,aAAiC;IAC9D,MAAM,kBAAkB,GAAG,EAAE,yBAAyB,EAAE,aAAa,CAAC,YAAY,EAAE,CAAC;IACrF,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;YACjD,MAAM;YACN,OAAO,EAAE;gBACP,GAAG,kBAAkB;gBACrB,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;QAClF,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,MAAM;QAC3C,OAAO,EAAE;YACP,GAAG,aAAa,CAAC,cAAc,CAAC,OAAO;YACvC,GAAG,kBAAkB;SACtB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAwC;IACjF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,cAAc,CAAC,GAAG,CAAC;IAC7D,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,cAAc,CAAC,SAAS,CAAC;IAErF,OAAO,KAAK,EAAE,KAAmB,EAAE,IAAkB,EAAqB,EAAE;QAC1E,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAgB,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3D,MAAM,iBAAiB,GAAG,MAAM,4BAA4B,CAC1D,MAAM,EACN,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,IAAI,CACjB,CAAC;QACF,MAAM,mBAAmB,GAAG;YAC1B,GAAG,EAAE,eAAe;YACpB,MAAM;YACN,OAAO,EAAE,iBAAiB,CAAC,OAAO;YAClC,GAAG,CAAC,iBAAiB,CAAC,UAAU,KAAK,SAAS;gBAC5C,CAAC,CAAC,EAAE,UAAU,EAAE,iBAAiB,CAAC,UAAU,EAAE;gBAC9C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACjG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAC/E,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,WAAW,YAAY,CAAC,eAAe,SAAS,CAAC,CAAC;QACpE,CAAC;QACD,4BAA4B,CAAC,sBAAsB,CAAC,CAAC;QAErD,IAAI,WAA+B,CAAC;QACpC,IAAI,iBAAiD,CAAC;QACtD,IAAI,CAAC;YACH,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,SAAS,CAAC;QAChC,CAAC;QAED,IAAI,iBAAiB,EAAE,IAAI,KAAK,eAAe,EAAE,CAAC;YAChD,WAAW,GAAG,iBAAiB,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAChD,iBAAiB;gBACf,CAAC,CAAC;oBACE,KAAK,EAAE,eAAe;oBACtB,WAAW,EAAE,iBAAiB;iBAC/B;gBACH,CAAC,CAAC;oBACE,KAAK,EAAE,eAAe;iBACvB,CACN,CAAC;YACF,IAAI,CAAC;gBACH,WAAW,GAAG,MAAM,qCAAqC,CACvD,SAAS,EACT,MAAM,CAAC,eAAe,EACtB,oBAAoB,EACpB;oBACE,GAAG,mBAAmB;oBACtB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C,EACD,sBAAsB,CACvB,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,iBAAiB,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAClD,OAAO,MAAM,CAAC,iBAAiB,CAAC;wBAC9B,KAAK,EAAE,eAAe;wBACtB,IAAI,EAAE,WAAW;wBACjB,WAAW,EAAE,iBAAiB;wBAC9B,iBAAiB,EAAE,KAAK;qBACzB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;YAC1C,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,WAAW;YACjB,WAAW;YACX,iBAAiB,EAAE,KAAK;SACzB,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,iBAAiB,CACjD,WAAW,EACX,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,WAAW,EACnB,iBAAiB,CAAC,OAAO,CAC1B,CAAC;QAEF,MAAM,sBAAsB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACnF,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACjD,KAAK,EAAE,eAAe;YACtB,WAAW;SACZ,CAAC,CAAC;QACH,MAAM,YAAY,GAAsB;YACtC,eAAe,EAAE;gBACf,GAAG,mBAAmB;gBACtB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C;YACD,WAAW;YACX,sBAAsB;SACvB,CAAC;QAEF,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,WAAW,EAAE,EAAE;YACpG,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACnC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,CAAuB,CAAC;QAC1E,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}