UNPKG

@lit-protocol/vincent-scaffold-sdk

Version:

Shared build configuration and utilities for Vincent abilities and policies

113 lines (112 loc) 5.74 kB
"use strict"; 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;