@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,156 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
|
|
5
|
+
// src/contracts-api/composedAction.ts
|
|
6
|
+
import { Utils } from "@kwilteam/kwil-js";
|
|
7
|
+
import { EthereumAddress } from "../util/EthereumAddress.mjs";
|
|
8
|
+
import { StreamId } from "../util/StreamId.mjs";
|
|
9
|
+
import { Action } from "./action.mjs";
|
|
10
|
+
import pg from "pg";
|
|
11
|
+
var DataType = Utils.DataType;
|
|
12
|
+
var { Pool } = pg;
|
|
13
|
+
var ErrorStreamNotComposed = "stream is not a composed stream";
|
|
14
|
+
var ComposedAction = class _ComposedAction extends Action {
|
|
15
|
+
constructor(kwilClient, kwilSigner, neonConnectionString) {
|
|
16
|
+
super(kwilClient, kwilSigner);
|
|
17
|
+
__publicField(this, "neonConnectionString");
|
|
18
|
+
this.neonConnectionString = neonConnectionString;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns the taxonomy of the stream
|
|
22
|
+
* @param params Parameters for describing taxonomies
|
|
23
|
+
* @returns A promise that resolves to the taxonomy
|
|
24
|
+
*/
|
|
25
|
+
async describeTaxonomies(params) {
|
|
26
|
+
const result = await this.call(
|
|
27
|
+
"describe_taxonomies",
|
|
28
|
+
{
|
|
29
|
+
$data_provider: params.stream.dataProvider.getAddress(),
|
|
30
|
+
$stream_id: params.stream.streamId.getId(),
|
|
31
|
+
$latest_group_sequence: params.latestGroupSequence
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
return result.mapRight((records) => {
|
|
35
|
+
const taxonomyItems = records.reduce(
|
|
36
|
+
(acc, record) => {
|
|
37
|
+
const currentArray = acc.get(record.start_date.toString()) || [];
|
|
38
|
+
currentArray.push({
|
|
39
|
+
childStream: {
|
|
40
|
+
streamId: StreamId.fromString(record.child_stream_id).throw(),
|
|
41
|
+
dataProvider: EthereumAddress.fromString(
|
|
42
|
+
record.child_data_provider
|
|
43
|
+
).throw()
|
|
44
|
+
},
|
|
45
|
+
weight: record.weight
|
|
46
|
+
});
|
|
47
|
+
acc.set(record.start_date.toString(), currentArray);
|
|
48
|
+
return acc;
|
|
49
|
+
},
|
|
50
|
+
/* @__PURE__ */ new Map()
|
|
51
|
+
);
|
|
52
|
+
return Array.from(taxonomyItems.entries()).map(
|
|
53
|
+
([startDate, taxonomyItems2]) => ({
|
|
54
|
+
stream: {
|
|
55
|
+
streamId: StreamId.fromString(records[0].stream_id).throw(),
|
|
56
|
+
dataProvider: EthereumAddress.fromString(
|
|
57
|
+
records[0].data_provider
|
|
58
|
+
).throw()
|
|
59
|
+
},
|
|
60
|
+
taxonomyItems: taxonomyItems2,
|
|
61
|
+
startDate: Number(startDate)
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
}).throw();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Sets the taxonomy of the stream
|
|
68
|
+
* @param taxonomy The taxonomy to set
|
|
69
|
+
* @returns A promise that resolves to the transaction receipt
|
|
70
|
+
*/
|
|
71
|
+
async setTaxonomy(taxonomy) {
|
|
72
|
+
const childDataProviders = [];
|
|
73
|
+
const childStreamIds = [];
|
|
74
|
+
const weights = [];
|
|
75
|
+
for (const item of taxonomy.taxonomyItems) {
|
|
76
|
+
childDataProviders.push(item.childStream.dataProvider.getAddress());
|
|
77
|
+
childStreamIds.push(item.childStream.streamId.getId());
|
|
78
|
+
weights.push(item.weight.toString());
|
|
79
|
+
}
|
|
80
|
+
const txHash = await this.executeWithActionBody({
|
|
81
|
+
namespace: "main",
|
|
82
|
+
name: "insert_taxonomy",
|
|
83
|
+
inputs: [
|
|
84
|
+
{
|
|
85
|
+
$data_provider: taxonomy.stream.dataProvider.getAddress(),
|
|
86
|
+
$stream_id: taxonomy.stream.streamId.getId(),
|
|
87
|
+
$child_data_providers: childDataProviders,
|
|
88
|
+
$child_stream_ids: childStreamIds,
|
|
89
|
+
$weights: weights,
|
|
90
|
+
$start_date: taxonomy.startDate
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
types: {
|
|
94
|
+
$data_provider: DataType.Text,
|
|
95
|
+
$stream_id: DataType.Text,
|
|
96
|
+
$child_data_providers: DataType.TextArray,
|
|
97
|
+
$child_stream_ids: DataType.TextArray,
|
|
98
|
+
$weights: DataType.NumericArray(36, 18),
|
|
99
|
+
$start_date: DataType.Int
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
if (this.neonConnectionString) {
|
|
103
|
+
const pool = new Pool({ connectionString: this.neonConnectionString });
|
|
104
|
+
const parentProvider = taxonomy.stream.dataProvider.getAddress().toLowerCase();
|
|
105
|
+
const parentStreamId = taxonomy.stream.streamId.getId();
|
|
106
|
+
const startDateText = String(taxonomy.startDate);
|
|
107
|
+
for (const item of taxonomy.taxonomyItems) {
|
|
108
|
+
const childProvider = item.childStream.dataProvider.getAddress().toLowerCase();
|
|
109
|
+
const childStreamId = item.childStream.streamId.getId();
|
|
110
|
+
const weight = item.weight;
|
|
111
|
+
await pool.query(
|
|
112
|
+
`INSERT INTO taxonomies
|
|
113
|
+
(parent_data_provider, parent_stream_id,
|
|
114
|
+
child_data_provider, child_stream_id,
|
|
115
|
+
weight, start_date)
|
|
116
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
117
|
+
ON CONFLICT ON CONSTRAINT unique_parent_child DO NOTHING`,
|
|
118
|
+
[
|
|
119
|
+
parentProvider,
|
|
120
|
+
parentStreamId,
|
|
121
|
+
childProvider,
|
|
122
|
+
childStreamId,
|
|
123
|
+
weight,
|
|
124
|
+
startDateText
|
|
125
|
+
]
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
await pool.end();
|
|
129
|
+
console.log("Successfully inserted taxonomy into Explorer DB", {
|
|
130
|
+
parentStreamId,
|
|
131
|
+
childStreamId: childStreamIds,
|
|
132
|
+
weight: weights,
|
|
133
|
+
startDate: startDateText
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return txHash;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Creates a ComposedStream from a base Stream
|
|
140
|
+
* @param stream The base stream to convert
|
|
141
|
+
* @param neonConnectionString The Neon connection string
|
|
142
|
+
* @returns A ComposedStream instance
|
|
143
|
+
*/
|
|
144
|
+
static fromStream(stream, neonConnectionString) {
|
|
145
|
+
return new _ComposedAction(
|
|
146
|
+
stream["kwilClient"],
|
|
147
|
+
stream["kwilSigner"],
|
|
148
|
+
neonConnectionString
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
export {
|
|
153
|
+
ComposedAction,
|
|
154
|
+
ErrorStreamNotComposed
|
|
155
|
+
};
|
|
156
|
+
//# sourceMappingURL=composedAction.mjs.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": ["taxonomyItems"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/contracts-api/deleteStream.ts
|
|
2
|
+
async function deleteStream(input) {
|
|
3
|
+
try {
|
|
4
|
+
return await input.kwilClient.execute(
|
|
5
|
+
{
|
|
6
|
+
description: `TN SDK - Deleting stream: ${input.stream.streamId.getId()} from data provider: ${input.stream.dataProvider.getAddress()}`,
|
|
7
|
+
inputs: [{
|
|
8
|
+
$data_provider: input.stream.dataProvider.getAddress(),
|
|
9
|
+
$stream_id: input.stream.streamId.getId()
|
|
10
|
+
}],
|
|
11
|
+
name: "delete_stream",
|
|
12
|
+
namespace: "main"
|
|
13
|
+
},
|
|
14
|
+
input.kwilSigner,
|
|
15
|
+
input.synchronous
|
|
16
|
+
);
|
|
17
|
+
} catch (error) {
|
|
18
|
+
throw new Error(`Failed to delete stream: ${error}`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
deleteStream
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=deleteStream.mjs.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": ";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,38 +1,40 @@
|
|
|
1
1
|
// src/contracts-api/deployStream.ts
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
composedStreamTemplate,
|
|
5
|
-
primitiveStreamTemplate,
|
|
6
|
-
composedStreamTemplateUnix,
|
|
7
|
-
primitiveStreamTemplateUnix
|
|
8
|
-
} from "../contracts/contractsContent.mjs";
|
|
2
|
+
import pg from "pg";
|
|
3
|
+
var { Pool } = pg;
|
|
9
4
|
async function deployStream(input) {
|
|
10
5
|
try {
|
|
11
|
-
const
|
|
12
|
-
schema.name = input.streamId.getId();
|
|
13
|
-
const txHash = await input.kwilClient.deploy(
|
|
6
|
+
const txHash = await input.kwilClient.execute(
|
|
14
7
|
{
|
|
15
|
-
|
|
8
|
+
namespace: "main",
|
|
9
|
+
inputs: [{
|
|
10
|
+
$stream_id: input.streamId.getId(),
|
|
11
|
+
$stream_type: input.streamType
|
|
12
|
+
}],
|
|
13
|
+
name: "create_stream",
|
|
16
14
|
description: `TN SDK - Deploying ${input.streamType} stream: ${input.streamId.getId()}`
|
|
17
15
|
},
|
|
18
16
|
input.kwilSigner,
|
|
19
17
|
input.synchronous
|
|
20
18
|
);
|
|
19
|
+
if (input.neonConnectionString) {
|
|
20
|
+
console.log("Neon connection detected, attempting to insert into DB...");
|
|
21
|
+
const signer = input.kwilSigner.signer;
|
|
22
|
+
const dataProvider = signer.address.toLowerCase();
|
|
23
|
+
const pool = new Pool({ connectionString: input.neonConnectionString });
|
|
24
|
+
await pool.query(
|
|
25
|
+
`INSERT INTO streams (data_provider, stream_id, type, stream_name, display_name, categories, owner_wallet, geography, tags)
|
|
26
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
|
27
|
+
ON CONFLICT (data_provider, stream_id) DO NOTHING`,
|
|
28
|
+
[dataProvider, input.streamId.getId(), input.streamType, input.streamId.getName(), input.streamId.getName(), "{External}", dataProvider, "Global", "{External}"]
|
|
29
|
+
);
|
|
30
|
+
await pool.end();
|
|
31
|
+
console.log("successfully inserted into Explorer DB", input.streamId.getName());
|
|
32
|
+
}
|
|
21
33
|
return txHash;
|
|
22
34
|
} catch (error) {
|
|
23
35
|
throw new Error(`Failed to deploy stream: ${error}`);
|
|
24
36
|
}
|
|
25
37
|
}
|
|
26
|
-
async function getContract(streamType, contractVersion) {
|
|
27
|
-
switch (streamType) {
|
|
28
|
-
case StreamType.Composed:
|
|
29
|
-
return contractVersion === 2 ? composedStreamTemplateUnix : composedStreamTemplate;
|
|
30
|
-
case StreamType.Primitive:
|
|
31
|
-
return contractVersion === 2 ? primitiveStreamTemplateUnix : primitiveStreamTemplate;
|
|
32
|
-
default:
|
|
33
|
-
throw new Error(`Unknown stream type: ${streamType}`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
38
|
export {
|
|
37
39
|
deployStream
|
|
38
40
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/contracts-api/deployStream.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": ";
|
|
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": ";AAMA,OAAO,QAAQ;AACf,IAAM,EAAE,KAAK,IAAI;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
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// src/contracts-api/primitiveAction.ts
|
|
2
|
+
import { Utils } from "@kwilteam/kwil-js";
|
|
3
|
+
import { Action } from "./action.mjs";
|
|
4
|
+
var DataType = Utils.DataType;
|
|
5
|
+
var PrimitiveAction = class _PrimitiveAction extends Action {
|
|
6
|
+
constructor(kwilClient, kwilSigner) {
|
|
7
|
+
super(kwilClient, kwilSigner);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Insert a record into the stream
|
|
11
|
+
* @param input of a single record to insert
|
|
12
|
+
* @returns Transaction receipt
|
|
13
|
+
*/
|
|
14
|
+
async insertRecord(input) {
|
|
15
|
+
return await this.executeWithActionBody({
|
|
16
|
+
namespace: "main",
|
|
17
|
+
name: "insert_record",
|
|
18
|
+
inputs: [{
|
|
19
|
+
$data_provider: input.stream.dataProvider.getAddress(),
|
|
20
|
+
$stream_id: input.stream.streamId.getId(),
|
|
21
|
+
$event_time: input.eventTime,
|
|
22
|
+
$value: input.value
|
|
23
|
+
}],
|
|
24
|
+
types: {
|
|
25
|
+
$data_provider: DataType.Text,
|
|
26
|
+
$stream_id: DataType.Text,
|
|
27
|
+
$event_time: DataType.Int,
|
|
28
|
+
$value: DataType.Numeric(36, 18)
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Inserts records into the stream
|
|
34
|
+
* @param inputs Array of records to insert
|
|
35
|
+
* @param synchronous If true, the transaction will be executed synchronously
|
|
36
|
+
* @returns Transaction receipt
|
|
37
|
+
*/
|
|
38
|
+
async insertRecords(inputs, synchronous) {
|
|
39
|
+
return await this.executeWithActionBody({
|
|
40
|
+
namespace: "main",
|
|
41
|
+
name: "insert_records",
|
|
42
|
+
inputs: inputs.map((input) => ({
|
|
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.TextArray,
|
|
50
|
+
$stream_id: DataType.TextArray,
|
|
51
|
+
$event_time: DataType.IntArray,
|
|
52
|
+
$value: DataType.NumericArray(36, 18)
|
|
53
|
+
}
|
|
54
|
+
}, synchronous);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Creates a PrimitiveStream from a base Stream
|
|
58
|
+
* @param stream The base stream to convert
|
|
59
|
+
* @returns A Promise that resolves to a PrimitiveStream instance
|
|
60
|
+
*/
|
|
61
|
+
static fromStream(stream) {
|
|
62
|
+
return new _PrimitiveAction(
|
|
63
|
+
stream["kwilClient"],
|
|
64
|
+
stream["kwilSigner"]
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
export {
|
|
69
|
+
PrimitiveAction
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=primitiveAction.mjs.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,SAA8B,aAAqB;AAInD,SAAQ,cAAa;AAErB,IAAO,WAAW,MAAM;AAIjB,IAAM,kBAAN,MAAM,yBAAwB,OAAO;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
|
+
}
|
|
@@ -3,14 +3,14 @@ import { StreamId } from "./util/StreamId.mjs";
|
|
|
3
3
|
import { EthereumAddress } from "./util/EthereumAddress.mjs";
|
|
4
4
|
import { visibility } from "./util/visibility.mjs";
|
|
5
5
|
import { StreamType } from "./contracts-api/contractValues.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { Action } from "./contracts-api/action.mjs";
|
|
7
|
+
import { PrimitiveAction } from "./contracts-api/primitiveAction.mjs";
|
|
8
|
+
import { ComposedAction } from "./contracts-api/composedAction.mjs";
|
|
9
9
|
export {
|
|
10
|
-
|
|
10
|
+
Action,
|
|
11
|
+
ComposedAction,
|
|
11
12
|
EthereumAddress,
|
|
12
|
-
|
|
13
|
-
Stream,
|
|
13
|
+
PrimitiveAction,
|
|
14
14
|
StreamId,
|
|
15
15
|
StreamType,
|
|
16
16
|
visibility
|
|
@@ -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": ";AAYA,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAI3B,SAAS,kBAAkB;AAG3B,SAAS,cAAc;AACvB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=transaction.mjs.map
|
|
@@ -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,SAAS,cAAc;AACvB,SAAiB,MAAM,aAAa;AAE7B,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAI3B,YAAY,SAAiB;AAH7B,wBAAiB;AACjB,wBAAiB,oBAA4B;AAG3C,
|
|
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,SAAS,cAAc;AACvB,SAAiB,MAAM,aAAa;AAE7B,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAI3B,YAAY,SAAiB;AAH7B,wBAAiB;AACjB,wBAAiB,oBAA4B;AAG3C,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,aAAO,MAAM,IAAI,iBAAgB,OAAO,QAAQ,KAAK,CAAC,CAAC;AAAA,IACzD,SAAS,GAAG;AACV,aAAO,KAAK,CAAU;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,OAAc,WAAW,KAA6C;AACpE,QAAI;AACF,aAAO,MAAM,IAAI,iBAAgB,GAAG,CAAC;AAAA,IACvC,SAAS,GAAG;AACV,aAAO,KAAK,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
|
}
|
|
@@ -6,11 +6,13 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
6
6
|
import { sha256 } from "crypto-hash";
|
|
7
7
|
import { Either } from "monads-io";
|
|
8
8
|
var StreamId = class _StreamId {
|
|
9
|
-
constructor(id) {
|
|
9
|
+
constructor(id, name) {
|
|
10
10
|
__publicField(this, "id");
|
|
11
11
|
__publicField(this, "correctlyCreated", false);
|
|
12
|
+
__publicField(this, "name");
|
|
12
13
|
this.id = id;
|
|
13
14
|
this.correctlyCreated = true;
|
|
15
|
+
this.name = name;
|
|
14
16
|
}
|
|
15
17
|
getId() {
|
|
16
18
|
if (!this.correctlyCreated) {
|
|
@@ -18,6 +20,9 @@ var StreamId = class _StreamId {
|
|
|
18
20
|
}
|
|
19
21
|
return this.id;
|
|
20
22
|
}
|
|
23
|
+
getName() {
|
|
24
|
+
return this.name;
|
|
25
|
+
}
|
|
21
26
|
validate() {
|
|
22
27
|
return this.id.length === 32 && this.id.startsWith("st");
|
|
23
28
|
}
|
|
@@ -33,7 +38,7 @@ var StreamId = class _StreamId {
|
|
|
33
38
|
}
|
|
34
39
|
const hash = await sha256(s);
|
|
35
40
|
const streamIdStr = "st" + hash.slice(0, 30);
|
|
36
|
-
return new _StreamId(streamIdStr);
|
|
41
|
+
return new _StreamId(streamIdStr, s);
|
|
37
42
|
}
|
|
38
43
|
static fromString(s) {
|
|
39
44
|
try {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/StreamId.ts"],
|
|
4
|
-
"sourcesContent": ["import { sha256 } from \"crypto-hash\";\nimport { Either } from \"monads-io\";\n\nexport class StreamId {\n private readonly id: string;\n private readonly correctlyCreated: boolean = false;\n\n private constructor(id: string) {\n this.id = id;\n this.correctlyCreated = true;\n }\n\n public getId(): string {\n if (!this.correctlyCreated) {\n throw new Error(\"StreamId not correctly created\");\n }\n\n return this.id;\n }\n\n public validate(): boolean {\n return this.id.length === 32 && this.id.startsWith(\"st\");\n }\n\n public toJSON(): string {\n return this.getId();\n }\n\n public static fromJSON(json: string): StreamId {\n return new StreamId(json);\n }\n\n public static async generate(s: string): Promise<StreamId> {\n // If the string is already a valid StreamId, return it\n if (s.length === 32 && s.startsWith(\"st\")) {\n return new StreamId(s);\n }\n\n // Compute SHA-256 hash of the input string\n const hash = await sha256(s);\n\n // Take the first 30 characters of the hash and prepend \"st\"\n const streamIdStr = \"st\" + hash.slice(0, 30);\n\n return new StreamId(streamIdStr);\n }\n\n public static fromString(s: string): Either<Error, StreamId> {\n try {\n return Either.right(new StreamId(s));\n } catch (e) {\n return Either.left(e as Error);\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, it, expect } = import.meta.vitest;\n describe(\"StreamId\", () => {\n it(\"should generate a valid StreamId\", async () => {\n const streamId = await StreamId.generate(\"cpi_india_1.1.01\");\n expect(streamId.validate()).toBe(true);\n expect(streamId.getId()).toBe(\"st39830c44932bc42a3bffef72310948\");\n });\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAAA,SAAS,cAAc;AACvB,SAAS,cAAc;AAEhB,IAAM,WAAN,MAAM,UAAS;AAAA,
|
|
4
|
+
"sourcesContent": ["import { sha256 } from \"crypto-hash\";\nimport { Either } from \"monads-io\";\n\nexport class StreamId {\n private readonly id: string;\n private readonly correctlyCreated: boolean = false;\n private readonly name?: string;\n\n private constructor(id: string, name?: string) {\n this.id = id;\n this.correctlyCreated = true;\n this.name = name;\n }\n\n public getId(): string {\n if (!this.correctlyCreated) {\n throw new Error(\"StreamId not correctly created\");\n }\n\n return this.id;\n }\n\n public getName(): string | undefined {\n return this.name;\n }\n\n public validate(): boolean {\n return this.id.length === 32 && this.id.startsWith(\"st\");\n }\n\n public toJSON(): string {\n return this.getId();\n }\n\n public static fromJSON(json: string): StreamId {\n return new StreamId(json);\n }\n\n public static async generate(s: string): Promise<StreamId> {\n // If the string is already a valid StreamId, return it\n if (s.length === 32 && s.startsWith(\"st\")) {\n return new StreamId(s);\n }\n\n // Compute SHA-256 hash of the input string\n const hash = await sha256(s);\n\n // Take the first 30 characters of the hash and prepend \"st\"\n const streamIdStr = \"st\" + hash.slice(0, 30);\n\n return new StreamId(streamIdStr, s);\n }\n\n public static fromString(s: string): Either<Error, StreamId> {\n try {\n return Either.right(new StreamId(s));\n } catch (e) {\n return Either.left(e as Error);\n }\n }\n}\n\nif (import.meta.vitest) {\n const { describe, it, expect } = import.meta.vitest;\n describe(\"StreamId\", () => {\n it(\"should generate a valid StreamId\", async () => {\n const streamId = await StreamId.generate(\"cpi_india_1.1.01\");\n expect(streamId.validate()).toBe(true);\n expect(streamId.getId()).toBe(\"st39830c44932bc42a3bffef72310948\");\n });\n });\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAAA,SAAS,cAAc;AACvB,SAAS,cAAc;AAEhB,IAAM,WAAN,MAAM,UAAS;AAAA,EAKZ,YAAY,IAAY,MAAe;AAJ/C,wBAAiB;AACjB,wBAAiB,oBAA4B;AAC7C,wBAAiB;AAGf,SAAK,KAAK;AACV,SAAK,mBAAmB;AACxB,SAAK,OAAO;AAAA,EACd;AAAA,EAEO,QAAgB;AACrB,QAAI,CAAC,KAAK,kBAAkB;AAC1B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,UAA8B;AACnC,WAAO,KAAK;AAAA,EACd;AAAA,EAEO,WAAoB;AACzB,WAAO,KAAK,GAAG,WAAW,MAAM,KAAK,GAAG,WAAW,IAAI;AAAA,EACzD;AAAA,EAEO,SAAiB;AACtB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,OAAc,SAAS,MAAwB;AAC7C,WAAO,IAAI,UAAS,IAAI;AAAA,EAC1B;AAAA,EAEA,aAAoB,SAAS,GAA8B;AAEzD,QAAI,EAAE,WAAW,MAAM,EAAE,WAAW,IAAI,GAAG;AACzC,aAAO,IAAI,UAAS,CAAC;AAAA,IACvB;AAGA,UAAM,OAAO,MAAM,OAAO,CAAC;AAG3B,UAAM,cAAc,OAAO,KAAK,MAAM,GAAG,EAAE;AAE3C,WAAO,IAAI,UAAS,aAAa,CAAC;AAAA,EACpC;AAAA,EAEA,OAAc,WAAW,GAAoC;AAC3D,QAAI;AACF,aAAO,OAAO,MAAM,IAAI,UAAS,CAAC,CAAC;AAAA,IACrC,SAAS,GAAG;AACV,aAAO,OAAO,KAAK,CAAU;AAAA,IAC/B;AAAA,EACF;AACF;AAEA,IAAI,YAAY,QAAQ;AACtB,QAAM,EAAE,UAAU,IAAI,OAAO,IAAI,YAAY;AAC7C,WAAS,YAAY,MAAM;AACzB,OAAG,oCAAoC,YAAY;AACjD,YAAM,WAAW,MAAM,SAAS,SAAS,kBAAkB;AAC3D,aAAO,SAAS,SAAS,CAAC,EAAE,KAAK,IAAI;AACrC,aAAO,SAAS,MAAM,CAAC,EAAE,KAAK,kCAAkC;AAAA,IAClE,CAAC;AAAA,EACH,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|