@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
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/contracts-api/composedAction.ts
|
|
31
|
+
var composedAction_exports = {};
|
|
32
|
+
__export(composedAction_exports, {
|
|
33
|
+
ComposedAction: () => ComposedAction,
|
|
34
|
+
ErrorStreamNotComposed: () => ErrorStreamNotComposed
|
|
35
|
+
});
|
|
36
|
+
module.exports = __toCommonJS(composedAction_exports);
|
|
37
|
+
var import_kwil_js = require("@kwilteam/kwil-js");
|
|
38
|
+
var import_EthereumAddress = require("../util/EthereumAddress.cjs");
|
|
39
|
+
var import_StreamId = require("../util/StreamId.cjs");
|
|
40
|
+
var import_action = require("./action.cjs");
|
|
41
|
+
var import_pg = __toESM(require("pg"), 1);
|
|
42
|
+
var DataType = import_kwil_js.Utils.DataType;
|
|
43
|
+
var { Pool } = import_pg.default;
|
|
44
|
+
var ErrorStreamNotComposed = "stream is not a composed stream";
|
|
45
|
+
var ComposedAction = class _ComposedAction extends import_action.Action {
|
|
46
|
+
neonConnectionString;
|
|
47
|
+
constructor(kwilClient, kwilSigner, neonConnectionString) {
|
|
48
|
+
super(kwilClient, kwilSigner);
|
|
49
|
+
this.neonConnectionString = neonConnectionString;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Returns the taxonomy of the stream
|
|
53
|
+
* @param params Parameters for describing taxonomies
|
|
54
|
+
* @returns A promise that resolves to the taxonomy
|
|
55
|
+
*/
|
|
56
|
+
async describeTaxonomies(params) {
|
|
57
|
+
const result = await this.call(
|
|
58
|
+
"describe_taxonomies",
|
|
59
|
+
{
|
|
60
|
+
$data_provider: params.stream.dataProvider.getAddress(),
|
|
61
|
+
$stream_id: params.stream.streamId.getId(),
|
|
62
|
+
$latest_group_sequence: params.latestGroupSequence
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
return result.mapRight((records) => {
|
|
66
|
+
const taxonomyItems = records.reduce(
|
|
67
|
+
(acc, record) => {
|
|
68
|
+
const currentArray = acc.get(record.start_date.toString()) || [];
|
|
69
|
+
currentArray.push({
|
|
70
|
+
childStream: {
|
|
71
|
+
streamId: import_StreamId.StreamId.fromString(record.child_stream_id).throw(),
|
|
72
|
+
dataProvider: import_EthereumAddress.EthereumAddress.fromString(
|
|
73
|
+
record.child_data_provider
|
|
74
|
+
).throw()
|
|
75
|
+
},
|
|
76
|
+
weight: record.weight
|
|
77
|
+
});
|
|
78
|
+
acc.set(record.start_date.toString(), currentArray);
|
|
79
|
+
return acc;
|
|
80
|
+
},
|
|
81
|
+
/* @__PURE__ */ new Map()
|
|
82
|
+
);
|
|
83
|
+
return Array.from(taxonomyItems.entries()).map(
|
|
84
|
+
([startDate, taxonomyItems2]) => ({
|
|
85
|
+
stream: {
|
|
86
|
+
streamId: import_StreamId.StreamId.fromString(records[0].stream_id).throw(),
|
|
87
|
+
dataProvider: import_EthereumAddress.EthereumAddress.fromString(
|
|
88
|
+
records[0].data_provider
|
|
89
|
+
).throw()
|
|
90
|
+
},
|
|
91
|
+
taxonomyItems: taxonomyItems2,
|
|
92
|
+
startDate: Number(startDate)
|
|
93
|
+
})
|
|
94
|
+
);
|
|
95
|
+
}).throw();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Sets the taxonomy of the stream
|
|
99
|
+
* @param taxonomy The taxonomy to set
|
|
100
|
+
* @returns A promise that resolves to the transaction receipt
|
|
101
|
+
*/
|
|
102
|
+
async setTaxonomy(taxonomy) {
|
|
103
|
+
const childDataProviders = [];
|
|
104
|
+
const childStreamIds = [];
|
|
105
|
+
const weights = [];
|
|
106
|
+
for (const item of taxonomy.taxonomyItems) {
|
|
107
|
+
childDataProviders.push(item.childStream.dataProvider.getAddress());
|
|
108
|
+
childStreamIds.push(item.childStream.streamId.getId());
|
|
109
|
+
weights.push(item.weight.toString());
|
|
110
|
+
}
|
|
111
|
+
const txHash = await this.executeWithActionBody({
|
|
112
|
+
namespace: "main",
|
|
113
|
+
name: "insert_taxonomy",
|
|
114
|
+
inputs: [
|
|
115
|
+
{
|
|
116
|
+
$data_provider: taxonomy.stream.dataProvider.getAddress(),
|
|
117
|
+
$stream_id: taxonomy.stream.streamId.getId(),
|
|
118
|
+
$child_data_providers: childDataProviders,
|
|
119
|
+
$child_stream_ids: childStreamIds,
|
|
120
|
+
$weights: weights,
|
|
121
|
+
$start_date: taxonomy.startDate
|
|
122
|
+
}
|
|
123
|
+
],
|
|
124
|
+
types: {
|
|
125
|
+
$data_provider: DataType.Text,
|
|
126
|
+
$stream_id: DataType.Text,
|
|
127
|
+
$child_data_providers: DataType.TextArray,
|
|
128
|
+
$child_stream_ids: DataType.TextArray,
|
|
129
|
+
$weights: DataType.NumericArray(36, 18),
|
|
130
|
+
$start_date: DataType.Int
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
if (this.neonConnectionString) {
|
|
134
|
+
const pool = new Pool({ connectionString: this.neonConnectionString });
|
|
135
|
+
const parentProvider = taxonomy.stream.dataProvider.getAddress().toLowerCase();
|
|
136
|
+
const parentStreamId = taxonomy.stream.streamId.getId();
|
|
137
|
+
const startDateText = String(taxonomy.startDate);
|
|
138
|
+
for (const item of taxonomy.taxonomyItems) {
|
|
139
|
+
const childProvider = item.childStream.dataProvider.getAddress().toLowerCase();
|
|
140
|
+
const childStreamId = item.childStream.streamId.getId();
|
|
141
|
+
const weight = item.weight;
|
|
142
|
+
await pool.query(
|
|
143
|
+
`INSERT INTO taxonomies
|
|
144
|
+
(parent_data_provider, parent_stream_id,
|
|
145
|
+
child_data_provider, child_stream_id,
|
|
146
|
+
weight, start_date)
|
|
147
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
148
|
+
ON CONFLICT ON CONSTRAINT unique_parent_child DO NOTHING`,
|
|
149
|
+
[
|
|
150
|
+
parentProvider,
|
|
151
|
+
parentStreamId,
|
|
152
|
+
childProvider,
|
|
153
|
+
childStreamId,
|
|
154
|
+
weight,
|
|
155
|
+
startDateText
|
|
156
|
+
]
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
await pool.end();
|
|
160
|
+
console.log("Successfully inserted taxonomy into Explorer DB", {
|
|
161
|
+
parentStreamId,
|
|
162
|
+
childStreamId: childStreamIds,
|
|
163
|
+
weight: weights,
|
|
164
|
+
startDate: startDateText
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return txHash;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Creates a ComposedStream from a base Stream
|
|
171
|
+
* @param stream The base stream to convert
|
|
172
|
+
* @param neonConnectionString The Neon connection string
|
|
173
|
+
* @returns A ComposedStream instance
|
|
174
|
+
*/
|
|
175
|
+
static fromStream(stream, neonConnectionString) {
|
|
176
|
+
return new _ComposedAction(
|
|
177
|
+
stream["kwilClient"],
|
|
178
|
+
stream["kwilSigner"],
|
|
179
|
+
neonConnectionString
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
//# sourceMappingURL=composedAction.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/contracts-api/composedAction.ts"],
|
|
4
|
+
"sourcesContent": ["import {KwilSigner, NodeKwil, Utils, WebKwil} from \"@kwilteam/kwil-js\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { StreamId } from \"../util/StreamId\";\nimport { Action } from \"./action\";\nimport DataType = Utils.DataType;\nimport pg from \"pg\";\nconst { Pool } = pg;\n\nexport const ErrorStreamNotComposed = \"stream is not a composed stream\";\n\nexport interface TaxonomySet {\n stream: StreamLocator;\n taxonomyItems: TaxonomyItem[];\n startDate: number;\n}\n\nexport interface TaxonomyItem {\n childStream: StreamLocator;\n weight: string;\n}\n\nexport interface DescribeTaxonomiesParams {\n stream: StreamLocator;\n /**\n * if true, will return the latest version of the taxonomy only\n */\n latestGroupSequence: boolean;\n}\n\nexport class ComposedAction extends Action {\n protected neonConnectionString: string | undefined;\n\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n neonConnectionString?: string,\n ) {\n super(kwilClient, kwilSigner);\n this.neonConnectionString = neonConnectionString;\n }\n\n /**\n * Returns the taxonomy of the stream\n * @param params Parameters for describing taxonomies\n * @returns A promise that resolves to the taxonomy\n */\n public async describeTaxonomies(\n params: DescribeTaxonomiesParams,\n ): Promise<TaxonomySet[]> {\n type TaxonomyResult = {\n data_provider: string;\n stream_id: string;\n child_data_provider: string;\n child_stream_id: string;\n weight: string;\n created_at: number;\n group_sequence: number;\n start_date: number;\n }[];\n\n const result = await this.call<TaxonomyResult>(\n \"describe_taxonomies\",\n {\n $data_provider: params.stream.dataProvider.getAddress(),\n $stream_id: params.stream.streamId.getId(),\n $latest_group_sequence: params.latestGroupSequence,\n },\n );\n\n\n\n return result\n .mapRight((records) => {\n const taxonomyItems: Map<DateString, TaxonomyItem[]> = records.reduce(\n (acc, record) => {\n const currentArray = acc.get(record.start_date.toString()) || [];\n currentArray.push({\n childStream: {\n streamId: StreamId.fromString(record.child_stream_id).throw(),\n dataProvider: EthereumAddress.fromString(\n record.child_data_provider,\n ).throw(),\n },\n weight: record.weight,\n });\n acc.set(record.start_date.toString(), currentArray);\n return acc;\n },\n new Map<DateString, TaxonomyItem[]>(),\n );\n\n return Array.from(taxonomyItems.entries()).map(\n ([startDate, taxonomyItems]) => ({\n stream: {\n streamId: StreamId.fromString(records[0].stream_id).throw(),\n dataProvider: EthereumAddress.fromString(\n records[0].data_provider,\n ).throw(),\n },\n taxonomyItems,\n startDate: Number(startDate)\n }),\n );\n })\n .throw();\n }\n\n /**\n * Sets the taxonomy of the stream\n * @param taxonomy The taxonomy to set\n * @returns A promise that resolves to the transaction receipt\n */\n public async setTaxonomy(\n taxonomy: TaxonomySet,\n ): Promise<GenericResponse<TxReceipt>> {\n const childDataProviders: string[] = [];\n const childStreamIds: string[] = [];\n const weights: string[] = [];\n\n for (const item of taxonomy.taxonomyItems) {\n childDataProviders.push(item.childStream.dataProvider\n .getAddress());\n childStreamIds.push(item.childStream.streamId.getId());\n weights.push(item.weight.toString());\n }\n\n const txHash = await this.executeWithActionBody({\n namespace: \"main\",\n name: \"insert_taxonomy\",\n inputs: [\n {\n $data_provider: taxonomy.stream.dataProvider.getAddress(),\n $stream_id: taxonomy.stream.streamId.getId(),\n $child_data_providers: childDataProviders,\n $child_stream_ids: childStreamIds,\n $weights: weights,\n $start_date: taxonomy.startDate\n },\n ],\n types: {\n $data_provider: DataType.Text,\n $stream_id: DataType.Text,\n $child_data_providers: DataType.TextArray,\n $child_stream_ids: DataType.TextArray,\n $weights: DataType.NumericArray(36,18),\n $start_date: DataType.Int\n }});\n\n // Optional: insert into Postgres via neon connection if a connection string is provided\n if (this.neonConnectionString) {\n const pool = new Pool({ connectionString: this.neonConnectionString });\n\n // parent info comes from this.locator\n const parentProvider = taxonomy.stream.dataProvider.getAddress().toLowerCase();\n const parentStreamId = taxonomy.stream.streamId.getId();\n const startDateText = String(taxonomy.startDate);\n\n for (const item of taxonomy.taxonomyItems) {\n const childProvider = item.childStream.dataProvider.getAddress().toLowerCase();\n const childStreamId = item.childStream.streamId.getId();\n const weight = item.weight;\n\n await pool.query(\n `INSERT INTO taxonomies\n (parent_data_provider, parent_stream_id,\n child_data_provider, child_stream_id,\n weight, start_date)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT ON CONSTRAINT unique_parent_child DO NOTHING`,\n [\n parentProvider,\n parentStreamId,\n childProvider,\n childStreamId,\n weight,\n startDateText,\n ],\n );\n }\n\n await pool.end();\n console.log(\"Successfully inserted taxonomy into Explorer DB\", {\n parentStreamId,\n childStreamId: childStreamIds,\n weight: weights,\n startDate: startDateText,\n });\n }\n\n\n return txHash;\n }\n\n /**\n * Creates a ComposedStream from a base Stream\n * @param stream The base stream to convert\n * @param neonConnectionString The Neon connection string\n * @returns A ComposedStream instance\n */\n public static fromStream(stream: Action, neonConnectionString?: string): ComposedAction {\n return new ComposedAction(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n neonConnectionString,\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["pg", "taxonomyItems"]
|
|
7
|
+
}
|
|
@@ -17,29 +17,29 @@ 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/deleteStream.ts
|
|
21
|
+
var deleteStream_exports = {};
|
|
22
|
+
__export(deleteStream_exports, {
|
|
23
|
+
deleteStream: () => deleteStream
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
26
|
-
|
|
27
|
-
async function destroyStream(input) {
|
|
28
|
-
const dbid = (0, import_dbid.generateDBID)(
|
|
29
|
-
input.kwilSigner.identifier,
|
|
30
|
-
input.streamId.getId()
|
|
31
|
-
);
|
|
25
|
+
module.exports = __toCommonJS(deleteStream_exports);
|
|
26
|
+
async function deleteStream(input) {
|
|
32
27
|
try {
|
|
33
|
-
|
|
28
|
+
return await input.kwilClient.execute(
|
|
34
29
|
{
|
|
35
|
-
|
|
30
|
+
description: `TN SDK - Deleting stream: ${input.stream.streamId.getId()} from data provider: ${input.stream.dataProvider.getAddress()}`,
|
|
31
|
+
inputs: [{
|
|
32
|
+
$data_provider: input.stream.dataProvider.getAddress(),
|
|
33
|
+
$stream_id: input.stream.streamId.getId()
|
|
34
|
+
}],
|
|
35
|
+
name: "delete_stream",
|
|
36
|
+
namespace: "main"
|
|
36
37
|
},
|
|
37
38
|
input.kwilSigner,
|
|
38
39
|
input.synchronous
|
|
39
40
|
);
|
|
40
|
-
return txReceipt;
|
|
41
41
|
} catch (error) {
|
|
42
|
-
throw new Error(`Failed to
|
|
42
|
+
throw new Error(`Failed to delete stream: ${error}`);
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
//# sourceMappingURL=
|
|
45
|
+
//# sourceMappingURL=deleteStream.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/contracts-api/deleteStream.ts"],
|
|
4
|
+
"sourcesContent": ["import {StreamId} from \"../util/StreamId\";\nimport {Kwil} from \"@kwilteam/kwil-js/dist/client/kwil\";\nimport {KwilSigner} from \"@kwilteam/kwil-js\";\nimport {TxReceipt} from \"@kwilteam/kwil-js/dist/core/tx\";\nimport {GenericResponse} from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport {StreamLocator} from \"../types/stream\";\n\n/**\n * Input parameters for destroying a stream.\n */\nexport interface DestroyStreamInput {\n stream: StreamLocator;\n kwilClient: Kwil<any>;\n kwilSigner: KwilSigner;\n synchronous?: boolean;\n}\n\n/**\n * Output after deleting a stream.\n */\nexport interface DeleteStreamOutput {\n receipt: TxReceipt;\n}\n\n/**\n * Delete a stream from TN.\n * @param input - The input parameters for destroying the stream.\n * @returns The transaction receipt of the destruction.\n */\nexport async function deleteStream(\n input: DestroyStreamInput,\n): Promise<GenericResponse<TxReceipt>> {\n try {\n return await input.kwilClient.execute({\n description: `TN SDK - Deleting stream: ${input.stream.streamId.getId()} from data provider: ${input.stream.dataProvider.getAddress()}`,\n inputs: [{\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId()\n }],\n name: \"delete_stream\",\n namespace: \"main\"\n },\n input.kwilSigner,\n input.synchronous,\n )} catch (error) {\n throw new Error(`Failed to delete stream: ${error}`);\n }\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BA,eAAsB,aACpB,OACqC;AACrC,MAAI;AACF,WAAO,MAAM,MAAM,WAAW;AAAA,MAAQ;AAAA,QAChC,aAAa,6BAA6B,MAAM,OAAO,SAAS,MAAM,CAAC,wBAAwB,MAAM,OAAO,aAAa,WAAW,CAAC;AAAA,QACrI,QAAQ,CAAC;AAAA,UACL,gBAAgB,MAAM,OAAO,aAAa,WAAW;AAAA,UACrD,YAAY,MAAM,OAAO,SAAS,MAAM;AAAA,QAC5C,CAAC;AAAA,QACD,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,IACN;AAAA,EAAC,SAAS,OAAO;AACrB,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/contracts-api/deployStream.ts
|
|
@@ -23,33 +33,40 @@ __export(deployStream_exports, {
|
|
|
23
33
|
deployStream: () => deployStream
|
|
24
34
|
});
|
|
25
35
|
module.exports = __toCommonJS(deployStream_exports);
|
|
26
|
-
var
|
|
27
|
-
var
|
|
36
|
+
var import_pg = __toESM(require("pg"), 1);
|
|
37
|
+
var { Pool } = import_pg.default;
|
|
28
38
|
async function deployStream(input) {
|
|
29
39
|
try {
|
|
30
|
-
const
|
|
31
|
-
schema.name = input.streamId.getId();
|
|
32
|
-
const txHash = await input.kwilClient.deploy(
|
|
40
|
+
const txHash = await input.kwilClient.execute(
|
|
33
41
|
{
|
|
34
|
-
|
|
42
|
+
namespace: "main",
|
|
43
|
+
inputs: [{
|
|
44
|
+
$stream_id: input.streamId.getId(),
|
|
45
|
+
$stream_type: input.streamType
|
|
46
|
+
}],
|
|
47
|
+
name: "create_stream",
|
|
35
48
|
description: `TN SDK - Deploying ${input.streamType} stream: ${input.streamId.getId()}`
|
|
36
49
|
},
|
|
37
50
|
input.kwilSigner,
|
|
38
51
|
input.synchronous
|
|
39
52
|
);
|
|
53
|
+
if (input.neonConnectionString) {
|
|
54
|
+
console.log("Neon connection detected, attempting to insert into DB...");
|
|
55
|
+
const signer = input.kwilSigner.signer;
|
|
56
|
+
const dataProvider = signer.address.toLowerCase();
|
|
57
|
+
const pool = new Pool({ connectionString: input.neonConnectionString });
|
|
58
|
+
await pool.query(
|
|
59
|
+
`INSERT INTO streams (data_provider, stream_id, type, stream_name, display_name, categories, owner_wallet, geography, tags)
|
|
60
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
|
61
|
+
ON CONFLICT (data_provider, stream_id) DO NOTHING`,
|
|
62
|
+
[dataProvider, input.streamId.getId(), input.streamType, input.streamId.getName(), input.streamId.getName(), "{External}", dataProvider, "Global", "{External}"]
|
|
63
|
+
);
|
|
64
|
+
await pool.end();
|
|
65
|
+
console.log("successfully inserted into Explorer DB", input.streamId.getName());
|
|
66
|
+
}
|
|
40
67
|
return txHash;
|
|
41
68
|
} catch (error) {
|
|
42
69
|
throw new Error(`Failed to deploy stream: ${error}`);
|
|
43
70
|
}
|
|
44
71
|
}
|
|
45
|
-
async function getContract(streamType, contractVersion) {
|
|
46
|
-
switch (streamType) {
|
|
47
|
-
case import_contractValues.StreamType.Composed:
|
|
48
|
-
return contractVersion === 2 ? import_contractsContent.composedStreamTemplateUnix : import_contractsContent.composedStreamTemplate;
|
|
49
|
-
case import_contractValues.StreamType.Primitive:
|
|
50
|
-
return contractVersion === 2 ? import_contractsContent.primitiveStreamTemplateUnix : import_contractsContent.primitiveStreamTemplate;
|
|
51
|
-
default:
|
|
52
|
-
throw new Error(`Unknown stream type: ${streamType}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
72
|
//# sourceMappingURL=deployStream.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/contracts-api/deployStream.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["import {StreamType} from \"./contractValues\";\nimport {TxReceipt} from \"@kwilteam/kwil-js/dist/core/tx\";\nimport {Kwil} from \"@kwilteam/kwil-js/dist/client/kwil\";\nimport {KwilSigner} from \"@kwilteam/kwil-js\";\nimport {GenericResponse} from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport {StreamId} from \"../util/StreamId\";\nimport pg from \"pg\";\nconst { Pool } = pg;\n\nexport interface DeployStreamInput {\n streamId: StreamId;\n streamType: StreamType;\n kwilClient: Kwil<any>;\n kwilSigner: KwilSigner;\n synchronous?: boolean;\n neonConnectionString?: string;\n}\n\nexport interface DeployStreamOutput {\n receipt: TxReceipt;\n}\n\n/**\n * Deploys a stream to TN.\n * @param input - The input parameters for deploying the stream.\n * @returns The transaction hash of the deployment.\n */\nexport async function deployStream(\n input: DeployStreamInput,\n): Promise<GenericResponse<TxReceipt>> {\n try {\n const txHash = await input.kwilClient.execute(\n {\n namespace: \"main\",\n inputs: [{\n $stream_id: input.streamId.getId(),\n $stream_type: input.streamType,\n }],\n name: \"create_stream\",\n description: `TN SDK - Deploying ${input.streamType} stream: ${input.streamId.getId()}`\n },\n input.kwilSigner,\n input.synchronous,\n );\n\n // Optional: insert into Postgres via neon connection\n if (input.neonConnectionString) {\n console.log(\"Neon connection detected, attempting to insert into DB...\");\n\n const signer: any = input.kwilSigner.signer;\n const dataProvider = signer.address.toLowerCase();\n\n const pool = new Pool({ connectionString: input.neonConnectionString });\n await pool.query(\n `INSERT INTO streams (data_provider, stream_id, type, stream_name, display_name, categories, owner_wallet, geography, tags)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (data_provider, stream_id) DO NOTHING`,\n [dataProvider, input.streamId.getId(), input.streamType, input.streamId.getName(), input.streamId.getName(), '{External}', dataProvider, 'Global', '{External}'],\n );\n await pool.end();\n\n console.log(\"successfully inserted into Explorer DB\", input.streamId.getName());\n }\n\n return txHash;\n } catch (error) {\n throw new Error(`Failed to deploy stream: ${error}`);\n }\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,gBAAe;AACf,IAAM,EAAE,KAAK,IAAI,UAAAA;AAoBjB,eAAsB,aACpB,OACqC;AACrC,MAAI;AACA,UAAM,SAAS,MAAM,MAAM,WAAW;AAAA,MACpC;AAAA,QACI,WAAW;AAAA,QACX,QAAQ,CAAC;AAAA,UACL,YAAY,MAAM,SAAS,MAAM;AAAA,UACjC,cAAc,MAAM;AAAA,QACxB,CAAC;AAAA,QACD,MAAM;AAAA,QACN,aAAa,sBAAsB,MAAM,UAAU,YAAY,MAAM,SAAS,MAAM,CAAC;AAAA,MACzF;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,IACV;AAGA,QAAI,MAAM,sBAAsB;AAC9B,cAAQ,IAAI,2DAA2D;AAEvE,YAAM,SAAc,MAAM,WAAW;AACrC,YAAM,eAAe,OAAO,QAAQ,YAAY;AAEhD,YAAM,OAAO,IAAI,KAAK,EAAE,kBAAkB,MAAM,qBAAqB,CAAC;AACtE,YAAM,KAAK;AAAA,QACP;AAAA;AAAA;AAAA,QAGA,CAAC,cAAc,MAAM,SAAS,MAAM,GAAG,MAAM,YAAY,MAAM,SAAS,QAAQ,GAAG,MAAM,SAAS,QAAQ,GAAG,cAAc,cAAc,UAAU,YAAY;AAAA,MACnK;AACA,YAAM,KAAK,IAAI;AAEf,cAAQ,IAAI,0CAA0C,MAAM,SAAS,QAAQ,CAAC;AAAA,IAChF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;",
|
|
6
|
+
"names": ["pg"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/contracts-api/primitiveAction.ts
|
|
21
|
+
var primitiveAction_exports = {};
|
|
22
|
+
__export(primitiveAction_exports, {
|
|
23
|
+
PrimitiveAction: () => PrimitiveAction
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(primitiveAction_exports);
|
|
26
|
+
var import_kwil_js = require("@kwilteam/kwil-js");
|
|
27
|
+
var import_action = require("./action.cjs");
|
|
28
|
+
var DataType = import_kwil_js.Utils.DataType;
|
|
29
|
+
var PrimitiveAction = class _PrimitiveAction extends import_action.Action {
|
|
30
|
+
constructor(kwilClient, kwilSigner) {
|
|
31
|
+
super(kwilClient, kwilSigner);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Insert a record into the stream
|
|
35
|
+
* @param input of a single record to insert
|
|
36
|
+
* @returns Transaction receipt
|
|
37
|
+
*/
|
|
38
|
+
async insertRecord(input) {
|
|
39
|
+
return await this.executeWithActionBody({
|
|
40
|
+
namespace: "main",
|
|
41
|
+
name: "insert_record",
|
|
42
|
+
inputs: [{
|
|
43
|
+
$data_provider: input.stream.dataProvider.getAddress(),
|
|
44
|
+
$stream_id: input.stream.streamId.getId(),
|
|
45
|
+
$event_time: input.eventTime,
|
|
46
|
+
$value: input.value
|
|
47
|
+
}],
|
|
48
|
+
types: {
|
|
49
|
+
$data_provider: DataType.Text,
|
|
50
|
+
$stream_id: DataType.Text,
|
|
51
|
+
$event_time: DataType.Int,
|
|
52
|
+
$value: DataType.Numeric(36, 18)
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Inserts records into the stream
|
|
58
|
+
* @param inputs Array of records to insert
|
|
59
|
+
* @param synchronous If true, the transaction will be executed synchronously
|
|
60
|
+
* @returns Transaction receipt
|
|
61
|
+
*/
|
|
62
|
+
async insertRecords(inputs, synchronous) {
|
|
63
|
+
return await this.executeWithActionBody({
|
|
64
|
+
namespace: "main",
|
|
65
|
+
name: "insert_records",
|
|
66
|
+
inputs: inputs.map((input) => ({
|
|
67
|
+
$data_provider: input.stream.dataProvider.getAddress(),
|
|
68
|
+
$stream_id: input.stream.streamId.getId(),
|
|
69
|
+
$event_time: input.eventTime,
|
|
70
|
+
$value: input.value
|
|
71
|
+
})),
|
|
72
|
+
types: {
|
|
73
|
+
$data_provider: DataType.TextArray,
|
|
74
|
+
$stream_id: DataType.TextArray,
|
|
75
|
+
$event_time: DataType.IntArray,
|
|
76
|
+
$value: DataType.NumericArray(36, 18)
|
|
77
|
+
}
|
|
78
|
+
}, synchronous);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a PrimitiveStream from a base Stream
|
|
82
|
+
* @param stream The base stream to convert
|
|
83
|
+
* @returns A Promise that resolves to a PrimitiveStream instance
|
|
84
|
+
*/
|
|
85
|
+
static fromStream(stream) {
|
|
86
|
+
return new _PrimitiveAction(
|
|
87
|
+
stream["kwilClient"],
|
|
88
|
+
stream["kwilSigner"]
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=primitiveAction.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/contracts-api/primitiveAction.ts"],
|
|
4
|
+
"sourcesContent": ["import {KwilSigner, NodeKwil, Utils, WebKwil} from \"@kwilteam/kwil-js\";\nimport {GenericResponse} from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport {TxReceipt} from \"@kwilteam/kwil-js/dist/core/tx\";\nimport {StreamType} from \"./contractValues\";\nimport {Action} from \"./action\";\nimport {StreamLocator} from \"../types/stream\";\nimport DataType = Utils.DataType;\n\nconst ErrorStreamNotPrimitive = \"stream is not a primitive stream\";\n\nexport class PrimitiveAction extends Action {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ) {\n super(kwilClient, kwilSigner);\n }\n\n /**\n * Insert a record into the stream\n * @param input of a single record to insert\n * @returns Transaction receipt\n */\n public async insertRecord(\n input: InsertRecordInput,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.executeWithActionBody({\n namespace: 'main',\n name: 'insert_record',\n inputs: [{\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $event_time: input.eventTime,\n $value: input.value\n }],\n types: {\n $data_provider: DataType.Text,\n $stream_id: DataType.Text,\n $event_time: DataType.Int,\n $value: DataType.Numeric(36, 18)\n }\n })\n }\n\n /**\n * Inserts records into the stream\n * @param inputs Array of records to insert\n * @param synchronous If true, the transaction will be executed synchronously\n * @returns Transaction receipt\n */\n public async insertRecords(\n inputs: InsertRecordInput[],\n synchronous?: boolean,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.executeWithActionBody({\n namespace: 'main',\n name: 'insert_records',\n inputs: inputs.map((input) => ({\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $event_time: input.eventTime,\n $value: input.value\n })),\n types: {\n $data_provider: DataType.TextArray,\n $stream_id: DataType.TextArray,\n $event_time: DataType.IntArray,\n $value: DataType.NumericArray(36, 18)\n }\n }, synchronous)\n }\n\n /**\n * Creates a PrimitiveStream from a base Stream\n * @param stream The base stream to convert\n * @returns A Promise that resolves to a PrimitiveStream instance\n */\n public static fromStream(stream: Action): PrimitiveAction {\n return new PrimitiveAction(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n );\n }\n}\n\nexport interface InsertRecordInput {\n stream: StreamLocator;\n eventTime: number;\n // value is a string to support arbitrary precision\n value: string;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmD;AAInD,oBAAqB;AAErB,IAAO,WAAW,qBAAM;AAIjB,IAAM,kBAAN,MAAM,yBAAwB,qBAAO;AAAA,EAC1C,YACE,YACA,YACA;AACA,UAAM,YAAY,UAAU;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,aACT,OACmC;AACrC,WAAO,MAAM,KAAK,sBAAsB;AAAA,MAClC,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,QACP,gBAAgB,MAAM,OAAO,aAAa,WAAW;AAAA,QACrD,YAAY,MAAM,OAAO,SAAS,MAAM;AAAA,QACxC,aAAa,MAAM;AAAA,QACnB,QAAQ,MAAM;AAAA,MAChB,CAAC;AAAA,MACD,OAAO;AAAA,QACL,gBAAgB,SAAS;AAAA,QACzB,YAAY,SAAS;AAAA,QACrB,aAAa,SAAS;AAAA,QACtB,QAAQ,SAAS,QAAQ,IAAI,EAAE;AAAA,MACjC;AAAA,IACN,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQE,MAAa,cACT,QACA,aACmC;AACrC,WAAO,MAAM,KAAK,sBAAsB;AAAA,MACtC,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ,OAAO,IAAI,CAAC,WAAW;AAAA,QAC7B,gBAAgB,MAAM,OAAO,aAAa,WAAW;AAAA,QACrD,YAAY,MAAM,OAAO,SAAS,MAAM;AAAA,QACxC,aAAa,MAAM;AAAA,QACnB,QAAQ,MAAM;AAAA,MAChB,EAAE;AAAA,MACF,OAAO;AAAA,QACL,gBAAgB,SAAS;AAAA,QACzB,YAAY,SAAS;AAAA,QACrB,aAAa,SAAS;AAAA,QACtB,QAAQ,SAAS,aAAa,IAAI,EAAE;AAAA,MACtC;AAAA,IACF,GAAG,WAAW;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOF,OAAc,WAAW,QAAiC;AACxD,WAAO,IAAI;AAAA,MACP,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA,IACvB;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -20,10 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.common.ts
|
|
21
21
|
var index_common_exports = {};
|
|
22
22
|
__export(index_common_exports, {
|
|
23
|
-
|
|
23
|
+
Action: () => import_action.Action,
|
|
24
|
+
ComposedAction: () => import_composedAction.ComposedAction,
|
|
24
25
|
EthereumAddress: () => import_EthereumAddress.EthereumAddress,
|
|
25
|
-
|
|
26
|
-
Stream: () => import_stream.Stream,
|
|
26
|
+
PrimitiveAction: () => import_primitiveAction.PrimitiveAction,
|
|
27
27
|
StreamId: () => import_StreamId.StreamId,
|
|
28
28
|
StreamType: () => import_contractValues.StreamType,
|
|
29
29
|
visibility: () => import_visibility.visibility
|
|
@@ -33,7 +33,7 @@ var import_StreamId = require("./util/StreamId.cjs");
|
|
|
33
33
|
var import_EthereumAddress = require("./util/EthereumAddress.cjs");
|
|
34
34
|
var import_visibility = require("./util/visibility.cjs");
|
|
35
35
|
var import_contractValues = require("./contracts-api/contractValues.cjs");
|
|
36
|
-
var
|
|
37
|
-
var
|
|
38
|
-
var
|
|
36
|
+
var import_action = require("./contracts-api/action.cjs");
|
|
37
|
+
var import_primitiveAction = require("./contracts-api/primitiveAction.cjs");
|
|
38
|
+
var import_composedAction = require("./contracts-api/composedAction.cjs");
|
|
39
39
|
//# sourceMappingURL=index.common.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.common.ts"],
|
|
4
|
-
"sourcesContent": ["// Core client types\nexport type { TNClientOptions } from \"./client/client\";\nexport type { SignerInfo as EthProvider } from \"./client/client\";\n\n// Stream types and interfaces\nexport type { StreamLocator } from \"./types/stream\";\nexport type { StreamRecord } from \"./contracts-api/
|
|
4
|
+
"sourcesContent": ["// Core client types\nexport type { TNClientOptions } from \"./client/client\";\nexport type { SignerInfo as EthProvider } from \"./client/client\";\n\n// Stream types and interfaces\nexport type { StreamLocator } from \"./types/stream\";\nexport type { StreamRecord } from \"./contracts-api/action\";\nexport type { GetRecordInput, GetFirstRecordInput } from \"./contracts-api/action\";\nexport type { InsertRecordInput } from \"./contracts-api/primitiveAction\";\nexport type { TaxonomySet, TaxonomyItem } from \"./contracts-api/composedAction\";\n\n// Utility types and classes\nexport { StreamId } from \"./util/StreamId\";\nexport { EthereumAddress } from \"./util/EthereumAddress\";\nexport { visibility } from \"./util/visibility\";\nexport type { VisibilityEnum } from \"./util/visibility\";\n\n// Stream type constants\nexport { StreamType } from \"./contracts-api/contractValues\";\n\n// Base classes\nexport { Action } from \"./contracts-api/action\";\nexport { PrimitiveAction } from \"./contracts-api/primitiveAction\";\nexport { ComposedAction } from \"./contracts-api/composedAction\";\n\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,sBAAyB;AACzB,6BAAgC;AAChC,wBAA2B;AAI3B,4BAA2B;AAG3B,oBAAuB;AACvB,6BAAgC;AAChC,4BAA+B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/types/transaction.ts
|
|
17
|
+
var transaction_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(transaction_exports);
|
|
19
|
+
//# sourceMappingURL=transaction.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/transaction.ts"],
|
|
4
|
+
"sourcesContent": ["export interface LastTransaction {\r\n /** Block height */\r\n blockHeight: number;\r\n /** Which action was taken */\r\n method: string;\r\n /** Address that sent the on\u2010chain tx */\r\n sender: string;\r\n /** Hash of the on\u2010chain transaction */\r\n transactionHash: string;\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/EthereumAddress.ts"],
|
|
4
|
-
"sourcesContent": ["import { ethers } from \"ethers\";\nimport { Either, left, right } from \"monads-io/either\";\n\nexport class EthereumAddress {\n private readonly address: string;\n private readonly correctlyCreated: boolean = false;\n\n constructor(address: string) {\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,oBAAoC;AADpC;AAGO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EACV;AAAA,EACA,mBAA4B;AAAA,EAE7C,YAAY,SAAiB;AAC3B,
|
|
4
|
+
"sourcesContent": ["import { ethers } from \"ethers\";\nimport { Either, left, right } from \"monads-io/either\";\n\nexport class EthereumAddress {\n private readonly address: string;\n private readonly correctlyCreated: boolean = false;\n\n constructor(address: string) {\n if (!address.startsWith(\"0x\")) {\n address = \"0x\" + address;\n }\n\n if (!this.validateEthereumAddress(address)) {\n throw new Error(\"Invalid Ethereum address\");\n }\n\n this.address = address;\n this.correctlyCreated = true;\n }\n\n private validateEthereumAddress(address: string): boolean {\n return /^(0x)?[0-9a-f]{40}$/i.test(address);\n }\n\n public getAddress(): string {\n if (!this.correctlyCreated) {\n throw new Error(\"EthereumAddress not correctly created\");\n }\n\n return this.address;\n }\n\n public getBytes(): Uint8Array {\n return new TextEncoder().encode(this.getAddress());\n }\n\n public toJSON(): string {\n return this.getAddress();\n }\n\n public static fromJSON(json: string): EthereumAddress {\n return new EthereumAddress(json);\n }\n\n public static fromBytes(bytes: Uint8Array): Either<Error, EthereumAddress> {\n try {\n return right(new EthereumAddress(ethers.hexlify(bytes)));\n } catch (e) {\n return left(e as Error);\n }\n }\n\n public static fromString(str: string): Either<Error, EthereumAddress> {\n try {\n return right(new EthereumAddress(str));\n } catch (e) {\n return left(e as Error);\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, it, expect } = import.meta.vitest;\n describe(\"EthereumAddress\", () => {\n it(\"should create a valid EthereumAddress with correct format\", () => {\n const address = new EthereumAddress(\n \"0x1234567890123456789012345678901234567890\",\n );\n expect(address.getAddress()).toBe(\n \"0x1234567890123456789012345678901234567890\",\n );\n });\n\n it(\"should throw an error for an invalid Ethereum address\", () => {\n expect(() => new EthereumAddress(\"invalid_address\")).toThrow(\n \"Invalid Ethereum address\",\n );\n });\n\n it(\"should enforce lowercase addresses\", () => {\n const mixedCaseAddress =\n \"0xaaBbccDdEeff1234567890123456789012345678\".toLowerCase();\n const address = new EthereumAddress(mixedCaseAddress);\n expect(address.getAddress()).toBe(\n \"0xaabbccddeeff1234567890123456789012345678\",\n );\n });\n\n it(\"should correctly serialize and deserialize to/from JSON\", () => {\n const originalAddress = \"0x1234567890123456789012345678901234567890\";\n const address = new EthereumAddress(originalAddress);\n const json = address.toJSON();\n const deserializedAddress = EthereumAddress.fromJSON(json);\n expect(deserializedAddress.getAddress()).toBe(originalAddress);\n });\n });\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,oBAAoC;AADpC;AAGO,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EACV;AAAA,EACA,mBAA4B;AAAA,EAE7C,YAAY,SAAiB;AAC3B,QAAI,CAAC,QAAQ,WAAW,IAAI,GAAG;AAC7B,gBAAU,OAAO;AAAA,IACnB;AAEA,QAAI,CAAC,KAAK,wBAAwB,OAAO,GAAG;AAC1C,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAEA,SAAK,UAAU;AACf,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEQ,wBAAwB,SAA0B;AACxD,WAAO,uBAAuB,KAAK,OAAO;AAAA,EAC5C;AAAA,EAEO,aAAqB;AAC1B,QAAI,CAAC,KAAK,kBAAkB;AAC1B,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,WAAuB;AAC5B,WAAO,IAAI,YAAY,EAAE,OAAO,KAAK,WAAW,CAAC;AAAA,EACnD;AAAA,EAEO,SAAiB;AACtB,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,OAAc,SAAS,MAA+B;AACpD,WAAO,IAAI,iBAAgB,IAAI;AAAA,EACjC;AAAA,EAEA,OAAc,UAAU,OAAmD;AACzE,QAAI;AACF,iBAAO,qBAAM,IAAI,iBAAgB,qBAAO,QAAQ,KAAK,CAAC,CAAC;AAAA,IACzD,SAAS,GAAG;AACV,iBAAO,oBAAK,CAAU;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,OAAc,WAAW,KAA6C;AACpE,QAAI;AACF,iBAAO,qBAAM,IAAI,iBAAgB,GAAG,CAAC;AAAA,IACvC,SAAS,GAAG;AACV,iBAAO,oBAAK,CAAU;AAAA,IACxB;AAAA,EACF;AACF;AAEA,IAAI,YAAY,QAAQ;AACtB,QAAM,EAAE,UAAU,IAAI,OAAO,IAAI,YAAY;AAC7C,WAAS,mBAAmB,MAAM;AAChC,OAAG,6DAA6D,MAAM;AACpE,YAAM,UAAU,IAAI;AAAA,QAClB;AAAA,MACF;AACA,aAAO,QAAQ,WAAW,CAAC,EAAE;AAAA,QAC3B;AAAA,MACF;AAAA,IACF,CAAC;AAED,OAAG,yDAAyD,MAAM;AAChE,aAAO,MAAM,IAAI,gBAAgB,iBAAiB,CAAC,EAAE;AAAA,QACnD;AAAA,MACF;AAAA,IACF,CAAC;AAED,OAAG,sCAAsC,MAAM;AAC7C,YAAM,mBACJ,6CAA6C,YAAY;AAC3D,YAAM,UAAU,IAAI,gBAAgB,gBAAgB;AACpD,aAAO,QAAQ,WAAW,CAAC,EAAE;AAAA,QAC3B;AAAA,MACF;AAAA,IACF,CAAC;AAED,OAAG,2DAA2D,MAAM;AAClE,YAAM,kBAAkB;AACxB,YAAM,UAAU,IAAI,gBAAgB,eAAe;AACnD,YAAM,OAAO,QAAQ,OAAO;AAC5B,YAAM,sBAAsB,gBAAgB,SAAS,IAAI;AACzD,aAAO,oBAAoB,WAAW,CAAC,EAAE,KAAK,eAAe;AAAA,IAC/D,CAAC;AAAA,EACH,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -29,9 +29,11 @@ var import_meta = {};
|
|
|
29
29
|
var StreamId = class _StreamId {
|
|
30
30
|
id;
|
|
31
31
|
correctlyCreated = false;
|
|
32
|
-
|
|
32
|
+
name;
|
|
33
|
+
constructor(id, name) {
|
|
33
34
|
this.id = id;
|
|
34
35
|
this.correctlyCreated = true;
|
|
36
|
+
this.name = name;
|
|
35
37
|
}
|
|
36
38
|
getId() {
|
|
37
39
|
if (!this.correctlyCreated) {
|
|
@@ -39,6 +41,9 @@ var StreamId = class _StreamId {
|
|
|
39
41
|
}
|
|
40
42
|
return this.id;
|
|
41
43
|
}
|
|
44
|
+
getName() {
|
|
45
|
+
return this.name;
|
|
46
|
+
}
|
|
42
47
|
validate() {
|
|
43
48
|
return this.id.length === 32 && this.id.startsWith("st");
|
|
44
49
|
}
|
|
@@ -54,7 +59,7 @@ var StreamId = class _StreamId {
|
|
|
54
59
|
}
|
|
55
60
|
const hash = await (0, import_crypto_hash.sha256)(s);
|
|
56
61
|
const streamIdStr = "st" + hash.slice(0, 30);
|
|
57
|
-
return new _StreamId(streamIdStr);
|
|
62
|
+
return new _StreamId(streamIdStr, s);
|
|
58
63
|
}
|
|
59
64
|
static fromString(s) {
|
|
60
65
|
try {
|