@metamask-previews/account-api 0.0.0-dff9202 → 0.1.0-6199101

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 (50) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/dist/api/group.cjs +1 -1
  3. package/dist/api/group.cjs.map +1 -1
  4. package/dist/api/group.d.cts +2 -3
  5. package/dist/api/group.d.cts.map +1 -1
  6. package/dist/api/group.d.mts +2 -3
  7. package/dist/api/group.d.mts.map +1 -1
  8. package/dist/api/group.mjs +1 -1
  9. package/dist/api/group.mjs.map +1 -1
  10. package/dist/api/index.cjs +1 -0
  11. package/dist/api/index.cjs.map +1 -1
  12. package/dist/api/index.d.cts +1 -0
  13. package/dist/api/index.d.cts.map +1 -1
  14. package/dist/api/index.d.mts +1 -0
  15. package/dist/api/index.d.mts.map +1 -1
  16. package/dist/api/index.mjs +1 -0
  17. package/dist/api/index.mjs.map +1 -1
  18. package/dist/api/multichain/account.cjs +135 -0
  19. package/dist/api/multichain/account.cjs.map +1 -0
  20. package/dist/api/multichain/account.d.cts +111 -0
  21. package/dist/api/multichain/account.d.cts.map +1 -0
  22. package/dist/api/multichain/account.d.mts +111 -0
  23. package/dist/api/multichain/account.d.mts.map +1 -0
  24. package/dist/api/multichain/account.mjs +129 -0
  25. package/dist/api/multichain/account.mjs.map +1 -0
  26. package/dist/api/multichain/index.cjs +19 -0
  27. package/dist/api/multichain/index.cjs.map +1 -0
  28. package/dist/api/multichain/index.d.cts +4 -0
  29. package/dist/api/multichain/index.d.cts.map +1 -0
  30. package/dist/api/multichain/index.d.mts +4 -0
  31. package/dist/api/multichain/index.d.mts.map +1 -0
  32. package/dist/api/multichain/index.mjs +3 -0
  33. package/dist/api/multichain/index.mjs.map +1 -0
  34. package/dist/api/multichain/provider.cjs +3 -0
  35. package/dist/api/multichain/provider.cjs.map +1 -0
  36. package/dist/api/multichain/provider.d.cts +29 -0
  37. package/dist/api/multichain/provider.d.cts.map +1 -0
  38. package/dist/api/multichain/provider.d.mts +29 -0
  39. package/dist/api/multichain/provider.d.mts.map +1 -0
  40. package/dist/api/multichain/provider.mjs +2 -0
  41. package/dist/api/multichain/provider.mjs.map +1 -0
  42. package/dist/api/multichain/wallet.cjs +92 -0
  43. package/dist/api/multichain/wallet.cjs.map +1 -0
  44. package/dist/api/multichain/wallet.d.cts +58 -0
  45. package/dist/api/multichain/wallet.d.cts.map +1 -0
  46. package/dist/api/multichain/wallet.d.mts +58 -0
  47. package/dist/api/multichain/wallet.d.mts.map +1 -0
  48. package/dist/api/multichain/wallet.mjs +87 -0
  49. package/dist/api/multichain/wallet.mjs.map +1 -0
  50. package/package.json +5 -2
