@trufnetwork/sdk-js 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +91 -13
  2. package/dist/cjs/client/client.cjs +41 -32
  3. package/dist/cjs/client/client.cjs.map +2 -2
  4. package/dist/cjs/client/getLastTransactions.cjs +67 -0
  5. package/dist/cjs/client/getLastTransactions.cjs.map +7 -0
  6. package/dist/cjs/client/listStreams.cjs +46 -0
  7. package/dist/cjs/client/listStreams.cjs.map +7 -0
  8. package/dist/cjs/contracts-api/{stream.cjs → action.cjs} +140 -159
  9. package/dist/cjs/contracts-api/action.cjs.map +7 -0
  10. package/dist/cjs/contracts-api/composedAction.cjs +183 -0
  11. package/dist/cjs/contracts-api/composedAction.cjs.map +7 -0
  12. package/dist/cjs/contracts-api/{destroyStream.cjs → deleteStream.cjs} +16 -16
  13. package/dist/cjs/contracts-api/deleteStream.cjs.map +7 -0
  14. package/dist/cjs/contracts-api/deployStream.cjs +33 -16
  15. package/dist/cjs/contracts-api/deployStream.cjs.map +3 -3
  16. package/dist/cjs/contracts-api/primitiveAction.cjs +92 -0
  17. package/dist/cjs/contracts-api/primitiveAction.cjs.map +7 -0
  18. package/dist/cjs/index.common.cjs +6 -6
  19. package/dist/cjs/index.common.cjs.map +1 -1
  20. package/dist/cjs/types/transaction.cjs +19 -0
  21. package/dist/cjs/types/transaction.cjs.map +7 -0
  22. package/dist/cjs/util/EthereumAddress.cjs +0 -1
  23. package/dist/cjs/util/EthereumAddress.cjs.map +2 -2
  24. package/dist/cjs/util/StreamId.cjs +7 -2
  25. package/dist/cjs/util/StreamId.cjs.map +2 -2
  26. package/dist/esm/client/client.mjs +41 -32
  27. package/dist/esm/client/client.mjs.map +2 -2
  28. package/dist/esm/client/getLastTransactions.mjs +46 -0
  29. package/dist/esm/client/getLastTransactions.mjs.map +7 -0
  30. package/dist/esm/client/listStreams.mjs +25 -0
  31. package/dist/esm/client/listStreams.mjs.map +7 -0
  32. package/dist/esm/contracts-api/{stream.mjs → action.mjs} +137 -156
  33. package/dist/esm/contracts-api/action.mjs.map +7 -0
  34. package/dist/esm/contracts-api/composedAction.mjs +156 -0
  35. package/dist/esm/contracts-api/composedAction.mjs.map +7 -0
  36. package/dist/esm/contracts-api/deleteStream.mjs +24 -0
  37. package/dist/esm/contracts-api/deleteStream.mjs.map +7 -0
  38. package/dist/esm/contracts-api/deployStream.mjs +23 -21
  39. package/dist/esm/contracts-api/deployStream.mjs.map +2 -2
  40. package/dist/esm/contracts-api/primitiveAction.mjs +71 -0
  41. package/dist/esm/contracts-api/primitiveAction.mjs.map +7 -0
  42. package/dist/esm/index.common.mjs +6 -6
  43. package/dist/esm/index.common.mjs.map +1 -1
  44. package/dist/esm/types/transaction.mjs +1 -0
  45. package/dist/esm/types/transaction.mjs.map +7 -0
  46. package/dist/esm/util/EthereumAddress.mjs +0 -1
  47. package/dist/esm/util/EthereumAddress.mjs.map +2 -2
  48. package/dist/esm/util/StreamId.mjs +7 -2
  49. package/dist/esm/util/StreamId.mjs.map +2 -2
  50. package/dist/tsconfig.build.tsbuildinfo +1 -1
  51. package/dist/types/client/client.d.ts +38 -15
  52. package/dist/types/client/client.d.ts.map +1 -1
  53. package/dist/types/client/getLastTransactions.d.ts +5 -0
  54. package/dist/types/client/getLastTransactions.d.ts.map +1 -0
  55. package/dist/types/client/listStreams.d.ts +12 -0
  56. package/dist/types/client/listStreams.d.ts.map +1 -0
  57. package/dist/types/contracts-api/action.d.ts +136 -0
  58. package/dist/types/contracts-api/action.d.ts.map +1 -0
  59. package/dist/types/contracts-api/{composedStream.d.ts → composedAction.d.ts} +11 -22
  60. package/dist/types/contracts-api/composedAction.d.ts.map +1 -0
  61. package/dist/types/contracts-api/{destroyStream.d.ts → deleteStream.d.ts} +7 -7
  62. package/dist/types/contracts-api/deleteStream.d.ts.map +1 -0
  63. package/dist/types/contracts-api/deployStream.d.ts +2 -2
  64. package/dist/types/contracts-api/deployStream.d.ts.map +1 -1
  65. package/dist/types/contracts-api/primitiveAction.d.ts +33 -0
  66. package/dist/types/contracts-api/primitiveAction.d.ts.map +1 -0
  67. package/dist/types/index.common.d.ts +7 -7
  68. package/dist/types/types/transaction.d.ts +11 -0
  69. package/dist/types/types/transaction.d.ts.map +1 -0
  70. package/dist/types/util/EthereumAddress.d.ts.map +1 -1
  71. package/dist/types/util/StreamId.d.ts +2 -0
  72. package/dist/types/util/StreamId.d.ts.map +1 -1
  73. package/dist/types/util/visibility.d.ts.map +1 -1
  74. package/package.json +10 -6
  75. package/dist/cjs/client/listAllStreams.cjs +0 -51
  76. package/dist/cjs/client/listAllStreams.cjs.map +0 -7
  77. package/dist/cjs/contracts/composed_stream_template.json +0 -1638
  78. package/dist/cjs/contracts/composed_stream_template_unix.json +0 -2122
  79. package/dist/cjs/contracts/contractsContent.cjs +0 -65
  80. package/dist/cjs/contracts/contractsContent.cjs.map +0 -7
  81. package/dist/cjs/contracts/primitive_stream_template.json +0 -952
  82. package/dist/cjs/contracts/primitive_stream_template_unix.json +0 -1173
  83. package/dist/cjs/contracts-api/composedStream.cjs +0 -137
  84. package/dist/cjs/contracts-api/composedStream.cjs.map +0 -7
  85. package/dist/cjs/contracts-api/destroyStream.cjs.map +0 -7
  86. package/dist/cjs/contracts-api/primitiveStream.cjs +0 -86
  87. package/dist/cjs/contracts-api/primitiveStream.cjs.map +0 -7
  88. package/dist/cjs/contracts-api/stream.cjs.map +0 -7
  89. package/dist/esm/client/listAllStreams.mjs +0 -30
  90. package/dist/esm/client/listAllStreams.mjs.map +0 -7
  91. package/dist/esm/contracts/composed_stream_template.json +0 -1638
  92. package/dist/esm/contracts/composed_stream_template_unix.json +0 -2122
  93. package/dist/esm/contracts/contractsContent.mjs +0 -33
  94. package/dist/esm/contracts/contractsContent.mjs.map +0 -7
  95. package/dist/esm/contracts/primitive_stream_template.json +0 -952
  96. package/dist/esm/contracts/primitive_stream_template_unix.json +0 -1173
  97. package/dist/esm/contracts-api/composedStream.mjs +0 -116
  98. package/dist/esm/contracts-api/composedStream.mjs.map +0 -7
  99. package/dist/esm/contracts-api/destroyStream.mjs +0 -24
  100. package/dist/esm/contracts-api/destroyStream.mjs.map +0 -7
  101. package/dist/esm/contracts-api/primitiveStream.mjs +0 -65
  102. package/dist/esm/contracts-api/primitiveStream.mjs.map +0 -7
  103. package/dist/esm/contracts-api/stream.mjs.map +0 -7
  104. package/dist/types/client/listAllStreams.d.ts +0 -14
  105. package/dist/types/client/listAllStreams.d.ts.map +0 -1
  106. package/dist/types/contracts/contractsContent.d.ts +0 -6
  107. package/dist/types/contracts/contractsContent.d.ts.map +0 -1
  108. package/dist/types/contracts-api/composedStream.d.ts.map +0 -1
  109. package/dist/types/contracts-api/destroyStream.d.ts.map +0 -1
  110. package/dist/types/contracts-api/primitiveStream.d.ts +0 -39
  111. package/dist/types/contracts-api/primitiveStream.d.ts.map +0 -1
  112. package/dist/types/contracts-api/stream.d.ts +0 -142
  113. package/dist/types/contracts-api/stream.d.ts.map +0 -1
