{"version":3,"sources":["../../../node_modules/.pnpm/@starknet-io+types-js@0.8.1/node_modules/@starknet-io/types-js/src/api/constants.ts","../src/starknet/account.ts","../src/starknet/signer.ts","../src/starknet/client.ts"],"names":["ETransactionVersion","ETransactionVersion2","ETransactionVersion3","StarknetAccount","KeybanAccount","#account","rpcClient","account","publicKey","message","typedMessage","_to","_value","_txOptions","_params","StarknetSigner","#rpcClient","#clientShare","#publicKey","clientShare","#signHashedMessage","hashedMessage","encode","formatSignature","typedData","accountAddress","msgHash","tData","transactions","details","compiledCalldata","transaction","det","hash","stark","compiledConstructorCalldata","CallData","signatureHex","r","s","secp256k1","yParity","bigIntR","uint256","bigIntS","num","StarknetClient","KeybanClientBase","#rpcProvider","config","metadataConfig","RpcProvider","provider","address","ethPublicKey","signer","Account"],"mappings":"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","file":"starknet-Q5CMNFHK.mjs","sourcesContent":[null,"/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { Account } from \"starknet\";\n\nimport {\n  type Address,\n  EstimateERC20TransferParams,\n  EstimateNftTransferParams,\n  FeesEstimation,\n  type Hash,\n  type Hex,\n  KeybanAccount,\n  TransactionOptions,\n  TransferERC20Params,\n  TransferNftParams,\n} from \"~/index\";\nimport { RpcClient } from \"~/rpc\";\n\nexport class StarknetAccount extends KeybanAccount {\n  #account: Account;\n\n  address: Address;\n  publicKey: Hex;\n\n  constructor(rpcClient: RpcClient, account: Account, publicKey: Hex) {\n    super(rpcClient);\n\n    this.#account = account;\n\n    this.address = account.address as Address;\n    this.publicKey = publicKey;\n  }\n\n  async signMessage(message: string): Promise<string[]> {\n    // From string message to typedData message\n    const typedMessage = {\n      types: {\n        StarknetDomain: [\n          { name: \"name\", type: \"shortstring\" },\n          { name: \"version\", type: \"shortstring\" },\n          { name: \"chainId\", type: \"shortstring\" },\n          { name: \"revision\", type: \"shortstring\" },\n        ],\n        Message: [{ name: \"message\", type: \"string\" }],\n      },\n      primaryType: \"Message\",\n      domain: {\n        name: \"StarkNet Message\",\n        version: \"1\",\n        chainId: \"1\",\n        revision: \"1\",\n      },\n      message: { message },\n    };\n    // Sign the typedData formatted message\n    const signedMessage = (await this.#account.signMessage(\n      typedMessage,\n    )) as string[];\n    return signedMessage;\n  }\n\n  async transfer(\n    _to: Address,\n    _value: bigint,\n    _txOptions?: TransactionOptions,\n  ): Promise<Hash> {\n    throw new Error(\"Unimplemented\");\n  }\n\n  async estimateTransfer(_to: Address): Promise<FeesEstimation> {\n    throw new Error(\"Unimplemented\");\n  }\n\n  async transferERC20(_params: TransferERC20Params): Promise<Hash> {\n    throw new Error(\"Unimplemented\");\n  }\n\n  async estimateERC20Transfer(\n    _params: EstimateERC20TransferParams,\n  ): Promise<FeesEstimation> {\n    throw new Error(\"Unimplemented\");\n  }\n\n  async transferNft(_params: TransferNftParams): Promise<Hash> {\n    throw new Error(\"Unimplemented\");\n  }\n  async estimateNftTransfer(\n    _params: EstimateNftTransferParams,\n  ): Promise<FeesEstimation> {\n    throw new Error(\"Unimplemented\");\n  }\n}\n","import { secp256k1 } from \"@noble/curves/secp256k1\";\nimport {\n  ETransactionVersion2,\n  ETransactionVersion3,\n} from \"@starknet-io/types-js\";\nimport {\n  Call,\n  CallData,\n  DeclareSignerDetails,\n  DeployAccountSignerDetails,\n  encode,\n  hash,\n  InvocationsSignerDetails,\n  num,\n  Signature,\n  SignerInterface,\n  stark,\n  transaction,\n  TypedData,\n  typedData as tData,\n  Uint256,\n  uint256,\n  V2DeclareSignerDetails,\n  V2DeployAccountSignerDetails,\n  V2InvocationsSignerDetails,\n  V3DeclareSignerDetails,\n  V3DeployAccountSignerDetails,\n  V3InvocationsSignerDetails,\n} from \"starknet\";\n\nimport { Hex } from \"~/index\";\nimport { RpcClient } from \"~/rpc\";\n\nexport class StarknetSigner implements SignerInterface {\n  #rpcClient: RpcClient;\n  #clientShare: string;\n  #publicKey: Hex;\n\n  constructor(rpcClient: RpcClient, clientShare: string, publicKey: Hex) {\n    this.#rpcClient = rpcClient;\n    this.#clientShare = clientShare;\n    this.#publicKey = publicKey;\n  }\n\n  async getPubKey(): Promise<string> {\n    return this.#publicKey;\n  }\n\n  async #signHashedMessage(hashedMessage: string): Promise<Signature> {\n    return this.#rpcClient\n      .call(\n        \"ecdsa\",\n        \"sign\",\n        this.#clientShare,\n        encode.removeHexPrefix(encode.sanitizeHex(hashedMessage)),\n      )\n      .then(formatSignature);\n  }\n\n  async signMessage(\n    typedData: TypedData,\n    accountAddress: string,\n  ): Promise<Signature> {\n    const msgHash = tData.getMessageHash(typedData, accountAddress);\n    return this.#signHashedMessage(msgHash);\n  }\n\n  async signTransaction(\n    transactions: Call[],\n    details: InvocationsSignerDetails,\n  ): Promise<Signature> {\n    const compiledCalldata = transaction.getExecuteCalldata(\n      transactions,\n      details.cairoVersion,\n    );\n    let msgHash;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if (Object.values(ETransactionVersion2).includes(details.version as any)) {\n      const det = details as V2InvocationsSignerDetails;\n      msgHash = hash.calculateInvokeTransactionHash({\n        ...det,\n        senderAddress: det.walletAddress,\n        compiledCalldata,\n        version: det.version,\n      });\n    } else if (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Object.values(ETransactionVersion3).includes(details.version as any)\n    ) {\n      const det = details as V3InvocationsSignerDetails;\n      msgHash = hash.calculateInvokeTransactionHash({\n        ...det,\n        senderAddress: det.walletAddress,\n        compiledCalldata,\n        version: det.version,\n        nonceDataAvailabilityMode: stark.intDAM(det.nonceDataAvailabilityMode),\n        feeDataAvailabilityMode: stark.intDAM(det.feeDataAvailabilityMode),\n      });\n    } else {\n      throw Error(\"unsupported signTransaction version\");\n    }\n    return this.#signHashedMessage(msgHash);\n  }\n\n  async signDeployAccountTransaction(\n    details: DeployAccountSignerDetails,\n  ): Promise<Signature> {\n    const compiledConstructorCalldata = CallData.compile(\n      details.constructorCalldata,\n    );\n    let msgHash;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if (Object.values(ETransactionVersion2).includes(details.version as any)) {\n      const det = details as V2DeployAccountSignerDetails;\n      msgHash = hash.calculateDeployAccountTransactionHash({\n        ...det,\n        salt: det.addressSalt,\n        constructorCalldata: compiledConstructorCalldata,\n        version: det.version,\n      });\n    } else if (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Object.values(ETransactionVersion3).includes(details.version as any)\n    ) {\n      const det = details as V3DeployAccountSignerDetails;\n      msgHash = hash.calculateDeployAccountTransactionHash({\n        ...det,\n        salt: det.addressSalt,\n        compiledConstructorCalldata,\n        version: det.version,\n        nonceDataAvailabilityMode: stark.intDAM(det.nonceDataAvailabilityMode),\n        feeDataAvailabilityMode: stark.intDAM(det.feeDataAvailabilityMode),\n      });\n    } else {\n      throw Error(\"unsupported signDeployAccountTransaction version\");\n    }\n\n    return this.#signHashedMessage(msgHash);\n  }\n\n  async signDeclareTransaction(\n    details: DeclareSignerDetails,\n  ): Promise<Signature> {\n    let msgHash;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    if (Object.values(ETransactionVersion2).includes(details.version as any)) {\n      const det = details as V2DeclareSignerDetails;\n      msgHash = hash.calculateDeclareTransactionHash({\n        ...det,\n        version: det.version,\n      });\n    } else if (\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Object.values(ETransactionVersion3).includes(details.version as any)\n    ) {\n      const det = details as V3DeclareSignerDetails;\n      msgHash = hash.calculateDeclareTransactionHash({\n        ...det,\n        version: det.version,\n        nonceDataAvailabilityMode: stark.intDAM(det.nonceDataAvailabilityMode),\n        feeDataAvailabilityMode: stark.intDAM(det.feeDataAvailabilityMode),\n      });\n    } else {\n      throw Error(\"unsupported signDeclareTransaction version\");\n    }\n\n    return this.#signHashedMessage(msgHash);\n  }\n}\n\n/**\n * Formats the ECDSA signature to the StarkNet format based on the OZ EthAccount.\n * @param signatureHex - The ECDSA hex signature.\n * @returns - The StarkNet formatted signature.\n */\nfunction formatSignature(signatureHex: Hex): string[] {\n  const { r, s } = secp256k1.Signature.fromCompact(signatureHex.slice(2, 130));\n  const yParity = Number(`0x${signatureHex.slice(130)}`);\n  if (yParity !== 0 && yParity !== 1) {\n    throw new Error(\"Invalid yParity value\");\n  }\n\n  const bigIntR: Uint256 = uint256.bnToUint256(r);\n  const bigIntS: Uint256 = uint256.bnToUint256(s);\n  if (yParity === undefined) throw Error(\"yParity is required\");\n  return [\n    num.toHex(bigIntR.low),\n    num.toHex(bigIntR.high),\n    num.toHex(bigIntS.low),\n    num.toHex(bigIntS.high),\n    num.toHex(yParity),\n  ];\n}\n","import { ETransactionVersion } from \"@starknet-io/types-js\";\nimport { Account, RpcProvider } from \"starknet\";\n\nimport { KeybanClientBase, KeybanClientConfig, MetadataConfig } from \"~/client\";\nimport { Hex } from \"~/index\";\nimport { StarknetAccount } from \"~/starknet/account\";\nimport { StarknetSigner } from \"~/starknet/signer\";\n\nexport class StarknetClient extends KeybanClientBase {\n  #rpcProvider: Promise<RpcProvider>;\n\n  constructor(\n    config: KeybanClientConfig,\n    metadataConfig?: Promise<MetadataConfig>,\n  ) {\n    super(config, metadataConfig);\n\n    this.#rpcProvider = this.metadataConfig.then(\n      (config) => new RpcProvider({ nodeUrl: config.network.rpcUrl }),\n    );\n  }\n\n  async initialize(): Promise<StarknetAccount> {\n    let clientShare = await this.clientShareProvider.get(\"ecdsa\");\n    if (!clientShare) {\n      clientShare = await this.rpcClient.call(\"ecdsa\", \"dkg\");\n      await this.clientShareProvider.set(\"ecdsa\", clientShare);\n    }\n\n    const [provider, publicKey, address] = await Promise.all([\n      this.#rpcProvider,\n      this.rpcClient\n        .call(\"ecdsa\", \"publicKey\", clientShare)\n        // remove the 04 prefix from the public key (it's the ECDSA uncompressed key prefix)\n        .then((ethPublicKey): Hex => `0x${ethPublicKey.slice(4)}`),\n      this.rpcClient.call(\"account\", \"getAddress\"),\n    ]);\n\n    const signer = new StarknetSigner(this.rpcClient, clientShare, publicKey);\n\n    const account = new Account(\n      provider,\n      address,\n      signer,\n      undefined,\n      ETransactionVersion.V3,\n    );\n\n    return new StarknetAccount(this.rpcClient, account, publicKey);\n  }\n}\n"]}