@metamask-previews/account-api 0.1.0-6199101 → 0.1.0-f024bb4

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 (47) hide show
  1. package/dist/api/group.cjs.map +1 -1
  2. package/dist/api/group.d.cts +2 -1
  3. package/dist/api/group.d.cts.map +1 -1
  4. package/dist/api/group.d.mts +2 -1
  5. package/dist/api/group.d.mts.map +1 -1
  6. package/dist/api/group.mjs.map +1 -1
  7. package/dist/api/index.cjs +0 -1
  8. package/dist/api/index.cjs.map +1 -1
  9. package/dist/api/index.d.cts +0 -1
  10. package/dist/api/index.d.cts.map +1 -1
  11. package/dist/api/index.d.mts +0 -1
  12. package/dist/api/index.d.mts.map +1 -1
  13. package/dist/api/index.mjs +0 -1
  14. package/dist/api/index.mjs.map +1 -1
  15. package/package.json +2 -5
  16. package/dist/api/multichain/account.cjs +0 -135
  17. package/dist/api/multichain/account.cjs.map +0 -1
  18. package/dist/api/multichain/account.d.cts +0 -111
  19. package/dist/api/multichain/account.d.cts.map +0 -1
  20. package/dist/api/multichain/account.d.mts +0 -111
  21. package/dist/api/multichain/account.d.mts.map +0 -1
  22. package/dist/api/multichain/account.mjs +0 -129
  23. package/dist/api/multichain/account.mjs.map +0 -1
  24. package/dist/api/multichain/index.cjs +0 -19
  25. package/dist/api/multichain/index.cjs.map +0 -1
  26. package/dist/api/multichain/index.d.cts +0 -4
  27. package/dist/api/multichain/index.d.cts.map +0 -1
  28. package/dist/api/multichain/index.d.mts +0 -4
  29. package/dist/api/multichain/index.d.mts.map +0 -1
  30. package/dist/api/multichain/index.mjs +0 -3
  31. package/dist/api/multichain/index.mjs.map +0 -1
  32. package/dist/api/multichain/provider.cjs +0 -3
  33. package/dist/api/multichain/provider.cjs.map +0 -1
  34. package/dist/api/multichain/provider.d.cts +0 -29
  35. package/dist/api/multichain/provider.d.cts.map +0 -1
  36. package/dist/api/multichain/provider.d.mts +0 -29
  37. package/dist/api/multichain/provider.d.mts.map +0 -1
  38. package/dist/api/multichain/provider.mjs +0 -2
  39. package/dist/api/multichain/provider.mjs.map +0 -1
  40. package/dist/api/multichain/wallet.cjs +0 -92
  41. package/dist/api/multichain/wallet.cjs.map +0 -1
  42. package/dist/api/multichain/wallet.d.cts +0 -58
  43. package/dist/api/multichain/wallet.d.cts.map +0 -1
  44. package/dist/api/multichain/wallet.d.mts +0 -58
  45. package/dist/api/multichain/wallet.d.mts.map +0 -1
  46. package/dist/api/multichain/wallet.mjs +0 -87
  47. package/dist/api/multichain/wallet.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":";;;AAwDA,4CAKC;AAQD,0DAIC;AApED;;;;;GAKG;AACU,QAAA,+BAA+B,GAAW,SAAS,CAAC;AAsCjE;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,QAAyB,EACzB,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,QAAyB;IAEzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,uCAA+B,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountWallet, AccountWalletId } from './wallet';\n\n/**\n * Default account group unique ID.\n *\n * This constant can be used to reference the \"default\" group from\n * an account wallet.\n */\nexport const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string = 'default';\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Account group that can hold multiple accounts.\n */\nexport type AccountGroup<Account extends KeyringAccount> = {\n /**\n * Account group ID.\n */\n get id(): AccountGroupId;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the \"blockchain\" accounts for this account group.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the \"blockchain\" account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n};\n\n/**\n * Convert a wallet ID and a unique ID, to a group ID.\n *\n * @param walletId - A wallet ID.\n * @param id - A unique ID.\n * @returns A group ID.\n */\nexport function toAccountGroupId(\n walletId: AccountWalletId,\n id: string,\n): AccountGroupId {\n return `${walletId}/${id}`;\n}\n\n/**\n * Convert a wallet ID to the default group ID.\n *\n * @param walletId - A wallet ID.\n * @returns The default group ID.\n */\nexport function toDefaultAccountGroupId(\n walletId: AccountWalletId,\n): AccountGroupId {\n return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);\n}\n"]}
1
+ {"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":";;;AAyDA,4CAKC;AAQD,0DAIC;AApED;;;;;GAKG;AACU,QAAA,+BAA+B,GAAW,SAAS,CAAC;AAsCjE;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,QAAyB,EACzB,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,QAAyB;IAEzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,uCAA+B,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\nimport type { AccountId } from '@metamask/keyring-utils';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountWallet, AccountWalletId } from './wallet';\n\n/**\n * Default account group unique ID.\n *\n * This constant can be used to reference the \"default\" group from\n * an account wallet.\n */\nexport const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string = 'default';\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Account group that can hold multiple accounts.\n */\nexport type AccountGroup<Account extends KeyringAccount> = {\n /**\n * Account group ID.\n */\n get id(): AccountGroupId;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the \"blockchain\" accounts for this account group.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the \"blockchain\" account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" account or undefined if not found.\n */\n getAccount(id: AccountId): Account | undefined;\n};\n\n/**\n * Convert a wallet ID and a unique ID, to a group ID.\n *\n * @param walletId - A wallet ID.\n * @param id - A unique ID.\n * @returns A group ID.\n */\nexport function toAccountGroupId(\n walletId: AccountWalletId,\n id: string,\n): AccountGroupId {\n return `${walletId}/${id}`;\n}\n\n/**\n * Convert a wallet ID to the default group ID.\n *\n * @param walletId - A wallet ID.\n * @returns The default group ID.\n */\nexport function toDefaultAccountGroupId(\n walletId: AccountWalletId,\n): AccountGroupId {\n return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import type { KeyringAccount } from "@metamask/keyring-api";
2
+ import type { AccountId } from "@metamask/keyring-utils";
2
3
  import type { AccountWallet, AccountWalletId } from "./wallet.cjs";
3
4
  /**
4
5
  * Default account group unique ID.
@@ -36,7 +37,7 @@ export type AccountGroup<Account extends KeyringAccount> = {
36
37
  * @param id - Account ID.
37
38
  * @returns The "blockchain" account or undefined if not found.
38
39
  */
39
- getAccount(id: Account['id']): Account | undefined;
40
+ getAccount(id: AccountId): Account | undefined;
40
41
  };
41
42
  /**
42
43
  * Convert a wallet ID and a unique ID, to a group ID.
@@ -1 +1 @@
1
- {"version":3,"file":"group.d.cts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;;OAKG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
1
+ {"version":3,"file":"group.d.cts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,gCAAgC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;;OAKG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
@@ -1,4 +1,5 @@
1
1
  import type { KeyringAccount } from "@metamask/keyring-api";
2
+ import type { AccountId } from "@metamask/keyring-utils";
2
3
  import type { AccountWallet, AccountWalletId } from "./wallet.mjs";
3
4
  /**
4
5
  * Default account group unique ID.
@@ -36,7 +37,7 @@ export type AccountGroup<Account extends KeyringAccount> = {
36
37
  * @param id - Account ID.
37
38
  * @returns The "blockchain" account or undefined if not found.
38
39
  */
39
- getAccount(id: Account['id']): Account | undefined;
40
+ getAccount(id: AccountId): Account | undefined;
40
41
  };
41
42
  /**
42
43
  * Convert a wallet ID and a unique ID, to a group ID.
@@ -1 +1 @@
1
- {"version":3,"file":"group.d.mts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;;OAKG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
1
+ {"version":3,"file":"group.d.mts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,gCAAgC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;;OAKG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"group.mjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAW,SAAS,CAAC;AAsCjE;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAyB,EACzB,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAyB;IAEzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountWallet, AccountWalletId } from './wallet';\n\n/**\n * Default account group unique ID.\n *\n * This constant can be used to reference the \"default\" group from\n * an account wallet.\n */\nexport const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string = 'default';\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Account group that can hold multiple accounts.\n */\nexport type AccountGroup<Account extends KeyringAccount> = {\n /**\n * Account group ID.\n */\n get id(): AccountGroupId;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the \"blockchain\" accounts for this account group.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the \"blockchain\" account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n};\n\n/**\n * Convert a wallet ID and a unique ID, to a group ID.\n *\n * @param walletId - A wallet ID.\n * @param id - A unique ID.\n * @returns A group ID.\n */\nexport function toAccountGroupId(\n walletId: AccountWalletId,\n id: string,\n): AccountGroupId {\n return `${walletId}/${id}`;\n}\n\n/**\n * Convert a wallet ID to the default group ID.\n *\n * @param walletId - A wallet ID.\n * @returns The default group ID.\n */\nexport function toDefaultAccountGroupId(\n walletId: AccountWalletId,\n): AccountGroupId {\n return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);\n}\n"]}
1
+ {"version":3,"file":"group.mjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAW,SAAS,CAAC;AAsCjE;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAyB,EACzB,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAyB;IAEzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\nimport type { AccountId } from '@metamask/keyring-utils';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountWallet, AccountWalletId } from './wallet';\n\n/**\n * Default account group unique ID.\n *\n * This constant can be used to reference the \"default\" group from\n * an account wallet.\n */\nexport const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string = 'default';\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Account group that can hold multiple accounts.\n */\nexport type AccountGroup<Account extends KeyringAccount> = {\n /**\n * Account group ID.\n */\n get id(): AccountGroupId;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the \"blockchain\" accounts for this account group.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the \"blockchain\" account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" account or undefined if not found.\n */\n getAccount(id: AccountId): Account | undefined;\n};\n\n/**\n * Convert a wallet ID and a unique ID, to a group ID.\n *\n * @param walletId - A wallet ID.\n * @param id - A unique ID.\n * @returns A group ID.\n */\nexport function toAccountGroupId(\n walletId: AccountWalletId,\n id: string,\n): AccountGroupId {\n return `${walletId}/${id}`;\n}\n\n/**\n * Convert a wallet ID to the default group ID.\n *\n * @param walletId - A wallet ID.\n * @returns The default group ID.\n */\nexport function toDefaultAccountGroupId(\n walletId: AccountWalletId,\n): AccountGroupId {\n return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);\n}\n"]}
@@ -16,5 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./group.cjs"), exports);
18
18
  __exportStar(require("./wallet.cjs"), exports);
