@metamask/snaps-utils 12.1.3 → 12.2.0

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 (46) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/dist/caveats.cjs +4 -0
  3. package/dist/caveats.cjs.map +1 -1
  4. package/dist/caveats.d.cts +4 -0
  5. package/dist/caveats.d.cts.map +1 -1
  6. package/dist/caveats.d.mts +4 -0
  7. package/dist/caveats.d.mts.map +1 -1
  8. package/dist/caveats.mjs +4 -0
  9. package/dist/caveats.mjs.map +1 -1
  10. package/dist/handlers/home-page.d.cts +3 -3
  11. package/dist/handlers/home-page.d.mts +3 -3
  12. package/dist/handlers/settings-page.d.cts +1 -1
  13. package/dist/handlers/settings-page.d.mts +1 -1
  14. package/dist/handlers/signature.d.cts +1 -1
  15. package/dist/handlers/signature.d.mts +1 -1
  16. package/dist/handlers/transaction.d.cts +3 -3
  17. package/dist/handlers/transaction.d.mts +3 -3
  18. package/dist/index.cjs +1 -0
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.cts +1 -0
  21. package/dist/index.d.cts.map +1 -1
  22. package/dist/index.d.mts +1 -0
  23. package/dist/index.d.mts.map +1 -1
  24. package/dist/index.mjs +1 -0
  25. package/dist/index.mjs.map +1 -1
  26. package/dist/keyring.cjs +73 -0
  27. package/dist/keyring.cjs.map +1 -0
  28. package/dist/keyring.d.cts +119 -0
  29. package/dist/keyring.d.cts.map +1 -0
  30. package/dist/keyring.d.mts +119 -0
  31. package/dist/keyring.d.mts.map +1 -0
  32. package/dist/keyring.mjs +69 -0
  33. package/dist/keyring.mjs.map +1 -0
  34. package/dist/localization.d.cts +21 -0
  35. package/dist/localization.d.cts.map +1 -1
  36. package/dist/localization.d.mts +21 -0
  37. package/dist/localization.d.mts.map +1 -1
  38. package/dist/manifest/validation.cjs +2 -1
  39. package/dist/manifest/validation.cjs.map +1 -1
  40. package/dist/manifest/validation.d.cts +42 -0
  41. package/dist/manifest/validation.d.cts.map +1 -1
  42. package/dist/manifest/validation.d.mts +42 -0
  43. package/dist/manifest/validation.d.mts.map +1 -1
  44. package/dist/manifest/validation.mjs +2 -1
  45. package/dist/manifest/validation.mjs.map +1 -1
  46. package/package.json +4 -4
