@dfinity/pic
Version:
An Internet Computer Protocol canister testing library for TypeScript and JavaScript.
58 lines • 2.16 kB
JavaScript
;
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