UNPKG

@appsemble/lang-sdk

Version:

Language SDK for Appsemble

44 lines (43 loc) 1.78 kB
import { type AppPermission } from './permission.js'; import { type OwnResourceAction, type ResourceAction, type ResourceViewAction } from './resource.js'; import { type AppRole, type PredefinedAppRole } from './roles.js'; export type CustomAppResourcePermission = `$resource:${string}:${ResourceAction}`; export type CustomAppOwnResourcePermission = `$resource:${string}:own:${OwnResourceAction}`; export type CustomAppResourceViewPermission = `$resource:${string}:${ResourceViewAction}:${string}`; export type CustomAppWebhookPermission = `$webhook:${string}:invoke`; export type CustomAppGuestPermission = AppPermission | CustomAppResourcePermission | CustomAppResourceViewPermission | CustomAppWebhookPermission; export type CustomAppPermission = CustomAppGuestPermission | CustomAppOwnResourcePermission; export interface GuestDefinition { permissions?: CustomAppPermission[]; inherits?: AppRole[]; } export interface CronSecurityDefinition { permissions?: CustomAppPermission[]; inherits?: AppRole[]; } export interface RoleDefinition { description?: string; defaultPage?: string; inherits?: AppRole[]; permissions?: CustomAppPermission[]; } export type SecurityPolicy = 'everyone' | 'invite' | 'organization'; export interface MinimalSecurity { guest: GuestDefinition; cron?: CronSecurityDefinition; default?: { role: AppRole; policy?: SecurityPolicy; }; roles?: Record<Exclude<string, PredefinedAppRole>, RoleDefinition>; } export interface StrictSecurity { guest?: GuestDefinition; cron?: CronSecurityDefinition; default: { role: AppRole; policy?: SecurityPolicy; }; roles: Record<string, RoleDefinition>; } export type Security = MinimalSecurity | StrictSecurity;