@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
|
@@ -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/
|
|
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
|
|
20
|
-
constructor(kwilClient, kwilSigner
|
|
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
|
|
27
|
+
async executeWithNamedParams(method, inputs) {
|
|
53
28
|
return this.kwilClient.execute(
|
|
54
29
|
{
|
|
55
|
-
|
|
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
|
|
39
|
+
* Executes a method on the stream
|
|
65
40
|
*/
|
|
66
|
-
async
|
|
67
|
-
|
|
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
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
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
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
-
|
|
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.
|
|
203
|
-
|
|
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,
|
|
211
|
-
const result = await this.call(
|
|
212
|
-
|
|
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
|
-
$
|
|
215
|
-
$
|
|
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(
|
|
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
|
-
|
|
257
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
256
|
+
async disableComposeStream(stream, wallet) {
|
|
302
257
|
const result = await this.getMetadata(
|
|
258
|
+
stream,
|
|
303
259
|
MetadataKey.AllowComposeStreamKey,
|
|
304
|
-
|
|
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.
|
|
315
|
-
|
|
316
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
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
|
-
|
|
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
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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
|
-
|
|
364
|
+
eventTime: row.event_time,
|
|
384
365
|
value: row.value
|
|
385
366
|
}))
|
|
386
367
|
).throw();
|
|
387
368
|
}
|
|
388
369
|
};
|
|
389
370
|
export {
|
|
390
|
-
|
|
371
|
+
Action
|
|
391
372
|
};
|
|
392
|
-
//# sourceMappingURL=
|
|
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
|
+
}
|