@cedros/pay-react 0.1.0
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/LICENSE +21 -0
- package/README.md +1731 -0
- package/dist/CedrosContext-B3iCqN6e.js +11 -0
- package/dist/CedrosContext-vX9uqZKp.mjs +1796 -0
- package/dist/ar-LVoQZTFI.js +1 -0
- package/dist/ar-w27mU-4x.mjs +19 -0
- package/dist/bn-BR5Cv1T4.js +1 -0
- package/dist/bn-Ba_k3Kex.mjs +19 -0
- package/dist/components/CedrosPay.d.ts +54 -0
- package/dist/components/CedrosPay.d.ts.map +1 -0
- package/dist/components/CryptoButton.d.ts +26 -0
- package/dist/components/CryptoButton.d.ts.map +1 -0
- package/dist/components/PaymentModal.d.ts +28 -0
- package/dist/components/PaymentModal.d.ts.map +1 -0
- package/dist/components/ProductPrice.d.ts +56 -0
- package/dist/components/ProductPrice.d.ts.map +1 -0
- package/dist/components/PurchaseButton.d.ts +52 -0
- package/dist/components/PurchaseButton.d.ts.map +1 -0
- package/dist/components/StripeButton.d.ts +27 -0
- package/dist/components/StripeButton.d.ts.map +1 -0
- package/dist/context/CedrosContext.d.ts +46 -0
- package/dist/context/CedrosContext.d.ts.map +1 -0
- package/dist/context/ThemeContext.d.ts +30 -0
- package/dist/context/ThemeContext.d.ts.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/crypto-only.d.ts +33 -0
- package/dist/crypto-only.d.ts.map +1 -0
- package/dist/crypto-only.js +1 -0
- package/dist/crypto-only.mjs +35 -0
- package/dist/de-CoZiPFN7.mjs +19 -0
- package/dist/de-pQxy-oD1.js +1 -0
- package/dist/en-CSsJl3nf.mjs +19 -0
- package/dist/en-D-uY3ltT.js +1 -0
- package/dist/es-BWGIBp2f.mjs +19 -0
- package/dist/es-D24cg8dD.js +1 -0
- package/dist/fil-BOBft9G-.js +1 -0
- package/dist/fil-Czo27xmj.mjs +19 -0
- package/dist/fr-Ct9ub8Fa.js +1 -0
- package/dist/fr-DQ-2ThBv.mjs +19 -0
- package/dist/he-DpV1WnBQ.mjs +19 -0
- package/dist/he-DtQqRKRq.js +1 -0
- package/dist/hooks/usePaymentMode.d.ts +39 -0
- package/dist/hooks/usePaymentMode.d.ts.map +1 -0
- package/dist/hooks/useRefundVerification.d.ts +30 -0
- package/dist/hooks/useRefundVerification.d.ts.map +1 -0
- package/dist/hooks/useStripeCheckout.d.ts +20 -0
- package/dist/hooks/useStripeCheckout.d.ts.map +1 -0
- package/dist/hooks/useX402Payment.d.ts +24 -0
- package/dist/hooks/useX402Payment.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +107 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/useTranslation.d.ts +55 -0
- package/dist/i18n/useTranslation.d.ts.map +1 -0
- package/dist/id-BJMqsu19.mjs +19 -0
- package/dist/id-CiM2mL7C.js +1 -0
- package/dist/in-BxgxKLQH.mjs +19 -0
- package/dist/in-Bzcjmxcc.js +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +626 -0
- package/dist/it-Blb_pIJl.js +1 -0
- package/dist/it-DZFFPALf.mjs +19 -0
- package/dist/jp-9NHyIuwY.js +1 -0
- package/dist/jp-ZExTrlHK.mjs +19 -0
- package/dist/kr-DHX3i4Ht.mjs +19 -0
- package/dist/kr-DvzJ-0yX.js +1 -0
- package/dist/managers/ManagerCache.d.ts +49 -0
- package/dist/managers/ManagerCache.d.ts.map +1 -0
- package/dist/managers/RouteDiscoveryManager.d.ts +72 -0
- package/dist/managers/RouteDiscoveryManager.d.ts.map +1 -0
- package/dist/managers/StripeManager.d.ts +110 -0
- package/dist/managers/StripeManager.d.ts.map +1 -0
- package/dist/managers/WalletManager.d.ts +150 -0
- package/dist/managers/WalletManager.d.ts.map +1 -0
- package/dist/managers/X402Manager.d.ts +176 -0
- package/dist/managers/X402Manager.d.ts.map +1 -0
- package/dist/ms-BOAu5pUB.js +1 -0
- package/dist/ms-Cv1fdIi2.mjs +19 -0
- package/dist/nl-BmGonsKb.mjs +19 -0
- package/dist/nl-WHh_DfO8.js +1 -0
- package/dist/pa-B7kIhZCF.js +1 -0
- package/dist/pa-BfwcJIar.mjs +19 -0
- package/dist/pay-react.css +1 -0
- package/dist/pl-DE5IB9xv.mjs +19 -0
- package/dist/pl-H0hBKdvF.js +1 -0
- package/dist/pt-CLzkqDzf.mjs +19 -0
- package/dist/pt-DwGrViQ3.js +1 -0
- package/dist/ru-CB2m0UDT.js +1 -0
- package/dist/ru-DM6-oUR0.mjs +19 -0
- package/dist/stripe-only.d.ts +31 -0
- package/dist/stripe-only.d.ts.map +1 -0
- package/dist/stripe-only.js +1 -0
- package/dist/stripe-only.mjs +33 -0
- package/dist/styles-D3XGpsqb.js +1 -0
- package/dist/styles-zgmHs6Hs.mjs +1601 -0
- package/dist/ta-A5HnrGb5.mjs +19 -0
- package/dist/ta-CAS197uN.js +1 -0
- package/dist/telemetry.d.ts +27 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +1 -0
- package/dist/telemetry.mjs +127 -0
- package/dist/testing/__tests__/providers.test.d.ts +10 -0
- package/dist/testing/__tests__/providers.test.d.ts.map +1 -0
- package/dist/testing/helpers.d.ts +242 -0
- package/dist/testing/helpers.d.ts.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/testing/index.mjs +374 -0
- package/dist/testing/mocks.d.ts +225 -0
- package/dist/testing/mocks.d.ts.map +1 -0
- package/dist/testing/providers.d.ts +89 -0
- package/dist/testing/providers.d.ts.map +1 -0
- package/dist/th-3fbB3Ytp.mjs +19 -0
- package/dist/th-Cpz2cFcg.js +1 -0
- package/dist/tr-BrgfFFdq.mjs +19 -0
- package/dist/tr-hQrEFk86.js +1 -0
- package/dist/types/componentOptions.d.ts +138 -0
- package/dist/types/componentOptions.d.ts.map +1 -0
- package/dist/types/errors.d.ts +213 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/index.d.ts +248 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/uk-0hFun_g_.mjs +19 -0
- package/dist/uk-DrK2Sv8C.js +1 -0
- package/dist/ur-CaOjJXai.mjs +19 -0
- package/dist/ur-D5-7mN9a.js +1 -0
- package/dist/utils/__tests__/cspHelper.test.d.ts +9 -0
- package/dist/utils/__tests__/cspHelper.test.d.ts.map +1 -0
- package/dist/utils/__tests__/fetchWithTimeout.test.d.ts +11 -0
- package/dist/utils/__tests__/fetchWithTimeout.test.d.ts.map +1 -0
- package/dist/utils/cartHelpers.d.ts +105 -0
- package/dist/utils/cartHelpers.d.ts.map +1 -0
- package/dist/utils/circuitBreaker.d.ts +112 -0
- package/dist/utils/circuitBreaker.d.ts.map +1 -0
- package/dist/utils/couponHelpers.d.ts +50 -0
- package/dist/utils/couponHelpers.d.ts.map +1 -0
- package/dist/utils/cspHelper.d.ts +162 -0
- package/dist/utils/cspHelper.d.ts.map +1 -0
- package/dist/utils/deprecation.d.ts +128 -0
- package/dist/utils/deprecation.d.ts.map +1 -0
- package/dist/utils/errorHandling.d.ts +30 -0
- package/dist/utils/errorHandling.d.ts.map +1 -0
- package/dist/utils/errorMessages.d.ts +47 -0
- package/dist/utils/errorMessages.d.ts.map +1 -0
- package/dist/utils/errorParser.d.ts +37 -0
- package/dist/utils/errorParser.d.ts.map +1 -0
- package/dist/utils/eventEmitter.d.ts +119 -0
- package/dist/utils/eventEmitter.d.ts.map +1 -0
- package/dist/utils/exponentialBackoff.d.ts +104 -0
- package/dist/utils/exponentialBackoff.d.ts.map +1 -0
- package/dist/utils/fetchWithTimeout.d.ts +13 -0
- package/dist/utils/fetchWithTimeout.d.ts.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +76 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/modalStyles.d.ts +13 -0
- package/dist/utils/modalStyles.d.ts.map +1 -0
- package/dist/utils/rateLimiter.d.ts +88 -0
- package/dist/utils/rateLimiter.d.ts.map +1 -0
- package/dist/utils/requestDeduplication.d.ts +124 -0
- package/dist/utils/requestDeduplication.d.ts.map +1 -0
- package/dist/utils/securityValidation.d.ts +75 -0
- package/dist/utils/securityValidation.d.ts.map +1 -0
- package/dist/utils/solanaCheck.d.ts +10 -0
- package/dist/utils/solanaCheck.d.ts.map +1 -0
- package/dist/utils/telemetry.d.ts +277 -0
- package/dist/utils/telemetry.d.ts.map +1 -0
- package/dist/utils/tokenMintValidator.d.ts +77 -0
- package/dist/utils/tokenMintValidator.d.ts.map +1 -0
- package/dist/utils/uuid.d.ts +13 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/validateConfig.d.ts +13 -0
- package/dist/utils/validateConfig.d.ts.map +1 -0
- package/dist/utils/walletDetection.d.ts +6 -0
- package/dist/utils/walletDetection.d.ts.map +1 -0
- package/dist/utils/walletPool.d.ts +57 -0
- package/dist/utils/walletPool.d.ts.map +1 -0
- package/dist/uuid-C0iMjdcc.js +1 -0
- package/dist/uuid-UlzrVY8Y.mjs +17 -0
- package/dist/vn-0nlIZFLP.mjs +19 -0
- package/dist/vn-B_iut9YL.js +1 -0
- package/dist/walletDetection-JZR3UCOa.mjs +27 -0
- package/dist/walletDetection-bNmV5ItZ.js +1 -0
- package/dist/zh-B4Endr1F.mjs +19 -0
- package/dist/zh-PR82dCHr.js +1 -0
- package/package.json +139 -0
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { vi as n } from "vitest";
|
|
2
|
+
import { jsx as c, Fragment as k } from "react/jsx-runtime";
|
|
3
|
+
import { C as f } from "../CedrosContext-vX9uqZKp.mjs";
|
|
4
|
+
const P = {
|
|
5
|
+
clusterApiUrl: n.fn(() => "https://api.devnet.solana.com"),
|
|
6
|
+
Connection: class {
|
|
7
|
+
async getLatestBlockhash() {
|
|
8
|
+
return {
|
|
9
|
+
blockhash: "mockedBlockhash123",
|
|
10
|
+
lastValidBlockHeight: 1e6
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
async getBalance() {
|
|
14
|
+
return 1e9;
|
|
15
|
+
}
|
|
16
|
+
async getSignatureStatus() {
|
|
17
|
+
return { value: { confirmationStatus: "confirmed" } };
|
|
18
|
+
}
|
|
19
|
+
async getAccountInfo() {
|
|
20
|
+
return {
|
|
21
|
+
data: new Uint8Array(),
|
|
22
|
+
executable: !1,
|
|
23
|
+
lamports: 1e6,
|
|
24
|
+
owner: new Uint8Array(32),
|
|
25
|
+
rentEpoch: 0
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async sendRawTransaction() {
|
|
29
|
+
return "mockedSignature123";
|
|
30
|
+
}
|
|
31
|
+
async confirmTransaction() {
|
|
32
|
+
return { value: { err: null } };
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
SystemProgram: {
|
|
36
|
+
transfer: n.fn(() => ({
|
|
37
|
+
keys: [],
|
|
38
|
+
programId: {},
|
|
39
|
+
data: new Uint8Array()
|
|
40
|
+
}))
|
|
41
|
+
},
|
|
42
|
+
Transaction: class {
|
|
43
|
+
recentBlockhash;
|
|
44
|
+
feePayer;
|
|
45
|
+
instructions = [];
|
|
46
|
+
add(t) {
|
|
47
|
+
return this.instructions.push(t), this;
|
|
48
|
+
}
|
|
49
|
+
serialize() {
|
|
50
|
+
return new Uint8Array([1, 2, 3, 4, 5]);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
LAMPORTS_PER_SOL: 1e9,
|
|
54
|
+
PublicKey: class {
|
|
55
|
+
constructor(t) {
|
|
56
|
+
this.value = t;
|
|
57
|
+
}
|
|
58
|
+
toString() {
|
|
59
|
+
return typeof this.value == "string" ? this.value : "mockPublicKey123";
|
|
60
|
+
}
|
|
61
|
+
toBase58() {
|
|
62
|
+
return this.toString();
|
|
63
|
+
}
|
|
64
|
+
toBytes() {
|
|
65
|
+
return new Uint8Array(32);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}, T = {
|
|
69
|
+
getAssociatedTokenAddress: n.fn(async () => ({
|
|
70
|
+
toBase58: () => "mockTokenAddress123"
|
|
71
|
+
})),
|
|
72
|
+
createTransferInstruction: n.fn(() => ({
|
|
73
|
+
keys: [],
|
|
74
|
+
programId: {},
|
|
75
|
+
data: new Uint8Array()
|
|
76
|
+
})),
|
|
77
|
+
TOKEN_PROGRAM_ID: "mockTokenProgramId"
|
|
78
|
+
}, w = {
|
|
79
|
+
ConnectionProvider: ({ children: e }) => e,
|
|
80
|
+
WalletProvider: ({ children: e }) => e,
|
|
81
|
+
useWallet: () => ({
|
|
82
|
+
connected: !1,
|
|
83
|
+
connecting: !1,
|
|
84
|
+
connect: n.fn(),
|
|
85
|
+
disconnect: n.fn(),
|
|
86
|
+
publicKey: null,
|
|
87
|
+
signTransaction: n.fn(),
|
|
88
|
+
signAllTransactions: n.fn(),
|
|
89
|
+
select: n.fn()
|
|
90
|
+
})
|
|
91
|
+
}, M = {
|
|
92
|
+
PhantomWalletAdapter: class {
|
|
93
|
+
},
|
|
94
|
+
SolflareWalletAdapter: class {
|
|
95
|
+
},
|
|
96
|
+
BackpackWalletAdapter: class {
|
|
97
|
+
}
|
|
98
|
+
}, C = {
|
|
99
|
+
loadStripe: n.fn(async () => ({
|
|
100
|
+
redirectToCheckout: n.fn(async (e) => ({
|
|
101
|
+
error: null
|
|
102
|
+
})),
|
|
103
|
+
confirmCardPayment: n.fn(async () => ({
|
|
104
|
+
paymentIntent: { id: "pi_mock123", status: "succeeded" },
|
|
105
|
+
error: null
|
|
106
|
+
}))
|
|
107
|
+
}))
|
|
108
|
+
};
|
|
109
|
+
function x(e = !0, t = "mockWallet123") {
|
|
110
|
+
return {
|
|
111
|
+
connected: e,
|
|
112
|
+
connecting: !1,
|
|
113
|
+
connect: n.fn().mockResolvedValue(void 0),
|
|
114
|
+
disconnect: n.fn().mockResolvedValue(void 0),
|
|
115
|
+
publicKey: e ? { toBase58: () => t, toString: () => t } : null,
|
|
116
|
+
signTransaction: n.fn().mockResolvedValue({
|
|
117
|
+
signature: new Uint8Array(64),
|
|
118
|
+
serialize: () => new Uint8Array([1, 2, 3])
|
|
119
|
+
}),
|
|
120
|
+
signAllTransactions: n.fn().mockResolvedValue([]),
|
|
121
|
+
select: n.fn()
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function R(e = {}) {
|
|
125
|
+
const { redirectSuccess: t = !0 } = e, o = e.sessionId ?? "cs_test_mock123";
|
|
126
|
+
return {
|
|
127
|
+
redirectToCheckout: n.fn().mockResolvedValue({
|
|
128
|
+
error: t ? null : { message: "Mock redirect error" }
|
|
129
|
+
}),
|
|
130
|
+
confirmCardPayment: n.fn().mockResolvedValue({
|
|
131
|
+
paymentIntent: {
|
|
132
|
+
id: "pi_mock123",
|
|
133
|
+
status: "succeeded"
|
|
134
|
+
},
|
|
135
|
+
error: null
|
|
136
|
+
}),
|
|
137
|
+
_sessionId: o
|
|
138
|
+
// Store for potential inspection
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function U(e) {
|
|
142
|
+
return n.fn((t) => {
|
|
143
|
+
for (const [o, r] of Object.entries(e))
|
|
144
|
+
if (t.includes(o))
|
|
145
|
+
return Promise.resolve({
|
|
146
|
+
ok: r.status >= 200 && r.status < 300,
|
|
147
|
+
status: r.status,
|
|
148
|
+
json: async () => r.body,
|
|
149
|
+
text: async () => JSON.stringify(r.body),
|
|
150
|
+
headers: new Map(Object.entries(r.headers || {}))
|
|
151
|
+
});
|
|
152
|
+
return Promise.resolve({
|
|
153
|
+
ok: !1,
|
|
154
|
+
status: 404,
|
|
155
|
+
json: async () => ({ error: "Not found" }),
|
|
156
|
+
text: async () => JSON.stringify({ error: "Not found" }),
|
|
157
|
+
headers: /* @__PURE__ */ new Map()
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function p(e = {}) {
|
|
162
|
+
return function({ children: o }) {
|
|
163
|
+
const r = {
|
|
164
|
+
stripePublicKey: e.stripePublicKey ?? "pk_test_mock_key_for_testing",
|
|
165
|
+
serverUrl: e.serverUrl ?? "http://localhost:8080",
|
|
166
|
+
solanaCluster: e.solanaCluster ?? "devnet",
|
|
167
|
+
solanaEndpoint: e.solanaEndpoint,
|
|
168
|
+
theme: e.theme ?? "light",
|
|
169
|
+
themeOverrides: e.themeOverrides,
|
|
170
|
+
unstyled: !1,
|
|
171
|
+
tokenMint: void 0,
|
|
172
|
+
dangerouslyAllowUnknownMint: !0,
|
|
173
|
+
// Allow any mint in test mode
|
|
174
|
+
logLevel: 4
|
|
175
|
+
// LogLevel.SILENT - no logs in tests
|
|
176
|
+
};
|
|
177
|
+
return /* @__PURE__ */ c(f, { config: r, children: o });
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function I() {
|
|
181
|
+
return p({
|
|
182
|
+
stripePublicKey: "pk_test_minimal",
|
|
183
|
+
serverUrl: "http://localhost:8080",
|
|
184
|
+
solanaCluster: "devnet"
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function j(e = {}) {
|
|
188
|
+
return e.connected, e.publicKey, e.connecting, function({ children: o }) {
|
|
189
|
+
return /* @__PURE__ */ c(k, { children: o });
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
function B(e = "cs_test_mock123") {
|
|
193
|
+
return {
|
|
194
|
+
success: !0,
|
|
195
|
+
transactionId: e,
|
|
196
|
+
error: void 0
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function O(e = "Payment failed") {
|
|
200
|
+
return {
|
|
201
|
+
success: !1,
|
|
202
|
+
transactionId: void 0,
|
|
203
|
+
error: e
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function q(e = {}) {
|
|
207
|
+
const {
|
|
208
|
+
scheme: t = "solana-spl-transfer",
|
|
209
|
+
network: o = "mainnet-beta",
|
|
210
|
+
maxAmountRequired: r = "1000000",
|
|
211
|
+
resource: s = "test-resource",
|
|
212
|
+
description: a = "Test Payment",
|
|
213
|
+
mimeType: i = "application/json",
|
|
214
|
+
payTo: l = "mockRecipient123",
|
|
215
|
+
maxTimeoutSeconds: u = 300,
|
|
216
|
+
asset: m = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
217
|
+
// USDC mint
|
|
218
|
+
extra: d = {
|
|
219
|
+
recipientTokenAccount: "mockTokenAccount123",
|
|
220
|
+
decimals: 6,
|
|
221
|
+
tokenSymbol: "USDC",
|
|
222
|
+
memo: "test-payment"
|
|
223
|
+
}
|
|
224
|
+
} = e;
|
|
225
|
+
return {
|
|
226
|
+
scheme: t,
|
|
227
|
+
network: o,
|
|
228
|
+
maxAmountRequired: r,
|
|
229
|
+
resource: s,
|
|
230
|
+
description: a,
|
|
231
|
+
mimeType: i,
|
|
232
|
+
payTo: l,
|
|
233
|
+
maxTimeoutSeconds: u,
|
|
234
|
+
asset: m,
|
|
235
|
+
extra: d
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
function K(e = {}) {
|
|
239
|
+
const {
|
|
240
|
+
success: t = !0,
|
|
241
|
+
error: o = null,
|
|
242
|
+
txHash: r = "mockSignature123",
|
|
243
|
+
networkId: s = "mainnet-beta",
|
|
244
|
+
metadata: a
|
|
245
|
+
} = e;
|
|
246
|
+
return {
|
|
247
|
+
success: t,
|
|
248
|
+
error: o,
|
|
249
|
+
txHash: r,
|
|
250
|
+
networkId: s,
|
|
251
|
+
metadata: a
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
async function E() {
|
|
255
|
+
return new Promise((e) => setTimeout(e, 0));
|
|
256
|
+
}
|
|
257
|
+
async function N(e) {
|
|
258
|
+
return new Promise((t) => setTimeout(t, e));
|
|
259
|
+
}
|
|
260
|
+
function V(e, t = {}) {
|
|
261
|
+
const {
|
|
262
|
+
maxAmountRequired: o = "1000000",
|
|
263
|
+
asset: r = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
|
|
264
|
+
// USDC mint
|
|
265
|
+
payTo: s = "mockRecipient123"
|
|
266
|
+
} = t;
|
|
267
|
+
return {
|
|
268
|
+
ok: !1,
|
|
269
|
+
status: 402,
|
|
270
|
+
json: async () => ({
|
|
271
|
+
x402Version: 0,
|
|
272
|
+
error: "payment required",
|
|
273
|
+
accepts: [
|
|
274
|
+
{
|
|
275
|
+
scheme: "solana-spl-transfer",
|
|
276
|
+
network: "mainnet-beta",
|
|
277
|
+
maxAmountRequired: o,
|
|
278
|
+
resource: e,
|
|
279
|
+
description: "Payment required",
|
|
280
|
+
mimeType: "application/json",
|
|
281
|
+
payTo: s,
|
|
282
|
+
maxTimeoutSeconds: 300,
|
|
283
|
+
asset: r,
|
|
284
|
+
extra: {
|
|
285
|
+
recipientTokenAccount: "mockTokenAccount123",
|
|
286
|
+
decimals: 6,
|
|
287
|
+
tokenSymbol: "USDC",
|
|
288
|
+
memo: `${e}:${Date.now()}`
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
}),
|
|
293
|
+
headers: /* @__PURE__ */ new Map([
|
|
294
|
+
["content-type", "application/json"]
|
|
295
|
+
])
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
function G(e = !0) {
|
|
299
|
+
const t = e ? {
|
|
300
|
+
success: !0,
|
|
301
|
+
error: null,
|
|
302
|
+
txHash: "mockSignature123",
|
|
303
|
+
networkId: "mainnet-beta"
|
|
304
|
+
} : {
|
|
305
|
+
success: !1,
|
|
306
|
+
error: "Payment verification failed",
|
|
307
|
+
txHash: null,
|
|
308
|
+
networkId: null
|
|
309
|
+
};
|
|
310
|
+
return {
|
|
311
|
+
ok: e,
|
|
312
|
+
status: e ? 200 : 402,
|
|
313
|
+
json: async () => t,
|
|
314
|
+
headers: /* @__PURE__ */ new Map([
|
|
315
|
+
["x-payment-response", JSON.stringify(t)]
|
|
316
|
+
])
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function D(e = "cs_test_mock123") {
|
|
320
|
+
return {
|
|
321
|
+
ok: !0,
|
|
322
|
+
status: 200,
|
|
323
|
+
json: async () => ({
|
|
324
|
+
sessionId: e,
|
|
325
|
+
url: `https://checkout.stripe.com/pay/${e}`
|
|
326
|
+
})
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function F(e = "mockWallet123") {
|
|
330
|
+
return {
|
|
331
|
+
publicKey: {
|
|
332
|
+
toBase58: () => e,
|
|
333
|
+
toString: () => e
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
function z() {
|
|
338
|
+
return {
|
|
339
|
+
signature: new Uint8Array(64).fill(1),
|
|
340
|
+
serialize: () => new Uint8Array([1, 2, 3, 4, 5])
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
function H(e) {
|
|
344
|
+
return n.fn(e);
|
|
345
|
+
}
|
|
346
|
+
async function J() {
|
|
347
|
+
return new Promise((e) => setImmediate(e));
|
|
348
|
+
}
|
|
349
|
+
export {
|
|
350
|
+
I as createMinimalMockProvider,
|
|
351
|
+
p as createMockCedrosProvider,
|
|
352
|
+
U as createMockFetch,
|
|
353
|
+
R as createMockStripe,
|
|
354
|
+
x as createMockWallet,
|
|
355
|
+
H as createSpy,
|
|
356
|
+
J as flushPromises,
|
|
357
|
+
O as mockPaymentFailure,
|
|
358
|
+
B as mockPaymentSuccess,
|
|
359
|
+
V as mockQuoteResponse,
|
|
360
|
+
K as mockSettlement,
|
|
361
|
+
z as mockSignTransaction,
|
|
362
|
+
P as mockSolanaWeb3,
|
|
363
|
+
T as mockSplToken,
|
|
364
|
+
C as mockStripeJs,
|
|
365
|
+
D as mockStripeSessionResponse,
|
|
366
|
+
G as mockVerifyResponse,
|
|
367
|
+
w as mockWalletAdapter,
|
|
368
|
+
M as mockWalletAdapterWallets,
|
|
369
|
+
F as mockWalletConnect,
|
|
370
|
+
j as mockWalletProvider,
|
|
371
|
+
q as mockX402Quote,
|
|
372
|
+
N as wait,
|
|
373
|
+
E as waitForNextTick
|
|
374
|
+
};
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock implementations for Solana and Stripe dependencies
|
|
3
|
+
*
|
|
4
|
+
* These mocks can be used with vi.mock() in Vitest or jest.mock() in Jest
|
|
5
|
+
* to avoid needing real Solana/Stripe connections in tests.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Mock Solana web3.js with common methods
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* vi.mock('@solana/web3.js', () => mockSolanaWeb3);
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare const mockSolanaWeb3: {
|
|
16
|
+
clusterApiUrl: import('vitest').Mock<() => string>;
|
|
17
|
+
Connection: {
|
|
18
|
+
new (): {
|
|
19
|
+
getLatestBlockhash(): Promise<{
|
|
20
|
+
blockhash: string;
|
|
21
|
+
lastValidBlockHeight: number;
|
|
22
|
+
}>;
|
|
23
|
+
getBalance(): Promise<number>;
|
|
24
|
+
getSignatureStatus(): Promise<{
|
|
25
|
+
value: {
|
|
26
|
+
confirmationStatus: string;
|
|
27
|
+
};
|
|
28
|
+
}>;
|
|
29
|
+
getAccountInfo(): Promise<{
|
|
30
|
+
data: Uint8Array<ArrayBuffer>;
|
|
31
|
+
executable: boolean;
|
|
32
|
+
lamports: number;
|
|
33
|
+
owner: Uint8Array<ArrayBuffer>;
|
|
34
|
+
rentEpoch: number;
|
|
35
|
+
}>;
|
|
36
|
+
sendRawTransaction(): Promise<string>;
|
|
37
|
+
confirmTransaction(): Promise<{
|
|
38
|
+
value: {
|
|
39
|
+
err: null;
|
|
40
|
+
};
|
|
41
|
+
}>;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
SystemProgram: {
|
|
45
|
+
transfer: import('vitest').Mock<() => {
|
|
46
|
+
keys: never[];
|
|
47
|
+
programId: {};
|
|
48
|
+
data: Uint8Array<ArrayBuffer>;
|
|
49
|
+
}>;
|
|
50
|
+
};
|
|
51
|
+
Transaction: {
|
|
52
|
+
new (): {
|
|
53
|
+
recentBlockhash?: string;
|
|
54
|
+
feePayer?: unknown;
|
|
55
|
+
instructions: unknown[];
|
|
56
|
+
add(instruction: unknown): /*elided*/ any;
|
|
57
|
+
serialize(): Uint8Array<ArrayBuffer>;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
LAMPORTS_PER_SOL: number;
|
|
61
|
+
PublicKey: {
|
|
62
|
+
new (value: string | Uint8Array): {
|
|
63
|
+
value: string | Uint8Array;
|
|
64
|
+
toString(): string;
|
|
65
|
+
toBase58(): string;
|
|
66
|
+
toBytes(): Uint8Array<ArrayBuffer>;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Mock SPL Token with transfer instruction
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* vi.mock('@solana/spl-token', () => mockSplToken);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare const mockSplToken: {
|
|
79
|
+
getAssociatedTokenAddress: import('vitest').Mock<() => Promise<{
|
|
80
|
+
toBase58: () => "mockTokenAddress123";
|
|
81
|
+
}>>;
|
|
82
|
+
createTransferInstruction: import('vitest').Mock<() => {
|
|
83
|
+
keys: never[];
|
|
84
|
+
programId: {};
|
|
85
|
+
data: Uint8Array<ArrayBuffer>;
|
|
86
|
+
}>;
|
|
87
|
+
TOKEN_PROGRAM_ID: string;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Mock Solana wallet adapter (react)
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* vi.mock('@solana/wallet-adapter-react', () => mockWalletAdapter);
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export declare const mockWalletAdapter: {
|
|
98
|
+
ConnectionProvider: ({ children }: {
|
|
99
|
+
children: React.ReactNode;
|
|
100
|
+
}) => import('react').ReactNode;
|
|
101
|
+
WalletProvider: ({ children }: {
|
|
102
|
+
children: React.ReactNode;
|
|
103
|
+
}) => import('react').ReactNode;
|
|
104
|
+
useWallet: () => {
|
|
105
|
+
connected: boolean;
|
|
106
|
+
connecting: boolean;
|
|
107
|
+
connect: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
108
|
+
disconnect: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
109
|
+
publicKey: null;
|
|
110
|
+
signTransaction: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
111
|
+
signAllTransactions: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
112
|
+
select: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Mock Solana wallet adapter wallets
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* vi.mock('@solana/wallet-adapter-wallets', () => mockWalletAdapterWallets);
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export declare const mockWalletAdapterWallets: {
|
|
124
|
+
PhantomWalletAdapter: {
|
|
125
|
+
new (): {};
|
|
126
|
+
};
|
|
127
|
+
SolflareWalletAdapter: {
|
|
128
|
+
new (): {};
|
|
129
|
+
};
|
|
130
|
+
BackpackWalletAdapter: {
|
|
131
|
+
new (): {};
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Mock Stripe.js
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* vi.mock('@stripe/stripe-js', () => mockStripeJs);
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export declare const mockStripeJs: {
|
|
143
|
+
loadStripe: import('vitest').Mock<() => Promise<{
|
|
144
|
+
redirectToCheckout: import('vitest').Mock<(_options: {
|
|
145
|
+
sessionId: string;
|
|
146
|
+
}) => Promise<{
|
|
147
|
+
error: null;
|
|
148
|
+
}>>;
|
|
149
|
+
confirmCardPayment: import('vitest').Mock<() => Promise<{
|
|
150
|
+
paymentIntent: {
|
|
151
|
+
id: string;
|
|
152
|
+
status: string;
|
|
153
|
+
};
|
|
154
|
+
error: null;
|
|
155
|
+
}>>;
|
|
156
|
+
}>>;
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Create a mock wallet with custom behavior
|
|
160
|
+
*
|
|
161
|
+
* @param connected - Whether wallet is connected
|
|
162
|
+
* @param publicKey - Mock public key string
|
|
163
|
+
* @returns Mock wallet object
|
|
164
|
+
*/
|
|
165
|
+
export declare function createMockWallet(connected?: boolean, publicKey?: string): {
|
|
166
|
+
connected: boolean;
|
|
167
|
+
connecting: boolean;
|
|
168
|
+
connect: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
169
|
+
disconnect: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
170
|
+
publicKey: {
|
|
171
|
+
toBase58: () => string;
|
|
172
|
+
toString: () => string;
|
|
173
|
+
} | null;
|
|
174
|
+
signTransaction: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
175
|
+
signAllTransactions: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
176
|
+
select: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Create a mock Stripe instance
|
|
180
|
+
*
|
|
181
|
+
* @param options - Options for mock behavior
|
|
182
|
+
* @returns Mock Stripe object
|
|
183
|
+
*/
|
|
184
|
+
export declare function createMockStripe(options?: {
|
|
185
|
+
redirectSuccess?: boolean;
|
|
186
|
+
sessionId?: string;
|
|
187
|
+
}): {
|
|
188
|
+
redirectToCheckout: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
189
|
+
confirmCardPayment: import('vitest').Mock<import('@vitest/spy').Procedure>;
|
|
190
|
+
_sessionId: string;
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* Mock fetch for backend API calls
|
|
194
|
+
*
|
|
195
|
+
* @param responses - Map of URL patterns to responses
|
|
196
|
+
* @returns Mock fetch function
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* global.fetch = createMockFetch({
|
|
201
|
+
* '/paywall/v1/quote': { status: 402, body: { recipient: '...' } },
|
|
202
|
+
* '/paywall/v1/verify': { status: 200, body: { success: true } },
|
|
203
|
+
* });
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
export declare function createMockFetch(responses: Record<string, {
|
|
207
|
+
status: number;
|
|
208
|
+
body: unknown;
|
|
209
|
+
headers?: Record<string, string>;
|
|
210
|
+
}>): import('vitest').Mock<(url: string) => Promise<{
|
|
211
|
+
ok: boolean;
|
|
212
|
+
status: number;
|
|
213
|
+
json: () => Promise<unknown>;
|
|
214
|
+
text: () => Promise<string>;
|
|
215
|
+
headers: Map<string, string>;
|
|
216
|
+
}> | Promise<{
|
|
217
|
+
ok: boolean;
|
|
218
|
+
status: number;
|
|
219
|
+
json: () => Promise<{
|
|
220
|
+
error: string;
|
|
221
|
+
}>;
|
|
222
|
+
text: () => Promise<string>;
|
|
223
|
+
headers: Map<any, any>;
|
|
224
|
+
}>>;
|
|
225
|
+
//# sourceMappingURL=mocks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/testing/mocks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BA4CL,MAAM;uBACb,OAAO;0BACJ,OAAO,EAAE;6BAEN,OAAO;;;;;;oBAWE,MAAM,GAAG,UAAU;mBAAnB,MAAM,GAAG,UAAU;;;;;;CAchD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;CAUxB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;uCACO;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;mCACjC;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;;;;;;;;;;CAW7D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;CAIpC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;6DAEsB;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;CAQnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,GAAE,OAAc,EACzB,SAAS,GAAE,MAAwB;;;;;;;;;;;;EAepC;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE;IACxC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACf;;;;EAiBL;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,+BAE3E,MAAM;;;;;;;;;;;;;;IAsB1B"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { CedrosConfig } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration for creating a mock Cedros provider
|
|
5
|
+
*/
|
|
6
|
+
export interface MockCedrosProviderConfig extends Partial<CedrosConfig> {
|
|
7
|
+
/** Mock implementations for managers (optional) */
|
|
8
|
+
mockManagers?: {
|
|
9
|
+
stripeManager?: Record<string, unknown>;
|
|
10
|
+
x402Manager?: Record<string, unknown>;
|
|
11
|
+
walletManager?: Record<string, unknown>;
|
|
12
|
+
routeDiscoveryManager?: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a mock CedrosProvider for testing
|
|
17
|
+
*
|
|
18
|
+
* @param config - Optional configuration
|
|
19
|
+
* @returns Mock provider component
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { render } from '@testing-library/react';
|
|
24
|
+
* import { createMockCedrosProvider } from '@cedros/pay-react/testing';
|
|
25
|
+
*
|
|
26
|
+
* const MockProvider = createMockCedrosProvider({
|
|
27
|
+
* stripePublicKey: 'pk_test_mock',
|
|
28
|
+
* serverUrl: 'http://localhost:8080',
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* render(
|
|
32
|
+
* <MockProvider>
|
|
33
|
+
* <YourComponent />
|
|
34
|
+
* </MockProvider>
|
|
35
|
+
* );
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function createMockCedrosProvider(config?: MockCedrosProviderConfig): ({ children }: {
|
|
39
|
+
children: ReactNode;
|
|
40
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
41
|
+
/**
|
|
42
|
+
* Creates a minimal mock provider for simple tests
|
|
43
|
+
*
|
|
44
|
+
* @returns Minimal mock provider component
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const MinimalProvider = createMinimalMockProvider();
|
|
49
|
+
*
|
|
50
|
+
* render(
|
|
51
|
+
* <MinimalProvider>
|
|
52
|
+
* <YourComponent />
|
|
53
|
+
* </MinimalProvider>
|
|
54
|
+
* );
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function createMinimalMockProvider(): ({ children }: {
|
|
58
|
+
children: ReactNode;
|
|
59
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
/**
|
|
61
|
+
* Wrapper for testing with Solana wallet mocks
|
|
62
|
+
*
|
|
63
|
+
* @param walletState - Mock wallet state
|
|
64
|
+
* @returns Mock wallet provider component
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* import { mockWalletProvider } from '@cedros/pay-react/testing';
|
|
69
|
+
*
|
|
70
|
+
* const WalletProvider = mockWalletProvider({
|
|
71
|
+
* connected: true,
|
|
72
|
+
* publicKey: 'mockWallet123',
|
|
73
|
+
* });
|
|
74
|
+
*
|
|
75
|
+
* render(
|
|
76
|
+
* <WalletProvider>
|
|
77
|
+
* <CryptoButton resource="test" />
|
|
78
|
+
* </WalletProvider>
|
|
79
|
+
* );
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export declare function mockWalletProvider(walletState?: {
|
|
83
|
+
connected?: boolean;
|
|
84
|
+
publicKey?: string;
|
|
85
|
+
connecting?: boolean;
|
|
86
|
+
}): ({ children }: {
|
|
87
|
+
children: ReactNode;
|
|
88
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
89
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/testing/providers.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,OAAO,CAAC,YAAY,CAAC;IACrE,mDAAmD;IACnD,YAAY,CAAC,EAAE;QACb,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjD,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,GAAE,wBAA6B,IAGzC,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,6CAmBzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,mBArCU;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,6CA2CzE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,GAAE;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,IAO+B,cAAc;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,6CAKzE"}
|