From c0e6012d2f7083fada21670544570a3570413add Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 4 Apr 2025 16:53:32 +0300 Subject: [PATCH] feat: add rangeRead --- packages/cwait/src/onchain/ops/rangeRead.ts | 33 +++++++++++++++++++++ packages/cwait/src/onchain/ops/read.ts | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 packages/cwait/src/onchain/ops/rangeRead.ts diff --git a/packages/cwait/src/onchain/ops/rangeRead.ts b/packages/cwait/src/onchain/ops/rangeRead.ts new file mode 100644 index 0000000..7cad24e --- /dev/null +++ b/packages/cwait/src/onchain/ops/rangeRead.ts @@ -0,0 +1,33 @@ +import { Claim, ClaimKey, constructRangeRead, extractRead, isResolvedRead } from '@coinweb/contract-kit'; +import { ClaimRange } from '@coinweb/contract-kit/dist/types/operations/read'; + +import { TypedClaim } from '../../types'; +import { context } from '../context'; + +import { pushAwaitedOp } from './awaited'; +import { shiftResolvedOp } from './resolved'; + +export const rangeReadOp = ( + firstPart: ClaimKey['first_part'], + range: ClaimRange, + maxCount: number +) => { + return new Promise((resolve, reject) => { + try { + const { op, isOp } = shiftResolvedOp(); + + if (!isOp) { + pushAwaitedOp(constructRangeRead(context.issuer, firstPart, range, maxCount)); + } else { + if (op && !isResolvedRead(op)) { + throw new Error('Read operation not found'); + } + + const claim = op && ((extractRead(op)?.map((result) => result.content) ?? null) as TClaims | null); + resolve(claim); + } + } catch (error) { + reject(error); + } + }); +}; diff --git a/packages/cwait/src/onchain/ops/read.ts b/packages/cwait/src/onchain/ops/read.ts index daf3d8d..cad65a0 100644 --- a/packages/cwait/src/onchain/ops/read.ts +++ b/packages/cwait/src/onchain/ops/read.ts @@ -18,7 +18,7 @@ export const readOp = (key: ClaimKey) => { throw new Error('Read operation not found'); } - const claim = op && ((extractRead(op)?.[0].content ?? null) as TClaim | null); + const claim = op && ((extractRead(op)?.[0]?.content ?? null) as TClaim | null); resolve(claim); } } catch (error) {