@trufnetwork/sdk-js 0.4.5 → 0.4.7-dev.1

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 (76) hide show
  1. package/dist/cjs/client/browserClient.cjs +5 -4
  2. package/dist/cjs/client/browserClient.cjs.map +2 -2
  3. package/dist/cjs/client/client.cjs.map +2 -2
  4. package/dist/cjs/client/getLastTransactions.cjs.map +1 -1
  5. package/dist/cjs/client/listStreams.cjs.map +2 -2
  6. package/dist/cjs/client/nodeClient.cjs +5 -4
  7. package/dist/cjs/client/nodeClient.cjs.map +2 -2
  8. package/dist/cjs/contracts-api/action.cjs.map +2 -2
  9. package/dist/cjs/contracts-api/composedAction.cjs.map +2 -2
  10. package/dist/cjs/contracts-api/deleteStream.cjs.map +2 -2
  11. package/dist/cjs/contracts-api/deployStream.cjs +0 -12
  12. package/dist/cjs/contracts-api/deployStream.cjs.map +3 -3
  13. package/dist/cjs/contracts-api/primitiveAction.cjs.map +2 -2
  14. package/dist/cjs/contracts-api/roleManagement.cjs.map +2 -2
  15. package/dist/cjs/index.browser.cjs +1 -1
  16. package/dist/cjs/index.browser.cjs.map +2 -2
  17. package/dist/cjs/index.cjs +1 -1
  18. package/dist/cjs/index.cjs.map +2 -2
  19. package/dist/cjs/index.node.cjs +1 -1
  20. package/dist/cjs/index.node.cjs.map +2 -2
  21. package/dist/cjs/internal.cjs +47 -0
  22. package/dist/cjs/internal.cjs.map +7 -0
  23. package/dist/esm/client/browserClient.mjs +4 -3
  24. package/dist/esm/client/browserClient.mjs.map +2 -2
  25. package/dist/esm/client/client.mjs.map +2 -2
  26. package/dist/esm/client/getLastTransactions.mjs.map +1 -1
  27. package/dist/esm/client/listStreams.mjs.map +2 -2
  28. package/dist/esm/client/nodeClient.mjs +4 -3
  29. package/dist/esm/client/nodeClient.mjs.map +2 -2
  30. package/dist/esm/contracts-api/action.mjs.map +2 -2
  31. package/dist/esm/contracts-api/composedAction.mjs.map +2 -2
  32. package/dist/esm/contracts-api/deleteStream.mjs.map +2 -2
  33. package/dist/esm/contracts-api/deployStream.mjs +0 -2
  34. package/dist/esm/contracts-api/deployStream.mjs.map +2 -2
  35. package/dist/esm/contracts-api/primitiveAction.mjs.map +2 -2
  36. package/dist/esm/contracts-api/roleManagement.mjs.map +2 -2
  37. package/dist/esm/index.browser.mjs +1 -1
  38. package/dist/esm/index.browser.mjs.map +1 -1
  39. package/dist/esm/index.mjs +1 -1
  40. package/dist/esm/index.mjs.map +1 -1
  41. package/dist/esm/index.node.mjs +1 -1
  42. package/dist/esm/index.node.mjs.map +1 -1
  43. package/dist/esm/internal.mjs +26 -0
  44. package/dist/esm/internal.mjs.map +7 -0
  45. package/dist/tsconfig.build.tsbuildinfo +1 -1
  46. package/dist/types/client/browserClient.d.ts +2 -2
  47. package/dist/types/client/browserClient.d.ts.map +1 -1
  48. package/dist/types/client/client.d.ts +8 -15
  49. package/dist/types/client/client.d.ts.map +1 -1
  50. package/dist/types/client/getLastTransactions.d.ts +1 -1
  51. package/dist/types/client/getLastTransactions.d.ts.map +1 -1
  52. package/dist/types/client/listStreams.d.ts +1 -1
  53. package/dist/types/client/listStreams.d.ts.map +1 -1
  54. package/dist/types/client/nodeClient.d.ts +2 -2
  55. package/dist/types/client/nodeClient.d.ts.map +1 -1
  56. package/dist/types/contracts-api/action.d.ts +14 -19
  57. package/dist/types/contracts-api/action.d.ts.map +1 -1
  58. package/dist/types/contracts-api/composedAction.d.ts +2 -4
  59. package/dist/types/contracts-api/composedAction.d.ts.map +1 -1
  60. package/dist/types/contracts-api/deleteStream.d.ts +4 -7
  61. package/dist/types/contracts-api/deleteStream.d.ts.map +1 -1
  62. package/dist/types/contracts-api/deployStream.d.ts +4 -7
  63. package/dist/types/contracts-api/deployStream.d.ts.map +1 -1
  64. package/dist/types/contracts-api/primitiveAction.d.ts +3 -5
  65. package/dist/types/contracts-api/primitiveAction.d.ts.map +1 -1
  66. package/dist/types/contracts-api/roleManagement.d.ts +3 -5
  67. package/dist/types/contracts-api/roleManagement.d.ts.map +1 -1
  68. package/dist/types/index.browser.d.ts +1 -1
  69. package/dist/types/index.browser.d.ts.map +1 -1
  70. package/dist/types/index.d.ts +1 -1
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/index.node.d.ts +1 -1
  73. package/dist/types/index.node.d.ts.map +1 -1
  74. package/dist/types/internal.d.ts +23 -0
  75. package/dist/types/internal.d.ts.map +1 -0
  76. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/action.ts"],
