@metamask-previews/multichain-account-service 0.0.0-preview-21df933

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 (76) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +20 -0
  3. package/README.md +17 -0
  4. package/dist/MultichainAccountService.cjs +120 -0
  5. package/dist/MultichainAccountService.cjs.map +1 -0
  6. package/dist/MultichainAccountService.d.cts +55 -0
  7. package/dist/MultichainAccountService.d.cts.map +1 -0
  8. package/dist/MultichainAccountService.d.mts +55 -0
  9. package/dist/MultichainAccountService.d.mts.map +1 -0
  10. package/dist/MultichainAccountService.mjs +116 -0
  11. package/dist/MultichainAccountService.mjs.map +1 -0
  12. package/dist/index.cjs +6 -0
  13. package/dist/index.cjs.map +1 -0
  14. package/dist/index.d.cts +3 -0
  15. package/dist/index.d.cts.map +1 -0
  16. package/dist/index.d.mts +3 -0
  17. package/dist/index.d.mts.map +1 -0
  18. package/dist/index.mjs +2 -0
  19. package/dist/index.mjs.map +1 -0
  20. package/dist/providers/BaseAccountProvider.cjs +59 -0
  21. package/dist/providers/BaseAccountProvider.cjs.map +1 -0
  22. package/dist/providers/BaseAccountProvider.d.cts +26 -0
  23. package/dist/providers/BaseAccountProvider.d.cts.map +1 -0
  24. package/dist/providers/BaseAccountProvider.d.mts +26 -0
  25. package/dist/providers/BaseAccountProvider.d.mts.map +1 -0
  26. package/dist/providers/BaseAccountProvider.mjs +54 -0
  27. package/dist/providers/BaseAccountProvider.mjs.map +1 -0
  28. package/dist/providers/EvmAccountProvider.cjs +14 -0
  29. package/dist/providers/EvmAccountProvider.cjs.map +1 -0
  30. package/dist/providers/EvmAccountProvider.d.cts +6 -0
  31. package/dist/providers/EvmAccountProvider.d.cts.map +1 -0
  32. package/dist/providers/EvmAccountProvider.d.mts +6 -0
  33. package/dist/providers/EvmAccountProvider.d.mts.map +1 -0
  34. package/dist/providers/EvmAccountProvider.mjs +10 -0
  35. package/dist/providers/EvmAccountProvider.mjs.map +1 -0
  36. package/dist/providers/SolAccountProvider.cjs +15 -0
  37. package/dist/providers/SolAccountProvider.cjs.map +1 -0
  38. package/dist/providers/SolAccountProvider.d.cts +8 -0
  39. package/dist/providers/SolAccountProvider.d.cts.map +1 -0
  40. package/dist/providers/SolAccountProvider.d.mts +8 -0
  41. package/dist/providers/SolAccountProvider.d.mts.map +1 -0
  42. package/dist/providers/SolAccountProvider.mjs +11 -0
  43. package/dist/providers/SolAccountProvider.mjs.map +1 -0
  44. package/dist/tests/accounts.cjs +179 -0
  45. package/dist/tests/accounts.cjs.map +1 -0
  46. package/dist/tests/accounts.d.cts +82 -0
  47. package/dist/tests/accounts.d.cts.map +1 -0
  48. package/dist/tests/accounts.d.mts +82 -0
  49. package/dist/tests/accounts.d.mts.map +1 -0
  50. package/dist/tests/accounts.mjs +175 -0
  51. package/dist/tests/accounts.mjs.map +1 -0
  52. package/dist/tests/index.cjs +19 -0
  53. package/dist/tests/index.cjs.map +1 -0
  54. package/dist/tests/index.d.cts +3 -0
  55. package/dist/tests/index.d.cts.map +1 -0
  56. package/dist/tests/index.d.mts +3 -0
  57. package/dist/tests/index.d.mts.map +1 -0
  58. package/dist/tests/index.mjs +3 -0
  59. package/dist/tests/index.mjs.map +1 -0
  60. package/dist/tests/messenger.cjs +35 -0
  61. package/dist/tests/messenger.cjs.map +1 -0
  62. package/dist/tests/messenger.d.cts +16 -0
  63. package/dist/tests/messenger.d.cts.map +1 -0
  64. package/dist/tests/messenger.d.mts +16 -0
  65. package/dist/tests/messenger.d.mts.map +1 -0
  66. package/dist/tests/messenger.mjs +30 -0
  67. package/dist/tests/messenger.mjs.map +1 -0
  68. package/dist/types.cjs +3 -0
  69. package/dist/types.cjs.map +1 -0
  70. package/dist/types.d.cts +30 -0
  71. package/dist/types.d.cts.map +1 -0
  72. package/dist/types.d.mts +30 -0
  73. package/dist/types.d.mts.map +1 -0
  74. package/dist/types.mjs +2 -0
  75. package/dist/types.mjs.map +1 -0
  76. package/package.json +89 -0