19
- __exportStar(require("./multichain/index.cjs"), exports);
20
19
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAwB;AACxB,+CAAyB;AACzB,yDAA6B","sourcesContent":["export * from './group';\nexport * from './wallet';\nexport * from './multichain';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAwB;AACxB,+CAAyB","sourcesContent":["export * from './group';\nexport * from './wallet';\n"]}
@@ -1,4 +1,3 @@
1
1
  export * from "./group.cjs";
2
2
  export * from "./wallet.cjs";
3
- export * from "./multichain/index.cjs";
4
3
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB;AACzB,uCAA6B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB"}
@@ -1,4 +1,3 @@
1
1
  export * from "./group.mjs";
2
2
  export * from "./wallet.mjs";
3
- export * from "./multichain/index.mjs";
4
3
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB;AACzB,uCAA6B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB"}
@@ -1,4 +1,3 @@
1
1
  export * from "./group.mjs";
2
2
  export * from "./wallet.mjs";
3
- export * from "./multichain/index.mjs";
4
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB;AACzB,uCAA6B","sourcesContent":["export * from './group';\nexport * from './wallet';\nexport * from './multichain';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB","sourcesContent":["export * from './group';\nexport * from './wallet';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/account-api",
3
- "version": "0.1.0-6199101",
3
+ "version": "0.1.0-f024bb4",
4
4
  "description": "MetaMask Account API",
5
5
  "keywords": [
6
6
  "metamask",
@@ -53,11 +53,9 @@
53
53
  "@lavamoat/allow-scripts": "^3.2.1",
54
54
  "@lavamoat/preinstall-always-fail": "^2.1.0",
55
55
  "@metamask/auto-changelog": "^3.4.4",
56
- "@metamask/keyring-internal-api": "6.2.0",
57
56
  "@ts-bridge/cli": "^0.6.3",
58
57
  "@types/jest": "^29.5.12",
59
58
  "@types/node": "^20.12.12",
60
- "@types/uuid": "^9.0.8",
61
59
  "deepmerge": "^4.2.2",
62
60
  "depcheck": "^1.4.7",
63
61
  "jest": "^29.5.0",
@@ -67,8 +65,7 @@
67
65
  "ts-node": "^10.9.2",
68
66
  "tsd": "^0.31.0",
69
67
  "typedoc": "^0.25.13",
70
- "typescript": "~5.6.3",
71
- "uuid": "^9.0.1"
68
+ "typescript": "~5.6.3"
72
69
  },
