UNPKG

@mysten/sui

Version:

Sui TypeScript API(Work in Progress)

81 lines (80 loc) 2.54 kB
import { TypeTagSerializer } from "../bcs/type-tag-serializer.js"; import { deriveDynamicFieldID } from "../utils/dynamic-fields.js"; import { normalizeStructTag, parseStructTag, SUI_ADDRESS_LENGTH } from "../utils/sui-types.js"; import { Experimental_BaseClient } from "./client.js"; class Experimental_CoreClient extends Experimental_BaseClient { constructor() { super(...arguments); this.core = this; } async getObject(options) { const { objectId } = options; const { objects: [result] } = await this.getObjects({ objectIds: [objectId], signal: options.signal }); if (result instanceof Error) { throw result; } return { object: result }; } async getDynamicField(options) { const fieldId = deriveDynamicFieldID( options.parentId, TypeTagSerializer.parseFromStr(options.name.type), options.name.bcs ); const { objects: [fieldObject] } = await this.getObjects({ objectIds: [fieldId], signal: options.signal }); if (fieldObject instanceof Error) { throw fieldObject; } const fieldType = parseStructTag(fieldObject.type); return { dynamicField: { id: fieldObject.id, digest: fieldObject.digest, version: fieldObject.version, type: fieldObject.type, name: { type: typeof fieldType.typeParams[0] === "string" ? fieldType.typeParams[0] : normalizeStructTag(fieldType.typeParams[0]), bcs: options.name.bcs }, value: { type: typeof fieldType.typeParams[1] === "string" ? fieldType.typeParams[1] : normalizeStructTag(fieldType.typeParams[1]), bcs: fieldObject.content.slice(SUI_ADDRESS_LENGTH + options.name.bcs.length) } } }; } async waitForTransaction({ signal, timeout = 60 * 1e3, ...input }) { const abortSignal = signal ? AbortSignal.any([AbortSignal.timeout(timeout), signal]) : AbortSignal.timeout(timeout); const abortPromise = new Promise((_, reject) => { abortSignal.addEventListener("abort", () => reject(abortSignal.reason)); }); abortPromise.catch(() => { }); while (true) { abortSignal.throwIfAborted(); try { return await this.getTransaction({ ...input, signal: abortSignal }); } catch (e) { await Promise.race([new Promise((resolve) => setTimeout(resolve, 2e3)), abortPromise]); } } } } export { Experimental_CoreClient }; //# sourceMappingURL=core.js.map