@trufnetwork/sdk-js 0.3.8 → 0.4.2

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.
Files changed (78) hide show
  1. package/dist/cjs/client/client.cjs +44 -0
  2. package/dist/cjs/client/client.cjs.map +2 -2
  3. package/dist/cjs/contracts-api/action.cjs +301 -77
  4. package/dist/cjs/contracts-api/action.cjs.map +3 -3
  5. package/dist/cjs/contracts-api/cache.integration.test.cjs +265 -0
  6. package/dist/cjs/contracts-api/cache.integration.test.cjs.map +7 -0
  7. package/dist/cjs/contracts-api/composedAction.cjs +86 -0
  8. package/dist/cjs/contracts-api/composedAction.cjs.map +2 -2
  9. package/dist/cjs/contracts-api/composedAction.test.cjs +301 -0
  10. package/dist/cjs/contracts-api/composedAction.test.cjs.map +7 -0
  11. package/dist/cjs/index.common.cjs.map +1 -1
  12. package/dist/cjs/types/cache.cjs +34 -0
  13. package/dist/cjs/types/cache.cjs.map +7 -0
  14. package/dist/cjs/types/cache.test.cjs +205 -0
  15. package/dist/cjs/types/cache.test.cjs.map +7 -0
  16. package/dist/cjs/util/cacheMetadataParser.cjs +174 -0
  17. package/dist/cjs/util/cacheMetadataParser.cjs.map +7 -0
  18. package/dist/cjs/util/cacheMetadataParser.test.cjs +329 -0
  19. package/dist/cjs/util/cacheMetadataParser.test.cjs.map +7 -0
  20. package/dist/cjs/util/cacheValidation.cjs +88 -0
  21. package/dist/cjs/util/cacheValidation.cjs.map +7 -0
  22. package/dist/cjs/util/cacheValidation.test.cjs +108 -0
  23. package/dist/cjs/util/cacheValidation.test.cjs.map +7 -0
  24. package/dist/esm/client/client.mjs +44 -0
  25. package/dist/esm/client/client.mjs.map +2 -2
  26. package/dist/esm/contracts-api/action.mjs +302 -77
  27. package/dist/esm/contracts-api/action.mjs.map +3 -3
  28. package/dist/esm/contracts-api/cache.integration.test.mjs +263 -0
  29. package/dist/esm/contracts-api/cache.integration.test.mjs.map +7 -0
  30. package/dist/esm/contracts-api/composedAction.mjs +86 -0
  31. package/dist/esm/contracts-api/composedAction.mjs.map +2 -2
  32. package/dist/esm/contracts-api/composedAction.test.mjs +299 -0
  33. package/dist/esm/contracts-api/composedAction.test.mjs.map +7 -0
  34. package/dist/esm/index.common.mjs.map +1 -1
  35. package/dist/esm/types/cache.mjs +13 -0
  36. package/dist/esm/types/cache.mjs.map +7 -0
  37. package/dist/esm/types/cache.test.mjs +203 -0
  38. package/dist/esm/types/cache.test.mjs.map +7 -0
  39. package/dist/esm/util/cacheMetadataParser.mjs +153 -0
  40. package/dist/esm/util/cacheMetadataParser.mjs.map +7 -0
  41. package/dist/esm/util/cacheMetadataParser.test.mjs +327 -0
  42. package/dist/esm/util/cacheMetadataParser.test.mjs.map +7 -0
  43. package/dist/esm/util/cacheValidation.mjs +67 -0
  44. package/dist/esm/util/cacheValidation.mjs.map +7 -0
  45. package/dist/esm/util/cacheValidation.test.mjs +106 -0
  46. package/dist/esm/util/cacheValidation.test.mjs.map +7 -0
  47. package/dist/tsconfig.build.tsbuildinfo +1 -1
  48. package/dist/types/client/client.d.ts +39 -1
  49. package/dist/types/client/client.d.ts.map +1 -1
  50. package/dist/types/contracts-api/action.d.ts +11 -1
  51. package/dist/types/contracts-api/action.d.ts.map +1 -1
  52. package/dist/types/contracts-api/cache.integration.test.d.ts +2 -0
  53. package/dist/types/contracts-api/cache.integration.test.d.ts.map +1 -0
  54. package/dist/types/contracts-api/composedAction.d.ts +75 -0
  55. package/dist/types/contracts-api/composedAction.d.ts.map +1 -1
  56. package/dist/types/contracts-api/composedAction.test.d.ts +2 -0
  57. package/dist/types/contracts-api/composedAction.test.d.ts.map +1 -0
  58. package/dist/types/index.common.d.ts +1 -1
  59. package/dist/types/index.common.d.ts.map +1 -1
  60. package/dist/types/types/cache.d.ts +129 -0
  61. package/dist/types/types/cache.d.ts.map +1 -0
  62. package/dist/types/types/cache.test.d.ts +2 -0
  63. package/dist/types/types/cache.test.d.ts.map +1 -0
  64. package/dist/types/util/cacheMetadataParser.d.ts +38 -0
  65. package/dist/types/util/cacheMetadataParser.d.ts.map +1 -0
  66. package/dist/types/util/cacheMetadataParser.test.d.ts +2 -0
  67. package/dist/types/util/cacheMetadataParser.test.d.ts.map +1 -0
  68. package/dist/types/util/cacheValidation.d.ts +27 -0
  69. package/dist/types/util/cacheValidation.d.ts.map +1 -0
  70. package/dist/types/util/cacheValidation.test.d.ts +2 -0
  71. package/dist/types/util/cacheValidation.test.d.ts.map +1 -0
  72. package/package.json +5 -3
  73. package/dist/cjs/client/client.test.cjs +0 -32
  74. package/dist/cjs/client/client.test.cjs.map +0 -7
  75. package/dist/esm/client/client.test.mjs +0 -30
  76. package/dist/esm/client/client.test.mjs.map +0 -7
  77. package/dist/types/client/client.test.d.ts +0 -2
  78. package/dist/types/client/client.test.d.ts.map +0 -1
