@medialane/sdk 0.208.0 → 0.211.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 { UserFacingError, STARKNET_MEDIAWALLET_CLASS_HASH, normalizeAddress, getTokenBySymbol, ApiClient, PasskeyCancelledError, PasskeyUnsupportedError, DeviceKeyMissingError } from './chunk-7QPV7UQU.js';
1
+ import { UserFacingError, STARKNET_MEDIAWALLET_CLASS_HASH, normalizeAddress, getTokenBySymbol, ApiClient, PasskeyCancelledError, PasskeyUnsupportedError, DeviceKeyMissingError } from './chunk-3SIT2PCD.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';
@@ -632,6 +632,7 @@ function createPasskeyOwner(config) {
632
632
  }
633
633
  };
634
634
  }
635
+ var GUARDIAN_WALLET_BUSY = "This can't go through right now. Please try again in a moment.";
635
636
  function accountFor(provider, address, privateKeyHex) {
636
637
  return new Account({ provider, address, signer: privateKeyHex, cairoVersion: "1" });
637
638
  }
@@ -657,10 +658,22 @@ function selfFundedExecutor(deps) {
657
658
  }
658
659
  function sponsoredExecutor(deps) {
659
660
  const fallback = deps.fallback ?? selfFundedExecutor(deps);
661
+ const guardians = deps.guardians ?? ((address) => getGuardians(deps.provider(), address));
662
+ const hasGuardian = async (address) => {
663
+ try {
664
+ return (await guardians(address)).length > 0;
665
+ } catch {
666
+ return false;
667
+ }
668
+ };
669
+ const refuseSelfFundingWithGuardian = async (address) => {
670
+ if (await hasGuardian(address)) throw new UserFacingError(GUARDIAN_WALLET_BUSY);
671
+ };
660
672
  return {
661
673
  async execute(input) {
662
674
  const { userAddress, privateKeyHex, calls, intentIds } = input;
663
675
  if (!intentIds?.length) {
676
+ await refuseSelfFundingWithGuardian(userAddress);
664
677
  const consented2 = await deps.consent.request({ address: userAddress, calls });
665
678
  if (!consented2) throw new UserFacingError("This action can't be sponsored");
666
679
  return fallback.execute(input);
@@ -674,15 +687,25 @@ function sponsoredExecutor(deps) {
674
687
  { intentIds }
675
688
  );
676
689
  if (result.status === "sponsored") return { transactionHash: result.transactionHash };
690
+ await refuseSelfFundingWithGuardian(userAddress);
677
691
  const consented = await deps.consent.request({ address: userAddress, calls });
678
692
  if (!consented) throw new UserFacingError(result.reason);
679
693
  return fallback.execute(input);
680
694
  }
681
695
  };
682
696
  }
697
+ var SponsoredDeployError = class extends Error {
698
+ constructor(message, status, code) {
699
+ super(message);
700
+ this.status = status;
701
+ this.code = code;
702
+ this.name = "SponsoredDeployError";
703
+ }
704
+ };
705
+ var isAccountRefusal = (err) => err instanceof SponsoredDeployError && (err.status === 401 || err.status === 409);
683
706
  async function describeFailure(res, fallback) {
684
707
  const body = await res.json().catch(() => null);
685
- throw new Error(body?.error || fallback);
708
+ throw new SponsoredDeployError(body?.error || fallback, res.status, body?.code);
686
709
  }
687
710
  async function deploySponsored(input) {
688
711
  const doFetch = input.fetchImpl ?? fetch;
@@ -710,7 +733,7 @@ async function deploySponsored(input) {
710
733
  const executeRes = await doFetch(`${base}/execute`, {
711
734
  method: "POST",
712
735
  headers: { "Content-Type": "application/json" },
713
- body: JSON.stringify({ ownerAddress: input.ownerAddress, typedData, signature, deployment, calls })
736
+ body: JSON.stringify({ ownerAddress: input.ownerAddress, typedData, signature, deployment, calls, replace: input.replace === true })
714
737
  });
715
738
  if (!executeRes.ok) {
716
739
  await describeFailure(executeRes, "We couldn't complete your wallet deployment. Please try again.");
@@ -749,7 +772,7 @@ async function waitUntilDeployed(provider, address, timeoutMs = 9e4, sleep = (ms
749
772
  wait = Math.min(Math.round(wait * 1.5), 5e3);
750
773
  }
751
774
  }
752
- async function deployWallet(deps, wallet) {
775
+ async function deployWallet(deps, wallet, replace) {
753
776
  const sponsored = deps.deploySponsoredImpl ?? deploySponsored;
754
777
  const selfFunded = deps.deploySelfFundedImpl ?? deploySelfFunded;
755
778
  if (deps.deployProxyUrl) {
@@ -758,9 +781,11 @@ async function deployWallet(deps, wallet) {
758
781
  proxyUrl: deps.deployProxyUrl,
759
782
  provider: deps.provider(),
760
783
  fetchImpl: deps.fetchImpl,
784
+ replace,
761
785
  ...wallet
762
786
  });
763
787
  } catch (sponsoredErr) {
788
+ if (replace || isAccountRefusal(sponsoredErr)) throw sponsoredErr;
764
789
  try {
765
790
  await selfFunded({ provider: deps.provider(), ...wallet });
766
791
  } catch (selfFundedErr) {
@@ -774,9 +799,17 @@ async function deployWallet(deps, wallet) {
774
799
  }
775
800
  await (deps.waitUntilDeployedImpl ?? waitUntilDeployed)(deps.provider(), wallet.ownerAddress);
776
801
  }
802
+ async function unfinishedReplacement(deps) {
803
+ const pending = deps.store.loadPending();
804
+ if (!pending) return null;
805
+ const deployed = await (deps.isDeployedImpl ?? isDeployed)(deps.provider(), pending.address).catch(() => true);
806
+ return deployed ? null : pending;
807
+ }
777
808
  async function completeDeployment(deps, onStep, options = {}) {
778
- let sealed = options.forceNew ? null : deps.store.load();
779
- if (sealed && await (deps.isDeployedImpl ?? isDeployed)(deps.provider(), sealed.address).catch(() => false)) {
809
+ const pending = await unfinishedReplacement(deps);
810
+ const replacing = options.replace === true || pending !== null;
811
+ let sealed = replacing ? pending : deps.store.load();
812
+ if (!replacing && sealed && await (deps.isDeployedImpl ?? isDeployed)(deps.provider(), sealed.address).catch(() => false)) {
780
813
  sealed = null;
781
814
  }
782
815
  let privateKeyHex;
@@ -785,12 +818,17 @@ async function completeDeployment(deps, onStep, options = {}) {
785
818
  const created = await deps.passkey.createOwnerKey();
786
819
  sealed = created.sealed;
787
820
  privateKeyHex = created.privateKeyHex;
788
- deps.store.save(sealed);
821
+ if (replacing) deps.store.savePending(sealed);
822
+ else deps.store.save(sealed);
789
823
  } else {
790
824
  privateKeyHex = await deps.passkey.unlockOwnerKey(sealed);
791
825
  }
792
826
  onStep("deploying");
793
- await deployWallet(deps, { ownerAddress: sealed.address, ownerPubKey: sealed.ownerPubKey, privateKeyHex });
827
+ await deployWallet(deps, { ownerAddress: sealed.address, ownerPubKey: sealed.ownerPubKey, privateKeyHex }, replacing);
828
+ if (replacing) {
829
+ deps.store.save(sealed);
830
+ deps.store.clearPending();
831
+ }
794
832
  deps.store.notifyChange();
795
833
  return { sealed };
796
834
  }
@@ -801,7 +839,7 @@ function createDeploymentCoordinator(execute) {
801
839
  return {
802
840
  run(onStep, options = {}) {
803
841
  if (inFlight) {
804
- if (options.forceNew) {
842
+ if (options.replace) {
805
843
  return Promise.reject(new Error("A wallet setup is already in progress."));
806
844
  }
807
845
  if (currentStep) onStep(currentStep);
@@ -968,6 +1006,6 @@ async function turnOnRecovery(api, wallet, sealed) {
968
1006
  await wallet.setFirstGuardian(sealed, status.guardianPubkey);
969
1007
  }
970
1008
 
971
- 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, finishSessionRecovery, generateStarkKeyPair, getEscape, getEscapeSecurityPeriod, getGuardians, getOwners, indexedDbDeviceKeys, isDeployed, isValidStarknetAddress, normalizeWalletAddress, ownerConstructorCalldata, parseAccountAddress, parsePairingPayload, parseRecoveryKey, sealPrivateKey, selfFundedExecutor, signWithPrivateKey, sponsoredExecutor, starkKeyPairFromPrivateKey, startSessionRecovery, turnOnRecovery, unsealPrivateKey, waitUntilDeployed };
972
- //# sourceMappingURL=chunk-MK7OLAZD.js.map
973
- //# sourceMappingURL=chunk-MK7OLAZD.js.map
1009
+ export { GUARDIAN_WALLET_BUSY, InvalidPairingPayloadError, InvalidRecoveryKeyError, InvalidStarkPrivateKeyError, SponsoredCallRejectedError, SponsoredDeployError, 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, finishSessionRecovery, generateStarkKeyPair, getEscape, getEscapeSecurityPeriod, getGuardians, getOwners, indexedDbDeviceKeys, isAccountRefusal, isDeployed, isValidStarknetAddress, normalizeWalletAddress, ownerConstructorCalldata, parseAccountAddress, parsePairingPayload, parseRecoveryKey, sealPrivateKey, selfFundedExecutor, signWithPrivateKey, sponsoredExecutor, starkKeyPairFromPrivateKey, startSessionRecovery, turnOnRecovery, unsealPrivateKey, waitUntilDeployed };
1010
+ //# sourceMappingURL=chunk-PVU5AYOO.js.map
1011
+ //# sourceMappingURL=chunk-PVU5AYOO.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","../src/session/wallet-recovery.ts"],"names":["num","hash","ec","consented","starknetTypedData","Account","sponsored","selfFunded","run"],"mappings":"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","file":"chunk-PVU5AYOO.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 loadPending(): SealedOwner | null;\n savePending(sealed: SealedOwner): void;\n clearPending(): 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 loadPending() {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(`${storeKey}:pending`);\n return raw ? (JSON.parse(raw) as SealedOwner) : null;\n } catch {\n return null;\n }\n },\n savePending(sealed) {\n localStorage.setItem(`${storeKey}:pending`, JSON.stringify(sealed));\n },\n clearPending() {\n localStorage.removeItem(`${storeKey}:pending`);\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\";\nimport { getGuardians } from \"../starknet/media-wallet/guardian.js\";\n\nexport const GUARDIAN_WALLET_BUSY = \"This can't go through right now. Please try again in a moment.\";\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 guardians?: (address: string) => Promise<unknown[]>;\n}\n\nexport function sponsoredExecutor(deps: SponsoredDeps): WalletExecutor {\n const fallback = deps.fallback ?? selfFundedExecutor(deps);\n const guardians = deps.guardians ?? ((address: string) => getGuardians(deps.provider(), address));\n const hasGuardian = async (address: string): Promise<boolean> => {\n try {\n return (await guardians(address)).length > 0;\n } catch {\n return false;\n }\n };\n const refuseSelfFundingWithGuardian = async (address: string): Promise<void> => {\n if (await hasGuardian(address)) throw new UserFacingError(GUARDIAN_WALLET_BUSY);\n };\n return {\n async execute(input): Promise<ExecutedTransaction> {\n const { userAddress, privateKeyHex, calls, intentIds } = input;\n if (!intentIds?.length) {\n await refuseSelfFundingWithGuardian(userAddress);\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 await refuseSelfFundingWithGuardian(userAddress);\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\nexport class SponsoredDeployError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly code?: string,\n ) {\n super(message);\n this.name = \"SponsoredDeployError\";\n }\n}\n\nexport const isAccountRefusal = (err: unknown): boolean =>\n err instanceof SponsoredDeployError && (err.status === 401 || err.status === 409);\n\nasync function describeFailure(res: Response, fallback: string): Promise<never> {\n const body = (await res.json().catch(() => null)) as { error?: string; code?: string } | null;\n throw new SponsoredDeployError(body?.error || fallback, res.status, body?.code);\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 replace?: boolean;\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, replace: input.replace === true }),\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: {\n load(): SealedOwner | null;\n save(sealed: SealedOwner): void;\n loadPending(): SealedOwner | null;\n savePending(sealed: SealedOwner): void;\n clearPending(): void;\n notifyChange(): void;\n };\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 replace: boolean,\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 replace,\n ...wallet,\n });\n } catch (sponsoredErr) {\n if (replace || isAccountRefusal(sponsoredErr)) throw 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\nasync function unfinishedReplacement(deps: DeploymentDeps): Promise<SealedOwner | null> {\n const pending = deps.store.loadPending();\n if (!pending) return null;\n const deployed = await (deps.isDeployedImpl ?? isDeployed)(deps.provider(), pending.address).catch(() => true);\n return deployed ? null : pending;\n}\n\nexport async function completeDeployment(\n deps: DeploymentDeps,\n onStep: (step: DeploymentStep) => void,\n options: { replace?: boolean } = {},\n): Promise<DeploymentResult> {\n const pending = await unfinishedReplacement(deps);\n const replacing = options.replace === true || pending !== null;\n let sealed: SealedOwner | null = replacing ? pending : deps.store.load();\n if (!replacing && 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 if (replacing) deps.store.savePending(sealed);\n else 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 }, replacing);\n\n if (replacing) {\n deps.store.save(sealed);\n deps.store.clearPending();\n }\n deps.store.notifyChange();\n return { sealed };\n}\n\nexport interface DeploymentCoordinator {\n run(onStep: (step: DeploymentStep) => void, options?: { replace?: boolean }): Promise<DeploymentResult>;\n isDeploying(): boolean;\n}\n\nexport function createDeploymentCoordinator(\n execute: (onStep: (step: DeploymentStep) => void, options: { replace?: 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.replace) {\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?: { replace?: 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","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\";\nimport { computeOwnerGuid } from \"../starknet/media-wallet/owners.js\";\nimport { UserFacingError } from \"../errors.js\";\n\ntype RecoveryApi = { account: Pick<AccountApi, \"walletRecovery\" | \"startWalletRecovery\" | \"completeWalletRecovery\"> };\n\nexport interface SessionRecoveryDeps {\n createOwnerKey(): Promise<CreatedOwner>;\n loadPending(): SealedOwner | null;\n savePending(sealed: SealedOwner): void;\n clearPending(): void;\n saveOwner(sealed: SealedOwner): void;\n}\n\nconst sameWallet = (a: string, b: string) => normalizeWalletAddress(a) === normalizeWalletAddress(b);\n\nexport async function startSessionRecovery(api: RecoveryApi, walletAddress: string, deps: SessionRecoveryDeps) {\n const saved = deps.loadPending();\n let pending = saved && sameWallet(saved.address, walletAddress) ? saved : null;\n if (!pending) {\n pending = { ...(await deps.createOwnerKey()).sealed, address: walletAddress };\n deps.savePending(pending);\n }\n const current = await api.account.walletRecovery();\n if (current.state !== \"none\" && current.newOwnerGuid !== null && BigInt(current.newOwnerGuid) === BigInt(computeOwnerGuid(pending.ownerPubKey))) {\n return current;\n }\n return api.account.startWalletRecovery({ newOwnerPubkey: pending.ownerPubKey });\n}\n\nexport async function finishSessionRecovery(api: RecoveryApi, walletAddress: string, deps: SessionRecoveryDeps): Promise<void> {\n const saved = deps.loadPending();\n if (!saved || !sameWallet(saved.address, walletAddress)) throw new UserFacingError(\"There is no recovery to finish on this browser\");\n await api.account.completeWalletRecovery({ newOwnerPubkey: saved.ownerPubKey });\n deps.saveOwner(saved);\n deps.clearPending();\n}\n\nexport async function turnOnRecovery(\n api: { account: Pick<AccountApi, \"walletRecovery\"> },\n wallet: { setFirstGuardian(sealed: SealedOwner, guardianPubkey: string): Promise<unknown> },\n sealed: SealedOwner,\n): Promise<void> {\n const status = await api.account.walletRecovery();\n if (status.enabled) return;\n if (!status.guardianPubkey) throw new UserFacingError(\"Recovery is not available right now\");\n await wallet.setFirstGuardian(sealed, status.guardianPubkey);\n}\n"]}
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  var chunkMEJ47LC3_cjs = require('./chunk-MEJ47LC3.cjs');
4
4
  var chunkZVANOWIB_cjs = require('./chunk-ZVANOWIB.cjs');
5
- var chunk4QPF6AZV_cjs = require('./chunk-4QPF6AZV.cjs');
5
+ var chunk3V3L2R5O_cjs = require('./chunk-3V3L2R5O.cjs');
6
6
  var chunkH2NJB3AK_cjs = require('./chunk-H2NJB3AK.cjs');
7
7
  require('./chunk-W76AZ5WC.cjs');
8
8
  require('./chunk-Q7SFCCGT.cjs');
@@ -361,135 +361,135 @@ Object.defineProperty(exports, "verifySiwsToken", {
361
361
  });
362
362
  Object.defineProperty(exports, "ApiClient", {
363
363
  enumerable: true,
364
- get: function () { return chunk4QPF6AZV_cjs.ApiClient; }
364
+ get: function () { return chunk3V3L2R5O_cjs.ApiClient; }
365
365
  });
366
366
  Object.defineProperty(exports, "DEFAULT_CURRENCY", {
367
367
  enumerable: true,
368
- get: function () { return chunk4QPF6AZV_cjs.DEFAULT_CURRENCY; }
368
+ get: function () { return chunk3V3L2R5O_cjs.DEFAULT_CURRENCY; }
369
369
  });
370
370
  Object.defineProperty(exports, "DeviceKeyMissingError", {
371
371
  enumerable: true,
372
- get: function () { return chunk4QPF6AZV_cjs.DeviceKeyMissingError; }
372
+ get: function () { return chunk3V3L2R5O_cjs.DeviceKeyMissingError; }
373
373
  });
374
374
  Object.defineProperty(exports, "MedialaneApiError", {
375
375
  enumerable: true,
376
- get: function () { return chunk4QPF6AZV_cjs.MedialaneApiError; }
376
+ get: function () { return chunk3V3L2R5O_cjs.MedialaneApiError; }
377
377
  });
378
378
  Object.defineProperty(exports, "MedialaneError", {
379
379
  enumerable: true,
380
- get: function () { return chunk4QPF6AZV_cjs.MedialaneError; }
380
+ get: function () { return chunk3V3L2R5O_cjs.MedialaneError; }
381
381
  });
382
382
  Object.defineProperty(exports, "PasskeyCancelledError", {
383
383
  enumerable: true,
384
- get: function () { return chunk4QPF6AZV_cjs.PasskeyCancelledError; }
384
+ get: function () { return chunk3V3L2R5O_cjs.PasskeyCancelledError; }
385
385
  });
386
386
  Object.defineProperty(exports, "PasskeyUnsupportedError", {
387
387
  enumerable: true,
388
- get: function () { return chunk4QPF6AZV_cjs.PasskeyUnsupportedError; }
388
+ get: function () { return chunk3V3L2R5O_cjs.PasskeyUnsupportedError; }
389
389
  });
390
390
  Object.defineProperty(exports, "STARKNET_COLLECTION_1155_CONTRACT", {
391
391
  enumerable: true,
392
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_COLLECTION_1155_CONTRACT; }
392
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_COLLECTION_1155_CONTRACT; }
393
393
  });
394
394
  Object.defineProperty(exports, "STARKNET_COLLECTION_721_CONTRACT", {
395
395
  enumerable: true,
396
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_COLLECTION_721_CONTRACT; }
396
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_COLLECTION_721_CONTRACT; }
397
397
  });
398
398
  Object.defineProperty(exports, "STARKNET_CREATOR_COIN_FACTORY_CONTRACT", {
399
399
  enumerable: true,
400
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_CREATOR_COIN_FACTORY_CONTRACT; }
400
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_CREATOR_COIN_FACTORY_CONTRACT; }
401
401
  });
402
402
  Object.defineProperty(exports, "STARKNET_DATA_TOKENIZATION_721_CONTRACT", {
403
403
  enumerable: true,
404
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_DATA_TOKENIZATION_721_CONTRACT; }
404
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_DATA_TOKENIZATION_721_CONTRACT; }
405
405
  });
406
406
  Object.defineProperty(exports, "STARKNET_DROP_FACTORY_CONTRACT", {
407
407
  enumerable: true,
408
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_DROP_FACTORY_CONTRACT; }
408
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_DROP_FACTORY_CONTRACT; }
409
409
  });
410
410
  Object.defineProperty(exports, "STARKNET_DROP_FACTORY_START_BLOCK", {
411
411
  enumerable: true,
412
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_DROP_FACTORY_START_BLOCK; }
412
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_DROP_FACTORY_START_BLOCK; }
413
413
  });
