diff --git a/src/simple-server.ts b/src/simple-server.ts index ae512ef..8614e5a 100644 --- a/src/simple-server.ts +++ b/src/simple-server.ts @@ -3,7 +3,7 @@ import { MessageType } from './models'; import { config } from './config'; import { Service } from './service'; import { ApiReturn, Process } from '../pkg/sdk_client'; -import { EMPTY32BYTES } from './utils'; +import { EMPTY32BYTES, splitPrivateData } from './utils'; interface ServerMessageEvent { data: { @@ -42,6 +42,52 @@ class SimpleProcessHandlers { return apiKey === this.apiKey; } + async handleCreateProcess(event: ServerMessageEvent): Promise { + if (event.data.type !== MessageType.CREATE_PROCESS) { + throw new Error('Invalid message type'); + } + + if (!this.service.isPaired()) { + throw new Error('Device not paired'); + } + + try { + const { processData, privateFields, roles, exclusionRules, apiKey } = event.data; + + if (!apiKey || !this.validateApiKey(apiKey)) { + throw new Error('Invalid API key'); + } + + const { privateData, publicData } = splitPrivateData(processData, privateFields); + + const createProcessReturn = await this.service.createProcess(privateData, publicData, roles); + if (!createProcessReturn.updated_process) { + throw new Error('Empty updated_process in createProcessReturn'); + } + console.log('🚀 ~ handleCreateProcess ~ createProcessReturn:', createProcessReturn); + const processId = createProcessReturn.updated_process.process_id; + const process = createProcessReturn.updated_process.current_process; + await this.service.handleApiReturn(createProcessReturn); + + const processCreated = { + processId, + process, + processData, + } + + return { + type: MessageType.PROCESS_CREATED, + processCreated, + messageId: event.data.messageId + }; + } catch (e) { + const errorMessage = e instanceof Error ? e.message : String(e || 'Unknown error'); + // Remove redundant "Error:" prefix and simplify the message + const cleanMessage = errorMessage.replace(/^Error:\s*/, ''); + throw new Error(cleanMessage); + } + } + async handleNotifyUpdate(event: ServerMessageEvent): Promise { if (event.data.type !== MessageType.NOTIFY_UPDATE) { throw new Error('Invalid message type'); @@ -281,6 +327,8 @@ class SimpleProcessHandlers { async handleMessage(event: ServerMessageEvent): Promise { try { switch (event.data.type) { + case MessageType.CREATE_PROCESS: + return await this.handleCreateProcess(event); case MessageType.NOTIFY_UPDATE: return await this.handleNotifyUpdate(event); case MessageType.VALIDATE_STATE: