type Context = Record; type Permission = "add" | "delete" | "change" | "control" | "view" | string; interface Resource { "@id": string; "@type": string; properties: string[]; permissions: Permission[]; clientContext: Context; serverContext: Context; } interface Container extends Resource { "ldp:contains": T[]; } type ProxyValue = T extends Array ? U[] : { _originalResource: Resource } & T; type DateTime = string; interface User extends Resource { created_prestations: Container; tamis_profile: TamisProfile; } interface Group extends Resource { admin_prestation: Prestation; editor_prestation: Prestation; visitor_prestation: Prestation; } interface IAsset extends Resource { identifiants: Container; creation_date: DateTime; update_date: DateTime; } interface Asset extends IAsset { name: string; description: string; prestation: Prestation; media_resources: Container; } interface Agent extends Resource { name: string; short_name: string; } interface EditorialWork extends Resource { prestations: Container; } interface Commande extends Resource { title: string; client: Container; provider: Container; identifiants: Container; prestations: Container; } interface Client extends Resource { name: string; } interface Provider extends Resource { name: string; } interface Format extends Resource { identifier: string; } interface Identifiant extends Resource { identifier: string; issuer: Agent; } interface MediaResource extends IAsset { file_name: string; file_size: number; asset: Asset; format: Format; } interface Prestation extends Resource { name: string; creator: User; template_steps: Container; steps: Container; admins: Container; editors: Container; visitors: Container; assets: Container; editorial_work: EditorialWork; commande: Commande; start_date: DateTime; expected_delivery: DateTime; creation_date: DateTime; update_date: DateTime; } interface StepToTemplate extends Resource { template: PrestationStep; step: Step; order: number; validated: boolean; validation_date: DateTime; } interface PrestationStep extends Resource { is_template: boolean; prestation: Prestation; } interface Step extends Resource { templates: Container; } interface TamisProfile extends Resource { job: string; enterprise: string; }