polkadot-api 0.12.0 → 0.13.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/chains/ksmcc3/package.json +1 -0
- package/chains/ksmcc3_asset_hub/package.json +1 -0
- package/chains/ksmcc3_bridge_hub/package.json +1 -0
- package/chains/ksmcc3_people/package.json +9 -0
- package/chains/package.json +1 -0
- package/chains/paseo/package.json +1 -0
- package/chains/paseo_asset_hub/package.json +1 -0
- package/chains/polkadot/package.json +1 -0
- package/chains/polkadot_asset_hub/package.json +1 -0
- package/chains/polkadot_bridge_hub/package.json +1 -0
- package/chains/polkadot_collectives/package.json +1 -0
- package/chains/polkadot_people/package.json +1 -0
- package/chains/rococo_v2_2/package.json +1 -0
- package/chains/rococo_v2_2_asset_hub/package.json +1 -0
- package/chains/rococo_v2_2_bridge_hub/package.json +1 -0
- package/chains/rococo_v2_2_people/package.json +9 -0
- package/chains/westend2/package.json +1 -0
- package/chains/westend2_asset_hub/package.json +1 -0
- package/chains/westend2_bridge_hub/package.json +1 -0
- package/chains/westend2_collectives/package.json +1 -0
- package/chains/westend2_people/package.json +9 -0
- package/dist/esm/reexports/chains_ksmcc3_people.mjs +2 -0
- package/dist/esm/reexports/chains_ksmcc3_people.mjs.map +1 -0
- package/dist/esm/reexports/chains_rococo_v2_2_people.mjs +2 -0
- package/dist/esm/reexports/chains_rococo_v2_2_people.mjs.map +1 -0
- package/dist/esm/reexports/chains_westend2_people.mjs +2 -0
- package/dist/esm/reexports/chains_westend2_people.mjs.map +1 -0
- package/dist/esm/reexports/polkadot-sdk-compat.mjs +0 -1
- package/dist/esm/reexports/polkadot-sdk-compat.mjs.map +1 -1
- package/dist/esm/reexports/smoldot_from-node-worker.mjs +2 -0
- package/dist/esm/reexports/smoldot_from-node-worker.mjs.map +1 -0
- package/dist/esm/reexports/smoldot_node-worker.mjs +2 -0
- package/dist/esm/reexports/smoldot_node-worker.mjs.map +1 -0
- package/dist/esm/runtime-call.mjs +1 -6
- package/dist/esm/runtime-call.mjs.map +1 -1
- package/dist/esm/storage.mjs +1 -6
- package/dist/esm/storage.mjs.map +1 -1
- package/dist/esm/tx/submit-fns.mjs +8 -2
- package/dist/esm/tx/submit-fns.mjs.map +1 -1
- package/dist/esm/utils/optional-arg.mjs +6 -0
- package/dist/esm/utils/optional-arg.mjs.map +1 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.js +13 -15
- package/dist/index.js.map +1 -1
- package/dist/reexports/chains.d.ts +5 -0
- package/dist/reexports/chains_ksmcc3_people.d.ts +1 -0
- package/dist/reexports/chains_ksmcc3_people.js +13 -0
- package/dist/reexports/chains_ksmcc3_people.js.map +1 -0
- package/dist/reexports/chains_rococo_v2_2_people.d.ts +1 -0
- package/dist/reexports/chains_rococo_v2_2_people.js +13 -0
- package/dist/reexports/chains_rococo_v2_2_people.js.map +1 -0
- package/dist/reexports/chains_westend2_people.d.ts +1 -0
- package/dist/reexports/chains_westend2_people.js +13 -0
- package/dist/reexports/chains_westend2_people.js.map +1 -0
- package/dist/reexports/polkadot-sdk-compat.d.ts +0 -1
- package/dist/reexports/polkadot-sdk-compat.js +0 -3
- package/dist/reexports/polkadot-sdk-compat.js.map +1 -1
- package/dist/reexports/smoldot_from-node-worker.d.ts +1 -0
- package/dist/reexports/smoldot_from-node-worker.js +13 -0
- package/dist/reexports/smoldot_from-node-worker.js.map +1 -0
- package/dist/reexports/smoldot_node-worker.d.ts +1 -0
- package/dist/reexports/smoldot_node-worker.js +13 -0
- package/dist/reexports/smoldot_node-worker.js.map +1 -0
- package/logs-provider/package.json +1 -0
- package/package.json +70 -15
- package/pjs-signer/package.json +1 -0
- package/polkadot-sdk-compat/package.json +1 -0
- package/signer/package.json +1 -0
- package/sm-provider/package.json +1 -0
- package/smoldot/from-node-worker/package.json +9 -0
- package/smoldot/from-worker/package.json +1 -0
- package/smoldot/node-worker/package.json +9 -0
- package/smoldot/package.json +1 -0
- package/smoldot/worker/package.json +1 -0
- package/utils/package.json +1 -0
- package/ws-provider/node/package.json +1 -0
- package/ws-provider/web/package.json +1 -0
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_ksmcc3.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_ksmcc3.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_ksmcc3.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_ksmcc3.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_ksmcc3.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_ksmcc3.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_ksmcc3_asset_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_ksmcc3_asset_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_ksmcc3_asset_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_ksmcc3_asset_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_ksmcc3_asset_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_ksmcc3_asset_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_ksmcc3_bridge_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_ksmcc3_bridge_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_ksmcc3_bridge_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_ksmcc3_bridge_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_ksmcc3_bridge_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_ksmcc3_bridge_hub.js"
|
|
8
9
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "polkadot-api_chains_ksmcc3_people",
|
|
3
|
+
"types": "../../dist/reexports/chains_ksmcc3_people.d.ts",
|
|
4
|
+
"module": "../../dist/esm/reexports/chains_ksmcc3_people.mjs",
|
|
5
|
+
"import": "../../dist/esm/reexports/chains_ksmcc3_people.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_ksmcc3_people.mjs",
|
|
7
|
+
"require": "../../dist/reexports/chains_ksmcc3_people.js",
|
|
8
|
+
"default": "../../dist/reexports/chains_ksmcc3_people.js"
|
|
9
|
+
}
|
package/chains/package.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../dist/reexports/chains.d.ts",
|
|
4
4
|
"module": "../dist/esm/reexports/chains.mjs",
|
|
5
5
|
"import": "../dist/esm/reexports/chains.mjs",
|
|
6
|
+
"browser": "../dist/esm/reexports/chains.mjs",
|
|
6
7
|
"require": "../dist/reexports/chains.js",
|
|
7
8
|
"default": "../dist/reexports/chains.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_paseo.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_paseo.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_paseo.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_paseo.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_paseo.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_paseo.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_paseo_asset_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_paseo_asset_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_paseo_asset_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_paseo_asset_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_paseo_asset_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_paseo_asset_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_polkadot.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_polkadot.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_polkadot.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_polkadot.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_polkadot.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_polkadot.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_polkadot_asset_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_polkadot_asset_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_polkadot_asset_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_polkadot_asset_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_polkadot_asset_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_polkadot_asset_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_polkadot_bridge_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_polkadot_bridge_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_polkadot_bridge_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_polkadot_bridge_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_polkadot_bridge_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_polkadot_bridge_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_polkadot_collectives.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_polkadot_collectives.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_polkadot_collectives.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_polkadot_collectives.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_polkadot_collectives.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_polkadot_collectives.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_polkadot_people.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_polkadot_people.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_polkadot_people.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_polkadot_people.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_polkadot_people.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_polkadot_people.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_rococo_v2_2.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_rococo_v2_2.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_rococo_v2_2.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_rococo_v2_2.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_rococo_v2_2.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_rococo_v2_2.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_rococo_v2_2_asset_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_rococo_v2_2_asset_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_rococo_v2_2_asset_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_rococo_v2_2_asset_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_rococo_v2_2_asset_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_rococo_v2_2_asset_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_rococo_v2_2_bridge_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_rococo_v2_2_bridge_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_rococo_v2_2_bridge_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_rococo_v2_2_bridge_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_rococo_v2_2_bridge_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_rococo_v2_2_bridge_hub.js"
|
|
8
9
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "polkadot-api_chains_rococo_v2_2_people",
|
|
3
|
+
"types": "../../dist/reexports/chains_rococo_v2_2_people.d.ts",
|
|
4
|
+
"module": "../../dist/esm/reexports/chains_rococo_v2_2_people.mjs",
|
|
5
|
+
"import": "../../dist/esm/reexports/chains_rococo_v2_2_people.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_rococo_v2_2_people.mjs",
|
|
7
|
+
"require": "../../dist/reexports/chains_rococo_v2_2_people.js",
|
|
8
|
+
"default": "../../dist/reexports/chains_rococo_v2_2_people.js"
|
|
9
|
+
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_westend2.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_westend2.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_westend2.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_westend2.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_westend2.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_westend2.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_westend2_asset_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_westend2_asset_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_westend2_asset_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_westend2_asset_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_westend2_asset_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_westend2_asset_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_westend2_bridge_hub.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_westend2_bridge_hub.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_westend2_bridge_hub.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_westend2_bridge_hub.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_westend2_bridge_hub.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_westend2_bridge_hub.js"
|
|
8
9
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"types": "../../dist/reexports/chains_westend2_collectives.d.ts",
|
|
4
4
|
"module": "../../dist/esm/reexports/chains_westend2_collectives.mjs",
|
|
5
5
|
"import": "../../dist/esm/reexports/chains_westend2_collectives.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_westend2_collectives.mjs",
|
|
6
7
|
"require": "../../dist/reexports/chains_westend2_collectives.js",
|
|
7
8
|
"default": "../../dist/reexports/chains_westend2_collectives.js"
|
|
8
9
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "polkadot-api_chains_westend2_people",
|
|
3
|
+
"types": "../../dist/reexports/chains_westend2_people.d.ts",
|
|
4
|
+
"module": "../../dist/esm/reexports/chains_westend2_people.mjs",
|
|
5
|
+
"import": "../../dist/esm/reexports/chains_westend2_people.mjs",
|
|
6
|
+
"browser": "../../dist/esm/reexports/chains_westend2_people.mjs",
|
|
7
|
+
"require": "../../dist/reexports/chains_westend2_people.js",
|
|
8
|
+
"default": "../../dist/reexports/chains_westend2_people.js"
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains_ksmcc3_people.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains_rococo_v2_2_people.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chains_westend2_people.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polkadot-sdk-compat.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"polkadot-sdk-compat.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoldot_from-node-worker.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smoldot_node-worker.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import './utils/shareLatest.mjs';
|
|
2
2
|
import { mergeMap, map } from 'rxjs';
|
|
3
3
|
import { firstValueFromWithSignal } from './utils/firstValueFromWithSignal.mjs';
|
|
4
|
+
import { isOptionalArg } from './utils/optional-arg.mjs';
|
|
4
5
|
import { toHex } from '@polkadot-api/utils';
|
|
5
6
|
|
|
6
|
-
const isOptionalArg = (lastArg) => {
|
|
7
|
-
if (typeof lastArg !== "object") return false;
|
|
8
|
-
return Object.keys(lastArg).every(
|
|
9
|
-
(k) => k === "at" && typeof lastArg.at === "string" || k === "signal" && lastArg.signal instanceof AbortSignal
|
|
10
|
-
);
|
|
11
|
-
};
|
|
12
7
|
const createRuntimeCallEntry = (api, method, chainHead, {
|
|
13
8
|
isCompatible,
|
|
14
9
|
getCompatibilityLevel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-call.mjs","sources":["../../src/runtime-call.ts"],"sourcesContent":["import { firstValueFromWithSignal } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\n\ntype CallOptions = Partial<{\n at: string\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: CallOptions]\n : [...args: Args, options?: CallOptions]\n\nexport interface RuntimeCall<D, Args extends Array<any>, Payload>\n extends CompatibilityFunctions<D> {\n /**\n * Get `Payload` (Promise-based) for the runtime call.\n *\n * @param args All keys needed for that runtime call.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n (...args: WithCallOptions<Args>): Promise<Payload>\n}\n\
|
|
1
|
+
{"version":3,"file":"runtime-call.mjs","sources":["../../src/runtime-call.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg } from \"@/utils\"\nimport { ChainHead$ } from \"@polkadot-api/observable-client\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport { map, mergeMap } from \"rxjs\"\nimport { CompatibilityFunctions, CompatibilityHelper } from \"./compatibility\"\n\ntype CallOptions = Partial<{\n at: string\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = Args[\"length\"] extends 0\n ? [options?: CallOptions]\n : [...args: Args, options?: CallOptions]\n\nexport interface RuntimeCall<D, Args extends Array<any>, Payload>\n extends CompatibilityFunctions<D> {\n /**\n * Get `Payload` (Promise-based) for the runtime call.\n *\n * @param args All keys needed for that runtime call.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n (...args: WithCallOptions<Args>): Promise<Payload>\n}\n\nexport const createRuntimeCallEntry = (\n api: string,\n method: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n compatibleRuntime$,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): RuntimeCall<any, any, any> => {\n const callName = `${api}_${method}`\n const compatibilityError = () =>\n new Error(`Incompatible runtime entry RuntimeCall(${callName})`)\n\n const fn = (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const result$ = compatibleRuntime$(chainHead, at).pipe(\n mergeMap(([runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, args)) throw compatibilityError()\n const codecs = ctx.dynamicBuilder.buildRuntimeCall(api, method)\n return chainHead.call$(at, callName, toHex(codecs.args.enc(args))).pipe(\n map(codecs.value.dec),\n map((value) => {\n if (!valuesAreCompatible(runtime, ctx, value))\n throw compatibilityError()\n return value\n }),\n )\n }),\n )\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n return Object.assign(fn, { getCompatibilityLevel, isCompatible })\n}\n"],"names":[],"mappings":";;;;;;AA2BO,MAAM,sBAAyB,GAAA,CACpC,GACA,EAAA,MAAA,EACA,SACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AACF,CAC+B,KAAA;AAC/B,EAAA,MAAM,QAAW,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAA;AACjC,EAAA,MAAM,qBAAqB,MACzB,IAAI,KAAM,CAAA,CAAA,uCAAA,EAA0C,QAAQ,CAAG,CAAA,CAAA,CAAA,CAAA;AAEjE,EAAM,MAAA,EAAA,GAAK,IAAI,IAAqB,KAAA;AAClC,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAA,MAAM,OAAU,GAAA,kBAAA,CAAmB,SAAW,EAAA,EAAE,CAAE,CAAA,IAAA;AAAA,MAChD,QAAS,CAAA,CAAC,CAAC,OAAA,EAAS,GAAG,CAAM,KAAA;AAC3B,QAAA,IAAI,CAAC,iBAAkB,CAAA,OAAA,EAAS,KAAK,IAAI,CAAA,QAAS,kBAAmB,EAAA,CAAA;AACrE,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,gBAAA,CAAiB,KAAK,MAAM,CAAA,CAAA;AAC9D,QAAO,OAAA,SAAA,CAAU,KAAM,CAAA,EAAA,EAAI,QAAU,EAAA,KAAA,CAAM,MAAO,CAAA,IAAA,CAAK,GAAI,CAAA,IAAI,CAAC,CAAC,CAAE,CAAA,IAAA;AAAA,UACjE,GAAA,CAAI,MAAO,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,UACpB,GAAA,CAAI,CAAC,KAAU,KAAA;AACb,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAS,EAAA,GAAA,EAAK,KAAK,CAAA;AAC1C,cAAA,MAAM,kBAAmB,EAAA,CAAA;AAC3B,YAAO,OAAA,KAAA,CAAA;AAAA,WACR,CAAA;AAAA,SACH,CAAA;AAAA,OACD,CAAA;AAAA,KACH,CAAA;AAEA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAA,OAAO,OAAO,MAAO,CAAA,EAAA,EAAI,EAAE,qBAAA,EAAuB,cAAc,CAAA,CAAA;AAClE;;;;"}
|
package/dist/esm/storage.mjs
CHANGED
|
@@ -2,16 +2,11 @@ import './utils/shareLatest.mjs';
|
|
|
2
2
|
import { map, distinctUntilChanged, debounceTime } from 'rxjs';
|
|
3
3
|
import { firstValueFromWithSignal } from './utils/firstValueFromWithSignal.mjs';
|
|
4
4
|
import { raceMap } from './utils/raceMap.mjs';
|
|
5
|
+
import { isOptionalArg } from './utils/optional-arg.mjs';
|
|
5
6
|
import { NotBestBlockError } from '@polkadot-api/observable-client';
|
|
6
7
|
import { minCompatLevel } from './compatibility.mjs';
|
|
7
8
|
import { CompatibilityLevel } from '@polkadot-api/metadata-compatibility';
|
|
8
9
|
|
|
9
|
-
const isOptionalArg = (lastArg) => {
|
|
10
|
-
if (typeof lastArg !== "object") return false;
|
|
11
|
-
return Object.keys(lastArg).every(
|
|
12
|
-
(k) => k === "at" && typeof lastArg.at === "string" || k === "signal" && lastArg.signal instanceof AbortSignal
|
|
13
|
-
);
|
|
14
|
-
};
|
|
15
10
|
const createStorageEntry = (pallet, name, chainHead, {
|
|
16
11
|
isCompatible,
|
|
17
12
|
getCompatibilityLevel,
|
package/dist/esm/storage.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import { firstValueFromWithSignal, raceMap } from \"@/utils\"\nimport { ChainHead$, NotBestBlockError } from \"@polkadot-api/observable-client\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport { Observable, debounceTime, distinctUntilChanged, map } from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n minCompatLevel,\n} from \"./compatibility\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\n\ntype CallOptions = Partial<{\n /**\n * `at` could be a blockHash, `best`, or `finalized` (default)\n */\n at: string\n /**\n * `signal` allows you to abort an ongoing Promise. See [MDN\n * docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for\n * more information\n */\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: CallOptions,\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype StorageEntryWithoutKeys<D, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: CallOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param bestOrFinalized Optionally choose which block to query and watch\n * changes, `best` or `finalized` (default)\n */\n watchValue: (bestOrFinalized?: \"best\" | \"finalized\") => Observable<Payload>\n} & CompatibilityFunctions<D>\n\ntype StorageEntryWithKeys<D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to query and\n * watch changes, `best` or `finalized` (default)\n */\n watchValue: (\n ...args: [...Args, bestOrFinalized?: \"best\" | \"finalized\"]\n ) => Observable<Payload>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: CallOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: Args; value: NonNullable<Payload> }>>\n} & CompatibilityFunctions<D>\n\nexport type StorageEntry<D, Args extends Array<any>, Payload> = Args extends []\n ? StorageEntryWithoutKeys<D, Payload>\n : StorageEntryWithKeys<D, Args, Payload>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nconst isOptionalArg = (lastArg: any) => {\n if (typeof lastArg !== \"object\") return false\n\n return Object.keys(lastArg).every(\n (k) =>\n (k === \"at\" && typeof lastArg.at === \"string\") ||\n (k === \"signal\" && lastArg.signal instanceof AbortSignal),\n )\n}\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const watchValue = (...args: Array<any>) => {\n const target = args[args.length - 1]\n const actualArgs =\n target === \"best\" || target === \"finalized\" ? args.slice(0, -1) : args\n\n if (isSystemNumber)\n return chainHead.bestBlocks$.pipe(\n map((blocks) => blocks.at(target === \"best\" ? 0 : -1)!.number),\n distinctUntilChanged(),\n )\n\n return chainHead[target === \"best\" ? \"best$\" : \"finalized$\"].pipe(\n debounceTime(0),\n withCompatibleRuntime(chainHead, (x) => x.hash),\n raceMap(([block, runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, actualArgs))\n throw incompatibleError()\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n return chainHead\n .storage$(block.hash, \"value\", () => codecs.enc(...actualArgs))\n .pipe(\n map((val) => {\n if (!valuesAreCompatible(runtime, ctx, val))\n throw incompatibleError()\n return { val, codecs }\n }),\n )\n }, 4),\n distinctUntilChanged((a, b) => a.val === b.val),\n map(({ val, codecs }) =>\n val === null ? codecs.fallback : codecs.dec(val),\n ),\n )\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n let result$: Observable<any>\n if (isSystemNumber) {\n result$ = chainHead.bestBlocks$.pipe(\n map((blocks) => {\n if (at === \"finalized\" || !at) return blocks.at(-1)\n if (at === \"best\") return blocks.at(0)\n return blocks.find((block) => block.hash === at)\n }),\n map((block) => {\n if (!block) throw new NotBestBlockError()\n return block.number\n }),\n distinctUntilChanged(),\n )\n } else {\n const descriptors = await waitDescriptors()\n result$ = chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const value = data === null ? codecs.fallback : codecs.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, value))\n throw incompatibleError()\n return value\n },\n )\n }\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await waitDescriptors()\n const result$ = chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n // TODO partial compatibility check for args that become optional\n if (\n minCompatLevel(getCompatibilityLevels(descriptors, ctx)) ===\n CompatibilityLevel.Incompatible\n )\n throw incompatibleError()\n\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n return codecs.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (\n values.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return values.map(({ key, value }) => ({\n keyArgs: codecs.keyDecoder(key),\n value: codecs.dec(value),\n }))\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: CallOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getValue,\n getValues,\n getEntries,\n watchValue,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.mjs","sources":["../../src/storage.ts"],"sourcesContent":["import { firstValueFromWithSignal, isOptionalArg, raceMap } from \"@/utils\"\nimport { ChainHead$, NotBestBlockError } from \"@polkadot-api/observable-client\"\nimport { StorageItemInput, StorageResult } from \"@polkadot-api/substrate-client\"\nimport { Observable, debounceTime, distinctUntilChanged, map } from \"rxjs\"\nimport {\n CompatibilityFunctions,\n CompatibilityHelper,\n minCompatLevel,\n} from \"./compatibility\"\nimport { CompatibilityLevel } from \"@polkadot-api/metadata-compatibility\"\n\ntype CallOptions = Partial<{\n /**\n * `at` could be a blockHash, `best`, or `finalized` (default)\n */\n at: string\n /**\n * `signal` allows you to abort an ongoing Promise. See [MDN\n * docs](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) for\n * more information\n */\n signal: AbortSignal\n}>\n\ntype WithCallOptions<Args extends Array<any>> = [\n ...args: Args,\n options?: CallOptions,\n]\n\ntype PossibleParents<A extends Array<any>> = A extends [...infer Left, any]\n ? Left | PossibleParents<Left>\n : ArrayPossibleParents<A>\n\n// Fixed-size arrays values can't be extracted one-by-one, so that's a specific case\ntype ArrayPossibleParents<\n A extends Array<any>,\n Count extends Array<any> = [],\n R = [],\n> = A extends Array<infer T> & { length: infer L }\n ? number extends L\n ? Array<T> // Case variable-size array it's an unknown amount of entries\n : L extends Count[\"length\"]\n ? R\n : ArrayPossibleParents<A, [...Count, T], R | Count>\n : never\n\ntype StorageEntryWithoutKeys<D, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry.\n *\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValue: (options?: CallOptions) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param bestOrFinalized Optionally choose which block to query and watch\n * changes, `best` or `finalized` (default)\n */\n watchValue: (bestOrFinalized?: \"best\" | \"finalized\") => Observable<Payload>\n} & CompatibilityFunctions<D>\n\ntype StorageEntryWithKeys<D, Args extends Array<any>, Payload> = {\n /**\n * Get `Payload` (Promise-based) for the storage entry with a specific set of\n * `Args`.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n */\n getValue: (...args: [...WithCallOptions<Args>]) => Promise<Payload>\n /**\n * Watch changes in `Payload` (observable-based) for the storage entry.\n *\n * @param args All keys needed for that storage entry.\n * At the end, optionally choose which block to query and\n * watch changes, `best` or `finalized` (default)\n */\n watchValue: (\n ...args: [...Args, bestOrFinalized?: \"best\" | \"finalized\"]\n ) => Observable<Payload>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with\n * several sets of `Args`.\n *\n * @param keys Array of sets of keys needed for the storage entry.\n * @param options Optionally set which block to target (latest known\n * finalized is the default) and an AbortSignal.\n */\n getValues: (\n keys: Array<[...Args]>,\n options?: CallOptions,\n ) => Promise<Array<Payload>>\n /**\n * Get an Array of `Payload` (Promise-based) for the storage entry with a\n * subset of `Args`.\n *\n * @param args Subset of keys needed for the storage entry.\n * At the end, optionally set which block to target (latest\n * known finalized is the default) and an AbortSignal.\n * @example\n *\n * // this is a query with 3 keys\n * typedApi.query.Pallet.Query.getEntries({ at: \"best\" }) // no keys\n * typedApi.query.Pallet.Query.getEntries(arg1, { at: \"finalized\" }) // 1/3 keys\n * typedApi.query.Pallet.Query.getEntries(arg1, arg2, { at: \"0x12345678\" }) // 2/3 keys\n *\n */\n getEntries: (\n ...args: WithCallOptions<PossibleParents<Args>>\n ) => Promise<Array<{ keyArgs: Args; value: NonNullable<Payload> }>>\n} & CompatibilityFunctions<D>\n\nexport type StorageEntry<D, Args extends Array<any>, Payload> = Args extends []\n ? StorageEntryWithoutKeys<D, Payload>\n : StorageEntryWithKeys<D, Args, Payload>\n\nexport type Storage$ = <Type extends StorageItemInput[\"type\"]>(\n hash: string | null,\n type: Type,\n key: string,\n childTrie: string | null,\n) => Observable<StorageResult<Type>>\n\nexport const createStorageEntry = (\n pallet: string,\n name: string,\n chainHead: ChainHead$,\n {\n isCompatible,\n getCompatibilityLevel,\n getCompatibilityLevels,\n waitDescriptors,\n withCompatibleRuntime,\n argsAreCompatible,\n valuesAreCompatible,\n }: CompatibilityHelper,\n): StorageEntry<any, any, any> => {\n const isSystemNumber = pallet === \"System\" && name === \"Number\"\n\n const incompatibleError = () =>\n new Error(`Incompatible runtime entry Storage(${pallet}.${name})`)\n const invalidArgs = (args: Array<any>) =>\n new Error(`Invalid Arguments calling ${pallet}.${name}(${args})`)\n\n const watchValue = (...args: Array<any>) => {\n const target = args[args.length - 1]\n const actualArgs =\n target === \"best\" || target === \"finalized\" ? args.slice(0, -1) : args\n\n if (isSystemNumber)\n return chainHead.bestBlocks$.pipe(\n map((blocks) => blocks.at(target === \"best\" ? 0 : -1)!.number),\n distinctUntilChanged(),\n )\n\n return chainHead[target === \"best\" ? \"best$\" : \"finalized$\"].pipe(\n debounceTime(0),\n withCompatibleRuntime(chainHead, (x) => x.hash),\n raceMap(([block, runtime, ctx]) => {\n if (!argsAreCompatible(runtime, ctx, actualArgs))\n throw incompatibleError()\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n return chainHead\n .storage$(block.hash, \"value\", () => codecs.enc(...actualArgs))\n .pipe(\n map((val) => {\n if (!valuesAreCompatible(runtime, ctx, val))\n throw incompatibleError()\n return { val, codecs }\n }),\n )\n }, 4),\n distinctUntilChanged((a, b) => a.val === b.val),\n map(({ val, codecs }) =>\n val === null ? codecs.fallback : codecs.dec(val),\n ),\n )\n }\n\n const getValue = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n let result$: Observable<any>\n if (isSystemNumber) {\n result$ = chainHead.bestBlocks$.pipe(\n map((blocks) => {\n if (at === \"finalized\" || !at) return blocks.at(-1)\n if (at === \"best\") return blocks.at(0)\n return blocks.find((block) => block.hash === at)\n }),\n map((block) => {\n if (!block) throw new NotBestBlockError()\n return block.number\n }),\n distinctUntilChanged(),\n )\n } else {\n const descriptors = await waitDescriptors()\n result$ = chainHead.storage$(\n at,\n \"value\",\n (ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const actualArgs =\n args.length === codecs.len ? args : args.slice(0, -1)\n if (args !== actualArgs && !isLastArgOptional) throw invalidArgs(args)\n if (!argsAreCompatible(descriptors, ctx, actualArgs))\n throw incompatibleError()\n return codecs.enc(...actualArgs)\n },\n null,\n (data, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n const value = data === null ? codecs.fallback : codecs.dec(data)\n if (!valuesAreCompatible(descriptors, ctx, value))\n throw incompatibleError()\n return value\n },\n )\n }\n\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getEntries = async (...args: Array<any>) => {\n const lastArg = args[args.length - 1]\n const isLastArgOptional = isOptionalArg(lastArg)\n const { signal, at: _at }: CallOptions = isLastArgOptional ? lastArg : {}\n const at = _at ?? null\n\n const descriptors = await waitDescriptors()\n const result$ = chainHead.storage$(\n at,\n \"descendantsValues\",\n (ctx) => {\n // TODO partial compatibility check for args that become optional\n if (\n minCompatLevel(getCompatibilityLevels(descriptors, ctx)) ===\n CompatibilityLevel.Incompatible\n )\n throw incompatibleError()\n\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (args.length > codecs.len) throw invalidArgs(args)\n const actualArgs =\n args.length > 0 && isLastArgOptional ? args.slice(0, -1) : args\n if (args.length === codecs.len && actualArgs === args)\n throw invalidArgs(args)\n return codecs.enc(...actualArgs)\n },\n null,\n (values, ctx) => {\n const codecs = ctx.dynamicBuilder.buildStorage(pallet, name)\n if (\n values.some(\n ({ value }) => !valuesAreCompatible(descriptors, ctx, value),\n )\n )\n throw incompatibleError()\n return values.map(({ key, value }) => ({\n keyArgs: codecs.keyDecoder(key),\n value: codecs.dec(value),\n }))\n },\n )\n return firstValueFromWithSignal(result$, signal)\n }\n\n const getValues = (keyArgs: Array<Array<any>>, options?: CallOptions) =>\n Promise.all(\n keyArgs.map((args) => getValue(...(options ? [...args, options] : args))),\n )\n\n return {\n isCompatible,\n getCompatibilityLevel,\n getValue,\n getValues,\n getEntries,\n watchValue,\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AA8HO,MAAM,kBAAqB,GAAA,CAChC,MACA,EAAA,IAAA,EACA,SACA,EAAA;AAAA,EACE,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,sBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AACF,CACgC,KAAA;AAChC,EAAM,MAAA,cAAA,GAAiB,MAAW,KAAA,QAAA,IAAY,IAAS,KAAA,QAAA,CAAA;AAEvD,EAAM,MAAA,iBAAA,GAAoB,MACxB,IAAI,KAAA,CAAM,sCAAsC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AACnE,EAAM,MAAA,WAAA,GAAc,CAAC,IAAA,KACnB,IAAI,KAAA,CAAM,CAA6B,0BAAA,EAAA,MAAM,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,CAAG,CAAA,CAAA,CAAA,CAAA;AAElE,EAAM,MAAA,UAAA,GAAa,IAAI,IAAqB,KAAA;AAC1C,IAAA,MAAM,MAAS,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACnC,IAAM,MAAA,UAAA,GACJ,WAAW,MAAU,IAAA,MAAA,KAAW,cAAc,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,CAAI,GAAA,IAAA,CAAA;AAEpE,IAAI,IAAA,cAAA;AACF,MAAA,OAAO,UAAU,WAAY,CAAA,IAAA;AAAA,QAC3B,GAAA,CAAI,CAAC,MAAA,KAAW,MAAO,CAAA,EAAA,CAAG,WAAW,MAAS,GAAA,CAAA,GAAI,CAAE,CAAA,CAAA,CAAG,MAAM,CAAA;AAAA,QAC7D,oBAAqB,EAAA;AAAA,OACvB,CAAA;AAEF,IAAA,OAAO,SAAU,CAAA,MAAA,KAAW,MAAS,GAAA,OAAA,GAAU,YAAY,CAAE,CAAA,IAAA;AAAA,MAC3D,aAAa,CAAC,CAAA;AAAA,MACd,qBAAsB,CAAA,SAAA,EAAW,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MAC9C,QAAQ,CAAC,CAAC,KAAO,EAAA,OAAA,EAAS,GAAG,CAAM,KAAA;AACjC,QAAA,IAAI,CAAC,iBAAA,CAAkB,OAAS,EAAA,GAAA,EAAK,UAAU,CAAA;AAC7C,UAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,QAAO,OAAA,SAAA,CACJ,QAAS,CAAA,KAAA,CAAM,IAAM,EAAA,OAAA,EAAS,MAAM,MAAA,CAAO,GAAI,CAAA,GAAG,UAAU,CAAC,CAC7D,CAAA,IAAA;AAAA,UACC,GAAA,CAAI,CAAC,GAAQ,KAAA;AACX,YAAA,IAAI,CAAC,mBAAA,CAAoB,OAAS,EAAA,GAAA,EAAK,GAAG,CAAA;AACxC,cAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,YAAO,OAAA,EAAE,KAAK,MAAO,EAAA,CAAA;AAAA,WACtB,CAAA;AAAA,SACH,CAAA;AAAA,SACD,CAAC,CAAA;AAAA,MACJ,qBAAqB,CAAC,CAAA,EAAG,MAAM,CAAE,CAAA,GAAA,KAAQ,EAAE,GAAG,CAAA;AAAA,MAC9C,GAAA;AAAA,QAAI,CAAC,EAAE,GAAA,EAAK,MAAO,EAAA,KACjB,GAAQ,KAAA,IAAA,GAAO,MAAO,CAAA,QAAA,GAAW,MAAO,CAAA,GAAA,CAAI,GAAG,CAAA;AAAA,OACjD;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,QAAA,GAAW,UAAU,IAAqB,KAAA;AAC9C,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAI,IAAA,OAAA,CAAA;AACJ,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,OAAA,GAAU,UAAU,WAAY,CAAA,IAAA;AAAA,QAC9B,GAAA,CAAI,CAAC,MAAW,KAAA;AACd,UAAA,IAAI,OAAO,WAAe,IAAA,CAAC,IAAW,OAAA,MAAA,CAAO,GAAG,CAAE,CAAA,CAAA,CAAA;AAClD,UAAA,IAAI,EAAO,KAAA,MAAA,EAAe,OAAA,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AACrC,UAAA,OAAO,OAAO,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,EAAE,CAAA,CAAA;AAAA,SAChD,CAAA;AAAA,QACD,GAAA,CAAI,CAAC,KAAU,KAAA;AACb,UAAA,IAAI,CAAC,KAAA,EAAa,MAAA,IAAI,iBAAkB,EAAA,CAAA;AACxC,UAAA,OAAO,KAAM,CAAA,MAAA,CAAA;AAAA,SACd,CAAA;AAAA,QACD,oBAAqB,EAAA;AAAA,OACvB,CAAA;AAAA,KACK,MAAA;AACL,MAAM,MAAA,WAAA,GAAc,MAAM,eAAgB,EAAA,CAAA;AAC1C,MAAA,OAAA,GAAU,SAAU,CAAA,QAAA;AAAA,QAClB,EAAA;AAAA,QACA,OAAA;AAAA,QACA,CAAC,GAAQ,KAAA;AACP,UAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,UAAM,MAAA,UAAA,GACJ,KAAK,MAAW,KAAA,MAAA,CAAO,MAAM,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,CAAA;AACtD,UAAA,IAAI,SAAS,UAAc,IAAA,CAAC,iBAAmB,EAAA,MAAM,YAAY,IAAI,CAAA,CAAA;AACrE,UAAA,IAAI,CAAC,iBAAA,CAAkB,WAAa,EAAA,GAAA,EAAK,UAAU,CAAA;AACjD,YAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,UAAO,OAAA,MAAA,CAAO,GAAI,CAAA,GAAG,UAAU,CAAA,CAAA;AAAA,SACjC;AAAA,QACA,IAAA;AAAA,QACA,CAAC,MAAM,GAAQ,KAAA;AACb,UAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,UAAA,MAAM,QAAQ,IAAS,KAAA,IAAA,GAAO,OAAO,QAAW,GAAA,MAAA,CAAO,IAAI,IAAI,CAAA,CAAA;AAC/D,UAAA,IAAI,CAAC,mBAAA,CAAoB,WAAa,EAAA,GAAA,EAAK,KAAK,CAAA;AAC9C,YAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,UAAO,OAAA,KAAA,CAAA;AAAA,SACT;AAAA,OACF,CAAA;AAAA,KACF;AAEA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,UAAU,IAAqB,KAAA;AAChD,IAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAC,CAAA,CAAA;AACpC,IAAM,MAAA,iBAAA,GAAoB,cAAc,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,EAAE,MAAQ,EAAA,EAAA,EAAI,KAAqB,GAAA,iBAAA,GAAoB,UAAU,EAAC,CAAA;AACxE,IAAA,MAAM,KAAK,GAAO,IAAA,IAAA,CAAA;AAElB,IAAM,MAAA,WAAA,GAAc,MAAM,eAAgB,EAAA,CAAA;AAC1C,IAAA,MAAM,UAAU,SAAU,CAAA,QAAA;AAAA,MACxB,EAAA;AAAA,MACA,mBAAA;AAAA,MACA,CAAC,GAAQ,KAAA;AAEP,QAAA,IACE,eAAe,sBAAuB,CAAA,WAAA,EAAa,GAAG,CAAC,MACvD,kBAAmB,CAAA,YAAA;AAEnB,UAAA,MAAM,iBAAkB,EAAA,CAAA;AAE1B,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,QAAA,IAAI,KAAK,MAAS,GAAA,MAAA,CAAO,GAAK,EAAA,MAAM,YAAY,IAAI,CAAA,CAAA;AACpD,QAAM,MAAA,UAAA,GACJ,KAAK,MAAS,GAAA,CAAA,IAAK,oBAAoB,IAAK,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,CAAI,GAAA,IAAA,CAAA;AAC7D,QAAA,IAAI,IAAK,CAAA,MAAA,KAAW,MAAO,CAAA,GAAA,IAAO,UAAe,KAAA,IAAA;AAC/C,UAAA,MAAM,YAAY,IAAI,CAAA,CAAA;AACxB,QAAO,OAAA,MAAA,CAAO,GAAI,CAAA,GAAG,UAAU,CAAA,CAAA;AAAA,OACjC;AAAA,MACA,IAAA;AAAA,MACA,CAAC,QAAQ,GAAQ,KAAA;AACf,QAAA,MAAM,MAAS,GAAA,GAAA,CAAI,cAAe,CAAA,YAAA,CAAa,QAAQ,IAAI,CAAA,CAAA;AAC3D,QAAA,IACE,MAAO,CAAA,IAAA;AAAA,UACL,CAAC,EAAE,KAAM,EAAA,KAAM,CAAC,mBAAoB,CAAA,WAAA,EAAa,KAAK,KAAK,CAAA;AAAA,SAC7D;AAEA,UAAA,MAAM,iBAAkB,EAAA,CAAA;AAC1B,QAAA,OAAO,OAAO,GAAI,CAAA,CAAC,EAAE,GAAA,EAAK,OAAa,MAAA;AAAA,UACrC,OAAA,EAAS,MAAO,CAAA,UAAA,CAAW,GAAG,CAAA;AAAA,UAC9B,KAAA,EAAO,MAAO,CAAA,GAAA,CAAI,KAAK,CAAA;AAAA,SACvB,CAAA,CAAA,CAAA;AAAA,OACJ;AAAA,KACF,CAAA;AACA,IAAO,OAAA,wBAAA,CAAyB,SAAS,MAAM,CAAA,CAAA;AAAA,GACjD,CAAA;AAEA,EAAA,MAAM,SAAY,GAAA,CAAC,OAA4B,EAAA,OAAA,KAC7C,OAAQ,CAAA,GAAA;AAAA,IACN,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,QAAS,CAAA,GAAI,OAAU,GAAA,CAAC,GAAG,IAAA,EAAM,OAAO,CAAA,GAAI,IAAK,CAAC,CAAA;AAAA,GAC1E,CAAA;AAEF,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF;;;;"}
|
|
@@ -76,8 +76,14 @@ const computeState = (analized$, blocks$) => new Observable((observer) => {
|
|
|
76
76
|
const getTxSuccessFromSystemEvents = (systemEvents, txIdx) => {
|
|
77
77
|
const events = systemEvents.filter((x) => x.phase.type === "ApplyExtrinsic" && x.phase.value === txIdx).map((x) => x.event);
|
|
78
78
|
const lastEvent = events[events.length - 1];
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
if (lastEvent.type === "System" && lastEvent.value.type === "ExtrinsicFailed") {
|
|
80
|
+
return {
|
|
81
|
+
ok: false,
|
|
82
|
+
events,
|
|
83
|
+
dispatchError: lastEvent.value.value.dispatch_error
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return { ok: true, events };
|
|
81
87
|
};
|
|
82
88
|
class InvalidTxError extends Error {
|
|
83
89
|
// likely to be a `TransactionValidityError`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-fns.mjs","sources":["../../../src/tx/submit-fns.ts"],"sourcesContent":["import {\n Binary,\n Blake2256,\n HexString,\n ResultPayload,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n EMPTY,\n Observable,\n concat,\n distinctUntilChanged,\n filter,\n lastValueFrom,\n map,\n mergeMap,\n of,\n take,\n} from \"rxjs\"\nimport {\n ChainHead$,\n PinnedBlocks,\n SystemEvent,\n} from \"@polkadot-api/observable-client\"\nimport { AnalyzedBlock } from \"@polkadot-api/observable-client\"\nimport { TxEvent, TxEventsPayload, TxFinalizedPayload } from \"./types\"\nimport { continueWith } from \"@/utils\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\n\n// TODO: make it dynamic based on the tx-function of the client\nconst hashFromTx = (tx: HexString) => toHex(Blake2256(fromHex(tx)))\n\nconst computeState = (\n analized$: Observable<AnalyzedBlock>,\n blocks$: Observable<PinnedBlocks>,\n) =>\n new Observable<\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n >((observer) => {\n const analyzedBlocks = new Map<string, AnalyzedBlock>()\n let pinnedBlocks: PinnedBlocks\n let latestState:\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n\n const computeNextState = () => {\n let current: string = pinnedBlocks.best\n let analyzed: AnalyzedBlock | undefined = analyzedBlocks.get(current)\n\n while (!analyzed) {\n const block = pinnedBlocks.blocks.get(current)\n if (!block) break\n analyzed = analyzedBlocks.get((current = block.parent))\n }\n\n if (!analyzed) return // this shouldn't happen, though\n\n const analyzedNumber = pinnedBlocks.blocks.get(analyzed.hash)!.number\n const isFinalized =\n analyzedNumber <=\n pinnedBlocks.blocks.get(pinnedBlocks.finalized)!.number\n\n const found = analyzed.found.type\n if (found && latestState?.found && latestState.hash === analyzed.hash) {\n if (isFinalized) observer.complete()\n return\n }\n\n observer.next(\n (latestState = analyzed.found.type\n ? {\n found: found as true,\n hash: analyzed.hash,\n number: analyzedNumber,\n index: analyzed.found.index,\n events: analyzed.found.events,\n }\n : {\n found: found as false,\n validity: analyzed.found.validity,\n }),\n )\n\n if (isFinalized) {\n if (found) observer.complete()\n else if (analyzed.found.validity?.success === false)\n observer.error(new InvalidTxError(analyzed.found.validity.value))\n }\n }\n\n const subscription = blocks$\n .pipe(\n distinctUntilChanged(\n (a, b) => a.finalized === b.finalized && a.best === b.best,\n ),\n )\n .subscribe({\n next: (pinned: PinnedBlocks) => {\n pinnedBlocks = pinned\n if (analyzedBlocks.size === 0) return\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n })\n\n subscription.add(\n analized$.subscribe({\n next: (block) => {\n analyzedBlocks.set(block.hash, block)\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n }),\n )\n\n return subscription\n }).pipe(distinctUntilChanged((a, b) => a === b))\n\nconst getTxSuccessFromSystemEvents = (\n systemEvents: Array<SystemEvent>,\n txIdx: number,\n): Omit<TxEventsPayload, \"block\"> => {\n const events = systemEvents\n .filter((x) => x.phase.type === \"ApplyExtrinsic\" && x.phase.value === txIdx)\n .map((x) => x.event)\n\n const lastEvent = events[events.length - 1]\n const ok =\n lastEvent.type === \"System\" && lastEvent.value.type === \"ExtrinsicSuccess\"\n\n return { ok, events }\n}\n\n/*\ntype TransactionValidityError = Enum<{\n Invalid: Enum<{\n Call: undefined\n Payment: undefined\n Future: undefined\n Stale: undefined\n BadProof: undefined\n AncientBirthBlock: undefined\n ExhaustsResources: undefined\n Custom: number\n BadMandatory: undefined\n MandatoryValidation: undefined\n BadSigner: undefined\n }>\n Unknown: Enum<{\n CannotLookup: undefined\n NoUnsignedValidator: undefined\n Custom: number\n }>\n}>\n*/\n\nexport class InvalidTxError extends Error {\n error: any // likely to be a `TransactionValidityError`\n constructor(e: any) {\n super(\n JSON.stringify(\n e,\n (_, value) => {\n if (typeof value === \"bigint\") return value.toString()\n return value instanceof Binary ? value.asHex() : value\n },\n 2,\n ),\n )\n this.name = \"InvalidTxError\"\n this.error = e\n }\n}\n\nexport const submit$ = (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n tx: HexString,\n at?: HexString,\n emitSign = false,\n): Observable<TxEvent> => {\n const txHash = hashFromTx(tx)\n const getTxEvent = <\n Type extends TxEvent[\"type\"],\n Rest extends Omit<TxEvent & { type: Type }, \"type\" | \"txHash\">,\n >(\n type: Type,\n rest: Rest,\n ): TxEvent & { type: Type } =>\n ({\n type,\n txHash,\n ...rest,\n }) as any\n\n const at$ = chainHead.pinnedBlocks$.pipe(\n take(1),\n map((blocks) => blocks.blocks.get(at!)?.hash ?? blocks.finalized),\n )\n\n const validate$: Observable<never> = at$.pipe(\n mergeMap((at) =>\n chainHead.validateTx$(at, tx).pipe(\n filter((x) => !x.success),\n map((x) => {\n throw new InvalidTxError(x.value)\n }),\n ),\n ),\n )\n\n const track$ = new Observable<AnalyzedBlock>((observer) => {\n const subscription = chainHead.trackTx$(tx).subscribe(observer)\n subscription.add(\n broadcastTx$(tx).subscribe({\n error(e) {\n observer.error(e)\n },\n }),\n )\n return subscription\n })\n\n const bestBlockState$ = computeState(track$, chainHead.pinnedBlocks$).pipe(\n map((x) => {\n if (!x.found)\n return getTxEvent(\"txBestBlocksState\", {\n found: false,\n isValid: x.validity?.success !== false,\n })\n\n return getTxEvent(\"txBestBlocksState\", {\n found: true,\n block: {\n index: x.index,\n number: x.number,\n hash: x.hash,\n },\n ...getTxSuccessFromSystemEvents(x.events, x.index),\n })\n }),\n )\n\n return concat(\n emitSign ? of(getTxEvent(\"signed\", {})) : EMPTY,\n validate$,\n of(getTxEvent(\"broadcasted\", {})),\n bestBlockState$.pipe(\n continueWith(({ found, type, ...rest }) =>\n found ? of(getTxEvent(\"finalized\", rest as any)) : EMPTY,\n ),\n ),\n )\n}\n\nexport const submit = async (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n transaction: HexString,\n at?: HexString,\n): Promise<TxFinalizedPayload> =>\n lastValueFrom(submit$(chainHead, broadcastTx$, transaction, at)).then((x) => {\n if (x.type !== \"finalized\") throw null\n const result: TxFinalizedPayload = { ...x }\n delete (result as any).type\n return result\n })\n"],"names":["at"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"submit-fns.mjs","sources":["../../../src/tx/submit-fns.ts"],"sourcesContent":["import {\n Binary,\n Blake2256,\n HexString,\n ResultPayload,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n EMPTY,\n Observable,\n concat,\n distinctUntilChanged,\n filter,\n lastValueFrom,\n map,\n mergeMap,\n of,\n take,\n} from \"rxjs\"\nimport {\n ChainHead$,\n PinnedBlocks,\n SystemEvent,\n} from \"@polkadot-api/observable-client\"\nimport { AnalyzedBlock } from \"@polkadot-api/observable-client\"\nimport { TxEvent, TxEventsPayload, TxFinalizedPayload } from \"./types\"\nimport { continueWith } from \"@/utils\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\n\n// TODO: make it dynamic based on the tx-function of the client\nconst hashFromTx = (tx: HexString) => toHex(Blake2256(fromHex(tx)))\n\nconst computeState = (\n analized$: Observable<AnalyzedBlock>,\n blocks$: Observable<PinnedBlocks>,\n) =>\n new Observable<\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n >((observer) => {\n const analyzedBlocks = new Map<string, AnalyzedBlock>()\n let pinnedBlocks: PinnedBlocks\n let latestState:\n | {\n found: true\n hash: string\n number: number\n index: number\n events: any\n }\n | { found: false; validity: ResultPayload<any, any> | null }\n\n const computeNextState = () => {\n let current: string = pinnedBlocks.best\n let analyzed: AnalyzedBlock | undefined = analyzedBlocks.get(current)\n\n while (!analyzed) {\n const block = pinnedBlocks.blocks.get(current)\n if (!block) break\n analyzed = analyzedBlocks.get((current = block.parent))\n }\n\n if (!analyzed) return // this shouldn't happen, though\n\n const analyzedNumber = pinnedBlocks.blocks.get(analyzed.hash)!.number\n const isFinalized =\n analyzedNumber <=\n pinnedBlocks.blocks.get(pinnedBlocks.finalized)!.number\n\n const found = analyzed.found.type\n if (found && latestState?.found && latestState.hash === analyzed.hash) {\n if (isFinalized) observer.complete()\n return\n }\n\n observer.next(\n (latestState = analyzed.found.type\n ? {\n found: found as true,\n hash: analyzed.hash,\n number: analyzedNumber,\n index: analyzed.found.index,\n events: analyzed.found.events,\n }\n : {\n found: found as false,\n validity: analyzed.found.validity,\n }),\n )\n\n if (isFinalized) {\n if (found) observer.complete()\n else if (analyzed.found.validity?.success === false)\n observer.error(new InvalidTxError(analyzed.found.validity.value))\n }\n }\n\n const subscription = blocks$\n .pipe(\n distinctUntilChanged(\n (a, b) => a.finalized === b.finalized && a.best === b.best,\n ),\n )\n .subscribe({\n next: (pinned: PinnedBlocks) => {\n pinnedBlocks = pinned\n if (analyzedBlocks.size === 0) return\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n })\n\n subscription.add(\n analized$.subscribe({\n next: (block) => {\n analyzedBlocks.set(block.hash, block)\n computeNextState()\n },\n error(e) {\n observer.error(e)\n },\n }),\n )\n\n return subscription\n }).pipe(distinctUntilChanged((a, b) => a === b))\n\nconst getTxSuccessFromSystemEvents = (\n systemEvents: Array<SystemEvent>,\n txIdx: number,\n): Omit<TxEventsPayload, \"block\"> => {\n const events = systemEvents\n .filter((x) => x.phase.type === \"ApplyExtrinsic\" && x.phase.value === txIdx)\n .map((x) => x.event)\n\n const lastEvent = events[events.length - 1]\n if (\n lastEvent.type === \"System\" &&\n lastEvent.value.type === \"ExtrinsicFailed\"\n ) {\n return {\n ok: false,\n events,\n dispatchError: lastEvent.value.value.dispatch_error,\n }\n }\n\n return { ok: true, events }\n}\n\n/*\ntype TransactionValidityError = Enum<{\n Invalid: Enum<{\n Call: undefined\n Payment: undefined\n Future: undefined\n Stale: undefined\n BadProof: undefined\n AncientBirthBlock: undefined\n ExhaustsResources: undefined\n Custom: number\n BadMandatory: undefined\n MandatoryValidation: undefined\n BadSigner: undefined\n }>\n Unknown: Enum<{\n CannotLookup: undefined\n NoUnsignedValidator: undefined\n Custom: number\n }>\n}>\n*/\n\nexport class InvalidTxError extends Error {\n error: any // likely to be a `TransactionValidityError`\n constructor(e: any) {\n super(\n JSON.stringify(\n e,\n (_, value) => {\n if (typeof value === \"bigint\") return value.toString()\n return value instanceof Binary ? value.asHex() : value\n },\n 2,\n ),\n )\n this.name = \"InvalidTxError\"\n this.error = e\n }\n}\n\nexport const submit$ = (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n tx: HexString,\n at?: HexString,\n emitSign = false,\n): Observable<TxEvent> => {\n const txHash = hashFromTx(tx)\n const getTxEvent = <\n Type extends TxEvent[\"type\"],\n Rest extends Omit<TxEvent & { type: Type }, \"type\" | \"txHash\">,\n >(\n type: Type,\n rest: Rest,\n ): TxEvent & { type: Type } =>\n ({\n type,\n txHash,\n ...rest,\n }) as any\n\n const at$ = chainHead.pinnedBlocks$.pipe(\n take(1),\n map((blocks) => blocks.blocks.get(at!)?.hash ?? blocks.finalized),\n )\n\n const validate$: Observable<never> = at$.pipe(\n mergeMap((at) =>\n chainHead.validateTx$(at, tx).pipe(\n filter((x) => !x.success),\n map((x) => {\n throw new InvalidTxError(x.value)\n }),\n ),\n ),\n )\n\n const track$ = new Observable<AnalyzedBlock>((observer) => {\n const subscription = chainHead.trackTx$(tx).subscribe(observer)\n subscription.add(\n broadcastTx$(tx).subscribe({\n error(e) {\n observer.error(e)\n },\n }),\n )\n return subscription\n })\n\n const bestBlockState$ = computeState(track$, chainHead.pinnedBlocks$).pipe(\n map((x) => {\n if (!x.found)\n return getTxEvent(\"txBestBlocksState\", {\n found: false,\n isValid: x.validity?.success !== false,\n })\n\n return getTxEvent(\"txBestBlocksState\", {\n found: true,\n block: {\n index: x.index,\n number: x.number,\n hash: x.hash,\n },\n ...getTxSuccessFromSystemEvents(x.events, x.index),\n })\n }),\n )\n\n return concat(\n emitSign ? of(getTxEvent(\"signed\", {})) : EMPTY,\n validate$,\n of(getTxEvent(\"broadcasted\", {})),\n bestBlockState$.pipe(\n continueWith(({ found, type, ...rest }) =>\n found ? of(getTxEvent(\"finalized\", rest as any)) : EMPTY,\n ),\n ),\n )\n}\n\nexport const submit = async (\n chainHead: ChainHead$,\n broadcastTx$: (tx: string) => Observable<never>,\n transaction: HexString,\n at?: HexString,\n): Promise<TxFinalizedPayload> =>\n lastValueFrom(submit$(chainHead, broadcastTx$, transaction, at)).then((x) => {\n if (x.type !== \"finalized\") throw null\n const result: TxFinalizedPayload = { ...x }\n delete (result as any).type\n return result\n })\n"],"names":["at"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const isOptionalArg = (lastArg) => typeof lastArg === "object" && lastArg !== null && Object.entries(lastArg).every(
|
|
2
|
+
([k, v]) => k === "at" && (v === void 0 || typeof v === "string") || k === "signal" && (v === void 0 || v instanceof AbortSignal)
|
|
3
|
+
);
|
|
4
|
+
|
|
5
|
+
export { isOptionalArg };
|
|
6
|
+
//# sourceMappingURL=optional-arg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-arg.mjs","sources":["../../../src/utils/optional-arg.ts"],"sourcesContent":["export const isOptionalArg = (lastArg: unknown) =>\n typeof lastArg === \"object\" &&\n lastArg !== null &&\n Object.entries(lastArg).every(\n ([k, v]) =>\n (k === \"at\" && (v === undefined || typeof v === \"string\")) ||\n (k === \"signal\" && (v === undefined || v instanceof AbortSignal)),\n )\n"],"names":[],"mappings":"AAAa,MAAA,aAAA,GAAgB,CAAC,OAAA,KAC5B,OAAO,OAAA,KAAY,QACnB,IAAA,OAAA,KAAY,IACZ,IAAA,MAAA,CAAO,OAAQ,CAAA,OAAO,CAAE,CAAA,KAAA;AAAA,EACtB,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KACH,MAAM,IAAS,KAAA,CAAA,KAAM,KAAa,CAAA,IAAA,OAAO,MAAM,QAC/C,CAAA,IAAA,CAAA,KAAM,QAAa,KAAA,CAAA,KAAM,UAAa,CAAa,YAAA,WAAA,CAAA;AACxD;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -317,7 +317,16 @@ type TxEventsPayload = {
|
|
|
317
317
|
number: number;
|
|
318
318
|
index: number;
|
|
319
319
|
};
|
|
320
|
-
}
|
|
320
|
+
} & ({
|
|
321
|
+
ok: true;
|
|
322
|
+
dispatchError?: undefined;
|
|
323
|
+
} | {
|
|
324
|
+
ok: false;
|
|
325
|
+
dispatchError: {
|
|
326
|
+
type: string;
|
|
327
|
+
value: unknown;
|
|
328
|
+
};
|
|
329
|
+
});
|
|
321
330
|
type TxFinalized = {
|
|
322
331
|
type: "finalized";
|
|
323
332
|
txHash: HexString;
|
package/dist/index.js
CHANGED
|
@@ -362,6 +362,10 @@ const continueWith = (mapper) => (source) => new rxjs.Observable((observer) => {
|
|
|
362
362
|
};
|
|
363
363
|
});
|
|
364
364
|
|
|
365
|
+
const isOptionalArg = (lastArg) => typeof lastArg === "object" && lastArg !== null && Object.entries(lastArg).every(
|
|
366
|
+
([k, v]) => k === "at" && (v === void 0 || typeof v === "string") || k === "signal" && (v === void 0 || v instanceof AbortSignal)
|
|
367
|
+
);
|
|
368
|
+
|
|
365
369
|
const createEventEntry = (pallet, name, chainHead, {
|
|
366
370
|
isCompatible,
|
|
367
371
|
getCompatibilityLevel,
|
|
@@ -404,12 +408,6 @@ const createEventEntry = (pallet, name, chainHead, {
|
|
|
404
408
|
return { watch, pull, filter, getCompatibilityLevel, isCompatible };
|
|
405
409
|
};
|
|
406
410
|
|
|
407
|
-
const isOptionalArg$1 = (lastArg) => {
|
|
408
|
-
if (typeof lastArg !== "object") return false;
|
|
409
|
-
return Object.keys(lastArg).every(
|
|
410
|
-
(k) => k === "at" && typeof lastArg.at === "string" || k === "signal" && lastArg.signal instanceof AbortSignal
|
|
411
|
-
);
|
|
412
|
-
};
|
|
413
411
|
const createRuntimeCallEntry = (api, method, chainHead, {
|
|
414
412
|
isCompatible,
|
|
415
413
|
getCompatibilityLevel,
|
|
@@ -421,7 +419,7 @@ const createRuntimeCallEntry = (api, method, chainHead, {
|
|
|
421
419
|
const compatibilityError = () => new Error(`Incompatible runtime entry RuntimeCall(${callName})`);
|
|
422
420
|
const fn = (...args) => {
|
|
423
421
|
const lastArg = args[args.length - 1];
|
|
424
|
-
const isLastArgOptional = isOptionalArg
|
|
422
|
+
const isLastArgOptional = isOptionalArg(lastArg);
|
|
425
423
|
const { signal, at: _at } = isLastArgOptional ? lastArg : {};
|
|
426
424
|
const at = _at ?? null;
|
|
427
425
|
const result$ = compatibleRuntime$(chainHead, at).pipe(
|
|
@@ -443,12 +441,6 @@ const createRuntimeCallEntry = (api, method, chainHead, {
|
|
|
443
441
|
return Object.assign(fn, { getCompatibilityLevel, isCompatible });
|
|
444
442
|
};
|
|
445
443
|
|
|
446
|
-
const isOptionalArg = (lastArg) => {
|
|
447
|
-
if (typeof lastArg !== "object") return false;
|
|
448
|
-
return Object.keys(lastArg).every(
|
|
449
|
-
(k) => k === "at" && typeof lastArg.at === "string" || k === "signal" && lastArg.signal instanceof AbortSignal
|
|
450
|
-
);
|
|
451
|
-
};
|
|
452
444
|
const createStorageEntry = (pallet, name, chainHead, {
|
|
453
445
|
isCompatible,
|
|
454
446
|
getCompatibilityLevel,
|
|
@@ -823,8 +815,14 @@ const computeState = (analized$, blocks$) => new rxjs.Observable((observer) => {
|
|
|
823
815
|
const getTxSuccessFromSystemEvents = (systemEvents, txIdx) => {
|
|
824
816
|
const events = systemEvents.filter((x) => x.phase.type === "ApplyExtrinsic" && x.phase.value === txIdx).map((x) => x.event);
|
|
825
817
|
const lastEvent = events[events.length - 1];
|
|
826
|
-
|
|
827
|
-
|
|
818
|
+
if (lastEvent.type === "System" && lastEvent.value.type === "ExtrinsicFailed") {
|
|
819
|
+
return {
|
|
820
|
+
ok: false,
|
|
821
|
+
events,
|
|
822
|
+
dispatchError: lastEvent.value.value.dispatch_error
|
|
823
|
+
};
|
|
824
|
+
}
|
|
825
|
+
return { ok: true, events };
|
|
828
826
|
};
|
|
829
827
|
class InvalidTxError extends Error {
|
|
830
828
|
// likely to be a `TransactionValidityError`
|