@polkadot-api/logs-provider 0.0.1 → 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.
- package/README.md +19 -0
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/logs-provider.mjs +90 -0
- package/dist/esm/logs-provider.mjs.map +1 -0
- package/dist/esm/queue.mjs +37 -0
- package/dist/esm/queue.mjs.map +1 -0
- package/dist/esm/types.mjs +5 -0
- package/dist/esm/types.mjs.map +1 -0
- package/dist/esm/with-logs-recorder.mjs +33 -0
- package/dist/esm/with-logs-recorder.mjs.map +1 -0
- package/dist/index.js +36 -49
- package/dist/index.js.map +1 -1
- package/package.json +10 -17
- package/dist/index.d.mts +0 -7
- package/dist/index.mjs +0 -149
- package/dist/index.mjs.map +0 -1
- package/dist/min/index.d.ts +0 -7
- package/dist/min/index.js +0 -2
- package/dist/min/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1 +1,20 @@
|
|
|
1
1
|
# @polkadot-api/logs-provider
|
|
2
|
+
|
|
3
|
+
This package exports a `JsonRpcProvider` enhancer to record logs of messages sent & received, and a provider that reads from these logs to replay existing sessions.
|
|
4
|
+
|
|
5
|
+
This can be useful to set up reproduction cases with a provider that behaves consistently.
|
|
6
|
+
|
|
7
|
+
## withLogsRecorder
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
function withLogsRecorder(
|
|
11
|
+
persistLog: (line: string) => void,
|
|
12
|
+
provider: JsonRpcProvider,
|
|
13
|
+
): JsonRpcProvider
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## logsProvider
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
function logsProvider(logs: string[]): JsonRpcProvider
|
|
20
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Queue from './queue.mjs';
|
|
2
|
+
import { OUT } from './types.mjs';
|
|
3
|
+
|
|
4
|
+
const rawLogsToLogs = (rawLogs) => {
|
|
5
|
+
const result = /* @__PURE__ */ new Map();
|
|
6
|
+
let prevDate = "";
|
|
7
|
+
let tick = -1;
|
|
8
|
+
for (let i = 0; i < rawLogs.length; i++) {
|
|
9
|
+
const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(
|
|
10
|
+
/^(\d*)-(.{24})-(.{2})-(.*)$/
|
|
11
|
+
);
|
|
12
|
+
const clientId = Number(clientIdRaw);
|
|
13
|
+
tick += dateRaw === prevDate ? 0 : 1;
|
|
14
|
+
prevDate = dateRaw;
|
|
15
|
+
const logs = result.get(clientId) ?? [];
|
|
16
|
+
result.set(clientId, logs);
|
|
17
|
+
logs.push({
|
|
18
|
+
clientId,
|
|
19
|
+
tick,
|
|
20
|
+
type,
|
|
21
|
+
msg
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
const extractTx = (msg) => {
|
|
27
|
+
const startTxt = 'TaggedTransactionQueue_validate_transaction","';
|
|
28
|
+
const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
|
|
29
|
+
const end = msg.indexOf(`"`, start + 1);
|
|
30
|
+
return msg.substring(start, end - 64);
|
|
31
|
+
};
|
|
32
|
+
const logsProvider = (rawLogs) => {
|
|
33
|
+
let nextClientId = 1;
|
|
34
|
+
const allLogs = rawLogsToLogs(
|
|
35
|
+
rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
|
|
36
|
+
);
|
|
37
|
+
return (onMsg) => {
|
|
38
|
+
const clientId = nextClientId++;
|
|
39
|
+
const logs = allLogs.get(clientId);
|
|
40
|
+
const pending = new Queue();
|
|
41
|
+
let idx = 0;
|
|
42
|
+
let transactions = /* @__PURE__ */ new Map();
|
|
43
|
+
const checkForIncommingMessages = async () => {
|
|
44
|
+
if (!pending.peek()) return;
|
|
45
|
+
while (idx < logs.length && token !== void 0) {
|
|
46
|
+
const expected = logs[idx];
|
|
47
|
+
transactions.forEach((value, key) => {
|
|
48
|
+
expected.msg = expected.msg.replace(key, value);
|
|
49
|
+
});
|
|
50
|
+
if (expected.type === OUT) {
|
|
51
|
+
if (!pending.peek()) {
|
|
52
|
+
token = setTimeout(checkForIncommingMessages, 100);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
const received = pending.pop();
|
|
56
|
+
if (expected.msg.includes(
|
|
57
|
+
"TaggedTransactionQueue_validate_transaction"
|
|
58
|
+
) && received?.includes("TaggedTransactionQueue_validate_transaction")) {
|
|
59
|
+
transactions.set(extractTx(expected.msg), extractTx(received));
|
|
60
|
+
transactions.forEach((value, key) => {
|
|
61
|
+
expected.msg = expected.msg.replace(key, value);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (received !== expected.msg) {
|
|
65
|
+
console.log(`recieved: "${received}"`);
|
|
66
|
+
console.log(`expected: "${expected.msg}"`);
|
|
67
|
+
throw new Error("unexpected messaged was received");
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
onMsg(expected.msg);
|
|
71
|
+
await Promise.resolve();
|
|
72
|
+
}
|
|
73
|
+
idx++;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
let token = setTimeout(checkForIncommingMessages, 200);
|
|
77
|
+
return {
|
|
78
|
+
send: (msg) => {
|
|
79
|
+
pending.push(msg);
|
|
80
|
+
},
|
|
81
|
+
disconnect: () => {
|
|
82
|
+
clearTimeout(token);
|
|
83
|
+
token = void 0;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
|
|
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 @@
|
|
|
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
|
-
|
|
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
|
|
8
|
-
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
var IN = "<<";
|
|
38
|
+
const OUT = ">>";
|
|
39
|
+
const IN = "<<";
|
|
70
40
|
|
|
71
|
-
|
|
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,7 +60,13 @@ var rawLogsToLogs = (rawLogs) => {
|
|
|
91
60
|
}
|
|
92
61
|
return result;
|
|
93
62
|
};
|
|
94
|
-
|
|
63
|
+
const extractTx = (msg) => {
|
|
64
|
+
const startTxt = 'TaggedTransactionQueue_validate_transaction","';
|
|
65
|
+
const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
|
|
66
|
+
const end = msg.indexOf(`"`, start + 1);
|
|
67
|
+
return msg.substring(start, end - 64);
|
|
68
|
+
};
|
|
69
|
+
const logsProvider = (rawLogs) => {
|
|
95
70
|
let nextClientId = 1;
|
|
96
71
|
const allLogs = rawLogsToLogs(
|
|
97
72
|
rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
|
|
@@ -101,21 +76,31 @@ var logsProvider = (rawLogs) => {
|
|
|
101
76
|
const logs = allLogs.get(clientId);
|
|
102
77
|
const pending = new Queue();
|
|
103
78
|
let idx = 0;
|
|
79
|
+
let transactions = /* @__PURE__ */ new Map();
|
|
104
80
|
const checkForIncommingMessages = async () => {
|
|
105
|
-
if (!pending.peek)
|
|
106
|
-
return;
|
|
81
|
+
if (!pending.peek()) return;
|
|
107
82
|
while (idx < logs.length && token !== void 0) {
|
|
108
83
|
const expected = logs[idx];
|
|
84
|
+
transactions.forEach((value, key) => {
|
|
85
|
+
expected.msg = expected.msg.replace(key, value);
|
|
86
|
+
});
|
|
109
87
|
if (expected.type === OUT) {
|
|
110
88
|
if (!pending.peek()) {
|
|
111
89
|
token = setTimeout(checkForIncommingMessages, 100);
|
|
112
90
|
break;
|
|
113
91
|
}
|
|
114
92
|
const received = pending.pop();
|
|
93
|
+
if (expected.msg.includes(
|
|
94
|
+
"TaggedTransactionQueue_validate_transaction"
|
|
95
|
+
) && received?.includes("TaggedTransactionQueue_validate_transaction")) {
|
|
96
|
+
transactions.set(extractTx(expected.msg), extractTx(received));
|
|
97
|
+
transactions.forEach((value, key) => {
|
|
98
|
+
expected.msg = expected.msg.replace(key, value);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
115
101
|
if (received !== expected.msg) {
|
|
116
|
-
console.log(
|
|
117
|
-
console.log(
|
|
118
|
-
console.log("expected: ", expected.msg);
|
|
102
|
+
console.log(`recieved: "${received}"`);
|
|
103
|
+
console.log(`expected: "${expected.msg}"`);
|
|
119
104
|
throw new Error("unexpected messaged was received");
|
|
120
105
|
}
|
|
121
106
|
} else {
|
|
@@ -138,8 +123,7 @@ var logsProvider = (rawLogs) => {
|
|
|
138
123
|
};
|
|
139
124
|
};
|
|
140
125
|
|
|
141
|
-
|
|
142
|
-
var withLogsRecorder = (persistLog, input) => {
|
|
126
|
+
const withLogsRecorder = (persistLog, input) => {
|
|
143
127
|
let nextId = 1;
|
|
144
128
|
let token;
|
|
145
129
|
let tickDate = "";
|
|
@@ -167,4 +151,7 @@ var withLogsRecorder = (persistLog, input) => {
|
|
|
167
151
|
};
|
|
168
152
|
};
|
|
169
153
|
};
|
|
170
|
-
|
|
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\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 const checkForIncommingMessages = async () => {\n if (!pending.peek) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n const received = pending.pop()\n if (received !== expected.msg) {\n console.log(\"recieved: \", received)\n console.log(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.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,43 +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
|
-
"@
|
|
44
|
-
"@polkadot-api/json-rpc-provider-proxy": "0.0.1",
|
|
45
|
-
"@polkadot-api/json-rpc-provider": "0.0.1"
|
|
38
|
+
"@polkadot-api/json-rpc-provider": "0.0.2"
|
|
46
39
|
},
|
|
47
40
|
"devDependencies": {
|
|
48
|
-
"@polkadot-api/json-rpc-provider": "0.0.
|
|
41
|
+
"@polkadot-api/json-rpc-provider": "0.0.2"
|
|
49
42
|
},
|
|
50
43
|
"scripts": {
|
|
51
|
-
"build": "tsc --noEmit &&
|
|
44
|
+
"build": "tsc --noEmit && rollup -c ../../../rollup.config.js",
|
|
52
45
|
"test": "echo 'no tests'",
|
|
53
46
|
"lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
|
|
54
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 };
|
package/dist/index.mjs
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
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
|
-
};
|
|
7
|
-
|
|
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) => {
|
|
48
|
-
const result = /* @__PURE__ */ new Map();
|
|
49
|
-
let prevDate = "";
|
|
50
|
-
let tick = -1;
|
|
51
|
-
for (let i = 0; i < rawLogs.length; i++) {
|
|
52
|
-
const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(
|
|
53
|
-
/^(\d*)-(.{24})-(.{2})-(.*)$/
|
|
54
|
-
);
|
|
55
|
-
const clientId = Number(clientIdRaw);
|
|
56
|
-
tick += dateRaw === prevDate ? 0 : 1;
|
|
57
|
-
prevDate = dateRaw;
|
|
58
|
-
const logs = result.get(clientId) ?? [];
|
|
59
|
-
result.set(clientId, logs);
|
|
60
|
-
logs.push({
|
|
61
|
-
clientId,
|
|
62
|
-
tick,
|
|
63
|
-
type,
|
|
64
|
-
msg
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return result;
|
|
68
|
-
};
|
|
69
|
-
var logsProvider = (rawLogs) => {
|
|
70
|
-
let nextClientId = 1;
|
|
71
|
-
const allLogs = rawLogsToLogs(
|
|
72
|
-
rawLogs[rawLogs.length - 1] ? rawLogs : rawLogs.slice(0, -1)
|
|
73
|
-
);
|
|
74
|
-
return (onMsg) => {
|
|
75
|
-
const clientId = nextClientId++;
|
|
76
|
-
const logs = allLogs.get(clientId);
|
|
77
|
-
const pending = new Queue();
|
|
78
|
-
let idx = 0;
|
|
79
|
-
const checkForIncommingMessages = async () => {
|
|
80
|
-
if (!pending.peek)
|
|
81
|
-
return;
|
|
82
|
-
while (idx < logs.length && token !== void 0) {
|
|
83
|
-
const expected = logs[idx];
|
|
84
|
-
if (expected.type === OUT) {
|
|
85
|
-
if (!pending.peek()) {
|
|
86
|
-
token = setTimeout(checkForIncommingMessages, 100);
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
const received = pending.pop();
|
|
90
|
-
if (received !== expected.msg) {
|
|
91
|
-
console.log("recieved: ", received);
|
|
92
|
-
console.log(received);
|
|
93
|
-
console.log("expected: ", expected.msg);
|
|
94
|
-
throw new Error("unexpected messaged was received");
|
|
95
|
-
}
|
|
96
|
-
} else {
|
|
97
|
-
onMsg(expected.msg);
|
|
98
|
-
await Promise.resolve();
|
|
99
|
-
}
|
|
100
|
-
idx++;
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
let token = setTimeout(checkForIncommingMessages, 200);
|
|
104
|
-
return {
|
|
105
|
-
send: (msg) => {
|
|
106
|
-
pending.push(msg);
|
|
107
|
-
},
|
|
108
|
-
disconnect: () => {
|
|
109
|
-
clearTimeout(token);
|
|
110
|
-
token = void 0;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
// src/with-logs-recorder.ts
|
|
117
|
-
var withLogsRecorder = (persistLog, input) => {
|
|
118
|
-
let nextId = 1;
|
|
119
|
-
let token;
|
|
120
|
-
let tickDate = "";
|
|
121
|
-
const setTickDate = () => {
|
|
122
|
-
tickDate = (/* @__PURE__ */ new Date()).toISOString();
|
|
123
|
-
token = setTimeout(setTickDate, 0);
|
|
124
|
-
};
|
|
125
|
-
return (onMsg) => {
|
|
126
|
-
const clientId = nextId++;
|
|
127
|
-
setTickDate();
|
|
128
|
-
const result = input((msg) => {
|
|
129
|
-
persistLog(`${clientId}-${tickDate}-${IN}-${msg}`);
|
|
130
|
-
onMsg(msg);
|
|
131
|
-
});
|
|
132
|
-
return {
|
|
133
|
-
...result,
|
|
134
|
-
send: (msg) => {
|
|
135
|
-
persistLog(`${clientId}-${tickDate}-${OUT}-${msg}`);
|
|
136
|
-
result.send(msg);
|
|
137
|
-
},
|
|
138
|
-
disconnect() {
|
|
139
|
-
clearTimeout(token);
|
|
140
|
-
result.disconnect();
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
};
|
|
144
|
-
};
|
|
145
|
-
export {
|
|
146
|
-
logsProvider,
|
|
147
|
-
withLogsRecorder
|
|
148
|
-
};
|
|
149
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -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\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 const checkForIncommingMessages = async () => {\n if (!pending.peek) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n const received = pending.pop()\n if (received !== expected.msg) {\n console.log(\"recieved: \", received)\n console.log(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":[]}
|
package/dist/min/index.d.ts
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 };
|
package/dist/min/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var a=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var I=(t,e,n)=>e in t?a(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var k=(t,e)=>{for(var n in e)a(t,n,{get:e[n],enumerable:!0})},y=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of T(e))!v.call(t,s)&&s!==n&&a(t,s,{get:()=>e[s],enumerable:!(r=x(e,s))||r.enumerable});return t};var $=t=>y(a({},"__esModule",{value:!0}),t);var g=(t,e,n)=>(I(t,typeof e!="symbol"?e+"":e,n),n);var R={};k(R,{logsProvider:()=>N,withLogsRecorder:()=>O});module.exports=$(R);var p=class{constructor(...e){g(this,"first");g(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 f=">>",h="<<";var w=t=>{let e=new Map,n="",r=-1;for(let s=0;s<t.length;s++){let[,d,i,l,u]=t[s].match(/^(\d*)-(.{24})-(.{2})-(.*)$/),o=Number(d);r+=i===n?0:1,n=i;let c=e.get(o)??[];e.set(o,c),c.push({clientId:o,tick:r,type:l,msg:u})}return e},N=t=>{let e=1,n=w(t[t.length-1]?t:t.slice(0,-1));return r=>{let s=e++,d=n.get(s),i=new p,l=0,u=async()=>{if(i.peek)for(;l<d.length&&o!==void 0;){let c=d[l];if(c.type===f){if(!i.peek()){o=setTimeout(u,100);break}let m=i.pop();if(m!==c.msg)throw console.log("recieved: ",m),console.log(m),console.log("expected: ",c.msg),new Error("unexpected messaged was received")}else r(c.msg),await Promise.resolve();l++}},o=setTimeout(u,200);return{send:c=>{i.push(c)},disconnect:()=>{clearTimeout(o),o=void 0}}}};var O=(t,e)=>{let n=1,r,s="",d=()=>{s=new Date().toISOString(),r=setTimeout(d,0)};return i=>{let l=n++;d();let u=e(o=>{t(`${l}-${s}-${h}-${o}`),i(o)});return{...u,send:o=>{t(`${l}-${s}-${f}-${o}`),u.send(o)},disconnect(){clearTimeout(r),u.disconnect()}}}};
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
package/dist/min/index.js.map
DELETED
|
@@ -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\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 const checkForIncommingMessages = async () => {\n if (!pending.peek) return\n\n while (idx < logs.length && token !== undefined) {\n const expected = logs[idx]\n if (expected.type === OUT) {\n if (!pending.peek()) {\n token = setTimeout(checkForIncommingMessages, 100)\n break\n }\n const received = pending.pop()\n if (received !== expected.msg) {\n console.log(\"recieved: \", received)\n console.log(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","logsProvider","nextClientId","allLogs","onMsg","pending","Queue","idx","checkForIncommingMessages","token","expected","OUT","received","withLogsRecorder","persistLog","input","nextId","token","tickDate","setTickDate","onMsg","clientId","result","msg","IN","OUT"]}
|