@cartridge/controller 0.6.0 → 0.7.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.
Files changed (100) hide show
  1. package/.turbo/turbo-build$colon$deps.log +52 -76
  2. package/.turbo/turbo-build.log +53 -77
  3. package/dist/controller.cjs +860 -0
  4. package/dist/controller.cjs.map +1 -0
  5. package/dist/controller.d.cts +33 -0
  6. package/dist/controller.d.ts +4 -4
  7. package/dist/controller.js +84 -68
  8. package/dist/controller.js.map +1 -1
  9. package/dist/index.cjs +2200 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.cts +17 -0
  12. package/dist/index.d.ts +12 -7
  13. package/dist/index.js +161 -7601
  14. package/dist/index.js.map +1 -1
  15. package/dist/lookup.cjs +59 -0
  16. package/dist/lookup.cjs.map +1 -0
  17. package/dist/lookup.d.cts +4 -0
  18. package/dist/lookup.js +7 -7
  19. package/dist/lookup.js.map +1 -1
  20. package/dist/{provider.js → node/index.cjs} +499 -25
  21. package/dist/node/index.cjs.map +1 -0
  22. package/dist/node/index.d.cts +56 -0
  23. package/dist/node/index.d.ts +56 -0
  24. package/dist/{telegram/provider.js → node/index.js} +354 -135
  25. package/dist/node/index.js.map +1 -0
  26. package/dist/{policies.d.ts → policies-DD1aPjQ4.d.cts} +6 -4
  27. package/dist/policies-DD1aPjQ4.d.ts +21 -0
  28. package/dist/{types-CVnDQVqD.d.ts → provider-ap1C1ypF.d.cts} +27 -10
  29. package/dist/provider-ap1C1ypF.d.ts +201 -0
  30. package/dist/session/{provider.js → index.cjs} +82 -73
  31. package/dist/session/index.cjs.map +1 -0
  32. package/dist/session/{provider.d.ts → index.d.cts} +6 -3
  33. package/dist/session/index.d.ts +37 -8
  34. package/dist/session/index.js +47 -64
  35. package/dist/session/index.js.map +1 -1
  36. package/package.json +35 -16
  37. package/src/controller.ts +43 -15
  38. package/src/iframe/base.ts +1 -11
  39. package/src/node/account.ts +72 -0
  40. package/src/node/backend.ts +159 -0
  41. package/src/node/index.ts +4 -0
  42. package/src/node/provider.ts +178 -0
  43. package/src/node/server.ts +89 -0
  44. package/src/session/account.ts +1 -1
  45. package/src/session/provider.ts +0 -16
  46. package/src/types.ts +3 -6
  47. package/tsconfig.json +2 -1
  48. package/dist/__tests__/parseChainId.test.d.ts +0 -2
  49. package/dist/__tests__/parseChainId.test.js +0 -89
  50. package/dist/__tests__/parseChainId.test.js.map +0 -1
  51. package/dist/account.d.ts +0 -38
  52. package/dist/account.js +0 -110
  53. package/dist/account.js.map +0 -1
  54. package/dist/constants.d.ts +0 -5
  55. package/dist/constants.js +0 -10
  56. package/dist/constants.js.map +0 -1
  57. package/dist/errors.d.ts +0 -5
  58. package/dist/errors.js +0 -11
  59. package/dist/errors.js.map +0 -1
  60. package/dist/icon.d.ts +0 -3
  61. package/dist/icon.js +0 -6
  62. package/dist/icon.js.map +0 -1
  63. package/dist/iframe/base.d.ts +0 -5
  64. package/dist/iframe/base.js +0 -126
  65. package/dist/iframe/base.js.map +0 -1
  66. package/dist/iframe/index.d.ts +0 -5
  67. package/dist/iframe/index.js +0 -188
  68. package/dist/iframe/index.js.map +0 -1
  69. package/dist/iframe/keychain.d.ts +0 -5
  70. package/dist/iframe/keychain.js +0 -147
  71. package/dist/iframe/keychain.js.map +0 -1
  72. package/dist/iframe/profile.d.ts +0 -5
  73. package/dist/iframe/profile.js +0 -167
  74. package/dist/iframe/profile.js.map +0 -1
  75. package/dist/index.d-BbTUPBeO.d.ts +0 -68
  76. package/dist/mutex.d.ts +0 -14
  77. package/dist/mutex.js +0 -22
  78. package/dist/mutex.js.map +0 -1
  79. package/dist/policies.js +0 -26
  80. package/dist/policies.js.map +0 -1
  81. package/dist/provider.d.ts +0 -24
  82. package/dist/provider.js.map +0 -1
  83. package/dist/session/account.d.ts +0 -37
  84. package/dist/session/account.js +0 -94
  85. package/dist/session/account.js.map +0 -1
  86. package/dist/session/backend.d.ts +0 -60
  87. package/dist/session/backend.js +0 -39
  88. package/dist/session/backend.js.map +0 -1
  89. package/dist/session/provider.js.map +0 -1
  90. package/dist/telegram/backend.d.ts +0 -33
  91. package/dist/telegram/backend.js +0 -40
  92. package/dist/telegram/backend.js.map +0 -1
  93. package/dist/telegram/provider.d.ts +0 -27
  94. package/dist/telegram/provider.js.map +0 -1
  95. package/dist/types.d.ts +0 -5
  96. package/dist/types.js +0 -13
  97. package/dist/types.js.map +0 -1
  98. package/dist/utils.d.ts +0 -19
  99. package/dist/utils.js +0 -141
  100. package/dist/utils.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.ts","../src/account.ts","../src/iframe/base.ts","../src/constants.ts","../src/iframe/keychain.ts","../src/iframe/profile.ts","../src/errors.ts","../package.json","../src/icon.ts","../src/mutex.ts","../src/provider.ts","../src/controller.ts"],"names":["constants","shortString","WalletAccount","typedData","connectToChild","existingController","Permission","params","call"],"mappings":"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","file":"controller.cjs","sourcesContent":["import {\n addAddressPadding,\n Call,\n CallData,\n constants,\n getChecksumAddress,\n hash,\n shortString,\n typedData,\n TypedDataRevision,\n} from \"starknet\";\nimport wasm from \"@cartridge/account-wasm/controller\";\nimport { Policies, SessionPolicies } from \"@cartridge/presets\";\nimport { ChainId } from \"@starknet-io/types-js\";\nimport { ParsedSessionPolicies } from \"./policies\";\n\n// Whitelist of allowed property names to prevent prototype pollution\nconst ALLOWED_PROPERTIES = new Set([\n \"contracts\",\n \"messages\",\n \"target\",\n \"method\",\n \"name\",\n \"description\",\n \"types\",\n \"domain\",\n \"primaryType\",\n]);\n\nfunction validatePropertyName(prop: string): void {\n if (!ALLOWED_PROPERTIES.has(prop)) {\n throw new Error(`Invalid property name: ${prop}`);\n }\n}\n\nfunction safeObjectAccess<T>(obj: any, prop: string): T {\n validatePropertyName(prop);\n return obj[prop];\n}\n\nexport function normalizeCalls(calls: Call | Call[]) {\n return toArray(calls).map((call) => {\n return {\n entrypoint: call.entrypoint,\n contractAddress: addAddressPadding(call.contractAddress),\n calldata: CallData.toHex(call.calldata),\n };\n });\n}\n\nexport function toSessionPolicies(policies: Policies): SessionPolicies {\n return Array.isArray(policies)\n ? policies.reduce<SessionPolicies>(\n (prev, p) => {\n if (safeObjectAccess<string>(p, \"target\")) {\n const target = getChecksumAddress(\n safeObjectAccess<string>(p, \"target\"),\n );\n const entrypoint = safeObjectAccess<string>(p, \"method\");\n const contracts = safeObjectAccess<Record<string, any>>(\n prev,\n \"contracts\",\n );\n const item = {\n name: humanizeString(entrypoint),\n entrypoint: entrypoint,\n description: safeObjectAccess<string>(p, \"description\"),\n };\n\n if (target in contracts) {\n const methods = toArray(contracts[target].methods);\n contracts[target] = {\n methods: [...methods, item],\n };\n } else {\n contracts[target] = {\n methods: [item],\n };\n }\n } else {\n const messages = safeObjectAccess<any[]>(prev, \"messages\");\n messages.push(p);\n }\n\n return prev;\n },\n { contracts: {}, messages: [] },\n )\n : policies;\n}\n\nexport function toWasmPolicies(policies: ParsedSessionPolicies): wasm.Policy[] {\n return [\n ...Object.entries(policies.contracts ?? {}).flatMap(\n ([target, { methods }]) =>\n toArray(methods).map((m) => ({\n target,\n method: m.entrypoint,\n authorized: m.authorized,\n })),\n ),\n ...(policies.messages ?? []).map((p) => {\n const domainHash = typedData.getStructHash(\n p.types,\n \"StarknetDomain\",\n p.domain,\n TypedDataRevision.ACTIVE,\n );\n const typeHash = typedData.getTypeHash(\n p.types,\n p.primaryType,\n TypedDataRevision.ACTIVE,\n );\n\n return {\n scope_hash: hash.computePoseidonHash(domainHash, typeHash),\n authorized: p.authorized,\n };\n }),\n ];\n}\n\nexport function toArray<T>(val: T | T[]): T[] {\n return Array.isArray(val) ? val : [val];\n}\n\nexport function humanizeString(str: string): string {\n return (\n str\n // Convert from camelCase or snake_case\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // camelCase to spaces\n .replace(/_/g, \" \") // snake_case to spaces\n .toLowerCase()\n // Capitalize first letter\n .replace(/^\\w/, (c) => c.toUpperCase())\n );\n}\n\nexport function parseChainId(url: URL): ChainId {\n const parts = url.pathname.split(\"/\");\n\n if (parts.includes(\"starknet\")) {\n if (parts.includes(\"mainnet\")) {\n return constants.StarknetChainId.SN_MAIN;\n } else if (parts.includes(\"sepolia\")) {\n return constants.StarknetChainId.SN_SEPOLIA;\n }\n } else if (parts.length >= 3) {\n const projectName = parts[2];\n if (parts.includes(\"katana\")) {\n return shortString.encodeShortString(\n `WP_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n } else if (parts.includes(\"mainnet\")) {\n return shortString.encodeShortString(\n `GG_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n }\n }\n\n throw new Error(`Chain ${url.toString()} not supported`);\n}\n","import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport { SPEC } from \"@starknet-io/types-js\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\n\nclass ControllerAccount extends WalletAccount {\n address: string;\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({ nodeUrl: rpcUrl }, provider);\n\n this.address = address;\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (this.options?.propagateSessionErrors) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n (sessionExecute as ConnectError).error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SPEC.SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SPEC.SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SPEC.SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","import { AsyncMethodReturns, connectToChild } from \"@cartridge/penpal\";\nimport { ControllerOptions, Modal } from \"../types\";\n\nexport type IFrameOptions<CallSender> = Omit<\n ConstructorParameters<typeof IFrame>[0],\n \"id\" | \"url\" | \"onConnect\"\n> & {\n url?: string;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n};\n\nexport class IFrame<CallSender extends {}> implements Modal {\n url?: URL;\n private iframe?: HTMLIFrameElement;\n private container?: HTMLDivElement;\n private onClose?: () => void;\n\n constructor({\n id,\n url,\n preset,\n onClose,\n onConnect,\n methods = {},\n }: Pick<ControllerOptions, \"preset\"> & {\n id: string;\n url: URL;\n onClose?: () => void;\n onConnect: (child: AsyncMethodReturns<CallSender>) => void;\n methods?: { [key: string]: (...args: any[]) => void };\n }) {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (preset) {\n url.searchParams.set(\"preset\", preset);\n }\n\n this.url = url;\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url.toString();\n iframe.id = id;\n iframe.style.border = \"none\";\n iframe.sandbox.add(\"allow-forms\");\n iframe.sandbox.add(\"allow-popups\");\n iframe.sandbox.add(\"allow-scripts\");\n iframe.sandbox.add(\"allow-same-origin\");\n iframe.allow =\n \"publickey-credentials-create *; publickey-credentials-get *; clipboard-write\";\n if (!!document.hasStorageAccess) {\n iframe.sandbox.add(\"allow-storage-access-by-user-activation\");\n }\n\n const container = document.createElement(\"div\");\n container.id = \"controller\";\n container.style.position = \"fixed\";\n container.style.height = \"100%\";\n container.style.width = \"100%\";\n container.style.top = \"0\";\n container.style.left = \"0\";\n container.style.zIndex = \"10000\";\n container.style.backgroundColor = \"rgba(0,0,0,0.6)\";\n container.style.display = \"flex\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.visibility = \"hidden\";\n container.style.opacity = \"0\";\n container.style.transition = \"opacity 0.2s ease\";\n container.appendChild(iframe);\n\n this.iframe = iframe;\n this.container = container;\n\n connectToChild<CallSender>({\n iframe: this.iframe,\n methods: { close: () => this.close(), ...methods },\n }).promise.then(onConnect);\n\n this.resize();\n window.addEventListener(\"resize\", () => this.resize());\n\n const observer = new MutationObserver(() => {\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (\n (id === \"controller-keychain\" && !existingController) ||\n id === \"controller-profile\"\n ) {\n document.body.appendChild(container);\n observer.disconnect();\n }\n }\n });\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n });\n\n const existingController = document.getElementById(\"controller\");\n if (document.body) {\n if (\n (id === \"controller-keychain\" && !existingController) ||\n id === \"controller-profile\"\n ) {\n document.body.appendChild(container);\n }\n }\n\n this.onClose = onClose;\n }\n\n open() {\n if (!this.container) return;\n document.body.style.overflow = \"hidden\";\n\n this.container.style.visibility = \"visible\";\n this.container.style.opacity = \"1\";\n }\n\n close() {\n if (!this.container) return;\n this.onClose?.();\n\n document.body.style.overflow = \"auto\";\n\n this.container.style.visibility = \"hidden\";\n this.container.style.opacity = \"0\";\n }\n\n sendBackward() {\n if (!this.container) return;\n this.container.style.zIndex = \"9999\";\n }\n\n sendForward() {\n if (!this.container) return;\n this.container.style.zIndex = \"10000\";\n }\n\n private resize() {\n if (!this.iframe) return;\n\n this.iframe.style.userSelect = \"none\";\n\n if (window.innerWidth < 768) {\n this.iframe.style.height = \"100%\";\n this.iframe.style.width = \"100%\";\n this.iframe.style.borderRadius = \"0\";\n return;\n }\n\n this.iframe.style.height = \"600px\";\n this.iframe.style.width = \"432px\";\n this.iframe.style.borderRadius = \"8px\";\n }\n}\n","export const KEYCHAIN_URL = \"https://x.cartridge.gg\";\nexport const PROFILE_URL = \"https://profile.cartridge.gg\";\nexport const API_URL = \"https://api.cartridge.gg\";\n","import { KEYCHAIN_URL } from \"../constants\";\nimport { Keychain, KeychainOptions } from \"../types\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\ntype KeychainIframeOptions = IFrameOptions<Keychain> & KeychainOptions;\n\nexport class KeychainIFrame extends IFrame<Keychain> {\n constructor({ url, policies, ...iframeOptions }: KeychainIframeOptions) {\n const _url = new URL(url ?? KEYCHAIN_URL);\n\n if (policies) {\n _url.searchParams.set(\n \"policies\",\n encodeURIComponent(JSON.stringify(policies)),\n );\n }\n\n super({\n ...iframeOptions,\n id: \"controller-keychain\",\n url: _url,\n });\n }\n}\n","import { PROFILE_URL } from \"../constants\";\nimport { Profile, ProfileOptions } from \"../types\";\nimport { IFrame, IFrameOptions } from \"./base\";\n\nexport type ProfileIFrameOptions = IFrameOptions<Profile> &\n ProfileOptions & {\n rpcUrl: string;\n version?: string;\n username: string;\n slot?: string;\n namespace?: string;\n };\n\nexport class ProfileIFrame extends IFrame<Profile> {\n constructor({\n profileUrl,\n rpcUrl,\n version,\n username,\n slot,\n namespace,\n tokens,\n ...iframeOptions\n }: ProfileIFrameOptions) {\n const _profileUrl = (profileUrl || PROFILE_URL).replace(/\\/$/, \"\");\n let _url = new URL(\n slot\n ? namespace\n ? `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(\n slot,\n )}&ns=${encodeURIComponent(namespace)}`\n : `${_profileUrl}/account/${username}/slot/${slot}?ps=${encodeURIComponent(\n slot,\n )}`\n : `${_profileUrl}/account/${username}`,\n );\n\n if (version) {\n _url.searchParams.set(\"v\", encodeURIComponent(version));\n }\n\n _url.searchParams.set(\"rpcUrl\", encodeURIComponent(rpcUrl));\n\n if (tokens?.erc20) {\n _url.searchParams.set(\n \"erc20\",\n encodeURIComponent(tokens.erc20.toString()),\n );\n }\n\n super({\n ...iframeOptions,\n id: \"controller-profile\",\n url: _url,\n });\n }\n}\n","export class NotReadyToConnect extends Error {\n constructor() {\n super(\"Not ready to connect\");\n\n Object.setPrototypeOf(this, NotReadyToConnect.prototype);\n }\n}\n","{\n \"name\": \"@cartridge/controller\",\n \"version\": \"0.7.0\",\n \"description\": \"Cartridge Controller\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"type\": \"module\",\n \"scripts\": {\n \"build:deps\": \"tsup\",\n \"build\": \"pnpm build:deps\",\n \"format\": \"prettier --write \\\"src/**/*.ts\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.ts\\\"\",\n \"test\": \"jest\",\n \"version\": \"pnpm pkg get version\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./session\": {\n \"types\": \"./dist/session/index.d.ts\",\n \"import\": \"./dist/session/index.js\",\n \"require\": \"./dist/session/index.cjs\"\n },\n \"./session/node\": {\n \"types\": \"./dist/node/index.d.ts\",\n \"import\": \"./dist/node/index.js\",\n \"require\": \"./dist/node/index.cjs\"\n },\n \"./provider\": {\n \"types\": \"./dist/provider/index.d.ts\",\n \"import\": \"./dist/provider/index.js\"\n },\n \"./types\": {\n \"types\": \"./dist/types/index.d.ts\",\n \"import\": \"./dist/types/index.js\"\n }\n },\n \"tsup\": {\n \"entry\": [\n \"src/index.ts\",\n \"src/controller.ts\",\n \"src/lookup.ts\",\n \"src/session/index.ts\",\n \"src/node/index.ts\"\n ],\n \"format\": [\n \"esm\",\n \"cjs\"\n ],\n \"splitting\": false,\n \"sourcemap\": true,\n \"clean\": true,\n \"dts\": true,\n \"treeshake\": {\n \"preset\": \"recommended\"\n },\n \"exports\": \"named\"\n },\n \"peerDependencies\": {\n \"starknet\": \"catalog:\",\n \"open\": \"^10.1.0\"\n },\n \"dependencies\": {\n \"@cartridge/account-wasm\": \"workspace:*\",\n \"@cartridge/penpal\": \"catalog:\",\n \"@starknet-io/types-js\": \"catalog:\",\n \"@telegram-apps/sdk\": \"^2.4.0\",\n \"base64url\": \"catalog:\",\n \"cbor-x\": \"^1.5.0\",\n \"fast-deep-equal\": \"catalog:\"\n },\n \"devDependencies\": {\n \"@cartridge/tsconfig\": \"workspace:*\",\n \"@types/jest\": \"^29.5.14\",\n \"@types/node\": \"catalog:\",\n \"jest\": \"^29.7.0\",\n \"prettier\": \"catalog:\",\n \"ts-jest\": \"^29.2.5\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:\"\n }\n}\n","export const icon =\n \"data:image/png;base64,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\";\n","function releaseStub() {}\n\n/**\n * A simple mutual exclusion lock. It allows you to obtain and release a lock,\n * ensuring that only one task can access a critical section at a time.\n */\nexport class Mutex {\n private m_lastPromise: Promise<void> = Promise.resolve();\n\n /**\n * Acquire lock\n * @param [bypass=false] option to skip lock acquisition\n */\n public async obtain(bypass = false): Promise<() => void> {\n let release = releaseStub;\n if (bypass) return release;\n const lastPromise = this.m_lastPromise;\n this.m_lastPromise = new Promise<void>((resolve) => (release = resolve));\n await lastPromise;\n return release;\n }\n}\n","import { WalletAccount } from \"starknet\";\nimport {\n AddInvokeTransactionParameters,\n AddStarknetChainParameters,\n Errors,\n Permission,\n RequestAccountsParameters,\n RequestFn,\n StarknetWindowObject,\n SwitchStarknetChainParameters,\n TypedData,\n WalletEventHandlers,\n WalletEventListener,\n WalletEvents,\n} from \"@starknet-io/types-js\";\nimport manifest from \"../package.json\";\n\nimport { icon } from \"./icon\";\nimport { Mutex } from \"./mutex\";\n\nconst mutex = new Mutex();\n\nexport default abstract class BaseProvider implements StarknetWindowObject {\n public id = \"controller\";\n public name = \"Controller\";\n public version = manifest.version;\n public icon = icon;\n\n public account?: WalletAccount;\n public subscriptions: WalletEvents[] = [];\n\n private _probePromise: Promise<WalletAccount | undefined> | null = null;\n\n protected async safeProbe(): Promise<WalletAccount | undefined> {\n // If we already have an account, return it\n if (this.account) {\n return this.account;\n }\n\n // If we're already probing, wait for the existing probe\n if (this._probePromise) {\n return this._probePromise;\n }\n\n const release = await mutex.obtain();\n return await new Promise<WalletAccount | undefined>(async (resolve) => {\n try {\n this._probePromise = this.probe();\n const result = await this._probePromise;\n resolve(result);\n } finally {\n this._probePromise = null;\n }\n }).finally(() => {\n release();\n });\n }\n\n request: RequestFn = async (call) => {\n switch (call.type) {\n case \"wallet_getPermissions\":\n await this.safeProbe();\n\n if (this.account) {\n return [Permission.ACCOUNTS];\n }\n\n return [];\n\n case \"wallet_requestAccounts\": {\n if (this.account) {\n return [this.account.address];\n }\n\n const silentMode =\n call.params && (call.params as RequestAccountsParameters).silent_mode;\n\n this.account = await this.safeProbe();\n\n if (!this.account && !silentMode) {\n this.account = await this.connect();\n }\n\n if (this.account) {\n return [this.account.address];\n }\n\n return [];\n }\n\n case \"wallet_watchAsset\":\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: \"wallet_watchAsset not implemented\",\n } as Errors.UNEXPECTED_ERROR;\n\n case \"wallet_addStarknetChain\": {\n let params = call.params as AddStarknetChainParameters;\n return this.addStarknetChain(params);\n }\n\n case \"wallet_switchStarknetChain\": {\n let params = call.params as SwitchStarknetChainParameters;\n return this.switchStarknetChain(params.chainId);\n }\n\n case \"wallet_requestChainId\":\n if (!this.account) {\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: \"Account not initialized\",\n } as Errors.UNEXPECTED_ERROR;\n }\n\n return await this.account.getChainId();\n\n case \"wallet_deploymentData\":\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: \"wallet_deploymentData not implemented\",\n } as Errors.UNEXPECTED_ERROR;\n\n case \"wallet_addInvokeTransaction\":\n if (!this.account) {\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: \"Account not initialized\",\n } as Errors.UNEXPECTED_ERROR;\n }\n\n let params = call.params as AddInvokeTransactionParameters;\n return await this.account.execute(\n params.calls.map((call) => ({\n contractAddress: call.contract_address,\n entrypoint: call.entry_point,\n calldata: call.calldata,\n })),\n );\n\n case \"wallet_addDeclareTransaction\":\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: \"wallet_addDeclareTransaction not implemented\",\n } as Errors.UNEXPECTED_ERROR;\n\n case \"wallet_signTypedData\": {\n if (!this.account) {\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: \"Account not initialized\",\n } as Errors.UNEXPECTED_ERROR;\n }\n\n return await this.account.signMessage(call.params as TypedData);\n }\n\n case \"wallet_supportedSpecs\":\n return [];\n case \"wallet_supportedWalletApi\":\n return [];\n default:\n throw {\n code: 63,\n message: \"An unexpected error occurred\",\n data: `Unknown RPC call type: ${call.type}`,\n } as Errors.UNEXPECTED_ERROR;\n }\n };\n\n on: WalletEventListener = <E extends keyof WalletEventHandlers>(\n event: E,\n handler: WalletEventHandlers[E],\n ): void => {\n if (event !== \"accountsChanged\" && event !== \"networkChanged\") {\n throw new Error(`Unknown event: ${event}`);\n }\n this.subscriptions.push({ type: event, handler } as WalletEvents);\n };\n\n off: WalletEventListener = <E extends keyof WalletEventHandlers>(\n event: E,\n handler: WalletEventHandlers[E],\n ): void => {\n if (event !== \"accountsChanged\" && event !== \"networkChanged\") {\n throw new Error(`Unknown event: ${event}`);\n }\n const idx = this.subscriptions.findIndex(\n (sub) => sub.type === event && sub.handler === handler,\n );\n if (idx >= 0) {\n this.subscriptions.splice(idx, 1);\n }\n };\n\n protected emitNetworkChanged(chainId: string) {\n this.subscriptions\n .filter((sub) => sub.type === \"networkChanged\")\n .forEach((sub) => {\n (sub.handler as WalletEventHandlers[\"networkChanged\"])(chainId);\n });\n }\n\n protected emitAccountsChanged(accounts: string[]) {\n this.subscriptions\n .filter((sub) => sub.type === \"accountsChanged\")\n .forEach((sub) => {\n (sub.handler as WalletEventHandlers[\"accountsChanged\"])(accounts);\n });\n }\n\n abstract probe(): Promise<WalletAccount | undefined>;\n abstract connect(): Promise<WalletAccount | undefined>;\n abstract switchStarknetChain(chainId: string): Promise<boolean>;\n abstract addStarknetChain(\n chain: AddStarknetChainParameters,\n ): Promise<boolean>;\n}\n","import { AsyncMethodReturns } from \"@cartridge/penpal\";\n\nimport ControllerAccount from \"./account\";\nimport { KeychainIFrame, ProfileIFrame } from \"./iframe\";\nimport { NotReadyToConnect } from \"./errors\";\nimport {\n Keychain,\n ResponseCodes,\n ConnectReply,\n ProbeReply,\n ControllerOptions,\n ConnectError,\n Profile,\n IFrames,\n ProfileContextTypeVariant,\n Chain,\n} from \"./types\";\nimport BaseProvider from \"./provider\";\nimport { WalletAccount } from \"starknet\";\nimport { Policy } from \"@cartridge/presets\";\nimport { AddStarknetChainParameters, ChainId } from \"@starknet-io/types-js\";\nimport { parseChainId } from \"./utils\";\n\nexport default class ControllerProvider extends BaseProvider {\n private keychain?: AsyncMethodReturns<Keychain>;\n private profile?: AsyncMethodReturns<Profile>;\n private options: ControllerOptions;\n private iframes: IFrames;\n private selectedChain: ChainId;\n private chains: Map<ChainId, Chain>;\n\n constructor(options: ControllerOptions) {\n super();\n\n const chains = new Map<ChainId, Chain>();\n\n for (const chain of options.chains) {\n const url = new URL(chain.rpcUrl);\n const chainId = parseChainId(url);\n chains.set(chainId, chain);\n }\n\n if (\n options.policies?.messages?.length &&\n options.policies.messages.length !== chains.size\n ) {\n console.warn(\n \"Each message policy is associated with a specific chain. \" +\n \"The number of message policies does not match the number of chains specified - \" +\n \"session message signing may not work on some chains.\",\n );\n }\n\n this.chains = chains;\n this.selectedChain = options.defaultChainId;\n\n if (!this.chains.has(this.selectedChain)) {\n throw new Error(\n `Chain ${this.selectedChain} not found in configured chains`,\n );\n }\n\n this.iframes = {\n keychain: new KeychainIFrame({\n ...options,\n onClose: this.keychain?.reset,\n onConnect: (keychain) => {\n this.keychain = keychain;\n },\n }),\n };\n\n this.options = options;\n\n if (typeof window !== \"undefined\") {\n (window as any).starknet_controller = this;\n }\n }\n\n async probe(): Promise<WalletAccount | undefined> {\n try {\n await this.waitForKeychain();\n\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n // For backwards compat with controller <=0.6.0\n let rpcUrl = response?.rpcUrl || this.rpcUrl();\n this.account = new ControllerAccount(\n this,\n rpcUrl,\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n } catch (e) {\n console.error(e);\n return;\n }\n\n if (!this.iframes.profile) {\n const username = await this.keychain.username();\n\n this.iframes.profile = new ProfileIFrame({\n ...this.options,\n onConnect: (profile) => {\n this.profile = profile;\n },\n methods: {\n openSettings: () => this.openSettings.bind(this),\n openPurchaseCredits: () => this.openPurchaseCredits.bind(this),\n openExecute: () => this.openExecute.bind(this),\n },\n rpcUrl: this.rpcUrl(),\n username,\n version: this.version,\n });\n }\n\n return this.account;\n }\n\n async connect(): Promise<WalletAccount | undefined> {\n if (this.account) {\n return this.account;\n }\n\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n if (!!document.hasStorageAccess) {\n const ok = await document.hasStorageAccess();\n if (!ok) {\n await document.requestStorageAccess();\n }\n }\n\n this.iframes.keychain.open();\n\n try {\n let response = await this.keychain.connect(\n this.options.policies || {},\n this.rpcUrl(),\n );\n if (response.code !== ResponseCodes.SUCCESS) {\n throw new Error(response.message);\n }\n\n response = response as ConnectReply;\n this.account = new ControllerAccount(\n this,\n this.rpcUrl(),\n response.address,\n this.keychain,\n this.options,\n this.iframes.keychain,\n );\n\n return this.account;\n } catch (e) {\n console.log(e);\n } finally {\n this.iframes.keychain.close();\n }\n }\n\n async switchStarknetChain(chainId: string): Promise<boolean> {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return false;\n }\n\n try {\n this.selectedChain = chainId;\n const response = (await this.keychain.probe(this.rpcUrl())) as ProbeReply;\n\n if (response.rpcUrl === this.rpcUrl()) {\n return true;\n }\n\n await this.keychain.switchChain(this.rpcUrl());\n } catch (e) {\n console.error(e);\n return false;\n }\n\n this.emitNetworkChanged(chainId);\n return true;\n }\n\n addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n async disconnect() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n if (!!document.hasStorageAccess) {\n const ok = await document.hasStorageAccess();\n if (!ok) {\n await document.requestStorageAccess();\n }\n }\n\n this.account = undefined;\n return this.keychain.disconnect();\n }\n\n async openProfile(tab: ProfileContextTypeVariant = \"inventory\") {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);\n this.iframes.profile.open();\n }\n\n async openProfileTo(to: string) {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);\n this.iframes.profile.open();\n }\n\n async openProfileAt(at: string) {\n if (!this.profile || !this.iframes.profile?.url) {\n console.error(\"Profile is not ready\");\n return;\n }\n if (!this.account) {\n console.error(\"Account is not ready\");\n return;\n }\n\n this.profile.navigate(at);\n this.iframes.profile.open();\n }\n\n async openSettings() {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n if (this.iframes.profile?.sendBackward) {\n this.iframes.profile?.sendBackward();\n } else {\n this.iframes.profile?.close();\n }\n this.iframes.keychain.open();\n const res = await this.keychain.openSettings();\n this.iframes.keychain.close();\n this.iframes.profile?.sendForward?.();\n if (res && (res as ConnectError).code === ResponseCodes.NOT_CONNECTED) {\n return false;\n }\n return true;\n }\n\n revoke(origin: string, _policy: Policy[]) {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return this.keychain.revoke(origin);\n }\n\n rpcUrl(): string {\n return this.chains.get(this.selectedChain)!.rpcUrl;\n }\n\n username() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n\n return this.keychain.username();\n }\n\n openPurchaseCredits() {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n this.iframes.profile.close();\n this.iframes.keychain.open();\n this.keychain.openPurchaseCredits();\n }\n\n async openExecute(calls: any, chainId?: string) {\n if (!this.keychain || !this.iframes.keychain) {\n console.error(new NotReadyToConnect().message);\n return;\n }\n if (!this.iframes.profile) {\n console.error(\"Profile is not ready\");\n return;\n }\n // Switch to the chain if provided\n let currentChainId = this.selectedChain;\n if (chainId) {\n this.switchStarknetChain(chainId);\n }\n // Switch iframes\n this.iframes.profile?.sendBackward();\n this.iframes.keychain.open();\n this.iframes.profile?.close();\n // Invoke execute\n const res = await this.keychain.execute(calls, undefined, undefined, true);\n // Switch back iframes\n this.iframes.profile?.open();\n this.iframes.keychain.close();\n this.iframes.profile?.sendForward();\n // Switch back to the original chain\n if (chainId) {\n this.switchStarknetChain(currentChainId);\n }\n return !(\n res &&\n ((res as ConnectError).code === ResponseCodes.NOT_CONNECTED ||\n (res as ConnectError).code === ResponseCodes.CANCELED)\n );\n }\n\n async delegateAccount() {\n if (!this.keychain) {\n console.error(new NotReadyToConnect().message);\n return null;\n }\n\n return await this.keychain.delegateAccount();\n }\n\n private waitForKeychain({\n timeout = 50000,\n interval = 100,\n }:\n | {\n timeout?: number;\n interval?: number;\n }\n | undefined = {}) {\n return new Promise<void>((resolve, reject) => {\n const startTime = Date.now();\n const id = setInterval(() => {\n if (Date.now() - startTime > timeout) {\n clearInterval(id);\n reject(new Error(\"Timeout waiting for keychain\"));\n return;\n }\n\n if (!this.keychain) return;\n\n clearInterval(id);\n resolve();\n }, interval);\n });\n }\n}\n"]}
