@trufnetwork/sdk-js 0.3.7 → 0.4.1
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/cjs/client/browserClient.cjs +1 -1
- package/dist/cjs/client/browserClient.cjs.map +1 -1
- package/dist/cjs/client/client.cjs +1 -1
- package/dist/cjs/client/client.cjs.map +1 -1
- package/dist/cjs/client/getLastTransactions.cjs.map +1 -1
- package/dist/cjs/client/listStreams.cjs.map +1 -1
- package/dist/cjs/client/nodeClient.cjs +1 -1
- package/dist/cjs/client/nodeClient.cjs.map +1 -1
- package/dist/cjs/contracts-api/action.cjs +301 -77
- package/dist/cjs/contracts-api/action.cjs.map +3 -3
- package/dist/cjs/contracts-api/cache.integration.test.cjs +265 -0
- package/dist/cjs/contracts-api/cache.integration.test.cjs.map +7 -0
- package/dist/cjs/contracts-api/composedAction.cjs +1 -1
- package/dist/cjs/contracts-api/composedAction.cjs.map +1 -1
- package/dist/cjs/contracts-api/deleteStream.cjs.map +1 -1
- package/dist/cjs/contracts-api/deployStream.cjs.map +1 -1
- package/dist/cjs/contracts-api/primitiveAction.cjs +1 -1
- package/dist/cjs/contracts-api/primitiveAction.cjs.map +1 -1
- package/dist/cjs/contracts-api/roleManagement.cjs +1 -1
- package/dist/cjs/contracts-api/roleManagement.cjs.map +1 -1
- package/dist/cjs/types/cache.cjs +34 -0
- package/dist/cjs/types/cache.cjs.map +7 -0
- package/dist/cjs/types/cache.test.cjs +205 -0
- package/dist/cjs/types/cache.test.cjs.map +7 -0
- package/dist/cjs/util/cacheMetadataParser.cjs +174 -0
- package/dist/cjs/util/cacheMetadataParser.cjs.map +7 -0
- package/dist/cjs/util/cacheMetadataParser.test.cjs +329 -0
- package/dist/cjs/util/cacheMetadataParser.test.cjs.map +7 -0
- package/dist/cjs/util/cacheValidation.cjs +88 -0
- package/dist/cjs/util/cacheValidation.cjs.map +7 -0
- package/dist/cjs/util/cacheValidation.test.cjs +108 -0
- package/dist/cjs/util/cacheValidation.test.cjs.map +7 -0
- package/dist/esm/client/browserClient.mjs +1 -1
- package/dist/esm/client/browserClient.mjs.map +1 -1
- package/dist/esm/client/client.mjs +1 -1
- package/dist/esm/client/client.mjs.map +1 -1
- package/dist/esm/client/getLastTransactions.mjs.map +1 -1
- package/dist/esm/client/listStreams.mjs.map +1 -1
- package/dist/esm/client/nodeClient.mjs +1 -1
- package/dist/esm/client/nodeClient.mjs.map +1 -1
- package/dist/esm/contracts-api/action.mjs +302 -77
- package/dist/esm/contracts-api/action.mjs.map +3 -3
- package/dist/esm/contracts-api/cache.integration.test.mjs +263 -0
- package/dist/esm/contracts-api/cache.integration.test.mjs.map +7 -0
- package/dist/esm/contracts-api/composedAction.mjs +1 -1
- package/dist/esm/contracts-api/composedAction.mjs.map +1 -1
- package/dist/esm/contracts-api/deleteStream.mjs.map +1 -1
- package/dist/esm/contracts-api/deployStream.mjs.map +1 -1
- package/dist/esm/contracts-api/primitiveAction.mjs +1 -1
- package/dist/esm/contracts-api/primitiveAction.mjs.map +1 -1
- package/dist/esm/contracts-api/roleManagement.mjs +1 -1
- package/dist/esm/contracts-api/roleManagement.mjs.map +1 -1
- package/dist/esm/types/cache.mjs +13 -0
- package/dist/esm/types/cache.mjs.map +7 -0
- package/dist/esm/types/cache.test.mjs +203 -0
- package/dist/esm/types/cache.test.mjs.map +7 -0
- package/dist/esm/util/cacheMetadataParser.mjs +153 -0
- package/dist/esm/util/cacheMetadataParser.mjs.map +7 -0
- package/dist/esm/util/cacheMetadataParser.test.mjs +327 -0
- package/dist/esm/util/cacheMetadataParser.test.mjs.map +7 -0
- package/dist/esm/util/cacheValidation.mjs +67 -0
- package/dist/esm/util/cacheValidation.mjs.map +7 -0
- package/dist/esm/util/cacheValidation.test.mjs +106 -0
- package/dist/esm/util/cacheValidation.test.mjs.map +7 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/client/browserClient.d.ts +1 -1
- package/dist/types/client/browserClient.d.ts.map +1 -1
- package/dist/types/client/client.d.ts +8 -8
- package/dist/types/client/client.d.ts.map +1 -1
- package/dist/types/client/getLastTransactions.d.ts +1 -1
- package/dist/types/client/getLastTransactions.d.ts.map +1 -1
- package/dist/types/client/listStreams.d.ts +1 -1
- package/dist/types/client/listStreams.d.ts.map +1 -1
- package/dist/types/client/nodeClient.d.ts +1 -1
- package/dist/types/client/nodeClient.d.ts.map +1 -1
- package/dist/types/contracts-api/action.d.ts +17 -7
- package/dist/types/contracts-api/action.d.ts.map +1 -1
- package/dist/types/contracts-api/cache.integration.test.d.ts +2 -0
- package/dist/types/contracts-api/cache.integration.test.d.ts.map +1 -0
- package/dist/types/contracts-api/composedAction.d.ts +3 -3
- package/dist/types/contracts-api/composedAction.d.ts.map +1 -1
- package/dist/types/contracts-api/deleteStream.d.ts +4 -4
- package/dist/types/contracts-api/deleteStream.d.ts.map +1 -1
- package/dist/types/contracts-api/deployStream.d.ts +4 -4
- package/dist/types/contracts-api/deployStream.d.ts.map +1 -1
- package/dist/types/contracts-api/primitiveAction.d.ts +3 -3
- package/dist/types/contracts-api/primitiveAction.d.ts.map +1 -1
- package/dist/types/contracts-api/roleManagement.d.ts +3 -3
- package/dist/types/contracts-api/roleManagement.d.ts.map +1 -1
- package/dist/types/types/cache.d.ts +129 -0
- package/dist/types/types/cache.d.ts.map +1 -0
- package/dist/types/types/cache.test.d.ts +2 -0
- package/dist/types/types/cache.test.d.ts.map +1 -0
- package/dist/types/util/cacheMetadataParser.d.ts +38 -0
- package/dist/types/util/cacheMetadataParser.d.ts.map +1 -0
- package/dist/types/util/cacheMetadataParser.test.d.ts +2 -0
- package/dist/types/util/cacheMetadataParser.test.d.ts.map +1 -0
- package/dist/types/util/cacheValidation.d.ts +27 -0
- package/dist/types/util/cacheValidation.d.ts.map +1 -0
- package/dist/types/util/cacheValidation.test.d.ts +2 -0
- package/dist/types/util/cacheValidation.test.d.ts.map +1 -0
- package/package.json +5 -3
- package/dist/cjs/client/client.test.cjs +0 -32
- package/dist/cjs/client/client.test.cjs.map +0 -7
- package/dist/esm/client/client.test.mjs +0 -30
- package/dist/esm/client/client.test.mjs.map +0 -7
- package/dist/types/client/client.test.d.ts +0 -2
- package/dist/types/client/client.test.d.ts.map +0 -1
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/util/cacheMetadataParser.test.ts
|
|
4
|
+
var import_vitest = require("vitest");
|
|
5
|
+
var import_cacheMetadataParser = require("./cacheMetadataParser.cjs");
|
|
6
|
+
(0, import_vitest.describe)("CacheMetadataParser", () => {
|
|
7
|
+
(0, import_vitest.describe)("extractFromLogs", () => {
|
|
8
|
+
(0, import_vitest.it)("should extract cache hit metadata from valid log", () => {
|
|
9
|
+
const logs = ['{"cache_hit": true, "cache_height": 123456}'];
|
|
10
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
11
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
12
|
+
hit: true,
|
|
13
|
+
cacheDisabled: void 0,
|
|
14
|
+
height: 123456
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
(0, import_vitest.it)("should extract enhanced cache metadata with cacheDisabled field", () => {
|
|
18
|
+
const logs = ['{"cache_hit": false, "cache_disabled": true}'];
|
|
19
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
20
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
21
|
+
hit: false,
|
|
22
|
+
cacheDisabled: true,
|
|
23
|
+
height: void 0
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
(0, import_vitest.it)("should extract cache miss metadata from valid log", () => {
|
|
27
|
+
const logs = ['{"cache_hit": false}'];
|
|
28
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
29
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
30
|
+
hit: false,
|
|
31
|
+
cacheDisabled: void 0,
|
|
32
|
+
height: void 0
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
(0, import_vitest.it)("should handle cache hit without height field", () => {
|
|
36
|
+
const logs = ['{"cache_hit": true}'];
|
|
37
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
38
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
39
|
+
hit: true,
|
|
40
|
+
cacheDisabled: void 0,
|
|
41
|
+
height: void 0
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
(0, import_vitest.it)("should handle single string log with newlines", () => {
|
|
45
|
+
const log = 'other log entry\n{"cache_hit": true, "cache_height": 123456}\nmore logs';
|
|
46
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(log);
|
|
47
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
48
|
+
hit: true,
|
|
49
|
+
cacheDisabled: void 0,
|
|
50
|
+
height: 123456
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
(0, import_vitest.it)("should handle array of logs", () => {
|
|
54
|
+
const logs = [
|
|
55
|
+
"normal log entry",
|
|
56
|
+
'{"cache_hit": true, "cache_height": 123456}',
|
|
57
|
+
"another log"
|
|
58
|
+
];
|
|
59
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
60
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
61
|
+
hit: true,
|
|
62
|
+
cacheDisabled: void 0,
|
|
63
|
+
height: 123456
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
(0, import_vitest.it)("should return null for logs without cache metadata", () => {
|
|
67
|
+
const logs = ["normal log entry", "another log"];
|
|
68
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
69
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
(0, import_vitest.it)("should return null for malformed JSON", () => {
|
|
72
|
+
const logs = ['{"cache_hit": true invalid json}'];
|
|
73
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
74
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
75
|
+
});
|
|
76
|
+
(0, import_vitest.it)("should return null for empty logs", () => {
|
|
77
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs([]);
|
|
78
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
79
|
+
});
|
|
80
|
+
(0, import_vitest.it)("should handle empty string logs", () => {
|
|
81
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(["", " ", "\n"]);
|
|
82
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
83
|
+
});
|
|
84
|
+
(0, import_vitest.it)("should extract cache hit metadata with all fields", () => {
|
|
85
|
+
const logs = ['{"cache_hit": true, "cache_height": 123456}'];
|
|
86
|
+
const metadata = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
87
|
+
(0, import_vitest.expect)(metadata).toEqual({
|
|
88
|
+
hit: true,
|
|
89
|
+
cacheDisabled: void 0,
|
|
90
|
+
height: 123456
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
(0, import_vitest.it)("should extract cache hit without optional fields", () => {
|
|
94
|
+
const logs = ['{"cache_hit": true}'];
|
|
95
|
+
const metadata = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
96
|
+
(0, import_vitest.expect)(metadata).toEqual({
|
|
97
|
+
hit: true,
|
|
98
|
+
cacheDisabled: void 0,
|
|
99
|
+
height: void 0
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
(0, import_vitest.it)("should extract cache miss", () => {
|
|
103
|
+
const logs = ['{"cache_hit": false}'];
|
|
104
|
+
const metadata = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
105
|
+
(0, import_vitest.expect)(metadata).toEqual({
|
|
106
|
+
hit: false,
|
|
107
|
+
cacheDisabled: void 0,
|
|
108
|
+
height: void 0
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
(0, import_vitest.it)("should handle logs with prepended numeric prefixes", () => {
|
|
112
|
+
const logs = ['1. {"cache_hit": true, "cache_height": 123456}\n2. some other log\n3. {"cache_hit": false}'];
|
|
113
|
+
const metadata = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
114
|
+
(0, import_vitest.expect)(metadata).toEqual({
|
|
115
|
+
hit: true,
|
|
116
|
+
cacheDisabled: void 0,
|
|
117
|
+
height: 123456
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
(0, import_vitest.it)("should handle array of logs with prepended numeric prefixes", () => {
|
|
121
|
+
const logs = [
|
|
122
|
+
"1. normal log line",
|
|
123
|
+
'2. {"cache_hit": false, "cache_disabled": true}',
|
|
124
|
+
"3. another log line"
|
|
125
|
+
];
|
|
126
|
+
const metadata = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
127
|
+
(0, import_vitest.expect)(metadata).toEqual({
|
|
128
|
+
hit: false,
|
|
129
|
+
cacheDisabled: true,
|
|
130
|
+
height: void 0
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
(0, import_vitest.it)("should handle mixed format logs (some with prefixes, some without)", () => {
|
|
134
|
+
const logs = [
|
|
135
|
+
"normal log without prefix",
|
|
136
|
+
'1. {"cache_hit": true}',
|
|
137
|
+
"another log without prefix"
|
|
138
|
+
];
|
|
139
|
+
const metadata = import_cacheMetadataParser.CacheMetadataParser.extractFromLogs(logs);
|
|
140
|
+
(0, import_vitest.expect)(metadata).toEqual({
|
|
141
|
+
hit: true,
|
|
142
|
+
cacheDisabled: void 0,
|
|
143
|
+
height: void 0
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
(0, import_vitest.describe)("isValidCacheMetadata", () => {
|
|
148
|
+
(0, import_vitest.it)("should validate correct cache metadata", () => {
|
|
149
|
+
const metadata = { hit: true, height: 123456 };
|
|
150
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);
|
|
151
|
+
});
|
|
152
|
+
(0, import_vitest.it)("should validate metadata without height", () => {
|
|
153
|
+
const metadata = { hit: false };
|
|
154
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
(0, import_vitest.it)("should validate enhanced cache metadata with all fields", () => {
|
|
157
|
+
const metadata = {
|
|
158
|
+
hit: true,
|
|
159
|
+
cacheDisabled: false,
|
|
160
|
+
height: 123456,
|
|
161
|
+
streamId: "test-stream",
|
|
162
|
+
dataProvider: "0x123456789abcdef",
|
|
163
|
+
from: 1609459100,
|
|
164
|
+
to: 1609459300,
|
|
165
|
+
frozenAt: 1609459250,
|
|
166
|
+
rowsServed: 10
|
|
167
|
+
};
|
|
168
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
(0, import_vitest.it)("should validate metadata with optional fields", () => {
|
|
171
|
+
const metadata = { hit: true, cacheDisabled: true };
|
|
172
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);
|
|
173
|
+
});
|
|
174
|
+
(0, import_vitest.it)("should reject metadata without hit field", () => {
|
|
175
|
+
const metadata = { height: 123456 };
|
|
176
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);
|
|
177
|
+
});
|
|
178
|
+
(0, import_vitest.it)("should reject metadata with invalid hit type", () => {
|
|
179
|
+
const metadata = { hit: "true", height: 123456 };
|
|
180
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);
|
|
181
|
+
});
|
|
182
|
+
(0, import_vitest.it)("should reject metadata with invalid cacheDisabled type", () => {
|
|
183
|
+
const metadata = { hit: true, cacheDisabled: "false" };
|
|
184
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);
|
|
185
|
+
});
|
|
186
|
+
(0, import_vitest.it)("should reject metadata with invalid streamId type", () => {
|
|
187
|
+
const metadata = { hit: true, streamId: 123 };
|
|
188
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
(0, import_vitest.it)("should reject metadata with invalid dataProvider type", () => {
|
|
191
|
+
const metadata = { hit: true, dataProvider: 456 };
|
|
192
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);
|
|
193
|
+
});
|
|
194
|
+
(0, import_vitest.it)("should reject metadata with invalid numeric fields", () => {
|
|
195
|
+
const invalidFromMetadata = { hit: true, from: "123" };
|
|
196
|
+
const invalidToMetadata = { hit: true, to: "456" };
|
|
197
|
+
const invalidFrozenAtMetadata = { hit: true, frozenAt: "789" };
|
|
198
|
+
const invalidRowsServedMetadata = { hit: true, rowsServed: "10" };
|
|
199
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(invalidFromMetadata)).toBe(false);
|
|
200
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(invalidToMetadata)).toBe(false);
|
|
201
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(invalidFrozenAtMetadata)).toBe(false);
|
|
202
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(invalidRowsServedMetadata)).toBe(false);
|
|
203
|
+
});
|
|
204
|
+
(0, import_vitest.it)("should validate complete metadata", () => {
|
|
205
|
+
const metadata = { hit: true, height: 123456 };
|
|
206
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);
|
|
207
|
+
});
|
|
208
|
+
(0, import_vitest.it)("should reject metadata with invalid height type", () => {
|
|
209
|
+
const metadata = { hit: true, height: "123456" };
|
|
210
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);
|
|
211
|
+
});
|
|
212
|
+
(0, import_vitest.it)("should reject null or undefined", () => {
|
|
213
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(null)).toBe(false);
|
|
214
|
+
(0, import_vitest.expect)(import_cacheMetadataParser.CacheMetadataParser.isValidCacheMetadata(void 0)).toBe(false);
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
(0, import_vitest.describe)("extractFromResponse", () => {
|
|
218
|
+
(0, import_vitest.it)("should extract from response with logs", () => {
|
|
219
|
+
const response = {
|
|
220
|
+
data: { result: [] },
|
|
221
|
+
logs: ['{"cache_hit": true, "cache_height": 123456}']
|
|
222
|
+
};
|
|
223
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromResponse(response);
|
|
224
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
225
|
+
hit: true,
|
|
226
|
+
cacheDisabled: void 0,
|
|
227
|
+
height: 123456
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
(0, import_vitest.it)("should return null for response without logs", () => {
|
|
231
|
+
const response = { data: { result: [] } };
|
|
232
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromResponse(response);
|
|
233
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
234
|
+
});
|
|
235
|
+
(0, import_vitest.it)("should return null for null response", () => {
|
|
236
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.extractFromResponse(null);
|
|
237
|
+
(0, import_vitest.expect)(result).toBeNull();
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
(0, import_vitest.describe)("aggregate", () => {
|
|
241
|
+
(0, import_vitest.it)("should aggregate empty metadata list", () => {
|
|
242
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.aggregate([]);
|
|
243
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
244
|
+
totalQueries: 0,
|
|
245
|
+
cacheHits: 0,
|
|
246
|
+
cacheMisses: 0,
|
|
247
|
+
cacheHitRate: 0,
|
|
248
|
+
totalRowsServed: 0,
|
|
249
|
+
entries: []
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
(0, import_vitest.it)("should aggregate single metadata entry", () => {
|
|
253
|
+
const metadata = {
|
|
254
|
+
hit: true,
|
|
255
|
+
height: 123456,
|
|
256
|
+
streamId: "test-stream",
|
|
257
|
+
rowsServed: 5
|
|
258
|
+
};
|
|
259
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.aggregate([metadata]);
|
|
260
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
261
|
+
totalQueries: 1,
|
|
262
|
+
cacheHits: 1,
|
|
263
|
+
cacheMisses: 0,
|
|
264
|
+
cacheHitRate: 1,
|
|
265
|
+
totalRowsServed: 5,
|
|
266
|
+
entries: [metadata]
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
(0, import_vitest.it)("should aggregate multiple metadata entries", () => {
|
|
270
|
+
const metadata1 = {
|
|
271
|
+
hit: true,
|
|
272
|
+
height: 123456,
|
|
273
|
+
streamId: "stream-1",
|
|
274
|
+
rowsServed: 10
|
|
275
|
+
};
|
|
276
|
+
const metadata2 = {
|
|
277
|
+
hit: false,
|
|
278
|
+
streamId: "stream-2",
|
|
279
|
+
rowsServed: 5
|
|
280
|
+
};
|
|
281
|
+
const metadata3 = {
|
|
282
|
+
hit: true,
|
|
283
|
+
height: 123457,
|
|
284
|
+
streamId: "stream-3",
|
|
285
|
+
rowsServed: 15
|
|
286
|
+
};
|
|
287
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.aggregate([metadata1, metadata2, metadata3]);
|
|
288
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
289
|
+
totalQueries: 3,
|
|
290
|
+
cacheHits: 2,
|
|
291
|
+
cacheMisses: 1,
|
|
292
|
+
cacheHitRate: 2 / 3,
|
|
293
|
+
totalRowsServed: 30,
|
|
294
|
+
entries: [metadata1, metadata2, metadata3]
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
(0, import_vitest.it)("should handle metadata without rowsServed", () => {
|
|
298
|
+
const metadata1 = { hit: true, height: 123456 };
|
|
299
|
+
const metadata2 = { hit: false };
|
|
300
|
+
const metadata3 = { hit: true, rowsServed: 8 };
|
|
301
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.aggregate([metadata1, metadata2, metadata3]);
|
|
302
|
+
(0, import_vitest.expect)(result).toEqual({
|
|
303
|
+
totalQueries: 3,
|
|
304
|
+
cacheHits: 2,
|
|
305
|
+
cacheMisses: 1,
|
|
306
|
+
cacheHitRate: 2 / 3,
|
|
307
|
+
totalRowsServed: 8,
|
|
308
|
+
// Only metadata3 has rowsServed
|
|
309
|
+
entries: [metadata1, metadata2, metadata3]
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
(0, import_vitest.it)("should calculate correct cache hit rate for mixed results", () => {
|
|
313
|
+
const metadataList = [
|
|
314
|
+
{ hit: true, rowsServed: 1 },
|
|
315
|
+
{ hit: false, rowsServed: 2 },
|
|
316
|
+
{ hit: false, rowsServed: 3 },
|
|
317
|
+
{ hit: true, rowsServed: 4 },
|
|
318
|
+
{ hit: true, rowsServed: 5 }
|
|
319
|
+
];
|
|
320
|
+
const result = import_cacheMetadataParser.CacheMetadataParser.aggregate(metadataList);
|
|
321
|
+
(0, import_vitest.expect)(result.totalQueries).toBe(5);
|
|
322
|
+
(0, import_vitest.expect)(result.cacheHits).toBe(3);
|
|
323
|
+
(0, import_vitest.expect)(result.cacheMisses).toBe(2);
|
|
324
|
+
(0, import_vitest.expect)(result.cacheHitRate).toBe(0.6);
|
|
325
|
+
(0, import_vitest.expect)(result.totalRowsServed).toBe(15);
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
//# sourceMappingURL=cacheMetadataParser.test.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util/cacheMetadataParser.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, it, expect } from 'vitest';\nimport { CacheMetadataParser } from './cacheMetadataParser';\nimport type { CacheMetadata } from '../types/cache';\n\ndescribe('CacheMetadataParser', () => {\n describe('extractFromLogs', () => {\n it('should extract cache hit metadata from valid log', () => {\n const logs = ['{\"cache_hit\": true, \"cache_height\": 123456}'];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: 123456\n });\n });\n\n it('should extract enhanced cache metadata with cacheDisabled field', () => {\n const logs = ['{\"cache_hit\": false, \"cache_disabled\": true}'];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toEqual({\n hit: false,\n cacheDisabled: true,\n height: undefined\n });\n });\n\n it('should extract cache miss metadata from valid log', () => {\n const logs = ['{\"cache_hit\": false}'];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toEqual({\n hit: false,\n cacheDisabled: undefined,\n height: undefined\n });\n });\n\n it('should handle cache hit without height field', () => {\n const logs = ['{\"cache_hit\": true}'];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: undefined\n });\n });\n\n it('should handle single string log with newlines', () => {\n const log = 'other log entry\\n{\"cache_hit\": true, \"cache_height\": 123456}\\nmore logs';\n const result = CacheMetadataParser.extractFromLogs(log);\n \n expect(result).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: 123456\n });\n });\n\n it('should handle array of logs', () => {\n const logs = [\n 'normal log entry',\n '{\"cache_hit\": true, \"cache_height\": 123456}',\n 'another log'\n ];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: 123456\n });\n });\n\n it('should return null for logs without cache metadata', () => {\n const logs = ['normal log entry', 'another log'];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toBeNull();\n });\n\n it('should return null for malformed JSON', () => {\n const logs = ['{\"cache_hit\": true invalid json}'];\n const result = CacheMetadataParser.extractFromLogs(logs);\n \n expect(result).toBeNull();\n });\n\n it('should return null for empty logs', () => {\n const result = CacheMetadataParser.extractFromLogs([]);\n expect(result).toBeNull();\n });\n\n it('should handle empty string logs', () => {\n const result = CacheMetadataParser.extractFromLogs(['', ' ', '\\n']);\n expect(result).toBeNull();\n });\n\n it('should extract cache hit metadata with all fields', () => {\n const logs = ['{\"cache_hit\": true, \"cache_height\": 123456}'];\n const metadata = CacheMetadataParser.extractFromLogs(logs);\n expect(metadata).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: 123456\n });\n });\n\n it('should extract cache hit without optional fields', () => {\n const logs = ['{\"cache_hit\": true}'];\n const metadata = CacheMetadataParser.extractFromLogs(logs);\n expect(metadata).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: undefined\n });\n });\n\n it('should extract cache miss', () => {\n const logs = ['{\"cache_hit\": false}'];\n const metadata = CacheMetadataParser.extractFromLogs(logs);\n expect(metadata).toEqual({\n hit: false,\n cacheDisabled: undefined,\n height: undefined\n });\n });\n\n it('should handle logs with prepended numeric prefixes', () => {\n const logs = ['1. {\"cache_hit\": true, \"cache_height\": 123456}\\n2. some other log\\n3. {\"cache_hit\": false}'];\n const metadata = CacheMetadataParser.extractFromLogs(logs);\n // Should extract the first cache metadata found (cache hit)\n expect(metadata).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: 123456\n });\n });\n\n it('should handle array of logs with prepended numeric prefixes', () => {\n const logs = [\n '1. normal log line',\n '2. {\"cache_hit\": false, \"cache_disabled\": true}',\n '3. another log line'\n ];\n const metadata = CacheMetadataParser.extractFromLogs(logs);\n expect(metadata).toEqual({\n hit: false,\n cacheDisabled: true,\n height: undefined\n });\n });\n\n it('should handle mixed format logs (some with prefixes, some without)', () => {\n const logs = [\n 'normal log without prefix',\n '1. {\"cache_hit\": true}',\n 'another log without prefix'\n ];\n const metadata = CacheMetadataParser.extractFromLogs(logs);\n expect(metadata).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: undefined\n });\n });\n });\n\n describe('isValidCacheMetadata', () => {\n it('should validate correct cache metadata', () => {\n const metadata = { hit: true, height: 123456 };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);\n });\n\n it('should validate metadata without height', () => {\n const metadata = { hit: false };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);\n });\n\n it('should validate enhanced cache metadata with all fields', () => {\n const metadata: CacheMetadata = {\n hit: true,\n cacheDisabled: false,\n height: 123456,\n streamId: 'test-stream',\n dataProvider: '0x123456789abcdef',\n from: 1609459100,\n to: 1609459300,\n frozenAt: 1609459250,\n rowsServed: 10\n };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);\n });\n\n it('should validate metadata with optional fields', () => {\n const metadata = { hit: true, cacheDisabled: true };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);\n });\n\n it('should reject metadata without hit field', () => {\n const metadata = { height: 123456 };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);\n });\n\n it('should reject metadata with invalid hit type', () => {\n const metadata = { hit: 'true', height: 123456 };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);\n });\n\n it('should reject metadata with invalid cacheDisabled type', () => {\n const metadata = { hit: true, cacheDisabled: 'false' };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);\n });\n\n it('should reject metadata with invalid streamId type', () => {\n const metadata = { hit: true, streamId: 123 };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);\n });\n\n it('should reject metadata with invalid dataProvider type', () => {\n const metadata = { hit: true, dataProvider: 456 };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);\n });\n\n it('should reject metadata with invalid numeric fields', () => {\n const invalidFromMetadata = { hit: true, from: '123' };\n const invalidToMetadata = { hit: true, to: '456' };\n const invalidFrozenAtMetadata = { hit: true, frozenAt: '789' };\n const invalidRowsServedMetadata = { hit: true, rowsServed: '10' };\n\n expect(CacheMetadataParser.isValidCacheMetadata(invalidFromMetadata)).toBe(false);\n expect(CacheMetadataParser.isValidCacheMetadata(invalidToMetadata)).toBe(false);\n expect(CacheMetadataParser.isValidCacheMetadata(invalidFrozenAtMetadata)).toBe(false);\n expect(CacheMetadataParser.isValidCacheMetadata(invalidRowsServedMetadata)).toBe(false);\n });\n\n it('should validate complete metadata', () => {\n const metadata = { hit: true, height: 123456 };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(true);\n });\n\n it('should reject metadata with invalid height type', () => {\n const metadata = { hit: true, height: '123456' };\n expect(CacheMetadataParser.isValidCacheMetadata(metadata)).toBe(false);\n });\n\n it('should reject null or undefined', () => {\n expect(CacheMetadataParser.isValidCacheMetadata(null)).toBe(false);\n expect(CacheMetadataParser.isValidCacheMetadata(undefined)).toBe(false);\n });\n });\n\n describe('extractFromResponse', () => {\n it('should extract from response with logs', () => {\n const response = {\n data: { result: [] },\n logs: ['{\"cache_hit\": true, \"cache_height\": 123456}']\n };\n const result = CacheMetadataParser.extractFromResponse(response);\n \n expect(result).toEqual({\n hit: true,\n cacheDisabled: undefined,\n height: 123456\n });\n });\n\n it('should return null for response without logs', () => {\n const response = { data: { result: [] } };\n const result = CacheMetadataParser.extractFromResponse(response);\n \n expect(result).toBeNull();\n });\n\n it('should return null for null response', () => {\n const result = CacheMetadataParser.extractFromResponse(null);\n expect(result).toBeNull();\n });\n });\n\n describe('aggregate', () => {\n it('should aggregate empty metadata list', () => {\n const result = CacheMetadataParser.aggregate([]);\n \n expect(result).toEqual({\n totalQueries: 0,\n cacheHits: 0,\n cacheMisses: 0,\n cacheHitRate: 0,\n totalRowsServed: 0,\n entries: []\n });\n });\n\n it('should aggregate single metadata entry', () => {\n const metadata: CacheMetadata = {\n hit: true,\n height: 123456,\n streamId: 'test-stream',\n rowsServed: 5\n };\n \n const result = CacheMetadataParser.aggregate([metadata]);\n \n expect(result).toEqual({\n totalQueries: 1,\n cacheHits: 1,\n cacheMisses: 0,\n cacheHitRate: 1.0,\n totalRowsServed: 5,\n entries: [metadata]\n });\n });\n\n it('should aggregate multiple metadata entries', () => {\n const metadata1: CacheMetadata = {\n hit: true,\n height: 123456,\n streamId: 'stream-1',\n rowsServed: 10\n };\n \n const metadata2: CacheMetadata = {\n hit: false,\n streamId: 'stream-2',\n rowsServed: 5\n };\n \n const metadata3: CacheMetadata = {\n hit: true,\n height: 123457,\n streamId: 'stream-3',\n rowsServed: 15\n };\n \n const result = CacheMetadataParser.aggregate([metadata1, metadata2, metadata3]);\n \n expect(result).toEqual({\n totalQueries: 3,\n cacheHits: 2,\n cacheMisses: 1,\n cacheHitRate: 2/3,\n totalRowsServed: 30,\n entries: [metadata1, metadata2, metadata3]\n });\n });\n\n it('should handle metadata without rowsServed', () => {\n const metadata1: CacheMetadata = { hit: true, height: 123456 };\n const metadata2: CacheMetadata = { hit: false };\n const metadata3: CacheMetadata = { hit: true, rowsServed: 8 };\n \n const result = CacheMetadataParser.aggregate([metadata1, metadata2, metadata3]);\n \n expect(result).toEqual({\n totalQueries: 3,\n cacheHits: 2,\n cacheMisses: 1,\n cacheHitRate: 2/3,\n totalRowsServed: 8, // Only metadata3 has rowsServed\n entries: [metadata1, metadata2, metadata3]\n });\n });\n\n it('should calculate correct cache hit rate for mixed results', () => {\n const metadataList: CacheMetadata[] = [\n { hit: true, rowsServed: 1 },\n { hit: false, rowsServed: 2 },\n { hit: false, rowsServed: 3 },\n { hit: true, rowsServed: 4 },\n { hit: true, rowsServed: 5 }\n ];\n \n const result = CacheMetadataParser.aggregate(metadataList);\n \n expect(result.totalQueries).toBe(5);\n expect(result.cacheHits).toBe(3);\n expect(result.cacheMisses).toBe(2);\n expect(result.cacheHitRate).toBe(0.6); // 3/5 = 0.6\n expect(result.totalRowsServed).toBe(15); // 1+2+3+4+5 = 15\n });\n });\n});"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/util/cacheValidation.ts
|
|
21
|
+
var cacheValidation_exports = {};
|
|
22
|
+
__export(cacheValidation_exports, {
|
|
23
|
+
CacheValidation: () => CacheValidation
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(cacheValidation_exports);
|
|
26
|
+
var CacheValidation = class {
|
|
27
|
+
/**
|
|
28
|
+
* Validates GetRecordOptions parameters
|
|
29
|
+
*/
|
|
30
|
+
static validateGetRecordOptions(options) {
|
|
31
|
+
if (options.from !== void 0 && (typeof options.from !== "number" || options.from < 0)) {
|
|
32
|
+
throw new Error("Invalid from parameter: must be a non-negative number");
|
|
33
|
+
}
|
|
34
|
+
if (options.to !== void 0 && (typeof options.to !== "number" || options.to < 0)) {
|
|
35
|
+
throw new Error("Invalid to parameter: must be a non-negative number");
|
|
36
|
+
}
|
|
37
|
+
if (options.frozenAt !== void 0 && (typeof options.frozenAt !== "number" || options.frozenAt < 0)) {
|
|
38
|
+
throw new Error("Invalid frozenAt parameter: must be a non-negative number");
|
|
39
|
+
}
|
|
40
|
+
if (options.useCache !== void 0 && typeof options.useCache !== "boolean") {
|
|
41
|
+
throw new Error("Invalid useCache parameter: must be a boolean");
|
|
42
|
+
}
|
|
43
|
+
if (options.prefix !== void 0 && typeof options.prefix !== "string") {
|
|
44
|
+
throw new Error("Invalid prefix parameter: must be a string");
|
|
45
|
+
}
|
|
46
|
+
if (options.baseTime !== void 0 && typeof options.baseTime !== "number" && typeof options.baseTime !== "string") {
|
|
47
|
+
throw new Error("Invalid baseTime parameter: must be a number or string");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validates GetIndexOptions parameters
|
|
52
|
+
*/
|
|
53
|
+
static validateGetIndexOptions(options) {
|
|
54
|
+
this.validateGetRecordOptions(options);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validates GetIndexChangeOptions parameters
|
|
58
|
+
*/
|
|
59
|
+
static validateGetIndexChangeOptions(options) {
|
|
60
|
+
this.validateGetRecordOptions(options);
|
|
61
|
+
if (typeof options.timeInterval !== "number" || options.timeInterval <= 0) {
|
|
62
|
+
throw new Error("Invalid timeInterval parameter: must be a positive number");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validates GetFirstRecordOptions parameters
|
|
67
|
+
*/
|
|
68
|
+
static validateGetFirstRecordOptions(options) {
|
|
69
|
+
if (options.after !== void 0 && (typeof options.after !== "number" || options.after < 0)) {
|
|
70
|
+
throw new Error("Invalid after parameter: must be a non-negative number");
|
|
71
|
+
}
|
|
72
|
+
if (options.frozenAt !== void 0 && (typeof options.frozenAt !== "number" || options.frozenAt < 0)) {
|
|
73
|
+
throw new Error("Invalid frozenAt parameter: must be a non-negative number");
|
|
74
|
+
}
|
|
75
|
+
if (options.useCache !== void 0 && typeof options.useCache !== "boolean") {
|
|
76
|
+
throw new Error("Invalid useCache parameter: must be a boolean");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validates time range parameters
|
|
81
|
+
*/
|
|
82
|
+
static validateTimeRange(from, to) {
|
|
83
|
+
if (from !== void 0 && to !== void 0 && from > to) {
|
|
84
|
+
throw new Error("Invalid time range: from time cannot be greater than to time");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=cacheValidation.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util/cacheValidation.ts"],
|
|
4
|
+
"sourcesContent": ["import { GetRecordOptions, GetIndexOptions, GetIndexChangeOptions, GetFirstRecordOptions } from '../types/cache';\n\n/**\n * Validation utilities for cache-related parameters\n */\nexport class CacheValidation {\n /**\n * Validates GetRecordOptions parameters\n */\n static validateGetRecordOptions(options: GetRecordOptions): void {\n if (options.from !== undefined && (typeof options.from !== 'number' || options.from < 0)) {\n throw new Error('Invalid from parameter: must be a non-negative number');\n }\n \n if (options.to !== undefined && (typeof options.to !== 'number' || options.to < 0)) {\n throw new Error('Invalid to parameter: must be a non-negative number');\n }\n \n if (options.frozenAt !== undefined && (typeof options.frozenAt !== 'number' || options.frozenAt < 0)) {\n throw new Error('Invalid frozenAt parameter: must be a non-negative number');\n }\n \n if (options.useCache !== undefined && typeof options.useCache !== 'boolean') {\n throw new Error('Invalid useCache parameter: must be a boolean');\n }\n \n if (options.prefix !== undefined && typeof options.prefix !== 'string') {\n throw new Error('Invalid prefix parameter: must be a string');\n }\n \n if (options.baseTime !== undefined && typeof options.baseTime !== 'number' && typeof options.baseTime !== 'string') {\n throw new Error('Invalid baseTime parameter: must be a number or string');\n }\n }\n \n /**\n * Validates GetIndexOptions parameters\n */\n static validateGetIndexOptions(options: GetIndexOptions): void {\n // GetIndexOptions has the same validation as GetRecordOptions\n this.validateGetRecordOptions(options);\n }\n \n /**\n * Validates GetIndexChangeOptions parameters\n */\n static validateGetIndexChangeOptions(options: GetIndexChangeOptions): void {\n // Validate base options\n this.validateGetRecordOptions(options);\n \n // Validate timeInterval - required for index change\n if (typeof options.timeInterval !== 'number' || options.timeInterval <= 0) {\n throw new Error('Invalid timeInterval parameter: must be a positive number');\n }\n }\n \n /**\n * Validates GetFirstRecordOptions parameters\n */\n static validateGetFirstRecordOptions(options: GetFirstRecordOptions): void {\n if (options.after !== undefined && (typeof options.after !== 'number' || options.after < 0)) {\n throw new Error('Invalid after parameter: must be a non-negative number');\n }\n \n if (options.frozenAt !== undefined && (typeof options.frozenAt !== 'number' || options.frozenAt < 0)) {\n throw new Error('Invalid frozenAt parameter: must be a non-negative number');\n }\n \n if (options.useCache !== undefined && typeof options.useCache !== 'boolean') {\n throw new Error('Invalid useCache parameter: must be a boolean');\n }\n }\n \n /**\n * Validates time range parameters\n */\n static validateTimeRange(from?: number, to?: number): void {\n if (from !== undefined && to !== undefined && from > to) {\n throw new Error('Invalid time range: from time cannot be greater than to time');\n }\n }\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,IAAM,kBAAN,MAAsB;AAAA;AAAA;AAAA;AAAA,EAI3B,OAAO,yBAAyB,SAAiC;AAC/D,QAAI,QAAQ,SAAS,WAAc,OAAO,QAAQ,SAAS,YAAY,QAAQ,OAAO,IAAI;AACxF,YAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AAEA,QAAI,QAAQ,OAAO,WAAc,OAAO,QAAQ,OAAO,YAAY,QAAQ,KAAK,IAAI;AAClF,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACvE;AAEA,QAAI,QAAQ,aAAa,WAAc,OAAO,QAAQ,aAAa,YAAY,QAAQ,WAAW,IAAI;AACpG,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAEA,QAAI,QAAQ,aAAa,UAAa,OAAO,QAAQ,aAAa,WAAW;AAC3E,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAEA,QAAI,QAAQ,WAAW,UAAa,OAAO,QAAQ,WAAW,UAAU;AACtE,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAEA,QAAI,QAAQ,aAAa,UAAa,OAAO,QAAQ,aAAa,YAAY,OAAO,QAAQ,aAAa,UAAU;AAClH,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,wBAAwB,SAAgC;AAE7D,SAAK,yBAAyB,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,8BAA8B,SAAsC;AAEzE,SAAK,yBAAyB,OAAO;AAGrC,QAAI,OAAO,QAAQ,iBAAiB,YAAY,QAAQ,gBAAgB,GAAG;AACzE,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,8BAA8B,SAAsC;AACzE,QAAI,QAAQ,UAAU,WAAc,OAAO,QAAQ,UAAU,YAAY,QAAQ,QAAQ,IAAI;AAC3F,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AAEA,QAAI,QAAQ,aAAa,WAAc,OAAO,QAAQ,aAAa,YAAY,QAAQ,WAAW,IAAI;AACpG,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAEA,QAAI,QAAQ,aAAa,UAAa,OAAO,QAAQ,aAAa,WAAW;AAC3E,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAkB,MAAe,IAAmB;AACzD,QAAI,SAAS,UAAa,OAAO,UAAa,OAAO,IAAI;AACvD,YAAM,IAAI,MAAM,8DAA8D;AAAA,IAChF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/util/cacheValidation.test.ts
|
|
4
|
+
var import_vitest = require("vitest");
|
|
5
|
+
var import_cacheValidation = require("./cacheValidation.cjs");
|
|
6
|
+
(0, import_vitest.describe)("CacheValidation", () => {
|
|
7
|
+
(0, import_vitest.describe)("validateGetRecordOptions", () => {
|
|
8
|
+
(0, import_vitest.it)("should validate correct options", () => {
|
|
9
|
+
const options = {
|
|
10
|
+
from: 1609459200,
|
|
11
|
+
to: 1609545600,
|
|
12
|
+
frozenAt: 1609459200,
|
|
13
|
+
useCache: true,
|
|
14
|
+
prefix: "test_",
|
|
15
|
+
baseTime: 1609459200
|
|
16
|
+
};
|
|
17
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions(options)).not.toThrow();
|
|
18
|
+
});
|
|
19
|
+
(0, import_vitest.it)("should validate options with string baseTime", () => {
|
|
20
|
+
const options = {
|
|
21
|
+
baseTime: "2021-01-01",
|
|
22
|
+
useCache: true
|
|
23
|
+
};
|
|
24
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions(options)).not.toThrow();
|
|
25
|
+
});
|
|
26
|
+
(0, import_vitest.it)("should validate empty options", () => {
|
|
27
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({})).not.toThrow();
|
|
28
|
+
});
|
|
29
|
+
(0, import_vitest.it)("should throw for invalid from parameter", () => {
|
|
30
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ from: -1 })).toThrow("Invalid from parameter: must be a non-negative number");
|
|
31
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ from: "invalid" })).toThrow("Invalid from parameter: must be a non-negative number");
|
|
32
|
+
});
|
|
33
|
+
(0, import_vitest.it)("should throw for invalid to parameter", () => {
|
|
34
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ to: -1 })).toThrow("Invalid to parameter: must be a non-negative number");
|
|
35
|
+
});
|
|
36
|
+
(0, import_vitest.it)("should throw for invalid frozenAt parameter", () => {
|
|
37
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ frozenAt: -1 })).toThrow("Invalid frozenAt parameter: must be a non-negative number");
|
|
38
|
+
});
|
|
39
|
+
(0, import_vitest.it)("should throw for invalid useCache parameter", () => {
|
|
40
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ useCache: "true" })).toThrow("Invalid useCache parameter: must be a boolean");
|
|
41
|
+
});
|
|
42
|
+
(0, import_vitest.it)("should throw for invalid prefix parameter", () => {
|
|
43
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ prefix: 123 })).toThrow("Invalid prefix parameter: must be a string");
|
|
44
|
+
});
|
|
45
|
+
(0, import_vitest.it)("should throw for invalid baseTime parameter", () => {
|
|
46
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetRecordOptions({ baseTime: true })).toThrow("Invalid baseTime parameter: must be a number or string");
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
(0, import_vitest.describe)("validateGetIndexChangeOptions", () => {
|
|
50
|
+
(0, import_vitest.it)("should validate correct options", () => {
|
|
51
|
+
const options = {
|
|
52
|
+
from: 1609459200,
|
|
53
|
+
to: 1609545600,
|
|
54
|
+
timeInterval: 3600,
|
|
55
|
+
useCache: true
|
|
56
|
+
};
|
|
57
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetIndexChangeOptions(options)).not.toThrow();
|
|
58
|
+
});
|
|
59
|
+
(0, import_vitest.it)("should throw for missing timeInterval", () => {
|
|
60
|
+
const options = {
|
|
61
|
+
from: 1609459200,
|
|
62
|
+
to: 1609545600
|
|
63
|
+
};
|
|
64
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetIndexChangeOptions(options)).toThrow("Invalid timeInterval parameter: must be a positive number");
|
|
65
|
+
});
|
|
66
|
+
(0, import_vitest.it)("should throw for invalid timeInterval", () => {
|
|
67
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetIndexChangeOptions({ timeInterval: -1 })).toThrow("Invalid timeInterval parameter: must be a positive number");
|
|
68
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetIndexChangeOptions({ timeInterval: 0 })).toThrow("Invalid timeInterval parameter: must be a positive number");
|
|
69
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetIndexChangeOptions({ timeInterval: "invalid" })).toThrow("Invalid timeInterval parameter: must be a positive number");
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
(0, import_vitest.describe)("validateGetFirstRecordOptions", () => {
|
|
73
|
+
(0, import_vitest.it)("should validate correct options", () => {
|
|
74
|
+
const options = {
|
|
75
|
+
after: 1609459200,
|
|
76
|
+
frozenAt: 1609459200,
|
|
77
|
+
useCache: true
|
|
78
|
+
};
|
|
79
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetFirstRecordOptions(options)).not.toThrow();
|
|
80
|
+
});
|
|
81
|
+
(0, import_vitest.it)("should throw for invalid after parameter", () => {
|
|
82
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetFirstRecordOptions({ after: -1 })).toThrow("Invalid after parameter: must be a non-negative number");
|
|
83
|
+
});
|
|
84
|
+
(0, import_vitest.it)("should throw for invalid frozenAt parameter", () => {
|
|
85
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetFirstRecordOptions({ frozenAt: -1 })).toThrow("Invalid frozenAt parameter: must be a non-negative number");
|
|
86
|
+
});
|
|
87
|
+
(0, import_vitest.it)("should throw for invalid useCache parameter", () => {
|
|
88
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateGetFirstRecordOptions({ useCache: "true" })).toThrow("Invalid useCache parameter: must be a boolean");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
(0, import_vitest.describe)("validateTimeRange", () => {
|
|
92
|
+
(0, import_vitest.it)("should validate correct time range", () => {
|
|
93
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateTimeRange(1609459200, 1609545600)).not.toThrow();
|
|
94
|
+
});
|
|
95
|
+
(0, import_vitest.it)("should validate undefined parameters", () => {
|
|
96
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateTimeRange(void 0, void 0)).not.toThrow();
|
|
97
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateTimeRange(1609459200, void 0)).not.toThrow();
|
|
98
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateTimeRange(void 0, 1609545600)).not.toThrow();
|
|
99
|
+
});
|
|
100
|
+
(0, import_vitest.it)("should validate equal times", () => {
|
|
101
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateTimeRange(1609459200, 1609459200)).not.toThrow();
|
|
102
|
+
});
|
|
103
|
+
(0, import_vitest.it)("should throw for invalid time range", () => {
|
|
104
|
+
(0, import_vitest.expect)(() => import_cacheValidation.CacheValidation.validateTimeRange(1609545600, 1609459200)).toThrow("Invalid time range: from time cannot be greater than to time");
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=cacheValidation.test.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util/cacheValidation.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, it, expect } from 'vitest';\nimport { CacheValidation } from './cacheValidation';\n\ndescribe('CacheValidation', () => {\n describe('validateGetRecordOptions', () => {\n it('should validate correct options', () => {\n const options = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n useCache: true,\n prefix: 'test_',\n baseTime: 1609459200\n };\n \n expect(() => CacheValidation.validateGetRecordOptions(options)).not.toThrow();\n });\n\n it('should validate options with string baseTime', () => {\n const options = {\n baseTime: '2021-01-01',\n useCache: true\n };\n \n expect(() => CacheValidation.validateGetRecordOptions(options)).not.toThrow();\n });\n\n it('should validate empty options', () => {\n expect(() => CacheValidation.validateGetRecordOptions({})).not.toThrow();\n });\n\n it('should throw for invalid from parameter', () => {\n expect(() => CacheValidation.validateGetRecordOptions({ from: -1 }))\n .toThrow('Invalid from parameter: must be a non-negative number');\n \n expect(() => CacheValidation.validateGetRecordOptions({ from: 'invalid' as any }))\n .toThrow('Invalid from parameter: must be a non-negative number');\n });\n\n it('should throw for invalid to parameter', () => {\n expect(() => CacheValidation.validateGetRecordOptions({ to: -1 }))\n .toThrow('Invalid to parameter: must be a non-negative number');\n });\n\n it('should throw for invalid frozenAt parameter', () => {\n expect(() => CacheValidation.validateGetRecordOptions({ frozenAt: -1 }))\n .toThrow('Invalid frozenAt parameter: must be a non-negative number');\n });\n\n it('should throw for invalid useCache parameter', () => {\n expect(() => CacheValidation.validateGetRecordOptions({ useCache: 'true' as any }))\n .toThrow('Invalid useCache parameter: must be a boolean');\n });\n\n it('should throw for invalid prefix parameter', () => {\n expect(() => CacheValidation.validateGetRecordOptions({ prefix: 123 as any }))\n .toThrow('Invalid prefix parameter: must be a string');\n });\n\n it('should throw for invalid baseTime parameter', () => {\n expect(() => CacheValidation.validateGetRecordOptions({ baseTime: true as any }))\n .toThrow('Invalid baseTime parameter: must be a number or string');\n });\n });\n\n describe('validateGetIndexChangeOptions', () => {\n it('should validate correct options', () => {\n const options = {\n from: 1609459200,\n to: 1609545600,\n timeInterval: 3600,\n useCache: true\n };\n \n expect(() => CacheValidation.validateGetIndexChangeOptions(options)).not.toThrow();\n });\n\n it('should throw for missing timeInterval', () => {\n const options = {\n from: 1609459200,\n to: 1609545600\n };\n \n expect(() => CacheValidation.validateGetIndexChangeOptions(options as any))\n .toThrow('Invalid timeInterval parameter: must be a positive number');\n });\n\n it('should throw for invalid timeInterval', () => {\n expect(() => CacheValidation.validateGetIndexChangeOptions({ timeInterval: -1 }))\n .toThrow('Invalid timeInterval parameter: must be a positive number');\n \n expect(() => CacheValidation.validateGetIndexChangeOptions({ timeInterval: 0 }))\n .toThrow('Invalid timeInterval parameter: must be a positive number');\n \n expect(() => CacheValidation.validateGetIndexChangeOptions({ timeInterval: 'invalid' as any }))\n .toThrow('Invalid timeInterval parameter: must be a positive number');\n });\n });\n\n describe('validateGetFirstRecordOptions', () => {\n it('should validate correct options', () => {\n const options = {\n after: 1609459200,\n frozenAt: 1609459200,\n useCache: true\n };\n \n expect(() => CacheValidation.validateGetFirstRecordOptions(options)).not.toThrow();\n });\n\n it('should throw for invalid after parameter', () => {\n expect(() => CacheValidation.validateGetFirstRecordOptions({ after: -1 }))\n .toThrow('Invalid after parameter: must be a non-negative number');\n });\n\n it('should throw for invalid frozenAt parameter', () => {\n expect(() => CacheValidation.validateGetFirstRecordOptions({ frozenAt: -1 }))\n .toThrow('Invalid frozenAt parameter: must be a non-negative number');\n });\n\n it('should throw for invalid useCache parameter', () => {\n expect(() => CacheValidation.validateGetFirstRecordOptions({ useCache: 'true' as any }))\n .toThrow('Invalid useCache parameter: must be a boolean');\n });\n });\n\n describe('validateTimeRange', () => {\n it('should validate correct time range', () => {\n expect(() => CacheValidation.validateTimeRange(1609459200, 1609545600)).not.toThrow();\n });\n\n it('should validate undefined parameters', () => {\n expect(() => CacheValidation.validateTimeRange(undefined, undefined)).not.toThrow();\n expect(() => CacheValidation.validateTimeRange(1609459200, undefined)).not.toThrow();\n expect(() => CacheValidation.validateTimeRange(undefined, 1609545600)).not.toThrow();\n });\n\n it('should validate equal times', () => {\n expect(() => CacheValidation.validateTimeRange(1609459200, 1609459200)).not.toThrow();\n });\n\n it('should throw for invalid time range', () => {\n expect(() => CacheValidation.validateTimeRange(1609545600, 1609459200))\n .toThrow('Invalid time range: from time cannot be greater than to time');\n });\n });\n});"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/client/browserClient.ts"],
|
|
4
|
-
"sourcesContent": ["import { EnvironmentType } from \"@
|
|
4
|
+
"sourcesContent": ["import { EnvironmentType } from \"@trufnetwork/kwil-js/dist/core/enums\";\nimport { WebKwil } from \"@trufnetwork/kwil-js\";\nimport { BaseTNClient, TNClientOptions } from \"./client\";\n\nexport class BrowserTNClient extends BaseTNClient<EnvironmentType.BROWSER> {\n constructor(options: TNClientOptions) {\n super(options);\n this.kwilClient = new WebKwil({\n ...options,\n timeout: options.timeout ?? 30000,\n kwilProvider: options.endpoint,\n });\n }\n}\n\nexport default BrowserTNClient;\n"],
|
|
5
5
|
"mappings": ";AACA,SAAS,eAAe;AACxB,SAAS,oBAAqC;AAEvC,IAAM,kBAAN,cAA8B,aAAsC;AAAA,EACzE,YAAY,SAA0B;AACpC,UAAM,OAAO;AACb,SAAK,aAAa,IAAI,QAAQ;AAAA,MAC5B,GAAG;AAAA,MACH,SAAS,QAAQ,WAAW;AAAA,MAC5B,cAAc,QAAQ;AAAA,IACxB,CAAC;AAAA,EACH;AACF;AAEA,IAAO,wBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|