@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.
- package/README.md +91 -13
- package/dist/cjs/client/client.cjs +41 -32
- package/dist/cjs/client/client.cjs.map +2 -2
- package/dist/cjs/client/getLastTransactions.cjs +67 -0
- package/dist/cjs/client/getLastTransactions.cjs.map +7 -0
- package/dist/cjs/client/listStreams.cjs +46 -0
- package/dist/cjs/client/listStreams.cjs.map +7 -0
- package/dist/cjs/contracts-api/{stream.cjs → action.cjs} +140 -159
- package/dist/cjs/contracts-api/action.cjs.map +7 -0
- package/dist/cjs/contracts-api/composedAction.cjs +183 -0
- package/dist/cjs/contracts-api/composedAction.cjs.map +7 -0
- package/dist/cjs/contracts-api/{destroyStream.cjs → deleteStream.cjs} +16 -16
- package/dist/cjs/contracts-api/deleteStream.cjs.map +7 -0
- package/dist/cjs/contracts-api/deployStream.cjs +33 -16
- package/dist/cjs/contracts-api/deployStream.cjs.map +3 -3
- package/dist/cjs/contracts-api/primitiveAction.cjs +92 -0
- package/dist/cjs/contracts-api/primitiveAction.cjs.map +7 -0
- package/dist/cjs/index.common.cjs +6 -6
- package/dist/cjs/index.common.cjs.map +1 -1
- package/dist/cjs/types/transaction.cjs +19 -0
- package/dist/cjs/types/transaction.cjs.map +7 -0
- package/dist/cjs/util/EthereumAddress.cjs +0 -1
- package/dist/cjs/util/EthereumAddress.cjs.map +2 -2
- package/dist/cjs/util/StreamId.cjs +7 -2
- package/dist/cjs/util/StreamId.cjs.map +2 -2
- package/dist/esm/client/client.mjs +41 -32
- package/dist/esm/client/client.mjs.map +2 -2
- package/dist/esm/client/getLastTransactions.mjs +46 -0
- package/dist/esm/client/getLastTransactions.mjs.map +7 -0
- package/dist/esm/client/listStreams.mjs +25 -0
- package/dist/esm/client/listStreams.mjs.map +7 -0
- package/dist/esm/contracts-api/{stream.mjs → action.mjs} +137 -156
- package/dist/esm/contracts-api/action.mjs.map +7 -0
- package/dist/esm/contracts-api/composedAction.mjs +156 -0
- package/dist/esm/contracts-api/composedAction.mjs.map +7 -0
- package/dist/esm/contracts-api/deleteStream.mjs +24 -0
- package/dist/esm/contracts-api/deleteStream.mjs.map +7 -0
- package/dist/esm/contracts-api/deployStream.mjs +23 -21
- package/dist/esm/contracts-api/deployStream.mjs.map +2 -2
- package/dist/esm/contracts-api/primitiveAction.mjs +71 -0
- package/dist/esm/contracts-api/primitiveAction.mjs.map +7 -0
- package/dist/esm/index.common.mjs +6 -6
- package/dist/esm/index.common.mjs.map +1 -1
- package/dist/esm/types/transaction.mjs +1 -0
- package/dist/esm/types/transaction.mjs.map +7 -0
- package/dist/esm/util/EthereumAddress.mjs +0 -1
- package/dist/esm/util/EthereumAddress.mjs.map +2 -2
- package/dist/esm/util/StreamId.mjs +7 -2
- package/dist/esm/util/StreamId.mjs.map +2 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/client/client.d.ts +38 -15
- package/dist/types/client/client.d.ts.map +1 -1
- package/dist/types/client/getLastTransactions.d.ts +5 -0
- package/dist/types/client/getLastTransactions.d.ts.map +1 -0
- package/dist/types/client/listStreams.d.ts +12 -0
- package/dist/types/client/listStreams.d.ts.map +1 -0
- package/dist/types/contracts-api/action.d.ts +136 -0
- package/dist/types/contracts-api/action.d.ts.map +1 -0
- package/dist/types/contracts-api/{composedStream.d.ts → composedAction.d.ts} +11 -22
- package/dist/types/contracts-api/composedAction.d.ts.map +1 -0
- package/dist/types/contracts-api/{destroyStream.d.ts → deleteStream.d.ts} +7 -7
- package/dist/types/contracts-api/deleteStream.d.ts.map +1 -0
- package/dist/types/contracts-api/deployStream.d.ts +2 -2
- package/dist/types/contracts-api/deployStream.d.ts.map +1 -1
- package/dist/types/contracts-api/primitiveAction.d.ts +33 -0
- package/dist/types/contracts-api/primitiveAction.d.ts.map +1 -0
- package/dist/types/index.common.d.ts +7 -7
- package/dist/types/types/transaction.d.ts +11 -0
- package/dist/types/types/transaction.d.ts.map +1 -0
- package/dist/types/util/EthereumAddress.d.ts.map +1 -1
- package/dist/types/util/StreamId.d.ts +2 -0
- package/dist/types/util/StreamId.d.ts.map +1 -1
- package/dist/types/util/visibility.d.ts.map +1 -1
- package/package.json +10 -6
- package/dist/cjs/client/listAllStreams.cjs +0 -51
- package/dist/cjs/client/listAllStreams.cjs.map +0 -7
- package/dist/cjs/contracts/composed_stream_template.json +0 -1638
- package/dist/cjs/contracts/composed_stream_template_unix.json +0 -2122
- package/dist/cjs/contracts/contractsContent.cjs +0 -65
- package/dist/cjs/contracts/contractsContent.cjs.map +0 -7
- package/dist/cjs/contracts/primitive_stream_template.json +0 -952
- package/dist/cjs/contracts/primitive_stream_template_unix.json +0 -1173
- package/dist/cjs/contracts-api/composedStream.cjs +0 -137
- package/dist/cjs/contracts-api/composedStream.cjs.map +0 -7
- package/dist/cjs/contracts-api/destroyStream.cjs.map +0 -7
- package/dist/cjs/contracts-api/primitiveStream.cjs +0 -86
- package/dist/cjs/contracts-api/primitiveStream.cjs.map +0 -7
- package/dist/cjs/contracts-api/stream.cjs.map +0 -7
- package/dist/esm/client/listAllStreams.mjs +0 -30
- package/dist/esm/client/listAllStreams.mjs.map +0 -7
- package/dist/esm/contracts/composed_stream_template.json +0 -1638
- package/dist/esm/contracts/composed_stream_template_unix.json +0 -2122
- package/dist/esm/contracts/contractsContent.mjs +0 -33
- package/dist/esm/contracts/contractsContent.mjs.map +0 -7
- package/dist/esm/contracts/primitive_stream_template.json +0 -952
- package/dist/esm/contracts/primitive_stream_template_unix.json +0 -1173
- package/dist/esm/contracts-api/composedStream.mjs +0 -116
- package/dist/esm/contracts-api/composedStream.mjs.map +0 -7
- package/dist/esm/contracts-api/destroyStream.mjs +0 -24
- package/dist/esm/contracts-api/destroyStream.mjs.map +0 -7
- package/dist/esm/contracts-api/primitiveStream.mjs +0 -65
- package/dist/esm/contracts-api/primitiveStream.mjs.map +0 -7
- package/dist/esm/contracts-api/stream.mjs.map +0 -7
- package/dist/types/client/listAllStreams.d.ts +0 -14
- package/dist/types/client/listAllStreams.d.ts.map +0 -1
- package/dist/types/contracts/contractsContent.d.ts +0 -6
- package/dist/types/contracts/contractsContent.d.ts.map +0 -1
- package/dist/types/contracts-api/composedStream.d.ts.map +0 -1
- package/dist/types/contracts-api/destroyStream.d.ts.map +0 -1
- package/dist/types/contracts-api/primitiveStream.d.ts +0 -39
- package/dist/types/contracts-api/primitiveStream.d.ts.map +0 -1
- package/dist/types/contracts-api/stream.d.ts +0 -142
- 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/
|
|
21
|
-
var
|
|
22
|
-
__export(
|
|
23
|
-
|
|
20
|
+
// src/contracts-api/action.ts
|
|
21
|
+
var action_exports = {};
|
|
22
|
+
__export(action_exports, {
|
|
23
|
+
Action: () => Action
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
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
|
|
32
|
+
var Action = class {
|
|
35
33
|
kwilClient;
|
|
36
34
|
kwilSigner;
|
|
37
|
-
|
|
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
|
|
42
|
+
async executeWithNamedParams(method, inputs) {
|
|
68
43
|
return this.kwilClient.execute(
|
|
69
44
|
{
|
|
70
|
-
|
|
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
|
|
54
|
+
* Executes a method on the stream
|
|
80
55
|
*/
|
|
81
|
-
async
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
|
|
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.
|
|
218
|
-
|
|
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,
|
|
226
|
-
const result = await this.call(
|
|
227
|
-
|
|
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
|
-
$
|
|
230
|
-
$
|
|
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(
|
|
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
|
-
|
|
272
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
271
|
+
async disableComposeStream(stream, wallet) {
|
|
317
272
|
const result = await this.getMetadata(
|
|
273
|
+
stream,
|
|
318
274
|
import_contractValues.MetadataKey.AllowComposeStreamKey,
|
|
319
|
-
|
|
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.
|
|
330
|
-
|
|
331
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
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
|
-
|
|
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
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
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
|
-
|
|
379
|
+
eventTime: row.event_time,
|
|
399
380
|
value: row.value
|
|
400
381
|
}))
|
|
401
382
|
).throw();
|
|
402
383
|
}
|
|
403
384
|
};
|
|
404
|
-
//# sourceMappingURL=
|
|
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
|
+
}
|