414
414
  Object.defineProperty(exports, "STARKNET_GENESIS_MINT_CONTRACT", {
415
415
  enumerable: true,
416
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_GENESIS_MINT_CONTRACT; }
416
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_GENESIS_MINT_CONTRACT; }
417
417
  });
418
418
  Object.defineProperty(exports, "STARKNET_GENESIS_NFT_URI", {
419
419
  enumerable: true,
420
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_GENESIS_NFT_URI; }
420
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_GENESIS_NFT_URI; }
421
421
  });
422
422
  Object.defineProperty(exports, "STARKNET_IP_CLUB_FACTORY_CONTRACT", {
423
423
  enumerable: true,
424
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_IP_CLUB_FACTORY_CONTRACT; }
424
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_IP_CLUB_FACTORY_CONTRACT; }
425
425
  });
426
426
  Object.defineProperty(exports, "STARKNET_IP_SPONSORSHIP_CONTRACT", {
427
427
  enumerable: true,
428
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_IP_SPONSORSHIP_CONTRACT; }
428
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_IP_SPONSORSHIP_CONTRACT; }
429
429
  });
430
430
  Object.defineProperty(exports, "STARKNET_IP_TICKETS_FACTORY_CONTRACT", {
431
431
  enumerable: true,
432
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_IP_TICKETS_FACTORY_CONTRACT; }
432
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_IP_TICKETS_FACTORY_CONTRACT; }
433
433
  });
