// Auto-generated API metadata // DO NOT EDIT MANUALLY // Generated from backend/app/controllers/routes.go export interface ApiMeta { requiresTenant: boolean registrar: 'Admin' | 'Tenant' | 'Authed' | 'Auth' | 'API' | 'OpenAPI' | 'SetupOnly' | 'PEAdmin' } /** * Check if an API endpoint requires tenant context * * @param method - HTTP method (GET, POST, etc.) * @param path - API path (can contain dynamic params) * @returns true if tenant context is required */ export function requiresTenantContext(method: string, path: string): boolean { const key = `${method.toUpperCase()} ${normalizeApiPath(path)}` return TENANT_REQUIRED_ROUTES.has(key) } /** * Get API metadata for a specific endpoint * * @param method - HTTP method * @param path - API path * @returns API metadata or null if not found */ export function getApiMeta(method: string, path: string): ApiMeta | null { const key = `${method.toUpperCase()} ${normalizeApiPath(path)}` return API_META_MAP.get(key) || null } /** * Normalize API path to match route patterns * Converts dynamic segments like /123 or /abc-123-def to /:param */ function normalizeApiPath(path: string): string { if (!path) return '' // Split path into segments const segments = path.split('/').filter(s => s) const normalized: string[] = [] for (const segment of segments) { // Keep known static segments if (segment.match(/^(api|apps|admin|copilot|dashboard|oauth|open|setup|kiosk|automate-rule|dataset|developer|departments|entity|shared-link|upload|users|watch-data|connections|collections|items|submissions|tokens|config|permissions|custom_domain)$/)) { normalized.push(segment) continue } // Convert numeric IDs to :app_id, :entity_id, etc. if (segment.match(/^\d+$/)) { normalized.push(':id') continue } // Convert UUIDs to :id if (segment.match(/^[a-f0-9-]{36}$/i)) { normalized.push(':id') continue } // Other dynamic segments normalized.push(':param') } return '/' + normalized.join('/') } // Tenant-required routes (for fast lookup) const TENANT_REQUIRED_ROUTES = new Set([ 'GET /api/config/aws', 'GET /api/permissions/predefined', 'POST /api/apps', 'DELETE /api/apps/:app_id', 'POST /api/apps/:app_id/dashboard', 'GET /api/apps/:app_id/dashboard', 'PUT /api/apps/:app_id/dashboard/:dashboard_id/layout', 'PUT /api/apps/:app_id/dashboard/:dashboard_id/label', 'PUT /api/apps/:app_id/dashboard/:dashboard_id/options', 'GET /api/apps/:app_id/dashboard/:dashboard_id/options', 'POST /api/oauth/client-token', 'POST /api/copilot/init', 'POST /api/copilot/send-message', 'POST /api/apps/:app_id/entity/:entity_id/automate-rules', 'PUT /api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', 'DELETE /api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', 'GET /api/apps/:app_id/entity/:entity_id/automate-rules', 'GET /api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', 'GET /api/business-hooks/available-hooklets', 'GET /api/apps/:app_id/business-hooks/connections', 'POST /api/context/user-token', 'GET /api/apps/:app_id/dataset', 'DELETE /api/apps/:app_id/dataset/:id', 'POST /api/apps/:app_id/dataset', 'GET /api/apps/:app_id/dataset/:id/:node_id', 'POST /api/apps/:app_id/dataset/:id/:node_id', 'PUT /api/apps/:app_id/dataset/:id/:node_id', 'DELETE /api/apps/:app_id/dataset/:id/:node_id', 'GET /api/apps/:app_id/dataset/:id/:node_id/child', 'PUT /api/apps/:app_id/dataset/:id/:node_id/move', 'POST /api/apps/:app_id/dataset/import', 'POST /api/apps/:app_id/dataset/export/:id', 'GET /api/developer/clients', 'POST /api/developer/clients', 'GET /api/developer/clients/:hash_id', 'PUT /api/developer/clients/:hash_id', 'DELETE /api/developer/clients/:hash_id', 'POST /api/developer/clients/:hash_id/secrets', 'GET /api/developer/clients/:hash_id/secrets', 'DELETE /api/developer/clients/:hash_id/secrets/:secret_hash_id', 'GET /api/developer/clients/:hash_id/hooklets', 'POST /api/developer/clients/:hash_id/hooklets', 'GET /api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', 'PUT /api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', 'DELETE /api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', 'GET /api/platform/dataset', 'DELETE /api/platform/dataset/:id', 'POST /api/platform/dataset', 'GET /api/platform/dataset/:id/:node_id', 'POST /api/platform/dataset/:id/:node_id', 'PUT /api/platform/dataset/:id/:node_id', 'DELETE /api/platform/dataset/:id/:node_id', 'GET /api/platform/dataset/:id/:node_id/child', 'PUT /api/platform/dataset/:id/:node_id/move', 'POST /api/platform/dataset/import', 'GET /api/apps/:app_id', 'GET /api/ingress/:app_id/:ingress_id', 'PUT /api/ingress/:app_id/:ingress_id/options-tabber', 'GET /api/entity/:app_id/:entity_id', 'POST /api/entity/:app_id/:entity_id/insert', 'POST /api/entity/:app_id/:entity_id/prepare', 'POST /api/entity/:app_id/:entity_id/import-ai-config', 'POST /api/entity/:app_id/:entity_id/data-query', 'POST /api/entity/:app_id/:entity_id/query-keeper', 'POST /api/entity/:app_id/:entity_id/validate-uniq', 'POST /api/entity/:app_id/:entity_id/user-token', 'POST /api/entity/:app_id/:entity_id/query-rel', 'POST /api/entity/:app_id/:entity_id/query-linkto-pick', 'POST /api/entity/:app_id/:entity_id/query-linkto-values', 'POST /api/entity/:app_id/:entity_id/query-subform-rel', 'POST /api/entity/:app_id/:entity_id/query-workflow-nodes', 'POST /api/entity/:app_id/:entity_id/query-approve-users', 'POST /api/entity/:app_id/:entity_id/resolve-workflow', 'POST /api/entity/:app_id/:entity_id/query-filter', 'POST /api/entity/:app_id/:entity_id/invoke-batch-operator', 'POST /api/entity/:app_id/:entity_id/invoke/:action_id', 'GET /api/entity/:app_id/:entity_id/row/:row_id', 'PUT /api/entity/:app_id/:entity_id/row/:row_id', 'POST /api/entity/:app_id/:entity_id/row/:row_id/get-subitems', 'POST /api/entity/:app_id/:entity_id/row/:row_id/action/:action', 'POST /api/entity/:app_id/:entity_id/convert/:action_code', 'GET /api/entity/:app_id/:entity_id/row/:row_id/process-map', 'POST /api/entity/:app_id/:entity_id/row/:row_id/log-query', 'POST /api/entity/:app_id/:entity_id/row/:row_id/comment-query', 'POST /api/entity/:app_id/:entity_id/row/:row_id/comment-add', 'POST /api/entity/:app_id/:entity_id/row/:row_id/comment-delete', 'POST /api/entity/:app_id/:entity_id/print-templates', 'POST /api/entity/:app_id/:entity_id/selection-query/:action', 'POST /api/entity/:app_id/:entity_id/delete-item', 'POST /api/entity/:app_id/:entity_id/restore-item', 'POST /api/entity/:app_id/:entity_id/bulk-update', 'POST /api/entity/:app_id/:entity_id/bulk-update-save-as', 'POST /api/entity/:app_id/:entity_id/export', 'GET /api/export-task/:id', 'POST /api/entity/:app_id/:entity_id/import', 'POST /api/entity/:app_id/:entity_id/import-prepare', 'GET /api/user-action-entity/:app_id/:entity_id/tag-names', 'POST /api/user-action-entity/:app_id/:entity_id/batch-add-tags', 'POST /api/user-action-entity/:app_id/:entity_id/batch-remove-tags', 'POST /api/user-action-entity/:app_id/:entity_id/get-selection-tags', 'GET /api/dashboard/:app_id/:dashboard_id', 'GET /api/dashboard/:app_id/:dashboard_id/widgets', 'POST /api/apps/:app_id/widgets-data', 'GET /api/user-profile', 'PUT /api/user-profile', 'PUT /api/user-profile/update-avatar', 'GET /api/user-profile/auth-channels', 'POST /api/user-profile/change-password', 'GET /api/dataset/:id/:node_id', 'POST /api/upload/token', 'POST /api/upload/mobile-upload', 'POST /api/upload/mobile-upload/check', 'POST /api/upload/preview', 'POST /api/organization/departments/tree', 'POST /api/organization/users', 'GET /api/apps/:app_id/kiosk', 'DELETE /api/apps/:app_id/entity/:entity_id', 'GET /api/apps/:app_id/entity-recycle', 'GET /api/apps/:app_id/entity/:entity_id/restore-fields', 'GET /api/apps/:app_id/entity/:entity_id/restore-data', 'POST /api/apps/:app_id/entity/:entity_id/serial-initval', 'GET /api/apps/:app_id/entity/:entity_id', 'PUT /api/apps/:app_id/entity/:entity_id', 'PUT /api/apps/:app_id/entity/:entity_id/name', 'GET /api/apps/:app_id/entity/:entity_id/workflow', 'POST /api/apps/:app_id/entity/:entity_id/workflow/new', 'POST /api/apps/:app_id/entity/:entity_id/workflow/deploy', 'POST /api/apps/:app_id/entity/:entity_id/workflow', 'POST /api/apps/:app_id/entity/:entity_id/invoke-debug', 'POST /api/apps/:app_id/entity/:entity_id/clone', 'PUT /api/apps/:app_id/entity/:entity_id/custom-keys', 'PUT /api/apps/:app_id/entity/:entity_id/notifications', 'POST /api/apps/:app_id/entity/:entity_id/test-notification', 'PUT /api/apps/:app_id/entity/:entity_id/buttons', 'PUT /api/apps/:app_id/entity/:entity_id/success-screen', 'PUT /api/apps/:app_id/entity/:entity_id/options', 'GET /api/apps/:app_id/entity/:entity_id/print-templates', 'POST /api/apps/:app_id/entity/:entity_id/print-templates', 'GET /api/apps/:app_id/entity/:entity_id/print-templates/:id', 'PUT /api/apps/:app_id/entity/:entity_id/print-templates/:id', 'DELETE /api/apps/:app_id/entity/:entity_id/print-templates/:id', 'POST /api/apps/:app_id/entity/:entity_id/print-templates/:id/background', 'DELETE /api/apps/:app_id/entity/:entity_id/print-templates/:id/background', 'GET /api/apps/:app_id/entity/:entity_id/kiosk-flow', 'POST /api/apps/:app_id/entity/:entity_id/kiosk-flow', 'GET /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', 'PUT /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', 'POST /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id/clone', 'DELETE /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', 'PUT /api/apps/:app_id/i18n', 'POST /api/apps/:app_id/schema', 'POST /api/apps/:app_id/entities', 'PUT /api/apps/:app_id', 'PUT /api/apps/:app_id/name', 'GET /api/apps/:app_id/entities', 'GET /api/apps/:app_id/sitemap', 'PUT /api/apps/:app_id/sitemap', 'GET /api/apps/:app_id/entity/:entity_id/ingress', 'POST /api/apps/:app_id/entity/:entity_id/ingress', 'GET /api/apps/:app_id/entity/:entity_id/ingress/:id', 'PUT /api/apps/:app_id/entity/:entity_id/ingress/:id', 'GET /api/apps/:app_id/entity/:entity_id/ingress-h/:id', 'PUT /api/apps/:app_id/entity/:entity_id/ingress-h/:id', 'PUT /api/apps/:app_id/entity/:entity_id/ingress-blocks/:id', 'GET /api/apps/:app_id/entity/:entity_id/ingress-blocks/:id', 'DELETE /api/apps/:app_id/entity/:entity_id/ingress/:id', 'POST /api/apps/:app_id/widgets-preview', 'GET /api/apps/:app_id/widgets', 'POST /api/apps/:app_id/widgets', 'DELETE /api/apps/:app_id/widgets/:widgets_id', 'GET /api/apps/:app_id/widgets/:widgets_id', 'PUT /api/apps/:app_id/widgets/:widgets_id', 'PUT /api/apps/:app_id/widgets/:widgets_id/ingress-options', 'GET /api/apps/:app_id/entity-shares', 'POST /api/apps/:app_id/entity-shares', 'DELETE /api/apps/:app_id/entity-shares', 'GET /api/system-map', 'GET /api/tenants', 'GET /api/tenant/usage/snapshot', 'GET /api/tenant/usage/daily', 'POST /api/tenants/config/get', 'PUT /api/tenants/config/update', 'PUT /api/tenants/config/update-usermeta', 'PUT /api/tenants/config/update-name', 'PUT /api/tenants/config/update-icon', 'PUT /api/tenants/config/update-logo', 'PUT /api/tenants/config/update-auth', 'PUT /api/tenants/config/update-auth-bgimage', 'PUT /api/tenants/config/update-mail', 'GET /api/api-service/', 'GET /api/api-service/:api_service_id', 'GET /api/admin/custom_domain', 'POST /api/admin/custom_domain', 'POST /api/admin/custom_domain/verify_owner', 'GET /api/kiosk-flows/list', 'GET /api/kiosk-group', 'POST /api/kiosk-group', 'GET /api/kiosk-group/:id', 'PUT /api/kiosk-group/:id', 'DELETE /api/kiosk-group/:id', 'POST /api/organization/service-account/create', 'POST /api/organization/service-account/renew-token', 'POST /api/organization/employee-account/create', 'POST /api/organization/employee-account/changePassword', 'GET /api/organization/department-policy/:id', 'PUT /api/organization/department-policy/:id', 'POST /api/organization/invite/invite-code-switch', 'POST /api/organization/invite/invite-code-history', 'POST /api/organization/invite/one-by-one', 'POST /api/organization/invite/resend', 'POST /api/organization/invite/make-link', 'POST /api/organization/departments/list', 'POST /api/organization/list-users', 'POST /api/organization/actors/list', 'POST /api/organization/actors/add', 'POST /api/organization/actors/delete', 'GET /api/organization/users/:tenant_user_id', 'PUT /api/organization/users/:tenant_user_id', 'DELETE /api/organization/users/:tenant_user_id', 'POST /api/organization/departments/add', 'DELETE /api/organization/departments/:id', 'PUT /api/organization/departments/:id/rename', 'PUT /api/organization/departments/:id/relocate', 'POST /api/platform/runtime', 'POST /api/platform/ds', 'POST /api/platform/services', 'POST /api/platform/customFieldType', 'POST /api/platform/auth-methods', 'GET /api/platform/extension', 'POST /api/platform/extension', 'GET /api/platform/extension/:id', 'PUT /api/platform/extension/:id', 'DELETE /api/platform/extension/:id', 'POST /api/platform/extension/:id/connect', 'POST /api/platform/extension/:id/files', 'GET /api/platform/message-templates/defined', 'GET /api/platform/message-templates', 'POST /api/platform/message-templates', 'GET /api/platform/message-templates/:id', 'PUT /api/platform/message-templates/:id', 'DELETE /api/platform/message-templates/:id', 'GET /api/platform/tenant-levels', 'POST /api/platform/tenant-levels', 'GET /api/platform/tenant-levels/:id', 'PUT /api/platform/tenant-levels/:id', 'DELETE /api/platform/tenant-levels/:id', 'GET /api/platform/tenants', 'GET /api/platform/tenants/:id', 'PUT /api/platform/tenants/:id', 'GET /api/platform/app-templates', 'POST /api/platform/app-templates', 'GET /api/platform/app-templates/:id', 'PUT /api/platform/app-templates/:id', 'DELETE /api/platform/app-templates/:id', 'GET /api/platform/static-links', 'POST /api/platform/static-links', 'GET /api/platform/static-links/:id', 'PUT /api/platform/static-links/:id', 'DELETE /api/platform/static-links/:id', 'GET /api/platform/embedded-app', 'POST /api/platform/embedded-app', 'GET /api/platform/embedded-app/:id', 'PUT /api/platform/embedded-app/:id', 'DELETE /api/platform/embedded-app/:id', 'GET /api/platform/admin', 'POST /api/platform/admin', 'GET /api/platform/admin/:id', 'PUT /api/platform/admin/:id', 'DELETE /api/platform/admin/:id', 'GET /api/platform/api-service', 'POST /api/platform/api-service', 'GET /api/platform/api-service/:id', 'PUT /api/platform/api-service/:id', 'DELETE /api/platform/api-service/:id', 'POST /api/platform/oauth-clients', 'POST /api/platform/config/get', 'PUT /api/platform/config/update', 'POST /api/flows', 'POST /api/flows/status', 'GET /api/kiosk/:kiosk_group_hashid/entry', 'GET /api/kiosk/:kiosk_group_hashid/flow/:kiosk_id', 'GET /api/kiosk-flow/:kiosk_id/search-and-lock', 'POST /api/kiosk-flow/:kiosk_id/create', 'POST /api/kiosk-flow/:kiosk_id/update', 'POST /api/kiosk-flow/:kiosk_id/check-print-duplicate', 'POST /api/kiosk-flow/:kiosk_id/record-print' ]) // Complete API metadata map const API_META_MAP = new Map([ ['GET /api/config/aws', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/permissions/predefined', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/dashboard', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/dashboard', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/dashboard/:dashboard_id/layout', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/dashboard/:dashboard_id/label', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/dashboard/:dashboard_id/options', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/dashboard/:dashboard_id/options', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/oauth/client-token', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/copilot/init', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/copilot/send-message', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/apps/:app_id/entity/:entity_id/automate-rules', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/automate-rules', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/business-hooks/available-hooklets', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/apps/:app_id/business-hooks/connections', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/context/user-token', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/apps/:app_id/dataset', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/dataset/:id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/dataset', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/dataset/:id/:node_id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/dataset/:id/:node_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/dataset/:id/:node_id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/dataset/:id/:node_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/dataset/:id/:node_id/child', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/dataset/:id/:node_id/move', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/dataset/import', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/dataset/export/:id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/developer/clients', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/developer/clients', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/developer/clients/:hash_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/developer/clients/:hash_id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/developer/clients/:hash_id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/developer/clients/:hash_id/secrets', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/developer/clients/:hash_id/secrets', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/developer/clients/:hash_id/secrets/:secret_hash_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/developer/clients/:hash_id/hooklets', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/developer/clients/:hash_id/hooklets', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/platform/dataset', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/dataset/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/dataset', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/dataset/:id/:node_id', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/dataset/:id/:node_id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/dataset/:id/:node_id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/dataset/:id/:node_id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/dataset/:id/:node_id/child', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/dataset/:id/:node_id/move', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/dataset/import', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/apps/:app_id', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/ingress/:app_id/:ingress_id', { requiresTenant: true, registrar: 'Tenant' }], ['PUT /api/ingress/:app_id/:ingress_id/options-tabber', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/entity/:app_id/:entity_id', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/insert', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/prepare', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/import-ai-config', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/data-query', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-keeper', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/validate-uniq', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/user-token', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-rel', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-linkto-pick', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-linkto-values', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-subform-rel', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-workflow-nodes', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-approve-users', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/resolve-workflow', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/query-filter', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/invoke-batch-operator', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/invoke/:action_id', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/entity/:app_id/:entity_id/row/:row_id', { requiresTenant: true, registrar: 'Tenant' }], ['PUT /api/entity/:app_id/:entity_id/row/:row_id', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/row/:row_id/get-subitems', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/row/:row_id/action/:action', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/convert/:action_code', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/entity/:app_id/:entity_id/row/:row_id/process-map', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/row/:row_id/log-query', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/row/:row_id/comment-query', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/row/:row_id/comment-add', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/row/:row_id/comment-delete', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/print-templates', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/selection-query/:action', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/delete-item', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/restore-item', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/bulk-update', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/bulk-update-save-as', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/export', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/export-task/:id', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/import', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/entity/:app_id/:entity_id/import-prepare', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/user-action-entity/:app_id/:entity_id/tag-names', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/user-action-entity/:app_id/:entity_id/batch-add-tags', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/user-action-entity/:app_id/:entity_id/batch-remove-tags', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/user-action-entity/:app_id/:entity_id/get-selection-tags', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/dashboard/:app_id/:dashboard_id', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/dashboard/:app_id/:dashboard_id/widgets', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/apps/:app_id/widgets-data', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/user-profile', { requiresTenant: true, registrar: 'Tenant' }], ['PUT /api/user-profile', { requiresTenant: true, registrar: 'Tenant' }], ['PUT /api/user-profile/update-avatar', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/user-profile/auth-channels', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/user-profile/change-password', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/dataset/:id/:node_id', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/upload/token', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/upload/mobile-upload', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/upload/mobile-upload/check', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/upload/preview', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/organization/departments/tree', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/organization/users', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/apps/:app_id/kiosk', { requiresTenant: true, registrar: 'Tenant' }], ['DELETE /api/apps/:app_id/entity/:entity_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity-recycle', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/restore-fields', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/restore-data', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/serial-initval', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/name', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/workflow', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/workflow/new', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/workflow/deploy', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/workflow', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/invoke-debug', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/clone', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/custom-keys', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/notifications', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/test-notification', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/buttons', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/success-screen', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/options', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/print-templates', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/print-templates', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/print-templates/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/print-templates/:id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/entity/:entity_id/print-templates/:id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/print-templates/:id/background', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/entity/:entity_id/print-templates/:id/background', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/kiosk-flow', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/kiosk-flow', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id/clone', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/i18n', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/schema', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entities', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/name', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entities', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/sitemap', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/sitemap', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/ingress', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity/:entity_id/ingress', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/ingress/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/ingress/:id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/ingress-h/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/ingress-h/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/entity/:entity_id/ingress-blocks/:id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity/:entity_id/ingress-blocks/:id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/entity/:entity_id/ingress/:id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/widgets-preview', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/widgets', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/widgets', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/widgets/:widgets_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/widgets/:widgets_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/widgets/:widgets_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/apps/:app_id/widgets/:widgets_id/ingress-options', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/apps/:app_id/entity-shares', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/apps/:app_id/entity-shares', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/apps/:app_id/entity-shares', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/system-map', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/tenants', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/tenant/usage/snapshot', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/tenant/usage/daily', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/tenants/config/get', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-usermeta', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-name', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-icon', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-logo', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-auth', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-auth-bgimage', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/tenants/config/update-mail', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/api-service/', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/api-service/:api_service_id', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/admin/custom_domain', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/admin/custom_domain', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/admin/custom_domain/verify_owner', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/kiosk-flows/list', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/kiosk-group', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/kiosk-group', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/kiosk-group/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/kiosk-group/:id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/kiosk-group/:id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/service-account/create', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/service-account/renew-token', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/employee-account/create', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/employee-account/changePassword', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/organization/department-policy/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/organization/department-policy/:id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/invite/invite-code-switch', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/invite/invite-code-history', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/invite/one-by-one', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/invite/resend', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/invite/make-link', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/departments/list', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/list-users', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/actors/list', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/actors/add', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/actors/delete', { requiresTenant: true, registrar: 'Admin' }], ['GET /api/organization/users/:tenant_user_id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/organization/users/:tenant_user_id', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/organization/users/:tenant_user_id', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/organization/departments/add', { requiresTenant: true, registrar: 'Admin' }], ['DELETE /api/organization/departments/:id', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/organization/departments/:id/rename', { requiresTenant: true, registrar: 'Admin' }], ['PUT /api/organization/departments/:id/relocate', { requiresTenant: true, registrar: 'Admin' }], ['POST /api/platform/runtime', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/ds', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/services', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/customFieldType', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/auth-methods', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/extension', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/extension', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/extension/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/extension/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/extension/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/extension/:id/connect', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/extension/:id/files', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/message-templates/defined', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/message-templates', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/message-templates', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/message-templates/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/message-templates/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/message-templates/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/tenant-levels', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/tenant-levels', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/tenant-levels/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/tenant-levels/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/tenant-levels/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/tenants', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/tenants/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/tenants/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/app-templates', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/app-templates', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/app-templates/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/app-templates/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/app-templates/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/static-links', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/static-links', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/static-links/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/static-links/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/static-links/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/embedded-app', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/embedded-app', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/embedded-app/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/embedded-app/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/embedded-app/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/admin', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/admin', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/admin/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/admin/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/admin/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/api-service', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/api-service', { requiresTenant: true, registrar: 'PEAdmin' }], ['GET /api/platform/api-service/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/api-service/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['DELETE /api/platform/api-service/:id', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/oauth-clients', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/platform/config/get', { requiresTenant: true, registrar: 'PEAdmin' }], ['PUT /api/platform/config/update', { requiresTenant: true, registrar: 'PEAdmin' }], ['POST /api/flows', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/flows/status', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/kiosk/:kiosk_group_hashid/entry', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/kiosk/:kiosk_group_hashid/flow/:kiosk_id', { requiresTenant: true, registrar: 'Tenant' }], ['GET /api/kiosk-flow/:kiosk_id/search-and-lock', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/kiosk-flow/:kiosk_id/create', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/kiosk-flow/:kiosk_id/update', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/kiosk-flow/:kiosk_id/check-print-duplicate', { requiresTenant: true, registrar: 'Tenant' }], ['POST /api/kiosk-flow/:kiosk_id/record-print', { requiresTenant: true, registrar: 'Tenant' }], ['POST /open/api/oauth/token', { requiresTenant: false, registrar: 'API' }], ['GET /api/oauth/client-info/:client_id', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/oauth/get-authorize-code', { requiresTenant: false, registrar: 'Authed' }], ['POST /setup/api/status', { requiresTenant: false, registrar: 'SetupOnly' }], ['POST /setup/api/init-system', { requiresTenant: false, registrar: 'SetupOnly' }], ['GET /api/entry', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/tenant', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/tenant/set-default', { requiresTenant: false, registrar: 'Authed' }], ['GET /api/link/:name', { requiresTenant: false, registrar: 'Authed' }], ['GET /api/tenant/authrole', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/auth/resend-email-verify', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/auth/email-verify-status', { requiresTenant: false, registrar: 'Authed' }], ['GET /api/user-profile/set-email', { requiresTenant: false, registrar: 'Authed' }], ['DELETE /api/user-profile/set-email/:hashid', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/user-profile/set-email', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/auth/email-verify', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/tenant/accept-invitation', { requiresTenant: false, registrar: 'Authed' }], ['GET /api/tenant/invitation-link/:id', { requiresTenant: false, registrar: 'Authed' }], ['POST /api/tenant/accept-invitation-link', { requiresTenant: false, registrar: 'Authed' }], ['GET /api/auth/strategy', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/login', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/employee-id-login', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/login-with-idcard', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/login-credential', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/account/register', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/send-reset-email', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/verify-reset-email/:id', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/reset-password/:id', { requiresTenant: false, registrar: 'Auth' }], ['POST /api/auth/set-email-verify', { requiresTenant: false, registrar: 'Auth' }], ['GET /open/api/v1/apps/:app_id/collections', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/apps/:app_id/collections/:entity_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/apps/:app_id/collections/:entity_id/item-by-field/:field_id/:value', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/apps/:app_id/collections/:entity_id/items', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/collections/:entity_id/items', { requiresTenant: false, registrar: 'OpenAPI' }], ['PUT /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['DELETE /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/lock', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/unlock', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/subform/:field_id/', { requiresTenant: false, registrar: 'OpenAPI' }], ['PUT /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/subform/:field_id/items/:sub_row_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['DELETE /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/subform/:field_id/items/:sub_row_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/collections/:entity_id/submission-token', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/update-token', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/uploads/token', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/uploads/preview', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/users/:tenant_user_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/user-token/:token', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/watch-data', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/connections', { requiresTenant: false, registrar: 'OpenAPI' }], ['PUT /open/api/v1/apps/:app_id/connections/:connection_id', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/apps/:app_id/connections/:connection_id/usage', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/me', { requiresTenant: false, registrar: 'OpenAPI' }], ['GET /open/api/v1/tenants', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /open/api/v1/switch-tenant', { requiresTenant: false, registrar: 'OpenAPI' }], ['POST /link/api/init', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/submission/submit', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/entity/:app_id/:entity_id/validate-uniq', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/entity/:app_id/:entity_id/query-rel', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/upload/token', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/upload/preview', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/upload/mobile-upload', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/upload/mobile-upload/push', { requiresTenant: false, registrar: 'API' }], ['POST /link/api/form/upload/mobile-upload/check', { requiresTenant: false, registrar: 'API' }], ['GET /link/api/form/dataset/:id/:node_id', { requiresTenant: false, registrar: 'API' }], ['GET /api/kiosk/:kiosk_group_hashid', { requiresTenant: false, registrar: 'API' }], ['POST /api/kiosk/:kiosk_group_hashid/validate', { requiresTenant: false, registrar: 'API' }], ['POST /api/kiosk/:kiosk_group_hashid/register-node', { requiresTenant: false, registrar: 'API' }], ['GET /extension/:id/*filepath', { requiresTenant: false, registrar: 'API' }], ['GET /api/extension/:id/*path', { requiresTenant: false, registrar: 'API' }], ['POST /api/extension/:id/*path', { requiresTenant: false, registrar: 'API' }], ['GET /setup/*filepath', { requiresTenant: false, registrar: 'API' }], ['GET /link/:link_id', { requiresTenant: false, registrar: 'API' }], ['GET /kiosk/*filepath', { requiresTenant: false, registrar: 'API' }], ['GET /public/*filepath', { requiresTenant: false, registrar: 'API' }], ['GET /', { requiresTenant: false, registrar: 'API' }], ['GET /debug/pprof/profile', { requiresTenant: false, registrar: 'API' }], ['GET /debug/pprof/symbol', { requiresTenant: false, registrar: 'API' }], ['GET /debug/pprof/cmdline', { requiresTenant: false, registrar: 'API' }], ['GET /debug/pprof/trace', { requiresTenant: false, registrar: 'API' }], ['GET /debug/pprof/', { requiresTenant: false, registrar: 'API' }], ['GET /debug/pprof/*filepath', { requiresTenant: false, registrar: 'API' }] ]) /** * Get all routes that require tenant context */ export function getAllTenantRequiredRoutes(): Array<{ method: string; path: string; registrar: string }> { return [ { method: 'GET', path: '/api/config/aws', registrar: 'Admin' }, { method: 'GET', path: '/api/permissions/predefined', registrar: 'Admin' }, { method: 'POST', path: '/api/apps', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/dashboard', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/dashboard', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/dashboard/:dashboard_id/layout', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/dashboard/:dashboard_id/label', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/dashboard/:dashboard_id/options', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/dashboard/:dashboard_id/options', registrar: 'Admin' }, { method: 'POST', path: '/api/oauth/client-token', registrar: 'Tenant' }, { method: 'POST', path: '/api/copilot/init', registrar: 'Tenant' }, { method: 'POST', path: '/api/copilot/send-message', registrar: 'Tenant' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/automate-rules', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/automate-rules', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/automate-rules/:rule_id', registrar: 'Admin' }, { method: 'GET', path: '/api/business-hooks/available-hooklets', registrar: 'Tenant' }, { method: 'GET', path: '/api/apps/:app_id/business-hooks/connections', registrar: 'Admin' }, { method: 'POST', path: '/api/context/user-token', registrar: 'Tenant' }, { method: 'GET', path: '/api/apps/:app_id/dataset', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/dataset/:id', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/dataset', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/dataset/:id/:node_id', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/dataset/:id/:node_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/dataset/:id/:node_id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/dataset/:id/:node_id', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/dataset/:id/:node_id/child', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/dataset/:id/:node_id/move', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/dataset/import', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/dataset/export/:id', registrar: 'Admin' }, { method: 'GET', path: '/api/developer/clients', registrar: 'Admin' }, { method: 'POST', path: '/api/developer/clients', registrar: 'Admin' }, { method: 'GET', path: '/api/developer/clients/:hash_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/developer/clients/:hash_id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/developer/clients/:hash_id', registrar: 'Admin' }, { method: 'POST', path: '/api/developer/clients/:hash_id/secrets', registrar: 'Admin' }, { method: 'GET', path: '/api/developer/clients/:hash_id/secrets', registrar: 'Admin' }, { method: 'DELETE', path: '/api/developer/clients/:hash_id/secrets/:secret_hash_id', registrar: 'Admin' }, { method: 'GET', path: '/api/developer/clients/:hash_id/hooklets', registrar: 'Admin' }, { method: 'POST', path: '/api/developer/clients/:hash_id/hooklets', registrar: 'Admin' }, { method: 'GET', path: '/api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/developer/clients/:hash_id/hooklets/:hooklet_hash_id', registrar: 'Admin' }, { method: 'GET', path: '/api/platform/dataset', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/dataset/:id', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/dataset', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/dataset/:id/:node_id', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/dataset/:id/:node_id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/dataset/:id/:node_id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/dataset/:id/:node_id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/dataset/:id/:node_id/child', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/dataset/:id/:node_id/move', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/dataset/import', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/apps/:app_id', registrar: 'Tenant' }, { method: 'GET', path: '/api/ingress/:app_id/:ingress_id', registrar: 'Tenant' }, { method: 'PUT', path: '/api/ingress/:app_id/:ingress_id/options-tabber', registrar: 'Tenant' }, { method: 'GET', path: '/api/entity/:app_id/:entity_id', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/insert', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/prepare', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/import-ai-config', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/data-query', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-keeper', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/validate-uniq', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/user-token', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-rel', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-linkto-pick', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-linkto-values', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-subform-rel', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-workflow-nodes', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-approve-users', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/resolve-workflow', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/query-filter', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/invoke-batch-operator', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/invoke/:action_id', registrar: 'Tenant' }, { method: 'GET', path: '/api/entity/:app_id/:entity_id/row/:row_id', registrar: 'Tenant' }, { method: 'PUT', path: '/api/entity/:app_id/:entity_id/row/:row_id', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/row/:row_id/get-subitems', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/row/:row_id/action/:action', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/convert/:action_code', registrar: 'Tenant' }, { method: 'GET', path: '/api/entity/:app_id/:entity_id/row/:row_id/process-map', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/row/:row_id/log-query', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/row/:row_id/comment-query', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/row/:row_id/comment-add', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/row/:row_id/comment-delete', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/print-templates', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/selection-query/:action', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/delete-item', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/restore-item', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/bulk-update', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/bulk-update-save-as', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/export', registrar: 'Tenant' }, { method: 'GET', path: '/api/export-task/:id', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/import', registrar: 'Tenant' }, { method: 'POST', path: '/api/entity/:app_id/:entity_id/import-prepare', registrar: 'Tenant' }, { method: 'GET', path: '/api/user-action-entity/:app_id/:entity_id/tag-names', registrar: 'Tenant' }, { method: 'POST', path: '/api/user-action-entity/:app_id/:entity_id/batch-add-tags', registrar: 'Tenant' }, { method: 'POST', path: '/api/user-action-entity/:app_id/:entity_id/batch-remove-tags', registrar: 'Tenant' }, { method: 'POST', path: '/api/user-action-entity/:app_id/:entity_id/get-selection-tags', registrar: 'Tenant' }, { method: 'GET', path: '/api/dashboard/:app_id/:dashboard_id', registrar: 'Tenant' }, { method: 'GET', path: '/api/dashboard/:app_id/:dashboard_id/widgets', registrar: 'Tenant' }, { method: 'POST', path: '/api/apps/:app_id/widgets-data', registrar: 'Tenant' }, { method: 'GET', path: '/api/user-profile', registrar: 'Tenant' }, { method: 'PUT', path: '/api/user-profile', registrar: 'Tenant' }, { method: 'PUT', path: '/api/user-profile/update-avatar', registrar: 'Tenant' }, { method: 'GET', path: '/api/user-profile/auth-channels', registrar: 'Tenant' }, { method: 'POST', path: '/api/user-profile/change-password', registrar: 'Tenant' }, { method: 'GET', path: '/api/dataset/:id/:node_id', registrar: 'Tenant' }, { method: 'POST', path: '/api/upload/token', registrar: 'Tenant' }, { method: 'POST', path: '/api/upload/mobile-upload', registrar: 'Tenant' }, { method: 'POST', path: '/api/upload/mobile-upload/check', registrar: 'Tenant' }, { method: 'POST', path: '/api/upload/preview', registrar: 'Tenant' }, { method: 'POST', path: '/api/organization/departments/tree', registrar: 'Tenant' }, { method: 'POST', path: '/api/organization/users', registrar: 'Tenant' }, { method: 'GET', path: '/api/apps/:app_id/kiosk', registrar: 'Tenant' }, { method: 'DELETE', path: '/api/apps/:app_id/entity/:entity_id', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity-recycle', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/restore-fields', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/restore-data', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/serial-initval', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/name', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/workflow', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/workflow/new', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/workflow/deploy', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/workflow', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/invoke-debug', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/clone', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/custom-keys', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/notifications', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/test-notification', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/buttons', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/success-screen', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/options', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/print-templates', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/print-templates', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/print-templates/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/print-templates/:id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/entity/:entity_id/print-templates/:id', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/print-templates/:id/background', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/entity/:entity_id/print-templates/:id/background', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/kiosk-flow', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/kiosk-flow', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/kiosk-flow/:id/clone', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/entity/:entity_id/kiosk-flow/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/i18n', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/schema', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entities', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/name', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entities', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/sitemap', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/sitemap', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/ingress', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity/:entity_id/ingress', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/ingress/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/ingress/:id', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/ingress-h/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/ingress-h/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/entity/:entity_id/ingress-blocks/:id', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity/:entity_id/ingress-blocks/:id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/entity/:entity_id/ingress/:id', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/widgets-preview', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/widgets', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/widgets', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/widgets/:widgets_id', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/widgets/:widgets_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/widgets/:widgets_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/apps/:app_id/widgets/:widgets_id/ingress-options', registrar: 'Admin' }, { method: 'GET', path: '/api/apps/:app_id/entity-shares', registrar: 'Admin' }, { method: 'POST', path: '/api/apps/:app_id/entity-shares', registrar: 'Admin' }, { method: 'DELETE', path: '/api/apps/:app_id/entity-shares', registrar: 'Admin' }, { method: 'GET', path: '/api/system-map', registrar: 'Admin' }, { method: 'GET', path: '/api/tenants', registrar: 'Admin' }, { method: 'GET', path: '/api/tenant/usage/snapshot', registrar: 'Admin' }, { method: 'GET', path: '/api/tenant/usage/daily', registrar: 'Admin' }, { method: 'POST', path: '/api/tenants/config/get', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-usermeta', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-name', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-icon', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-logo', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-auth', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-auth-bgimage', registrar: 'Admin' }, { method: 'PUT', path: '/api/tenants/config/update-mail', registrar: 'Admin' }, { method: 'GET', path: '/api/api-service/', registrar: 'Admin' }, { method: 'GET', path: '/api/api-service/:api_service_id', registrar: 'Admin' }, { method: 'GET', path: '/api/admin/custom_domain', registrar: 'Admin' }, { method: 'POST', path: '/api/admin/custom_domain', registrar: 'Admin' }, { method: 'POST', path: '/api/admin/custom_domain/verify_owner', registrar: 'Admin' }, { method: 'GET', path: '/api/kiosk-flows/list', registrar: 'Admin' }, { method: 'GET', path: '/api/kiosk-group', registrar: 'Admin' }, { method: 'POST', path: '/api/kiosk-group', registrar: 'Admin' }, { method: 'GET', path: '/api/kiosk-group/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/kiosk-group/:id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/kiosk-group/:id', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/service-account/create', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/service-account/renew-token', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/employee-account/create', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/employee-account/changePassword', registrar: 'Admin' }, { method: 'GET', path: '/api/organization/department-policy/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/organization/department-policy/:id', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/invite/invite-code-switch', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/invite/invite-code-history', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/invite/one-by-one', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/invite/resend', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/invite/make-link', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/departments/list', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/list-users', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/actors/list', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/actors/add', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/actors/delete', registrar: 'Admin' }, { method: 'GET', path: '/api/organization/users/:tenant_user_id', registrar: 'Admin' }, { method: 'PUT', path: '/api/organization/users/:tenant_user_id', registrar: 'Admin' }, { method: 'DELETE', path: '/api/organization/users/:tenant_user_id', registrar: 'Admin' }, { method: 'POST', path: '/api/organization/departments/add', registrar: 'Admin' }, { method: 'DELETE', path: '/api/organization/departments/:id', registrar: 'Admin' }, { method: 'PUT', path: '/api/organization/departments/:id/rename', registrar: 'Admin' }, { method: 'PUT', path: '/api/organization/departments/:id/relocate', registrar: 'Admin' }, { method: 'POST', path: '/api/platform/runtime', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/ds', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/services', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/customFieldType', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/auth-methods', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/extension', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/extension', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/extension/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/extension/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/extension/:id', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/extension/:id/connect', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/extension/:id/files', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/message-templates/defined', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/message-templates', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/message-templates', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/message-templates/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/message-templates/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/message-templates/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/tenant-levels', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/tenant-levels', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/tenant-levels/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/tenant-levels/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/tenant-levels/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/tenants', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/tenants/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/tenants/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/app-templates', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/app-templates', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/app-templates/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/app-templates/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/app-templates/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/static-links', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/static-links', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/static-links/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/static-links/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/static-links/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/embedded-app', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/embedded-app', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/embedded-app/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/embedded-app/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/embedded-app/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/admin', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/admin', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/admin/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/admin/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/admin/:id', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/api-service', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/api-service', registrar: 'PEAdmin' }, { method: 'GET', path: '/api/platform/api-service/:id', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/api-service/:id', registrar: 'PEAdmin' }, { method: 'DELETE', path: '/api/platform/api-service/:id', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/oauth-clients', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/platform/config/get', registrar: 'PEAdmin' }, { method: 'PUT', path: '/api/platform/config/update', registrar: 'PEAdmin' }, { method: 'POST', path: '/api/flows', registrar: 'Tenant' }, { method: 'POST', path: '/api/flows/status', registrar: 'Tenant' }, { method: 'GET', path: '/api/kiosk/:kiosk_group_hashid/entry', registrar: 'Tenant' }, { method: 'GET', path: '/api/kiosk/:kiosk_group_hashid/flow/:kiosk_id', registrar: 'Tenant' }, { method: 'GET', path: '/api/kiosk-flow/:kiosk_id/search-and-lock', registrar: 'Tenant' }, { method: 'POST', path: '/api/kiosk-flow/:kiosk_id/create', registrar: 'Tenant' }, { method: 'POST', path: '/api/kiosk-flow/:kiosk_id/update', registrar: 'Tenant' }, { method: 'POST', path: '/api/kiosk-flow/:kiosk_id/check-print-duplicate', registrar: 'Tenant' }, { method: 'POST', path: '/api/kiosk-flow/:kiosk_id/record-print', registrar: 'Tenant' } ] } /** * Get all public routes */ export function getAllPublicRoutes(): Array<{ method: string; path: string; registrar: string }> { return [ { method: 'POST', path: '/open/api/oauth/token', registrar: 'API' }, { method: 'GET', path: '/api/oauth/client-info/:client_id', registrar: 'Authed' }, { method: 'POST', path: '/api/oauth/get-authorize-code', registrar: 'Authed' }, { method: 'POST', path: '/setup/api/status', registrar: 'SetupOnly' }, { method: 'POST', path: '/setup/api/init-system', registrar: 'SetupOnly' }, { method: 'GET', path: '/api/entry', registrar: 'Authed' }, { method: 'POST', path: '/api/tenant', registrar: 'Authed' }, { method: 'POST', path: '/api/tenant/set-default', registrar: 'Authed' }, { method: 'GET', path: '/api/link/:name', registrar: 'Authed' }, { method: 'GET', path: '/api/tenant/authrole', registrar: 'Authed' }, { method: 'POST', path: '/api/auth/resend-email-verify', registrar: 'Authed' }, { method: 'POST', path: '/api/auth/email-verify-status', registrar: 'Authed' }, { method: 'GET', path: '/api/user-profile/set-email', registrar: 'Authed' }, { method: 'DELETE', path: '/api/user-profile/set-email/:hashid', registrar: 'Authed' }, { method: 'POST', path: '/api/user-profile/set-email', registrar: 'Authed' }, { method: 'POST', path: '/api/auth/email-verify', registrar: 'Authed' }, { method: 'POST', path: '/api/tenant/accept-invitation', registrar: 'Authed' }, { method: 'GET', path: '/api/tenant/invitation-link/:id', registrar: 'Authed' }, { method: 'POST', path: '/api/tenant/accept-invitation-link', registrar: 'Authed' }, { method: 'GET', path: '/api/auth/strategy', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/login', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/employee-id-login', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/login-with-idcard', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/login-credential', registrar: 'Auth' }, { method: 'POST', path: '/api/account/register', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/send-reset-email', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/verify-reset-email/:id', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/reset-password/:id', registrar: 'Auth' }, { method: 'POST', path: '/api/auth/set-email-verify', registrar: 'Auth' }, { method: 'GET', path: '/open/api/v1/apps/:app_id/collections', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/apps/:app_id/collections/:entity_id', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/apps/:app_id/collections/:entity_id/item-by-field/:field_id/:value', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items', registrar: 'OpenAPI' }, { method: 'PUT', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id', registrar: 'OpenAPI' }, { method: 'DELETE', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/lock', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/unlock', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/subform/:field_id/', registrar: 'OpenAPI' }, { method: 'PUT', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/subform/:field_id/items/:sub_row_id', registrar: 'OpenAPI' }, { method: 'DELETE', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/subform/:field_id/items/:sub_row_id', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/collections/:entity_id/submission-token', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/collections/:entity_id/items/:row_id/update-token', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/uploads/token', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/uploads/preview', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/users/:tenant_user_id', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/user-token/:token', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/watch-data', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/connections', registrar: 'OpenAPI' }, { method: 'PUT', path: '/open/api/v1/apps/:app_id/connections/:connection_id', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/apps/:app_id/connections/:connection_id/usage', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/me', registrar: 'OpenAPI' }, { method: 'GET', path: '/open/api/v1/tenants', registrar: 'OpenAPI' }, { method: 'POST', path: '/open/api/v1/switch-tenant', registrar: 'OpenAPI' }, { method: 'POST', path: '/link/api/init', registrar: 'API' }, { method: 'POST', path: '/link/api/submission/submit', registrar: 'API' }, { method: 'POST', path: '/link/api/form/entity/:app_id/:entity_id/validate-uniq', registrar: 'API' }, { method: 'POST', path: '/link/api/form/entity/:app_id/:entity_id/query-rel', registrar: 'API' }, { method: 'POST', path: '/link/api/form/upload/token', registrar: 'API' }, { method: 'POST', path: '/link/api/form/upload/preview', registrar: 'API' }, { method: 'POST', path: '/link/api/form/upload/mobile-upload', registrar: 'API' }, { method: 'POST', path: '/link/api/form/upload/mobile-upload/push', registrar: 'API' }, { method: 'POST', path: '/link/api/form/upload/mobile-upload/check', registrar: 'API' }, { method: 'GET', path: '/link/api/form/dataset/:id/:node_id', registrar: 'API' }, { method: 'GET', path: '/api/kiosk/:kiosk_group_hashid', registrar: 'API' }, { method: 'POST', path: '/api/kiosk/:kiosk_group_hashid/validate', registrar: 'API' }, { method: 'POST', path: '/api/kiosk/:kiosk_group_hashid/register-node', registrar: 'API' }, { method: 'GET', path: '/extension/:id/*filepath', registrar: 'API' }, { method: 'GET', path: '/api/extension/:id/*path', registrar: 'API' }, { method: 'POST', path: '/api/extension/:id/*path', registrar: 'API' }, { method: 'GET', path: '/setup/*filepath', registrar: 'API' }, { method: 'GET', path: '/link/:link_id', registrar: 'API' }, { method: 'GET', path: '/kiosk/*filepath', registrar: 'API' }, { method: 'GET', path: '/public/*filepath', registrar: 'API' }, { method: 'GET', path: '/', registrar: 'API' }, { method: 'GET', path: '/debug/pprof/profile', registrar: 'API' }, { method: 'GET', path: '/debug/pprof/symbol', registrar: 'API' }, { method: 'GET', path: '/debug/pprof/cmdline', registrar: 'API' }, { method: 'GET', path: '/debug/pprof/trace', registrar: 'API' }, { method: 'GET', path: '/debug/pprof/', registrar: 'API' }, { method: 'GET', path: '/debug/pprof/*filepath', registrar: 'API' } ] }