@trufnetwork/sdk-js 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/cjs/client/client.cjs +4 -2
  2. package/dist/cjs/client/client.cjs.map +2 -2
  3. package/dist/cjs/contracts/composed_stream_template_unix.json +2122 -0
  4. package/dist/cjs/contracts/contractsContent.cjs +13 -1
  5. package/dist/cjs/contracts/contractsContent.cjs.map +3 -3
  6. package/dist/cjs/contracts/primitive_stream_template_unix.json +1173 -0
  7. package/dist/cjs/contracts-api/composedStream.cjs.map +2 -2
  8. package/dist/cjs/contracts-api/deployStream.cjs +4 -4
  9. package/dist/cjs/contracts-api/deployStream.cjs.map +2 -2
  10. package/dist/cjs/contracts-api/primitiveStream.cjs.map +1 -1
  11. package/dist/cjs/contracts-api/stream.cjs +25 -0
  12. package/dist/cjs/contracts-api/stream.cjs.map +2 -2
  13. package/dist/esm/client/client.mjs +4 -2
  14. package/dist/esm/client/client.mjs.map +2 -2
  15. package/dist/esm/contracts/composed_stream_template_unix.json +2122 -0
  16. package/dist/esm/contracts/contractsContent.mjs +13 -1
  17. package/dist/esm/contracts/contractsContent.mjs.map +2 -2
  18. package/dist/esm/contracts/primitive_stream_template_unix.json +1173 -0
  19. package/dist/esm/contracts-api/composedStream.mjs.map +2 -2
  20. package/dist/esm/contracts-api/deployStream.mjs +7 -5
  21. package/dist/esm/contracts-api/deployStream.mjs.map +2 -2
  22. package/dist/esm/contracts-api/primitiveStream.mjs.map +1 -1
  23. package/dist/esm/contracts-api/stream.mjs +25 -0
  24. package/dist/esm/contracts-api/stream.mjs.map +2 -2
  25. package/dist/tsconfig.build.tsbuildinfo +1 -1
  26. package/dist/types/client/client.d.ts +2 -1
  27. package/dist/types/client/client.d.ts.map +1 -1
  28. package/dist/types/contracts/contractsContent.d.ts +3 -1
  29. package/dist/types/contracts/contractsContent.d.ts.map +1 -1
  30. package/dist/types/contracts-api/composedStream.d.ts +1 -1
  31. package/dist/types/contracts-api/composedStream.d.ts.map +1 -1
  32. package/dist/types/contracts-api/deployStream.d.ts +1 -0
  33. package/dist/types/contracts-api/deployStream.d.ts.map +1 -1
  34. package/dist/types/contracts-api/primitiveStream.d.ts +1 -1
  35. package/dist/types/contracts-api/primitiveStream.d.ts.map +1 -1
  36. package/dist/types/contracts-api/stream.d.ts +13 -6
  37. package/dist/types/contracts-api/stream.d.ts.map +1 -1
  38. package/package.json +9 -9
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/composedStream.ts"],
4
- "sourcesContent": ["import { KwilSigner, NodeKwil, WebKwil } from \"@kwilteam/kwil-js\";\nimport { ActionInput } from \"@kwilteam/kwil-js/dist/core/action\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { StreamId } from \"../util/StreamId\";\nimport { StreamType } from \"./contractValues\";\nimport { Stream } from \"./stream\";\n\nexport const ErrorStreamNotComposed = \"stream is not a composed stream\";\n\nexport interface TaxonomySet {\n taxonomyItems: TaxonomyItem[];\n startDate?: DateString;\n}\n\nexport interface TaxonomyItem {\n childStream: StreamLocator;\n weight: string;\n}\n\nexport interface DescribeTaxonomiesParams {\n /**\n * if true, will return the latest version of the taxonomy only\n */\n latestVersion: boolean;\n}\n\nexport class ComposedStream extends Stream {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n locator: StreamLocator,\n ) {\n super(kwilClient, kwilSigner, locator);\n }\n\n /**\n * Checks if the stream is a valid composed stream.\n * A valid composed stream must be:\n * - initialized\n * - of type composed\n */\n private async checkValidComposedStream(): Promise<void> {\n // First check if initialized\n await this.checkInitialized(StreamType.Composed);\n\n // Then check if is composed\n const streamType = await this.getType();\n if (streamType !== StreamType.Composed) {\n throw new Error(ErrorStreamNotComposed);\n }\n }\n\n /**\n * Executes a method after checking if the stream is a valid composed stream\n * @param method The method name to execute\n * @param inputs The inputs for the action\n * @returns A generic response containing the transaction receipt\n */\n private async checkedComposedExecute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkValidComposedStream();\n return this.execute(method, inputs);\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 child_stream_id: string;\n child_data_provider: string;\n weight: string;\n created_at: number;\n version: number;\n start_date: string;\n }[];\n\n const result = await this.call<TaxonomyResult>(\"describe_taxonomies\", [\n ActionInput.fromObject({ $latest_version: params.latestVersion }),\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) || [];\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, currentArray);\n return acc;\n },\n new Map<DateString, TaxonomyItem[]>(),\n );\n\n let startDate: DateString | undefined;\n if (records.length > 0 && records[0].start_date) {\n startDate = records[0].start_date;\n }\n\n return Array.from(taxonomyItems.entries()).map(\n ([startDate, taxonomyItems]) => ({\n startDate,\n taxonomyItems,\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 dataProviders: string[] = [];\n const streamIds: string[] = [];\n const weights: string[] = [];\n const startDate = taxonomy.startDate;\n\n for (const item of taxonomy.taxonomyItems) {\n const dataProviderHex = item.childStream.dataProvider\n .getAddress()\n .slice(2); // Remove 0x prefix\n dataProviders.push(dataProviderHex);\n streamIds.push(item.childStream.streamId.getId());\n weights.push(item.weight.toString());\n }\n\n return this.checkedComposedExecute(\"set_taxonomy\", [\n ActionInput.fromObject({\n $data_providers: dataProviders,\n $stream_ids: streamIds,\n $weights: weights,\n $start_date: startDate,\n }),\n ]);\n }\n\n /**\n * Creates a ComposedStream from a base Stream\n * @param stream The base stream to convert\n * @returns A ComposedStream instance\n */\n public static fromStream(stream: Stream): ComposedStream {\n return new ComposedStream(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n stream[\"locator\"],\n );\n }\n}\n"],
5
- "mappings": ";AACA,SAAS,mBAAmB;AAK5B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AAEhB,IAAM,yBAAyB;AAmB/B,IAAM,iBAAN,MAAM,wBAAuB,OAAO;AAAA,EACzC,YACE,YACA,YACA,SACA;AACA,UAAM,YAAY,YAAY,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,2BAA0C;AAEtD,UAAM,KAAK,iBAAiB,WAAW,QAAQ;AAG/C,UAAM,aAAa,MAAM,KAAK,QAAQ;AACtC,QAAI,eAAe,WAAW,UAAU;AACtC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,uBACZ,QACA,QACqC;AACrC,UAAM,KAAK,yBAAyB;AACpC,WAAO,KAAK,QAAQ,QAAQ,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,mBACX,QACwB;AAUxB,UAAM,SAAS,MAAM,KAAK,KAAqB,uBAAuB;AAAA,MACpE,YAAY,WAAW,EAAE,iBAAiB,OAAO,cAAc,CAAC;AAAA,IAClE,CAAC;AAED,WAAO,OACJ,SAAS,CAAC,YAAY;AACrB,YAAM,gBAAiD,QAAQ;AAAA,QAC7D,CAAC,KAAK,WAAW;AACf,gBAAM,eAAe,IAAI,IAAI,OAAO,UAAU,KAAK,CAAC;AACpD,uBAAa,KAAK;AAAA,YAChB,aAAa;AAAA,cACX,UAAU,SAAS,WAAW,OAAO,eAAe,EAAE,MAAM;AAAA,cAC5D,cAAc,gBAAgB;AAAA,gBAC5B,OAAO;AAAA,cACT,EAAE,MAAM;AAAA,YACV;AAAA,YACA,QAAQ,OAAO;AAAA,UACjB,CAAC;AACD,cAAI,IAAI,OAAO,YAAY,YAAY;AACvC,iBAAO;AAAA,QACT;AAAA,QACA,oBAAI,IAAgC;AAAA,MACtC;AAEA,UAAI;AACJ,UAAI,QAAQ,SAAS,KAAK,QAAQ,CAAC,EAAE,YAAY;AAC/C,oBAAY,QAAQ,CAAC,EAAE;AAAA,MACzB;AAEA,aAAO,MAAM,KAAK,cAAc,QAAQ,CAAC,EAAE;AAAA,QACzC,CAAC,CAACA,YAAWC,cAAa,OAAO;AAAA,UAC/B,WAAAD;AAAA,UACA,eAAAC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,YACX,UACqC;AACrC,UAAM,gBAA0B,CAAC;AACjC,UAAM,YAAsB,CAAC;AAC7B,UAAM,UAAoB,CAAC;AAC3B,UAAM,YAAY,SAAS;AAE3B,eAAW,QAAQ,SAAS,eAAe;AACzC,YAAM,kBAAkB,KAAK,YAAY,aACtC,WAAW,EACX,MAAM,CAAC;AACV,oBAAc,KAAK,eAAe;AAClC,gBAAU,KAAK,KAAK,YAAY,SAAS,MAAM,CAAC;AAChD,cAAQ,KAAK,KAAK,OAAO,SAAS,CAAC;AAAA,IACrC;AAEA,WAAO,KAAK,uBAAuB,gBAAgB;AAAA,MACjD,YAAY,WAAW;AAAA,QACrB,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,aAAa;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,WAAW,QAAgC;AACvD,WAAO,IAAI;AAAA,MACT,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA,MACnB,OAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import { KwilSigner, NodeKwil, WebKwil } from \"@kwilteam/kwil-js\";\nimport { ActionInput } from \"@kwilteam/kwil-js/dist/core/action\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { StreamId } from \"../util/StreamId\";\nimport { StreamType } from \"./contractValues\";\nimport { Stream } from \"./stream\";\n\nexport const ErrorStreamNotComposed = \"stream is not a composed stream\";\n\nexport interface TaxonomySet {\n taxonomyItems: TaxonomyItem[];\n startDate: DateString | number;\n}\n\nexport interface TaxonomyItem {\n childStream: StreamLocator;\n weight: string;\n}\n\nexport interface DescribeTaxonomiesParams {\n /**\n * if true, will return the latest version of the taxonomy only\n */\n latestVersion: boolean;\n}\n\nexport class ComposedStream extends Stream {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n locator: StreamLocator,\n ) {\n super(kwilClient, kwilSigner, locator);\n }\n\n /**\n * Checks if the stream is a valid composed stream.\n * A valid composed stream must be:\n * - initialized\n * - of type composed\n */\n private async checkValidComposedStream(): Promise<void> {\n // First check if initialized\n await this.checkInitialized(StreamType.Composed);\n\n // Then check if is composed\n const streamType = await this.getType();\n if (streamType !== StreamType.Composed) {\n throw new Error(ErrorStreamNotComposed);\n }\n }\n\n /**\n * Executes a method after checking if the stream is a valid composed stream\n * @param method The method name to execute\n * @param inputs The inputs for the action\n * @returns A generic response containing the transaction receipt\n */\n private async checkedComposedExecute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkValidComposedStream();\n return this.execute(method, inputs);\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 child_stream_id: string;\n child_data_provider: string;\n weight: string;\n created_at: number;\n version: number;\n start_date: string | number;\n }[];\n\n const result = await this.call<TaxonomyResult>(\"describe_taxonomies\", [\n ActionInput.fromObject({ $latest_version: params.latestVersion }),\n ]);\n\n return result\n .mapRight((records) => {\n const taxonomyItems: Map<DateString, TaxonomyItem[]> = records.reduce(\n (acc, record) => {\n const currentArray = acc.get(<string>record.start_date) || [];\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(<string>record.start_date, currentArray);\n return acc;\n },\n new Map<DateString, TaxonomyItem[]>(),\n );\n\n let startDate: string | number;\n if (records.length > 0 && records[0].start_date) {\n startDate = records[0].start_date;\n }\n\n return Array.from(taxonomyItems.entries()).map(\n ([startDate, taxonomyItems]) => ({\n startDate,\n taxonomyItems,\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 dataProviders: string[] = [];\n const streamIds: string[] = [];\n const weights: string[] = [];\n const startDate = taxonomy.startDate;\n\n for (const item of taxonomy.taxonomyItems) {\n const dataProviderHex = item.childStream.dataProvider\n .getAddress()\n .slice(2); // Remove 0x prefix\n dataProviders.push(dataProviderHex);\n streamIds.push(item.childStream.streamId.getId());\n weights.push(item.weight.toString());\n }\n\n return this.checkedComposedExecute(\"set_taxonomy\", [\n ActionInput.fromObject({\n $data_providers: dataProviders,\n $stream_ids: streamIds,\n $weights: weights,\n $start_date: startDate,\n }),\n ]);\n }\n\n /**\n * Creates a ComposedStream from a base Stream\n * @param stream The base stream to convert\n * @returns A ComposedStream instance\n */\n public static fromStream(stream: Stream): ComposedStream {\n return new ComposedStream(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n stream[\"locator\"],\n );\n }\n}\n"],
5
+ "mappings": ";AACA,SAAS,mBAAmB;AAK5B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AAEhB,IAAM,yBAAyB;AAmB/B,IAAM,iBAAN,MAAM,wBAAuB,OAAO;AAAA,EACzC,YACE,YACA,YACA,SACA;AACA,UAAM,YAAY,YAAY,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,2BAA0C;AAEtD,UAAM,KAAK,iBAAiB,WAAW,QAAQ;AAG/C,UAAM,aAAa,MAAM,KAAK,QAAQ;AACtC,QAAI,eAAe,WAAW,UAAU;AACtC,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,uBACZ,QACA,QACqC;AACrC,UAAM,KAAK,yBAAyB;AACpC,WAAO,KAAK,QAAQ,QAAQ,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,mBACX,QACwB;AAUxB,UAAM,SAAS,MAAM,KAAK,KAAqB,uBAAuB;AAAA,MACpE,YAAY,WAAW,EAAE,iBAAiB,OAAO,cAAc,CAAC;AAAA,IAClE,CAAC;AAED,WAAO,OACJ,SAAS,CAAC,YAAY;AACrB,YAAM,gBAAiD,QAAQ;AAAA,QAC7D,CAAC,KAAK,WAAW;AACf,gBAAM,eAAe,IAAI,IAAY,OAAO,UAAU,KAAK,CAAC;AAC5D,uBAAa,KAAK;AAAA,YAChB,aAAa;AAAA,cACX,UAAU,SAAS,WAAW,OAAO,eAAe,EAAE,MAAM;AAAA,cAC5D,cAAc,gBAAgB;AAAA,gBAC5B,OAAO;AAAA,cACT,EAAE,MAAM;AAAA,YACV;AAAA,YACA,QAAQ,OAAO;AAAA,UACjB,CAAC;AACD,cAAI,IAAY,OAAO,YAAY,YAAY;AAC/C,iBAAO;AAAA,QACT;AAAA,QACA,oBAAI,IAAgC;AAAA,MACtC;AAEA,UAAI;AACJ,UAAI,QAAQ,SAAS,KAAK,QAAQ,CAAC,EAAE,YAAY;AAC/C,oBAAY,QAAQ,CAAC,EAAE;AAAA,MACzB;AAEA,aAAO,MAAM,KAAK,cAAc,QAAQ,CAAC,EAAE;AAAA,QACzC,CAAC,CAACA,YAAWC,cAAa,OAAO;AAAA,UAC/B,WAAAD;AAAA,UACA,eAAAC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC,EACA,MAAM;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,YACX,UACqC;AACrC,UAAM,gBAA0B,CAAC;AACjC,UAAM,YAAsB,CAAC;AAC7B,UAAM,UAAoB,CAAC;AAC3B,UAAM,YAAY,SAAS;AAE3B,eAAW,QAAQ,SAAS,eAAe;AACzC,YAAM,kBAAkB,KAAK,YAAY,aACtC,WAAW,EACX,MAAM,CAAC;AACV,oBAAc,KAAK,eAAe;AAClC,gBAAU,KAAK,KAAK,YAAY,SAAS,MAAM,CAAC;AAChD,cAAQ,KAAK,KAAK,OAAO,SAAS,CAAC;AAAA,IACrC;AAEA,WAAO,KAAK,uBAAuB,gBAAgB;AAAA,MACjD,YAAY,WAAW;AAAA,QACrB,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,aAAa;AAAA,MACf,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,WAAW,QAAgC;AACvD,WAAO,IAAI;AAAA,MACT,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA,MACnB,OAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;",
6
6
  "names": ["startDate", "taxonomyItems"]