@@ -0,0 +1,299 @@
1
+ // src/contracts-api/composedAction.test.ts
2
+ import { describe, test, expect, vi } from "vitest";
3
+ import { ComposedAction } from "./composedAction.mjs";
4
+ import { EthereumAddress } from "../util/EthereumAddress.mjs";
5
+ import { StreamId } from "../util/StreamId.mjs";
6
+ describe("ComposedAction Taxonomy Query Methods", () => {
7
+ const createMockClient = (mockResponse) => ({
8
+ call: vi.fn().mockResolvedValue({
9
+ status: 200,
10
+ data: {
11
+ result: mockResponse
12
+ }
13
+ })
14
+ });
15
+ const mockSigner = {};
16
+ test("listTaxonomiesByHeight calls correct action with parameters", async () => {
17
+ const mockResponse = [
18
+ {
19
+ data_provider: "0x1234567890abcdef1234567890abcdef12345678",
20
+ stream_id: "test-stream",
21
+ child_data_provider: "0xabcdef1234567890abcdef1234567890abcdef12",
22
+ child_stream_id: "child-stream",
23
+ weight: "100.5",
24
+ created_at: 1e3,
25
+ group_sequence: 1,
26
+ start_time: 1625097600
27
+ }
28
+ ];
29
+ const mockClient = createMockClient(mockResponse);
30
+ const composedAction = new ComposedAction(mockClient, mockSigner);
31
+ const result = await composedAction.listTaxonomiesByHeight({
32
+ fromHeight: 1e3,
33
+ toHeight: 2e3,
34
+ limit: 100,
35
+ offset: 10,
36
+ latestOnly: true
37
+ });
38
+ expect(mockClient.call).toHaveBeenCalledWith(
39
+ {
40
+ namespace: "main",
41
+ name: "list_taxonomies_by_height",
42
+ inputs: {
43
+ $from_height: 1e3,
44
+ $to_height: 2e3,
45
+ $limit: 100,
46
+ $offset: 10,
47
+ $latest_only: true
48
+ }
49
+ },
50
+ {}
51
+ );
52
+ expect(result).toHaveLength(1);
53
+ expect(result[0].dataProvider.getAddress()).toBe("0x1234567890abcdef1234567890abcdef12345678");
54
+ expect(result[0].streamId.getId()).toBe("test-stream");
55
+ expect(result[0].childDataProvider.getAddress()).toBe("0xabcdef1234567890abcdef1234567890abcdef12");
56
+ expect(result[0].childStreamId.getId()).toBe("child-stream");
57
+ expect(result[0].weight).toBe("100.5");
58
+ expect(result[0].createdAt).toBe(1e3);
59
+ expect(result[0].groupSequence).toBe(1);
60
+ expect(result[0].startTime).toBe(1625097600);
61
+ });
62
+ test("listTaxonomiesByHeight handles default parameters", async () => {
63
+ const mockClient = createMockClient([]);
64
+ const composedAction = new ComposedAction(mockClient, mockSigner);
65
+ await composedAction.listTaxonomiesByHeight({});
66
+ expect(mockClient.call).toHaveBeenCalledWith(
67
+ {
68
+ namespace: "main",
69
+ name: "list_taxonomies_by_height",
70
+ inputs: {
71
+ $from_height: null,
72
+ $to_height: null,
73
+ $limit: null,
74
+ $offset: null,
75
+ $latest_only: null
76
+ }
77
+ },
78
+ {}
79
+ );
80
+ });
81
+ test("listTaxonomiesByHeight handles empty parameters", async () => {
82
+ const mockClient = createMockClient([]);
83
+ const composedAction = new ComposedAction(mockClient, mockSigner);
84
+ await composedAction.listTaxonomiesByHeight();
85
+ expect(mockClient.call).toHaveBeenCalledWith(
86
+ {
87
+ namespace: "main",
88
+ name: "list_taxonomies_by_height",
89
+ inputs: {
90
+ $from_height: null,
91
+ $to_height: null,
92
+ $limit: null,
93
+ $offset: null,
94
+ $latest_only: null
95
+ }
96
+ },
97
+ {}
98
+ );
99
+ });
100
+ test("getTaxonomiesForStreams calls correct action with stream arrays", async () => {
101
+ const mockResponse = [
102
+ {
103
+ data_provider: "0x1111111111111111111111111111111111111111",
104
+ stream_id: "stream-1",
105
+ child_data_provider: "0x2222222222222222222222222222222222222222",
106
+ child_stream_id: "child-1",
107
+ weight: "50.0",
108
+ created_at: 2e3,
109
+ group_sequence: 2,
110
+ start_time: 1625097700
111
+ }
112
+ ];
113
+ const mockClient = createMockClient(mockResponse);
114
+ const composedAction = new ComposedAction(mockClient, mockSigner);
115
+ const testStreams = [
116
+ {
117
+ dataProvider: EthereumAddress.fromString("0x1111111111111111111111111111111111111111").throw(),
118
+ streamId: StreamId.fromString("stream-1").throw()
119
+ },
120
+ {
121
+ dataProvider: EthereumAddress.fromString("0x3333333333333333333333333333333333333333").throw(),
122
+ streamId: StreamId.fromString("stream-2").throw()
123
+ }
124
+ ];
125
+ const result = await composedAction.getTaxonomiesForStreams({
126
+ streams: testStreams,
127
+ latestOnly: false
128
+ });
129
+ expect(mockClient.call).toHaveBeenCalledWith(
130
+ {
131
+ namespace: "main",
132
+ name: "get_taxonomies_for_streams",
133
+ inputs: {
134
+ $data_providers: [
135
+ "0x1111111111111111111111111111111111111111",
136
+ "0x3333333333333333333333333333333333333333"
137
+ ],
138
+ $stream_ids: ["stream-1", "stream-2"],
139
+ $latest_only: false
140
+ }
141
+ },
142
+ {}
143
+ );
144
+ expect(result).toHaveLength(1);
145
+ expect(result[0].dataProvider.getAddress()).toBe("0x1111111111111111111111111111111111111111");
146
+ expect(result[0].streamId.getId()).toBe("stream-1");
147
+ expect(result[0].weight).toBe("50.0");
148
+ });
149
+ test("getTaxonomiesForStreams handles empty stream array", async () => {
150
+ const mockClient = createMockClient([]);
151
+ const composedAction = new ComposedAction(mockClient, mockSigner);
152
+ const result = await composedAction.getTaxonomiesForStreams({
153
+ streams: [],
154
+ latestOnly: true
155
+ });
156
+ expect(mockClient.call).not.toHaveBeenCalled();
157
+ expect(result).toEqual([]);
158
+ });
159
+ test("getTaxonomiesForStreams handles latestOnly parameter", async () => {
160
+ const mockClient = createMockClient([]);
161
+ const composedAction = new ComposedAction(mockClient, mockSigner);
162
+ const testStreams = [
163
+ {
164
+ dataProvider: EthereumAddress.fromString("0x1111111111111111111111111111111111111111").throw(),
165
+ streamId: StreamId.fromString("stream-1").throw()
166
+ }
167
+ ];
168
+ await composedAction.getTaxonomiesForStreams({
169
+ streams: testStreams,
170
+ latestOnly: true
171
+ });
172
+ expect(mockClient.call).toHaveBeenCalledWith(
173
+ {
174
+ namespace: "main",
175
+ name: "get_taxonomies_for_streams",
176
+ inputs: expect.objectContaining({
177
+ $latest_only: true
178
+ })
179
+ },
180
+ {}
181
+ );
182
+ });
183
+ test("getTaxonomiesForStreams handles default latestOnly parameter", async () => {
184
+ const mockClient = createMockClient([]);
185
+ const composedAction = new ComposedAction(mockClient, mockSigner);
186
+ const testStreams = [
187
+ {
188
+ dataProvider: EthereumAddress.fromString("0x1111111111111111111111111111111111111111").throw(),
189
+ streamId: StreamId.fromString("stream-1").throw()
190
+ }
191
+ ];
192
+ await composedAction.getTaxonomiesForStreams({
193
+ streams: testStreams
194
+ });
195
+ expect(mockClient.call).toHaveBeenCalledWith(
196
+ {
197
+ namespace: "main",
198
+ name: "get_taxonomies_for_streams",
199
+ inputs: expect.objectContaining({
200
+ $latest_only: null
201
+ })
202
+ },
203
+ {}
204
+ );
205
+ });
206
+ test("listTaxonomiesByHeight handles network error", async () => {
207
+ const mockClient = {
208
+ call: vi.fn().mockResolvedValue({
209
+ status: 500,
210
+ data: null
211
+ })
212
+ };
213
+ const composedAction = new ComposedAction(mockClient, mockSigner);
214
+ await expect(
215
+ composedAction.listTaxonomiesByHeight({
216
+ fromHeight: 1e3,
217
+ toHeight: 2e3
218
+ })
219
+ ).rejects.toThrow();
220
+ });
221
+ test("getTaxonomiesForStreams handles network error", async () => {
222
+ const mockClient = {
223
+ call: vi.fn().mockResolvedValue({
224
+ status: 404,
225
+ data: null
226
+ })
227
+ };
228
+ const composedAction = new ComposedAction(mockClient, mockSigner);
229
+ const testStreams = [
230
+ {
231
+ dataProvider: EthereumAddress.fromString("0x1111111111111111111111111111111111111111").throw(),
232
+ streamId: StreamId.fromString("stream-1").throw()
233
+ }
234
+ ];
235
+ await expect(
236
+ composedAction.getTaxonomiesForStreams({
237
+ streams: testStreams
238
+ })
239
+ ).rejects.toThrow();
240
+ });
241
+ test("methods handle multiple results correctly", async () => {
242
+ const mockResponse = [
243
+ {
244
+ data_provider: "0x1111111111111111111111111111111111111111",
245
+ stream_id: "stream-1",
246
+ child_data_provider: "0x2222222222222222222222222222222222222222",
247
+ child_stream_id: "child-1",
248
+ weight: "50.0",
249
+ created_at: 2e3,
250
+ group_sequence: 1,
251
+ start_time: 1625097600
252
+ },
253
+ {
254
+ data_provider: "0x1111111111111111111111111111111111111111",
255
+ stream_id: "stream-1",
256
+ child_data_provider: "0x3333333333333333333333333333333333333333",
257
+ child_stream_id: "child-2",
258
+ weight: "25.5",
259
+ created_at: 2e3,
260
+ group_sequence: 1,
261
+ start_time: 1625097600
262
+ }
263
+ ];
264
+ const mockClient = createMockClient(mockResponse);
265
+ const composedAction = new ComposedAction(mockClient, mockSigner);
266
+ const result = await composedAction.listTaxonomiesByHeight({ limit: 10 });
267
+ expect(result).toHaveLength(2);
268
+ expect(result[0].childStreamId.getId()).toBe("child-1");
269
+ expect(result[1].childStreamId.getId()).toBe("child-2");
270
+ expect(result[0].weight).toBe("50.0");
271
+ expect(result[1].weight).toBe("25.5");
272
+ });
273
+ test("methods handle address parsing correctly", async () => {
274
+ const mockResponse = [
275
+ {
276
+ data_provider: "0x1234567890abcdef1234567890abcdef12345678",
277
+ stream_id: "test-stream",
278
+ child_data_provider: "0xabcdef1234567890abcdef1234567890abcdef12",
279
+ child_stream_id: "child-stream",
280
+ weight: "100.0",
281
+ created_at: 1e3,
282
+ group_sequence: 1,
283
+ start_time: 1625097600
284
+ }
285
+ ];
286
+ const mockClient = createMockClient(mockResponse);
287
+ const composedAction = new ComposedAction(mockClient, mockSigner);
288
+ const result = await composedAction.listTaxonomiesByHeight();
289
+ expect(result[0].dataProvider).toBeInstanceOf(EthereumAddress);
290
+ expect(result[0].streamId).toBeInstanceOf(StreamId);
291
+ expect(result[0].childDataProvider).toBeInstanceOf(EthereumAddress);
292
+ expect(result[0].childStreamId).toBeInstanceOf(StreamId);
293
+ expect(result[0].dataProvider.getAddress()).toBe("0x1234567890abcdef1234567890abcdef12345678");
294
+ expect(result[0].streamId.getId()).toBe("test-stream");
295
+ expect(result[0].childDataProvider.getAddress()).toBe("0xabcdef1234567890abcdef1234567890abcdef12");
296
+ expect(result[0].childStreamId.getId()).toBe("child-stream");
297
+ });
298
+ });
299
+ //# sourceMappingURL=composedAction.test.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/contracts-api/composedAction.test.ts"],
4
+ "sourcesContent": ["import { describe, test, expect, vi } from 'vitest'\r\nimport { ComposedAction } from './composedAction'\r\nimport { EthereumAddress } from '../util/EthereumAddress'\r\nimport { StreamId } from '../util/StreamId'\r\n\r\ndescribe('ComposedAction Taxonomy Query Methods', () => {\r\n const createMockClient = (mockResponse: any) => ({\r\n call: vi.fn().mockResolvedValue({\r\n status: 200,\r\n data: {\r\n result: mockResponse\r\n }\r\n })\r\n });\r\n\r\n const mockSigner = {};\r\n\r\n test('listTaxonomiesByHeight calls correct action with parameters', async () => {\r\n const mockResponse = [\r\n {\r\n data_provider: '0x1234567890abcdef1234567890abcdef12345678',\r\n stream_id: 'test-stream',\r\n child_data_provider: '0xabcdef1234567890abcdef1234567890abcdef12',\r\n child_stream_id: 'child-stream',\r\n weight: '100.5',\r\n created_at: 1000,\r\n group_sequence: 1,\r\n start_time: 1625097600\r\n }\r\n ];\r\n\r\n const mockClient = createMockClient(mockResponse);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const result = await composedAction.listTaxonomiesByHeight({\r\n fromHeight: 1000,\r\n toHeight: 2000,\r\n limit: 100,\r\n offset: 10,\r\n latestOnly: true\r\n });\r\n\r\n // Verify the call was made correctly\r\n expect(mockClient.call).toHaveBeenCalledWith(\r\n {\r\n namespace: \"main\",\r\n name: 'list_taxonomies_by_height',\r\n inputs: {\r\n $from_height: 1000,\r\n $to_height: 2000,\r\n $limit: 100,\r\n $offset: 10,\r\n $latest_only: true,\r\n }\r\n },\r\n {}\r\n );\r\n\r\n // Verify response mapping\r\n expect(result).toHaveLength(1);\r\n expect(result[0].dataProvider.getAddress()).toBe('0x1234567890abcdef1234567890abcdef12345678');\r\n expect(result[0].streamId.getId()).toBe('test-stream');\r\n expect(result[0].childDataProvider.getAddress()).toBe('0xabcdef1234567890abcdef1234567890abcdef12');\r\n expect(result[0].childStreamId.getId()).toBe('child-stream');\r\n expect(result[0].weight).toBe('100.5');\r\n expect(result[0].createdAt).toBe(1000);\r\n expect(result[0].groupSequence).toBe(1);\r\n expect(result[0].startTime).toBe(1625097600);\r\n });\r\n\r\n test('listTaxonomiesByHeight handles default parameters', async () => {\r\n const mockClient = createMockClient([]);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n await composedAction.listTaxonomiesByHeight({});\r\n\r\n expect(mockClient.call).toHaveBeenCalledWith(\r\n {\r\n namespace: \"main\",\r\n name: 'list_taxonomies_by_height',\r\n inputs: {\r\n $from_height: null,\r\n $to_height: null,\r\n $limit: null,\r\n $offset: null,\r\n $latest_only: null,\r\n }\r\n },\r\n {}\r\n );\r\n });\r\n\r\n test('listTaxonomiesByHeight handles empty parameters', async () => {\r\n const mockClient = createMockClient([]);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n await composedAction.listTaxonomiesByHeight();\r\n\r\n expect(mockClient.call).toHaveBeenCalledWith(\r\n {\r\n namespace: \"main\",\r\n name: 'list_taxonomies_by_height',\r\n inputs: {\r\n $from_height: null,\r\n $to_height: null,\r\n $limit: null,\r\n $offset: null,\r\n $latest_only: null,\r\n }\r\n },\r\n {}\r\n );\r\n });\r\n\r\n test('getTaxonomiesForStreams calls correct action with stream arrays', async () => {\r\n const mockResponse = [\r\n {\r\n data_provider: '0x1111111111111111111111111111111111111111',\r\n stream_id: 'stream-1',\r\n child_data_provider: '0x2222222222222222222222222222222222222222',\r\n child_stream_id: 'child-1',\r\n weight: '50.0',\r\n created_at: 2000,\r\n group_sequence: 2,\r\n start_time: 1625097700\r\n }\r\n ];\r\n\r\n const mockClient = createMockClient(mockResponse);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const testStreams = [\r\n {\r\n dataProvider: EthereumAddress.fromString('0x1111111111111111111111111111111111111111').throw(),\r\n streamId: StreamId.fromString('stream-1').throw()\r\n },\r\n {\r\n dataProvider: EthereumAddress.fromString('0x3333333333333333333333333333333333333333').throw(),\r\n streamId: StreamId.fromString('stream-2').throw()\r\n }\r\n ];\r\n\r\n const result = await composedAction.getTaxonomiesForStreams({\r\n streams: testStreams,\r\n latestOnly: false\r\n });\r\n\r\n // Verify the call was made correctly\r\n expect(mockClient.call).toHaveBeenCalledWith(\r\n {\r\n namespace: \"main\",\r\n name: 'get_taxonomies_for_streams',\r\n inputs: {\r\n $data_providers: [\r\n '0x1111111111111111111111111111111111111111',\r\n '0x3333333333333333333333333333333333333333'\r\n ],\r\n $stream_ids: ['stream-1', 'stream-2'],\r\n $latest_only: false,\r\n }\r\n },\r\n {}\r\n );\r\n\r\n // Verify response mapping\r\n expect(result).toHaveLength(1);\r\n expect(result[0].dataProvider.getAddress()).toBe('0x1111111111111111111111111111111111111111');\r\n expect(result[0].streamId.getId()).toBe('stream-1');\r\n expect(result[0].weight).toBe('50.0');\r\n });\r\n\r\n test('getTaxonomiesForStreams handles empty stream array', async () => {\r\n const mockClient = createMockClient([]);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const result = await composedAction.getTaxonomiesForStreams({\r\n streams: [],\r\n latestOnly: true\r\n });\r\n\r\n // Should return empty array without making network call\r\n expect(mockClient.call).not.toHaveBeenCalled();\r\n expect(result).toEqual([]);\r\n });\r\n\r\n test('getTaxonomiesForStreams handles latestOnly parameter', async () => {\r\n const mockClient = createMockClient([]);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const testStreams = [\r\n {\r\n dataProvider: EthereumAddress.fromString('0x1111111111111111111111111111111111111111').throw(),\r\n streamId: StreamId.fromString('stream-1').throw()\r\n }\r\n ];\r\n\r\n await composedAction.getTaxonomiesForStreams({\r\n streams: testStreams,\r\n latestOnly: true\r\n });\r\n\r\n expect(mockClient.call).toHaveBeenCalledWith(\r\n {\r\n namespace: \"main\",\r\n name: 'get_taxonomies_for_streams',\r\n inputs: expect.objectContaining({\r\n $latest_only: true,\r\n })\r\n },\r\n {}\r\n );\r\n });\r\n\r\n test('getTaxonomiesForStreams handles default latestOnly parameter', async () => {\r\n const mockClient = createMockClient([]);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const testStreams = [\r\n {\r\n dataProvider: EthereumAddress.fromString('0x1111111111111111111111111111111111111111').throw(),\r\n streamId: StreamId.fromString('stream-1').throw()\r\n }\r\n ];\r\n\r\n await composedAction.getTaxonomiesForStreams({\r\n streams: testStreams\r\n });\r\n\r\n expect(mockClient.call).toHaveBeenCalledWith(\r\n {\r\n namespace: \"main\",\r\n name: 'get_taxonomies_for_streams',\r\n inputs: expect.objectContaining({\r\n $latest_only: null,\r\n })\r\n },\r\n {}\r\n );\r\n });\r\n\r\n test('listTaxonomiesByHeight handles network error', async () => {\r\n const mockClient = {\r\n call: vi.fn().mockResolvedValue({\r\n status: 500,\r\n data: null\r\n })\r\n };\r\n\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n await expect(\r\n composedAction.listTaxonomiesByHeight({\r\n fromHeight: 1000,\r\n toHeight: 2000\r\n })\r\n ).rejects.toThrow();\r\n });\r\n\r\n test('getTaxonomiesForStreams handles network error', async () => {\r\n const mockClient = {\r\n call: vi.fn().mockResolvedValue({\r\n status: 404,\r\n data: null\r\n })\r\n };\r\n\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const testStreams = [\r\n {\r\n dataProvider: EthereumAddress.fromString('0x1111111111111111111111111111111111111111').throw(),\r\n streamId: StreamId.fromString('stream-1').throw()\r\n }\r\n ];\r\n\r\n await expect(\r\n composedAction.getTaxonomiesForStreams({\r\n streams: testStreams\r\n })\r\n ).rejects.toThrow();\r\n });\r\n\r\n test('methods handle multiple results correctly', async () => {\r\n const mockResponse = [\r\n {\r\n data_provider: '0x1111111111111111111111111111111111111111',\r\n stream_id: 'stream-1',\r\n child_data_provider: '0x2222222222222222222222222222222222222222',\r\n child_stream_id: 'child-1',\r\n weight: '50.0',\r\n created_at: 2000,\r\n group_sequence: 1,\r\n start_time: 1625097600\r\n },\r\n {\r\n data_provider: '0x1111111111111111111111111111111111111111',\r\n stream_id: 'stream-1',\r\n child_data_provider: '0x3333333333333333333333333333333333333333',\r\n child_stream_id: 'child-2',\r\n weight: '25.5',\r\n created_at: 2000,\r\n group_sequence: 1,\r\n start_time: 1625097600\r\n }\r\n ];\r\n\r\n const mockClient = createMockClient(mockResponse);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const result = await composedAction.listTaxonomiesByHeight({ limit: 10 });\r\n\r\n expect(result).toHaveLength(2);\r\n expect(result[0].childStreamId.getId()).toBe('child-1');\r\n expect(result[1].childStreamId.getId()).toBe('child-2');\r\n expect(result[0].weight).toBe('50.0');\r\n expect(result[1].weight).toBe('25.5');\r\n });\r\n\r\n test('methods handle address parsing correctly', async () => {\r\n const mockResponse = [\r\n {\r\n data_provider: '0x1234567890abcdef1234567890abcdef12345678',\r\n stream_id: 'test-stream',\r\n child_data_provider: '0xabcdef1234567890abcdef1234567890abcdef12',\r\n child_stream_id: 'child-stream',\r\n weight: '100.0',\r\n created_at: 1000,\r\n group_sequence: 1,\r\n start_time: 1625097600\r\n }\r\n ];\r\n\r\n const mockClient = createMockClient(mockResponse);\r\n const composedAction = new ComposedAction(mockClient as any, mockSigner as any);\r\n\r\n const result = await composedAction.listTaxonomiesByHeight();\r\n\r\n expect(result[0].dataProvider).toBeInstanceOf(EthereumAddress);\r\n expect(result[0].streamId).toBeInstanceOf(StreamId);\r\n expect(result[0].childDataProvider).toBeInstanceOf(EthereumAddress);\r\n expect(result[0].childStreamId).toBeInstanceOf(StreamId);\r\n \r\n expect(result[0].dataProvider.getAddress()).toBe('0x1234567890abcdef1234567890abcdef12345678');\r\n expect(result[0].streamId.getId()).toBe('test-stream');\r\n expect(result[0].childDataProvider.getAddress()).toBe('0xabcdef1234567890abcdef1234567890abcdef12');\r\n expect(result[0].childStreamId.getId()).toBe('child-stream');\r\n });\r\n});"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.common.ts"],
4
- "sourcesContent": ["// Core client types\nexport type { TNClientOptions } from \"./client/client\";\nexport type { SignerInfo as EthProvider } from \"./client/client\";\n\n// Stream types and interfaces\nexport type { StreamLocator } from \"./types/stream\";\nexport type { StreamRecord } from \"./contracts-api/action\";\nexport type { GetRecordInput, GetFirstRecordInput } from \"./contracts-api/action\";\nexport type { InsertRecordInput } from \"./contracts-api/primitiveAction\";\nexport type { TaxonomySet, TaxonomyItem } from \"./contracts-api/composedAction\";\n\n// Utility types and classes\nexport { StreamId } from \"./util/StreamId\";\nexport { EthereumAddress } from \"./util/EthereumAddress\";\nexport { visibility } from \"./util/visibility\";\nexport type { VisibilityEnum } from \"./util/visibility\";\n\n// Stream type constants\nexport { StreamType } from \"./contracts-api/contractValues\";\n\n// Base classes\nexport { Action } from \"./contracts-api/action\";\nexport { PrimitiveAction } from \"./contracts-api/primitiveAction\";\nexport { ComposedAction } from \"./contracts-api/composedAction\";\n\n// Role management exports\nexport { RoleManagement } from \"./contracts-api/roleManagement\";\nexport type { GrantRoleInput, RevokeRoleInput, AreMembersOfInput, WalletMembership } from \"./types/role\";\n\n"],
4
+ "sourcesContent": ["// Core client types\nexport type { TNClientOptions } from \"./client/client\";\nexport type { SignerInfo as EthProvider } from \"./client/client\";\n\n// Stream types and interfaces\nexport type { StreamLocator } from \"./types/stream\";\nexport type { StreamRecord } from \"./contracts-api/action\";\nexport type { GetRecordInput, GetFirstRecordInput } from \"./contracts-api/action\";\nexport type { InsertRecordInput } from \"./contracts-api/primitiveAction\";\nexport type { TaxonomySet, TaxonomyItem, ListTaxonomiesByHeightParams, GetTaxonomiesForStreamsParams, TaxonomyQueryResult } from \"./contracts-api/composedAction\";\n\n// Utility types and classes\nexport { StreamId } from \"./util/StreamId\";\nexport { EthereumAddress } from \"./util/EthereumAddress\";\nexport { visibility } from \"./util/visibility\";\nexport type { VisibilityEnum } from \"./util/visibility\";\n\n// Stream type constants\nexport { StreamType } from \"./contracts-api/contractValues\";\n\n// Base classes\nexport { Action } from \"./contracts-api/action\";\nexport { PrimitiveAction } from \"./contracts-api/primitiveAction\";\nexport { ComposedAction } from \"./contracts-api/composedAction\";\n\n// Role management exports\nexport { RoleManagement } from \"./contracts-api/roleManagement\";\nexport type { GrantRoleInput, RevokeRoleInput, AreMembersOfInput, WalletMembership } from \"./types/role\";\n\n"],
5
5
  "mappings": ";AAYA,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAI3B,SAAS,kBAAkB;AAG3B,SAAS,cAAc;AACvB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAG/B,SAAS,sBAAsB;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,13 @@
1
+ // src/types/cache.ts
2
+ var CacheError = class _CacheError extends Error {
3
+ constructor(message, cause) {
4
+ super(message);
5
+ this.cause = cause;
6
+ this.name = "CacheError";
7
+ Object.setPrototypeOf(this, _CacheError.prototype);
8
+ }
9
+ };
10
+ export {
11
+ CacheError
12
+ };
13
+ //# sourceMappingURL=cache.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/cache.ts"],
4
+ "sourcesContent": ["/**\n * Cache-related type definitions for the Truf Network SDK\n * These types enable cache-aware operations with proper TypeScript support\n */\n\n/**\n * Metadata about cache operations\n * Matches the Go SDK implementation structure\n */\nexport interface CacheMetadata {\n /** Whether the data came from cache */\n hit: boolean;\n /** Whether cache was disabled for this query */\n cacheDisabled?: boolean;\n /** Block height when data was cached (optional) */\n height?: number;\n \n // SDK-provided context (optional)\n /** Stream ID used in the query */\n streamId?: string;\n /** Data provider address */\n dataProvider?: string;\n /** Start time of the query range */\n from?: number;\n /** End time of the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Number of rows returned */\n rowsServed?: number;\n}\n\n/**\n * Enhanced options for getRecord method with cache support\n */\nexport interface GetRecordOptions {\n /** Start time for the query range */\n from?: number;\n /** End time for the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Base time for index calculations */\n baseTime?: string | number;\n /** Procedure name prefix */\n prefix?: string;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Enhanced options for getIndex method with cache support\n */\nexport interface GetIndexOptions {\n /** Start time for the query range */\n from?: number;\n /** End time for the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Base time for index calculations */\n baseTime?: string | number;\n /** Procedure name prefix */\n prefix?: string;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Enhanced options for getIndexChange method with cache support\n */\nexport interface GetIndexChangeOptions {\n /** Start time for the query range */\n from?: number;\n /** End time for the query range */\n to?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Base time for index calculations */\n baseTime?: string | number;\n /** Time interval for change calculations */\n timeInterval: number;\n /** Procedure name prefix */\n prefix?: string;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Enhanced options for getFirstRecord method with cache support\n */\nexport interface GetFirstRecordOptions {\n /** Return records after this time */\n after?: number;\n /** Frozen time for historical queries */\n frozenAt?: number;\n /** Enable cache usage for this query */\n useCache?: boolean;\n}\n\n/**\n * Response wrapper that includes cache metadata\n * Provides structured access to both data and cache information\n */\nexport interface CacheAwareResponse<T> {\n /** The actual response data */\n data: T;\n /** Cache metadata (if available) */\n cache?: CacheMetadata;\n /** Action logs for debugging (optional) */\n logs?: string[];\n}\n\n/**\n * Aggregated cache metadata from multiple operations\n */\nexport interface CacheMetadataCollection {\n /** Total number of queries performed */\n totalQueries: number;\n /** Number of cache hits */\n cacheHits: number;\n /** Number of cache misses */\n cacheMisses: number;\n /** Cache hit rate (0-1) */\n cacheHitRate: number;\n /** Total rows served across all queries */\n totalRowsServed: number;\n /** Individual metadata entries */\n entries: CacheMetadata[];\n}\n\n/**\n * Error class for cache-related operations\n */\nexport class CacheError extends Error {\n constructor(message: string, public cause?: Error) {\n super(message);\n this.name = 'CacheError';\n\n // Fix prototype chain\n Object.setPrototypeOf(this, CacheError.prototype);\n }\n}"],
5
+ "mappings": ";AAsIO,IAAM,aAAN,MAAM,oBAAmB,MAAM;AAAA,EACpC,YAAY,SAAwB,OAAe;AACjD,UAAM,OAAO;AADqB;AAElC,SAAK,OAAO;AAGZ,WAAO,eAAe,MAAM,YAAW,SAAS;AAAA,EAClD;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,203 @@
1
+ // src/types/cache.test.ts
2
+ import { describe, it, expect } from "vitest";
3
+ import { CacheError } from "./cache.mjs";
4
+ describe("Cache Types", () => {
5
+ describe("CacheMetadata", () => {
6
+ it("should allow valid cache metadata", () => {
7
+ const metadata = { hit: true, height: 123456 };
8
+ expect(metadata.hit).toBe(true);
9
+ expect(metadata.height).toBe(123456);
10
+ });
11
+ it("should create cache metadata with all fields", () => {
12
+ const metadata = { hit: true, height: 123456 };
13
+ expect(metadata.hit).toBe(true);
14
+ expect(metadata.height).toBe(123456);
15
+ });
16
+ it("should allow cache metadata without optional fields", () => {
17
+ const metadata = { hit: false };
18
+ expect(metadata.hit).toBe(false);
19
+ expect(metadata.height).toBeUndefined();
20
+ });
21
+ it("should allow enhanced cache metadata with all fields", () => {
22
+ const metadata = {
23
+ hit: true,
24
+ cacheDisabled: false,
25
+ height: 123456,
26
+ streamId: "test-stream",
27
+ dataProvider: "0x123456789abcdef",
28
+ from: 1609459100,
29
+ to: 1609459300,
30
+ frozenAt: 1609459250,
31
+ rowsServed: 10
32
+ };
33
+ expect(metadata.hit).toBe(true);
34
+ expect(metadata.cacheDisabled).toBe(false);
35
+ expect(metadata.height).toBe(123456);
36
+ expect(metadata.streamId).toBe("test-stream");
37
+ expect(metadata.dataProvider).toBe("0x123456789abcdef");
38
+ expect(metadata.from).toBe(1609459100);
39
+ expect(metadata.to).toBe(1609459300);
40
+ expect(metadata.frozenAt).toBe(1609459250);
41
+ expect(metadata.rowsServed).toBe(10);
42
+ });
43
+ it("should allow partial enhanced metadata", () => {
44
+ const metadata = {
45
+ hit: true,
46
+ cacheDisabled: true,
47
+ streamId: "partial-stream"
48
+ };
49
+ expect(metadata.hit).toBe(true);
50
+ expect(metadata.cacheDisabled).toBe(true);
51
+ expect(metadata.streamId).toBe("partial-stream");
52
+ expect(metadata.height).toBeUndefined();
53
+ });
54
+ });
55
+ describe("CacheMetadataCollection", () => {
56
+ it("should allow valid cache metadata collection", () => {
57
+ const collection = {
58
+ totalQueries: 5,
59
+ cacheHits: 3,
60
+ cacheMisses: 2,
61
+ cacheHitRate: 0.6,
62
+ totalRowsServed: 100,
63
+ entries: [
64
+ { hit: true, rowsServed: 30 },
65
+ { hit: false, rowsServed: 25 },
66
+ { hit: true, rowsServed: 45 }
67
+ ]
68
+ };
69
+ expect(collection.totalQueries).toBe(5);
70
+ expect(collection.cacheHits).toBe(3);
71
+ expect(collection.cacheMisses).toBe(2);
72
+ expect(collection.cacheHitRate).toBe(0.6);
73
+ expect(collection.totalRowsServed).toBe(100);
74
+ expect(collection.entries).toHaveLength(3);
75
+ });
76
+ });
77
+ describe("CacheAwareResponse", () => {
78
+ it("should allow response with cache metadata", () => {
79
+ const response = {
80
+ data: ["test1", "test2"],
81
+ cache: { hit: true, height: 123456 },
82
+ logs: ["log1", "log2"]
83
+ };
84
+ expect(response.data).toEqual(["test1", "test2"]);
85
+ expect(response.cache?.hit).toBe(true);
86
+ expect(response.logs).toEqual(["log1", "log2"]);
87
+ });
88
+ it("should create cache aware response with all fields", () => {
89
+ const response = {
90
+ data: "test",
91
+ cache: { hit: true, height: 123456 },
92
+ logs: ["log1"]
93
+ };
94
+ expect(response.data).toBe("test");
95
+ expect(response.cache?.hit).toBe(true);
96
+ expect(response.cache?.height).toBe(123456);
97
+ expect(response.logs).toEqual(["log1"]);
98
+ });
99
+ it("should allow response without cache metadata", () => {
100
+ const response = {
101
+ data: ["test1", "test2"]
102
+ };
103
+ expect(response.data).toEqual(["test1", "test2"]);
104
+ expect(response.cache).toBeUndefined();
105
+ expect(response.logs).toBeUndefined();
106
+ });
107
+ });
108
+ describe("GetRecordOptions", () => {
109
+ it("should allow all valid options", () => {
110
+ const options = {
111
+ from: 1609459200,
112
+ to: 1609545600,
113
+ frozenAt: 1609459200,
114
+ baseTime: 1609459200,
115
+ prefix: "test_",
116
+ useCache: true
117
+ };
118
+ expect(options.from).toBe(1609459200);
119
+ expect(options.useCache).toBe(true);
120
+ });
121
+ it("should allow string baseTime", () => {
122
+ const options = {
123
+ baseTime: "2021-01-01",
124
+ useCache: false
125
+ };
126
+ expect(options.baseTime).toBe("2021-01-01");
127
+ });
128
+ it("should allow empty options", () => {
129
+ const options = {};
130
+ expect(options.useCache).toBeUndefined();
131
+ });
132
+ });
133
+ describe("GetIndexOptions", () => {
134
+ it("should allow all valid options", () => {
135
+ const options = {
136
+ from: 1609459200,
137
+ to: 1609545600,
138
+ frozenAt: 1609459200,
139
+ baseTime: 1609459200,
140
+ prefix: "test_",
141
+ useCache: true
142
+ };
143
+ expect(options.useCache).toBe(true);
144
+ });
145
+ });
146
+ describe("GetIndexChangeOptions", () => {
147
+ it("should allow all valid options including timeInterval", () => {
148
+ const options = {
149
+ from: 1609459200,
150
+ to: 1609545600,
151
+ frozenAt: 1609459200,
152
+ baseTime: 1609459200,
153
+ timeInterval: 3600,
154
+ prefix: "test_",
155
+ useCache: true
156
+ };
157
+ expect(options.timeInterval).toBe(3600);
158
+ expect(options.useCache).toBe(true);
159
+ });
160
+ it("should require timeInterval", () => {
161
+ const options = {
162
+ timeInterval: 3600
163
+ };
164
+ expect(options.timeInterval).toBe(3600);
165
+ });
166
+ });
167
+ describe("GetFirstRecordOptions", () => {
168
+ it("should allow all valid options", () => {
169
+ const options = {
170
+ after: 1609459200,
171
+ frozenAt: 1609459200,
172
+ useCache: true
173
+ };
174
+ expect(options.after).toBe(1609459200);
175
+ expect(options.useCache).toBe(true);
176
+ });
177
+ it("should allow empty options", () => {
178
+ const options = {};
179
+ expect(options.useCache).toBeUndefined();
180
+ });
181
+ });
182
+ describe("CacheError", () => {
183
+ it("should create error with message", () => {
184
+ const error = new CacheError("Test error");
185
+ expect(error.message).toBe("Test error");
186
+ expect(error.name).toBe("CacheError");
187
+ expect(error.cause).toBeUndefined();
188
+ });
189
+ it("should create error with cause", () => {
190
+ const cause = new Error("Original error");
191
+ const error = new CacheError("Test error", cause);
192
+ expect(error.message).toBe("Test error");
193
+ expect(error.name).toBe("CacheError");
194
+ expect(error.cause).toBe(cause);
195
+ });
196
+ it("should be instanceof Error", () => {
197
+ const error = new CacheError("Test error");
198
+ expect(error instanceof Error).toBe(true);
199
+ expect(error instanceof CacheError).toBe(true);
200
+ });
201
+ });
202
+ });
203
+ //# sourceMappingURL=cache.test.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/cache.test.ts"],
4
+ "sourcesContent": ["import { describe, it, expect } from 'vitest';\nimport { CacheError } from './cache';\nimport type { \n CacheMetadata, \n CacheAwareResponse, \n CacheMetadataCollection,\n GetRecordOptions, \n GetIndexOptions, \n GetIndexChangeOptions, \n GetFirstRecordOptions \n} from './cache';\n\ndescribe('Cache Types', () => {\n describe('CacheMetadata', () => {\n it('should allow valid cache metadata', () => {\n const metadata: CacheMetadata = { hit: true, height: 123456 };\n expect(metadata.hit).toBe(true);\n expect(metadata.height).toBe(123456);\n });\n\n it('should create cache metadata with all fields', () => {\n const metadata: CacheMetadata = { hit: true, height: 123456 };\n expect(metadata.hit).toBe(true);\n expect(metadata.height).toBe(123456);\n });\n\n it('should allow cache metadata without optional fields', () => {\n const metadata: CacheMetadata = { hit: false };\n expect(metadata.hit).toBe(false);\n expect(metadata.height).toBeUndefined();\n });\n\n it('should allow 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 \n expect(metadata.hit).toBe(true);\n expect(metadata.cacheDisabled).toBe(false);\n expect(metadata.height).toBe(123456);\n expect(metadata.streamId).toBe('test-stream');\n expect(metadata.dataProvider).toBe('0x123456789abcdef');\n expect(metadata.from).toBe(1609459100);\n expect(metadata.to).toBe(1609459300);\n expect(metadata.frozenAt).toBe(1609459250);\n expect(metadata.rowsServed).toBe(10);\n });\n\n it('should allow partial enhanced metadata', () => {\n const metadata: CacheMetadata = {\n hit: true,\n cacheDisabled: true,\n streamId: 'partial-stream'\n };\n \n expect(metadata.hit).toBe(true);\n expect(metadata.cacheDisabled).toBe(true);\n expect(metadata.streamId).toBe('partial-stream');\n expect(metadata.height).toBeUndefined();\n });\n });\n\n describe('CacheMetadataCollection', () => {\n it('should allow valid cache metadata collection', () => {\n const collection: CacheMetadataCollection = {\n totalQueries: 5,\n cacheHits: 3,\n cacheMisses: 2,\n cacheHitRate: 0.6,\n totalRowsServed: 100,\n entries: [\n { hit: true, rowsServed: 30 },\n { hit: false, rowsServed: 25 },\n { hit: true, rowsServed: 45 }\n ]\n };\n \n expect(collection.totalQueries).toBe(5);\n expect(collection.cacheHits).toBe(3);\n expect(collection.cacheMisses).toBe(2);\n expect(collection.cacheHitRate).toBe(0.6);\n expect(collection.totalRowsServed).toBe(100);\n expect(collection.entries).toHaveLength(3);\n });\n });\n\n describe('CacheAwareResponse', () => {\n it('should allow response with cache metadata', () => {\n const response: CacheAwareResponse<string[]> = {\n data: ['test1', 'test2'],\n cache: { hit: true, height: 123456 },\n logs: ['log1', 'log2']\n };\n \n expect(response.data).toEqual(['test1', 'test2']);\n expect(response.cache?.hit).toBe(true);\n expect(response.logs).toEqual(['log1', 'log2']);\n });\n\n it('should create cache aware response with all fields', () => {\n const response: CacheAwareResponse<string> = {\n data: 'test',\n cache: { hit: true, height: 123456 },\n logs: ['log1']\n };\n expect(response.data).toBe('test');\n expect(response.cache?.hit).toBe(true);\n expect(response.cache?.height).toBe(123456);\n expect(response.logs).toEqual(['log1']);\n });\n\n it('should allow response without cache metadata', () => {\n const response: CacheAwareResponse<string[]> = {\n data: ['test1', 'test2']\n };\n \n expect(response.data).toEqual(['test1', 'test2']);\n expect(response.cache).toBeUndefined();\n expect(response.logs).toBeUndefined();\n });\n });\n\n describe('GetRecordOptions', () => {\n it('should allow all valid options', () => {\n const options: GetRecordOptions = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n baseTime: 1609459200,\n prefix: 'test_',\n useCache: true\n };\n \n expect(options.from).toBe(1609459200);\n expect(options.useCache).toBe(true);\n });\n\n it('should allow string baseTime', () => {\n const options: GetRecordOptions = {\n baseTime: '2021-01-01',\n useCache: false\n };\n \n expect(options.baseTime).toBe('2021-01-01');\n });\n\n it('should allow empty options', () => {\n const options: GetRecordOptions = {};\n expect(options.useCache).toBeUndefined();\n });\n });\n\n describe('GetIndexOptions', () => {\n it('should allow all valid options', () => {\n const options: GetIndexOptions = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n baseTime: 1609459200,\n prefix: 'test_',\n useCache: true\n };\n \n expect(options.useCache).toBe(true);\n });\n });\n\n describe('GetIndexChangeOptions', () => {\n it('should allow all valid options including timeInterval', () => {\n const options: GetIndexChangeOptions = {\n from: 1609459200,\n to: 1609545600,\n frozenAt: 1609459200,\n baseTime: 1609459200,\n timeInterval: 3600,\n prefix: 'test_',\n useCache: true\n };\n \n expect(options.timeInterval).toBe(3600);\n expect(options.useCache).toBe(true);\n });\n\n it('should require timeInterval', () => {\n // This should compile - timeInterval is required\n const options: GetIndexChangeOptions = {\n timeInterval: 3600\n };\n \n expect(options.timeInterval).toBe(3600);\n });\n });\n\n describe('GetFirstRecordOptions', () => {\n it('should allow all valid options', () => {\n const options: GetFirstRecordOptions = {\n after: 1609459200,\n frozenAt: 1609459200,\n useCache: true\n };\n \n expect(options.after).toBe(1609459200);\n expect(options.useCache).toBe(true);\n });\n\n it('should allow empty options', () => {\n const options: GetFirstRecordOptions = {};\n expect(options.useCache).toBeUndefined();\n });\n });\n\n describe('CacheError', () => {\n it('should create error with message', () => {\n const error = new CacheError('Test error');\n expect(error.message).toBe('Test error');\n expect(error.name).toBe('CacheError');\n expect(error.cause).toBeUndefined();\n });\n\n it('should create error with cause', () => {\n const cause = new Error('Original error');\n const error = new CacheError('Test error', cause);\n expect(error.message).toBe('Test error');\n expect(error.name).toBe('CacheError');\n expect(error.cause).toBe(cause);\n });\n\n it('should be instanceof Error', () => {\n const error = new CacheError('Test error');\n expect(error instanceof Error).toBe(true);\n expect(error instanceof CacheError).toBe(true);\n });\n });\n});"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }