@moonbeam-network/xcm-utils 0.0.3 → 0.0.4

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/build/index.cjs CHANGED
@@ -1,2 +1,167 @@
1
- "use strict";var b=Object.create;var a=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var w=(t,e)=>{for(var s in e)a(t,s,{get:e[s],enumerable:!0})},v=(t,e,s,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of y(e))!P.call(t,r)&&r!==s&&a(t,r,{get:()=>e[r],enumerable:!(i=k(e,r))||i.enumerable});return t};var h=(t,e,s)=>(s=t!=null?b(F(t)):{},v(e||!t||!t.__esModule?a(s,"default",{value:t,enumerable:!0}):s,t)),I=t=>v(a({},"__esModule",{value:!0}),t);var T={};w(T,{ExtrinsicStatus:()=>p,createExtrinsicEventHandler:()=>C,createTxEventHandler:()=>S,getPolkadotApi:()=>A,toBigInt:()=>B,toDecimal:()=>R});module.exports=I(T);var c=require("@polkadot/api"),H=h(require("lru-cache"),1),g=new H.default({max:20,dispose:async t=>{let e=await t;e.isConnected&&e.disconnect()}});async function A(t,e){let s=g.get(t)||c.ApiPromise.create({provider:new c.WsProvider(t)});g.set(t,s);let i=await s;return await i.isReady,e&&i.once("disconnected",e),i}var p=(i=>(i.Failed="Failed",i.Sent="Sent",i.Success="Success",i))(p||{});function C(t,e,s){return({events:i=[],status:r,txHash:u})=>{let o=u.toHex();if(r.isReady&&s({status:"Sent",txHash:o}),r.isInBlock){let l=r.asInBlock.toString();i.forEach(({event:{data:x,method:m,section:f}})=>{var E;if(f===t&&m===e){if(m==="Attempted"){let d=x.at(0);if(d.isIncomplete){s({status:"Failed",blockHash:l,txHash:o,message:(E=d.asIncomplete)==null?void 0:E.toHuman().join("; ")});return}}s({status:"Success",blockHash:l,txHash:o})}f==="system"&&m==="ExtrinsicFailed"&&s({status:"Failed",blockHash:l,txHash:o,message:x.join("; ")})})}}}async function S(t,e,s,i=!1){if(!t.provider)throw new Error("options.ethersSigner has not provider");i||s({status:"Sent",txHash:e});let r=await t.provider.getTransactionReceipt(e);if(!r){setTimeout(()=>S(t,e,s,!0),2e3);return}r.status===1?s({status:"Success",blockHash:r.blockHash,txHash:e}):s({status:"Failed",blockHash:r.blockHash,txHash:e})}var n=h(require("big.js"),1);function R(t,e,s=6){let i=(0,n.default)(t.toString().replace(/[^0-9]/g,"")),r=(0,n.default)(10).pow(e);return i.div(r).round(s).toNumber()}function B(t,e){let s=(0,n.default)(10).pow(e),i=(0,n.default)(t).mul(s);return BigInt(i.toFixed())}0&&(module.exports={ExtrinsicStatus,createExtrinsicEventHandler,createTxEventHandler,getPolkadotApi,toBigInt,toDecimal});
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
+
26
+ // src/index.ts
27
+ var src_exports = {};
28
+ __export(src_exports, {
29
+ ExtrinsicStatus: () => ExtrinsicStatus,
30
+ createExtrinsicEventHandler: () => createExtrinsicEventHandler,
31
+ createTxEventHandler: () => createTxEventHandler,
32
+ getPolkadotApi: () => getPolkadotApi,
33
+ toBigInt: () => toBigInt,
34
+ toDecimal: () => toDecimal
35
+ });
36
+ module.exports = __toCommonJS(src_exports);
37
+
38
+ // src/api/polkadot.api.ts
39
+ var import_api = require("@polkadot/api");
40
+ var import_lru_cache = __toESM(require("lru-cache"), 1);
41
+ var cache = new import_lru_cache.default({
42
+ max: 20,
43
+ dispose: async (promise) => {
44
+ const api = await promise;
45
+ if (api.isConnected) {
46
+ api.disconnect();
47
+ }
48
+ }
49
+ });
50
+ async function getPolkadotApi(ws, onDisconnect) {
51
+ const promise = cache.get(ws) || import_api.ApiPromise.create({
52
+ provider: new import_api.WsProvider(ws)
53
+ });
54
+ cache.set(ws, promise);
55
+ const api = await promise;
56
+ await api.isReady;
57
+ if (onDisconnect) {
58
+ api.once("disconnected", onDisconnect);
59
+ }
60
+ return api;
61
+ }
62
+
63
+ // src/handlers/handlers.interfaces.ts
64
+ var ExtrinsicStatus = /* @__PURE__ */ ((ExtrinsicStatus2) => {
65
+ ExtrinsicStatus2["Failed"] = "Failed";
66
+ ExtrinsicStatus2["Sent"] = "Sent";
67
+ ExtrinsicStatus2["Success"] = "Success";
68
+ return ExtrinsicStatus2;
69
+ })(ExtrinsicStatus || {});
70
+
71
+ // src/handlers/createExtrinsicEventHandler.ts
72
+ function createExtrinsicEventHandler(pallet, successEvent, cb) {
73
+ return ({ events = [], status, txHash }) => {
74
+ const hash = txHash.toHex();
75
+ if (status.isReady) {
76
+ cb({ status: "Sent" /* Sent */, txHash: hash });
77
+ }
78
+ if (status.isInBlock) {
79
+ const block = status.asInBlock.toString();
80
+ events.forEach(({ event: { data, method, section } }) => {
81
+ var _a;
82
+ if (section === pallet && method === successEvent) {
83
+ if (method === "Attempted") {
84
+ const eventData = data.at(0);
85
+ if (eventData.isIncomplete) {
86
+ cb({
87
+ status: "Failed" /* Failed */,
88
+ blockHash: block,
89
+ txHash: hash,
90
+ message: (_a = eventData.asIncomplete) == null ? void 0 : _a.toHuman().join("; ")
91
+ });
92
+ return;
93
+ }
94
+ }
95
+ cb({
96
+ status: "Success" /* Success */,
97
+ blockHash: block,
98
+ txHash: hash
99
+ });
100
+ }
101
+ if (section === "system" && method === "ExtrinsicFailed") {
102
+ cb({
103
+ status: "Failed" /* Failed */,
104
+ blockHash: block,
105
+ txHash: hash,
106
+ message: data.join("; ")
107
+ });
108
+ }
109
+ });
110
+ }
111
+ };
112
+ }
113
+
114
+ // src/handlers/createTxEventHandler.ts
115
+ async function createTxEventHandler(ethersSigner, txHash, cb, skipSentEvent = false) {
116
+ if (!ethersSigner.provider) {
117
+ throw new Error("options.ethersSigner has not provider");
118
+ }
119
+ if (!skipSentEvent) {
120
+ cb({ status: "Sent" /* Sent */, txHash });
121
+ }
122
+ const tx = await ethersSigner.provider.getTransactionReceipt(txHash);
123
+ if (!tx) {
124
+ setTimeout(
125
+ () => createTxEventHandler(ethersSigner, txHash, cb, true),
126
+ 2e3
127
+ );
128
+ return;
129
+ }
130
+ if (tx.status === 1) {
131
+ cb({
132
+ status: "Success" /* Success */,
133
+ blockHash: tx.blockHash,
134
+ txHash
135
+ });
136
+ } else {
137
+ cb({
138
+ status: "Failed" /* Failed */,
139
+ blockHash: tx.blockHash,
140
+ txHash
141
+ });
142
+ }
143
+ }
144
+
145
+ // src/numbers/decimals.ts
146
+ var import_big = __toESM(require("big.js"), 1);
147
+ function toDecimal(number, decimals, maxDecimal = 6, roundType) {
148
+ const dividend = (0, import_big.default)(number.toString().replace(/[^0-9]/g, ""));
149
+ const divisor = (0, import_big.default)(10).pow(decimals);
150
+ const result = dividend.div(divisor).round(maxDecimal, roundType);
151
+ return result.toNumber();
152
+ }
153
+ function toBigInt(amount, decimals) {
154
+ const multiplier = (0, import_big.default)(10).pow(decimals);
155
+ const result = (0, import_big.default)(amount).mul(multiplier);
156
+ return BigInt(result.toFixed());
157
+ }
158
+ // Annotate the CommonJS export names for ESM import in node:
159
+ 0 && (module.exports = {
160
+ ExtrinsicStatus,
161
+ createExtrinsicEventHandler,
162
+ createTxEventHandler,
163
+ getPolkadotApi,
164
+ toBigInt,
165
+ toDecimal
166
+ });
2
167
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/api/polkadot.api.ts","../src/handlers/handlers.interfaces.ts","../src/handlers/createExtrinsicEventHandler.ts","../src/handlers/createTxEventHandler.ts","../src/numbers/decimals.ts"],"sourcesContent":["export * from './api';\nexport * from './handlers';\nexport * from './numbers';\n","import { ApiPromise, WsProvider } from '@polkadot/api';\nimport LRU from 'lru-cache';\n\nconst cache = new LRU<string, Promise<ApiPromise>>({\n max: 20,\n dispose: async (promise: Promise<ApiPromise>) => {\n const api = await promise;\n\n if (api.isConnected) {\n api.disconnect();\n }\n },\n});\n\nexport async function getPolkadotApi(\n ws: string,\n onDisconnect?: VoidFunction,\n): Promise<ApiPromise> {\n const promise =\n cache.get(ws) ||\n ApiPromise.create({\n provider: new WsProvider(ws),\n });\n\n cache.set(ws, promise);\n\n const api = await promise;\n\n await api.isReady;\n\n if (onDisconnect) {\n api.once('disconnected', onDisconnect);\n }\n\n return api;\n}\n","export type Hash = string;\n\nexport type ExtrinsicEventsCallback = (event: ExtrinsicEvent) => void;\n\nexport type ExtrinsicEvent =\n | ExtrinsicFailedEvent\n | ExtrinsicSentEvent\n | ExtrinsicSuccessEvent;\n\nexport interface ExtrinsicFailedEvent {\n blockHash: Hash;\n message?: string;\n status: ExtrinsicStatus.Failed;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSentEvent {\n status: ExtrinsicStatus.Sent;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSuccessEvent {\n blockHash: Hash;\n status: ExtrinsicStatus.Success;\n txHash: Hash;\n}\n\nexport enum ExtrinsicStatus {\n Failed = 'Failed',\n Sent = 'Sent',\n Success = 'Success',\n}\n","import type { ISubmittableResult } from '@polkadot/types/types';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n} from './handlers.interfaces';\n\nexport function createExtrinsicEventHandler(\n pallet: string,\n successEvent: string,\n cb: ExtrinsicEventsCallback,\n) {\n return ({ events = [], status, txHash }: ISubmittableResult) => {\n const hash = txHash.toHex();\n\n if (status.isReady) {\n cb({ status: ExtrinsicStatus.Sent, txHash: hash });\n }\n\n if (status.isInBlock) {\n const block = status.asInBlock.toString();\n\n events.forEach(({ event: { data, method, section } }) => {\n if (section === pallet && method === successEvent) {\n if (method === 'Attempted') {\n const eventData = data.at(0) as any;\n\n if (eventData.isIncomplete) {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: eventData.asIncomplete?.toHuman().join('; '),\n });\n\n return;\n }\n }\n\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: block,\n txHash: hash,\n });\n }\n\n if (section === 'system' && method === 'ExtrinsicFailed') {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: data.join('; '),\n });\n }\n });\n }\n };\n}\n","import type { Signer as EthersSigner } from 'ethers';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n Hash,\n} from './handlers.interfaces';\n\nexport async function createTxEventHandler(\n ethersSigner: EthersSigner,\n txHash: Hash,\n cb: ExtrinsicEventsCallback,\n skipSentEvent = false,\n) {\n if (!ethersSigner.provider) {\n throw new Error('options.ethersSigner has not provider');\n }\n\n if (!skipSentEvent) {\n cb({ status: ExtrinsicStatus.Sent, txHash });\n }\n\n const tx = await ethersSigner.provider.getTransactionReceipt(txHash);\n\n if (!tx) {\n setTimeout(\n () => createTxEventHandler(ethersSigner, txHash, cb, true),\n 2000,\n );\n return;\n }\n\n if (tx.status === 1) {\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: tx.blockHash,\n txHash,\n });\n } else {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: tx.blockHash,\n txHash,\n });\n }\n}\n","import Big from 'big.js';\n\nexport function toDecimal(\n number: bigint | number | string,\n decimals: number,\n maxDecimal = 6,\n): number {\n const dividend = Big(number.toString().replace(/[^0-9]/g, ''));\n const divisor = Big(10).pow(decimals);\n const result = dividend.div(divisor).round(maxDecimal);\n\n return result.toNumber();\n}\n\nexport function toBigInt(amount: string | number, decimals: number): bigint {\n const multiplier = Big(10).pow(decimals);\n const result = Big(amount).mul(multiplier);\n\n return BigInt(result.toFixed());\n}\n"],"mappings":"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","names":["src_exports","__export","ExtrinsicStatus","createExtrinsicEventHandler","createTxEventHandler","getPolkadotApi","toBigInt","toDecimal","__toCommonJS","import_api","import_lru_cache","cache","LRU","promise","api","getPolkadotApi","ws","onDisconnect","ExtrinsicStatus","createExtrinsicEventHandler","pallet","successEvent","cb","events","status","txHash","hash","block","data","method","section","_a","eventData","createTxEventHandler","ethersSigner","txHash","cb","skipSentEvent","tx","import_big","toDecimal","number","decimals","maxDecimal","dividend","Big","divisor","toBigInt","amount","multiplier","result"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/api/polkadot.api.ts","../src/handlers/handlers.interfaces.ts","../src/handlers/createExtrinsicEventHandler.ts","../src/handlers/createTxEventHandler.ts","../src/numbers/decimals.ts"],"sourcesContent":["export * from './api';\nexport * from './handlers';\nexport * from './numbers';\n","import { ApiPromise, WsProvider } from '@polkadot/api';\nimport LRU from 'lru-cache';\n\nconst cache = new LRU<string, Promise<ApiPromise>>({\n max: 20,\n dispose: async (promise: Promise<ApiPromise>) => {\n const api = await promise;\n\n if (api.isConnected) {\n api.disconnect();\n }\n },\n});\n\nexport async function getPolkadotApi(\n ws: string,\n onDisconnect?: VoidFunction,\n): Promise<ApiPromise> {\n const promise =\n cache.get(ws) ||\n ApiPromise.create({\n provider: new WsProvider(ws),\n });\n\n cache.set(ws, promise);\n\n const api = await promise;\n\n await api.isReady;\n\n if (onDisconnect) {\n api.once('disconnected', onDisconnect);\n }\n\n return api;\n}\n","export type Hash = string;\n\nexport type ExtrinsicEventsCallback = (event: ExtrinsicEvent) => void;\n\nexport type ExtrinsicEvent =\n | ExtrinsicFailedEvent\n | ExtrinsicSentEvent\n | ExtrinsicSuccessEvent;\n\nexport interface ExtrinsicFailedEvent {\n blockHash: Hash;\n message?: string;\n status: ExtrinsicStatus.Failed;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSentEvent {\n status: ExtrinsicStatus.Sent;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSuccessEvent {\n blockHash: Hash;\n status: ExtrinsicStatus.Success;\n txHash: Hash;\n}\n\nexport enum ExtrinsicStatus {\n Failed = 'Failed',\n Sent = 'Sent',\n Success = 'Success',\n}\n","import type { ISubmittableResult } from '@polkadot/types/types';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n} from './handlers.interfaces';\n\nexport function createExtrinsicEventHandler(\n pallet: string,\n successEvent: string,\n cb: ExtrinsicEventsCallback,\n) {\n return ({ events = [], status, txHash }: ISubmittableResult) => {\n const hash = txHash.toHex();\n\n if (status.isReady) {\n cb({ status: ExtrinsicStatus.Sent, txHash: hash });\n }\n\n if (status.isInBlock) {\n const block = status.asInBlock.toString();\n\n events.forEach(({ event: { data, method, section } }) => {\n if (section === pallet && method === successEvent) {\n if (method === 'Attempted') {\n const eventData = data.at(0) as any;\n\n if (eventData.isIncomplete) {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: eventData.asIncomplete?.toHuman().join('; '),\n });\n\n return;\n }\n }\n\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: block,\n txHash: hash,\n });\n }\n\n if (section === 'system' && method === 'ExtrinsicFailed') {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: data.join('; '),\n });\n }\n });\n }\n };\n}\n","import type { Signer as EthersSigner } from 'ethers';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n Hash,\n} from './handlers.interfaces';\n\nexport async function createTxEventHandler(\n ethersSigner: EthersSigner,\n txHash: Hash,\n cb: ExtrinsicEventsCallback,\n skipSentEvent = false,\n) {\n if (!ethersSigner.provider) {\n throw new Error('options.ethersSigner has not provider');\n }\n\n if (!skipSentEvent) {\n cb({ status: ExtrinsicStatus.Sent, txHash });\n }\n\n const tx = await ethersSigner.provider.getTransactionReceipt(txHash);\n\n if (!tx) {\n setTimeout(\n () => createTxEventHandler(ethersSigner, txHash, cb, true),\n 2000,\n );\n return;\n }\n\n if (tx.status === 1) {\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: tx.blockHash,\n txHash,\n });\n } else {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: tx.blockHash,\n txHash,\n });\n }\n}\n","import Big, { RoundingMode } from 'big.js';\n\nexport function toDecimal(\n number: bigint | number | string,\n decimals: number,\n maxDecimal = 6,\n roundType?: RoundingMode,\n): number {\n const dividend = Big(number.toString().replace(/[^0-9]/g, ''));\n const divisor = Big(10).pow(decimals);\n const result = dividend.div(divisor).round(maxDecimal, roundType);\n\n return result.toNumber();\n}\n\nexport function toBigInt(amount: string | number, decimals: number): bigint {\n const multiplier = Big(10).pow(decimals);\n const result = Big(amount).mul(multiplier);\n\n return BigInt(result.toFixed());\n}\n"],"mappings":"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","names":["LRU","ExtrinsicStatus","Big"]}
package/build/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ApiPromise } from '@polkadot/api';
2
2
  import { ISubmittableResult } from '@polkadot/types/types';
