@metamask/bridge-controller 9.0.0 → 11.0.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 (96) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/dist/bridge-controller.cjs +96 -25
  3. package/dist/bridge-controller.cjs.map +1 -1
  4. package/dist/bridge-controller.d.cts +5 -5
  5. package/dist/bridge-controller.d.cts.map +1 -1
  6. package/dist/bridge-controller.d.mts +5 -5
  7. package/dist/bridge-controller.d.mts.map +1 -1
  8. package/dist/bridge-controller.mjs +97 -26
  9. package/dist/bridge-controller.mjs.map +1 -1
  10. package/dist/constants/bridge.cjs +2 -1
  11. package/dist/constants/bridge.cjs.map +1 -1
  12. package/dist/constants/bridge.d.cts +2 -1
  13. package/dist/constants/bridge.d.cts.map +1 -1
  14. package/dist/constants/bridge.d.mts +2 -1
  15. package/dist/constants/bridge.d.mts.map +1 -1
  16. package/dist/constants/bridge.mjs +2 -1
  17. package/dist/constants/bridge.mjs.map +1 -1
  18. package/dist/constants/chains.cjs +1 -12
  19. package/dist/constants/chains.cjs.map +1 -1
  20. package/dist/constants/chains.d.cts +0 -2
  21. package/dist/constants/chains.d.cts.map +1 -1
  22. package/dist/constants/chains.d.mts +0 -2
  23. package/dist/constants/chains.d.mts.map +1 -1
  24. package/dist/constants/chains.mjs +0 -11
  25. package/dist/constants/chains.mjs.map +1 -1
  26. package/dist/constants/tokens.cjs +61 -38
  27. package/dist/constants/tokens.cjs.map +1 -1
  28. package/dist/constants/tokens.d.cts +100 -48
  29. package/dist/constants/tokens.d.cts.map +1 -1
  30. package/dist/constants/tokens.d.mts +100 -48
  31. package/dist/constants/tokens.d.mts.map +1 -1
  32. package/dist/constants/tokens.mjs +37 -14
  33. package/dist/constants/tokens.mjs.map +1 -1
  34. package/dist/index.cjs +21 -1
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +16 -4
  37. package/dist/index.d.cts.map +1 -1
  38. package/dist/index.d.mts +16 -4
  39. package/dist/index.d.mts.map +1 -1
  40. package/dist/index.mjs +11 -2
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/types.cjs +4 -3
  43. package/dist/types.cjs.map +1 -1
  44. package/dist/types.d.cts +108 -54
  45. package/dist/types.d.cts.map +1 -1
  46. package/dist/types.d.mts +108 -54
  47. package/dist/types.d.mts.map +1 -1
  48. package/dist/types.mjs +4 -3
  49. package/dist/types.mjs.map +1 -1
  50. package/dist/utils/balance.cjs +2 -2
  51. package/dist/utils/balance.cjs.map +1 -1
  52. package/dist/utils/balance.d.cts.map +1 -1
  53. package/dist/utils/balance.d.mts.map +1 -1
  54. package/dist/utils/balance.mjs +2 -2
  55. package/dist/utils/balance.mjs.map +1 -1
  56. package/dist/utils/bridge.cjs +65 -5
  57. package/dist/utils/bridge.cjs.map +1 -1
  58. package/dist/utils/bridge.d.cts +27 -4
  59. package/dist/utils/bridge.d.cts.map +1 -1
  60. package/dist/utils/bridge.d.mts +27 -4
  61. package/dist/utils/bridge.d.mts.map +1 -1
  62. package/dist/utils/bridge.mjs +62 -5
  63. package/dist/utils/bridge.mjs.map +1 -1
  64. package/dist/utils/caip-formatters.cjs +102 -0
  65. package/dist/utils/caip-formatters.cjs.map +1 -0
  66. package/dist/utils/caip-formatters.d.cts +31 -0
  67. package/dist/utils/caip-formatters.d.cts.map +1 -0
  68. package/dist/utils/caip-formatters.d.mts +31 -0
  69. package/dist/utils/caip-formatters.d.mts.map +1 -0
  70. package/dist/utils/caip-formatters.mjs +95 -0
  71. package/dist/utils/caip-formatters.mjs.map +1 -0
  72. package/dist/utils/fetch.cjs +34 -26
  73. package/dist/utils/fetch.cjs.map +1 -1
  74. package/dist/utils/fetch.d.cts +6 -5
  75. package/dist/utils/fetch.d.cts.map +1 -1
  76. package/dist/utils/fetch.d.mts +6 -5
  77. package/dist/utils/fetch.d.mts.map +1 -1
  78. package/dist/utils/fetch.mjs +32 -24
  79. package/dist/utils/fetch.mjs.map +1 -1
  80. package/dist/utils/quote.cjs +12 -2
  81. package/dist/utils/quote.cjs.map +1 -1
  82. package/dist/utils/quote.d.cts +2 -2
  83. package/dist/utils/quote.d.cts.map +1 -1
  84. package/dist/utils/quote.d.mts +2 -2
  85. package/dist/utils/quote.d.mts.map +1 -1
  86. package/dist/utils/quote.mjs +12 -2
  87. package/dist/utils/quote.mjs.map +1 -1
  88. package/dist/utils/validators.cjs +15 -16
  89. package/dist/utils/validators.cjs.map +1 -1
  90. package/dist/utils/validators.d.cts +2 -3
  91. package/dist/utils/validators.d.cts.map +1 -1
  92. package/dist/utils/validators.d.mts +2 -3
  93. package/dist/utils/validators.d.mts.map +1 -1
  94. package/dist/utils/validators.mjs +16 -17
  95. package/dist/utils/validators.mjs.map +1 -1
  96. package/package.json +9 -4
