@polkadot-api/logs-provider 0.0.2 → 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.
@@ -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,60 +1,15 @@
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
- let prevDate = "";
50
6
  let tick = -1;
51
7
  for (let i = 0; i < rawLogs.length; i++) {
52
8
  const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(
53
9
  /^(\d*)-(.{24})-(.{2})-(.*)$/
54
10
  );
55
11
  const clientId = Number(clientIdRaw);
56
- tick += dateRaw === prevDate ? 0 : 1;
57
- prevDate = dateRaw;
12
+ tick = new Date(dateRaw).getTime();
58
13
  const logs = result.get(clientId) ?? [];
59
14
  result.set(clientId, logs);
60
15
  logs.push({
@@ -66,13 +21,13 @@ var rawLogsToLogs = (rawLogs) => {
66
21
  }
67
22
  return result;
68
23
  };
69
- var extractTx = (msg) => {
24
+ const extractTx = (msg) => {
70
25
  const startTxt = 'TaggedTransactionQueue_validate_transaction","';
71
26
  const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
72
27
  const end = msg.indexOf(`"`, start + 1);
73
28
  return msg.substring(start, end - 64);
74
29
  };
75
- var logsProvider = (rawLogs) => {
30
+ const logsProvider = (rawLogs) => {
76
31
  let nextClientId = 1;
77
32
  const allLogs = rawLogsToLogs(
78
33
  rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
@@ -84,8 +39,7 @@ var logsProvider = (rawLogs) => {
84
39
  let idx = 0;
85
40
  let transactions = /* @__PURE__ */ new Map();
86
41
  const checkForIncommingMessages = async () => {
87
- if (!pending.peek())
88
- return;
42
+ if (!pending.peek()) return;
89
43
  while (idx < logs.length && token !== void 0) {
90
44
  const expected = logs[idx];
91
45
  transactions.forEach((value, key) => {
@@ -112,7 +66,11 @@ var logsProvider = (rawLogs) => {
112
66
  }
113
67
  } else {
114
68
  onMsg(expected.msg);
115
- await Promise.resolve();
69
+ const nextOne = logs[idx + 1];
70
+ if (nextOne)
71
+ await new Promise(
72
+ (res) => setTimeout(res, nextOne.tick - expected.tick)
73
+ );
116
74
  }
117
75
  idx++;
118
76
  }
@@ -130,37 +88,5 @@ var logsProvider = (rawLogs) => {
130
88
  };
131
89
  };
132
90
 
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
91
+ export { logsProvider };
92
+ //# 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 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 = new Date(dateRaw).getTime()\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 const nextOne = logs[idx + 1]\n if (nextOne)\n await new Promise((res) =>\n setTimeout(res, nextOne.tick - expected.tick),\n )\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,24 +33,20 @@ 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
- let prevDate = "";
75
43
  let tick = -1;
76
44
  for (let i = 0; i < rawLogs.length; i++) {
77
45
  const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(
78
46
  /^(\d*)-(.{24})-(.{2})-(.*)$/
79
47
  );
80
48
  const clientId = Number(clientIdRaw);
81
- tick += dateRaw === prevDate ? 0 : 1;
82
- prevDate = dateRaw;
49
+ tick = new Date(dateRaw).getTime();
83
50
  const logs = result.get(clientId) ?? [];
84
51
  result.set(clientId, logs);
85
52
  logs.push({
@@ -91,13 +58,13 @@ var rawLogsToLogs = (rawLogs) => {
91
58
  }
92
59
  return result;
93
60
  };
94
- var extractTx = (msg) => {
61
+ const extractTx = (msg) => {
95
62
  const startTxt = 'TaggedTransactionQueue_validate_transaction","';
96
63
  const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
97
64
  const end = msg.indexOf(`"`, start + 1);
98
65
  return msg.substring(start, end - 64);
99
66
  };
100
- var logsProvider = (rawLogs) => {
67
+ const logsProvider = (rawLogs) => {
101
68
  let nextClientId = 1;
102
69
  const allLogs = rawLogsToLogs(
103
70
  rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
@@ -109,8 +76,7 @@ var logsProvider = (rawLogs) => {
109
76
  let idx = 0;
110
77
  let transactions = /* @__PURE__ */ new Map();
111
78
  const checkForIncommingMessages = async () => {
112
- if (!pending.peek())
113
- return;
79
+ if (!pending.peek()) return;
114
80
  while (idx < logs.length && token !== void 0) {
115
81
  const expected = logs[idx];
116
82
  transactions.forEach((value, key) => {
@@ -137,7 +103,11 @@ var logsProvider = (rawLogs) => {
137
103
  }
138
104
  } else {
139
105
  onMsg(expected.msg);
140
- await Promise.resolve();
106
+ const nextOne = logs[idx + 1];
107
+ if (nextOne)
108
+ await new Promise(
109
+ (res) => setTimeout(res, nextOne.tick - expected.tick)
110
+ );
141
111
  }
142
112
  idx++;
143
113
  }
@@ -155,8 +125,7 @@ var logsProvider = (rawLogs) => {
155
125
  };
156
126
  };
157
127
 
158
- // src/with-logs-recorder.ts
159
- var withLogsRecorder = (persistLog, input) => {
128
+ const withLogsRecorder = (persistLog, input) => {
160
129
  let nextId = 1;
161
130
  let token;
162
131
  let tickDate = "";
@@ -184,4 +153,7 @@ var withLogsRecorder = (persistLog, input) => {
184
153
  };
185
154
  };
186
155
  };
187
- //# sourceMappingURL=index.js.map
156
+
157
+ exports.logsProvider = logsProvider;
158
+ exports.withLogsRecorder = withLogsRecorder;
159
+ //# 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 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 = new Date(dateRaw).getTime()\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 const nextOne = logs[idx + 1]\n if (nextOne)\n await new Promise((res) =>\n setTimeout(res, nextOne.tick - expected.tick),\n )\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.4",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,42 +12,37 @@
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.3"
45
39
  },
46
40
  "devDependencies": {
47
- "@polkadot-api/json-rpc-provider": "0.0.1"
41
+ "@polkadot-api/json-rpc-provider": "0.0.3"
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-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
45
+ "build": "pnpm build-core",
51
46
  "test": "echo 'no tests'",
52
47
  "lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
53
48
  "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":"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","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"]}