@polkadot-api/logs-provider 0.1.1-canary.ee039a8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -160
- package/dist/index.js.map +1 -1
- package/dist/{esm/logs-provider.mjs → logs-provider.js} +3 -3
- package/dist/logs-provider.js.map +1 -0
- package/dist/{esm/queue.mjs → queue.js} +1 -1
- package/dist/queue.js.map +1 -0
- package/dist/{esm/types.mjs → types.js} +1 -1
- package/dist/types.js.map +1 -0
- package/dist/{esm/with-logs-recorder.mjs → with-logs-recorder.js} +2 -2
- package/dist/with-logs-recorder.js.map +1 -0
- package/package.json +10 -20
- package/dist/esm/index.mjs +0 -3
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/logs-provider.mjs.map +0 -1
- package/dist/esm/queue.mjs.map +0 -1
- package/dist/esm/types.mjs.map +0 -1
- package/dist/esm/with-logs-recorder.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,161 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
5
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
|
-
class Queue {
|
|
7
|
-
constructor(...vals) {
|
|
8
|
-
__publicField(this, "first");
|
|
9
|
-
__publicField(this, "last");
|
|
10
|
-
if (vals.length === 0) return;
|
|
11
|
-
vals.forEach((val) => this.push(val));
|
|
12
|
-
}
|
|
13
|
-
push(value) {
|
|
14
|
-
const nextLast = { value };
|
|
15
|
-
if (this.last === void 0) {
|
|
16
|
-
this.last = nextLast;
|
|
17
|
-
this.first = this.last;
|
|
18
|
-
} else {
|
|
19
|
-
this.last.next = nextLast;
|
|
20
|
-
this.last = nextLast;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
pop() {
|
|
24
|
-
const result = this.first?.value;
|
|
25
|
-
if (this.first) {
|
|
26
|
-
this.first = this.first.next;
|
|
27
|
-
if (!this.first) {
|
|
28
|
-
this.last = void 0;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return result;
|
|
32
|
-
}
|
|
33
|
-
peek() {
|
|
34
|
-
return this.first?.value;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
const OUT = ">>";
|
|
39
|
-
const IN = "<<";
|
|
40
|
-
|
|
41
|
-
const rawLogsToLogs = (rawLogs) => {
|
|
42
|
-
const result = /* @__PURE__ */ new Map();
|
|
43
|
-
let tick = -1;
|
|
44
|
-
for (let i = 0; i < rawLogs.length; i++) {
|
|
45
|
-
const [, clientIdRaw, dateRaw, type, msg] = rawLogs[i].match(
|
|
46
|
-
/^(\d*)-(.{24})-(.{2})-(.*)$/
|
|
47
|
-
);
|
|
48
|
-
const clientId = Number(clientIdRaw);
|
|
49
|
-
tick = new Date(dateRaw).getTime();
|
|
50
|
-
const logs = result.get(clientId) ?? [];
|
|
51
|
-
result.set(clientId, logs);
|
|
52
|
-
logs.push({
|
|
53
|
-
clientId,
|
|
54
|
-
tick,
|
|
55
|
-
type,
|
|
56
|
-
msg
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
return result;
|
|
60
|
-
};
|
|
61
|
-
const extractTx = (msg) => {
|
|
62
|
-
const startTxt = 'TaggedTransactionQueue_validate_transaction","';
|
|
63
|
-
const start = msg.lastIndexOf(startTxt) + startTxt.length + 4;
|
|
64
|
-
const end = msg.indexOf(`"`, start + 1);
|
|
65
|
-
return msg.substring(start, end - 64);
|
|
66
|
-
};
|
|
67
|
-
const defaultOptions = { speed: 1 };
|
|
68
|
-
const logsProvider = (rawLogs, options = {}) => {
|
|
69
|
-
const { speed } = { ...defaultOptions, ...options };
|
|
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
|
-
let transactions = /* @__PURE__ */ new Map();
|
|
80
|
-
const checkForIncommingMessages = async () => {
|
|
81
|
-
if (!pending.peek()) return;
|
|
82
|
-
while (idx < logs.length && token !== void 0) {
|
|
83
|
-
const expected = logs[idx];
|
|
84
|
-
transactions.forEach((value, key) => {
|
|
85
|
-
expected.msg = expected.msg.replace(key, value);
|
|
86
|
-
});
|
|
87
|
-
if (expected.type === OUT) {
|
|
88
|
-
if (!pending.peek()) {
|
|
89
|
-
token = setTimeout(checkForIncommingMessages, 100);
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
const received = JSON.stringify(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
|
-
}
|
|
101
|
-
if (received !== expected.msg) {
|
|
102
|
-
console.log(`recieved: "${received}"`);
|
|
103
|
-
console.log(`expected: "${expected.msg}"`);
|
|
104
|
-
throw new Error("unexpected messaged was received");
|
|
105
|
-
}
|
|
106
|
-
} else {
|
|
107
|
-
onMsg(JSON.parse(expected.msg));
|
|
108
|
-
const nextOne = logs[idx + 1];
|
|
109
|
-
if (nextOne)
|
|
110
|
-
await new Promise(
|
|
111
|
-
(res) => setTimeout(res, (nextOne.tick - expected.tick) / speed)
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
idx++;
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
let token = setTimeout(checkForIncommingMessages, 200);
|
|
118
|
-
return {
|
|
119
|
-
send: (msg) => {
|
|
120
|
-
pending.push(msg);
|
|
121
|
-
},
|
|
122
|
-
disconnect: () => {
|
|
123
|
-
clearTimeout(token);
|
|
124
|
-
token = void 0;
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const withLogsRecorder = (persistLog, input) => {
|
|
131
|
-
let nextId = 1;
|
|
132
|
-
let token;
|
|
133
|
-
let tickDate = "";
|
|
134
|
-
const setTickDate = () => {
|
|
135
|
-
tickDate = (/* @__PURE__ */ new Date()).toISOString();
|
|
136
|
-
token = setTimeout(setTickDate, 0);
|
|
137
|
-
};
|
|
138
|
-
return (onMsg) => {
|
|
139
|
-
const clientId = nextId++;
|
|
140
|
-
setTickDate();
|
|
141
|
-
const result = input((msg) => {
|
|
142
|
-
persistLog(`${clientId}-${tickDate}-${IN}-${JSON.stringify(msg)}`);
|
|
143
|
-
onMsg(msg);
|
|
144
|
-
});
|
|
145
|
-
return {
|
|
146
|
-
...result,
|
|
147
|
-
send: (msg) => {
|
|
148
|
-
persistLog(`${clientId}-${tickDate}-${OUT}-${JSON.stringify(msg)}`);
|
|
149
|
-
result.send(msg);
|
|
150
|
-
},
|
|
151
|
-
disconnect() {
|
|
152
|
-
clearTimeout(token);
|
|
153
|
-
result.disconnect();
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
exports.logsProvider = logsProvider;
|
|
160
|
-
exports.withLogsRecorder = withLogsRecorder;
|
|
1
|
+
export { logsProvider } from './logs-provider.js';
|
|
2
|
+
export { withLogsRecorder } from './with-logs-recorder.js';
|
|
161
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 {\n JsonRpcMessage,\n JsonRpcProvider,\n} 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 type LogsProviderOptions = {\n speed: number\n}\nconst defaultOptions: LogsProviderOptions = { speed: 1 }\nexport const logsProvider = (\n rawLogs: Array<string>,\n options: Partial<LogsProviderOptions> = {},\n): JsonRpcProvider => {\n const { speed } = { ...defaultOptions, ...options }\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<JsonRpcMessage>()\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 = JSON.stringify(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(JSON.parse(expected.msg))\n const nextOne = logs[idx + 1]\n if (nextOne)\n await new Promise((res) =>\n setTimeout(res, (nextOne.tick - expected.tick) / speed),\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}-${JSON.stringify(msg)}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${JSON.stringify(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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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Queue from './queue.
|
|
2
|
-
import { OUT } from './types.
|
|
1
|
+
import Queue from './queue.js';
|
|
2
|
+
import { OUT } from './types.js';
|
|
3
3
|
|
|
4
4
|
const rawLogsToLogs = (rawLogs) => {
|
|
5
5
|
const result = /* @__PURE__ */ new Map();
|
|
@@ -91,4 +91,4 @@ const logsProvider = (rawLogs, options = {}) => {
|
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
export { logsProvider };
|
|
94
|
-
//# sourceMappingURL=logs-provider.
|
|
94
|
+
//# sourceMappingURL=logs-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs-provider.js","sources":["../src/logs-provider.ts"],"sourcesContent":["import {\n JsonRpcMessage,\n JsonRpcProvider,\n} 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 type LogsProviderOptions = {\n speed: number\n}\nconst defaultOptions: LogsProviderOptions = { speed: 1 }\nexport const logsProvider = (\n rawLogs: Array<string>,\n options: Partial<LogsProviderOptions> = {},\n): JsonRpcProvider => {\n const { speed } = { ...defaultOptions, ...options }\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<JsonRpcMessage>()\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 = JSON.stringify(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(JSON.parse(expected.msg))\n const nextOne = logs[idx + 1]\n if (nextOne)\n await new Promise((res) =>\n setTimeout(res, (nextOne.tick - expected.tick) / speed),\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 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","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,KAAA,CAAS;AAAA,EAI5B,eAAe,IAAA,EAAW;AAH1B,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AAGN,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,QAAQ,CAAC,GAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACtC;AAAA,EAEA,KAAK,KAAA,EAAU;AACb,IAAA,MAAM,QAAA,GAAyB,EAAE,KAAA,EAAM;AACvC,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AACZ,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,IAAA,GAAO,QAAA;AACjB,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AAAA,IACd;AAAA,EACF;AAAA,EAEA,GAAA,GAAM;AACJ,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAO,KAAA;AAC3B,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,IAAA;AACxB,MAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,QAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAAA,MACd;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAO;AACL,IAAA,OAAO,KAAK,KAAA,EAAO,KAAA;AAAA,EACrB;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","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,GAAA,GAAW;AAGjB,MAAM,EAAA,GAAS;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IN, OUT } from './types.
|
|
1
|
+
import { IN, OUT } from './types.js';
|
|
2
2
|
|
|
3
3
|
const withLogsRecorder = (persistLog, input) => {
|
|
4
4
|
let nextId = 1;
|
|
@@ -30,4 +30,4 @@ const withLogsRecorder = (persistLog, input) => {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export { withLogsRecorder };
|
|
33
|
-
//# sourceMappingURL=with-logs-recorder.
|
|
33
|
+
//# sourceMappingURL=with-logs-recorder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-logs-recorder.js","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}-${JSON.stringify(msg)}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${JSON.stringify(msg)}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"names":[],"mappings":";;AAGO,MAAM,gBAAA,GAAmB,CAC9B,UAAA,EACA,KAAA,KACoB;AACpB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,QAAA,GAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClC,IAAA,KAAA,GAAQ,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,QAAA,GAAW,MAAA,EAAA;AAEjB,IAAA,WAAA,EAAY;AAEZ,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,GAAA,KAAQ;AAC5B,MAAA,UAAA,CAAW,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AACjE,MAAA,KAAA,CAAM,GAAG,CAAA;AAAA,IACX,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,QAAA,UAAA,CAAW,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAClE,QAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,UAAA,GAAa;AACX,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,MAAA,CAAO,UAAA,EAAW;AAAA,MACpB;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/logs-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,37 +8,27 @@
|
|
|
8
8
|
},
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"sideEffects": false,
|
|
11
|
+
"type": "module",
|
|
11
12
|
"exports": {
|
|
12
13
|
".": {
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"require": "./dist/min/index.js",
|
|
17
|
-
"default": "./dist/index.js"
|
|
18
|
-
},
|
|
19
|
-
"import": "./dist/esm/index.mjs",
|
|
20
|
-
"require": "./dist/index.js",
|
|
21
|
-
"default": "./dist/index.js"
|
|
22
|
-
},
|
|
23
|
-
"module": "./dist/esm/index.mjs",
|
|
24
|
-
"import": "./dist/esm/index.mjs",
|
|
25
|
-
"require": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"module": "./dist/index.js",
|
|
16
|
+
"import": "./dist/index.js",
|
|
26
17
|
"default": "./dist/index.js"
|
|
27
|
-
}
|
|
28
|
-
"./package.json": "./package.json"
|
|
18
|
+
}
|
|
29
19
|
},
|
|
30
20
|
"main": "./dist/index.js",
|
|
31
|
-
"module": "./dist/
|
|
32
|
-
"browser": "./dist/
|
|
21
|
+
"module": "./dist/index.js",
|
|
22
|
+
"browser": "./dist/index.js",
|
|
33
23
|
"types": "./dist/index.d.ts",
|
|
34
24
|
"files": [
|
|
35
25
|
"dist"
|
|
36
26
|
],
|
|
37
27
|
"dependencies": {
|
|
38
|
-
"@polkadot-api/json-rpc-provider": "0.
|
|
28
|
+
"@polkadot-api/json-rpc-provider": "0.2.0"
|
|
39
29
|
},
|
|
40
30
|
"devDependencies": {
|
|
41
|
-
"@polkadot-api/json-rpc-provider": "0.
|
|
31
|
+
"@polkadot-api/json-rpc-provider": "0.2.0"
|
|
42
32
|
},
|
|
43
33
|
"scripts": {
|
|
44
34
|
"build-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
|
package/dist/esm/index.mjs
DELETED
package/dist/esm/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs-provider.mjs","sources":["../../src/logs-provider.ts"],"sourcesContent":["import {\n JsonRpcMessage,\n JsonRpcProvider,\n} 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 type LogsProviderOptions = {\n speed: number\n}\nconst defaultOptions: LogsProviderOptions = { speed: 1 }\nexport const logsProvider = (\n rawLogs: Array<string>,\n options: Partial<LogsProviderOptions> = {},\n): JsonRpcProvider => {\n const { speed } = { ...defaultOptions, ...options }\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<JsonRpcMessage>()\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 = JSON.stringify(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(JSON.parse(expected.msg))\n const nextOne = logs[idx + 1]\n if (nextOne)\n await new Promise((res) =>\n setTimeout(res, (nextOne.tick - expected.tick) / speed),\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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"}
|
package/dist/esm/queue.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,KAAA,CAAS;AAAA,EAI5B,eAAe,IAAA,EAAW;AAH1B,IAAA,aAAA,CAAA,IAAA,EAAQ,OAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAQ,MAAA,CAAA;AAGN,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACvB,IAAA,IAAA,CAAK,QAAQ,CAAC,GAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EACtC;AAAA,EAEA,KAAK,KAAA,EAAU;AACb,IAAA,MAAM,QAAA,GAAyB,EAAE,KAAA,EAAM;AACvC,IAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAW;AAC3B,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AACZ,MAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,IAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,IAAA,GAAO,QAAA;AACjB,MAAA,IAAA,CAAK,IAAA,GAAO,QAAA;AAAA,IACd;AAAA,EACF;AAAA,EAEA,GAAA,GAAM;AACJ,IAAA,MAAM,MAAA,GAAS,KAAK,KAAA,EAAO,KAAA;AAC3B,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAK,KAAA,CAAM,IAAA;AACxB,MAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,QAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AAAA,MACd;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,IAAA,GAAO;AACL,IAAA,OAAO,KAAK,KAAA,EAAO,KAAA;AAAA,EACrB;AACF;;;;"}
|
package/dist/esm/types.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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,GAAA,GAAW;AAGjB,MAAM,EAAA,GAAS;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
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}-${JSON.stringify(msg)}`)\n onMsg(msg)\n })\n\n return {\n ...result,\n send: (msg) => {\n persistLog(`${clientId}-${tickDate}-${OUT}-${JSON.stringify(msg)}`)\n result.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n result.disconnect()\n },\n }\n }\n}\n"],"names":[],"mappings":";;AAGO,MAAM,gBAAA,GAAmB,CAC9B,UAAA,EACA,KAAA,KACoB;AACpB,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,QAAA,GAAW,EAAA;AACf,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,QAAA,GAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAClC,IAAA,KAAA,GAAQ,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,EACnC,CAAA;AAEA,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,MAAM,QAAA,GAAW,MAAA,EAAA;AAEjB,IAAA,WAAA,EAAY;AAEZ,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,GAAA,KAAQ;AAC5B,MAAA,UAAA,CAAW,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AACjE,MAAA,KAAA,CAAM,GAAG,CAAA;AAAA,IACX,CAAC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,QAAA,UAAA,CAAW,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAE,CAAA;AAClE,QAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,MACjB,CAAA;AAAA,MACA,UAAA,GAAa;AACX,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,MAAA,CAAO,UAAA,EAAW;AAAA,MACpB;AAAA,KACF;AAAA,EACF,CAAA;AACF;;;;"}
|