7
7
  }
@@ -2,11 +2,13 @@
2
2
  import { StreamType } from "./contractValues.mjs";
3
3
  import {
4
4
  composedStreamTemplate,
5
- primitiveStreamTemplate
5
+ primitiveStreamTemplate,
6
+ composedStreamTemplateUnix,
7
+ primitiveStreamTemplateUnix
6
8
  } from "../contracts/contractsContent.mjs";
7
9
  async function deployStream(input) {
8
10
  try {
9
- const schema = await getContract(input.streamType);
11
+ const schema = await getContract(input.streamType, input.contractVersion);
10
12
  schema.name = input.streamId.getId();
11
13
  const txHash = await input.kwilClient.deploy(
12
14
  {
@@ -21,12 +23,12 @@ async function deployStream(input) {
21
23
  throw new Error(`Failed to deploy stream: ${error}`);
22
24
  }
23
25
  }
24
- async function getContract(streamType) {
26
+ async function getContract(streamType, contractVersion) {
25
27
  switch (streamType) {
26
28
  case StreamType.Composed:
27
- return composedStreamTemplate;
29
+ return contractVersion === 2 ? composedStreamTemplateUnix : composedStreamTemplate;
28
30
  case StreamType.Primitive:
29
- return primitiveStreamTemplate;
31
+ return contractVersion === 2 ? primitiveStreamTemplateUnix : primitiveStreamTemplate;
30
32
  default:
31
33
  throw new Error(`Unknown stream type: ${streamType}`);
32
34
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/deployStream.ts"],
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 { CompiledKuneiform } from \"@kwilteam/kwil-js/dist/core/payload\";\nimport {\n composedStreamTemplate,\n primitiveStreamTemplate,\n} from \"../contracts/contractsContent\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { KwilSigner } from \"@kwilteam/kwil-js\";\nimport { StreamId } from \"../util/StreamId\";\n\nexport interface DeployStreamInput {\n streamId: StreamId;\n streamType: StreamType;\n kwilClient: Kwil<any>;\n kwilSigner: KwilSigner;\n synchronous?: boolean;\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 schema = await getContract(input.streamType);\n\n schema.name = input.streamId.getId();\n\n const txHash = await input.kwilClient.deploy(\n {\n schema,\n description: `TN SDK - Deploying ${input.streamType} stream: ${input.streamId.getId()}`,\n },\n input.kwilSigner,\n input.synchronous,\n );\n\n return txHash;\n } catch (error) {\n throw new Error(`Failed to deploy stream: ${error}`);\n }\n}\n\n/**\n * Returns the contract content based on the stream type.\n * @param streamType - The type of the stream.\n * @returns The contract content as a Uint8Array.\n */\nasync function getContract(streamType: StreamType): Promise<CompiledKuneiform> {\n switch (streamType) {\n case StreamType.Composed:\n return composedStreamTemplate;\n case StreamType.Primitive:\n return primitiveStreamTemplate;\n default:\n throw new Error(`Unknown stream type: ${streamType}`);\n }\n}\n"],
5
- "mappings": ";AAAA,SAAS,kBAAkB;AAI3B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAsBP,eAAsB,aACpB,OACqC;AACrC,MAAI;AACF,UAAM,SAAS,MAAM,YAAY,MAAM,UAAU;AAEjD,WAAO,OAAO,MAAM,SAAS,MAAM;AAEnC,UAAM,SAAS,MAAM,MAAM,WAAW;AAAA,MACpC;AAAA,QACE;AAAA,QACA,aAAa,sBAAsB,MAAM,UAAU,YAAY,MAAM,SAAS,MAAM,CAAC;AAAA,MACvF;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;AAOA,eAAe,YAAY,YAAoD;AAC7E,UAAQ,YAAY;AAAA,IAClB,KAAK,WAAW;AACd,aAAO;AAAA,IACT,KAAK,WAAW;AACd,aAAO;AAAA,IACT;AACE,YAAM,IAAI,MAAM,wBAAwB,UAAU,EAAE;AAAA,EACxD;AACF;",
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 { CompiledKuneiform } from \"@kwilteam/kwil-js/dist/core/payload\";\nimport {\n composedStreamTemplate,\n primitiveStreamTemplate,\n composedStreamTemplateUnix,\n primitiveStreamTemplateUnix\n} from \"../contracts/contractsContent\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { KwilSigner } from \"@kwilteam/kwil-js\";\nimport { StreamId } from \"../util/StreamId\";\n\nexport interface DeployStreamInput {\n streamId: StreamId;\n streamType: StreamType;\n kwilClient: Kwil<any>;\n kwilSigner: KwilSigner;\n synchronous?: boolean;\n contractVersion?: number;\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 schema = await getContract(input.streamType, input.contractVersion);\n\n schema.name = input.streamId.getId();\n\n const txHash = await input.kwilClient.deploy(\n {\n schema,\n description: `TN SDK - Deploying ${input.streamType} stream: ${input.streamId.getId()}`,\n },\n input.kwilSigner,\n input.synchronous,\n );\n\n return txHash;\n } catch (error) {\n throw new Error(`Failed to deploy stream: ${error}`);\n }\n}\n\n/**\n * Returns the contract content based on the stream type.\n * @param streamType - The type of the stream.\n * @param contractVersion\n * @returns The contract content as a Uint8Array.\n */\nasync function getContract(streamType: StreamType, contractVersion?: number): Promise<CompiledKuneiform> {\n switch (streamType) {\n case StreamType.Composed:\n return contractVersion === 2 ? composedStreamTemplateUnix : composedStreamTemplate;\n case StreamType.Primitive:\n return contractVersion === 2 ? primitiveStreamTemplateUnix : primitiveStreamTemplate;\n default:\n throw new Error(`Unknown stream type: ${streamType}`);\n }\n}\n"],
5
+ "mappings": ";AAAA,SAAS,kBAAkB;AAI3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAuBP,eAAsB,aACpB,OACqC;AACrC,MAAI;AACF,UAAM,SAAS,MAAM,YAAY,MAAM,YAAY,MAAM,eAAe;AAExE,WAAO,OAAO,MAAM,SAAS,MAAM;AAEnC,UAAM,SAAS,MAAM,MAAM,WAAW;AAAA,MACpC;AAAA,QACE;AAAA,QACA,aAAa,sBAAsB,MAAM,UAAU,YAAY,MAAM,SAAS,MAAM,CAAC;AAAA,MACvF;AAAA,MACA,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;AAQA,eAAe,YAAY,YAAwB,iBAAsD;AACvG,UAAQ,YAAY;AAAA,IAClB,KAAK,WAAW;AACd,aAAO,oBAAoB,IAAI,6BAA6B;AAAA,IAC9D,KAAK,WAAW;AACd,aAAO,oBAAoB,IAAI,8BAA8B;AAAA,IAC/D;AACE,YAAM,IAAI,MAAM,wBAAwB,UAAU,EAAE;AAAA,EACxD;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/primitiveStream.ts"],
4
- "sourcesContent": ["import { KwilSigner, NodeKwil, WebKwil } from \"@kwilteam/kwil-js\";\nimport { ActionInput } from \"@kwilteam/kwil-js/dist/core/action\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { StreamType } from \"./contractValues\";\nimport { StreamLocator } from \"../types/stream\";\nimport { Stream } from \"./stream\";\n\nconst ErrorStreamNotPrimitive = \"stream is not a primitive stream\";\n\nexport class PrimitiveStream extends Stream {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n locator: StreamLocator,\n ) {\n super(kwilClient, kwilSigner, locator);\n }\n\n /**\n * Checks if the stream is a valid primitive stream.\n * A valid primitive stream must be:\n * - initialized\n * - of type primitive\n */\n private async checkValidPrimitiveStream(): Promise<void> {\n // First check if initialized\n await this.checkInitialized(StreamType.Primitive);\n\n // Then check if is primitive\n const streamType = await this.getType();\n if (streamType !== StreamType.Primitive) {\n throw new Error(ErrorStreamNotPrimitive);\n }\n }\n\n /**\n * Executes a method after checking if the stream is a valid primitive stream\n * @param method The method name to execute\n * @param inputs The inputs for the action\n * @returns A generic response containing the transaction receipt\n */\n private async checkedPrimitiveExecute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkValidPrimitiveStream();\n return this.execute(method, inputs);\n }\n\n /**\n * Inserts records into the stream\n * @param inputs Array of records to insert\n * @returns Transaction receipt\n */\n public async insertRecords(\n inputs: InsertRecordInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkValidPrimitiveStream();\n\n const actionInputs = inputs.map((input) =>\n ActionInput.fromObject({\n $date_value: input.dateValue,\n $value: input.value,\n }),\n );\n\n return await this.checkedPrimitiveExecute(\"insert_record\", actionInputs);\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: Stream): PrimitiveStream {\n const primitiveStream = new PrimitiveStream(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n stream[\"locator\"],\n );\n\n return primitiveStream;\n }\n}\nexport interface InsertRecordInput {\n dateValue: string;\n // value is a string to support arbitrary precision\n value: string;\n}\n"],
4
+ "sourcesContent": ["import { KwilSigner, NodeKwil, WebKwil } from \"@kwilteam/kwil-js\";\nimport { ActionInput } from \"@kwilteam/kwil-js/dist/core/action\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { StreamType } from \"./contractValues\";\nimport { StreamLocator } from \"../types/stream\";\nimport { Stream } from \"./stream\";\n\nconst ErrorStreamNotPrimitive = \"stream is not a primitive stream\";\n\nexport class PrimitiveStream extends Stream {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n locator: StreamLocator,\n ) {\n super(kwilClient, kwilSigner, locator);\n }\n\n /**\n * Checks if the stream is a valid primitive stream.\n * A valid primitive stream must be:\n * - initialized\n * - of type primitive\n */\n private async checkValidPrimitiveStream(): Promise<void> {\n // First check if initialized\n await this.checkInitialized(StreamType.Primitive);\n\n // Then check if is primitive\n const streamType = await this.getType();\n if (streamType !== StreamType.Primitive) {\n throw new Error(ErrorStreamNotPrimitive);\n }\n }\n\n /**\n * Executes a method after checking if the stream is a valid primitive stream\n * @param method The method name to execute\n * @param inputs The inputs for the action\n * @returns A generic response containing the transaction receipt\n */\n private async checkedPrimitiveExecute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkValidPrimitiveStream();\n return this.execute(method, inputs);\n }\n\n /**\n * Inserts records into the stream\n * @param inputs Array of records to insert\n * @returns Transaction receipt\n */\n public async insertRecords(\n inputs: InsertRecordInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkValidPrimitiveStream();\n\n const actionInputs = inputs.map((input) =>\n ActionInput.fromObject({\n $date_value: input.dateValue,\n $value: input.value,\n }),\n );\n\n return await this.checkedPrimitiveExecute(\"insert_record\", actionInputs);\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: Stream): PrimitiveStream {\n const primitiveStream = new PrimitiveStream(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n stream[\"locator\"],\n );\n\n return primitiveStream;\n }\n}\nexport interface InsertRecordInput {\n dateValue: string | number;\n // value is a string to support arbitrary precision\n value: string;\n}\n"],
5
5
  "mappings": ";AACA,SAAS,mBAAmB;AAG5B,SAAS,kBAAkB;AAE3B,SAAS,cAAc;AAEvB,IAAM,0BAA0B;AAEzB,IAAM,kBAAN,MAAM,yBAAwB,OAAO;AAAA,EAC1C,YACE,YACA,YACA,SACA;AACA,UAAM,YAAY,YAAY,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,4BAA2C;AAEvD,UAAM,KAAK,iBAAiB,WAAW,SAAS;AAGhD,UAAM,aAAa,MAAM,KAAK,QAAQ;AACtC,QAAI,eAAe,WAAW,WAAW;AACvC,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,wBACZ,QACA,QACqC;AACrC,UAAM,KAAK,0BAA0B;AACrC,WAAO,KAAK,QAAQ,QAAQ,MAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,cACX,QACqC;AACrC,UAAM,KAAK,0BAA0B;AAErC,UAAM,eAAe,OAAO;AAAA,MAAI,CAAC,UAC/B,YAAY,WAAW;AAAA,QACrB,aAAa,MAAM;AAAA,QACnB,QAAQ,MAAM;AAAA,MAChB,CAAC;AAAA,IACH;AAEA,WAAO,MAAM,KAAK,wBAAwB,iBAAiB,YAAY;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAc,WAAW,QAAiC;AACxD,UAAM,kBAAkB,IAAI;AAAA,MAC1B,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA,MACnB,OAAO,SAAS;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -360,6 +360,31 @@ var Stream = class {
360
360
  }))
