[bug] fix broken updateProcess
Some checks failed
4NK Template Sync / check-and-sync (push) Has been cancelled

This commit is contained in:
Sosthene 2025-09-05 07:54:43 +02:00
parent 085b315883
commit a27ffd6462

View File

@ -625,31 +625,67 @@ export class Service {
// Core protocol method: Update Process
async updateProcess(
process: any,
process: Process,
privateData: Record<string, any>,
publicData: Record<string, any>,
roles: Record<string, any> | null
roles: Record<string, RoleDefinition> | null
): Promise<ApiReturn> {
console.log(`🔄 Updating process ${process.states[0]?.state_id || 'unknown'}`);
console.log(`🔄 Updating process ${process.states[0]?.commited_in || 'unknown'}`);
console.log('Private data:', privateData);
console.log('Public data:', publicData);
console.log('Roles:', roles);
if (!process || !process.states || process.states.length < 2) {
throw new Error('Process not found');
}
if (!roles || Object.keys(roles).length === 0) {
const state = this.getLastCommitedState(process);
if (state) {
roles = state.roles;
} else {
roles = process.states[0]?.roles;
}
} else {
console.log('Roles provided:', roles);
}
let members: Set<Member> = new Set();
for (const role of Object.values(roles!)) {
for (const member of role.members) {
members.add(member)
}
}
if (members.size === 0) {
// This must be a pairing process
// Check if we have a pairedAddresses in the public data
const publicData = process.states[0]?.public_data;
if (!publicData || !publicData['pairedAddresses']) {
throw new Error('Not a pairing process');
}
const decodedAddresses = this.decodeValue(publicData['pairedAddresses']);
if (decodedAddresses.length === 0) {
throw new Error('Not a pairing process');
}
members.add({ sp_addresses: decodedAddresses });
}
await this.checkConnections([...members]);
const privateSplitData = this.splitData(privateData);
const publicSplitData = this.splitData(publicData);
const encodedPrivateData = {
...wasm.encode_json(privateSplitData.jsonCompatibleData),
...wasm.encode_binary(privateSplitData.binaryData)
};
const encodedPublicData = {
...wasm.encode_json(publicSplitData.jsonCompatibleData),
...wasm.encode_binary(publicSplitData.binaryData)
};
try {
// Convert data to WASM format
const newAttributes = wasm.encode_json(privateData);
const newPublicData = wasm.encode_json(publicData);
const newRoles = roles || process.states[0]?.roles || {};
// Use WASM function to update process
const result = wasm.update_process(process, newAttributes, newRoles, newPublicData, this.membersList);
const result = wasm.update_process(process, encodedPrivateData, roles, encodedPublicData, this.membersList);
if (result.updated_process) {
// Update our cache
this.processes.set(result.updated_process.process_id, result.updated_process.current_process);
// Save to database
await this.saveProcessToDb(result.updated_process.process_id, result.updated_process.current_process);
await this.handleApiReturn(result);
return result;
} else {