From a27ffd64629f86df1faef39a6177f844bb6b84aa Mon Sep 17 00:00:00 2001 From: Sosthene Date: Fri, 5 Sep 2025 07:54:43 +0200 Subject: [PATCH] [bug] fix broken updateProcess --- src/service.ts | 70 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/src/service.ts b/src/service.ts index 62dc2d3..8315ad4 100644 --- a/src/service.ts +++ b/src/service.ts @@ -625,31 +625,67 @@ export class Service { // Core protocol method: Update Process async updateProcess( - process: any, + process: Process, privateData: Record, publicData: Record, - roles: Record | null + roles: Record | null ): Promise { - 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); - - 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); + 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 = 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 { + 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 {