dedot 0.0.1-alpha.22

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 (100) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +245 -0
  3. package/cjs/client/Dedot.js +444 -0
  4. package/cjs/client/index.js +17 -0
  5. package/cjs/executor/ConstantExecutor.js +22 -0
  6. package/cjs/executor/ErrorExecutor.js +47 -0
  7. package/cjs/executor/EventExecutor.js +53 -0
  8. package/cjs/executor/Executor.js +39 -0
  9. package/cjs/executor/RpcExecutor.js +109 -0
  10. package/cjs/executor/RuntimeApiExecutor.js +93 -0
  11. package/cjs/executor/StorageQueryExecutor.js +33 -0
  12. package/cjs/executor/TxExecutor.js +153 -0
  13. package/cjs/executor/index.js +24 -0
  14. package/cjs/extrinsic/SubmittableResult.js +33 -0
  15. package/cjs/extrinsic/extensions/ExtraSignedExtension.js +65 -0
  16. package/cjs/extrinsic/extensions/SignedExtension.js +41 -0
  17. package/cjs/extrinsic/extensions/index.js +19 -0
  18. package/cjs/extrinsic/extensions/known/ChargeAssetTxPayment.js +44 -0
  19. package/cjs/extrinsic/extensions/known/ChargeTransactionPayment.js +16 -0
  20. package/cjs/extrinsic/extensions/known/CheckGenesis.js +19 -0
  21. package/cjs/extrinsic/extensions/known/CheckMortality.js +71 -0
  22. package/cjs/extrinsic/extensions/known/CheckNonZeroSender.js +10 -0
  23. package/cjs/extrinsic/extensions/known/CheckNonce.js +34 -0
  24. package/cjs/extrinsic/extensions/known/CheckSpecVersion.js +19 -0
  25. package/cjs/extrinsic/extensions/known/CheckTxVersion.js +19 -0
  26. package/cjs/extrinsic/extensions/known/CheckWeight.js +10 -0
  27. package/cjs/extrinsic/extensions/known/PrevalidateAttests.js +11 -0
  28. package/cjs/extrinsic/extensions/known/index.js +25 -0
  29. package/cjs/extrinsic/index.js +18 -0
  30. package/cjs/index.js +25 -0
  31. package/cjs/package.json +1 -0
  32. package/cjs/packageInfo.js +5 -0
  33. package/cjs/proxychain.js +20 -0
  34. package/cjs/storage/QueryableStorage.js +99 -0
  35. package/cjs/types.js +2 -0
  36. package/client/Dedot.d.ts +181 -0
  37. package/client/Dedot.js +440 -0
  38. package/client/index.d.ts +1 -0
  39. package/client/index.js +1 -0
  40. package/executor/ConstantExecutor.d.ts +11 -0
  41. package/executor/ConstantExecutor.js +18 -0
  42. package/executor/ErrorExecutor.d.ts +11 -0
  43. package/executor/ErrorExecutor.js +43 -0
  44. package/executor/EventExecutor.d.ts +11 -0
  45. package/executor/EventExecutor.js +49 -0
  46. package/executor/Executor.d.ts +150 -0
  47. package/executor/Executor.js +35 -0
  48. package/executor/RpcExecutor.d.ts +14 -0
  49. package/executor/RpcExecutor.js +105 -0
  50. package/executor/RuntimeApiExecutor.d.ts +9 -0
  51. package/executor/RuntimeApiExecutor.js +89 -0
  52. package/executor/StorageQueryExecutor.d.ts +10 -0
  53. package/executor/StorageQueryExecutor.js +29 -0
  54. package/executor/TxExecutor.d.ts +47 -0
  55. package/executor/TxExecutor.js +147 -0
  56. package/executor/index.d.ts +8 -0
  57. package/executor/index.js +8 -0
  58. package/extrinsic/SubmittableResult.d.ts +19 -0
  59. package/extrinsic/SubmittableResult.js +29 -0
  60. package/extrinsic/extensions/ExtraSignedExtension.d.ts +14 -0
  61. package/extrinsic/extensions/ExtraSignedExtension.js +61 -0
  62. package/extrinsic/extensions/SignedExtension.d.ts +40 -0
  63. package/extrinsic/extensions/SignedExtension.js +37 -0
  64. package/extrinsic/extensions/index.d.ts +3 -0
  65. package/extrinsic/extensions/index.js +3 -0
  66. package/extrinsic/extensions/known/ChargeAssetTxPayment.d.ts +14 -0
  67. package/extrinsic/extensions/known/ChargeAssetTxPayment.js +40 -0
  68. package/extrinsic/extensions/known/ChargeTransactionPayment.d.ts +6 -0
  69. package/extrinsic/extensions/known/ChargeTransactionPayment.js +12 -0
  70. package/extrinsic/extensions/known/CheckGenesis.d.ts +10 -0
  71. package/extrinsic/extensions/known/CheckGenesis.js +15 -0
  72. package/extrinsic/extensions/known/CheckMortality.d.ts +15 -0
  73. package/extrinsic/extensions/known/CheckMortality.js +67 -0
  74. package/extrinsic/extensions/known/CheckNonZeroSender.d.ts +6 -0
  75. package/extrinsic/extensions/known/CheckNonZeroSender.js +6 -0
  76. package/extrinsic/extensions/known/CheckNonce.d.ts +10 -0
  77. package/extrinsic/extensions/known/CheckNonce.js +30 -0
  78. package/extrinsic/extensions/known/CheckSpecVersion.d.ts +9 -0
  79. package/extrinsic/extensions/known/CheckSpecVersion.js +15 -0
  80. package/extrinsic/extensions/known/CheckTxVersion.d.ts +9 -0
  81. package/extrinsic/extensions/known/CheckTxVersion.js +15 -0
  82. package/extrinsic/extensions/known/CheckWeight.d.ts +6 -0
  83. package/extrinsic/extensions/known/CheckWeight.js +6 -0
  84. package/extrinsic/extensions/known/PrevalidateAttests.d.ts +7 -0
  85. package/extrinsic/extensions/known/PrevalidateAttests.js +7 -0
  86. package/extrinsic/extensions/known/index.d.ts +3 -0
  87. package/extrinsic/extensions/known/index.js +22 -0
  88. package/extrinsic/index.d.ts +2 -0
  89. package/extrinsic/index.js +2 -0
  90. package/index.d.ts +6 -0
  91. package/index.js +5 -0
  92. package/package.json +54 -0
  93. package/packageInfo.d.ts +4 -0
  94. package/packageInfo.js +3 -0
  95. package/proxychain.d.ts +7 -0
  96. package/proxychain.js +16 -0
  97. package/storage/QueryableStorage.d.ts +16 -0
  98. package/storage/QueryableStorage.js +95 -0
  99. package/types.d.ts +44 -0
  100. package/types.js +1 -0
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckMortality = exports.MORTAL_PERIOD = exports.FALLBACK_PERIOD = exports.FALLBACK_MAX_HASH_COUNT = exports.MAX_FINALITY_LAG = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ const utils_1 = require("@dedot/utils");
6
+ const util_1 = require("@polkadot/util");
7
+ exports.MAX_FINALITY_LAG = 5;
8
+ exports.FALLBACK_MAX_HASH_COUNT = 250;
9
+ exports.FALLBACK_PERIOD = 6 * 1000;
10
+ exports.MORTAL_PERIOD = 5 * 60 * 1000;
11
+ /**
12
+ * @description Check for transaction mortality.
13
+ */
14
+ class CheckMortality extends SignedExtension_1.SignedExtension {
15
+ #signingHeader;
16
+ async init() {
17
+ this.#signingHeader = await this.#determineSigningHeader();
18
+ this.data = { period: this.#calculateMortalLength(), current: BigInt(this.#signingHeader.number) };
19
+ this.additionalSigned = (await this.api.rpc.chain.getBlockHash(this.#signingHeader.number));
20
+ }
21
+ // Ref: https://github.com/polkadot-js/api/blob/3bdf49b0428a62f16b3222b9a31bfefa43c1ca55/packages/api-derive/src/tx/signingInfo.ts#L34-L64
22
+ async #determineSigningHeader() {
23
+ const [header, finalizedHash] = await Promise.all([
24
+ this.api.rpc.chain.getHeader(),
25
+ this.api.rpc.chain.getFinalizedHead(),
26
+ ]);
27
+ (0, utils_1.assert)(header, 'Current header not found');
28
+ const [currentHeader, finalizedHeader] = await Promise.all([
29
+ Promise.resolve(header).then((header) => {
30
+ const { parentHash } = header;
31
+ if (parentHash.length === 0 || (0, utils_1.isZeroHash)(parentHash)) {
32
+ return header;
33
+ }
34
+ else {
35
+ return this.api.rpc.chain.getHeader(parentHash);
36
+ }
37
+ }),
38
+ this.api.rpc.chain.getHeader(finalizedHash),
39
+ ]);
40
+ (0, utils_1.assert)(currentHeader, 'Cannot determine current header');
41
+ if (!finalizedHeader || currentHeader.number - finalizedHeader.number > exports.MAX_FINALITY_LAG) {
42
+ return currentHeader;
43
+ }
44
+ return finalizedHeader;
45
+ }
46
+ // Ref: https://github.com/polkadot-js/api/blob/3bdf49b0428a62f16b3222b9a31bfefa43c1ca55/packages/api-derive/src/tx/signingInfo.ts#L83-L93
47
+ #calculateMortalLength() {
48
+ return (0, utils_1.min)(BigInt(this.#getConst('system', 'blockHashCount') || exports.FALLBACK_MAX_HASH_COUNT), BigInt(exports.MORTAL_PERIOD) /
49
+ BigInt(this.#getConst('babe', 'expectedBlockTime') ||
50
+ BigInt(this.#getConst('timestamp', 'minimumPeriod') || 0) * 2n ||
51
+ exports.FALLBACK_PERIOD) +
52
+ BigInt(exports.MAX_FINALITY_LAG));
53
+ }
54
+ #getConst(pallet, name) {
55
+ try {
56
+ return this.api.consts[pallet][name];
57
+ }
58
+ catch {
59
+ // ignore this on purpose
60
+ }
61
+ return undefined;
62
+ }
63
+ toPayload() {
64
+ return {
65
+ era: (0, util_1.u8aToHex)(this.dataCodec.tryEncode(this.data)),
66
+ blockHash: this.additionalSigned,
67
+ blockNumber: (0, util_1.numberToHex)(this.#signingHeader.number),
68
+ };
69
+ }
70
+ }
71
+ exports.CheckMortality = CheckMortality;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckNonZeroSender = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ /**
6
+ * @description Check to ensure that the sender is not the zero address
7
+ */
8
+ class CheckNonZeroSender extends SignedExtension_1.SignedExtension {
9
+ }
10
+ exports.CheckNonZeroSender = CheckNonZeroSender;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckNonce = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ const util_1 = require("@polkadot/util");
6
+ const utils_1 = require("@dedot/utils");
7
+ /**
8
+ * @description Nonce check and increment to give replay protection for transactions.
9
+ */
10
+ class CheckNonce extends SignedExtension_1.SignedExtension {
11
+ async init() {
12
+ this.data = this.payloadOptions.nonce || (await this.#getNonce());
13
+ }
14
+ async #getNonce() {
15
+ const { signerAddress } = this.options || {};
16
+ (0, utils_1.assert)(signerAddress, 'Signer address not found');
17
+ try {
18
+ return (await this.api.query.system.account(signerAddress)).nonce;
19
+ }
20
+ catch { }
21
+ try {
22
+ return await this.api.call.accountNonceApi.accountNonce(signerAddress);
23
+ }
24
+ catch { }
25
+ // TODO fallback to api.rpc.system.accountNextIndex if needed
26
+ return 0;
27
+ }
28
+ toPayload() {
29
+ return {
30
+ nonce: (0, util_1.numberToHex)(this.data),
31
+ };
32
+ }
33
+ }
34
+ exports.CheckNonce = CheckNonce;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckSpecVersion = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ const util_1 = require("@polkadot/util");
6
+ /**
7
+ * @description Ensure the runtime version registered in the transaction is the same as at present.
8
+ */
9
+ class CheckSpecVersion extends SignedExtension_1.SignedExtension {
10
+ async init() {
11
+ this.additionalSigned = this.api.runtimeVersion.specVersion;
12
+ }
13
+ toPayload() {
14
+ return {
15
+ specVersion: (0, util_1.numberToHex)(this.additionalSigned),
16
+ };
17
+ }
18
+ }
19
+ exports.CheckSpecVersion = CheckSpecVersion;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckTxVersion = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ const util_1 = require("@polkadot/util");
6
+ /**
7
+ * @description Ensure the transaction version registered in the transaction is the same as at present.
8
+ */
9
+ class CheckTxVersion extends SignedExtension_1.SignedExtension {
10
+ async init() {
11
+ this.additionalSigned = this.api.runtimeVersion.transactionVersion;
12
+ }
13
+ toPayload() {
14
+ return {
15
+ transactionVersion: (0, util_1.numberToHex)(this.additionalSigned),
16
+ };
17
+ }
18
+ }
19
+ exports.CheckTxVersion = CheckTxVersion;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CheckWeight = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ /**
6
+ * @description Block resource (weight) limit check.
7
+ */
8
+ class CheckWeight extends SignedExtension_1.SignedExtension {
9
+ }
10
+ exports.CheckWeight = CheckWeight;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrevalidateAttests = void 0;
4
+ const SignedExtension_1 = require("../SignedExtension");
5
+ /**
6
+ * @description Validate `attest` calls prior to execution.
7
+ * Needed to avoid a DoS attack since they are otherwise free to place on chain.
8
+ */
9
+ class PrevalidateAttests extends SignedExtension_1.SignedExtension {
10
+ }
11
+ exports.PrevalidateAttests = PrevalidateAttests;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.knownSignedExtensions = void 0;
4
+ const CheckNonZeroSender_1 = require("./CheckNonZeroSender");
5
+ const CheckSpecVersion_1 = require("./CheckSpecVersion");
6
+ const CheckTxVersion_1 = require("./CheckTxVersion");
7
+ const CheckGenesis_1 = require("./CheckGenesis");
8
+ const CheckMortality_1 = require("./CheckMortality");
9
+ const CheckNonce_1 = require("./CheckNonce");
10
+ const CheckWeight_1 = require("./CheckWeight");
11
+ const ChargeTransactionPayment_1 = require("./ChargeTransactionPayment");
12
+ const PrevalidateAttests_1 = require("./PrevalidateAttests");
13
+ const ChargeAssetTxPayment_1 = require("./ChargeAssetTxPayment");
14
+ exports.knownSignedExtensions = {
15
+ CheckNonZeroSender: CheckNonZeroSender_1.CheckNonZeroSender,
16
+ CheckSpecVersion: CheckSpecVersion_1.CheckSpecVersion,
17
+ CheckTxVersion: CheckTxVersion_1.CheckTxVersion,
18
+ CheckGenesis: CheckGenesis_1.CheckGenesis,
19
+ CheckMortality: CheckMortality_1.CheckMortality,
20
+ CheckNonce: CheckNonce_1.CheckNonce,
21
+ CheckWeight: CheckWeight_1.CheckWeight,
22
+ ChargeTransactionPayment: ChargeTransactionPayment_1.ChargeTransactionPayment,
23
+ PrevalidateAttests: PrevalidateAttests_1.PrevalidateAttests,
24
+ ChargeAssetTxPayment: ChargeAssetTxPayment_1.ChargeAssetTxPayment,
25
+ };
@@ -0,0 +1,18 @@
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("./extensions"), exports);
18
+ __exportStar(require("./SubmittableResult"), exports);
package/cjs/index.js ADDED
@@ -0,0 +1,25 @@
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
+ exports.WsProvider = exports.ScProvider = exports.HttpProvider = exports.Dedot = void 0;
18
+ const client_1 = require("./client");
19
+ Object.defineProperty(exports, "Dedot", { enumerable: true, get: function () { return client_1.Dedot; } });
20
+ __exportStar(require("./executor"), exports);
21
+ __exportStar(require("./extrinsic"), exports);
22
+ var rpc_provider_1 = require("@polkadot/rpc-provider");
23
+ Object.defineProperty(exports, "HttpProvider", { enumerable: true, get: function () { return rpc_provider_1.HttpProvider; } });
24
+ Object.defineProperty(exports, "ScProvider", { enumerable: true, get: function () { return rpc_provider_1.ScProvider; } });
25
+ Object.defineProperty(exports, "WsProvider", { enumerable: true, get: function () { return rpc_provider_1.WsProvider; } });
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // THIS FILE IS AUTO-GENERATED, DO NOT EDIT!
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.packageInfo = void 0;
5
+ exports.packageInfo = { name: 'dedot', version: '0.0.1-alpha.21' };
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.newProxyChain = void 0;
4
+ const newProxyChain = (carrier, currentLevel = 1, maxLevel = 3) => {
5
+ const { executor, chain = [] } = carrier;
6
+ if (currentLevel === maxLevel) {
7
+ return executor.execute(...chain);
8
+ }
9
+ return new Proxy(carrier, {
10
+ get(target, property, receiver) {
11
+ if (!target.chain) {
12
+ target.chain = [];
13
+ }
14
+ const { chain } = target;
15
+ chain.push(property.toString());
16
+ return (0, exports.newProxyChain)(target, currentLevel + 1);
17
+ },
18
+ });
19
+ };
20
+ exports.newProxyChain = newProxyChain;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueryableStorage = void 0;
4
+ const utils_1 = require("@dedot/utils");
5
+ const codecs_1 = require("@dedot/codecs");
6
+ const util_1 = require("@polkadot/util");
7
+ const util_crypto_1 = require("@polkadot/util-crypto");
8
+ /**
9
+ * @name QueryableStorage
10
+ * @description A helper to encode key & decode value for a storage entry
11
+ */
12
+ class QueryableStorage {
13
+ registry;
14
+ palletName;
15
+ storageItem;
16
+ pallet;
17
+ storageEntry;
18
+ constructor(registry, palletName, storageItem) {
19
+ this.registry = registry;
20
+ this.palletName = palletName;
21
+ this.storageItem = storageItem;
22
+ this.pallet = this.#getPallet();
23
+ this.storageEntry = this.#getStorageEntry();
24
+ }
25
+ encodeKey(keyInput) {
26
+ const palletNameHash = (0, util_crypto_1.xxhashAsU8a)(this.pallet.name, 128);
27
+ const storageItemHash = (0, util_crypto_1.xxhashAsU8a)(this.storageEntry.name, 128);
28
+ const prefixHash = (0, util_1.u8aConcat)(palletNameHash, storageItemHash);
29
+ const { type } = this.storageEntry;
30
+ if (type.tag === 'Plain') {
31
+ return (0, util_1.u8aToHex)(prefixHash);
32
+ }
33
+ else if (type.tag === 'Map') {
34
+ const { hashers, keyTypeId } = type.value;
35
+ const extractedInputs = this.#extractRequiredKeyInputs(keyInput, hashers.length);
36
+ let keyTypeIds = [keyTypeId];
37
+ if (hashers.length > 1) {
38
+ const { type } = this.registry.findPortableType(keyTypeId);
39
+ (0, utils_1.assert)(type.tag === 'Tuple', 'Key type should be a tuple!');
40
+ keyTypeIds = type.value.fields;
41
+ }
42
+ const keyParts = keyTypeIds.map((keyId, index) => {
43
+ const input = extractedInputs[index];
44
+ const hasher = utils_1.HASHERS[hashers[index]];
45
+ const $keyCodec = this.registry.findPortableCodec(keyId);
46
+ return hasher($keyCodec.tryEncode(input));
47
+ });
48
+ return (0, util_1.u8aToHex)((0, util_1.u8aConcat)(prefixHash, ...keyParts));
49
+ }
50
+ throw Error(`Invalid storage entry type: ${type}`);
51
+ }
52
+ decodeValue(raw) {
53
+ const { modifier, type: { value: { valueTypeId }, }, default: defaultValue, } = this.storageEntry;
54
+ if (raw === null || raw === undefined) {
55
+ if (modifier === 'Optional') {
56
+ return undefined;
57
+ }
58
+ else if (modifier === 'Default') {
59
+ return this.registry.findPortableCodec(valueTypeId).tryDecode((0, util_1.hexToU8a)(defaultValue));
60
+ }
61
+ }
62
+ else {
63
+ return this.registry.findPortableCodec(valueTypeId).tryDecode(codecs_1.$StorageData.tryEncode(raw));
64
+ }
65
+ }
66
+ #extractRequiredKeyInputs(keyInput, numberOfValue) {
67
+ if (numberOfValue === 0) {
68
+ return [];
69
+ }
70
+ else {
71
+ if (keyInput === undefined) {
72
+ throw new Error(`Invalid key inputs, required ${numberOfValue} input(s)`);
73
+ }
74
+ if (numberOfValue === 1) {
75
+ return [keyInput];
76
+ }
77
+ else {
78
+ if (!Array.isArray(keyInput)) {
79
+ throw new Error(`Input should be an array with ${numberOfValue} value(s)`);
80
+ }
81
+ if (keyInput.length !== numberOfValue) {
82
+ throw new Error(`Mismatch key inputs length, required an array of ${numberOfValue} value(s)`);
83
+ }
84
+ return keyInput.slice(0, numberOfValue);
85
+ }
86
+ }
87
+ }
88
+ #getPallet() {
89
+ const targetPallet = this.registry.metadata.pallets.find((p) => (0, util_1.stringCamelCase)(p.name) === (0, util_1.stringCamelCase)(this.palletName));
90
+ (0, utils_1.assert)(targetPallet, `Pallet not found: ${this.palletName}`);
91
+ return targetPallet;
92
+ }
93
+ #getStorageEntry() {
94
+ const targetEntry = this.pallet.storage?.entries?.find((entry) => (0, util_1.stringCamelCase)(entry.name) === (0, util_1.stringCamelCase)(this.storageItem));
95
+ (0, utils_1.assert)(targetEntry, `Storage item not found: ${this.storageItem}`);
96
+ return targetEntry;
97
+ }
98
+ }
99
+ exports.QueryableStorage = QueryableStorage;
package/cjs/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,181 @@
1
+ import { ProviderInterface } from '@polkadot/rpc-provider/types';
2
+ import type { SubstrateApi } from '@dedot/chaintypes';
3
+ import { BlockHash, CodecRegistry, Metadata, MetadataLatest } from '@dedot/codecs';
4
+ import { ChainProperties, GenericSubstrateApi } from '@dedot/types';
5
+ import { ApiOptions, MetadataKey, NetworkEndpoint, NormalizedApiOptions } from '../types';
6
+ export declare const KEEP_ALIVE_INTERVAL = 10000;
7
+ export declare const CATCH_ALL_METADATA_KEY: MetadataKey;
8
+ export declare const SUPPORTED_METADATA_VERSIONS: number[];
9
+ /**
10
+ * @name Dedot
11
+ * @description Promised-based API Client for Polkadot & Substrate
12
+ *
13
+ * ### Initialize API instance and interact with substrate-based network
14
+ * ```typescript
15
+ * import { Dedot } from 'dedot';
16
+ * import { PolkadotApi } from '@dedot/chaintypes/polkadot';
17
+ *
18
+ * const run = async () => {
19
+ * const api = await Dedot.new<PolkadotApi>('wss://rpc.polkadot.io');
20
+ *
21
+ * // Call rpc `state_getMetadata` to fetch raw scale-encoded metadata and decode it.
22
+ * const metadata = await api.rpc.state.getMetadata();
23
+ * console.log('Metadata:', metadata);
24
+ *
25
+ * // Query on-chain storage
26
+ * const address = '14...';
27
+ * const balance = await api.query.system.account(address);
28
+ * console.log('Balance:', balance);
29
+ *
30
+ *
31
+ * // Subscribe to on-chain storage changes
32
+ * const unsub = await api.query.system.number((blockNumber) => {
33
+ * console.log(`Current block number: ${blockNumber}`);
34
+ * });
35
+ *
36
+ * // Get pallet constants
37
+ * const ss58Prefix = api.consts.system.ss58Prefix;
38
+ * console.log('Polkadot ss58Prefix:', ss58Prefix)
39
+ *
40
+ * // await unsub();
41
+ * // await api.disconnect();
42
+ * }
43
+ *
44
+ * run().catch(console.error);
45
+ * ```
46
+ */
47
+ export declare class Dedot<ChainApi extends GenericSubstrateApi = SubstrateApi> {
48
+ #private;
49
+ /**
50
+ * Use factory methods (`create`, `new`) to create `Dedot` instances.
51
+ *
52
+ * @param options
53
+ * @protected
54
+ */
55
+ protected constructor(options: ApiOptions | NetworkEndpoint);
56
+ /**
57
+ * Factory method to create a new Dedot instance
58
+ *
59
+ * @param options
60
+ */
61
+ static create<ChainApi extends GenericSubstrateApi = SubstrateApi>(options: ApiOptions | NetworkEndpoint): Promise<Dedot<ChainApi>>;
62
+ /**
63
+ * Alias for __Dedot.create__
64
+ * @param options
65
+ */
66
+ static new<ChainApi extends GenericSubstrateApi = SubstrateApi>(options: ApiOptions | NetworkEndpoint): Promise<Dedot<ChainApi>>;
67
+ /**
68
+ * Initialize APIs before usage
69
+ */
70
+ init(): Promise<void>;
71
+ /**
72
+ * @description Entry-point for executing RPCs to blockchain node.
73
+ *
74
+ * ```typescript
75
+ * // Subscribe to new heads
76
+ * api.rpc.chain.subscribeNewHeads((header) => {
77
+ * console.log(header);
78
+ * });
79
+ *
80
+ * // Execute arbitrary rpc method: `module_rpc_name`
81
+ * const result = await api.rpc.module.rpc_name();
82
+ * ```
83
+ */
84
+ get rpc(): ChainApi['rpc'];
85
+ /**
86
+ * @description Entry-point for inspecting constants (parameter types) for all pallets (modules).
87
+ *
88
+ * ```typescript
89
+ * const ss58Prefix = api.consts.system.ss58Prefix;
90
+ * console.log('ss58Prefix:', ss58Prefix)
91
+ * ```
92
+ */
93
+ get consts(): ChainApi['consts'];
94
+ /**
95
+ * @description Entry-point for executing query to on-chain storage.
96
+ *
97
+ * ```typescript
98
+ * const balance = await api.query.system.account(<address>);
99
+ * console.log('Balance:', balance);
100
+ * ```
101
+ */
102
+ get query(): ChainApi['query'];
103
+ queryAt(blockHash: BlockHash): ChainApi['query'];
104
+ /**
105
+ * @description Entry-point for inspecting errors from metadata
106
+ */
107
+ get errors(): ChainApi['errors'];
108
+ /**
109
+ * @description Entry-point for inspecting events from metadata
110
+ */
111
+ get events(): ChainApi['events'];
112
+ get call(): ChainApi['call'];
113
+ callAt(blockHash: BlockHash): ChainApi['call'];
114
+ get tx(): ChainApi['tx'];
115
+ /**
116
+ * @description Current provider for api connection
117
+ */
118
+ get provider(): ProviderInterface;
119
+ /**
120
+ * @description Codec registry
121
+ */
122
+ get registry(): CodecRegistry;
123
+ /**
124
+ * @description Check if metadata is present
125
+ */
126
+ get hasMetadata(): boolean;
127
+ get metadata(): Metadata;
128
+ get metadataLatest(): MetadataLatest;
129
+ /**
130
+ * Setup metadata for
131
+ * @param metadata
132
+ */
133
+ setMetadata(metadata: Metadata): void;
134
+ /**
135
+ * @description Disconnect to blockchain node
136
+ */
137
+ disconnect(): Promise<void>;
138
+ /**
139
+ * @description Clear local cache
140
+ */
141
+ clearCache(): Promise<void>;
142
+ /**
143
+ * @description Check if current provider can make subscription request (e.: via WebSocket)
144
+ */
145
+ get hasSubscriptions(): boolean;
146
+ /**
147
+ * @description Check if it's connected to the blockchain node
148
+ */
149
+ get isConnected(): boolean;
150
+ /**
151
+ * @description Check if the api instance is using a catch-all metadata
152
+ */
153
+ get hasCatchAllMetadata(): boolean;
154
+ get currentMetadataKey(): string;
155
+ /**
156
+ * @description Genesis hash of connected blockchain node
157
+ */
158
+ get genesisHash(): `0x${string}` | undefined;
159
+ /**
160
+ * @description Runtime version of connected blockchain node
161
+ */
162
+ get runtimeVersion(): {
163
+ specName: string;
164
+ implName: string;
165
+ authoringVersion: number;
166
+ specVersion: number;
167
+ implVersion: number;
168
+ apis: (readonly [`0x${string}`, number])[];
169
+ transactionVersion: number;
170
+ stateVersion: number;
171
+ } | undefined;
172
+ /**
173
+ * @description Chain properties of connected blockchain node
174
+ */
175
+ get chainProperties(): ChainProperties | undefined;
176
+ /**
177
+ * @description Runtime chain name of connected blockchain node
178
+ */
179
+ get runtimeChain(): string | undefined;
180
+ get options(): NormalizedApiOptions;
181
+ }