361
361
  ).throw();
362
362
  }
363
+ /**
364
+ * A custom method that accepts the procedure name and the input of GetRecordInput
365
+ * Returns the result of the procedure in the same format as StreamRecord
366
+ * I.e. a custom procedure named "get_price" that returns a list of date_value and value
367
+ * can be called with customGetProcedure("get_price", { dateFrom: "2021-01-01", dateTo: "2021-01-31" })
368
+ */
369
+ async customGetProcedure(procedure, input) {
370
+ const result = await this.call(
371
+ procedure,
372
+ [
373
+ ActionInput.fromObject({
374
+ $date_from: input.dateFrom,
375
+ $date_to: input.dateTo,
376
+ $frozen_at: input.frozenAt,
377
+ $base_date: input.baseDate
378
+ })
379
+ ]
380
+ );
381
+ return result.mapRight(
382
+ (result2) => result2.map((row) => ({
383
+ dateValue: row.date_value,
384
+ value: row.value
385
+ }))
386
+ ).throw();
387
+ }
363
388
  };
364
389
  export {
365
390
  Stream
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/stream.ts"],
4
- "sourcesContent": ["import { KwilSigner, NodeKwil, WebKwil } from \"@kwilteam/kwil-js\";\nimport { ActionInput } from \"@kwilteam/kwil-js/dist/core/action\";\nimport { Database } from \"@kwilteam/kwil-js/dist/core/database\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { generateDBID } from \"@kwilteam/kwil-js/dist/utils/dbid\";\nimport { Either } from \"monads-io\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { head } from \"../util/head\";\nimport { StreamId } from \"../util/StreamId\";\nimport { toVisibilityEnum, VisibilityEnum } from \"../util/visibility\";\nimport {\n MetadataKey,\n MetadataKeyValueMap,\n MetadataTableKey,\n MetadataValueTypeForKey,\n StreamType,\n} from \"./contractValues\";\n\nexport interface GetRecordInput {\n dateFrom?: DateString;\n dateTo?: DateString;\n frozenAt?: number;\n baseDate?: DateString;\n}\n\nexport interface GetFirstRecordInput {\n afterDate?: DateString;\n frozenAt?: DateString;\n}\n\nexport interface StreamRecord {\n dateValue: DateString;\n value: string;\n}\n\nexport interface GetIndexChangeInput extends GetRecordInput {\n daysInterval: number;\n}\n\nexport class Stream {\n protected kwilClient: WebKwil | NodeKwil;\n protected kwilSigner: KwilSigner;\n protected locator: StreamLocator;\n protected dbid: string;\n protected schema?: Database;\n protected deployed: boolean = false;\n protected initialized: boolean = false;\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n locator: StreamLocator,\n ) {\n this.kwilClient = kwilClient;\n this.kwilSigner = kwilSigner;\n this.locator = locator;\n this.dbid = generateDBID(\n locator.dataProvider.getAddress(),\n locator.streamId.getId(),\n );\n }\n\n /**\n * Loads the schema for this stream from the network.\n * Throws if the stream is not deployed.\n */\n public async loadSchema(): Promise<void> {\n const response = await this.kwilClient.getSchema(this.dbid);\n if (response.status !== 200 || !response.data) {\n throw new Error(\n `Failed to load schema for stream ${this.locator.streamId.getId()}`,\n );\n }\n this.schema = response.data;\n }\n\n /**\n * Executes a method on the stream\n */\n protected async execute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n return this.kwilClient.execute(\n {\n dbid: this.dbid,\n name: method,\n inputs,\n description: `TN SDK - Executing method on stream: ${method}`,\n },\n this.kwilSigner,\n );\n }\n\n /**\n * Executes a method on the stream after checking if it's initialized\n */\n protected async checkedExecute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkInitialized();\n return this.execute(method, inputs);\n }\n\n /**\n * Calls a method on the stream\n */\n protected async call<T>(\n method: string,\n inputs: ActionInput[],\n ): Promise<Either<number, T>> {\n const result = await this.kwilClient.call(\n {\n dbid: this.dbid,\n name: method,\n inputs,\n },\n this.kwilSigner,\n );\n\n if (result.status !== 200) {\n return Either.left(result.status);\n }\n\n return Either.right(result.data?.result as T);\n }\n\n /**\n * Checks if the stream is initialized\n */\n protected async checkInitialized(expectedType?: StreamType): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.checkDeployed();\n\n // check if is initialized by trying to get its type\n const type = await this.getType();\n\n // check if type is valid\n const expectedTypes = expectedType\n ? [expectedType]\n : [StreamType.Primitive, StreamType.Composed];\n if (!expectedTypes.includes(type)) {\n throw new Error(`Invalid stream type: ${type}`);\n }\n\n this.initialized = true;\n }\n\n /**\n * Checks if the stream is deployed\n */\n protected async checkDeployed(): Promise<void> {\n if (this.deployed) {\n return;\n }\n await this.loadSchema();\n this.deployed = true;\n }\n\n /**\n * Initializes the stream\n */\n public async initializeStream(): Promise<GenericResponse<TxReceipt>> {\n // shouldn't use checkedExecute, because it's not initialized yet\n return this.execute(\"init\", []);\n }\n\n /**\n * Returns the records of the stream within the given date range\n */\n public async getRecord(input: GetRecordInput): Promise<StreamRecord[]> {\n // TODO: change value to string when kwil-js is updated\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_record\",\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n }),\n ],\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the index of the stream within the given date range\n */\n public async getIndex(input: GetRecordInput): Promise<StreamRecord[]> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_index\",\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n }),\n ],\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the type of the stream\n */\n public async getType(): Promise<StreamType> {\n const result = await this.getMetadata(MetadataKey.TypeKey, true);\n\n if (!result) {\n throw new Error(\"Failed to get stream type\");\n }\n\n const type = head(result).unwrapOrElse(() => {\n throw new Error(\n \"Failed to get stream type. Check if the stream is initialized.\",\n );\n });\n\n const validTypes = [StreamType.Primitive, StreamType.Composed];\n\n if (!validTypes.includes(type.value as StreamType)) {\n throw new Error(`Invalid stream type: ${type.value}`);\n }\n\n return type.value as StreamType;\n }\n\n /**\n * Returns the first record of the stream\n */\n public async getFirstRecord(\n input: GetFirstRecordInput,\n ): Promise<StreamRecord | null> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_first_record\",\n [\n ActionInput.fromObject({\n $after_date: input.afterDate,\n $frozen_at: input.frozenAt,\n }),\n ],\n );\n\n return result\n .mapRight(head)\n .mapRight((result) =>\n result\n .map((result) => ({\n dateValue: result.date_value,\n value: result.value,\n }))\n .unwrapOr(null),\n )\n .throw();\n }\n\n protected async setMetadata<K extends MetadataKey>(\n key: K,\n value: MetadataValueTypeForKey<K>,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.execute(\"insert_metadata\", [\n ActionInput.fromObject({\n $key: key,\n $value: value,\n $val_type: MetadataKeyValueMap[key],\n }),\n ]);\n }\n\n protected async getMetadata<K extends MetadataKey>(\n key: K,\n onlyLatest: boolean = true,\n filteredRef?: string,\n ): Promise<\n { rowId: string; value: MetadataValueTypeForKey<K>; createdAt: number }[]\n > {\n const result = await this.call<\n {\n row_id: string;\n value_i: number;\n value_f: string;\n value_b: boolean;\n value_s: string;\n value_ref: string;\n created_at: number;\n }[]\n >(\"get_metadata\", [\n ActionInput.fromObject({\n $key: key,\n $only_latest: onlyLatest,\n $ref: filteredRef,\n }),\n ]);\n return result\n .mapRight((result) =>\n result.map((row) => ({\n rowId: row.row_id,\n value: row[\n MetadataTableKey[MetadataKeyValueMap[key as MetadataKey]]\n ] as MetadataValueTypeForKey<K>,\n createdAt: row.created_at,\n })),\n )\n .throw();\n }\n\n /**\n * Sets the read visibility of the stream\n */\n public async setReadVisibility(\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n MetadataKey.ReadVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the read visibility of the stream\n */\n public async getReadVisibility(): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(MetadataKey.ReadVisibilityKey, true);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Sets the compose visibility of the stream\n */\n public async setComposeVisibility(\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n MetadataKey.ComposeVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the compose visibility of the stream\n */\n public async getComposeVisibility(): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n MetadataKey.ComposeVisibilityKey,\n true,\n );\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Allows a wallet to read the stream\n */\n public async allowReadWallet(\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n }\n\n /**\n * Disables a wallet from reading the stream\n */\n public async disableReadWallet(\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n MetadataKey.AllowReadWalletKey,\n true,\n wallet.getAddress(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Wallet not found in allowed list\");\n }\n\n return await this.disableMetadata(row_id);\n }\n\n /**\n * Allows a stream to use this stream as child\n */\n public async allowComposeStream(\n locator: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n const streamDbId = generateDBID(\n locator.dataProvider.getAddress(),\n locator.streamId.getId(),\n );\n return await this.setMetadata(\n MetadataKey.AllowComposeStreamKey,\n streamDbId,\n );\n }\n\n /**\n * Disables a stream from using this stream as child\n */\n public async disableComposeStream(\n locator: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n MetadataKey.AllowComposeStreamKey,\n true,\n locator.toString(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Stream not found in allowed list\");\n }\n\n return await this.disableMetadata(row_id);\n }\n\n protected async disableMetadata(\n rowId: string,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.execute(\"disable_metadata\", [\n ActionInput.fromObject({\n $row_id: rowId,\n }),\n ]);\n }\n\n /**\n * Returns the wallets allowed to read the stream\n */\n public async getAllowedReadWallets(): Promise<EthereumAddress[]> {\n const result = await this.getMetadata(MetadataKey.AllowReadWalletKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => new EthereumAddress(row.value));\n }\n\n /**\n * Returns the streams allowed to compose the stream\n */\n public async getAllowedComposeStreams(): Promise<StreamLocator[]> {\n const result = await this.getMetadata(MetadataKey.AllowComposeStreamKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => {\n const [streamId, dataProvider] = row.value.split(\":\");\n return {\n streamId: StreamId.fromString(streamId).throw(),\n dataProvider: new EthereumAddress(dataProvider),\n };\n });\n }\n\n /**\n * Returns the index change of the stream within the given date range\n */\n public async getIndexChange(\n input: GetIndexChangeInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_index_change\",\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n $days_interval: input.daysInterval,\n }),\n ],\n );\n\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { KwilSigner, NodeKwil, WebKwil } from \"@kwilteam/kwil-js\";\nimport { ActionInput } from \"@kwilteam/kwil-js/dist/core/action\";\nimport { Database } from \"@kwilteam/kwil-js/dist/core/database\";\nimport { GenericResponse } from \"@kwilteam/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@kwilteam/kwil-js/dist/core/tx\";\nimport { generateDBID } from \"@kwilteam/kwil-js/dist/utils/dbid\";\nimport { Either } from \"monads-io\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { head } from \"../util/head\";\nimport { StreamId } from \"../util/StreamId\";\nimport { toVisibilityEnum, VisibilityEnum } from \"../util/visibility\";\nimport {\n MetadataKey,\n MetadataKeyValueMap,\n MetadataTableKey,\n MetadataValueTypeForKey,\n StreamType,\n} from \"./contractValues\";\n\nexport interface GetRecordInput {\n dateFrom?: DateString | number;\n dateTo?: DateString | number;\n frozenAt?: number;\n baseDate?: DateString | number;\n}\n\nexport interface GetFirstRecordInput {\n afterDate?: DateString | number;\n frozenAt?: DateString | number;\n}\n\nexport interface StreamRecord {\n dateValue: DateString | number;\n value: string;\n}\n\nexport interface GetIndexChangeInput extends GetRecordInput {\n daysInterval: number;\n}\n\nexport class Stream {\n protected kwilClient: WebKwil | NodeKwil;\n protected kwilSigner: KwilSigner;\n protected locator: StreamLocator;\n protected dbid: string;\n protected schema?: Database;\n protected deployed: boolean = false;\n protected initialized: boolean = false;\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n locator: StreamLocator,\n ) {\n this.kwilClient = kwilClient;\n this.kwilSigner = kwilSigner;\n this.locator = locator;\n this.dbid = generateDBID(\n locator.dataProvider.getAddress(),\n locator.streamId.getId(),\n );\n }\n\n /**\n * Loads the schema for this stream from the network.\n * Throws if the stream is not deployed.\n */\n public async loadSchema(): Promise<void> {\n const response = await this.kwilClient.getSchema(this.dbid);\n if (response.status !== 200 || !response.data) {\n throw new Error(\n `Failed to load schema for stream ${this.locator.streamId.getId()}`,\n );\n }\n this.schema = response.data;\n }\n\n /**\n * Executes a method on the stream\n */\n protected async execute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n return this.kwilClient.execute(\n {\n dbid: this.dbid,\n name: method,\n inputs,\n description: `TN SDK - Executing method on stream: ${method}`,\n },\n this.kwilSigner,\n );\n }\n\n /**\n * Executes a method on the stream after checking if it's initialized\n */\n protected async checkedExecute(\n method: string,\n inputs: ActionInput[],\n ): Promise<GenericResponse<TxReceipt>> {\n await this.checkInitialized();\n return this.execute(method, inputs);\n }\n\n /**\n * Calls a method on the stream\n */\n protected async call<T>(\n method: string,\n inputs: ActionInput[],\n ): Promise<Either<number, T>> {\n const result = await this.kwilClient.call(\n {\n dbid: this.dbid,\n name: method,\n inputs,\n },\n this.kwilSigner,\n );\n\n if (result.status !== 200) {\n return Either.left(result.status);\n }\n\n return Either.right(result.data?.result as T);\n }\n\n /**\n * Checks if the stream is initialized\n */\n protected async checkInitialized(expectedType?: StreamType): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.checkDeployed();\n\n // check if is initialized by trying to get its type\n const type = await this.getType();\n\n // check if type is valid\n const expectedTypes = expectedType\n ? [expectedType]\n : [StreamType.Primitive, StreamType.Composed];\n if (!expectedTypes.includes(type)) {\n throw new Error(`Invalid stream type: ${type}`);\n }\n\n this.initialized = true;\n }\n\n /**\n * Checks if the stream is deployed\n */\n protected async checkDeployed(): Promise<void> {\n if (this.deployed) {\n return;\n }\n await this.loadSchema();\n this.deployed = true;\n }\n\n /**\n * Initializes the stream\n */\n public async initializeStream(): Promise<GenericResponse<TxReceipt>> {\n // shouldn't use checkedExecute, because it's not initialized yet\n return this.execute(\"init\", []);\n }\n\n /**\n * Returns the records of the stream within the given date range\n */\n public async getRecord(input: GetRecordInput): Promise<StreamRecord[]> {\n // TODO: change value to string when kwil-js is updated\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_record\",\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n }),\n ],\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the index of the stream within the given date range\n */\n public async getIndex(input: GetRecordInput): Promise<StreamRecord[]> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_index\",\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n }),\n ],\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the type of the stream\n */\n public async getType(): Promise<StreamType> {\n const result = await this.getMetadata(MetadataKey.TypeKey, true);\n\n if (!result) {\n throw new Error(\"Failed to get stream type\");\n }\n\n const type = head(result).unwrapOrElse(() => {\n throw new Error(\n \"Failed to get stream type. Check if the stream is initialized.\",\n );\n });\n\n const validTypes = [StreamType.Primitive, StreamType.Composed];\n\n if (!validTypes.includes(type.value as StreamType)) {\n throw new Error(`Invalid stream type: ${type.value}`);\n }\n\n return type.value as StreamType;\n }\n\n /**\n * Returns the first record of the stream\n */\n public async getFirstRecord(\n input: GetFirstRecordInput,\n ): Promise<StreamRecord | null> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_first_record\",\n [\n ActionInput.fromObject({\n $after_date: input.afterDate,\n $frozen_at: input.frozenAt,\n }),\n ],\n );\n\n return result\n .mapRight(head)\n .mapRight((result) =>\n result\n .map((result) => ({\n dateValue: result.date_value,\n value: result.value,\n }))\n .unwrapOr(null),\n )\n .throw();\n }\n\n protected async setMetadata<K extends MetadataKey>(\n key: K,\n value: MetadataValueTypeForKey<K>,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.execute(\"insert_metadata\", [\n ActionInput.fromObject({\n $key: key,\n $value: value,\n $val_type: MetadataKeyValueMap[key],\n }),\n ]);\n }\n\n protected async getMetadata<K extends MetadataKey>(\n key: K,\n onlyLatest: boolean = true,\n filteredRef?: string,\n ): Promise<\n { rowId: string; value: MetadataValueTypeForKey<K>; createdAt: number }[]\n > {\n const result = await this.call<\n {\n row_id: string;\n value_i: number;\n value_f: string;\n value_b: boolean;\n value_s: string;\n value_ref: string;\n created_at: number;\n }[]\n >(\"get_metadata\", [\n ActionInput.fromObject({\n $key: key,\n $only_latest: onlyLatest,\n $ref: filteredRef,\n }),\n ]);\n return result\n .mapRight((result) =>\n result.map((row) => ({\n rowId: row.row_id,\n value: row[\n MetadataTableKey[MetadataKeyValueMap[key as MetadataKey]]\n ] as MetadataValueTypeForKey<K>,\n createdAt: row.created_at,\n })),\n )\n .throw();\n }\n\n /**\n * Sets the read visibility of the stream\n */\n public async setReadVisibility(\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n MetadataKey.ReadVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the read visibility of the stream\n */\n public async getReadVisibility(): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(MetadataKey.ReadVisibilityKey, true);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Sets the compose visibility of the stream\n */\n public async setComposeVisibility(\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n MetadataKey.ComposeVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the compose visibility of the stream\n */\n public async getComposeVisibility(): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n MetadataKey.ComposeVisibilityKey,\n true,\n );\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Allows a wallet to read the stream\n */\n public async allowReadWallet(\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n }\n\n /**\n * Disables a wallet from reading the stream\n */\n public async disableReadWallet(\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n MetadataKey.AllowReadWalletKey,\n true,\n wallet.getAddress(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Wallet not found in allowed list\");\n }\n\n return await this.disableMetadata(row_id);\n }\n\n /**\n * Allows a stream to use this stream as child\n */\n public async allowComposeStream(\n locator: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n const streamDbId = generateDBID(\n locator.dataProvider.getAddress(),\n locator.streamId.getId(),\n );\n return await this.setMetadata(\n MetadataKey.AllowComposeStreamKey,\n streamDbId,\n );\n }\n\n /**\n * Disables a stream from using this stream as child\n */\n public async disableComposeStream(\n locator: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n MetadataKey.AllowComposeStreamKey,\n true,\n locator.toString(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Stream not found in allowed list\");\n }\n\n return await this.disableMetadata(row_id);\n }\n\n protected async disableMetadata(\n rowId: string,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.execute(\"disable_metadata\", [\n ActionInput.fromObject({\n $row_id: rowId,\n }),\n ]);\n }\n\n /**\n * Returns the wallets allowed to read the stream\n */\n public async getAllowedReadWallets(): Promise<EthereumAddress[]> {\n const result = await this.getMetadata(MetadataKey.AllowReadWalletKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => new EthereumAddress(row.value));\n }\n\n /**\n * Returns the streams allowed to compose the stream\n */\n public async getAllowedComposeStreams(): Promise<StreamLocator[]> {\n const result = await this.getMetadata(MetadataKey.AllowComposeStreamKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => {\n const [streamId, dataProvider] = row.value.split(\":\");\n return {\n streamId: StreamId.fromString(streamId).throw(),\n dataProvider: new EthereumAddress(dataProvider),\n };\n });\n }\n\n /**\n * Returns the index change of the stream within the given date range\n */\n public async getIndexChange(\n input: GetIndexChangeInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n \"get_index_change\",\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n $days_interval: input.daysInterval,\n }),\n ],\n );\n\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * A custom method that accepts the procedure name and the input of GetRecordInput\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_price\" that returns a list of date_value and value\n * can be called with customGetProcedure(\"get_price\", { dateFrom: \"2021-01-01\", dateTo: \"2021-01-31\" })\n */\n public async customGetProcedure(\n procedure: string,\n input: GetRecordInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ date_value: string; value: string }[]>(\n procedure,\n [\n ActionInput.fromObject({\n $date_from: input.dateFrom,\n $date_to: input.dateTo,\n $frozen_at: input.frozenAt,\n $base_date: input.baseDate,\n }),\n ],\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n dateValue: row.date_value,\n value: row.value,\n })),\n )\n .throw();\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["result"]
7
7
  }