@@ -1,9 +1,19 @@
1
1
  export const isValidQuoteRequest = (partialRequest, requireAmount = true) => {
2
- const stringFields = ['srcTokenAddress', 'destTokenAddress'];
2
+ const stringFields = [
3
+ 'srcTokenAddress',
4
+ 'destTokenAddress',
5
+ 'srcChainId',
6
+ 'destChainId',
7
+ 'walletAddress',
8
+ ];
3
9
  if (requireAmount) {
4
10
  stringFields.push('srcTokenAmount');
5
11
  }
6
- const numberFields = ['srcChainId', 'destChainId', 'slippage'];
12
+ const numberFields = [];
13
+ // if slippage is defined, require it to be a number
14
+ if (partialRequest.slippage !== undefined) {
15
+ numberFields.push('slippage');
16
+ }
7
17
  return (stringFields.every((field) => field in partialRequest &&
8
18
  typeof partialRequest[field] ===
9
19
  'string' &&
@@ -1 +1 @@
1
- {"version":3,"file":"quote.mjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,cAAqC,EACrC,aAAa,GAAG,IAAI,EACY,EAAE;IAClC,MAAM,YAAY,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IAC7D,IAAI,aAAa,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACrC;IACD,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IAE/D,OAAO,CACL,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;QACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;YACzD,QAAQ;QACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;QAClE,cAAc,CAAC,KAAoC,CAAC,KAAK,EAAE;QAC3D,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;YACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;gBACzD,QAAQ;YACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;YAClE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAoC,CAAC,CAAC,CAAC;YACpE,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,CAAC,aAAa;YACZ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { QuoteRequest } from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<QuoteRequest>,\n requireAmount = true,\n): partialRequest is QuoteRequest => {\n const stringFields = ['srcTokenAddress', 'destTokenAddress'];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n const numberFields = ['srcChainId', 'destChainId', 'slippage'];\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n"]}
1
+ {"version":3,"file":"quote.mjs","sourceRoot":"","sources":["../../src/utils/quote.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,cAA4C,EAC5C,aAAa,GAAG,IAAI,EACmB,EAAE;IACzC,MAAM,YAAY,GAAG;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,YAAY;QACZ,aAAa;QACb,eAAe;KAChB,CAAC;IACF,IAAI,aAAa,EAAE;QACjB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACrC;IACD,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,oDAAoD;IACpD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,EAAE;QACzC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/B;IAED,OAAO,CACL,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;QACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;YACzD,QAAQ;QACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;QAClE,cAAc,CAAC,KAAoC,CAAC,KAAK,EAAE;QAC3D,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,YAAY,CAAC,KAAK,CAChB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,IAAI,cAAc;YACvB,OAAO,cAAc,CAAC,KAAoC,CAAC;gBACzD,QAAQ;YACV,cAAc,CAAC,KAAoC,CAAC,KAAK,SAAS;YAClE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,KAAoC,CAAC,CAAC,CAAC;YACpE,cAAc,CAAC,KAAoC,CAAC,KAAK,IAAI,CAChE;QACD,CAAC,aAAa;YACZ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACrE,CAAC,CAAC,IAAI,CAAC,CACV,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { GenericQuoteRequest } from '../types';\n\nexport const isValidQuoteRequest = (\n partialRequest: Partial<GenericQuoteRequest>,\n requireAmount = true,\n): partialRequest is GenericQuoteRequest => {\n const stringFields = [\n 'srcTokenAddress',\n 'destTokenAddress',\n 'srcChainId',\n 'destChainId',\n 'walletAddress',\n ];\n if (requireAmount) {\n stringFields.push('srcTokenAmount');\n }\n const numberFields = [];\n // if slippage is defined, require it to be a number\n if (partialRequest.slippage !== undefined) {\n numberFields.push('slippage');\n }\n\n return (\n stringFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'string' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n partialRequest[field as keyof typeof partialRequest] !== '' &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n numberFields.every(\n (field) =>\n field in partialRequest &&\n typeof partialRequest[field as keyof typeof partialRequest] ===\n 'number' &&\n partialRequest[field as keyof typeof partialRequest] !== undefined &&\n !isNaN(Number(partialRequest[field as keyof typeof partialRequest])) &&\n partialRequest[field as keyof typeof partialRequest] !== null,\n ) &&\n (requireAmount\n ? Boolean((partialRequest.srcTokenAmount ?? '').match(/^[1-9]\\d*$/u))\n : true)\n );\n};\n"]}
@@ -10,15 +10,23 @@ const HexStringSchema = (0, superstruct_1.define)('HexString', (v) => (0, utils_
10
10
  const truthyString = (s) => Boolean(s?.length);
11
11
  exports.truthyString = truthyString;
12
12
  const TruthyDigitStringSchema = (0, superstruct_1.define)('TruthyDigitString', (v) => (0, exports.truthyString)(v) && Boolean(v.match(/^\d+$/u)));
13
- const SwapsTokenObjectSchema = (0, superstruct_1.type)({
13
+ const ChainIdSchema = (0, superstruct_1.number)();
14
+ const BridgeAssetSchema = (0, superstruct_1.type)({
15
+ chainId: ChainIdSchema,
16
+ address: (0, superstruct_1.string)(),
17
+ assetId: (0, superstruct_1.string)(),
18
+ symbol: (0, superstruct_1.string)(),
19
+ name: (0, superstruct_1.string)(),
14
20
  decimals: (0, superstruct_1.number)(),
15
- address: (0, superstruct_1.intersection)([(0, superstruct_1.string)(), HexAddressSchema]),
16
- symbol: (0, superstruct_1.size)((0, superstruct_1.string)(), 1, 12),
21
+ icon: (0, superstruct_1.optional)((0, superstruct_1.string)()),
22
+ iconUrl: (0, superstruct_1.optional)((0, superstruct_1.string)()),
17
23
  });
18
24
  const validateFeatureFlagsResponse = (data) => {
19
25
  const ChainConfigurationSchema = (0, superstruct_1.type)({
20
26
  isActiveSrc: (0, superstruct_1.boolean)(),
21
27
  isActiveDest: (0, superstruct_1.boolean)(),
28
+ refreshRate: (0, superstruct_1.optional)((0, superstruct_1.number)()),
29
+ topAssets: (0, superstruct_1.optional)((0, superstruct_1.array)((0, superstruct_1.string)())),
22
30
  });
23
31
  const ConfigSchema = (0, superstruct_1.type)({
24
32
  refreshRate: (0, superstruct_1.number)(),
@@ -35,19 +43,10 @@ const validateFeatureFlagsResponse = (data) => {
35
43
  };
36
44
  exports.validateFeatureFlagsResponse = validateFeatureFlagsResponse;
37
45
  const validateSwapsTokenObject = (data) => {
38
- return (0, superstruct_1.is)(data, SwapsTokenObjectSchema);
46
+ return (0, superstruct_1.is)(data, BridgeAssetSchema);
39
47
  };
40
48
  exports.validateSwapsTokenObject = validateSwapsTokenObject;
41
49
  const validateQuoteResponse = (data) => {
42
- const ChainIdSchema = (0, superstruct_1.number)();
43
- const BridgeAssetSchema = (0, superstruct_1.type)({
44
- chainId: ChainIdSchema,
45
- address: (0, superstruct_1.string)(),
46
- symbol: (0, superstruct_1.string)(),
47
- name: (0, superstruct_1.string)(),
48
- decimals: (0, superstruct_1.number)(),
49
- icon: (0, superstruct_1.optional)((0, superstruct_1.string)()),
50
- });
51
50
  const FeeDataSchema = (0, superstruct_1.type)({
52
51
  amount: TruthyDigitStringSchema,
53
52
  asset: BridgeAssetSchema,
@@ -71,10 +70,10 @@ const validateQuoteResponse = (data) => {
71
70
  const QuoteSchema = (0, superstruct_1.type)({
72
71
  requestId: (0, superstruct_1.string)(),
73
72
  srcChainId: ChainIdSchema,
74
- srcAsset: SwapsTokenObjectSchema,
73
+ srcAsset: BridgeAssetSchema,
75
74
  srcTokenAmount: (0, superstruct_1.string)(),
76
75
  destChainId: ChainIdSchema,
77
- destAsset: SwapsTokenObjectSchema,
76
+ destAsset: BridgeAssetSchema,
78
77
  destTokenAmount: (0, superstruct_1.string)(),
79
78
  feeData: (0, superstruct_1.record)((0, superstruct_1.enums)(Object.values(types_1.FeeType)), FeeDataSchema),
80
79
  bridgeId: (0, superstruct_1.string)(),
@@ -93,7 +92,7 @@ const validateQuoteResponse = (data) => {
93
92
  const QuoteResponseSchema = (0, superstruct_1.type)({
94
93
  quote: QuoteSchema,
95
94
  approval: (0, superstruct_1.optional)(TxDataSchema),
96
- trade: TxDataSchema,
95
+ trade: (0, superstruct_1.union)([TxDataSchema, (0, superstruct_1.string)()]),
97
96
  estimatedProcessingTimeInSeconds: (0, superstruct_1.number)(),
98
97
  });
99
98
  return (0, superstruct_1.is)(data, QuoteResponseSchema);
@@ -1 +1 @@
1
- {"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n intersection,\n size,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport type { FeatureFlagResponse, QuoteResponse } from '../types';\nimport { ActionTypes, BridgeFlag, FeeType } from '../types';\n\nconst HexAddressSchema = define('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = define(\n 'TruthyDigitString',\n (v: unknown) =>\n truthyString(v as string) && Boolean((v as string).match(/^\\d+$/u)),\n);\n\nconst SwapsTokenObjectSchema = type({\n decimals: number(),\n address: intersection([string(), HexAddressSchema]),\n symbol: size(string(), 1, 12),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagResponse => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n });\n\n const ConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n const FeatureFlagResponseSchema = type({\n [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,\n [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,\n });\n\n return is(data, FeatureFlagResponseSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is SwapsTokenObject => {\n return is(data, SwapsTokenObjectSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const ChainIdSchema = number();\n\n const BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n });\n\n const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n });\n\n const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n });\n\n const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n });\n\n const RefuelDataSchema = StepSchema;\n\n const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: SwapsTokenObjectSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: SwapsTokenObjectSchema,\n destTokenAmount: string(),\n feeData: record(enums(Object.values(FeeType)), FeeDataSchema),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n });\n\n const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n });\n\n const QuoteResponseSchema = type({\n quote: QuoteSchema,\n approval: optional(TxDataSchema),\n trade: TxDataSchema,\n estimatedProcessingTimeInSeconds: number(),\n });\n\n return is(data, QuoteResponseSchema);\n};\n"]}
1
+ {"version":3,"file":"validators.cjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n union,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { BridgeAsset, FeatureFlagResponse, QuoteResponse } from '../types';\nimport { ActionTypes, BridgeFlag, FeeType } from '../types';\n\nconst HexAddressSchema = define('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = define(\n 'TruthyDigitString',\n (v: unknown) =>\n truthyString(v as string) && Boolean((v as string).match(/^\\d+$/u)),\n);\n\nconst ChainIdSchema = number();\n\nconst BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n assetId: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n iconUrl: optional(string()),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagResponse => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n });\n\n const ConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n const FeatureFlagResponseSchema = type({\n [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,\n [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,\n });\n\n return is(data, FeatureFlagResponseSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is BridgeAsset => {\n return is(data, BridgeAssetSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n });\n\n const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n });\n\n const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n });\n\n const RefuelDataSchema = StepSchema;\n\n const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: BridgeAssetSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: BridgeAssetSchema,\n destTokenAmount: string(),\n feeData: record(enums(Object.values(FeeType)), FeeDataSchema),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n });\n\n const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n });\n\n const QuoteResponseSchema = type({\n quote: QuoteSchema,\n approval: optional(TxDataSchema),\n trade: union([TxDataSchema, string()]),\n estimatedProcessingTimeInSeconds: number(),\n });\n\n return is(data, QuoteResponseSchema);\n};\n"]}
@@ -1,7 +1,6 @@
1
- import type { SwapsTokenObject } from "../constants/tokens.cjs";
2
- import type { FeatureFlagResponse, QuoteResponse } from "../types.cjs";
1
+ import type { BridgeAsset, FeatureFlagResponse, QuoteResponse } from "../types.cjs";
3
2
  export declare const truthyString: (s: string) => boolean;
4
3
  export declare const validateFeatureFlagsResponse: (data: unknown) => data is FeatureFlagResponse;
5
- export declare const validateSwapsTokenObject: (data: unknown) => data is SwapsTokenObject;
4
+ export declare const validateSwapsTokenObject: (data: unknown) => data is BridgeAsset;
6
5
  export declare const validateQuoteResponse: (data: unknown) => data is QuoteResponse;
7
6
  //# sourceMappingURL=validators.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.cts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAiB;AAWnE,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAa9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,gCAqBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,6BAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BAoElD,CAAC"}
1
+ {"version":3,"file":"validators.d.cts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAiB;AAWhF,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAoB9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,gCAuBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,wBAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BAyDlD,CAAC"}
@@ -1,7 +1,6 @@
1
- import type { SwapsTokenObject } from "../constants/tokens.mjs";
2
- import type { FeatureFlagResponse, QuoteResponse } from "../types.mjs";
1
+ import type { BridgeAsset, FeatureFlagResponse, QuoteResponse } from "../types.mjs";
3
2
  export declare const truthyString: (s: string) => boolean;
4
3
  export declare const validateFeatureFlagsResponse: (data: unknown) => data is FeatureFlagResponse;
5
- export declare const validateSwapsTokenObject: (data: unknown) => data is SwapsTokenObject;
4
+ export declare const validateSwapsTokenObject: (data: unknown) => data is BridgeAsset;
6
5
  export declare const validateQuoteResponse: (data: unknown) => data is QuoteResponse;
7
6
  //# sourceMappingURL=validators.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.mts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gCAA4B;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAiB;AAWnE,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAa9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,gCAqBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,6BAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BAoElD,CAAC"}
1
+ {"version":3,"file":"validators.d.mts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,qBAAiB;AAWhF,eAAO,MAAM,YAAY,MAAO,MAAM,YAAuB,CAAC;AAoB9D,eAAO,MAAM,4BAA4B,SACjC,OAAO,gCAuBd,CAAC;AAEF,eAAO,MAAM,wBAAwB,SAC7B,OAAO,wBAGd,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,OAAO,0BAyDlD,CAAC"}
@@ -1,20 +1,28 @@
1
1
  import { isValidHexAddress } from "@metamask/controller-utils";
2
- import { string, boolean, number, type, is, record, array, nullable, optional, enums, define, intersection, size } from "@metamask/superstruct";
2
+ import { string, boolean, number, type, is, record, array, nullable, optional, enums, define, union } from "@metamask/superstruct";
3
3
  import { isStrictHexString } from "@metamask/utils";
4
4
  import { ActionTypes, BridgeFlag, FeeType } from "../types.mjs";
5
5
  const HexAddressSchema = define('HexAddress', (v) => isValidHexAddress(v, { allowNonPrefixed: false }));
6
6
  const HexStringSchema = define('HexString', (v) => isStrictHexString(v));
7
7
  export const truthyString = (s) => Boolean(s?.length);
8
8
  const TruthyDigitStringSchema = define('TruthyDigitString', (v) => truthyString(v) && Boolean(v.match(/^\d+$/u)));
9
- const SwapsTokenObjectSchema = type({
9
+ const ChainIdSchema = number();
10
+ const BridgeAssetSchema = type({
11
+ chainId: ChainIdSchema,
12
+ address: string(),
13
+ assetId: string(),
14
+ symbol: string(),
15
+ name: string(),
10
16
  decimals: number(),
11
- address: intersection([string(), HexAddressSchema]),
12
- symbol: size(string(), 1, 12),
17
+ icon: optional(string()),
18
+ iconUrl: optional(string()),
13
19
  });
14
20
  export const validateFeatureFlagsResponse = (data) => {
15
21
  const ChainConfigurationSchema = type({
16
22
  isActiveSrc: boolean(),
17
23
  isActiveDest: boolean(),
24
+ refreshRate: optional(number()),
25
+ topAssets: optional(array(string())),
18
26
  });
19
27
  const ConfigSchema = type({
20
28
  refreshRate: number(),
@@ -30,18 +38,9 @@ export const validateFeatureFlagsResponse = (data) => {
30
38
  return is(data, FeatureFlagResponseSchema);
31
39
  };
32
40
  export const validateSwapsTokenObject = (data) => {
33
- return is(data, SwapsTokenObjectSchema);
41
+ return is(data, BridgeAssetSchema);
34
42
  };
35
43
  export const validateQuoteResponse = (data) => {
36
- const ChainIdSchema = number();
37
- const BridgeAssetSchema = type({
38
- chainId: ChainIdSchema,
39
- address: string(),
40
- symbol: string(),
41
- name: string(),
42
- decimals: number(),
43
- icon: optional(string()),
44
- });
45
44
  const FeeDataSchema = type({
46
45
  amount: TruthyDigitStringSchema,
47
46
  asset: BridgeAssetSchema,
@@ -65,10 +64,10 @@ export const validateQuoteResponse = (data) => {
65
64
  const QuoteSchema = type({
66
65
  requestId: string(),
67
66
  srcChainId: ChainIdSchema,
68
- srcAsset: SwapsTokenObjectSchema,
67
+ srcAsset: BridgeAssetSchema,
69
68
  srcTokenAmount: string(),
70
69
  destChainId: ChainIdSchema,
71
- destAsset: SwapsTokenObjectSchema,
70
+ destAsset: BridgeAssetSchema,
72
71
  destTokenAmount: string(),
73
72
  feeData: record(enums(Object.values(FeeType)), FeeDataSchema),
74
73
  bridgeId: string(),
@@ -87,7 +86,7 @@ export const validateQuoteResponse = (data) => {
87
86
  const QuoteResponseSchema = type({
88
87
  quote: QuoteSchema,
89
88
  approval: optional(TxDataSchema),
90
- trade: TxDataSchema,
89
+ trade: union([TxDataSchema, string()]),
91
90
  estimatedProcessingTimeInSeconds: number(),
92
91
  });
93
92
  return is(data, QuoteResponseSchema);
@@ -1 +1 @@
1
- {"version":3,"file":"validators.mjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n intersection,\n size,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { SwapsTokenObject } from '../constants/tokens';\nimport type { FeatureFlagResponse, QuoteResponse } from '../types';\nimport { ActionTypes, BridgeFlag, FeeType } from '../types';\n\nconst HexAddressSchema = define('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = define(\n 'TruthyDigitString',\n (v: unknown) =>\n truthyString(v as string) && Boolean((v as string).match(/^\\d+$/u)),\n);\n\nconst SwapsTokenObjectSchema = type({\n decimals: number(),\n address: intersection([string(), HexAddressSchema]),\n symbol: size(string(), 1, 12),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagResponse => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n });\n\n const ConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n const FeatureFlagResponseSchema = type({\n [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,\n [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,\n });\n\n return is(data, FeatureFlagResponseSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is SwapsTokenObject => {\n return is(data, SwapsTokenObjectSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const ChainIdSchema = number();\n\n const BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n });\n\n const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n });\n\n const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n });\n\n const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n });\n\n const RefuelDataSchema = StepSchema;\n\n const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: SwapsTokenObjectSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: SwapsTokenObjectSchema,\n destTokenAmount: string(),\n feeData: record(enums(Object.values(FeeType)), FeeDataSchema),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n });\n\n const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n });\n\n const QuoteResponseSchema = type({\n quote: QuoteSchema,\n approval: optional(TxDataSchema),\n trade: TxDataSchema,\n estimatedProcessingTimeInSeconds: number(),\n });\n\n return is(data, QuoteResponseSchema);\n};\n"]}
1
+ {"version":3,"file":"validators.mjs","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidHexAddress } from '@metamask/controller-utils';\nimport {\n string,\n boolean,\n number,\n type,\n is,\n record,\n array,\n nullable,\n optional,\n enums,\n define,\n union,\n} from '@metamask/superstruct';\nimport { isStrictHexString } from '@metamask/utils';\n\nimport type { BridgeAsset, FeatureFlagResponse, QuoteResponse } from '../types';\nimport { ActionTypes, BridgeFlag, FeeType } from '../types';\n\nconst HexAddressSchema = define('HexAddress', (v: unknown) =>\n isValidHexAddress(v as string, { allowNonPrefixed: false }),\n);\n\nconst HexStringSchema = define('HexString', (v: unknown) =>\n isStrictHexString(v as string),\n);\n\nexport const truthyString = (s: string) => Boolean(s?.length);\nconst TruthyDigitStringSchema = define(\n 'TruthyDigitString',\n (v: unknown) =>\n truthyString(v as string) && Boolean((v as string).match(/^\\d+$/u)),\n);\n\nconst ChainIdSchema = number();\n\nconst BridgeAssetSchema = type({\n chainId: ChainIdSchema,\n address: string(),\n assetId: string(),\n symbol: string(),\n name: string(),\n decimals: number(),\n icon: optional(string()),\n iconUrl: optional(string()),\n});\n\nexport const validateFeatureFlagsResponse = (\n data: unknown,\n): data is FeatureFlagResponse => {\n const ChainConfigurationSchema = type({\n isActiveSrc: boolean(),\n isActiveDest: boolean(),\n refreshRate: optional(number()),\n topAssets: optional(array(string())),\n });\n\n const ConfigSchema = type({\n refreshRate: number(),\n maxRefreshCount: number(),\n support: boolean(),\n chains: record(string(), ChainConfigurationSchema),\n });\n\n // Create schema for FeatureFlagResponse\n const FeatureFlagResponseSchema = type({\n [BridgeFlag.EXTENSION_CONFIG]: ConfigSchema,\n [BridgeFlag.MOBILE_CONFIG]: ConfigSchema,\n });\n\n return is(data, FeatureFlagResponseSchema);\n};\n\nexport const validateSwapsTokenObject = (\n data: unknown,\n): data is BridgeAsset => {\n return is(data, BridgeAssetSchema);\n};\n\nexport const validateQuoteResponse = (data: unknown): data is QuoteResponse => {\n const FeeDataSchema = type({\n amount: TruthyDigitStringSchema,\n asset: BridgeAssetSchema,\n });\n\n const ProtocolSchema = type({\n name: string(),\n displayName: optional(string()),\n icon: optional(string()),\n });\n\n const StepSchema = type({\n action: enums(Object.values(ActionTypes)),\n srcChainId: ChainIdSchema,\n destChainId: optional(ChainIdSchema),\n srcAsset: BridgeAssetSchema,\n destAsset: BridgeAssetSchema,\n srcAmount: string(),\n destAmount: string(),\n protocol: ProtocolSchema,\n });\n\n const RefuelDataSchema = StepSchema;\n\n const QuoteSchema = type({\n requestId: string(),\n srcChainId: ChainIdSchema,\n srcAsset: BridgeAssetSchema,\n srcTokenAmount: string(),\n destChainId: ChainIdSchema,\n destAsset: BridgeAssetSchema,\n destTokenAmount: string(),\n feeData: record(enums(Object.values(FeeType)), FeeDataSchema),\n bridgeId: string(),\n bridges: array(string()),\n steps: array(StepSchema),\n refuel: optional(RefuelDataSchema),\n });\n\n const TxDataSchema = type({\n chainId: number(),\n to: HexAddressSchema,\n from: HexAddressSchema,\n value: HexStringSchema,\n data: HexStringSchema,\n gasLimit: nullable(number()),\n });\n\n const QuoteResponseSchema = type({\n quote: QuoteSchema,\n approval: optional(TxDataSchema),\n trade: union([TxDataSchema, string()]),\n estimatedProcessingTimeInSeconds: number(),\n });\n\n return is(data, QuoteResponseSchema);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/bridge-controller",
3
- "version": "9.0.0",
3
+ "version": "11.0.0",
4
4
  "description": "Manages bridge-related quote fetching functionality for MetaMask",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -54,17 +54,21 @@
54
54
  "@ethersproject/providers": "^5.7.0",
55
55
  "@metamask/base-controller": "^8.0.0",
56
56
  "@metamask/controller-utils": "^11.6.0",
57
+ "@metamask/keyring-api": "^17.2.0",
57
58
  "@metamask/metamask-eth-abis": "^3.1.1",
59
+ "@metamask/multichain-network-controller": "^0.3.0",
58
60
  "@metamask/polling-controller": "^13.0.0",
61
+ "@metamask/snaps-utils": "^8.10.0",
59
62
  "@metamask/utils": "^11.2.0"
60
63
  },
61
64
  "devDependencies": {
62
65
  "@metamask/accounts-controller": "^27.0.0",
63
66
  "@metamask/auto-changelog": "^3.4.4",
64
67
  "@metamask/eth-json-rpc-provider": "^4.1.8",
65
- "@metamask/network-controller": "^23.0.0",
68
+ "@metamask/network-controller": "^23.1.0",
69
+ "@metamask/snaps-controllers": "^9.19.0",
66
70
  "@metamask/superstruct": "^3.1.0",
67
- "@metamask/transaction-controller": "^51.0.0",
71
+ "@metamask/transaction-controller": "^52.0.0",
68
72
  "@types/jest": "^27.4.1",
69
73
  "deepmerge": "^4.2.2",
70
74
  "jest": "^27.5.1",
@@ -79,7 +83,8 @@
79
83
  "peerDependencies": {
80
84
  "@metamask/accounts-controller": "^27.0.0",
81
85
  "@metamask/network-controller": "^23.0.0",
82
- "@metamask/transaction-controller": "^51.0.0"
86
+ "@metamask/snaps-controllers": "^9.19.0",
87
+ "@metamask/transaction-controller": "^52.0.0"
83
88
  },
84
89
  "engines": {
85
90
  "node": "^18.18 || >=20"