434
434
  Object.defineProperty(exports, "STARKNET_MARKETPLACE_1155_CONTRACT", {
435
435
  enumerable: true,
436
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_MARKETPLACE_1155_CONTRACT; }
436
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_MARKETPLACE_1155_CONTRACT; }
437
437
  });
438
438
  Object.defineProperty(exports, "STARKNET_MARKETPLACE_721_CONTRACT", {
439
439
  enumerable: true,
440
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_MARKETPLACE_721_CONTRACT; }
440
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_MARKETPLACE_721_CONTRACT; }
441
441
  });
442
442
  Object.defineProperty(exports, "STARKNET_NFTCOMMENTS_CONTRACT", {
443
443
  enumerable: true,
444
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_NFTCOMMENTS_CONTRACT; }
444
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_NFTCOMMENTS_CONTRACT; }
445
445
  });
446
446
  Object.defineProperty(exports, "STARKNET_POP_FACTORY_CONTRACT", {
447
447
  enumerable: true,
448
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_POP_FACTORY_CONTRACT; }
448
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_POP_FACTORY_CONTRACT; }
449
449
  });
450
450
  Object.defineProperty(exports, "STARKNET_POP_FACTORY_START_BLOCK", {
451
451
  enumerable: true,
452
- get: function () { return chunk4QPF6AZV_cjs.STARKNET_POP_FACTORY_START_BLOCK; }
452
+ get: function () { return chunk3V3L2R5O_cjs.STARKNET_POP_FACTORY_START_BLOCK; }
453
453
  });