package/CHANGELOG.md CHANGED
@@ -7,4 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- [Unreleased]: https://github.com/MetaMask/accounts/
10
+ ## [0.1.0]
11
+
12
+ ### Added
13
+
14
+ - Add `AccountGroup` and `AccountWallet` ([#307](https://github.com/MetaMask/accounts/pull/307))
15
+
16
+ [Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.1.0...HEAD
17
+ [0.1.0]: https://github.com/MetaMask/accounts/releases/tag/@metamask/account-api@0.1.0
@@ -18,7 +18,7 @@ exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = 'default';
18
18
  * @returns A group ID.
19
19
  */
20
20
  function toAccountGroupId(walletId, id) {
21
- return `${walletId}:${id}`;
21
+ return `${walletId}/${id}`;
22
22
  }
23
23
  /**
24
24
  * Convert a wallet ID to the default group ID.
@@ -1 +1 @@
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
+ {"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,5 +1,4 @@
1
1
  import type { KeyringAccount } from "@metamask/keyring-api";
2
- import type { AccountId } from "@metamask/keyring-utils";
3
2
  import type { AccountWallet, AccountWalletId } from "./wallet.cjs";
4
3
  /**
5
4
  * Default account group unique ID.
@@ -11,7 +10,7 @@ export declare const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string;
11
10
  /**
12
11
  * Account group ID.
13
12
  */
14
- export type AccountGroupId = `${AccountWalletId}:${string}`;
13
+ export type AccountGroupId = `${AccountWalletId}/${string}`;
15
14
  /**
16
15
  * Account group that can hold multiple accounts.
17
16
  */
@@ -37,7 +36,7 @@ export type AccountGroup<Account extends KeyringAccount> = {
37
36
  * @param id - Account ID.
38
37
  * @returns The "blockchain" account or undefined if not found.
39
38
  */
40
- getAccount(id: AccountId): Account | undefined;
39
+ getAccount(id: Account['id']): Account | undefined;
41
40
  };
42
41
  /**
43
42
  * 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;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
+ {"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,5 +1,4 @@
1
1
  import type { KeyringAccount } from "@metamask/keyring-api";
2
- import type { AccountId } from "@metamask/keyring-utils";
3
2
  import type { AccountWallet, AccountWalletId } from "./wallet.mjs";
4
3
  /**
5
4
  * Default account group unique ID.
@@ -11,7 +10,7 @@ export declare const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string;
11
10
  /**
12
11
  * Account group ID.
13
12
  */
14
- export type AccountGroupId = `${AccountWalletId}:${string}`;
13
+ export type AccountGroupId = `${AccountWalletId}/${string}`;
15
14
  /**
16
15
  * Account group that can hold multiple accounts.
17
16
  */
@@ -37,7 +36,7 @@ export type AccountGroup<Account extends KeyringAccount> = {
37
36
  * @param id - Account ID.
38
37
  * @returns The "blockchain" account or undefined if not found.
39
38
  */
40
- getAccount(id: AccountId): Account | undefined;
39
+ getAccount(id: Account['id']): Account | undefined;
41
40
  };
42
41
  /**
43
42
  * 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;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
+ {"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"}
@@ -13,7 +13,7 @@ export const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = 'default';
13
13
  * @returns A group ID.
14
14
  */
15
15
  export function toAccountGroupId(walletId, id) {
16
- return `${walletId}:${id}`;
16
+ return `${walletId}/${id}`;
17
17
  }
18
18
  /**
19
19
  * Convert a wallet ID to the default group ID.
@@ -1 +1 @@
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"]}
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"]}
@@ -16,4 +16,5 @@ 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);
19
20
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
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
+ {"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,3 +1,4 @@
1
1
  export * from "./group.cjs";
2
2
  export * from "./wallet.cjs";
3
+ export * from "./multichain/index.cjs";
3
4
  //# 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"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB;AACzB,uCAA6B"}
@@ -1,3 +1,4 @@
1
1
  export * from "./group.mjs";
2
2
  export * from "./wallet.mjs";
3
+ export * from "./multichain/index.mjs";
3
4
  //# 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"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,4BAAwB;AACxB,6BAAyB;AACzB,uCAA6B"}
@@ -1,3 +1,4 @@
1
1
  export * from "./group.mjs";
2
2
  export * from "./wallet.mjs";
3
+ export * from "./multichain/index.mjs";
3
4
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
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"]}
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"]}
@@ -0,0 +1,135 @@
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
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,111 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,111 @@
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
@@ -0,0 +1 @@
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"}