dop-sharedmodel 1.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.
- package/LICENSE +21 -0
- package/README.md +0 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/json/artifacts.json +218 -0
- package/dist/models/artifact.d.ts +19 -0
- package/dist/models/artifact.js +11 -0
- package/dist/models/artifact.js.map +1 -0
- package/dist/models/blocked-address.d.ts +1 -0
- package/dist/models/blocked-address.js +143 -0
- package/dist/models/blocked-address.js.map +1 -0
- package/dist/models/function-types.d.ts +2 -0
- package/dist/models/function-types.js +3 -0
- package/dist/models/function-types.js.map +1 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +27 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/merkletree-scan.d.ts +6 -0
- package/dist/models/merkletree-scan.js +11 -0
- package/dist/models/merkletree-scan.js.map +1 -0
- package/dist/models/network-config.d.ts +90 -0
- package/dist/models/network-config.js +688 -0
- package/dist/models/network-config.js.map +1 -0
- package/dist/models/proof.d.ts +6 -0
- package/dist/models/proof.js +11 -0
- package/dist/models/proof.js.map +1 -0
- package/dist/models/relayer.d.ts +69 -0
- package/dist/models/relayer.js +12 -0
- package/dist/models/relayer.js.map +1 -0
- package/dist/models/response-types.d.ts +180 -0
- package/dist/models/response-types.js +31 -0
- package/dist/models/response-types.js.map +1 -0
- package/dist/models/transaction.d.ts +4 -0
- package/dist/models/transaction.js +3 -0
- package/dist/models/transaction.js.map +1 -0
- package/dist/models/wallet.d.ts +6 -0
- package/dist/models/wallet.js +11 -0
- package/dist/models/wallet.js.map +1 -0
- package/dist/utils/artifact-v2.d.ts +2 -0
- package/dist/utils/artifact-v2.js +24 -0
- package/dist/utils/artifact-v2.js.map +1 -0
- package/dist/utils/available-rpc.d.ts +8 -0
- package/dist/utils/available-rpc.js +58 -0
- package/dist/utils/available-rpc.js.map +1 -0
- package/dist/utils/compare.d.ts +2 -0
- package/dist/utils/compare.js +8 -0
- package/dist/utils/compare.js.map +1 -0
- package/dist/utils/configured-json-rpc-provider.d.ts +4 -0
- package/dist/utils/configured-json-rpc-provider.js +15 -0
- package/dist/utils/configured-json-rpc-provider.js.map +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +82 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/fallback-provider.d.ts +13 -0
- package/dist/utils/fallback-provider.js +36 -0
- package/dist/utils/fallback-provider.js.map +1 -0
- package/dist/utils/format.d.ts +1 -0
- package/dist/utils/format.js +8 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/gas.d.ts +7 -0
- package/dist/utils/gas.js +45 -0
- package/dist/utils/gas.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.js +28 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/median.d.ts +1 -0
- package/dist/utils/median.js +13 -0
- package/dist/utils/median.js.map +1 -0
- package/dist/utils/network.d.ts +5 -0
- package/dist/utils/network.js +16 -0
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/promises.d.ts +4 -0
- package/dist/utils/promises.js +44 -0
- package/dist/utils/promises.js.map +1 -0
- package/dist/utils/util.d.ts +3 -0
- package/dist/utils/util.js +18 -0
- package/dist/utils/util.js.map +1 -0
- package/dist/utils/versions.d.ts +1 -0
- package/dist/utils/versions.js +47 -0
- package/dist/utils/versions.js.map +1 -0
- package/package.json +48 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"configured-json-rpc-provider.js","sourceRoot":"","sources":["../../src/utils/configured-json-rpc-provider.ts"],"names":[],"mappings":";;;AAAA,mCAA6E;AAE7E,MAAa,yBAA0B,SAAQ,wBAAe;IAC5D,YAAY,GAAW,EAAE,OAAgB,EAAE,eAAe,GAAG,GAAG;QAC9D,MAAM,OAAO,GAA8B;YACzC,aAAa,EAAE,OAAO;YACtB,aAAa,EAAE,eAAe;SAC/B,CAAC;QACF,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;CACF;AARD,8DAQC","sourcesContent":["import { JsonRpcProvider, JsonRpcApiProviderOptions, Network } from 'ethers';\n\nexport class ConfiguredJsonRpcProvider extends JsonRpcProvider {\n constructor(url: string, network: Network, maxLogsPerBatch = 100) {\n const options: JsonRpcApiProviderOptions = {\n staticNetwork: network,\n batchMaxCount: maxLogsPerBatch,\n };\n super(url, network, options);\n }\n}\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const sanitizeError: (err: Error) => Error;
|
@@ -0,0 +1,82 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.sanitizeError = void 0;
|
4
|
+
const util_1 = require("./util");
|
5
|
+
const STRING_PREFIX_AFTER_UNICODE_REPLACEMENT = 'y %';
|
6
|
+
const validAscii = (str) => {
|
7
|
+
return str.replace(
|
8
|
+
// eslint-disable-next-line no-useless-escape
|
9
|
+
/[^A-Za-z 0-9 \.,\?""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*/g, '');
|
10
|
+
};
|
11
|
+
const sanitizeError = (err) => {
|
12
|
+
if ((0, util_1.isDefined)(err) && err.message) {
|
13
|
+
const lowercaseMsg = err.message.toLowerCase();
|
14
|
+
if (lowercaseMsg.includes('quorum') ||
|
15
|
+
lowercaseMsg.includes('could not connect to')) {
|
16
|
+
return new Error('Could not connect.');
|
17
|
+
}
|
18
|
+
if (lowercaseMsg.includes('call revert exception')) {
|
19
|
+
return new Error('Failed to connect to RPC.');
|
20
|
+
}
|
21
|
+
if (lowercaseMsg.includes('missing revert data')) {
|
22
|
+
return new Error('RPC connection error.');
|
23
|
+
}
|
24
|
+
if (lowercaseMsg.includes('transaction may fail or may require manual gas limit')) {
|
25
|
+
return new Error('Unknown error. Transaction failed.');
|
26
|
+
}
|
27
|
+
if (lowercaseMsg.includes('replacement fee too low')) {
|
28
|
+
return new Error('Nonce is used in a pending transaction, and replacement fee is too low. Please increase your network fee to replace the pending transaction.');
|
29
|
+
}
|
30
|
+
if (lowercaseMsg.includes('intrinsic gas too low')) {
|
31
|
+
return new Error('Gas price rejected. Please select a higher gas price or resubmit.');
|
32
|
+
}
|
33
|
+
if (lowercaseMsg.includes('transaction underpriced')) {
|
34
|
+
return new Error('Gas fee too low. Please select a higher gas price and resubmit.');
|
35
|
+
}
|
36
|
+
if (lowercaseMsg.includes('insufficient funds for intrinsic')) {
|
37
|
+
return new Error('Insufficient gas to process transaction.');
|
38
|
+
}
|
39
|
+
if (lowercaseMsg.includes('nonce has already been used')) {
|
40
|
+
return new Error(
|
41
|
+
// Do not change 'Nonce already used' string of Error message.
|
42
|
+
'Nonce already used: the transaction was already completed.');
|
43
|
+
}
|
44
|
+
if (lowercaseMsg.includes('error while dialing dial tcp')) {
|
45
|
+
return new Error('Error while connecting to RPC provider. Please try again.');
|
46
|
+
}
|
47
|
+
// Custom DOP contract error messages
|
48
|
+
if (lowercaseMsg.includes('dopsmartwallet')) {
|
49
|
+
if (lowercaseMsg.includes('invalid nft note value')) {
|
50
|
+
return new Error('DopSmartWallet: Invalid NFT Note Value.');
|
51
|
+
}
|
52
|
+
if (lowercaseMsg.includes('unsupported token')) {
|
53
|
+
return new Error('DopSmartWallet: Unsupported Token. This token cannot interact with the DOP contract.');
|
54
|
+
}
|
55
|
+
if (lowercaseMsg.includes('invalid note value')) {
|
56
|
+
return new Error('DopSmartWallet: Invalid Note Value. Please submit transaction with a corrected amount.');
|
57
|
+
}
|
58
|
+
if (lowercaseMsg.includes('invalid adapt contract as sender')) {
|
59
|
+
return new Error('DopSmartWallet: Invalid Adapt Contract as Sender. Please update your frontend to current Adapt module versions.');
|
60
|
+
}
|
61
|
+
if (lowercaseMsg.includes('invalid merkle root')) {
|
62
|
+
return new Error('DopSmartWallet: Invalid Merkle Root. Please sync your balances and try again.');
|
63
|
+
}
|
64
|
+
if (lowercaseMsg.includes('note already spent')) {
|
65
|
+
return new Error('DopSmartWallet: Note Already Spent. Please sync your balances and try again.');
|
66
|
+
}
|
67
|
+
if (lowercaseMsg.includes('invalid note ciphertext array length')) {
|
68
|
+
return new Error('DopSmartWallet: Invalid Note Ciphertext Array Length. Please sync balances and re-prove your transaction.');
|
69
|
+
}
|
70
|
+
if (lowercaseMsg.includes('invalid withdraw note')) {
|
71
|
+
return new Error('DopSmartWallet: Invalid Unshield Note. Please sync balances and re-prove your transaction.');
|
72
|
+
}
|
73
|
+
if (lowercaseMsg.includes('invalid snark proof')) {
|
74
|
+
return new Error('DopSmartWallet: Invalid Snark Proof. Please re-prove your transaction.');
|
75
|
+
}
|
76
|
+
}
|
77
|
+
return new Error(validAscii(err.message).replace(`:${STRING_PREFIX_AFTER_UNICODE_REPLACEMENT}`, ': '));
|
78
|
+
}
|
79
|
+
return new Error('Unknown error. Please try again.');
|
80
|
+
};
|
81
|
+
exports.sanitizeError = sanitizeError;
|
82
|
+
//# sourceMappingURL=error.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"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","sourcesContent":["import { isDefined } from './util';\n\nconst STRING_PREFIX_AFTER_UNICODE_REPLACEMENT = 'y %';\n\nconst validAscii = (str: string) => {\n return str.replace(\n // eslint-disable-next-line no-useless-escape\n /[^A-Za-z 0-9 \\.,\\?\"\"!@#\\$%\\^&\\*\\(\\)-_=\\+;:<>\\/\\\\\\|\\}\\{\\[\\]`~]*/g,\n '',\n );\n};\n\nexport const sanitizeError = (err: Error): Error => {\n if (isDefined(err) && err.message) {\n const lowercaseMsg = err.message.toLowerCase();\n if (\n lowercaseMsg.includes('quorum') ||\n lowercaseMsg.includes('could not connect to')\n ) {\n return new Error('Could not connect.');\n }\n if (lowercaseMsg.includes('call revert exception')) {\n return new Error('Failed to connect to RPC.');\n }\n if (lowercaseMsg.includes('missing revert data')) {\n return new Error('RPC connection error.');\n }\n if (\n lowercaseMsg.includes(\n 'transaction may fail or may require manual gas limit',\n )\n ) {\n return new Error('Unknown error. Transaction failed.');\n }\n if (lowercaseMsg.includes('replacement fee too low')) {\n return new Error(\n 'Nonce is used in a pending transaction, and replacement fee is too low. Please increase your network fee to replace the pending transaction.',\n );\n }\n if (lowercaseMsg.includes('intrinsic gas too low')) {\n return new Error(\n 'Gas price rejected. Please select a higher gas price or resubmit.',\n );\n }\n if (lowercaseMsg.includes('transaction underpriced')) {\n return new Error(\n 'Gas fee too low. Please select a higher gas price and resubmit.',\n );\n }\n if (lowercaseMsg.includes('insufficient funds for intrinsic')) {\n return new Error('Insufficient gas to process transaction.');\n }\n if (lowercaseMsg.includes('nonce has already been used')) {\n return new Error(\n // Do not change 'Nonce already used' string of Error message.\n 'Nonce already used: the transaction was already completed.',\n );\n }\n if (lowercaseMsg.includes('error while dialing dial tcp')) {\n return new Error(\n 'Error while connecting to RPC provider. Please try again.',\n );\n }\n\n // Custom DOP contract error messages\n if (lowercaseMsg.includes('dopsmartwallet')) {\n if (lowercaseMsg.includes('invalid nft note value')) {\n return new Error('DopSmartWallet: Invalid NFT Note Value.');\n }\n if (lowercaseMsg.includes('unsupported token')) {\n return new Error(\n 'DopSmartWallet: Unsupported Token. This token cannot interact with the DOP contract.',\n );\n }\n if (lowercaseMsg.includes('invalid note value')) {\n return new Error(\n 'DopSmartWallet: Invalid Note Value. Please submit transaction with a corrected amount.',\n );\n }\n if (lowercaseMsg.includes('invalid adapt contract as sender')) {\n return new Error(\n 'DopSmartWallet: Invalid Adapt Contract as Sender. Please update your frontend to current Adapt module versions.',\n );\n }\n if (lowercaseMsg.includes('invalid merkle root')) {\n return new Error(\n 'DopSmartWallet: Invalid Merkle Root. Please sync your balances and try again.',\n );\n }\n if (lowercaseMsg.includes('note already spent')) {\n return new Error(\n 'DopSmartWallet: Note Already Spent. Please sync your balances and try again.',\n );\n }\n if (lowercaseMsg.includes('invalid note ciphertext array length')) {\n return new Error(\n 'DopSmartWallet: Invalid Note Ciphertext Array Length. Please sync balances and re-prove your transaction.',\n );\n }\n if (lowercaseMsg.includes('invalid withdraw note')) {\n return new Error(\n 'DopSmartWallet: Invalid Unshield Note. Please sync balances and re-prove your transaction.',\n );\n }\n if (lowercaseMsg.includes('invalid snark proof')) {\n return new Error(\n 'DopSmartWallet: Invalid Snark Proof. Please re-prove your transaction.',\n );\n }\n }\n\n return new Error(\n validAscii(err.message).replace(\n `:${STRING_PREFIX_AFTER_UNICODE_REPLACEMENT}`,\n ': ',\n ),\n );\n }\n\n return new Error('Unknown error. Please try again.');\n};\n"]}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { FallbackProvider } from 'ethers';
|
2
|
+
export type FallbackProviderJsonConfig = {
|
3
|
+
chainId: number;
|
4
|
+
providers: ProviderJson[];
|
5
|
+
};
|
6
|
+
export type ProviderJson = {
|
7
|
+
priority: number;
|
8
|
+
weight: number;
|
9
|
+
provider: string;
|
10
|
+
stallTimeout?: number;
|
11
|
+
maxLogsPerBatch?: number;
|
12
|
+
};
|
13
|
+
export declare const createFallbackProviderFromJsonConfig: (config: FallbackProviderJsonConfig) => FallbackProvider;
|
@@ -0,0 +1,36 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.createFallbackProviderFromJsonConfig = void 0;
|
4
|
+
const ethers_1 = require("ethers");
|
5
|
+
const configured_json_rpc_provider_1 = require("./configured-json-rpc-provider");
|
6
|
+
const createFallbackProviderFromJsonConfig = (config) => {
|
7
|
+
try {
|
8
|
+
const totalWeight = config.providers.reduce((acc, { weight }) => acc + weight, 0);
|
9
|
+
if (totalWeight < 2) {
|
10
|
+
throw new Error('Total weight across providers must be >= 2 for fallback quorum.');
|
11
|
+
}
|
12
|
+
const network = ethers_1.Network.from(Number(config.chainId));
|
13
|
+
const providers = config.providers.map(({ provider: providerURL, priority, weight, stallTimeout, maxLogsPerBatch, }) => {
|
14
|
+
const isWebsocket = providerURL.startsWith('wss');
|
15
|
+
const provider = isWebsocket
|
16
|
+
? new ethers_1.WebSocketProvider(providerURL, network)
|
17
|
+
: new configured_json_rpc_provider_1.ConfiguredJsonRpcProvider(providerURL, network, maxLogsPerBatch);
|
18
|
+
const fallbackProviderConfig = {
|
19
|
+
provider,
|
20
|
+
priority,
|
21
|
+
weight,
|
22
|
+
stallTimeout,
|
23
|
+
};
|
24
|
+
return fallbackProviderConfig;
|
25
|
+
});
|
26
|
+
return new ethers_1.FallbackProvider(providers, network);
|
27
|
+
}
|
28
|
+
catch (err) {
|
29
|
+
if (!(err instanceof Error)) {
|
30
|
+
throw err;
|
31
|
+
}
|
32
|
+
throw new Error(`Invalid fallback provider config for chain ${config.chainId}: ${err.message}`);
|
33
|
+
}
|
34
|
+
};
|
35
|
+
exports.createFallbackProviderFromJsonConfig = createFallbackProviderFromJsonConfig;
|
36
|
+
//# sourceMappingURL=fallback-provider.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"fallback-provider.js","sourceRoot":"","sources":["../../src/utils/fallback-provider.ts"],"names":[],"mappings":";;;AAAA,mCAAsE;AACtE,iFAA2E;AAgBpE,MAAM,oCAAoC,GAAG,CAClD,MAAkC,EAChB,EAAE;IACpB,IAAI;QACF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,EACjC,CAAC,CACF,CAAC;QACF,IAAI,WAAW,GAAG,CAAC,EAAE;YACnB,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;SACH;QAED,MAAM,OAAO,GAAG,gBAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAErD,MAAM,SAAS,GAA6B,MAAM,CAAC,SAAS,CAAC,GAAG,CAC9D,CAAC,EACC,QAAQ,EAAE,WAAW,EACrB,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,eAAe,GAChB,EAAE,EAAE;YACH,MAAM,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,WAAW;gBAC1B,CAAC,CAAC,IAAI,0BAAiB,CAAC,WAAW,EAAE,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,wDAAyB,CAC3B,WAAW,EACX,OAAO,EACP,eAAe,CAChB,CAAC;YAEN,MAAM,sBAAsB,GAA2B;gBACrD,QAAQ;gBACR,QAAQ;gBACR,MAAM;gBACN,YAAY;aACb,CAAC;YACF,OAAO,sBAAsB,CAAC;QAChC,CAAC,CACF,CAAC;QAEF,OAAO,IAAI,yBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACjD;IAAC,OAAO,GAAG,EAAE;QACZ,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;YAC3B,MAAM,GAAG,CAAC;SACX;QACD,MAAM,IAAI,KAAK,CACb,8CAA8C,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,EAAE,CAC/E,CAAC;KACH;AACH,CAAC,CAAC;AApDW,QAAA,oCAAoC,wCAoD/C","sourcesContent":["import { FallbackProvider, Network, WebSocketProvider } from 'ethers';\nimport { ConfiguredJsonRpcProvider } from './configured-json-rpc-provider';\nimport { FallbackProviderConfig } from 'ethers/lib.commonjs/providers/provider-fallback';\n\nexport type FallbackProviderJsonConfig = {\n chainId: number;\n providers: ProviderJson[];\n};\n\nexport type ProviderJson = {\n priority: number;\n weight: number;\n provider: string;\n stallTimeout?: number;\n maxLogsPerBatch?: number;\n};\n\nexport const createFallbackProviderFromJsonConfig = (\n config: FallbackProviderJsonConfig,\n): FallbackProvider => {\n try {\n const totalWeight = config.providers.reduce(\n (acc, { weight }) => acc + weight,\n 0,\n );\n if (totalWeight < 2) {\n throw new Error(\n 'Total weight across providers must be >= 2 for fallback quorum.',\n );\n }\n\n const network = Network.from(Number(config.chainId));\n\n const providers: FallbackProviderConfig[] = config.providers.map(\n ({\n provider: providerURL,\n priority,\n weight,\n stallTimeout,\n maxLogsPerBatch,\n }) => {\n const isWebsocket = providerURL.startsWith('wss');\n const provider = isWebsocket\n ? new WebSocketProvider(providerURL, network)\n : new ConfiguredJsonRpcProvider(\n providerURL,\n network,\n maxLogsPerBatch,\n );\n\n const fallbackProviderConfig: FallbackProviderConfig = {\n provider,\n priority,\n weight,\n stallTimeout,\n };\n return fallbackProviderConfig;\n },\n );\n\n return new FallbackProvider(providers, network);\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw new Error(\n `Invalid fallback provider config for chain ${config.chainId}: ${err.message}`,\n );\n }\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const decimalToHexString: (dec: string | number) => string;
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.decimalToHexString = void 0;
|
4
|
+
const decimalToHexString = (dec) => {
|
5
|
+
return BigInt(dec).toString(16);
|
6
|
+
};
|
7
|
+
exports.decimalToHexString = decimalToHexString;
|
8
|
+
//# sourceMappingURL=format.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAAC,GAAoB,EAAE,EAAE;IACzD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC,CAAC;AAFW,QAAA,kBAAkB,sBAE7B","sourcesContent":["export const decimalToHexString = (dec: string | number) => {\n return BigInt(dec).toString(16);\n};\n"]}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { NetworkName } from '../models/network-config';
|
2
|
+
import { EVMGasType, TransactionGasDetails } from '../models/response-types';
|
3
|
+
export declare const getEVMGasTypeForTransaction: (networkName: NetworkName, sendWithPublicWallet: boolean) => EVMGasType;
|
4
|
+
export declare const calculateGasLimit: (gasEstimate: bigint) => bigint;
|
5
|
+
export declare const calculateGasPrice: (gasDetails: TransactionGasDetails) => bigint;
|
6
|
+
export declare const calculateTotalGas: (transactionGasDetails: TransactionGasDetails) => bigint;
|
7
|
+
export declare const calculateMaximumGas: (transactionGasDetails: TransactionGasDetails) => bigint;
|
@@ -0,0 +1,45 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.calculateMaximumGas = exports.calculateTotalGas = exports.calculateGasPrice = exports.calculateGasLimit = exports.getEVMGasTypeForTransaction = void 0;
|
4
|
+
const network_config_1 = require("../models/network-config");
|
5
|
+
const response_types_1 = require("../models/response-types");
|
6
|
+
const getEVMGasTypeForTransaction = (networkName, sendWithPublicWallet) => {
|
7
|
+
const { defaultEVMGasType } = network_config_1.NETWORK_CONFIG[networkName];
|
8
|
+
if (defaultEVMGasType === response_types_1.EVMGasType.Type2 && !sendWithPublicWallet) {
|
9
|
+
// Relayer transactions require overallBatchMinGasPrice.
|
10
|
+
// This is only supported by type 1 transactions.
|
11
|
+
return response_types_1.EVMGasType.Type1;
|
12
|
+
}
|
13
|
+
return defaultEVMGasType;
|
14
|
+
};
|
15
|
+
exports.getEVMGasTypeForTransaction = getEVMGasTypeForTransaction;
|
16
|
+
const calculateGasLimit = (gasEstimate) => {
|
17
|
+
// Gas Limit: Add 20% to gas estimate.
|
18
|
+
return (gasEstimate * 12000n) / 10000n;
|
19
|
+
};
|
20
|
+
exports.calculateGasLimit = calculateGasLimit;
|
21
|
+
const calculateGasPrice = (gasDetails) => {
|
22
|
+
switch (gasDetails.evmGasType) {
|
23
|
+
case response_types_1.EVMGasType.Type0:
|
24
|
+
case response_types_1.EVMGasType.Type1: {
|
25
|
+
return gasDetails.gasPrice;
|
26
|
+
}
|
27
|
+
case response_types_1.EVMGasType.Type2: {
|
28
|
+
return gasDetails.maxFeePerGas;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
};
|
32
|
+
exports.calculateGasPrice = calculateGasPrice;
|
33
|
+
const calculateTotalGas = (transactionGasDetails) => {
|
34
|
+
const gasPrice = (0, exports.calculateGasPrice)(transactionGasDetails);
|
35
|
+
const { gasEstimate } = transactionGasDetails;
|
36
|
+
return gasEstimate * gasPrice;
|
37
|
+
};
|
38
|
+
exports.calculateTotalGas = calculateTotalGas;
|
39
|
+
const calculateMaximumGas = (transactionGasDetails) => {
|
40
|
+
const gasPrice = (0, exports.calculateGasPrice)(transactionGasDetails);
|
41
|
+
const { gasEstimate } = transactionGasDetails;
|
42
|
+
return (0, exports.calculateGasLimit)(gasEstimate) * gasPrice;
|
43
|
+
};
|
44
|
+
exports.calculateMaximumGas = calculateMaximumGas;
|
45
|
+
//# sourceMappingURL=gas.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"gas.js","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":";;;AAAA,6DAAuE;AACvE,6DAA6E;AAEtE,MAAM,2BAA2B,GAAG,CACzC,WAAwB,EACxB,oBAA6B,EACjB,EAAE;IACd,MAAM,EAAE,iBAAiB,EAAE,GAAG,+BAAc,CAAC,WAAW,CAAC,CAAC;IAE1D,IAAI,iBAAiB,KAAK,2BAAU,CAAC,KAAK,IAAI,CAAC,oBAAoB,EAAE;QACnE,wDAAwD;QACxD,iDAAiD;QACjD,OAAO,2BAAU,CAAC,KAAK,CAAC;KACzB;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAbW,QAAA,2BAA2B,+BAatC;AAEK,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAU,EAAE;IAC/D,sCAAsC;IACtC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;AACzC,CAAC,CAAC;AAHW,QAAA,iBAAiB,qBAG5B;AAEK,MAAM,iBAAiB,GAAG,CAAC,UAAiC,EAAE,EAAE;IACrE,QAAQ,UAAU,CAAC,UAAU,EAAE;QAC7B,KAAK,2BAAU,CAAC,KAAK,CAAC;QACtB,KAAK,2BAAU,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,UAAU,CAAC,QAAQ,CAAC;SAC5B;QACD,KAAK,2BAAU,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO,UAAU,CAAC,YAAY,CAAC;SAChC;KACF;AACH,CAAC,CAAC;AAVW,QAAA,iBAAiB,qBAU5B;AAEK,MAAM,iBAAiB,GAAG,CAC/B,qBAA4C,EAC5C,EAAE;IACF,MAAM,QAAQ,GAAG,IAAA,yBAAiB,EAAC,qBAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC;IAC9C,OAAO,WAAW,GAAG,QAAQ,CAAC;AAChC,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B;AAEK,MAAM,mBAAmB,GAAG,CACjC,qBAA4C,EACpC,EAAE;IACV,MAAM,QAAQ,GAAG,IAAA,yBAAiB,EAAC,qBAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC;IAC9C,OAAO,IAAA,yBAAiB,EAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AACnD,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B","sourcesContent":["import { NetworkName, NETWORK_CONFIG } from '../models/network-config';\nimport { EVMGasType, TransactionGasDetails } from '../models/response-types';\n\nexport const getEVMGasTypeForTransaction = (\n networkName: NetworkName,\n sendWithPublicWallet: boolean,\n): EVMGasType => {\n const { defaultEVMGasType } = NETWORK_CONFIG[networkName];\n\n if (defaultEVMGasType === EVMGasType.Type2 && !sendWithPublicWallet) {\n // Relayer transactions require overallBatchMinGasPrice.\n // This is only supported by type 1 transactions.\n return EVMGasType.Type1;\n }\n\n return defaultEVMGasType;\n};\n\nexport const calculateGasLimit = (gasEstimate: bigint): bigint => {\n // Gas Limit: Add 20% to gas estimate.\n return (gasEstimate * 12000n) / 10000n;\n};\n\nexport const calculateGasPrice = (gasDetails: TransactionGasDetails) => {\n switch (gasDetails.evmGasType) {\n case EVMGasType.Type0:\n case EVMGasType.Type1: {\n return gasDetails.gasPrice;\n }\n case EVMGasType.Type2: {\n return gasDetails.maxFeePerGas;\n }\n }\n};\n\nexport const calculateTotalGas = (\n transactionGasDetails: TransactionGasDetails,\n) => {\n const gasPrice = calculateGasPrice(transactionGasDetails);\n const { gasEstimate } = transactionGasDetails;\n return gasEstimate * gasPrice;\n};\n\nexport const calculateMaximumGas = (\n transactionGasDetails: TransactionGasDetails,\n): bigint => {\n const gasPrice = calculateGasPrice(transactionGasDetails);\n const { gasEstimate } = transactionGasDetails;\n return calculateGasLimit(gasEstimate) * gasPrice;\n};\n"]}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
export * from './artifact-v2';
|
2
|
+
export * from './available-rpc';
|
3
|
+
export * from './compare';
|
4
|
+
export * from './fallback-provider';
|
5
|
+
export * from './error';
|
6
|
+
export * from './format';
|
7
|
+
export * from './gas';
|
8
|
+
export * from './network';
|
9
|
+
export * from './promises';
|
10
|
+
export * from './util';
|
11
|
+
export * from './versions';
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./artifact-v2"), exports);
|
18
|
+
__exportStar(require("./available-rpc"), exports);
|
19
|
+
__exportStar(require("./compare"), exports);
|
20
|
+
__exportStar(require("./fallback-provider"), exports);
|
21
|
+
__exportStar(require("./error"), exports);
|
22
|
+
__exportStar(require("./format"), exports);
|
23
|
+
__exportStar(require("./gas"), exports);
|
24
|
+
__exportStar(require("./network"), exports);
|
25
|
+
__exportStar(require("./promises"), exports);
|
26
|
+
__exportStar(require("./util"), exports);
|
27
|
+
__exportStar(require("./versions"), exports);
|
28
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,kDAAgC;AAChC,4CAA0B;AAC1B,sDAAoC;AACpC,0CAAwB;AACxB,2CAAyB;AACzB,wCAAsB;AACtB,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,6CAA2B","sourcesContent":["export * from './artifact-v2';\nexport * from './available-rpc';\nexport * from './compare';\nexport * from './fallback-provider';\nexport * from './error';\nexport * from './format';\nexport * from './gas';\nexport * from './network';\nexport * from './promises';\nexport * from './util';\nexport * from './versions';\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const getUpperBoundMedian: (numbers: number[]) => number;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getUpperBoundMedian = void 0;
|
4
|
+
const getUpperBoundMedian = (numbers) => {
|
5
|
+
if (!numbers.length) {
|
6
|
+
return 0;
|
7
|
+
}
|
8
|
+
const index = Math.floor(numbers.length / 2);
|
9
|
+
const sorted = numbers.sort();
|
10
|
+
return sorted[index];
|
11
|
+
};
|
12
|
+
exports.getUpperBoundMedian = getUpperBoundMedian;
|
13
|
+
//# sourceMappingURL=median.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"median.js","sourceRoot":"","sources":["../../src/utils/median.ts"],"names":[],"mappings":";;;AAAO,MAAM,mBAAmB,GAAG,CAAC,OAAiB,EAAE,EAAE;IACvD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACnB,OAAO,CAAC,CAAC;KACV;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAPW,QAAA,mBAAmB,uBAO9B","sourcesContent":["export const getUpperBoundMedian = (numbers: number[]) => {\n if (!numbers.length) {\n return 0;\n }\n const index = Math.floor(numbers.length / 2);\n const sorted = numbers.sort();\n return sorted[index];\n};\n"]}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/// <reference types="../types/global" />
|
2
|
+
import { Network, NetworkName } from '../models/network-config';
|
3
|
+
import { Chain } from '../models/response-types';
|
4
|
+
export declare const networkForChain: (chain: Chain) => Optional<Network>;
|
5
|
+
export declare const isHistoricalRelayAdaptContractAddress: (networkName: NetworkName, address: string) => boolean;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.isHistoricalRelayAdaptContractAddress = exports.networkForChain = void 0;
|
4
|
+
const network_config_1 = require("../models/network-config");
|
5
|
+
const networkForChain = (chain) => {
|
6
|
+
return Object.values(network_config_1.NETWORK_CONFIG).find(network => network.chain.type === chain.type && network.chain.id === chain.id);
|
7
|
+
};
|
8
|
+
exports.networkForChain = networkForChain;
|
9
|
+
const isHistoricalRelayAdaptContractAddress = (networkName, address) => {
|
10
|
+
const network = network_config_1.NETWORK_CONFIG[networkName];
|
11
|
+
return (network.relayAdaptHistory.find(historicalAddress => {
|
12
|
+
return historicalAddress.toLowerCase() === address.toLowerCase();
|
13
|
+
}) != null);
|
14
|
+
};
|
15
|
+
exports.isHistoricalRelayAdaptContractAddress = isHistoricalRelayAdaptContractAddress;
|
16
|
+
//# sourceMappingURL=network.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":";;;AAAA,6DAAgF;AAGzE,MAAM,eAAe,GAAG,CAAC,KAAY,EAAqB,EAAE;IACjE,OAAO,MAAM,CAAC,MAAM,CAAC,+BAAc,CAAC,CAAC,IAAI,CACvC,OAAO,CAAC,EAAE,CACR,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CACrE,CAAC;AACJ,CAAC,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,MAAM,qCAAqC,GAAG,CACnD,WAAwB,EACxB,OAAe,EACf,EAAE;IACF,MAAM,OAAO,GAAG,+BAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,CACL,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;QACjD,OAAO,iBAAiB,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;IACnE,CAAC,CAAC,IAAI,IAAI,CACX,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,qCAAqC,yCAUhD","sourcesContent":["import { Network, NETWORK_CONFIG, NetworkName } from '../models/network-config';\nimport { Chain } from '../models/response-types';\n\nexport const networkForChain = (chain: Chain): Optional<Network> => {\n return Object.values(NETWORK_CONFIG).find(\n network =>\n network.chain.type === chain.type && network.chain.id === chain.id,\n );\n};\n\nexport const isHistoricalRelayAdaptContractAddress = (\n networkName: NetworkName,\n address: string,\n) => {\n const network = NETWORK_CONFIG[networkName];\n return (\n network.relayAdaptHistory.find(historicalAddress => {\n return historicalAddress.toLowerCase() === address.toLowerCase();\n }) != null\n );\n};\n"]}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
/// <reference types="../types/global" />
|
2
|
+
export declare const delay: (delayInMS: number) => Promise<void>;
|
3
|
+
export declare function promiseTimeout<T>(promise: Promise<T>, ms: number, customTimeoutError?: Error): Promise<T>;
|
4
|
+
export declare function poll<T>(fn: () => Promise<T>, passCondition: (result: T) => boolean, delayInMS: number, allowedAttempts?: number): Promise<Optional<T>>;
|
@@ -0,0 +1,44 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.poll = exports.promiseTimeout = exports.delay = void 0;
|
4
|
+
const delay = (delayInMS) => {
|
5
|
+
return new Promise(resolve => setTimeout(resolve, delayInMS));
|
6
|
+
};
|
7
|
+
exports.delay = delay;
|
8
|
+
function promiseTimeout(promise, ms, customTimeoutError) {
|
9
|
+
// Create a promise that rejects in <ms> milliseconds
|
10
|
+
const timeout = new Promise((_resolve, reject) => {
|
11
|
+
const id = setTimeout(() => {
|
12
|
+
clearTimeout(id);
|
13
|
+
reject(new Error(`Timed out in ${ms} ms.`));
|
14
|
+
}, ms);
|
15
|
+
});
|
16
|
+
// Returns a race between our timeout and the passed in promise
|
17
|
+
return Promise.race([promise, timeout])
|
18
|
+
.then(result => result)
|
19
|
+
.catch(err => {
|
20
|
+
if (!(err instanceof Error)) {
|
21
|
+
throw err;
|
22
|
+
}
|
23
|
+
if (err.message.startsWith('Timed out')) {
|
24
|
+
throw customTimeoutError ?? err;
|
25
|
+
}
|
26
|
+
throw err;
|
27
|
+
});
|
28
|
+
}
|
29
|
+
exports.promiseTimeout = promiseTimeout;
|
30
|
+
async function poll(fn, passCondition, delayInMS, allowedAttempts = 1) {
|
31
|
+
let result = await fn();
|
32
|
+
let attempts = 1;
|
33
|
+
while (attempts <= allowedAttempts) {
|
34
|
+
if (passCondition(result)) {
|
35
|
+
return result;
|
36
|
+
}
|
37
|
+
await (0, exports.delay)(delayInMS);
|
38
|
+
result = await fn();
|
39
|
+
attempts++;
|
40
|
+
}
|
41
|
+
return undefined;
|
42
|
+
}
|
43
|
+
exports.poll = poll;
|
44
|
+
//# sourceMappingURL=promises.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"promises.js","sourceRoot":"","sources":["../../src/utils/promises.ts"],"names":[],"mappings":";;;AAAO,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAiB,EAAE;IACxD,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,KAAK,SAEhB;AAEF,SAAgB,cAAc,CAC5B,OAAmB,EACnB,EAAU,EACV,kBAA0B;IAE1B,qDAAqD;IACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;YACzB,YAAY,CAAC,EAAE,CAAC,CAAC;YACjB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9C,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAW,CAAC;SAC3B,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE;YAC3B,MAAM,GAAG,CAAC;SACX;QACD,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;YACvC,MAAM,kBAAkB,IAAI,GAAG,CAAC;SACjC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACP,CAAC;AAzBD,wCAyBC;AAEM,KAAK,UAAU,IAAI,CACxB,EAAoB,EACpB,aAAqC,EACrC,SAAiB,EACjB,eAAe,GAAG,CAAC;IAEnB,IAAI,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;IACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,QAAQ,IAAI,eAAe,EAAE;QAClC,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;YACzB,OAAO,MAAM,CAAC;SACf;QACD,MAAM,IAAA,aAAK,EAAC,SAAS,CAAC,CAAC;QACvB,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QACpB,QAAQ,EAAE,CAAC;KACZ;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAjBD,oBAiBC","sourcesContent":["export const delay = (delayInMS: number): Promise<void> => {\n return new Promise(resolve => setTimeout(resolve, delayInMS));\n};\n\nexport function promiseTimeout<T>(\n promise: Promise<T>,\n ms: number,\n customTimeoutError?: Error,\n): Promise<T> {\n // Create a promise that rejects in <ms> milliseconds\n const timeout = new Promise((_resolve, reject) => {\n const id = setTimeout(() => {\n clearTimeout(id);\n reject(new Error(`Timed out in ${ms} ms.`));\n }, ms);\n });\n\n // Returns a race between our timeout and the passed in promise\n return Promise.race([promise, timeout])\n .then(result => result as T)\n .catch(err => {\n if (!(err instanceof Error)) {\n throw err;\n }\n if (err.message.startsWith('Timed out')) {\n throw customTimeoutError ?? err;\n }\n throw err;\n });\n}\n\nexport async function poll<T>(\n fn: () => Promise<T>,\n passCondition: (result: T) => boolean,\n delayInMS: number,\n allowedAttempts = 1,\n): Promise<Optional<T>> {\n let result = await fn();\n let attempts = 1;\n while (attempts <= allowedAttempts) {\n if (passCondition(result)) {\n return result;\n }\n await delay(delayInMS);\n result = await fn();\n attempts++;\n }\n return undefined;\n}\n"]}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.removeUndefineds = exports.isDefined = void 0;
|
4
|
+
const isDefined = (a) => {
|
5
|
+
return typeof a !== 'undefined' && a !== null;
|
6
|
+
};
|
7
|
+
exports.isDefined = isDefined;
|
8
|
+
const removeUndefineds = (a) => {
|
9
|
+
const newArray = [];
|
10
|
+
for (const item of a) {
|
11
|
+
if ((0, exports.isDefined)(item)) {
|
12
|
+
newArray.push(item);
|
13
|
+
}
|
14
|
+
}
|
15
|
+
return newArray;
|
16
|
+
};
|
17
|
+
exports.removeUndefineds = removeUndefineds;
|
18
|
+
//# sourceMappingURL=util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":";;;AAAO,MAAM,SAAS,GAAG,CAAI,CAAuB,EAAU,EAAE;IAC9D,OAAO,OAAO,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC;AAChD,CAAC,CAAC;AAFW,QAAA,SAAS,aAEpB;AAEK,MAAM,gBAAgB,GAAG,CAAI,CAAgB,EAAO,EAAE;IAC3D,MAAM,QAAQ,GAAQ,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;QACpB,IAAI,IAAA,iBAAS,EAAC,IAAI,CAAC,EAAE;YACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrB;KACF;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B","sourcesContent":["export const isDefined = <T>(a: T | undefined | null): a is T => {\n return typeof a !== 'undefined' && a !== null;\n};\n\nexport const removeUndefineds = <T>(a: Optional<T>[]): T[] => {\n const newArray: T[] = [];\n for (const item of a) {\n if (isDefined(item)) {\n newArray.push(item);\n }\n }\n return newArray;\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const versionCompare: (appVersion?: string, minVersion?: string) => number;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.versionCompare = void 0;
|
4
|
+
const util_1 = require("./util");
|
5
|
+
const versionCompare = (appVersion, minVersion) => {
|
6
|
+
if (!(0, util_1.isDefined)(appVersion) || !(0, util_1.isDefined)(minVersion)) {
|
7
|
+
throw new Error('Requires two version numbers to compare.');
|
8
|
+
}
|
9
|
+
// Adapted from https://stackoverflow.com/a/6832721
|
10
|
+
const zeroExtend = true, v1parts = appVersion.split('.'), v2parts = minVersion.split('.');
|
11
|
+
function isValidPart(x) {
|
12
|
+
return /^\d+$/.test(x);
|
13
|
+
}
|
14
|
+
if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {
|
15
|
+
return NaN;
|
16
|
+
}
|
17
|
+
if (zeroExtend) {
|
18
|
+
while (v1parts.length < v2parts.length) {
|
19
|
+
v1parts.push('0');
|
20
|
+
}
|
21
|
+
while (v2parts.length < v1parts.length) {
|
22
|
+
v2parts.push('0');
|
23
|
+
}
|
24
|
+
}
|
25
|
+
const v1parts_number = v1parts.map(Number);
|
26
|
+
const v2parts_number = v2parts.map(Number);
|
27
|
+
for (let i = 0; i < v1parts_number.length; ++i) {
|
28
|
+
if (v2parts_number.length === i) {
|
29
|
+
return 1;
|
30
|
+
}
|
31
|
+
if (v1parts_number[i] === v2parts_number[i]) {
|
32
|
+
continue;
|
33
|
+
}
|
34
|
+
else if (v1parts_number[i] > v2parts_number[i]) {
|
35
|
+
return 1;
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
return -1;
|
39
|
+
}
|
40
|
+
}
|
41
|
+
if (v1parts_number.length !== v2parts_number.length) {
|
42
|
+
return -1;
|
43
|
+
}
|
44
|
+
return 0;
|
45
|
+
};
|
46
|
+
exports.versionCompare = versionCompare;
|
47
|
+
//# sourceMappingURL=versions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/utils/versions.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AAE5B,MAAM,cAAc,GAAG,CAC5B,UAAmB,EACnB,UAAmB,EACX,EAAE;IACV,IAAI,CAAC,IAAA,gBAAS,EAAC,UAAU,CAAC,IAAI,CAAC,IAAA,gBAAS,EAAC,UAAU,CAAC,EAAE;QACpD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;KAC7D;IAED,mDAAmD;IACnD,MAAM,UAAU,GAAG,IAAI,EACrB,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,EAC/B,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,SAAS,WAAW,CAAC,CAAS;QAC5B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QAC9D,OAAO,GAAG,CAAC;KACZ;IACD,IAAI,UAAU,EAAE;QACd,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnB;QACD,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;YACtC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACnB;KACF;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAC9C,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,OAAO,CAAC,CAAC;SACV;QACD,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE;YAC3C,SAAS;SACV;aAAM,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE;YAChD,OAAO,CAAC,CAAC;SACV;aAAM;YACL,OAAO,CAAC,CAAC,CAAC;SACX;KACF;IACD,IAAI,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE;QACnD,OAAO,CAAC,CAAC,CAAC;KACX;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAhDW,QAAA,cAAc,kBAgDzB","sourcesContent":["import { isDefined } from './util';\n\nexport const versionCompare = (\n appVersion?: string,\n minVersion?: string,\n): number => {\n if (!isDefined(appVersion) || !isDefined(minVersion)) {\n throw new Error('Requires two version numbers to compare.');\n }\n\n // Adapted from https://stackoverflow.com/a/6832721\n const zeroExtend = true,\n v1parts = appVersion.split('.'),\n v2parts = minVersion.split('.');\n\n function isValidPart(x: string) {\n return /^\\d+$/.test(x);\n }\n\n if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {\n return NaN;\n }\n if (zeroExtend) {\n while (v1parts.length < v2parts.length) {\n v1parts.push('0');\n }\n while (v2parts.length < v1parts.length) {\n v2parts.push('0');\n }\n }\n\n const v1parts_number = v1parts.map(Number);\n const v2parts_number = v2parts.map(Number);\n\n for (let i = 0; i < v1parts_number.length; ++i) {\n if (v2parts_number.length === i) {\n return 1;\n }\n if (v1parts_number[i] === v2parts_number[i]) {\n continue;\n } else if (v1parts_number[i] > v2parts_number[i]) {\n return 1;\n } else {\n return -1;\n }\n }\n if (v1parts_number.length !== v2parts_number.length) {\n return -1;\n }\n return 0;\n};\n"]}
|
package/package.json
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
{
|
2
|
+
"name": "dop-sharedmodel",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"license": "MIT",
|
5
|
+
"author": "DOP Team",
|
6
|
+
"main": "dist/index.js",
|
7
|
+
"files": [
|
8
|
+
"dist/**/*"
|
9
|
+
],
|
10
|
+
"exports": {
|
11
|
+
".": "./dist/index.js"
|
12
|
+
},
|
13
|
+
"scripts": {
|
14
|
+
"clean": "rm -rf dist",
|
15
|
+
"build": "npm run clean && tsc",
|
16
|
+
"prepare": "npm run build",
|
17
|
+
"check-circular-deps": "madge --circular .",
|
18
|
+
"eslint": "eslint src --ext .ts,.tsx --fix",
|
19
|
+
"lint": "npm run check-circular-deps && npm run eslint",
|
20
|
+
"tsc-test": "tsc -p tsconfig.test.json && tsc-alias -p tsconfig.test.json",
|
21
|
+
"compile-test": "npm run clean && npm run tsc-test",
|
22
|
+
"test-coverage": "npm run compile-test && nyc mocha 'src/**/__tests__/*.test.ts'",
|
23
|
+
"test": "npm run compile-test && mocha 'src/**/__tests__/*.test.ts'"
|
24
|
+
},
|
25
|
+
"peerDependencies": {
|
26
|
+
"ethers": "github:MuhammadWaqas4/ethers.js#v6.7.6"
|
27
|
+
},
|
28
|
+
"devDependencies": {
|
29
|
+
"ethers": "github:MuhammadWaqas4/ethers.js#v6.7.6",
|
30
|
+
"@types/chai": "4.3.5",
|
31
|
+
"@types/chai-as-promised": "^7.1.5",
|
32
|
+
"@types/mocha": "^10.0.1",
|
33
|
+
"@types/node": "20.3.1",
|
34
|
+
"@typescript-eslint/eslint-plugin": "5.60.0",
|
35
|
+
"@typescript-eslint/parser": "5.60.0",
|
36
|
+
"chai": "^4.3.7",
|
37
|
+
"chai-as-promised": "^7.1.1",
|
38
|
+
"eslint": "8.43.0",
|
39
|
+
"eslint-config-prettier": "^8.5.0",
|
40
|
+
"eslint-plugin-flowtype": "^8.0.3",
|
41
|
+
"eslint-plugin-import": "^2.26.0",
|
42
|
+
"madge": "6.1.0",
|
43
|
+
"mocha": "^10.2.0",
|
44
|
+
"ts-node": "^10.9.1",
|
45
|
+
"tsc-alias": "^1.8.2",
|
46
|
+
"typescript": "5.1.3"
|
47
|
+
}
|
48
|
+
}
|