pic-js-mops
Version:
An Internet Computer Protocol canister testing library for TypeScript and JavaScript.
41 lines • 1.61 kB
JavaScript
import { IDL } from '@icp-sdk/core/candid';
import { Principal } from '@icp-sdk/core/principal';
import { decodeCandid } from './util/index.js';
export function createDeferredActorClass(interfaceFactory, canisterId, pocketIcClient) {
const service = interfaceFactory({ IDL });
let sender = null;
function createDeferredActorMethod(method, func) {
return async function (...args) {
const arg = IDL.encode(func.argTypes, args);
const sender = getSender();
const messageId = await pocketIcClient.submitCall({
canisterId,
sender,
method,
payload: new Uint8Array(arg),
});
return function () {
return new Promise(async (resolve) => {
const res = await pocketIcClient.awaitCall(messageId);
const decodedRes = decodeCandid(func.retTypes, res.body);
return resolve(decodedRes);
});
};
};
}
function getSender() {
return sender ?? Principal.anonymous();
}
const DeferredActor = function () { };
DeferredActor.prototype.setPrincipal = function (newSender) {
sender = newSender;
};
DeferredActor.prototype.setIdentity = function (identity) {
sender = identity.getPrincipal();
};
service._fields.forEach(([methodName, func]) => {
DeferredActor.prototype[methodName] = createDeferredActorMethod(methodName, func);
});
return DeferredActor;
}
//# sourceMappingURL=pocket-ic-deferred-actor.js.map