fix: use consistent array format for all WebAssembly functions

**Motivations :**
- Fix WebAssembly serialization error: 'invalid type: map, expected a sequence'
- WebAssembly expects array/sequence format, not object/map format
- Ensure all WebAssembly functions use the same array format consistently
- Convert object members to array format for all WebAssembly calls

**Modifications :**
- create_new_process: Convert members object to array format
- validate_state: Convert members object to array format
- parse_cipher: Convert members object to array format
- request_data: Convert members object to array format
- All functions now consistently use Object.values().map() to create arrays
- Maintained sp_addresses structure in array format

**Pages affectées :**
- src/services/service.ts: Standardized all WebAssembly functions to use array format
This commit is contained in:
NicolasCantu 2025-10-23 22:27:16 +02:00
parent 1a4a751485
commit 82f8fc4303

View File

@ -903,11 +903,12 @@ export default class Services {
throw new Error('No members available - handshake not completed yet'); throw new Error('No members available - handshake not completed yet');
} }
// Convert to the exact format expected by WebAssembly // Convert to array format for WebAssembly (it expects a sequence, not a map)
// WebAssembly expects a map/object, not an array const members = Object.values(membersObj).map(member => ({
const members = membersObj; sp_addresses: member.sp_addresses
console.log('🔍 DEBUG: Members object keys:', Object.keys(members)); }));
console.log('🔍 DEBUG: Members object sample:', Object.entries(members).slice(0, 3)); console.log('🔍 DEBUG: Members array length:', members.length);
console.log('🔍 DEBUG: Members array sample:', members.slice(0, 3));
const result = this.sdkClient.create_new_process( const result = this.sdkClient.create_new_process(
encodedPrivateData, encodedPrivateData,
@ -1010,7 +1011,9 @@ export default class Services {
throw new Error('Failed to get process from db'); throw new Error('Failed to get process from db');
} }
try { try {
const members = this.getAllMembers(); const members = Object.values(this.getAllMembers()).map(member => ({
sp_addresses: member.sp_addresses
}));
const result = this.sdkClient.validate_state(process, stateId, members); const result = this.sdkClient.validate_state(process, stateId, members);
if (result.updated_process) { if (result.updated_process) {
await this.checkConnections(result.updated_process.current_process); await this.checkConnections(result.updated_process.current_process);
@ -1067,7 +1070,9 @@ export default class Services {
} }
async parseCipher(message: string) { async parseCipher(message: string) {
const membersList = this.getAllMembers(); const membersList = Object.values(this.getAllMembers()).map(member => ({
sp_addresses: member.sp_addresses
}));
const processes = await this.getProcesses(); const processes = await this.getProcesses();
try { try {
// console.log('parsing new cipher'); // console.log('parsing new cipher');
@ -2499,7 +2504,9 @@ export default class Services {
roles: Record<string, RoleDefinition>[] roles: Record<string, RoleDefinition>[]
) { ) {
console.log('Requesting data from peers'); console.log('Requesting data from peers');
const membersList = this.getAllMembers(); const membersList = Object.values(this.getAllMembers()).map(member => ({
sp_addresses: member.sp_addresses
}));
try { try {
// Convert objects to strings for WASM compatibility // Convert objects to strings for WASM compatibility
const rolesString = JSON.stringify(roles); const rolesString = JSON.stringify(roles);