@@ -0,0 +1,54 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _BaseAccountProvider_instances, _BaseAccountProvider_getAccounts;
7
+ import { KeyringAccountEntropyTypeOption } from "@metamask/keyring-api";
8
+ /**
9
+ * Checks if an account is BIP-44 compatible.
10
+ *
11
+ * @param account - The account to be tested.
12
+ * @returns True if the account is BIP-44 compatible.
13
+ */
14
+ export function isBip44Account(account) {
15
+ if (!account.options.entropy ||
16
+ account.options.entropy.type !== KeyringAccountEntropyTypeOption.Mnemonic) {
17
+ console.warn("! Found an HD account with invalid entropy options: account won't be associated to its wallet.");
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ export class BaseAccountProvider {
23
+ constructor(messenger) {
24
+ _BaseAccountProvider_instances.add(this);
25
+ this.messenger = messenger;
26
+ }
27
+ getAccounts() {
28
+ return __classPrivateFieldGet(this, _BaseAccountProvider_instances, "m", _BaseAccountProvider_getAccounts).call(this);
29
+ }
30
+ getAccount(id) {
31
+ // TODO: Maybe just use a proper find for faster lookup?
32
+ const [found] = __classPrivateFieldGet(this, _BaseAccountProvider_instances, "m", _BaseAccountProvider_getAccounts).call(this, (account) => account.id === id);
33
+ if (!found) {
34
+ throw new Error(`Unable to find account: ${id}`);
35
+ }
36
+ return found;
37
+ }
38
+ }
39
+ _BaseAccountProvider_instances = new WeakSet(), _BaseAccountProvider_getAccounts = function _BaseAccountProvider_getAccounts(filter = () => true) {
40
+ const accounts = [];
41
+ for (const account of this.messenger.call(
42
+ // NOTE: Even though the name is misleading, this only fetches all internal
43
+ // accounts, including EVM and non-EVM. We might wanna change this action
44
+ // name once we fully support multichain accounts.
45
+ 'AccountsController:listMultichainAccounts')) {
46
+ if (this.isAccountCompatible(account) &&
47
+ isBip44Account(account) &&
48
+ filter(account)) {
49
+ accounts.push(account);
50
+ }
51
+ }
52
+ return accounts;
53
+ };
54
+ //# sourceMappingURL=BaseAccountProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/BaseAccountProvider.ts"],"names":[],"mappings":";;;;;;AAMA,OAAO,EAAE,+BAA+B,EAAE,8BAA8B;AAWxE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB;IAEhB,IACE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO;QACxB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,+BAA+B,CAAC,QAAQ,EACzE;QACA,OAAO,CAAC,IAAI,CACV,gGAAgG,CACjG,CAAC;QACF,OAAO,KAAK,CAAC;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAgB,mBAAmB;IAKvC,YAAY,SAA4C;;QACtD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAyBD,WAAW;QACT,OAAO,uBAAA,IAAI,wEAAa,MAAjB,IAAI,CAAe,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,EAAa;QACtB,wDAAwD;QACxD,MAAM,CAAC,KAAK,CAAC,GAAG,uBAAA,IAAI,wEAAa,MAAjB,IAAI,EAAc,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAElE,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;SAClD;QAED,OAAO,KAAK,CAAC;IACf,CAAC;CAGF;6HAtCG,SAAgD,GAAG,EAAE,CAAC,IAAI;IAE1D,MAAM,QAAQ,GAAoC,EAAE,CAAC;IAErD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI;IACvC,2EAA2E;IAC3E,yEAAyE;IACzE,kDAAkD;IAClD,2CAA2C,CAC5C,EAAE;QACD,IACE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;YACjC,cAAc,CAAC,OAAO,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,EACf;YACA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACxB;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["import type { AccountProvider } from '@metamask/account-api';\nimport type { AccountId } from '@metamask/accounts-controller';\nimport type {\n KeyringAccount,\n KeyringAccountEntropyMnemonicOptions,\n} from '@metamask/keyring-api';\nimport { KeyringAccountEntropyTypeOption } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport type { MultichainAccountServiceMessenger } from '../types';\n\nexport type Bip44Account<Account extends KeyringAccount> = Account & {\n options: {\n entropy: KeyringAccountEntropyMnemonicOptions;\n };\n};\n\n/**\n * Checks if an account is BIP-44 compatible.\n *\n * @param account - The account to be tested.\n * @returns True if the account is BIP-44 compatible.\n */\nexport function isBip44Account<Account extends KeyringAccount>(\n account: Account,\n): account is Bip44Account<Account> {\n if (\n !account.options.entropy ||\n account.options.entropy.type !== KeyringAccountEntropyTypeOption.Mnemonic\n ) {\n console.warn(\n \"! Found an HD account with invalid entropy options: account won't be associated to its wallet.\",\n );\n return false;\n }\n\n return true;\n}\n\nexport abstract class BaseAccountProvider\n implements AccountProvider<InternalAccount>\n{\n protected readonly messenger: MultichainAccountServiceMessenger;\n\n constructor(messenger: MultichainAccountServiceMessenger) {\n this.messenger = messenger;\n }\n\n #getAccounts(\n filter: (account: InternalAccount) => boolean = () => true,\n ): Bip44Account<InternalAccount>[] {\n const accounts: Bip44Account<InternalAccount>[] = [];\n\n for (const account of this.messenger.call(\n // NOTE: Even though the name is misleading, this only fetches all internal\n // accounts, including EVM and non-EVM. We might wanna change this action\n // name once we fully support multichain accounts.\n 'AccountsController:listMultichainAccounts',\n )) {\n if (\n this.isAccountCompatible(account) &&\n isBip44Account(account) &&\n filter(account)\n ) {\n accounts.push(account);\n }\n }\n\n return accounts;\n }\n\n getAccounts(): InternalAccount[] {\n return this.#getAccounts();\n }\n\n getAccount(id: AccountId): InternalAccount {\n // TODO: Maybe just use a proper find for faster lookup?\n const [found] = this.#getAccounts((account) => account.id === id);\n\n if (!found) {\n throw new Error(`Unable to find account: ${id}`);\n }\n\n return found;\n }\n\n abstract isAccountCompatible(account: InternalAccount): boolean;\n}\n"]}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EvmAccountProvider = void 0;
4
+ const keyring_api_1 = require("@metamask/keyring-api");
5
+ const keyring_controller_1 = require("@metamask/keyring-controller");
6
+ const BaseAccountProvider_1 = require("./BaseAccountProvider.cjs");
7
+ class EvmAccountProvider extends BaseAccountProvider_1.BaseAccountProvider {
8
+ isAccountCompatible(account) {
9
+ return (account.type === keyring_api_1.EthAccountType.Eoa &&
10
+ account.metadata.keyring.type === keyring_controller_1.KeyringTypes.hd);
11
+ }
12
+ }
13
+ exports.EvmAccountProvider = EvmAccountProvider;
14
+ //# sourceMappingURL=EvmAccountProvider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/EvmAccountProvider.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,qEAA4D;AAG5D,mEAA4D;AAE5D,MAAa,kBAAmB,SAAQ,yCAAmB;IACzD,mBAAmB,CAAC,OAAwB;QAC1C,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,4BAAc,CAAC,GAAG;YACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAM,iCAAY,CAAC,EAAa,CAC9D,CAAC;IACJ,CAAC;CACF;AAPD,gDAOC","sourcesContent":["import { EthAccountType } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { BaseAccountProvider } from './BaseAccountProvider';\n\nexport class EvmAccountProvider extends BaseAccountProvider {\n isAccountCompatible(account: InternalAccount): boolean {\n return (\n account.type === EthAccountType.Eoa &&\n account.metadata.keyring.type === (KeyringTypes.hd as string)\n );\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
+ import { BaseAccountProvider } from "./BaseAccountProvider.cjs";
3
+ export declare class EvmAccountProvider extends BaseAccountProvider {
4
+ isAccountCompatible(account: InternalAccount): boolean;
5
+ }
6
+ //# sourceMappingURL=EvmAccountProvider.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/EvmAccountProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,qBAAa,kBAAmB,SAAQ,mBAAmB;IACzD,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;CAMvD"}
@@ -0,0 +1,6 @@
1
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
+ import { BaseAccountProvider } from "./BaseAccountProvider.mjs";
3
+ export declare class EvmAccountProvider extends BaseAccountProvider {
4
+ isAccountCompatible(account: InternalAccount): boolean;
5
+ }
6
+ //# sourceMappingURL=EvmAccountProvider.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/EvmAccountProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,qBAAa,kBAAmB,SAAQ,mBAAmB;IACzD,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;CAMvD"}
@@ -0,0 +1,10 @@
1
+ import { EthAccountType } from "@metamask/keyring-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import { BaseAccountProvider } from "./BaseAccountProvider.mjs";
4
+ export class EvmAccountProvider extends BaseAccountProvider {
5
+ isAccountCompatible(account) {
6
+ return (account.type === EthAccountType.Eoa &&
7
+ account.metadata.keyring.type === KeyringTypes.hd);
8
+ }
9
+ }
10
+ //# sourceMappingURL=EvmAccountProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/EvmAccountProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAG5D,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IACzD,mBAAmB,CAAC,OAAwB;QAC1C,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,GAAG;YACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAM,YAAY,CAAC,EAAa,CAC9D,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { EthAccountType } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { BaseAccountProvider } from './BaseAccountProvider';\n\nexport class EvmAccountProvider extends BaseAccountProvider {\n isAccountCompatible(account: InternalAccount): boolean {\n return (\n account.type === EthAccountType.Eoa &&\n account.metadata.keyring.type === (KeyringTypes.hd as string)\n );\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolAccountProvider = void 0;
4
+ const keyring_api_1 = require("@metamask/keyring-api");
5
+ const keyring_controller_1 = require("@metamask/keyring-controller");
6
+ const BaseAccountProvider_1 = require("./BaseAccountProvider.cjs");
7
+ class SolAccountProvider extends BaseAccountProvider_1.BaseAccountProvider {
8
+ isAccountCompatible(account) {
9
+ return (account.type === keyring_api_1.SolAccountType.DataAccount &&
10
+ account.metadata.keyring.type === keyring_controller_1.KeyringTypes.snap);
11
+ }
12
+ }
13
+ exports.SolAccountProvider = SolAccountProvider;
14
+ SolAccountProvider.SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap';
15
+ //# sourceMappingURL=SolAccountProvider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":";;;AAAA,uDAAuD;AACvD,qEAA4D;AAI5D,mEAA4D;AAE5D,MAAa,kBAAmB,SAAQ,yCAAmB;IAGzD,mBAAmB,CAAC,OAAwB;QAC1C,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,4BAAc,CAAC,WAAW;YAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAM,iCAAY,CAAC,IAAe,CAChE,CAAC;IACJ,CAAC;;AARH,gDASC;AARQ,iCAAc,GAAG,kCAA4C,CAAC","sourcesContent":["import { SolAccountType } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { SnapId } from '@metamask/snaps-sdk';\n\nimport { BaseAccountProvider } from './BaseAccountProvider';\n\nexport class SolAccountProvider extends BaseAccountProvider {\n static SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap' as SnapId;\n\n isAccountCompatible(account: InternalAccount): boolean {\n return (\n account.type === SolAccountType.DataAccount &&\n account.metadata.keyring.type === (KeyringTypes.snap as string)\n );\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
+ import type { SnapId } from "@metamask/snaps-sdk";
3
+ import { BaseAccountProvider } from "./BaseAccountProvider.cjs";
4
+ export declare class SolAccountProvider extends BaseAccountProvider {
5
+ static SOLANA_SNAP_ID: SnapId;
6
+ isAccountCompatible(account: InternalAccount): boolean;
7
+ }
8
+ //# sourceMappingURL=SolAccountProvider.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,qBAAa,kBAAmB,SAAQ,mBAAmB;IACzD,MAAM,CAAC,cAAc,SAAgD;IAErE,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;CAMvD"}
@@ -0,0 +1,8 @@
1
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
2
+ import type { SnapId } from "@metamask/snaps-sdk";
3
+ import { BaseAccountProvider } from "./BaseAccountProvider.mjs";
4
+ export declare class SolAccountProvider extends BaseAccountProvider {
5
+ static SOLANA_SNAP_ID: SnapId;
6
+ isAccountCompatible(account: InternalAccount): boolean;
7
+ }
8
+ //# sourceMappingURL=SolAccountProvider.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,qBAAa,kBAAmB,SAAQ,mBAAmB;IACzD,MAAM,CAAC,cAAc,SAAgD;IAErE,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO;CAMvD"}
@@ -0,0 +1,11 @@
1
+ import { SolAccountType } from "@metamask/keyring-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import { BaseAccountProvider } from "./BaseAccountProvider.mjs";
4
+ export class SolAccountProvider extends BaseAccountProvider {
5
+ isAccountCompatible(account) {
6
+ return (account.type === SolAccountType.DataAccount &&
7
+ account.metadata.keyring.type === KeyringTypes.snap);
8
+ }
9
+ }
10
+ SolAccountProvider.SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap';
11
+ //# sourceMappingURL=SolAccountProvider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,8BAA8B;AACvD,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAI5D,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IAGzD,mBAAmB,CAAC,OAAwB;QAC1C,OAAO,CACL,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,WAAW;YAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAM,YAAY,CAAC,IAAe,CAChE,CAAC;IACJ,CAAC;;AAPM,iCAAc,GAAG,kCAA4C,CAAC","sourcesContent":["import { SolAccountType } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { SnapId } from '@metamask/snaps-sdk';\n\nimport { BaseAccountProvider } from './BaseAccountProvider';\n\nexport class SolAccountProvider extends BaseAccountProvider {\n static SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap' as SnapId;\n\n isAccountCompatible(account: InternalAccount): boolean {\n return (\n account.type === SolAccountType.DataAccount &&\n account.metadata.keyring.type === (KeyringTypes.snap as string)\n );\n }\n}\n"]}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _MockAccountBuilder_account;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.MockAccountBuilder = exports.MOCK_HARDWARE_ACCOUNT_1 = exports.MOCK_SNAP_ACCOUNT_2 = exports.MOCK_SNAP_ACCOUNT_1 = exports.MOCK_HD_ACCOUNT_2 = exports.MOCK_HD_ACCOUNT_1 = exports.MOCK_HD_KEYRING_2 = exports.MOCK_HD_KEYRING_1 = exports.MOCK_ENTROPY_SOURCE_2 = exports.MOCK_ENTROPY_SOURCE_1 = exports.MOCK_SNAP_2 = exports.MOCK_SNAP_1 = void 0;
16
+ const keyring_api_1 = require("@metamask/keyring-api");
17
+ const keyring_controller_1 = require("@metamask/keyring-controller");
18
+ const BaseAccountProvider_1 = require("../providers/BaseAccountProvider.cjs");
19
+ const ETH_EOA_METHODS = [
20
+ keyring_api_1.EthMethod.PersonalSign,
21
+ keyring_api_1.EthMethod.Sign,
22
+ keyring_api_1.EthMethod.SignTransaction,
23
+ keyring_api_1.EthMethod.SignTypedDataV1,
24
+ keyring_api_1.EthMethod.SignTypedDataV3,
25
+ keyring_api_1.EthMethod.SignTypedDataV4,
26
+ ];
27
+ const SOL_METHODS = Object.values(keyring_api_1.SolMethod);
28
+ exports.MOCK_SNAP_1 = {
29
+ id: 'local:mock-snap-id-1',
30
+ name: 'Mock Snap 1',
31
+ enabled: true,
32
+ manifest: {
33
+ proposedName: 'Mock Snap 1',
34
+ },
35
+ };
36
+ exports.MOCK_SNAP_2 = {
37
+ id: 'local:mock-snap-id-2',
38
+ name: 'Mock Snap 2',
39
+ enabled: true,
40
+ manifest: {
41
+ proposedName: 'Mock Snap 2',
42
+ },
43
+ };
44
+ exports.MOCK_ENTROPY_SOURCE_1 = 'mock-keyring-id-1';
45
+ exports.MOCK_ENTROPY_SOURCE_2 = 'mock-keyring-id-2';
46
+ exports.MOCK_HD_KEYRING_1 = {
47
+ type: keyring_controller_1.KeyringTypes.hd,
48
+ metadata: { id: exports.MOCK_ENTROPY_SOURCE_1, name: 'HD Keyring 1' },
49
+ accounts: ['0x123'],
50
+ };
51
+ exports.MOCK_HD_KEYRING_2 = {
52
+ type: keyring_controller_1.KeyringTypes.hd,
53
+ metadata: { id: exports.MOCK_ENTROPY_SOURCE_2, name: 'HD Keyring 2' },
54
+ accounts: ['0x456'],
55
+ };
56
+ exports.MOCK_HD_ACCOUNT_1 = {
57
+ id: 'mock-id-1',
58
+ address: '0x123',
59
+ options: {
60
+ entropy: {
61
+ type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic,
62
+ id: exports.MOCK_HD_KEYRING_1.metadata.id,
63
+ groupIndex: 0,
64
+ derivationPath: '',
65
+ },
66
+ },
67
+ methods: [...ETH_EOA_METHODS],
68
+ type: keyring_api_1.EthAccountType.Eoa,
69
+ scopes: [keyring_api_1.EthScope.Eoa],
70
+ metadata: {
71
+ name: 'Account 1',
72
+ keyring: { type: keyring_controller_1.KeyringTypes.hd },
73
+ importTime: 0,
74
+ lastSelected: 0,
75
+ nameLastUpdatedAt: 0,
76
+ },
77
+ };
78
+ exports.MOCK_HD_ACCOUNT_2 = {
79
+ id: 'mock-id-2',
80
+ address: '0x456',
81
+ options: {
82
+ entropy: {
83
+ type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic,
84
+ id: exports.MOCK_HD_KEYRING_2.metadata.id,
85
+ groupIndex: 0,
86
+ derivationPath: '',
87
+ },
88
+ },
89
+ methods: [...ETH_EOA_METHODS],
90
+ type: keyring_api_1.EthAccountType.Eoa,
91
+ scopes: [keyring_api_1.EthScope.Eoa],
92
+ metadata: {
93
+ name: 'Account 2',
94
+ keyring: { type: keyring_controller_1.KeyringTypes.hd },
95
+ importTime: 0,
96
+ lastSelected: 0,
97
+ nameLastUpdatedAt: 0,
98
+ },
99
+ };
100
+ exports.MOCK_SNAP_ACCOUNT_1 = {
101
+ id: 'mock-snap-id-1',
102
+ address: 'aabbccdd',
103
+ options: {
104
+ entropy: {
105
+ type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic,
106
+ // NOTE: shares entropy with MOCK_HD_ACCOUNT_2
107
+ id: exports.MOCK_HD_KEYRING_2.metadata.id,
108
+ groupIndex: 0,
109
+ derivationPath: '',
110
+ },
111
+ },
112
+ methods: SOL_METHODS,
113
+ type: keyring_api_1.SolAccountType.DataAccount,
114
+ scopes: [keyring_api_1.SolScope.Mainnet],
115
+ metadata: {
116
+ name: 'Snap Account 1',
117
+ keyring: { type: keyring_controller_1.KeyringTypes.snap },
118
+ snap: exports.MOCK_SNAP_1,
119
+ importTime: 0,
120
+ lastSelected: 0,
121
+ },
122
+ };
123
+ exports.MOCK_SNAP_ACCOUNT_2 = {
124
+ id: 'mock-snap-id-2',
125
+ address: '0x789',
126
+ options: {},
127
+ methods: [...ETH_EOA_METHODS],
128
+ type: keyring_api_1.EthAccountType.Eoa,
129
+ scopes: [keyring_api_1.EthScope.Eoa],
130
+ metadata: {
131
+ name: 'Snap Acc 2',
132
+ keyring: { type: keyring_controller_1.KeyringTypes.snap },
133
+ snap: exports.MOCK_SNAP_2,
134
+ importTime: 0,
135
+ lastSelected: 0,
136
+ },
137
+ };
138
+ exports.MOCK_HARDWARE_ACCOUNT_1 = {
139
+ id: 'mock-hardware-id-1',
140
+ address: '0xABC',
141
+ options: {},
142
+ methods: [...ETH_EOA_METHODS],
143
+ type: keyring_api_1.EthAccountType.Eoa,
144
+ scopes: [keyring_api_1.EthScope.Eoa],
145
+ metadata: {
146
+ name: 'Hardware Acc 1',
147
+ keyring: { type: keyring_controller_1.KeyringTypes.ledger },
148
+ importTime: 0,
149
+ lastSelected: 0,
150
+ },
151
+ };
152
+ class MockAccountBuilder {
153
+ constructor(account) {
154
+ _MockAccountBuilder_account.set(this, void 0);
155
+ // Make a deep-copy to avoid mutating the same ref.
156
+ __classPrivateFieldSet(this, _MockAccountBuilder_account, JSON.parse(JSON.stringify(account)), "f");
157
+ }
158
+ static from(account) {
159
+ return new MockAccountBuilder(account);
160
+ }
161
+ withEntropySource(entropySource) {
162
+ if ((0, BaseAccountProvider_1.isBip44Account)(__classPrivateFieldGet(this, _MockAccountBuilder_account, "f"))) {
163
+ __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").options.entropy.id = entropySource;
164
+ }
165
+ return this;
166
+ }
167
+ withGroupIndex(groupIndex) {
168
+ if ((0, BaseAccountProvider_1.isBip44Account)(__classPrivateFieldGet(this, _MockAccountBuilder_account, "f"))) {
169
+ __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").options.entropy.groupIndex = groupIndex;
170
+ }
171
+ return this;
172
+ }
173
+ get() {
174
+ return __classPrivateFieldGet(this, _MockAccountBuilder_account, "f");
175
+ }
176
+ }
177
+ exports.MockAccountBuilder = MockAccountBuilder;
178
+ _MockAccountBuilder_account = new WeakMap();
179
+ //# sourceMappingURL=accounts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.cjs","sourceRoot":"","sources":["../../src/tests/accounts.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EntropySourceId } from '@metamask/keyring-api';\nimport {\n EthAccountType,\n EthMethod,\n EthScope,\n KeyringAccountEntropyTypeOption,\n SolAccountType,\n SolMethod,\n SolScope,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { isBip44Account } from '../providers/BaseAccountProvider';\n\nconst ETH_EOA_METHODS = [\n EthMethod.PersonalSign,\n EthMethod.Sign,\n EthMethod.SignTransaction,\n EthMethod.SignTypedDataV1,\n EthMethod.SignTypedDataV3,\n EthMethod.SignTypedDataV4,\n] as const;\n\nconst SOL_METHODS = Object.values(SolMethod);\n\nexport const MOCK_SNAP_1 = {\n id: 'local:mock-snap-id-1',\n name: 'Mock Snap 1',\n enabled: true,\n manifest: {\n proposedName: 'Mock Snap 1',\n },\n};\n\nexport const MOCK_SNAP_2 = {\n id: 'local:mock-snap-id-2',\n name: 'Mock Snap 2',\n enabled: true,\n manifest: {\n proposedName: 'Mock Snap 2',\n },\n};\n\nexport const MOCK_ENTROPY_SOURCE_1 = 'mock-keyring-id-1';\nexport const MOCK_ENTROPY_SOURCE_2 = 'mock-keyring-id-2';\n\nexport const MOCK_HD_KEYRING_1 = {\n type: KeyringTypes.hd,\n metadata: { id: MOCK_ENTROPY_SOURCE_1, name: 'HD Keyring 1' },\n accounts: ['0x123'],\n};\n\nexport const MOCK_HD_KEYRING_2 = {\n type: KeyringTypes.hd,\n metadata: { id: MOCK_ENTROPY_SOURCE_2, name: 'HD Keyring 2' },\n accounts: ['0x456'],\n};\n\nexport const MOCK_HD_ACCOUNT_1: InternalAccount = {\n id: 'mock-id-1',\n address: '0x123',\n options: {\n entropy: {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n id: MOCK_HD_KEYRING_1.metadata.id,\n groupIndex: 0,\n derivationPath: '',\n },\n },\n methods: [...ETH_EOA_METHODS],\n type: EthAccountType.Eoa,\n scopes: [EthScope.Eoa],\n metadata: {\n name: 'Account 1',\n keyring: { type: KeyringTypes.hd },\n importTime: 0,\n lastSelected: 0,\n nameLastUpdatedAt: 0,\n },\n};\n\nexport const MOCK_HD_ACCOUNT_2: InternalAccount = {\n id: 'mock-id-2',\n address: '0x456',\n options: {\n entropy: {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n id: MOCK_HD_KEYRING_2.metadata.id,\n groupIndex: 0,\n derivationPath: '',\n },\n },\n methods: [...ETH_EOA_METHODS],\n type: EthAccountType.Eoa,\n scopes: [EthScope.Eoa],\n metadata: {\n name: 'Account 2',\n keyring: { type: KeyringTypes.hd },\n importTime: 0,\n lastSelected: 0,\n nameLastUpdatedAt: 0,\n },\n};\n\nexport const MOCK_SNAP_ACCOUNT_1: InternalAccount = {\n id: 'mock-snap-id-1',\n address: 'aabbccdd',\n options: {\n entropy: {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n // NOTE: shares entropy with MOCK_HD_ACCOUNT_2\n id: MOCK_HD_KEYRING_2.metadata.id,\n groupIndex: 0,\n derivationPath: '',\n },\n },\n methods: SOL_METHODS,\n type: SolAccountType.DataAccount,\n scopes: [SolScope.Mainnet],\n metadata: {\n name: 'Snap Account 1',\n keyring: { type: KeyringTypes.snap },\n snap: MOCK_SNAP_1,\n importTime: 0,\n lastSelected: 0,\n },\n};\n\nexport const MOCK_SNAP_ACCOUNT_2: InternalAccount = {\n id: 'mock-snap-id-2',\n address: '0x789',\n options: {},\n methods: [...ETH_EOA_METHODS],\n type: EthAccountType.Eoa,\n scopes: [EthScope.Eoa],\n metadata: {\n name: 'Snap Acc 2',\n keyring: { type: KeyringTypes.snap },\n snap: MOCK_SNAP_2,\n importTime: 0,\n lastSelected: 0,\n },\n};\n\nexport const MOCK_HARDWARE_ACCOUNT_1: InternalAccount = {\n id: 'mock-hardware-id-1',\n address: '0xABC',\n options: {},\n methods: [...ETH_EOA_METHODS],\n type: EthAccountType.Eoa,\n scopes: [EthScope.Eoa],\n metadata: {\n name: 'Hardware Acc 1',\n keyring: { type: KeyringTypes.ledger },\n importTime: 0,\n lastSelected: 0,\n },\n};\n\nexport class MockAccountBuilder {\n readonly #account: InternalAccount;\n\n constructor(account: InternalAccount) {\n // Make a deep-copy to avoid mutating the same ref.\n this.#account = JSON.parse(JSON.stringify(account));\n }\n\n static from(account: InternalAccount): MockAccountBuilder {\n return new MockAccountBuilder(account);\n }\n\n withEntropySource(entropySource: EntropySourceId) {\n if (isBip44Account(this.#account)) {\n this.#account.options.entropy.id = entropySource;\n }\n return this;\n }\n\n withGroupIndex(groupIndex: number) {\n if (isBip44Account(this.#account)) {\n this.#account.options.entropy.groupIndex = groupIndex;\n }\n return this;\n }\n\n get() {\n return this.#account;\n }\n}\n"]}
@@ -0,0 +1,82 @@
1
+ import type { EntropySourceId } from "@metamask/keyring-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
4
+ export declare const MOCK_SNAP_1: {
5
+ id: string;
6
+ name: string;
7
+ enabled: boolean;
8
+ manifest: {
9
+ proposedName: string;
10
+ };
11
+ };
12
+ export declare const MOCK_SNAP_2: {
13
+ id: string;
14
+ name: string;
15
+ enabled: boolean;
16
+ manifest: {
17
+ proposedName: string;
18
+ };
19
+ };
20
+ export declare const MOCK_ENTROPY_SOURCE_1 = "mock-keyring-id-1";
21
+ export declare const MOCK_ENTROPY_SOURCE_2 = "mock-keyring-id-2";
22
+ export declare const MOCK_HD_KEYRING_1: {
23
+ type: KeyringTypes;
24
+ metadata: {
25
+ id: string;
26
+ name: string;
27
+ };
28
+ accounts: string[];
29
+ };
30
+ export declare const MOCK_HD_KEYRING_2: {
31
+ type: KeyringTypes;
32
+ metadata: {
33
+ id: string;
34
+ name: string;
35
+ };
36
+ accounts: string[];
37
+ };
38
+ export declare const MOCK_HD_ACCOUNT_1: InternalAccount;
39
+ export declare const MOCK_HD_ACCOUNT_2: InternalAccount;
40
+ export declare const MOCK_SNAP_ACCOUNT_1: InternalAccount;
41
+ export declare const MOCK_SNAP_ACCOUNT_2: InternalAccount;
42
+ export declare const MOCK_HARDWARE_ACCOUNT_1: InternalAccount;
43
+ export declare class MockAccountBuilder {
44
+ #private;
45
+ constructor(account: InternalAccount);
46
+ static from(account: InternalAccount): MockAccountBuilder;
47
+ withEntropySource(entropySource: EntropySourceId): this;
48
+ withGroupIndex(groupIndex: number): this;
49
+ get(): {
50
+ type: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account";
51
+ id: string;
52
+ options: Record<string, import("@metamask/utils").Json> & {
53
+ entropy?: {
54
+ type: "mnemonic";
55
+ id: string;
56
+ derivationPath: string;
57
+ groupIndex: number;
58
+ } | {
59
+ type: "private-key";
60
+ } | undefined;
61
+ exportable?: boolean | undefined;
62
+ };
63
+ metadata: {
64
+ name: string;
65
+ importTime: number;
66
+ keyring: {
67
+ type: string;
68
+ };
69
+ nameLastUpdatedAt?: number | undefined;
70
+ snap?: {
71
+ name: string;
72
+ id: string;
73
+ enabled: boolean;
74
+ } | undefined;
75
+ lastSelected?: number | undefined;
76
+ };
77
+ address: string;
78
+ scopes: `${string}:${string}`[];
79
+ methods: string[];
80
+ };
81
+ }
82
+ //# sourceMappingURL=accounts.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.cts","sourceRoot":"","sources":["../../src/tests/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B;AAU7D,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAetE,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,eAAO,MAAM,iBAAiB;;;;;;;CAI7B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;CAI7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAsBjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAcjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAarC,CAAC;AAEF,qBAAa,kBAAkB;;gBAGjB,OAAO,EAAE,eAAe;IAKpC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,kBAAkB;IAIzD,iBAAiB,CAAC,aAAa,EAAE,eAAe;IAOhD,cAAc,CAAC,UAAU,EAAE,MAAM;IAOjC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ"}
@@ -0,0 +1,82 @@
1
+ import type { EntropySourceId } from "@metamask/keyring-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
4
+ export declare const MOCK_SNAP_1: {
5
+ id: string;
6
+ name: string;
7
+ enabled: boolean;
8
+ manifest: {
9
+ proposedName: string;
10
+ };
11
+ };
12
+ export declare const MOCK_SNAP_2: {
13
+ id: string;
14
+ name: string;
15
+ enabled: boolean;
16
+ manifest: {
17
+ proposedName: string;
18
+ };
19
+ };
20
+ export declare const MOCK_ENTROPY_SOURCE_1 = "mock-keyring-id-1";
21
+ export declare const MOCK_ENTROPY_SOURCE_2 = "mock-keyring-id-2";
22
+ export declare const MOCK_HD_KEYRING_1: {
23
+ type: KeyringTypes;
24
+ metadata: {
25
+ id: string;
26
+ name: string;
27
+ };
28
+ accounts: string[];
29
+ };
30
+ export declare const MOCK_HD_KEYRING_2: {
31
+ type: KeyringTypes;
32
+ metadata: {
33
+ id: string;
34
+ name: string;
35
+ };
36
+ accounts: string[];
37
+ };
38
+ export declare const MOCK_HD_ACCOUNT_1: InternalAccount;
39
+ export declare const MOCK_HD_ACCOUNT_2: InternalAccount;
40
+ export declare const MOCK_SNAP_ACCOUNT_1: InternalAccount;
41
+ export declare const MOCK_SNAP_ACCOUNT_2: InternalAccount;
42
+ export declare const MOCK_HARDWARE_ACCOUNT_1: InternalAccount;
43
+ export declare class MockAccountBuilder {
44
+ #private;
45
+ constructor(account: InternalAccount);
46
+ static from(account: InternalAccount): MockAccountBuilder;
47
+ withEntropySource(entropySource: EntropySourceId): this;
48
+ withGroupIndex(groupIndex: number): this;
49
+ get(): {
50
+ type: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account";
51
+ id: string;
52
+ options: Record<string, import("@metamask/utils").Json> & {
53
+ entropy?: {
54
+ type: "mnemonic";
55
+ id: string;
56
+ derivationPath: string;
57
+ groupIndex: number;
58
+ } | {
59
+ type: "private-key";
60
+ } | undefined;
61
+ exportable?: boolean | undefined;
62
+ };
63
+ metadata: {
64
+ name: string;
65
+ importTime: number;
66
+ keyring: {
67
+ type: string;
68
+ };
69
+ nameLastUpdatedAt?: number | undefined;
70
+ snap?: {
71
+ name: string;
72
+ id: string;
73
+ enabled: boolean;
74
+ } | undefined;
75
+ lastSelected?: number | undefined;
76
+ };
77
+ address: string;
78
+ scopes: `${string}:${string}`[];
79
+ methods: string[];
80
+ };
81
+ }
82
+ //# sourceMappingURL=accounts.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts.d.mts","sourceRoot":"","sources":["../../src/tests/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B;AAU7D,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAetE,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,eAAO,MAAM,iBAAiB;;;;;;;CAI7B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;CAI7B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAsBjC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,eAcjC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAarC,CAAC;AAEF,qBAAa,kBAAkB;;gBAGjB,OAAO,EAAE,eAAe;IAKpC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,kBAAkB;IAIzD,iBAAiB,CAAC,aAAa,EAAE,eAAe;IAOhD,cAAc,CAAC,UAAU,EAAE,MAAM;IAOjC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ"}