@@ -0,0 +1,119 @@
1
+ import type { Infer } from "@metamask/superstruct";
2
+ import type { AssertionErrorConstructor } from "@metamask/utils";
3
+ export declare const KeyringCapabilitiesStruct: import("@metamask/superstruct").Struct<{
4
+ capabilities?: {
5
+ scopes: `${string}:${string}`[];
6
+ bip44?: {
7
+ derivePath?: boolean | undefined;
8
+ deriveIndex?: boolean | undefined;
9
+ deriveIndexRange?: boolean | undefined;
10
+ discover?: boolean | undefined;
11
+ } | undefined;
12
+ privateKey?: {
13
+ importFormats?: {
14
+ encoding: "hexadecimal" | "base58";
15
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
16
+ }[] | undefined;
17
+ exportFormats?: {
18
+ encoding: "hexadecimal" | "base58";
19
+ }[] | undefined;
20
+ } | undefined;
21
+ custom?: {
22
+ createAccounts?: boolean | undefined;
23
+ } | undefined;
24
+ } | undefined;
25
+ }, {
26
+ capabilities: import("@metamask/superstruct").Struct<{
27
+ scopes: `${string}:${string}`[];
28
+ bip44?: {
29
+ derivePath?: boolean | undefined;
30
+ deriveIndex?: boolean | undefined;
31
+ deriveIndexRange?: boolean | undefined;
32
+ discover?: boolean | undefined;
33
+ } | undefined;
34
+ privateKey?: {
35
+ importFormats?: {
36
+ encoding: "hexadecimal" | "base58";
37
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
38
+ }[] | undefined;
39
+ exportFormats?: {
40
+ encoding: "hexadecimal" | "base58";
41
+ }[] | undefined;
42
+ } | undefined;
43
+ custom?: {
44
+ createAccounts?: boolean | undefined;
45
+ } | undefined;
46
+ } | undefined, {
47
+ scopes: import("@metamask/superstruct").Struct<`${string}:${string}`[], import("@metamask/superstruct").Struct<`${string}:${string}`, null>>;
48
+ bip44: import("@metamask/superstruct").Struct<{
49
+ derivePath?: boolean | undefined;
50
+ deriveIndex?: boolean | undefined;
51
+ deriveIndexRange?: boolean | undefined;
52
+ discover?: boolean | undefined;
53
+ } | undefined, {
54
+ derivePath: import("@metamask/superstruct").Struct<boolean | undefined, null>;
55
+ deriveIndex: import("@metamask/superstruct").Struct<boolean | undefined, null>;
56
+ deriveIndexRange: import("@metamask/superstruct").Struct<boolean | undefined, null>;
57
+ discover: import("@metamask/superstruct").Struct<boolean | undefined, null>;
58
+ }>;
59
+ privateKey: import("@metamask/superstruct").Struct<{
60
+ importFormats?: {
61
+ encoding: "hexadecimal" | "base58";
62
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
63
+ }[] | undefined;
64
+ exportFormats?: {
65
+ encoding: "hexadecimal" | "base58";
66
+ }[] | undefined;
67
+ } | undefined, {
68
+ importFormats: import("@metamask/superstruct").Struct<{
69
+ encoding: "hexadecimal" | "base58";
70
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
71
+ }[] | undefined, import("@metamask/superstruct").Struct<{
72
+ encoding: "hexadecimal" | "base58";
73
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
74
+ }, {
75
+ encoding: import("@metamask/superstruct").Struct<"hexadecimal" | "base58", {
76
+ hexadecimal: "hexadecimal";
77
+ base58: "base58";
78
+ }>;
79
+ type: import("@metamask/superstruct").Struct<"eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined, {
80
+ "eip155:eoa": "eip155:eoa";
81
+ "eip155:erc4337": "eip155:erc4337";
82
+ "bip122:p2pkh": "bip122:p2pkh";
83
+ "bip122:p2sh": "bip122:p2sh";
84
+ "bip122:p2wpkh": "bip122:p2wpkh";
85
+ "bip122:p2tr": "bip122:p2tr";
86
+ "solana:data-account": "solana:data-account";
87
+ "tron:eoa": "tron:eoa";
88
+ "entropy:account": "entropy:account";
89
+ }>;
90
+ }>>;
91
+ exportFormats: import("@metamask/superstruct").Struct<{
92
+ encoding: "hexadecimal" | "base58";
93
+ }[] | undefined, import("@metamask/superstruct").Struct<{
94
+ encoding: "hexadecimal" | "base58";
95
+ }, {
96
+ encoding: import("@metamask/superstruct").Struct<"hexadecimal" | "base58", {
97
+ hexadecimal: "hexadecimal";
98
+ base58: "base58";
99
+ }>;
100
+ }>>;
101
+ }>;
102
+ custom: import("@metamask/superstruct").Struct<{
103
+ createAccounts?: boolean | undefined;
104
+ } | undefined, {
105
+ createAccounts: import("@metamask/superstruct").Struct<boolean | undefined, null>;
106
+ }>;
107
+ }>;
108
+ }>;
109
+ export type KeyringCapabilities = Infer<typeof KeyringCapabilitiesStruct>;
110
+ /**
111
+ * Assert that the given value is a valid {@link KeyringCapabilities} object.
112
+ *
113
+ * @param value - The value to assert.
114
+ * @param ErrorWrapper - An optional error wrapper to use. Defaults to
115
+ * {@link AssertionError}.
116
+ * @throws If the value is not a valid {@link KeyringCapabilities} object.
117
+ */
118
+ export declare function assertIsKeyringCapabilities(value: unknown, ErrorWrapper?: AssertionErrorConstructor): asserts value is KeyringCapabilities;
119
+ //# sourceMappingURL=keyring.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.d.cts","sourceRoot":"","sources":["../src/keyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AASnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB;AAsEjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAOtC"}
@@ -0,0 +1,119 @@
1
+ import type { Infer } from "@metamask/superstruct";
2
+ import type { AssertionErrorConstructor } from "@metamask/utils";
3
+ export declare const KeyringCapabilitiesStruct: import("@metamask/superstruct").Struct<{
4
+ capabilities?: {
5
+ scopes: `${string}:${string}`[];
6
+ bip44?: {
7
+ derivePath?: boolean | undefined;
8
+ deriveIndex?: boolean | undefined;
9
+ deriveIndexRange?: boolean | undefined;
10
+ discover?: boolean | undefined;
11
+ } | undefined;
12
+ privateKey?: {
13
+ importFormats?: {
14
+ encoding: "hexadecimal" | "base58";
15
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
16
+ }[] | undefined;
17
+ exportFormats?: {
18
+ encoding: "hexadecimal" | "base58";
19
+ }[] | undefined;
20
+ } | undefined;
21
+ custom?: {
22
+ createAccounts?: boolean | undefined;
23
+ } | undefined;
24
+ } | undefined;
25
+ }, {
26
+ capabilities: import("@metamask/superstruct").Struct<{
27
+ scopes: `${string}:${string}`[];
28
+ bip44?: {
29
+ derivePath?: boolean | undefined;
30
+ deriveIndex?: boolean | undefined;
31
+ deriveIndexRange?: boolean | undefined;
32
+ discover?: boolean | undefined;
33
+ } | undefined;
34
+ privateKey?: {
35
+ importFormats?: {
36
+ encoding: "hexadecimal" | "base58";
37
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
38
+ }[] | undefined;
39
+ exportFormats?: {
40
+ encoding: "hexadecimal" | "base58";
41
+ }[] | undefined;
42
+ } | undefined;
43
+ custom?: {
44
+ createAccounts?: boolean | undefined;
45
+ } | undefined;
46
+ } | undefined, {
47
+ scopes: import("@metamask/superstruct").Struct<`${string}:${string}`[], import("@metamask/superstruct").Struct<`${string}:${string}`, null>>;
48
+ bip44: import("@metamask/superstruct").Struct<{
49
+ derivePath?: boolean | undefined;
50
+ deriveIndex?: boolean | undefined;
51
+ deriveIndexRange?: boolean | undefined;
52
+ discover?: boolean | undefined;
53
+ } | undefined, {
54
+ derivePath: import("@metamask/superstruct").Struct<boolean | undefined, null>;
55
+ deriveIndex: import("@metamask/superstruct").Struct<boolean | undefined, null>;
56
+ deriveIndexRange: import("@metamask/superstruct").Struct<boolean | undefined, null>;
57
+ discover: import("@metamask/superstruct").Struct<boolean | undefined, null>;
58
+ }>;
59
+ privateKey: import("@metamask/superstruct").Struct<{
60
+ importFormats?: {
61
+ encoding: "hexadecimal" | "base58";
62
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
63
+ }[] | undefined;
64
+ exportFormats?: {
65
+ encoding: "hexadecimal" | "base58";
66
+ }[] | undefined;
67
+ } | undefined, {
68
+ importFormats: import("@metamask/superstruct").Struct<{
69
+ encoding: "hexadecimal" | "base58";
70
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
71
+ }[] | undefined, import("@metamask/superstruct").Struct<{
72
+ encoding: "hexadecimal" | "base58";
73
+ type?: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined;
74
+ }, {
75
+ encoding: import("@metamask/superstruct").Struct<"hexadecimal" | "base58", {
76
+ hexadecimal: "hexadecimal";
77
+ base58: "base58";
78
+ }>;
79
+ type: import("@metamask/superstruct").Struct<"eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account" | undefined, {
80
+ "eip155:eoa": "eip155:eoa";
81
+ "eip155:erc4337": "eip155:erc4337";
82
+ "bip122:p2pkh": "bip122:p2pkh";
83
+ "bip122:p2sh": "bip122:p2sh";
84
+ "bip122:p2wpkh": "bip122:p2wpkh";
85
+ "bip122:p2tr": "bip122:p2tr";
86
+ "solana:data-account": "solana:data-account";
87
+ "tron:eoa": "tron:eoa";
88
+ "entropy:account": "entropy:account";
89
+ }>;
90
+ }>>;
91
+ exportFormats: import("@metamask/superstruct").Struct<{
92
+ encoding: "hexadecimal" | "base58";
93
+ }[] | undefined, import("@metamask/superstruct").Struct<{
94
+ encoding: "hexadecimal" | "base58";
95
+ }, {
96
+ encoding: import("@metamask/superstruct").Struct<"hexadecimal" | "base58", {
97
+ hexadecimal: "hexadecimal";
98
+ base58: "base58";
99
+ }>;
100
+ }>>;
101
+ }>;
102
+ custom: import("@metamask/superstruct").Struct<{
103
+ createAccounts?: boolean | undefined;
104
+ } | undefined, {
105
+ createAccounts: import("@metamask/superstruct").Struct<boolean | undefined, null>;
106
+ }>;
107
+ }>;
108
+ }>;
109
+ export type KeyringCapabilities = Infer<typeof KeyringCapabilitiesStruct>;
110
+ /**
111
+ * Assert that the given value is a valid {@link KeyringCapabilities} object.
112
+ *
113
+ * @param value - The value to assert.
114
+ * @param ErrorWrapper - An optional error wrapper to use. Defaults to
115
+ * {@link AssertionError}.
116
+ * @throws If the value is not a valid {@link KeyringCapabilities} object.
117
+ */
118
+ export declare function assertIsKeyringCapabilities(value: unknown, ErrorWrapper?: AssertionErrorConstructor): asserts value is KeyringCapabilities;
119
+ //# sourceMappingURL=keyring.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.d.mts","sourceRoot":"","sources":["../src/keyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AASnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB;AAsEjE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE1E;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,yBAAyB,GACvC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAOtC"}
@@ -0,0 +1,69 @@
1
+ import { array, boolean, enums, nonempty, object, optional } from "@metamask/superstruct";
2
+ import { assertStruct, CaipChainIdStruct } from "@metamask/utils";
3
+ /**
4
+ * Supported encoding formats for private keys.
5
+ *
6
+ * Mirrors `PrivateKeyEncoding` from `@metamask/keyring-api` to avoid pulling
7
+ * in that package's Node.js-only transitive dependencies into browser bundles.
8
+ */
9
+ const PrivateKeyEncodingStruct = enums(['hexadecimal', 'base58']);
10
+ /**
11
+ * Supported account types for keyring accounts.
12
+ *
13
+ * Mirrors `KeyringAccountTypeStruct` from `@metamask/keyring-api`.
14
+ */
15
+ const KeyringAccountTypeStruct = enums([
16
+ 'eip155:eoa',
17
+ 'eip155:erc4337',
18
+ 'bip122:p2pkh',
19
+ 'bip122:p2sh',
20
+ 'bip122:p2wpkh',
21
+ 'bip122:p2tr',
22
+ 'solana:data-account',
23
+ 'tron:eoa',
24
+ 'entropy:account',
25
+ ]);
26
+ /**
27
+ * Struct for the capabilities object supported by a keyring Snap.
28
+ *
29
+ * Mirrors `KeyringCapabilitiesStruct` from `@metamask/keyring-api` to avoid
30
+ * pulling in that package's Node.js-only transitive dependencies into browser
31
+ * bundles (via `@ethereumjs/util` → `micro-ftch`). Uses `optional` rather than
32
+ * `exactOptional` to remain compatible with `Describe<InitialPermissions>`.
33
+ *
34
+ * Keep in sync with `KeyringCapabilitiesStruct` in `@metamask/keyring-api`.
35
+ */
36
+ const CapabilitiesStruct = object({
37
+ scopes: nonempty(array(CaipChainIdStruct)),
38
+ bip44: optional(object({
39
+ derivePath: optional(boolean()),
40
+ deriveIndex: optional(boolean()),
41
+ deriveIndexRange: optional(boolean()),
42
+ discover: optional(boolean()),
43
+ })),
44
+ privateKey: optional(object({
45
+ importFormats: optional(array(object({
46
+ encoding: PrivateKeyEncodingStruct,
47
+ type: optional(KeyringAccountTypeStruct),
48
+ }))),
49
+ exportFormats: optional(array(object({ encoding: PrivateKeyEncodingStruct }))),
50
+ })),
51
+ custom: optional(object({
52
+ createAccounts: optional(boolean()),
53
+ })),
54
+ });
55
+ export const KeyringCapabilitiesStruct = object({
56
+ capabilities: optional(CapabilitiesStruct),
57
+ });
58
+ /**
59
+ * Assert that the given value is a valid {@link KeyringCapabilities} object.
60
+ *
61
+ * @param value - The value to assert.
62
+ * @param ErrorWrapper - An optional error wrapper to use. Defaults to
63
+ * {@link AssertionError}.
64
+ * @throws If the value is not a valid {@link KeyringCapabilities} object.
65
+ */
66
+ export function assertIsKeyringCapabilities(value, ErrorWrapper) {
67
+ assertStruct(value, KeyringCapabilitiesStruct, 'Invalid keyring capabilities', ErrorWrapper);
68
+ }
69
+ //# sourceMappingURL=keyring.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.mjs","sourceRoot":"","sources":["../src/keyring.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACT,8BAA8B;AAE/B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,wBAAwB;AAElE;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,KAAK,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElE;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,KAAK,CAAC;IACrC,YAAY;IACZ,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,eAAe;IACf,aAAa;IACb,qBAAqB;IACrB,UAAU;IACV,iBAAiB;CAClB,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC;IAChC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,KAAK,EAAE,QAAQ,CACb,MAAM,CAAC;QACL,UAAU,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC/B,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,gBAAgB,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;KAC9B,CAAC,CACH;IACD,UAAU,EAAE,QAAQ,CAClB,MAAM,CAAC;QACL,aAAa,EAAE,QAAQ,CACrB,KAAK,CACH,MAAM,CAAC;YACL,QAAQ,EAAE,wBAAwB;YAClC,IAAI,EAAE,QAAQ,CAAC,wBAAwB,CAAC;SACzC,CAAC,CACH,CACF;QACD,aAAa,EAAE,QAAQ,CACrB,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,CAAC,CACtD;KACF,CAAC,CACH;IACD,MAAM,EAAE,QAAQ,CACd,MAAM,CAAC;QACL,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;KACpC,CAAC,CACH;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;IAC9C,YAAY,EAAE,QAAQ,CAAC,kBAAkB,CAAC;CAC3C,CAAC,CAAC;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAc,EACd,YAAwC;IAExC,YAAY,CACV,KAAK,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,YAAY,CACb,CAAC;AACJ,CAAC","sourcesContent":["import type { Infer } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n enums,\n nonempty,\n object,\n optional,\n} from '@metamask/superstruct';\nimport type { AssertionErrorConstructor } from '@metamask/utils';\nimport { assertStruct, CaipChainIdStruct } from '@metamask/utils';\n\n/**\n * Supported encoding formats for private keys.\n *\n * Mirrors `PrivateKeyEncoding` from `@metamask/keyring-api` to avoid pulling\n * in that package's Node.js-only transitive dependencies into browser bundles.\n */\nconst PrivateKeyEncodingStruct = enums(['hexadecimal', 'base58']);\n\n/**\n * Supported account types for keyring accounts.\n *\n * Mirrors `KeyringAccountTypeStruct` from `@metamask/keyring-api`.\n */\nconst KeyringAccountTypeStruct = enums([\n 'eip155:eoa',\n 'eip155:erc4337',\n 'bip122:p2pkh',\n 'bip122:p2sh',\n 'bip122:p2wpkh',\n 'bip122:p2tr',\n 'solana:data-account',\n 'tron:eoa',\n 'entropy:account',\n]);\n\n/**\n * Struct for the capabilities object supported by a keyring Snap.\n *\n * Mirrors `KeyringCapabilitiesStruct` from `@metamask/keyring-api` to avoid\n * pulling in that package's Node.js-only transitive dependencies into browser\n * bundles (via `@ethereumjs/util` → `micro-ftch`). Uses `optional` rather than\n * `exactOptional` to remain compatible with `Describe<InitialPermissions>`.\n *\n * Keep in sync with `KeyringCapabilitiesStruct` in `@metamask/keyring-api`.\n */\nconst CapabilitiesStruct = object({\n scopes: nonempty(array(CaipChainIdStruct)),\n bip44: optional(\n object({\n derivePath: optional(boolean()),\n deriveIndex: optional(boolean()),\n deriveIndexRange: optional(boolean()),\n discover: optional(boolean()),\n }),\n ),\n privateKey: optional(\n object({\n importFormats: optional(\n array(\n object({\n encoding: PrivateKeyEncodingStruct,\n type: optional(KeyringAccountTypeStruct),\n }),\n ),\n ),\n exportFormats: optional(\n array(object({ encoding: PrivateKeyEncodingStruct })),\n ),\n }),\n ),\n custom: optional(\n object({\n createAccounts: optional(boolean()),\n }),\n ),\n});\n\nexport const KeyringCapabilitiesStruct = object({\n capabilities: optional(CapabilitiesStruct),\n});\n\nexport type KeyringCapabilities = Infer<typeof KeyringCapabilitiesStruct>;\n\n/**\n * Assert that the given value is a valid {@link KeyringCapabilities} object.\n *\n * @param value - The value to assert.\n * @param ErrorWrapper - An optional error wrapper to use. Defaults to\n * {@link AssertionError}.\n * @throws If the value is not a valid {@link KeyringCapabilities} object.\n */\nexport function assertIsKeyringCapabilities(\n value: unknown,\n ErrorWrapper?: AssertionErrorConstructor,\n): asserts value is KeyringCapabilities {\n assertStruct(\n value,\n KeyringCapabilitiesStruct,\n 'Invalid keyring capabilities',\n ErrorWrapper,\n );\n}\n"]}
@@ -87,6 +87,27 @@ export declare function getLocalizedSnapManifest(snapManifest: SnapManifest, loc
87
87
  'endowment:ethereum-provider': import("@metamask/snaps-sdk").EmptyObject;
88
88
  'endowment:keyring': {
89
89
  allowedOrigins?: string[] | undefined;
90
+ capabilities?: {
91
+ scopes: `${string}:${string}`[];
92
+ bip44?: {
93
+ derivePath?: boolean | undefined;
94
+ deriveIndex?: boolean | undefined;
95
+ deriveIndexRange?: boolean | undefined;
96
+ discover?: boolean | undefined;
97
+ } | undefined;
98
+ privateKey?: {
99
+ importFormats?: {
100
+ encoding: "hexadecimal" | "base58";
101
+ type?: ("eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account") | undefined;
102
+ }[] | undefined;
103
+ exportFormats?: {
104
+ encoding: "hexadecimal" | "base58";
105
+ }[] | undefined;
106
+ } | undefined;
107
+ custom?: {
108
+ createAccounts?: boolean | undefined;
109
+ } | undefined;
110
+ } | undefined;
90
111
  maxRequestTime?: number | undefined;
91
112
  };
92
113
  'endowment:lifecycle-hooks'?: {
@@ -1 +1 @@
1
- {"version":3,"file":"localization.d.cts","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AAWnD,OAAO,KAAK,EAAE,YAAY,EAAE,6BAAmB;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,iCAAuB;AAElD,eAAO,MAAM,kBAAkB,0CAA2C,CAAC;AAE3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,WAAW,EAAE,GAC/B,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAsBjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;cAatC;AAED,eAAO,MAAM,iBAAiB,QAAuC,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,UAsB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtC;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,gBAAgB,EAAE,QAkBtC"}
1
+ {"version":3,"file":"localization.d.cts","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AAWnD,OAAO,KAAK,EAAE,YAAY,EAAE,6BAAmB;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,iCAAuB;AAElD,eAAO,MAAM,kBAAkB,0CAA2C,CAAC;AAE3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,WAAW,EAAE,GAC/B,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAsBjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;cAatC;AAED,eAAO,MAAM,iBAAiB,QAAuC,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,UAsB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtC;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,gBAAgB,EAAE,QAkBtC"}
@@ -87,6 +87,27 @@ export declare function getLocalizedSnapManifest(snapManifest: SnapManifest, loc
87
87
  'endowment:ethereum-provider': import("@metamask/snaps-sdk").EmptyObject;
88
88
  'endowment:keyring': {
89
89
  allowedOrigins?: string[] | undefined;
90
+ capabilities?: {
91
+ scopes: `${string}:${string}`[];
92
+ bip44?: {
93
+ derivePath?: boolean | undefined;
94
+ deriveIndex?: boolean | undefined;
95
+ deriveIndexRange?: boolean | undefined;
96
+ discover?: boolean | undefined;
97
+ } | undefined;
98
+ privateKey?: {
99
+ importFormats?: {
100
+ encoding: "hexadecimal" | "base58";
101
+ type?: ("eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account") | undefined;
102
+ }[] | undefined;
103
+ exportFormats?: {
104
+ encoding: "hexadecimal" | "base58";
105
+ }[] | undefined;
106
+ } | undefined;
107
+ custom?: {
108
+ createAccounts?: boolean | undefined;
109
+ } | undefined;
110
+ } | undefined;
90
111
  maxRequestTime?: number | undefined;
91
112
  };
92
113
  'endowment:lifecycle-hooks'?: {
@@ -1 +1 @@
1
- {"version":3,"file":"localization.d.mts","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AAWnD,OAAO,KAAK,EAAE,YAAY,EAAE,6BAAmB;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,iCAAuB;AAElD,eAAO,MAAM,kBAAkB,0CAA2C,CAAC;AAE3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,WAAW,EAAE,GAC/B,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAsBjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;cAatC;AAED,eAAO,MAAM,iBAAiB,QAAuC,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,UAsB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtC;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,gBAAgB,EAAE,QAkBtC"}
1
+ {"version":3,"file":"localization.d.mts","sourceRoot":"","sources":["../src/localization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,8BAA8B;AAWnD,OAAO,KAAK,EAAE,YAAY,EAAE,6BAAmB;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,iCAAuB;AAElD,eAAO,MAAM,kBAAkB,0CAA2C,CAAC;AAE3E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEpE;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,iBAAiB,EAAE,WAAW,EAAE,GAC/B,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAsBjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;cAatC;AAED,eAAO,MAAM,iBAAiB,QAAuC,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,UAsB1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,gBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWtC;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,gBAAgB,EAAE,QAkBtC"}
@@ -8,6 +8,7 @@ const array_1 = require("../array.cjs");
8
8
  const cronjob_1 = require("../cronjob.cjs");
9
9
  const entropy_1 = require("../entropy.cjs");
10
10
  const json_rpc_1 = require("../json-rpc.cjs");
11
+ const keyring_1 = require("../keyring.cjs");
11
12
  const snaps_1 = require("../snaps.cjs");
12
13
  const structs_1 = require("../structs.cjs");
13
14
  const types_1 = require("../types.cjs");
@@ -99,7 +100,7 @@ exports.PermissionsStruct = (0, superstruct_1.type)({
99
100
  'endowment:assets': (0, superstruct_1.optional)((0, structs_1.mergeStructs)(exports.HandlerCaveatsStruct, (0, superstruct_1.object)({ scopes: exports.ChainIdsStruct }))),
100
101
  'endowment:cronjob': (0, superstruct_1.optional)((0, structs_1.mergeStructs)(exports.HandlerCaveatsStruct, (0, superstruct_1.object)({ jobs: (0, superstruct_1.optional)(cronjob_1.CronjobSpecificationArrayStruct) }))),
101
102
  'endowment:ethereum-provider': (0, superstruct_1.optional)(exports.EmptyObjectStruct),
102
- 'endowment:keyring': (0, superstruct_1.optional)((0, structs_1.mergeStructs)(exports.HandlerCaveatsStruct, json_rpc_1.KeyringOriginsStruct)),
103
+ 'endowment:keyring': (0, superstruct_1.optional)((0, structs_1.mergeStructs)(exports.HandlerCaveatsStruct, json_rpc_1.KeyringOriginsStruct, keyring_1.KeyringCapabilitiesStruct)),
103
104
  'endowment:protocol': (0, superstruct_1.optional)((0, structs_1.mergeStructs)(exports.HandlerCaveatsStruct, (0, superstruct_1.object)({ scopes: exports.ProtocolScopesStruct }))),
104
105
  'endowment:lifecycle-hooks': (0, superstruct_1.optional)(exports.HandlerCaveatsStruct),
105
106
  'endowment:name-lookup': (0, superstruct_1.optional)((0, structs_1.mergeStructs)(exports.HandlerCaveatsStruct, (0, superstruct_1.object)({
@@ -1 +1 @@
1
- {"version":3,"file":"validation.cjs","sourceRoot":"","sources":["../../src/manifest/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SupportedCurve } from '@metamask/key-tree';\nimport { isValidBIP32PathSegment } from '@metamask/key-tree';\nimport type { EmptyObject, InitialPermissions } from '@metamask/snaps-sdk';\nimport type { Describe, Infer, Struct } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n create,\n enums,\n integer,\n is,\n literal,\n object,\n optional,\n refine,\n record,\n size,\n string,\n type,\n union,\n intersection,\n} from '@metamask/superstruct';\nimport {\n assertStruct,\n ChecksumStruct,\n VersionStruct,\n isValidSemVerRange,\n inMilliseconds,\n Duration,\n CaipChainIdStruct,\n} from '@metamask/utils';\n\nimport { isDerivationPathEqual } from '../array';\nimport { CronjobSpecificationArrayStruct } from '../cronjob';\nimport { SIP_6_MAGIC_VALUE, STATE_ENCRYPTION_MAGIC_VALUE } from '../entropy';\nimport { KeyringOriginsStruct, RpcOriginsStruct } from '../json-rpc';\nimport { SnapIdStruct } from '../snaps';\nimport { mergeStructs, type InferMatching } from '../structs';\nimport { NameStruct, NpmSnapFileNames, uri } from '../types';\n\n// BIP-43 purposes that cannot be used for entropy derivation. These are in the\n// string form, ending with `'`.\nconst FORBIDDEN_PURPOSES: string[] = [\n SIP_6_MAGIC_VALUE,\n STATE_ENCRYPTION_MAGIC_VALUE,\n];\n\nconst FORBIDDEN_PURPOSE_PATHS: string[][] = FORBIDDEN_PURPOSES.map(\n (purpose) => ['m', `${purpose}`],\n);\n\nexport const FORBIDDEN_COIN_TYPES: number[] = [60];\nconst FORBIDDEN_COIN_TYPE_PATHS: string[][] = FORBIDDEN_COIN_TYPES.map(\n (coinType) => ['m', \"44'\", `${coinType}'`],\n);\n\nexport const Bip32PathStruct = refine(\n array(string()),\n 'BIP-32 path',\n (path: string[]) => {\n if (path.length === 0) {\n return 'Path must be a non-empty BIP-32 derivation path array';\n }\n\n if (path[0] !== 'm') {\n return 'Path must start with \"m\".';\n }\n\n if (path.length < 3) {\n return 'Paths must have a length of at least three.';\n }\n\n if (path.slice(1).some((part) => !isValidBIP32PathSegment(part))) {\n return 'Path must be a valid BIP-32 derivation path array.';\n }\n\n if (\n FORBIDDEN_PURPOSE_PATHS.some((forbiddenPath) =>\n isDerivationPathEqual(\n path.slice(0, forbiddenPath.length),\n forbiddenPath,\n ),\n )\n ) {\n return `The purpose \"${path[1]}\" is not allowed for entropy derivation.`;\n }\n\n if (\n FORBIDDEN_COIN_TYPE_PATHS.some((forbiddenPath) =>\n isDerivationPathEqual(\n path.slice(0, forbiddenPath.length),\n forbiddenPath,\n ),\n )\n ) {\n return `The path \"${path.join(\n '/',\n )}\" is not allowed for entropy derivation.`;\n }\n\n return true;\n },\n);\n\nexport const bip32entropy = <\n Type extends { path: string[]; curve: string },\n Schema,\n>(\n struct: Struct<Type, Schema>,\n) =>\n refine(struct, 'BIP-32 entropy', (value) => {\n if (\n value.curve === 'ed25519' &&\n value.path.slice(1).some((part) => !part.endsWith(\"'\"))\n ) {\n return 'Ed25519 does not support unhardened paths.';\n }\n\n return true;\n });\n\nexport const CurveStruct: Describe<SupportedCurve> = enums([\n 'ed25519',\n 'secp256k1',\n 'ed25519Bip32',\n]);\n\n// Used outside @metamask/snap-utils\nexport const Bip32EntropyStruct = bip32entropy(\n type({\n path: Bip32PathStruct,\n curve: CurveStruct,\n }),\n);\n\nexport type Bip32Entropy = Infer<typeof Bip32EntropyStruct>;\n\nexport const SnapGetBip32EntropyPermissionsStruct = size(\n array(Bip32EntropyStruct),\n 1,\n Infinity,\n);\n\nexport const SemVerRangeStruct = refine(string(), 'SemVer range', (value) => {\n if (isValidSemVerRange(value)) {\n return true;\n }\n return 'Expected a valid SemVer range.';\n});\n\nexport const SnapIdsStruct = refine(\n record(SnapIdStruct, object({ version: optional(SemVerRangeStruct) })),\n 'SnapIds',\n (value) => {\n if (Object.keys(value).length === 0) {\n return false;\n }\n\n return true;\n },\n);\n\nexport type SnapIds = Infer<typeof SnapIdsStruct>;\n\nexport const ChainIdsStruct = size(array(CaipChainIdStruct), 1, Infinity);\n\nexport const LookupMatchersStruct = union([\n object({\n tlds: size(array(string()), 1, Infinity),\n }),\n object({\n schemes: size(array(string()), 1, Infinity),\n }),\n object({\n tlds: size(array(string()), 1, Infinity),\n schemes: size(array(string()), 1, Infinity),\n }),\n]);\n\nexport const MINIMUM_REQUEST_TIMEOUT = inMilliseconds(5, Duration.Second);\nexport const MAXIMUM_REQUEST_TIMEOUT = inMilliseconds(3, Duration.Minute);\n\nexport const MaxRequestTimeStruct = size(\n integer(),\n MINIMUM_REQUEST_TIMEOUT,\n MAXIMUM_REQUEST_TIMEOUT,\n);\n\nexport const ProtocolScopesStruct = record(\n CaipChainIdStruct,\n object({ methods: array(string()) }),\n);\n\n// Utility type to union with for all handler structs\nexport const HandlerCaveatsStruct = object({\n maxRequestTime: optional(MaxRequestTimeStruct),\n});\n\nexport type HandlerCaveats = Infer<typeof HandlerCaveatsStruct>;\n\nexport const EmptyObjectStruct = object<EmptyObject>({}) as unknown as Struct<\n EmptyObject,\n null\n>;\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const PermissionsStruct: Describe<InitialPermissions> = type({\n 'endowment:assets': optional(\n mergeStructs(HandlerCaveatsStruct, object({ scopes: ChainIdsStruct })),\n ),\n 'endowment:cronjob': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({ jobs: optional(CronjobSpecificationArrayStruct) }),\n ),\n ),\n 'endowment:ethereum-provider': optional(EmptyObjectStruct),\n 'endowment:keyring': optional(\n mergeStructs(HandlerCaveatsStruct, KeyringOriginsStruct),\n ),\n 'endowment:protocol': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({ scopes: ProtocolScopesStruct }),\n ),\n ),\n 'endowment:lifecycle-hooks': optional(HandlerCaveatsStruct),\n 'endowment:name-lookup': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({\n chains: optional(ChainIdsStruct),\n matchers: optional(LookupMatchersStruct),\n }),\n ),\n ),\n 'endowment:network-access': optional(EmptyObjectStruct),\n 'endowment:page-home': optional(HandlerCaveatsStruct),\n 'endowment:rpc': optional(\n mergeStructs(HandlerCaveatsStruct, RpcOriginsStruct),\n ),\n 'endowment:signature-insight': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({\n allowSignatureOrigin: optional(boolean()),\n }),\n ),\n ),\n 'endowment:transaction-insight': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({\n allowTransactionOrigin: optional(boolean()),\n }),\n ),\n ),\n 'endowment:webassembly': optional(EmptyObjectStruct),\n snap_dialog: optional(EmptyObjectStruct),\n snap_manageState: optional(EmptyObjectStruct),\n snap_manageAccounts: optional(EmptyObjectStruct),\n snap_notify: optional(EmptyObjectStruct),\n snap_getBip32Entropy: optional(SnapGetBip32EntropyPermissionsStruct),\n snap_getBip32PublicKey: optional(SnapGetBip32EntropyPermissionsStruct),\n snap_getBip44Entropy: optional(\n size(\n array(object({ coinType: size(integer(), 0, 2 ** 32 - 1) })),\n 1,\n Infinity,\n ),\n ),\n snap_getEntropy: optional(EmptyObjectStruct),\n snap_getLocale: optional(EmptyObjectStruct),\n wallet_snap: optional(SnapIdsStruct),\n});\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport type SnapPermissions = InferMatching<\n typeof PermissionsStruct,\n InitialPermissions\n>;\n\nexport const SnapAuxiliaryFilesStruct = array(string());\n\n/**\n * @deprecated Use SnapAuxiliaryFilesStruct instead. This was a typo that has been fixed.\n */\nexport const SnapAuxilaryFilesStruct = SnapAuxiliaryFilesStruct;\n\nexport const InitialConnectionsStruct = record(\n intersection([string(), uri()]),\n object({}),\n);\n\nexport type InitialConnections = Infer<typeof InitialConnectionsStruct>;\n\nexport const SnapManifestStruct = object({\n extends: optional(size(string(), 1, Infinity)),\n version: VersionStruct,\n description: size(string(), 1, 280),\n proposedName: size(string(), 1, 214),\n repository: optional(\n type({\n type: size(string(), 1, Infinity),\n url: size(string(), 1, Infinity),\n }),\n ),\n source: object({\n shasum: ChecksumStruct,\n location: object({\n npm: object({\n filePath: size(string(), 1, Infinity),\n iconPath: optional(size(string(), 1, Infinity)),\n packageName: NameStruct,\n registry: union([\n literal('https://registry.npmjs.org'),\n literal('https://registry.npmjs.org/'),\n ]),\n }),\n }),\n files: optional(SnapAuxiliaryFilesStruct),\n locales: optional(SnapAuxiliaryFilesStruct),\n }),\n initialConnections: optional(InitialConnectionsStruct),\n initialPermissions: PermissionsStruct,\n manifestVersion: literal('0.1'),\n platformVersion: optional(VersionStruct),\n $schema: optional(string()), // enables JSON-Schema linting in VSC and other IDEs\n});\n\nexport type SnapManifest = Infer<typeof SnapManifestStruct>;\n\n/**\n * Check if the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link SnapManifest} object.\n */\nexport function isSnapManifest(value: unknown): value is SnapManifest {\n return is(value, SnapManifestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @throws If the value is not a valid {@link SnapManifest} object.\n */\nexport function assertIsSnapManifest(\n value: unknown,\n): asserts value is SnapManifest {\n assertStruct(\n value,\n SnapManifestStruct,\n `\"${NpmSnapFileNames.Manifest}\" is invalid`,\n );\n}\n\n/**\n * Creates a {@link SnapManifest} object from JSON.\n *\n * @param value - The value to check.\n * @throws If the value cannot be coerced to a {@link SnapManifest} object.\n * @returns The created {@link SnapManifest} object.\n */\nexport function createSnapManifest(value: unknown): SnapManifest {\n // TODO: Add a utility to prefix these errors similar to assertStruct\n return create(value, SnapManifestStruct);\n}\n"]}
1
+ {"version":3,"file":"validation.cjs","sourceRoot":"","sources":["../../src/manifest/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SupportedCurve } from '@metamask/key-tree';\nimport { isValidBIP32PathSegment } from '@metamask/key-tree';\nimport type { EmptyObject, InitialPermissions } from '@metamask/snaps-sdk';\nimport type { Describe, Infer, Struct } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n create,\n enums,\n integer,\n is,\n literal,\n object,\n optional,\n refine,\n record,\n size,\n string,\n type,\n union,\n intersection,\n} from '@metamask/superstruct';\nimport {\n assertStruct,\n ChecksumStruct,\n VersionStruct,\n isValidSemVerRange,\n inMilliseconds,\n Duration,\n CaipChainIdStruct,\n} from '@metamask/utils';\n\nimport { isDerivationPathEqual } from '../array';\nimport { CronjobSpecificationArrayStruct } from '../cronjob';\nimport { SIP_6_MAGIC_VALUE, STATE_ENCRYPTION_MAGIC_VALUE } from '../entropy';\nimport { KeyringOriginsStruct, RpcOriginsStruct } from '../json-rpc';\nimport { KeyringCapabilitiesStruct } from '../keyring';\nimport { SnapIdStruct } from '../snaps';\nimport { mergeStructs, type InferMatching } from '../structs';\nimport { NameStruct, NpmSnapFileNames, uri } from '../types';\n\n// BIP-43 purposes that cannot be used for entropy derivation. These are in the\n// string form, ending with `'`.\nconst FORBIDDEN_PURPOSES: string[] = [\n SIP_6_MAGIC_VALUE,\n STATE_ENCRYPTION_MAGIC_VALUE,\n];\n\nconst FORBIDDEN_PURPOSE_PATHS: string[][] = FORBIDDEN_PURPOSES.map(\n (purpose) => ['m', `${purpose}`],\n);\n\nexport const FORBIDDEN_COIN_TYPES: number[] = [60];\nconst FORBIDDEN_COIN_TYPE_PATHS: string[][] = FORBIDDEN_COIN_TYPES.map(\n (coinType) => ['m', \"44'\", `${coinType}'`],\n);\n\nexport const Bip32PathStruct = refine(\n array(string()),\n 'BIP-32 path',\n (path: string[]) => {\n if (path.length === 0) {\n return 'Path must be a non-empty BIP-32 derivation path array';\n }\n\n if (path[0] !== 'm') {\n return 'Path must start with \"m\".';\n }\n\n if (path.length < 3) {\n return 'Paths must have a length of at least three.';\n }\n\n if (path.slice(1).some((part) => !isValidBIP32PathSegment(part))) {\n return 'Path must be a valid BIP-32 derivation path array.';\n }\n\n if (\n FORBIDDEN_PURPOSE_PATHS.some((forbiddenPath) =>\n isDerivationPathEqual(\n path.slice(0, forbiddenPath.length),\n forbiddenPath,\n ),\n )\n ) {\n return `The purpose \"${path[1]}\" is not allowed for entropy derivation.`;\n }\n\n if (\n FORBIDDEN_COIN_TYPE_PATHS.some((forbiddenPath) =>\n isDerivationPathEqual(\n path.slice(0, forbiddenPath.length),\n forbiddenPath,\n ),\n )\n ) {\n return `The path \"${path.join(\n '/',\n )}\" is not allowed for entropy derivation.`;\n }\n\n return true;\n },\n);\n\nexport const bip32entropy = <\n Type extends { path: string[]; curve: string },\n Schema,\n>(\n struct: Struct<Type, Schema>,\n) =>\n refine(struct, 'BIP-32 entropy', (value) => {\n if (\n value.curve === 'ed25519' &&\n value.path.slice(1).some((part) => !part.endsWith(\"'\"))\n ) {\n return 'Ed25519 does not support unhardened paths.';\n }\n\n return true;\n });\n\nexport const CurveStruct: Describe<SupportedCurve> = enums([\n 'ed25519',\n 'secp256k1',\n 'ed25519Bip32',\n]);\n\n// Used outside @metamask/snap-utils\nexport const Bip32EntropyStruct = bip32entropy(\n type({\n path: Bip32PathStruct,\n curve: CurveStruct,\n }),\n);\n\nexport type Bip32Entropy = Infer<typeof Bip32EntropyStruct>;\n\nexport const SnapGetBip32EntropyPermissionsStruct = size(\n array(Bip32EntropyStruct),\n 1,\n Infinity,\n);\n\nexport const SemVerRangeStruct = refine(string(), 'SemVer range', (value) => {\n if (isValidSemVerRange(value)) {\n return true;\n }\n return 'Expected a valid SemVer range.';\n});\n\nexport const SnapIdsStruct = refine(\n record(SnapIdStruct, object({ version: optional(SemVerRangeStruct) })),\n 'SnapIds',\n (value) => {\n if (Object.keys(value).length === 0) {\n return false;\n }\n\n return true;\n },\n);\n\nexport type SnapIds = Infer<typeof SnapIdsStruct>;\n\nexport const ChainIdsStruct = size(array(CaipChainIdStruct), 1, Infinity);\n\nexport const LookupMatchersStruct = union([\n object({\n tlds: size(array(string()), 1, Infinity),\n }),\n object({\n schemes: size(array(string()), 1, Infinity),\n }),\n object({\n tlds: size(array(string()), 1, Infinity),\n schemes: size(array(string()), 1, Infinity),\n }),\n]);\n\nexport const MINIMUM_REQUEST_TIMEOUT = inMilliseconds(5, Duration.Second);\nexport const MAXIMUM_REQUEST_TIMEOUT = inMilliseconds(3, Duration.Minute);\n\nexport const MaxRequestTimeStruct = size(\n integer(),\n MINIMUM_REQUEST_TIMEOUT,\n MAXIMUM_REQUEST_TIMEOUT,\n);\n\nexport const ProtocolScopesStruct = record(\n CaipChainIdStruct,\n object({ methods: array(string()) }),\n);\n\n// Utility type to union with for all handler structs\nexport const HandlerCaveatsStruct = object({\n maxRequestTime: optional(MaxRequestTimeStruct),\n});\n\nexport type HandlerCaveats = Infer<typeof HandlerCaveatsStruct>;\n\nexport const EmptyObjectStruct = object<EmptyObject>({}) as unknown as Struct<\n EmptyObject,\n null\n>;\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const PermissionsStruct: Describe<InitialPermissions> = type({\n 'endowment:assets': optional(\n mergeStructs(HandlerCaveatsStruct, object({ scopes: ChainIdsStruct })),\n ),\n 'endowment:cronjob': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({ jobs: optional(CronjobSpecificationArrayStruct) }),\n ),\n ),\n 'endowment:ethereum-provider': optional(EmptyObjectStruct),\n 'endowment:keyring': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n KeyringOriginsStruct,\n KeyringCapabilitiesStruct,\n ),\n ),\n 'endowment:protocol': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({ scopes: ProtocolScopesStruct }),\n ),\n ),\n 'endowment:lifecycle-hooks': optional(HandlerCaveatsStruct),\n 'endowment:name-lookup': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({\n chains: optional(ChainIdsStruct),\n matchers: optional(LookupMatchersStruct),\n }),\n ),\n ),\n 'endowment:network-access': optional(EmptyObjectStruct),\n 'endowment:page-home': optional(HandlerCaveatsStruct),\n 'endowment:rpc': optional(\n mergeStructs(HandlerCaveatsStruct, RpcOriginsStruct),\n ),\n 'endowment:signature-insight': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({\n allowSignatureOrigin: optional(boolean()),\n }),\n ),\n ),\n 'endowment:transaction-insight': optional(\n mergeStructs(\n HandlerCaveatsStruct,\n object({\n allowTransactionOrigin: optional(boolean()),\n }),\n ),\n ),\n 'endowment:webassembly': optional(EmptyObjectStruct),\n snap_dialog: optional(EmptyObjectStruct),\n snap_manageState: optional(EmptyObjectStruct),\n snap_manageAccounts: optional(EmptyObjectStruct),\n snap_notify: optional(EmptyObjectStruct),\n snap_getBip32Entropy: optional(SnapGetBip32EntropyPermissionsStruct),\n snap_getBip32PublicKey: optional(SnapGetBip32EntropyPermissionsStruct),\n snap_getBip44Entropy: optional(\n size(\n array(object({ coinType: size(integer(), 0, 2 ** 32 - 1) })),\n 1,\n Infinity,\n ),\n ),\n snap_getEntropy: optional(EmptyObjectStruct),\n snap_getLocale: optional(EmptyObjectStruct),\n wallet_snap: optional(SnapIdsStruct),\n});\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport type SnapPermissions = InferMatching<\n typeof PermissionsStruct,\n InitialPermissions\n>;\n\nexport const SnapAuxiliaryFilesStruct = array(string());\n\n/**\n * @deprecated Use SnapAuxiliaryFilesStruct instead. This was a typo that has been fixed.\n */\nexport const SnapAuxilaryFilesStruct = SnapAuxiliaryFilesStruct;\n\nexport const InitialConnectionsStruct = record(\n intersection([string(), uri()]),\n object({}),\n);\n\nexport type InitialConnections = Infer<typeof InitialConnectionsStruct>;\n\nexport const SnapManifestStruct = object({\n extends: optional(size(string(), 1, Infinity)),\n version: VersionStruct,\n description: size(string(), 1, 280),\n proposedName: size(string(), 1, 214),\n repository: optional(\n type({\n type: size(string(), 1, Infinity),\n url: size(string(), 1, Infinity),\n }),\n ),\n source: object({\n shasum: ChecksumStruct,\n location: object({\n npm: object({\n filePath: size(string(), 1, Infinity),\n iconPath: optional(size(string(), 1, Infinity)),\n packageName: NameStruct,\n registry: union([\n literal('https://registry.npmjs.org'),\n literal('https://registry.npmjs.org/'),\n ]),\n }),\n }),\n files: optional(SnapAuxiliaryFilesStruct),\n locales: optional(SnapAuxiliaryFilesStruct),\n }),\n initialConnections: optional(InitialConnectionsStruct),\n initialPermissions: PermissionsStruct,\n manifestVersion: literal('0.1'),\n platformVersion: optional(VersionStruct),\n $schema: optional(string()), // enables JSON-Schema linting in VSC and other IDEs\n});\n\nexport type SnapManifest = Infer<typeof SnapManifestStruct>;\n\n/**\n * Check if the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link SnapManifest} object.\n */\nexport function isSnapManifest(value: unknown): value is SnapManifest {\n return is(value, SnapManifestStruct);\n}\n\n/**\n * Assert that the given value is a valid {@link SnapManifest} object.\n *\n * @param value - The value to check.\n * @throws If the value is not a valid {@link SnapManifest} object.\n */\nexport function assertIsSnapManifest(\n value: unknown,\n): asserts value is SnapManifest {\n assertStruct(\n value,\n SnapManifestStruct,\n `\"${NpmSnapFileNames.Manifest}\" is invalid`,\n );\n}\n\n/**\n * Creates a {@link SnapManifest} object from JSON.\n *\n * @param value - The value to check.\n * @throws If the value cannot be coerced to a {@link SnapManifest} object.\n * @returns The created {@link SnapManifest} object.\n */\nexport function createSnapManifest(value: unknown): SnapManifest {\n // TODO: Add a utility to prefix these errors similar to assertStruct\n return create(value, SnapManifestStruct);\n}\n"]}
@@ -88,6 +88,27 @@ export declare const SnapManifestStruct: Struct<{
88
88
  'endowment:ethereum-provider': EmptyObject;
89
89
  'endowment:keyring': {
90
90
  allowedOrigins?: string[] | undefined;
91
+ capabilities?: {
92
+ scopes: `${string}:${string}`[];
93
+ bip44?: {
94
+ derivePath?: boolean | undefined;
95
+ deriveIndex?: boolean | undefined;
96
+ deriveIndexRange?: boolean | undefined;
97
+ discover?: boolean | undefined;
98
+ } | undefined;
99
+ privateKey?: {
100
+ importFormats?: {
101
+ encoding: "hexadecimal" | "base58";
102
+ type?: ("eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account") | undefined;
103
+ }[] | undefined;
104
+ exportFormats?: {
105
+ encoding: "hexadecimal" | "base58";
106
+ }[] | undefined;
107
+ } | undefined;
108
+ custom?: {
109
+ createAccounts?: boolean | undefined;
110
+ } | undefined;
111
+ } | undefined;
91
112
  maxRequestTime?: number | undefined;
92
113
  };
93
114
  'endowment:lifecycle-hooks'?: {
@@ -198,6 +219,27 @@ export declare const SnapManifestStruct: Struct<{
198
219
  'endowment:ethereum-provider': EmptyObject;
199
220
  'endowment:keyring': {
200
221
  allowedOrigins?: string[] | undefined;
222
+ capabilities?: {
223
+ scopes: `${string}:${string}`[];
224
+ bip44?: {
225
+ derivePath?: boolean | undefined;
226
+ deriveIndex?: boolean | undefined;
227
+ deriveIndexRange?: boolean | undefined;
228
+ discover?: boolean | undefined;
229
+ } | undefined;
230
+ privateKey?: {
231
+ importFormats?: {
232
+ encoding: "hexadecimal" | "base58";
233
+ type?: ("eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "entropy:account") | undefined;
234
+ }[] | undefined;
235
+ exportFormats?: {
236
+ encoding: "hexadecimal" | "base58";
237
+ }[] | undefined;
238
+ } | undefined;
239
+ custom?: {
240
+ createAccounts?: boolean | undefined;
241
+ } | undefined;
242
+ } | undefined;
201
243
  maxRequestTime?: number | undefined;
202
244
  };
203
245
  'endowment:lifecycle-hooks'?: {
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/manifest/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,2BAA2B;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,4BAA4B;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B;AAkCrE,OAAO,EAAgB,KAAK,aAAa,EAAE,uBAAmB;AAc9D,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAAS,CAAC;AAKnD,eAAO,MAAM,eAAe,wCA8C3B,CAAC;AAEF,eAAO,MAAM,YAAY;UACF,MAAM,EAAE;WAAS,MAAM;gEAc1C,CAAC;AAEL,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,cAAc,CAI/C,CAAC;AAGH,eAAO,MAAM,kBAAkB;;;;;;EAK9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D,eAAO,MAAM,oCAAoC;;;;;;;;;GAIhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,sBAK5B,CAAC;AAEH,eAAO,MAAM,aAAa;;SAUzB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAElD,eAAO,MAAM,cAAc,sEAA8C,CAAC;AAE1E,eAAO,MAAM,oBAAoB;;;;;;;QAW/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAAqC,CAAC;AAC1E,eAAO,MAAM,uBAAuB,QAAqC,CAAC;AAE1E,eAAO,MAAM,oBAAoB,sBAIhC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;SAGhC,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;EAE/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB,2BAG7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB,CAoEzD,CAAC;AAGH,MAAM,MAAM,eAAe,GAAG,aAAa,CACzC,OAAO,iBAAiB,EACxB,kBAAkB,CACnB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wCAAkB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,uBAAuB,wCAA2B,CAAC;AAEhE,eAAO,MAAM,wBAAwB,kCAGpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,YAAY,CAM/B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAG/D"}
1
+ {"version":3,"file":"validation.d.cts","sourceRoot":"","sources":["../../src/manifest/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,2BAA2B;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,4BAA4B;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B;AAmCrE,OAAO,EAAgB,KAAK,aAAa,EAAE,uBAAmB;AAc9D,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAAS,CAAC;AAKnD,eAAO,MAAM,eAAe,wCA8C3B,CAAC;AAEF,eAAO,MAAM,YAAY;UACF,MAAM,EAAE;WAAS,MAAM;gEAc1C,CAAC;AAEL,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,cAAc,CAI/C,CAAC;AAGH,eAAO,MAAM,kBAAkB;;;;;;EAK9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D,eAAO,MAAM,oCAAoC;;;;;;;;;GAIhD,CAAC;AAEF,eAAO,MAAM,iBAAiB,sBAK5B,CAAC;AAEH,eAAO,MAAM,aAAa;;SAUzB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAElD,eAAO,MAAM,cAAc,sEAA8C,CAAC;AAE1E,eAAO,MAAM,oBAAoB;;;;;;;QAW/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,QAAqC,CAAC;AAC1E,eAAO,MAAM,uBAAuB,QAAqC,CAAC;AAE1E,eAAO,MAAM,oBAAoB,sBAIhC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;SAGhC,CAAC;AAGF,eAAO,MAAM,oBAAoB;;;;EAE/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB,2BAG7B,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB,CAwEzD,CAAC;AAGH,MAAM,MAAM,eAAe,GAAG,aAAa,CACzC,OAAO,iBAAiB,EACxB,kBAAkB,CACnB,CAAC;AAEF,eAAO,MAAM,wBAAwB,wCAAkB,CAAC;AAExD;;GAEG;AACH,eAAO,MAAM,uBAAuB,wCAA2B,CAAC;AAEhE,eAAO,MAAM,wBAAwB,kCAGpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgC7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,KAAK,IAAI,YAAY,CAM/B;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAG/D"}