@lit-protocol/vincent-scaffold-sdk
Version:
Shared build configuration and utilities for Vincent abilities and policies
113 lines (112 loc) • 5.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createValidateAbilityExecutionFunction = exports.createPermitAppVersionFunction = exports.createRegisterNextAppVersionFunction = exports.createRegisterAppFunction = void 0;
const chalk_1 = __importDefault(require("chalk"));
/**
* Generates a random app ID
* @returns A random app ID
*/
function generateRandomAppId() {
return Math.floor(Math.random() * (100000000000 - 10000000000)) + 10000000000;
}
;
const createRegisterAppFunction = (stateManager, contractClient, delegateeAccount) => {
return async ({ abilityIpfsCids, abilityPolicies, policyParams, }) => {
// Set the real configuration hash based on ability/policy CIDs before any state operations
stateManager.setConfigurationFromCIDs(abilityIpfsCids, abilityPolicies);
const delegateeAddress = delegateeAccount.address;
const result = await stateManager.getOrRegisterVincentAppVersioned(delegateeAddress, async () => {
const appId = generateRandomAppId();
const { txHash } = await contractClient.registerApp({
appId,
delegateeAddresses: [delegateeAddress],
versionAbilities: {
abilityIpfsCids,
abilityPolicies,
},
});
console.log(chalk_1.default.green(` Registered Vincent app: ${appId}`));
console.log(chalk_1.default.green(` Transaction: ${txHash}`));
return { appId, appVersion: 1 };
}, async (appId) => {
const { txHash, newAppVersion } = await contractClient.registerNextVersion({
appId,
versionAbilities: {
abilityIpfsCids,
abilityPolicies,
},
});
console.log(chalk_1.default.green(` Registered Vincent app version: ${appId} v${newAppVersion}`));
console.log(chalk_1.default.green(` Transaction: ${txHash}`));
return { appId, appVersion: newAppVersion };
}, abilityIpfsCids, abilityPolicies, policyParams);
await stateManager.saveState();
return result;
};
};
exports.createRegisterAppFunction = createRegisterAppFunction;
const createRegisterNextAppVersionFunction = (contractClient) => {
return async ({ appId, abilityIpfsCids, abilityPolicies, }) => {
const { txHash, newAppVersion } = await contractClient.registerNextVersion({
appId,
versionAbilities: {
abilityIpfsCids,
abilityPolicies,
},
});
console.log(chalk_1.default.green(` Registered Vincent app version: ${appId} v${newAppVersion}`));
console.log(chalk_1.default.green(` Transaction: ${txHash}`));
return { appId, appVersion: newAppVersion };
};
};
exports.createRegisterNextAppVersionFunction = createRegisterNextAppVersionFunction;
const createPermitAppVersionFunction = (stateManager, contractClient) => {
return async ({ pkpEthAddress, appId, appVersion, abilityIpfsCids, policyIpfsCids, policyParams, }) => {
if (stateManager.isPKPPermittedForAppVersion(pkpEthAddress, appId, appVersion)) {
console.log(chalk_1.default.blue(`⏭️ Skipping permitAppVersion - PKP ${pkpEthAddress} already permitted for app ${appId} v${appVersion}`));
return { txHash: null, skipped: true };
}
console.log(chalk_1.default.yellow(`= Permitting app version for PKP...`));
console.log("🔍 Debug - permitAppVersion args:");
console.log(" pkpEthAddress:", pkpEthAddress);
console.log(" appId:", appId);
console.log(" appVersion:", appVersion);
console.log(" abilityIpfsCids:", abilityIpfsCids);
console.log(" policyIpfsCids:", policyIpfsCids);
console.log(" policyParams:", policyParams);
const { txHash } = await contractClient.permitApp({
pkpEthAddress,
appId,
appVersion,
permissionData: policyParams,
});
stateManager.savePKPAppPermission(pkpEthAddress, appId, appVersion);
// Update Vincent app state with parameter values if not already saved
stateManager.updateVincentAppParameterValues(appId, policyParams);
await stateManager.saveState();
console.log(chalk_1.default.green(` Permitted app version for PKP: ${pkpEthAddress}`));
console.log(chalk_1.default.green(` App ID: ${appId}, Version: ${appVersion}`));
console.log(chalk_1.default.green(` Transaction: ${txHash}`));
return { txHash };
};
};
exports.createPermitAppVersionFunction = createPermitAppVersionFunction;
const createValidateAbilityExecutionFunction = (contractClient) => {
return async ({ delegateeAddress, pkpEthAddress, abilityIpfsCid, }) => {
console.log(chalk_1.default.blue(`=
Validating ability execution permissions...`));
const validationResult = await contractClient.validateAbilityExecutionAndGetPolicies({
delegateeAddress,
pkpEthAddress,
abilityIpfsCid,
});
console.log(chalk_1.default.blue(` - Is Permitted: ${validationResult.isPermitted}`));
console.log(chalk_1.default.blue(` - App ID: ${validationResult.appId}`));
console.log(chalk_1.default.blue(` - App Version: ${validationResult.appVersion}`));
return validationResult;
};
};
exports.createValidateAbilityExecutionFunction = createValidateAbilityExecutionFunction;