UNPKG

@dfinity/pic

Version:

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

58 lines 2.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createActorClass = createActorClass; const candid_1 = require("@dfinity/candid"); const principal_1 = require("@dfinity/principal"); const util_1 = require("./util"); function createActorClass(interfaceFactory, canisterId, pocketIcClient) { const service = interfaceFactory({ IDL: candid_1.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_1.Principal.anonymous(); } function createQueryMethod(method, func) { return async function (...args) { const arg = candid_1.IDL.encode(func.argTypes, args); const sender = getSender(); const res = await pocketIcClient.queryCall({ canisterId, sender, method, payload: new Uint8Array(arg), }); return (0, util_1.decodeCandid)(func.retTypes, res.body); }; } function createCallMethod(method, func) { return async function (...args) { const arg = candid_1.IDL.encode(func.argTypes, args); const sender = getSender(); const res = await pocketIcClient.updateCall({ canisterId, sender, method, payload: new Uint8Array(arg), }); return (0, util_1.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