@@ -0,0 +1,33 @@
1
+ import { B as BaseProvider, g as ControllerOptions, m as ProfileContextTypeVariant } from './provider-ap1C1ypF.cjs';
2
+ import { WalletAccount } from 'starknet';
3
+ import { Policy } from '@cartridge/presets';
4
+ import { AddStarknetChainParameters } from '@starknet-io/types-js';
5
+ import '@cartridge/penpal';
6
+
7
+ declare class ControllerProvider extends BaseProvider {
8
+ private keychain?;
9
+ private profile?;
10
+ private options;
11
+ private iframes;
12
+ private selectedChain;
13
+ private chains;
14
+ constructor(options: ControllerOptions);
15
+ probe(): Promise<WalletAccount | undefined>;
16
+ connect(): Promise<WalletAccount | undefined>;
17
+ switchStarknetChain(chainId: string): Promise<boolean>;
18
+ addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean>;
19
+ disconnect(): Promise<void>;
20
+ openProfile(tab?: ProfileContextTypeVariant): Promise<void>;
21
+ openProfileTo(to: string): Promise<void>;
22
+ openProfileAt(at: string): Promise<void>;
23
+ openSettings(): Promise<boolean | null>;
24
+ revoke(origin: string, _policy: Policy[]): Promise<void> | null;
25
+ rpcUrl(): string;
26
+ username(): Promise<string> | undefined;
27
+ openPurchaseCredits(): void;
28
+ openExecute(calls: any, chainId?: string): Promise<boolean | undefined>;
29
+ delegateAccount(): Promise<string | null>;
30
+ private waitForKeychain;
31
+ }
32
+
33
+ export { ControllerProvider as default };
@@ -1,7 +1,6 @@
1
- import { g as ControllerOptions, m as ProfileContextTypeVariant } from './types-CVnDQVqD.js';
2
- import BaseProvider from './provider.js';
1
+ import { B as BaseProvider, g as ControllerOptions, m as ProfileContextTypeVariant } from './provider-ap1C1ypF.js';
3
2
  import { WalletAccount } from 'starknet';
