diff --git a/src/sdk/models/FolderData.ts b/src/sdk/models/FolderData.ts index 134fbfe..475772b 100644 --- a/src/sdk/models/FolderData.ts +++ b/src/sdk/models/FolderData.ts @@ -1,3 +1,5 @@ +import type { RoleDefinition } from "./Roles"; + export interface FolderData { folderNumber: string; name: string; @@ -13,8 +15,109 @@ export interface FolderData { stakeholders: string[]; } +export function isFolderData(data: any): data is FolderData { + if (typeof data !== 'object' || data === null) return false; + + const requiredStringFields = [ + 'folderNumber', + 'name', + 'deedType', + 'description', + 'archived_description', + 'status', + 'created_at', + 'updated_at' + ]; + + for (const field of requiredStringFields) { + if (typeof data[field] !== 'string') return false; + } + + const requiredArrayFields = [ + 'customers', + 'documents', + 'motes', + 'stakeholders' + ]; + + for (const field of requiredArrayFields) { + if (!Array.isArray(data[field]) || !data[field].every((item: any) => typeof item === 'string')) { + return false; + } + } + + return true; +} + +const emptyFolderData: FolderData = { + folderNumber: '', + name: '', + deedType: '', + description: '', + archived_description: '', + status: '', + created_at: '', + updated_at: '', + customers: [], + documents: [], + motes: [], + stakeholders: [] +}; + +const folderDataFields: string[] = Object.keys(emptyFolderData); + +const FolderPublicFields: string[] = []; + +// All the attributes are private in that case +export const FolderPrivateFields = [ + ...folderDataFields.filter(key => !FolderPublicFields.includes(key)) +]; + export interface FolderCreated { processId: string, process: any, // Process folderData: FolderData, } + +export function setDefaultFolderRoles(ownerId: string, stakeholdersId: string[], customersId: string[]): Record { + return { + owner: { + members: [ownerId], + validation_rules: [ + { + quorum: 0.5, + fields: [...folderDataFields, 'roles'], + min_sig_member: 1, + }, + ], + storages: [] + }, + stakeholders: { + members: stakeholdersId, + validation_rules: [ + { + quorum: 0.5, + fields: ['documents', 'motes'], + min_sig_member: 1, + }, + ], + storages: [] + }, + customers: { + members: customersId, + validation_rules: [ + { + quorum: 0.0, + fields: folderDataFields, + min_sig_member: 0.0, + }, + ], + storages: [] + }, + apophis: { + members: [ownerId], + validation_rules: [], + storages: [] + } + } +}; diff --git a/src/sdk/models/Roles.ts b/src/sdk/models/Roles.ts new file mode 100644 index 0000000..7e22077 --- /dev/null +++ b/src/sdk/models/Roles.ts @@ -0,0 +1,11 @@ +export interface ValidationRule { + quorum: number, + fields: string[], + min_sig_member: number, +} + +export interface RoleDefinition { + members: string[], + validation_rules: ValidationRule[], + storages: string[] +}