@metamask-previews/controller-utils 11.2.0-preview-cf09c0a → 11.2.0-preview-09a2ffd5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-DBJSLKNR.js +9 -0
- package/dist/chunk-DBJSLKNR.js.map +1 -0
- package/dist/chunk-HL2W4XJY.js +147 -0
- package/dist/chunk-HL2W4XJY.js.map +1 -0
- package/dist/chunk-IPGJBD5N.mjs +306 -0
- package/dist/chunk-IPGJBD5N.mjs.map +1 -0
- package/dist/chunk-M6G3ISXG.js +86 -0
- package/dist/chunk-M6G3ISXG.js.map +1 -0
- package/dist/chunk-OA7K6K6E.js +85 -0
- package/dist/chunk-OA7K6K6E.js.map +1 -0
- package/dist/chunk-QZDAFEVW.mjs +147 -0
- package/dist/chunk-QZDAFEVW.mjs.map +1 -0
- package/dist/chunk-RZFCNKW4.mjs +9 -0
- package/dist/chunk-RZFCNKW4.mjs.map +1 -0
- package/dist/chunk-UQHQI6IV.mjs +85 -0
- package/dist/chunk-UQHQI6IV.mjs.map +1 -0
- package/dist/chunk-VDEIYYE4.mjs +86 -0
- package/dist/chunk-VDEIYYE4.mjs.map +1 -0
- package/dist/chunk-YIBQE73N.js +306 -0
- package/dist/chunk-YIBQE73N.js.map +1 -0
- package/dist/constants.js +56 -0
- package/dist/constants.js.map +1 -0
- package/dist/constants.mjs +54 -133
- package/dist/constants.mjs.map +1 -1
- package/dist/index.js +138 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +137 -4
- package/dist/index.mjs.map +1 -1
- package/dist/logger.js +9 -0
- package/dist/logger.js.map +1 -0
- package/dist/logger.mjs +8 -3
- package/dist/logger.mjs.map +1 -1
- package/dist/siwe.js +12 -0
- package/dist/siwe.js.map +1 -0
- package/dist/siwe.mjs +10 -120
- package/dist/siwe.mjs.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/{constants.d.mts → types/constants.d.ts} +2 -2
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/{index.d.cts → types/index.d.ts} +6 -6
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{logger.d.cts → types/logger.d.ts} +2 -2
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/{siwe.d.mts → types/siwe.d.ts} +2 -2
- package/dist/types/siwe.d.ts.map +1 -0
- package/dist/{types.d.cts → types/types.d.ts} +1 -29
- package/dist/types/types.d.ts.map +1 -0
- package/dist/{util.d.cts → types/util.d.ts} +4 -4
- package/dist/types/util.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +21 -100
- package/dist/types.mjs.map +1 -1
- package/dist/util.js +61 -0
- package/dist/util.js.map +1 -0
- package/dist/util.mjs +59 -488
- package/dist/util.mjs.map +1 -1
- package/package.json +7 -12
- package/dist/constants.cjs +0 -138
- package/dist/constants.cjs.map +0 -1
- package/dist/constants.d.cts +0 -117
- package/dist/constants.d.cts.map +0 -1
- package/dist/constants.d.mts.map +0 -1
- package/dist/index.cjs +0 -48
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts +0 -6
- package/dist/index.d.mts.map +0 -1
- package/dist/logger.cjs +0 -7
- package/dist/logger.cjs.map +0 -1
- package/dist/logger.d.cts.map +0 -1
- package/dist/logger.d.mts +0 -5
- package/dist/logger.d.mts.map +0 -1
- package/dist/siwe.cjs +0 -128
- package/dist/siwe.cjs.map +0 -1
- package/dist/siwe.d.cts +0 -68
- package/dist/siwe.d.cts.map +0 -1
- package/dist/siwe.d.mts.map +0 -1
- package/dist/types.cjs +0 -107
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts +0 -132
- package/dist/types.d.mts.map +0 -1
- package/dist/util.cjs +0 -512
- package/dist/util.cjs.map +0 -1
- package/dist/util.d.cts.map +0 -1
- package/dist/util.d.mts +0 -243
- package/dist/util.d.mts.map +0 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/types.ts
|
|
2
|
+
var InfuraNetworkType = {
|
|
3
|
+
mainnet: "mainnet",
|
|
4
|
+
goerli: "goerli",
|
|
5
|
+
sepolia: "sepolia",
|
|
6
|
+
"linea-goerli": "linea-goerli",
|
|
7
|
+
"linea-sepolia": "linea-sepolia",
|
|
8
|
+
"linea-mainnet": "linea-mainnet"
|
|
9
|
+
};
|
|
10
|
+
var NetworkType = {
|
|
11
|
+
...InfuraNetworkType,
|
|
12
|
+
rpc: "rpc"
|
|
13
|
+
};
|
|
14
|
+
function isNetworkType(val) {
|
|
15
|
+
return Object.values(NetworkType).includes(val);
|
|
16
|
+
}
|
|
17
|
+
function isInfuraNetworkType(value) {
|
|
18
|
+
const infuraNetworkTypes = Object.keys(InfuraNetworkType);
|
|
19
|
+
return infuraNetworkTypes.includes(value);
|
|
20
|
+
}
|
|
21
|
+
var BuiltInNetworkName = /* @__PURE__ */ ((BuiltInNetworkName2) => {
|
|
22
|
+
BuiltInNetworkName2["Mainnet"] = "mainnet";
|
|
23
|
+
BuiltInNetworkName2["Goerli"] = "goerli";
|
|
24
|
+
BuiltInNetworkName2["Sepolia"] = "sepolia";
|
|
25
|
+
BuiltInNetworkName2["LineaGoerli"] = "linea-goerli";
|
|
26
|
+
BuiltInNetworkName2["LineaSepolia"] = "linea-sepolia";
|
|
27
|
+
BuiltInNetworkName2["LineaMainnet"] = "linea-mainnet";
|
|
28
|
+
BuiltInNetworkName2["Aurora"] = "aurora";
|
|
29
|
+
return BuiltInNetworkName2;
|
|
30
|
+
})(BuiltInNetworkName || {});
|
|
31
|
+
var ChainId = {
|
|
32
|
+
["mainnet" /* Mainnet */]: "0x1",
|
|
33
|
+
// toHex(1)
|
|
34
|
+
["goerli" /* Goerli */]: "0x5",
|
|
35
|
+
// toHex(5)
|
|
36
|
+
["sepolia" /* Sepolia */]: "0xaa36a7",
|
|
37
|
+
// toHex(11155111)
|
|
38
|
+
["aurora" /* Aurora */]: "0x4e454152",
|
|
39
|
+
// toHex(1313161554)
|
|
40
|
+
["linea-goerli" /* LineaGoerli */]: "0xe704",
|
|
41
|
+
// toHex(59140)
|
|
42
|
+
["linea-sepolia" /* LineaSepolia */]: "0xe705",
|
|
43
|
+
// toHex(59141)
|
|
44
|
+
["linea-mainnet" /* LineaMainnet */]: "0xe708"
|
|
45
|
+
// toHex(59144)
|
|
46
|
+
};
|
|
47
|
+
var NetworksTicker = /* @__PURE__ */ ((NetworksTicker2) => {
|
|
48
|
+
NetworksTicker2["mainnet"] = "ETH";
|
|
49
|
+
NetworksTicker2["goerli"] = "GoerliETH";
|
|
50
|
+
NetworksTicker2["sepolia"] = "SepoliaETH";
|
|
51
|
+
NetworksTicker2["linea-goerli"] = "LineaETH";
|
|
52
|
+
NetworksTicker2["linea-sepolia"] = "LineaETH";
|
|
53
|
+
NetworksTicker2["linea-mainnet"] = "ETH";
|
|
54
|
+
NetworksTicker2["rpc"] = "";
|
|
55
|
+
return NetworksTicker2;
|
|
56
|
+
})(NetworksTicker || {});
|
|
57
|
+
var BlockExplorerUrl = {
|
|
58
|
+
["mainnet" /* Mainnet */]: "https://etherscan.io",
|
|
59
|
+
["goerli" /* Goerli */]: "https://goerli.etherscan.io",
|
|
60
|
+
["sepolia" /* Sepolia */]: "https://sepolia.etherscan.io",
|
|
61
|
+
["linea-goerli" /* LineaGoerli */]: "https://goerli.lineascan.build",
|
|
62
|
+
["linea-sepolia" /* LineaSepolia */]: "https://sepolia.lineascan.build",
|
|
63
|
+
["linea-mainnet" /* LineaMainnet */]: "https://lineascan.build"
|
|
64
|
+
};
|
|
65
|
+
var NetworkNickname = {
|
|
66
|
+
["mainnet" /* Mainnet */]: "Mainnet",
|
|
67
|
+
["goerli" /* Goerli */]: "Goerli",
|
|
68
|
+
["sepolia" /* Sepolia */]: "Sepolia",
|
|
69
|
+
["linea-goerli" /* LineaGoerli */]: "Linea Goerli",
|
|
70
|
+
["linea-sepolia" /* LineaSepolia */]: "Linea Sepolia",
|
|
71
|
+
["linea-mainnet" /* LineaMainnet */]: "Linea Mainnet"
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
exports.InfuraNetworkType = InfuraNetworkType; exports.NetworkType = NetworkType; exports.isNetworkType = isNetworkType; exports.isInfuraNetworkType = isInfuraNetworkType; exports.BuiltInNetworkName = BuiltInNetworkName; exports.ChainId = ChainId; exports.NetworksTicker = NetworksTicker; exports.BlockExplorerUrl = BlockExplorerUrl; exports.NetworkNickname = NetworkNickname;
|
|
85
|
+
//# sourceMappingURL=chunk-OA7K6K6E.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"names":["BuiltInNetworkName","NetworksTicker"],"mappings":";AAGO,IAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;AAQO,IAAM,cAAc;AAAA,EACzB,GAAG;AAAA,EACH,KAAK;AACP;AAUO,SAAS,cAAc,KAAiC;AAC7D,SAAO,OAAO,OAAO,WAAW,EAAE,SAAS,GAAkB;AAC/D;AASO,SAAS,oBACd,OAC4B;AAC5B,QAAM,qBAAgC,OAAO,KAAK,iBAAiB;AACnE,SAAO,mBAAmB,SAAS,KAAK;AAC1C;AAOO,IAAK,qBAAL,kBAAKA,wBAAL;AACL,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,YAAS;AACT,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,iBAAc;AACd,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,YAAS;AAPC,SAAAA;AAAA,GAAA;AAeL,IAAM,UAAU;AAAA,EACrB,CAAC,uBAA0B,GAAG;AAAA;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA;AAAA,EAC7B,CAAC,gCAA8B,GAAG;AAAA;AAAA,EAClC,CAAC,kCAA+B,GAAG;AAAA;AAAA,EACnC,CAAC,kCAA+B,GAAG;AAAA;AACrC;AAGO,IAAK,iBAAL,kBAAKC,oBAAL;AAGL,EAAAA,gBAAA,aAAU;AAGV,EAAAA,gBAAA,YAAS;AAGT,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,kBAAiB;AACjB,EAAAA,gBAAA,mBAAkB;AAClB,EAAAA,gBAAA,mBAAkB;AAGlB,EAAAA,gBAAA,SAAM;AAfI,SAAAA;AAAA,GAAA;AAkBL,IAAM,mBAAmB;AAAA,EAC9B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,gCAA8B,GAAG;AAAA,EAClC,CAAC,kCAA+B,GAAG;AAAA,EACnC,CAAC,kCAA+B,GAAG;AACrC;AAIO,IAAM,kBAAkB;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,gCAA8B,GAAG;AAAA,EAClC,CAAC,kCAA+B,GAAG;AAAA,EACnC,CAAC,kCAA+B,GAAG;AACrC","sourcesContent":["/**\n * The names of built-in Infura networks\n */\nexport const InfuraNetworkType = {\n mainnet: 'mainnet',\n goerli: 'goerli',\n sepolia: 'sepolia',\n 'linea-goerli': 'linea-goerli',\n 'linea-sepolia': 'linea-sepolia',\n 'linea-mainnet': 'linea-mainnet',\n} as const;\n\nexport type InfuraNetworkType =\n (typeof InfuraNetworkType)[keyof typeof InfuraNetworkType];\n\n/**\n * The \"network type\"; either the name of a built-in network, or \"rpc\" for custom networks.\n */\nexport const NetworkType = {\n ...InfuraNetworkType,\n rpc: 'rpc',\n} as const;\n\nexport type NetworkType = (typeof NetworkType)[keyof typeof NetworkType];\n\n/**\n * A helper to determine whether a given input is NetworkType.\n *\n * @param val - the value to check whether it is NetworkType or not.\n * @returns boolean indicating whether or not the argument is NetworkType.\n */\nexport function isNetworkType(val: string): val is NetworkType {\n return Object.values(NetworkType).includes(val as NetworkType);\n}\n\n/**\n * A type guard to determine whether the input is an InfuraNetworkType.\n *\n * @param value - The value to check.\n * @returns True if the given value is within the InfuraNetworkType enum,\n * false otherwise.\n */\nexport function isInfuraNetworkType(\n value: unknown,\n): value is InfuraNetworkType {\n const infuraNetworkTypes: unknown[] = Object.keys(InfuraNetworkType);\n return infuraNetworkTypes.includes(value);\n}\n\n/**\n * Names of networks built into the wallet.\n *\n * This includes both Infura and non-Infura networks.\n */\nexport enum BuiltInNetworkName {\n Mainnet = 'mainnet',\n Goerli = 'goerli',\n Sepolia = 'sepolia',\n LineaGoerli = 'linea-goerli',\n LineaSepolia = 'linea-sepolia',\n LineaMainnet = 'linea-mainnet',\n Aurora = 'aurora',\n}\n\n/**\n * Decimal string chain IDs of built-in networks, by name.\n *\n * `toHex` not invoked to avoid cyclic dependency\n */\nexport const ChainId = {\n [BuiltInNetworkName.Mainnet]: '0x1', // toHex(1)\n [BuiltInNetworkName.Goerli]: '0x5', // toHex(5)\n [BuiltInNetworkName.Sepolia]: '0xaa36a7', // toHex(11155111)\n [BuiltInNetworkName.Aurora]: '0x4e454152', // toHex(1313161554)\n [BuiltInNetworkName.LineaGoerli]: '0xe704', // toHex(59140)\n [BuiltInNetworkName.LineaSepolia]: '0xe705', // toHex(59141)\n [BuiltInNetworkName.LineaMainnet]: '0xe708', // toHex(59144)\n} as const;\nexport type ChainId = (typeof ChainId)[keyof typeof ChainId];\n\nexport enum NetworksTicker {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n mainnet = 'ETH',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n goerli = 'GoerliETH',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n sepolia = 'SepoliaETH',\n 'linea-goerli' = 'LineaETH',\n 'linea-sepolia' = 'LineaETH',\n 'linea-mainnet' = 'ETH',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n rpc = '',\n}\n\nexport const BlockExplorerUrl = {\n [BuiltInNetworkName.Mainnet]: 'https://etherscan.io',\n [BuiltInNetworkName.Goerli]: 'https://goerli.etherscan.io',\n [BuiltInNetworkName.Sepolia]: 'https://sepolia.etherscan.io',\n [BuiltInNetworkName.LineaGoerli]: 'https://goerli.lineascan.build',\n [BuiltInNetworkName.LineaSepolia]: 'https://sepolia.lineascan.build',\n [BuiltInNetworkName.LineaMainnet]: 'https://lineascan.build',\n} as const satisfies Record<InfuraNetworkType, string>;\nexport type BlockExplorerUrl =\n (typeof BlockExplorerUrl)[keyof typeof BlockExplorerUrl];\n\nexport const NetworkNickname = {\n [BuiltInNetworkName.Mainnet]: 'Mainnet',\n [BuiltInNetworkName.Goerli]: 'Goerli',\n [BuiltInNetworkName.Sepolia]: 'Sepolia',\n [BuiltInNetworkName.LineaGoerli]: 'Linea Goerli',\n [BuiltInNetworkName.LineaSepolia]: 'Linea Sepolia',\n [BuiltInNetworkName.LineaMainnet]: 'Linea Mainnet',\n} as const satisfies Record<InfuraNetworkType, string>;\nexport type NetworkNickname =\n (typeof NetworkNickname)[keyof typeof NetworkNickname];\n\n/**\n * Makes a selection of keys in a Record optional.\n *\n * @template Type - The Record that you want to operate on.\n * @template Key - The union of keys you want to make optional.\n */\n// TODO: Move to @metamask/utils\nexport type Partialize<Type, Key extends keyof Type> = Omit<Type, Key> &\n Partial<Pick<Type, Key>>;\n"]}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChainId,
|
|
3
|
+
NetworkType
|
|
4
|
+
} from "./chunk-UQHQI6IV.mjs";
|
|
5
|
+
|
|
6
|
+
// src/constants.ts
|
|
7
|
+
var RPC = "rpc";
|
|
8
|
+
var FALL_BACK_VS_CURRENCY = "ETH";
|
|
9
|
+
var IPFS_DEFAULT_GATEWAY_URL = "https://cloudflare-ipfs.com/ipfs/";
|
|
10
|
+
var GANACHE_CHAIN_ID = "0x539";
|
|
11
|
+
var MAX_SAFE_CHAIN_ID = 4503599627370476;
|
|
12
|
+
var ERC721 = "ERC721";
|
|
13
|
+
var ERC1155 = "ERC1155";
|
|
14
|
+
var ERC20 = "ERC20";
|
|
15
|
+
var ERC721_INTERFACE_ID = "0x80ac58cd";
|
|
16
|
+
var ERC721_METADATA_INTERFACE_ID = "0x5b5e139f";
|
|
17
|
+
var ERC721_ENUMERABLE_INTERFACE_ID = "0x780e9d63";
|
|
18
|
+
var ERC1155_INTERFACE_ID = "0xd9b67a26";
|
|
19
|
+
var ERC1155_METADATA_URI_INTERFACE_ID = "0x0e89341c";
|
|
20
|
+
var ERC1155_TOKEN_RECEIVER_INTERFACE_ID = "0x4e2312e0";
|
|
21
|
+
var GWEI = "gwei";
|
|
22
|
+
var ASSET_TYPES = {
|
|
23
|
+
NATIVE: "NATIVE",
|
|
24
|
+
TOKEN: "TOKEN",
|
|
25
|
+
NFT: "NFT",
|
|
26
|
+
UNKNOWN: "UNKNOWN"
|
|
27
|
+
};
|
|
28
|
+
var TESTNET_TICKER_SYMBOLS = {
|
|
29
|
+
GOERLI: "GoerliETH",
|
|
30
|
+
SEPOLIA: "SepoliaETH",
|
|
31
|
+
LINEA_GOERLI: "LineaETH",
|
|
32
|
+
LINEA_SEPOLIA: "LineaETH"
|
|
33
|
+
};
|
|
34
|
+
var BUILT_IN_NETWORKS = {
|
|
35
|
+
[NetworkType.goerli]: {
|
|
36
|
+
chainId: ChainId.goerli,
|
|
37
|
+
ticker: "GoerliETH" /* goerli */,
|
|
38
|
+
rpcPrefs: {
|
|
39
|
+
blockExplorerUrl: `https://${NetworkType.goerli}.etherscan.io`
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
[NetworkType.sepolia]: {
|
|
43
|
+
chainId: ChainId.sepolia,
|
|
44
|
+
ticker: "SepoliaETH" /* sepolia */,
|
|
45
|
+
rpcPrefs: {
|
|
46
|
+
blockExplorerUrl: `https://${NetworkType.sepolia}.etherscan.io`
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
[NetworkType.mainnet]: {
|
|
50
|
+
chainId: ChainId.mainnet,
|
|
51
|
+
ticker: "ETH" /* mainnet */,
|
|
52
|
+
rpcPrefs: {
|
|
53
|
+
blockExplorerUrl: "https://etherscan.io"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
[NetworkType["linea-goerli"]]: {
|
|
57
|
+
chainId: ChainId["linea-goerli"],
|
|
58
|
+
ticker: "LineaETH" /* linea-goerli */,
|
|
59
|
+
rpcPrefs: {
|
|
60
|
+
blockExplorerUrl: "https://goerli.lineascan.build"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
[NetworkType["linea-sepolia"]]: {
|
|
64
|
+
chainId: ChainId["linea-sepolia"],
|
|
65
|
+
ticker: "LineaETH" /* linea-sepolia */,
|
|
66
|
+
rpcPrefs: {
|
|
67
|
+
blockExplorerUrl: "https://sepolia.lineascan.build"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
[NetworkType["linea-mainnet"]]: {
|
|
71
|
+
chainId: ChainId["linea-mainnet"],
|
|
72
|
+
ticker: "ETH" /* linea-mainnet */,
|
|
73
|
+
rpcPrefs: {
|
|
74
|
+
blockExplorerUrl: "https://lineascan.build"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
[NetworkType.rpc]: {
|
|
78
|
+
chainId: void 0,
|
|
79
|
+
blockExplorerUrl: void 0,
|
|
80
|
+
ticker: void 0,
|
|
81
|
+
rpcPrefs: void 0
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
var OPENSEA_PROXY_URL = "https://proxy.api.cx.metamask.io/opensea/v1/api/v2";
|
|
85
|
+
var NFT_API_BASE_URL = "https://nft.api.cx.metamask.io";
|
|
86
|
+
var NFT_API_VERSION = "1";
|
|
87
|
+
var NFT_API_TIMEOUT = 15e3;
|
|
88
|
+
var ORIGIN_METAMASK = "metamask";
|
|
89
|
+
var ApprovalType = /* @__PURE__ */ ((ApprovalType2) => {
|
|
90
|
+
ApprovalType2["AddEthereumChain"] = "wallet_addEthereumChain";
|
|
91
|
+
ApprovalType2["ConnectAccounts"] = "connect_accounts";
|
|
92
|
+
ApprovalType2["EthDecrypt"] = "eth_decrypt";
|
|
93
|
+
ApprovalType2["EthGetEncryptionPublicKey"] = "eth_getEncryptionPublicKey";
|
|
94
|
+
ApprovalType2["EthSignTypedData"] = "eth_signTypedData";
|
|
95
|
+
ApprovalType2["PersonalSign"] = "personal_sign";
|
|
96
|
+
ApprovalType2["ResultError"] = "result_error";
|
|
97
|
+
ApprovalType2["ResultSuccess"] = "result_success";
|
|
98
|
+
ApprovalType2["SnapDialogAlert"] = "snap_dialog:alert";
|
|
99
|
+
ApprovalType2["SnapDialogConfirmation"] = "snap_dialog:confirmation";
|
|
100
|
+
ApprovalType2["SnapDialogPrompt"] = "snap_dialog:prompt";
|
|
101
|
+
ApprovalType2["SnapDialogDefault"] = "snap_dialog";
|
|
102
|
+
ApprovalType2["SwitchEthereumChain"] = "wallet_switchEthereumChain";
|
|
103
|
+
ApprovalType2["Transaction"] = "transaction";
|
|
104
|
+
ApprovalType2["Unlock"] = "unlock";
|
|
105
|
+
ApprovalType2["WalletConnect"] = "wallet_connect";
|
|
106
|
+
ApprovalType2["WalletRequestPermissions"] = "wallet_requestPermissions";
|
|
107
|
+
ApprovalType2["WatchAsset"] = "wallet_watchAsset";
|
|
108
|
+
return ApprovalType2;
|
|
109
|
+
})(ApprovalType || {});
|
|
110
|
+
var CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP = {
|
|
111
|
+
[ChainId.goerli]: "goerli" /* Goerli */,
|
|
112
|
+
[ChainId.sepolia]: "sepolia" /* Sepolia */,
|
|
113
|
+
[ChainId.mainnet]: "mainnet" /* Mainnet */,
|
|
114
|
+
[ChainId["linea-goerli"]]: "linea-goerli" /* LineaGoerli */,
|
|
115
|
+
[ChainId["linea-sepolia"]]: "linea-sepolia" /* LineaSepolia */,
|
|
116
|
+
[ChainId["linea-mainnet"]]: "linea-mainnet" /* LineaMainnet */,
|
|
117
|
+
[ChainId.aurora]: "aurora" /* Aurora */
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export {
|
|
121
|
+
RPC,
|
|
122
|
+
FALL_BACK_VS_CURRENCY,
|
|
123
|
+
IPFS_DEFAULT_GATEWAY_URL,
|
|
124
|
+
GANACHE_CHAIN_ID,
|
|
125
|
+
MAX_SAFE_CHAIN_ID,
|
|
126
|
+
ERC721,
|
|
127
|
+
ERC1155,
|
|
128
|
+
ERC20,
|
|
129
|
+
ERC721_INTERFACE_ID,
|
|
130
|
+
ERC721_METADATA_INTERFACE_ID,
|
|
131
|
+
ERC721_ENUMERABLE_INTERFACE_ID,
|
|
132
|
+
ERC1155_INTERFACE_ID,
|
|
133
|
+
ERC1155_METADATA_URI_INTERFACE_ID,
|
|
134
|
+
ERC1155_TOKEN_RECEIVER_INTERFACE_ID,
|
|
135
|
+
GWEI,
|
|
136
|
+
ASSET_TYPES,
|
|
137
|
+
TESTNET_TICKER_SYMBOLS,
|
|
138
|
+
BUILT_IN_NETWORKS,
|
|
139
|
+
OPENSEA_PROXY_URL,
|
|
140
|
+
NFT_API_BASE_URL,
|
|
141
|
+
NFT_API_VERSION,
|
|
142
|
+
NFT_API_TIMEOUT,
|
|
143
|
+
ORIGIN_METAMASK,
|
|
144
|
+
ApprovalType,
|
|
145
|
+
CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=chunk-QZDAFEVW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"sourcesContent":["import {\n NetworkType,\n NetworksTicker,\n ChainId,\n BuiltInNetworkName,\n} from './types';\n\nexport const RPC = 'rpc';\nexport const FALL_BACK_VS_CURRENCY = 'ETH';\nexport const IPFS_DEFAULT_GATEWAY_URL = 'https://cloudflare-ipfs.com/ipfs/';\n\n// NETWORKS ID\n// `toHex` not invoked to avoid cyclic dependency\nexport const GANACHE_CHAIN_ID = '0x539'; // toHex(1337)\n/**\n * The largest possible chain ID we can handle.\n * Explanation: https://gist.github.com/rekmarks/a47bd5f2525936c4b8eee31a16345553\n */\nexport const MAX_SAFE_CHAIN_ID = 4503599627370476;\n\n// TOKEN STANDARDS\nexport const ERC721 = 'ERC721';\nexport const ERC1155 = 'ERC1155';\nexport const ERC20 = 'ERC20';\n\n// TOKEN INTERFACE IDS\nexport const ERC721_INTERFACE_ID = '0x80ac58cd';\nexport const ERC721_METADATA_INTERFACE_ID = '0x5b5e139f';\nexport const ERC721_ENUMERABLE_INTERFACE_ID = '0x780e9d63';\nexport const ERC1155_INTERFACE_ID = '0xd9b67a26';\nexport const ERC1155_METADATA_URI_INTERFACE_ID = '0x0e89341c';\nexport const ERC1155_TOKEN_RECEIVER_INTERFACE_ID = '0x4e2312e0';\n\n// UNITS\nexport const GWEI = 'gwei';\n\n// ASSET TYPES\nexport const ASSET_TYPES = {\n NATIVE: 'NATIVE',\n TOKEN: 'TOKEN',\n NFT: 'NFT',\n UNKNOWN: 'UNKNOWN',\n};\n\n// TICKER SYMBOLS\nexport const TESTNET_TICKER_SYMBOLS = {\n GOERLI: 'GoerliETH',\n SEPOLIA: 'SepoliaETH',\n LINEA_GOERLI: 'LineaETH',\n LINEA_SEPOLIA: 'LineaETH',\n};\n\n/**\n * Map of all build-in Infura networks to their network, ticker and chain IDs.\n */\nexport const BUILT_IN_NETWORKS = {\n [NetworkType.goerli]: {\n chainId: ChainId.goerli,\n ticker: NetworksTicker.goerli,\n rpcPrefs: {\n blockExplorerUrl: `https://${NetworkType.goerli}.etherscan.io`,\n },\n },\n [NetworkType.sepolia]: {\n chainId: ChainId.sepolia,\n ticker: NetworksTicker.sepolia,\n rpcPrefs: {\n blockExplorerUrl: `https://${NetworkType.sepolia}.etherscan.io`,\n },\n },\n [NetworkType.mainnet]: {\n chainId: ChainId.mainnet,\n ticker: NetworksTicker.mainnet,\n rpcPrefs: {\n blockExplorerUrl: 'https://etherscan.io',\n },\n },\n [NetworkType['linea-goerli']]: {\n chainId: ChainId['linea-goerli'],\n ticker: NetworksTicker['linea-goerli'],\n rpcPrefs: {\n blockExplorerUrl: 'https://goerli.lineascan.build',\n },\n },\n [NetworkType['linea-sepolia']]: {\n chainId: ChainId['linea-sepolia'],\n ticker: NetworksTicker['linea-sepolia'],\n rpcPrefs: {\n blockExplorerUrl: 'https://sepolia.lineascan.build',\n },\n },\n [NetworkType['linea-mainnet']]: {\n chainId: ChainId['linea-mainnet'],\n ticker: NetworksTicker['linea-mainnet'],\n rpcPrefs: {\n blockExplorerUrl: 'https://lineascan.build',\n },\n },\n [NetworkType.rpc]: {\n chainId: undefined,\n blockExplorerUrl: undefined,\n ticker: undefined,\n rpcPrefs: undefined,\n },\n} as const;\n\n// APIs\nexport const OPENSEA_PROXY_URL =\n 'https://proxy.api.cx.metamask.io/opensea/v1/api/v2';\n\nexport const NFT_API_BASE_URL = 'https://nft.api.cx.metamask.io';\n\nexport const NFT_API_VERSION = '1';\n\nexport const NFT_API_TIMEOUT = 15000;\n\n// Default origin for controllers\nexport const ORIGIN_METAMASK = 'metamask';\n\n/**\n * Approval request types for various operations.\n * These types are used by different controllers to create and manage\n * approval requests consistently.\n */\nexport enum ApprovalType {\n AddEthereumChain = 'wallet_addEthereumChain',\n ConnectAccounts = 'connect_accounts',\n EthDecrypt = 'eth_decrypt',\n EthGetEncryptionPublicKey = 'eth_getEncryptionPublicKey',\n EthSignTypedData = 'eth_signTypedData',\n PersonalSign = 'personal_sign',\n ResultError = 'result_error',\n ResultSuccess = 'result_success',\n SnapDialogAlert = 'snap_dialog:alert',\n SnapDialogConfirmation = 'snap_dialog:confirmation',\n SnapDialogPrompt = 'snap_dialog:prompt',\n SnapDialogDefault = 'snap_dialog',\n SwitchEthereumChain = 'wallet_switchEthereumChain',\n Transaction = 'transaction',\n Unlock = 'unlock',\n WalletConnect = 'wallet_connect',\n WalletRequestPermissions = 'wallet_requestPermissions',\n WatchAsset = 'wallet_watchAsset',\n}\n\nexport const CHAIN_ID_TO_ETHERS_NETWORK_NAME_MAP: Record<\n ChainId,\n BuiltInNetworkName\n> = {\n [ChainId.goerli]: BuiltInNetworkName.Goerli,\n [ChainId.sepolia]: BuiltInNetworkName.Sepolia,\n [ChainId.mainnet]: BuiltInNetworkName.Mainnet,\n [ChainId['linea-goerli']]: BuiltInNetworkName.LineaGoerli,\n [ChainId['linea-sepolia']]: BuiltInNetworkName.LineaSepolia,\n [ChainId['linea-mainnet']]: BuiltInNetworkName.LineaMainnet,\n [ChainId.aurora]: BuiltInNetworkName.Aurora,\n};\n"],"mappings":"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","names":["ApprovalType"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/logger.ts"],"sourcesContent":["import { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nexport const projectLogger = createProjectLogger('controller-utils');\n\nexport { createModuleLogger };\n"],"mappings":";AAAA,SAAS,qBAAqB,0BAA0B;AAEjD,IAAM,gBAAgB,oBAAoB,kBAAkB;","names":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// src/types.ts
|
|
2
|
+
var InfuraNetworkType = {
|
|
3
|
+
mainnet: "mainnet",
|
|
4
|
+
goerli: "goerli",
|
|
5
|
+
sepolia: "sepolia",
|
|
6
|
+
"linea-goerli": "linea-goerli",
|
|
7
|
+
"linea-sepolia": "linea-sepolia",
|
|
8
|
+
"linea-mainnet": "linea-mainnet"
|
|
9
|
+
};
|
|
10
|
+
var NetworkType = {
|
|
11
|
+
...InfuraNetworkType,
|
|
12
|
+
rpc: "rpc"
|
|
13
|
+
};
|
|
14
|
+
function isNetworkType(val) {
|
|
15
|
+
return Object.values(NetworkType).includes(val);
|
|
16
|
+
}
|
|
17
|
+
function isInfuraNetworkType(value) {
|
|
18
|
+
const infuraNetworkTypes = Object.keys(InfuraNetworkType);
|
|
19
|
+
return infuraNetworkTypes.includes(value);
|
|
20
|
+
}
|
|
21
|
+
var BuiltInNetworkName = /* @__PURE__ */ ((BuiltInNetworkName2) => {
|
|
22
|
+
BuiltInNetworkName2["Mainnet"] = "mainnet";
|
|
23
|
+
BuiltInNetworkName2["Goerli"] = "goerli";
|
|
24
|
+
BuiltInNetworkName2["Sepolia"] = "sepolia";
|
|
25
|
+
BuiltInNetworkName2["LineaGoerli"] = "linea-goerli";
|
|
26
|
+
BuiltInNetworkName2["LineaSepolia"] = "linea-sepolia";
|
|
27
|
+
BuiltInNetworkName2["LineaMainnet"] = "linea-mainnet";
|
|
28
|
+
BuiltInNetworkName2["Aurora"] = "aurora";
|
|
29
|
+
return BuiltInNetworkName2;
|
|
30
|
+
})(BuiltInNetworkName || {});
|
|
31
|
+
var ChainId = {
|
|
32
|
+
["mainnet" /* Mainnet */]: "0x1",
|
|
33
|
+
// toHex(1)
|
|
34
|
+
["goerli" /* Goerli */]: "0x5",
|
|
35
|
+
// toHex(5)
|
|
36
|
+
["sepolia" /* Sepolia */]: "0xaa36a7",
|
|
37
|
+
// toHex(11155111)
|
|
38
|
+
["aurora" /* Aurora */]: "0x4e454152",
|
|
39
|
+
// toHex(1313161554)
|
|
40
|
+
["linea-goerli" /* LineaGoerli */]: "0xe704",
|
|
41
|
+
// toHex(59140)
|
|
42
|
+
["linea-sepolia" /* LineaSepolia */]: "0xe705",
|
|
43
|
+
// toHex(59141)
|
|
44
|
+
["linea-mainnet" /* LineaMainnet */]: "0xe708"
|
|
45
|
+
// toHex(59144)
|
|
46
|
+
};
|
|
47
|
+
var NetworksTicker = /* @__PURE__ */ ((NetworksTicker2) => {
|
|
48
|
+
NetworksTicker2["mainnet"] = "ETH";
|
|
49
|
+
NetworksTicker2["goerli"] = "GoerliETH";
|
|
50
|
+
NetworksTicker2["sepolia"] = "SepoliaETH";
|
|
51
|
+
NetworksTicker2["linea-goerli"] = "LineaETH";
|
|
52
|
+
NetworksTicker2["linea-sepolia"] = "LineaETH";
|
|
53
|
+
NetworksTicker2["linea-mainnet"] = "ETH";
|
|
54
|
+
NetworksTicker2["rpc"] = "";
|
|
55
|
+
return NetworksTicker2;
|
|
56
|
+
})(NetworksTicker || {});
|
|
57
|
+
var BlockExplorerUrl = {
|
|
58
|
+
["mainnet" /* Mainnet */]: "https://etherscan.io",
|
|
59
|
+
["goerli" /* Goerli */]: "https://goerli.etherscan.io",
|
|
60
|
+
["sepolia" /* Sepolia */]: "https://sepolia.etherscan.io",
|
|
61
|
+
["linea-goerli" /* LineaGoerli */]: "https://goerli.lineascan.build",
|
|
62
|
+
["linea-sepolia" /* LineaSepolia */]: "https://sepolia.lineascan.build",
|
|
63
|
+
["linea-mainnet" /* LineaMainnet */]: "https://lineascan.build"
|
|
64
|
+
};
|
|
65
|
+
var NetworkNickname = {
|
|
66
|
+
["mainnet" /* Mainnet */]: "Mainnet",
|
|
67
|
+
["goerli" /* Goerli */]: "Goerli",
|
|
68
|
+
["sepolia" /* Sepolia */]: "Sepolia",
|
|
69
|
+
["linea-goerli" /* LineaGoerli */]: "Linea Goerli",
|
|
70
|
+
["linea-sepolia" /* LineaSepolia */]: "Linea Sepolia",
|
|
71
|
+
["linea-mainnet" /* LineaMainnet */]: "Linea Mainnet"
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export {
|
|
75
|
+
InfuraNetworkType,
|
|
76
|
+
NetworkType,
|
|
77
|
+
isNetworkType,
|
|
78
|
+
isInfuraNetworkType,
|
|
79
|
+
BuiltInNetworkName,
|
|
80
|
+
ChainId,
|
|
81
|
+
NetworksTicker,
|
|
82
|
+
BlockExplorerUrl,
|
|
83
|
+
NetworkNickname
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=chunk-UQHQI6IV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["/**\n * The names of built-in Infura networks\n */\nexport const InfuraNetworkType = {\n mainnet: 'mainnet',\n goerli: 'goerli',\n sepolia: 'sepolia',\n 'linea-goerli': 'linea-goerli',\n 'linea-sepolia': 'linea-sepolia',\n 'linea-mainnet': 'linea-mainnet',\n} as const;\n\nexport type InfuraNetworkType =\n (typeof InfuraNetworkType)[keyof typeof InfuraNetworkType];\n\n/**\n * The \"network type\"; either the name of a built-in network, or \"rpc\" for custom networks.\n */\nexport const NetworkType = {\n ...InfuraNetworkType,\n rpc: 'rpc',\n} as const;\n\nexport type NetworkType = (typeof NetworkType)[keyof typeof NetworkType];\n\n/**\n * A helper to determine whether a given input is NetworkType.\n *\n * @param val - the value to check whether it is NetworkType or not.\n * @returns boolean indicating whether or not the argument is NetworkType.\n */\nexport function isNetworkType(val: string): val is NetworkType {\n return Object.values(NetworkType).includes(val as NetworkType);\n}\n\n/**\n * A type guard to determine whether the input is an InfuraNetworkType.\n *\n * @param value - The value to check.\n * @returns True if the given value is within the InfuraNetworkType enum,\n * false otherwise.\n */\nexport function isInfuraNetworkType(\n value: unknown,\n): value is InfuraNetworkType {\n const infuraNetworkTypes: unknown[] = Object.keys(InfuraNetworkType);\n return infuraNetworkTypes.includes(value);\n}\n\n/**\n * Names of networks built into the wallet.\n *\n * This includes both Infura and non-Infura networks.\n */\nexport enum BuiltInNetworkName {\n Mainnet = 'mainnet',\n Goerli = 'goerli',\n Sepolia = 'sepolia',\n LineaGoerli = 'linea-goerli',\n LineaSepolia = 'linea-sepolia',\n LineaMainnet = 'linea-mainnet',\n Aurora = 'aurora',\n}\n\n/**\n * Decimal string chain IDs of built-in networks, by name.\n *\n * `toHex` not invoked to avoid cyclic dependency\n */\nexport const ChainId = {\n [BuiltInNetworkName.Mainnet]: '0x1', // toHex(1)\n [BuiltInNetworkName.Goerli]: '0x5', // toHex(5)\n [BuiltInNetworkName.Sepolia]: '0xaa36a7', // toHex(11155111)\n [BuiltInNetworkName.Aurora]: '0x4e454152', // toHex(1313161554)\n [BuiltInNetworkName.LineaGoerli]: '0xe704', // toHex(59140)\n [BuiltInNetworkName.LineaSepolia]: '0xe705', // toHex(59141)\n [BuiltInNetworkName.LineaMainnet]: '0xe708', // toHex(59144)\n} as const;\nexport type ChainId = (typeof ChainId)[keyof typeof ChainId];\n\nexport enum NetworksTicker {\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n mainnet = 'ETH',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n goerli = 'GoerliETH',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n sepolia = 'SepoliaETH',\n 'linea-goerli' = 'LineaETH',\n 'linea-sepolia' = 'LineaETH',\n 'linea-mainnet' = 'ETH',\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n rpc = '',\n}\n\nexport const BlockExplorerUrl = {\n [BuiltInNetworkName.Mainnet]: 'https://etherscan.io',\n [BuiltInNetworkName.Goerli]: 'https://goerli.etherscan.io',\n [BuiltInNetworkName.Sepolia]: 'https://sepolia.etherscan.io',\n [BuiltInNetworkName.LineaGoerli]: 'https://goerli.lineascan.build',\n [BuiltInNetworkName.LineaSepolia]: 'https://sepolia.lineascan.build',\n [BuiltInNetworkName.LineaMainnet]: 'https://lineascan.build',\n} as const satisfies Record<InfuraNetworkType, string>;\nexport type BlockExplorerUrl =\n (typeof BlockExplorerUrl)[keyof typeof BlockExplorerUrl];\n\nexport const NetworkNickname = {\n [BuiltInNetworkName.Mainnet]: 'Mainnet',\n [BuiltInNetworkName.Goerli]: 'Goerli',\n [BuiltInNetworkName.Sepolia]: 'Sepolia',\n [BuiltInNetworkName.LineaGoerli]: 'Linea Goerli',\n [BuiltInNetworkName.LineaSepolia]: 'Linea Sepolia',\n [BuiltInNetworkName.LineaMainnet]: 'Linea Mainnet',\n} as const satisfies Record<InfuraNetworkType, string>;\nexport type NetworkNickname =\n (typeof NetworkNickname)[keyof typeof NetworkNickname];\n\n/**\n * Makes a selection of keys in a Record optional.\n *\n * @template Type - The Record that you want to operate on.\n * @template Key - The union of keys you want to make optional.\n */\n// TODO: Move to @metamask/utils\nexport type Partialize<Type, Key extends keyof Type> = Omit<Type, Key> &\n Partial<Pick<Type, Key>>;\n"],"mappings":";AAGO,IAAM,oBAAoB;AAAA,EAC/B,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,iBAAiB;AACnB;AAQO,IAAM,cAAc;AAAA,EACzB,GAAG;AAAA,EACH,KAAK;AACP;AAUO,SAAS,cAAc,KAAiC;AAC7D,SAAO,OAAO,OAAO,WAAW,EAAE,SAAS,GAAkB;AAC/D;AASO,SAAS,oBACd,OAC4B;AAC5B,QAAM,qBAAgC,OAAO,KAAK,iBAAiB;AACnE,SAAO,mBAAmB,SAAS,KAAK;AAC1C;AAOO,IAAK,qBAAL,kBAAKA,wBAAL;AACL,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,YAAS;AACT,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,iBAAc;AACd,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,YAAS;AAPC,SAAAA;AAAA,GAAA;AAeL,IAAM,UAAU;AAAA,EACrB,CAAC,uBAA0B,GAAG;AAAA;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA;AAAA,EAC7B,CAAC,gCAA8B,GAAG;AAAA;AAAA,EAClC,CAAC,kCAA+B,GAAG;AAAA;AAAA,EACnC,CAAC,kCAA+B,GAAG;AAAA;AACrC;AAGO,IAAK,iBAAL,kBAAKC,oBAAL;AAGL,EAAAA,gBAAA,aAAU;AAGV,EAAAA,gBAAA,YAAS;AAGT,EAAAA,gBAAA,aAAU;AACV,EAAAA,gBAAA,kBAAiB;AACjB,EAAAA,gBAAA,mBAAkB;AAClB,EAAAA,gBAAA,mBAAkB;AAGlB,EAAAA,gBAAA,SAAM;AAfI,SAAAA;AAAA,GAAA;AAkBL,IAAM,mBAAmB;AAAA,EAC9B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,gCAA8B,GAAG;AAAA,EAClC,CAAC,kCAA+B,GAAG;AAAA,EACnC,CAAC,kCAA+B,GAAG;AACrC;AAIO,IAAM,kBAAkB;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,qBAAyB,GAAG;AAAA,EAC7B,CAAC,uBAA0B,GAAG;AAAA,EAC9B,CAAC,gCAA8B,GAAG;AAAA,EAClC,CAAC,kCAA+B,GAAG;AAAA,EACnC,CAAC,kCAA+B,GAAG;AACrC;","names":["BuiltInNetworkName","NetworksTicker"]}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createModuleLogger,
|
|
3
|
+
projectLogger
|
|
4
|
+
} from "./chunk-RZFCNKW4.mjs";
|
|
5
|
+
|
|
6
|
+
// src/siwe.ts
|
|
7
|
+
import { remove0x } from "@metamask/utils";
|
|
8
|
+
import { ParsedMessage } from "@spruceid/siwe-parser";
|
|
9
|
+
var log = createModuleLogger(projectLogger, "detect-siwe");
|
|
10
|
+
function safeStripHexPrefix(str) {
|
|
11
|
+
if (typeof str !== "string") {
|
|
12
|
+
return str;
|
|
13
|
+
}
|
|
14
|
+
return remove0x(str);
|
|
15
|
+
}
|
|
16
|
+
function msgHexToText(hex) {
|
|
17
|
+
try {
|
|
18
|
+
const stripped = safeStripHexPrefix(hex);
|
|
19
|
+
const buff = Buffer.from(stripped, "hex");
|
|
20
|
+
return buff.length === 32 ? hex : buff.toString("utf8");
|
|
21
|
+
} catch (e) {
|
|
22
|
+
log(e);
|
|
23
|
+
return hex;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
var DEFAULT_PORTS_BY_PROTOCOL = {
|
|
27
|
+
"http:": "80",
|
|
28
|
+
"https:": "443"
|
|
29
|
+
};
|
|
30
|
+
var parseDomainParts = (domain, originProtocol) => {
|
|
31
|
+
if (domain.match(/^[^/:]*:\/\//u)) {
|
|
32
|
+
return new URL(domain);
|
|
33
|
+
}
|
|
34
|
+
return new URL(`${originProtocol}//${domain}`);
|
|
35
|
+
};
|
|
36
|
+
var isValidSIWEOrigin = (req) => {
|
|
37
|
+
try {
|
|
38
|
+
const { origin, siwe } = req;
|
|
39
|
+
if (!origin || !siwe?.parsedMessage?.domain) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
const originParts = new URL(origin);
|
|
43
|
+
const domainParts = parseDomainParts(
|
|
44
|
+
siwe.parsedMessage.domain,
|
|
45
|
+
originParts.protocol
|
|
46
|
+
);
|
|
47
|
+
if (domainParts.hostname.localeCompare(originParts.hostname, void 0, {
|
|
48
|
+
sensitivity: "accent"
|
|
49
|
+
}) !== 0) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (domainParts.port !== "" && domainParts.port !== originParts.port) {
|
|
53
|
+
return originParts.port === "" && domainParts.port === DEFAULT_PORTS_BY_PROTOCOL[originParts.protocol];
|
|
54
|
+
}
|
|
55
|
+
if (domainParts.username !== "" && domainParts.username !== originParts.username) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
} catch (e) {
|
|
60
|
+
log(e);
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var detectSIWE = (msgParams) => {
|
|
65
|
+
try {
|
|
66
|
+
const { data } = msgParams;
|
|
67
|
+
const message = msgHexToText(data);
|
|
68
|
+
const parsedMessage = new ParsedMessage(message);
|
|
69
|
+
return {
|
|
70
|
+
isSIWEMessage: true,
|
|
71
|
+
parsedMessage
|
|
72
|
+
};
|
|
73
|
+
} catch (error) {
|
|
74
|
+
return {
|
|
75
|
+
isSIWEMessage: false,
|
|
76
|
+
parsedMessage: null
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export {
|
|
82
|
+
parseDomainParts,
|
|
83
|
+
isValidSIWEOrigin,
|
|
84
|
+
detectSIWE
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=chunk-VDEIYYE4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/siwe.ts"],"sourcesContent":["import { remove0x } from '@metamask/utils';\nimport { ParsedMessage } from '@spruceid/siwe-parser';\n\nimport { projectLogger, createModuleLogger } from './logger';\n\nconst log = createModuleLogger(projectLogger, 'detect-siwe');\n\n/**\n * This function strips the hex prefix from a string if it has one.\n * If the input is not a string, return it unmodified.\n *\n * @param str - The string to check\n * @returns The string without the hex prefix\n */\nfunction safeStripHexPrefix(str: string) {\n if (typeof str !== 'string') {\n return str;\n }\n return remove0x(str);\n}\n\n/**\n * This function converts a hex string to text if it's not a 32 byte hex string.\n *\n * @param hex - The hex string to convert to text\n * @returns The text representation of the hex string\n */\nfunction msgHexToText(hex: string): string {\n try {\n const stripped = safeStripHexPrefix(hex);\n const buff = Buffer.from(stripped, 'hex');\n return buff.length === 32 ? hex : buff.toString('utf8');\n } catch (e) {\n log(e);\n return hex;\n }\n}\n\n/**\n * @type WrappedSIWERequest\n *\n * Sign-In With Ethereum (SIWE)(EIP-4361) message with request metadata\n * @property {string} from - Subject account address\n * @property {string} origin - The RFC 3986 originating authority of the signing request, including scheme\n * @property {ParsedMessage} siwe - The data parsed from the message\n */\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface WrappedSIWERequest {\n from: string;\n origin: string;\n siwe: SIWEMessage;\n}\n\n// This interface was created before this ESLint rule was added.\n// Convert to a `type` in a future major version.\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\ninterface DomainParts {\n username?: string;\n hostname: string;\n port?: string;\n}\n\nconst DEFAULT_PORTS_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443',\n} as Record<string, string>;\n\n/**\n * Parses parts from RFC 3986 authority from EIP-4361 `domain` field.\n *\n * @param domain - input string\n * @param originProtocol - implied protocol from origin\n * @returns parsed parts\n */\nexport const parseDomainParts = (\n domain: string,\n originProtocol: string,\n): DomainParts => {\n if (domain.match(/^[^/:]*:\\/\\//u)) {\n return new URL(domain);\n }\n return new URL(`${originProtocol}//${domain}`);\n};\n\n/**\n * Validates origin of a Sign-In With Ethereum (SIWE)(EIP-4361) request.\n * As per spec:\n * hostname must match.\n * port and username must match iff specified.\n * Protocol binding and full same-origin are currently not performed.\n *\n * @param req - Signature request\n * @returns true if origin matches domain; false otherwise\n */\nexport const isValidSIWEOrigin = (req: WrappedSIWERequest): boolean => {\n try {\n const { origin, siwe } = req;\n\n // origin = scheme://[user[:password]@]domain[:port]\n // origin is supplied by environment and must match domain claim in message\n if (!origin || !siwe?.parsedMessage?.domain) {\n return false;\n }\n\n const originParts = new URL(origin);\n const domainParts = parseDomainParts(\n siwe.parsedMessage.domain,\n originParts.protocol,\n );\n\n if (\n domainParts.hostname.localeCompare(originParts.hostname, undefined, {\n sensitivity: 'accent',\n }) !== 0\n ) {\n return false;\n }\n\n if (domainParts.port !== '' && domainParts.port !== originParts.port) {\n // If origin port is not specified, protocol default is implied\n return (\n originParts.port === '' &&\n domainParts.port === DEFAULT_PORTS_BY_PROTOCOL[originParts.protocol]\n );\n }\n\n if (\n domainParts.username !== '' &&\n domainParts.username !== originParts.username\n ) {\n return false;\n }\n\n return true;\n } catch (e) {\n log(e);\n return false;\n }\n};\n\n/**\n * A locally defined object used to provide data to identify a Sign-In With Ethereum (SIWE)(EIP-4361) message and provide the parsed message\n *\n * @typedef SIWEMessage\n * @param {boolean} isSIWEMessage - Does the intercepted message conform to the SIWE specification?\n * @param {ParsedMessage} parsedMessage - The data parsed out of the message\n */\nexport type SIWEMessage =\n | { isSIWEMessage: true; parsedMessage: ParsedMessage }\n | { isSIWEMessage: false; parsedMessage: null };\n\n/**\n * This function intercepts a sign message, detects if it's a\n * Sign-In With Ethereum (SIWE)(EIP-4361) message, and returns an object with\n * relevant SIWE data.\n *\n * {@see {@link https://eips.ethereum.org/EIPS/eip-4361}}\n *\n * @param msgParams - The params of the message to sign\n * @param msgParams.data - The data of the message to sign\n * @returns An object with the relevant SIWE data\n */\nexport const detectSIWE = (msgParams: { data: string }): SIWEMessage => {\n try {\n const { data } = msgParams;\n const message = msgHexToText(data);\n const parsedMessage = new ParsedMessage(message);\n\n return {\n isSIWEMessage: true,\n parsedMessage,\n };\n } catch (error) {\n // ignore error, it's not a valid SIWE message\n return {\n isSIWEMessage: false,\n parsedMessage: null,\n };\n }\n};\n"],"mappings":";;;;;;AAAA,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAI9B,IAAM,MAAM,mBAAmB,eAAe,aAAa;AAS3D,SAAS,mBAAmB,KAAa;AACvC,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO,SAAS,GAAG;AACrB;AAQA,SAAS,aAAa,KAAqB;AACzC,MAAI;AACF,UAAM,WAAW,mBAAmB,GAAG;AACvC,UAAM,OAAO,OAAO,KAAK,UAAU,KAAK;AACxC,WAAO,KAAK,WAAW,KAAK,MAAM,KAAK,SAAS,MAAM;AAAA,EACxD,SAAS,GAAG;AACV,QAAI,CAAC;AACL,WAAO;AAAA,EACT;AACF;AA4BA,IAAM,4BAA4B;AAAA,EAChC,SAAS;AAAA,EACT,UAAU;AACZ;AASO,IAAM,mBAAmB,CAC9B,QACA,mBACgB;AAChB,MAAI,OAAO,MAAM,eAAe,GAAG;AACjC,WAAO,IAAI,IAAI,MAAM;AAAA,EACvB;AACA,SAAO,IAAI,IAAI,GAAG,cAAc,KAAK,MAAM,EAAE;AAC/C;AAYO,IAAM,oBAAoB,CAAC,QAAqC;AACrE,MAAI;AACF,UAAM,EAAE,QAAQ,KAAK,IAAI;AAIzB,QAAI,CAAC,UAAU,CAAC,MAAM,eAAe,QAAQ;AAC3C,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,IAAI,IAAI,MAAM;AAClC,UAAM,cAAc;AAAA,MAClB,KAAK,cAAc;AAAA,MACnB,YAAY;AAAA,IACd;AAEA,QACE,YAAY,SAAS,cAAc,YAAY,UAAU,QAAW;AAAA,MAClE,aAAa;AAAA,IACf,CAAC,MAAM,GACP;AACA,aAAO;AAAA,IACT;AAEA,QAAI,YAAY,SAAS,MAAM,YAAY,SAAS,YAAY,MAAM;AAEpE,aACE,YAAY,SAAS,MACrB,YAAY,SAAS,0BAA0B,YAAY,QAAQ;AAAA,IAEvE;AAEA,QACE,YAAY,aAAa,MACzB,YAAY,aAAa,YAAY,UACrC;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,QAAI,CAAC;AACL,WAAO;AAAA,EACT;AACF;AAwBO,IAAM,aAAa,CAAC,cAA6C;AACtE,MAAI;AACF,UAAM,EAAE,KAAK,IAAI;AACjB,UAAM,UAAU,aAAa,IAAI;AACjC,UAAM,gBAAgB,IAAI,cAAc,OAAO;AAE/C,WAAO;AAAA,MACL,eAAe;AAAA,MACf;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AAEd,WAAO;AAAA,MACL,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EACF;AACF;","names":[]}
|