UNPKG

pic-js-mops

Version:

An Internet Computer Protocol canister testing library for TypeScript and JavaScript.

55 lines 2 kB
import { IDL } from '@icp-sdk/core/candid'; import { Principal } from '@icp-sdk/core/principal'; import { decodeCandid } from './util/index.js'; export function createActorClass(interfaceFactory, canisterId, pocketIcClient) { const service = interfaceFactory({ IDL }); let sender = null; function createActorMethod(methodName, func) { if (func.annotations.includes('query') || func.annotations.includes('composite_query')) { return createQueryMethod(methodName, func); } return createCallMethod(methodName, func); } function getSender() { return sender ?? Principal.anonymous(); } function createQueryMethod(method, func) { return async function (...args) { const arg = IDL.encode(func.argTypes, args); const sender = getSender(); const res = await pocketIcClient.queryCall({ canisterId, sender, method, payload: new Uint8Array(arg), }); return decodeCandid(func.retTypes, res.body); }; } function createCallMethod(method, func) { return async function (...args) { const arg = IDL.encode(func.argTypes, args); const sender = getSender(); const res = await pocketIcClient.updateCall({ canisterId, sender, method, payload: new Uint8Array(arg), }); return decodeCandid(func.retTypes, res.body); }; } function Actor() { } Actor.prototype.setPrincipal = function (newSender) { sender = newSender; }; Actor.prototype.setIdentity = function (identity) { sender = identity.getPrincipal(); }; service._fields.forEach(([methodName, func]) => { Actor.prototype[methodName] = createActorMethod(methodName, func); }); return Actor; } //# sourceMappingURL=pocket-ic-actor.js.map