@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
@@ -17,57 +17,32 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // src/contracts-api/stream.ts
21
- var stream_exports = {};
22
- __export(stream_exports, {
23
- Stream: () => Stream
20
+ // src/contracts-api/action.ts
21
+ var action_exports = {};
22
+ __export(action_exports, {
23
+ Action: () => Action
24
24
  });
25
- module.exports = __toCommonJS(stream_exports);
26
- var import_action = require("@kwilteam/kwil-js/dist/core/action.js");
27
- var import_dbid = require("@kwilteam/kwil-js/dist/utils/dbid.js");
25
+ module.exports = __toCommonJS(action_exports);
28
26
  var import_monads_io = require("monads-io");
29
27
  var import_EthereumAddress = require("../util/EthereumAddress.cjs");
30
28
  var import_head = require("../util/head.cjs");
31
29
  var import_StreamId = require("../util/StreamId.cjs");
32
30
  var import_visibility = require("../util/visibility.cjs");
33
31
  var import_contractValues = require("./contractValues.cjs");
34
- var Stream = class {
32
+ var Action = class {
35
33
  kwilClient;
36
34
  kwilSigner;
37
- locator;
38
- dbid;
39
- schema;
40
- deployed = false;
41
- initialized = false;
42
- constructor(kwilClient, kwilSigner, locator) {
35
+ constructor(kwilClient, kwilSigner) {
43
36
  this.kwilClient = kwilClient;
44
37
  this.kwilSigner = kwilSigner;
45
- this.locator = locator;
46
- this.dbid = (0, import_dbid.generateDBID)(
47
- locator.dataProvider.getAddress(),
48
- locator.streamId.getId()
49
- );
50
- }
51
- /**
52
- * Loads the schema for this stream from the network.
53
- * Throws if the stream is not deployed.
54
- */
55
- async loadSchema() {
56
- const response = await this.kwilClient.getSchema(this.dbid);
57
- if (response.status !== 200 || !response.data) {
58
- throw new Error(
59
- `Failed to load schema for stream ${this.locator.streamId.getId()}`
60
- );
61
- }
62
- this.schema = response.data;
63
38
  }
64
39
  /**
65
40
  * Executes a method on the stream
66
41
  */
67
- async execute(method, inputs) {
42
+ async executeWithNamedParams(method, inputs) {
68
43
  return this.kwilClient.execute(
69
44
  {
70
- dbid: this.dbid,
45
+ namespace: "main",
71
46
  name: method,
72
47
  inputs,
73
48
  description: `TN SDK - Executing method on stream: ${method}`
@@ -76,11 +51,10 @@ var Stream = class {
76
51
  );
77
52
  }
78
53
  /**
79
- * Executes a method on the stream after checking if it's initialized
54
+ * Executes a method on the stream
80
55
  */
81
- async checkedExecute(method, inputs) {
82
- await this.checkInitialized();
83
- return this.execute(method, inputs);
56
+ async executeWithActionBody(inputs, synchronous = false) {
57
+ return this.kwilClient.execute(inputs, this.kwilSigner, synchronous);
84
58
  }
85
59
  /**
86
60
  * Calls a method on the stream
@@ -88,7 +62,7 @@ var Stream = class {
88
62
  async call(method, inputs) {
89
63
  const result = await this.kwilClient.call(
90
64
  {
91
- dbid: this.dbid,
65
+ namespace: "main",
92
66
  name: method,
93
67
  inputs
94
68
  },
@@ -99,55 +73,23 @@ var Stream = class {
99
73
  }
100
74
  return import_monads_io.Either.right(result.data?.result);
101
75
  }
102
- /**
103
- * Checks if the stream is initialized
104
- */
105
- async checkInitialized(expectedType) {
106
- if (this.initialized) {
107
- return;
108
- }
109
- this.checkDeployed();
110
- const type = await this.getType();
111
- const expectedTypes = expectedType ? [expectedType] : [import_contractValues.StreamType.Primitive, import_contractValues.StreamType.Composed];
112
- if (!expectedTypes.includes(type)) {
113
- throw new Error(`Invalid stream type: ${type}`);
114
- }
115
- this.initialized = true;
116
- }
117
- /**
118
- * Checks if the stream is deployed
119
- */
120
- async checkDeployed() {
121
- if (this.deployed) {
122
- return;
123
- }
124
- await this.loadSchema();
125
- this.deployed = true;
126
- }
127
- /**
128
- * Initializes the stream
129
- */
130
- async initializeStream() {
131
- return this.execute("init", []);
132
- }
133
76
  /**
134
77
  * Returns the records of the stream within the given date range
135
78
  */
136
79
  async getRecord(input) {
137
80
  const result = await this.call(
138
81
  "get_record",
139
- [
140
- import_action.ActionInput.fromObject({
141
- $date_from: input.dateFrom,
142
- $date_to: input.dateTo,
143
- $frozen_at: input.frozenAt,
144
- $base_date: input.baseDate
145
- })
146
- ]
82
+ {
83
+ $data_provider: input.stream.dataProvider.getAddress(),
84
+ $stream_id: input.stream.streamId.getId(),
85
+ $from: input.from,
86
+ $to: input.to,
87
+ $frozen_at: input.frozenAt
88
+ }
147
89
  );
148
90
  return result.mapRight(
149
91
  (result2) => result2.map((row) => ({
150
- dateValue: row.date_value,
92
+ eventTime: row.event_time,
151
93
  value: row.value
152
94
  }))
153
95
  ).throw();
@@ -158,18 +100,18 @@ var Stream = class {
158
100
  async getIndex(input) {
159
101
  const result = await this.call(
160
102
  "get_index",
161
- [
162
- import_action.ActionInput.fromObject({
163
- $date_from: input.dateFrom,
164
- $date_to: input.dateTo,
165
- $frozen_at: input.frozenAt,
166
- $base_date: input.baseDate
167
- })
168
- ]
103
+ {
104
+ $data_provider: input.stream.dataProvider.getAddress(),
105
+ $stream_id: input.stream.streamId.getId(),
106
+ $from: input.from,
107
+ $to: input.to,
108
+ $frozen_at: input.frozenAt,
109
+ $base_time: input.baseTime
110
+ }
169
111
  );
170
112
  return result.mapRight(
171
113
  (result2) => result2.map((row) => ({
172
- dateValue: row.date_value,
114
+ eventTime: row.event_time,
173
115
  value: row.value
174
116
  }))
175
117
  ).throw();
@@ -177,8 +119,11 @@ var Stream = class {
177
119
  /**
178
120
  * Returns the type of the stream
179
121
  */
180
- async getType() {
181
- const result = await this.getMetadata(import_contractValues.MetadataKey.TypeKey, true);
122
+ async getType(stream) {
123
+ const result = await this.getMetadata(
124
+ stream,
125
+ import_contractValues.MetadataKey.TypeKey
126
+ );
182
127
  if (!result) {
183
128
  throw new Error("Failed to get stream type");
184
129
  }
@@ -199,37 +144,44 @@ var Stream = class {
199
144
  async getFirstRecord(input) {
200
145
  const result = await this.call(
201
146
  "get_first_record",
202
- [
203
- import_action.ActionInput.fromObject({
204
- $after_date: input.afterDate,
205
- $frozen_at: input.frozenAt
206
- })
207
- ]
147
+ {
148
+ $data_provider: input.stream.dataProvider.getAddress(),
149
+ $stream_id: input.stream.streamId.getId(),
150
+ $after: input.after,
151
+ $frozen_at: input.frozenAt
152
+ }
208
153
  );
209
154
  return result.mapRight(import_head.head).mapRight(
210
155
  (result2) => result2.map((result3) => ({
211
- dateValue: result3.date_value,
156
+ eventTime: result3.event_time,
212
157
  value: result3.value
213
158
  })).unwrapOr(null)
214
159
  ).throw();
215
160
  }
216
- async setMetadata(key, value) {
217
- return await this.execute("insert_metadata", [
218
- import_action.ActionInput.fromObject({
161
+ async setMetadata(stream, key, value) {
162
+ return await this.executeWithNamedParams("insert_metadata", [
163
+ {
164
+ $data_provider: stream.dataProvider.getAddress(),
165
+ $stream_id: stream.streamId.getId(),
219
166
  $key: key,
220
167
  $value: value,
221
168
  $val_type: import_contractValues.MetadataKeyValueMap[key]
222
- })
169
+ }
223
170
  ]);
224
171
  }
225
- async getMetadata(key, onlyLatest = true, filteredRef) {
226
- const result = await this.call("get_metadata", [
227
- import_action.ActionInput.fromObject({
172
+ async getMetadata(stream, key, filteredRef, limit, offset, orderBy) {
173
+ const result = await this.call(
174
+ "get_metadata",
175
+ {
176
+ $data_provider: stream.dataProvider.getAddress(),
177
+ $stream_id: stream.streamId.getId(),
228
178
  $key: key,
229
- $only_latest: onlyLatest,
230
- $ref: filteredRef
231
- })
232
- ]);
179
+ $ref: filteredRef,
180
+ $limit: limit,
181
+ $offset: offset,
182
+ $order_by: orderBy
183
+ }
184
+ );
233
185
  return result.mapRight(
234
186
  (result2) => result2.map((row) => ({
235
187
  rowId: row.row_id,
@@ -241,8 +193,9 @@ var Stream = class {
241
193
  /**
242
194
  * Sets the read visibility of the stream
243
195
  */
244
- async setReadVisibility(visibility) {
196
+ async setReadVisibility(stream, visibility) {
245
197
  return await this.setMetadata(
198
+ stream,
246
199
  import_contractValues.MetadataKey.ReadVisibilityKey,
247
200
  visibility.toString()
248
201
  );
@@ -250,15 +203,19 @@ var Stream = class {
250
203
  /**
251
204
  * Returns the read visibility of the stream
252
205
  */
253
- async getReadVisibility() {
254
- const result = await this.getMetadata(import_contractValues.MetadataKey.ReadVisibilityKey, true);
206
+ async getReadVisibility(stream) {
207
+ const result = await this.getMetadata(
208
+ stream,
209
+ import_contractValues.MetadataKey.ReadVisibilityKey
210
+ );
255
211
  return (0, import_head.head)(result).map((row) => (0, import_visibility.toVisibilityEnum)(row.value)).unwrapOr(null);
256
212
  }
257
213
  /**
258
214
  * Sets the compose visibility of the stream
259
215
  */
260
- async setComposeVisibility(visibility) {
216
+ async setComposeVisibility(stream, visibility) {
261
217
  return await this.setMetadata(
218
+ stream,
262
219
  import_contractValues.MetadataKey.ComposeVisibilityKey,
263
220
  visibility.toString()
264
221
  );
@@ -266,18 +223,19 @@ var Stream = class {
266
223
  /**
267
224
  * Returns the compose visibility of the stream
268
225
  */
269
- async getComposeVisibility() {
226
+ async getComposeVisibility(stream) {
270
227
  const result = await this.getMetadata(
271
- import_contractValues.MetadataKey.ComposeVisibilityKey,
272
- true
228
+ stream,
229
+ import_contractValues.MetadataKey.ComposeVisibilityKey
273
230
  );
274
231
  return (0, import_head.head)(result).map((row) => (0, import_visibility.toVisibilityEnum)(row.value)).unwrapOr(null);
275
232
  }
276
233
  /**
277
234
  * Allows a wallet to read the stream
278
235
  */
279
- async allowReadWallet(wallet) {
236
+ async allowReadWallet(stream, wallet) {
280
237
  return await this.setMetadata(
238
+ stream,
281
239
  import_contractValues.MetadataKey.AllowReadWalletKey,
282
240
  wallet.getAddress()
283
241
  );
@@ -285,65 +243,68 @@ var Stream = class {
285
243
  /**
286
244
  * Disables a wallet from reading the stream
287
245
  */
288
- async disableReadWallet(wallet) {
246
+ async disableReadWallet(stream, wallet) {
289
247
  const result = await this.getMetadata(
248
+ stream,
290
249
  import_contractValues.MetadataKey.AllowReadWalletKey,
291
- true,
292
250
  wallet.getAddress()
293
251
  );
294
252
  const row_id = (0, import_head.head)(result).map((row) => row.rowId).unwrapOr(null);
295
253
  if (!row_id) {
296
254
  throw new Error("Wallet not found in allowed list");
297
255
  }
298
- return await this.disableMetadata(row_id);
256
+ return await this.disableMetadata(stream, row_id);
299
257
  }
300
258
  /**
301
259
  * Allows a stream to use this stream as child
302
260
  */
303
- async allowComposeStream(locator) {
304
- const streamDbId = (0, import_dbid.generateDBID)(
305
- locator.dataProvider.getAddress(),
306
- locator.streamId.getId()
307
- );
261
+ async allowComposeStream(stream, wallet) {
308
262
  return await this.setMetadata(
263
+ stream,
309
264
  import_contractValues.MetadataKey.AllowComposeStreamKey,
310
- streamDbId
265
+ wallet.streamId.getId()
311
266
  );
312
267
  }
313
268
  /**
314
269
  * Disables a stream from using this stream as child
315
270
  */
316
- async disableComposeStream(locator) {
271
+ async disableComposeStream(stream, wallet) {
317
272
  const result = await this.getMetadata(
273
+ stream,
318
274
  import_contractValues.MetadataKey.AllowComposeStreamKey,
319
- true,
320
- locator.toString()
275
+ wallet.toString()
321
276
  );
322
277
  const row_id = (0, import_head.head)(result).map((row) => row.rowId).unwrapOr(null);
323
278
  if (!row_id) {
324
279
  throw new Error("Stream not found in allowed list");
325
280
  }
326
- return await this.disableMetadata(row_id);
281
+ return await this.disableMetadata(stream, row_id);
327
282
  }
328
- async disableMetadata(rowId) {
329
- return await this.execute("disable_metadata", [
330
- import_action.ActionInput.fromObject({
331
- $row_id: rowId
332
- })
333
- ]);
283
+ async disableMetadata(stream, rowId) {
284
+ return await this.executeWithNamedParams("disable_metadata", [{
285
+ $data_provider: stream.dataProvider.getAddress(),
286
+ $stream_id: stream.streamId.getId(),
287
+ $row_id: rowId
288
+ }]);
334
289
  }
335
290
  /**
336
291
  * Returns the wallets allowed to read the stream
337
292
  */
338
- async getAllowedReadWallets() {
339
- const result = await this.getMetadata(import_contractValues.MetadataKey.AllowReadWalletKey);
293
+ async getAllowedReadWallets(stream) {
294
+ const result = await this.getMetadata(
295
+ stream,
296
+ import_contractValues.MetadataKey.AllowReadWalletKey
297
+ );
340
298
  return result.filter((row) => row.value).map((row) => new import_EthereumAddress.EthereumAddress(row.value));
341
299
  }
342
300
  /**
343
301
  * Returns the streams allowed to compose the stream
344
302
  */
345
- async getAllowedComposeStreams() {
346
- const result = await this.getMetadata(import_contractValues.MetadataKey.AllowComposeStreamKey);
303
+ async getAllowedComposeStreams(stream) {
304
+ const result = await this.getMetadata(
305
+ stream,
306
+ import_contractValues.MetadataKey.AllowComposeStreamKey
307
+ );
347
308
  return result.filter((row) => row.value).map((row) => {
348
309
  const [streamId, dataProvider] = row.value.split(":");
349
310
  return {
@@ -358,19 +319,19 @@ var Stream = class {
358
319
  async getIndexChange(input) {
359
320
  const result = await this.call(
360
321
  "get_index_change",
361
- [
362
- import_action.ActionInput.fromObject({
363
- $date_from: input.dateFrom,
364
- $date_to: input.dateTo,
365
- $frozen_at: input.frozenAt,
366
- $base_date: input.baseDate,
367
- $days_interval: input.daysInterval
368
- })
369
- ]
322
+ {
323
+ $data_provider: input.stream.dataProvider.getAddress(),
324
+ $stream_id: input.stream.streamId.getId(),
325
+ $from: input.from,
326
+ $to: input.to,
327
+ $frozen_at: input.frozenAt,
328
+ $base_time: input.baseTime,
329
+ $time_interval: input.timeInterval
330
+ }
370
331
  );
371
332
  return result.mapRight(
372
333
  (result2) => result2.map((row) => ({
373
- dateValue: row.date_value,
334
+ eventTime: row.event_time,
374
335
  value: row.value
375
336
  }))
376
337
  ).throw();
@@ -384,21 +345,41 @@ var Stream = class {
384
345
  async customGetProcedure(procedure, input) {
385
346
  const result = await this.call(
386
347
  procedure,
387
- [
388
- import_action.ActionInput.fromObject({
389
- $date_from: input.dateFrom,
390
- $date_to: input.dateTo,
391
- $frozen_at: input.frozenAt,
392
- $base_date: input.baseDate
393
- })
394
- ]
348
+ {
349
+ $data_provider: input.stream.dataProvider.getAddress(),
350
+ $stream_id: input.stream.streamId.getId(),
351
+ $from: input.from,
352
+ $to: input.to,
353
+ $frozen_at: input.frozenAt
354
+ }
355
+ );
356
+ return result.mapRight(
357
+ (result2) => result2.map((row) => ({
358
+ eventTime: row.event_time,
359
+ value: row.value
360
+ }))
361
+ ).throw();
362
+ }
363
+ /**
364
+ * A custom method that accepts the procedure name and custom input of type Record<string, any>
365
+ * Returns the result of the procedure in the same format as StreamRecord
366
+ * I.e. a custom procedure named "get_custom_index" that returns a list of date_value and value
367
+ * can be called with customProcedureWithArgs("get_custom_index", { $customArg1: "value1", $customArg2: "value2" })
368
+ * where $customArg1 and $customArg2 are the arguments of the procedure
369
+ * @param procedure
370
+ * @param args
371
+ */
372
+ async customProcedureWithArgs(procedure, args) {
373
+ const result = await this.call(
374
+ procedure,
375
+ args
395
376
  );
396
377
  return result.mapRight(
397
378
  (result2) => result2.map((row) => ({
398
- dateValue: row.date_value,
379
+ eventTime: row.event_time,
399
380
  value: row.value
400
381
  }))
401
382
  ).throw();
402
383
  }
403
384
  };
404
- //# sourceMappingURL=stream.cjs.map
385
+ //# sourceMappingURL=action.cjs.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
+ }