454
454
  Object.defineProperty(exports, "SUPPORTED_TOKENS", {
455
455
  enumerable: true,
456
- get: function () { return chunk4QPF6AZV_cjs.SUPPORTED_TOKENS; }
456
+ get: function () { return chunk3V3L2R5O_cjs.SUPPORTED_TOKENS; }
457
457
  });
458
458
  Object.defineProperty(exports, "UserFacingError", {
459
459
  enumerable: true,
460
- get: function () { return chunk4QPF6AZV_cjs.UserFacingError; }
460
+ get: function () { return chunk3V3L2R5O_cjs.UserFacingError; }
461
461
  });
462
462
  Object.defineProperty(exports, "formatAmount", {
463
463
  enumerable: true,
464
- get: function () { return chunk4QPF6AZV_cjs.formatAmount; }
464
+ get: function () { return chunk3V3L2R5O_cjs.formatAmount; }
465
465
  });
466
466
  Object.defineProperty(exports, "getListableTokens", {
467
467
  enumerable: true,
468
- get: function () { return chunk4QPF6AZV_cjs.getListableTokens; }
468
+ get: function () { return chunk3V3L2R5O_cjs.getListableTokens; }
469
469
  });
470
470
  Object.defineProperty(exports, "getTokenByAddress", {
471
471
  enumerable: true,
472
- get: function () { return chunk4QPF6AZV_cjs.getTokenByAddress; }
472
+ get: function () { return chunk3V3L2R5O_cjs.getTokenByAddress; }
473
473
  });
