@manifoldxyz/dropkit 0.4.1 → 0.5.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/README.md +90 -0
- package/dist/cart.cjs +38 -36
- package/dist/cart.cjs.map +1 -1
- package/dist/cart.js +12 -10
- package/dist/cart.js.map +1 -1
- package/dist/{chunk-MXKJAZDW.js → chunk-VHAAGH7Z.js} +60 -642
- package/dist/chunk-VHAAGH7Z.js.map +1 -0
- package/dist/chunk-W7OBZPCY.js +619 -0
- package/dist/chunk-W7OBZPCY.js.map +1 -0
- package/dist/{chunk-X4P6BUV4.cjs → chunk-XWONUCGA.cjs} +46 -628
- package/dist/chunk-XWONUCGA.cjs.map +1 -0
- package/dist/chunk-YGBIJOKQ.cjs +619 -0
- package/dist/chunk-YGBIJOKQ.cjs.map +1 -0
- package/dist/index.cjs +125 -123
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +14 -12
- package/dist/index.js.map +1 -1
- package/dist/status.cjs +570 -0
- package/dist/status.cjs.map +1 -0
- package/dist/status.d.cts +259 -0
- package/dist/status.d.ts +259 -0
- package/dist/status.js +570 -0
- package/dist/status.js.map +1 -0
- package/package.json +11 -1
- package/dist/chunk-MXKJAZDW.js.map +0 -1
- package/dist/chunk-X4P6BUV4.cjs.map +0 -1
|
@@ -43,7 +43,7 @@ function friendlyErrorMessage(error) {
|
|
|
43
43
|
const errors = collect(error);
|
|
44
44
|
const hasText = (phrase) => errors.some((e) => e.message.includes(phrase));
|
|
45
45
|
const hasName = (name) => errors.some((e) => e.name === name);
|
|
46
|
-
const hasCode2 = (
|
|
46
|
+
const hasCode2 = (code) => errors.some((e) => e.code === code);
|
|
47
47
|
if (hasName("UserRejectedRequestError") || hasCode2("ACTION_REJECTED") || hasCode2(4001) || hasText("user denied transaction signature") || hasText("userrefusedondevice") || hasText("rejected transaction") || hasText("user rejected") || errors.some((e) => e.message.includes("cancelled") && !e.cancelled)) {
|
|
48
48
|
return "Transaction Rejected";
|
|
49
49
|
}
|
|
@@ -149,266 +149,8 @@ function toReason(e) {
|
|
|
149
149
|
return { reason: "RPC_ERROR", message: friendlyErrorMessage(e) };
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
// src/core/machine.ts
|
|
153
|
-
var _viem = require('viem');
|
|
154
|
-
var MINT_STATES = [
|
|
155
|
-
"loading",
|
|
156
|
-
"unsupported",
|
|
157
|
-
"upcoming",
|
|
158
|
-
"ended",
|
|
159
|
-
"sold-out",
|
|
160
|
-
"disconnected",
|
|
161
|
-
"connecting",
|
|
162
|
-
"live",
|
|
163
|
-
"ineligible",
|
|
164
|
-
"insufficient-funds",
|
|
165
|
-
"switching-chain",
|
|
166
|
-
"approving",
|
|
167
|
-
"minting",
|
|
168
|
-
"confirming",
|
|
169
|
-
"success",
|
|
170
|
-
"error"
|
|
171
|
-
];
|
|
172
|
-
var CLICKABLE_STATES = ["disconnected", "live", "success", "error"];
|
|
173
|
-
var IN_FLIGHT_STATES = ["switching-chain", "approving", "minting", "confirming"];
|
|
174
|
-
var MAX_QUANTITY = 65535;
|
|
175
|
-
function initialState(opts) {
|
|
176
|
-
return {
|
|
177
|
-
name: "loading",
|
|
178
|
-
reason: null,
|
|
179
|
-
message: null,
|
|
180
|
-
readGen: 0,
|
|
181
|
-
walletGen: 0,
|
|
182
|
-
drop: null,
|
|
183
|
-
account: null,
|
|
184
|
-
walletRead: null,
|
|
185
|
-
blocked: null,
|
|
186
|
-
quantity: toQuantity(_nullishCoalesce(_optionalChain([opts, 'optionalAccess', _9 => _9.quantity]), () => ( 1)), MAX_QUANTITY),
|
|
187
|
-
attempt: null,
|
|
188
|
-
result: null,
|
|
189
|
-
pendingRefresh: false,
|
|
190
|
-
now: 0,
|
|
191
|
-
crossChain: false,
|
|
192
|
-
routePending: false,
|
|
193
|
-
route: null,
|
|
194
|
-
short: null
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
var NO_ROUTE = { crossChain: false, routePending: false, route: null, short: null };
|
|
198
|
-
var PICK_ANOTHER = "Pick another network to pay from.";
|
|
199
|
-
function toQuantity(q, max) {
|
|
200
|
-
if (Number.isNaN(q)) return 1;
|
|
201
|
-
return Math.max(1, Math.min(Math.floor(q), max));
|
|
202
|
-
}
|
|
203
|
-
function isInFlight(s) {
|
|
204
|
-
return s.attempt !== null || IN_FLIGHT_STATES.includes(s.name);
|
|
205
|
-
}
|
|
206
|
-
function isIdle(s) {
|
|
207
|
-
return !isInFlight(s) && s.name !== "connecting" && s.name !== "success" && s.name !== "error";
|
|
208
|
-
}
|
|
209
|
-
function derive(s, unsupported) {
|
|
210
|
-
const named = (name) => ({ name, reason: null, message: null });
|
|
211
|
-
const { drop, walletRead } = s;
|
|
212
|
-
if (unsupported) return { name: "unsupported", reason: s.reason, message: s.message };
|
|
213
|
-
if (drop === null) return named("loading");
|
|
214
|
-
if (drop.endTime !== null && drop.endTime <= s.now) return named("ended");
|
|
215
|
-
if (drop.maxSupply !== null && drop.maxSupply > 0n && drop.totalMinted >= drop.maxSupply) return named("sold-out");
|
|
216
|
-
if (drop.startTime !== null && drop.startTime > s.now) return named("upcoming");
|
|
217
|
-
if (s.account === null) return named("disconnected");
|
|
218
|
-
if (walletRead === null) return named("loading");
|
|
219
|
-
if (s.blocked !== null) return s.blocked;
|
|
220
|
-
if (walletRead.ineligible !== null) {
|
|
221
|
-
return { name: "ineligible", reason: walletRead.ineligible.reason, message: walletRead.ineligible.message };
|
|
222
|
-
}
|
|
223
|
-
if (s.routePending) return named("loading");
|
|
224
|
-
if (_optionalChain([s, 'access', _10 => _10.route, 'optionalAccess', _11 => _11.kind]) === "relay") return named("live");
|
|
225
|
-
if (s.short !== null) {
|
|
226
|
-
return { name: "insufficient-funds", reason: "INSUFFICIENT_FUNDS", message: `Not enough ${s.short.symbol} on ${s.short.name}. ${PICK_ANOTHER}` };
|
|
227
|
-
}
|
|
228
|
-
const total = selectTotal(s);
|
|
229
|
-
if (total !== null) {
|
|
230
|
-
const { native, erc20 } = total;
|
|
231
|
-
if (native.value + walletRead.gasReserve > walletRead.balances.native) {
|
|
232
|
-
const more = s.crossChain ? ` ${PICK_ANOTHER}` : "";
|
|
233
|
-
return { name: "insufficient-funds", reason: "INSUFFICIENT_FUNDS", message: `Not enough ${native.symbol} to cover the mint.${more}` };
|
|
234
|
-
}
|
|
235
|
-
if (erc20 !== null && walletRead.balances.erc20 !== null && erc20.value > walletRead.balances.erc20) {
|
|
236
|
-
return { name: "insufficient-funds", reason: "INSUFFICIENT_FUNDS", message: `Not enough ${erc20.symbol} to cover the mint.` };
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return named("live");
|
|
240
|
-
}
|
|
241
|
-
function settle(s, unsupported = s.name === "unsupported") {
|
|
242
|
-
if (!isIdle(s)) return s;
|
|
243
|
-
return { ...s, ...derive(s, unsupported) };
|
|
244
|
-
}
|
|
245
|
-
function clampQuantity(s) {
|
|
246
|
-
const quantity = toQuantity(s.quantity, _nullishCoalesce(selectMaxQuantity(s), () => ( MAX_QUANTITY)));
|
|
247
|
-
return quantity === s.quantity ? s : { ...s, quantity };
|
|
248
|
-
}
|
|
249
|
-
function reducer(state, event) {
|
|
250
|
-
const inFlight = isInFlight(state);
|
|
251
|
-
const failed = (reason, message) => {
|
|
252
|
-
if (inFlight) return { ...state, pendingRefresh: true };
|
|
253
|
-
if (state.name === "success" || state.name === "error") return state;
|
|
254
|
-
return { ...state, name: "error", reason, message };
|
|
255
|
-
};
|
|
256
|
-
switch (event.type) {
|
|
257
|
-
case "LOAD": {
|
|
258
|
-
if (event.kind === "refresh") {
|
|
259
|
-
const next2 = { ...state, readGen: event.gen };
|
|
260
|
-
return inFlight ? { ...next2, pendingRefresh: true } : settle(next2);
|
|
261
|
-
}
|
|
262
|
-
const next = { ...state, ...NO_ROUTE, readGen: event.gen, drop: null, walletRead: null, blocked: null, walletGen: state.walletGen + 1 };
|
|
263
|
-
return inFlight ? { ...next, pendingRefresh: true } : settle(next, false);
|
|
264
|
-
}
|
|
265
|
-
case "DROP_LOADED": {
|
|
266
|
-
if (event.gen !== state.readGen) return state;
|
|
267
|
-
let next = { ...state, drop: event.drop, now: Math.max(state.now, event.now) };
|
|
268
|
-
const oldKey = _optionalChain([state, 'access', _12 => _12.drop, 'optionalAccess', _13 => _13.walletKey]);
|
|
269
|
-
const newKey = event.drop.walletKey;
|
|
270
|
-
if (oldKey !== void 0 && newKey !== void 0 && oldKey !== newKey) {
|
|
271
|
-
next = { ...next, walletRead: null, walletGen: state.walletGen + 1 };
|
|
272
|
-
}
|
|
273
|
-
if (inFlight) return { ...next, pendingRefresh: true };
|
|
274
|
-
return isIdle(next) ? settle(clampQuantity(next), false) : clampQuantity(next);
|
|
275
|
-
}
|
|
276
|
-
case "DROP_UNSUPPORTED": {
|
|
277
|
-
if (event.gen !== state.readGen) return state;
|
|
278
|
-
if (inFlight) return { ...state, pendingRefresh: true };
|
|
279
|
-
if (state.name === "success" || state.name === "error") return state;
|
|
280
|
-
return { ...state, name: "unsupported", reason: event.reason, message: event.message };
|
|
281
|
-
}
|
|
282
|
-
case "READ_FAILED":
|
|
283
|
-
return event.gen !== state.readGen ? state : failed(event.reason, event.message);
|
|
284
|
-
case "ACCOUNT_CHANGED": {
|
|
285
|
-
const next = { ...state, ...NO_ROUTE, account: event.account, walletRead: null, blocked: null, walletGen: state.walletGen + 1 };
|
|
286
|
-
if (inFlight) return { ...next, pendingRefresh: true };
|
|
287
|
-
if (state.name === "connecting") return event.account === null ? next : settle({ ...next, name: "loading" }, false);
|
|
288
|
-
return settle(next);
|
|
289
|
-
}
|
|
290
|
-
case "WALLET_LOADED": {
|
|
291
|
-
if (event.gen !== state.walletGen) return state;
|
|
292
|
-
const route = event.routePending ? { routePending: state.route === null && state.short === null, route: state.route, short: state.short } : { routePending: false, route: null, short: null };
|
|
293
|
-
const next = { ...state, ...route, crossChain: _nullishCoalesce(event.crossChain, () => ( false)), walletRead: event.read, blocked: null };
|
|
294
|
-
return inFlight ? { ...next, pendingRefresh: true } : settle(clampQuantity(next));
|
|
295
|
-
}
|
|
296
|
-
case "ROUTE_LOADED": {
|
|
297
|
-
if (event.gen !== state.walletGen) return state;
|
|
298
|
-
const next = { ...state, routePending: false, route: event.route, short: event.short };
|
|
299
|
-
return inFlight ? { ...next, pendingRefresh: true } : settle(next);
|
|
300
|
-
}
|
|
301
|
-
case "WALLET_FAILED":
|
|
302
|
-
return event.gen !== state.walletGen ? state : failed(event.reason, event.message);
|
|
303
|
-
case "CONNECT_STARTED":
|
|
304
|
-
return state.name === "disconnected" && state.attempt === null ? { ...state, name: "connecting", reason: null, message: null } : state;
|
|
305
|
-
case "CONNECT_DISMISSED":
|
|
306
|
-
return state.name === "connecting" ? settle({ ...state, name: "disconnected" }, false) : state;
|
|
307
|
-
case "TICK":
|
|
308
|
-
return settle({ ...state, now: Math.max(state.now, event.now) });
|
|
309
|
-
case "SET_QUANTITY": {
|
|
310
|
-
const next = { ...state, quantity: toQuantity(event.quantity, _nullishCoalesce(selectMaxQuantity(state), () => ( MAX_QUANTITY))) };
|
|
311
|
-
return inFlight ? { ...next, pendingRefresh: true } : settle(next);
|
|
312
|
-
}
|
|
313
|
-
case "ATTEMPT_STARTED":
|
|
314
|
-
if (state.attempt !== null) return state;
|
|
315
|
-
if (event.resume === true) return IN_FLIGHT_STATES.includes(state.name) ? state : { ...state, attempt: event.attempt };
|
|
316
|
-
return state.name === "live" ? { ...state, attempt: event.attempt } : state;
|
|
317
|
-
case "SWITCHING_CHAIN":
|
|
318
|
-
return step(state, event.attemptId, "switching-chain");
|
|
319
|
-
case "APPROVING":
|
|
320
|
-
return step(state, event.attemptId, "approving");
|
|
321
|
-
case "MINT_PROMPTED":
|
|
322
|
-
return step(state, event.attemptId, "minting");
|
|
323
|
-
case "TX_SUBMITTED":
|
|
324
|
-
return step(state, event.attemptId, "confirming");
|
|
325
|
-
case "ATTEMPT_SUCCEEDED":
|
|
326
|
-
return _optionalChain([state, 'access', _14 => _14.attempt, 'optionalAccess', _15 => _15.attemptId]) === event.attemptId ? {
|
|
327
|
-
...state,
|
|
328
|
-
name: "success",
|
|
329
|
-
reason: null,
|
|
330
|
-
message: null,
|
|
331
|
-
attempt: null,
|
|
332
|
-
result: event.result,
|
|
333
|
-
drop: null,
|
|
334
|
-
readGen: state.readGen + 1
|
|
335
|
-
} : state;
|
|
336
|
-
case "ATTEMPT_FAILED": {
|
|
337
|
-
if (_optionalChain([state, 'access', _16 => _16.attempt, 'optionalAccess', _17 => _17.attemptId]) !== event.attemptId) return state;
|
|
338
|
-
const { reason, message } = event;
|
|
339
|
-
const done = { ...state, reason, message, attempt: null, result: null };
|
|
340
|
-
if (INELIGIBLE_REASONS.includes(reason)) {
|
|
341
|
-
return { ...done, name: "ineligible", blocked: { name: "ineligible", reason, message } };
|
|
342
|
-
}
|
|
343
|
-
if (reason === "INSUFFICIENT_FUNDS") {
|
|
344
|
-
return { ...done, name: "insufficient-funds", blocked: { name: "insufficient-funds", reason, message } };
|
|
345
|
-
}
|
|
346
|
-
return {
|
|
347
|
-
...done,
|
|
348
|
-
name: "error",
|
|
349
|
-
drop: state.name === "confirming" ? null : state.drop,
|
|
350
|
-
readGen: state.name === "confirming" ? state.readGen + 1 : state.readGen
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
case "RESET": {
|
|
354
|
-
if (state.name !== "success" && state.name !== "error") return state;
|
|
355
|
-
const next = {
|
|
356
|
-
...state,
|
|
357
|
-
readGen: event.gen,
|
|
358
|
-
...NO_ROUTE,
|
|
359
|
-
walletRead: null,
|
|
360
|
-
blocked: null,
|
|
361
|
-
walletGen: state.walletGen + 1,
|
|
362
|
-
result: null,
|
|
363
|
-
pendingRefresh: false
|
|
364
|
-
};
|
|
365
|
-
return settle(clampQuantity({ ...next, name: "loading" }), false);
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
var STEP_ORDER = ["switching-chain", "approving", "minting", "confirming"];
|
|
370
|
-
function step(state, attemptId, name) {
|
|
371
|
-
if (_optionalChain([state, 'access', _18 => _18.attempt, 'optionalAccess', _19 => _19.attemptId]) !== attemptId) return state;
|
|
372
|
-
if (STEP_ORDER.indexOf(name) <= STEP_ORDER.indexOf(state.name)) return state;
|
|
373
|
-
return { ...state, name, reason: null, message: null };
|
|
374
|
-
}
|
|
375
|
-
function selectMaxQuantity(state) {
|
|
376
|
-
const { drop, walletRead } = state;
|
|
377
|
-
if (drop === null) return null;
|
|
378
|
-
let max = MAX_QUANTITY;
|
|
379
|
-
if (drop.maxSupply !== null && drop.maxSupply > 0n) {
|
|
380
|
-
const remaining = drop.maxSupply - drop.totalMinted;
|
|
381
|
-
if (remaining < BigInt(max)) max = remaining > 0n ? Number(remaining) : 0;
|
|
382
|
-
}
|
|
383
|
-
if (walletRead !== null && walletRead.maxQuantity !== null) {
|
|
384
|
-
max = Math.min(max, Math.max(0, Math.floor(walletRead.maxQuantity)));
|
|
385
|
-
}
|
|
386
|
-
return max;
|
|
387
|
-
}
|
|
388
|
-
function selectTotal(state) {
|
|
389
|
-
const { drop } = state;
|
|
390
|
-
if (drop === null) return null;
|
|
391
|
-
const q = BigInt(state.quantity);
|
|
392
|
-
const price = drop.unitPrice;
|
|
393
|
-
const fee = drop.unitFee;
|
|
394
|
-
const priceTotal = drop.pricePer === "total" ? price.value : price.value * q;
|
|
395
|
-
if (drop.paymentToken !== null) {
|
|
396
|
-
return {
|
|
397
|
-
native: money(fee.value * q, fee),
|
|
398
|
-
erc20: money(priceTotal, price)
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
return { native: money(priceTotal + fee.value * q, price), erc20: null };
|
|
402
|
-
}
|
|
403
|
-
function money(value, like) {
|
|
404
|
-
return { value, decimals: like.decimals, symbol: like.symbol, formatted: _viem.formatUnits.call(void 0, value, like.decimals) };
|
|
405
|
-
}
|
|
406
|
-
function canAct(state) {
|
|
407
|
-
return state.attempt === null && CLICKABLE_STATES.includes(state.name);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
152
|
// src/core/rpc/index.ts
|
|
411
|
-
|
|
153
|
+
var _viem = require('viem');
|
|
412
154
|
var _chains = require('viem/chains');
|
|
413
155
|
var BRIDGE_URLS = {
|
|
414
156
|
1: "https://bridge.manifoldxyz.dev/rpc",
|
|
@@ -438,7 +180,7 @@ var CHAIN_NAMES = {
|
|
|
438
180
|
84532: "Base Sepolia"
|
|
439
181
|
};
|
|
440
182
|
function chainName(chainId) {
|
|
441
|
-
return _nullishCoalesce(_nullishCoalesce(CHAIN_NAMES[chainId], () => ( _optionalChain([CHAINS, 'access',
|
|
183
|
+
return _nullishCoalesce(_nullishCoalesce(CHAIN_NAMES[chainId], () => ( _optionalChain([CHAINS, 'access', _9 => _9[chainId], 'optionalAccess', _10 => _10.name]))), () => ( `chain ${String(chainId)}`));
|
|
442
184
|
}
|
|
443
185
|
var TRANSPORT_TIMEOUT_MS = 8e3;
|
|
444
186
|
function getChain(chainId) {
|
|
@@ -482,7 +224,7 @@ function shouldFallback(err) {
|
|
|
482
224
|
}
|
|
483
225
|
function createReadClient(opts) {
|
|
484
226
|
const chain = getChain(opts.chainId);
|
|
485
|
-
const urls = [_optionalChain([opts, 'access',
|
|
227
|
+
const urls = [_optionalChain([opts, 'access', _11 => _11.rpcUrls, 'optionalAccess', _12 => _12[opts.chainId]]), opts.useBridge ? BRIDGE_URLS[opts.chainId] : void 0, chain.rpcUrls.default.http[0]].filter(
|
|
486
228
|
(u, i, all) => !!u && all.indexOf(u) === i
|
|
487
229
|
);
|
|
488
230
|
const transport = ({ chain: c, pollingInterval }) => {
|
|
@@ -509,269 +251,6 @@ function createReadClient(opts) {
|
|
|
509
251
|
return _viem.createPublicClient.call(void 0, { chain, transport });
|
|
510
252
|
}
|
|
511
253
|
|
|
512
|
-
// src/core/wallet/index.ts
|
|
513
|
-
|
|
514
|
-
var CONNECT_WIDGET_VERSION = "6.5.0";
|
|
515
|
-
var CONNECT_BASE_URL = `https://connect.manifoldxyz.dev/${CONNECT_WIDGET_VERSION}`;
|
|
516
|
-
var CONNECT_ID = "mint-button";
|
|
517
|
-
var ADDRESS_CHANGED = "ethereum-address-changed";
|
|
518
|
-
var CHAIN_CHANGED = "frontend-provider-chain-changed";
|
|
519
|
-
var LOADER_KEY = "__manifoldMintConnectLoader";
|
|
520
|
-
var DEFAULT_WALLETCONNECT_PROJECT_ID = "a03ac1695f309dc8d756e7b4006e5e7d";
|
|
521
|
-
var STATE_KEY = "__manifoldMintConnectStateV1";
|
|
522
|
-
var win = () => window;
|
|
523
|
-
var pageState = () => win()[STATE_KEY] ??= {};
|
|
524
|
-
var TOO_OLD = "A Manifold connect widget older than 6.4.0 is already on this page; update it or remove it so dropkit can load " + CONNECT_WIDGET_VERSION + ".";
|
|
525
|
-
var MANIFOLD_HOST = /(^|\.)(manifoldxyz\.dev|manifold\.xyz)$/;
|
|
526
|
-
function isManifoldConnectScript(src) {
|
|
527
|
-
try {
|
|
528
|
-
const url = new URL(src, document.baseURI);
|
|
529
|
-
return url.hostname === "connect.manifoldxyz.dev" || MANIFOLD_HOST.test(url.hostname) && /\/connect\.umd[^/]*\.js$/.test(url.pathname);
|
|
530
|
-
} catch (e2) {
|
|
531
|
-
return false;
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
function applyState(state) {
|
|
535
|
-
if (!state.div) return;
|
|
536
|
-
const network = state.networks.join(",");
|
|
537
|
-
if (state.div.dataset.network !== network) state.div.dataset.network = network;
|
|
538
|
-
const projectId = _nullishCoalesce(_nullishCoalesce(state.projectId, () => ( state.div.dataset.walletConnectProjectId)), () => ( DEFAULT_WALLETCONNECT_PROJECT_ID));
|
|
539
|
-
if (state.div.dataset.walletConnectProjectId !== projectId) state.div.dataset.walletConnectProjectId = projectId;
|
|
540
|
-
}
|
|
541
|
-
function register(state, opts) {
|
|
542
|
-
for (const id2 of opts.chainIds) if (!state.networks.includes(id2)) state.networks.push(id2);
|
|
543
|
-
const id = opts.walletConnectProjectId;
|
|
544
|
-
if (id) {
|
|
545
|
-
if (!state.projectId) state.projectId = id;
|
|
546
|
-
else if (state.projectId !== id) {
|
|
547
|
-
console.warn(`dropkit: walletConnectProjectId "${id}" ignored; this page already uses "${state.projectId}" for the shared connect widget.`);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
applyState(state);
|
|
551
|
-
}
|
|
552
|
-
function startLoad(state) {
|
|
553
|
-
const connect = win().ManifoldConnect;
|
|
554
|
-
if (_optionalChain([connect, 'optionalAccess', _24 => _24.capabilities, 'optionalAccess', _25 => _25.includes, 'call', _26 => _26("open")])) return Promise.resolve(connect.ready).then(() => void 0);
|
|
555
|
-
const hasScript = Array.from(document.querySelectorAll("script[src]")).some((s) => isManifoldConnectScript(s.src));
|
|
556
|
-
if (hasScript || document.querySelector('[data-widget="m-connect"]')) {
|
|
557
|
-
return Promise.reject(new MintError("CONNECT_WIDGET_TOO_OLD", TOO_OLD));
|
|
558
|
-
}
|
|
559
|
-
return new Promise((resolve, reject) => {
|
|
560
|
-
const css = document.createElement("link");
|
|
561
|
-
css.rel = "stylesheet";
|
|
562
|
-
css.href = `${CONNECT_BASE_URL}/connect.css`;
|
|
563
|
-
document.head.appendChild(css);
|
|
564
|
-
state.nodes.push(css);
|
|
565
|
-
const div = document.createElement("div");
|
|
566
|
-
div.hidden = true;
|
|
567
|
-
div.style.display = "none";
|
|
568
|
-
div.dataset.widget = "m-connect";
|
|
569
|
-
div.dataset.connectId = CONNECT_ID;
|
|
570
|
-
div.dataset.autoReconnect = "true";
|
|
571
|
-
div.dataset.enableNetworkSwitching = "true";
|
|
572
|
-
state.div = div;
|
|
573
|
-
applyState(state);
|
|
574
|
-
document.body.appendChild(div);
|
|
575
|
-
state.nodes.push(div);
|
|
576
|
-
const script = document.createElement("script");
|
|
577
|
-
script.src = `${CONNECT_BASE_URL}/connect.umd.min.js`;
|
|
578
|
-
script.async = true;
|
|
579
|
-
script.addEventListener("load", () => {
|
|
580
|
-
const ready = _optionalChain([win, 'call', _27 => _27(), 'access', _28 => _28.ManifoldConnect, 'optionalAccess', _29 => _29.ready]);
|
|
581
|
-
if (!ready) return reject(new MintError("CONNECT_WIDGET_TOO_OLD", TOO_OLD));
|
|
582
|
-
Promise.resolve(ready).then(() => resolve(), reject);
|
|
583
|
-
});
|
|
584
|
-
script.addEventListener("error", () => reject(new MintError("RPC_ERROR", `Could not load the Manifold connect widget from ${CONNECT_BASE_URL}`)));
|
|
585
|
-
document.head.appendChild(script);
|
|
586
|
-
state.nodes.push(script);
|
|
587
|
-
});
|
|
588
|
-
}
|
|
589
|
-
function loadConnectWidget(opts) {
|
|
590
|
-
const w = win();
|
|
591
|
-
const page = pageState();
|
|
592
|
-
const existing = w[LOADER_KEY];
|
|
593
|
-
if (existing) {
|
|
594
|
-
if (_optionalChain([page, 'access', _30 => _30.load, 'optionalAccess', _31 => _31.promise]) !== existing) {
|
|
595
|
-
const div = _nullishCoalesce(document.querySelector(`[data-widget="m-connect"][data-connect-id="${CONNECT_ID}"]`), () => ( void 0));
|
|
596
|
-
page.load = {
|
|
597
|
-
promise: existing,
|
|
598
|
-
networks: _nullishCoalesce(_optionalChain([div, 'optionalAccess', _32 => _32.dataset, 'access', _33 => _33.network, 'optionalAccess', _34 => _34.split, 'call', _35 => _35(","), 'access', _36 => _36.filter, 'call', _37 => _37(Boolean), 'access', _38 => _38.map, 'call', _39 => _39(Number)]), () => ( [])),
|
|
599
|
-
// The default id is a placeholder, not a choice: a caller's real id may still replace it.
|
|
600
|
-
projectId: _optionalChain([div, 'optionalAccess', _40 => _40.dataset, 'access', _41 => _41.walletConnectProjectId]) === DEFAULT_WALLETCONNECT_PROJECT_ID ? void 0 : _optionalChain([div, 'optionalAccess', _42 => _42.dataset, 'access', _43 => _43.walletConnectProjectId]),
|
|
601
|
-
div,
|
|
602
|
-
nodes: []
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
register(page.load, opts);
|
|
606
|
-
return existing;
|
|
607
|
-
}
|
|
608
|
-
let resolve;
|
|
609
|
-
let reject;
|
|
610
|
-
const p = new Promise((res, rej) => {
|
|
611
|
-
resolve = res;
|
|
612
|
-
reject = rej;
|
|
613
|
-
});
|
|
614
|
-
const state = { promise: p, networks: [], nodes: [] };
|
|
615
|
-
page.load = state;
|
|
616
|
-
w[LOADER_KEY] = p;
|
|
617
|
-
p.catch(() => {
|
|
618
|
-
if (w[LOADER_KEY] === p) delete w[LOADER_KEY];
|
|
619
|
-
if (page.load === state) page.load = void 0;
|
|
620
|
-
for (const node of state.nodes) _optionalChain([node, 'access', _44 => _44.parentNode, 'optionalAccess', _45 => _45.removeChild, 'call', _46 => _46(node)]);
|
|
621
|
-
state.nodes.length = 0;
|
|
622
|
-
state.div = void 0;
|
|
623
|
-
});
|
|
624
|
-
register(state, opts);
|
|
625
|
-
try {
|
|
626
|
-
startLoad(state).then(resolve, reject);
|
|
627
|
-
} catch (error) {
|
|
628
|
-
reject(error);
|
|
629
|
-
}
|
|
630
|
-
return p;
|
|
631
|
-
}
|
|
632
|
-
function openConnectModal() {
|
|
633
|
-
const page = pageState();
|
|
634
|
-
if (page.pendingModal) return page.pendingModal;
|
|
635
|
-
const p = new Promise((resolve) => {
|
|
636
|
-
const onClosed = (e) => {
|
|
637
|
-
const detail = _nullishCoalesce(e.detail, () => ( {}));
|
|
638
|
-
if (detail.connectId !== void 0 && detail.connectId !== CONNECT_ID) return;
|
|
639
|
-
window.removeEventListener("m-connect:closed", onClosed);
|
|
640
|
-
page.pendingModal = void 0;
|
|
641
|
-
resolve(detail.reason === "connected" ? "connected" : "dismissed");
|
|
642
|
-
};
|
|
643
|
-
window.addEventListener("m-connect:closed", onClosed);
|
|
644
|
-
});
|
|
645
|
-
page.pendingModal = p;
|
|
646
|
-
window.dispatchEvent(new CustomEvent("m-connect:open", { detail: { connectId: CONNECT_ID } }));
|
|
647
|
-
return p;
|
|
648
|
-
}
|
|
649
|
-
function getAccount() {
|
|
650
|
-
const p = win().ManifoldEthereumProvider;
|
|
651
|
-
const address = _optionalChain([p, 'optionalAccess', _47 => _47.selectedAddress, 'optionalCall', _48 => _48()]);
|
|
652
|
-
let chainId = _optionalChain([p, 'optionalAccess', _49 => _49.chainId, 'optionalCall', _50 => _50()]);
|
|
653
|
-
if (chainId === void 0 || chainId === null) {
|
|
654
|
-
try {
|
|
655
|
-
chainId = _optionalChain([p, 'optionalAccess', _51 => _51.browserChainId, 'optionalCall', _52 => _52()]);
|
|
656
|
-
} catch (e3) {
|
|
657
|
-
chainId = void 0;
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
if (!address || chainId === void 0 || chainId === null) return null;
|
|
661
|
-
return { address: _viem.getAddress.call(void 0, address), chainId: Number(chainId) };
|
|
662
|
-
}
|
|
663
|
-
function subscribeAccount(cb) {
|
|
664
|
-
const handler = () => cb(getAccount());
|
|
665
|
-
window.addEventListener(ADDRESS_CHANGED, handler);
|
|
666
|
-
window.addEventListener(CHAIN_CHANGED, handler);
|
|
667
|
-
return () => {
|
|
668
|
-
window.removeEventListener(ADDRESS_CHANGED, handler);
|
|
669
|
-
window.removeEventListener(CHAIN_CHANGED, handler);
|
|
670
|
-
};
|
|
671
|
-
}
|
|
672
|
-
function eip1193() {
|
|
673
|
-
const p = win().ManifoldEthereumProvider;
|
|
674
|
-
const provider = _optionalChain([(_nullishCoalesce(_optionalChain([p, 'optionalAccess', _53 => _53.provider, 'optionalCall', _54 => _54(true)]), () => ( _optionalChain([p, 'optionalAccess', _55 => _55.browserProvider, 'optionalCall', _56 => _56()])))), 'optionalAccess', _57 => _57.provider]);
|
|
675
|
-
if (!provider) throw new MintError("CHAIN_SWITCH_FAILED", "No wallet is connected.");
|
|
676
|
-
return provider;
|
|
677
|
-
}
|
|
678
|
-
function getWalletClient(chainId) {
|
|
679
|
-
const provider = eip1193();
|
|
680
|
-
const request = ((args) => provider.request(args));
|
|
681
|
-
return _viem.createWalletClient.call(void 0, { chain: getChain(chainId), transport: _viem.custom.call(void 0, { request }) });
|
|
682
|
-
}
|
|
683
|
-
async function waitForDeposit(chainId, hash, timeoutMs = 12e4) {
|
|
684
|
-
try {
|
|
685
|
-
const receipt = await getWalletClient(chainId).extend(_viem.publicActions).waitForTransactionReceipt({ hash, confirmations: 1, timeout: timeoutMs });
|
|
686
|
-
return receipt.status === "reverted" ? "reverted" : "mined";
|
|
687
|
-
} catch (e4) {
|
|
688
|
-
return "unknown";
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
var WALLET_READ_TIMEOUT = { ms: 1e4 };
|
|
692
|
-
async function getConnectedBalance(address, chainId) {
|
|
693
|
-
const provider = eip1193();
|
|
694
|
-
let timer;
|
|
695
|
-
const timeout = new Promise((_, reject) => {
|
|
696
|
-
timer = setTimeout(() => reject(new MintError("RPC_ERROR", "The wallet did not report a balance in time.")), WALLET_READ_TIMEOUT.ms);
|
|
697
|
-
});
|
|
698
|
-
try {
|
|
699
|
-
return await Promise.race([
|
|
700
|
-
(async () => {
|
|
701
|
-
const current = Number(await provider.request({ method: "eth_chainId" }));
|
|
702
|
-
if (current !== chainId) {
|
|
703
|
-
throw new MintError("CHAIN_SWITCH_FAILED", `The wallet is on chain ${String(current)}, not ${String(chainId)}.`);
|
|
704
|
-
}
|
|
705
|
-
const hex = await provider.request({ method: "eth_getBalance", params: [address, "latest"] });
|
|
706
|
-
return BigInt(hex);
|
|
707
|
-
})(),
|
|
708
|
-
timeout
|
|
709
|
-
]);
|
|
710
|
-
} finally {
|
|
711
|
-
clearTimeout(timer);
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
var code = (e) => _optionalChain([e, 'optionalAccess', _58 => _58.code]);
|
|
715
|
-
var hexChainId = (chainId) => `0x${chainId.toString(16)}`;
|
|
716
|
-
var sendSwitchRequest = (provider, chainId) => provider.request({ method: "wallet_switchEthereumChain", params: [{ chainId: hexChainId(chainId) }] });
|
|
717
|
-
var sendAddRequest = (provider, chainId) => {
|
|
718
|
-
const chain = getChain(chainId);
|
|
719
|
-
return provider.request({
|
|
720
|
-
method: "wallet_addEthereumChain",
|
|
721
|
-
params: [
|
|
722
|
-
{
|
|
723
|
-
chainId: hexChainId(chainId),
|
|
724
|
-
chainName: chain.name,
|
|
725
|
-
nativeCurrency: chain.nativeCurrency,
|
|
726
|
-
rpcUrls: [...chain.rpcUrls.default.http],
|
|
727
|
-
...chain.blockExplorers ? { blockExplorerUrls: [chain.blockExplorers.default.url] } : {}
|
|
728
|
-
}
|
|
729
|
-
]
|
|
730
|
-
});
|
|
731
|
-
};
|
|
732
|
-
function chainRequestError(e, chainId) {
|
|
733
|
-
if (code(e) === 4001) return new MintError("USER_REJECTED", "You rejected the network switch.", { cause: e });
|
|
734
|
-
return new MintError("CHAIN_SWITCH_FAILED", `Could not switch the wallet to chain ${String(chainId)}.`, { cause: e });
|
|
735
|
-
}
|
|
736
|
-
async function switchToChain(chainId) {
|
|
737
|
-
getChain(chainId);
|
|
738
|
-
const provider = eip1193();
|
|
739
|
-
try {
|
|
740
|
-
try {
|
|
741
|
-
await sendSwitchRequest(provider, chainId);
|
|
742
|
-
} catch (e) {
|
|
743
|
-
if (code(e) !== 4902) throw e;
|
|
744
|
-
await sendAddRequest(provider, chainId);
|
|
745
|
-
await sendSwitchRequest(provider, chainId);
|
|
746
|
-
}
|
|
747
|
-
} catch (e) {
|
|
748
|
-
throw chainRequestError(e, chainId);
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
async function requestSwitch(chainId) {
|
|
752
|
-
getChain(chainId);
|
|
753
|
-
const provider = eip1193();
|
|
754
|
-
try {
|
|
755
|
-
await sendSwitchRequest(provider, chainId);
|
|
756
|
-
return { needsAdd: false };
|
|
757
|
-
} catch (e) {
|
|
758
|
-
if (code(e) === 4902) return { needsAdd: true };
|
|
759
|
-
throw chainRequestError(e, chainId);
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
async function requestAddChain(chainId) {
|
|
763
|
-
getChain(chainId);
|
|
764
|
-
const provider = eip1193();
|
|
765
|
-
try {
|
|
766
|
-
await sendAddRequest(provider, chainId);
|
|
767
|
-
} catch (e) {
|
|
768
|
-
throw chainRequestError(e, chainId);
|
|
769
|
-
}
|
|
770
|
-
}
|
|
771
|
-
function getWalletProvider() {
|
|
772
|
-
return eip1193();
|
|
773
|
-
}
|
|
774
|
-
|
|
775
254
|
// src/core/adapters/manifold-claim/index.ts
|
|
776
255
|
|
|
777
256
|
|
|
@@ -840,7 +319,7 @@ var UINT32_MAX = 4294967295;
|
|
|
840
319
|
async function getJson(fetchFn, url, signal, what) {
|
|
841
320
|
let res;
|
|
842
321
|
try {
|
|
843
|
-
_optionalChain([signal, 'optionalAccess',
|
|
322
|
+
_optionalChain([signal, 'optionalAccess', _13 => _13.throwIfAborted, 'call', _14 => _14()]);
|
|
844
323
|
res = await fetchFn(url, signal ? { signal } : void 0);
|
|
845
324
|
} catch (cause) {
|
|
846
325
|
throw new MintError("ALLOWLIST_UNAVAILABLE", `Could not reach the allowlist service (${what}).`, { cause });
|
|
@@ -901,13 +380,13 @@ async function loadEntries(fetchFn, api, instanceId, recipient, scoped) {
|
|
|
901
380
|
});
|
|
902
381
|
}
|
|
903
382
|
async function fetchMerkleEntries(args) {
|
|
904
|
-
if (_optionalChain([args, 'access',
|
|
383
|
+
if (_optionalChain([args, 'access', _15 => _15.signal, 'optionalAccess', _16 => _16.aborted])) {
|
|
905
384
|
throw new MintError("ALLOWLIST_UNAVAILABLE", "The allowlist request was cancelled.", { cause: args.signal.reason });
|
|
906
385
|
}
|
|
907
386
|
const fetchFn = _nullishCoalesce(args.fetch, () => ( ((input, init) => globalThis.fetch(input, init))));
|
|
908
387
|
const key = `${args.api}|${args.instanceId}|${args.recipient.toLowerCase()}`;
|
|
909
388
|
let scoped = scopeCaches.get(args.scope);
|
|
910
|
-
if (!scoped || _optionalChain([scoped, 'access',
|
|
389
|
+
if (!scoped || _optionalChain([scoped, 'access', _17 => _17.signal, 'optionalAccess', _18 => _18.aborted])) {
|
|
911
390
|
scoped = { signal: args.signal, instances: /* @__PURE__ */ new Map(), entries: /* @__PURE__ */ new Map() };
|
|
912
391
|
scopeCaches.set(args.scope, scoped);
|
|
913
392
|
}
|
|
@@ -979,9 +458,9 @@ function revertData(e) {
|
|
|
979
458
|
const d2 = x.data;
|
|
980
459
|
return _viem.isHex.call(void 0, d2) && d2.length >= 10 || typeof d2 === "object" && d2 !== null && _viem.isHex.call(void 0, d2.data);
|
|
981
460
|
});
|
|
982
|
-
const d = _optionalChain([hit, 'optionalAccess',
|
|
461
|
+
const d = _optionalChain([hit, 'optionalAccess', _19 => _19.data]);
|
|
983
462
|
if (_viem.isHex.call(void 0, d)) return d;
|
|
984
|
-
const inner = _optionalChain([d, 'optionalAccess',
|
|
463
|
+
const inner = _optionalChain([d, 'optionalAccess', _20 => _20.data]);
|
|
985
464
|
return _viem.isHex.call(void 0, inner) ? inner : void 0;
|
|
986
465
|
}
|
|
987
466
|
function decodeRevert(e) {
|
|
@@ -990,17 +469,17 @@ function decodeRevert(e) {
|
|
|
990
469
|
if (data) {
|
|
991
470
|
try {
|
|
992
471
|
const d = _viem.decodeErrorResult.call(void 0, { abi: EXTENSION_ERRORS_ABI, data });
|
|
993
|
-
if (d.errorName === "Error" && typeof _optionalChain([d, 'access',
|
|
994
|
-
if (d.errorName === "Panic") return `Panic(${String(_optionalChain([d, 'access',
|
|
472
|
+
if (d.errorName === "Error" && typeof _optionalChain([d, 'access', _21 => _21.args, 'optionalAccess', _22 => _22[0]]) === "string") return d.args[0];
|
|
473
|
+
if (d.errorName === "Panic") return `Panic(${String(_optionalChain([d, 'access', _23 => _23.args, 'optionalAccess', _24 => _24[0]]))})`;
|
|
995
474
|
return d.errorName;
|
|
996
|
-
} catch (
|
|
475
|
+
} catch (e2) {
|
|
997
476
|
return `reverted with unknown error ${data.slice(0, 10)}`;
|
|
998
477
|
}
|
|
999
478
|
}
|
|
1000
479
|
const named = e.walk((x) => ["ExecutionRevertedError", "InsufficientFundsError"].includes(x.name));
|
|
1001
480
|
return named instanceof _viem.BaseError ? named.shortMessage : null;
|
|
1002
481
|
}
|
|
1003
|
-
var
|
|
482
|
+
var money = (value, decimals, symbol) => ({ value, decimals, symbol, formatted: _viem.formatUnits.call(void 0, value, decimals) });
|
|
1004
483
|
function timestamp(v, field) {
|
|
1005
484
|
if (v === 0n) return null;
|
|
1006
485
|
if (v > BigInt(Number.MAX_SAFE_INTEGER)) throw new MintError("RPC_ERROR", `Claim ${field} does not fit a safe integer`);
|
|
@@ -1050,6 +529,30 @@ async function readClaim(client, entry, creator, instanceId, config) {
|
|
|
1050
529
|
throw toRpcError(e);
|
|
1051
530
|
}
|
|
1052
531
|
}
|
|
532
|
+
var CLAIM_ABIS = {
|
|
533
|
+
Claim721V5Optimization: CLAIM_721_V5_ABI,
|
|
534
|
+
Claim1155V5Optimization: CLAIM_1155_V5_ABI,
|
|
535
|
+
Claim721V7: CLAIM_721_V7_ABI,
|
|
536
|
+
Claim1155V7: CLAIM_1155_V7_ABI
|
|
537
|
+
};
|
|
538
|
+
function decodeClaim(abi, raw) {
|
|
539
|
+
switch (abi) {
|
|
540
|
+
case "Claim721V5Optimization":
|
|
541
|
+
return { ...base2(raw), signingAddress: null, tokenId: null };
|
|
542
|
+
case "Claim1155V5Optimization": {
|
|
543
|
+
const c = raw;
|
|
544
|
+
return { ...base2(c), signingAddress: null, tokenId: c.tokenId };
|
|
545
|
+
}
|
|
546
|
+
case "Claim721V7": {
|
|
547
|
+
const c = raw;
|
|
548
|
+
return { ...base2(c), signingAddress: c.signingAddress, tokenId: null };
|
|
549
|
+
}
|
|
550
|
+
case "Claim1155V7": {
|
|
551
|
+
const c = raw;
|
|
552
|
+
return { ...base2(c), signingAddress: c.signingAddress, tokenId: c.tokenId };
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
1053
556
|
function base2(c) {
|
|
1054
557
|
return {
|
|
1055
558
|
total: BigInt(c.total),
|
|
@@ -1063,8 +566,8 @@ function base2(c) {
|
|
|
1063
566
|
};
|
|
1064
567
|
}
|
|
1065
568
|
async function hasCode(client, address) {
|
|
1066
|
-
const
|
|
1067
|
-
return
|
|
569
|
+
const code = await rpc(() => client.getCode({ address: _viem.getAddress.call(void 0, address) }));
|
|
570
|
+
return code !== void 0 && code !== "0x";
|
|
1068
571
|
}
|
|
1069
572
|
var unknownExtension = (address, why) => new MintError("UNKNOWN_EXTENSION", `Extension ${address} ${why}.`);
|
|
1070
573
|
async function resolveExtension(ctx, config) {
|
|
@@ -1115,11 +618,11 @@ async function loadDrop(ctx, config) {
|
|
|
1115
618
|
const fee = await rpc(
|
|
1116
619
|
() => client.readContract({ address: extension, abi: EXTENSION_COMMON_ABI, functionName: isAllowlist(claim) ? "MINT_FEE_MERKLE" : "MINT_FEE" })
|
|
1117
620
|
);
|
|
1118
|
-
const native = _nullishCoalesce(_optionalChain([client, 'access',
|
|
621
|
+
const native = _nullishCoalesce(_optionalChain([client, 'access', _25 => _25.chain, 'optionalAccess', _26 => _26.nativeCurrency]), () => ( { symbol: "ETH", decimals: 18 }));
|
|
1119
622
|
let unitPrice;
|
|
1120
623
|
let paymentToken = null;
|
|
1121
624
|
if (claim.erc20 === _viem.zeroAddress) {
|
|
1122
|
-
unitPrice =
|
|
625
|
+
unitPrice = money(claim.cost, native.decimals, native.symbol);
|
|
1123
626
|
} else {
|
|
1124
627
|
paymentToken = _viem.getAddress.call(void 0, claim.erc20);
|
|
1125
628
|
const token = paymentToken;
|
|
@@ -1129,12 +632,12 @@ async function loadDrop(ctx, config) {
|
|
|
1129
632
|
client.readContract({ address: token, abi: ERC20_ABI, functionName: "decimals" })
|
|
1130
633
|
])
|
|
1131
634
|
);
|
|
1132
|
-
unitPrice =
|
|
635
|
+
unitPrice = money(claim.cost, decimals, symbol);
|
|
1133
636
|
}
|
|
1134
637
|
const drop = {
|
|
1135
638
|
chainId: config.chainId,
|
|
1136
639
|
unitPrice,
|
|
1137
|
-
unitFee:
|
|
640
|
+
unitFee: money(fee, native.decimals, native.symbol),
|
|
1138
641
|
totalMinted: claim.total,
|
|
1139
642
|
maxSupply: claim.totalMax === 0n ? null : claim.totalMax,
|
|
1140
643
|
startTime: timestamp(claim.startDate, "startDate"),
|
|
@@ -1212,7 +715,7 @@ async function loadWallet(ctx, config, args) {
|
|
|
1212
715
|
data
|
|
1213
716
|
};
|
|
1214
717
|
}
|
|
1215
|
-
var sameClaim = (a, b) => a.chainId === b.chainId && a.creatorContract.toLowerCase() === b.creatorContract.toLowerCase() && a.instanceId === b.instanceId && _optionalChain([a, 'access',
|
|
718
|
+
var sameClaim = (a, b) => a.chainId === b.chainId && a.creatorContract.toLowerCase() === b.creatorContract.toLowerCase() && a.instanceId === b.instanceId && _optionalChain([a, 'access', _27 => _27.extension, 'optionalAccess', _28 => _28.toLowerCase, 'call', _29 => _29()]) === _optionalChain([b, 'access', _30 => _30.extension, 'optionalAccess', _31 => _31.toLowerCase, 'call', _32 => _32()]);
|
|
1216
719
|
async function buildPlan(ctx, attempt, wallet) {
|
|
1217
720
|
const { config, quantity } = attempt;
|
|
1218
721
|
if (!Number.isInteger(quantity) || quantity < 1 || quantity > MAX_MINT_COUNT) {
|
|
@@ -1337,91 +840,6 @@ var manifoldClaimAdapter = {
|
|
|
1337
840
|
}
|
|
1338
841
|
};
|
|
1339
842
|
|
|
1340
|
-
// src/core/adapters/receipt.ts
|
|
1341
|
-
|
|
1342
|
-
var TRANSFER_TOPIC = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
|
|
1343
|
-
var TRANSFER_SINGLE_TOPIC = "0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62";
|
|
1344
|
-
var TRANSFER_BATCH_TOPIC = "0x4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb";
|
|
1345
|
-
var topicAddress = (t) => t && t.length === 66 ? _viem.getAddress.call(void 0, `0x${t.slice(26)}`) : null;
|
|
1346
|
-
function parseMintReceipt(logs, { tokenContract, recipient }) {
|
|
1347
|
-
const contract = _viem.getAddress.call(void 0, tokenContract);
|
|
1348
|
-
const to = _viem.getAddress.call(void 0, recipient);
|
|
1349
|
-
const out = /* @__PURE__ */ new Map();
|
|
1350
|
-
const add = (id, amount) => out.set(id, (_nullishCoalesce(out.get(id), () => ( 0n))) + amount);
|
|
1351
|
-
for (const log of logs) {
|
|
1352
|
-
if (_viem.getAddress.call(void 0, log.address) !== contract) continue;
|
|
1353
|
-
const [t0, t1, t2, t3] = log.topics;
|
|
1354
|
-
if (t0 === TRANSFER_TOPIC && log.topics.length === 4) {
|
|
1355
|
-
if (topicAddress(t1) !== _viem.zeroAddress || topicAddress(t2) !== to || !t3) continue;
|
|
1356
|
-
add(BigInt(t3), 1n);
|
|
1357
|
-
} else if (t0 === TRANSFER_SINGLE_TOPIC && log.topics.length === 4) {
|
|
1358
|
-
if (topicAddress(t2) !== _viem.zeroAddress || topicAddress(t3) !== to) continue;
|
|
1359
|
-
const [id, value] = _viem.decodeAbiParameters.call(void 0, [{ type: "uint256" }, { type: "uint256" }], log.data);
|
|
1360
|
-
add(id, value);
|
|
1361
|
-
} else if (t0 === TRANSFER_BATCH_TOPIC && log.topics.length === 4) {
|
|
1362
|
-
if (topicAddress(t2) !== _viem.zeroAddress || topicAddress(t3) !== to) continue;
|
|
1363
|
-
const [ids, values] = _viem.decodeAbiParameters.call(void 0, [{ type: "uint256[]" }, { type: "uint256[]" }], log.data);
|
|
1364
|
-
if (ids.length !== values.length) continue;
|
|
1365
|
-
ids.forEach((id, i) => add(id, values[i]));
|
|
1366
|
-
}
|
|
1367
|
-
}
|
|
1368
|
-
return [...out].map(([tokenId, amount]) => ({ contract, tokenId, amount }));
|
|
1369
|
-
}
|
|
1370
|
-
|
|
1371
|
-
// src/core/mint-record.ts
|
|
1372
|
-
var APPS_API = "https://apps.api.manifoldxyz.dev";
|
|
1373
|
-
var isRecord2 = (v) => typeof v === "object" && v !== null;
|
|
1374
|
-
var appIds = /* @__PURE__ */ new Map();
|
|
1375
|
-
async function loadAppId(fetchFn, instanceId) {
|
|
1376
|
-
const res = await fetchFn(`${APPS_API}/public/instance/data?id=${encodeURIComponent(instanceId)}`, { keepalive: true });
|
|
1377
|
-
if (!res.ok) throw new Error(`instance data HTTP ${res.status}`);
|
|
1378
|
-
const body = await res.json();
|
|
1379
|
-
const appId = isRecord2(body) ? body.appId : void 0;
|
|
1380
|
-
if (typeof appId !== "number" && typeof appId !== "string") throw new Error("instance data has no appId");
|
|
1381
|
-
return String(appId);
|
|
1382
|
-
}
|
|
1383
|
-
function appIdFor(fetchFn, instanceId) {
|
|
1384
|
-
const hit = appIds.get(instanceId);
|
|
1385
|
-
if (hit) return hit;
|
|
1386
|
-
const p = loadAppId(fetchFn, instanceId);
|
|
1387
|
-
appIds.set(instanceId, p);
|
|
1388
|
-
p.catch(() => {
|
|
1389
|
-
if (appIds.get(instanceId) === p) appIds.delete(instanceId);
|
|
1390
|
-
});
|
|
1391
|
-
return p;
|
|
1392
|
-
}
|
|
1393
|
-
function recordClaimMint(args) {
|
|
1394
|
-
const fetchFn = _nullishCoalesce(args.fetch, () => ( ((input, init) => globalThis.fetch(input, init))));
|
|
1395
|
-
const send = async () => {
|
|
1396
|
-
let appId = "";
|
|
1397
|
-
try {
|
|
1398
|
-
appId = await appIdFor(fetchFn, args.instanceId);
|
|
1399
|
-
} catch (e6) {
|
|
1400
|
-
}
|
|
1401
|
-
const query = new URLSearchParams({ appId, instanceId: args.instanceId, hash: args.hash });
|
|
1402
|
-
await fetchFn(`${APPS_API}/public/instance/tx?${query.toString()}`, { method: "POST", keepalive: true });
|
|
1403
|
-
};
|
|
1404
|
-
return send().catch(() => void 0);
|
|
1405
|
-
}
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
843
|
|
|
1426
844
|
|
|
1427
845
|
|
|
@@ -1439,5 +857,5 @@ function recordClaimMint(args) {
|
|
|
1439
857
|
|
|
1440
858
|
|
|
1441
859
|
|
|
1442
|
-
exports.friendlyErrorMessage = friendlyErrorMessage; exports.UNSUPPORTED_REASONS = UNSUPPORTED_REASONS; exports.REASON_CODES = REASON_CODES; exports.MintError = MintError; exports.isMintError = isMintError; exports.isRejection = isRejection; exports.toReason = toReason; exports.chainName = chainName; exports.getChain = getChain; exports.createReadClient = createReadClient; exports.
|
|
1443
|
-
//# sourceMappingURL=chunk-
|
|
860
|
+
exports.friendlyErrorMessage = friendlyErrorMessage; exports.UNSUPPORTED_REASONS = UNSUPPORTED_REASONS; exports.INELIGIBLE_REASONS = INELIGIBLE_REASONS; exports.REASON_CODES = REASON_CODES; exports.MintError = MintError; exports.isMintError = isMintError; exports.isRejection = isRejection; exports.toReason = toReason; exports.chainName = chainName; exports.getChain = getChain; exports.createReadClient = createReadClient; exports.EXTENSIONS = EXTENSIONS; exports.findExtension = findExtension; exports.CLAIM_ABIS = CLAIM_ABIS; exports.decodeClaim = decodeClaim; exports.manifoldClaimAdapter = manifoldClaimAdapter;
|
|
861
|
+
//# sourceMappingURL=chunk-XWONUCGA.cjs.map
|