3
3
  import { Signer } from 'ethers';
4
+ import { RoundingMode } from 'big.js';
4
5
 
5
6
  declare function getPolkadotApi(
6
7
  ws: string,
@@ -51,6 +52,7 @@ declare function toDecimal(
51
52
  number: bigint | number | string,
52
53
  decimals: number,
53
54
  maxDecimal?: number,
55
+ roundType?: RoundingMode,
54
56
  ): number;
55
57
  declare function toBigInt(amount: string | number, decimals: number): bigint;
56
58
 
package/build/index.mjs CHANGED
@@ -1,2 +1,129 @@
1
- import{ApiPromise as d,WsProvider as v}from"@polkadot/api";import h from"lru-cache";var E=new h({max:20,dispose:async s=>{let t=await s;t.isConnected&&t.disconnect()}});async function b(s,t){let e=E.get(s)||d.create({provider:new v(s)});E.set(s,e);let i=await e;return await i.isReady,t&&i.once("disconnected",t),i}var p=(i=>(i.Failed="Failed",i.Sent="Sent",i.Success="Success",i))(p||{});function A(s,t,e){return({events:i=[],status:r,txHash:l})=>{let n=l.toHex();if(r.isReady&&e({status:"Sent",txHash:n}),r.isInBlock){let a=r.asInBlock.toString();i.forEach(({event:{data:m,method:c,section:u}})=>{var x;if(u===s&&c===t){if(c==="Attempted"){let f=m.at(0);if(f.isIncomplete){e({status:"Failed",blockHash:a,txHash:n,message:(x=f.asIncomplete)==null?void 0:x.toHuman().join("; ")});return}}e({status:"Success",blockHash:a,txHash:n})}u==="system"&&c==="ExtrinsicFailed"&&e({status:"Failed",blockHash:a,txHash:n,message:m.join("; ")})})}}}async function g(s,t,e,i=!1){if(!s.provider)throw new Error("options.ethersSigner has not provider");i||e({status:"Sent",txHash:t});let r=await s.provider.getTransactionReceipt(t);if(!r){setTimeout(()=>g(s,t,e,!0),2e3);return}r.status===1?e({status:"Success",blockHash:r.blockHash,txHash:t}):e({status:"Failed",blockHash:r.blockHash,txHash:t})}import o from"big.js";function W(s,t,e=6){let i=o(s.toString().replace(/[^0-9]/g,"")),r=o(10).pow(t);return i.div(r).round(e).toNumber()}function q(s,t){let e=o(10).pow(t),i=o(s).mul(e);return BigInt(i.toFixed())}export{p as ExtrinsicStatus,A as createExtrinsicEventHandler,g as createTxEventHandler,b as getPolkadotApi,q as toBigInt,W as toDecimal};
1
+ // src/api/polkadot.api.ts
2
+ import { ApiPromise, WsProvider } from "@polkadot/api";
3
+ import LRU from "lru-cache";
4
+ var cache = new LRU({
5
+ max: 20,
6
+ dispose: async (promise) => {
7
+ const api = await promise;
8
+ if (api.isConnected) {
9
+ api.disconnect();
10
+ }
11
+ }
12
+ });
13
+ async function getPolkadotApi(ws, onDisconnect) {
14
+ const promise = cache.get(ws) || ApiPromise.create({
15
+ provider: new WsProvider(ws)
16
+ });
17
+ cache.set(ws, promise);
18
+ const api = await promise;
19
+ await api.isReady;
20
+ if (onDisconnect) {
21
+ api.once("disconnected", onDisconnect);
22
+ }
23
+ return api;
24
+ }
25
+
26
+ // src/handlers/handlers.interfaces.ts
27
+ var ExtrinsicStatus = /* @__PURE__ */ ((ExtrinsicStatus2) => {
28
+ ExtrinsicStatus2["Failed"] = "Failed";
29
+ ExtrinsicStatus2["Sent"] = "Sent";
30
+ ExtrinsicStatus2["Success"] = "Success";
31
+ return ExtrinsicStatus2;
32
+ })(ExtrinsicStatus || {});
33
+
34
+ // src/handlers/createExtrinsicEventHandler.ts
35
+ function createExtrinsicEventHandler(pallet, successEvent, cb) {
36
+ return ({ events = [], status, txHash }) => {
37
+ const hash = txHash.toHex();
38
+ if (status.isReady) {
39
+ cb({ status: "Sent" /* Sent */, txHash: hash });
40
+ }
41
+ if (status.isInBlock) {
42
+ const block = status.asInBlock.toString();
43
+ events.forEach(({ event: { data, method, section } }) => {
44
+ var _a;
45
+ if (section === pallet && method === successEvent) {
46
+ if (method === "Attempted") {
47
+ const eventData = data.at(0);
48
+ if (eventData.isIncomplete) {
49
+ cb({
50
+ status: "Failed" /* Failed */,
51
+ blockHash: block,
52
+ txHash: hash,
53
+ message: (_a = eventData.asIncomplete) == null ? void 0 : _a.toHuman().join("; ")
54
+ });
55
+ return;
56
+ }
57
+ }
58
+ cb({
59
+ status: "Success" /* Success */,
60
+ blockHash: block,
61
+ txHash: hash
62
+ });
63
+ }
64
+ if (section === "system" && method === "ExtrinsicFailed") {
65
+ cb({
66
+ status: "Failed" /* Failed */,
67
+ blockHash: block,
68
+ txHash: hash,
69
+ message: data.join("; ")
70
+ });
71
+ }
72
+ });
73
+ }
74
+ };
75
+ }
76
+
77
+ // src/handlers/createTxEventHandler.ts
78
+ async function createTxEventHandler(ethersSigner, txHash, cb, skipSentEvent = false) {
79
+ if (!ethersSigner.provider) {
80
+ throw new Error("options.ethersSigner has not provider");
81
+ }
82
+ if (!skipSentEvent) {
83
+ cb({ status: "Sent" /* Sent */, txHash });
84
+ }
85
+ const tx = await ethersSigner.provider.getTransactionReceipt(txHash);
86
+ if (!tx) {
87
+ setTimeout(
88
+ () => createTxEventHandler(ethersSigner, txHash, cb, true),
89
+ 2e3
90
+ );
91
+ return;
92
+ }
93
+ if (tx.status === 1) {
94
+ cb({
95
+ status: "Success" /* Success */,
96
+ blockHash: tx.blockHash,
97
+ txHash
98
+ });
99
+ } else {
100
+ cb({
101
+ status: "Failed" /* Failed */,
102
+ blockHash: tx.blockHash,
103
+ txHash
104
+ });
105
+ }
106
+ }
107
+
108
+ // src/numbers/decimals.ts
109
+ import Big from "big.js";
110
+ function toDecimal(number, decimals, maxDecimal = 6, roundType) {
111
+ const dividend = Big(number.toString().replace(/[^0-9]/g, ""));
112
+ const divisor = Big(10).pow(decimals);
113
+ const result = dividend.div(divisor).round(maxDecimal, roundType);
114
+ return result.toNumber();
115
+ }
116
+ function toBigInt(amount, decimals) {
117
+ const multiplier = Big(10).pow(decimals);
118
+ const result = Big(amount).mul(multiplier);
119
+ return BigInt(result.toFixed());
120
+ }
121
+ export {
122
+ ExtrinsicStatus,
123
+ createExtrinsicEventHandler,
124
+ createTxEventHandler,
125
+ getPolkadotApi,
126
+ toBigInt,
127
+ toDecimal
128
+ };
2
129
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/polkadot.api.ts","../src/handlers/handlers.interfaces.ts","../src/handlers/createExtrinsicEventHandler.ts","../src/handlers/createTxEventHandler.ts","../src/numbers/decimals.ts"],"sourcesContent":["import { ApiPromise, WsProvider } from '@polkadot/api';\nimport LRU from 'lru-cache';\n\nconst cache = new LRU<string, Promise<ApiPromise>>({\n max: 20,\n dispose: async (promise: Promise<ApiPromise>) => {\n const api = await promise;\n\n if (api.isConnected) {\n api.disconnect();\n }\n },\n});\n\nexport async function getPolkadotApi(\n ws: string,\n onDisconnect?: VoidFunction,\n): Promise<ApiPromise> {\n const promise =\n cache.get(ws) ||\n ApiPromise.create({\n provider: new WsProvider(ws),\n });\n\n cache.set(ws, promise);\n\n const api = await promise;\n\n await api.isReady;\n\n if (onDisconnect) {\n api.once('disconnected', onDisconnect);\n }\n\n return api;\n}\n","export type Hash = string;\n\nexport type ExtrinsicEventsCallback = (event: ExtrinsicEvent) => void;\n\nexport type ExtrinsicEvent =\n | ExtrinsicFailedEvent\n | ExtrinsicSentEvent\n | ExtrinsicSuccessEvent;\n\nexport interface ExtrinsicFailedEvent {\n blockHash: Hash;\n message?: string;\n status: ExtrinsicStatus.Failed;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSentEvent {\n status: ExtrinsicStatus.Sent;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSuccessEvent {\n blockHash: Hash;\n status: ExtrinsicStatus.Success;\n txHash: Hash;\n}\n\nexport enum ExtrinsicStatus {\n Failed = 'Failed',\n Sent = 'Sent',\n Success = 'Success',\n}\n","import type { ISubmittableResult } from '@polkadot/types/types';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n} from './handlers.interfaces';\n\nexport function createExtrinsicEventHandler(\n pallet: string,\n successEvent: string,\n cb: ExtrinsicEventsCallback,\n) {\n return ({ events = [], status, txHash }: ISubmittableResult) => {\n const hash = txHash.toHex();\n\n if (status.isReady) {\n cb({ status: ExtrinsicStatus.Sent, txHash: hash });\n }\n\n if (status.isInBlock) {\n const block = status.asInBlock.toString();\n\n events.forEach(({ event: { data, method, section } }) => {\n if (section === pallet && method === successEvent) {\n if (method === 'Attempted') {\n const eventData = data.at(0) as any;\n\n if (eventData.isIncomplete) {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: eventData.asIncomplete?.toHuman().join('; '),\n });\n\n return;\n }\n }\n\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: block,\n txHash: hash,\n });\n }\n\n if (section === 'system' && method === 'ExtrinsicFailed') {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: data.join('; '),\n });\n }\n });\n }\n };\n}\n","import type { Signer as EthersSigner } from 'ethers';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n Hash,\n} from './handlers.interfaces';\n\nexport async function createTxEventHandler(\n ethersSigner: EthersSigner,\n txHash: Hash,\n cb: ExtrinsicEventsCallback,\n skipSentEvent = false,\n) {\n if (!ethersSigner.provider) {\n throw new Error('options.ethersSigner has not provider');\n }\n\n if (!skipSentEvent) {\n cb({ status: ExtrinsicStatus.Sent, txHash });\n }\n\n const tx = await ethersSigner.provider.getTransactionReceipt(txHash);\n\n if (!tx) {\n setTimeout(\n () => createTxEventHandler(ethersSigner, txHash, cb, true),\n 2000,\n );\n return;\n }\n\n if (tx.status === 1) {\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: tx.blockHash,\n txHash,\n });\n } else {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: tx.blockHash,\n txHash,\n });\n }\n}\n","import Big from 'big.js';\n\nexport function toDecimal(\n number: bigint | number | string,\n decimals: number,\n maxDecimal = 6,\n): number {\n const dividend = Big(number.toString().replace(/[^0-9]/g, ''));\n const divisor = Big(10).pow(decimals);\n const result = dividend.div(divisor).round(maxDecimal);\n\n return result.toNumber();\n}\n\nexport function toBigInt(amount: string | number, decimals: number): bigint {\n const multiplier = Big(10).pow(decimals);\n const result = Big(amount).mul(multiplier);\n\n return BigInt(result.toFixed());\n}\n"],"mappings":"AAAA,OAAS,cAAAA,EAAY,cAAAC,MAAkB,gBACvC,OAAOC,MAAS,YAEhB,IAAMC,EAAQ,IAAID,EAAiC,CACjD,IAAK,GACL,QAAS,MAAOE,GAAiC,CAC/C,IAAMC,EAAM,MAAMD,EAEdC,EAAI,aACNA,EAAI,WAAW,CAEnB,CACF,CAAC,EAED,eAAsBC,EACpBC,EACAC,EACqB,CACrB,IAAMJ,EACJD,EAAM,IAAII,CAAE,GACZP,EAAW,OAAO,CAChB,SAAU,IAAIC,EAAWM,CAAE,CAC7B,CAAC,EAEHJ,EAAM,IAAII,EAAIH,CAAO,EAErB,IAAMC,EAAM,MAAMD,EAElB,aAAMC,EAAI,QAENG,GACFH,EAAI,KAAK,eAAgBG,CAAY,EAGhCH,CACT,CCRO,IAAKI,OACVA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,QAAU,UAHAA,OAAA,ICrBL,SAASC,EACdC,EACAC,EACAC,EACA,CACA,MAAO,CAAC,CAAE,OAAAC,EAAS,CAAC,EAAG,OAAAC,EAAQ,OAAAC,CAAO,IAA0B,CAC9D,IAAMC,EAAOD,EAAO,MAAM,EAM1B,GAJID,EAAO,SACTF,EAAG,CAAE,cAA8B,OAAQI,CAAK,CAAC,EAG/CF,EAAO,UAAW,CACpB,IAAMG,EAAQH,EAAO,UAAU,SAAS,EAExCD,EAAO,QAAQ,CAAC,CAAE,MAAO,CAAE,KAAAK,EAAM,OAAAC,EAAQ,QAAAC,CAAQ,CAAE,IAAM,CArB/D,IAAAC,EAsBQ,GAAID,IAAYV,GAAUS,IAAWR,EAAc,CACjD,GAAIQ,IAAW,YAAa,CAC1B,IAAMG,EAAYJ,EAAK,GAAG,CAAC,EAE3B,GAAII,EAAU,aAAc,CAC1BV,EAAG,CACD,gBACA,UAAWK,EACX,OAAQD,EACR,SAASK,EAAAC,EAAU,eAAV,YAAAD,EAAwB,UAAU,KAAK,KAClD,CAAC,EAED,MACF,CACF,CAEAT,EAAG,CACD,iBACA,UAAWK,EACX,OAAQD,CACV,CAAC,CACH,CAEII,IAAY,UAAYD,IAAW,mBACrCP,EAAG,CACD,gBACA,UAAWK,EACX,OAAQD,EACR,QAASE,EAAK,KAAK,IAAI,CACzB,CAAC,CAEL,CAAC,CACH,CACF,CACF,CCjDA,eAAsBK,EACpBC,EACAC,EACAC,EACAC,EAAgB,GAChB,CACA,GAAI,CAACH,EAAa,SAChB,MAAM,IAAI,MAAM,uCAAuC,EAGpDG,GACHD,EAAG,CAAE,cAA8B,OAAAD,CAAO,CAAC,EAG7C,IAAMG,EAAK,MAAMJ,EAAa,SAAS,sBAAsBC,CAAM,EAEnE,GAAI,CAACG,EAAI,CACP,WACE,IAAML,EAAqBC,EAAcC,EAAQC,EAAI,EAAI,EACzD,GACF,EACA,MACF,CAEIE,EAAG,SAAW,EAChBF,EAAG,CACD,iBACA,UAAWE,EAAG,UACd,OAAAH,CACF,CAAC,EAEDC,EAAG,CACD,gBACA,UAAWE,EAAG,UACd,OAAAH,CACF,CAAC,CAEL,CC5CA,OAAOI,MAAS,SAET,SAASC,EACdC,EACAC,EACAC,EAAa,EACL,CACR,IAAMC,EAAWL,EAAIE,EAAO,SAAS,EAAE,QAAQ,UAAW,EAAE,CAAC,EACvDI,EAAUN,EAAI,EAAE,EAAE,IAAIG,CAAQ,EAGpC,OAFeE,EAAS,IAAIC,CAAO,EAAE,MAAMF,CAAU,EAEvC,SAAS,CACzB,CAEO,SAASG,EAASC,EAAyBL,EAA0B,CAC1E,IAAMM,EAAaT,EAAI,EAAE,EAAE,IAAIG,CAAQ,EACjCO,EAASV,EAAIQ,CAAM,EAAE,IAAIC,CAAU,EAEzC,OAAO,OAAOC,EAAO,QAAQ,CAAC,CAChC","names":["ApiPromise","WsProvider","LRU","cache","promise","api","getPolkadotApi","ws","onDisconnect","ExtrinsicStatus","createExtrinsicEventHandler","pallet","successEvent","cb","events","status","txHash","hash","block","data","method","section","_a","eventData","createTxEventHandler","ethersSigner","txHash","cb","skipSentEvent","tx","Big","toDecimal","number","decimals","maxDecimal","dividend","divisor","toBigInt","amount","multiplier","result"]}
1
+ {"version":3,"sources":["../src/api/polkadot.api.ts","../src/handlers/handlers.interfaces.ts","../src/handlers/createExtrinsicEventHandler.ts","../src/handlers/createTxEventHandler.ts","../src/numbers/decimals.ts"],"sourcesContent":["import { ApiPromise, WsProvider } from '@polkadot/api';\nimport LRU from 'lru-cache';\n\nconst cache = new LRU<string, Promise<ApiPromise>>({\n max: 20,\n dispose: async (promise: Promise<ApiPromise>) => {\n const api = await promise;\n\n if (api.isConnected) {\n api.disconnect();\n }\n },\n});\n\nexport async function getPolkadotApi(\n ws: string,\n onDisconnect?: VoidFunction,\n): Promise<ApiPromise> {\n const promise =\n cache.get(ws) ||\n ApiPromise.create({\n provider: new WsProvider(ws),\n });\n\n cache.set(ws, promise);\n\n const api = await promise;\n\n await api.isReady;\n\n if (onDisconnect) {\n api.once('disconnected', onDisconnect);\n }\n\n return api;\n}\n","export type Hash = string;\n\nexport type ExtrinsicEventsCallback = (event: ExtrinsicEvent) => void;\n\nexport type ExtrinsicEvent =\n | ExtrinsicFailedEvent\n | ExtrinsicSentEvent\n | ExtrinsicSuccessEvent;\n\nexport interface ExtrinsicFailedEvent {\n blockHash: Hash;\n message?: string;\n status: ExtrinsicStatus.Failed;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSentEvent {\n status: ExtrinsicStatus.Sent;\n txHash: Hash;\n}\n\nexport interface ExtrinsicSuccessEvent {\n blockHash: Hash;\n status: ExtrinsicStatus.Success;\n txHash: Hash;\n}\n\nexport enum ExtrinsicStatus {\n Failed = 'Failed',\n Sent = 'Sent',\n Success = 'Success',\n}\n","import type { ISubmittableResult } from '@polkadot/types/types';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n} from './handlers.interfaces';\n\nexport function createExtrinsicEventHandler(\n pallet: string,\n successEvent: string,\n cb: ExtrinsicEventsCallback,\n) {\n return ({ events = [], status, txHash }: ISubmittableResult) => {\n const hash = txHash.toHex();\n\n if (status.isReady) {\n cb({ status: ExtrinsicStatus.Sent, txHash: hash });\n }\n\n if (status.isInBlock) {\n const block = status.asInBlock.toString();\n\n events.forEach(({ event: { data, method, section } }) => {\n if (section === pallet && method === successEvent) {\n if (method === 'Attempted') {\n const eventData = data.at(0) as any;\n\n if (eventData.isIncomplete) {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: eventData.asIncomplete?.toHuman().join('; '),\n });\n\n return;\n }\n }\n\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: block,\n txHash: hash,\n });\n }\n\n if (section === 'system' && method === 'ExtrinsicFailed') {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: block,\n txHash: hash,\n message: data.join('; '),\n });\n }\n });\n }\n };\n}\n","import type { Signer as EthersSigner } from 'ethers';\nimport {\n ExtrinsicEventsCallback,\n ExtrinsicStatus,\n Hash,\n} from './handlers.interfaces';\n\nexport async function createTxEventHandler(\n ethersSigner: EthersSigner,\n txHash: Hash,\n cb: ExtrinsicEventsCallback,\n skipSentEvent = false,\n) {\n if (!ethersSigner.provider) {\n throw new Error('options.ethersSigner has not provider');\n }\n\n if (!skipSentEvent) {\n cb({ status: ExtrinsicStatus.Sent, txHash });\n }\n\n const tx = await ethersSigner.provider.getTransactionReceipt(txHash);\n\n if (!tx) {\n setTimeout(\n () => createTxEventHandler(ethersSigner, txHash, cb, true),\n 2000,\n );\n return;\n }\n\n if (tx.status === 1) {\n cb({\n status: ExtrinsicStatus.Success,\n blockHash: tx.blockHash,\n txHash,\n });\n } else {\n cb({\n status: ExtrinsicStatus.Failed,\n blockHash: tx.blockHash,\n txHash,\n });\n }\n}\n","import Big, { RoundingMode } from 'big.js';\n\nexport function toDecimal(\n number: bigint | number | string,\n decimals: number,\n maxDecimal = 6,\n roundType?: RoundingMode,\n): number {\n const dividend = Big(number.toString().replace(/[^0-9]/g, ''));\n const divisor = Big(10).pow(decimals);\n const result = dividend.div(divisor).round(maxDecimal, roundType);\n\n return result.toNumber();\n}\n\nexport function toBigInt(amount: string | number, decimals: number): bigint {\n const multiplier = Big(10).pow(decimals);\n const result = Big(amount).mul(multiplier);\n\n return BigInt(result.toFixed());\n}\n"],"mappings":"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","names":["ExtrinsicStatus"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moonbeam-network/xcm-utils",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Moonbeam XCM utilities",
5
5
  "scripts": {
6
6
  "build": "tsup",