{"version":3,"file":"SnapAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/SnapAccountProvider.ts"],"names":[],"mappings":";;;AAGA,qEAA4D;AAK5D,mEAA4D;AAM5D,MAAsB,mBAAoB,SAAQ,yCAAmB;IAGnE,YAAY,MAAc,EAAE,SAA4C;QACtE,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAES,KAAK,CAAC,+BAA+B;QAC7C,iFAAiF;QACjF,gFAAgF;QAChF,sCAAsC;QACtC,+EAA+E;QAC/E,iFAAiF;QACjF,wDAAwD;QACxD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAG1C,EAAE,IAAI,EAAE,iCAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CACnD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CACpC,CAAC;QAEF,OAAO,CAAC,OAAO,EAAE,EAAE,CACjB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;YAClC,4BAA4B,EAAE,KAAK;YACnC,mBAAmB,EAAE,KAAK;YAC1B,kBAAkB,EAAE,KAAK;SAC1B,CAAC,CAAC;IACP,CAAC;CAaF;AA1CD,kDA0CC","sourcesContent":["import { type Bip44Account } from '@metamask/account-api';\nimport type { SnapKeyring } from '@metamask/eth-snap-keyring';\nimport type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { Json, SnapId } from '@metamask/snaps-sdk';\nimport type { MultichainAccountServiceMessenger } from 'src/types';\n\nimport { BaseAccountProvider } from './BaseAccountProvider';\n\nexport type RestrictedSnapKeyringCreateAccount = (\n  options: Record<string, Json>,\n) => Promise<KeyringAccount>;\n\nexport abstract class SnapAccountProvider extends BaseAccountProvider {\n  readonly snapId: SnapId;\n\n  constructor(snapId: SnapId, messenger: MultichainAccountServiceMessenger) {\n    super(messenger);\n\n    this.snapId = snapId;\n  }\n\n  protected async getRestrictedSnapAccountCreator(): Promise<RestrictedSnapKeyringCreateAccount> {\n    // NOTE: We're not supposed to make the keyring instance escape `withKeyring` but\n    // we have to use the `SnapKeyring` instance to be able to create Solana account\n    // without triggering UI confirmation.\n    // Also, creating account that way won't invalidate the Snap keyring state. The\n    // account will get created and persisted properly with the Snap account creation\n    // flow \"asynchronously\" (with `notify:accountCreated`).\n    const createAccount = await this.withKeyring<\n      SnapKeyring,\n      SnapKeyring['createAccount']\n    >({ type: KeyringTypes.snap }, async ({ keyring }) =>\n      keyring.createAccount.bind(keyring),\n    );\n\n    return (options) =>\n      createAccount(this.snapId, options, {\n        displayAccountNameSuggestion: false,\n        displayConfirmation: false,\n        setSelectedAccount: false,\n      });\n  }\n\n  abstract isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;\n\n  abstract createAccounts(options: {\n    entropySource: EntropySourceId;\n    groupIndex: number;\n  }): Promise<Bip44Account<KeyringAccount>[]>;\n\n  abstract discoverAndCreateAccounts(options: {\n    entropySource: EntropySourceId;\n    groupIndex: number;\n  }): Promise<Bip44Account<KeyringAccount>[]>;\n}\n"]}