import { createKeyValueSection } from './key-value-section'; import { loadValidationRuleModal } from '../../components/validation-rule-modal/validation-rule-modal'; import Services from '../../services/service'; import type { RoleDefinition } from '../../../pkg/sdk_client'; export async function getProcessCreation(container: HTMLElement) { await loadValidationRuleModal(); container.style.display = 'block'; container.innerHTML = `
Process Creation
`; const privateSec = createKeyValueSection('Private Data', 'private-section'); const publicSec = createKeyValueSection('Public Data', 'public-section'); const rolesSec = createKeyValueSection('Roles', 'roles-section', true); container.appendChild(privateSec.element); container.appendChild(publicSec.element); container.appendChild(rolesSec.element); const btn = document.createElement('button'); btn.textContent = 'Create Process'; btn.style.cssText = ` display: block; margin: 2rem auto 0; padding: 0.75rem 2rem; font-size: 1rem; font-weight: bold; background-color: #4f46e5; color: white; border: none; border-radius: 0.5rem; cursor: pointer; `; btn.onclick = async () => { const privateData = privateSec.getData(); const publicData = publicSec.getData(); const roles = rolesSec.getData() as Record; console.log('Private:', privateData); console.log('Public:', publicData); console.log('Roles:', roles); const service = await Services.getInstance(); const createProcessResult = await service.createProcess(privateData, publicData, roles); const processId = createProcessResult.updated_process!.process_id; const stateId = createProcessResult.updated_process!.current_process.states[0].state_id; await service.handleApiReturn(createProcessResult); // Now we want to validate the update and register the first state of our new process const updateProcessResult = await service.createPrdUpdate(processId, stateId); await service.handleApiReturn(createProcessResult); const approveChangeResult = await service.approveChange(processId, stateId); await service.handleApiReturn(approveChangeResult); if (approveChangeResult) { const process = await service.getProcess(processId); let newState = process ? service.getStateFromId(process, stateId) : null; if (!newState) return; for (const label of Object.keys(newState.keys)) { const hash = newState.pcd_commitment[label]; const encryptedData = await service.getBlobFromDb(hash); if (!encryptedData) continue; const filename = `${label}-${hash.slice(0,8)}.bin`; const blob = new Blob([encryptedData], { type: "application/octet-stream" }); const link = document.createElement("a"); link.href = URL.createObjectURL(blob); link.download = filename; link.click(); setTimeout(() => URL.revokeObjectURL(link.href), 1000); } // await service.generateProcessPdf(processId, newState); // Add processId to the state we export // newState n'a pas de propriété process_id, on utilise commited_in // newState['process_id'] = processId; const blob = new Blob([JSON.stringify(newState, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `process_${processId}_${stateId}.json`; a.click(); URL.revokeObjectURL(url); // Clean up } }; container.appendChild(btn); }