73
70
  "engines": {
74
71
  "node": "^18.18 || >=20"
@@ -1,135 +0,0 @@
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 _MultichainAccountAdapter_id, _MultichainAccountAdapter_wallet, _MultichainAccountAdapter_index, _MultichainAccountAdapter_providers, _MultichainAccountAdapter_providersByAccountId, _MultichainAccountAdapter_accounts;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.MultichainAccountAdapter = void 0;
16
- exports.toMultichainAccountId = toMultichainAccountId;
17
- exports.getGroupIndexFromAccountGroupId = getGroupIndexFromAccountGroupId;
18
- const keyring_utils_1 = require("@metamask/keyring-utils");
19
- const wallet_1 = require("../wallet.cjs");
20
- const MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX = new RegExp(`^${wallet_1.AccountWalletCategory.Entropy}:.*/(?<groupIndex>\\d+)$`, 'u');
21
- class MultichainAccountAdapter {
22
- constructor({ groupIndex, wallet, providers, }) {
23
- _MultichainAccountAdapter_id.set(this, void 0);
24
- _MultichainAccountAdapter_wallet.set(this, void 0);
25
- _MultichainAccountAdapter_index.set(this, void 0);
26
- _MultichainAccountAdapter_providers.set(this, void 0);
27
- _MultichainAccountAdapter_providersByAccountId.set(this, void 0);
28
- _MultichainAccountAdapter_accounts.set(this, void 0);
29
- __classPrivateFieldSet(this, _MultichainAccountAdapter_id, toMultichainAccountId(wallet.id, groupIndex), "f");
30
- __classPrivateFieldSet(this, _MultichainAccountAdapter_index, groupIndex, "f");
31
- __classPrivateFieldSet(this, _MultichainAccountAdapter_wallet, wallet, "f");
32
- __classPrivateFieldSet(this, _MultichainAccountAdapter_providers, providers, "f");
33
- __classPrivateFieldSet(this, _MultichainAccountAdapter_accounts, new Map(), "f");
34
- __classPrivateFieldSet(this, _MultichainAccountAdapter_providersByAccountId, new Map(), "f");
35
- for (const provider of __classPrivateFieldGet(this, _MultichainAccountAdapter_providers, "f")) {
36
- const accounts = provider.getAccounts({
37
- entropySource: __classPrivateFieldGet(this, _MultichainAccountAdapter_wallet, "f").entropySource,
38
- groupIndex: __classPrivateFieldGet(this, _MultichainAccountAdapter_index, "f"),
39
- });
40
- __classPrivateFieldGet(this, _MultichainAccountAdapter_accounts, "f").set(provider, accounts);
41
- for (const id of accounts) {
42
- __classPrivateFieldGet(this, _MultichainAccountAdapter_providersByAccountId, "f").set(id, provider);
43
- }
44
- }
45
- }
46
- get id() {
47
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_id, "f");
48
- }
49
- get wallet() {
50
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_wallet, "f");
51
- }
52
- get index() {
53
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_index, "f");
54
- }
55
- hasAccounts() {
56
- // Use this map, cause if there's no accounts, then this map will also
57
- // be empty.
58
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_providersByAccountId, "f").size > 0;
59
- }
60
- getAccounts() {
61
- let allAccounts = [];
62
- for (const [provider, accounts] of __classPrivateFieldGet(this, _MultichainAccountAdapter_accounts, "f").entries()) {
63
- allAccounts = allAccounts.concat(accounts.map((id) => provider.getAccount(id)));
64
- }
65
- return allAccounts;
66
- }
67
- getAccount(id) {
68
- const provider = __classPrivateFieldGet(this, _MultichainAccountAdapter_providersByAccountId, "f").get(id);
69
- return provider?.getAccount(id);
70
- }
71
- get(selector) {
72
- const accounts = this.select(selector);
73
- if (accounts.length > 1) {
74
- throw new Error(`Too many account candidates, expected 1, got: ${accounts.length}`);
75
- }
76
- if (accounts.length === 0) {
77
- return undefined;
78
- }
79
- return accounts[0]; // This is safe, see checks above.
80
- }
81
- select(selector) {
82
- return this.getAccounts().filter((account) => {
83
- let selected = true;
84
- if (selector.id) {
85
- selected && (selected = account.id === selector.id);
86
- }
87
- if (selector.address) {
88
- selected && (selected = account.address === selector.address);
89
- }
90
- if (selector.type) {
91
- selected && (selected = account.type === selector.type);
92
- }
93
- if (selector.methods !== undefined) {
94
- selected && (selected = selector.methods.some((method) => account.methods.includes(method)));
95
- }
96
- if (selector.scopes !== undefined) {
97
- selected && (selected = selector.scopes.some((scope) => {
98
- return (
99
- // This will cover specific EVM EOA scopes as well.
100
- (0, keyring_utils_1.isScopeEqualToAny)(scope, account.scopes));
101
- }));
102
- }
103
- return selected;
104
- });
105
- }
106
- }
107
- exports.MultichainAccountAdapter = MultichainAccountAdapter;
108
- _MultichainAccountAdapter_id = new WeakMap(), _MultichainAccountAdapter_wallet = new WeakMap(), _MultichainAccountAdapter_index = new WeakMap(), _MultichainAccountAdapter_providers = new WeakMap(), _MultichainAccountAdapter_providersByAccountId = new WeakMap(), _MultichainAccountAdapter_accounts = new WeakMap();
109
- /**
110
- * Gets the multichain account ID from its multichain account wallet ID and its index.
111
- *
112
- * @param walletId - Multichain account wallet ID.
113
- * @param groupIndex - Index of that multichain account.
114
- * @returns The multichain account ID.
115
- */
116
- function toMultichainAccountId(walletId, groupIndex) {
117
- return `${walletId}/${groupIndex}`;
118
- }
119
- /**
120
- * Gets the multichain account index from an account group ID.
121
- *
122
- * @param groupId - Account group ID.
123
- * @returns The multichain account index if extractable, undefined otherwise.
124
- */
125
- function getGroupIndexFromAccountGroupId(groupId) {
126
- const matched = groupId.match(MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX);
127
- if (matched) {
128
- if (matched.groups?.groupIndex !== undefined) {
129
- return Number(matched.groups.groupIndex);
130
- }
131
- }
132
- // Unable to extract group index.
133
- return undefined;
134
- }
135
- //# sourceMappingURL=account.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account.cjs","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\nimport { isScopeEqualToAny } from '@metamask/keyring-utils';\n\nimport type { MultichainAccountProvider } from './provider';\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { AccountGroup, AccountGroupId } from '../group';\nimport { AccountWalletCategory } from '../wallet';\n\nconst MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX = new RegExp(\n `^${AccountWalletCategory.Entropy}:.*/(?<groupIndex>\\\\d+)$`,\n 'u',\n);\n\n/**\n * Selector to query a specific \"blockchain\" account based on some criteria.\n */\nexport type MultichainAccountSelector<Account extends KeyringAccount> = {\n /**\n * Query by account ID.\n */\n id?: Account['id'];\n\n /**\n * Query by account address.\n */\n address?: Account['address'];\n\n /**\n * Query by account type.\n */\n type?: Account['type'];\n\n /**\n * Query by account methods.\n */\n methods?: Account['methods'];\n\n /**\n * Query by account scopes.\n */\n scopes?: Account['scopes'];\n};\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * A multichain account that holds multiple \"blockchain\" accounts.\n */\nexport type MultichainAccount<Account extends KeyringAccount> =\n AccountGroup<Account> & {\n /**\n * Multichain account ID.\n */\n get id(): MultichainAccountId;\n\n /**\n * Multichain account's wallet reference (parent).\n */\n get wallet(): MultichainAccountWallet<Account>;\n\n /**\n * Multichain account group index.\n */\n get index(): number;\n\n /**\n * Gets the \"blockchain\" accounts for this multichain account.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the \"blockchain\" account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n\n /**\n * Query a \"blockchain\" account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The \"blockchain\" account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: MultichainAccountSelector<Account>): Account | undefined;\n\n /**\n * Query \"blockchain\" accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The \"blockchain\" accounts matching the selector.\n */\n select(selector: MultichainAccountSelector<Account>): Account[];\n };\n\nexport class MultichainAccountAdapter<Account extends KeyringAccount>\n implements MultichainAccount<Account>\n{\n readonly #id: MultichainAccountId;\n\n readonly #wallet: MultichainAccountWallet<Account>;\n\n readonly #index: number;\n\n readonly #providers: MultichainAccountProvider<Account>[];\n\n readonly #providersByAccountId: Map<\n Account['id'],\n MultichainAccountProvider<Account>\n >;\n\n readonly #accounts: Map<MultichainAccountProvider<Account>, Account['id'][]>;\n\n constructor({\n groupIndex,\n wallet,\n providers,\n }: {\n groupIndex: number;\n wallet: MultichainAccountWallet<Account>;\n providers: MultichainAccountProvider<Account>[];\n }) {\n this.#id = toMultichainAccountId(wallet.id, groupIndex);\n this.#index = groupIndex;\n this.#wallet = wallet;\n this.#providers = providers;\n this.#accounts = new Map();\n this.#providersByAccountId = new Map();\n\n for (const provider of this.#providers) {\n const accounts = provider.getAccounts({\n entropySource: this.#wallet.entropySource,\n groupIndex: this.#index,\n });\n\n this.#accounts.set(provider, accounts);\n for (const id of accounts) {\n this.#providersByAccountId.set(id, provider);\n }\n }\n }\n\n get id(): MultichainAccountId {\n return this.#id;\n }\n\n get wallet(): MultichainAccountWallet<Account> {\n return this.#wallet;\n }\n\n get index(): number {\n return this.#index;\n }\n\n hasAccounts(): boolean {\n // Use this map, cause if there's no accounts, then this map will also\n // be empty.\n return this.#providersByAccountId.size > 0;\n }\n\n getAccounts(): Account[] {\n let allAccounts: Account[] = [];\n\n for (const [provider, accounts] of this.#accounts.entries()) {\n allAccounts = allAccounts.concat(\n accounts.map((id) => provider.getAccount(id)),\n );\n }\n\n return allAccounts;\n }\n\n getAccount(id: Account['id']): Account | undefined {\n const provider = this.#providersByAccountId.get(id);\n\n return provider?.getAccount(id);\n }\n\n get(selector: MultichainAccountSelector<Account>): Account | undefined {\n const accounts = this.select(selector);\n\n if (accounts.length > 1) {\n throw new Error(\n `Too many account candidates, expected 1, got: ${accounts.length}`,\n );\n }\n\n if (accounts.length === 0) {\n return undefined;\n }\n\n return accounts[0]; // This is safe, see checks above.\n }\n\n select(selector: MultichainAccountSelector<Account>): Account[] {\n return this.getAccounts().filter((account) => {\n let selected = true;\n\n if (selector.id) {\n selected &&= account.id === selector.id;\n }\n if (selector.address) {\n selected &&= account.address === selector.address;\n }\n if (selector.type) {\n selected &&= account.type === selector.type;\n }\n if (selector.methods !== undefined) {\n selected &&= selector.methods.some((method) =>\n account.methods.includes(method),\n );\n }\n if (selector.scopes !== undefined) {\n selected &&= selector.scopes.some((scope) => {\n return (\n // This will cover specific EVM EOA scopes as well.\n isScopeEqualToAny(scope, account.scopes)\n );\n });\n }\n\n return selected;\n });\n }\n}\n\n/**\n * Gets the multichain account ID from its multichain account wallet ID and its index.\n *\n * @param walletId - Multichain account wallet ID.\n * @param groupIndex - Index of that multichain account.\n * @returns The multichain account ID.\n */\nexport function toMultichainAccountId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param groupId - Account group ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n */\nexport function getGroupIndexFromAccountGroupId(\n groupId: AccountGroupId,\n): number | undefined {\n const matched = groupId.match(MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX);\n if (matched) {\n if (matched.groups?.groupIndex !== undefined) {\n return Number(matched.groups.groupIndex);\n }\n }\n\n // Unable to extract group index.\n return undefined;\n}\n"]}
@@ -1,111 +0,0 @@
1
- import type { KeyringAccount } from "@metamask/keyring-api";
2
- import type { MultichainAccountProvider } from "./provider.cjs";
3
- import type { MultichainAccountWallet, MultichainAccountWalletId } from "./wallet.cjs";
4
- import type { AccountGroup, AccountGroupId } from "../group.cjs";
5
- /**
6
- * Selector to query a specific "blockchain" account based on some criteria.
7
- */
8
- export type MultichainAccountSelector<Account extends KeyringAccount> = {
9
- /**
10
- * Query by account ID.
11
- */
12
- id?: Account['id'];
13
- /**
14
- * Query by account address.
15
- */
16
- address?: Account['address'];
17
- /**
18
- * Query by account type.
19
- */
20
- type?: Account['type'];
21
- /**
22
- * Query by account methods.
23
- */
24
- methods?: Account['methods'];
25
- /**
26
- * Query by account scopes.
27
- */
28
- scopes?: Account['scopes'];
29
- };
30
- /**
31
- * Multichain account ID.
32
- */
33
- export type MultichainAccountId = `${MultichainAccountWalletId}/${number}`;
34
- /**
35
- * A multichain account that holds multiple "blockchain" accounts.
36
- */
37
- export type MultichainAccount<Account extends KeyringAccount> = AccountGroup<Account> & {
38
- /**
39
- * Multichain account ID.
40
- */
41
- get id(): MultichainAccountId;
42
- /**
43
- * Multichain account's wallet reference (parent).
44
- */
45
- get wallet(): MultichainAccountWallet<Account>;
46
- /**
47
- * Multichain account group index.
48
- */
49
- get index(): number;
50
- /**
51
- * Gets the "blockchain" accounts for this multichain account.
52
- *
53
- * @param id - Account ID.
54
- * @returns The "blockchain" accounts.
55
- */
56
- getAccounts(): Account[];
57
- /**
58
- * Gets the "blockchain" account for a given account ID.
59
- *
60
- * @param id - Account ID.
61
- * @returns The "blockchain" account or undefined if not found.
62
- */
63
- getAccount(id: Account['id']): Account | undefined;
64
- /**
65
- * Query a "blockchain" account matching the selector.
66
- *
67
- * @param selector - Query selector.
68
- * @returns The "blockchain" account matching the selector or undefined if not matching.
69
- * @throws If multiple accounts match the selector.
70
- */
71
- get(selector: MultichainAccountSelector<Account>): Account | undefined;
72
- /**
73
- * Query "blockchain" accounts matching the selector.
74
- *
75
- * @param selector - Query selector.
76
- * @returns The "blockchain" accounts matching the selector.
77
- */
78
- select(selector: MultichainAccountSelector<Account>): Account[];
79
- };
80
- export declare class MultichainAccountAdapter<Account extends KeyringAccount> implements MultichainAccount<Account> {
81
- #private;
82
- constructor({ groupIndex, wallet, providers, }: {
83
- groupIndex: number;
84
- wallet: MultichainAccountWallet<Account>;
85
- providers: MultichainAccountProvider<Account>[];
86
- });
87
- get id(): MultichainAccountId;
88
- get wallet(): MultichainAccountWallet<Account>;
89
- get index(): number;
90
- hasAccounts(): boolean;
91
- getAccounts(): Account[];
92
- getAccount(id: Account['id']): Account | undefined;
93
- get(selector: MultichainAccountSelector<Account>): Account | undefined;
94
- select(selector: MultichainAccountSelector<Account>): Account[];
95
- }
96
- /**
97
- * Gets the multichain account ID from its multichain account wallet ID and its index.
98
- *
99
- * @param walletId - Multichain account wallet ID.
100
- * @param groupIndex - Index of that multichain account.
101
- * @returns The multichain account ID.
102
- */
103
- export declare function toMultichainAccountId(walletId: MultichainAccountWalletId, groupIndex: number): MultichainAccountId;
104
- /**
105
- * Gets the multichain account index from an account group ID.
106
- *
107
- * @param groupId - Account group ID.
108
- * @returns The multichain account index if extractable, undefined otherwise.
109
- */
110
- export declare function getGroupIndexFromAccountGroupId(groupId: AccountGroupId): number | undefined;
111
- //# sourceMappingURL=account.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAmB;AAC5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAiB;AAQ7D;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,OAAO,SAAS,cAAc,IAAI;IACtE;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7B;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,cAAc,IAC1D,YAAY,CAAC,OAAO,CAAC,GAAG;IACtB;;OAEG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAAC;IAE9B;;OAEG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAEnD;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;CACjE,CAAC;AAEJ,qBAAa,wBAAwB,CAAC,OAAO,SAAS,cAAc,CAClE,YAAW,iBAAiB,CAAC,OAAO,CAAC;;gBAiBzB,EACV,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;KACjD;IAqBD,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE7C;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,WAAW,IAAI,OAAO;IAMtB,WAAW,IAAI,OAAO,EAAE;IAYxB,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;IAMlD,GAAG,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;IAgBtE,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;CA8BhE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,cAAc,GACtB,MAAM,GAAG,SAAS,CAUpB"}
@@ -1,111 +0,0 @@
1
- import type { KeyringAccount } from "@metamask/keyring-api";
2
- import type { MultichainAccountProvider } from "./provider.mjs";
3
- import type { MultichainAccountWallet, MultichainAccountWalletId } from "./wallet.mjs";
4
- import type { AccountGroup, AccountGroupId } from "../group.mjs";
5
- /**
6
- * Selector to query a specific "blockchain" account based on some criteria.
7
- */
8
- export type MultichainAccountSelector<Account extends KeyringAccount> = {
9
- /**
10
- * Query by account ID.
11
- */
12
- id?: Account['id'];
13
- /**
14
- * Query by account address.
15
- */
16
- address?: Account['address'];
17
- /**
18
- * Query by account type.
19
- */
20
- type?: Account['type'];
21
- /**
22
- * Query by account methods.
23
- */
24
- methods?: Account['methods'];
25
- /**
26
- * Query by account scopes.
27
- */
28
- scopes?: Account['scopes'];
29
- };
30
- /**
31
- * Multichain account ID.
32
- */
33
- export type MultichainAccountId = `${MultichainAccountWalletId}/${number}`;
34
- /**
35
- * A multichain account that holds multiple "blockchain" accounts.
36
- */
37
- export type MultichainAccount<Account extends KeyringAccount> = AccountGroup<Account> & {
38
- /**
39
- * Multichain account ID.
40
- */
41
- get id(): MultichainAccountId;
42
- /**
43
- * Multichain account's wallet reference (parent).
44
- */
45
- get wallet(): MultichainAccountWallet<Account>;
46
- /**
47
- * Multichain account group index.
48
- */
49
- get index(): number;
50
- /**
51
- * Gets the "blockchain" accounts for this multichain account.
52
- *
53
- * @param id - Account ID.
54
- * @returns The "blockchain" accounts.
55
- */
56
- getAccounts(): Account[];
57
- /**
58
- * Gets the "blockchain" account for a given account ID.
59
- *
60
- * @param id - Account ID.
61
- * @returns The "blockchain" account or undefined if not found.
62
- */
63
- getAccount(id: Account['id']): Account | undefined;
64
- /**
65
- * Query a "blockchain" account matching the selector.
66
- *
67
- * @param selector - Query selector.
68
- * @returns The "blockchain" account matching the selector or undefined if not matching.
69
- * @throws If multiple accounts match the selector.
70
- */
71
- get(selector: MultichainAccountSelector<Account>): Account | undefined;
72
- /**
73
- * Query "blockchain" accounts matching the selector.
74
- *
75
- * @param selector - Query selector.
76
- * @returns The "blockchain" accounts matching the selector.
77
- */
78
- select(selector: MultichainAccountSelector<Account>): Account[];
79
- };
80
- export declare class MultichainAccountAdapter<Account extends KeyringAccount> implements MultichainAccount<Account> {
81
- #private;
82
- constructor({ groupIndex, wallet, providers, }: {
83
- groupIndex: number;
84
- wallet: MultichainAccountWallet<Account>;
85
- providers: MultichainAccountProvider<Account>[];
86
- });
87
- get id(): MultichainAccountId;
88
- get wallet(): MultichainAccountWallet<Account>;
89
- get index(): number;
90
- hasAccounts(): boolean;
91
- getAccounts(): Account[];
92
- getAccount(id: Account['id']): Account | undefined;
93
- get(selector: MultichainAccountSelector<Account>): Account | undefined;
94
- select(selector: MultichainAccountSelector<Account>): Account[];
95
- }
96
- /**
97
- * Gets the multichain account ID from its multichain account wallet ID and its index.
98
- *
99
- * @param walletId - Multichain account wallet ID.
100
- * @param groupIndex - Index of that multichain account.
101
- * @returns The multichain account ID.
102
- */
103
- export declare function toMultichainAccountId(walletId: MultichainAccountWalletId, groupIndex: number): MultichainAccountId;
104
- /**
105
- * Gets the multichain account index from an account group ID.
106
- *
107
- * @param groupId - Account group ID.
108
- * @returns The multichain account index if extractable, undefined otherwise.
109
- */
110
- export declare function getGroupIndexFromAccountGroupId(groupId: AccountGroupId): number | undefined;
111
- //# sourceMappingURL=account.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAmB;AAC5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAiB;AAQ7D;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,OAAO,SAAS,cAAc,IAAI;IACtE;;OAEG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7B;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,cAAc,IAC1D,YAAY,CAAC,OAAO,CAAC,GAAG;IACtB;;OAEG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAAC;IAE9B;;OAEG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAAC;IAEpB;;;;;OAKG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAEnD;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;CACjE,CAAC;AAEJ,qBAAa,wBAAwB,CAAC,OAAO,SAAS,cAAc,CAClE,YAAW,iBAAiB,CAAC,OAAO,CAAC;;gBAiBzB,EACV,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;KACjD;IAqBD,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE7C;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,WAAW,IAAI,OAAO;IAMtB,WAAW,IAAI,OAAO,EAAE;IAYxB,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;IAMlD,GAAG,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;IAgBtE,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;CA8BhE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,cAAc,GACtB,MAAM,GAAG,SAAS,CAUpB"}
@@ -1,129 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- 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");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- 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");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _MultichainAccountAdapter_id, _MultichainAccountAdapter_wallet, _MultichainAccountAdapter_index, _MultichainAccountAdapter_providers, _MultichainAccountAdapter_providersByAccountId, _MultichainAccountAdapter_accounts;
13
- import { isScopeEqualToAny } from "@metamask/keyring-utils";
14
- import { AccountWalletCategory } from "../wallet.mjs";
15
- const MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX = new RegExp(`^${AccountWalletCategory.Entropy}:.*/(?<groupIndex>\\d+)$`, 'u');
16
- export class MultichainAccountAdapter {
17
- constructor({ groupIndex, wallet, providers, }) {
18
- _MultichainAccountAdapter_id.set(this, void 0);
19
- _MultichainAccountAdapter_wallet.set(this, void 0);
20
- _MultichainAccountAdapter_index.set(this, void 0);
21
- _MultichainAccountAdapter_providers.set(this, void 0);
22
- _MultichainAccountAdapter_providersByAccountId.set(this, void 0);
23
- _MultichainAccountAdapter_accounts.set(this, void 0);
24
- __classPrivateFieldSet(this, _MultichainAccountAdapter_id, toMultichainAccountId(wallet.id, groupIndex), "f");
25
- __classPrivateFieldSet(this, _MultichainAccountAdapter_index, groupIndex, "f");
26
- __classPrivateFieldSet(this, _MultichainAccountAdapter_wallet, wallet, "f");
27
- __classPrivateFieldSet(this, _MultichainAccountAdapter_providers, providers, "f");
28
- __classPrivateFieldSet(this, _MultichainAccountAdapter_accounts, new Map(), "f");
29
- __classPrivateFieldSet(this, _MultichainAccountAdapter_providersByAccountId, new Map(), "f");
30
- for (const provider of __classPrivateFieldGet(this, _MultichainAccountAdapter_providers, "f")) {
31
- const accounts = provider.getAccounts({
32
- entropySource: __classPrivateFieldGet(this, _MultichainAccountAdapter_wallet, "f").entropySource,
33
- groupIndex: __classPrivateFieldGet(this, _MultichainAccountAdapter_index, "f"),
34
- });
35
- __classPrivateFieldGet(this, _MultichainAccountAdapter_accounts, "f").set(provider, accounts);
36
- for (const id of accounts) {
37
- __classPrivateFieldGet(this, _MultichainAccountAdapter_providersByAccountId, "f").set(id, provider);
38
- }
39
- }
40
- }
41
- get id() {
42
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_id, "f");
43
- }
44
- get wallet() {
45
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_wallet, "f");
46
- }
47
- get index() {
48
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_index, "f");
49
- }
50
- hasAccounts() {
51
- // Use this map, cause if there's no accounts, then this map will also
52
- // be empty.
53
- return __classPrivateFieldGet(this, _MultichainAccountAdapter_providersByAccountId, "f").size > 0;
54
- }
55
- getAccounts() {
56
- let allAccounts = [];
57
- for (const [provider, accounts] of __classPrivateFieldGet(this, _MultichainAccountAdapter_accounts, "f").entries()) {
58
- allAccounts = allAccounts.concat(accounts.map((id) => provider.getAccount(id)));
59
- }
60
- return allAccounts;
61
- }
62
- getAccount(id) {
63
- const provider = __classPrivateFieldGet(this, _MultichainAccountAdapter_providersByAccountId, "f").get(id);
64
- return provider?.getAccount(id);
65
- }
66
- get(selector) {
67
- const accounts = this.select(selector);
68
- if (accounts.length > 1) {
69
- throw new Error(`Too many account candidates, expected 1, got: ${accounts.length}`);
70
- }
71
- if (accounts.length === 0) {
72
- return undefined;
73
- }
74
- return accounts[0]; // This is safe, see checks above.
75
- }
76
- select(selector) {
77
- return this.getAccounts().filter((account) => {
78
- let selected = true;
79
- if (selector.id) {
80
- selected && (selected = account.id === selector.id);
81
- }
82
- if (selector.address) {
83
- selected && (selected = account.address === selector.address);
84
- }
85
- if (selector.type) {
86
- selected && (selected = account.type === selector.type);
87
- }
88
- if (selector.methods !== undefined) {
89
- selected && (selected = selector.methods.some((method) => account.methods.includes(method)));
90
- }
91
- if (selector.scopes !== undefined) {
92
- selected && (selected = selector.scopes.some((scope) => {
93
- return (
94
- // This will cover specific EVM EOA scopes as well.
95
- isScopeEqualToAny(scope, account.scopes));
96
- }));
97
- }
98
- return selected;
99
- });
100
- }
101
- }
102
- _MultichainAccountAdapter_id = new WeakMap(), _MultichainAccountAdapter_wallet = new WeakMap(), _MultichainAccountAdapter_index = new WeakMap(), _MultichainAccountAdapter_providers = new WeakMap(), _MultichainAccountAdapter_providersByAccountId = new WeakMap(), _MultichainAccountAdapter_accounts = new WeakMap();
103
- /**
104
- * Gets the multichain account ID from its multichain account wallet ID and its index.
105
- *
106
- * @param walletId - Multichain account wallet ID.
107
- * @param groupIndex - Index of that multichain account.
108
- * @returns The multichain account ID.
109
- */
110
- export function toMultichainAccountId(walletId, groupIndex) {
111
- return `${walletId}/${groupIndex}`;
112
- }
113
- /**
114
- * Gets the multichain account index from an account group ID.
115
- *
116
- * @param groupId - Account group ID.
117
- * @returns The multichain account index if extractable, undefined otherwise.
118
- */
119
- export function getGroupIndexFromAccountGroupId(groupId) {
120
- const matched = groupId.match(MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX);
121
- if (matched) {
122
- if (matched.groups?.groupIndex !== undefined) {
123
- return Number(matched.groups.groupIndex);
124
- }
125
- }
126
- // Unable to extract group index.
127
- return undefined;
128
- }
129
- //# sourceMappingURL=account.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"account.mjs","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\nimport { isScopeEqualToAny } from '@metamask/keyring-utils';\n\nimport type { MultichainAccountProvider } from './provider';\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { AccountGroup, AccountGroupId } from '../group';\nimport { AccountWalletCategory } from '../wallet';\n\nconst MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX = new RegExp(\n `^${AccountWalletCategory.Entropy}:.*/(?<groupIndex>\\\\d+)$`,\n 'u',\n);\n\n/**\n * Selector to query a specific \"blockchain\" account based on some criteria.\n */\nexport type MultichainAccountSelector<Account extends KeyringAccount> = {\n /**\n * Query by account ID.\n */\n id?: Account['id'];\n\n /**\n * Query by account address.\n */\n address?: Account['address'];\n\n /**\n * Query by account type.\n */\n type?: Account['type'];\n\n /**\n * Query by account methods.\n */\n methods?: Account['methods'];\n\n /**\n * Query by account scopes.\n */\n scopes?: Account['scopes'];\n};\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * A multichain account that holds multiple \"blockchain\" accounts.\n */\nexport type MultichainAccount<Account extends KeyringAccount> =\n AccountGroup<Account> & {\n /**\n * Multichain account ID.\n */\n get id(): MultichainAccountId;\n\n /**\n * Multichain account's wallet reference (parent).\n */\n get wallet(): MultichainAccountWallet<Account>;\n\n /**\n * Multichain account group index.\n */\n get index(): number;\n\n /**\n * Gets the \"blockchain\" accounts for this multichain account.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the \"blockchain\" account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The \"blockchain\" account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n\n /**\n * Query a \"blockchain\" account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The \"blockchain\" account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: MultichainAccountSelector<Account>): Account | undefined;\n\n /**\n * Query \"blockchain\" accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The \"blockchain\" accounts matching the selector.\n */\n select(selector: MultichainAccountSelector<Account>): Account[];\n };\n\nexport class MultichainAccountAdapter<Account extends KeyringAccount>\n implements MultichainAccount<Account>\n{\n readonly #id: MultichainAccountId;\n\n readonly #wallet: MultichainAccountWallet<Account>;\n\n readonly #index: number;\n\n readonly #providers: MultichainAccountProvider<Account>[];\n\n readonly #providersByAccountId: Map<\n Account['id'],\n MultichainAccountProvider<Account>\n >;\n\n readonly #accounts: Map<MultichainAccountProvider<Account>, Account['id'][]>;\n\n constructor({\n groupIndex,\n wallet,\n providers,\n }: {\n groupIndex: number;\n wallet: MultichainAccountWallet<Account>;\n providers: MultichainAccountProvider<Account>[];\n }) {\n this.#id = toMultichainAccountId(wallet.id, groupIndex);\n this.#index = groupIndex;\n this.#wallet = wallet;\n this.#providers = providers;\n this.#accounts = new Map();\n this.#providersByAccountId = new Map();\n\n for (const provider of this.#providers) {\n const accounts = provider.getAccounts({\n entropySource: this.#wallet.entropySource,\n groupIndex: this.#index,\n });\n\n this.#accounts.set(provider, accounts);\n for (const id of accounts) {\n this.#providersByAccountId.set(id, provider);\n }\n }\n }\n\n get id(): MultichainAccountId {\n return this.#id;\n }\n\n get wallet(): MultichainAccountWallet<Account> {\n return this.#wallet;\n }\n\n get index(): number {\n return this.#index;\n }\n\n hasAccounts(): boolean {\n // Use this map, cause if there's no accounts, then this map will also\n // be empty.\n return this.#providersByAccountId.size > 0;\n }\n\n getAccounts(): Account[] {\n let allAccounts: Account[] = [];\n\n for (const [provider, accounts] of this.#accounts.entries()) {\n allAccounts = allAccounts.concat(\n accounts.map((id) => provider.getAccount(id)),\n );\n }\n\n return allAccounts;\n }\n\n getAccount(id: Account['id']): Account | undefined {\n const provider = this.#providersByAccountId.get(id);\n\n return provider?.getAccount(id);\n }\n\n get(selector: MultichainAccountSelector<Account>): Account | undefined {\n const accounts = this.select(selector);\n\n if (accounts.length > 1) {\n throw new Error(\n `Too many account candidates, expected 1, got: ${accounts.length}`,\n );\n }\n\n if (accounts.length === 0) {\n return undefined;\n }\n\n return accounts[0]; // This is safe, see checks above.\n }\n\n select(selector: MultichainAccountSelector<Account>): Account[] {\n return this.getAccounts().filter((account) => {\n let selected = true;\n\n if (selector.id) {\n selected &&= account.id === selector.id;\n }\n if (selector.address) {\n selected &&= account.address === selector.address;\n }\n if (selector.type) {\n selected &&= account.type === selector.type;\n }\n if (selector.methods !== undefined) {\n selected &&= selector.methods.some((method) =>\n account.methods.includes(method),\n );\n }\n if (selector.scopes !== undefined) {\n selected &&= selector.scopes.some((scope) => {\n return (\n // This will cover specific EVM EOA scopes as well.\n isScopeEqualToAny(scope, account.scopes)\n );\n });\n }\n\n return selected;\n });\n }\n}\n\n/**\n * Gets the multichain account ID from its multichain account wallet ID and its index.\n *\n * @param walletId - Multichain account wallet ID.\n * @param groupIndex - Index of that multichain account.\n * @returns The multichain account ID.\n */\nexport function toMultichainAccountId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param groupId - Account group ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n */\nexport function getGroupIndexFromAccountGroupId(\n groupId: AccountGroupId,\n): number | undefined {\n const matched = groupId.match(MULTICHAIN_ACCOUNT_GROUP_INDEX_REGEX);\n if (matched) {\n if (matched.groups?.groupIndex !== undefined) {\n return Number(matched.groups.groupIndex);\n }\n }\n\n // Unable to extract group index.\n return undefined;\n}\n"]}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./account.cjs"), exports);
18
- __exportStar(require("./wallet.cjs"), exports);
19
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/api/multichain/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,+CAAyB","sourcesContent":["export * from './account';\nexport * from './wallet';\nexport type * from './provider';\n"]}
@@ -1,4 +0,0 @@
1
- export * from "./account.cjs";
2
- export * from "./wallet.cjs";
3
- export type * from "./provider.cjs";
4
- //# sourceMappingURL=index.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/index.ts"],"names":[],"mappings":"AAAA,8BAA0B;AAC1B,6BAAyB;AACzB,oCAAgC"}
@@ -1,4 +0,0 @@
1
- export * from "./account.mjs";
2
- export * from "./wallet.mjs";
3
- export type * from "./provider.mjs";
4
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/index.ts"],"names":[],"mappings":"AAAA,8BAA0B;AAC1B,6BAAyB;AACzB,oCAAgC"}
@@ -1,3 +0,0 @@
1
- export * from "./account.mjs";
2
- export * from "./wallet.mjs";
3
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/api/multichain/index.ts"],"names":[],"mappings":"AAAA,8BAA0B;AAC1B,6BAAyB","sourcesContent":["export * from './account';\nexport * from './wallet';\nexport type * from './provider';\n"]}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=provider.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.cjs","sourceRoot":"","sources":["../../../src/api/multichain/provider.ts"],"names":[],"mappings":"","sourcesContent":["import type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\n\n/**\n * A multichain account provider is reponsible of providing \"blockchain\" accounts to a multichain account.\n */\nexport type MultichainAccountProvider<Account extends KeyringAccount> = {\n /**\n * Gets a \"blockchain\" account from its ID.\n *\n * NOTE: Assuming getting an account can never fail and will always be\n * invoked with a valid account ID coming from a `getAccounts` response.\n *\n * @param id - The \"blochain\" account ID.\n * @returns The \"blockchain\" account.\n */\n getAccount: (id: Account['id']) => Account;\n\n /**\n * Gets all \"blockchain\" accounts for a given entropy source and group index.\n *\n * @param opts - Options.\n * @param opts.entropySource - Entropy source to filter on.\n * @param opts.groupIndex - Group index to filter on.\n * @returns A list of all \"blockchain\" matching the given options.\n */\n getAccounts: (opts: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }) => Account['id'][];\n};\n"]}
@@ -1,29 +0,0 @@
1
- import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
2
- /**
3
- * A multichain account provider is reponsible of providing "blockchain" accounts to a multichain account.
4
- */
5
- export type MultichainAccountProvider<Account extends KeyringAccount> = {
6
- /**
7
- * Gets a "blockchain" account from its ID.
8
- *
9
- * NOTE: Assuming getting an account can never fail and will always be
10
- * invoked with a valid account ID coming from a `getAccounts` response.
11
- *
12
- * @param id - The "blochain" account ID.
13
- * @returns The "blockchain" account.
14
- */
15
- getAccount: (id: Account['id']) => Account;
16
- /**
17
- * Gets all "blockchain" accounts for a given entropy source and group index.
18
- *
19
- * @param opts - Options.
20
- * @param opts.entropySource - Entropy source to filter on.
21
- * @param opts.groupIndex - Group index to filter on.
22
- * @returns A list of all "blockchain" matching the given options.
23
- */
24
- getAccounts: (opts: {
25
- entropySource: EntropySourceId;
26
- groupIndex: number;
27
- }) => Account['id'][];
28
- };
29
- //# sourceMappingURL=provider.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAE7E;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,OAAO,SAAS,cAAc,IAAI;IACtE;;;;;;;;OAQG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;IAE3C;;;;;;;OAOG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE;QAClB,aAAa,EAAE,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CACvB,CAAC"}
@@ -1,29 +0,0 @@
1
- import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
2
- /**
3
- * A multichain account provider is reponsible of providing "blockchain" accounts to a multichain account.
4
- */
5
- export type MultichainAccountProvider<Account extends KeyringAccount> = {
6
- /**
7
- * Gets a "blockchain" account from its ID.
8
- *
9
- * NOTE: Assuming getting an account can never fail and will always be
10
- * invoked with a valid account ID coming from a `getAccounts` response.
11
- *
12
- * @param id - The "blochain" account ID.
13
- * @returns The "blockchain" account.
14
- */
15
- getAccount: (id: Account['id']) => Account;
16
- /**
17
- * Gets all "blockchain" accounts for a given entropy source and group index.
18
- *
19
- * @param opts - Options.
20
- * @param opts.entropySource - Entropy source to filter on.
21
- * @param opts.groupIndex - Group index to filter on.
22
- * @returns A list of all "blockchain" matching the given options.
23
- */
24
- getAccounts: (opts: {
25
- entropySource: EntropySourceId;
26
- groupIndex: number;
27
- }) => Account['id'][];
28
- };
29
- //# sourceMappingURL=provider.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAE7E;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,OAAO,SAAS,cAAc,IAAI;IACtE;;;;;;;;OAQG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC;IAE3C;;;;;;;OAOG;IACH,WAAW,EAAE,CAAC,IAAI,EAAE;QAClB,aAAa,EAAE,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;CACvB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=provider.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.mjs","sourceRoot":"","sources":["../../../src/api/multichain/provider.ts"],"names":[],"mappings":"","sourcesContent":["import type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\n\n/**\n * A multichain account provider is reponsible of providing \"blockchain\" accounts to a multichain account.\n */\nexport type MultichainAccountProvider<Account extends KeyringAccount> = {\n /**\n * Gets a \"blockchain\" account from its ID.\n *\n * NOTE: Assuming getting an account can never fail and will always be\n * invoked with a valid account ID coming from a `getAccounts` response.\n *\n * @param id - The \"blochain\" account ID.\n * @returns The \"blockchain\" account.\n */\n getAccount: (id: Account['id']) => Account;\n\n /**\n * Gets all \"blockchain\" accounts for a given entropy source and group index.\n *\n * @param opts - Options.\n * @param opts.entropySource - Entropy source to filter on.\n * @param opts.groupIndex - Group index to filter on.\n * @returns A list of all \"blockchain\" matching the given options.\n */\n getAccounts: (opts: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }) => Account['id'][];\n};\n"]}
@@ -1,92 +0,0 @@
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 _MultichainAccountWalletAdapter_id, _MultichainAccountWalletAdapter_providers, _MultichainAccountWalletAdapter_entropySource, _MultichainAccountWalletAdapter_accounts;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.MultichainAccountWalletAdapter = void 0;
16
- exports.toMultichainAccountWalletId = toMultichainAccountWalletId;
17
- const account_1 = require("./account.cjs");
18
- const group_1 = require("../group.cjs");
19
- const wallet_1 = require("../wallet.cjs");
20
- class MultichainAccountWalletAdapter {
21
- constructor({ providers, entropySource, }) {
22
- _MultichainAccountWalletAdapter_id.set(this, void 0);
23
- _MultichainAccountWalletAdapter_providers.set(this, void 0);
24
- _MultichainAccountWalletAdapter_entropySource.set(this, void 0);
25
- _MultichainAccountWalletAdapter_accounts.set(this, void 0);
26
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_id, toMultichainAccountWalletId(entropySource), "f");
27
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_providers, providers, "f");
28
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_entropySource, entropySource, "f");
29
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_accounts, new Map(), "f");
30
- let groupIndex = 0;
31
- let hasAccounts = false;
32
- // NOTE: We do not allow any gap for now. So if we have accounts for index 0 and index 2,
33
- // then this logic will stop at index 1, given that no account will be "provided".
34
- //
35
- // QUESTION: Should we a hard limit to the `groupIndex` to avoid having an infinite
36
- // loop here in case one of the provider is buggy?
37
- do {
38
- const multichainAccount = new account_1.MultichainAccountAdapter({
39
- groupIndex,
40
- wallet: this,
41
- providers: __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_providers, "f"),
42
- });
43
- // We only add multichain account that has underlying accounts.
44
- hasAccounts = multichainAccount.hasAccounts();
45
- if (hasAccounts) {
46
- __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").set(groupIndex, multichainAccount);
47
- }
48
- groupIndex += 1;
49
- } while (hasAccounts);
50
- }
51
- get id() {
52
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_id, "f");
53
- }
54
- get category() {
55
- return wallet_1.AccountWalletCategory.Entropy;
56
- }
57
- get entropySource() {
58
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_entropySource, "f");
59
- }
60
- getAccountGroup(groupId) {
61
- // We consider the "default case" to be mapped to index 0.
62
- if (groupId === (0, group_1.toDefaultAccountGroupId)(this.id)) {
63
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").get(0);
64
- }
65
- const groupIndex = (0, account_1.getGroupIndexFromAccountGroupId)(groupId);
66
- if (groupIndex === undefined) {
67
- return undefined;
68
- }
69
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").get(groupIndex);
70
- }
71
- getAccountGroups() {
72
- return this.getMultichainAccounts();
73
- }
74
- getMultichainAccount(groupIndex) {
75
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").get(groupIndex);
76
- }
77
- getMultichainAccounts() {
78
- return Array.from(__classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").values()); // TODO: Prevent copy here.
79
- }
80
- }
81
- exports.MultichainAccountWalletAdapter = MultichainAccountWalletAdapter;
82
- _MultichainAccountWalletAdapter_id = new WeakMap(), _MultichainAccountWalletAdapter_providers = new WeakMap(), _MultichainAccountWalletAdapter_entropySource = new WeakMap(), _MultichainAccountWalletAdapter_accounts = new WeakMap();
83
- /**
84
- * Gets the multichain account wallet ID from its entropy source.
85
- *
86
- * @param entropySource - Entropy source ID of that wallet.
87
- * @returns The multichain account wallet ID.
88
- */
89
- function toMultichainAccountWalletId(entropySource) {
90
- return `${wallet_1.AccountWalletCategory.Entropy}:${entropySource}`;
91
- }
92
- //# sourceMappingURL=wallet.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAoJA,kEAIC;AAtJD,2CAImB;AAGnB,wCAAmD;AAEnD,0CAAkD;AAyClD,MAAa,8BAA8B;IAWzC,YAAY,EACV,SAAS,EACT,aAAa,GAId;QAdQ,qDAA+B;QAE/B,4DAAiD;QAEjD,gEAAgC;QAEhC,2DAAmD;QAS1D,uBAAA,IAAI,sCAAO,2BAA2B,CAAC,aAAa,CAAC,MAAA,CAAC;QACtD,uBAAA,IAAI,6CAAc,SAAS,MAAA,CAAC;QAC5B,uBAAA,IAAI,iDAAkB,aAAa,MAAA,CAAC;QACpC,uBAAA,IAAI,4CAAa,IAAI,GAAG,EAAE,MAAA,CAAC;QAE3B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,yFAAyF;QACzF,kFAAkF;QAClF,EAAE;QACF,mFAAmF;QACnF,kDAAkD;QAClD,GAAG,CAAC;YACF,MAAM,iBAAiB,GAAG,IAAI,kCAAwB,CAAC;gBACrD,UAAU;gBACV,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,uBAAA,IAAI,iDAAW;aAC3B,CAAC,CAAC;YAEH,+DAA+D;YAC/D,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACpD,CAAC;YAED,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC,QAAQ,WAAW,EAAE;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,uBAAA,IAAI,0CAAI,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,8BAAqB,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,uBAAA,IAAI,qDAAe,CAAC;IAC7B,CAAC;IAED,eAAe,CACb,OAAuB;QAEvB,0DAA0D;QAC1D,IAAI,OAAO,KAAK,IAAA,+BAAuB,EAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,OAAO,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,yCAA+B,EAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACtC,CAAC;IAED,oBAAoB,CAClB,UAAkB;QAElB,OAAO,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,gDAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,2BAA2B;IACzE,CAAC;CACF;AAxFD,wEAwFC;;AAED;;;;;GAKG;AACH,SAAgB,2BAA2B,CACzC,aAA8B;IAE9B,OAAO,GAAG,8BAAqB,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7D,CAAC","sourcesContent":["import type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\n\nimport {\n getGroupIndexFromAccountGroupId,\n MultichainAccountAdapter,\n type MultichainAccount,\n} from './account';\nimport type { MultichainAccountProvider } from './provider';\nimport type { AccountGroupId } from '../group';\nimport { toDefaultAccountGroupId } from '../group';\nimport type { AccountWallet } from '../wallet';\nimport { AccountWalletCategory } from '../wallet';\n\n/**\n * Multichain account wallet ID.\n */\nexport type MultichainAccountWalletId =\n `${AccountWalletCategory.Entropy}:${EntropySourceId}`;\n\n/**\n * A multichain account wallet that holds multiple multichain accounts (one multichain account per\n * group index).\n */\nexport type MultichainAccountWallet<Account extends KeyringAccount> =\n AccountWallet<Account> & {\n /**\n * Multichain account wallet ID.\n */\n get id(): MultichainAccountWalletId;\n\n /**\n * Multichain account wallet entropy source.\n */\n get entropySource(): EntropySourceId;\n\n /**\n * Gets multichain account for a given index.\n *\n * @returns Multichain accounts.\n */\n getMultichainAccount(\n groupIndex: number,\n ): MultichainAccount<Account> | undefined;\n\n /**\n * Gets multichain accounts.\n *\n * @returns Multichain accounts.\n */\n getMultichainAccounts(): MultichainAccount<Account>[];\n };\n\nexport class MultichainAccountWalletAdapter<Account extends KeyringAccount>\n implements MultichainAccountWallet<Account>\n{\n readonly #id: MultichainAccountWalletId;\n\n readonly #providers: MultichainAccountProvider<Account>[];\n\n readonly #entropySource: EntropySourceId;\n\n readonly #accounts: Map<number, MultichainAccount<Account>>;\n\n constructor({\n providers,\n entropySource,\n }: {\n providers: MultichainAccountProvider<Account>[];\n entropySource: EntropySourceId;\n }) {\n this.#id = toMultichainAccountWalletId(entropySource);\n this.#providers = providers;\n this.#entropySource = entropySource;\n this.#accounts = new Map();\n\n let groupIndex = 0;\n let hasAccounts = false;\n\n // NOTE: We do not allow any gap for now. So if we have accounts for index 0 and index 2,\n // then this logic will stop at index 1, given that no account will be \"provided\".\n //\n // QUESTION: Should we a hard limit to the `groupIndex` to avoid having an infinite\n // loop here in case one of the provider is buggy?\n do {\n const multichainAccount = new MultichainAccountAdapter({\n groupIndex,\n wallet: this,\n providers: this.#providers,\n });\n\n // We only add multichain account that has underlying accounts.\n hasAccounts = multichainAccount.hasAccounts();\n if (hasAccounts) {\n this.#accounts.set(groupIndex, multichainAccount);\n }\n\n groupIndex += 1;\n } while (hasAccounts);\n }\n\n get id(): MultichainAccountWalletId {\n return this.#id;\n }\n\n get category(): AccountWalletCategory.Entropy {\n return AccountWalletCategory.Entropy;\n }\n\n get entropySource(): EntropySourceId {\n return this.#entropySource;\n }\n\n getAccountGroup(\n groupId: AccountGroupId,\n ): MultichainAccount<Account> | undefined {\n // We consider the \"default case\" to be mapped to index 0.\n if (groupId === toDefaultAccountGroupId(this.id)) {\n return this.#accounts.get(0);\n }\n\n const groupIndex = getGroupIndexFromAccountGroupId(groupId);\n if (groupIndex === undefined) {\n return undefined;\n }\n return this.#accounts.get(groupIndex);\n }\n\n getAccountGroups(): MultichainAccount<Account>[] {\n return this.getMultichainAccounts();\n }\n\n getMultichainAccount(\n groupIndex: number,\n ): MultichainAccount<Account> | undefined {\n return this.#accounts.get(groupIndex);\n }\n\n getMultichainAccounts(): MultichainAccount<Account>[] {\n return Array.from(this.#accounts.values()); // TODO: Prevent copy here.\n }\n}\n\n/**\n * Gets the multichain account wallet ID from its entropy source.\n *\n * @param entropySource - Entropy source ID of that wallet.\n * @returns The multichain account wallet ID.\n */\nexport function toMultichainAccountWalletId(\n entropySource: EntropySourceId,\n): MultichainAccountWalletId {\n return `${AccountWalletCategory.Entropy}:${entropySource}`;\n}\n"]}
@@ -1,58 +0,0 @@
1
- import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
2
- import { type MultichainAccount } from "./account.cjs";
3
- import type { MultichainAccountProvider } from "./provider.cjs";
4
- import type { AccountGroupId } from "../group.cjs";
5
- import type { AccountWallet } from "../wallet.cjs";
6
- import { AccountWalletCategory } from "../wallet.cjs";
7
- /**
8
- * Multichain account wallet ID.
9
- */
10
- export type MultichainAccountWalletId = `${AccountWalletCategory.Entropy}:${EntropySourceId}`;
11
- /**
12
- * A multichain account wallet that holds multiple multichain accounts (one multichain account per
13
- * group index).
14
- */
15
- export type MultichainAccountWallet<Account extends KeyringAccount> = AccountWallet<Account> & {
16
- /**
17
- * Multichain account wallet ID.
18
- */
19
- get id(): MultichainAccountWalletId;
20
- /**
21
- * Multichain account wallet entropy source.
22
- */
23
- get entropySource(): EntropySourceId;
24
- /**
25
- * Gets multichain account for a given index.
26
- *
27
- * @returns Multichain accounts.
28
- */
29
- getMultichainAccount(groupIndex: number): MultichainAccount<Account> | undefined;
30
- /**
31
- * Gets multichain accounts.
32
- *
33
- * @returns Multichain accounts.
34
- */
35
- getMultichainAccounts(): MultichainAccount<Account>[];
36
- };
37
- export declare class MultichainAccountWalletAdapter<Account extends KeyringAccount> implements MultichainAccountWallet<Account> {
38
- #private;
39
- constructor({ providers, entropySource, }: {
40
- providers: MultichainAccountProvider<Account>[];
41
- entropySource: EntropySourceId;
42
- });
43
- get id(): MultichainAccountWalletId;
44
- get category(): AccountWalletCategory.Entropy;
45
- get entropySource(): EntropySourceId;
46
- getAccountGroup(groupId: AccountGroupId): MultichainAccount<Account> | undefined;
47
- getAccountGroups(): MultichainAccount<Account>[];
48
- getMultichainAccount(groupIndex: number): MultichainAccount<Account> | undefined;
49
- getMultichainAccounts(): MultichainAccount<Account>[];
50
- }
51
- /**
52
- * Gets the multichain account wallet ID from its entropy source.
53
- *
54
- * @param entropySource - Entropy source ID of that wallet.
55
- * @returns The multichain account wallet ID.
56
- */
57
- export declare function toMultichainAccountWalletId(entropySource: EntropySourceId): MultichainAccountWalletId;
58
- //# sourceMappingURL=wallet.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAE7E,OAAO,EAGL,KAAK,iBAAiB,EACvB,sBAAkB;AACnB,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAmB;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAiB;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAkB;AAC/C,OAAO,EAAE,qBAAqB,EAAE,sBAAkB;AAElD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACnC,GAAG,qBAAqB,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,CAAC,OAAO,SAAS,cAAc,IAChE,aAAa,CAAC,OAAO,CAAC,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,IAAI,yBAAyB,CAAC;IAEpC;;OAEG;IACH,IAAI,aAAa,IAAI,eAAe,CAAC;IAErC;;;;OAIG;IACH,oBAAoB,CAClB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAE1C;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC;AAEJ,qBAAa,8BAA8B,CAAC,OAAO,SAAS,cAAc,CACxE,YAAW,uBAAuB,CAAC,OAAO,CAAC;;gBAU/B,EACV,SAAS,EACT,aAAa,GACd,EAAE;QACD,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,aAAa,EAAE,eAAe,CAAC;KAChC;IA+BD,IAAI,EAAE,IAAI,yBAAyB,CAElC;IAED,IAAI,QAAQ,IAAI,qBAAqB,CAAC,OAAO,CAE5C;IAED,IAAI,aAAa,IAAI,eAAe,CAEnC;IAED,eAAe,CACb,OAAO,EAAE,cAAc,GACtB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAazC,gBAAgB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAIhD,oBAAoB,CAClB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIzC,qBAAqB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,eAAe,GAC7B,yBAAyB,CAE3B"}
@@ -1,58 +0,0 @@
1
- import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
2
- import { type MultichainAccount } from "./account.mjs";
3
- import type { MultichainAccountProvider } from "./provider.mjs";
4
- import type { AccountGroupId } from "../group.mjs";
5
- import type { AccountWallet } from "../wallet.mjs";
6
- import { AccountWalletCategory } from "../wallet.mjs";
7
- /**
8
- * Multichain account wallet ID.
9
- */
10
- export type MultichainAccountWalletId = `${AccountWalletCategory.Entropy}:${EntropySourceId}`;
11
- /**
12
- * A multichain account wallet that holds multiple multichain accounts (one multichain account per
13
- * group index).
14
- */
15
- export type MultichainAccountWallet<Account extends KeyringAccount> = AccountWallet<Account> & {
16
- /**
17
- * Multichain account wallet ID.
18
- */
19
- get id(): MultichainAccountWalletId;
20
- /**
21
- * Multichain account wallet entropy source.
22
- */
23
- get entropySource(): EntropySourceId;
24
- /**
25
- * Gets multichain account for a given index.
26
- *
27
- * @returns Multichain accounts.
28
- */
29
- getMultichainAccount(groupIndex: number): MultichainAccount<Account> | undefined;
30
- /**
31
- * Gets multichain accounts.
32
- *
33
- * @returns Multichain accounts.
34
- */
35
- getMultichainAccounts(): MultichainAccount<Account>[];
36
- };
37
- export declare class MultichainAccountWalletAdapter<Account extends KeyringAccount> implements MultichainAccountWallet<Account> {
38
- #private;
39
- constructor({ providers, entropySource, }: {
40
- providers: MultichainAccountProvider<Account>[];
41
- entropySource: EntropySourceId;
42
- });
43
- get id(): MultichainAccountWalletId;
44
- get category(): AccountWalletCategory.Entropy;
45
- get entropySource(): EntropySourceId;
46
- getAccountGroup(groupId: AccountGroupId): MultichainAccount<Account> | undefined;
47
- getAccountGroups(): MultichainAccount<Account>[];
48
- getMultichainAccount(groupIndex: number): MultichainAccount<Account> | undefined;
49
- getMultichainAccounts(): MultichainAccount<Account>[];
50
- }
51
- /**
52
- * Gets the multichain account wallet ID from its entropy source.
53
- *
54
- * @param entropySource - Entropy source ID of that wallet.
55
- * @returns The multichain account wallet ID.
56
- */
57
- export declare function toMultichainAccountWalletId(entropySource: EntropySourceId): MultichainAccountWalletId;
58
- //# sourceMappingURL=wallet.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAE7E,OAAO,EAGL,KAAK,iBAAiB,EACvB,sBAAkB;AACnB,OAAO,KAAK,EAAE,yBAAyB,EAAE,uBAAmB;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAiB;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAkB;AAC/C,OAAO,EAAE,qBAAqB,EAAE,sBAAkB;AAElD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACnC,GAAG,qBAAqB,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,uBAAuB,CAAC,OAAO,SAAS,cAAc,IAChE,aAAa,CAAC,OAAO,CAAC,GAAG;IACvB;;OAEG;IACH,IAAI,EAAE,IAAI,yBAAyB,CAAC;IAEpC;;OAEG;IACH,IAAI,aAAa,IAAI,eAAe,CAAC;IAErC;;;;OAIG;IACH,oBAAoB,CAClB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAE1C;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC;AAEJ,qBAAa,8BAA8B,CAAC,OAAO,SAAS,cAAc,CACxE,YAAW,uBAAuB,CAAC,OAAO,CAAC;;gBAU/B,EACV,SAAS,EACT,aAAa,GACd,EAAE;QACD,SAAS,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,aAAa,EAAE,eAAe,CAAC;KAChC;IA+BD,IAAI,EAAE,IAAI,yBAAyB,CAElC;IAED,IAAI,QAAQ,IAAI,qBAAqB,CAAC,OAAO,CAE5C;IAED,IAAI,aAAa,IAAI,eAAe,CAEnC;IAED,eAAe,CACb,OAAO,EAAE,cAAc,GACtB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAazC,gBAAgB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAIhD,oBAAoB,CAClB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIzC,qBAAqB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,eAAe,GAC7B,yBAAyB,CAE3B"}
@@ -1,87 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- 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");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- 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");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _MultichainAccountWalletAdapter_id, _MultichainAccountWalletAdapter_providers, _MultichainAccountWalletAdapter_entropySource, _MultichainAccountWalletAdapter_accounts;
13
- import { getGroupIndexFromAccountGroupId, MultichainAccountAdapter } from "./account.mjs";
14
- import { toDefaultAccountGroupId } from "../group.mjs";
15
- import { AccountWalletCategory } from "../wallet.mjs";
16
- export class MultichainAccountWalletAdapter {
17
- constructor({ providers, entropySource, }) {
18
- _MultichainAccountWalletAdapter_id.set(this, void 0);
19
- _MultichainAccountWalletAdapter_providers.set(this, void 0);
20
- _MultichainAccountWalletAdapter_entropySource.set(this, void 0);
21
- _MultichainAccountWalletAdapter_accounts.set(this, void 0);
22
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_id, toMultichainAccountWalletId(entropySource), "f");
23
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_providers, providers, "f");
24
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_entropySource, entropySource, "f");
25
- __classPrivateFieldSet(this, _MultichainAccountWalletAdapter_accounts, new Map(), "f");
26
- let groupIndex = 0;
27
- let hasAccounts = false;
28
- // NOTE: We do not allow any gap for now. So if we have accounts for index 0 and index 2,
29
- // then this logic will stop at index 1, given that no account will be "provided".
30
- //
31
- // QUESTION: Should we a hard limit to the `groupIndex` to avoid having an infinite
32
- // loop here in case one of the provider is buggy?
33
- do {
34
- const multichainAccount = new MultichainAccountAdapter({
35
- groupIndex,
36
- wallet: this,
37
- providers: __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_providers, "f"),
38
- });
39
- // We only add multichain account that has underlying accounts.
40
- hasAccounts = multichainAccount.hasAccounts();
41
- if (hasAccounts) {
42
- __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").set(groupIndex, multichainAccount);
43
- }
44
- groupIndex += 1;
45
- } while (hasAccounts);
46
- }
47
- get id() {
48
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_id, "f");
49
- }
50
- get category() {
51
- return AccountWalletCategory.Entropy;
52
- }
53
- get entropySource() {
54
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_entropySource, "f");
55
- }
56
- getAccountGroup(groupId) {
57
- // We consider the "default case" to be mapped to index 0.
58
- if (groupId === toDefaultAccountGroupId(this.id)) {
59
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").get(0);
60
- }
61
- const groupIndex = getGroupIndexFromAccountGroupId(groupId);
62
- if (groupIndex === undefined) {
63
- return undefined;
64
- }
65
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").get(groupIndex);
66
- }
67
- getAccountGroups() {
68
- return this.getMultichainAccounts();
69
- }
70
- getMultichainAccount(groupIndex) {
71
- return __classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").get(groupIndex);
72
- }
73
- getMultichainAccounts() {
74
- return Array.from(__classPrivateFieldGet(this, _MultichainAccountWalletAdapter_accounts, "f").values()); // TODO: Prevent copy here.
75
- }
76
- }
77
- _MultichainAccountWalletAdapter_id = new WeakMap(), _MultichainAccountWalletAdapter_providers = new WeakMap(), _MultichainAccountWalletAdapter_entropySource = new WeakMap(), _MultichainAccountWalletAdapter_accounts = new WeakMap();
78
- /**
79
- * Gets the multichain account wallet ID from its entropy source.
80
- *
81
- * @param entropySource - Entropy source ID of that wallet.
82
- * @returns The multichain account wallet ID.
83
- */
84
- export function toMultichainAccountWalletId(entropySource) {
85
- return `${AccountWalletCategory.Entropy}:${entropySource}`;
86
- }
87
- //# sourceMappingURL=wallet.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet.mjs","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EAEzB,sBAAkB;AAGnB,OAAO,EAAE,uBAAuB,EAAE,qBAAiB;AAEnD,OAAO,EAAE,qBAAqB,EAAE,sBAAkB;AAyClD,MAAM,OAAO,8BAA8B;IAWzC,YAAY,EACV,SAAS,EACT,aAAa,GAId;QAdQ,qDAA+B;QAE/B,4DAAiD;QAEjD,gEAAgC;QAEhC,2DAAmD;QAS1D,uBAAA,IAAI,sCAAO,2BAA2B,CAAC,aAAa,CAAC,MAAA,CAAC;QACtD,uBAAA,IAAI,6CAAc,SAAS,MAAA,CAAC;QAC5B,uBAAA,IAAI,iDAAkB,aAAa,MAAA,CAAC;QACpC,uBAAA,IAAI,4CAAa,IAAI,GAAG,EAAE,MAAA,CAAC;QAE3B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,yFAAyF;QACzF,kFAAkF;QAClF,EAAE;QACF,mFAAmF;QACnF,kDAAkD;QAClD,GAAG,CAAC;YACF,MAAM,iBAAiB,GAAG,IAAI,wBAAwB,CAAC;gBACrD,UAAU;gBACV,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,uBAAA,IAAI,iDAAW;aAC3B,CAAC,CAAC;YAEH,+DAA+D;YAC/D,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACpD,CAAC;YAED,UAAU,IAAI,CAAC,CAAC;QAClB,CAAC,QAAQ,WAAW,EAAE;IACxB,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,uBAAA,IAAI,0CAAI,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,qBAAqB,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,uBAAA,IAAI,qDAAe,CAAC;IAC7B,CAAC;IAED,eAAe,CACb,OAAuB;QAEvB,0DAA0D;QAC1D,IAAI,OAAO,KAAK,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YACjD,OAAO,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,UAAU,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACtC,CAAC;IAED,oBAAoB,CAClB,UAAkB;QAElB,OAAO,uBAAA,IAAI,gDAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,gDAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,2BAA2B;IACzE,CAAC;CACF;;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,aAA8B;IAE9B,OAAO,GAAG,qBAAqB,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7D,CAAC","sourcesContent":["import type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\n\nimport {\n getGroupIndexFromAccountGroupId,\n MultichainAccountAdapter,\n type MultichainAccount,\n} from './account';\nimport type { MultichainAccountProvider } from './provider';\nimport type { AccountGroupId } from '../group';\nimport { toDefaultAccountGroupId } from '../group';\nimport type { AccountWallet } from '../wallet';\nimport { AccountWalletCategory } from '../wallet';\n\n/**\n * Multichain account wallet ID.\n */\nexport type MultichainAccountWalletId =\n `${AccountWalletCategory.Entropy}:${EntropySourceId}`;\n\n/**\n * A multichain account wallet that holds multiple multichain accounts (one multichain account per\n * group index).\n */\nexport type MultichainAccountWallet<Account extends KeyringAccount> =\n AccountWallet<Account> & {\n /**\n * Multichain account wallet ID.\n */\n get id(): MultichainAccountWalletId;\n\n /**\n * Multichain account wallet entropy source.\n */\n get entropySource(): EntropySourceId;\n\n /**\n * Gets multichain account for a given index.\n *\n * @returns Multichain accounts.\n */\n getMultichainAccount(\n groupIndex: number,\n ): MultichainAccount<Account> | undefined;\n\n /**\n * Gets multichain accounts.\n *\n * @returns Multichain accounts.\n */\n getMultichainAccounts(): MultichainAccount<Account>[];\n };\n\nexport class MultichainAccountWalletAdapter<Account extends KeyringAccount>\n implements MultichainAccountWallet<Account>\n{\n readonly #id: MultichainAccountWalletId;\n\n readonly #providers: MultichainAccountProvider<Account>[];\n\n readonly #entropySource: EntropySourceId;\n\n readonly #accounts: Map<number, MultichainAccount<Account>>;\n\n constructor({\n providers,\n entropySource,\n }: {\n providers: MultichainAccountProvider<Account>[];\n entropySource: EntropySourceId;\n }) {\n this.#id = toMultichainAccountWalletId(entropySource);\n this.#providers = providers;\n this.#entropySource = entropySource;\n this.#accounts = new Map();\n\n let groupIndex = 0;\n let hasAccounts = false;\n\n // NOTE: We do not allow any gap for now. So if we have accounts for index 0 and index 2,\n // then this logic will stop at index 1, given that no account will be \"provided\".\n //\n // QUESTION: Should we a hard limit to the `groupIndex` to avoid having an infinite\n // loop here in case one of the provider is buggy?\n do {\n const multichainAccount = new MultichainAccountAdapter({\n groupIndex,\n wallet: this,\n providers: this.#providers,\n });\n\n // We only add multichain account that has underlying accounts.\n hasAccounts = multichainAccount.hasAccounts();\n if (hasAccounts) {\n this.#accounts.set(groupIndex, multichainAccount);\n }\n\n groupIndex += 1;\n } while (hasAccounts);\n }\n\n get id(): MultichainAccountWalletId {\n return this.#id;\n }\n\n get category(): AccountWalletCategory.Entropy {\n return AccountWalletCategory.Entropy;\n }\n\n get entropySource(): EntropySourceId {\n return this.#entropySource;\n }\n\n getAccountGroup(\n groupId: AccountGroupId,\n ): MultichainAccount<Account> | undefined {\n // We consider the \"default case\" to be mapped to index 0.\n if (groupId === toDefaultAccountGroupId(this.id)) {\n return this.#accounts.get(0);\n }\n\n const groupIndex = getGroupIndexFromAccountGroupId(groupId);\n if (groupIndex === undefined) {\n return undefined;\n }\n return this.#accounts.get(groupIndex);\n }\n\n getAccountGroups(): MultichainAccount<Account>[] {\n return this.getMultichainAccounts();\n }\n\n getMultichainAccount(\n groupIndex: number,\n ): MultichainAccount<Account> | undefined {\n return this.#accounts.get(groupIndex);\n }\n\n getMultichainAccounts(): MultichainAccount<Account>[] {\n return Array.from(this.#accounts.values()); // TODO: Prevent copy here.\n }\n}\n\n/**\n * Gets the multichain account wallet ID from its entropy source.\n *\n * @param entropySource - Entropy source ID of that wallet.\n * @returns The multichain account wallet ID.\n */\nexport function toMultichainAccountWalletId(\n entropySource: EntropySourceId,\n): MultichainAccountWalletId {\n return `${AccountWalletCategory.Entropy}:${entropySource}`;\n}\n"]}