4
- "sourcesContent": ["import {KwilSigner, NodeKwil, WebKwil} from \"@trufnetwork/kwil-js\";\nimport { ActionBody } from '@trufnetwork/kwil-js/dist/core/action';\nimport {NamedParams} from \"@trufnetwork/kwil-js/dist/core/action\";\nimport { GenericResponse } from \"@trufnetwork/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@trufnetwork/kwil-js/dist/core/tx\";\nimport { Either } from \"monads-io\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { CacheAwareResponse, GetRecordOptions, GetIndexOptions, GetIndexChangeOptions, GetFirstRecordOptions } from \"../types/cache\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { head } from \"../util/head\";\nimport { StreamId } from \"../util/StreamId\";\nimport { toVisibilityEnum, VisibilityEnum } from \"../util/visibility\";\nimport { CacheMetadataParser } from \"../util/cacheMetadataParser\";\nimport { CacheValidation } from \"../util/cacheValidation\";\nimport {\n MetadataKey,\n MetadataKeyValueMap,\n MetadataTableKey,\n MetadataValueTypeForKey,\n StreamType,\n} from \"./contractValues\";\nimport {ValueType} from \"@trufnetwork/kwil-js/dist/utils/types\";\n\nexport interface GetRecordInput {\n stream: StreamLocator;\n from?: number;\n to?: number;\n frozenAt?: number;\n baseTime?: DateString | number;\n prefix?: string;\n}\n\nexport interface GetFirstRecordInput {\n stream: StreamLocator;\n after?: number;\n frozenAt?: number;\n}\n\nexport interface StreamRecord {\n eventTime: number;\n value: string;\n}\n\nexport interface GetIndexChangeInput extends GetRecordInput {\n timeInterval: number;\n}\n\nexport interface ListMetadataByHeightParams {\n /** Key reference filter. Default: empty string */\n key?: string;\n /** Value reference filter. Default: null */\n value?: string;\n /** Start height (inclusive). If null, uses earliest available. */\n fromHeight?: number;\n /** End height (inclusive). If null, uses current height. */\n toHeight?: number;\n /** Maximum number of results to return. Default: 1000 */\n limit?: number;\n /** Number of results to skip for pagination. Default: 0 */\n offset?: number;\n}\n\nexport interface MetadataQueryResult {\n streamId: string;\n dataProvider: string;\n rowId: string;\n valueInt: number | null;\n valueFloat: string | null;\n valueBoolean: boolean | null;\n valueString: string | null;\n valueRef: string | null;\n createdAt: number;\n}\n\nexport class Action {\n protected kwilClient: WebKwil | NodeKwil;\n protected kwilSigner: KwilSigner;\n /** Track if deprecation warnings were already emitted */\n private static _legacyWarnEmitted: Record<string, boolean> = {\n getRecord: false,\n getIndex: false,\n getFirstRecord: false,\n getIndexChange: false,\n };\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ) {\n this.kwilClient = kwilClient;\n this.kwilSigner = kwilSigner;\n }\n\n /**\n * Executes a method on the stream\n */\n protected async executeWithNamedParams(\n method: string,\n inputs: NamedParams[],\n ): Promise<GenericResponse<TxReceipt>> {\n return this.kwilClient.execute({\n namespace: \"main\",\n name: method,\n inputs,\n description: `TN SDK - Executing method on stream: ${method}`,\n },\n this.kwilSigner,\n );\n }\n\n /**\n * Executes a method on the stream\n */\n protected async executeWithActionBody(\n inputs: ActionBody,\n synchronous: boolean = false,\n ): Promise<GenericResponse<TxReceipt>> {\n return this.kwilClient.execute(inputs, this.kwilSigner, synchronous);\n }\n\n /**\n * Calls a method on the stream\n */\n protected async call<T>(\n method: string,\n inputs: NamedParams,\n ): Promise<Either<number, T>> {\n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: method,\n inputs: inputs,\n },\n this.kwilSigner,\n );\n\n if (result.status !== 200) {\n return Either.left(result.status);\n }\n\n return Either.right(result.data?.result as T);\n }\n\n /**\n * @deprecated Use getRecord(stream, options?) to leverage cache support and future-proof parameter handling.\n */\n public async getRecord(input: GetRecordInput): Promise<StreamRecord[]>;\n public async getRecord(stream: StreamLocator, options?: GetRecordOptions): Promise<CacheAwareResponse<StreamRecord[]>>;\n public async getRecord(\n inputOrStream: GetRecordInput | StreamLocator,\n options?: GetRecordOptions\n ): Promise<StreamRecord[] | CacheAwareResponse<StreamRecord[]>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetRecordInput;\n // emit deprecation warning once\n if (!Action._legacyWarnEmitted.getRecord) {\n Action._legacyWarnEmitted.getRecord = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getRecord(input). Use getRecord(stream, options?) instead.');\n }\n }\n const prefix = input.prefix ? input.prefix : \"\"\n const result = await this.call<{ event_time: number; value: string }[]>(\n prefix + \"get_record\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n \n // Validate options if provided\n if (options) {\n CacheValidation.validateGetRecordOptions(options);\n CacheValidation.validateTimeRange(options.from, options.to);\n }\n \n const prefix = options?.prefix ? options.prefix : \"\"\n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $from: options?.from,\n $to: options?.to,\n $frozen_at: options?.frozenAt,\n };\n \n if (options?.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: prefix + \"get_record\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get record: ${result.status}`);\n }\n \n const data = (result.data?.result as { event_time: number; value: string }[]).map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n }));\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n from: options?.from,\n to: options?.to,\n frozenAt: options?.frozenAt,\n rowsServed: data.length\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined,\n };\n }\n\n /**\n * Returns the index of the stream within the given date range\n * @deprecated Use getIndex(stream, options?) to leverage cache support and future-proof parameter handling.\n */\n public async getIndex(input: GetRecordInput): Promise<StreamRecord[]>;\n public async getIndex(stream: StreamLocator, options?: GetIndexOptions): Promise<CacheAwareResponse<StreamRecord[]>>;\n public async getIndex(\n inputOrStream: GetRecordInput | StreamLocator,\n options?: GetIndexOptions\n ): Promise<StreamRecord[] | CacheAwareResponse<StreamRecord[]>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetRecordInput;\n if (!Action._legacyWarnEmitted.getIndex) {\n Action._legacyWarnEmitted.getIndex = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getIndex(input). Use getIndex(stream, options?) instead.');\n }\n }\n const prefix = input.prefix ? input.prefix : \"\"\n const result = await this.call<{ event_time: number; value: string }[]>(\n prefix + \"get_index\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n $base_time: input.baseTime,\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n \n // Validate options if provided\n if (options) {\n CacheValidation.validateGetIndexOptions(options);\n CacheValidation.validateTimeRange(options.from, options.to);\n }\n \n const prefix = options?.prefix ? options.prefix : \"\"\n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $from: options?.from,\n $to: options?.to,\n $frozen_at: options?.frozenAt,\n $base_time: options?.baseTime,\n };\n \n if (options?.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: prefix + \"get_index\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get index: ${result.status}`);\n }\n \n const data = (result.data?.result as { event_time: number; value: string }[]).map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n }));\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n from: options?.from,\n to: options?.to,\n frozenAt: options?.frozenAt,\n rowsServed: data.length\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined\n };\n }\n\n /**\n * Returns the type of the stream\n */\n public async getType(\n stream: StreamLocator,\n ): Promise<StreamType> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.TypeKey);\n\n if (!result) {\n throw new Error(\"Failed to get stream type\");\n }\n\n const type = head(result).unwrapOrElse(() => {\n throw new Error(\n \"Failed to get stream type. Check if the stream is initialized.\",\n );\n });\n\n const validTypes = [StreamType.Primitive, StreamType.Composed];\n\n if (!validTypes.includes(type.value as StreamType)) {\n throw new Error(`Invalid stream type: ${type.value}`);\n }\n\n return type.value as StreamType;\n }\n\n /**\n * Returns the first record of the stream\n * @deprecated Use getFirstRecord(stream, options?) to leverage cache support and future-proof parameter handling.\n */\n public async getFirstRecord(\n input: GetFirstRecordInput,\n ): Promise<StreamRecord | null>;\n public async getFirstRecord(\n stream: StreamLocator,\n options?: GetFirstRecordOptions\n ): Promise<CacheAwareResponse<StreamRecord | null>>;\n public async getFirstRecord(\n inputOrStream: GetFirstRecordInput | StreamLocator,\n options?: GetFirstRecordOptions\n ): Promise<StreamRecord | null | CacheAwareResponse<StreamRecord | null>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetFirstRecordInput;\n if (!Action._legacyWarnEmitted.getFirstRecord) {\n Action._legacyWarnEmitted.getFirstRecord = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getFirstRecord(input). Use getFirstRecord(stream, options?) instead.');\n }\n }\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_first_record\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $after: input.after,\n $frozen_at: input.frozenAt,\n }\n );\n\n return result\n .mapRight(head)\n .mapRight((result) =>\n result\n .map((result) => ({\n eventTime: result.event_time,\n value: result.value,\n }))\n .unwrapOr(null),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n \n // Validate options if provided\n if (options) {\n CacheValidation.validateGetFirstRecordOptions(options);\n }\n \n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $after: options?.after,\n $frozen_at: options?.frozenAt,\n };\n \n if (options?.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: \"get_first_record\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get first record: ${result.status}`);\n }\n \n const rawData = result.data?.result as { event_time: number; value: string }[];\n const data = rawData && rawData.length > 0 ? {\n eventTime: rawData[0].event_time,\n value: rawData[0].value,\n } : null;\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n frozenAt: options?.frozenAt,\n rowsServed: data ? 1 : 0\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined\n };\n }\n\n protected async setMetadata<K extends MetadataKey>(\n stream: StreamLocator,\n key: K,\n value: MetadataValueTypeForKey<K>,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.executeWithNamedParams(\"insert_metadata\", [{\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $key: key,\n $value: value,\n $val_type: MetadataKeyValueMap[key],\n },\n ]);\n }\n\n protected async getMetadata<K extends MetadataKey>(\n stream: StreamLocator,\n key: K,\n // onlyLatest: boolean = true,\n filteredRef?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ): Promise<\n { rowId: string; value: MetadataValueTypeForKey<K>; createdAt: number }[]\n > {\n const result = await this.call<\n {\n row_id: string;\n value_i: number;\n value_f: string;\n value_b: boolean;\n value_s: string;\n value_ref: string;\n created_at: number;\n }[]\n >(\"get_metadata\", {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $key: key,\n $ref: filteredRef,\n $limit: limit,\n $offset: offset,\n $order_by: orderBy,\n },\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n rowId: row.row_id,\n value: row[\n MetadataTableKey[MetadataKeyValueMap[key as MetadataKey]]\n ] as MetadataValueTypeForKey<K>,\n createdAt: row.created_at,\n })),\n )\n .throw();\n }\n\n public async listMetadataByHeight<K extends MetadataKey>(\n params: ListMetadataByHeightParams = {},\n ): Promise<MetadataQueryResult[]> {\n type MetadataRawResult = {\n stream_id: string;\n data_provider: string;\n row_id: string;\n value_i: number | null;\n value_f: string | null;\n value_b: boolean | null;\n value_s: string | null;\n value_ref: string | null;\n created_at: number;\n }[];\n const result = await this.call<MetadataRawResult>(\n \"list_metadata_by_height\",\n {\n $key: params.key ?? \"\",\n $ref: params.value ?? null,\n $from_height: params.fromHeight ?? null,\n $to_height: params.toHeight ?? null,\n $limit: params.limit ?? null,\n $offset: params.offset ?? null,\n },\n );\n\n return result\n .mapRight((records) => \n records.map(record => ({\n streamId: record.stream_id,\n dataProvider: record.data_provider,\n rowId: record.row_id,\n valueInt: record.value_i,\n valueFloat: record.value_f,\n valueBoolean: record.value_b,\n valueString: record.value_s,\n valueRef: record.value_ref,\n createdAt: record.created_at,\n }))\n )\n .throw();\n }\n\n /**\n * Sets the read visibility of the stream\n */\n public async setReadVisibility(\n stream: StreamLocator,\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.ReadVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the read visibility of the stream\n */\n public async getReadVisibility(\n stream: StreamLocator,\n ): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.ReadVisibilityKey);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Sets the compose visibility of the stream\n */\n public async setComposeVisibility(\n stream: StreamLocator,\n visibility: VisibilityEnum,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.ComposeVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the compose visibility of the stream\n */\n public async getComposeVisibility(\n stream: StreamLocator,\n ): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.ComposeVisibilityKey);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Allows a wallet to read the stream\n */\n public async allowReadWallet(\n stream: StreamLocator,\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n }\n\n /**\n * Disables a wallet from reading the stream\n */\n public async disableReadWallet(\n stream: StreamLocator,\n wallet: EthereumAddress,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Wallet not found in allowed list\");\n }\n\n return await this.disableMetadata(stream, row_id);\n }\n\n /**\n * Allows a stream to use this stream as child\n */\n public async allowComposeStream(\n stream: StreamLocator,\n wallet: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey,\n wallet.streamId.getId(),\n );\n }\n\n /**\n * Disables a stream from using this stream as child\n */\n public async disableComposeStream(\n stream: StreamLocator,\n wallet: StreamLocator,\n ): Promise<GenericResponse<TxReceipt>> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey,\n wallet.toString(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Stream not found in allowed list\");\n }\n\n return await this.disableMetadata(stream, row_id);\n }\n\n protected async disableMetadata(\n stream: StreamLocator,\n rowId: string,\n ): Promise<GenericResponse<TxReceipt>> {\n return await this.executeWithNamedParams(\"disable_metadata\", [{\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $row_id: rowId,\n }]);\n }\n\n /**\n * Returns the wallets allowed to read the stream\n */\n public async getAllowedReadWallets(\n stream: StreamLocator,\n ): Promise<EthereumAddress[]> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowReadWalletKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => new EthereumAddress(row.value));\n }\n\n /**\n * Returns the streams allowed to compose the stream\n */\n public async getAllowedComposeStreams(\n stream: StreamLocator,\n ): Promise<StreamLocator[]> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => {\n const [streamId, dataProvider] = row.value.split(\":\");\n return {\n streamId: StreamId.fromString(streamId).throw(),\n dataProvider: new EthereumAddress(dataProvider),\n };\n });\n }\n\n /**\n * Returns the index change of the stream within the given date range\n * @deprecated Use getIndexChange(stream, options) to leverage cache support and future-proof parameter handling.\n */\n public async getIndexChange(\n input: GetIndexChangeInput,\n ): Promise<StreamRecord[]>;\n public async getIndexChange(\n stream: StreamLocator,\n options: GetIndexChangeOptions\n ): Promise<CacheAwareResponse<StreamRecord[]>>;\n public async getIndexChange(\n inputOrStream: GetIndexChangeInput | StreamLocator,\n options?: GetIndexChangeOptions\n ): Promise<StreamRecord[] | CacheAwareResponse<StreamRecord[]>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetIndexChangeInput;\n if (!Action._legacyWarnEmitted.getIndexChange) {\n Action._legacyWarnEmitted.getIndexChange = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getIndexChange(input). Use getIndexChange(stream, options?) instead.');\n }\n }\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_index_change\", \n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n $base_time: input.baseTime,\n $time_interval: input.timeInterval,\n }\n );\n\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n if (!options) {\n throw new Error('Options parameter is required for cache-aware getIndexChange');\n }\n \n // Validate options\n CacheValidation.validateGetIndexChangeOptions(options);\n CacheValidation.validateTimeRange(options.from, options.to);\n \n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $from: options.from,\n $to: options.to,\n $frozen_at: options.frozenAt,\n $base_time: options.baseTime,\n $time_interval: options.timeInterval,\n };\n \n if (options.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: \"get_index_change\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get index change: ${result.status}`);\n }\n \n const data = (result.data?.result as { event_time: number; value: string }[]).map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n }));\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n from: options.from,\n to: options.to,\n frozenAt: options.frozenAt,\n rowsServed: data.length\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined\n };\n }\n\n /**\n * A custom method that accepts the procedure name and the input of GetRecordInput\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_price\" that returns a list of date_value and value\n * can be called with customGetProcedure(\"get_price\", { dateFrom: \"2021-01-01\", dateTo: \"2021-01-31\" })\n */\n public async customGetProcedure(\n procedure: string,\n input: GetRecordInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n procedure,\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n\n /**\n * A custom method that accepts the procedure name and custom input of type Record<string, any>\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_custom_index\" that returns a list of date_value and value\n * can be called with customProcedureWithArgs(\"get_custom_index\", { $customArg1: \"value1\", $customArg2: \"value2\" })\n * where $customArg1 and $customArg2 are the arguments of the procedure\n * @param procedure\n * @param args\n */\n public async customProcedureWithArgs(\n procedure: string,\n args: Record<string, ValueType | ValueType[]>,\n ){\n const result = await this.call<{ event_time: number; value: string }[]>(\n procedure,\n args\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the size of database\n */\n public async getDatabaseSize(): Promise<BigInt> {\n const result = await this.call<{ database_size: BigInt }[]>(\"get_database_size\", {})\n return result\n .map((rows) => {\n const raw = rows[0].database_size;\n const asBigInt = BigInt(raw.toString());\n return asBigInt;\n }).throw();\n }\n\n /**\n * Gets the wallet balance on any supported blockchain network\n * @param chain The chain identifier (e.g., \"sepolia\", \"mainnet\", \"polygon\", etc.)\n * @param walletAddress The wallet address to check balance for\n * @returns Promise that resolves to the balance as a string, or throws on error\n */\n public async getWalletBalance(\n chain: string,\n walletAddress: string\n ): Promise<string> {\n const result = await this.call<{ balance?: string; }[]>(\n `${chain}_wallet_balance`,\n {\n $wallet_address: walletAddress,\n }\n );\n\n return result\n .mapRight((rows) => {\n if (rows.length === 0) {\n throw new Error(\"You don't have necessary permissions to execute this query\");\n }\n \n const row = rows[0];\n \n if (row.balance === undefined) {\n throw new Error(\"No balance returned from wallet balance query\");\n }\n \n return row.balance;\n })\n .throw();\n }\n\n /**\n * Calls the whoami action to get the caller's wallet address\n * This is useful for verifying wallet authentication with TN\n * @returns Promise that resolves to the caller's wallet address\n */\n public async whoami(): Promise<string> {\n const result = await this.call<{ caller: string }[]>(\n \"whoami\",\n {}\n );\n\n return result\n .mapRight((rows) => {\n if (rows.length === 0) {\n throw new Error(\"No response from whoami action\");\n }\n \n const row = rows[0];\n \n if (!row.caller) {\n throw new Error(\"No caller address returned from whoami\");\n }\n \n return row.caller;\n })\n .throw();\n }\n\n /**\n * Bridges tokens on a blockchain network\n * @param chain The chain identifier (e.g., \"sepolia\", \"mainnet\", \"polygon\", etc.)\n * @param amount The amount to bridge\n * @returns Promise that resolves to GenericResponse<TxReceipt>\n */\n public async bridgeTokens(\n chain: string,\n amount: string\n ): Promise<GenericResponse<TxReceipt>> {\n // Validate amount is greater than 0\n const numAmount = parseFloat(amount);\n if (isNaN(numAmount) || numAmount <= 0) {\n throw new Error(`Invalid amount: ${amount}. Amount must be greater than 0.`);\n }\n\n return await this.executeWithNamedParams(`${chain}_bridge_tokens`, [{\n $amount: amount,\n }]);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {KwilSigner, NodeKwil, WebKwil, Types} from \"@trufnetwork/kwil-js\";\nimport { Either } from \"monads-io\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { CacheAwareResponse, GetRecordOptions, GetIndexOptions, GetIndexChangeOptions, GetFirstRecordOptions } from \"../types/cache\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { head } from \"../util/head\";\nimport { StreamId } from \"../util/StreamId\";\nimport { toVisibilityEnum, VisibilityEnum } from \"../util/visibility\";\nimport { CacheMetadataParser } from \"../util/cacheMetadataParser\";\nimport { CacheValidation } from \"../util/cacheValidation\";\nimport {\n MetadataKey,\n MetadataKeyValueMap,\n MetadataTableKey,\n MetadataValueTypeForKey,\n StreamType,\n} from \"./contractValues\";\n// ValueType is available as Types.ValueType\n\nexport interface GetRecordInput {\n stream: StreamLocator;\n from?: number;\n to?: number;\n frozenAt?: number;\n baseTime?: DateString | number;\n prefix?: string;\n}\n\nexport interface GetFirstRecordInput {\n stream: StreamLocator;\n after?: number;\n frozenAt?: number;\n}\n\nexport interface StreamRecord {\n eventTime: number;\n value: string;\n}\n\nexport interface GetIndexChangeInput extends GetRecordInput {\n timeInterval: number;\n}\n\nexport interface ListMetadataByHeightParams {\n /** Key reference filter. Default: empty string */\n key?: string;\n /** Value reference filter. Default: null */\n value?: string;\n /** Start height (inclusive). If null, uses earliest available. */\n fromHeight?: number;\n /** End height (inclusive). If null, uses current height. */\n toHeight?: number;\n /** Maximum number of results to return. Default: 1000 */\n limit?: number;\n /** Number of results to skip for pagination. Default: 0 */\n offset?: number;\n}\n\nexport interface MetadataQueryResult {\n streamId: string;\n dataProvider: string;\n rowId: string;\n valueInt: number | null;\n valueFloat: string | null;\n valueBoolean: boolean | null;\n valueString: string | null;\n valueRef: string | null;\n createdAt: number;\n}\n\nexport class Action {\n protected kwilClient: WebKwil | NodeKwil;\n protected kwilSigner: KwilSigner;\n /** Track if deprecation warnings were already emitted */\n private static _legacyWarnEmitted: Record<string, boolean> = {\n getRecord: false,\n getIndex: false,\n getFirstRecord: false,\n getIndexChange: false,\n };\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ) {\n this.kwilClient = kwilClient;\n this.kwilSigner = kwilSigner;\n }\n\n /**\n * Executes a method on the stream\n */\n protected async executeWithNamedParams(\n method: string,\n inputs: Types.NamedParams[],\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return this.kwilClient.execute({\n namespace: \"main\",\n name: method,\n inputs,\n description: `TN SDK - Executing method on stream: ${method}`,\n },\n this.kwilSigner,\n );\n }\n\n /**\n * Executes a method on the stream\n */\n protected async executeWithActionBody(\n inputs: Types.ActionBody,\n synchronous: boolean = false,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return this.kwilClient.execute(inputs, this.kwilSigner, synchronous);\n }\n\n /**\n * Calls a method on the stream\n */\n protected async call<T>(\n method: string,\n inputs: Types.NamedParams,\n ): Promise<Either<number, T>> {\n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: method,\n inputs: inputs,\n },\n this.kwilSigner,\n );\n\n if (result.status !== 200) {\n return Either.left(result.status);\n }\n\n return Either.right(result.data?.result as T);\n }\n\n /**\n * @deprecated Use getRecord(stream, options?) to leverage cache support and future-proof parameter handling.\n */\n public async getRecord(input: GetRecordInput): Promise<StreamRecord[]>;\n public async getRecord(stream: StreamLocator, options?: GetRecordOptions): Promise<CacheAwareResponse<StreamRecord[]>>;\n public async getRecord(\n inputOrStream: GetRecordInput | StreamLocator,\n options?: GetRecordOptions\n ): Promise<StreamRecord[] | CacheAwareResponse<StreamRecord[]>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetRecordInput;\n // emit deprecation warning once\n if (!Action._legacyWarnEmitted.getRecord) {\n Action._legacyWarnEmitted.getRecord = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getRecord(input). Use getRecord(stream, options?) instead.');\n }\n }\n const prefix = input.prefix ? input.prefix : \"\"\n const result = await this.call<{ event_time: number; value: string }[]>(\n prefix + \"get_record\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n \n // Validate options if provided\n if (options) {\n CacheValidation.validateGetRecordOptions(options);\n CacheValidation.validateTimeRange(options.from, options.to);\n }\n \n const prefix = options?.prefix ? options.prefix : \"\"\n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $from: options?.from,\n $to: options?.to,\n $frozen_at: options?.frozenAt,\n };\n \n if (options?.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: prefix + \"get_record\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get record: ${result.status}`);\n }\n \n const data = (result.data?.result as { event_time: number; value: string }[]).map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n }));\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n from: options?.from,\n to: options?.to,\n frozenAt: options?.frozenAt,\n rowsServed: data.length\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined,\n };\n }\n\n /**\n * Returns the index of the stream within the given date range\n * @deprecated Use getIndex(stream, options?) to leverage cache support and future-proof parameter handling.\n */\n public async getIndex(input: GetRecordInput): Promise<StreamRecord[]>;\n public async getIndex(stream: StreamLocator, options?: GetIndexOptions): Promise<CacheAwareResponse<StreamRecord[]>>;\n public async getIndex(\n inputOrStream: GetRecordInput | StreamLocator,\n options?: GetIndexOptions\n ): Promise<StreamRecord[] | CacheAwareResponse<StreamRecord[]>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetRecordInput;\n if (!Action._legacyWarnEmitted.getIndex) {\n Action._legacyWarnEmitted.getIndex = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getIndex(input). Use getIndex(stream, options?) instead.');\n }\n }\n const prefix = input.prefix ? input.prefix : \"\"\n const result = await this.call<{ event_time: number; value: string }[]>(\n prefix + \"get_index\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n $base_time: input.baseTime,\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n \n // Validate options if provided\n if (options) {\n CacheValidation.validateGetIndexOptions(options);\n CacheValidation.validateTimeRange(options.from, options.to);\n }\n \n const prefix = options?.prefix ? options.prefix : \"\"\n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $from: options?.from,\n $to: options?.to,\n $frozen_at: options?.frozenAt,\n $base_time: options?.baseTime,\n };\n \n if (options?.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: prefix + \"get_index\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get index: ${result.status}`);\n }\n \n const data = (result.data?.result as { event_time: number; value: string }[]).map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n }));\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n from: options?.from,\n to: options?.to,\n frozenAt: options?.frozenAt,\n rowsServed: data.length\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined\n };\n }\n\n /**\n * Returns the type of the stream\n */\n public async getType(\n stream: StreamLocator,\n ): Promise<StreamType> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.TypeKey);\n\n if (!result) {\n throw new Error(\"Failed to get stream type\");\n }\n\n const type = head(result).unwrapOrElse(() => {\n throw new Error(\n \"Failed to get stream type. Check if the stream is initialized.\",\n );\n });\n\n const validTypes = [StreamType.Primitive, StreamType.Composed];\n\n if (!validTypes.includes(type.value as StreamType)) {\n throw new Error(`Invalid stream type: ${type.value}`);\n }\n\n return type.value as StreamType;\n }\n\n /**\n * Returns the first record of the stream\n * @deprecated Use getFirstRecord(stream, options?) to leverage cache support and future-proof parameter handling.\n */\n public async getFirstRecord(\n input: GetFirstRecordInput,\n ): Promise<StreamRecord | null>;\n public async getFirstRecord(\n stream: StreamLocator,\n options?: GetFirstRecordOptions\n ): Promise<CacheAwareResponse<StreamRecord | null>>;\n public async getFirstRecord(\n inputOrStream: GetFirstRecordInput | StreamLocator,\n options?: GetFirstRecordOptions\n ): Promise<StreamRecord | null | CacheAwareResponse<StreamRecord | null>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetFirstRecordInput;\n if (!Action._legacyWarnEmitted.getFirstRecord) {\n Action._legacyWarnEmitted.getFirstRecord = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getFirstRecord(input). Use getFirstRecord(stream, options?) instead.');\n }\n }\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_first_record\",\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $after: input.after,\n $frozen_at: input.frozenAt,\n }\n );\n\n return result\n .mapRight(head)\n .mapRight((result) =>\n result\n .map((result) => ({\n eventTime: result.event_time,\n value: result.value,\n }))\n .unwrapOr(null),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n \n // Validate options if provided\n if (options) {\n CacheValidation.validateGetFirstRecordOptions(options);\n }\n \n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $after: options?.after,\n $frozen_at: options?.frozenAt,\n };\n \n if (options?.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: \"get_first_record\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get first record: ${result.status}`);\n }\n \n const rawData = result.data?.result as { event_time: number; value: string }[];\n const data = rawData && rawData.length > 0 ? {\n eventTime: rawData[0].event_time,\n value: rawData[0].value,\n } : null;\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n frozenAt: options?.frozenAt,\n rowsServed: data ? 1 : 0\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined\n };\n }\n\n protected async setMetadata<K extends MetadataKey>(\n stream: StreamLocator,\n key: K,\n value: MetadataValueTypeForKey<K>,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return await this.executeWithNamedParams(\"insert_metadata\", [{\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $key: key,\n $value: value,\n $val_type: MetadataKeyValueMap[key],\n },\n ]);\n }\n\n protected async getMetadata<K extends MetadataKey>(\n stream: StreamLocator,\n key: K,\n // onlyLatest: boolean = true,\n filteredRef?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ): Promise<\n { rowId: string; value: MetadataValueTypeForKey<K>; createdAt: number }[]\n > {\n const result = await this.call<\n {\n row_id: string;\n value_i: number;\n value_f: string;\n value_b: boolean;\n value_s: string;\n value_ref: string;\n created_at: number;\n }[]\n >(\"get_metadata\", {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $key: key,\n $ref: filteredRef,\n $limit: limit,\n $offset: offset,\n $order_by: orderBy,\n },\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n rowId: row.row_id,\n value: row[\n MetadataTableKey[MetadataKeyValueMap[key as MetadataKey]]\n ] as MetadataValueTypeForKey<K>,\n createdAt: row.created_at,\n })),\n )\n .throw();\n }\n\n public async listMetadataByHeight<K extends MetadataKey>(\n params: ListMetadataByHeightParams = {},\n ): Promise<MetadataQueryResult[]> {\n type MetadataRawResult = {\n stream_id: string;\n data_provider: string;\n row_id: string;\n value_i: number | null;\n value_f: string | null;\n value_b: boolean | null;\n value_s: string | null;\n value_ref: string | null;\n created_at: number;\n }[];\n const result = await this.call<MetadataRawResult>(\n \"list_metadata_by_height\",\n {\n $key: params.key ?? \"\",\n $ref: params.value ?? null,\n $from_height: params.fromHeight ?? null,\n $to_height: params.toHeight ?? null,\n $limit: params.limit ?? null,\n $offset: params.offset ?? null,\n },\n );\n\n return result\n .mapRight((records) => \n records.map(record => ({\n streamId: record.stream_id,\n dataProvider: record.data_provider,\n rowId: record.row_id,\n valueInt: record.value_i,\n valueFloat: record.value_f,\n valueBoolean: record.value_b,\n valueString: record.value_s,\n valueRef: record.value_ref,\n createdAt: record.created_at,\n }))\n )\n .throw();\n }\n\n /**\n * Sets the read visibility of the stream\n */\n public async setReadVisibility(\n stream: StreamLocator,\n visibility: VisibilityEnum,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.ReadVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the read visibility of the stream\n */\n public async getReadVisibility(\n stream: StreamLocator,\n ): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.ReadVisibilityKey);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Sets the compose visibility of the stream\n */\n public async setComposeVisibility(\n stream: StreamLocator,\n visibility: VisibilityEnum,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.ComposeVisibilityKey,\n visibility.toString(),\n );\n }\n\n /**\n * Returns the compose visibility of the stream\n */\n public async getComposeVisibility(\n stream: StreamLocator,\n ): Promise<VisibilityEnum | null> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.ComposeVisibilityKey);\n\n return head(result)\n .map((row) => toVisibilityEnum(row.value))\n .unwrapOr(null);\n }\n\n /**\n * Allows a wallet to read the stream\n */\n public async allowReadWallet(\n stream: StreamLocator,\n wallet: EthereumAddress,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n }\n\n /**\n * Disables a wallet from reading the stream\n */\n public async disableReadWallet(\n stream: StreamLocator,\n wallet: EthereumAddress,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowReadWalletKey,\n wallet.getAddress(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Wallet not found in allowed list\");\n }\n\n return await this.disableMetadata(stream, row_id);\n }\n\n /**\n * Allows a stream to use this stream as child\n */\n public async allowComposeStream(\n stream: StreamLocator,\n wallet: StreamLocator,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return await this.setMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey,\n wallet.streamId.getId(),\n );\n }\n\n /**\n * Disables a stream from using this stream as child\n */\n public async disableComposeStream(\n stream: StreamLocator,\n wallet: StreamLocator,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey,\n wallet.toString(),\n );\n\n const row_id = head(result)\n .map((row) => row.rowId)\n .unwrapOr(null);\n\n if (!row_id) {\n throw new Error(\"Stream not found in allowed list\");\n }\n\n return await this.disableMetadata(stream, row_id);\n }\n\n protected async disableMetadata(\n stream: StreamLocator,\n rowId: string,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return await this.executeWithNamedParams(\"disable_metadata\", [{\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $row_id: rowId,\n }]);\n }\n\n /**\n * Returns the wallets allowed to read the stream\n */\n public async getAllowedReadWallets(\n stream: StreamLocator,\n ): Promise<EthereumAddress[]> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowReadWalletKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => new EthereumAddress(row.value));\n }\n\n /**\n * Returns the streams allowed to compose the stream\n */\n public async getAllowedComposeStreams(\n stream: StreamLocator,\n ): Promise<StreamLocator[]> {\n const result = await this.getMetadata(\n stream,\n MetadataKey.AllowComposeStreamKey);\n\n return result\n .filter((row) => row.value)\n .map((row) => {\n const [streamId, dataProvider] = row.value.split(\":\");\n return {\n streamId: StreamId.fromString(streamId).throw(),\n dataProvider: new EthereumAddress(dataProvider),\n };\n });\n }\n\n /**\n * Returns the index change of the stream within the given date range\n * @deprecated Use getIndexChange(stream, options) to leverage cache support and future-proof parameter handling.\n */\n public async getIndexChange(\n input: GetIndexChangeInput,\n ): Promise<StreamRecord[]>;\n public async getIndexChange(\n stream: StreamLocator,\n options: GetIndexChangeOptions\n ): Promise<CacheAwareResponse<StreamRecord[]>>;\n public async getIndexChange(\n inputOrStream: GetIndexChangeInput | StreamLocator,\n options?: GetIndexChangeOptions\n ): Promise<StreamRecord[] | CacheAwareResponse<StreamRecord[]>> {\n // Handle backward compatibility\n if ('stream' in inputOrStream) {\n // Legacy call format\n const input = inputOrStream as GetIndexChangeInput;\n if (!Action._legacyWarnEmitted.getIndexChange) {\n Action._legacyWarnEmitted.getIndexChange = true;\n if (typeof console !== 'undefined' && console.warn) {\n console.warn('[TN SDK] Deprecated signature: getIndexChange(input). Use getIndexChange(stream, options?) instead.');\n }\n }\n const result = await this.call<{ event_time: number; value: string }[]>(\n \"get_index_change\", \n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt,\n $base_time: input.baseTime,\n $time_interval: input.timeInterval,\n }\n );\n\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n \n // New cache-aware call format\n const stream = inputOrStream as StreamLocator;\n if (!options) {\n throw new Error('Options parameter is required for cache-aware getIndexChange');\n }\n \n // Validate options\n CacheValidation.validateGetIndexChangeOptions(options);\n CacheValidation.validateTimeRange(options.from, options.to);\n \n const params: any = {\n $data_provider: stream.dataProvider.getAddress(),\n $stream_id: stream.streamId.getId(),\n $from: options.from,\n $to: options.to,\n $frozen_at: options.frozenAt,\n $base_time: options.baseTime,\n $time_interval: options.timeInterval,\n };\n \n if (options.useCache !== undefined) {\n params.$use_cache = options.useCache;\n }\n \n const result = await this.kwilClient.call(\n {\n namespace: \"main\",\n name: \"get_index_change\",\n inputs: params,\n },\n this.kwilSigner,\n );\n \n if (result.status !== 200) {\n throw new Error(`Failed to get index change: ${result.status}`);\n }\n \n const data = (result.data?.result as { event_time: number; value: string }[]).map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n }));\n \n let cache = CacheMetadataParser.extractFromResponse(result);\n \n // Enhance cache metadata with SDK-provided context\n if (cache) {\n cache = {\n ...cache,\n streamId: stream.streamId.getId(),\n dataProvider: stream.dataProvider.getAddress(),\n from: options.from,\n to: options.to,\n frozenAt: options.frozenAt,\n rowsServed: data.length\n };\n }\n \n return {\n data,\n cache: cache || undefined,\n logs: result.data?.logs ? CacheMetadataParser.parseLogsForMetadata(result.data.logs) : undefined\n };\n }\n\n /**\n * A custom method that accepts the procedure name and the input of GetRecordInput\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_price\" that returns a list of date_value and value\n * can be called with customGetProcedure(\"get_price\", { dateFrom: \"2021-01-01\", dateTo: \"2021-01-31\" })\n */\n public async customGetProcedure(\n procedure: string,\n input: GetRecordInput,\n ): Promise<StreamRecord[]> {\n const result = await this.call<{ event_time: number; value: string }[]>(\n procedure,\n {\n $data_provider: input.stream.dataProvider.getAddress(),\n $stream_id: input.stream.streamId.getId(),\n $from: input.from,\n $to: input.to,\n $frozen_at: input.frozenAt\n }\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n\n /**\n * A custom method that accepts the procedure name and custom input of type Record<string, any>\n * Returns the result of the procedure in the same format as StreamRecord\n * I.e. a custom procedure named \"get_custom_index\" that returns a list of date_value and value\n * can be called with customProcedureWithArgs(\"get_custom_index\", { $customArg1: \"value1\", $customArg2: \"value2\" })\n * where $customArg1 and $customArg2 are the arguments of the procedure\n * @param procedure\n * @param args\n */\n public async customProcedureWithArgs(\n procedure: string,\n args: Record<string, Types.ValueType | Types.ValueType[]>,\n ){\n const result = await this.call<{ event_time: number; value: string }[]>(\n procedure,\n args\n );\n return result\n .mapRight((result) =>\n result.map((row) => ({\n eventTime: row.event_time,\n value: row.value,\n })),\n )\n .throw();\n }\n\n /**\n * Returns the size of database\n */\n public async getDatabaseSize(): Promise<BigInt> {\n const result = await this.call<{ database_size: BigInt }[]>(\"get_database_size\", {})\n return result\n .map((rows) => {\n const raw = rows[0].database_size;\n const asBigInt = BigInt(raw.toString());\n return asBigInt;\n }).throw();\n }\n\n /**\n * Gets the wallet balance on any supported blockchain network\n * @param chain The chain identifier (e.g., \"sepolia\", \"mainnet\", \"polygon\", etc.)\n * @param walletAddress The wallet address to check balance for\n * @returns Promise that resolves to the balance as a string, or throws on error\n */\n public async getWalletBalance(\n chain: string,\n walletAddress: string\n ): Promise<string> {\n const result = await this.call<{ balance?: string; }[]>(\n `${chain}_wallet_balance`,\n {\n $wallet_address: walletAddress,\n }\n );\n\n return result\n .mapRight((rows) => {\n if (rows.length === 0) {\n throw new Error(\"You don't have necessary permissions to execute this query\");\n }\n \n const row = rows[0];\n \n if (row.balance === undefined) {\n throw new Error(\"No balance returned from wallet balance query\");\n }\n \n return row.balance;\n })\n .throw();\n }\n\n /**\n * Calls the whoami action to get the caller's wallet address\n * This is useful for verifying wallet authentication with TN\n * @returns Promise that resolves to the caller's wallet address\n */\n public async whoami(): Promise<string> {\n const result = await this.call<{ caller: string }[]>(\n \"whoami\",\n {}\n );\n\n return result\n .mapRight((rows) => {\n if (rows.length === 0) {\n throw new Error(\"No response from whoami action\");\n }\n \n const row = rows[0];\n \n if (!row.caller) {\n throw new Error(\"No caller address returned from whoami\");\n }\n \n return row.caller;\n })\n .throw();\n }\n\n /**\n * Bridges tokens on a blockchain network\n * @param chain The chain identifier (e.g., \"sepolia\", \"mainnet\", \"polygon\", etc.)\n * @param amount The amount to bridge\n * @returns Promise that resolves to GenericResponse<TxReceipt>\n */\n public async bridgeTokens(\n chain: string,\n amount: string\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n // Validate amount is greater than 0\n const numAmount = parseFloat(amount);\n if (isNaN(numAmount) || numAmount <= 0) {\n throw new Error(`Invalid amount: ${amount}. Amount must be greater than 0.`);\n }\n\n return await this.executeWithNamedParams(`${chain}_bridge_tokens`, [{\n $amount: amount,\n }]);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["prefix", "result"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/composedAction.ts"],
4
- "sourcesContent": ["import {KwilSigner, NodeKwil, Utils, WebKwil} from \"@trufnetwork/kwil-js\";\nimport { GenericResponse } from \"@trufnetwork/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@trufnetwork/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;\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 interface ListTaxonomiesByHeightParams {\n /** Start height (inclusive). If null, uses earliest available. */\n fromHeight?: number;\n /** End height (inclusive). If null, uses current height. */\n toHeight?: number;\n /** Maximum number of results to return. Default: 1000 */\n limit?: number;\n /** Number of results to skip for pagination. Default: 0 */\n offset?: number;\n /** If true, returns only latest group_sequence per stream. Default: false */\n latestOnly?: boolean;\n}\n\nexport interface GetTaxonomiesForStreamsParams {\n /** Array of stream locators to query */\n streams: StreamLocator[];\n /** If true, returns only latest group_sequence per stream. Default: false */\n latestOnly?: boolean;\n}\n\nexport interface TaxonomyQueryResult {\n /** Parent stream data provider */\n dataProvider: EthereumAddress;\n /** Parent stream ID */\n streamId: StreamId;\n /** Child stream data provider */\n childDataProvider: EthereumAddress;\n /** Child stream ID */\n childStreamId: StreamId;\n /** Weight of the child stream in the taxonomy */\n weight: string;\n /** Block height when taxonomy was created */\n createdAt: number;\n /** Group sequence number for this taxonomy set */\n groupSequence: number;\n /** Start time timestamp for this taxonomy */\n startTime: number;\n}\n\nexport class ComposedAction extends Action {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ) {\n super(kwilClient, kwilSigner);\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 return txHash;\n }\n\n /**\n * Lists taxonomies by block height range for incremental synchronization.\n * Enables efficient detection of taxonomy changes since a specific block height.\n * \n * @param params Height range and pagination parameters\n * @returns Promise resolving to taxonomy query results\n * \n * @example\n * ```typescript\n * const taxonomies = await composedAction.listTaxonomiesByHeight({\n * fromHeight: 1000,\n * toHeight: 2000,\n * limit: 100,\n * latestOnly: true\n * });\n * ```\n */\n public async listTaxonomiesByHeight(\n params: ListTaxonomiesByHeightParams = {},\n ): Promise<TaxonomyQueryResult[]> {\n type TaxonomyRawResult = {\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_time: number;\n }[];\n\n const result = await this.call<TaxonomyRawResult>(\n \"list_taxonomies_by_height\",\n {\n $from_height: params.fromHeight ?? null,\n $to_height: params.toHeight ?? null,\n $limit: params.limit ?? null,\n $offset: params.offset ?? null,\n $latest_only: params.latestOnly ?? null,\n },\n );\n\n return result\n .mapRight((records) => \n records.map(record => ({\n dataProvider: EthereumAddress.fromString(record.data_provider).throw(),\n streamId: StreamId.fromString(record.stream_id).throw(),\n childDataProvider: EthereumAddress.fromString(record.child_data_provider).throw(),\n childStreamId: StreamId.fromString(record.child_stream_id).throw(),\n weight: record.weight,\n createdAt: record.created_at,\n groupSequence: record.group_sequence,\n startTime: record.start_time,\n }))\n )\n .throw();\n }\n\n /**\n * Gets taxonomies for specific streams in batch.\n * Useful for validating taxonomy data for known streams.\n * \n * @param params Stream locators and filtering options\n * @returns Promise resolving to taxonomy query results\n * \n * @example\n * ```typescript\n * const taxonomies = await composedAction.getTaxonomiesForStreams({\n * streams: [\n * { dataProvider: provider1, streamId: streamId1 },\n * { dataProvider: provider2, streamId: streamId2 }\n * ],\n * latestOnly: true\n * });\n * ```\n */\n public async getTaxonomiesForStreams(\n params: GetTaxonomiesForStreamsParams,\n ): Promise<TaxonomyQueryResult[]> {\n // Validate input\n if (!params.streams || params.streams.length === 0) {\n return [];\n }\n\n const dataProviders = params.streams.map(s => s.dataProvider.getAddress());\n const streamIds = params.streams.map(s => s.streamId.getId());\n\n type TaxonomyRawResult = {\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_time: number;\n }[];\n\n const result = await this.call<TaxonomyRawResult>(\n \"get_taxonomies_for_streams\",\n {\n $data_providers: dataProviders,\n $stream_ids: streamIds,\n $latest_only: params.latestOnly ?? null,\n },\n );\n\n return result\n .mapRight((records) => \n records.map(record => ({\n dataProvider: EthereumAddress.fromString(record.data_provider).throw(),\n streamId: StreamId.fromString(record.stream_id).throw(),\n childDataProvider: EthereumAddress.fromString(record.child_data_provider).throw(),\n childStreamId: StreamId.fromString(record.child_stream_id).throw(),\n weight: record.weight,\n createdAt: record.created_at,\n groupSequence: record.group_sequence,\n startTime: record.start_time,\n }))\n )\n .throw();\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: Action): ComposedAction {\n return new ComposedAction(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n );\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {KwilSigner, NodeKwil, Utils, WebKwil, Types} from \"@trufnetwork/kwil-js\";\nimport { DateString } from \"../types/other\";\nimport { StreamLocator } from \"../types/stream\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\nimport { StreamId } from \"../util/StreamId\";\nimport { Action } from \"./action\";\n\n// Use kwil-js DataType directly\nconst DataType = Utils.DataType;\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 interface ListTaxonomiesByHeightParams {\n /** Start height (inclusive). If null, uses earliest available. */\n fromHeight?: number;\n /** End height (inclusive). If null, uses current height. */\n toHeight?: number;\n /** Maximum number of results to return. Default: 1000 */\n limit?: number;\n /** Number of results to skip for pagination. Default: 0 */\n offset?: number;\n /** If true, returns only latest group_sequence per stream. Default: false */\n latestOnly?: boolean;\n}\n\nexport interface GetTaxonomiesForStreamsParams {\n /** Array of stream locators to query */\n streams: StreamLocator[];\n /** If true, returns only latest group_sequence per stream. Default: false */\n latestOnly?: boolean;\n}\n\nexport interface TaxonomyQueryResult {\n /** Parent stream data provider */\n dataProvider: EthereumAddress;\n /** Parent stream ID */\n streamId: StreamId;\n /** Child stream data provider */\n childDataProvider: EthereumAddress;\n /** Child stream ID */\n childStreamId: StreamId;\n /** Weight of the child stream in the taxonomy */\n weight: string;\n /** Block height when taxonomy was created */\n createdAt: number;\n /** Group sequence number for this taxonomy set */\n groupSequence: number;\n /** Start time timestamp for this taxonomy */\n startTime: number;\n}\n\nexport class ComposedAction extends Action {\n constructor(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ) {\n super(kwilClient, kwilSigner);\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<Types.GenericResponse<Types.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 return txHash;\n }\n\n /**\n * Lists taxonomies by block height range for incremental synchronization.\n * Enables efficient detection of taxonomy changes since a specific block height.\n * \n * @param params Height range and pagination parameters\n * @returns Promise resolving to taxonomy query results\n * \n * @example\n * ```typescript\n * const taxonomies = await composedAction.listTaxonomiesByHeight({\n * fromHeight: 1000,\n * toHeight: 2000,\n * limit: 100,\n * latestOnly: true\n * });\n * ```\n */\n public async listTaxonomiesByHeight(\n params: ListTaxonomiesByHeightParams = {},\n ): Promise<TaxonomyQueryResult[]> {\n type TaxonomyRawResult = {\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_time: number;\n }[];\n\n const result = await this.call<TaxonomyRawResult>(\n \"list_taxonomies_by_height\",\n {\n $from_height: params.fromHeight ?? null,\n $to_height: params.toHeight ?? null,\n $limit: params.limit ?? null,\n $offset: params.offset ?? null,\n $latest_only: params.latestOnly ?? null,\n },\n );\n\n return result\n .mapRight((records) => \n records.map(record => ({\n dataProvider: EthereumAddress.fromString(record.data_provider).throw(),\n streamId: StreamId.fromString(record.stream_id).throw(),\n childDataProvider: EthereumAddress.fromString(record.child_data_provider).throw(),\n childStreamId: StreamId.fromString(record.child_stream_id).throw(),\n weight: record.weight,\n createdAt: record.created_at,\n groupSequence: record.group_sequence,\n startTime: record.start_time,\n }))\n )\n .throw();\n }\n\n /**\n * Gets taxonomies for specific streams in batch.\n * Useful for validating taxonomy data for known streams.\n * \n * @param params Stream locators and filtering options\n * @returns Promise resolving to taxonomy query results\n * \n * @example\n * ```typescript\n * const taxonomies = await composedAction.getTaxonomiesForStreams({\n * streams: [\n * { dataProvider: provider1, streamId: streamId1 },\n * { dataProvider: provider2, streamId: streamId2 }\n * ],\n * latestOnly: true\n * });\n * ```\n */\n public async getTaxonomiesForStreams(\n params: GetTaxonomiesForStreamsParams,\n ): Promise<TaxonomyQueryResult[]> {\n // Validate input\n if (!params.streams || params.streams.length === 0) {\n return [];\n }\n\n const dataProviders = params.streams.map(s => s.dataProvider.getAddress());\n const streamIds = params.streams.map(s => s.streamId.getId());\n\n type TaxonomyRawResult = {\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_time: number;\n }[];\n\n const result = await this.call<TaxonomyRawResult>(\n \"get_taxonomies_for_streams\",\n {\n $data_providers: dataProviders,\n $stream_ids: streamIds,\n $latest_only: params.latestOnly ?? null,\n },\n );\n\n return result\n .mapRight((records) => \n records.map(record => ({\n dataProvider: EthereumAddress.fromString(record.data_provider).throw(),\n streamId: StreamId.fromString(record.stream_id).throw(),\n childDataProvider: EthereumAddress.fromString(record.child_data_provider).throw(),\n childStreamId: StreamId.fromString(record.child_stream_id).throw(),\n weight: record.weight,\n createdAt: record.created_at,\n groupSequence: record.group_sequence,\n startTime: record.start_time,\n }))\n )\n .throw();\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: Action): ComposedAction {\n return new ComposedAction(\n stream[\"kwilClient\"],\n stream[\"kwilSigner\"],\n );\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["taxonomyItems"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/deleteStream.ts"],
4
- "sourcesContent": ["import {StreamId} from \"../util/StreamId\";\nimport {Kwil} from \"@trufnetwork/kwil-js/dist/client/kwil\";\nimport {KwilSigner} from \"@trufnetwork/kwil-js\";\nimport {TxReceipt} from \"@trufnetwork/kwil-js/dist/core/tx\";\nimport {GenericResponse} from \"@trufnetwork/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;",
4
+ "sourcesContent": ["import {StreamId} from \"../util/StreamId\";\nimport {KwilSigner, Types} from \"@trufnetwork/kwil-js\";\nimport {StreamLocator} from \"../types/stream\";\n\n/**\n * Input parameters for destroying a stream.\n */\nexport interface DestroyStreamInput {\n stream: StreamLocator;\n kwilClient: Types.Kwil<any>;\n kwilSigner: KwilSigner;\n synchronous?: boolean;\n}\n\n/**\n * Output after deleting a stream.\n */\nexport interface DeleteStreamOutput {\n receipt: Types.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<Types.GenericResponse<Types.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": ";AA0BA,eAAsB,aACpB,OACiD;AACjD,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
6
  "names": []
7
7
  }
@@ -1,6 +1,4 @@
1
1
  // src/contracts-api/deployStream.ts
2
- import pg from "pg";
3
- var { Pool } = pg;
4
2
  async function deployStream(input) {
5
3
  try {
6
4
  const txHash = await input.kwilClient.execute(
@@ -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 \"@trufnetwork/kwil-js/dist/core/tx\";\nimport {Kwil} from \"@trufnetwork/kwil-js/dist/client/kwil\";\nimport {KwilSigner} from \"@trufnetwork/kwil-js\";\nimport {GenericResponse} from \"@trufnetwork/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}\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 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;AAmBjB,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;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;",
4
+ "sourcesContent": ["import {StreamType} from \"./contractValues\";\nimport {KwilSigner, Types} from \"@trufnetwork/kwil-js\";\nimport {StreamId} from \"../util/StreamId\";\n\nexport interface DeployStreamInput {\n streamId: StreamId;\n streamType: StreamType;\n kwilClient: Types.Kwil<any>;\n kwilSigner: KwilSigner;\n synchronous?: boolean;\n}\n\nexport interface DeployStreamOutput {\n receipt: Types.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<Types.GenericResponse<Types.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 return txHash;\n } catch (error) {\n throw new Error(`Failed to deploy stream: ${error}`);\n }\n}"],
5
+ "mappings": ";AAqBA,eAAsB,aACpB,OACiD;AACjD,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;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,4BAA4B,KAAK,EAAE;AAAA,EACrD;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/primitiveAction.ts"],
4
- "sourcesContent": ["import {KwilSigner, NodeKwil, Utils, WebKwil} from \"@trufnetwork/kwil-js\";\nimport {GenericResponse} from \"@trufnetwork/kwil-js/dist/core/resreq\";\nimport {TxReceipt} from \"@trufnetwork/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;",
4
+ "sourcesContent": ["import {KwilSigner, NodeKwil, Utils, WebKwil, Types} from \"@trufnetwork/kwil-js\";\nimport {StreamType} from \"./contractValues\";\nimport {Action} from \"./action\";\nimport {StreamLocator} from \"../types/stream\";\n\n// Use kwil-js DataType directly\nconst 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<Types.GenericResponse<Types.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<Types.GenericResponse<Types.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,aAA4B;AAE1D,SAAQ,cAAa;AAIrB,IAAM,WAAW,MAAM;AAIhB,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,OAC+C;AACjD,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,aAC+C;AACjD,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
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/contracts-api/roleManagement.ts"],
4
- "sourcesContent": ["import { KwilSigner, NodeKwil, Utils, WebKwil } from \"@trufnetwork/kwil-js\";\nimport { GenericResponse } from \"@trufnetwork/kwil-js/dist/core/resreq\";\nimport { TxReceipt } from \"@trufnetwork/kwil-js/dist/core/tx\";\nimport { Action } from \"./action\";\nimport { AreMembersOfInput, GrantRoleInput, RevokeRoleInput, WalletMembership } from \"../types/role\";\nimport DataType = Utils.DataType;\nimport { OwnerIdentifier } from \"../types/role\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\n\n/**\n * RoleManagement provides convenient wrappers around the on-chain SQL actions\n * that implement the RBAC system (grant_roles, revoke_roles, are_members_of).\n */\nexport class RoleManagement extends Action {\n constructor(kwilClient: WebKwil | NodeKwil, kwilSigner: KwilSigner) {\n super(kwilClient, kwilSigner);\n }\n\n private static normalizeOwner(owner: OwnerIdentifier): string {\n return owner === \"system\"\n ? \"system\"\n : owner.getAddress().toLowerCase();\n }\n\n private static normalizeWallets(wallets: EthereumAddress[]): string[] {\n return wallets.map((w) => w.getAddress().toLowerCase());\n }\n\n /**\n * Grants a role to the provided wallets.\n * This calls the `grant_roles` action.\n */\n public async grantRole(\n input: GrantRoleInput,\n synchronous = false,\n ): Promise<GenericResponse<TxReceipt>> {\n return this.executeWithActionBody(\n {\n namespace: \"main\",\n name: \"grant_roles\",\n inputs: [\n {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n $wallets: RoleManagement.normalizeWallets(input.wallets),\n },\n ],\n types: {\n $owner: DataType.Text,\n $role_name: DataType.Text,\n $wallets: DataType.TextArray,\n },\n },\n synchronous,\n );\n }\n\n /**\n * Revokes a role from the provided wallets.\n * This calls the `revoke_roles` action.\n */\n public async revokeRole(\n input: RevokeRoleInput,\n synchronous = false,\n ): Promise<GenericResponse<TxReceipt>> {\n return this.executeWithActionBody(\n {\n namespace: \"main\",\n name: \"revoke_roles\",\n inputs: [\n {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n $wallets: RoleManagement.normalizeWallets(input.wallets),\n },\n ],\n types: {\n $owner: DataType.Text,\n $role_name: DataType.Text,\n $wallets: DataType.TextArray,\n },\n },\n synchronous,\n );\n }\n\n /**\n * Checks if the provided wallets are members of a role.\n * This calls the `are_members_of` VIEW action.\n *\n * @returns an array matching the provided wallets order with membership flags.\n */\n public async areMembersOf(\n input: AreMembersOfInput,\n ): Promise<WalletMembership[]> {\n const result = await this.call<{ wallet: string; is_member: boolean }[]>(\n \"are_members_of\",\n {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n $wallets: RoleManagement.normalizeWallets(input.wallets),\n },\n );\n\n // Either.throw() will return the right value or throw with the left value (status code)\n return result.throw().map((row) => ({\n wallet: row.wallet,\n isMember: row.is_member,\n }));\n }\n\n /**\n * Lists the members of a role with optional pagination.\n * This calls the `list_role_members` VIEW action.\n */\n public async listRoleMembers(\n input: import(\"../types/role\").ListRoleMembersInput,\n ): Promise<import(\"../types/role\").RoleMember[]> {\n const result = await this.call<{\n wallet: string;\n granted_at: number;\n granted_by: string;\n }[]>(\"list_role_members\", {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n ...(input.limit !== undefined ? { $limit: input.limit } : {}),\n ...(input.offset !== undefined ? { $offset: input.offset } : {}),\n });\n\n return result.throw().map((row) => ({\n wallet: row.wallet,\n grantedAt: Number(row.granted_at),\n grantedBy: row.granted_by,\n }));\n }\n\n /**\n * Helper factory mirroring the pattern used by the other action wrappers.\n */\n public static fromClient(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ): RoleManagement {\n return new RoleManagement(kwilClient, kwilSigner);\n }\n} "],
5
- "mappings": ";AAAA,SAA+B,aAAsB;AAGrD,SAAS,cAAc;AAEvB,IAAO,WAAW,MAAM;AAQjB,IAAM,iBAAN,MAAM,wBAAuB,OAAO;AAAA,EACzC,YAAY,YAAgC,YAAwB;AAClE,UAAM,YAAY,UAAU;AAAA,EAC9B;AAAA,EAEA,OAAe,eAAe,OAAgC;AAC5D,WAAO,UAAU,WACb,WACA,MAAM,WAAW,EAAE,YAAY;AAAA,EACrC;AAAA,EAEA,OAAe,iBAAiB,SAAsC;AACpE,WAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UACX,OACA,cAAc,OACuB;AACrC,WAAO,KAAK;AAAA,MACV;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,UACN;AAAA,YACE,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,YACjD,YAAY,MAAM,SAAS,YAAY;AAAA,YACvC,UAAU,gBAAe,iBAAiB,MAAM,OAAO;AAAA,UACzD;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS;AAAA,QACrB;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,WACX,OACA,cAAc,OACuB;AACrC,WAAO,KAAK;AAAA,MACV;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,UACN;AAAA,YACE,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,YACjD,YAAY,MAAM,SAAS,YAAY;AAAA,YACvC,UAAU,gBAAe,iBAAiB,MAAM,OAAO;AAAA,UACzD;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS;AAAA,QACrB;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,aACX,OAC6B;AAC7B,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,QACE,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,QACjD,YAAY,MAAM,SAAS,YAAY;AAAA,QACvC,UAAU,gBAAe,iBAAiB,MAAM,OAAO;AAAA,MACzD;AAAA,IACF;AAGA,WAAO,OAAO,MAAM,EAAE,IAAI,CAAC,SAAS;AAAA,MAClC,QAAQ,IAAI;AAAA,MACZ,UAAU,IAAI;AAAA,IAChB,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,gBACX,OAC+C;AAC/C,UAAM,SAAS,MAAM,KAAK,KAIrB,qBAAqB;AAAA,MACxB,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,MACjD,YAAY,MAAM,SAAS,YAAY;AAAA,MACvC,GAAI,MAAM,UAAU,SAAY,EAAE,QAAQ,MAAM,MAAM,IAAI,CAAC;AAAA,MAC3D,GAAI,MAAM,WAAW,SAAY,EAAE,SAAS,MAAM,OAAO,IAAI,CAAC;AAAA,IAChE,CAAC;AAED,WAAO,OAAO,MAAM,EAAE,IAAI,CAAC,SAAS;AAAA,MAClC,QAAQ,IAAI;AAAA,MACZ,WAAW,OAAO,IAAI,UAAU;AAAA,MAChC,WAAW,IAAI;AAAA,IACjB,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WACZ,YACA,YACgB;AAChB,WAAO,IAAI,gBAAe,YAAY,UAAU;AAAA,EAClD;AACF;",
4
+ "sourcesContent": ["import { KwilSigner, NodeKwil, Utils, WebKwil, Types } from \"@trufnetwork/kwil-js\";\nimport { Action } from \"./action\";\nimport { AreMembersOfInput, GrantRoleInput, RevokeRoleInput, WalletMembership } from \"../types/role\";\nimport { OwnerIdentifier } from \"../types/role\";\nimport { EthereumAddress } from \"../util/EthereumAddress\";\n\n// Use kwil-js DataType directly\nconst DataType = Utils.DataType;\n\n/**\n * RoleManagement provides convenient wrappers around the on-chain SQL actions\n * that implement the RBAC system (grant_roles, revoke_roles, are_members_of).\n */\nexport class RoleManagement extends Action {\n constructor(kwilClient: WebKwil | NodeKwil, kwilSigner: KwilSigner) {\n super(kwilClient, kwilSigner);\n }\n\n private static normalizeOwner(owner: OwnerIdentifier): string {\n return owner === \"system\"\n ? \"system\"\n : owner.getAddress().toLowerCase();\n }\n\n private static normalizeWallets(wallets: EthereumAddress[]): string[] {\n return wallets.map((w) => w.getAddress().toLowerCase());\n }\n\n /**\n * Grants a role to the provided wallets.\n * This calls the `grant_roles` action.\n */\n public async grantRole(\n input: GrantRoleInput,\n synchronous = false,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return this.executeWithActionBody(\n {\n namespace: \"main\",\n name: \"grant_roles\",\n inputs: [\n {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n $wallets: RoleManagement.normalizeWallets(input.wallets),\n },\n ],\n types: {\n $owner: DataType.Text,\n $role_name: DataType.Text,\n $wallets: DataType.TextArray,\n },\n },\n synchronous,\n );\n }\n\n /**\n * Revokes a role from the provided wallets.\n * This calls the `revoke_roles` action.\n */\n public async revokeRole(\n input: RevokeRoleInput,\n synchronous = false,\n ): Promise<Types.GenericResponse<Types.TxReceipt>> {\n return this.executeWithActionBody(\n {\n namespace: \"main\",\n name: \"revoke_roles\",\n inputs: [\n {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n $wallets: RoleManagement.normalizeWallets(input.wallets),\n },\n ],\n types: {\n $owner: DataType.Text,\n $role_name: DataType.Text,\n $wallets: DataType.TextArray,\n },\n },\n synchronous,\n );\n }\n\n /**\n * Checks if the provided wallets are members of a role.\n * This calls the `are_members_of` VIEW action.\n *\n * @returns an array matching the provided wallets order with membership flags.\n */\n public async areMembersOf(\n input: AreMembersOfInput,\n ): Promise<WalletMembership[]> {\n const result = await this.call<{ wallet: string; is_member: boolean }[]>(\n \"are_members_of\",\n {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n $wallets: RoleManagement.normalizeWallets(input.wallets),\n },\n );\n\n // Either.throw() will return the right value or throw with the left value (status code)\n return result.throw().map((row) => ({\n wallet: row.wallet,\n isMember: row.is_member,\n }));\n }\n\n /**\n * Lists the members of a role with optional pagination.\n * This calls the `list_role_members` VIEW action.\n */\n public async listRoleMembers(\n input: import(\"../types/role\").ListRoleMembersInput,\n ): Promise<import(\"../types/role\").RoleMember[]> {\n const result = await this.call<{\n wallet: string;\n granted_at: number;\n granted_by: string;\n }[]>(\"list_role_members\", {\n $owner: RoleManagement.normalizeOwner(input.owner),\n $role_name: input.roleName.toLowerCase(),\n ...(input.limit !== undefined ? { $limit: input.limit } : {}),\n ...(input.offset !== undefined ? { $offset: input.offset } : {}),\n });\n\n return result.throw().map((row) => ({\n wallet: row.wallet,\n grantedAt: Number(row.granted_at),\n grantedBy: row.granted_by,\n }));\n }\n\n /**\n * Helper factory mirroring the pattern used by the other action wrappers.\n */\n public static fromClient(\n kwilClient: WebKwil | NodeKwil,\n kwilSigner: KwilSigner,\n ): RoleManagement {\n return new RoleManagement(kwilClient, kwilSigner);\n }\n} "],
5
+ "mappings": ";AAAA,SAA+B,aAA6B;AAC5D,SAAS,cAAc;AAMvB,IAAM,WAAW,MAAM;AAMhB,IAAM,iBAAN,MAAM,wBAAuB,OAAO;AAAA,EACzC,YAAY,YAAgC,YAAwB;AAClE,UAAM,YAAY,UAAU;AAAA,EAC9B;AAAA,EAEA,OAAe,eAAe,OAAgC;AAC5D,WAAO,UAAU,WACb,WACA,MAAM,WAAW,EAAE,YAAY;AAAA,EACrC;AAAA,EAEA,OAAe,iBAAiB,SAAsC;AACpE,WAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,UACX,OACA,cAAc,OACmC;AACjD,WAAO,KAAK;AAAA,MACV;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,UACN;AAAA,YACE,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,YACjD,YAAY,MAAM,SAAS,YAAY;AAAA,YACvC,UAAU,gBAAe,iBAAiB,MAAM,OAAO;AAAA,UACzD;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS;AAAA,QACrB;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,WACX,OACA,cAAc,OACmC;AACjD,WAAO,KAAK;AAAA,MACV;AAAA,QACE,WAAW;AAAA,QACX,MAAM;AAAA,QACN,QAAQ;AAAA,UACN;AAAA,YACE,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,YACjD,YAAY,MAAM,SAAS,YAAY;AAAA,YACvC,UAAU,gBAAe,iBAAiB,MAAM,OAAO;AAAA,UACzD;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS;AAAA,UACrB,UAAU,SAAS;AAAA,QACrB;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,aACX,OAC6B;AAC7B,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,QACE,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,QACjD,YAAY,MAAM,SAAS,YAAY;AAAA,QACvC,UAAU,gBAAe,iBAAiB,MAAM,OAAO;AAAA,MACzD;AAAA,IACF;AAGA,WAAO,OAAO,MAAM,EAAE,IAAI,CAAC,SAAS;AAAA,MAClC,QAAQ,IAAI;AAAA,MACZ,UAAU,IAAI;AAAA,IAChB,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAa,gBACX,OAC+C;AAC/C,UAAM,SAAS,MAAM,KAAK,KAIrB,qBAAqB;AAAA,MACxB,QAAQ,gBAAe,eAAe,MAAM,KAAK;AAAA,MACjD,YAAY,MAAM,SAAS,YAAY;AAAA,MACvC,GAAI,MAAM,UAAU,SAAY,EAAE,QAAQ,MAAM,MAAM,IAAI,CAAC;AAAA,MAC3D,GAAI,MAAM,WAAW,SAAY,EAAE,SAAS,MAAM,OAAO,IAAI,CAAC;AAAA,IAChE,CAAC;AAED,WAAO,OAAO,MAAM,EAAE,IAAI,CAAC,SAAS;AAAA,MAClC,QAAQ,IAAI;AAAA,MACZ,WAAW,OAAO,IAAI,UAAU;AAAA,MAChC,WAAW,IAAI;AAAA,IACjB,EAAE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WACZ,YACA,YACgB;AAChB,WAAO,IAAI,gBAAe,YAAY,UAAU;AAAA,EAClD;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  // src/index.browser.ts
2
2
  import { BrowserTNClient } from "./client/browserClient.mjs";
3
- export * from "./index.common.mjs";
3
+ export * from "./internal.mjs";
4
4
  export {
5
5
  BrowserTNClient
6
6
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.browser.ts"],
4
- "sourcesContent": ["// Browser/Web exports\nexport { BrowserTNClient } from \"./client/browserClient\";\nexport * from \"./index.common\";\n"],
4
+ "sourcesContent": ["// Browser/Web exports\nexport { BrowserTNClient } from \"./client/browserClient\";\nexport * from \"./internal\";\n"],
5
5
  "mappings": ";AACA,SAAS,uBAAuB;AAChC,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  // src/index.ts
2
2
  import { BrowserTNClient } from "./client/browserClient.mjs";
3
3
  import { NodeTNClient } from "./client/nodeClient.mjs";
4
- export * from "./index.common.mjs";
4
+ export * from "./internal.mjs";
5
5
  export {
6
6
  BrowserTNClient,
7
7
  NodeTNClient
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["// All exports, to provide types for both browser and node\nexport { BrowserTNClient } from \"./client/browserClient\";\nexport { NodeTNClient } from \"./client/nodeClient\";\nexport * from \"./index.common\";\n"],
4
+ "sourcesContent": ["// All exports, to provide types for both browser and node\nexport { BrowserTNClient } from \"./client/browserClient\";\nexport { NodeTNClient } from \"./client/nodeClient\";\nexport * from \"./internal\";\n"],
5
5
  "mappings": ";AACA,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  // src/index.node.ts
2
2
  import { NodeTNClient } from "./client/nodeClient.mjs";
3
- export * from "./index.common.mjs";
3
+ export * from "./internal.mjs";
4
4
  export {
5
5
  NodeTNClient
6
6
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.node.ts"],
4
- "sourcesContent": ["// Node.js exports \nexport { NodeTNClient } from \"./client/nodeClient\";\nexport * from \"./index.common\";\n"],
4
+ "sourcesContent": ["// Node.js exports \nexport { NodeTNClient } from \"./client/nodeClient\";\nexport * from \"./internal\";\n"],
5
5
  "mappings": ";AACA,SAAS,oBAAoB;AAC7B,cAAc;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,26 @@
1
+ // src/internal.ts
2
+ import { BaseTNClient } from "./client/client.mjs";
3
+ import { Action } from "./contracts-api/action.mjs";
4
+ import { PrimitiveAction } from "./contracts-api/primitiveAction.mjs";
5
+ import { ComposedAction } from "./contracts-api/composedAction.mjs";
6
+ import { RoleManagement } from "./contracts-api/roleManagement.mjs";
7
+ import { deployStream } from "./contracts-api/deployStream.mjs";
8
+ import { deleteStream } from "./contracts-api/deleteStream.mjs";
9
+ import { StreamId } from "./util/StreamId.mjs";
10
+ import { EthereumAddress } from "./util/EthereumAddress.mjs";
11
+ import { visibility } from "./util/visibility.mjs";
12
+ import { StreamType } from "./contracts-api/contractValues.mjs";
13
+ export {
14
+ Action,
15
+ BaseTNClient,
16
+ ComposedAction,
17
+ EthereumAddress,
18
+ PrimitiveAction,
19
+ RoleManagement,
20
+ StreamId,
21
+ StreamType,
22
+ deleteStream,
23
+ deployStream,
24
+ visibility
25
+ };
26
+ //# sourceMappingURL=internal.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/internal.ts"],
4
+ "sourcesContent": ["/**\r\n * Internal module to manage exports and break circular dependencies\r\n * This centralizes all exports to prevent circular import issues\r\n */\r\n\r\n// Base client and types\r\nexport { BaseTNClient } from \"./client/client\";\r\nexport type { TNClientOptions, SignerInfo, ListStreamsInput, GetLastTransactionsInput } from \"./client/client\";\r\n\r\n// Contract APIs\r\nexport { Action } from \"./contracts-api/action\";\r\nexport { PrimitiveAction } from \"./contracts-api/primitiveAction\";\r\nexport { ComposedAction } from \"./contracts-api/composedAction\";\r\nexport { RoleManagement } from \"./contracts-api/roleManagement\";\r\nexport { deployStream } from \"./contracts-api/deployStream\";\r\nexport { deleteStream } from \"./contracts-api/deleteStream\";\r\n\r\n// Utility classes\r\nexport { StreamId } from \"./util/StreamId\";\r\nexport { EthereumAddress } from \"./util/EthereumAddress\";\r\nexport { visibility } from \"./util/visibility\";\r\n\r\n// Contract values and types\r\nexport { StreamType } from \"./contracts-api/contractValues\";\r\n\r\n// Stream types\r\nexport type { StreamLocator } from \"./types/stream\";\r\n\r\n// Action types\r\nexport type {\r\n StreamRecord,\r\n ListMetadataByHeightParams,\r\n MetadataQueryResult,\r\n GetRecordInput,\r\n GetFirstRecordInput\r\n} from \"./contracts-api/action\";\r\n\r\n// Primitive action types\r\nexport type { InsertRecordInput } from \"./contracts-api/primitiveAction\";\r\n\r\n// Composed action types\r\nexport type {\r\n TaxonomySet,\r\n TaxonomyItem,\r\n ListTaxonomiesByHeightParams,\r\n GetTaxonomiesForStreamsParams,\r\n TaxonomyQueryResult\r\n} from \"./contracts-api/composedAction\";\r\n\r\n// Role management types\r\nexport type {\r\n GrantRoleInput,\r\n RevokeRoleInput,\r\n AreMembersOfInput,\r\n WalletMembership\r\n} from \"./types/role\";\r\n\r\n// Visibility types\r\nexport type { VisibilityEnum } from \"./util/visibility\";"],
5
+ "mappings": ";AAMA,SAAS,oBAAoB;AAI7B,SAAS,cAAc;AACvB,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAG7B,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAG3B,SAAS,kBAAkB;",
6
+ "names": []
7
+ }