@medialane/sdk 0.205.0 → 0.207.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.
@@ -1,4 +1,4 @@
1
- import { STARKNET_MEDIAWALLET_CLASS_HASH, normalizeAddress, getTokenBySymbol, ApiClient, PasskeyCancelledError, PasskeyUnsupportedError, DeviceKeyMissingError } from './chunk-KGAGWULG.js';
1
+ import { UserFacingError, STARKNET_MEDIAWALLET_CLASS_HASH, normalizeAddress, getTokenBySymbol, ApiClient, PasskeyCancelledError, PasskeyUnsupportedError, DeviceKeyMissingError } from './chunk-GENBWVGK.js';
2
2
  import { getCoordinates } from './chunk-5KY6P434.js';
3
3
  import { extract, expand } from '@noble/hashes/hkdf.js';
4
4
  import { sha256 } from '@noble/hashes/sha2.js';
@@ -12,7 +12,15 @@ async function erc20Balance(provider, token, holder) {
12
12
  }
13
13
 
14
14
  // src/starknet/services/sponsoredExecutor.ts
15
- var SponsoredCallRejectedError = class extends Error {
15
+ var SponsoredCallRejectedError = class extends UserFacingError {
16
+ constructor(message, info = {}) {
17
+ super(message, { retryable: false });
18
+ this.code = info.code;
19
+ this.detail = info.detail;
20
+ this.status = info.status;
21
+ this.stage = info.stage;
22
+ this.requestId = info.requestId;
23
+ }
16
24
  };
17
25
  var FALLBACK_FUNDING_FAILURES = /* @__PURE__ */ new Set(["sponsor_unavailable", "credits_exhausted"]);
18
26
  function allowsFallbackFunding(code, status, stage) {
@@ -21,7 +29,12 @@ function allowsFallbackFunding(code, status, stage) {
21
29
  }
22
30
  async function failureOf(res, fallback) {
23
31
  const body = await res.json().catch(() => null);
24
- return { reason: body?.error || fallback, code: typeof body?.code === "string" ? body.code : void 0 };
32
+ return {
33
+ reason: body?.error || fallback,
34
+ code: typeof body?.code === "string" ? body.code : void 0,
35
+ detail: typeof body?.detail === "string" ? body.detail : void 0,
36
+ requestId: res.headers.get("x-request-id") ?? void 0
37
+ };
25
38
  }
26
39
  async function executeSponsored(config, signer, request) {
27
40
  const doFetch = config.fetchImpl ?? fetch;
@@ -33,9 +46,9 @@ async function executeSponsored(config, signer, request) {
33
46
  body: JSON.stringify(request)
34
47
  });
35
48
  if (!buildRes.ok) {
36
- const { reason, code } = await failureOf(buildRes, "We couldn't prepare this transaction.");
49
+ const { reason, code, detail, requestId } = await failureOf(buildRes, "We couldn't prepare this transaction.");
37
50
  if (allowsFallbackFunding(code, buildRes.status, "build")) return { status: "unavailable", reason };
38
- throw new SponsoredCallRejectedError(reason);
51
+ throw new SponsoredCallRejectedError(reason, { code, detail, status: buildRes.status, stage: "build", requestId });
39
52
  }
40
53
  const { typedData } = await buildRes.json();
41
54
  const signature = await signer.signTypedData(typedData);
@@ -45,11 +58,11 @@ async function executeSponsored(config, signer, request) {
45
58
  body: JSON.stringify({ ...request, typedData, signature })
46
59
  });
47
60
  if (!executeRes.ok) {
48
- const { reason, code } = await failureOf(executeRes, "We couldn't submit this transaction.");
61
+ const { reason, code, detail, requestId } = await failureOf(executeRes, "We couldn't submit this transaction.");
49
62
  if (allowsFallbackFunding(code, executeRes.status, "execute")) {
50
63
  return { status: "unavailable", reason };
51
64
  }
52
- throw new SponsoredCallRejectedError(reason);
65
+ throw new SponsoredCallRejectedError(reason, { code, detail, status: executeRes.status, stage: "execute", requestId });
53
66
  }
54
67
  const { transactionHash } = await executeRes.json();
55
68
  return { status: "sponsored", transactionHash };
@@ -634,7 +647,7 @@ function sponsoredExecutor(deps) {
634
647
  const { userAddress, privateKeyHex, calls, intentIds } = input;
635
648
  if (!intentIds?.length) {
636
649
  const consented2 = await deps.consent.request({ address: userAddress, calls });
637
- if (!consented2) throw new SponsoredCallRejectedError("This action can't be sponsored");
650
+ if (!consented2) throw new UserFacingError("This action can't be sponsored");
638
651
  return fallback.execute(input);
639
652
  }
640
653
  const result = await executeSponsored(
@@ -647,7 +660,7 @@ function sponsoredExecutor(deps) {
647
660
  );
648
661
  if (result.status === "sponsored") return { transactionHash: result.transactionHash };
649
662
  const consented = await deps.consent.request({ address: userAddress, calls });
650
- if (!consented) throw new SponsoredCallRejectedError(result.reason);
663
+ if (!consented) throw new UserFacingError(result.reason);
651
664
  return fallback.execute(input);
652
665
  }
653
666
  };
@@ -912,5 +925,5 @@ async function claimSessionWallet(api, walletAddress, deps) {
912
925
  }
913
926
 
914
927
  export { InvalidPairingPayloadError, InvalidRecoveryKeyError, InvalidStarkPrivateKeyError, SponsoredCallRejectedError, accountFor, allowsFallbackFunding, buildAddOwnerCall, buildCancelEscapeCall, buildCompleteEscapeOwnerCall, buildDeployAccountParams, buildRemoveOwnerByGuidCall, buildRemoveOwnerCall, buildSetFirstGuardianCall, buildTriggerEscapeOwnerCall, canRemoveDevice, claimSessionWallet, completeDeployment, computeAccountAddress, computeOwnerGuid, createDeploymentCoordinator, createMediaWallet, createOwnerStore, createPasskeyOwner, createSelfFundConsent, decodeEscapeAndStatus, decodeGuardiansInfo, deploySelfFunded, deploySponsored, deriveAesKey, deriveOwnerKeyPair, describeDevices, describeGuardianStatus, describeRecoveryAction, encodePairingPayload, encodeRecoveryKey, erc20Balance, estimateSelfFundedFee, executeSponsored, generateStarkKeyPair, getEscape, getEscapeSecurityPeriod, getGuardians, getOwners, indexedDbDeviceKeys, isDeployed, isValidStarknetAddress, normalizeWalletAddress, ownerConstructorCalldata, parseAccountAddress, parsePairingPayload, parseRecoveryKey, sealPrivateKey, selfFundedExecutor, signWithPrivateKey, sponsoredExecutor, starkKeyPairFromPrivateKey, unsealPrivateKey, waitUntilDeployed };
915
- //# sourceMappingURL=chunk-GIBIHGSV.js.map
916
- //# sourceMappingURL=chunk-GIBIHGSV.js.map
928
+ //# sourceMappingURL=chunk-EPU52YSA.js.map
929
+ //# sourceMappingURL=chunk-EPU52YSA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/starknet/erc20.ts","../src/starknet/services/sponsoredExecutor.ts","../src/starknet/media-wallet/derive.ts","../src/starknet/media-wallet/account.ts","../src/starknet/media-wallet/owners.ts","../src/starknet/media-wallet/deploy.ts","../src/starknet/media-wallet/guardian.ts","../src/starknet/passkey-wallet/crypto.ts","../src/wallet/store.ts","../src/wallet/pairing.ts","../src/wallet/recovery-key.ts","../src/wallet/guardian-status.ts","../src/wallet/addresses.ts","../src/wallet/self-fund-consent.ts","../src/wallet/device-keys.ts","../src/wallet/passkey.ts","../src/wallet/executors.ts","../src/wallet/deployment.ts","../src/wallet/client.ts","../src/session/session-wallet.ts"],"names":["num","hash","ec","consented","starknetTypedData","Account","sponsored","selfFunded","run"],"mappings":";;;;;;;AAEA,eAAsB,YAAA,CACpB,QAAA,EACA,KAAA,EACA,MAAA,EACiB;AACjB,EAAA,MAAM,IAAA,GAAO,CAAC,UAAA,KAAuB,QAAA,CAAS,aAAa,EAAE,eAAA,EAAiB,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,CAAC,MAAM,CAAA,IAAK,QAAQ,CAAA;AAC/H,EAAA,MAAM,CAAC,GAAA,GAAM,KAAA,EAAO,IAAA,GAAO,KAAK,CAAA,GAAI,MAAM,IAAA,CAAK,WAAW,CAAA,CAAE,KAAA,CAAM,MAAM,IAAA,CAAK,YAAY,CAAC,CAAA;AAC1F,EAAA,OAAO,MAAA,CAAO,GAAG,CAAA,IAAK,MAAA,CAAO,IAAI,CAAA,IAAK,IAAA,CAAA;AACxC;;;ACmBO,IAAM,0BAAA,GAAN,cAAyC,eAAA,CAAgB;AAAA,EAO9D,WAAA,CAAY,OAAA,EAAiB,IAAA,GAA2B,EAAC,EAAG;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AACnC,IAAA,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA;AACjB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAClB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAAA,EACxB;AACF;AAYA,IAAM,4CAAiD,IAAI,GAAA,CAAI,CAAC,qBAAA,EAAuB,mBAAmB,CAAC,CAAA;AAEpG,SAAS,qBAAA,CAAsB,IAAA,EAA0B,MAAA,EAAgB,KAAA,EAAqC;AACnH,EAAA,IAAI,IAAA,EAAM,OAAO,yBAAA,CAA0B,GAAA,CAAI,IAAI,CAAA;AACnD,EAAA,OAAO,KAAA,KAAU,OAAA,GAAU,MAAA,IAAU,GAAA,GAAM,MAAA,KAAW,GAAA;AACxD;AAEA,eAAe,SAAA,CAAU,KAAe,QAAA,EAAmG;AACzI,EAAA,MAAM,OAAQ,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC/C,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,MAAM,KAAA,IAAS,QAAA;AAAA,IACvB,MAAM,OAAO,IAAA,EAAM,IAAA,KAAS,QAAA,GAAW,KAAK,IAAA,GAAO,MAAA;AAAA,IACnD,QAAQ,OAAO,IAAA,EAAM,MAAA,KAAW,QAAA,GAAW,KAAK,MAAA,GAAS,MAAA;AAAA,IACzD,SAAA,EAAW,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK;AAAA,GAChD;AACF;AAEA,eAAsB,gBAAA,CACpB,MAAA,EACA,MAAA,EACA,OAAA,EACiC;AACjC,EAAA,MAAM,OAAA,GAAU,OAAO,SAAA,IAAa,KAAA;AACpC,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAO,EAAE,CAAA;AAC9C,EAAA,MAAM,UAAU,EAAE,cAAA,EAAgB,kBAAA,EAAoB,GAAG,OAAO,OAAA,EAAQ;AAExE,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU;AAAA,IAC9C,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,GAC7B,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,EAAE,QAAQ,IAAA,EAAM,MAAA,EAAQ,WAAU,GAAI,MAAM,SAAA,CAAU,QAAA,EAAU,uCAAuC,CAAA;AAC7G,IAAA,IAAI,qBAAA,CAAsB,IAAA,EAAM,QAAA,CAAS,MAAA,EAAQ,OAAO,GAAG,OAAO,EAAE,MAAA,EAAQ,aAAA,EAAe,MAAA,EAAO;AAClG,IAAA,MAAM,IAAI,0BAAA,CAA2B,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,CAAA;AAAA,EACnH;AACA,EAAA,MAAM,EAAE,SAAA,EAAU,GAAK,MAAM,SAAS,IAAA,EAAK;AAE3C,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,aAAA,CAAc,SAAS,CAAA;AAEtD,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,QAAA,CAAA,EAAY;AAAA,IAClD,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA;AAAA,IACA,IAAA,EAAM,KAAK,SAAA,CAAU,EAAE,GAAG,OAAA,EAAS,SAAA,EAAW,WAAW;AAAA,GAC1D,CAAA;AACD,EAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,IAAA,MAAM,EAAE,QAAQ,IAAA,EAAM,MAAA,EAAQ,WAAU,GAAI,MAAM,SAAA,CAAU,UAAA,EAAY,sCAAsC,CAAA;AAC9G,IAAA,IAAI,qBAAA,CAAsB,IAAA,EAAM,UAAA,CAAW,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC7D,MAAA,OAAO,EAAE,MAAA,EAAQ,aAAA,EAAe,MAAA,EAAO;AAAA,IACzC;AACA,IAAA,MAAM,IAAI,0BAAA,CAA2B,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,CAAA;AAAA,EACvH;AACA,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAK,MAAM,WAAW,IAAA,EAAK;AACnD,EAAA,OAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,eAAA,EAAgB;AAChD;AC1GA,IAAM,WAAA,GAAc,6EAAA;AAEb,SAAS,kBAAA,CACd,QACA,WAAA,EAC2C;AAC3C,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA;AAClC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK,IAAI,aAAY,CAAE,MAAA,CAAO,WAAW,CAAA,EAAG,EAAE,CAAA;AACzE,EAAA,IAAI,MAAA,GAAS,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA,GAAI,WAAA;AAC/D,EAAA,IAAI,MAAA,KAAW,IAAI,MAAA,GAAS,EAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA;AACnC,EAAA,MAAM,SAAA,GAAY,EAAA,CAAG,UAAA,CAAW,WAAA,CAAY,UAAU,CAAA;AACtD,EAAA,OAAO,EAAE,YAAY,SAAA,EAAU;AACjC;ACdO,SAAS,yBAAyB,WAAA,EAAqC;AAC5E,EAAA,OAAO,CAAC,KAAA,EAAOA,GAAAA,CAAI,KAAA,CAAM,WAAW,GAAG,KAAK,CAAA;AAC9C;AAEO,SAAS,qBAAA,CAAsB,WAAA,EAA2B,IAAA,GAAqB,CAAA,EAAW;AAC/F,EAAA,OAAO,IAAA,CAAK,gCAAA;AAAA,IACVA,GAAAA,CAAI,MAAM,IAAI,CAAA;AAAA,IACd,+BAAA;AAAA,IACA,yBAAyB,WAAW,CAAA;AAAA,IACpC;AAAA,GACF;AACF;ACZA,IAAM,oBAAA,GAAuB,kCAAA;AAC7B,IAAM,WAAA,GAAc,KAAA;AACpB,IAAM,eAAA,GAAkB,KAAA;AAEjB,SAAS,iBAAiB,WAAA,EAAmC;AAClE,EAAA,OAAOC,KAAK,mBAAA,CAAoB,oBAAA,EAAsBD,GAAAA,CAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AAC9E;AAEA,SAAS,YAAA,CAAa,cAAA,EAAwB,aAAA,EAAyB,YAAA,EAAoC;AACzG,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,cAAA;AAAA,IACjB,UAAA,EAAY,eAAA;AAAA,IACZ,QAAA,EAAU;AAAA,MACRA,GAAAA,CAAI,KAAA,CAAM,aAAA,CAAc,MAAM,CAAA;AAAA,MAC9B,GAAG,aAAA;AAAA,MACHA,GAAAA,CAAI,KAAA,CAAM,YAAA,CAAa,MAAM,CAAA;AAAA,MAC7B,GAAG,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,eAAA,EAAiBA,GAAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,MAC9D;AAAA;AACF,GACF;AACF;AAEO,SAAS,iBAAA,CAAkB,gBAAwB,cAAA,EAAoC;AAC5F,EAAA,OAAO,aAAa,cAAA,EAAgB,EAAC,EAAG,CAAC,cAAc,CAAC,CAAA;AAC1D;AAEO,SAAS,oBAAA,CAAqB,gBAAwB,iBAAA,EAAuC;AAClG,EAAA,OAAO,YAAA,CAAa,gBAAgB,CAAC,gBAAA,CAAiB,iBAAiB,CAAC,CAAA,EAAG,EAAE,CAAA;AAC/E;AAEO,SAAS,0BAAA,CAA2B,gBAAwB,SAAA,EAA+B;AAChG,EAAA,OAAO,YAAA,CAAa,gBAAgB,CAACA,GAAAA,CAAI,MAAM,SAAS,CAAC,CAAA,EAAG,EAAE,CAAA;AAChE;AC9BO,SAAS,wBAAA,CACd,WAAA,EACA,IAAA,GAAqB,CAAA,EACS;AAC9B,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,+BAAA;AAAA,IACX,mBAAA,EAAqB,yBAAyB,WAAW,CAAA;AAAA,IACzD,WAAA,EAAaA,GAAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAAA,IAC3B,eAAA,EAAiB,qBAAA,CAAsB,WAAA,EAAa,IAAI;AAAA,GAC1D;AACF;ACXA,IAAM,IAAA,GAAO,CAAC,OAAA,KAA4B,gBAAA,CAAiB,YAAY,OAAO,CAAA;AAE9E,IAAM,iBAAA,GAAoB,CAAC,UAAA,EAAY,WAAA,EAAa,WAAW,CAAA;AAS/D,SAAS,gBAAgB,KAAA,EAA2B;AAClD,EAAA,OAAO,CAACA,GAAAA,CAAI,KAAA,CAAM,MAAM,MAAM,CAAA,EAAG,GAAG,KAAK,CAAA;AAC3C;AAEA,SAAS,qBAAqB,MAAA,EAA0B;AACtD,EAAA,OAAO,CAAC,KAAA,EAAOA,GAAAA,CAAI,KAAA,CAAM,MAAM,CAAC,CAAA;AAClC;AAEA,SAAS,0BAA0B,OAAA,EAA6B;AAC9D,EAAA,OAAO,CAACA,GAAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,GAAG,OAAA,CAAQ,OAAA,CAAQ,oBAAoB,CAAC,CAAA;AAC7E;AAEO,SAAS,yBAAA,CAA0B,SAAiB,cAAA,EAA8B;AACvF,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,KAAK,OAAO,CAAA;AAAA,IAC7B,UAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAU,CAAC,GAAG,eAAA,CAAgB,EAAE,CAAA,EAAG,GAAG,yBAAA,CAA0B,CAAC,cAAc,CAAC,CAAC;AAAA,GACnF;AACF;AAEO,SAAS,2BAAA,CAA4B,eAAuB,cAAA,EAA8B;AAC/F,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,KAAK,aAAa,CAAA;AAAA,IACnC,UAAA,EAAY,sBAAA;AAAA,IACZ,QAAA,EAAU,qBAAqB,cAAc;AAAA,GAC/C;AACF;AAEO,SAAS,6BAA6B,aAAA,EAA6B;AACxE,EAAA,OAAO,EAAE,iBAAiB,IAAA,CAAK,aAAa,GAAG,UAAA,EAAY,cAAA,EAAgB,QAAA,EAAU,EAAC,EAAE;AAC1F;AAEO,SAAS,sBAAsB,OAAA,EAAuB;AAC3D,EAAA,OAAO,EAAE,iBAAiB,IAAA,CAAK,OAAO,GAAG,UAAA,EAAY,eAAA,EAAiB,QAAA,EAAU,EAAC,EAAE;AACrF;AAEO,SAAS,oBAAoB,GAAA,EAA+B;AACjE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AACzB,EAAA,MAAM,MAAsB,EAAC;AAC7B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC5B,IAAA,MAAM,IAAA,GAAO,IAAI,CAAA,GAAI,CAAA;AACrB,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,MAAM,iBAAA,CAAkB,MAAA,CAAO,IAAI,IAAI,CAAC,CAAC,CAAA,IAAK,UAAA;AAAA,MAC9C,IAAA,EAAM,GAAA,CAAI,IAAA,GAAO,CAAC,CAAA;AAAA,MAClB,WAAA,EAAa,GAAA,CAAI,IAAA,GAAO,CAAC;AAAA,KAC1B,CAAA;AAAA,EACH;AACA,EAAA,OAAO,GAAA;AACT;AAIA,IAAM,iBAAA,GAAsC,CAAC,MAAA,EAAQ,UAAA,EAAY,OAAO,CAAA;AACxE,IAAM,mBAAA,GAA0C,CAAC,MAAA,EAAQ,UAAA,EAAY,SAAS,SAAS,CAAA;AAQhF,SAAS,sBAAsB,GAAA,EAA2B;AAE/D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AAC7B,EAAA,MAAM,aAAa,iBAAA,CAAkB,MAAA,CAAO,IAAI,CAAC,CAAC,CAAC,CAAA,IAAK,MAAA;AACxD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,CAAA;AAC/B,EAAA,MAAM,WAAA,GAAc,SAAA,KAAc,CAAA,GAAI,CAAA,GAAI,CAAA;AAC1C,EAAA,MAAM,SAAS,mBAAA,CAAoB,MAAA,CAAO,IAAI,WAAW,CAAC,CAAC,CAAA,IAAK,MAAA;AAChE,EAAA,OAAO,EAAE,OAAA,EAAS,UAAA,EAAY,MAAA,EAAO;AACvC;AAEA,eAAsB,YAAA,CAAa,UAA6B,OAAA,EAA0C;AACxG,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,YAAA,CAAa;AAAA,IACtC,eAAA,EAAiB,KAAK,OAAO,CAAA;AAAA,IAC7B,UAAA,EAAY,oBAAA;AAAA,IACZ,UAAU;AAAC,GACZ,CAAA;AACD,EAAA,OAAO,oBAAoB,GAA0B,CAAA;AACvD;AAEA,eAAsB,SAAA,CAAU,UAA6B,OAAA,EAA0C;AACrG,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,YAAA,CAAa;AAAA,IACtC,eAAA,EAAiB,KAAK,OAAO,CAAA;AAAA,IAC7B,UAAA,EAAY,iBAAA;AAAA,IACZ,UAAU;AAAC,GACZ,CAAA;AACD,EAAA,OAAO,oBAAoB,GAA0B,CAAA;AACvD;AAEA,eAAsB,SAAA,CAAU,UAA6B,OAAA,EAAsC;AACjG,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,YAAA,CAAa;AAAA,IACtC,eAAA,EAAiB,KAAK,OAAO,CAAA;AAAA,IAC7B,UAAA,EAAY,uBAAA;AAAA,IACZ,UAAU;AAAC,GACZ,CAAA;AACD,EAAA,OAAO,sBAAsB,GAA0B,CAAA;AACzD;AAEA,eAAsB,uBAAA,CAAwB,UAA6B,OAAA,EAAkC;AAC3G,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,YAAA,CAAa;AAAA,IACtC,eAAA,EAAiB,KAAK,OAAO,CAAA;AAAA,IAC7B,UAAA,EAAY,4BAAA;AAAA,IACZ,UAAU;AAAC,GACZ,CAAA;AACD,EAAA,OAAO,MAAA,CAAQ,GAAA,CAA4B,CAAC,CAAC,CAAA;AAC/C;ACrHA,eAAsB,YAAA,CAAa,WAAuB,QAAA,EAA0C;AAClG,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,SAAA,EAA2B,MAAA,EAAQ,KAAA,EAAO,CAAC,WAAW,CAAC,CAAA;AACzG,EAAA,OAAO,OAAO,MAAA,CAAO,SAAA;AAAA,IACnB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,IAAI,UAAA,CAAW,CAAC,CAAA,EAAG,IAAA,EAAM,QAAA,EAAyB;AAAA,IACzF,IAAA;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,GAAA,EAAI;AAAA,IAC/B,KAAA;AAAA,IACA,CAAC,WAAW,SAAS;AAAA,GACvB;AACF;AAEO,SAAS,iBAAA,GAAwC;AACtD,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,GAAA,EAAI,EAAG,KAAA,EAAO,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA;AAClG;AAEO,SAAS,oBAAA,GAAwE;AACtF,EAAA,MAAM,aAAA,GACJ,OACA,KAAA,CAAM,IAAA,CAAKE,GAAG,UAAA,CAAW,KAAA,CAAM,gBAAA,EAAkB,CAAA,CAC9C,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAC,CAAA,CAC1C,IAAA,CAAK,EAAE,CAAA;AACZ,EAAA,OAAO,EAAE,aAAA,EAAe,YAAA,EAAcA,GAAG,UAAA,CAAW,WAAA,CAAY,aAAa,CAAA,EAAE;AACjF;AAEO,IAAM,2BAAA,GAAN,cAA0C,KAAA,CAAM;AAAA,EACrD,YAAY,MAAA,EAAgB;AAC1B,IAAA,KAAA,CAAM,CAAA,kCAAA,EAAqC,MAAM,CAAA,CAAE,CAAA;AACnD,IAAA,IAAA,CAAK,IAAA,GAAO,6BAAA;AAAA,EACd;AACF;AAEO,SAAS,2BAA2B,KAAA,EAAgE;AACzG,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC/C,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,IAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,OAAA;AAEvF,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,4BAA4B,aAAa,CAAA;AAC1E,EAAA,IAAI,CAAC,iBAAiB,IAAA,CAAK,IAAI,GAAG,MAAM,IAAI,4BAA4B,uBAAuB,CAAA;AAC/F,EAAA,IAAI,KAAK,MAAA,GAAS,EAAA,EAAI,MAAM,IAAI,4BAA4B,gBAAgB,CAAA;AAE5E,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,GAAO,IAAI,CAAA;AAChC,EAAA,IAAI,KAAA,KAAU,EAAA,EAAI,MAAM,IAAI,4BAA4B,YAAY,CAAA;AACpE,EAAA,IAAI,KAAA,IAASA,GAAG,UAAA,CAAW,KAAA,CAAM,GAAG,MAAM,IAAI,4BAA4B,+BAA+B,CAAA;AAEzG,EAAA,MAAM,aAAA,GAAgB,OAAO,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA;AAChE,EAAA,OAAO,EAAE,aAAA,EAAe,YAAA,EAAcA,GAAG,UAAA,CAAW,WAAA,CAAY,aAAa,CAAA,EAAE;AACjF;AAEA,eAAsB,cAAA,CACpB,MAAA,EACA,EAAA,EACA,aAAA,EACsB;AACtB,EAAA,OAAO,OAAO,MAAA,CAAO,OAAA;AAAA,IACnB,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAuB;AAAA,IAC1C,MAAA;AAAA,IACA,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,aAAa;AAAA,GACxC;AACF;AAEA,eAAsB,gBAAA,CACpB,MAAA,EACA,EAAA,EACA,UAAA,EACiB;AACjB,EAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAuB,EAAG,MAAA,EAAQ,UAAU,CAAA;AACvG,EAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,GAAG,CAAA;AACrC;AAEO,SAAS,kBAAA,CAAmB,eAAuB,OAAA,EAAmC;AAC3F,EAAA,MAAM,GAAA,GAAMA,EAAAA,CAAG,UAAA,CAAW,IAAA,CAAK,SAAS,aAAa,CAAA;AACrD,EAAA,OAAO,CAACF,GAAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,GAAGA,GAAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,CAAA;AAC5C;;;AC9DO,SAAS,iBAAiB,MAAA,EAA+D;AAC9F,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,MAAA;AAClC,EAAA,MAAM,WAAW,MAAY;AAC3B,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAA,CAAO,aAAA,CAAc,IAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AAAA,EAC7C,CAAA;AACA,EAAA,OAAO;AAAA,IACL,IAAA,GAAO;AACL,MAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AACzC,QAAA,OAAO,GAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAoB,IAAA;AAAA,MAClD,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA,WAAA,GAAc;AACZ,MAAA,OAAO,IAAA,CAAK,IAAA,EAAK,EAAG,OAAA,IAAW,IAAA;AAAA,IACjC,CAAA;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,QAAA,GAAW,KAAK,IAAA,EAAK;AAC3B,MAAA,IAAI,QAAA,IAAY,QAAA,CAAS,OAAA,KAAY,MAAA,CAAO,OAAA,EAAS;AACnD,QAAA,YAAA,CAAa,OAAA,CAAQ,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAA,CAAS,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,MAClF;AACA,MAAA,YAAA,CAAa,OAAA,CAAQ,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA;AACrD,MAAA,QAAA,EAAS;AAAA,IACX,CAAA;AAAA,IACA,KAAA,GAAQ;AACN,MAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAChC,MAAA,QAAA,EAAS;AAAA,IACX,CAAA;AAAA,IACA,YAAA,EAAc,QAAA;AAAA,IACd,SAAS,QAAA,EAAU;AACjB,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,QAAQ,CAAA;AAC7C,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,QAAQ,CAAA;AAAA,IAC/D;AAAA,GACF;AACF;;;AChDA,IAAM,MAAA,GAAS,kBAAA;AACf,IAAM,OAAA,GAAU,CAAA;AAChB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,WAAA,GAAA,CAAe,EAAA,IAAM,IAAA,IAAQ,GAAA,IAAO,MAAM,IAAA,CAAA,GAAQ,EAAA;AAEjD,IAAM,0BAAA,GAAN,cAAyC,KAAA,CAAM;AAAA,EACpD,WAAA,CAAY,UAAU,8CAAA,EAAgD;AACpE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,4BAAA;AAAA,EACd;AACF;AAOA,SAAS,mBAAmB,KAAA,EAAwB;AAClD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,kBAAA,CAAmB,IAAA,CAAK,KAAK,CAAA,EAAG;AAChE,IAAA,MAAM,IAAI,2BAA2B,+BAA+B,CAAA;AAAA,EACtE;AACA,EAAA,MAAM,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC1B,EAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,IAAS,WAAA,EAAa;AACxC,IAAA,MAAM,IAAI,2BAA2B,+BAA+B,CAAA;AAAA,EACtE;AACA,EAAA,OAAO,CAAA,EAAA,EAAK,KAAA,CAAM,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAChC;AAEA,SAAS,cAAc,KAAA,EAAwB;AAC7C,EAAA,MAAM,GAAA,GAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,EAAA;AAChD,EAAA,OAAO,GAAA,CAAI,QAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK,CAAE,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAC3D;AAEO,SAAS,qBAAqB,OAAA,EAAiC;AACpE,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAW,kBAAA,CAAmB,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC/C,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,KAAK;AAAA,GACnC,CAAA;AACH;AAEO,SAAS,oBAAoB,OAAA,EAAiC;AACnE,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,0BAAA,EAA2B;AAAA,EACvC;AACA,EAAA,IAAI,SAAS,IAAA,IAAQ,OAAO,SAAS,QAAA,EAAU,MAAM,IAAI,0BAAA,EAA2B;AACpF,EAAA,IAAI,IAAA,CAAK,WAAW,MAAA,IAAU,IAAA,CAAK,YAAY,OAAA,EAAS,MAAM,IAAI,0BAAA,EAA2B;AAC7F,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,kBAAA,CAAmB,IAAA,CAAK,SAAS,CAAA;AAAA,IAC5C,KAAA,EAAO,aAAA,CAAc,IAAA,CAAK,KAAK;AAAA,GACjC;AACF;AAEO,SAAS,oBAAoB,KAAA,EAAuB;AACzD,EAAA,MAAM,UAAU,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,CAAM,MAAK,GAAI,EAAA;AAC3D,EAAA,IAAI,CAAC,wBAAA,CAAyB,IAAA,CAAK,OAAO,CAAA,EAAG;AAC3C,IAAA,MAAM,IAAI,2BAA2B,6CAA6C,CAAA;AAAA,EACpF;AACA,EAAA,IAAI,MAAA,CAAO,OAAO,CAAA,KAAM,EAAA,EAAI;AAC1B,IAAA,MAAM,IAAI,2BAA2B,6CAA6C,CAAA;AAAA,EACpF;AACA,EAAA,OAAO,OAAA;AACT;;;AC/DA,IAAM,MAAA,GAAS,wBAAA;AACf,IAAM,OAAA,GAAU,uBAAA;AAET,IAAM,uBAAA,GAAN,cAAsC,KAAA,CAAM;AAAA,EACjD,WAAA,CAAY,UAAU,mCAAA,EAAqC;AACzD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AAAA,EACd;AACF;AAOA,IAAM,gBAAA,GAAmB,CAAC,OAAA,KAAoB,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG,CAAC,CAAA,CAAA;AAEjG,SAAS,QAAQ,UAAA,EAAoB;AACnC,EAAA,IAAI;AACF,IAAA,OAAO,2BAA2B,UAAU,CAAA;AAAA,EAC9C,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,uBAAA,EAAwB;AAAA,EACpC;AACF;AAEO,SAAS,kBAAkB,GAAA,EAA0B;AAC1D,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA,IAAK,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA,KAAM,EAAA,EAAI,MAAM,IAAI,uBAAA,EAAwB;AAC5G,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,gBAAA,CAAiB,GAAA,CAAI,aAAa,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA,CAAE,aAAa,CAAA,CAAA;AACjG;AAEO,SAAS,iBAAiB,KAAA,EAA4B;AAC3D,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA,EAAG;AAC/B,IAAA,MAAM,EAAE,aAAA,EAAe,YAAA,EAAa,GAAI,QAAQ,OAAO,CAAA;AACvD,IAAA,OAAO,EAAE,aAAA,EAAe,qBAAA,CAAsB,cAAc,CAAC,CAAA,EAAG,YAAY,aAAA,EAAc;AAAA,EAC5F;AACA,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,OAAO,MAAM,CAAA,CAAE,MAAM,GAAG,CAAA;AACpD,EAAA,MAAM,CAAC,aAAA,EAAe,UAAU,CAAA,GAAI,KAAA;AACpC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,IAAK,CAAC,iBAAiB,CAAC,UAAA,IAAc,CAAC,OAAA,CAAQ,KAAK,aAAa,CAAA,IAAK,MAAA,CAAO,aAAa,MAAM,EAAA,EAAI;AACvH,IAAA,MAAM,IAAI,uBAAA,EAAwB;AAAA,EACpC;AACA,EAAA,OAAO,EAAE,eAAe,gBAAA,CAAiB,aAAa,GAAG,UAAA,EAAY,OAAA,CAAQ,UAAU,CAAA,CAAE,aAAA,EAAc;AACzG;;;ACzCO,SAAS,uBAAuB,SAAA,EAA2C;AAChF,EAAA,IAAI,UAAU,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,MAAM,MAAA,EAAO;AAClD,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,SAAA,CAAU,CAAC,CAAA,EAAE;AAClD;AAIO,SAAS,uBAAuB,MAAA,EAAoC;AACzE,EAAA,IAAI,MAAA,CAAO,UAAA,KAAe,OAAA,EAAS,OAAO,MAAA;AAC1C,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,OAAA,EAAS,OAAO,UAAA;AACtC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,SAAA,EAAW,OAAO,OAAA;AACxC,EAAA,OAAO,MAAA;AACT;ACZO,SAAS,uBAAuB,OAAA,EAAyB;AAC9D,EAAA,OAAO,gBAAA,CAAiB,YAAY,OAAO,CAAA;AAC7C;AAEO,SAAS,uBAAuB,OAAA,EAA0B;AAC/D,EAAA,IAAI;AACF,IAAA,uBAAA,CAAwB,OAAA,CAAQ,MAAM,CAAA;AACtC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,IAAM,kBAAA,GAAqB,EAAA;AAE3B,eAAsB,UAAA,CAAW,UAA+B,OAAA,EAAmC;AACjG,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,CAAS,cAAA,CAAe,sBAAA,CAAuB,OAAO,CAAC,CAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACT,SAAS,GAAA,EAAK;AACZ,IAAA,IAAK,GAAA,EAAmC,IAAA,KAAS,kBAAA,EAAoB,OAAO,KAAA;AAC5E,IAAA,MAAM,GAAA;AAAA,EACR;AACF;;;ACVO,SAAS,sBACd,WAAA,EACiB;AACjB,EAAA,IAAI,OAAA,GAAyC,IAAA;AAC7C,EAAA,OAAO;AAAA,IACL,gBAAgB,IAAA,EAAM;AACpB,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ,CAAA;AAAA,IACA,MAAM,OAAA,CAAQ,EAAE,OAAA,EAAS,OAAM,EAAG;AAChC,MAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,MAAA,MAAM,WAAA,GACJ,OAAA,IAAW,KAAA,GAAQ,WAAA,CAAY,OAAA,EAAS,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA,GAAI,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACzF,MAAA,OAAO,QAAQ,WAAW,CAAA;AAAA,IAC5B;AAAA,GACF;AACF;;;AC3BA,IAAM,QAAA,GAAW,kBAAA;AACjB,IAAM,KAAA,GAAQ,aAAA;AAEd,SAAS,IAAA,GAA6B;AACpC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAC1C,IAAA,OAAA,CAAQ,eAAA,GAAkB,MAAM,OAAA,CAAQ,MAAA,CAAO,kBAAkB,KAAK,CAAA;AACtE,IAAA,OAAA,CAAQ,SAAA,GAAY,MAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAChD,IAAA,OAAA,CAAQ,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,EAC9C,CAAC,CAAA;AACH;AAEA,eAAe,GAAA,CAAO,MAA0B,GAAA,EAA2D;AACzG,EAAA,MAAM,EAAA,GAAK,MAAM,IAAA,EAAK;AACtB,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,IAAI,OAAA,CAAW,CAAC,SAAS,MAAA,KAAW;AAC/C,MAAA,MAAM,OAAA,GAAU,IAAI,EAAA,CAAG,WAAA,CAAY,OAAO,IAAI,CAAA,CAAE,WAAA,CAAY,KAAK,CAAC,CAAA;AAClE,MAAA,OAAA,CAAQ,SAAA,GAAY,MAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA;AAChD,MAAA,OAAA,CAAQ,OAAA,GAAU,MAAM,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAEO,IAAM,mBAAA,GAAsC;AAAA,EACjD,MAAM,IAAA,CAAK,YAAA,EAAc,GAAA,EAAK;AAC5B,IAAA,MAAM,GAAA,CAAI,aAAa,CAAC,KAAA,KAAU,MAAM,GAAA,CAAI,GAAA,EAAK,YAAY,CAAC,CAAA;AAAA,EAChE,CAAA;AAAA,EACA,MAAM,KAAK,YAAA,EAAc;AACvB,IAAA,OAAS,MAAM,IAAI,UAAA,EAAY,CAAC,UAAU,KAAA,CAAM,GAAA,CAAI,YAAY,CAAC,CAAA,IAAgC,IAAA;AAAA,EACnG;AACF;;;ACaA,IAAM,YAAA,GAAe,CAAC,GAAA,KAA0C;AAC9D,EAAA,MAAM,QAAQ,GAAA,YAAe,UAAA,GAAa,GAAA,GAAM,IAAI,WAAW,GAAG,CAAA;AAClE,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,EAAO,MAAA,IAAU,MAAA,CAAO,aAAa,IAAI,CAAA;AAC5D,EAAA,OAAO,KAAK,MAAM,CAAA;AACpB,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,KAAA,KAA2C;AAC/D,EAAA,MAAM,MAAA,GAAS,KAAK,KAAK,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AACtE,EAAA,OAAO,KAAA;AACT,CAAA;AAEA,SAAS,sBAAsB,GAAA,EAAuB;AACpD,EAAA,MAAM,OAAQ,GAAA,EAAkC,IAAA;AAChD,EAAA,OAAO,IAAA,KAAS,qBAAqB,IAAA,KAAS,YAAA;AAChD;AAEO,SAAS,mBAAmB,MAAA,EAAqC;AACtE,EAAA,MAAM,WAAA,GACJ,MAAA,CAAO,WAAA,KAAgB,CAAC,MAAA,KAAmB,OAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,MAAM,CAAC,CAAA,CAAA;AAC1F,EAAA,MAAM,iBAAiB,MAA4B;AACjD,IAAA,MAAM,MAAM,MAAA,CAAO,WAAA,KAAgB,OAAO,SAAA,KAAc,WAAA,GAAc,SAAY,SAAA,CAAU,WAAA,CAAA;AAC5F,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,wBAAwB,aAAa,CAAA;AACzD,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,eAAe,eAAA,GAAyC;AACtD,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,UAAA,GAAc,MAAM,cAAA,EAAe,CAAE,MAAA,CAAO;AAAA,QAC1C,SAAA,EAAW;AAAA,UACT,SAAA,EAAW,YAAY,EAAE,CAAA;AAAA,UACzB,EAAA,EAAI,EAAE,IAAA,EAAM,MAAA,CAAO,kBAAkB,EAAA,EAAI,MAAA,CAAO,gBAAe,EAAE;AAAA,UACjE,IAAA,EAAM,MAAM,MAAA,CAAO,WAAA,EAAY;AAAA,UAC/B,kBAAA,EAAoB,OAAO,gBAAA,EAAiB;AAAA,UAC5C,gBAAA,EAAkB;AAAA,YAChB,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAK,CAAA,CAAA,EAAG;AAAA,YAC9B,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAK,CAAA,GAAA;AAAK,WAClC;AAAA,UACA,sBAAA,EAAwB;AAAA,YACtB,uBAAA,EAAyB,UAAA;AAAA,YACzB,WAAA,EAAa,UAAA;AAAA,YACb,gBAAA,EAAkB;AAAA,WACpB;AAAA,UACA,UAAA,EAAY,EAAE,GAAA,EAAK,EAAE,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAQ,EAAE;AAAE;AACzD,OACD,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,qBAAA,CAAsB,GAAG,CAAA,EAAG,MAAM,IAAI,qBAAA,EAAsB;AAChE,MAAA,MAAM,GAAA;AAAA,IACR;AACA,IAAA,MAAM,GAAA,GACJ,UAAA,CAAW,yBAAA,EAA0B,CAGrC,GAAA;AACF,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,YAAA,CAAa,UAAA,CAAW,KAAK,CAAA;AAAA,MAC3C,QAAA,EAAU,GAAA,EAAK,OAAA,EAAS,KAAA,IAAS;AAAA,KACnC;AAAA,EACF;AAEA,EAAA,eAAe,aAAA,CACb,cACA,UAAA,EAC8B;AAC9B,IAAA,IAAI;AACF,MAAA,OAAQ,MAAM,cAAA,EAAe,CAAE,GAAA,CAAI;AAAA,QACjC,SAAA,EAAW;AAAA,UACT,SAAA,EAAW,YAAY,EAAE,CAAA;AAAA,UACzB,IAAA,EAAM,OAAO,cAAA,EAAe;AAAA,UAC5B,gBAAA,EAAkB,CAAC,EAAE,IAAA,EAAM,cAAc,EAAA,EAAI,YAAA,CAAa,YAAY,CAAA,EAAG,CAAA;AAAA,UACzE,gBAAA,EAAkB,UAAA;AAAA,UAClB,GAAI,UAAA,GAAa,EAAE,UAAA,KAAe;AAAC;AACrC,OACD,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,qBAAA,CAAsB,GAAG,CAAA,EAAG,MAAM,IAAI,qBAAA,EAAsB;AAChE,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAEA,EAAA,eAAe,UAAU,YAAA,EAAwD;AAC/E,IAAA,MAAM,SAAA,GAAY,MAAM,aAAA,CAAc,YAAA,EAAc;AAAA,MAClD,KAAK,EAAE,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,CAAO,SAAQ;AAAE,KACA,CAAA;AACzC,IAAA,MAAM,MAAA,GAAU,SAAA,CAAU,yBAAA,EAA0B,CAAsD,KACtG,OAAA,EAAS,KAAA;AACb,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,wBAAwB,QAAQ,CAAA;AACvD,IAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,mBAAA;AAExC,EAAA,eAAe,QAAQ,YAAA,EAAgD;AACrE,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,OAAO,EAAE,GAAA,EAAK,MAAM,YAAA,CAAa,IAAI,UAAA,CAAW,YAAA,CAAa,QAAQ,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,IAC3F;AACA,IAAA,IAAI;AACF,MAAA,OAAO,EAAE,GAAA,EAAK,MAAM,YAAA,CAAa,MAAM,SAAA,CAAU,YAAA,CAAa,YAAY,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,IAChG,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,EAAE,GAAA,YAAe,uBAAA,CAAA,IAA4B,GAAA,CAAI,MAAA,KAAW,UAAU,MAAM,GAAA;AAAA,IAClF;AACA,IAAA,MAAM,GAAA,GAAM,MAAM,iBAAA,EAAkB;AACpC,IAAA,MAAM,UAAA,CAAW,IAAA,CAAK,YAAA,CAAa,YAAA,EAAc,GAAG,CAAA;AACpD,IAAA,OAAO,EAAE,GAAA,EAAK,IAAA,EAAM,QAAA,EAAS;AAAA,EAC/B;AAEA,EAAA,eAAe,UAAU,MAAA,EAAyC;AAChE,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU,OAAO,YAAA,CAAa,MAAM,SAAA,CAAU,MAAA,CAAO,YAAY,CAAA,EAAG,MAAA,CAAO,QAAQ,CAAA;AACvG,IAAA,MAAM,aAAA,CAAc,OAAO,YAAY,CAAA;AACvC,IAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAW,IAAA,CAAK,OAAO,YAAY,CAAA;AACrD,IAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,qBAAA,EAAsB;AAC1C,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,eAAe,IAAA,CAAK,KAAgB,aAAA,EAAoE;AACtG,IAAA,MAAM,EAAA,GAAK,YAAY,EAAE,CAAA;AACzB,IAAA,MAAM,UAAA,GAAa,MAAM,cAAA,CAAe,GAAA,EAAK,IAAI,aAAa,CAAA;AAC9D,IAAA,OAAO,EAAE,IAAI,YAAA,CAAa,EAAE,GAAG,UAAA,EAAY,YAAA,CAAa,UAAU,CAAA,EAAE;AAAA,EACtE;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,cAAA,GAAiB;AACrB,MAAA,MAAM,YAAA,GAAe,MAAM,eAAA,EAAgB;AAC3C,MAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAK,GAAI,MAAM,QAAQ,YAAY,CAAA;AAChD,MAAA,MAAM,EAAE,aAAA,EAAe,YAAA,EAAa,GAAI,oBAAA,EAAqB;AAC7D,MAAA,MAAM,EAAE,EAAA,EAAI,UAAA,KAAe,MAAM,IAAA,CAAK,KAAK,aAAa,CAAA;AACxD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ;AAAA,UACN,cAAc,YAAA,CAAa,YAAA;AAAA,UAC3B,WAAA,EAAa,YAAA;AAAA,UACb,OAAA,EAAS,qBAAA,CAAsB,YAAA,EAAc,CAAC,CAAA;AAAA,UAC9C,EAAA;AAAA,UACA,UAAA;AAAA,UACA,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC,SACzB;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,eAAe,MAAA,EAAQ;AAC3B,MAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,MAAM,CAAA;AAClC,MAAA,OAAO,gBAAA,CAAiB,KAAK,YAAA,CAAa,MAAA,CAAO,EAAE,CAAA,EAAG,YAAA,CAAa,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,IACvF,CAAA;AAAA,IAEA,MAAM,qBAAqB,QAAA,EAAU;AACnC,MAAA,MAAM,EAAE,aAAA,EAAe,YAAA,EAAa,GAAI,0BAAA,CAA2B,SAAS,UAAU,CAAA;AACtF,MAAA,MAAM,YAAA,GAAe,MAAM,eAAA,EAAgB;AAC3C,MAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAK,GAAI,MAAM,QAAQ,YAAY,CAAA;AAChD,MAAA,MAAM,EAAE,EAAA,EAAI,UAAA,KAAe,MAAM,IAAA,CAAK,KAAK,aAAa,CAAA;AACxD,MAAA,OAAO;AAAA,QACL,cAAc,YAAA,CAAa,YAAA;AAAA,QAC3B,WAAA,EAAa,YAAA;AAAA,QACb,SAAS,QAAA,CAAS,aAAA;AAAA,QAClB,EAAA;AAAA,QACA,UAAA;AAAA,QACA,GAAI,IAAA,GAAO,EAAE,IAAA,KAAS;AAAC,OACzB;AAAA,IACF;AAAA,GACF;AACF;ACvMO,SAAS,UAAA,CACd,QAAA,EACA,OAAA,EACA,aAAA,EACS;AACT,EAAA,OAAO,IAAI,QAAQ,EAAE,QAAA,EAAU,SAAS,MAAA,EAAQ,aAAA,EAAe,YAAA,EAAc,GAAA,EAAK,CAAA;AACpF;AAEA,eAAsB,qBAAA,CACpB,QAAA,EACA,OAAA,EACA,KAAA,EAC8B;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,EAAE,QAAA,EAAU,SAAS,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,GAAA,EAAK,CAAA;AACnF,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,iBAAA,CAAkB,KAAK,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,MAAM,eAAA,CAAgB,QAAA,EAAU,OAAA,EAAS,SAAS,IAAI,CAAA,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC3F,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,CAAS,aAAa,IAAA,EAAM,QAAA,CAAS,MAAM,UAAA,EAAW;AACzE;AAEA,eAAe,eAAA,CAAgB,QAAA,EAA6B,OAAA,EAAiB,IAAA,EAA+B;AAC1G,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,KAAS,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC9D,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,IAAI,CAAA,CAAE,CAAA;AAC3D,EAAA,OAAO,YAAA,CAAa,QAAA,EAAU,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AACtD;AAEO,SAAS,mBAAmB,IAAA,EAAsC;AACvE,EAAA,OAAO;AAAA,IACL,MAAM,OAAA,CAAQ,EAAE,WAAA,EAAa,aAAA,EAAe,OAAM,EAAiC;AACjF,MAAA,MAAM,UAAU,UAAA,CAAW,IAAA,CAAK,QAAA,EAAS,EAAG,aAAa,aAAa,CAAA;AACtE,MAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,OAAA,CAAQ,QAAQ,KAAK,CAAA;AACxD,MAAA,OAAO,EAAE,iBAAiB,gBAAA,EAAiB;AAAA,IAC7C;AAAA,GACF;AACF;AASO,SAAS,kBAAkB,IAAA,EAAqC;AACrE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,kBAAA,CAAmB,IAAI,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,MAAM,QAAQ,KAAA,EAAqC;AACjD,MAAA,MAAM,EAAE,WAAA,EAAa,aAAA,EAAe,KAAA,EAAO,WAAU,GAAI,KAAA;AACzD,MAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,QAAA,MAAMG,UAAAA,GAAY,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,OAAA,EAAS,WAAA,EAAa,KAAA,EAAO,CAAA;AAC5E,QAAA,IAAI,CAACA,UAAAA,EAAW,MAAM,IAAI,gBAAgB,gCAAgC,CAAA;AAC1E,QAAA,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,MAC/B;AACA,MAAA,MAAM,SAAS,MAAM,gBAAA;AAAA,QACnB,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,SAAA,EAAW,KAAK,SAAA,EAAU;AAAA,QACrD;AAAA,UACE,OAAA,EAAS,WAAA;AAAA,UACT,aAAA,EAAe,OAAO,IAAA,KACpB,kBAAA,CAAmB,eAAeC,SAAA,CAAkB,cAAA,CAAe,IAAA,EAAM,WAAW,CAAC;AAAA,SACzF;AAAA,QACA,EAAE,SAAA;AAAU,OACd;AACA,MAAA,IAAI,OAAO,MAAA,KAAW,WAAA,SAAoB,EAAE,eAAA,EAAiB,OAAO,eAAA,EAAgB;AAEpF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,OAAA,EAAS,WAAA,EAAa,KAAA,EAAO,CAAA;AAC5E,MAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,eAAA,CAAgB,OAAO,MAAM,CAAA;AACvD,MAAA,OAAO,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IAC/B;AAAA,GACF;AACF;ACrEA,eAAe,eAAA,CAAgB,KAAe,QAAA,EAAkC;AAC9E,EAAA,MAAM,OAAQ,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AAC/C,EAAA,MAAM,IAAI,KAAA,CAAM,IAAA,EAAM,KAAA,IAAS,QAAQ,CAAA;AACzC;AAEA,eAAsB,gBAAgB,KAAA,EAQL;AAC/B,EAAA,MAAM,OAAA,GAAU,MAAM,SAAA,IAAa,KAAA;AACnC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,OAAO,EAAE,CAAA;AAE7C,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,MAAA,CAAA,EAAU;AAAA,IAC9C,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,IAC9C,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,IAAA,EAAM,MAAM,IAAA,IAAQ;AAAA,KACrB;AAAA,GACF,CAAA;AACD,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,eAAA,CAAgB,UAAU,+DAA+D,CAAA;AAAA,EACjG;AACA,EAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAY,OAAM,GAAK,MAAM,SAAS,IAAA,EAAK;AAM9D,EAAA,MAAM,OAAA,GAAU,IAAIC,OAAAA,CAAQ;AAAA,IAC1B,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,QAAQ,KAAA,CAAM,aAAA;AAAA,IACd,YAAA,EAAc;AAAA,GACf,CAAA;AACD,EAAA,MAAM,YAAY,KAAA,CAAM,mBAAA,CAAoB,MAAM,OAAA,CAAQ,WAAA,CAAY,SAAkB,CAAC,CAAA;AAEzF,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,QAAA,CAAA,EAAY;AAAA,IAClD,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,IAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,YAAA,EAAc,KAAA,CAAM,YAAA,EAAc,SAAA,EAAW,SAAA,EAAW,UAAA,EAAY,KAAA,EAAO;AAAA,GACnG,CAAA;AACD,EAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,IAAA,MAAM,eAAA,CAAgB,YAAY,gEAAgE,CAAA;AAAA,EACpG;AACA,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAK,MAAM,WAAW,IAAA,EAAK;AACnD,EAAA,OAAO,EAAE,eAAA,EAAgB;AAC3B;AAEA,eAAsB,iBAAiB,KAAA,EAKN;AAC/B,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,UAAU,CAAA,CAAE,oBAAA;AAC7C,EAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,IAAIA,OAAAA,CAAQ;AAAA,IAC1B,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,QAAQ,KAAA,CAAM,aAAA;AAAA,IACd,YAAA,EAAc;AAAA,GACf,CAAA;AACD,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,QAAQ,aAAA,CAAc;AAAA,IACvD,SAAA;AAAA,IACA,mBAAA,EAAqB,wBAAA,CAAyB,KAAA,CAAM,WAAW,CAAA;AAAA,IAC/D,WAAA,EAAa,CAAA;AAAA,IACb,iBAAiB,KAAA,CAAM;AAAA,GACxB,CAAA;AACD,EAAA,OAAO,EAAE,iBAAiB,gBAAA,EAAiB;AAC7C;AAEA,eAAsB,kBACpB,QAAA,EACA,OAAA,EACA,SAAA,GAAY,GAAA,EACZ,QAAuC,CAAC,EAAA,KAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA,EAChF;AACf,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC9B,EAAA,IAAI,IAAA,GAAO,GAAA;AACX,EAAA,WAAS;AACP,IAAA,IAAI,MAAM,WAAW,QAAA,EAAU,OAAO,EAAE,KAAA,CAAM,MAAM,KAAK,CAAA,EAAG;AAC5D,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,IAAK,QAAA,EAAU;AAC1B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,MAAM,IAAI,CAAA;AAChB,IAAA,IAAA,GAAO,KAAK,GAAA,CAAI,IAAA,CAAK,MAAM,IAAA,GAAO,GAAG,GAAG,GAAK,CAAA;AAAA,EAC/C;AACF;AAiBA,eAAe,YAAA,CACb,MACA,MAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAY,KAAK,mBAAA,IAAuB,eAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,KAAK,oBAAA,IAAwB,gBAAA;AAEhD,EAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU;AAAA,QACd,UAAU,IAAA,CAAK,cAAA;AAAA,QACf,QAAA,EAAU,KAAK,QAAA,EAAS;AAAA,QACxB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,GAAG;AAAA,OACJ,CAAA;AAAA,IACH,SAAS,YAAA,EAAc;AACrB,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,IAAA,CAAK,UAAS,EAAG,GAAG,QAAQ,CAAA;AAAA,MAC3D,SAAS,aAAA,EAAe;AACtB,QAAA,MAAMC,aAAY,YAAA,YAAwB,KAAA,GAAQ,YAAA,CAAa,OAAA,GAAU,OAAO,YAAY,CAAA;AAC5F,QAAA,MAAMC,cAAa,aAAA,YAAyB,KAAA,GAAQ,aAAA,CAAc,OAAA,GAAU,OAAO,aAAa,CAAA;AAChG,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4BD,UAAS,CAAA,+BAAA,EAAkCC,WAAU,CAAA,CAAE,CAAA;AAAA,MACrG;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,IAAA,CAAK,UAAS,EAAG,GAAG,QAAQ,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAA,CAAO,KAAK,qBAAA,IAAyB,iBAAA,EAAmB,KAAK,QAAA,EAAS,EAAG,OAAO,YAAY,CAAA;AAC9F;AAEA,eAAsB,kBAAA,CACpB,IAAA,EACA,MAAA,EACA,OAAA,GAAkC,EAAC,EACR;AAC3B,EAAA,IAAI,SAAS,OAAA,CAAQ,QAAA,GAAW,IAAA,GAAO,IAAA,CAAK,MAAM,IAAA,EAAK;AACvD,EAAA,IAAI,MAAA,IAAW,MAAA,CAAO,IAAA,CAAK,cAAA,IAAkB,YAAY,IAAA,CAAK,QAAA,EAAS,EAAG,MAAA,CAAO,OAAO,CAAA,CAAE,KAAA,CAAM,MAAM,KAAK,CAAA,EAAI;AAC7G,IAAA,MAAA,GAAS,IAAA;AAAA,EACX;AACA,EAAA,IAAI,aAAA;AAEJ,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,CAAO,kBAAkB,CAAA;AACzB,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAe;AAClD,IAAA,MAAA,GAAS,OAAA,CAAQ,MAAA;AACjB,IAAA,aAAA,GAAgB,OAAA,CAAQ,aAAA;AACxB,IAAA,IAAA,CAAK,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,EACxB,CAAA,MAAO;AACL,IAAA,aAAA,GAAgB,MAAM,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAA,CAAO,WAAW,CAAA;AAClB,EAAA,MAAM,YAAA,CAAa,IAAA,EAAM,EAAE,YAAA,EAAc,MAAA,CAAO,SAAS,WAAA,EAAa,MAAA,CAAO,WAAA,EAAa,aAAA,EAAe,CAAA;AAEzG,EAAA,IAAA,CAAK,MAAM,YAAA,EAAa;AACxB,EAAA,OAAO,EAAE,MAAA,EAAO;AAClB;AAOO,SAAS,4BACd,OAAA,EACuB;AACvB,EAAA,IAAI,QAAA,GAA6C,IAAA;AACjD,EAAA,IAAI,WAAA,GAAqC,IAAA;AACzC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoC;AAE1D,EAAA,OAAO;AAAA,IACL,GAAA,CAAI,MAAA,EAAQ,OAAA,GAAU,EAAC,EAAG;AACxB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,UAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAM,wCAAwC,CAAC,CAAA;AAAA,QAC3E;AACA,QAAA,IAAI,WAAA,SAAoB,WAAW,CAAA;AACnC,QAAA,SAAA,CAAU,IAAI,MAAM,CAAA;AACpB,QAAA,OAAO,SAAS,OAAA,CAAQ,MAAM,SAAA,CAAU,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,MACxD;AACA,MAAA,SAAA,CAAU,IAAI,MAAM,CAAA;AACpB,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC1B,UAAA,WAAA,GAAc,IAAA;AACd,UAAA,KAAA,MAAW,QAAA,IAAY,SAAA,EAAW,QAAA,CAAS,IAAI,CAAA;AAAA,QACjD,GAAG,OAAO,CAAA;AAAA,MACZ,SAAS,GAAA,EAAK;AACZ,QAAA,SAAA,CAAU,KAAA,EAAM;AAChB,QAAA,OAAO,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,MAC3B;AACA,MAAA,MAAMC,IAAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,MAAM;AAChC,QAAA,QAAA,GAAW,IAAA;AACX,QAAA,WAAA,GAAc,IAAA;AACd,QAAA,SAAA,CAAU,KAAA,EAAM;AAAA,MAClB,CAAC,CAAA;AACD,MAAA,QAAA,GAAWA,IAAAA;AACX,MAAA,OAAOA,IAAAA;AAAA,IACT,CAAA;AAAA,IACA,WAAA,EAAa,MAAM,QAAA,KAAa;AAAA,GAClC;AACF;ACpMO,SAAS,eAAA,CAAgB,QAAwB,gBAAA,EAAyC;AAC/F,EAAA,MAAM,IAAA,GAAO,iBAAiB,gBAAgB,CAAA;AAC9C,EAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC5B,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,cAAc,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,KAAM,OAAO,IAAI;AAAA,GAClD,CAAE,CAAA;AACJ;AAEO,SAAS,eAAA,CAAgB,SAAwB,IAAA,EAAuB;AAC7E,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,CAAA,EAAG,OAAO,KAAA;AAChC,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,OAAO,IAAI,CAAA,KAAM,MAAA,CAAO,IAAI,CAAC,CAAA;AACtE;AA0CO,SAAS,kBAAkB,MAAA,EAAwC;AACxE,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,IAAe,GAAA;AAClC,EAAA,MAAM,WAAA,GAAc,2BAAA,CAA4B,CAAC,MAAA,EAAQ,OAAA,KAAY;AACnE,IAAA,MAAM,IAAA,GAAuB;AAAA,MAC3B,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,gBAAgB,MAAA,CAAO,cAAA;AAAA,MACvB,WAAW,MAAA,CAAO;AAAA,KACpB;AACA,IAAA,OAAO,kBAAA,CAAmB,IAAA,EAAM,MAAA,EAAQ,OAAO,CAAA;AAAA,EACjD,CAAC,CAAA;AACD,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAAgF;AAExG,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAA0B;AACtC,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA;AACrC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,YAAA,CAAa,MAAM,KAAK,CAAA;AACxB,IAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,KAAyC;AAC3D,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA;AAC/C,IAAA,IAAI,QAAA,SAAiB,QAAA,CAAS,OAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAQ;AACnE,MAAA,IAAA,CAAK,OAAO,OAAO,CAAA;AACnB,MAAA,MAAM,GAAA;AAAA,IACR,CAAC,CAAA;AACD,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,KAAK,MAAA,CAAO,OAAO,GAAG,GAAG,CAAA;AACxD,IAAA,WAAA,CAAY,IAAI,MAAA,CAAO,OAAA,EAAS,EAAE,OAAA,EAAS,OAAO,CAAA;AAClD,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAMA,IAAAA,GAAM,OAAO,MAAA,EAAqB,KAAA,EAAe,aAAsB,SAAA,KAAuD;AAClI,IAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,CAAW,MAAM,CAAA;AAC7C,IAAA,OAAO,MAAA,CAAO,SAAS,OAAA,CAAQ;AAAA,MAC7B,WAAA,EAAa,eAAe,MAAA,CAAO,OAAA;AAAA,MACnC,aAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,aAAA,KAAkB,OAAO,MAAA,KAA2C;AAC/F,IAAA,IAAI,CAAC,MAAA,CAAO,UAAA,EAAY,MAAM,IAAI,MAAM,2CAA2C,CAAA;AACnF,IAAA,MAAM,OAAA,GAAU,MAAM,IAAI,SAAA,CAAU,EAAE,OAAA,EAAS,MAAA,CAAO,UAAA,EAAY,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,iBAAiB,MAAM,CAAA;AAC1G,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,OAAO,MAAA,EAAqB,MAAA,KAA4D;AACrG,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,MAAM,CAAA;AACzC,IAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAMA,IAAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAC,MAAA,CAAO,EAAE,CAAC,CAAA;AACrF,IAAA,OAAO,eAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,IAAA;AAAA,IAEA,UAAU,MAAA,EAAQ;AAChB,MAAA,OAAO;AAAA,QACL,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,aAAA,EAAe,OAAO,IAAA,KAAS;AAC7B,UAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,CAAW,MAAM,CAAA;AAC7C,UAAA,OAAO,mBAAmB,aAAA,EAAeJ,SAAAA,CAAkB,eAAe,IAAA,EAAM,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,QACjG,CAAA;AAAA,QACA,OAAA,EAAS,OAAO,KAAA,EAAO,IAAA,KAAS;AAC9B,UAAA,MAAM,EAAE,iBAAgB,GAAI,MAAMI,KAAI,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAW,IAAA,EAAM,SAAS,CAAA;AAC/E,UAAA,OAAO,EAAE,QAAQ,eAAA,EAAgB;AAAA,QACnC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IAEA,GAAA,EAAAA,IAAAA;AAAA,IAEA,cAAc,CAAC,OAAA,KAAY,aAAa,MAAA,CAAO,QAAA,IAAY,OAAO,CAAA;AAAA,IAClE,WAAW,CAAC,OAAA,KAAY,UAAU,MAAA,CAAO,QAAA,IAAY,OAAO,CAAA;AAAA,IAC5D,yBAAyB,CAAC,OAAA,KAAY,wBAAwB,MAAA,CAAO,QAAA,IAAY,OAAO,CAAA;AAAA,IACxF,WAAW,CAAC,OAAA,KAAY,UAAU,MAAA,CAAO,QAAA,IAAY,OAAO,CAAA;AAAA,IAE5D,MAAM,SAAA,CAAU,cAAA,EAAgB,YAAA,EAAc;AAC5C,MAAA,MAAM,SAAS,MAAM,SAAA,CAAU,MAAA,CAAO,QAAA,IAAY,cAAc,CAAA;AAChE,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,gBAAA,CAAiB,YAAY,CAAC,CAAA;AAClD,MAAA,OAAO,MAAA,CAAO,KAAK,CAAC,KAAA,KAAU,OAAO,KAAA,CAAM,IAAI,MAAM,IAAI,CAAA;AAAA,IAC3D,CAAA;AAAA,IAEA,gBAAA,EAAkB,CAAC,MAAA,EAAQ,cAAA,KAAmB,OAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,oBAAA,EAAsB,MAAA,EAAQ,gBAAgB,CAAA;AAAA,IAE5I,kBAAA,EAAoB,CAAC,cAAA,EAAgB,aAAA,EAAe,mBAClD,MAAA,CAAO,cAAA,EAAgB,EAAE,KAAA,EAAO,uBAAuB,aAAa,CAAA,EAAG,MAAA,EAAQ,gBAAA,EAAkB,gBAAgB,CAAA;AAAA,IAEnH,mBAAA,EAAqB,CAAC,cAAA,EAAgB,aAAA,KACpC,MAAA,CAAO,cAAA,EAAgB,EAAE,KAAA,EAAO,sBAAA,CAAuB,aAAa,CAAA,EAAG,MAAA,EAAQ,mBAAmB,CAAA;AAAA,IAEpG,YAAA,EAAc,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,eAAA,EAAiB,CAAA;AAAA,IAE3F,SAAA,EAAW,CAAC,MAAA,EAAQ,YAAA,KAAiB,OAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,WAAA,EAAa,MAAA,EAAQ,cAAc,CAAA;AAAA,IAExH,YAAA,EAAc,CAAC,MAAA,EAAQ,SAAA,KAAc,MAAA,CAAO,MAAA,EAAQ,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ,cAAA,EAAgB,WAAW,CAAA;AAAA,IAEhH,oBAAoB,CAAC,MAAA,EAAQ,YAAY,WAAA,CAAY,GAAA,CAAI,QAAQ,OAAO,CAAA;AAAA,IACxE,WAAA,EAAa,MAAM,WAAA,CAAY,WAAA;AAAY,GAC7C;AACF;;;AC7KA,eAAsB,kBAAA,CACpB,GAAA,EACA,aAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,EAAU;AAC7B,EAAA,MAAM,QAAA,GAAW,UAAU,IAAA,IAAQ,sBAAA,CAAuB,MAAM,OAAO,CAAA,KAAM,uBAAuB,aAAa,CAAA;AACjH,EAAA,MAAM,MAAA,GAAS,QAAA,GAAW,KAAA,GAAQ,EAAE,GAAA,CAAI,MAAM,IAAA,CAAK,cAAA,EAAe,EAAG,MAAA,EAAQ,OAAA,EAAS,aAAA,EAAc;AACpG,EAAA,IAAI,CAAC,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEpC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,GAAA,CAAI,OAAA,CAAQ,cAAA,CAAe,EAAE,cAAA,EAAgB,MAAA,CAAO,WAAA,EAAa,CAAA;AACnG,EAAA,IAAI,eAAA,EAAiB,MAAM,IAAA,CAAK,WAAA,CAAY,QAAQ,eAAe,CAAA;AACrE","file":"chunk-EPU52YSA.js","sourcesContent":["import type { ProviderInterface } from \"starknet\";\n\nexport async function erc20Balance(\n provider: Pick<ProviderInterface, \"callContract\">,\n token: string,\n holder: string,\n): Promise<bigint> {\n const read = (entrypoint: string) => provider.callContract({ contractAddress: token, entrypoint, calldata: [holder] }, \"latest\");\n const [low = \"0x0\", high = \"0x0\"] = await read(\"balanceOf\").catch(() => read(\"balance_of\"));\n return BigInt(low) + (BigInt(high) << 128n);\n}\n","import type { FetchLike } from \"../../utils/fetch.js\";\nimport type { TypedData } from \"starknet\";\nimport { UserFacingError } from \"../../errors.js\";\n\nexport interface TypedDataSigner {\n address: string;\n signTypedData(typedData: TypedData): Promise<string[]>;\n}\n\nexport interface SponsoredExecuteConfig {\n proxyUrl: string;\n fetchImpl?: FetchLike;\n headers?: Record<string, string>;\n}\n\nexport type SponsoredRequest = { intentIds: string[] } | { userAddress: string };\n\nexport type SponsoredExecuteResult =\n | { status: \"sponsored\"; transactionHash: string }\n | { status: \"unavailable\"; reason: string };\n\nexport interface SponsoredRejection {\n code?: string;\n detail?: string;\n status?: number;\n stage?: \"build\" | \"execute\";\n requestId?: string;\n}\n\nexport class SponsoredCallRejectedError extends UserFacingError {\n readonly code?: string;\n readonly detail?: string;\n readonly status?: number;\n readonly stage?: \"build\" | \"execute\";\n readonly requestId?: string;\n\n constructor(message: string, info: SponsoredRejection = {}) {\n super(message, { retryable: false });\n this.code = info.code;\n this.detail = info.detail;\n this.status = info.status;\n this.stage = info.stage;\n this.requestId = info.requestId;\n }\n}\n\nexport type SponsorshipFailureCode =\n | \"sponsor_unavailable\"\n | \"credits_exhausted\"\n | \"account_not_deployed\"\n | \"not_executable\"\n | \"invalid_request\"\n | \"not_authorized\"\n | \"rate_limited\"\n | \"may_have_broadcast\";\n\nconst FALLBACK_FUNDING_FAILURES: ReadonlySet<string> = new Set([\"sponsor_unavailable\", \"credits_exhausted\"]);\n\nexport function allowsFallbackFunding(code: string | undefined, status: number, stage: \"build\" | \"execute\"): boolean {\n if (code) return FALLBACK_FUNDING_FAILURES.has(code);\n return stage === \"build\" ? status >= 500 : status === 503;\n}\n\nasync function failureOf(res: Response, fallback: string): Promise<{ reason: string; code?: string; detail?: string; requestId?: string }> {\n const body = (await res.json().catch(() => null)) as { error?: string; code?: string; detail?: string } | null;\n return {\n reason: body?.error || fallback,\n code: typeof body?.code === \"string\" ? body.code : undefined,\n detail: typeof body?.detail === \"string\" ? body.detail : undefined,\n requestId: res.headers.get(\"x-request-id\") ?? undefined,\n };\n}\n\nexport async function executeSponsored(\n config: SponsoredExecuteConfig,\n signer: TypedDataSigner,\n request: SponsoredRequest,\n): Promise<SponsoredExecuteResult> {\n const doFetch = config.fetchImpl ?? fetch;\n const base = config.proxyUrl.replace(/\\/$/, \"\");\n const headers = { \"Content-Type\": \"application/json\", ...config.headers };\n\n const buildRes = await doFetch(`${base}/build`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(request),\n });\n if (!buildRes.ok) {\n const { reason, code, detail, requestId } = await failureOf(buildRes, \"We couldn't prepare this transaction.\");\n if (allowsFallbackFunding(code, buildRes.status, \"build\")) return { status: \"unavailable\", reason };\n throw new SponsoredCallRejectedError(reason, { code, detail, status: buildRes.status, stage: \"build\", requestId });\n }\n const { typedData } = (await buildRes.json()) as { typedData: TypedData };\n\n const signature = await signer.signTypedData(typedData);\n\n const executeRes = await doFetch(`${base}/execute`, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ ...request, typedData, signature }),\n });\n if (!executeRes.ok) {\n const { reason, code, detail, requestId } = await failureOf(executeRes, \"We couldn't submit this transaction.\");\n if (allowsFallbackFunding(code, executeRes.status, \"execute\")) {\n return { status: \"unavailable\", reason };\n }\n throw new SponsoredCallRejectedError(reason, { code, detail, status: executeRes.status, stage: \"execute\", requestId });\n }\n const { transactionHash } = (await executeRes.json()) as { transactionHash: string };\n return { status: \"sponsored\", transactionHash };\n}\n","import { extract, expand } from \"@noble/hashes/hkdf.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\nimport { ec, num } from \"starknet\";\n\nconst STARK_ORDER = 3618502788666131213697322783095070105526743751716087489154079457884512865583n;\n\nexport function deriveOwnerKeyPair(\n secret: Uint8Array,\n recipientId: string,\n): { privateKey: string; publicKey: string } {\n const prk = extract(sha256, secret);\n const okm = expand(sha256, prk, new TextEncoder().encode(recipientId), 32);\n let scalar = BigInt(\"0x\" + Buffer.from(okm).toString(\"hex\")) % STARK_ORDER;\n if (scalar === 0n) scalar = 1n;\n const privateKey = num.toHex(scalar);\n const publicKey = ec.starkCurve.getStarkKey(privateKey);\n return { privateKey, publicKey };\n}\n","import { hash, num, type BigNumberish } from \"starknet\";\nimport { STARKNET_MEDIAWALLET_CLASS_HASH } from \"../../constants.js\";\n\nexport function ownerConstructorCalldata(ownerPubkey: BigNumberish): string[] {\n return [\"0x0\", num.toHex(ownerPubkey), \"0x1\"];\n}\n\nexport function computeAccountAddress(ownerPubkey: BigNumberish, salt: BigNumberish = 0): string {\n return hash.calculateContractAddressFromHash(\n num.toHex(salt),\n STARKNET_MEDIAWALLET_CLASS_HASH,\n ownerConstructorCalldata(ownerPubkey),\n 0,\n );\n}\n","import { hash, num, type BigNumberish, type Call } from \"starknet\";\n\nconst STARKNET_SIGNER_TYPE = \"0x537461726b6e6574205369676e6572\";\nconst OPTION_NONE = \"0x1\";\nconst SIGNER_STARKNET = \"0x0\";\n\nexport function computeOwnerGuid(ownerPubkey: BigNumberish): string {\n return hash.computePoseidonHash(STARKNET_SIGNER_TYPE, num.toHex(ownerPubkey));\n}\n\nfunction changeOwners(accountAddress: string, guidsToRemove: string[], pubkeysToAdd: BigNumberish[]): Call {\n return {\n contractAddress: accountAddress,\n entrypoint: \"change_owners\",\n calldata: [\n num.toHex(guidsToRemove.length),\n ...guidsToRemove,\n num.toHex(pubkeysToAdd.length),\n ...pubkeysToAdd.flatMap((p) => [SIGNER_STARKNET, num.toHex(p)]),\n OPTION_NONE,\n ],\n };\n}\n\nexport function buildAddOwnerCall(accountAddress: string, addOwnerPubkey: BigNumberish): Call {\n return changeOwners(accountAddress, [], [addOwnerPubkey]);\n}\n\nexport function buildRemoveOwnerCall(accountAddress: string, removeOwnerPubkey: BigNumberish): Call {\n return changeOwners(accountAddress, [computeOwnerGuid(removeOwnerPubkey)], []);\n}\n\nexport function buildRemoveOwnerByGuidCall(accountAddress: string, ownerGuid: BigNumberish): Call {\n return changeOwners(accountAddress, [num.toHex(ownerGuid)], []);\n}\n","import { num, type BigNumberish, type DeployAccountContractPayload } from \"starknet\";\nimport { STARKNET_MEDIAWALLET_CLASS_HASH } from \"../../constants.js\";\nimport { ownerConstructorCalldata, computeAccountAddress } from \"./account.js\";\n\nexport function buildDeployAccountParams(\n ownerPubkey: BigNumberish,\n salt: BigNumberish = 0,\n): DeployAccountContractPayload {\n return {\n classHash: STARKNET_MEDIAWALLET_CLASS_HASH,\n constructorCalldata: ownerConstructorCalldata(ownerPubkey),\n addressSalt: num.toHex(salt),\n contractAddress: computeAccountAddress(ownerPubkey, salt),\n };\n}\n","import { num, type Call, type ProviderInterface } from \"starknet\";\nimport { normalizeAddress } from \"../../utils/address.js\";\n\nconst norm = (address: string): string => normalizeAddress(\"STARKNET\", address);\n\nconst SIGNER_TYPE_NAMES = [\"Starknet\", \"Secp256k1\", \"Secp256r1\"] as const;\ntype SignerTypeName = (typeof SIGNER_TYPE_NAMES)[number];\n\nexport interface GuardianInfo {\n type: SignerTypeName;\n guid: string;\n storedValue: string;\n}\n\nfunction encodeFeltArray(items: string[]): string[] {\n return [num.toHex(items.length), ...items];\n}\n\nfunction encodeStarknetSigner(pubkey: string): string[] {\n return [\"0x0\", num.toHex(pubkey)];\n}\n\nfunction encodeStarknetSignerArray(pubkeys: string[]): string[] {\n return [num.toHex(pubkeys.length), ...pubkeys.flatMap(encodeStarknetSigner)];\n}\n\nexport function buildSetFirstGuardianCall(address: string, guardianPubkey: string): Call {\n return {\n contractAddress: norm(address),\n entrypoint: \"change_guardians\",\n calldata: [...encodeFeltArray([]), ...encodeStarknetSignerArray([guardianPubkey])],\n };\n}\n\nexport function buildTriggerEscapeOwnerCall(targetAddress: string, newOwnerPubkey: string): Call {\n return {\n contractAddress: norm(targetAddress),\n entrypoint: \"trigger_escape_owner\",\n calldata: encodeStarknetSigner(newOwnerPubkey),\n };\n}\n\nexport function buildCompleteEscapeOwnerCall(targetAddress: string): Call {\n return { contractAddress: norm(targetAddress), entrypoint: \"escape_owner\", calldata: [] };\n}\n\nexport function buildCancelEscapeCall(address: string): Call {\n return { contractAddress: norm(address), entrypoint: \"cancel_escape\", calldata: [] };\n}\n\nexport function decodeGuardiansInfo(res: string[]): GuardianInfo[] {\n const len = Number(res[0]);\n const out: GuardianInfo[] = [];\n for (let i = 0; i < len; i++) {\n const base = 1 + i * 3;\n out.push({\n type: SIGNER_TYPE_NAMES[Number(res[base])] ?? \"Starknet\",\n guid: res[base + 1],\n storedValue: res[base + 2],\n });\n }\n return out;\n}\n\nexport type EscapeTypeName = \"None\" | \"Guardian\" | \"Owner\";\nexport type EscapeStatusName = \"None\" | \"NotReady\" | \"Ready\" | \"Expired\";\nconst ESCAPE_TYPE_NAMES: EscapeTypeName[] = [\"None\", \"Guardian\", \"Owner\"];\nconst ESCAPE_STATUS_NAMES: EscapeStatusName[] = [\"None\", \"NotReady\", \"Ready\", \"Expired\"];\n\nexport interface EscapeInfo {\n readyAt: number;\n escapeType: EscapeTypeName;\n status: EscapeStatusName;\n}\n\nexport function decodeEscapeAndStatus(res: string[]): EscapeInfo {\n\n const readyAt = Number(res[0]);\n const escapeType = ESCAPE_TYPE_NAMES[Number(res[1])] ?? \"None\";\n const optionTag = Number(res[2]);\n const statusIndex = optionTag === 0 ? 5 : 3;\n const status = ESCAPE_STATUS_NAMES[Number(res[statusIndex])] ?? \"None\";\n return { readyAt, escapeType, status };\n}\n\nexport async function getGuardians(provider: ProviderInterface, address: string): Promise<GuardianInfo[]> {\n const res = await provider.callContract({\n contractAddress: norm(address),\n entrypoint: \"get_guardians_info\",\n calldata: [],\n });\n return decodeGuardiansInfo(res as unknown as string[]);\n}\n\nexport async function getOwners(provider: ProviderInterface, address: string): Promise<GuardianInfo[]> {\n const res = await provider.callContract({\n contractAddress: norm(address),\n entrypoint: \"get_owners_info\",\n calldata: [],\n });\n return decodeGuardiansInfo(res as unknown as string[]);\n}\n\nexport async function getEscape(provider: ProviderInterface, address: string): Promise<EscapeInfo> {\n const res = await provider.callContract({\n contractAddress: norm(address),\n entrypoint: \"get_escape_and_status\",\n calldata: [],\n });\n return decodeEscapeAndStatus(res as unknown as string[]);\n}\n\nexport async function getEscapeSecurityPeriod(provider: ProviderInterface, address: string): Promise<number> {\n const res = await provider.callContract({\n contractAddress: norm(address),\n entrypoint: \"get_escape_security_period\",\n calldata: [],\n });\n return Number((res as unknown as string[])[0]);\n}\n","import { ec, num } from \"starknet\";\n\nexport async function deriveAesKey(prfSecret: Uint8Array, hkdfInfo: Uint8Array): Promise<CryptoKey> {\n const hkdf = await crypto.subtle.importKey(\"raw\", prfSecret as BufferSource, \"HKDF\", false, [\"deriveKey\"]);\n return crypto.subtle.deriveKey(\n { name: \"HKDF\", hash: \"SHA-256\", salt: new Uint8Array(0), info: hkdfInfo as BufferSource },\n hkdf,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nexport function generateDeviceKey(): Promise<CryptoKey> {\n return crypto.subtle.generateKey({ name: \"AES-GCM\", length: 256 }, false, [\"encrypt\", \"decrypt\"]);\n}\n\nexport function generateStarkKeyPair(): { privateKeyHex: string; publicKeyHex: string } {\n const privateKeyHex =\n \"0x\" +\n Array.from(ec.starkCurve.utils.randomPrivateKey())\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n return { privateKeyHex, publicKeyHex: ec.starkCurve.getStarkKey(privateKeyHex) };\n}\n\nexport class InvalidStarkPrivateKeyError extends Error {\n constructor(reason: string) {\n super(`Not a valid Starknet private key: ${reason}`);\n this.name = \"InvalidStarkPrivateKeyError\";\n }\n}\n\nexport function starkKeyPairFromPrivateKey(input: string): { privateKeyHex: string; publicKeyHex: string } {\n const trimmed = input.trim().replace(/\\s+/g, \"\");\n const body = trimmed.startsWith(\"0x\") || trimmed.startsWith(\"0X\") ? trimmed.slice(2) : trimmed;\n\n if (body.length === 0) throw new InvalidStarkPrivateKeyError(\"it is empty\");\n if (!/^[0-9a-fA-F]+$/.test(body)) throw new InvalidStarkPrivateKeyError(\"it is not hexadecimal\");\n if (body.length > 64) throw new InvalidStarkPrivateKeyError(\"it is too long\");\n\n const value = BigInt(\"0x\" + body);\n if (value === 0n) throw new InvalidStarkPrivateKeyError(\"it is zero\");\n if (value >= ec.starkCurve.CURVE.n) throw new InvalidStarkPrivateKeyError(\"it is outside the curve order\");\n\n const privateKeyHex = \"0x\" + value.toString(16).padStart(64, \"0\");\n return { privateKeyHex, publicKeyHex: ec.starkCurve.getStarkKey(privateKeyHex) };\n}\n\nexport async function sealPrivateKey(\n aesKey: CryptoKey,\n iv: Uint8Array,\n privateKeyHex: string,\n): Promise<ArrayBuffer> {\n return crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: iv as BufferSource },\n aesKey,\n new TextEncoder().encode(privateKeyHex),\n );\n}\n\nexport async function unsealPrivateKey(\n aesKey: CryptoKey,\n iv: Uint8Array,\n ciphertext: BufferSource,\n): Promise<string> {\n const buf = await crypto.subtle.decrypt({ name: \"AES-GCM\", iv: iv as BufferSource }, aesKey, ciphertext);\n return new TextDecoder().decode(buf);\n}\n\nexport function signWithPrivateKey(privateKeyHex: string, msgHash: string): [string, string] {\n const sig = ec.starkCurve.sign(msgHash, privateKeyHex);\n return [num.toHex(sig.r), num.toHex(sig.s)];\n}\n","import type { SealedOwner } from \"./types.js\";\n\nexport interface OwnerStore {\n load(): SealedOwner | null;\n loadAddress(): string | null;\n save(sealed: SealedOwner): void;\n clear(): void;\n notifyChange(): void;\n onChange(listener: () => void): () => void;\n}\n\nexport function createOwnerStore(config: { storeKey: string; changeEvent: string }): OwnerStore {\n const { storeKey, changeEvent } = config;\n const announce = (): void => {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(new Event(changeEvent));\n };\n return {\n load() {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(storeKey);\n return raw ? (JSON.parse(raw) as SealedOwner) : null;\n } catch {\n return null;\n }\n },\n loadAddress() {\n return this.load()?.address ?? null;\n },\n save(sealed) {\n const previous = this.load();\n if (previous && previous.address !== sealed.address) {\n localStorage.setItem(`${storeKey}:${previous.address}`, JSON.stringify(previous));\n }\n localStorage.setItem(storeKey, JSON.stringify(sealed));\n announce();\n },\n clear() {\n localStorage.removeItem(storeKey);\n announce();\n },\n notifyChange: announce,\n onChange(listener) {\n window.addEventListener(changeEvent, listener);\n return () => window.removeEventListener(changeEvent, listener);\n },\n };\n}\n","const SCHEME = \"medialane-device\";\nconst VERSION = 1;\nconst LABEL_MAX = 32;\nconst STARK_PRIME = (1n << 251n) + 17n * (1n << 192n) + 1n;\n\nexport class InvalidPairingPayloadError extends Error {\n constructor(message = \"This code is not a Medialane device request.\") {\n super(message);\n this.name = \"InvalidPairingPayloadError\";\n }\n}\n\nexport interface PairingPayload {\n publicKey: string;\n label: string;\n}\n\nfunction normalisePublicKey(input: unknown): string {\n if (typeof input !== \"string\" || !/^0x[0-9a-fA-F]+$/.test(input)) {\n throw new InvalidPairingPayloadError(\"That device key is not valid.\");\n }\n const value = BigInt(input);\n if (value === 0n || value >= STARK_PRIME) {\n throw new InvalidPairingPayloadError(\"That device key is not valid.\");\n }\n return `0x${value.toString(16)}`;\n}\n\nfunction sanitiseLabel(input: unknown): string {\n const raw = typeof input === \"string\" ? input : \"\";\n return raw.replace(/\\s+/g, \" \").trim().slice(0, LABEL_MAX);\n}\n\nexport function encodePairingPayload(payload: PairingPayload): string {\n return JSON.stringify({\n scheme: SCHEME,\n version: VERSION,\n publicKey: normalisePublicKey(payload.publicKey),\n label: sanitiseLabel(payload.label),\n });\n}\n\nexport function parsePairingPayload(encoded: string): PairingPayload {\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(encoded) as Record<string, unknown>;\n } catch {\n throw new InvalidPairingPayloadError();\n }\n if (data === null || typeof data !== \"object\") throw new InvalidPairingPayloadError();\n if (data.scheme !== SCHEME || data.version !== VERSION) throw new InvalidPairingPayloadError();\n return {\n publicKey: normalisePublicKey(data.publicKey),\n label: sanitiseLabel(data.label),\n };\n}\n\nexport function parseAccountAddress(input: string): string {\n const trimmed = typeof input === \"string\" ? input.trim() : \"\";\n if (!/^0x[0-9a-fA-F]{50,64}$/.test(trimmed)) {\n throw new InvalidPairingPayloadError(\"That does not look like an account address.\");\n }\n if (BigInt(trimmed) === 0n) {\n throw new InvalidPairingPayloadError(\"That does not look like an account address.\");\n }\n return trimmed;\n}\n","import { computeAccountAddress } from \"../starknet/media-wallet/account.js\";\nimport { starkKeyPairFromPrivateKey } from \"../starknet/passkey-wallet/crypto.js\";\n\nconst PREFIX = \"medialane-recovery:v1:\";\nconst ADDRESS = /^0x[0-9a-fA-F]{1,64}$/;\n\nexport class InvalidRecoveryKeyError extends Error {\n constructor(message = \"This is not a valid recovery key.\") {\n super(message);\n this.name = \"InvalidRecoveryKeyError\";\n }\n}\n\nexport interface RecoveryKey {\n walletAddress: string;\n privateKey: string;\n}\n\nconst canonicalAddress = (address: string) => `0x${BigInt(address).toString(16).padStart(64, \"0\")}`;\n\nfunction keyPair(privateKey: string) {\n try {\n return starkKeyPairFromPrivateKey(privateKey);\n } catch {\n throw new InvalidRecoveryKeyError();\n }\n}\n\nexport function encodeRecoveryKey(key: RecoveryKey): string {\n if (!ADDRESS.test(key.walletAddress) || BigInt(key.walletAddress) === 0n) throw new InvalidRecoveryKeyError();\n return `${PREFIX}${canonicalAddress(key.walletAddress)}:${keyPair(key.privateKey).privateKeyHex}`;\n}\n\nexport function parseRecoveryKey(input: string): RecoveryKey {\n const trimmed = input.trim();\n if (!trimmed.startsWith(PREFIX)) {\n const { privateKeyHex, publicKeyHex } = keyPair(trimmed);\n return { walletAddress: computeAccountAddress(publicKeyHex, 0), privateKey: privateKeyHex };\n }\n const parts = trimmed.slice(PREFIX.length).split(\":\");\n const [walletAddress, privateKey] = parts;\n if (parts.length !== 2 || !walletAddress || !privateKey || !ADDRESS.test(walletAddress) || BigInt(walletAddress) === 0n) {\n throw new InvalidRecoveryKeyError();\n }\n return { walletAddress: canonicalAddress(walletAddress), privateKey: keyPair(privateKey).privateKeyHex };\n}\n","import type { GuardianInfo, EscapeInfo } from \"../starknet/media-wallet/guardian.js\";\n\nexport type GuardianStatus = { kind: \"none\" } | { kind: \"active\"; guardian: GuardianInfo };\n\nexport function describeGuardianStatus(guardians: GuardianInfo[]): GuardianStatus {\n if (guardians.length === 0) return { kind: \"none\" };\n return { kind: \"active\", guardian: guardians[0] };\n}\n\nexport type RecoveryAction = \"start\" | \"complete\" | \"none\";\n\nexport function describeRecoveryAction(escape: EscapeInfo): RecoveryAction {\n if (escape.escapeType !== \"Owner\") return \"none\";\n if (escape.status === \"Ready\") return \"complete\";\n if (escape.status === \"Expired\") return \"start\";\n return \"none\";\n}\n","import { validateAndParseAddress } from \"starknet\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport type { ReceiptProviderLike } from \"./types.js\";\n\nexport function normalizeWalletAddress(address: string): string {\n return normalizeAddress(\"STARKNET\", address);\n}\n\nexport function isValidStarknetAddress(address: string): boolean {\n try {\n validateAndParseAddress(address.trim());\n return true;\n } catch {\n return false;\n }\n}\n\nconst CONTRACT_NOT_FOUND = 20;\n\nexport async function isDeployed(provider: ReceiptProviderLike, address: string): Promise<boolean> {\n try {\n await provider.getClassHashAt(normalizeWalletAddress(address));\n return true;\n } catch (err) {\n if ((err as { code?: unknown } | null)?.code === CONTRACT_NOT_FOUND) return false;\n throw err;\n }\n}\n","import type { Call } from \"starknet\";\n\nexport interface SelfFundFeeEstimate {\n feeRaw: bigint;\n unit: string;\n balanceRaw: bigint | null;\n}\n\nexport type SelfFundConsentHandler = (\n feeEstimate: Promise<SelfFundFeeEstimate | null>,\n) => Promise<boolean>;\n\nexport interface SelfFundConsent {\n registerHandler(handler: SelfFundConsentHandler | null): void;\n request(input: { address?: string; calls?: Call[] }): Promise<boolean>;\n}\n\nexport function createSelfFundConsent(\n estimateFee: (address: string, calls: Call[]) => Promise<SelfFundFeeEstimate>,\n): SelfFundConsent {\n let handler: SelfFundConsentHandler | null = null;\n return {\n registerHandler(next) {\n handler = next;\n },\n async request({ address, calls }) {\n if (!handler) return false;\n const feeEstimate =\n address && calls ? estimateFee(address, calls).catch(() => null) : Promise.resolve(null);\n return handler(feeEstimate);\n },\n };\n}\n","export interface DeviceKeyStore {\n save(credentialId: string, key: CryptoKey): Promise<void>;\n load(credentialId: string): Promise<CryptoKey | null>;\n}\n\nconst DATABASE = \"medialane-wallet\";\nconst STORE = \"device-keys\";\n\nfunction open(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DATABASE, 1);\n request.onupgradeneeded = () => request.result.createObjectStore(STORE);\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function run<T>(mode: IDBTransactionMode, act: (store: IDBObjectStore) => IDBRequest<T>): Promise<T> {\n const db = await open();\n try {\n return await new Promise<T>((resolve, reject) => {\n const request = act(db.transaction(STORE, mode).objectStore(STORE));\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n } finally {\n db.close();\n }\n}\n\nexport const indexedDbDeviceKeys: DeviceKeyStore = {\n async save(credentialId, key) {\n await run(\"readwrite\", (store) => store.put(key, credentialId));\n },\n async load(credentialId) {\n return ((await run(\"readonly\", (store) => store.get(credentialId))) as CryptoKey | undefined) ?? null;\n },\n};\n","import {\n deriveAesKey,\n generateDeviceKey,\n generateStarkKeyPair,\n sealPrivateKey,\n starkKeyPairFromPrivateKey,\n unsealPrivateKey,\n} from \"../starknet/passkey-wallet/crypto.js\";\nimport { computeAccountAddress } from \"../starknet/media-wallet/account.js\";\nimport type { SealedOwner } from \"./types.js\";\nimport type { RecoveryKey } from \"./recovery-key.js\";\nimport { indexedDbDeviceKeys, type DeviceKeyStore } from \"./device-keys.js\";\nimport { PasskeyCancelledError, DeviceKeyMissingError, PasskeyUnsupportedError, type PasskeyUnsupportedReason } from \"./passkey-errors.js\";\n\nexport { PasskeyCancelledError, DeviceKeyMissingError, PasskeyUnsupportedError, type PasskeyUnsupportedReason };\n\nexport interface PasskeyConfig {\n appName: string;\n relyingPartyName: string;\n relyingPartyId: () => string;\n prfSalt: Uint8Array<ArrayBuffer>;\n hkdfInfo: Uint8Array<ArrayBuffer>;\n passkeyUser: () => Promise<PublicKeyCredentialUserEntity>;\n knownCredentials: () => PublicKeyCredentialDescriptor[];\n credentials?: CredentialsContainer;\n deviceKeys?: DeviceKeyStore;\n randomBytes?: (length: number) => Uint8Array<ArrayBuffer>;\n}\n\nexport interface CreatedOwner {\n sealed: SealedOwner;\n privateKeyHex: string;\n}\n\nexport interface PasskeyOwner {\n createOwnerKey(): Promise<CreatedOwner>;\n unlockOwnerKey(sealed: SealedOwner): Promise<string>;\n sealImportedOwnerKey(recovery: RecoveryKey): Promise<SealedOwner>;\n}\n\ninterface Registration {\n credentialId: string;\n prfFirst: ArrayBuffer | null;\n}\n\ninterface OwnerLock {\n aes: CryptoKey;\n lock?: \"device\";\n}\n\nconst encodeBase64 = (buf: ArrayBuffer | Uint8Array): string => {\n const bytes = buf instanceof Uint8Array ? buf : new Uint8Array(buf);\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary);\n};\n\nconst decodeBase64 = (value: string): Uint8Array<ArrayBuffer> => {\n const binary = atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n};\n\nfunction isPasskeyCancellation(err: unknown): boolean {\n const name = (err as { name?: string } | null)?.name;\n return name === \"NotAllowedError\" || name === \"AbortError\";\n}\n\nexport function createPasskeyOwner(config: PasskeyConfig): PasskeyOwner {\n const randomBytes: (length: number) => Uint8Array<ArrayBuffer> =\n config.randomBytes ?? ((length: number) => crypto.getRandomValues(new Uint8Array(length)));\n const credentialsApi = (): CredentialsContainer => {\n const api = config.credentials ?? (typeof navigator === \"undefined\" ? undefined : navigator.credentials);\n if (!api) throw new PasskeyUnsupportedError(\"no-webauthn\");\n return api;\n };\n\n async function registerPasskey(): Promise<Registration> {\n let credential: PublicKeyCredential;\n try {\n credential = (await credentialsApi().create({\n publicKey: {\n challenge: randomBytes(32),\n rp: { name: config.relyingPartyName, id: config.relyingPartyId() },\n user: await config.passkeyUser(),\n excludeCredentials: config.knownCredentials(),\n pubKeyCredParams: [\n { type: \"public-key\", alg: -7 },\n { type: \"public-key\", alg: -257 },\n ],\n authenticatorSelection: {\n authenticatorAttachment: \"platform\",\n residentKey: \"required\",\n userVerification: \"required\",\n },\n extensions: { prf: { eval: { first: config.prfSalt } } } as AuthenticationExtensionsClientInputs,\n },\n })) as PublicKeyCredential;\n } catch (err) {\n if (isPasskeyCancellation(err)) throw new PasskeyCancelledError();\n throw err;\n }\n const prf = (\n credential.getClientExtensionResults() as {\n prf?: { enabled?: boolean; results?: { first?: ArrayBuffer } };\n }\n ).prf;\n return {\n credentialId: encodeBase64(credential.rawId),\n prfFirst: prf?.results?.first ?? null,\n };\n }\n\n async function assertPasskey(\n credentialId: string,\n extensions?: AuthenticationExtensionsClientInputs,\n ): Promise<PublicKeyCredential> {\n try {\n return (await credentialsApi().get({\n publicKey: {\n challenge: randomBytes(32),\n rpId: config.relyingPartyId(),\n allowCredentials: [{ type: \"public-key\", id: decodeBase64(credentialId) }],\n userVerification: \"required\",\n ...(extensions ? { extensions } : {}),\n },\n })) as PublicKeyCredential;\n } catch (err) {\n if (isPasskeyCancellation(err)) throw new PasskeyCancelledError();\n throw err;\n }\n }\n\n async function prfSecret(credentialId: string): Promise<Uint8Array<ArrayBuffer>> {\n const assertion = await assertPasskey(credentialId, {\n prf: { eval: { first: config.prfSalt } },\n } as AuthenticationExtensionsClientInputs);\n const result = (assertion.getClientExtensionResults() as { prf?: { results?: { first?: ArrayBuffer } } }).prf\n ?.results?.first;\n if (!result) throw new PasskeyUnsupportedError(\"no-prf\");\n return new Uint8Array(result);\n }\n\n const deviceKeys = config.deviceKeys ?? indexedDbDeviceKeys;\n\n async function lockFor(registration: Registration): Promise<OwnerLock> {\n if (registration.prfFirst) {\n return { aes: await deriveAesKey(new Uint8Array(registration.prfFirst), config.hkdfInfo) };\n }\n try {\n return { aes: await deriveAesKey(await prfSecret(registration.credentialId), config.hkdfInfo) };\n } catch (err) {\n if (!(err instanceof PasskeyUnsupportedError) || err.reason !== \"no-prf\") throw err;\n }\n const aes = await generateDeviceKey();\n await deviceKeys.save(registration.credentialId, aes);\n return { aes, lock: \"device\" };\n }\n\n async function unlockFor(sealed: SealedOwner): Promise<CryptoKey> {\n if (sealed.lock !== \"device\") return deriveAesKey(await prfSecret(sealed.credentialId), config.hkdfInfo);\n await assertPasskey(sealed.credentialId);\n const aes = await deviceKeys.load(sealed.credentialId);\n if (!aes) throw new DeviceKeyMissingError();\n return aes;\n }\n\n async function seal(aes: CryptoKey, privateKeyHex: string): Promise<{ iv: string; ciphertext: string }> {\n const iv = randomBytes(12);\n const ciphertext = await sealPrivateKey(aes, iv, privateKeyHex);\n return { iv: encodeBase64(iv), ciphertext: encodeBase64(ciphertext) };\n }\n\n return {\n async createOwnerKey() {\n const registration = await registerPasskey();\n const { aes, lock } = await lockFor(registration);\n const { privateKeyHex, publicKeyHex } = generateStarkKeyPair();\n const { iv, ciphertext } = await seal(aes, privateKeyHex);\n return {\n sealed: {\n credentialId: registration.credentialId,\n ownerPubKey: publicKeyHex,\n address: computeAccountAddress(publicKeyHex, 0),\n iv,\n ciphertext,\n ...(lock ? { lock } : {}),\n },\n privateKeyHex,\n };\n },\n\n async unlockOwnerKey(sealed) {\n const aes = await unlockFor(sealed);\n return unsealPrivateKey(aes, decodeBase64(sealed.iv), decodeBase64(sealed.ciphertext));\n },\n\n async sealImportedOwnerKey(recovery) {\n const { privateKeyHex, publicKeyHex } = starkKeyPairFromPrivateKey(recovery.privateKey);\n const registration = await registerPasskey();\n const { aes, lock } = await lockFor(registration);\n const { iv, ciphertext } = await seal(aes, privateKeyHex);\n return {\n credentialId: registration.credentialId,\n ownerPubKey: publicKeyHex,\n address: recovery.walletAddress,\n iv,\n ciphertext,\n ...(lock ? { lock } : {}),\n };\n },\n };\n}\n","import type { FetchLike } from \"../utils/fetch.js\";\nimport { Account, typedData as starknetTypedData, type Call, type ProviderInterface } from \"starknet\";\nimport { signWithPrivateKey } from \"../starknet/passkey-wallet/crypto.js\";\nimport { UserFacingError } from \"../errors.js\";\nimport { executeSponsored } from \"../starknet/services/sponsoredExecutor.js\";\nimport type { SelfFundConsent, SelfFundFeeEstimate } from \"./self-fund-consent.js\";\nimport type { ExecutedTransaction, WalletExecutor } from \"./types.js\";\nimport { getTokenBySymbol } from \"../utils/token.js\";\nimport { erc20Balance } from \"../starknet/erc20.js\";\n\nexport interface SelfFundedDeps {\n provider: () => ProviderInterface;\n}\n\nexport function accountFor(\n provider: ProviderInterface,\n address: string,\n privateKeyHex: string,\n): Account {\n return new Account({ provider, address, signer: privateKeyHex, cairoVersion: \"1\" });\n}\n\nexport async function estimateSelfFundedFee(\n provider: ProviderInterface,\n address: string,\n calls: Call[],\n): Promise<SelfFundFeeEstimate> {\n const account = new Account({ provider, address, signer: \"0x1\", cairoVersion: \"1\" });\n const estimate = await account.estimateInvokeFee(calls);\n const balanceRaw = await feeTokenBalance(provider, address, estimate.unit).catch(() => null);\n return { feeRaw: estimate.overall_fee, unit: estimate.unit, balanceRaw };\n}\n\nasync function feeTokenBalance(provider: ProviderInterface, address: string, unit: string): Promise<bigint> {\n const token = getTokenBySymbol(unit === \"FRI\" ? \"STRK\" : \"ETH\");\n if (!token) throw new Error(`No fee token for unit ${unit}`);\n return erc20Balance(provider, token.address, address);\n}\n\nexport function selfFundedExecutor(deps: SelfFundedDeps): WalletExecutor {\n return {\n async execute({ userAddress, privateKeyHex, calls }): Promise<ExecutedTransaction> {\n const account = accountFor(deps.provider(), userAddress, privateKeyHex);\n const { transaction_hash } = await account.execute(calls);\n return { transactionHash: transaction_hash };\n },\n };\n}\n\nexport interface SponsoredDeps extends SelfFundedDeps {\n proxyUrl: string;\n consent: SelfFundConsent;\n fetchImpl?: FetchLike;\n fallback?: WalletExecutor;\n}\n\nexport function sponsoredExecutor(deps: SponsoredDeps): WalletExecutor {\n const fallback = deps.fallback ?? selfFundedExecutor(deps);\n return {\n async execute(input): Promise<ExecutedTransaction> {\n const { userAddress, privateKeyHex, calls, intentIds } = input;\n if (!intentIds?.length) {\n const consented = await deps.consent.request({ address: userAddress, calls });\n if (!consented) throw new UserFacingError(\"This action can't be sponsored\");\n return fallback.execute(input);\n }\n const result = await executeSponsored(\n { proxyUrl: deps.proxyUrl, fetchImpl: deps.fetchImpl },\n {\n address: userAddress,\n signTypedData: async (data) =>\n signWithPrivateKey(privateKeyHex, starknetTypedData.getMessageHash(data, userAddress)),\n },\n { intentIds },\n );\n if (result.status === \"sponsored\") return { transactionHash: result.transactionHash };\n\n const consented = await deps.consent.request({ address: userAddress, calls });\n if (!consented) throw new UserFacingError(result.reason);\n return fallback.execute(input);\n },\n };\n}\n","import type { FetchLike } from \"../utils/fetch.js\";\nimport { Account, stark, type ProviderInterface } from \"starknet\";\nimport { getCoordinates } from \"../chains.js\";\nimport { ownerConstructorCalldata } from \"../starknet/media-wallet/account.js\";\nimport { isDeployed } from \"./addresses.js\";\nimport type { ExecutedTransaction, SealedOwner } from \"./types.js\";\n\nexport type DeploymentStep = \"creating-passkey\" | \"deploying\";\n\nexport interface DeploymentResult {\n sealed: SealedOwner;\n}\n\nasync function describeFailure(res: Response, fallback: string): Promise<never> {\n const body = (await res.json().catch(() => null)) as { error?: string } | null;\n throw new Error(body?.error || fallback);\n}\n\nexport async function deploySponsored(input: {\n proxyUrl: string;\n provider: ProviderInterface;\n ownerAddress: string;\n ownerPubKey: string;\n privateKeyHex: string;\n salt?: string;\n fetchImpl?: FetchLike;\n}): Promise<ExecutedTransaction> {\n const doFetch = input.fetchImpl ?? fetch;\n const base = input.proxyUrl.replace(/\\/$/, \"\");\n\n const buildRes = await doFetch(`${base}/build`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n ownerPubkey: input.ownerPubKey,\n ownerAddress: input.ownerAddress,\n salt: input.salt ?? \"0x0\",\n }),\n });\n if (!buildRes.ok) {\n await describeFailure(buildRes, \"We couldn't prepare your wallet deployment. Please try again.\");\n }\n const { typedData, deployment, calls } = (await buildRes.json()) as {\n typedData: object;\n deployment: object;\n calls: object[];\n };\n\n const account = new Account({\n provider: input.provider,\n address: input.ownerAddress,\n signer: input.privateKeyHex,\n cairoVersion: \"1\",\n });\n const signature = stark.signatureToHexArray(await account.signMessage(typedData as never));\n\n const executeRes = await doFetch(`${base}/execute`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ ownerAddress: input.ownerAddress, typedData, signature, deployment, calls }),\n });\n if (!executeRes.ok) {\n await describeFailure(executeRes, \"We couldn't complete your wallet deployment. Please try again.\");\n }\n const { transactionHash } = (await executeRes.json()) as { transactionHash: string };\n return { transactionHash };\n}\n\nexport async function deploySelfFunded(input: {\n provider: ProviderInterface;\n ownerAddress: string;\n ownerPubKey: string;\n privateKeyHex: string;\n}): Promise<ExecutedTransaction> {\n const classHash = getCoordinates(\"STARKNET\").mediaWalletClassHash;\n if (!classHash) throw new Error(\"Media Wallet class hash is not configured\");\n const account = new Account({\n provider: input.provider,\n address: input.ownerAddress,\n signer: input.privateKeyHex,\n cairoVersion: \"1\",\n });\n const { transaction_hash } = await account.deployAccount({\n classHash,\n constructorCalldata: ownerConstructorCalldata(input.ownerPubKey),\n addressSalt: 0,\n contractAddress: input.ownerAddress,\n });\n return { transactionHash: transaction_hash };\n}\n\nexport async function waitUntilDeployed(\n provider: ProviderInterface,\n address: string,\n timeoutMs = 90_000,\n sleep: (ms: number) => Promise<void> = (ms) => new Promise((resolve) => setTimeout(resolve, ms)),\n): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n let wait = 1_000;\n for (;;) {\n if (await isDeployed(provider, address).catch(() => false)) return;\n if (Date.now() >= deadline) {\n throw new Error(\n \"Your wallet was submitted but has not appeared on Starknet yet. Please try again in a moment.\",\n );\n }\n await sleep(wait);\n wait = Math.min(Math.round(wait * 1.5), 5_000);\n }\n}\n\nexport interface DeploymentDeps {\n store: { load(): SealedOwner | null; save(sealed: SealedOwner): void; notifyChange(): void };\n passkey: {\n createOwnerKey(): Promise<{ sealed: SealedOwner; privateKeyHex: string }>;\n unlockOwnerKey(sealed: SealedOwner): Promise<string>;\n };\n provider: () => ProviderInterface;\n deployProxyUrl?: string;\n fetchImpl?: FetchLike;\n deploySponsoredImpl?: typeof deploySponsored;\n deploySelfFundedImpl?: typeof deploySelfFunded;\n waitUntilDeployedImpl?: typeof waitUntilDeployed;\n isDeployedImpl?: typeof isDeployed;\n}\n\nasync function deployWallet(\n deps: DeploymentDeps,\n wallet: { ownerAddress: string; ownerPubKey: string; privateKeyHex: string },\n): Promise<void> {\n const sponsored = deps.deploySponsoredImpl ?? deploySponsored;\n const selfFunded = deps.deploySelfFundedImpl ?? deploySelfFunded;\n\n if (deps.deployProxyUrl) {\n try {\n await sponsored({\n proxyUrl: deps.deployProxyUrl,\n provider: deps.provider(),\n fetchImpl: deps.fetchImpl,\n ...wallet,\n });\n } catch (sponsoredErr) {\n try {\n await selfFunded({ provider: deps.provider(), ...wallet });\n } catch (selfFundedErr) {\n const sponsored = sponsoredErr instanceof Error ? sponsoredErr.message : String(sponsoredErr);\n const selfFunded = selfFundedErr instanceof Error ? selfFundedErr.message : String(selfFundedErr);\n throw new Error(`Sponsored deploy failed: ${sponsored}. Self-funded fallback failed: ${selfFunded}`);\n }\n }\n } else {\n await selfFunded({ provider: deps.provider(), ...wallet });\n }\n\n await (deps.waitUntilDeployedImpl ?? waitUntilDeployed)(deps.provider(), wallet.ownerAddress);\n}\n\nexport async function completeDeployment(\n deps: DeploymentDeps,\n onStep: (step: DeploymentStep) => void,\n options: { forceNew?: boolean } = {},\n): Promise<DeploymentResult> {\n let sealed = options.forceNew ? null : deps.store.load();\n if (sealed && (await (deps.isDeployedImpl ?? isDeployed)(deps.provider(), sealed.address).catch(() => false))) {\n sealed = null;\n }\n let privateKeyHex: string;\n\n if (!sealed) {\n onStep(\"creating-passkey\");\n const created = await deps.passkey.createOwnerKey();\n sealed = created.sealed;\n privateKeyHex = created.privateKeyHex;\n deps.store.save(sealed);\n } else {\n privateKeyHex = await deps.passkey.unlockOwnerKey(sealed);\n }\n\n onStep(\"deploying\");\n await deployWallet(deps, { ownerAddress: sealed.address, ownerPubKey: sealed.ownerPubKey, privateKeyHex });\n\n deps.store.notifyChange();\n return { sealed };\n}\n\nexport interface DeploymentCoordinator {\n run(onStep: (step: DeploymentStep) => void, options?: { forceNew?: boolean }): Promise<DeploymentResult>;\n isDeploying(): boolean;\n}\n\nexport function createDeploymentCoordinator(\n execute: (onStep: (step: DeploymentStep) => void, options: { forceNew?: boolean }) => Promise<DeploymentResult>,\n): DeploymentCoordinator {\n let inFlight: Promise<DeploymentResult> | null = null;\n let currentStep: DeploymentStep | null = null;\n const listeners = new Set<(step: DeploymentStep) => void>();\n\n return {\n run(onStep, options = {}) {\n if (inFlight) {\n if (options.forceNew) {\n return Promise.reject(new Error(\"A wallet setup is already in progress.\"));\n }\n if (currentStep) onStep(currentStep);\n listeners.add(onStep);\n return inFlight.finally(() => listeners.delete(onStep));\n }\n listeners.add(onStep);\n let started: Promise<DeploymentResult>;\n try {\n started = execute((step) => {\n currentStep = step;\n for (const listener of listeners) listener(step);\n }, options);\n } catch (err) {\n listeners.clear();\n return Promise.reject(err);\n }\n const run = started.finally(() => {\n inFlight = null;\n currentStep = null;\n listeners.clear();\n });\n inFlight = run;\n return run;\n },\n isDeploying: () => inFlight !== null,\n };\n}\n","import type { FetchLike } from \"../utils/fetch.js\";\nimport { typedData as starknetTypedData, type Call, type ProviderInterface, type TypedData } from \"starknet\";\nimport { signWithPrivateKey } from \"../starknet/passkey-wallet/crypto.js\";\nimport {\n getEscape,\n getEscapeSecurityPeriod,\n getGuardians,\n getOwners,\n type EscapeInfo,\n type GuardianInfo,\n} from \"../starknet/media-wallet/guardian.js\";\nimport { computeOwnerGuid } from \"../starknet/media-wallet/owners.js\";\nimport { normalizeWalletAddress } from \"./addresses.js\";\nimport { ApiClient } from \"../api/client.js\";\nimport type { CreateWalletManageIntentParams } from \"../types/api.js\";\nimport {\n completeDeployment,\n createDeploymentCoordinator,\n type DeploymentDeps,\n type DeploymentResult,\n type DeploymentStep,\n} from \"./deployment.js\";\nimport type { OwnerStore } from \"./store.js\";\nimport type { PasskeyOwner } from \"./passkey.js\";\nimport type { ExecutedTransaction, SealedOwner, WalletExecutor } from \"./types.js\";\n\nexport interface DeviceEntry {\n guid: string;\n type: GuardianInfo[\"type\"];\n isThisDevice: boolean;\n}\n\nexport function describeDevices(owners: GuardianInfo[], thisDevicePubkey: string): DeviceEntry[] {\n const mine = computeOwnerGuid(thisDevicePubkey);\n return owners.map((owner) => ({\n guid: owner.guid,\n type: owner.type,\n isThisDevice: BigInt(owner.guid) === BigInt(mine),\n }));\n}\n\nexport function canRemoveDevice(devices: DeviceEntry[], guid: string): boolean {\n if (devices.length <= 1) return false;\n return devices.some((device) => BigInt(device.guid) === BigInt(guid));\n}\n\nexport interface MediaWalletConfig {\n store: OwnerStore;\n passkey: PasskeyOwner;\n executor: WalletExecutor;\n provider: () => ProviderInterface;\n unlockTtlMs?: number;\n backendUrl?: string;\n deployProxyUrl?: string;\n fetchImpl?: FetchLike;\n walletIntents?: (params: CreateWalletManageIntentParams) => Promise<{ id: string; calls: Call[] }>;\n}\n\nexport interface MediaWallet {\n store: OwnerStore;\n passkey: PasskeyOwner;\n lock(address: string): void;\n signerFor(sealed: SealedOwner): {\n address: string;\n signTypedData(data: TypedData): Promise<string[]>;\n execute(calls: Call[], opts?: { intentIds?: string[] }): Promise<{ txHash: string }>;\n };\n run(sealed: SealedOwner, calls: Call[], userAddress?: string, intentIds?: string[]): Promise<ExecutedTransaction>;\n getGuardians(address: string): Promise<GuardianInfo[]>;\n getEscape(address: string): Promise<EscapeInfo>;\n getEscapeSecurityPeriod(address: string): Promise<number>;\n setFirstGuardian(sealed: SealedOwner, guardianPubkey: string): Promise<string>;\n triggerEscapeOwner(guardianSealed: SealedOwner, targetAddress: string, newOwnerPubkey: string): Promise<string>;\n completeEscapeOwner(guardianSealed: SealedOwner, targetAddress: string): Promise<string>;\n cancelEscape(sealed: SealedOwner): Promise<string>;\n getOwners(address: string): Promise<GuardianInfo[]>;\n isOwnerOf(accountAddress: string, devicePubkey: string): Promise<boolean>;\n addDevice(sealed: SealedOwner, devicePubkey: string): Promise<string>;\n removeDevice(sealed: SealedOwner, ownerGuid: string): Promise<string>;\n completeDeployment(\n onStep: (step: DeploymentStep) => void,\n options?: { forceNew?: boolean },\n ): Promise<DeploymentResult>;\n isDeploying(): boolean;\n}\n\nexport function createMediaWallet(config: MediaWalletConfig): MediaWallet {\n const ttl = config.unlockTtlMs ?? 20_000;\n const deployments = createDeploymentCoordinator((onStep, options) => {\n const deps: DeploymentDeps = {\n store: config.store,\n passkey: config.passkey,\n provider: config.provider,\n deployProxyUrl: config.deployProxyUrl,\n fetchImpl: config.fetchImpl,\n };\n return completeDeployment(deps, onStep, options);\n });\n const unlockCache = new Map<string, { promise: Promise<string>; timer: ReturnType<typeof setTimeout> }>();\n\n const lock = (address: string): void => {\n const entry = unlockCache.get(address);\n if (!entry) return;\n clearTimeout(entry.timer);\n unlockCache.delete(address);\n };\n\n const unlockOnce = (sealed: SealedOwner): Promise<string> => {\n const existing = unlockCache.get(sealed.address);\n if (existing) return existing.promise;\n const promise = config.passkey.unlockOwnerKey(sealed).catch((err) => {\n lock(sealed.address);\n throw err;\n });\n const timer = setTimeout(() => lock(sealed.address), ttl);\n unlockCache.set(sealed.address, { promise, timer });\n return promise;\n };\n\n const run = async (sealed: SealedOwner, calls: Call[], userAddress?: string, intentIds?: string[]): Promise<ExecutedTransaction> => {\n const privateKeyHex = await unlockOnce(sealed);\n return config.executor.execute({\n userAddress: userAddress ?? sealed.address,\n privateKeyHex,\n calls,\n intentIds,\n });\n };\n\n const walletIntents = config.walletIntents ?? (async (params: CreateWalletManageIntentParams) => {\n if (!config.backendUrl) throw new Error(\"This wallet has no backend url configured\");\n const created = await new ApiClient({ baseUrl: config.backendUrl }).intents.create(\"wallet-manage\", params);\n return created as { id: string; calls: Call[] };\n });\n\n const manage = async (sealed: SealedOwner, params: CreateWalletManageIntentParams): Promise<string> => {\n const intent = await walletIntents(params);\n const { transactionHash } = await run(sealed, intent.calls, params.owner, [intent.id]);\n return transactionHash;\n };\n\n return {\n store: config.store,\n passkey: config.passkey,\n lock,\n\n signerFor(sealed) {\n return {\n address: sealed.address,\n signTypedData: async (data) => {\n const privateKeyHex = await unlockOnce(sealed);\n return signWithPrivateKey(privateKeyHex, starknetTypedData.getMessageHash(data, sealed.address));\n },\n execute: async (calls, opts) => {\n const { transactionHash } = await run(sealed, calls, undefined, opts?.intentIds);\n return { txHash: transactionHash };\n },\n };\n },\n\n run,\n\n getGuardians: (address) => getGuardians(config.provider(), address),\n getEscape: (address) => getEscape(config.provider(), address),\n getEscapeSecurityPeriod: (address) => getEscapeSecurityPeriod(config.provider(), address),\n getOwners: (address) => getOwners(config.provider(), address),\n\n async isOwnerOf(accountAddress, devicePubkey) {\n const owners = await getOwners(config.provider(), accountAddress);\n const guid = BigInt(computeOwnerGuid(devicePubkey));\n return owners.some((owner) => BigInt(owner.guid) === guid);\n },\n\n setFirstGuardian: (sealed, guardianPubkey) => manage(sealed, { owner: sealed.address, action: \"set_first_guardian\", pubkey: guardianPubkey }),\n\n triggerEscapeOwner: (guardianSealed, targetAddress, newOwnerPubkey) =>\n manage(guardianSealed, { owner: normalizeWalletAddress(targetAddress), action: \"trigger_escape\", newOwnerPubkey }),\n\n completeEscapeOwner: (guardianSealed, targetAddress) =>\n manage(guardianSealed, { owner: normalizeWalletAddress(targetAddress), action: \"complete_escape\" }),\n\n cancelEscape: (sealed) => manage(sealed, { owner: sealed.address, action: \"cancel_escape\" }),\n\n addDevice: (sealed, devicePubkey) => manage(sealed, { owner: sealed.address, action: \"add_owner\", pubkey: devicePubkey }),\n\n removeDevice: (sealed, ownerGuid) => manage(sealed, { owner: sealed.address, action: \"remove_owner\", ownerGuid }),\n\n completeDeployment: (onStep, options) => deployments.run(onStep, options),\n isDeploying: () => deployments.isDeploying(),\n };\n}\n","import type { AccountApi } from \"../api/domains/account.js\";\nimport type { CreatedOwner } from \"../wallet/passkey.js\";\nimport type { SealedOwner } from \"../wallet/types.js\";\nimport { normalizeWalletAddress } from \"../wallet/addresses.js\";\n\nexport interface SessionWallet {\n walletAddress: string;\n needsKeySetup: boolean;\n}\n\nexport interface SessionWalletClaimDeps {\n createOwnerKey(): Promise<CreatedOwner>;\n loadOwner(): SealedOwner | null;\n saveOwner(sealed: SealedOwner): void;\n removeOwner(sealed: SealedOwner, ownerGuid: string): Promise<unknown>;\n}\n\nexport async function claimSessionWallet(\n api: { account: Pick<AccountApi, \"setupWalletKey\"> },\n walletAddress: string,\n deps: SessionWalletClaimDeps,\n): Promise<void> {\n const saved = deps.loadOwner();\n const resuming = saved !== null && normalizeWalletAddress(saved.address) === normalizeWalletAddress(walletAddress);\n const sealed = resuming ? saved : { ...(await deps.createOwnerKey()).sealed, address: walletAddress };\n if (!resuming) deps.saveOwner(sealed);\n\n const { removeOwnerGuid } = await api.account.setupWalletKey({ newOwnerPubkey: sealed.ownerPubKey });\n if (removeOwnerGuid) await deps.removeOwner(sealed, removeOwnerGuid);\n}\n"]}
@@ -5,9 +5,10 @@ import { base58, base32 } from '@scure/base';
5
5
 
6
6
  // src/errors.ts
7
7
  var UserFacingError = class extends Error {
8
- constructor(message) {
8
+ constructor(message, options = {}) {
9
9
  super(message);
10
10
  this.name = "UserFacingError";
11
+ this.retryable = options.retryable ?? true;
11
12
  }
12
13
  };
13
14
  var MedialaneError = class extends Error {
@@ -35,12 +36,13 @@ function errorCodeFor(status, path = "") {
35
36
  return "UNKNOWN";
36
37
  }
37
38
  var MedialaneApiError = class extends MedialaneError {
38
- constructor(status, message, retryAfterMs, details, path, serverCode) {
39
+ constructor(status, message, retryAfterMs, details, path, serverCode, requestId) {
39
40
  super(message, errorCodeFor(status, path));
40
41
  this.status = status;
41
42
  this.retryAfterMs = retryAfterMs;
42
43
  this.details = details;
43
44
  this.serverCode = serverCode;
45
+ this.requestId = requestId;
44
46
  this.name = "MedialaneApiError";
45
47
  }
46
48
  };
@@ -205,7 +207,8 @@ async function failureFrom(response, path) {
205
207
  parseRetryAfter(response.headers.get("retry-after")),
206
208
  details,
207
209
  path,
208
- serverCode
210
+ serverCode,
211
+ response.headers.get("x-request-id") ?? void 0
209
212
  );
210
213
  }
211
214
  var Transport = class _Transport {
@@ -928,5 +931,5 @@ function getListableTokens() {
928
931
  }
929
932
 
930
933
  export { ApiClient, DEFAULT_CURRENCY, DeviceKeyMissingError, MedialaneApiError, MedialaneError, PasskeyCancelledError, PasskeyUnsupportedError, STARKNET_COLLECTION_1155_CONTRACT, STARKNET_COLLECTION_721_CONTRACT, STARKNET_CREATOR_COIN_FACTORY_CONTRACT, STARKNET_DATA_TOKENIZATION_721_CONTRACT, STARKNET_DROP_FACTORY_CONTRACT, STARKNET_DROP_FACTORY_START_BLOCK, STARKNET_GENESIS_MINT_CONTRACT, STARKNET_GENESIS_NFT_URI, STARKNET_IP_CLUB_FACTORY_CONTRACT, STARKNET_IP_SPONSORSHIP_CONTRACT, STARKNET_IP_TICKETS_FACTORY_CONTRACT, STARKNET_MARKETPLACE_1155_CONTRACT, STARKNET_MARKETPLACE_721_CONTRACT, STARKNET_MEDIAWALLET_CLASS_HASH, STARKNET_NFTCOMMENTS_CONTRACT, STARKNET_POP_FACTORY_CONTRACT, STARKNET_POP_FACTORY_START_BLOCK, SUPPORTED_TOKENS, UserFacingError, formatAmount, getListableTokens, getTokenByAddress, getTokenBySymbol, normalizeAddress, normalizeHash, parseAmount, shortenAddress };
931
- //# sourceMappingURL=chunk-KGAGWULG.js.map
932
- //# sourceMappingURL=chunk-KGAGWULG.js.map
934
+ //# sourceMappingURL=chunk-GENBWVGK.js.map
935
+ //# sourceMappingURL=chunk-GENBWVGK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/utils/address.ts","../src/utils/retry.ts","../src/api/transport.ts","../src/api/domains/orders.ts","../src/api/domains/tokens.ts","../src/api/domains/collections.ts","../src/api/domains/activity.ts","../src/api/domains/intents.ts","../src/api/domains/metadata.ts","../src/api/domains/creators.ts","../src/api/domains/account.ts","../src/api/domains/portal.ts","../src/api/domains/business.ts","../src/api/domains/remix.ts","../src/api/domains/coins.ts","../src/api/domains/drops.ts","../src/api/domains/sponsorship.ts","../src/api/domains/rewards.ts","../src/api/domains/platform.ts","../src/api/domains/chainReads.ts","../src/api/client.ts","../src/wallet/passkey-errors.ts","../src/constants.ts","../src/utils/token.ts"],"names":[],"mappings":"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","file":"chunk-GENBWVGK.js","sourcesContent":["import type { MedialaneErrorCode } from \"./types/errors.js\";\n\nexport class UserFacingError extends Error {\n readonly retryable: boolean;\n\n constructor(message: string, options: { retryable?: boolean } = {}) {\n super(message);\n this.name = \"UserFacingError\";\n this.retryable = options.retryable ?? true;\n }\n}\n\nexport class MedialaneError extends Error {\n constructor(\n message: string,\n public readonly code: MedialaneErrorCode = \"UNKNOWN\",\n public readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"MedialaneError\";\n }\n}\n\nconst RESOURCE_NOT_FOUND: ReadonlyArray<readonly [string, MedialaneErrorCode]> = [\n [\"/v1/orders\", \"ORDER_NOT_FOUND\"],\n [\"/v1/tokens\", \"TOKEN_NOT_FOUND\"],\n [\"/v1/collections\", \"COLLECTION_NOT_FOUND\"],\n [\"/v1/intents\", \"INTENT_NOT_FOUND\"],\n];\n\nexport function errorCodeFor(status: number, path = \"\"): MedialaneErrorCode {\n if (status === 404) {\n return RESOURCE_NOT_FOUND.find(([prefix]) => path.startsWith(prefix))?.[1] ?? \"NOT_FOUND\";\n }\n if (status === 429) return \"RATE_LIMITED\";\n if (status === 410) return \"INTENT_EXPIRED\";\n if (status === 401 || status === 403) return \"UNAUTHORIZED\";\n if (status === 400) return \"INVALID_PARAMS\";\n return \"UNKNOWN\";\n}\n\nexport class MedialaneApiError extends MedialaneError {\n constructor(\n public readonly status: number,\n message: string,\n public readonly retryAfterMs?: number,\n public readonly details?: unknown,\n path?: string,\n public readonly serverCode?: string,\n public readonly requestId?: string,\n ) {\n super(message, errorCodeFor(status, path));\n this.name = \"MedialaneApiError\";\n }\n}\n\nexport function parseRetryAfter(value: string | null): number | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds)) return Math.max(0, seconds * 1000);\n const date = Date.parse(value);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n return undefined;\n}\n","import { keccak_256 } from \"@noble/hashes/sha3.js\";\nimport { base32, base58 } from \"@scure/base\";\nimport type { Chain } from \"../chains.js\";\n\nexport function normalizeAddress(chain: Chain, address: string): string {\n switch (chain) {\n case \"STARKNET\":\n return normalizeStarknet(address);\n case \"ETHEREUM\":\n case \"BASE\":\n return normalizeEvm(address);\n case \"SOLANA\":\n return normalizeSolana(address);\n case \"STELLAR\":\n return normalizeStellar(address);\n case \"BITCOIN\":\n throw new Error(\"BITCOIN address normalization not implemented\");\n }\n}\n\nfunction normalizeStarknet(address: string): string {\n try {\n const hex = BigInt(address).toString(16);\n return \"0x\" + hex.padStart(64, \"0\").toLowerCase();\n } catch {\n throw new Error(`Invalid STARKNET address: \"${address}\"`);\n }\n}\n\nfunction normalizeEvm(address: string): string {\n const m = /^0x([0-9a-fA-F]{40})$/.exec(address);\n if (!m) throw new Error(`Invalid ETHEREUM/BASE address: \"${address}\"`);\n const lower = m[1].toLowerCase();\n\n const hash = keccak_256(new TextEncoder().encode(lower));\n let out = \"0x\";\n for (let i = 0; i < 40; i++) {\n const nibble = (hash[i >> 1]! >> (i % 2 === 0 ? 4 : 0)) & 0xf;\n out += nibble >= 8 ? lower[i]!.toUpperCase() : lower[i];\n }\n return out;\n}\n\nfunction normalizeSolana(address: string): string {\n try {\n const bytes = base58.decode(address);\n if (bytes.length !== 32) throw new Error(\"not a 32-byte key\");\n return address;\n } catch {\n throw new Error(`Invalid SOLANA address: \"${address}\"`);\n }\n}\n\nconst STELLAR_VERSION_BYTES = new Set([6 << 3, 2 << 3]);\n\nfunction normalizeStellar(address: string): string {\n const upper = address.toUpperCase();\n if (!/^[GC][A-Z2-7]{55}$/.test(upper)) {\n throw new Error(`Invalid STELLAR address: \"${address}\"`);\n }\n let decoded: Uint8Array;\n try {\n decoded = base32.decode(upper);\n } catch {\n throw new Error(`Invalid STELLAR address: \"${address}\"`);\n }\n if (decoded.length !== 35 || !STELLAR_VERSION_BYTES.has(decoded[0]!)) {\n throw new Error(`Invalid STELLAR address: \"${address}\"`);\n }\n const payload = decoded.subarray(0, 33);\n const checksum = decoded[33]! | (decoded[34]! << 8);\n if (crc16xmodem(payload) !== checksum) {\n throw new Error(`Invalid STELLAR address: \"${address}\"`);\n }\n return upper;\n}\n\nfunction crc16xmodem(bytes: Uint8Array): number {\n let crc = 0;\n for (const byte of bytes) {\n crc ^= byte << 8;\n for (let i = 0; i < 8; i++) {\n crc = crc & 0x8000 ? ((crc << 1) ^ 0x1021) & 0xffff : (crc << 1) & 0xffff;\n }\n }\n return crc;\n}\n\ndeclare const canonicalHashBrand: unique symbol;\n\nexport type CanonicalHash = string & { readonly [canonicalHashBrand]: true };\n\nexport function normalizeHash(hash: string): CanonicalHash {\n try {\n const hex = BigInt(hash).toString(16);\n return (\"0x\" + hex.padStart(64, \"0\").toLowerCase()) as CanonicalHash;\n } catch {\n throw new Error(`Invalid hash: \"${hash}\"`);\n }\n}\n\nexport function shortenAddress(chain: Chain, address: string, chars = 4): string {\n const norm = normalizeAddress(chain, address);\n return `${norm.slice(0, chars + 2)}...${norm.slice(-chars)}`;\n}\n","import { MedialaneApiError } from \"../errors.js\";\n\nexport interface RetryOptions {\n maxAttempts?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n}\n\nconst DEFAULT_MAX_ATTEMPTS = 3;\nconst DEFAULT_BASE_DELAY_MS = 300;\nconst DEFAULT_MAX_DELAY_MS = 5000;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function isRetryableFor(method: string, err: unknown): boolean {\n if (err instanceof MedialaneApiError && err.status === 429) return true;\n const isRead = method === \"GET\" || method === \"HEAD\";\n if (!isRead) return false;\n return (err instanceof MedialaneApiError && err.status >= 500) || err instanceof TypeError;\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n opts?: RetryOptions,\n method = \"GET\",\n): Promise<T> {\n const maxAttempts = opts?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n const baseDelayMs = opts?.baseDelayMs ?? DEFAULT_BASE_DELAY_MS;\n const maxDelayMs = opts?.maxDelayMs ?? DEFAULT_MAX_DELAY_MS;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (err) {\n lastError = err;\n\n if (!isRetryableFor(method, err) || attempt === maxAttempts - 1) {\n throw err;\n }\n\n const retryAfterMs = err instanceof MedialaneApiError ? err.retryAfterMs : undefined;\n const backoff = baseDelayMs * Math.pow(2, attempt) + Math.random() * baseDelayMs;\n const delay = Math.min(retryAfterMs ?? backoff, maxDelayMs);\n await sleep(delay);\n }\n }\n\n throw lastError;\n}\n","import type { Chain } from \"../chains.js\";\nimport { MedialaneApiError, parseRetryAfter } from \"../errors.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\nimport type { FetchLike } from \"../utils/fetch.js\";\nimport { withRetry, type RetryOptions } from \"../utils/retry.js\";\n\nexport type BearerSource = string | (() => string | undefined);\n\nexport interface TransportOptions {\n baseUrl: string;\n apiKey?: string;\n bearer?: BearerSource;\n retry?: RetryOptions;\n chain?: Chain;\n fetch?: FetchLike;\n}\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\nexport interface RequestOptions {\n method?: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\";\n body?: unknown;\n query?: Record<string, QueryValue>;\n bearer?: string;\n absent?: readonly number[];\n}\n\nexport function queryString(query: Record<string, QueryValue> | undefined): string {\n if (!query) return \"\";\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null && value !== \"\") params.set(key, String(value));\n }\n const qs = params.toString();\n return qs ? `?${qs}` : \"\";\n}\n\nasync function failureFrom(response: Response, path: string): Promise<MedialaneApiError> {\n const text = await response.text().catch(() => response.statusText);\n let message = `Request failed with status ${response.status}`;\n let details: unknown = text;\n let serverCode: string | undefined;\n try {\n const body = JSON.parse(text) as { error?: unknown; code?: unknown };\n if (typeof body.error === \"string\" && body.error.trim() !== \"\") message = body.error;\n if (typeof body.code === \"string\") serverCode = body.code;\n details = body;\n } catch {\n details = text;\n }\n return new MedialaneApiError(\n response.status,\n message,\n parseRetryAfter(response.headers.get(\"retry-after\")),\n details,\n path,\n serverCode,\n response.headers.get(\"x-request-id\") ?? undefined,\n );\n}\n\nexport class Transport {\n readonly chain: Chain;\n private readonly baseUrl: string;\n private readonly headers: Record<string, string>;\n\n constructor(private readonly options: TransportOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n this.headers = options.apiKey ? { \"x-api-key\": options.apiKey } : {};\n this.chain = options.chain ?? \"STARKNET\";\n }\n\n withBearer(bearer: BearerSource | undefined): Transport {\n return new Transport({ ...this.options, bearer });\n }\n\n settings(): TransportOptions {\n return this.options;\n }\n\n addr(address: string): string {\n return normalizeAddress(this.chain, address);\n }\n\n async request<T>(path: string, opts: RequestOptions = {}): Promise<T> {\n const method = opts.method ?? \"GET\";\n const url = `${this.baseUrl}${path}${queryString(opts.query)}`;\n const headers: Record<string, string> = { ...this.headers };\n const token = opts.bearer ?? this.defaultBearer();\n if (token) headers.Authorization = `Bearer ${token}`;\n\n let body: BodyInit | undefined;\n if (opts.body instanceof FormData) {\n body = opts.body;\n } else if (opts.body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n body = JSON.stringify(opts.body);\n }\n\n const absent = (status: number) => opts.absent?.includes(status) === true;\n const response = await withRetry(\n async () => {\n const res = await (this.options.fetch ?? globalThis.fetch)(url, { method, headers, body });\n if (!res.ok && !absent(res.status)) throw await failureFrom(res, path);\n return res;\n },\n this.options.retry,\n method,\n );\n\n if (absent(response.status)) return null as T;\n return response.json() as Promise<T>;\n }\n\n get<T>(path: string, query?: Record<string, QueryValue>): Promise<T> {\n return this.request<T>(path, { query });\n }\n\n post<T>(path: string, body?: unknown, opts: Omit<RequestOptions, \"method\" | \"body\"> = {}): Promise<T> {\n return this.request<T>(path, { ...opts, method: \"POST\", body: body ?? {} });\n }\n\n patch<T>(path: string, body: unknown, opts: Omit<RequestOptions, \"method\" | \"body\"> = {}): Promise<T> {\n return this.request<T>(path, { ...opts, method: \"PATCH\", body });\n }\n\n delete<T>(path: string, body?: unknown, opts: Omit<RequestOptions, \"method\" | \"body\"> = {}): Promise<T> {\n return this.request<T>(path, { ...opts, method: \"DELETE\", body });\n }\n\n find<T>(path: string, opts: Omit<RequestOptions, \"absent\"> & { also?: readonly number[] } = {}): Promise<T | null> {\n const { also, ...rest } = opts;\n return this.request<T | null>(path, { ...rest, absent: [404, ...(also ?? [])] });\n }\n\n private defaultBearer(): string | undefined {\n const source = this.options.bearer;\n return typeof source === \"function\" ? source() : source;\n }\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiOrder, ApiOrdersQuery, ApiCounterOffersQuery, ApiResponse } from \"../../types/api.js\";\n\nexport interface OrdersApi {\n list(query?: ApiOrdersQuery): Promise<ApiResponse<ApiOrder[]>>;\n get(orderHash: string): Promise<ApiOrder>;\n forToken(contract: string, tokenId: string): Promise<ApiResponse<ApiOrder[]>>;\n receivedBy(address: string, opts?: { page?: number; limit?: number }): Promise<ApiResponse<ApiOrder[]>>;\n byUser(address: string, opts?: { page?: number; limit?: number }): Promise<ApiResponse<ApiOrder[]>>;\n counterOffers(query: ApiCounterOffersQuery): Promise<ApiResponse<ApiOrder[]>>;\n}\n\nexport function createOrdersApi(t: Transport): OrdersApi {\n return {\n list(query = {}) {\n return t.get(\"/v1/orders\", {\n status: query.status,\n collection: query.collection,\n currency: query.currency,\n sort: query.sort,\n page: query.page,\n limit: query.limit,\n offerer: query.offerer ? t.addr(query.offerer) : undefined,\n minPrice: query.minPrice,\n maxPrice: query.maxPrice,\n chain: query.chain,\n });\n },\n async get(orderHash) {\n return (await t.get<ApiResponse<ApiOrder>>(`/v1/orders/${orderHash}`)).data;\n },\n forToken(contract, tokenId) {\n return t.get(`/v1/orders/token/${t.addr(contract)}/${tokenId}`);\n },\n receivedBy(address, opts = {}) {\n return t.get(`/v1/orders/received/${t.addr(address)}`, { page: opts.page ?? 1, limit: opts.limit ?? 50 });\n },\n byUser(address, opts = {}) {\n return t.get(`/v1/orders/user/${t.addr(address)}`, { page: opts.page ?? 1, limit: opts.limit ?? 20 });\n },\n counterOffers(query) {\n return t.get(\"/v1/orders/counter-offers\", {\n originalOrderHash: query.originalOrderHash,\n sellerAddress: query.sellerAddress,\n page: query.page,\n limit: query.limit,\n });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type {\n ApiActivity,\n ApiComment,\n ApiPublicRemix,\n ApiResponse,\n ApiToken,\n ApiTokenBalance,\n ApiTokensQuery,\n} from \"../../types/api.js\";\n\ninterface Paging {\n page?: number;\n limit?: number;\n}\n\nexport interface TokensApi {\n list(query?: ApiTokensQuery): Promise<ApiResponse<ApiToken[]>>;\n get(contract: string, tokenId: string, opts?: { wait?: boolean }): Promise<ApiToken>;\n balance(contract: string, tokenId: string, owner: string): Promise<ApiTokenBalance>;\n ownedBy(address: string, opts?: Paging): Promise<ApiResponse<ApiToken[]>>;\n history(contract: string, tokenId: string, opts?: Paging): Promise<ApiResponse<ApiActivity[]>>;\n comments(contract: string, tokenId: string, opts?: Paging): Promise<ApiResponse<ApiComment[]>>;\n remixes(contract: string, tokenId: string, opts?: Paging): Promise<ApiResponse<ApiPublicRemix[]>>;\n}\n\nexport function createTokensApi(t: Transport): TokensApi {\n return {\n list(query = {}) {\n return t.get(\"/v1/tokens\", {\n page: query.page,\n limit: query.limit,\n sort: query.sort,\n ipType: query.ipType,\n derivatives: query.derivatives,\n });\n },\n async get(contract, tokenId, opts = {}) {\n const res = await t.get<ApiResponse<ApiToken>>(`/v1/tokens/${contract}/${tokenId}`, opts.wait ? { wait: \"true\" } : undefined);\n return res.data;\n },\n async balance(contract, tokenId, owner) {\n return (await t.get<ApiResponse<ApiTokenBalance>>(`/v1/tokens/${contract}/${tokenId}/balances/${t.addr(owner)}`)).data;\n },\n ownedBy(address, opts = {}) {\n return t.get(`/v1/tokens/owned/${t.addr(address)}`, { page: opts.page ?? 1, limit: opts.limit ?? 20 });\n },\n history(contract, tokenId, opts = {}) {\n return t.get(`/v1/tokens/${contract}/${tokenId}/history`, { page: opts.page ?? 1, limit: opts.limit ?? 20 });\n },\n comments(contract, tokenId, opts = {}) {\n return t.get(`/v1/tokens/${t.addr(contract)}/${tokenId}/comments`, { page: opts.page, limit: opts.limit });\n },\n remixes(contract, tokenId, opts = {}) {\n return t.get(`/v1/tokens/${t.addr(contract)}/${tokenId}/remixes`, { page: opts.page, limit: opts.limit });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type {\n ApiCollection,\n ApiCollectionClaim,\n ApiCollectionProfile,\n ApiCollectionSlugClaim,\n ApiCollectionsListQuery,\n ApiResponse,\n ApiToken,\n CollectionTokensSort,\n UpdateCollectionProfileInput,\n} from \"../../types/api.js\";\n\nexport interface GatedContent {\n title: string;\n url: string;\n type: string;\n}\n\nexport interface CollectionsApi {\n list(query?: ApiCollectionsListQuery): Promise<ApiResponse<ApiCollection[]>>;\n get(contract: string): Promise<ApiCollection>;\n findBySlug(slug: string): Promise<ApiCollection | null>;\n tokens(contract: string, opts?: { page?: number; limit?: number; sort?: CollectionTokensSort }): Promise<ApiResponse<ApiToken[]>>;\n register(contractAddress: string): Promise<ApiCollection>;\n findProfile(contractAddress: string): Promise<ApiCollectionProfile | null>;\n updateProfile(contractAddress: string, data: UpdateCollectionProfileInput): Promise<ApiCollectionProfile>;\n findGatedContent(contractAddress: string): Promise<GatedContent | null>;\n claim(contractAddress: string, walletAddress: string): Promise<{ verified: boolean; collection?: ApiCollection; reason?: string }>;\n requestClaim(params: { contractAddress: string; walletAddress?: string; email: string; notes?: string }): Promise<{ claim: ApiCollectionClaim }>;\n slugAvailability(slug: string): Promise<{ available: boolean; reason?: string }>;\n submitSlugClaim(contractAddress: string, slug: string, notifyEmail?: string): Promise<{ claim: ApiCollectionSlugClaim }>;\n mySlugClaims(): Promise<{ claims: ApiCollectionSlugClaim[] }>;\n}\n\nconst slugOf = (slug: string) => encodeURIComponent(slug.toLowerCase().trim());\n\nexport function createCollectionsApi(t: Transport): CollectionsApi {\n return {\n list(query = {}) {\n return t.get(\"/v1/collections\", {\n page: query.page,\n limit: query.limit,\n owner: query.owner ? t.addr(query.owner) : undefined,\n service: query.service,\n sort: query.sort,\n isFeatured: query.isFeatured,\n hideEmpty: query.hideEmpty,\n standard: query.standard,\n chain: query.chain,\n });\n },\n async get(contract) {\n return (await t.get<ApiResponse<ApiCollection>>(`/v1/collections/${t.addr(contract)}`)).data;\n },\n async findBySlug(slug) {\n const res = await t.find<{ data: ApiCollection }>(`/v1/collections/by-slug/${slugOf(slug)}`);\n return res?.data ?? null;\n },\n tokens(contract, opts = {}) {\n return t.get(`/v1/collections/${t.addr(contract)}/tokens`, {\n page: opts.page ?? 1,\n limit: opts.limit ?? 20,\n sort: opts.sort ?? \"recent\",\n });\n },\n async register(contractAddress) {\n return (await t.post<{ data: ApiCollection }>(\"/v1/collections/register\", { contractAddress })).data;\n },\n findProfile(contractAddress) {\n return t.find(`/v1/collections/${t.addr(contractAddress)}/profile`);\n },\n updateProfile(contractAddress, data) {\n return t.patch(`/v1/collections/${t.addr(contractAddress)}/profile`, data);\n },\n findGatedContent(contractAddress) {\n return t.find(`/v1/collections/${t.addr(contractAddress)}/gated-content`, { also: [403] });\n },\n claim(contractAddress, walletAddress) {\n return t.post(\"/v1/collections/claim\", { contractAddress, walletAddress });\n },\n requestClaim(params) {\n return t.post(\"/v1/collections/claim/request\", params);\n },\n slugAvailability(slug) {\n return t.get(`/v1/collection-slug-claims/check/${slugOf(slug)}`);\n },\n submitSlugClaim(contractAddress, slug, notifyEmail) {\n return t.post(\"/v1/collection-slug-claims\", { contractAddress, slug, notifyEmail });\n },\n mySlugClaims() {\n return t.get(\"/v1/collection-slug-claims/me\");\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiActivitiesQuery, ApiActivity, ApiResponse, ApiSearchResult, ApiWalletActivity, ChainFilter } from \"../../types/api.js\";\n\nexport interface ActivityApi {\n list(query?: ApiActivitiesQuery): Promise<ApiResponse<ApiActivity[]>>;\n byAddress(address: string, opts?: { page?: number; limit?: number }): Promise<ApiResponse<ApiActivity[]>>;\n wallet(address: string, chain?: \"STARKNET\"): Promise<ApiResponse<ApiWalletActivity[]>>;\n}\n\nexport interface SearchApi {\n (q: string, limit?: number, chain?: ChainFilter): Promise<ApiResponse<ApiSearchResult> & { query: string }>;\n}\n\nexport function createActivityApi(t: Transport): ActivityApi {\n return {\n list(query = {}) {\n return t.get(\"/v1/activities\", {\n type: query.type,\n contract: query.contract,\n page: query.page,\n limit: query.limit,\n chain: query.chain,\n });\n },\n byAddress(address, opts = {}) {\n return t.get(`/v1/activities/${t.addr(address)}`, { page: opts.page ?? 1, limit: opts.limit ?? 20 });\n },\n wallet(address, chain = \"STARKNET\") {\n return t.get(\"/v1/wallet-activity\", { address: t.addr(address), chain });\n },\n };\n}\n\nexport function createSearchApi(t: Transport): SearchApi {\n return (q, limit = 10, chain) => t.get(\"/v1/search\", { q, limit, chain });\n}\n","import type { Transport } from \"../transport.js\";\nimport { intentPath, type IntentKind } from \"../../contract/intents.js\";\nimport type {\n ApiCheckoutIntentResult,\n ApiIntent,\n ApiIntentCreated,\n ApiTxSyncResult,\n CreateCheckoutIntentParams,\n IntentParamsByKind,\n} from \"../../types/api.js\";\n\nexport interface IntentsApi {\n create<K extends IntentKind>(kind: K, params: IntentParamsByKind[K], opts?: { bearer?: string }): Promise<ApiIntentCreated>;\n checkout(params: CreateCheckoutIntentParams): Promise<ApiCheckoutIntentResult[]>;\n get(id: string): Promise<ApiIntent>;\n submitSignature(id: string, signature: string[]): Promise<ApiIntent>;\n confirm(id: string, txHash: string): Promise<ApiIntent>;\n syncTransaction(txHash: string): Promise<ApiTxSyncResult>;\n}\n\nexport function createIntentsApi(t: Transport): IntentsApi {\n return {\n async create(kind, params, opts) {\n const res = await t.post<{ data: ApiIntentCreated }>(intentPath(kind), params, { bearer: opts?.bearer });\n return res.data;\n },\n async checkout(params) {\n const res = await t.post<{ data: ApiCheckoutIntentResult[] }>(intentPath(\"checkout\"), params);\n return res.data;\n },\n async get(id) {\n return (await t.get<{ data: ApiIntent }>(`/v1/intents/${id}`)).data;\n },\n async submitSignature(id, signature) {\n return (await t.patch<{ data: ApiIntent }>(`/v1/intents/${id}/signature`, { signature })).data;\n },\n async confirm(id, txHash) {\n return (await t.patch<{ data: ApiIntent }>(`/v1/intents/${id}/confirm`, { txHash })).data;\n },\n async syncTransaction(txHash) {\n return (await t.post<{ data: ApiTxSyncResult }>(\"/v1/tx/sync\", { txHash })).data;\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiMetadataSignedUrl, ApiMetadataUpload, ApiResponse } from \"../../types/api.js\";\n\nexport interface MetadataApi {\n signedUrl(kind?: \"image\" | \"document\" | \"media\"): Promise<ApiResponse<ApiMetadataSignedUrl>>;\n upload(metadata: Record<string, unknown>): Promise<ApiResponse<ApiMetadataUpload>>;\n uploadDirectory(files: { name: string; content: unknown }[]): Promise<{ cid: string; baseUri: string }>;\n resolve(uri: string): Promise<ApiResponse<unknown>>;\n uploadFile(file: File): Promise<ApiResponse<ApiMetadataUpload>>;\n}\n\nexport function createMetadataApi(t: Transport): MetadataApi {\n return {\n signedUrl(kind) {\n return t.get(\"/v1/metadata/signed-url\", { kind });\n },\n upload(metadata) {\n return t.post(\"/v1/metadata/upload\", metadata);\n },\n async uploadDirectory(files) {\n return (await t.post<{ data: { cid: string; baseUri: string } }>(\"/v1/metadata/upload-directory\", { files })).data;\n },\n resolve(uri) {\n return t.get(\"/v1/metadata/resolve\", { uri });\n },\n uploadFile(file) {\n const formData = new FormData();\n formData.append(\"file\", file);\n return t.request(\"/v1/metadata/upload-file\", { method: \"POST\", body: formData });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiCreatorListResult, ApiCreatorProfile, ApiUsernameClaim } from \"../../types/api.js\";\n\nexport interface CreatorsApi {\n list(opts?: { search?: string; page?: number; limit?: number }): Promise<ApiCreatorListResult>;\n findProfile(walletAddress: string): Promise<ApiCreatorProfile | null>;\n findByUsername(username: string): Promise<ApiCreatorProfile | null>;\n updateProfile(\n walletAddress: string,\n data: Partial<Omit<ApiCreatorProfile, \"walletAddress\" | \"chain\" | \"updatedAt\">>,\n ): Promise<ApiCreatorProfile>;\n isHidden(wallet: string): Promise<boolean>;\n myUsernameClaim(): Promise<{ username: string | null; claim: ApiUsernameClaim | null }>;\n usernameAvailability(username: string): Promise<{ available: boolean; reason?: string }>;\n submitUsernameClaim(username: string, notifyEmail?: string): Promise<ApiUsernameClaim>;\n}\n\nexport function createCreatorsApi(t: Transport): CreatorsApi {\n return {\n list(opts = {}) {\n return t.get(\"/v1/creators\", { search: opts.search, page: opts.page || undefined, limit: opts.limit || undefined });\n },\n findProfile(walletAddress) {\n return t.find(`/v1/creators/${t.addr(walletAddress)}/profile`);\n },\n findByUsername(username) {\n return t.find(`/v1/creators/by-username/${encodeURIComponent(username.toLowerCase().trim())}`);\n },\n updateProfile(walletAddress, data) {\n return t.patch(`/v1/creators/${t.addr(walletAddress)}/profile`, data);\n },\n async isHidden(wallet) {\n return (await t.get<{ isHidden: boolean }>(`/v1/creators/${t.addr(wallet)}/hidden`)).isHidden;\n },\n myUsernameClaim() {\n return t.get(\"/v1/username-claims/me\");\n },\n usernameAvailability(username) {\n return t.get(`/v1/username-claims/check/${encodeURIComponent(username)}`);\n },\n async submitUsernameClaim(username, notifyEmail) {\n const res = await t.post<{ claim: ApiUsernameClaim }>(\"/v1/username-claims\", {\n username,\n ...(notifyEmail ? { notifyEmail } : {}),\n });\n return res.claim;\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiChain, ApiUserWallet } from \"../../types/api.js\";\n\nexport interface RegisteredUser {\n accountId: string;\n publicId: string;\n walletAddress: string;\n chain: string;\n provider: string;\n createdAt: string;\n}\n\nexport interface AccountApi {\n registerUser(params: { walletAddress: string; walletType?: string; chain?: ApiChain }): Promise<RegisteredUser>;\n upsertMyWallet(options?: { walletType?: string; chain?: ApiChain; email?: string }): Promise<ApiUserWallet>;\n findMyWallet(): Promise<ApiUserWallet | null>;\n changeMyEmail(email: string): Promise<{ email: string }>;\n sessionWallet(): Promise<{ walletAddress: string; needsKeySetup: boolean } | null>;\n setupWalletKey(params: { newOwnerPubkey: string }): Promise<{ walletAddress: string; removeOwnerGuid: string | null }>;\n generateWallet(newWalletSiwsToken: string): Promise<{ walletAddress: string }>;\n emailExists(email: string): Promise<boolean>;\n requestEmailCode(email: string): Promise<void>;\n registerEmailAccount(email: string): Promise<void>;\n verifyEmailCode(email: string, code: string): Promise<void>;\n confirmEmail(token: string): Promise<{ email: string }>;\n}\n\nexport function createAccountApi(t: Transport): AccountApi {\n return {\n registerUser(params) {\n return t.post(\"/v1/users/register\", params);\n },\n upsertMyWallet(options = {}) {\n const body: Record<string, string> = { walletType: options.walletType ?? \"UNKNOWN\" };\n if (options.chain) body.chain = options.chain;\n if (options.email) body.email = options.email;\n return t.post(\"/v1/users/me\", body);\n },\n findMyWallet() {\n return t.find(\"/v1/users/me\");\n },\n changeMyEmail(email) {\n return t.post(\"/v1/users/me/email\", { email });\n },\n async sessionWallet() {\n const body = await t.post<{ walletAddress?: string | null; needsKeySetup?: boolean }>(\"/v1/users/me/wallet\", {});\n return body.walletAddress ? { walletAddress: body.walletAddress, needsKeySetup: body.needsKeySetup === true } : null;\n },\n setupWalletKey(params) {\n return t.post(\"/v1/users/me/wallet/key\", params);\n },\n generateWallet(newWalletSiwsToken) {\n return t.post(\"/v1/users/me/generate-wallet\", { newWalletSiwsToken });\n },\n async emailExists(email) {\n return (await t.get<{ exists: boolean }>(\"/v1/auth/email/exists\", { email })).exists;\n },\n async requestEmailCode(email) {\n await t.post(\"/v1/auth/email/request-code\", { email });\n },\n async registerEmailAccount(email) {\n await t.post(\"/v1/auth/email/register-account\", { email });\n },\n async verifyEmailCode(email, code) {\n await t.post(\"/v1/auth/email/verify-code\", { email, code });\n },\n async confirmEmail(token) {\n const body = await t.post<{ ok: boolean; email: string }>(\"/v1/auth/email/confirm\", { token });\n return { email: body.email };\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiKeyConfirmation } from \"../../starknet/api-key-confirmation.js\";\nimport type {\n ApiCreditPayment,\n ApiFundingInstructions,\n ApiFundingIntent,\n ApiFundingMethod,\n ApiFundingSubmit,\n ApiPortalKey,\n ApiPortalKeyCreated,\n ApiPortalMe,\n ApiPortalSpend,\n ApiPricing,\n ApiResponse,\n} from \"../../types/api.js\";\n\nexport interface FundingApi {\n methods(): Promise<ApiFundingMethod[]>;\n create(input: { method: string; params: Record<string, unknown> }): Promise<ApiFundingIntent>;\n get(id: string): Promise<ApiFundingIntent>;\n challenge(id: string, payer: string): Promise<{ typedData: unknown }>;\n authorize(id: string, input: { payer: string; signature: string[] }): Promise<{ instructions: ApiFundingInstructions }>;\n submit(id: string, txHash: string): Promise<ApiFundingSubmit>;\n cancel(id: string): Promise<{ status: string }>;\n}\n\nexport interface PortalApi {\n me(): Promise<ApiPortalMe>;\n apiKeys(): Promise<ApiPortalKey[]>;\n createApiKey(input: { label?: string } | undefined, confirmation: ApiKeyConfirmation): Promise<ApiPortalKeyCreated>;\n deleteApiKey(id: string, confirmation: ApiKeyConfirmation): Promise<{ id: string }>;\n creditHistory(): Promise<ApiCreditPayment[]>;\n spend(): Promise<ApiPortalSpend>;\n checkDeposit(txHash: string): Promise<{ deposits: number }>;\n pricing(): Promise<ApiPricing>;\n funding: FundingApi;\n}\n\nexport function createPortalApi(t: Transport): PortalApi {\n const data = async <T>(promise: Promise<ApiResponse<T>>): Promise<T> => (await promise).data;\n const fundingPath = (id: string) => `/v1/portal/funding/${encodeURIComponent(id)}`;\n return {\n me: () => data(t.get(\"/v1/portal/me\")),\n apiKeys: () => data(t.get(\"/v1/portal/keys\")),\n createApiKey: (input, confirmation) => data(t.post(\"/v1/portal/keys\", { ...(input ?? {}), confirmation })),\n deleteApiKey: (id, confirmation) => data(t.delete(`/v1/portal/keys/${id}`, { confirmation })),\n creditHistory: () => data(t.get(\"/v1/portal/credits/history\")),\n spend: () => data(t.get(\"/v1/portal/credits/spend\")),\n checkDeposit: (txHash) => data(t.post(\"/v1/portal/credits/check\", { txHash })),\n pricing: () => t.get(\"/v1/pricing\"),\n funding: {\n methods: () => data(t.get(\"/v1/portal/funding/methods\")),\n create: (input) => data(t.post(\"/v1/portal/funding\", { method: input.method, params: input.params })),\n get: (id) => data(t.get(fundingPath(id))),\n challenge: (id, payer) => data(t.post(`${fundingPath(id)}/challenge`, { payer })),\n authorize: (id, input) => data(t.post(`${fundingPath(id)}/authorize`, { payer: input.payer, signature: input.signature })),\n submit: (id, txHash) => data(t.post(`${fundingPath(id)}/submit`, { txHash })),\n cancel: (id) => data(t.post(`${fundingPath(id)}/cancel`, {})),\n },\n };\n}\n","import type { z } from \"zod\";\nimport type { Transport } from \"../transport.js\";\nimport type * as provisioning from \"../../contract/provisioning.js\";\nimport type { ApiBusinessProvisioning, ApiEmissionResult, ApiResponse, EmissionParams } from \"../../types/api.js\";\n\nexport type ProvisioningResult = ApiResponse<ApiBusinessProvisioning> & { reusedExistingWallet?: boolean };\n\nexport interface BusinessApi {\n emit(params: EmissionParams): Promise<ApiEmissionResult>;\n registerProvisioning(params: z.input<typeof provisioning.provisioningRegisterSchema>): Promise<ProvisioningResult>;\n}\n\nexport function createBusinessApi(t: Transport): BusinessApi {\n return {\n async emit(params) {\n return (await t.post<ApiResponse<ApiEmissionResult>>(\"/v1/business/issuance/emission\", params)).data;\n },\n registerProvisioning(params) {\n return t.post(\"/v1/business/provisioning\", { chain: params.chain ?? \"STARKNET\", email: params.email });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type {\n ApiRemixOffer,\n ApiRemixOffersQuery,\n AutoRemixOfferParams,\n ConfirmRemixOfferParams,\n ConfirmSelfRemixParams,\n CreateRemixOfferParams,\n ApiResponse,\n} from \"../../types/api.js\";\n\nexport interface RemixApi {\n submit(params: CreateRemixOfferParams): Promise<ApiRemixOffer>;\n submitAuto(params: AutoRemixOfferParams): Promise<ApiRemixOffer>;\n confirmSelf(params: ConfirmSelfRemixParams): Promise<ApiRemixOffer>;\n list(query: ApiRemixOffersQuery): Promise<ApiResponse<ApiRemixOffer[]>>;\n get(id: string): Promise<ApiRemixOffer>;\n confirm(id: string, params: ConfirmRemixOfferParams): Promise<ApiRemixOffer>;\n reject(id: string): Promise<ApiRemixOffer>;\n extend(id: string, days: number): Promise<ApiRemixOffer>;\n}\n\nexport function createRemixApi(t: Transport): RemixApi {\n const one = async (promise: Promise<ApiResponse<ApiRemixOffer>>): Promise<ApiRemixOffer> => (await promise).data;\n return {\n submit: (params) => one(t.post(\"/v1/remix-offers\", params)),\n submitAuto: (params) => one(t.post(\"/v1/remix-offers/auto\", params)),\n confirmSelf: (params) => one(t.post(\"/v1/remix-offers/self/confirm\", params)),\n list: (query) =>\n t.get(\"/v1/remix-offers\", { role: query.role, status: query.status, page: query.page, limit: query.limit }),\n get: (id) => one(t.get(`/v1/remix-offers/${id}`)),\n confirm: (id, params) => one(t.post(`/v1/remix-offers/${id}/confirm`, params)),\n reject: (id) => one(t.post(`/v1/remix-offers/${id}/reject`, {})),\n extend: (id, days) => one(t.post(`/v1/remix-offers/${id}/extend`, { days })),\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type {\n ApiCoin,\n ApiCoinClaimResult,\n ApiCoinPrices,\n ApiCoinsQuery,\n ApiCollectionClaim,\n ApiResponse,\n} from \"../../types/api.js\";\n\nexport interface CoinsApi {\n list(opts?: ApiCoinsQuery): Promise<ApiResponse<ApiCoin[]>>;\n get(contract: string): Promise<ApiCoin>;\n prices(): Promise<ApiCoinPrices>;\n claim(coinAddress: string): Promise<ApiCoinClaimResult>;\n claims(status?: string): Promise<ApiResponse<ApiCollectionClaim[]>>;\n updateProfile(contract: string, data: { image?: string | null; description?: string | null }): Promise<ApiCoin>;\n sync(coinAddress: string, owner?: string): Promise<ApiCoin>;\n}\n\nexport function createCoinsApi(t: Transport): CoinsApi {\n return {\n list(opts = {}) {\n return t.get(\"/v1/coins\", {\n page: opts.page || undefined,\n limit: opts.limit || undefined,\n service: opts.service,\n sort: opts.sort,\n creator: opts.creator ? t.addr(opts.creator) : undefined,\n chain: opts.chain,\n });\n },\n async get(contract) {\n return (await t.get<{ data: ApiCoin }>(`/v1/coins/${t.addr(contract)}`)).data;\n },\n async prices() {\n return (await t.get<ApiResponse<ApiCoinPrices>>(\"/v1/coins/prices\")).data;\n },\n claim(coinAddress) {\n return t.post(\"/v1/coins/claim\", { coinAddress });\n },\n claims(status = \"PENDING\") {\n return t.get(\"/v1/coins/claims\", { status });\n },\n async updateProfile(contract, data) {\n return (await t.patch<ApiResponse<ApiCoin>>(`/v1/coins/${t.addr(contract)}`, data)).data;\n },\n async sync(coinAddress, owner) {\n return (await t.post<{ data: ApiCoin }>(\"/v1/coins/sync\", { coinAddress, ...(owner ? { owner } : {}) })).data;\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiDrop, ApiDropFee, ApiDropListStatus, ApiDropMint, ApiResponse } from \"../../types/api.js\";\n\nexport interface DropsApi {\n fee(): Promise<ApiDropFee>;\n list(query?: { status?: ApiDropListStatus; organizer?: string; page?: number; limit?: number }): Promise<ApiResponse<ApiDrop[]>>;\n find(contract: string): Promise<ApiDrop | null>;\n mints(contract: string, opts?: { page?: number; limit?: number }): Promise<ApiResponse<ApiDropMint[]>>;\n}\n\nexport function createDropsApi(t: Transport): DropsApi {\n return {\n async fee() {\n return (await t.get<{ data: ApiDropFee }>(\"/v1/drops/fee\")).data;\n },\n list(query = {}) {\n return t.get(\"/v1/drops\", {\n status: query.status,\n organizer: query.organizer ? t.addr(query.organizer) : undefined,\n page: query.page,\n limit: query.limit,\n });\n },\n async find(contract) {\n const res = await t.find<{ data: ApiDrop }>(`/v1/drops/${t.addr(contract)}`);\n return res?.data ?? null;\n },\n mints(contract, opts = {}) {\n return t.get(`/v1/drops/${t.addr(contract)}/mints`, { page: opts.page, limit: opts.limit });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type {\n ApiResponse,\n ApiSponsorshipBid,\n ApiSponsorshipLicense,\n ApiSponsorshipLicensesQuery,\n ApiSponsorshipOffer,\n ApiSponsorshipOffersQuery,\n ApiSponsorshipProposal,\n ApiSponsorshipProposalsQuery,\n} from \"../../types/api.js\";\n\nexport interface SponsorshipApi {\n offers(query?: ApiSponsorshipOffersQuery): Promise<ApiResponse<ApiSponsorshipOffer[]>>;\n findOffer(offerId: string): Promise<ApiSponsorshipOffer | null>;\n bids(offerId: string): Promise<ApiSponsorshipBid[]>;\n proposals(query?: ApiSponsorshipProposalsQuery): Promise<ApiResponse<ApiSponsorshipProposal[]>>;\n findProposal(proposalId: string): Promise<ApiSponsorshipProposal | null>;\n licenses(query?: ApiSponsorshipLicensesQuery): Promise<ApiResponse<ApiSponsorshipLicense[]>>;\n}\n\nexport function createSponsorshipApi(t: Transport): SponsorshipApi {\n return {\n offers(query = {}) {\n return t.get(\"/v1/sponsorship/offers\", {\n limit: query.limit ?? 50,\n nftContract: query.nftContract,\n author: query.author,\n owner: query.owner,\n open: query.open,\n });\n },\n async findOffer(offerId) {\n const res = await t.find<{ data: ApiSponsorshipOffer }>(`/v1/sponsorship/offers/${encodeURIComponent(offerId)}`);\n return res?.data ?? null;\n },\n async bids(offerId) {\n return (await t.get<{ data: ApiSponsorshipBid[] }>(`/v1/sponsorship/offers/${encodeURIComponent(offerId)}/bids`)).data;\n },\n proposals(query = {}) {\n return t.get(\"/v1/sponsorship/proposals\", {\n limit: query.limit ?? 50,\n nftContract: query.nftContract,\n proposer: query.proposer,\n owner: query.owner,\n open: query.open,\n });\n },\n async findProposal(proposalId) {\n const res = await t.find<{ data: ApiSponsorshipProposal }>(`/v1/sponsorship/proposals/${encodeURIComponent(proposalId)}`);\n return res?.data ?? null;\n },\n licenses(query = {}) {\n return t.get(\"/v1/sponsorship/licenses\", { limit: query.limit ?? 50, holder: query.holder, author: query.author });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type {\n ApiPointEvent,\n ApiResponse,\n ApiRewardsBatchEntry,\n ApiRewardsConfig,\n ApiRewardsLeaderboardEntry,\n ApiUserRewards,\n} from \"../../types/api.js\";\n\nexport interface RewardsApi {\n get(address: string): Promise<ApiUserRewards>;\n leaderboard(opts?: { page?: number; limit?: number }): Promise<ApiResponse<ApiRewardsLeaderboardEntry[]>>;\n events(address: string, opts?: { page?: number; limit?: number }): Promise<ApiResponse<ApiPointEvent[]>>;\n config(): Promise<ApiRewardsConfig>;\n batch(addresses: string[]): Promise<ApiRewardsBatchEntry[]>;\n}\n\nexport function createRewardsApi(t: Transport): RewardsApi {\n return {\n async get(address) {\n return (await t.get<{ data: ApiUserRewards }>(`/v1/rewards/${t.addr(address)}`)).data;\n },\n leaderboard(opts = {}) {\n return t.get(\"/v1/rewards\", { page: opts.page ?? 1, limit: opts.limit ?? 50 });\n },\n events(address, opts = {}) {\n return t.get(`/v1/rewards/${t.addr(address)}/events`, { page: opts.page ?? 1, limit: opts.limit ?? 20 });\n },\n async config() {\n return (await t.get<{ data: ApiRewardsConfig }>(\"/v1/rewards/config\")).data;\n },\n async batch(addresses) {\n if (addresses.length === 0) return [];\n const res = await t.get<{ data: ApiRewardsBatchEntry[] }>(\"/v1/rewards/batch\", {\n addresses: addresses.map((a) => t.addr(a)).join(\",\"),\n });\n return res.data;\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { ApiPlatformStats, ApiSubmitReport, ApiSwapQuote, ApiSwapQuoteRequest } from \"../../types/api.js\";\n\nexport interface PlatformApi {\n stats(): Promise<ApiPlatformStats>;\n swapQuote(body: ApiSwapQuoteRequest): Promise<ApiSwapQuote>;\n submitReport(report: ApiSubmitReport): Promise<void>;\n}\n\nexport function createPlatformApi(t: Transport): PlatformApi {\n return {\n async stats() {\n return (await t.get<{ data: ApiPlatformStats }>(\"/v1/stats\")).data;\n },\n async swapQuote(body) {\n return (await t.post<{ quote: ApiSwapQuote }>(\"/v1/swap/quote\", body)).quote;\n },\n async submitReport(report) {\n const targetContract = report.targetContract ? t.addr(report.targetContract) : undefined;\n const targetAddress = report.targetAddress ? t.addr(report.targetAddress) : undefined;\n let targetKey: string | null = null;\n if (report.targetType === \"TOKEN\" && targetContract && report.targetTokenId) {\n targetKey = `TOKEN:${targetContract}:${report.targetTokenId}`;\n } else if (report.targetType === \"COLLECTION\" && targetContract) {\n targetKey = `COLLECTION:${targetContract}`;\n } else if (report.targetType === \"CREATOR\" && targetAddress) {\n targetKey = `CREATOR:${targetAddress}`;\n } else if (report.targetType === \"COMMENT\" && report.targetId) {\n targetKey = `COMMENT::${report.targetId}`;\n }\n if (!targetKey) throw new Error(`A ${report.targetType} report needs its target`);\n await t.post(\"/v1/reports\", { ...report, targetKey, targetContract, targetAddress });\n },\n };\n}\n","import type { Transport } from \"../transport.js\";\nimport type { CreatorCoinGuarantees } from \"../../starknet/services/creatorCoin.js\";\nimport type { PopClaimInfo } from \"../../starknet/pop-claim.js\";\nimport type { DropOnchain } from \"../../starknet/drop-state.js\";\nimport { dropStateFromWire, type DropStateWire } from \"../../contract/chainReads.js\";\nimport type { ApiIpNftTokenData, ApiTierOnchain } from \"../../types/api.js\";\n\nexport interface ChainReadsApi {\n ticket(contract: string, tokenId: string): Promise<ApiTierOnchain>;\n ticketCount(contract: string): Promise<number>;\n clubMembershipCount(contract: string): Promise<number>;\n clubMembership(contract: string, tokenId: string): Promise<ApiTierOnchain>;\n isClubMember(contract: string, tokenId: string, wallet: string): Promise<boolean>;\n ipNftTokenData(contract: string, tokenId: string): Promise<ApiIpNftTokenData | null>;\n coinGuarantees(contract: string): Promise<CreatorCoinGuarantees | null>;\n popClaimInfo(collection: string): Promise<PopClaimInfo | null>;\n dropState(contract: string): Promise<DropOnchain | null>;\n}\n\nexport function createChainReadsApi(t: Transport): ChainReadsApi {\n const data = async <T>(path: string): Promise<T> => (await t.get<{ data: T }>(path)).data;\n return {\n ticket: (contract, tokenId) => data(`/v1/tickets/${t.addr(contract)}/${tokenId}`),\n ticketCount: async (contract) => (await data<{ count: number }>(`/v1/tickets/${t.addr(contract)}/count`)).count,\n clubMembershipCount: async (contract) => (await data<{ count: number }>(`/v1/club/${t.addr(contract)}/count`)).count,\n clubMembership: (contract, tokenId) => data(`/v1/club/${t.addr(contract)}/${tokenId}`),\n isClubMember: async (contract, tokenId, wallet) =>\n (await data<{ isMember: boolean }>(`/v1/club/${t.addr(contract)}/${tokenId}/member/${t.addr(wallet)}`)).isMember,\n ipNftTokenData: (contract, tokenId) => data(`/v1/ipnft/${t.addr(contract)}/${tokenId}`),\n coinGuarantees: (contract) => data(`/v1/coins/${t.addr(contract)}/guarantees`),\n popClaimInfo: (collection) => data(`/v1/pop/${t.addr(collection)}/claim-info`),\n async dropState(contract) {\n const wire = await data<DropStateWire | null>(`/v1/drops/${t.addr(contract)}/state`);\n return wire ? dropStateFromWire(wire) : null;\n },\n };\n}\n","import { MedialaneApiError, parseRetryAfter } from \"../errors.js\";\nimport { Transport, type BearerSource, type TransportOptions } from \"./transport.js\";\nimport { createOrdersApi, type OrdersApi } from \"./domains/orders.js\";\nimport { createTokensApi, type TokensApi } from \"./domains/tokens.js\";\nimport { createCollectionsApi, type CollectionsApi } from \"./domains/collections.js\";\nimport { createActivityApi, createSearchApi, type ActivityApi, type SearchApi } from \"./domains/activity.js\";\nimport { createIntentsApi, type IntentsApi } from \"./domains/intents.js\";\nimport { createMetadataApi, type MetadataApi } from \"./domains/metadata.js\";\nimport { createCreatorsApi, type CreatorsApi } from \"./domains/creators.js\";\nimport { createAccountApi, type AccountApi } from \"./domains/account.js\";\nimport { createPortalApi, type PortalApi } from \"./domains/portal.js\";\nimport { createBusinessApi, type BusinessApi } from \"./domains/business.js\";\nimport { createRemixApi, type RemixApi } from \"./domains/remix.js\";\nimport { createCoinsApi, type CoinsApi } from \"./domains/coins.js\";\nimport { createDropsApi, type DropsApi } from \"./domains/drops.js\";\nimport { createSponsorshipApi, type SponsorshipApi } from \"./domains/sponsorship.js\";\nimport { createRewardsApi, type RewardsApi } from \"./domains/rewards.js\";\nimport { createPlatformApi, type PlatformApi } from \"./domains/platform.js\";\nimport { createChainReadsApi, type ChainReadsApi } from \"./domains/chainReads.js\";\n\nexport { MedialaneApiError, parseRetryAfter };\n\nexport type ApiClientOptions = TransportOptions;\n\nexport class ApiClient {\n private readonly transport: Transport;\n\n readonly orders: OrdersApi;\n readonly tokens: TokensApi;\n readonly collections: CollectionsApi;\n readonly activity: ActivityApi;\n readonly search: SearchApi;\n readonly intents: IntentsApi;\n readonly metadata: MetadataApi;\n readonly creators: CreatorsApi;\n readonly account: AccountApi;\n readonly portal: PortalApi;\n readonly business: BusinessApi;\n readonly remix: RemixApi;\n readonly coins: CoinsApi;\n readonly drops: DropsApi;\n readonly sponsorship: SponsorshipApi;\n readonly rewards: RewardsApi;\n readonly platform: PlatformApi;\n readonly chainReads: ChainReadsApi;\n\n constructor(options: ApiClientOptions) {\n this.transport = new Transport(options);\n const t = this.transport;\n this.orders = createOrdersApi(t);\n this.tokens = createTokensApi(t);\n this.collections = createCollectionsApi(t);\n this.activity = createActivityApi(t);\n this.search = createSearchApi(t);\n this.intents = createIntentsApi(t);\n this.metadata = createMetadataApi(t);\n this.creators = createCreatorsApi(t);\n this.account = createAccountApi(t);\n this.portal = createPortalApi(t);\n this.business = createBusinessApi(t);\n this.remix = createRemixApi(t);\n this.coins = createCoinsApi(t);\n this.drops = createDropsApi(t);\n this.sponsorship = createSponsorshipApi(t);\n this.rewards = createRewardsApi(t);\n this.platform = createPlatformApi(t);\n this.chainReads = createChainReadsApi(t);\n }\n\n withBearer(bearer: BearerSource | undefined): ApiClient {\n return new ApiClient({ ...this.transport.settings(), bearer });\n }\n}\n","export class PasskeyCancelledError extends Error {\n constructor(message = \"Passkey prompt was cancelled.\") {\n super(message);\n this.name = \"PasskeyCancelledError\";\n }\n}\n\nexport class DeviceKeyMissingError extends Error {\n constructor() {\n super(\"This browser no longer holds the wallet key. Recover the wallet with its recovery key.\");\n this.name = \"DeviceKeyMissingError\";\n }\n}\n\nexport type PasskeyUnsupportedReason = \"no-webauthn\" | \"no-prf\";\n\nexport class PasskeyUnsupportedError extends Error {\n readonly reason: PasskeyUnsupportedReason;\n constructor(reason: PasskeyUnsupportedReason) {\n super(\n reason === \"no-webauthn\"\n ? \"Passkeys are not available in this environment.\"\n : \"This passkey did not return a PRF secret, so it cannot seal a wallet key.\",\n );\n this.name = \"PasskeyUnsupportedError\";\n this.reason = reason;\n }\n}\n","import { getCoordinates } from \"./chains.js\";\n\nconst SN = getCoordinates(\"STARKNET\");\n\nexport const STARKNET_MARKETPLACE_721_CONTRACT = SN.marketplace721;\nexport const STARKNET_MARKETPLACE_1155_CONTRACT = SN.marketplace1155;\n\nexport const STARKNET_COLLECTION_721_CONTRACT = SN.collection721;\nexport const STARKNET_DATA_TOKENIZATION_721_CONTRACT = SN.dataTokenization721;\nexport const STARKNET_COLLECTION_1155_CONTRACT = SN.collection1155;\n\nexport const STARKNET_POP_FACTORY_CONTRACT = SN.popFactory;\nexport const STARKNET_POP_FACTORY_START_BLOCK = SN.popFactoryStartBlock;\nexport const STARKNET_DROP_FACTORY_CONTRACT = SN.dropFactory;\nexport const STARKNET_DROP_FACTORY_START_BLOCK = SN.dropFactoryStartBlock;\nexport const STARKNET_NFTCOMMENTS_CONTRACT = SN.nftComments;\n\nexport const STARKNET_IP_TICKETS_FACTORY_CONTRACT = SN.ipTicketsFactory;\nexport const STARKNET_IP_CLUB_FACTORY_CONTRACT = SN.ipClubFactory;\nexport const STARKNET_IP_SPONSORSHIP_CONTRACT = SN.ipSponsorship;\n\nexport const STARKNET_MEDIAWALLET_CLASS_HASH = SN.mediaWalletClassHash;\n\nexport const STARKNET_CREATOR_COIN_FACTORY_CONTRACT = SN.creatorCoinFactory;\n\nexport const STARKNET_GENESIS_MINT_CONTRACT = SN.genesisMint;\nexport const STARKNET_GENESIS_NFT_URI = \"ipfs://bafkreiag6wzov7migmxwx3wrtudvbx4ajrlbjopqw7uni7nn2nsxv4eykm\";\n\nexport const SUPPORTED_TOKENS = [\n {\n\n symbol: \"USDC\",\n address:\n \"0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb\",\n decimals: 6,\n listable: true,\n },\n {\n symbol: \"USDT\",\n address:\n \"0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8\",\n decimals: 6,\n listable: true,\n },\n {\n symbol: \"ETH\",\n address:\n \"0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7\",\n decimals: 18,\n listable: true,\n },\n {\n symbol: \"STRK\",\n address:\n \"0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d\",\n decimals: 18,\n listable: true,\n },\n {\n symbol: \"WBTC\",\n address:\n \"0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac\",\n decimals: 8,\n listable: true,\n },\n] as const;\n\nexport type SupportedTokenSymbol = (typeof SUPPORTED_TOKENS)[number][\"symbol\"];\n\nexport const DEFAULT_CURRENCY: SupportedTokenSymbol = \"USDC\";\n","import { SUPPORTED_TOKENS } from \"../constants.js\";\n\nexport type SupportedToken = (typeof SUPPORTED_TOKENS)[number];\n\nexport function parseAmount(human: string, decimals: number): string {\n const [whole, frac = \"\"] = human.split(\".\");\n const fracPadded = frac.padEnd(decimals, \"0\").slice(0, decimals);\n return (BigInt(whole) * BigInt(10) ** BigInt(decimals) + BigInt(fracPadded)).toString();\n}\n\nexport function formatAmount(raw: string, decimals: number): string {\n const value = BigInt(raw);\n const factor = 10n ** BigInt(decimals);\n const whole = value / factor;\n const remainder = value % factor;\n const fractional = remainder.toString().padStart(decimals, \"0\").replace(/0+$/, \"\");\n return fractional ? `${whole}.${fractional}` : whole.toString();\n}\n\nexport function getTokenByAddress(address: string | null | undefined): SupportedToken | undefined {\n if (typeof address !== \"string\" || address.trim() === \"\") return undefined;\n\n let target: bigint | null = null;\n try {\n target = BigInt(address);\n } catch {\n target = null;\n }\n return SUPPORTED_TOKENS.find((t) => {\n if (target !== null) {\n try {\n return BigInt(t.address) === target;\n } catch {\n\n }\n }\n return t.address.toLowerCase() === address.toLowerCase();\n });\n}\n\nexport function getTokenBySymbol(symbol: string | null | undefined): SupportedToken | undefined {\n if (typeof symbol !== \"string\") return undefined;\n const upper = symbol.toUpperCase();\n return SUPPORTED_TOKENS.find((t) => t.symbol === upper);\n}\n\nexport function getListableTokens(): ReadonlyArray<SupportedToken> {\n return SUPPORTED_TOKENS.filter((t) => t.listable);\n}\n"]}