4
- import { i as Policy } from './index.d-BbTUPBeO.js';
3
+ import { Policy } from '@cartridge/presets';
5
4
  import { AddStarknetChainParameters } from '@starknet-io/types-js';
6
5
  import '@cartridge/penpal';
7
6
 
@@ -19,11 +18,12 @@ declare class ControllerProvider extends BaseProvider {
19
18
  addStarknetChain(_chain: AddStarknetChainParameters): Promise<boolean>;
20
19
  disconnect(): Promise<void>;
21
20
  openProfile(tab?: ProfileContextTypeVariant): Promise<void>;
21
+ openProfileTo(to: string): Promise<void>;
22
+ openProfileAt(at: string): Promise<void>;
22
23
  openSettings(): Promise<boolean | null>;
23
24
  revoke(origin: string, _policy: Policy[]): Promise<void> | null;
24
25
  rpcUrl(): string;
25
26
  username(): Promise<string> | undefined;
26
- fetchControllers(contractAddresses: string[]): Promise<Record<string, string>>;
27
27
  openPurchaseCredits(): void;
28
28
  openExecute(calls: any, chainId?: string): Promise<boolean | undefined>;
29
29
  delegateAccount(): Promise<string | null>;
@@ -1,19 +1,8 @@
1
- // src/account.ts
2
- import {
3
- WalletAccount
4
- } from "starknet";
1
+ import { constants, shortString, WalletAccount } from 'starknet';
2
+ import { connectToChild } from '@cartridge/penpal';
3
+ import { Permission } from '@starknet-io/types-js';
5
4
 
6
- // src/utils.ts
7
- import {
8
- addAddressPadding,
9
- CallData,
10
- constants,
11
- getChecksumAddress,
12
- hash,
13
- shortString,
14
- typedData,
15
- TypedDataRevision
16
- } from "starknet";
5
+ // src/account.ts
17
6
  function toArray(val) {
18
7
  return Array.isArray(val) ? val : [val];
19
8
  }
@@ -70,8 +59,8 @@ var ControllerAccount = class extends WalletAccount {
70
59
  return new Promise(async (resolve, reject) => {
71
60
  const sessionExecute = await this.keychain.execute(
72
61
  calls,
73
- void 0,
74
- void 0,
62
+ undefined,
63
+ undefined,
75
64
  false
76
65
  );
77
66
  if (sessionExecute.code === "SUCCESS" /* SUCCESS */) {
@@ -85,8 +74,8 @@ var ControllerAccount = class extends WalletAccount {
85
74
  this.modal.open();
86
75
  const manualExecute = await this.keychain.execute(
87
76
  calls,
88
- void 0,
89
- void 0,
77
+ undefined,
78
+ undefined,
90
79
  true,
91
80
  sessionExecute.error
92
81
  );
@@ -126,9 +115,6 @@ var ControllerAccount = class extends WalletAccount {
126
115
  }
127
116
  };
128
117
  var account_default = ControllerAccount;
129
-
130
- // src/iframe/base.ts
131
- import { connectToChild } from "@cartridge/penpal";
132
118
  var IFrame = class {
133
119
  url;
134
120
  iframe;
@@ -138,8 +124,6 @@ var IFrame = class {
138
124
  id,
139
125
  url,
140
126
  preset,
141
- theme,
142
- colorMode,
143
127
  onClose,
144
128
  onConnect,
145
129
  methods = {}
@@ -147,15 +131,9 @@ var IFrame = class {
147
131
  if (typeof document === "undefined") {
148
132
  return;
149
133
  }
150
- if (theme) {
151
- url.searchParams.set("theme", theme);
152
- }
153
134
  if (preset) {
154
135
  url.searchParams.set("preset", preset);
155
136
  }
156
- if (colorMode) {
157
- url.searchParams.set("colorMode", colorMode);
158
- }
159
137
  this.url = url;
160
138
  const iframe = document.createElement("iframe");
161
139
  iframe.src = url.toString();
@@ -318,21 +296,16 @@ var NotReadyToConnect = class _NotReadyToConnect extends Error {
318
296
  }
319
297
  };
320
298
 
321
- // src/provider.ts
322
- import {
323
- Permission
324
- } from "@starknet-io/types-js";
325
-
326
299
  // package.json
327
300
  var package_default = {
328
301
  name: "@cartridge/controller",
329
- version: "0.6.0",
302
+ version: "0.7.0",
330
303
  description: "Cartridge Controller",
331
304
  module: "dist/index.js",
332
305
  types: "dist/index.d.ts",
333
306
  type: "module",
334
307
  scripts: {
335
- "build:deps": "tsup --dts-resolve",
308
+ "build:deps": "tsup",
336
309
  build: "pnpm build:deps",
337
310
  format: 'prettier --write "src/**/*.ts"',
338
311
  "format:check": 'prettier --check "src/**/*.ts"',
@@ -342,52 +315,71 @@ var package_default = {
342
315
  exports: {
343
316
  ".": {
344
317
  types: "./dist/index.d.ts",
345
- default: "./dist/index.js"
318
+ import: "./dist/index.js",
319
+ require: "./dist/index.cjs"
346
320
  },
347
321
  "./session": {
348
322
  types: "./dist/session/index.d.ts",
349
- default: "./dist/session/index.js"
323
+ import: "./dist/session/index.js",
324
+ require: "./dist/session/index.cjs"
325
+ },
326
+ "./session/node": {
327
+ types: "./dist/node/index.d.ts",
328
+ import: "./dist/node/index.js",
329
+ require: "./dist/node/index.cjs"
350
330
  },
351
331
  "./provider": {
352
332
  types: "./dist/provider/index.d.ts",
353
- default: "./dist/provider/index.js"
333
+ import: "./dist/provider/index.js"
354
334
  },
355
335
  "./types": {
356
336
  types: "./dist/types/index.d.ts",
357
- default: "./dist/types/index.js"
337
+ import: "./dist/types/index.js"
358
338
  }
359
339
  },
360
340
  tsup: {
361
341
  entry: [
362
- "src/**"
342
+ "src/index.ts",
343
+ "src/controller.ts",
344
+ "src/lookup.ts",
345
+ "src/session/index.ts",
346
+ "src/node/index.ts"
363
347
  ],
364
348
  format: [
365
- "esm"
349
+ "esm",
350
+ "cjs"
366
351
  ],
367
352
  splitting: false,
368
353
  sourcemap: true,
369
- clean: true
354
+ clean: true,
355
+ dts: true,
356
+ treeshake: {
357
+ preset: "recommended"
358
+ },
359
+ exports: "named"
370
360
  },
371
361
  peerDependencies: {
372
- starknet: "^6.21.0"
362
+ starknet: "catalog:",
363
+ open: "^10.1.0"
373
364
  },
374
365
  dependencies: {
375
366
  "@cartridge/account-wasm": "workspace:*",
376
- "@cartridge/penpal": "^6.2.3",
377
- "@starknet-io/types-js": "^0.7.7",
367
+ "@cartridge/penpal": "catalog:",
368
+ "@starknet-io/types-js": "catalog:",
378
369
  "@telegram-apps/sdk": "^2.4.0",
379
- base64url: "^3.0.1",
370
+ base64url: "catalog:",
380
371
  "cbor-x": "^1.5.0",
381
- "fast-deep-equal": "^3.1.3",
382
- "query-string": "^7.1.1"
372
+ "fast-deep-equal": "catalog:"
383
373
  },
384
374
  devDependencies: {
385
375
  "@cartridge/tsconfig": "workspace:*",
386
376
  "@types/jest": "^29.5.14",
387
- "@types/node": "^20.6.0",
377
+ "@types/node": "catalog:",
388
378
  jest: "^29.7.0",
379
+ prettier: "catalog:",
389
380
  "ts-jest": "^29.2.5",
390
- typescript: "^5.4.5"
381
+ tsup: "catalog:",
382
+ typescript: "catalog:"
391
383
  }
392
384
  };
393
385
 
@@ -617,9 +609,10 @@ var ControllerProvider = class extends BaseProvider {
617
609
  return;
618
610
  }
619
611
  const response = await this.keychain.probe(this.rpcUrl());
612
+ let rpcUrl = response?.rpcUrl || this.rpcUrl();
620
613
  this.account = new account_default(
621
614
  this,
622
- this.rpcUrl(),
615
+ rpcUrl,
623
616
  response.address,
624
617
  this.keychain,
625
618
  this.options,
@@ -688,12 +681,17 @@ var ControllerProvider = class extends BaseProvider {
688
681
  }
689
682
  }
690
683
  async switchStarknetChain(chainId) {
684
+ if (!this.keychain || !this.iframes.keychain) {
685
+ console.error(new NotReadyToConnect().message);
686
+ return false;
687
+ }
691
688
  try {
692
689
  this.selectedChain = chainId;
693
- this.account = await this.probe();
694
- if (!this.account) {
695
- this.account = await this.connect();
690
+ const response = await this.keychain.probe(this.rpcUrl());
691
+ if (response.rpcUrl === this.rpcUrl()) {
692
+ return true;
696
693
  }
694
+ await this.keychain.switchChain(this.rpcUrl());
697
695
  } catch (e) {
698
696
  console.error(e);
699
697
  return false;
@@ -715,7 +713,7 @@ var ControllerProvider = class extends BaseProvider {
715
713
  await document.requestStorageAccess();
716
714
  }
717
715
  }
718
- this.account = void 0;
716
+ this.account = undefined;
719
717
  return this.keychain.disconnect();
720
718
  }
721
719
  async openProfile(tab = "inventory") {
@@ -730,6 +728,30 @@ var ControllerProvider = class extends BaseProvider {
730
728
  this.profile.navigate(`${this.iframes.profile.url?.pathname}/${tab}`);
731
729
  this.iframes.profile.open();
732
730
  }
731
+ async openProfileTo(to) {
732
+ if (!this.profile || !this.iframes.profile?.url) {
733
+ console.error("Profile is not ready");
734
+ return;
735
+ }
736
+ if (!this.account) {
737
+ console.error("Account is not ready");
738
+ return;
739
+ }
740
+ this.profile.navigate(`${this.iframes.profile.url?.pathname}/${to}`);
741
+ this.iframes.profile.open();
742
+ }
743
+ async openProfileAt(at) {
744
+ if (!this.profile || !this.iframes.profile?.url) {
745
+ console.error("Profile is not ready");
746
+ return;
747
+ }
748
+ if (!this.account) {
749
+ console.error("Account is not ready");
750
+ return;
751
+ }
752
+ this.profile.navigate(at);
753
+ this.iframes.profile.open();
754
+ }
733
755
  async openSettings() {
734
756
  if (!this.keychain || !this.iframes.keychain) {
735
757
  console.error(new NotReadyToConnect().message);
@@ -766,12 +788,6 @@ var ControllerProvider = class extends BaseProvider {
766
788
  }
767
789
  return this.keychain.username();
768
790
  }
769
- fetchControllers(contractAddresses) {
770
- if (!this.keychain) {
771
- throw new NotReadyToConnect().message;
772
- }
773
- return this.keychain.fetchControllers(contractAddresses);
774
- }
775
791
  openPurchaseCredits() {
776
792
  if (!this.keychain || !this.iframes.keychain) {
777
793
  console.error(new NotReadyToConnect().message);
@@ -801,7 +817,7 @@ var ControllerProvider = class extends BaseProvider {
801
817
  this.iframes.profile?.sendBackward();
802
818
  this.iframes.keychain.open();
803
819
  this.iframes.profile?.close();
804
- const res = await this.keychain.execute(calls, void 0, void 0, true);
820
+ const res = await this.keychain.execute(calls, undefined, undefined, true);
805
821
  this.iframes.profile?.open();
806
822
  this.iframes.keychain.close();
807
823
  this.iframes.profile?.sendForward();
@@ -818,7 +834,7 @@ var ControllerProvider = class extends BaseProvider {
818
834
  return await this.keychain.delegateAccount();
819
835
  }
820
836
  waitForKeychain({
821
- timeout = 5e3,
837
+ timeout = 5e4,
822
838
  interval = 100
823
839
  } = {}) {
824
840
  return new Promise((resolve, reject) => {
@@ -836,7 +852,7 @@ var ControllerProvider = class extends BaseProvider {
836
852
  });
837
853
  }
838
854
  };
839
- export {
840
- ControllerProvider as default
841
- };
855
+
856
+ export { ControllerProvider as default };
857
+ //# sourceMappingURL=controller.js.map
842
858
  //# sourceMappingURL=controller.js.map