@metamask-previews/account-api 0.9.0-a621908 → 0.10.0-9fbf2ff
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.
- package/CHANGELOG.md +17 -1
- package/dist/api/group.cjs +53 -1
- package/dist/api/group.cjs.map +1 -1
- package/dist/api/group.d.cts +41 -1
- package/dist/api/group.d.cts.map +1 -1
- package/dist/api/group.d.mts +41 -1
- package/dist/api/group.d.mts.map +1 -1
- package/dist/api/group.mjs +49 -0
- package/dist/api/group.mjs.map +1 -1
- package/dist/api/multichain/group.cjs +35 -10
- package/dist/api/multichain/group.cjs.map +1 -1
- package/dist/api/multichain/group.d.cts +27 -0
- package/dist/api/multichain/group.d.cts.map +1 -1
- package/dist/api/multichain/group.d.mts +27 -0
- package/dist/api/multichain/group.d.mts.map +1 -1
- package/dist/api/multichain/group.mjs +32 -9
- package/dist/api/multichain/group.mjs.map +1 -1
- package/dist/api/multichain/wallet.cjs +34 -0
- package/dist/api/multichain/wallet.cjs.map +1 -1
- package/dist/api/multichain/wallet.d.cts +57 -2
- package/dist/api/multichain/wallet.d.cts.map +1 -1
- package/dist/api/multichain/wallet.d.mts +57 -2
- package/dist/api/multichain/wallet.d.mts.map +1 -1
- package/dist/api/multichain/wallet.mjs +31 -0
- package/dist/api/multichain/wallet.mjs.map +1 -1
- package/dist/api/provider.cjs.map +1 -1
- package/dist/api/provider.d.cts +8 -0
- package/dist/api/provider.d.cts.map +1 -1
- package/dist/api/provider.d.mts +8 -0
- package/dist/api/provider.d.mts.map +1 -1
- package/dist/api/provider.mjs.map +1 -1
- package/dist/api/wallet.cjs +45 -1
- package/dist/api/wallet.cjs.map +1 -1
- package/dist/api/wallet.d.cts +91 -3
- package/dist/api/wallet.d.cts.map +1 -1
- package/dist/api/wallet.d.mts +91 -3
- package/dist/api/wallet.d.mts.map +1 -1
- package/dist/api/wallet.mjs +41 -0
- package/dist/api/wallet.mjs.map +1 -1
- package/dist/mocks/accounts.cjs +10 -27
- package/dist/mocks/accounts.cjs.map +1 -1
- package/dist/mocks/accounts.d.cts +0 -18
- package/dist/mocks/accounts.d.cts.map +1 -1
- package/dist/mocks/accounts.d.mts +0 -18
- package/dist/mocks/accounts.d.mts.map +1 -1
- package/dist/mocks/accounts.mjs +3 -20
- package/dist/mocks/accounts.mjs.map +1 -1
- package/dist/mocks/groups.cjs +9 -0
- package/dist/mocks/groups.cjs.map +1 -0
- package/dist/mocks/groups.d.cts +5 -0
- package/dist/mocks/groups.d.cts.map +1 -0
- package/dist/mocks/groups.d.mts +5 -0
- package/dist/mocks/groups.d.mts.map +1 -0
- package/dist/mocks/groups.mjs +6 -0
- package/dist/mocks/groups.mjs.map +1 -0
- package/dist/mocks/index.cjs +4 -0
- package/dist/mocks/index.cjs.map +1 -1
- package/dist/mocks/index.d.cts +4 -0
- package/dist/mocks/index.d.cts.map +1 -1
- package/dist/mocks/index.d.mts +4 -0
- package/dist/mocks/index.d.mts.map +1 -1
- package/dist/mocks/index.mjs +4 -0
- package/dist/mocks/index.mjs.map +1 -1
- package/dist/mocks/keyrings.cjs +7 -0
- package/dist/mocks/keyrings.cjs.map +1 -0
- package/dist/mocks/keyrings.d.cts +4 -0
- package/dist/mocks/keyrings.d.cts.map +1 -0
- package/dist/mocks/keyrings.d.mts +4 -0
- package/dist/mocks/keyrings.d.mts.map +1 -0
- package/dist/mocks/keyrings.mjs +4 -0
- package/dist/mocks/keyrings.mjs.map +1 -0
- package/dist/mocks/snaps.cjs +20 -0
- package/dist/mocks/snaps.cjs.map +1 -0
- package/dist/mocks/snaps.d.cts +17 -0
- package/dist/mocks/snaps.d.cts.map +1 -0
- package/dist/mocks/snaps.d.mts +17 -0
- package/dist/mocks/snaps.d.mts.map +1 -0
- package/dist/mocks/snaps.mjs +17 -0
- package/dist/mocks/snaps.mjs.map +1 -0
- package/dist/mocks/wallets.cjs +11 -0
- package/dist/mocks/wallets.cjs.map +1 -0
- package/dist/mocks/wallets.d.cts +5 -0
- package/dist/mocks/wallets.d.cts.map +1 -0
- package/dist/mocks/wallets.d.mts +5 -0
- package/dist/mocks/wallets.d.mts.map +1 -0
- package/dist/mocks/wallets.mjs +8 -0
- package/dist/mocks/wallets.mjs.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Add wallet `status` ([#367](https://github.com/MetaMask/accounts/pull/367))
|
|
13
|
+
|
|
14
|
+
## [0.10.0]
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Add group/wallet ID parsing/validation support ([#360](https://github.com/MetaMask/accounts/pull/360))
|
|
19
|
+
- Add `Bip44AccountProvider` type alias ([#361](https://github.com/MetaMask/accounts/pull/361))
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- **BREAKING:** Bump `@metamask/keyring-api` to `^21.0.0` ([#362](https://github.com/MetaMask/accounts/pull/362))
|
|
24
|
+
|
|
10
25
|
## [0.9.0]
|
|
11
26
|
|
|
12
27
|
### Changed
|
|
@@ -100,7 +115,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
100
115
|
|
|
101
116
|
- Add `AccountGroup` and `AccountWallet` ([#307](https://github.com/MetaMask/accounts/pull/307))
|
|
102
117
|
|
|
103
|
-
[Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.
|
|
118
|
+
[Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.10.0...HEAD
|
|
119
|
+
[0.10.0]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.9.0...@metamask/account-api@0.10.0
|
|
104
120
|
[0.9.0]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.8.0...@metamask/account-api@0.9.0
|
|
105
121
|
[0.8.0]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.7.0...@metamask/account-api@0.8.0
|
|
106
122
|
[0.7.0]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.6.0...@metamask/account-api@0.7.0
|
package/dist/api/group.cjs
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AccountGroupType = exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = void 0;
|
|
3
|
+
exports.ACCOUNT_GROUP_ID_REGEX = exports.AccountGroupType = exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = void 0;
|
|
4
4
|
exports.toAccountGroupId = toAccountGroupId;
|
|
5
5
|
exports.toDefaultAccountGroupId = toDefaultAccountGroupId;
|
|
6
|
+
exports.isAccountGroupId = isAccountGroupId;
|
|
7
|
+
exports.parseAccountGroupId = parseAccountGroupId;
|
|
8
|
+
exports.stripAccountWalletId = stripAccountWalletId;
|
|
6
9
|
/**
|
|
7
10
|
* Default account group unique ID.
|
|
8
11
|
*
|
|
@@ -22,6 +25,10 @@ var AccountGroupType;
|
|
|
22
25
|
/** Group that represents a single account. */
|
|
23
26
|
AccountGroupType["SingleAccount"] = "single-account";
|
|
24
27
|
})(AccountGroupType || (exports.AccountGroupType = AccountGroupType = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Regex to validate a valid account group ID.
|
|
30
|
+
*/
|
|
31
|
+
exports.ACCOUNT_GROUP_ID_REGEX = /^(?<walletId>(?<walletType>entropy|snap|keyring):(?<walletSubId>.+))\/(?<groupSubId>[^/]+)$/u;
|
|
25
32
|
/**
|
|
26
33
|
* Convert a wallet ID and a unique ID, to a group ID.
|
|
27
34
|
*
|
|
@@ -41,4 +48,49 @@ function toAccountGroupId(walletId, id) {
|
|
|
41
48
|
function toDefaultAccountGroupId(walletId) {
|
|
42
49
|
return toAccountGroupId(walletId, exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);
|
|
43
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Checks if the given value is {@link AccountGroupId}.
|
|
53
|
+
*
|
|
54
|
+
* @param value - The value to check.
|
|
55
|
+
* @returns Whether the value is a {@link AccountGroupId}.
|
|
56
|
+
*/
|
|
57
|
+
function isAccountGroupId(value) {
|
|
58
|
+
return exports.ACCOUNT_GROUP_ID_REGEX.test(value);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse a multichain account group ID to an object containing a wallet ID
|
|
62
|
+
* information (wallet type and wallet sub-ID), as well as account group ID
|
|
63
|
+
* information (group sub-ID).
|
|
64
|
+
*
|
|
65
|
+
* @param groupId - The account group ID to validate and parse.
|
|
66
|
+
* @returns The parsed account group ID.
|
|
67
|
+
* @throws When the group ID format is invalid.
|
|
68
|
+
*/
|
|
69
|
+
function parseAccountGroupId(groupId) {
|
|
70
|
+
const match = exports.ACCOUNT_GROUP_ID_REGEX.exec(groupId);
|
|
71
|
+
if (!match?.groups) {
|
|
72
|
+
throw new Error(`Invalid account group ID: "${groupId}"`);
|
|
73
|
+
}
|
|
74
|
+
const walletId = match.groups.walletId;
|
|
75
|
+
const walletType = match.groups.walletType;
|
|
76
|
+
const walletSubId = match.groups.walletSubId;
|
|
77
|
+
return {
|
|
78
|
+
wallet: {
|
|
79
|
+
id: walletId,
|
|
80
|
+
type: walletType,
|
|
81
|
+
subId: walletSubId,
|
|
82
|
+
},
|
|
83
|
+
subId: match.groups.groupSubId,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Strip the account wallet ID from an account group ID.
|
|
88
|
+
*
|
|
89
|
+
* @param groupId - Account group ID.
|
|
90
|
+
* @returns Account group sub-ID.
|
|
91
|
+
* @throws When the group ID format is invalid.
|
|
92
|
+
*/
|
|
93
|
+
function stripAccountWalletId(groupId) {
|
|
94
|
+
return parseAccountGroupId(groupId).subId;
|
|
95
|
+
}
|
|
44
96
|
//# sourceMappingURL=group.cjs.map
|
package/dist/api/group.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":";;;AAyHA,4CAKC;AAQD,0DAOC;AAQD,4CAEC;AAWD,kDAkBC;AASD,oDAEC;AApLD;;;;;GAKG;AACU,QAAA,+BAA+B,GAAW,SAAS,CAAC;AAEjE;;;;GAIG;AACH,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,kDAAkD;IAClD,4DAAwC,CAAA;IAExC,8CAA8C;IAC9C,oDAAgC,CAAA;AAClC,CAAC,EANW,gBAAgB,gCAAhB,gBAAgB,QAM3B;AAOD;;GAEG;AACU,QAAA,sBAAsB,GACjC,8FAA8F,CAAC;AAyEjG;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,QAAuC,EACvC,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,QAAuC;IAEvC,OAAO,gBAAgB,CACrB,QAAQ,EACR,uCAA+B,CAChC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,OAAO,8BAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,8BAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAA2B,CAAC;IAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAA+B,CAAC;IAChE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAqB,CAAC;IAEvD,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW;SACnB;QACD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,UAAoB;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAAC,OAAe;IAClD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountSelector } from './selector';\nimport {\n type AccountWallet,\n type AccountWalletId,\n type AccountWalletIdOf,\n type AccountWalletType,\n} 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 object.\n *\n * Each group types groups accounts using different criterias.\n */\nexport enum AccountGroupType {\n /** Group that represents a multichain account. */\n MultichainAccount = 'multichain-account',\n\n /** Group that represents a single account. */\n SingleAccount = 'single-account',\n}\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Regex to validate a valid account group ID.\n */\nexport const ACCOUNT_GROUP_ID_REGEX =\n /^(?<walletId>(?<walletType>entropy|snap|keyring):(?<walletSubId>.+))\\/(?<groupSubId>[^/]+)$/u;\n\n/**\n * Parsed account group ID with its parsed wallet component and its sub-ID.\n */\nexport type ParsedAccountGroupId = {\n wallet: {\n id: AccountWalletId;\n type: AccountWalletType;\n subId: string;\n };\n subId: string;\n};\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 group type.\n */\n get type(): AccountGroupType;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the accounts for this account group.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n\n /**\n * Query an account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: AccountSelector<Account>): Account | undefined;\n\n /**\n * Query accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The accounts matching the selector.\n */\n select(selector: AccountSelector<Account>): Account[];\n};\n\n/**\n * Type utility to compute a constrained {@link AccountGroupId} type given a\n * specifc {@link AccountWalletType}.\n */\nexport type AccountGroupIdOf<WalletType extends AccountWalletType> =\n `${AccountWalletIdOf<WalletType>}/${string}`;\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<WalletType extends AccountWalletType>(\n walletId: AccountWalletIdOf<WalletType>,\n id: string,\n): AccountGroupIdOf<WalletType> {\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<WalletType extends AccountWalletType>(\n walletId: AccountWalletIdOf<WalletType>,\n): AccountGroupIdOf<WalletType> {\n return toAccountGroupId<WalletType>(\n walletId,\n DEFAULT_ACCOUNT_GROUP_UNIQUE_ID,\n );\n}\n\n/**\n * Checks if the given value is {@link AccountGroupId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link AccountGroupId}.\n */\nexport function isAccountGroupId(value: string): value is AccountGroupId {\n return ACCOUNT_GROUP_ID_REGEX.test(value);\n}\n\n/**\n * Parse a multichain account group ID to an object containing a wallet ID\n * information (wallet type and wallet sub-ID), as well as account group ID\n * information (group sub-ID).\n *\n * @param groupId - The account group ID to validate and parse.\n * @returns The parsed account group ID.\n * @throws When the group ID format is invalid.\n */\nexport function parseAccountGroupId(groupId: string): ParsedAccountGroupId {\n const match = ACCOUNT_GROUP_ID_REGEX.exec(groupId);\n if (!match?.groups) {\n throw new Error(`Invalid account group ID: \"${groupId}\"`);\n }\n\n const walletId = match.groups.walletId as AccountWalletId;\n const walletType = match.groups.walletType as AccountWalletType;\n const walletSubId = match.groups.walletSubId as string;\n\n return {\n wallet: {\n id: walletId,\n type: walletType,\n subId: walletSubId,\n },\n subId: match.groups.groupSubId as string,\n };\n}\n\n/**\n * Strip the account wallet ID from an account group ID.\n *\n * @param groupId - Account group ID.\n * @returns Account group sub-ID.\n * @throws When the group ID format is invalid.\n */\nexport function stripAccountWalletId(groupId: string): string {\n return parseAccountGroupId(groupId).subId;\n}\n"]}
|
package/dist/api/group.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { KeyringAccount } from "@metamask/keyring-api";
|
|
2
2
|
import type { AccountSelector } from "./selector.cjs";
|
|
3
|
-
import type
|
|
3
|
+
import { type AccountWallet, type AccountWalletId, type AccountWalletIdOf, type AccountWalletType } from "./wallet.cjs";
|
|
4
4
|
/**
|
|
5
5
|
* Default account group unique ID.
|
|
6
6
|
*
|
|
@@ -23,6 +23,21 @@ export declare enum AccountGroupType {
|
|
|
23
23
|
* Account group ID.
|
|
24
24
|
*/
|
|
25
25
|
export type AccountGroupId = `${AccountWalletId}/${string}`;
|
|
26
|
+
/**
|
|
27
|
+
* Regex to validate a valid account group ID.
|
|
28
|
+
*/
|
|
29
|
+
export declare const ACCOUNT_GROUP_ID_REGEX: RegExp;
|
|
30
|
+
/**
|
|
31
|
+
* Parsed account group ID with its parsed wallet component and its sub-ID.
|
|
32
|
+
*/
|
|
33
|
+
export type ParsedAccountGroupId = {
|
|
34
|
+
wallet: {
|
|
35
|
+
id: AccountWalletId;
|
|
36
|
+
type: AccountWalletType;
|
|
37
|
+
subId: string;
|
|
38
|
+
};
|
|
39
|
+
subId: string;
|
|
40
|
+
};
|
|
26
41
|
/**
|
|
27
42
|
* Account group that can hold multiple accounts.
|
|
28
43
|
*/
|
|
@@ -88,4 +103,29 @@ export declare function toAccountGroupId<WalletType extends AccountWalletType>(w
|
|
|
88
103
|
* @returns The default group ID.
|
|
89
104
|
*/
|
|
90
105
|
export declare function toDefaultAccountGroupId<WalletType extends AccountWalletType>(walletId: AccountWalletIdOf<WalletType>): AccountGroupIdOf<WalletType>;
|
|
106
|
+
/**
|
|
107
|
+
* Checks if the given value is {@link AccountGroupId}.
|
|
108
|
+
*
|
|
109
|
+
* @param value - The value to check.
|
|
110
|
+
* @returns Whether the value is a {@link AccountGroupId}.
|
|
111
|
+
*/
|
|
112
|
+
export declare function isAccountGroupId(value: string): value is AccountGroupId;
|
|
113
|
+
/**
|
|
114
|
+
* Parse a multichain account group ID to an object containing a wallet ID
|
|
115
|
+
* information (wallet type and wallet sub-ID), as well as account group ID
|
|
116
|
+
* information (group sub-ID).
|
|
117
|
+
*
|
|
118
|
+
* @param groupId - The account group ID to validate and parse.
|
|
119
|
+
* @returns The parsed account group ID.
|
|
120
|
+
* @throws When the group ID format is invalid.
|
|
121
|
+
*/
|
|
122
|
+
export declare function parseAccountGroupId(groupId: string): ParsedAccountGroupId;
|
|
123
|
+
/**
|
|
124
|
+
* Strip the account wallet ID from an account group ID.
|
|
125
|
+
*
|
|
126
|
+
* @param groupId - Account group ID.
|
|
127
|
+
* @returns Account group sub-ID.
|
|
128
|
+
* @throws When the group ID format is invalid.
|
|
129
|
+
*/
|
|
130
|
+
export declare function stripAccountWalletId(groupId: string): string;
|
|
91
131
|
//# sourceMappingURL=group.d.cts.map
|
package/dist/api/group.d.cts.map
CHANGED
|
@@ -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,eAAe,EAAE,uBAAmB;AAClD,OAAO,KAAK,
|
|
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,eAAe,EAAE,uBAAmB;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,qBAAiB;AAElB;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,kDAAkD;IAClD,iBAAiB,uBAAuB;IAExC,8CAA8C;IAC9C,aAAa,mBAAmB;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAC6D,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE;QACN,EAAE,EAAE,eAAe,CAAC;QACpB,IAAI,EAAE,iBAAiB,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC;IAE7B;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;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,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAE7D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,iBAAiB,IAC/D,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,MAAM,EAAE,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,iBAAiB,EACnE,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EACvC,EAAE,EAAE,MAAM,GACT,gBAAgB,CAAC,UAAU,CAAC,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,SAAS,iBAAiB,EAC1E,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GACtC,gBAAgB,CAAC,UAAU,CAAC,CAK9B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAkBzE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
package/dist/api/group.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { KeyringAccount } from "@metamask/keyring-api";
|
|
2
2
|
import type { AccountSelector } from "./selector.mjs";
|
|
3
|
-
import type
|
|
3
|
+
import { type AccountWallet, type AccountWalletId, type AccountWalletIdOf, type AccountWalletType } from "./wallet.mjs";
|
|
4
4
|
/**
|
|
5
5
|
* Default account group unique ID.
|
|
6
6
|
*
|
|
@@ -23,6 +23,21 @@ export declare enum AccountGroupType {
|
|
|
23
23
|
* Account group ID.
|
|
24
24
|
*/
|
|
25
25
|
export type AccountGroupId = `${AccountWalletId}/${string}`;
|
|
26
|
+
/**
|
|
27
|
+
* Regex to validate a valid account group ID.
|
|
28
|
+
*/
|
|
29
|
+
export declare const ACCOUNT_GROUP_ID_REGEX: RegExp;
|
|
30
|
+
/**
|
|
31
|
+
* Parsed account group ID with its parsed wallet component and its sub-ID.
|
|
32
|
+
*/
|
|
33
|
+
export type ParsedAccountGroupId = {
|
|
34
|
+
wallet: {
|
|
35
|
+
id: AccountWalletId;
|
|
36
|
+
type: AccountWalletType;
|
|
37
|
+
subId: string;
|
|
38
|
+
};
|
|
39
|
+
subId: string;
|
|
40
|
+
};
|
|
26
41
|
/**
|
|
27
42
|
* Account group that can hold multiple accounts.
|
|
28
43
|
*/
|
|
@@ -88,4 +103,29 @@ export declare function toAccountGroupId<WalletType extends AccountWalletType>(w
|
|
|
88
103
|
* @returns The default group ID.
|
|
89
104
|
*/
|
|
90
105
|
export declare function toDefaultAccountGroupId<WalletType extends AccountWalletType>(walletId: AccountWalletIdOf<WalletType>): AccountGroupIdOf<WalletType>;
|
|
106
|
+
/**
|
|
107
|
+
* Checks if the given value is {@link AccountGroupId}.
|
|
108
|
+
*
|
|
109
|
+
* @param value - The value to check.
|
|
110
|
+
* @returns Whether the value is a {@link AccountGroupId}.
|
|
111
|
+
*/
|
|
112
|
+
export declare function isAccountGroupId(value: string): value is AccountGroupId;
|
|
113
|
+
/**
|
|
114
|
+
* Parse a multichain account group ID to an object containing a wallet ID
|
|
115
|
+
* information (wallet type and wallet sub-ID), as well as account group ID
|
|
116
|
+
* information (group sub-ID).
|
|
117
|
+
*
|
|
118
|
+
* @param groupId - The account group ID to validate and parse.
|
|
119
|
+
* @returns The parsed account group ID.
|
|
120
|
+
* @throws When the group ID format is invalid.
|
|
121
|
+
*/
|
|
122
|
+
export declare function parseAccountGroupId(groupId: string): ParsedAccountGroupId;
|
|
123
|
+
/**
|
|
124
|
+
* Strip the account wallet ID from an account group ID.
|
|
125
|
+
*
|
|
126
|
+
* @param groupId - Account group ID.
|
|
127
|
+
* @returns Account group sub-ID.
|
|
128
|
+
* @throws When the group ID format is invalid.
|
|
129
|
+
*/
|
|
130
|
+
export declare function stripAccountWalletId(groupId: string): string;
|
|
91
131
|
//# sourceMappingURL=group.d.mts.map
|
package/dist/api/group.d.mts.map
CHANGED
|
@@ -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,eAAe,EAAE,uBAAmB;AAClD,OAAO,KAAK,
|
|
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,eAAe,EAAE,uBAAmB;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,qBAAiB;AAElB;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,kDAAkD;IAClD,iBAAiB,uBAAuB;IAExC,8CAA8C;IAC9C,aAAa,mBAAmB;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAC6D,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE;QACN,EAAE,EAAE,eAAe,CAAC;QACpB,IAAI,EAAE,iBAAiB,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC;IAE7B;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;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,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IAE7D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;CACvD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,UAAU,SAAS,iBAAiB,IAC/D,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,MAAM,EAAE,CAAC;AAE/C;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,SAAS,iBAAiB,EACnE,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,EACvC,EAAE,EAAE,MAAM,GACT,gBAAgB,CAAC,UAAU,CAAC,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,SAAS,iBAAiB,EAC1E,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GACtC,gBAAgB,CAAC,UAAU,CAAC,CAK9B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAkBzE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
package/dist/api/group.mjs
CHANGED
|
@@ -17,6 +17,10 @@ export var AccountGroupType;
|
|
|
17
17
|
/** Group that represents a single account. */
|
|
18
18
|
AccountGroupType["SingleAccount"] = "single-account";
|
|
19
19
|
})(AccountGroupType || (AccountGroupType = {}));
|
|
20
|
+
/**
|
|
21
|
+
* Regex to validate a valid account group ID.
|
|
22
|
+
*/
|
|
23
|
+
export const ACCOUNT_GROUP_ID_REGEX = /^(?<walletId>(?<walletType>entropy|snap|keyring):(?<walletSubId>.+))\/(?<groupSubId>[^/]+)$/u;
|
|
20
24
|
/**
|
|
21
25
|
* Convert a wallet ID and a unique ID, to a group ID.
|
|
22
26
|
*
|
|
@@ -36,4 +40,49 @@ export function toAccountGroupId(walletId, id) {
|
|
|
36
40
|
export function toDefaultAccountGroupId(walletId) {
|
|
37
41
|
return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);
|
|
38
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Checks if the given value is {@link AccountGroupId}.
|
|
45
|
+
*
|
|
46
|
+
* @param value - The value to check.
|
|
47
|
+
* @returns Whether the value is a {@link AccountGroupId}.
|
|
48
|
+
*/
|
|
49
|
+
export function isAccountGroupId(value) {
|
|
50
|
+
return ACCOUNT_GROUP_ID_REGEX.test(value);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Parse a multichain account group ID to an object containing a wallet ID
|
|
54
|
+
* information (wallet type and wallet sub-ID), as well as account group ID
|
|
55
|
+
* information (group sub-ID).
|
|
56
|
+
*
|
|
57
|
+
* @param groupId - The account group ID to validate and parse.
|
|
58
|
+
* @returns The parsed account group ID.
|
|
59
|
+
* @throws When the group ID format is invalid.
|
|
60
|
+
*/
|
|
61
|
+
export function parseAccountGroupId(groupId) {
|
|
62
|
+
const match = ACCOUNT_GROUP_ID_REGEX.exec(groupId);
|
|
63
|
+
if (!match?.groups) {
|
|
64
|
+
throw new Error(`Invalid account group ID: "${groupId}"`);
|
|
65
|
+
}
|
|
66
|
+
const walletId = match.groups.walletId;
|
|
67
|
+
const walletType = match.groups.walletType;
|
|
68
|
+
const walletSubId = match.groups.walletSubId;
|
|
69
|
+
return {
|
|
70
|
+
wallet: {
|
|
71
|
+
id: walletId,
|
|
72
|
+
type: walletType,
|
|
73
|
+
subId: walletSubId,
|
|
74
|
+
},
|
|
75
|
+
subId: match.groups.groupSubId,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Strip the account wallet ID from an account group ID.
|
|
80
|
+
*
|
|
81
|
+
* @param groupId - Account group ID.
|
|
82
|
+
* @returns Account group sub-ID.
|
|
83
|
+
* @throws When the group ID format is invalid.
|
|
84
|
+
*/
|
|
85
|
+
export function stripAccountWalletId(groupId) {
|
|
86
|
+
return parseAccountGroupId(groupId).subId;
|
|
87
|
+
}
|
|
39
88
|
//# sourceMappingURL=group.mjs.map
|
package/dist/api/group.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.mjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAW,SAAS,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,kDAAkD;IAClD,4DAAwC,CAAA;IAExC,8CAA8C;IAC9C,oDAAgC,CAAA;AAClC,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;
|
|
1
|
+
{"version":3,"file":"group.mjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAW,SAAS,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,kDAAkD;IAClD,4DAAwC,CAAA;IAExC,8CAA8C;IAC9C,oDAAgC,CAAA;AAClC,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AAOD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,8FAA8F,CAAC;AAyEjG;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAuC,EACvC,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAuC;IAEvC,OAAO,gBAAgB,CACrB,QAAQ,EACR,+BAA+B,CAChC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAA2B,CAAC;IAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAA+B,CAAC;IAChE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAqB,CAAC;IAEvD,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW;SACnB;QACD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,UAAoB;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountSelector } from './selector';\nimport {\n type AccountWallet,\n type AccountWalletId,\n type AccountWalletIdOf,\n type AccountWalletType,\n} 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 object.\n *\n * Each group types groups accounts using different criterias.\n */\nexport enum AccountGroupType {\n /** Group that represents a multichain account. */\n MultichainAccount = 'multichain-account',\n\n /** Group that represents a single account. */\n SingleAccount = 'single-account',\n}\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Regex to validate a valid account group ID.\n */\nexport const ACCOUNT_GROUP_ID_REGEX =\n /^(?<walletId>(?<walletType>entropy|snap|keyring):(?<walletSubId>.+))\\/(?<groupSubId>[^/]+)$/u;\n\n/**\n * Parsed account group ID with its parsed wallet component and its sub-ID.\n */\nexport type ParsedAccountGroupId = {\n wallet: {\n id: AccountWalletId;\n type: AccountWalletType;\n subId: string;\n };\n subId: string;\n};\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 group type.\n */\n get type(): AccountGroupType;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the accounts for this account group.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n\n /**\n * Query an account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: AccountSelector<Account>): Account | undefined;\n\n /**\n * Query accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The accounts matching the selector.\n */\n select(selector: AccountSelector<Account>): Account[];\n};\n\n/**\n * Type utility to compute a constrained {@link AccountGroupId} type given a\n * specifc {@link AccountWalletType}.\n */\nexport type AccountGroupIdOf<WalletType extends AccountWalletType> =\n `${AccountWalletIdOf<WalletType>}/${string}`;\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<WalletType extends AccountWalletType>(\n walletId: AccountWalletIdOf<WalletType>,\n id: string,\n): AccountGroupIdOf<WalletType> {\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<WalletType extends AccountWalletType>(\n walletId: AccountWalletIdOf<WalletType>,\n): AccountGroupIdOf<WalletType> {\n return toAccountGroupId<WalletType>(\n walletId,\n DEFAULT_ACCOUNT_GROUP_UNIQUE_ID,\n );\n}\n\n/**\n * Checks if the given value is {@link AccountGroupId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link AccountGroupId}.\n */\nexport function isAccountGroupId(value: string): value is AccountGroupId {\n return ACCOUNT_GROUP_ID_REGEX.test(value);\n}\n\n/**\n * Parse a multichain account group ID to an object containing a wallet ID\n * information (wallet type and wallet sub-ID), as well as account group ID\n * information (group sub-ID).\n *\n * @param groupId - The account group ID to validate and parse.\n * @returns The parsed account group ID.\n * @throws When the group ID format is invalid.\n */\nexport function parseAccountGroupId(groupId: string): ParsedAccountGroupId {\n const match = ACCOUNT_GROUP_ID_REGEX.exec(groupId);\n if (!match?.groups) {\n throw new Error(`Invalid account group ID: \"${groupId}\"`);\n }\n\n const walletId = match.groups.walletId as AccountWalletId;\n const walletType = match.groups.walletType as AccountWalletType;\n const walletSubId = match.groups.walletSubId as string;\n\n return {\n wallet: {\n id: walletId,\n type: walletType,\n subId: walletSubId,\n },\n subId: match.groups.groupSubId as string,\n };\n}\n\n/**\n * Strip the account wallet ID from an account group ID.\n *\n * @param groupId - Account group ID.\n * @returns Account group sub-ID.\n * @throws When the group ID format is invalid.\n */\nexport function stripAccountWalletId(groupId: string): string {\n return parseAccountGroupId(groupId).subId;\n}\n"]}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MULTICHAIN_ACCOUNT_GROUP_ID_REGEX = void 0;
|
|
3
4
|
exports.toMultichainAccountGroupId = toMultichainAccountGroupId;
|
|
4
5
|
exports.isMultichainAccountGroupId = isMultichainAccountGroupId;
|
|
6
|
+
exports.parseMultichainAccountGroupId = parseMultichainAccountGroupId;
|
|
5
7
|
exports.getGroupIndexFromMultichainAccountGroupId = getGroupIndexFromMultichainAccountGroupId;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Regex to validate a valid multichain account group ID.
|
|
10
|
+
*/
|
|
11
|
+
exports.MULTICHAIN_ACCOUNT_GROUP_ID_REGEX = /^(?<walletId>(?<walletType>entropy):(?<walletSubId>.+))\/(?<groupIndex>[0-9]+)$/u;
|
|
8
12
|
/**
|
|
9
13
|
* Gets the multichain account group ID from its multichain account wallet ID and its index.
|
|
10
14
|
*
|
|
@@ -22,21 +26,42 @@ function toMultichainAccountGroupId(walletId, groupIndex) {
|
|
|
22
26
|
* @returns Whether the value is a {@link MultichainAccountGroupId}.
|
|
23
27
|
*/
|
|
24
28
|
function isMultichainAccountGroupId(value) {
|
|
25
|
-
return MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.test(value);
|
|
29
|
+
return exports.MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.test(value);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse a multichain account group ID to an object containing a multichain
|
|
33
|
+
* wallet ID information (wallet type and wallet sub-ID), as well as
|
|
34
|
+
* multichain account group ID information (group index).
|
|
35
|
+
*
|
|
36
|
+
* @param groupId - The multichain account group ID to validate and parse.
|
|
37
|
+
* @returns The parsed multichain account group ID.
|
|
38
|
+
* @throws When the group ID format is invalid.
|
|
39
|
+
*/
|
|
40
|
+
function parseMultichainAccountGroupId(groupId) {
|
|
41
|
+
const match = exports.MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.exec(groupId);
|
|
42
|
+
if (!match?.groups) {
|
|
43
|
+
throw new Error(`Invalid multichain account group ID: "${groupId}"`);
|
|
44
|
+
}
|
|
45
|
+
const walletId = match.groups.walletId;
|
|
46
|
+
const walletType = match.groups.walletType;
|
|
47
|
+
const walletSubId = match.groups.walletSubId;
|
|
48
|
+
return {
|
|
49
|
+
wallet: {
|
|
50
|
+
id: walletId,
|
|
51
|
+
type: walletType,
|
|
52
|
+
subId: walletSubId,
|
|
53
|
+
},
|
|
54
|
+
groupIndex: Number(match.groups.groupIndex),
|
|
55
|
+
};
|
|
26
56
|
}
|
|
27
57
|
/**
|
|
28
58
|
* Gets the multichain account index from an account group ID.
|
|
29
59
|
*
|
|
30
60
|
* @param id - Multichain account ID.
|
|
31
61
|
* @returns The multichain account index if extractable, undefined otherwise.
|
|
62
|
+
* @throws When the group ID format is invalid.
|
|
32
63
|
*/
|
|
33
64
|
function getGroupIndexFromMultichainAccountGroupId(id) {
|
|
34
|
-
|
|
35
|
-
if (matched?.groups?.groupIndex === undefined) {
|
|
36
|
-
// Unable to extract group index, even though, type wise, this should not
|
|
37
|
-
// be possible!
|
|
38
|
-
throw new Error('Unable to extract group index');
|
|
39
|
-
}
|
|
40
|
-
return Number(matched.groups.groupIndex);
|
|
65
|
+
return parseMultichainAccountGroupId(id).groupIndex;
|
|
41
66
|
}
|
|
42
67
|
//# sourceMappingURL=group.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../../src/api/multichain/group.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../../src/api/multichain/group.ts"],"names":[],"mappings":";;;AAmEA,gEAKC;AAQD,gEAIC;AAWD,sEAoBC;AASD,8FAIC;AAjHD;;GAEG;AACU,QAAA,iCAAiC,GAC5C,kFAAkF,CAAC;AAyCrF;;;;;;GAMG;AACH,SAAgB,0BAA0B,CACxC,QAAmC,EACnC,UAAkB;IAElB,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,0BAA0B,CACxC,KAAa;IAEb,OAAO,yCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,6BAA6B,CAC3C,OAAe;IAEf,MAAM,KAAK,GAAG,yCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,GAAG,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAqC,CAAC;IACpE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAuC,CAAC;IACxE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAqB,CAAC;IAEvD,OAAO;QACL,MAAM,EAAE;YACN,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,WAAW;SACnB;QACD,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,yCAAyC,CACvD,EAA4B;IAE5B,OAAO,6BAA6B,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC;AACtD,CAAC","sourcesContent":["import { type KeyringAccount } from '@metamask/keyring-api';\n\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroup, AccountGroupType } from '../group';\nimport type { AccountWalletType } from '../wallet';\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountGroupId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * Regex to validate a valid multichain account group ID.\n */\nexport const MULTICHAIN_ACCOUNT_GROUP_ID_REGEX =\n /^(?<walletId>(?<walletType>entropy):(?<walletSubId>.+))\\/(?<groupIndex>[0-9]+)$/u;\n\n/**\n * Parsed account group ID with its parsed wallet component and its sub-ID.\n */\nexport type ParsedMultichainAccountGroupId = {\n wallet: {\n id: MultichainAccountWalletId;\n type: AccountWalletType.Entropy;\n subId: string;\n };\n groupIndex: number;\n};\n\n/**\n * A multichain account that holds multiple accounts.\n */\nexport type MultichainAccountGroup<\n Account extends Bip44Account<KeyringAccount>,\n> = AccountGroup<Account> & {\n /**\n * Multichain account group ID.\n */\n get id(): MultichainAccountGroupId;\n\n /**\n * Multichain account type.\n */\n get type(): AccountGroupType.MultichainAccount;\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 groupIndex(): number;\n};\n\n/**\n * Gets the multichain account group 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 toMultichainAccountGroupId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountGroupId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Checks if the given value is {@link MultichainAccountGroupId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link MultichainAccountGroupId}.\n */\nexport function isMultichainAccountGroupId(\n value: string,\n): value is MultichainAccountGroupId {\n return MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.test(value);\n}\n\n/**\n * Parse a multichain account group ID to an object containing a multichain\n * wallet ID information (wallet type and wallet sub-ID), as well as\n * multichain account group ID information (group index).\n *\n * @param groupId - The multichain account group ID to validate and parse.\n * @returns The parsed multichain account group ID.\n * @throws When the group ID format is invalid.\n */\nexport function parseMultichainAccountGroupId(\n groupId: string,\n): ParsedMultichainAccountGroupId {\n const match = MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.exec(groupId);\n if (!match?.groups) {\n throw new Error(`Invalid multichain account group ID: \"${groupId}\"`);\n }\n\n const walletId = match.groups.walletId as MultichainAccountWalletId;\n const walletType = match.groups.walletType as AccountWalletType.Entropy;\n const walletSubId = match.groups.walletSubId as string;\n\n return {\n wallet: {\n id: walletId,\n type: walletType,\n subId: walletSubId,\n },\n groupIndex: Number(match.groups.groupIndex),\n };\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param id - Multichain account ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n * @throws When the group ID format is invalid.\n */\nexport function getGroupIndexFromMultichainAccountGroupId(\n id: MultichainAccountGroupId,\n): number {\n return parseMultichainAccountGroupId(id).groupIndex;\n}\n"]}
|
|
@@ -2,10 +2,26 @@ import { type KeyringAccount } from "@metamask/keyring-api";
|
|
|
2
2
|
import type { MultichainAccountWallet, MultichainAccountWalletId } from "./wallet.cjs";
|
|
3
3
|
import type { Bip44Account } from "../bip44.cjs";
|
|
4
4
|
import type { AccountGroup, AccountGroupType } from "../group.cjs";
|
|
5
|
+
import type { AccountWalletType } from "../wallet.cjs";
|
|
5
6
|
/**
|
|
6
7
|
* Multichain account ID.
|
|
7
8
|
*/
|
|
8
9
|
export type MultichainAccountGroupId = `${MultichainAccountWalletId}/${number}`;
|
|
10
|
+
/**
|
|
11
|
+
* Regex to validate a valid multichain account group ID.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MULTICHAIN_ACCOUNT_GROUP_ID_REGEX: RegExp;
|
|
14
|
+
/**
|
|
15
|
+
* Parsed account group ID with its parsed wallet component and its sub-ID.
|
|
16
|
+
*/
|
|
17
|
+
export type ParsedMultichainAccountGroupId = {
|
|
18
|
+
wallet: {
|
|
19
|
+
id: MultichainAccountWalletId;
|
|
20
|
+
type: AccountWalletType.Entropy;
|
|
21
|
+
subId: string;
|
|
22
|
+
};
|
|
23
|
+
groupIndex: number;
|
|
24
|
+
};
|
|
9
25
|
/**
|
|
10
26
|
* A multichain account that holds multiple accounts.
|
|
11
27
|
*/
|
|
@@ -42,11 +58,22 @@ export declare function toMultichainAccountGroupId(walletId: MultichainAccountWa
|
|
|
42
58
|
* @returns Whether the value is a {@link MultichainAccountGroupId}.
|
|
43
59
|
*/
|
|
44
60
|
export declare function isMultichainAccountGroupId(value: string): value is MultichainAccountGroupId;
|
|
61
|
+
/**
|
|
62
|
+
* Parse a multichain account group ID to an object containing a multichain
|
|
63
|
+
* wallet ID information (wallet type and wallet sub-ID), as well as
|
|
64
|
+
* multichain account group ID information (group index).
|
|
65
|
+
*
|
|
66
|
+
* @param groupId - The multichain account group ID to validate and parse.
|
|
67
|
+
* @returns The parsed multichain account group ID.
|
|
68
|
+
* @throws When the group ID format is invalid.
|
|
69
|
+
*/
|
|
70
|
+
export declare function parseMultichainAccountGroupId(groupId: string): ParsedMultichainAccountGroupId;
|
|
45
71
|
/**
|
|
46
72
|
* Gets the multichain account index from an account group ID.
|
|
47
73
|
*
|
|
48
74
|
* @param id - Multichain account ID.
|
|
49
75
|
* @returns The multichain account index if extractable, undefined otherwise.
|
|
76
|
+
* @throws When the group ID format is invalid.
|
|
50
77
|
*/
|
|
51
78
|
export declare function getGroupIndexFromMultichainAccountGroupId(id: MultichainAccountGroupId): number;
|
|
52
79
|
//# sourceMappingURL=group.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAE5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAiB;
|
|
1
|
+
{"version":3,"file":"group.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAE5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAiB;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAkB;AAEnD;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,iCAAiC,QACsC,CAAC;AAErF;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE;QACN,EAAE,EAAE,yBAAyB,CAAC;QAC9B,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAChC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,IAC1C,YAAY,CAAC,OAAO,CAAC,GAAG;IAC1B;;OAEG;IACH,IAAI,EAAE,IAAI,wBAAwB,CAAC;IAEnC;;OAEG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC,iBAAiB,CAAC;IAE/C;;OAEG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,wBAAwB,CAE1B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,wBAAwB,CAEnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,GACd,8BAA8B,CAkBhC;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,EAAE,EAAE,wBAAwB,GAC3B,MAAM,CAER"}
|
|
@@ -2,10 +2,26 @@ import { type KeyringAccount } from "@metamask/keyring-api";
|
|
|
2
2
|
import type { MultichainAccountWallet, MultichainAccountWalletId } from "./wallet.mjs";
|
|
3
3
|
import type { Bip44Account } from "../bip44.mjs";
|
|
4
4
|
import type { AccountGroup, AccountGroupType } from "../group.mjs";
|
|
5
|
+
import type { AccountWalletType } from "../wallet.mjs";
|
|
5
6
|
/**
|
|
6
7
|
* Multichain account ID.
|
|
7
8
|
*/
|
|
8
9
|
export type MultichainAccountGroupId = `${MultichainAccountWalletId}/${number}`;
|
|
10
|
+
/**
|
|
11
|
+
* Regex to validate a valid multichain account group ID.
|
|
12
|
+
*/
|
|
13
|
+
export declare const MULTICHAIN_ACCOUNT_GROUP_ID_REGEX: RegExp;
|
|
14
|
+
/**
|
|
15
|
+
* Parsed account group ID with its parsed wallet component and its sub-ID.
|
|
16
|
+
*/
|
|
17
|
+
export type ParsedMultichainAccountGroupId = {
|
|
18
|
+
wallet: {
|
|
19
|
+
id: MultichainAccountWalletId;
|
|
20
|
+
type: AccountWalletType.Entropy;
|
|
21
|
+
subId: string;
|
|
22
|
+
};
|
|
23
|
+
groupIndex: number;
|
|
24
|
+
};
|
|
9
25
|
/**
|
|
10
26
|
* A multichain account that holds multiple accounts.
|
|
11
27
|
*/
|
|
@@ -42,11 +58,22 @@ export declare function toMultichainAccountGroupId(walletId: MultichainAccountWa
|
|
|
42
58
|
* @returns Whether the value is a {@link MultichainAccountGroupId}.
|
|
43
59
|
*/
|
|
44
60
|
export declare function isMultichainAccountGroupId(value: string): value is MultichainAccountGroupId;
|
|
61
|
+
/**
|
|
62
|
+
* Parse a multichain account group ID to an object containing a multichain
|
|
63
|
+
* wallet ID information (wallet type and wallet sub-ID), as well as
|
|
64
|
+
* multichain account group ID information (group index).
|
|
65
|
+
*
|
|
66
|
+
* @param groupId - The multichain account group ID to validate and parse.
|
|
67
|
+
* @returns The parsed multichain account group ID.
|
|
68
|
+
* @throws When the group ID format is invalid.
|
|
69
|
+
*/
|
|
70
|
+
export declare function parseMultichainAccountGroupId(groupId: string): ParsedMultichainAccountGroupId;
|
|
45
71
|
/**
|
|
46
72
|
* Gets the multichain account index from an account group ID.
|
|
47
73
|
*
|
|
48
74
|
* @param id - Multichain account ID.
|
|
49
75
|
* @returns The multichain account index if extractable, undefined otherwise.
|
|
76
|
+
* @throws When the group ID format is invalid.
|
|
50
77
|
*/
|
|
51
78
|
export declare function getGroupIndexFromMultichainAccountGroupId(id: MultichainAccountGroupId): number;
|
|
52
79
|
//# sourceMappingURL=group.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAE5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAiB;
|
|
1
|
+
{"version":3,"file":"group.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAE5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,qBAAiB;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAkB;AAEnD;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,iCAAiC,QACsC,CAAC;AAErF;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE;QACN,EAAE,EAAE,yBAAyB,CAAC;QAC9B,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAChC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,IAC1C,YAAY,CAAC,OAAO,CAAC,GAAG;IAC1B;;OAEG;IACH,IAAI,EAAE,IAAI,wBAAwB,CAAC;IAEnC;;OAEG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC,iBAAiB,CAAC;IAE/C;;OAEG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAE/C;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,wBAAwB,CAE1B;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,wBAAwB,CAEnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,GACd,8BAA8B,CAkBhC;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,EAAE,EAAE,wBAAwB,GAC3B,MAAM,CAER"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Regex to validate a valid multichain account group ID.
|
|
3
|
+
*/
|
|
4
|
+
export const MULTICHAIN_ACCOUNT_GROUP_ID_REGEX = /^(?<walletId>(?<walletType>entropy):(?<walletSubId>.+))\/(?<groupIndex>[0-9]+)$/u;
|
|
3
5
|
/**
|
|
4
6
|
* Gets the multichain account group ID from its multichain account wallet ID and its index.
|
|
5
7
|
*
|
|
@@ -19,19 +21,40 @@ export function toMultichainAccountGroupId(walletId, groupIndex) {
|
|
|
19
21
|
export function isMultichainAccountGroupId(value) {
|
|
20
22
|
return MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.test(value);
|
|
21
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse a multichain account group ID to an object containing a multichain
|
|
26
|
+
* wallet ID information (wallet type and wallet sub-ID), as well as
|
|
27
|
+
* multichain account group ID information (group index).
|
|
28
|
+
*
|
|
29
|
+
* @param groupId - The multichain account group ID to validate and parse.
|
|
30
|
+
* @returns The parsed multichain account group ID.
|
|
31
|
+
* @throws When the group ID format is invalid.
|
|
32
|
+
*/
|
|
33
|
+
export function parseMultichainAccountGroupId(groupId) {
|
|
34
|
+
const match = MULTICHAIN_ACCOUNT_GROUP_ID_REGEX.exec(groupId);
|
|
35
|
+
if (!match?.groups) {
|
|
36
|
+
throw new Error(`Invalid multichain account group ID: "${groupId}"`);
|
|
37
|
+
}
|
|
38
|
+
const walletId = match.groups.walletId;
|
|
39
|
+
const walletType = match.groups.walletType;
|
|
40
|
+
const walletSubId = match.groups.walletSubId;
|
|
41
|
+
return {
|
|
42
|
+
wallet: {
|
|
43
|
+
id: walletId,
|
|
44
|
+
type: walletType,
|
|
45
|
+
subId: walletSubId,
|
|
46
|
+
},
|
|
47
|
+
groupIndex: Number(match.groups.groupIndex),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
22
50
|
/**
|
|
23
51
|
* Gets the multichain account index from an account group ID.
|
|
24
52
|
*
|
|
25
53
|
* @param id - Multichain account ID.
|
|
26
54
|
* @returns The multichain account index if extractable, undefined otherwise.
|
|
55
|
+
* @throws When the group ID format is invalid.
|
|
27
56
|
*/
|
|
28
57
|
export function getGroupIndexFromMultichainAccountGroupId(id) {
|
|
29
|
-
|
|
30
|
-
if (matched?.groups?.groupIndex === undefined) {
|
|
31
|
-
// Unable to extract group index, even though, type wise, this should not
|
|
32
|
-
// be possible!
|
|
33
|
-
throw new Error('Unable to extract group index');
|
|
34
|
-
}
|
|
35
|
-
return Number(matched.groups.groupIndex);
|
|
58
|
+
return parseMultichainAccountGroupId(id).groupIndex;
|
|
36
59
|
}
|
|
37
60
|
//# sourceMappingURL=group.mjs.map
|