474
474
  Object.defineProperty(exports, "getTokenBySymbol", {
475
475
  enumerable: true,
476
- get: function () { return chunk4QPF6AZV_cjs.getTokenBySymbol; }
476
+ get: function () { return chunk3V3L2R5O_cjs.getTokenBySymbol; }
477
477
  });
478
478
  Object.defineProperty(exports, "normalizeAddress", {
479
479
  enumerable: true,
480
- get: function () { return chunk4QPF6AZV_cjs.normalizeAddress; }
480
+ get: function () { return chunk3V3L2R5O_cjs.normalizeAddress; }
481
481
  });
482
482
  Object.defineProperty(exports, "normalizeHash", {
483
483
  enumerable: true,
484
- get: function () { return chunk4QPF6AZV_cjs.normalizeHash; }
484
+ get: function () { return chunk3V3L2R5O_cjs.normalizeHash; }
485
485
  });
486
486
  Object.defineProperty(exports, "parseAmount", {
487
487
  enumerable: true,
488
- get: function () { return chunk4QPF6AZV_cjs.parseAmount; }
488
+ get: function () { return chunk3V3L2R5O_cjs.parseAmount; }
489
489
  });
490
490
  Object.defineProperty(exports, "shortenAddress", {
491
491
  enumerable: true,
492
- get: function () { return chunk4QPF6AZV_cjs.shortenAddress; }
492
+ get: function () { return chunk3V3L2R5O_cjs.shortenAddress; }
493
493
  });
494
494
  Object.defineProperty(exports, "CHAINS", {
495
495
  enumerable: true,