@mysten/sui
Version:
Sui TypeScript API(Work in Progress)
81 lines (80 loc) • 2.54 kB
JavaScript
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