@medialane/sdk 0.159.0 → 0.161.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 +49 -315
- package/dist/{chunk-K5MWWVX5.cjs → chunk-GQWRNQD2.cjs} +56 -15
- package/dist/chunk-GQWRNQD2.cjs.map +1 -0
- package/dist/{chunk-A6EQBVUF.js → chunk-QRIOXXO6.js} +50 -16
- package/dist/chunk-QRIOXXO6.js.map +1 -0
- package/dist/{errors-6Aarmz0V.d.cts → errors-B8xAxhKE.d.cts} +7 -1
- package/dist/{errors-BJl2TojD.d.ts → errors-CBIdzKXr.d.ts} +7 -1
- package/dist/index.cjs +94 -92
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -22
- package/dist/index.js.map +1 -1
- package/dist/starknet/index.cjs +177 -122
- package/dist/starknet/index.cjs.map +1 -1
- package/dist/starknet/index.d.cts +39 -4
- package/dist/starknet/index.d.ts +39 -4
- package/dist/starknet/index.js +109 -63
- package/dist/starknet/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-A6EQBVUF.js.map +0 -1
- package/dist/chunk-K5MWWVX5.cjs.map +0 -1
package/dist/starknet/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkGQWRNQD2_cjs = require('../chunk-GQWRNQD2.cjs');
|
|
4
4
|
var chunkH7I6TEOA_cjs = require('../chunk-H7I6TEOA.cjs');
|
|
5
5
|
var starknet = require('starknet');
|
|
6
6
|
var hkdf_js = require('@noble/hashes/hkdf.js');
|
|
@@ -33,7 +33,7 @@ function getChainId(config) {
|
|
|
33
33
|
return starknet.constants.StarknetChainId.SN_MAIN;
|
|
34
34
|
}
|
|
35
35
|
function resolveToken(currency) {
|
|
36
|
-
const token =
|
|
36
|
+
const token = chunkGQWRNQD2_cjs.SUPPORTED_TOKENS.find(
|
|
37
37
|
(t) => t.symbol === currency.toUpperCase() || t.address.toLowerCase() === currency.toLowerCase()
|
|
38
38
|
);
|
|
39
39
|
if (!token) throw new MedialaneError(`Unsupported currency: ${currency}`, "INVALID_PARAMS");
|
|
@@ -44,7 +44,7 @@ function getProvider(config) {
|
|
|
44
44
|
let p = _providerCache.get(config);
|
|
45
45
|
if (!p) {
|
|
46
46
|
const urls = [config.rpcUrl];
|
|
47
|
-
p = new starknet.RpcProvider({ nodeUrl: urls[0], baseFetch:
|
|
47
|
+
p = new starknet.RpcProvider({ nodeUrl: urls[0], baseFetch: chunkGQWRNQD2_cjs.createFailoverFetch(urls) });
|
|
48
48
|
_providerCache.set(config, p);
|
|
49
49
|
}
|
|
50
50
|
return p;
|
|
@@ -9739,15 +9739,113 @@ var IPGenesisABI = [
|
|
|
9739
9739
|
]
|
|
9740
9740
|
}
|
|
9741
9741
|
];
|
|
9742
|
+
var FRAGMENT_KEY = "pop-proof";
|
|
9743
|
+
var toHex = (x) => "0x" + x.toString(16).padStart(64, "0");
|
|
9744
|
+
var poseidon = (xs) => BigInt(starknet.hash.computePoseidonHashOnElements(xs.map((x) => "0x" + x.toString(16))));
|
|
9745
|
+
var nodeHash = (a, b) => a < b ? poseidon([a, b]) : poseidon([b, a]);
|
|
9746
|
+
function popLeafHash(address) {
|
|
9747
|
+
return poseidon([poseidon([BigInt(address)])]);
|
|
9748
|
+
}
|
|
9749
|
+
function merkleTree(leafHashes) {
|
|
9750
|
+
const leaves = [...leafHashes].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
9751
|
+
const tree = new Array(2 * leaves.length - 1);
|
|
9752
|
+
leaves.forEach((leaf, i) => tree[tree.length - 1 - i] = leaf);
|
|
9753
|
+
for (let i = tree.length - 1 - leaves.length; i >= 0; i--) {
|
|
9754
|
+
tree[i] = nodeHash(tree[2 * i + 1], tree[2 * i + 2]);
|
|
9755
|
+
}
|
|
9756
|
+
return {
|
|
9757
|
+
root: tree[0],
|
|
9758
|
+
proof(leaf) {
|
|
9759
|
+
let i = tree.lastIndexOf(leaf);
|
|
9760
|
+
if (i < tree.length - leaves.length) throw new Error("Not a leaf of this tree");
|
|
9761
|
+
const proof = [];
|
|
9762
|
+
while (i > 0) {
|
|
9763
|
+
proof.push(tree[i % 2 === 1 ? i + 1 : i - 1]);
|
|
9764
|
+
i = Math.floor((i - 1) / 2);
|
|
9765
|
+
}
|
|
9766
|
+
return proof;
|
|
9767
|
+
}
|
|
9768
|
+
};
|
|
9769
|
+
}
|
|
9770
|
+
function buildPopAllowlist(addresses) {
|
|
9771
|
+
const unique = [...new Set(addresses.map((a) => chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", a)))];
|
|
9772
|
+
if (unique.length === 0) throw new Error("An allowlist needs at least one address");
|
|
9773
|
+
const leaves = unique.map((address) => ({ address, leaf: popLeafHash(address) }));
|
|
9774
|
+
const tree = merkleTree(leaves.map((l) => l.leaf));
|
|
9775
|
+
const proofs = {};
|
|
9776
|
+
for (const { address, leaf } of leaves) proofs[address] = tree.proof(leaf).map(toHex);
|
|
9777
|
+
return { root: toHex(tree.root), proofs };
|
|
9778
|
+
}
|
|
9779
|
+
function verifyPopProof(root, address, proof) {
|
|
9780
|
+
let computed = popLeafHash(address);
|
|
9781
|
+
for (const sibling of proof) computed = nodeHash(computed, BigInt(sibling));
|
|
9782
|
+
return computed === BigInt(root);
|
|
9783
|
+
}
|
|
9784
|
+
function encodePopClaimFragment(proof) {
|
|
9785
|
+
return `#${FRAGMENT_KEY}=${proof.join(",")}`;
|
|
9786
|
+
}
|
|
9787
|
+
function decodePopClaimFragment(fragment) {
|
|
9788
|
+
const raw = new URLSearchParams(fragment.replace(/^#/, "")).get(FRAGMENT_KEY);
|
|
9789
|
+
if (raw === null) return null;
|
|
9790
|
+
if (raw === "") return [];
|
|
9791
|
+
const parts = raw.split(",");
|
|
9792
|
+
return parts.every((p) => /^0x[0-9a-fA-F]{1,64}$/.test(p)) ? parts : null;
|
|
9793
|
+
}
|
|
9794
|
+
|
|
9795
|
+
// src/starknet/pop-claim.ts
|
|
9796
|
+
function popClaimLinks(origin, collection, list) {
|
|
9797
|
+
const base = `${origin}${chunkGQWRNQD2_cjs.collectionHref("STARKNET", collection)}`;
|
|
9798
|
+
return Object.entries(list.proofs).map(([address, proof]) => ({
|
|
9799
|
+
address,
|
|
9800
|
+
url: `${base}${encodePopClaimFragment(proof)}`
|
|
9801
|
+
}));
|
|
9802
|
+
}
|
|
9803
|
+
function popClaimLinksCsv(links) {
|
|
9804
|
+
return ["address,claim_link", ...links.map((l) => `${l.address},${l.url}`)].join("\n");
|
|
9805
|
+
}
|
|
9806
|
+
async function popClaimInfo(provider, collection) {
|
|
9807
|
+
const contractAddress = chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", collection);
|
|
9808
|
+
const [root, end] = await Promise.all([
|
|
9809
|
+
provider.callContract({ contractAddress, entrypoint: "allowlist_root", calldata: [] }),
|
|
9810
|
+
provider.callContract({ contractAddress, entrypoint: "claim_end_time", calldata: [] })
|
|
9811
|
+
]);
|
|
9812
|
+
return { root: root[0] ?? "0x0", claimEndTime: Number(BigInt(end[0] ?? "0x0")) };
|
|
9813
|
+
}
|
|
9814
|
+
function popClaimState(input) {
|
|
9815
|
+
const { hasClaimed, proof, wallet, info } = input;
|
|
9816
|
+
if (hasClaimed === true) return "claimed";
|
|
9817
|
+
if (hasClaimed === null || info === null) return "loading";
|
|
9818
|
+
if (BigInt(info.root) === 0n) return "closed";
|
|
9819
|
+
if (info.claimEndTime !== 0 && info.now > info.claimEndTime) return "ended";
|
|
9820
|
+
if (proof === null) return "no-link";
|
|
9821
|
+
if (!wallet || !verifyPopProof(info.root, wallet, proof)) return "wrong-wallet";
|
|
9822
|
+
return "ready";
|
|
9823
|
+
}
|
|
9824
|
+
var addr = (a) => chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", a);
|
|
9825
|
+
var byteArrayFelts = (s) => starknet.CallData.compile([starknet.byteArray.byteArrayFromString(s)]);
|
|
9826
|
+
var popCalls = {
|
|
9827
|
+
claim(collection, proof) {
|
|
9828
|
+
return { contractAddress: addr(collection), entrypoint: "claim", calldata: [String(proof.length), ...proof] };
|
|
9829
|
+
},
|
|
9830
|
+
/** An empty `tokenUri` uses the collection's URI. */
|
|
9831
|
+
issue(collection, recipient, tokenUri = "") {
|
|
9832
|
+
return { contractAddress: addr(collection), entrypoint: "issue", calldata: [addr(recipient), ...byteArrayFelts(tokenUri)] };
|
|
9833
|
+
},
|
|
9834
|
+
/** Only the token's holder can burn it. */
|
|
9835
|
+
burn(collection, tokenId) {
|
|
9836
|
+
const id = starknet.cairo.uint256(BigInt(tokenId));
|
|
9837
|
+
return { contractAddress: addr(collection), entrypoint: "burn", calldata: [String(id.low), String(id.high)] };
|
|
9838
|
+
},
|
|
9839
|
+
setAllowlistRoot(collection, root) {
|
|
9840
|
+
return { contractAddress: addr(collection), entrypoint: "set_allowlist_root", calldata: [root] };
|
|
9841
|
+
}
|
|
9842
|
+
};
|
|
9742
9843
|
|
|
9743
9844
|
// src/starknet/services/pop.ts
|
|
9744
9845
|
var PopService = class {
|
|
9745
9846
|
constructor(config) {
|
|
9746
9847
|
this.factoryAddress = chunkH7I6TEOA_cjs.getStarknetCoordinates(config.chain).popFactory;
|
|
9747
9848
|
}
|
|
9748
|
-
_collection(address, account) {
|
|
9749
|
-
return newContract(POPCollectionABI, chunkK5MWWVX5_cjs.normalizeAddress("STARKNET", address), account);
|
|
9750
|
-
}
|
|
9751
9849
|
async createCollection(account, params) {
|
|
9752
9850
|
const factory = newContract(POPFactoryABI, this.factoryAddress, account);
|
|
9753
9851
|
const call = factory.populate("create_collection", [params.name, params.symbol, params.baseUri, params.claimEndTime]);
|
|
@@ -9755,32 +9853,32 @@ var PopService = class {
|
|
|
9755
9853
|
return { txHash: res.transaction_hash };
|
|
9756
9854
|
}
|
|
9757
9855
|
async setAllowlistRoot(account, params) {
|
|
9758
|
-
const call =
|
|
9856
|
+
const call = popCalls.setAllowlistRoot(params.collection, params.root);
|
|
9759
9857
|
const res = await account.execute([call]);
|
|
9760
9858
|
return { txHash: res.transaction_hash };
|
|
9761
9859
|
}
|
|
9762
9860
|
async claim(account, params) {
|
|
9763
|
-
const call =
|
|
9861
|
+
const call = popCalls.claim(params.collection, params.proof);
|
|
9764
9862
|
const res = await account.execute([call]);
|
|
9765
9863
|
return { txHash: res.transaction_hash };
|
|
9766
9864
|
}
|
|
9767
9865
|
async issue(account, params) {
|
|
9768
|
-
const call =
|
|
9866
|
+
const call = popCalls.issue(params.collection, params.recipient, params.tokenUri);
|
|
9769
9867
|
const res = await account.execute([call]);
|
|
9770
9868
|
return { txHash: res.transaction_hash };
|
|
9771
9869
|
}
|
|
9772
9870
|
/** Destroys the caller's own credential; the address cannot receive another from this collection. */
|
|
9773
9871
|
async burn(account, params) {
|
|
9774
|
-
const call =
|
|
9872
|
+
const call = popCalls.burn(params.collection, params.tokenId);
|
|
9775
9873
|
const res = await account.execute([call]);
|
|
9776
9874
|
return { txHash: res.transaction_hash };
|
|
9777
9875
|
}
|
|
9778
9876
|
};
|
|
9779
9877
|
async function popHasClaimed(provider, collection, address) {
|
|
9780
9878
|
const res = await provider.callContract({
|
|
9781
|
-
contractAddress:
|
|
9879
|
+
contractAddress: chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", collection),
|
|
9782
9880
|
entrypoint: "has_claimed",
|
|
9783
|
-
calldata: [
|
|
9881
|
+
calldata: [chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address)]
|
|
9784
9882
|
});
|
|
9785
9883
|
return BigInt(res[0] ?? "0x0") !== 0n;
|
|
9786
9884
|
}
|
|
@@ -9814,7 +9912,7 @@ var DropService = class {
|
|
|
9814
9912
|
this.config = config;
|
|
9815
9913
|
}
|
|
9816
9914
|
_collection(address, account) {
|
|
9817
|
-
return newContract(DropCollectionABI,
|
|
9915
|
+
return newContract(DropCollectionABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), account);
|
|
9818
9916
|
}
|
|
9819
9917
|
async claim(account, collectionAddress, quantity = 1) {
|
|
9820
9918
|
const collection = this._collection(collectionAddress, account);
|
|
@@ -9899,14 +9997,14 @@ var ERC1155CollectionService = class {
|
|
|
9899
9997
|
_factory(account) {
|
|
9900
9998
|
return newContract(
|
|
9901
9999
|
IPCollection1155FactoryABI,
|
|
9902
|
-
|
|
10000
|
+
chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", this.factoryAddress),
|
|
9903
10001
|
account
|
|
9904
10002
|
);
|
|
9905
10003
|
}
|
|
9906
10004
|
_collection(address, account) {
|
|
9907
10005
|
return newContract(
|
|
9908
10006
|
IPCollection1155ABI,
|
|
9909
|
-
|
|
10007
|
+
chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address),
|
|
9910
10008
|
account
|
|
9911
10009
|
);
|
|
9912
10010
|
}
|
|
@@ -10134,20 +10232,20 @@ function buildLaunchOnEkuboCalls(params) {
|
|
|
10134
10232
|
}
|
|
10135
10233
|
var CREATOR_COIN_CREATED_SELECTOR = starknet.hash.getSelectorFromName("CreatorCoinCreated");
|
|
10136
10234
|
function parseCreatorCoinCreated(receipt) {
|
|
10137
|
-
const factory =
|
|
10235
|
+
const factory = chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", chunkH7I6TEOA_cjs.getStarknetCoordinates("STARKNET").creatorCoinFactory);
|
|
10138
10236
|
for (const ev of receipt?.events ?? []) {
|
|
10139
10237
|
let from;
|
|
10140
10238
|
try {
|
|
10141
|
-
from =
|
|
10239
|
+
from = chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", ev.from_address ?? "");
|
|
10142
10240
|
} catch {
|
|
10143
10241
|
continue;
|
|
10144
10242
|
}
|
|
10145
10243
|
if (from !== factory) continue;
|
|
10146
10244
|
const k0 = ev.keys?.[0];
|
|
10147
|
-
if (!k0 ||
|
|
10245
|
+
if (!k0 || chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", k0) !== chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", CREATOR_COIN_CREATED_SELECTOR)) continue;
|
|
10148
10246
|
const data = ev.data ?? [];
|
|
10149
10247
|
if (data.length < 1) continue;
|
|
10150
|
-
return
|
|
10248
|
+
return chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", data[data.length - 1]);
|
|
10151
10249
|
}
|
|
10152
10250
|
throw new Error("Coin deployed but the coin address could not be read from the receipt");
|
|
10153
10251
|
}
|
|
@@ -10183,14 +10281,14 @@ var TicketService = class {
|
|
|
10183
10281
|
_factory(account, factoryAddress) {
|
|
10184
10282
|
const address = factoryAddress ?? this.factoryAddress;
|
|
10185
10283
|
if (!address) throw new Error("IP-Tickets factory address not configured for this chain");
|
|
10186
|
-
return newContract(IPTicketCollectionFactoryABI,
|
|
10284
|
+
return newContract(IPTicketCollectionFactoryABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), account);
|
|
10187
10285
|
}
|
|
10188
10286
|
_collection(address, account) {
|
|
10189
|
-
return newContract(IPTicketCollectionABI,
|
|
10287
|
+
return newContract(IPTicketCollectionABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), account);
|
|
10190
10288
|
}
|
|
10191
10289
|
_collectionRead(address) {
|
|
10192
10290
|
const provider = new starknet.RpcProvider({ nodeUrl: this.config.rpcUrl });
|
|
10193
|
-
return newContract(IPTicketCollectionABI,
|
|
10291
|
+
return newContract(IPTicketCollectionABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), provider);
|
|
10194
10292
|
}
|
|
10195
10293
|
async deployCollection(account, params) {
|
|
10196
10294
|
const call = this._factory(account, params.factoryAddress).populate("deploy_collection", [
|
|
@@ -10256,14 +10354,14 @@ var ClubService = class {
|
|
|
10256
10354
|
_factory(account, factoryAddress) {
|
|
10257
10355
|
const address = factoryAddress ?? this.factoryAddress;
|
|
10258
10356
|
if (!address) throw new Error("IP-Club factory address not configured for this chain");
|
|
10259
|
-
return newContract(IPClubFactoryABI,
|
|
10357
|
+
return newContract(IPClubFactoryABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), account);
|
|
10260
10358
|
}
|
|
10261
10359
|
_collection(address, account) {
|
|
10262
|
-
return newContract(IPClubCollectionABI,
|
|
10360
|
+
return newContract(IPClubCollectionABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), account);
|
|
10263
10361
|
}
|
|
10264
10362
|
_collectionRead(address) {
|
|
10265
10363
|
const provider = new starknet.RpcProvider({ nodeUrl: this.config.rpcUrl });
|
|
10266
|
-
return newContract(IPClubCollectionABI,
|
|
10364
|
+
return newContract(IPClubCollectionABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address), provider);
|
|
10267
10365
|
}
|
|
10268
10366
|
async deployCollection(account, params) {
|
|
10269
10367
|
const call = this._factory(account, params.factoryAddress).populate("deploy_collection", [
|
|
@@ -10333,7 +10431,7 @@ var SponsorshipService = class {
|
|
|
10333
10431
|
if (!resolved) {
|
|
10334
10432
|
throw new Error("IP-Sponsorship address not configured for this chain");
|
|
10335
10433
|
}
|
|
10336
|
-
return newContract(IPSponsorshipABI,
|
|
10434
|
+
return newContract(IPSponsorshipABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", resolved), account);
|
|
10337
10435
|
}
|
|
10338
10436
|
_contractRead(address) {
|
|
10339
10437
|
const resolved = address ?? this.sponsorshipAddress;
|
|
@@ -10341,7 +10439,7 @@ var SponsorshipService = class {
|
|
|
10341
10439
|
throw new Error("IP-Sponsorship address not configured for this chain");
|
|
10342
10440
|
}
|
|
10343
10441
|
const provider = new starknet.RpcProvider({ nodeUrl: this.config.rpcUrl });
|
|
10344
|
-
return newContract(IPSponsorshipABI,
|
|
10442
|
+
return newContract(IPSponsorshipABI, chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", resolved), provider);
|
|
10345
10443
|
}
|
|
10346
10444
|
async createOffer(account, params) {
|
|
10347
10445
|
const specificSponsor = params.specificSponsor ? new starknet.CairoOption(starknet.CairoOptionVariant.Some, params.specificSponsor) : new starknet.CairoOption(starknet.CairoOptionVariant.None);
|
|
@@ -10376,7 +10474,7 @@ var SponsorshipService = class {
|
|
|
10376
10474
|
const approveCall = {
|
|
10377
10475
|
contractAddress: params.paymentToken,
|
|
10378
10476
|
entrypoint: "approve",
|
|
10379
|
-
calldata: [
|
|
10477
|
+
calldata: [chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", sponsorshipAddress), amount.low.toString(), amount.high.toString()]
|
|
10380
10478
|
};
|
|
10381
10479
|
const bidCall = this._contract(account, sponsorshipAddress).populate("place_bid", [
|
|
10382
10480
|
starknet.cairo.uint256(params.offerId),
|
|
@@ -10503,7 +10601,7 @@ var SponsorshipService = class {
|
|
|
10503
10601
|
// src/starknet/client.ts
|
|
10504
10602
|
var MedialaneClient = class {
|
|
10505
10603
|
constructor(rawConfig = {}) {
|
|
10506
|
-
this.config =
|
|
10604
|
+
this.config = chunkGQWRNQD2_cjs.resolveConfig(rawConfig);
|
|
10507
10605
|
this.services = {
|
|
10508
10606
|
pop: new PopService(this.config),
|
|
10509
10607
|
drop: new DropService(this.config),
|
|
@@ -10514,9 +10612,9 @@ var MedialaneClient = class {
|
|
|
10514
10612
|
sponsorship: new SponsorshipService(this.config)
|
|
10515
10613
|
};
|
|
10516
10614
|
if (!this.config.backendUrl) {
|
|
10517
|
-
const sentinel = new
|
|
10615
|
+
const sentinel = new chunkGQWRNQD2_cjs.ApiClient("https://medialane-sdk-no-backend.invalid", this.config.apiKey);
|
|
10518
10616
|
const apiMethodNames = new Set(
|
|
10519
|
-
Object.getOwnPropertyNames(
|
|
10617
|
+
Object.getOwnPropertyNames(chunkGQWRNQD2_cjs.ApiClient.prototype).filter(
|
|
10520
10618
|
(k) => k !== "constructor" && typeof sentinel[k] === "function"
|
|
10521
10619
|
)
|
|
10522
10620
|
);
|
|
@@ -10533,7 +10631,7 @@ var MedialaneClient = class {
|
|
|
10533
10631
|
}
|
|
10534
10632
|
});
|
|
10535
10633
|
} else {
|
|
10536
|
-
this.api = new
|
|
10634
|
+
this.api = new chunkGQWRNQD2_cjs.ApiClient(this.config.backendUrl, this.config.apiKey, this.config.retryOptions, this.config.chain);
|
|
10537
10635
|
}
|
|
10538
10636
|
}
|
|
10539
10637
|
get chain() {
|
|
@@ -10705,7 +10803,7 @@ function buildListingOrder(i, cfg) {
|
|
|
10705
10803
|
salt: i.salt,
|
|
10706
10804
|
counter: i.counter
|
|
10707
10805
|
};
|
|
10708
|
-
const typedData =
|
|
10806
|
+
const typedData = chunkGQWRNQD2_cjs.stringifyBigInts(buildOrderTypedData(orderParams, getChainId(cfg)));
|
|
10709
10807
|
return { orderParams, typedData };
|
|
10710
10808
|
}
|
|
10711
10809
|
function buildOfferOrder(i, cfg) {
|
|
@@ -10726,11 +10824,11 @@ function buildOfferOrder(i, cfg) {
|
|
|
10726
10824
|
salt: i.salt,
|
|
10727
10825
|
counter: i.counter
|
|
10728
10826
|
};
|
|
10729
|
-
const typedData =
|
|
10827
|
+
const typedData = chunkGQWRNQD2_cjs.stringifyBigInts(buildOrderTypedData(orderParams, getChainId(cfg)));
|
|
10730
10828
|
return { orderParams, typedData };
|
|
10731
10829
|
}
|
|
10732
10830
|
function registerPayload(orderParams, signature) {
|
|
10733
|
-
return
|
|
10831
|
+
return chunkGQWRNQD2_cjs.stringifyBigInts({
|
|
10734
10832
|
parameters: {
|
|
10735
10833
|
...orderParams,
|
|
10736
10834
|
offer: { ...orderParams.offer, item_type: starknet.shortString.encodeShortString(orderParams.offer.item_type) },
|
|
@@ -10761,14 +10859,14 @@ function buildFulfillCalls(a, cfg) {
|
|
|
10761
10859
|
return fee ? [approve, fulfill, fee] : [approve, fulfill];
|
|
10762
10860
|
}
|
|
10763
10861
|
function buildCancelCalls(a, cfg) {
|
|
10764
|
-
const cancelRequest =
|
|
10862
|
+
const cancelRequest = chunkGQWRNQD2_cjs.stringifyBigInts({
|
|
10765
10863
|
cancelation: { order_hash: a.orderHash, offerer: a.offerer },
|
|
10766
10864
|
signature: a.signature
|
|
10767
10865
|
});
|
|
10768
10866
|
return [contractFor(cfg).populate("cancel_order", [cancelRequest])];
|
|
10769
10867
|
}
|
|
10770
10868
|
function buildCancelTypedData(orderHash, offerer, cfg) {
|
|
10771
|
-
return
|
|
10869
|
+
return chunkGQWRNQD2_cjs.stringifyBigInts(buildCancellationTypedData({ order_hash: orderHash, offerer }, getChainId(cfg)));
|
|
10772
10870
|
}
|
|
10773
10871
|
function contractFor2(cfg) {
|
|
10774
10872
|
return newContract(Medialane1155ABI, cfg.marketplace1155Contract, getProvider(cfg));
|
|
@@ -10791,7 +10889,7 @@ function buildListing1155Order(i, cfg) {
|
|
|
10791
10889
|
salt: i.salt,
|
|
10792
10890
|
counter: i.counter
|
|
10793
10891
|
};
|
|
10794
|
-
const typedData =
|
|
10892
|
+
const typedData = chunkGQWRNQD2_cjs.stringifyBigInts(
|
|
10795
10893
|
build1155OrderTypedData(orderParams, getChainId(cfg))
|
|
10796
10894
|
);
|
|
10797
10895
|
return { orderParams, typedData };
|
|
@@ -10814,13 +10912,13 @@ function buildOffer1155Order(i, cfg) {
|
|
|
10814
10912
|
salt: i.salt,
|
|
10815
10913
|
counter: i.counter
|
|
10816
10914
|
};
|
|
10817
|
-
const typedData =
|
|
10915
|
+
const typedData = chunkGQWRNQD2_cjs.stringifyBigInts(
|
|
10818
10916
|
build1155OrderTypedData(orderParams, getChainId(cfg))
|
|
10819
10917
|
);
|
|
10820
10918
|
return { orderParams, typedData };
|
|
10821
10919
|
}
|
|
10822
10920
|
function registerPayload2(orderParams, signature) {
|
|
10823
|
-
return
|
|
10921
|
+
return chunkGQWRNQD2_cjs.stringifyBigInts({
|
|
10824
10922
|
parameters: {
|
|
10825
10923
|
...orderParams,
|
|
10826
10924
|
offer: { ...orderParams.offer, item_type: starknet.shortString.encodeShortString(orderParams.offer.item_type) },
|
|
@@ -10851,14 +10949,14 @@ function buildFulfill1155Calls(a, cfg) {
|
|
|
10851
10949
|
return fee ? [approve, fulfill, fee] : [approve, fulfill];
|
|
10852
10950
|
}
|
|
10853
10951
|
function buildCancel1155Calls(a, cfg) {
|
|
10854
|
-
const cancelPayload =
|
|
10952
|
+
const cancelPayload = chunkGQWRNQD2_cjs.stringifyBigInts({
|
|
10855
10953
|
cancelation: { order_hash: a.orderHash, offerer: a.offerer },
|
|
10856
10954
|
signature: a.signature
|
|
10857
10955
|
});
|
|
10858
10956
|
return [contractFor2(cfg).populate("cancel_order", [cancelPayload])];
|
|
10859
10957
|
}
|
|
10860
10958
|
function buildCancel1155TypedData(orderHash, offerer, cfg) {
|
|
10861
|
-
return
|
|
10959
|
+
return chunkGQWRNQD2_cjs.stringifyBigInts(
|
|
10862
10960
|
build1155CancellationTypedData({ order_hash: orderHash, offerer }, getChainId(cfg))
|
|
10863
10961
|
);
|
|
10864
10962
|
}
|
|
@@ -11201,14 +11299,14 @@ async function assertTransactionSucceeded(provider, txHash, retryDelaysMs = RECE
|
|
|
11201
11299
|
const receipt = await provider.getTransactionReceipt(txHash);
|
|
11202
11300
|
const status = receipt.execution_status ?? receipt.status;
|
|
11203
11301
|
if (status === "REVERTED" || status === "REJECTED") {
|
|
11204
|
-
throw new
|
|
11302
|
+
throw new chunkGQWRNQD2_cjs.UserFacingError("Transaction was submitted but reverted onchain. Please check your balance and try again.");
|
|
11205
11303
|
}
|
|
11206
11304
|
if (status) return receipt;
|
|
11207
11305
|
} catch (err) {
|
|
11208
11306
|
if (err instanceof Error && err.message.includes("reverted onchain")) throw err;
|
|
11209
11307
|
}
|
|
11210
11308
|
}
|
|
11211
|
-
throw new
|
|
11309
|
+
throw new chunkGQWRNQD2_cjs.UserFacingError("Verification timed out. Check your account for the transaction status.");
|
|
11212
11310
|
}
|
|
11213
11311
|
async function executeIntent(provider, signer, client, intent, opts = {}) {
|
|
11214
11312
|
let calls;
|
|
@@ -11261,14 +11359,14 @@ function u2562(low, high) {
|
|
|
11261
11359
|
return (BigInt(low ?? 0) + (BigInt(high ?? 0) << 128n)).toString();
|
|
11262
11360
|
}
|
|
11263
11361
|
function deployedCollectionFromReceipt(receipt, service) {
|
|
11264
|
-
const factory =
|
|
11362
|
+
const factory = chunkGQWRNQD2_cjs.getService(service)?.onchain?.STARKNET?.factoryAddress;
|
|
11265
11363
|
const { event, address } = DEPLOY_EVENTS[service];
|
|
11266
11364
|
const selector = BigInt(starknet.hash.getSelectorFromName(event));
|
|
11267
11365
|
for (const e of receipt.events ?? []) {
|
|
11268
11366
|
if (factory && !sameFelt(e.from_address, factory)) continue;
|
|
11269
11367
|
if (!sameFelt(e.keys?.[0], selector)) continue;
|
|
11270
11368
|
const value = address(e);
|
|
11271
|
-
if (value) return
|
|
11369
|
+
if (value) return chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", value);
|
|
11272
11370
|
}
|
|
11273
11371
|
return null;
|
|
11274
11372
|
}
|
|
@@ -11281,58 +11379,6 @@ function mintedTokenIdFromReceipt(receipt, contract) {
|
|
|
11281
11379
|
}
|
|
11282
11380
|
return null;
|
|
11283
11381
|
}
|
|
11284
|
-
var FRAGMENT_KEY = "pop-proof";
|
|
11285
|
-
var toHex = (x) => "0x" + x.toString(16).padStart(64, "0");
|
|
11286
|
-
var poseidon = (xs) => BigInt(starknet.hash.computePoseidonHashOnElements(xs.map((x) => "0x" + x.toString(16))));
|
|
11287
|
-
var nodeHash = (a, b) => a < b ? poseidon([a, b]) : poseidon([b, a]);
|
|
11288
|
-
function popLeafHash(address) {
|
|
11289
|
-
return poseidon([poseidon([BigInt(address)])]);
|
|
11290
|
-
}
|
|
11291
|
-
function merkleTree(leafHashes) {
|
|
11292
|
-
const leaves = [...leafHashes].sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
|
|
11293
|
-
const tree = new Array(2 * leaves.length - 1);
|
|
11294
|
-
leaves.forEach((leaf, i) => tree[tree.length - 1 - i] = leaf);
|
|
11295
|
-
for (let i = tree.length - 1 - leaves.length; i >= 0; i--) {
|
|
11296
|
-
tree[i] = nodeHash(tree[2 * i + 1], tree[2 * i + 2]);
|
|
11297
|
-
}
|
|
11298
|
-
return {
|
|
11299
|
-
root: tree[0],
|
|
11300
|
-
proof(leaf) {
|
|
11301
|
-
let i = tree.lastIndexOf(leaf);
|
|
11302
|
-
if (i < tree.length - leaves.length) throw new Error("Not a leaf of this tree");
|
|
11303
|
-
const proof = [];
|
|
11304
|
-
while (i > 0) {
|
|
11305
|
-
proof.push(tree[i % 2 === 1 ? i + 1 : i - 1]);
|
|
11306
|
-
i = Math.floor((i - 1) / 2);
|
|
11307
|
-
}
|
|
11308
|
-
return proof;
|
|
11309
|
-
}
|
|
11310
|
-
};
|
|
11311
|
-
}
|
|
11312
|
-
function buildPopAllowlist(addresses) {
|
|
11313
|
-
const unique = [...new Set(addresses.map((a) => chunkK5MWWVX5_cjs.normalizeAddress("STARKNET", a)))];
|
|
11314
|
-
if (unique.length === 0) throw new Error("An allowlist needs at least one address");
|
|
11315
|
-
const leaves = unique.map((address) => ({ address, leaf: popLeafHash(address) }));
|
|
11316
|
-
const tree = merkleTree(leaves.map((l) => l.leaf));
|
|
11317
|
-
const proofs = {};
|
|
11318
|
-
for (const { address, leaf } of leaves) proofs[address] = tree.proof(leaf).map(toHex);
|
|
11319
|
-
return { root: toHex(tree.root), proofs };
|
|
11320
|
-
}
|
|
11321
|
-
function verifyPopProof(root, address, proof) {
|
|
11322
|
-
let computed = popLeafHash(address);
|
|
11323
|
-
for (const sibling of proof) computed = nodeHash(computed, BigInt(sibling));
|
|
11324
|
-
return computed === BigInt(root);
|
|
11325
|
-
}
|
|
11326
|
-
function encodePopClaimFragment(proof) {
|
|
11327
|
-
return `#${FRAGMENT_KEY}=${proof.join(",")}`;
|
|
11328
|
-
}
|
|
11329
|
-
function decodePopClaimFragment(fragment) {
|
|
11330
|
-
const raw = new URLSearchParams(fragment.replace(/^#/, "")).get(FRAGMENT_KEY);
|
|
11331
|
-
if (raw === null) return null;
|
|
11332
|
-
if (raw === "") return [];
|
|
11333
|
-
const parts = raw.split(",");
|
|
11334
|
-
return parts.every((p) => /^0x[0-9a-fA-F]{1,64}$/.test(p)) ? parts : null;
|
|
11335
|
-
}
|
|
11336
11382
|
|
|
11337
11383
|
// src/starknet/services/sponsoredExecutor.ts
|
|
11338
11384
|
var SponsoredCallRejectedError = class extends Error {
|
|
@@ -11441,13 +11487,13 @@ function buildRemoveOwnerByGuidCall(accountAddress, ownerGuid) {
|
|
|
11441
11487
|
}
|
|
11442
11488
|
function buildDeployAccountParams(ownerPubkey, salt = 0) {
|
|
11443
11489
|
return {
|
|
11444
|
-
classHash:
|
|
11445
|
-
constructorCalldata:
|
|
11490
|
+
classHash: chunkGQWRNQD2_cjs.STARKNET_MEDIAWALLET_CLASS_HASH,
|
|
11491
|
+
constructorCalldata: chunkGQWRNQD2_cjs.ownerConstructorCalldata(ownerPubkey),
|
|
11446
11492
|
addressSalt: starknet.num.toHex(salt),
|
|
11447
|
-
contractAddress:
|
|
11493
|
+
contractAddress: chunkGQWRNQD2_cjs.computeAccountAddress(ownerPubkey, salt)
|
|
11448
11494
|
};
|
|
11449
11495
|
}
|
|
11450
|
-
var norm = (address) =>
|
|
11496
|
+
var norm = (address) => chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address);
|
|
11451
11497
|
var SIGNER_TYPE_NAMES = ["Starknet", "Secp256k1", "Secp256r1"];
|
|
11452
11498
|
function encodeFeltArray(items) {
|
|
11453
11499
|
return [starknet.num.toHex(items.length), ...items];
|
|
@@ -11640,7 +11686,7 @@ var InvalidRecoveryKeyError = class extends Error {
|
|
|
11640
11686
|
var canonicalAddress = (address) => `0x${BigInt(address).toString(16).padStart(64, "0")}`;
|
|
11641
11687
|
function keyPair(privateKey) {
|
|
11642
11688
|
try {
|
|
11643
|
-
return
|
|
11689
|
+
return chunkGQWRNQD2_cjs.starkKeyPairFromPrivateKey(privateKey);
|
|
11644
11690
|
} catch {
|
|
11645
11691
|
throw new InvalidRecoveryKeyError();
|
|
11646
11692
|
}
|
|
@@ -11653,7 +11699,7 @@ function parseRecoveryKey(input) {
|
|
|
11653
11699
|
const trimmed = input.trim();
|
|
11654
11700
|
if (!trimmed.startsWith(PREFIX)) {
|
|
11655
11701
|
const { privateKeyHex, publicKeyHex } = keyPair(trimmed);
|
|
11656
|
-
return { walletAddress:
|
|
11702
|
+
return { walletAddress: chunkGQWRNQD2_cjs.computeAccountAddress(publicKeyHex, 0), privateKey: privateKeyHex };
|
|
11657
11703
|
}
|
|
11658
11704
|
const parts = trimmed.slice(PREFIX.length).split(":");
|
|
11659
11705
|
const [walletAddress, privateKey] = parts;
|
|
@@ -11675,7 +11721,7 @@ function describeRecoveryAction(escape) {
|
|
|
11675
11721
|
return "none";
|
|
11676
11722
|
}
|
|
11677
11723
|
function normalizeWalletAddress(address) {
|
|
11678
|
-
return
|
|
11724
|
+
return chunkGQWRNQD2_cjs.normalizeAddress("STARKNET", address);
|
|
11679
11725
|
}
|
|
11680
11726
|
function isValidStarknetAddress(address) {
|
|
11681
11727
|
try {
|
|
@@ -11720,7 +11766,7 @@ async function estimateSelfFundedFee(provider, address, calls) {
|
|
|
11720
11766
|
return { feeRaw: estimate.overall_fee, unit: estimate.unit, balanceRaw };
|
|
11721
11767
|
}
|
|
11722
11768
|
async function feeTokenBalance(provider, address, unit) {
|
|
11723
|
-
const token =
|
|
11769
|
+
const token = chunkGQWRNQD2_cjs.getTokenBySymbol(unit === "FRI" ? "STRK" : "ETH");
|
|
11724
11770
|
if (!token) throw new Error(`No fee token for unit ${unit}`);
|
|
11725
11771
|
const [low = "0x0", high = "0x0"] = await provider.callContract({
|
|
11726
11772
|
contractAddress: token.address,
|
|
@@ -11747,7 +11793,7 @@ function sponsoredExecutor(deps) {
|
|
|
11747
11793
|
{ proxyUrl: deps.proxyUrl, fetchImpl: deps.fetchImpl },
|
|
11748
11794
|
{
|
|
11749
11795
|
address: userAddress,
|
|
11750
|
-
signTypedData: async (data) =>
|
|
11796
|
+
signTypedData: async (data) => chunkGQWRNQD2_cjs.signWithPrivateKey(privateKeyHex, starknet.typedData.getMessageHash(data, userAddress))
|
|
11751
11797
|
},
|
|
11752
11798
|
calls
|
|
11753
11799
|
);
|
|
@@ -11807,7 +11853,7 @@ async function deploySelfFunded(input) {
|
|
|
11807
11853
|
});
|
|
11808
11854
|
const { transaction_hash } = await account.deployAccount({
|
|
11809
11855
|
classHash,
|
|
11810
|
-
constructorCalldata:
|
|
11856
|
+
constructorCalldata: chunkGQWRNQD2_cjs.ownerConstructorCalldata(input.ownerPubKey),
|
|
11811
11857
|
addressSalt: 0,
|
|
11812
11858
|
contractAddress: input.ownerAddress
|
|
11813
11859
|
});
|
|
@@ -11870,7 +11916,7 @@ async function completeDeployment(deps, onStep, options = {}) {
|
|
|
11870
11916
|
backendUrl: deps.backendUrl,
|
|
11871
11917
|
walletAddress: address,
|
|
11872
11918
|
signer: {
|
|
11873
|
-
signMessage: async (td) =>
|
|
11919
|
+
signMessage: async (td) => chunkGQWRNQD2_cjs.signWithPrivateKey(privateKeyHex, starknet.typedData.getMessageHash(td, address))
|
|
11874
11920
|
}
|
|
11875
11921
|
});
|
|
11876
11922
|
deps.store.notifyChange();
|
|
@@ -11975,7 +12021,7 @@ function createMediaWallet(config) {
|
|
|
11975
12021
|
address: sealed.address,
|
|
11976
12022
|
signTypedData: async (data) => {
|
|
11977
12023
|
const privateKeyHex = await unlockOnce(sealed);
|
|
11978
|
-
return
|
|
12024
|
+
return chunkGQWRNQD2_cjs.signWithPrivateKey(privateKeyHex, starknet.typedData.getMessageHash(data, sealed.address));
|
|
11979
12025
|
},
|
|
11980
12026
|
execute: async (calls) => {
|
|
11981
12027
|
const { transactionHash } = await run(sealed, calls);
|
|
@@ -12047,51 +12093,55 @@ async function claimSessionWallet(api, walletAddress, deps) {
|
|
|
12047
12093
|
|
|
12048
12094
|
Object.defineProperty(exports, "InvalidStarkPrivateKeyError", {
|
|
12049
12095
|
enumerable: true,
|
|
12050
|
-
get: function () { return
|
|
12096
|
+
get: function () { return chunkGQWRNQD2_cjs.InvalidStarkPrivateKeyError; }
|
|
12051
12097
|
});
|
|
12052
12098
|
Object.defineProperty(exports, "PasskeyCancelledError", {
|
|
12053
12099
|
enumerable: true,
|
|
12054
|
-
get: function () { return
|
|
12100
|
+
get: function () { return chunkGQWRNQD2_cjs.PasskeyCancelledError; }
|
|
12101
|
+
});
|
|
12102
|
+
Object.defineProperty(exports, "PasskeyUnsupportedError", {
|
|
12103
|
+
enumerable: true,
|
|
12104
|
+
get: function () { return chunkGQWRNQD2_cjs.PasskeyUnsupportedError; }
|
|
12055
12105
|
});
|
|
12056
12106
|
Object.defineProperty(exports, "UserFacingError", {
|
|
12057
12107
|
enumerable: true,
|
|
12058
|
-
get: function () { return
|
|
12108
|
+
get: function () { return chunkGQWRNQD2_cjs.UserFacingError; }
|
|
12059
12109
|
});
|
|
12060
12110
|
Object.defineProperty(exports, "computeAccountAddress", {
|
|
12061
12111
|
enumerable: true,
|
|
12062
|
-
get: function () { return
|
|
12112
|
+
get: function () { return chunkGQWRNQD2_cjs.computeAccountAddress; }
|
|
12063
12113
|
});
|
|
12064
12114
|
Object.defineProperty(exports, "createPasskeyOwner", {
|
|
12065
12115
|
enumerable: true,
|
|
12066
|
-
get: function () { return
|
|
12116
|
+
get: function () { return chunkGQWRNQD2_cjs.createPasskeyOwner; }
|
|
12067
12117
|
});
|
|
12068
12118
|
Object.defineProperty(exports, "deriveAesKey", {
|
|
12069
12119
|
enumerable: true,
|
|
12070
|
-
get: function () { return
|
|
12120
|
+
get: function () { return chunkGQWRNQD2_cjs.deriveAesKey; }
|
|
12071
12121
|
});
|
|
12072
12122
|
Object.defineProperty(exports, "generateStarkKeyPair", {
|
|
12073
12123
|
enumerable: true,
|
|
12074
|
-
get: function () { return
|
|
12124
|
+
get: function () { return chunkGQWRNQD2_cjs.generateStarkKeyPair; }
|
|
12075
12125
|
});
|
|
12076
12126
|
Object.defineProperty(exports, "ownerConstructorCalldata", {
|
|
12077
12127
|
enumerable: true,
|
|
12078
|
-
get: function () { return
|
|
12128
|
+
get: function () { return chunkGQWRNQD2_cjs.ownerConstructorCalldata; }
|
|
12079
12129
|
});
|
|
12080
12130
|
Object.defineProperty(exports, "sealPrivateKey", {
|
|
12081
12131
|
enumerable: true,
|
|
12082
|
-
get: function () { return
|
|
12132
|
+
get: function () { return chunkGQWRNQD2_cjs.sealPrivateKey; }
|
|
12083
12133
|
});
|
|
12084
12134
|
Object.defineProperty(exports, "signWithPrivateKey", {
|
|
12085
12135
|
enumerable: true,
|
|
12086
|
-
get: function () { return
|
|
12136
|
+
get: function () { return chunkGQWRNQD2_cjs.signWithPrivateKey; }
|
|
12087
12137
|
});
|
|
12088
12138
|
Object.defineProperty(exports, "starkKeyPairFromPrivateKey", {
|
|
12089
12139
|
enumerable: true,
|
|
12090
|
-
get: function () { return
|
|
12140
|
+
get: function () { return chunkGQWRNQD2_cjs.starkKeyPairFromPrivateKey; }
|
|
12091
12141
|
});
|
|
12092
12142
|
Object.defineProperty(exports, "unsealPrivateKey", {
|
|
12093
12143
|
enumerable: true,
|
|
12094
|
-
get: function () { return
|
|
12144
|
+
get: function () { return chunkGQWRNQD2_cjs.unsealPrivateKey; }
|
|
12095
12145
|
});
|
|
12096
12146
|
exports.COIN_MAX_SUPPLY = MAX_SUPPLY;
|
|
12097
12147
|
exports.COIN_MIN_SUPPLY = MIN_SUPPLY;
|
|
@@ -12204,6 +12254,11 @@ exports.parseAccountAddress = parseAccountAddress;
|
|
|
12204
12254
|
exports.parseCreatorCoinCreated = parseCreatorCoinCreated;
|
|
12205
12255
|
exports.parsePairingPayload = parsePairingPayload;
|
|
12206
12256
|
exports.parseRecoveryKey = parseRecoveryKey;
|
|
12257
|
+
exports.popCalls = popCalls;
|
|
12258
|
+
exports.popClaimInfo = popClaimInfo;
|
|
12259
|
+
exports.popClaimLinks = popClaimLinks;
|
|
12260
|
+
exports.popClaimLinksCsv = popClaimLinksCsv;
|
|
12261
|
+
exports.popClaimState = popClaimState;
|
|
12207
12262
|
exports.popHasClaimed = popHasClaimed;
|
|
12208
12263
|
exports.priceToEkuboParams = priceToEkuboParams;
|
|
12209
12264
|
exports.requestSiwsToken = requestSiwsToken;
|