@@ -2,9 +2,7 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
 
5
- // src/contracts-api/stream.ts
6
- import { ActionInput } from "@kwilteam/kwil-js/dist/core/action.js";
7
- import { generateDBID } from "@kwilteam/kwil-js/dist/utils/dbid.js";
5
+ // src/contracts-api/action.ts
8
6
  import { Either } from "monads-io";
9
7
  import { EthereumAddress } from "../util/EthereumAddress.mjs";
10
8
  import { head } from "../util/head.mjs";
@@ -16,43 +14,20 @@ import {
16
14
  MetadataTableKey,
17
15
  StreamType
18
16
  } from "./contractValues.mjs";
19
- var Stream = class {
20
- constructor(kwilClient, kwilSigner, locator) {
17
+ var Action = class {
18
+ constructor(kwilClient, kwilSigner) {
21
19
  __publicField(this, "kwilClient");
22
20
  __publicField(this, "kwilSigner");
23
- __publicField(this, "locator");
24
- __publicField(this, "dbid");
25
- __publicField(this, "schema");
26
- __publicField(this, "deployed", false);
27
- __publicField(this, "initialized", false);
28
21
  this.kwilClient = kwilClient;
29
22
  this.kwilSigner = kwilSigner;
30
- this.locator = locator;
31
- this.dbid = generateDBID(
32
- locator.dataProvider.getAddress(),
33
- locator.streamId.getId()
34
- );
35
- }
36
- /**
37
- * Loads the schema for this stream from the network.
38
- * Throws if the stream is not deployed.
39
- */
40
- async loadSchema() {
41
- const response = await this.kwilClient.getSchema(this.dbid);
42
- if (response.status !== 200 || !response.data) {
43
- throw new Error(
44
- `Failed to load schema for stream ${this.locator.streamId.getId()}`
45
- );
46
- }
47
- this.schema = response.data;
48
23
  }
49
24
  /**
50
25
  * Executes a method on the stream
51
26
  */
52
- async execute(method, inputs) {
27
+ async executeWithNamedParams(method, inputs) {
53
28
  return this.kwilClient.execute(
54
29
  {
55
- dbid: this.dbid,
30
+ namespace: "main",
56
31
  name: method,
57
32
  inputs,
58
33
  description: `TN SDK - Executing method on stream: ${method}`
@@ -61,11 +36,10 @@ var Stream = class {
61
36
  );
62
37
  }
63
38
  /**
64
- * Executes a method on the stream after checking if it's initialized
39
+ * Executes a method on the stream
65
40
  */
66
- async checkedExecute(method, inputs) {
67
- await this.checkInitialized();
68
- return this.execute(method, inputs);
41
+ async executeWithActionBody(inputs, synchronous = false) {
42
+ return this.kwilClient.execute(inputs, this.kwilSigner, synchronous);
69
43
  }
70
44
  /**
71
45
  * Calls a method on the stream
@@ -73,7 +47,7 @@ var Stream = class {
73
47
  async call(method, inputs) {
74
48
  const result = await this.kwilClient.call(
75
49
  {
76
- dbid: this.dbid,
50
+ namespace: "main",
77
51
  name: method,
78
52
  inputs
79
53
  },
@@ -84,55 +58,23 @@ var Stream = class {
84
58
  }
85
59
  return Either.right(result.data?.result);
86
60
  }
87
- /**
88
- * Checks if the stream is initialized
89
- */
90
- async checkInitialized(expectedType) {
91
- if (this.initialized) {
92
- return;
93
- }
94
- this.checkDeployed();
95
- const type = await this.getType();
96
- const expectedTypes = expectedType ? [expectedType] : [StreamType.Primitive, StreamType.Composed];
97
- if (!expectedTypes.includes(type)) {
98
- throw new Error(`Invalid stream type: ${type}`);
99
- }
100
- this.initialized = true;
101
- }
102
- /**
103
- * Checks if the stream is deployed
104
- */
105
- async checkDeployed() {
106
- if (this.deployed) {
107
- return;
108
- }
109
- await this.loadSchema();
110
- this.deployed = true;
111
- }
112
- /**
113
- * Initializes the stream
114
- */
115
- async initializeStream() {
116
- return this.execute("init", []);
117
- }
118
61
  /**
119
62
  * Returns the records of the stream within the given date range
120
63
  */
121
64
  async getRecord(input) {
122
65
  const result = await this.call(
123
66
  "get_record",
124
- [
125
- ActionInput.fromObject({
126
- $date_from: input.dateFrom,
127
- $date_to: input.dateTo,
128
- $frozen_at: input.frozenAt,
129
- $base_date: input.baseDate
130
- })
131
- ]
67
+ {
68
+ $data_provider: input.stream.dataProvider.getAddress(),
69
+ $stream_id: input.stream.streamId.getId(),
70
+ $from: input.from,
71
+ $to: input.to,
72
+ $frozen_at: input.frozenAt
73
+ }
132
74
  );
133
75
  return result.mapRight(
134
76
  (result2) => result2.map((row) => ({
135
- dateValue: row.date_value,
77
+ eventTime: row.event_time,
136
78
  value: row.value
137
79
  }))
138
80
  ).throw();
@@ -143,18 +85,18 @@ var Stream = class {
143
85
  async getIndex(input) {
144
86
  const result = await this.call(
145
87
  "get_index",
146
- [
147
- ActionInput.fromObject({
148
- $date_from: input.dateFrom,
149
- $date_to: input.dateTo,
150
- $frozen_at: input.frozenAt,
151
- $base_date: input.baseDate
152
- })
153
- ]
88
+ {
89
+ $data_provider: input.stream.dataProvider.getAddress(),
90
+ $stream_id: input.stream.streamId.getId(),
91
+ $from: input.from,
92
+ $to: input.to,
93
+ $frozen_at: input.frozenAt,
94
+ $base_time: input.baseTime
95
+ }
154
96
  );
155
97
  return result.mapRight(
156
98
  (result2) => result2.map((row) => ({
157
- dateValue: row.date_value,
99
+ eventTime: row.event_time,
158
100
  value: row.value
159
101
  }))
160
102
  ).throw();
@@ -162,8 +104,11 @@ var Stream = class {
162
104
  /**
163
105
  * Returns the type of the stream
164
106
  */
165
- async getType() {
166
- const result = await this.getMetadata(MetadataKey.TypeKey, true);
107
+ async getType(stream) {
108
+ const result = await this.getMetadata(
109
+ stream,
110
+ MetadataKey.TypeKey
111
+ );
167
112
  if (!result) {
168
113
  throw new Error("Failed to get stream type");
169
114
  }
@@ -184,37 +129,44 @@ var Stream = class {
184
129
  async getFirstRecord(input) {
185
130
  const result = await this.call(
186
131
  "get_first_record",
187
- [
188
- ActionInput.fromObject({
189
- $after_date: input.afterDate,
190
- $frozen_at: input.frozenAt
191
- })
192
- ]
132
+ {
133
+ $data_provider: input.stream.dataProvider.getAddress(),
134
+ $stream_id: input.stream.streamId.getId(),
135
+ $after: input.after,
136
+ $frozen_at: input.frozenAt
137
+ }
193
138
  );
194
139
  return result.mapRight(head).mapRight(
195
140
  (result2) => result2.map((result3) => ({
196
- dateValue: result3.date_value,
141
+ eventTime: result3.event_time,
197
142
  value: result3.value
198
143
  })).unwrapOr(null)
199
144
  ).throw();
200
145
  }
201
- async setMetadata(key, value) {
202
- return await this.execute("insert_metadata", [
203
- ActionInput.fromObject({
146
+ async setMetadata(stream, key, value) {
147
+ return await this.executeWithNamedParams("insert_metadata", [
148
+ {
149
+ $data_provider: stream.dataProvider.getAddress(),
150
+ $stream_id: stream.streamId.getId(),
204
151
  $key: key,
205
152
  $value: value,
206
153
  $val_type: MetadataKeyValueMap[key]
207
- })
154
+ }
208
155
  ]);
209
156
  }
210
- async getMetadata(key, onlyLatest = true, filteredRef) {
211
- const result = await this.call("get_metadata", [
212
- ActionInput.fromObject({
157
+ async getMetadata(stream, key, filteredRef, limit, offset, orderBy) {
158
+ const result = await this.call(
159
+ "get_metadata",
160
+ {
161
+ $data_provider: stream.dataProvider.getAddress(),
162
+ $stream_id: stream.streamId.getId(),
213
163
  $key: key,
214
- $only_latest: onlyLatest,
215
- $ref: filteredRef
216
- })
217
- ]);
164
+ $ref: filteredRef,
165
+ $limit: limit,
166
+ $offset: offset,
167
+ $order_by: orderBy
168
+ }
169
+ );
218
170
  return result.mapRight(
219
171
  (result2) => result2.map((row) => ({
220
172
  rowId: row.row_id,
@@ -226,8 +178,9 @@ var Stream = class {
226
178
  /**
227
179
  * Sets the read visibility of the stream
228
180
  */
229
- async setReadVisibility(visibility) {
181
+ async setReadVisibility(stream, visibility) {
230
182
  return await this.setMetadata(
183
+ stream,
231
184
  MetadataKey.ReadVisibilityKey,
232
185
  visibility.toString()
233
186
  );
@@ -235,15 +188,19 @@ var Stream = class {
235
188
  /**
236
189
  * Returns the read visibility of the stream
237
190
  */
238
- async getReadVisibility() {
239
- const result = await this.getMetadata(MetadataKey.ReadVisibilityKey, true);
191
+ async getReadVisibility(stream) {
192
+ const result = await this.getMetadata(
193
+ stream,
194
+ MetadataKey.ReadVisibilityKey
195
+ );
240
196
  return head(result).map((row) => toVisibilityEnum(row.value)).unwrapOr(null);
241
197
  }
242
198
  /**
243
199
  * Sets the compose visibility of the stream
244
200
  */
245
- async setComposeVisibility(visibility) {
201
+ async setComposeVisibility(stream, visibility) {
246
202
  return await this.setMetadata(
203
+ stream,
247
204
  MetadataKey.ComposeVisibilityKey,
248
205
  visibility.toString()
249
206
  );
@@ -251,18 +208,19 @@ var Stream = class {
251
208
  /**
252
209
  * Returns the compose visibility of the stream
253
210
  */
254
- async getComposeVisibility() {
211
+ async getComposeVisibility(stream) {
255
212
  const result = await this.getMetadata(
256
- MetadataKey.ComposeVisibilityKey,
257
- true
213
+ stream,
214
+ MetadataKey.ComposeVisibilityKey
258
215
  );
259
216
  return head(result).map((row) => toVisibilityEnum(row.value)).unwrapOr(null);
260
217
  }
261
218
  /**
262
219
  * Allows a wallet to read the stream
263
220
  */
264
- async allowReadWallet(wallet) {
221
+ async allowReadWallet(stream, wallet) {
265
222
  return await this.setMetadata(
223
+ stream,
266
224
  MetadataKey.AllowReadWalletKey,
267
225
  wallet.getAddress()
268
226
  );
@@ -270,65 +228,68 @@ var Stream = class {
270
228
  /**
271
229
  * Disables a wallet from reading the stream
272
230
  */
273
- async disableReadWallet(wallet) {
231
+ async disableReadWallet(stream, wallet) {
274
232
  const result = await this.getMetadata(
233
+ stream,
275
234
  MetadataKey.AllowReadWalletKey,
276
- true,
277
235
  wallet.getAddress()
278
236
  );
279
237
  const row_id = head(result).map((row) => row.rowId).unwrapOr(null);
280
238
  if (!row_id) {
281
239
  throw new Error("Wallet not found in allowed list");
282
240
  }
283
- return await this.disableMetadata(row_id);
241
+ return await this.disableMetadata(stream, row_id);
284
242
  }
285
243
  /**
286
244
  * Allows a stream to use this stream as child
287
245
  */
288
- async allowComposeStream(locator) {
289
- const streamDbId = generateDBID(
290
- locator.dataProvider.getAddress(),
291
- locator.streamId.getId()
292
- );
246
+ async allowComposeStream(stream, wallet) {
293
247
  return await this.setMetadata(
248
+ stream,
294
249
  MetadataKey.AllowComposeStreamKey,
295
- streamDbId
250
+ wallet.streamId.getId()
296
251
  );
297
252
  }
298
253
  /**
299
254
  * Disables a stream from using this stream as child
300
255
  */
301
- async disableComposeStream(locator) {
256
+ async disableComposeStream(stream, wallet) {
302
257
  const result = await this.getMetadata(
258
+ stream,
303
259
  MetadataKey.AllowComposeStreamKey,
304
- true,
305
- locator.toString()
260
+ wallet.toString()
306
261
  );
307
262
  const row_id = head(result).map((row) => row.rowId).unwrapOr(null);
308
263
  if (!row_id) {
309
264
  throw new Error("Stream not found in allowed list");
310
265
  }
311
- return await this.disableMetadata(row_id);
266
+ return await this.disableMetadata(stream, row_id);
312
267
  }
313
- async disableMetadata(rowId) {
314
- return await this.execute("disable_metadata", [
315
- ActionInput.fromObject({
316
- $row_id: rowId
317
- })
318
- ]);
268
+ async disableMetadata(stream, rowId) {
269
+ return await this.executeWithNamedParams("disable_metadata", [{
270
+ $data_provider: stream.dataProvider.getAddress(),
271
+ $stream_id: stream.streamId.getId(),
272
+ $row_id: rowId
273
+ }]);
319
274
  }
320
275
  /**
321
276
  * Returns the wallets allowed to read the stream
322
277
  */
323
- async getAllowedReadWallets() {
324
- const result = await this.getMetadata(MetadataKey.AllowReadWalletKey);
278
+ async getAllowedReadWallets(stream) {
279
+ const result = await this.getMetadata(
280
+ stream,
281
+ MetadataKey.AllowReadWalletKey
282
+ );
325
283
  return result.filter((row) => row.value).map((row) => new EthereumAddress(row.value));
326
284
  }
327
285
  /**
328
286
  * Returns the streams allowed to compose the stream
329
287
  */
330
- async getAllowedComposeStreams() {
331
- const result = await this.getMetadata(MetadataKey.AllowComposeStreamKey);
288
+ async getAllowedComposeStreams(stream) {
289
+ const result = await this.getMetadata(
290
+ stream,
291
+ MetadataKey.AllowComposeStreamKey
292
+ );
332
293
  return result.filter((row) => row.value).map((row) => {
333
294
  const [streamId, dataProvider] = row.value.split(":");
334
295
  return {
@@ -343,19 +304,19 @@ var Stream = class {
343
304
  async getIndexChange(input) {
344
305
  const result = await this.call(
345
306
  "get_index_change",
346
- [
347
- ActionInput.fromObject({
348
- $date_from: input.dateFrom,
349
- $date_to: input.dateTo,
350
- $frozen_at: input.frozenAt,
351
- $base_date: input.baseDate,
352
- $days_interval: input.daysInterval
353
- })
354
- ]
307
+ {
308
+ $data_provider: input.stream.dataProvider.getAddress(),
309
+ $stream_id: input.stream.streamId.getId(),
310
+ $from: input.from,
311
+ $to: input.to,
312
+ $frozen_at: input.frozenAt,
313
+ $base_time: input.baseTime,
314
+ $time_interval: input.timeInterval
315
+ }
355
316
  );
356
317
  return result.mapRight(
357
318
  (result2) => result2.map((row) => ({
358
- dateValue: row.date_value,
319
+ eventTime: row.event_time,
359
320
  value: row.value
360
321
  }))
361
322
  ).throw();
@@ -369,24 +330,44 @@ var Stream = class {
369
330
  async customGetProcedure(procedure, input) {
370
331
  const result = await this.call(
371
332
  procedure,
372
- [
373
- ActionInput.fromObject({
374
- $date_from: input.dateFrom,
375
- $date_to: input.dateTo,
376
- $frozen_at: input.frozenAt,
377
- $base_date: input.baseDate
378
- })
379
- ]
333
+ {
334
+ $data_provider: input.stream.dataProvider.getAddress(),
335
+ $stream_id: input.stream.streamId.getId(),
336
+ $from: input.from,
337
+ $to: input.to,
338
+ $frozen_at: input.frozenAt
339
+ }
340
+ );
341
+ return result.mapRight(
342
+ (result2) => result2.map((row) => ({
343
+ eventTime: row.event_time,
344
+ value: row.value
345
+ }))
346
+ ).throw();
347
+ }
348
+ /**
349
+ * A custom method that accepts the procedure name and custom input of type Record<string, any>
350
+ * Returns the result of the procedure in the same format as StreamRecord
351
+ * I.e. a custom procedure named "get_custom_index" that returns a list of date_value and value
352
+ * can be called with customProcedureWithArgs("get_custom_index", { $customArg1: "value1", $customArg2: "value2" })
353
+ * where $customArg1 and $customArg2 are the arguments of the procedure
354
+ * @param procedure
355
+ * @param args
356
+ */
357
+ async customProcedureWithArgs(procedure, args) {
358
+ const result = await this.call(
359
+ procedure,
360
+ args
380
361
  );
381
362
  return result.mapRight(
382
363
  (result2) => result2.map((row) => ({
383
- dateValue: row.date_value,
364
+ eventTime: row.event_time,
384
365
  value: row.value
385
366
  }))
386
367
  ).throw();
387
368
  }
388
369
  };
389
370
  export {
390
- Stream
371
+ Action
391
372
  };
392
- //# sourceMappingURL=stream.mjs.map
373
+ //# sourceMappingURL=action.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/contracts-api/action.ts"],
4
+ "sourcesContent": ["import {KwilSigner, NodeKwil, WebKwil} from \"@kwilteam/kwil-js\";\nimport { ActionBody } from '@kwilteam/kwil-js/dist/core/action';\nimport {NamedParams} from \"@kwilteam/kwil-js/dist/core/action\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { Either } from \"monads-io\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { head } from \"../util/head\";\nimport { StreamId } from \"../util/StreamId\";\nimport { toVisibilityEnum, VisibilityEnum } from \"../util/visibility\";\nimport {\n MetadataKey,\n MetadataKeyValueMap,\n MetadataTableKey,\n MetadataValueTypeForKey,\n StreamType,\n} from \"./contractValues\";\nimport {ValueType} from \"@kwilteam/kwil-js/dist/utils/types\";\n\nexport interface GetRecordInput {\n stream: StreamLocator;\n from?: number;\n to?: number;\n frozenAt?: number;\n baseTime?: DateString | number;\n}\n\nexport interface GetFirstRecordInput {\n stream: StreamLocator;\n after?: number;\n frozenAt?: number;\n}\n\nexport interface StreamRecord {\n eventTime: number;\n value: string;\n}\n\nexport interface GetIndexChangeInput extends GetRecordInput {\n timeInterval: number;\n}\n\nexport class Action {\n protected kwilClient: WebKwil | NodeKwil;\n protected kwilSigner: KwilSigner;\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ) {\n this.kwilClient = kwilClient;\n this.kwilSigner = kwilSigner;\n }\n\n /**\n * Executes a method on the stream\n */\n protected async executeWithNamedParams(\n method: string,\n inputs: NamedParams[],\n ): Promise<GenericResponse<TxReceipt>> {\n return this.kwilClient.execute({\n namespace: \"main\",\n name: method,\n inputs,\n description: `TN SDK - Executing method on stream: ${method}`,\n },\n this.kwilSigner,\n );\n }\n\n /**\n * Executes a method on the stream\n */\n protected async executeWithActionBody(\n inputs: ActionBody,\n synchronous: boolean = false,\n ): Promise<GenericResponse<TxReceipt>> {\n return this.kwilClient.execute(inputs, this.kwilSigner, synchronous);\n }\n\n /**\n * Calls a method on the stream\n */\n protected async call<T>(\n method: string,\n inputs: NamedParams,\n ): Promise<Either<number, T>> {\n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: method,\n inputs: inputs,\n },\n this.kwilSigner,\n );\n\n if (result.status !== 200) {\n return Either.left(result.status);\n }\n\n return Either.right(result.data?.result as T);\n }\n\n /**\n * Returns the records of the stream within the given date range\n */\n public async getRecord(input: GetRecordInput): Promise<StreamRecord[]> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_record\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the index of the stream within the given date range\n */\n public async getIndex(input: GetRecordInput): Promise<StreamRecord[]> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_index\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n $base_time: input.baseTime,\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the type of the stream\n */\n public async getType(\n stream: StreamLocator,\n ): Promise<StreamType> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.TypeKey);\n\n if (!result) {\n throw new Error(\"Failed to get stream type\");\n }\n\n const type = head(result).unwrapOrElse(() => {\n throw new Error(\n \"Failed to get stream type. Check if the stream is initialized.\",\n );\n });\n\n const validTypes = [StreamType.Primitive, StreamType.Composed];\n\n if (!validTypes.includes(type.value as StreamType)) {\n throw new Error(`Invalid stream type: ${type.value}`);\n }\n\n return type.value as StreamType;\n }\n\n /**\n * Returns the first record of the stream\n */\n public async getFirstRecord(\n input: GetFirstRecordInput,\n ): Promise<StreamRecord | null> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_first_record\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $after: input.after,\n $frozen_at: input.frozenAt,\n }\n );\n\n return result\n .mapRight(head)\n .mapRight((result) =>\n result\n .map((result) => ({\n eventTime: result.event_time,\n value: result.value,\n }))\n .unwrapOr(null),\n )\n .throw();\n }\n\n protected async setMetadata<K extends MetadataKey>(\n stream: StreamLocator,\n key: K,\n value: MetadataValueTypeForKey<K>,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.executeWithNamedParams(\"insert_metadata\", [{\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $key: key,\n $value: value,\n $val_type: MetadataKeyValueMap[key],\n },\n ]);\n }\n\n protected async getMetadata<K extends MetadataKey>(\n stream: StreamLocator,\n key: K,\n // onlyLatest: boolean = true,\n filteredRef?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ): Promise<\n { rowId: string; value: MetadataValueTypeForKey<K>; createdAt: number }[]\n > {\n const result = await this.call<\n {\n row_id: string;\n value_i: number;\n value_f: string;\n value_b: boolean;\n value_s: string;\n value_ref: string;\n created_at: number;\n }[]\n >(\"get_metadata\", {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $key: key,\n $ref: filteredRef,\n $limit: limit,\n $offset: offset,\n $order_by: orderBy,\n },\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n rowId: row.row_id,\n value: row[\n MetadataTableKey[MetadataKeyValueMap[key as MetadataKey]]\n ] as MetadataValueTypeForKey<K>,\n createdAt: row.created_at,\n })),\n )\n .throw();\n }\n\n /**\n * Sets the read visibility of the stream\n */\n public async setReadVisibility(\n stream: StreamLocator,\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.ReadVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the read visibility of the stream\n */\n public async getReadVisibility(\n stream: StreamLocator,\n ): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.ReadVisibilityKey);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Sets the compose visibility of the stream\n */\n public async setComposeVisibility(\n stream: StreamLocator,\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.ComposeVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the compose visibility of the stream\n */\n public async getComposeVisibility(\n stream: StreamLocator,\n ): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.ComposeVisibilityKey);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Allows a wallet to read the stream\n */\n public async allowReadWallet(\n stream: StreamLocator,\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n }\n\n /**\n * Disables a wallet from reading the stream\n */\n public async disableReadWallet(\n stream: StreamLocator,\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Wallet not found in allowed list\");\n }\n\n return await this.disableMetadata(stream, row_id);\n }\n\n /**\n * Allows a stream to use this stream as child\n */\n public async allowComposeStream(\n stream: StreamLocator,\n wallet: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey,\n wallet.streamId.getId(),\n );\n }\n\n /**\n * Disables a stream from using this stream as child\n */\n public async disableComposeStream(\n stream: StreamLocator,\n wallet: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey,\n wallet.toString(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Stream not found in allowed list\");\n }\n\n return await this.disableMetadata(stream, row_id);\n }\n\n protected async disableMetadata(\n stream: StreamLocator,\n rowId: string,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.executeWithNamedParams(\"disable_metadata\", [{\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $row_id: rowId,\n }]);\n }\n\n /**\n * Returns the wallets allowed to read the stream\n */\n public async getAllowedReadWallets(\n stream: StreamLocator,\n ): Promise<EthereumAddress[]> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowReadWalletKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => new EthereumAddress(row.value));\n }\n\n /**\n * Returns the streams allowed to compose the stream\n */\n public async getAllowedComposeStreams(\n stream: StreamLocator,\n ): Promise<StreamLocator[]> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => {\n const [streamId, dataProvider] = row.value.split(\":\");\n return {\n streamId: StreamId.fromString(streamId).throw(),\n dataProvider: new EthereumAddress(dataProvider),\n };\n });\n }\n\n /**\n * Returns the index change of the stream within the given date range\n */\n public async getIndexChange(\n input: GetIndexChangeInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_index_change\", \n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n $base_time: input.baseTime,\n $time_interval: input.timeInterval,\n }\n );\n\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * A custom method that accepts the procedure name and the input of GetRecordInput\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_price\" that returns a list of date_value and value\n * can be called with customGetProcedure(\"get_price\", { dateFrom: \"2021-01-01\", dateTo: \"2021-01-31\" })\n */\n public async customGetProcedure(\n procedure: string,\n input: GetRecordInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n procedure,\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n\n /**\n * A custom method that accepts the procedure name and custom input of type Record<string, any>\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_custom_index\" that returns a list of date_value and value\n * can be called with customProcedureWithArgs(\"get_custom_index\", { $customArg1: \"value1\", $customArg2: \"value2\" })\n * where $customArg1 and $customArg2 are the arguments of the procedure\n * @param procedure\n * @param args\n */\n public async customProcedureWithArgs(\n procedure: string,\n args: Record<string, ValueType | ValueType[]>,\n ){\n const result = await this.call<{ event_time: number; value: string }[]>(\n procedure,\n args\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["result"]
7
+ }