@polkadot-api/logs-provider 0.0.2 → 0.0.3

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.
@@ -0,0 +1,3 @@
1
+ export { logsProvider } from './logs-provider.mjs';
2
+ export { withLogsRecorder } from './with-logs-recorder.mjs';
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,50 +1,7 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => {
4
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
- return value;
6
- };
1
+ import Queue from './queue.mjs';
2
+ import { OUT } from './types.mjs';
7
3
 
8
- // src/queue.ts
9
- var Queue = class {
10
- constructor(...vals) {
11
- __publicField(this, "first");
12
- __publicField(this, "last");
13
- if (vals.length === 0)
14
- return;
15
- vals.forEach((val) => this.push(val));
16
- }
17
- push(value) {
18
- const nextLast = { value };
19
- if (this.last === void 0) {
20
- this.last = nextLast;
21
- this.first = this.last;
22
- } else {
23
- this.last.next = nextLast;
24
- this.last = nextLast;
25
- }
26
- }
27
- pop() {
28
- const result = this.first?.value;
29
- if (this.first) {
30
- this.first = this.first.next;
31
- if (!this.first) {
32
- this.last = void 0;
33
- }
34
- }
35
- return result;
36
- }
37
- peek() {
38
- return this.first?.value;
39
- }
40
- };
41
-
42
- // src/types.ts
43
- var OUT = ">>";
44
- var IN = "<<";
45
-
46
- // src/logs-provider.ts
47
- var rawLogsToLogs = (rawLogs) => {
4
+ const rawLogsToLogs = (rawLogs) => {
48
5
  const result = /* @__PURE__ */ new Map();
49
6
  let prevDate = "";
50
7
  let tick = -1;
@@ -66,13 +23,13 @@ var rawLogsToLogs = (rawLogs) => {
66
23
  }
67
24
  return result;
68
25
  };
69
- var extractTx = (msg) => {
26
+ const extractTx = (msg) => {
70
27
  const startTxt = 'TaggedTransactionQueue_validate_transaction","';
71
28
  const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
72
29
  const end = msg.indexOf(`"`, start + 1);
73
30
  return msg.substring(start, end - 64);
74
31
  };
75
- var logsProvider = (rawLogs) => {
32
+ const logsProvider = (rawLogs) => {
76
33
  let nextClientId = 1;
77
34
  const allLogs = rawLogsToLogs(
78
35
  rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
@@ -84,8 +41,7 @@ var logsProvider = (rawLogs) => {
84
41
  let idx = 0;
85
42
  let transactions = /* @__PURE__ */ new Map();
86
43
  const checkForIncommingMessages = async () => {
87
- if (!pending.peek())
88
- return;
44
+ if (!pending.peek()) return;
89
45
  while (idx < logs.length && token !== void 0) {
90
46
  const expected = logs[idx];
91
47
  transactions.forEach((value, key) => {
@@ -130,37 +86,5 @@ var logsProvider = (rawLogs) => {
130
86
  };
131
87
  };
132
88
 
133
- // src/with-logs-recorder.ts
134
- var withLogsRecorder = (persistLog, input) => {
135
- let nextId = 1;
136
- let token;
137
- let tickDate = "";
138
- const setTickDate = () => {
139
- tickDate = (/* @__PURE__ */ new Date()).toISOString();
140
- token = setTimeout(setTickDate, 0);
141
- };
142
- return (onMsg) => {
143
- const clientId = nextId++;
144
- setTickDate();
145
- const result = input((msg) => {
146
- persistLog(`${clientId}-${tickDate}-${IN}-${msg}`);
147
- onMsg(msg);
148
- });
149
- return {
150
- ...result,
151
- send: (msg) => {
152
- persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`);
153
- result.send(msg);
154
- },
155
- disconnect() {
156
- clearTimeout(token);
157
- result.disconnect();
158
- }
159
- };
160
- };
161
- };
162
- export {
163
- logsProvider,
164
- withLogsRecorder
165
- };
166
- //# sourceMappingURL=index.mjs.map
89
+ export { logsProvider };
90
+ //# sourceMappingURL=logs-provider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs-provider.mjs","sources":["../../src/logs-provider.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport Queue from \"./queue\"\nimport { In, OUT, Out } from \"./types\"\n\ninterface Log {\n clientId: number\n type: In | Out\n msg: string\n tick: number\n}\n\nconst rawLogsToLogs = (rawLogs: string[]): Map<number, Log[]> => {\n const result = new Map<number, Log[]>()\n let prevDate = \"\"\n let tick = -1\n\n for (let i = 0; i < rawLogs.length; i++) {\n const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(\n /^(\\d*)-(.{24})-(.{2})-(.*)$/,\n )!\n const clientId = Number(clientIdRaw)\n\n tick += dateRaw === prevDate ? 0 : 1\n prevDate = dateRaw\n\n const logs = result.get(clientId) ?? []\n result.set(clientId, logs)\n\n logs.push({\n clientId,\n tick,\n type: type as any,\n msg,\n })\n }\n\n return result\n}\n\nconst extractTx = (msg: string) => {\n const startTxt = 'TaggedTransactionQueue_validate_transaction\",\"'\n const start = msg.lastIndexOf(startTxt) + startTxt.length + 4\n const end = msg.indexOf(`\"`, start + 1)\n return msg.substring(start, end - 64)\n}\n\nexport const logsProvider = (rawLogs: Array<string>): JsonRpcProvider => {\n let nextClientId = 1\n const allLogs = rawLogsToLogs(\n rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1),\n )\n\n return (onMsg) => {\n const clientId = nextClientId++\n const logs = allLogs.get(clientId)!\n const pending = new Queue<string>()\n let idx = 0\n\n let transactions = new Map<string, string>()\n const checkForIncommingMessages = async () => {\n if (!pending.peek()) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n\n const received = pending.pop()\n\n if (\n expected.msg.includes(\n \"TaggedTransactionQueue_validate_transaction\",\n ) &&\n received?.includes(\"TaggedTransactionQueue_validate_transaction\")\n ) {\n transactions.set(extractTx(expected.msg), extractTx(received))\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n }\n\n if (received !== expected.msg) {\n console.log(`recieved: \"${received}\"`)\n console.log(`expected: \"${expected.msg}\"`)\n throw new Error(\"unexpected messaged was received\")\n }\n } else {\n onMsg(expected.msg)\n await Promise.resolve()\n }\n idx++\n }\n }\n\n let token: undefined | number = setTimeout(checkForIncommingMessages, 200)\n\n return {\n send: (msg) => {\n pending.push(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n token = undefined\n },\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
+ class Queue {
5
+ constructor(...vals) {
6
+ __publicField(this, "first");
7
+ __publicField(this, "last");
8
+ if (vals.length === 0) return;
9
+ vals.forEach((val) => this.push(val));
10
+ }
11
+ push(value) {
12
+ const nextLast = { value };
13
+ if (this.last === void 0) {
14
+ this.last = nextLast;
15
+ this.first = this.last;
16
+ } else {
17
+ this.last.next = nextLast;
18
+ this.last = nextLast;
19
+ }
20
+ }
21
+ pop() {
22
+ const result = this.first?.value;
23
+ if (this.first) {
24
+ this.first = this.first.next;
25
+ if (!this.first) {
26
+ this.last = void 0;
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ peek() {
32
+ return this.first?.value;
33
+ }
34
+ }
35
+
36
+ export { Queue as default };
37
+ //# sourceMappingURL=queue.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.mjs","sources":["../../src/queue.ts"],"sourcesContent":["interface QueueNode<T> {\n value: T\n next?: QueueNode<T>\n}\n\nexport default class Queue<T> {\n private first?: QueueNode<T>\n private last?: QueueNode<T>\n\n constructor(...vals: T[]) {\n if (vals.length === 0) return\n vals.forEach((val) => this.push(val))\n }\n\n push(value: T) {\n const nextLast: QueueNode<T> = { value }\n if (this.last === undefined) {\n this.last = nextLast\n this.first = this.last\n } else {\n this.last.next = nextLast\n this.last = nextLast\n }\n }\n\n pop() {\n const result = this.first?.value\n if (this.first) {\n this.first = this.first.next\n if (!this.first) {\n this.last = undefined\n }\n }\n return result\n }\n\n peek() {\n return this.first?.value\n }\n}\n"],"names":[],"mappings":";;;AAKA,MAAqB,KAAS,CAAA;AAAA,EAI5B,eAAe,IAAW,EAAA;AAH1B,IAAQ,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AACR,IAAQ,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAGN,IAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA,OAAA;AACvB,IAAA,IAAA,CAAK,QAAQ,CAAC,GAAA,KAAQ,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,GACtC;AAAA,EAEA,KAAK,KAAU,EAAA;AACb,IAAM,MAAA,QAAA,GAAyB,EAAE,KAAM,EAAA,CAAA;AACvC,IAAI,IAAA,IAAA,CAAK,SAAS,KAAW,CAAA,EAAA;AAC3B,MAAA,IAAA,CAAK,IAAO,GAAA,QAAA,CAAA;AACZ,MAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,IAAA,CAAA;AAAA,KACb,MAAA;AACL,MAAA,IAAA,CAAK,KAAK,IAAO,GAAA,QAAA,CAAA;AACjB,MAAA,IAAA,CAAK,IAAO,GAAA,QAAA,CAAA;AAAA,KACd;AAAA,GACF;AAAA,EAEA,GAAM,GAAA;AACJ,IAAM,MAAA,MAAA,GAAS,KAAK,KAAO,EAAA,KAAA,CAAA;AAC3B,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAK,IAAA,CAAA,KAAA,GAAQ,KAAK,KAAM,CAAA,IAAA,CAAA;AACxB,MAAI,IAAA,CAAC,KAAK,KAAO,EAAA;AACf,QAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAAA,OACd;AAAA,KACF;AACA,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAO,GAAA;AACL,IAAA,OAAO,KAAK,KAAO,EAAA,KAAA,CAAA;AAAA,GACrB;AACF;;;;"}
@@ -0,0 +1,5 @@
1
+ const OUT = ">>";
2
+ const IN = "<<";
3
+
4
+ export { IN, OUT };
5
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sources":["../../src/types.ts"],"sourcesContent":["export type Out = \">>\"\nexport const OUT: Out = \">>\"\n\nexport type In = \"<<\"\nexport const IN: In = \"<<\"\n"],"names":[],"mappings":"AACO,MAAM,GAAW,GAAA,KAAA;AAGjB,MAAM,EAAS,GAAA;;;;"}
@@ -0,0 +1,33 @@
1
+ import { IN, OUT } from './types.mjs';
2
+
3
+ const withLogsRecorder = (persistLog, input) => {
4
+ let nextId = 1;
5
+ let token;
6
+ let tickDate = "";
7
+ const setTickDate = () => {
8
+ tickDate = (/* @__PURE__ */ new Date()).toISOString();
9
+ token = setTimeout(setTickDate, 0);
10
+ };
11
+ return (onMsg) => {
12
+ const clientId = nextId++;
13
+ setTickDate();
14
+ const result = input((msg) => {
15
+ persistLog(`${clientId}-${tickDate}-${IN}-${msg}`);
16
+ onMsg(msg);
17
+ });
18
+ return {
19
+ ...result,
20
+ send: (msg) => {
21
+ persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`);
22
+ result.send(msg);
23
+ },
24
+ disconnect() {
25
+ clearTimeout(token);
26
+ result.disconnect();
27
+ }
28
+ };
29
+ };
30
+ };
31
+
32
+ export { withLogsRecorder };
33
+ //# sourceMappingURL=with-logs-recorder.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-logs-recorder.mjs","sources":["../../src/with-logs-recorder.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { IN, OUT } from \"./types\"\n\nexport const withLogsRecorder = (\n persistLog: (log: string) => void,\n input: JsonRpcProvider,\n): JsonRpcProvider => {\n let nextId = 1\n let token: any\n let tickDate = \"\"\n const setTickDate = () => {\n tickDate = new Date().toISOString()\n token = setTimeout(setTickDate, 0)\n }\n\n return (onMsg) => {\n const clientId = nextId++\n\n setTickDate()\n\n const result = input((msg) => {\n persistLog(`${clientId}-${tickDate}-${IN}-${msg}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"names":[],"mappings":";;AAGa,MAAA,gBAAA,GAAmB,CAC9B,UAAA,EACA,KACoB,KAAA;AACpB,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AACb,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,IAAI,QAAW,GAAA,EAAA,CAAA;AACf,EAAA,MAAM,cAAc,MAAM;AACxB,IAAW,QAAA,GAAA,iBAAA,IAAI,IAAK,EAAA,EAAE,WAAY,EAAA,CAAA;AAClC,IAAQ,KAAA,GAAA,UAAA,CAAW,aAAa,CAAC,CAAA,CAAA;AAAA,GACnC,CAAA;AAEA,EAAA,OAAO,CAAC,KAAU,KAAA;AAChB,IAAA,MAAM,QAAW,GAAA,MAAA,EAAA,CAAA;AAEjB,IAAY,WAAA,EAAA,CAAA;AAEZ,IAAM,MAAA,MAAA,GAAS,KAAM,CAAA,CAAC,GAAQ,KAAA;AAC5B,MAAW,UAAA,CAAA,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,QAAQ,IAAI,EAAE,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,CAAA,CAAA;AACjD,MAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,KACV,CAAA,CAAA;AAED,IAAO,OAAA;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,CAAC,GAAQ,KAAA;AACb,QAAW,UAAA,CAAA,CAAA,EAAG,QAAQ,CAAI,CAAA,EAAA,QAAQ,IAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,CAAA,CAAA;AAClD,QAAA,MAAA,CAAO,KAAK,GAAG,CAAA,CAAA;AAAA,OACjB;AAAA,MACA,UAAa,GAAA;AACX,QAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAClB,QAAA,MAAA,CAAO,UAAW,EAAA,CAAA;AAAA,OACpB;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AACF;;;;"}
package/dist/index.js CHANGED
@@ -1,42 +1,13 @@
1
- "use strict";
1
+ 'use strict';
2
+
2
3
  var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var __publicField = (obj, key, value) => {
21
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
- return value;
23
- };
24
-
25
- // src/index.ts
26
- var src_exports = {};
27
- __export(src_exports, {
28
- logsProvider: () => logsProvider,
29
- withLogsRecorder: () => withLogsRecorder
30
- });
31
- module.exports = __toCommonJS(src_exports);
32
-
33
- // src/queue.ts
34
- var Queue = class {
5
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
+ class Queue {
35
7
  constructor(...vals) {
36
8
  __publicField(this, "first");
37
9
  __publicField(this, "last");
38
- if (vals.length === 0)
39
- return;
10
+ if (vals.length === 0) return;
40
11
  vals.forEach((val) => this.push(val));
41
12
  }
42
13
  push(value) {
@@ -62,14 +33,12 @@ var Queue = class {
62
33
  peek() {
63
34
  return this.first?.value;
64
35
  }
65
- };
36
+ }
66
37
 
67
- // src/types.ts
68
- var OUT = ">>";
69
- var IN = "<<";
38
+ const OUT = ">>";
39
+ const IN = "<<";
70
40
 
71
- // src/logs-provider.ts
72
- var rawLogsToLogs = (rawLogs) => {
41
+ const rawLogsToLogs = (rawLogs) => {
73
42
  const result = /* @__PURE__ */ new Map();
74
43
  let prevDate = "";
75
44
  let tick = -1;
@@ -91,13 +60,13 @@ var rawLogsToLogs = (rawLogs) => {
91
60
  }
92
61
  return result;
93
62
  };
94
- var extractTx = (msg) => {
63
+ const extractTx = (msg) => {
95
64
  const startTxt = 'TaggedTransactionQueue_validate_transaction","';
96
65
  const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
97
66
  const end = msg.indexOf(`"`, start + 1);
98
67
  return msg.substring(start, end - 64);
99
68
  };
100
- var logsProvider = (rawLogs) => {
69
+ const logsProvider = (rawLogs) => {
101
70
  let nextClientId = 1;
102
71
  const allLogs = rawLogsToLogs(
103
72
  rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
@@ -109,8 +78,7 @@ var logsProvider = (rawLogs) => {
109
78
  let idx = 0;
110
79
  let transactions = /* @__PURE__ */ new Map();
111
80
  const checkForIncommingMessages = async () => {
112
- if (!pending.peek())
113
- return;
81
+ if (!pending.peek()) return;
114
82
  while (idx < logs.length && token !== void 0) {
115
83
  const expected = logs[idx];
116
84
  transactions.forEach((value, key) => {
@@ -155,8 +123,7 @@ var logsProvider = (rawLogs) => {
155
123
  };
156
124
  };
157
125
 
158
- // src/with-logs-recorder.ts
159
- var withLogsRecorder = (persistLog, input) => {
126
+ const withLogsRecorder = (persistLog, input) => {
160
127
  let nextId = 1;
161
128
  let token;
162
129
  let tickDate = "";
@@ -184,4 +151,7 @@ var withLogsRecorder = (persistLog, input) => {
184
151
  };
185
152
  };
186
153
  };
187
- //# sourceMappingURL=index.js.map
154
+
155
+ exports.logsProvider = logsProvider;
156
+ exports.withLogsRecorder = withLogsRecorder;
157
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/queue.ts","../src/types.ts","../src/logs-provider.ts","../src/with-logs-recorder.ts"],"sourcesContent":["export * from \"./logs-provider\"\nexport * from \"./with-logs-recorder\"\n","interface QueueNode<T> {\n value: T\n next?: QueueNode<T>\n}\n\nexport default class Queue<T> {\n private first?: QueueNode<T>\n private last?: QueueNode<T>\n\n constructor(...vals: T[]) {\n if (vals.length === 0) return\n vals.forEach((val) => this.push(val))\n }\n\n push(value: T) {\n const nextLast: QueueNode<T> = { value }\n if (this.last === undefined) {\n this.last = nextLast\n this.first = this.last\n } else {\n this.last.next = nextLast\n this.last = nextLast\n }\n }\n\n pop() {\n const result = this.first?.value\n if (this.first) {\n this.first = this.first.next\n if (!this.first) {\n this.last = undefined\n }\n }\n return result\n }\n\n peek() {\n return this.first?.value\n }\n}\n","export type Out = \">>\"\nexport const OUT: Out = \">>\"\n\nexport type In = \"<<\"\nexport const IN: In = \"<<\"\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport Queue from \"./queue\"\nimport { In, OUT, Out } from \"./types\"\n\ninterface Log {\n clientId: number\n type: In | Out\n msg: string\n tick: number\n}\n\nconst rawLogsToLogs = (rawLogs: string[]): Map<number, Log[]> => {\n const result = new Map<number, Log[]>()\n let prevDate = \"\"\n let tick = -1\n\n for (let i = 0; i < rawLogs.length; i++) {\n const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(\n /^(\\d*)-(.{24})-(.{2})-(.*)$/,\n )!\n const clientId = Number(clientIdRaw)\n\n tick += dateRaw === prevDate ? 0 : 1\n prevDate = dateRaw\n\n const logs = result.get(clientId) ?? []\n result.set(clientId, logs)\n\n logs.push({\n clientId,\n tick,\n type: type as any,\n msg,\n })\n }\n\n return result\n}\n\nconst extractTx = (msg: string) => {\n const startTxt = 'TaggedTransactionQueue_validate_transaction\",\"'\n const start = msg.lastIndexOf(startTxt) + startTxt.length + 4\n const end = msg.indexOf(`\"`, start + 1)\n return msg.substring(start, end - 64)\n}\n\nexport const logsProvider = (rawLogs: Array<string>): JsonRpcProvider => {\n let nextClientId = 1\n const allLogs = rawLogsToLogs(\n rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1),\n )\n\n return (onMsg) => {\n const clientId = nextClientId++\n const logs = allLogs.get(clientId)!\n const pending = new Queue<string>()\n let idx = 0\n\n let transactions = new Map<string, string>()\n const checkForIncommingMessages = async () => {\n if (!pending.peek()) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n\n const received = pending.pop()\n\n if (\n expected.msg.includes(\n \"TaggedTransactionQueue_validate_transaction\",\n ) &&\n received?.includes(\"TaggedTransactionQueue_validate_transaction\")\n ) {\n transactions.set(extractTx(expected.msg), extractTx(received))\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n }\n\n if (received !== expected.msg) {\n console.log(`recieved: \"${received}\"`)\n console.log(`expected: \"${expected.msg}\"`)\n throw new Error(\"unexpected messaged was received\")\n }\n } else {\n onMsg(expected.msg)\n await Promise.resolve()\n }\n idx++\n }\n }\n\n let token: undefined | number = setTimeout(checkForIncommingMessages, 200)\n\n return {\n send: (msg) => {\n pending.push(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n token = undefined\n },\n }\n }\n}\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { IN, OUT } from \"./types\"\n\nexport const withLogsRecorder = (\n persistLog: (log: string) => void,\n input: JsonRpcProvider,\n): JsonRpcProvider => {\n let nextId = 1\n let token: any\n let tickDate = \"\"\n const setTickDate = () => {\n tickDate = new Date().toISOString()\n token = setTimeout(setTickDate, 0)\n }\n\n return (onMsg) => {\n const clientId = nextId++\n\n setTickDate()\n\n const result = input((msg) => {\n persistLog(`${clientId}-${tickDate}-${IN}-${msg}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"index.js","sources":["../src/queue.ts","../src/types.ts","../src/logs-provider.ts","../src/with-logs-recorder.ts"],"sourcesContent":["interface QueueNode<T> {\n value: T\n next?: QueueNode<T>\n}\n\nexport default class Queue<T> {\n private first?: QueueNode<T>\n private last?: QueueNode<T>\n\n constructor(...vals: T[]) {\n if (vals.length === 0) return\n vals.forEach((val) => this.push(val))\n }\n\n push(value: T) {\n const nextLast: QueueNode<T> = { value }\n if (this.last === undefined) {\n this.last = nextLast\n this.first = this.last\n } else {\n this.last.next = nextLast\n this.last = nextLast\n }\n }\n\n pop() {\n const result = this.first?.value\n if (this.first) {\n this.first = this.first.next\n if (!this.first) {\n this.last = undefined\n }\n }\n return result\n }\n\n peek() {\n return this.first?.value\n }\n}\n","export type Out = \">>\"\nexport const OUT: Out = \">>\"\n\nexport type In = \"<<\"\nexport const IN: In = \"<<\"\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport Queue from \"./queue\"\nimport { In, OUT, Out } from \"./types\"\n\ninterface Log {\n clientId: number\n type: In | Out\n msg: string\n tick: number\n}\n\nconst rawLogsToLogs = (rawLogs: string[]): Map<number, Log[]> => {\n const result = new Map<number, Log[]>()\n let prevDate = \"\"\n let tick = -1\n\n for (let i = 0; i < rawLogs.length; i++) {\n const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(\n /^(\\d*)-(.{24})-(.{2})-(.*)$/,\n )!\n const clientId = Number(clientIdRaw)\n\n tick += dateRaw === prevDate ? 0 : 1\n prevDate = dateRaw\n\n const logs = result.get(clientId) ?? []\n result.set(clientId, logs)\n\n logs.push({\n clientId,\n tick,\n type: type as any,\n msg,\n })\n }\n\n return result\n}\n\nconst extractTx = (msg: string) => {\n const startTxt = 'TaggedTransactionQueue_validate_transaction\",\"'\n const start = msg.lastIndexOf(startTxt) + startTxt.length + 4\n const end = msg.indexOf(`\"`, start + 1)\n return msg.substring(start, end - 64)\n}\n\nexport const logsProvider = (rawLogs: Array<string>): JsonRpcProvider => {\n let nextClientId = 1\n const allLogs = rawLogsToLogs(\n rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1),\n )\n\n return (onMsg) => {\n const clientId = nextClientId++\n const logs = allLogs.get(clientId)!\n const pending = new Queue<string>()\n let idx = 0\n\n let transactions = new Map<string, string>()\n const checkForIncommingMessages = async () => {\n if (!pending.peek()) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n\n const received = pending.pop()\n\n if (\n expected.msg.includes(\n \"TaggedTransactionQueue_validate_transaction\",\n ) &&\n received?.includes(\"TaggedTransactionQueue_validate_transaction\")\n ) {\n transactions.set(extractTx(expected.msg), extractTx(received))\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n }\n\n if (received !== expected.msg) {\n console.log(`recieved: \"${received}\"`)\n console.log(`expected: \"${expected.msg}\"`)\n throw new Error(\"unexpected messaged was received\")\n }\n } else {\n onMsg(expected.msg)\n await Promise.resolve()\n }\n idx++\n }\n }\n\n let token: undefined | number = setTimeout(checkForIncommingMessages, 200)\n\n return {\n send: (msg) => {\n pending.push(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n token = undefined\n },\n }\n }\n}\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { IN, OUT } from \"./types\"\n\nexport const withLogsRecorder = (\n persistLog: (log: string) => void,\n input: JsonRpcProvider,\n): JsonRpcProvider => {\n let nextId = 1\n let token: any\n let tickDate = \"\"\n const setTickDate = () => {\n tickDate = new Date().toISOString()\n token = setTimeout(setTickDate, 0)\n }\n\n return (onMsg) => {\n const clientId = nextId++\n\n setTickDate()\n\n const result = input((msg) => {\n persistLog(`${clientId}-${tickDate}-${IN}-${msg}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkadot-api/logs-provider",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,42 +12,36 @@
12
12
  ".": {
13
13
  "node": {
14
14
  "production": {
15
- "import": "./dist/index.mjs",
15
+ "import": "./dist/esm/index.mjs",
16
16
  "require": "./dist/min/index.js",
17
17
  "default": "./dist/index.js"
18
18
  },
19
- "import": "./dist/index.mjs",
19
+ "import": "./dist/esm/index.mjs",
20
20
  "require": "./dist/index.js",
21
21
  "default": "./dist/index.js"
22
22
  },
23
- "module": "./dist/index.mjs",
24
- "import": "./dist/index.mjs",
23
+ "module": "./dist/esm/index.mjs",
24
+ "import": "./dist/esm/index.mjs",
25
25
  "require": "./dist/index.js",
26
26
  "default": "./dist/index.js"
27
27
  },
28
28
  "./package.json": "./package.json"
29
29
  },
30
30
  "main": "./dist/index.js",
31
- "module": "./dist/index.mjs",
32
- "browser": "./dist/index.mjs",
31
+ "module": "./dist/esm/index.mjs",
32
+ "browser": "./dist/esm/index.mjs",
33
33
  "types": "./dist/index.d.ts",
34
34
  "files": [
35
35
  "dist"
36
36
  ],
37
- "prettier": {
38
- "printWidth": 80,
39
- "semi": false,
40
- "trailingComma": "all"
41
- },
42
37
  "dependencies": {
43
- "@polkadot-api/json-rpc-provider": "0.0.1",
44
- "@polkadot-api/json-rpc-provider-proxy": "0.0.1"
38
+ "@polkadot-api/json-rpc-provider": "0.0.2"
45
39
  },
46
40
  "devDependencies": {
47
- "@polkadot-api/json-rpc-provider": "0.0.1"
41
+ "@polkadot-api/json-rpc-provider": "0.0.2"
48
42
  },
49
43
  "scripts": {
50
- "build": "tsc --noEmit && tsup-node src/index.ts --clean --sourcemap --platform neutral --target=es2020 --format esm,cjs --dts && tsup-node src/index.ts --clean --sourcemap --platform neutral --target=es2020 --format cjs --dts --minify --out-dir dist/min",
44
+ "build": "tsc --noEmit && rollup -c ../../../rollup.config.js",
51
45
  "test": "echo 'no tests'",
52
46
  "lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
53
47
  "format": "prettier --write README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\""
package/dist/index.d.mts DELETED
@@ -1,7 +0,0 @@
1
- import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
2
-
3
- declare const logsProvider: (rawLogs: Array<string>) => JsonRpcProvider;
4
-
5
- declare const withLogsRecorder: (persistLog: (log: string) => void, input: JsonRpcProvider) => JsonRpcProvider;
6
-
7
- export { logsProvider, withLogsRecorder };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/queue.ts","../src/types.ts","../src/logs-provider.ts","../src/with-logs-recorder.ts"],"sourcesContent":["interface QueueNode<T> {\n value: T\n next?: QueueNode<T>\n}\n\nexport default class Queue<T> {\n private first?: QueueNode<T>\n private last?: QueueNode<T>\n\n constructor(...vals: T[]) {\n if (vals.length === 0) return\n vals.forEach((val) => this.push(val))\n }\n\n push(value: T) {\n const nextLast: QueueNode<T> = { value }\n if (this.last === undefined) {\n this.last = nextLast\n this.first = this.last\n } else {\n this.last.next = nextLast\n this.last = nextLast\n }\n }\n\n pop() {\n const result = this.first?.value\n if (this.first) {\n this.first = this.first.next\n if (!this.first) {\n this.last = undefined\n }\n }\n return result\n }\n\n peek() {\n return this.first?.value\n }\n}\n","export type Out = \">>\"\nexport const OUT: Out = \">>\"\n\nexport type In = \"<<\"\nexport const IN: In = \"<<\"\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport Queue from \"./queue\"\nimport { In, OUT, Out } from \"./types\"\n\ninterface Log {\n clientId: number\n type: In | Out\n msg: string\n tick: number\n}\n\nconst rawLogsToLogs = (rawLogs: string[]): Map<number, Log[]> => {\n const result = new Map<number, Log[]>()\n let prevDate = \"\"\n let tick = -1\n\n for (let i = 0; i < rawLogs.length; i++) {\n const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(\n /^(\\d*)-(.{24})-(.{2})-(.*)$/,\n )!\n const clientId = Number(clientIdRaw)\n\n tick += dateRaw === prevDate ? 0 : 1\n prevDate = dateRaw\n\n const logs = result.get(clientId) ?? []\n result.set(clientId, logs)\n\n logs.push({\n clientId,\n tick,\n type: type as any,\n msg,\n })\n }\n\n return result\n}\n\nconst extractTx = (msg: string) => {\n const startTxt = 'TaggedTransactionQueue_validate_transaction\",\"'\n const start = msg.lastIndexOf(startTxt) + startTxt.length + 4\n const end = msg.indexOf(`\"`, start + 1)\n return msg.substring(start, end - 64)\n}\n\nexport const logsProvider = (rawLogs: Array<string>): JsonRpcProvider => {\n let nextClientId = 1\n const allLogs = rawLogsToLogs(\n rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1),\n )\n\n return (onMsg) => {\n const clientId = nextClientId++\n const logs = allLogs.get(clientId)!\n const pending = new Queue<string>()\n let idx = 0\n\n let transactions = new Map<string, string>()\n const checkForIncommingMessages = async () => {\n if (!pending.peek()) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n\n const received = pending.pop()\n\n if (\n expected.msg.includes(\n \"TaggedTransactionQueue_validate_transaction\",\n ) &&\n received?.includes(\"TaggedTransactionQueue_validate_transaction\")\n ) {\n transactions.set(extractTx(expected.msg), extractTx(received))\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n }\n\n if (received !== expected.msg) {\n console.log(`recieved: \"${received}\"`)\n console.log(`expected: \"${expected.msg}\"`)\n throw new Error(\"unexpected messaged was received\")\n }\n } else {\n onMsg(expected.msg)\n await Promise.resolve()\n }\n idx++\n }\n }\n\n let token: undefined | number = setTimeout(checkForIncommingMessages, 200)\n\n return {\n send: (msg) => {\n pending.push(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n token = undefined\n },\n }\n }\n}\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { IN, OUT } from \"./types\"\n\nexport const withLogsRecorder = (\n persistLog: (log: string) => void,\n input: JsonRpcProvider,\n): JsonRpcProvider => {\n let nextId = 1\n let token: any\n let tickDate = \"\"\n const setTickDate = () => {\n tickDate = new Date().toISOString()\n token = setTimeout(setTickDate, 0)\n }\n\n return (onMsg) => {\n const clientId = nextId++\n\n setTickDate()\n\n const result = input((msg) => {\n persistLog(`${clientId}-${tickDate}-${IN}-${msg}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"mappings":";;;;;;;;AAKA,IAAqB,QAArB,MAA8B;AAAA,EAI5B,eAAe,MAAW;AAH1B,wBAAQ;AACR,wBAAQ;AAGN,QAAI,KAAK,WAAW;AAAG;AACvB,SAAK,QAAQ,CAAC,QAAQ,KAAK,KAAK,GAAG,CAAC;AAAA,EACtC;AAAA,EAEA,KAAK,OAAU;AACb,UAAM,WAAyB,EAAE,MAAM;AACvC,QAAI,KAAK,SAAS,QAAW;AAC3B,WAAK,OAAO;AACZ,WAAK,QAAQ,KAAK;AAAA,IACpB,OAAO;AACL,WAAK,KAAK,OAAO;AACjB,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAM;AACJ,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,KAAK,OAAO;AACd,WAAK,QAAQ,KAAK,MAAM;AACxB,UAAI,CAAC,KAAK,OAAO;AACf,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO;AACL,WAAO,KAAK,OAAO;AAAA,EACrB;AACF;;;ACtCO,IAAM,MAAW;AAGjB,IAAM,KAAS;;;ACOtB,IAAM,gBAAgB,CAAC,YAA0C;AAC/D,QAAM,SAAS,oBAAI,IAAmB;AACtC,MAAI,WAAW;AACf,MAAI,OAAO;AAEX,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,CAAC,EAAE,aAAa,SAAS,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE;AAAA,MACrD;AAAA,IACF;AACA,UAAM,WAAW,OAAO,WAAW;AAEnC,YAAQ,YAAY,WAAW,IAAI;AACnC,eAAW;AAEX,UAAM,OAAO,OAAO,IAAI,QAAQ,KAAK,CAAC;AACtC,WAAO,IAAI,UAAU,IAAI;AAEzB,SAAK,KAAK;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,IAAM,YAAY,CAAC,QAAgB;AACjC,QAAM,WAAW;AACjB,QAAM,QAAQ,IAAI,YAAY,QAAQ,IAAI,SAAS,SAAS;AAC5D,QAAM,MAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC;AACtC,SAAO,IAAI,UAAU,OAAO,MAAM,EAAE;AACtC;AAEO,IAAM,eAAe,CAAC,YAA4C;AACvE,MAAI,eAAe;AACnB,QAAM,UAAU;AAAA,IACd,QAAQ,QAAQ,SAAS,CAAC,IAAI,UAAU,QAAQ,MAAM,GAAG,EAAE;AAAA,EAC7D;AAEA,SAAO,CAAC,UAAU;AAChB,UAAM,WAAW;AACjB,UAAM,OAAO,QAAQ,IAAI,QAAQ;AACjC,UAAM,UAAU,IAAI,MAAc;AAClC,QAAI,MAAM;AAEV,QAAI,eAAe,oBAAI,IAAoB;AAC3C,UAAM,4BAA4B,YAAY;AAC5C,UAAI,CAAC,QAAQ,KAAK;AAAG;AAErB,aAAO,MAAM,KAAK,UAAU,UAAU,QAAW;AAC/C,cAAM,WAAW,KAAK,GAAG;AACzB,qBAAa,QAAQ,CAAC,OAAO,QAAQ;AACnC,mBAAS,MAAM,SAAS,IAAI,QAAQ,KAAK,KAAK;AAAA,QAChD,CAAC;AACD,YAAI,SAAS,SAAS,KAAK;AACzB,cAAI,CAAC,QAAQ,KAAK,GAAG;AACnB,oBAAQ,WAAW,2BAA2B,GAAG;AACjD;AAAA,UACF;AAEA,gBAAM,WAAW,QAAQ,IAAI;AAE7B,cACE,SAAS,IAAI;AAAA,YACX;AAAA,UACF,KACA,UAAU,SAAS,6CAA6C,GAChE;AACA,yBAAa,IAAI,UAAU,SAAS,GAAG,GAAG,UAAU,QAAQ,CAAC;AAC7D,yBAAa,QAAQ,CAAC,OAAO,QAAQ;AACnC,uBAAS,MAAM,SAAS,IAAI,QAAQ,KAAK,KAAK;AAAA,YAChD,CAAC;AAAA,UACH;AAEA,cAAI,aAAa,SAAS,KAAK;AAC7B,oBAAQ,IAAI,cAAc,QAAQ,GAAG;AACrC,oBAAQ,IAAI,cAAc,SAAS,GAAG,GAAG;AACzC,kBAAM,IAAI,MAAM,kCAAkC;AAAA,UACpD;AAAA,QACF,OAAO;AACL,gBAAM,SAAS,GAAG;AAClB,gBAAM,QAAQ,QAAQ;AAAA,QACxB;AACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAA4B,WAAW,2BAA2B,GAAG;AAEzE,WAAO;AAAA,MACL,MAAM,CAAC,QAAQ;AACb,gBAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,MACA,YAAY,MAAM;AAChB,qBAAa,KAAK;AAClB,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;;;AC7GO,IAAM,mBAAmB,CAC9B,YACA,UACoB;AACpB,MAAI,SAAS;AACb,MAAI;AACJ,MAAI,WAAW;AACf,QAAM,cAAc,MAAM;AACxB,gBAAW,oBAAI,KAAK,GAAE,YAAY;AAClC,YAAQ,WAAW,aAAa,CAAC;AAAA,EACnC;AAEA,SAAO,CAAC,UAAU;AAChB,UAAM,WAAW;AAEjB,gBAAY;AAEZ,UAAM,SAAS,MAAM,CAAC,QAAQ;AAC5B,iBAAW,GAAG,QAAQ,IAAI,QAAQ,IAAI,EAAE,IAAI,GAAG,EAAE;AACjD,YAAM,GAAG;AAAA,IACX,CAAC;AAED,WAAO;AAAA,MACL,GAAG;AAAA,MACH,MAAM,CAAC,QAAQ;AACb,mBAAW,GAAG,QAAQ,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG,EAAE;AAClD,eAAO,KAAK,GAAG;AAAA,MACjB;AAAA,MACA,aAAa;AACX,qBAAa,KAAK;AAClB,eAAO,WAAW;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,7 +0,0 @@
1
- import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
2
-
3
- declare const logsProvider: (rawLogs: Array<string>) => JsonRpcProvider;
4
-
5
- declare const withLogsRecorder: (persistLog: (log: string) => void, input: JsonRpcProvider) => JsonRpcProvider;
6
-
7
- export { logsProvider, withLogsRecorder };
package/dist/min/index.js DELETED
@@ -1,2 +0,0 @@
1
- "use strict";var f=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var O=(t,e,n)=>e in t?f(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var w=(t,e)=>{for(var n in e)f(t,n,{get:e[n],enumerable:!0})},b=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of $(e))!y.call(t,s)&&s!==n&&f(t,s,{get:()=>e[s],enumerable:!(r=k(e,s))||r.enumerable});return t};var N=t=>b(f({},"__esModule",{value:!0}),t);var T=(t,e,n)=>(O(t,typeof e!="symbol"?e+"":e,n),n);var _={};w(_,{logsProvider:()=>R,withLogsRecorder:()=>P});module.exports=N(_);var g=class{constructor(...e){T(this,"first");T(this,"last");e.length!==0&&e.forEach(n=>this.push(n))}push(e){let n={value:e};this.last===void 0?(this.last=n,this.first=this.last):(this.last.next=n,this.last=n)}pop(){let e=this.first?.value;return this.first&&(this.first=this.first.next,this.first||(this.last=void 0)),e}peek(){return this.first?.value}};var m=">>",x="<<";var Q=t=>{let e=new Map,n="",r=-1;for(let s=0;s<t.length;s++){let[,l,c,u,a]=t[s].match(/^(\d*)-(.{24})-(.{2})-(.*)$/),o=Number(l);r+=c===n?0:1,n=c;let d=e.get(o)??[];e.set(o,d),d.push({clientId:o,tick:r,type:u,msg:a})}return e},v=t=>{let e='TaggedTransactionQueue_validate_transaction","',n=t.lastIndexOf(e)+e.length+4,r=t.indexOf('"',n+1);return t.substring(n,r-64)},R=t=>{let e=1,n=Q(t[t.length-1]?t:t.slice(0,-1));return r=>{let s=e++,l=n.get(s),c=new g,u=0,a=new Map,o=async()=>{if(c.peek())for(;u<l.length&&d!==void 0;){let i=l[u];if(a.forEach((p,h)=>{i.msg=i.msg.replace(h,p)}),i.type===m){if(!c.peek()){d=setTimeout(o,100);break}let p=c.pop();if(i.msg.includes("TaggedTransactionQueue_validate_transaction")&&p?.includes("TaggedTransactionQueue_validate_transaction")&&(a.set(v(i.msg),v(p)),a.forEach((h,I)=>{i.msg=i.msg.replace(I,h)})),p!==i.msg)throw console.log(`recieved: "${p}"`),console.log(`expected: "${i.msg}"`),new Error("unexpected messaged was received")}else r(i.msg),await Promise.resolve();u++}},d=setTimeout(o,200);return{send:i=>{c.push(i)},disconnect:()=>{clearTimeout(d),d=void 0}}}};var P=(t,e)=>{let n=1,r,s="",l=()=>{s=new Date().toISOString(),r=setTimeout(l,0)};return c=>{let u=n++;l();let a=e(o=>{t(`${u}-${s}-${x}-${o}`),c(o)});return{...a,send:o=>{t(`${u}-${s}-${m}-${o}`),a.send(o)},disconnect(){clearTimeout(r),a.disconnect()}}}};
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/queue.ts","../../src/types.ts","../../src/logs-provider.ts","../../src/with-logs-recorder.ts"],"sourcesContent":["export * from \"./logs-provider\"\nexport * from \"./with-logs-recorder\"\n","interface QueueNode<T> {\n value: T\n next?: QueueNode<T>\n}\n\nexport default class Queue<T> {\n private first?: QueueNode<T>\n private last?: QueueNode<T>\n\n constructor(...vals: T[]) {\n if (vals.length === 0) return\n vals.forEach((val) => this.push(val))\n }\n\n push(value: T) {\n const nextLast: QueueNode<T> = { value }\n if (this.last === undefined) {\n this.last = nextLast\n this.first = this.last\n } else {\n this.last.next = nextLast\n this.last = nextLast\n }\n }\n\n pop() {\n const result = this.first?.value\n if (this.first) {\n this.first = this.first.next\n if (!this.first) {\n this.last = undefined\n }\n }\n return result\n }\n\n peek() {\n return this.first?.value\n }\n}\n","export type Out = \">>\"\nexport const OUT: Out = \">>\"\n\nexport type In = \"<<\"\nexport const IN: In = \"<<\"\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport Queue from \"./queue\"\nimport { In, OUT, Out } from \"./types\"\n\ninterface Log {\n clientId: number\n type: In | Out\n msg: string\n tick: number\n}\n\nconst rawLogsToLogs = (rawLogs: string[]): Map<number, Log[]> => {\n const result = new Map<number, Log[]>()\n let prevDate = \"\"\n let tick = -1\n\n for (let i = 0; i < rawLogs.length; i++) {\n const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(\n /^(\\d*)-(.{24})-(.{2})-(.*)$/,\n )!\n const clientId = Number(clientIdRaw)\n\n tick += dateRaw === prevDate ? 0 : 1\n prevDate = dateRaw\n\n const logs = result.get(clientId) ?? []\n result.set(clientId, logs)\n\n logs.push({\n clientId,\n tick,\n type: type as any,\n msg,\n })\n }\n\n return result\n}\n\nconst extractTx = (msg: string) => {\n const startTxt = 'TaggedTransactionQueue_validate_transaction\",\"'\n const start = msg.lastIndexOf(startTxt) + startTxt.length + 4\n const end = msg.indexOf(`\"`, start + 1)\n return msg.substring(start, end - 64)\n}\n\nexport const logsProvider = (rawLogs: Array<string>): JsonRpcProvider => {\n let nextClientId = 1\n const allLogs = rawLogsToLogs(\n rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1),\n )\n\n return (onMsg) => {\n const clientId = nextClientId++\n const logs = allLogs.get(clientId)!\n const pending = new Queue<string>()\n let idx = 0\n\n let transactions = new Map<string, string>()\n const checkForIncommingMessages = async () => {\n if (!pending.peek()) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n\n const received = pending.pop()\n\n if (\n expected.msg.includes(\n \"TaggedTransactionQueue_validate_transaction\",\n ) &&\n received?.includes(\"TaggedTransactionQueue_validate_transaction\")\n ) {\n transactions.set(extractTx(expected.msg), extractTx(received))\n transactions.forEach((value, key) => {\n expected.msg = expected.msg.replace(key, value)\n })\n }\n\n if (received !== expected.msg) {\n console.log(`recieved: \"${received}\"`)\n console.log(`expected: \"${expected.msg}\"`)\n throw new Error(\"unexpected messaged was received\")\n }\n } else {\n onMsg(expected.msg)\n await Promise.resolve()\n }\n idx++\n }\n }\n\n let token: undefined | number = setTimeout(checkForIncommingMessages, 200)\n\n return {\n send: (msg) => {\n pending.push(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n token = undefined\n },\n }\n }\n}\n","import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { IN, OUT } from \"./types\"\n\nexport const withLogsRecorder = (\n persistLog: (log: string) => void,\n input: JsonRpcProvider,\n): JsonRpcProvider => {\n let nextId = 1\n let token: any\n let tickDate = \"\"\n const setTickDate = () => {\n tickDate = new Date().toISOString()\n token = setTimeout(setTickDate, 0)\n }\n\n return (onMsg) => {\n const clientId = nextId++\n\n setTickDate()\n\n const result = input((msg) => {\n persistLog(`${clientId}-${tickDate}-${IN}-${msg}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"mappings":"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","names":["src_exports","__export","logsProvider","withLogsRecorder","__toCommonJS","Queue","vals","__publicField","val","value","nextLast","result","OUT","IN","rawLogsToLogs","rawLogs","result","prevDate","tick","i","clientIdRaw","dateRaw","type","msg","clientId","logs","extractTx","startTxt","start","end","logsProvider","nextClientId","allLogs","onMsg","pending","Queue","idx","transactions","checkForIncommingMessages","token","expected","value","key","OUT","received","withLogsRecorder","persistLog","input","nextId","token","tickDate","setTickDate","onMsg","clientId","result","msg","IN","OUT"]}