spine-framework 0.3.144 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +76 -0
- package/.framework/.spine-manifest.json +19 -0
- package/.framework/cli/commands/agents.ts +61 -33
- package/.framework/cli/commands/auth.ts +60 -28
- package/.framework/cli/commands/create-app.ts +212 -80
- package/.framework/cli/commands/dev.ts +184 -68
- package/.framework/cli/commands/doctor.ts +324 -152
- package/.framework/cli/commands/generate.ts +119 -68
- package/.framework/cli/commands/init.ts +141 -242
- package/.framework/cli/commands/install-app.ts +1336 -314
- package/.framework/cli/commands/items.ts +31 -29
- package/.framework/cli/commands/migrate.ts +299 -156
- package/.framework/cli/commands/migrations.ts +62 -30
- package/.framework/cli/commands/pipelines.ts +31 -29
- package/.framework/cli/commands/status.ts +105 -45
- package/.framework/cli/commands/system.ts +47 -42
- package/.framework/cli/commands/test.ts +161 -102
- package/.framework/cli/commands/upgrade.ts +260 -0
- package/.framework/cli/commands/validate-app.ts +517 -161
- package/.framework/cli/context.ts +117 -85
- package/.framework/cli/env-loader.ts +74 -43
- package/.framework/cli/index.ts +70 -46
- package/.framework/cli/lib/project-files.ts +404 -0
- package/.framework/docs/guides/testing-guide.md +1 -1
- package/.framework/docs/runtime-types.md +72 -72
- package/.framework/functions/_shared/access.ts +84 -0
- package/.framework/functions/_shared/agent-runner.ts +5051 -1026
- package/.framework/functions/_shared/app-manifest.ts +214 -94
- package/.framework/functions/_shared/ast.ts +214 -0
- package/.framework/functions/_shared/audit.ts +91 -55
- package/.framework/functions/_shared/cil.ts +368 -127
- package/.framework/functions/_shared/db.ts +337 -68
- package/.framework/functions/_shared/funnel.ts +228 -0
- package/.framework/functions/_shared/geo.ts +105 -0
- package/.framework/functions/_shared/hash-api-key.ts +94 -17
- package/.framework/functions/_shared/index.ts +22 -224
- package/.framework/functions/_shared/kb.ts +832 -58
- package/.framework/functions/_shared/llm.ts +118 -18
- package/.framework/functions/_shared/logging.ts +317 -19
- package/.framework/functions/_shared/middleware.ts +701 -131
- package/.framework/functions/_shared/notify.ts +70 -0
- package/.framework/functions/_shared/outcomes.ts +34 -19
- package/.framework/functions/_shared/permissions.ts +501 -315
- package/.framework/functions/_shared/pipeline-runner.ts +704 -155
- package/.framework/functions/_shared/principal.ts +436 -263
- package/.framework/functions/_shared/rate-limit.ts +233 -0
- package/.framework/functions/_shared/resolve-credentials.ts +86 -19
- package/.framework/functions/_shared/resolve-ids.ts +203 -139
- package/.framework/functions/_shared/retry-deliveries.ts +51 -16
- package/.framework/functions/_shared/schema-utils.ts +602 -521
- package/.framework/functions/_shared/security.ts +345 -0
- package/.framework/functions/_shared/testing.ts +197 -172
- package/.framework/functions/_shared/tracing.ts +351 -21
- package/.framework/functions/_shared/trigger-engine.ts +425 -136
- package/.framework/functions/_shared/webhook-registration.ts +71 -70
- package/.framework/functions/_shared/webhook-registry.ts +126 -83
- package/.framework/functions/account-nodes.ts +30 -30
- package/.framework/functions/adapters/generic-webhook-inbound.ts +49 -16
- package/.framework/functions/adapters/generic-webhook-outbound.ts +17 -17
- package/.framework/functions/adapters/openai-outbound.ts +15 -16
- package/.framework/functions/admin-data.ts +596 -173
- package/.framework/functions/admin-funnel.ts +64 -60
- package/.framework/functions/admin-install-funnel.ts +84 -66
- package/.framework/functions/admin-signals.ts +69 -51
- package/.framework/functions/ai-agents.ts +431 -106
- package/.framework/functions/ai-interactions.ts +186 -112
- package/.framework/functions/api-keys.ts +107 -107
- package/.framework/functions/apps.ts +154 -136
- package/.framework/functions/auth.ts +83 -65
- package/.framework/functions/cil-agent-ingest.ts +189 -232
- package/.framework/functions/cil-agent.ts +433 -177
- package/.framework/functions/cil-callmap.ts +642 -430
- package/.framework/functions/cil-config.ts +139 -135
- package/.framework/functions/cil-context.ts +214 -127
- package/.framework/functions/cil-doc.ts +587 -458
- package/.framework/functions/cil-embeddings.ts +453 -364
- package/.framework/functions/cil-graph.ts +427 -142
- package/.framework/functions/cil-ingest.ts +1418 -1154
- package/.framework/functions/cil-pipeline.ts +276 -21
- package/.framework/functions/cil-project.ts +659 -132
- package/.framework/functions/cil-validate.ts +198 -164
- package/.framework/functions/debug-auth.ts +57 -55
- package/.framework/functions/deliveries.ts +80 -21
- package/.framework/functions/embeddings.ts +1023 -318
- package/.framework/functions/eval-harness.ts +146 -108
- package/.framework/functions/integration-outbound.ts +205 -75
- package/.framework/functions/integration-routes.ts +128 -23
- package/.framework/functions/integrations.ts +125 -100
- package/.framework/functions/invites.ts +1095 -460
- package/.framework/functions/item-progress.ts +158 -102
- package/.framework/functions/kb.ts +34 -10
- package/.framework/functions/logs.ts +133 -133
- package/.framework/functions/observability.ts +152 -122
- package/.framework/functions/pipeline-executions.ts +147 -132
- package/.framework/functions/pipelines.ts +134 -119
- package/.framework/functions/prompt-configs.ts +96 -80
- package/.framework/functions/roles.ts +112 -82
- package/.framework/functions/security.ts +450 -0
- package/.framework/functions/system-cron.ts +117 -80
- package/.framework/functions/system.ts +158 -98
- package/.framework/functions/tests.ts +29 -29
- package/.framework/functions/timers.ts +94 -95
- package/.framework/functions/trigger-scheduler.ts +10 -0
- package/.framework/functions/triggers.ts +179 -149
- package/.framework/functions/types.ts +137 -125
- package/.framework/mcp/index.ts +133 -0
- package/.framework/mcp/load-env.ts +60 -0
- package/.framework/mcp/shared/app-manifest.ts +275 -0
- package/.framework/mcp/shared/db.ts +477 -0
- package/.framework/mcp/shared/kb.ts +118 -0
- package/.framework/mcp/tools/architect.ts +431 -0
- package/.framework/mcp/tools/cil/context.ts +345 -0
- package/.framework/mcp/tools/cil/graph.ts +242 -0
- package/.framework/mcp/tools/cil/ingest.ts +1217 -0
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +693 -0
- package/.framework/mcp/tools/cil/pipeline.ts +767 -0
- package/.framework/mcp/tools/cil/project.ts +791 -0
- package/.framework/mcp/tools/cil/retrieval.ts +336 -0
- package/.framework/mcp/tools/cil/search-core.ts +454 -0
- package/.framework/mcp/tools/cil/search.ts +97 -0
- package/.framework/mcp/tools/cil/suggest.ts +186 -0
- package/.framework/mcp/tools/cil/validate.ts +1369 -0
- package/.framework/mcp/tools/kb/delete.ts +139 -0
- package/.framework/mcp/tools/kb/index.ts +52 -0
- package/.framework/mcp/tools/kb/ingest.ts +84 -0
- package/.framework/mcp/tools/kb/list-types.ts +102 -0
- package/.framework/mcp/tools/kb/publish.ts +100 -0
- package/.framework/mcp/tools/kb/reindex.ts +86 -0
- package/.framework/mcp/tools/kb/revoke.ts +85 -0
- package/.framework/mcp/tools/kb/search.ts +101 -0
- package/.framework/mcp/tools/kb/upsert.ts +125 -0
- package/.framework/mcp/tools/observability.ts +510 -0
- package/.framework/migrations/001_core_schema.sql +15 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +15 -0
- package/.framework/migrations/003_core_system_data.sql +16 -1
- package/.framework/migrations/004_core_rpc_and_broker.sql +17 -1
- package/.framework/migrations/005_core_observability.sql +17 -1
- package/.framework/migrations/006_security_hardening_rls.sql +15 -0
- package/.framework/migrations/007_kb_article_list.sql +17 -1
- package/.framework/migrations/008_items_target.sql +15 -0
- package/.framework/migrations/009_roles_slug_unique.sql +15 -0
- package/.framework/migrations/010_auth_user_trigger.sql +15 -0
- package/.framework/migrations/011_spine_system_account.sql +16 -0
- package/.framework/migrations/012_service_role_grants.sql +16 -0
- package/.framework/migrations/013_get_account_apps_role_filter.sql +15 -0
- package/.framework/migrations/014_apps_required_roles.sql +16 -0
- package/.framework/migrations/015_types_kind_slug_unique.sql +20 -0
- package/.framework/migrations/016_cil_types.sql +281 -0
- package/.framework/migrations/017_cil_stable_ids.sql +37 -0
- package/.framework/migrations/018_runtime_tables.sql +129 -0
- package/.framework/migrations/019_agent_prompt_columns.sql +56 -0
- package/.framework/migrations/020_schema_reconciliation.sql +67 -0
- package/.framework/migrations/021_kb_embedding_lifecycle.sql +31 -0
- package/.framework/migrations/032_cil_status_migration.sql +73 -0
- package/.framework/migrations/033_cil_versioning.sql +73 -0
- package/.framework/migrations/034_match_embeddings_knn.sql +115 -0
- package/.framework/migrations/035_rate_limits.sql +55 -0
- package/.framework/migrations/036_demo_record_flags.sql +72 -0
- package/.framework/migrations/037_kb_types_canonical.sql +244 -0
- package/.framework/migrations/038_drop_demo_record_flags.sql +38 -0
- package/.framework/migrations/042_registration_hierarchy.sql +309 -0
- package/.framework/migrations/043_policy_actor_cleanup.sql +39 -0
- package/.framework/migrations/044_match_embeddings_filtered_knn.sql +151 -0
- package/.framework/migrations/045_security_critical_rls.sql +139 -0
- package/.framework/migrations/046_security_missing_rls.sql +79 -0
- package/.framework/migrations/047_people_updated_by.sql +27 -0
- package/.framework/migrations/048_watcher_last_seen_at.sql +24 -0
- package/.framework/migrations/049_security_blocklist.sql +148 -0
- package/.framework/migrations/050_notifications.sql +49 -0
- package/.framework/migrations/051_message_agent_fields.sql +74 -0
- package/.framework/migrations/052_registration_security.sql +421 -0
- package/.framework/migrations/053_builtin_action_seeds.sql +66 -0
- package/.framework/migrations/054_kb_ingest_lease.sql +157 -0
- package/.framework/migrations/055_type_id_drift_reconciliation.sql +33 -0
- package/.framework/migrations/056_slug_column_reconciliation.sql +38 -0
- package/.framework/migrations/057_pipelines_slug_identity.sql +14 -0
- package/.framework/migrations/058_account_data_field_declarations.sql +53 -0
- package/.framework/migrations/059_registration_placement_fixes.sql +269 -0
- package/.framework/migrations/060_account_person_record_permissions.sql +38 -0
- package/.framework/migrations/061_fk_dedup.sql +32 -0
- package/.framework/public/spine-logo.svg +10 -3
- package/.framework/scripts/app-install-cli.ts +190 -93
- package/.framework/scripts/assemble-frontend.sh +127 -44
- package/.framework/scripts/assemble-functions.sh +128 -30
- package/.framework/scripts/boundary-check.sh +6 -2
- package/.framework/scripts/build-manifest.sh +24 -68
- package/.framework/scripts/check-core-integrity.sh +15 -76
- package/.framework/scripts/checksum-manifest.mts +343 -0
- package/.framework/scripts/cil-migrate-markers.ts +403 -0
- package/.framework/scripts/fix-cil-markers.mjs +176 -0
- package/.framework/scripts/verify-integrity.sh +21 -57
- package/.framework/scripts/verify-manifest.mts +305 -0
- package/.framework/seeds/types/funnel_signal_use.json +74 -21
- package/.framework/seeds/types/spine_instance.json +73 -21
- package/.framework/src/App.tsx +118 -72
- package/.framework/src/apps/admin/index.tsx +855 -58
- package/.framework/src/components/AppWrapper.tsx +43 -45
- package/.framework/src/components/CustomAppLoader.tsx +160 -116
- package/.framework/src/components/admin/AdminListPage.tsx +46 -44
- package/.framework/src/components/admin/AdminSidebar.tsx +57 -47
- package/.framework/src/components/admin/AdminStatsCard.tsx +46 -44
- package/.framework/src/components/admin/PageInstructions.tsx +98 -2
- package/.framework/src/components/admin/SortableTableHeader.tsx +44 -45
- package/.framework/src/components/app-shell/GenericAppShell.tsx +64 -65
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +44 -47
- package/.framework/src/components/app-shell/GenericListPage.tsx +45 -49
- package/.framework/src/components/app-sidebar.tsx +42 -45
- package/.framework/src/components/auth/ProtectedRoute.tsx +48 -41
- package/.framework/src/components/auth/TurnstileWidget.tsx +27 -0
- package/.framework/src/components/kb/KBArticleEditor.tsx +231 -22
- package/.framework/src/components/kb/KBArticleList.tsx +251 -10
- package/.framework/src/components/layout/AppShell.tsx +51 -45
- package/.framework/src/components/layout/Header.tsx +42 -43
- package/.framework/src/components/layout/Layout.tsx +46 -46
- package/.framework/src/components/layout/Sidebar.tsx +196 -96
- package/.framework/src/components/runtime/DataDetailHeader.tsx +55 -30
- package/.framework/src/components/runtime/DataDetailPage.tsx +31 -269
- package/.framework/src/components/runtime/DataFilters.tsx +49 -74
- package/.framework/src/components/runtime/DataHeader.tsx +53 -32
- package/.framework/src/components/runtime/DataListPage.tsx +51 -155
- package/.framework/src/components/runtime/DataStats.tsx +66 -44
- package/.framework/src/components/runtime/DataTable.tsx +49 -149
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +45 -75
- package/.framework/src/components/runtime/index.ts +119 -16
- package/.framework/src/components/search-form.tsx +46 -29
- package/.framework/src/components/shared/AgentView.tsx +65 -48
- package/.framework/src/components/shared/FieldRenderer.tsx +144 -50
- package/.framework/src/components/shared/InviteManager.tsx +207 -97
- package/.framework/src/components/shared/MemberList.tsx +97 -0
- package/.framework/src/components/shared/SchemaFields.tsx +107 -86
- package/.framework/src/components/ui/DataTable.tsx +80 -68
- package/.framework/src/components/ui/Form.tsx +157 -146
- package/.framework/src/components/ui/ItemCard.tsx +74 -67
- package/.framework/src/components/ui/ItemListView.tsx +73 -68
- package/.framework/src/components/ui/LoadingSpinner.tsx +43 -48
- package/.framework/src/components/ui/Modal.tsx +78 -68
- package/.framework/src/components/ui/RichTextEditor.tsx +89 -69
- package/.framework/src/components/ui/accordion.tsx +85 -86
- package/.framework/src/components/ui/alert-dialog.tsx +197 -184
- package/.framework/src/components/ui/alert.tsx +105 -94
- package/.framework/src/components/ui/aspect-ratio.tsx +57 -43
- package/.framework/src/components/ui/avatar.tsx +122 -107
- package/.framework/src/components/ui/badge.tsx +60 -55
- package/.framework/src/components/ui/breadcrumb.tsx +127 -128
- package/.framework/src/components/ui/button-group.tsx +86 -72
- package/.framework/src/components/ui/button.tsx +71 -50
- package/.framework/src/components/ui/calendar.tsx +72 -57
- package/.framework/src/components/ui/card.tsx +136 -129
- package/.framework/src/components/ui/carousel.tsx +226 -107
- package/.framework/src/components/ui/chart.tsx +252 -147
- package/.framework/src/components/ui/checkbox.tsx +43 -44
- package/.framework/src/components/ui/collapsible.tsx +86 -71
- package/.framework/src/components/ui/combobox.tsx +282 -249
- package/.framework/src/components/ui/command.tsx +158 -146
- package/.framework/src/components/ui/context-menu.tsx +239 -240
- package/.framework/src/components/ui/dialog.tsx +174 -157
- package/.framework/src/components/ui/direction.tsx +72 -56
- package/.framework/src/components/ui/drawer.tsx +168 -169
- package/.framework/src/components/ui/dropdown-menu.tsx +254 -223
- package/.framework/src/components/ui/empty.tsx +131 -120
- package/.framework/src/components/ui/field.tsx +205 -173
- package/.framework/src/components/ui/hover-card.tsx +71 -72
- package/.framework/src/components/ui/input-group.tsx +148 -133
- package/.framework/src/components/ui/input-otp.tsx +99 -86
- package/.framework/src/components/ui/input.tsx +43 -41
- package/.framework/src/components/ui/item.tsx +207 -185
- package/.framework/src/components/ui/kbd.tsx +57 -56
- package/.framework/src/components/ui/label.tsx +45 -41
- package/.framework/src/components/ui/menubar.tsx +268 -236
- package/.framework/src/components/ui/native-select.tsx +85 -86
- package/.framework/src/components/ui/navigation-menu.tsx +166 -156
- package/.framework/src/components/ui/pagination.tsx +131 -141
- package/.framework/src/components/ui/popover.tsx +125 -128
- package/.framework/src/components/ui/progress.tsx +47 -44
- package/.framework/src/components/ui/radio-group.tsx +60 -55
- package/.framework/src/components/ui/resizable.tsx +85 -72
- package/.framework/src/components/ui/scroll-area.tsx +57 -58
- package/.framework/src/components/ui/select.tsx +182 -169
- package/.framework/src/components/ui/separator.tsx +42 -43
- package/.framework/src/components/ui/sheet.tsx +170 -159
- package/.framework/src/components/ui/sidebar.tsx +395 -398
- package/.framework/src/components/ui/skeleton.tsx +42 -43
- package/.framework/src/components/ui/slider.tsx +61 -44
- package/.framework/src/components/ui/sonner.tsx +44 -44
- package/.framework/src/components/ui/spinner.tsx +47 -42
- package/.framework/src/components/ui/switch.tsx +56 -42
- package/.framework/src/components/ui/table-primitives.tsx +272 -132
- package/.framework/src/components/ui/table.tsx +140 -142
- package/.framework/src/components/ui/tabs.tsx +110 -93
- package/.framework/src/components/ui/textarea.tsx +43 -44
- package/.framework/src/components/ui/toggle-group.tsx +87 -71
- package/.framework/src/components/ui/toggle.tsx +56 -56
- package/.framework/src/components/ui/tooltip.tsx +99 -85
- package/.framework/src/contexts/AppContext.tsx +166 -114
- package/.framework/src/contexts/AuthContext.tsx +232 -137
- package/.framework/src/hooks/use-mobile.ts +43 -44
- package/.framework/src/hooks/useApi.ts +185 -172
- package/.framework/src/hooks/useAppPath.ts +31 -29
- package/.framework/src/hooks/useApps.ts +77 -42
- package/.framework/src/hooks/useEntityList.ts +66 -29
- package/.framework/src/hooks/useEntityRecord.ts +76 -32
- package/.framework/src/hooks/useForm.ts +62 -30
- package/.framework/src/hooks/useListSchema.ts +60 -43
- package/.framework/src/hooks/useSchemaRecord.ts +115 -95
- package/.framework/src/lib/api.ts +258 -134
- package/.framework/src/lib/registration.ts +181 -0
- package/.framework/src/lib/supabase.ts +118 -81
- package/.framework/src/lib/utils.ts +266 -266
- package/.framework/src/main.tsx +43 -44
- package/.framework/src/pages/DashboardPage.tsx +44 -43
- package/.framework/src/pages/NoAppPage.tsx +50 -0
- package/.framework/src/pages/NotFoundPage.tsx +32 -29
- package/.framework/src/pages/SetupPage.tsx +34 -33
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +69 -58
- package/.framework/src/pages/admin/AIAgentsPage.tsx +43 -40
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +63 -55
- package/.framework/src/pages/admin/APIKeysPage.tsx +44 -42
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +117 -94
- package/.framework/src/pages/admin/AppDetailPage.tsx +48 -42
- package/.framework/src/pages/admin/AppsPage.tsx +45 -42
- package/.framework/src/pages/admin/DeliveriesPage.tsx +49 -17
- package/.framework/src/pages/admin/DesignedPage.tsx +31 -30
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +58 -0
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +49 -0
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +46 -29
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -29
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +68 -55
- package/.framework/src/pages/admin/IntegrationsPage.tsx +45 -42
- package/.framework/src/pages/admin/InvitesPage.tsx +60 -44
- package/.framework/src/pages/admin/LogsPage.tsx +87 -137
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +31 -29
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +150 -89
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +77 -104
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +44 -43
- package/.framework/src/pages/admin/PipelinesPage.tsx +59 -145
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +53 -42
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +47 -117
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +31 -44
- package/.framework/src/pages/admin/RoleDetailPage.tsx +49 -92
- package/.framework/src/pages/admin/RolesPage.tsx +47 -164
- package/.framework/src/pages/admin/SecurityPage.tsx +310 -0
- package/.framework/src/pages/admin/SelectTestPage.tsx +30 -32
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +37 -44
- package/.framework/src/pages/admin/SimpleDashboard.tsx +32 -44
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +97 -44
- package/.framework/src/pages/admin/TestingDashboard.tsx +126 -71
- package/.framework/src/pages/admin/TimerDetailPage.tsx +67 -55
- package/.framework/src/pages/admin/TimersPage.tsx +44 -42
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +47 -42
- package/.framework/src/pages/admin/TriggersPage.tsx +58 -57
- package/.framework/src/pages/admin/TypeDetailPage.tsx +91 -55
- package/.framework/src/pages/admin/TypesPage.tsx +45 -42
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +258 -128
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +127 -123
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +308 -235
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +159 -110
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +432 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +200 -178
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +286 -239
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +211 -90
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +156 -143
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +379 -0
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +337 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +219 -214
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +135 -65
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +39 -31
- package/.framework/src/pages/auth/LoginPage.tsx +38 -32
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -28
- package/.framework/src/pages/auth/RegisterPage.tsx +429 -155
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -30
- package/.framework/src/pages/spine-framework/CLIPage.tsx +32 -30
- package/.framework/src/types/auth.ts +101 -93
- package/.framework/src/types/types.ts +283 -262
- package/.framework/templates/project.json +87 -0
- package/.framework/templates/spine.config.neutral.json +7 -0
- package/.framework/tests/api/api-surface.test.ts +381 -0
- package/.framework/tests/fixtures/seed.ts +427 -0
- package/.framework/tests/fixtures/teardown.ts +228 -0
- package/.framework/tests/reporter.ts +351 -0
- package/.framework/tests/setup.ts +135 -0
- package/.framework/tests/ui/ui-sweep.ts +278 -0
- package/.framework/tests/unit/admin-data-logger.test.ts +310 -0
- package/.framework/tests/unit/agent-runner.test.ts +2389 -0
- package/.framework/tests/unit/ai-interactions.test.ts +81 -0
- package/.framework/tests/unit/app-manifest.test.ts +359 -0
- package/.framework/tests/unit/assembly-scripts.test.ts +172 -0
- package/.framework/tests/unit/cil-determinism.test.ts +85 -0
- package/.framework/tests/unit/core-isolation.test.ts +153 -0
- package/.framework/tests/unit/funnel-signals.test.ts +135 -0
- package/.framework/tests/unit/install-app.test.ts +1759 -0
- package/.framework/tests/unit/invites-security.test.ts +572 -0
- package/.framework/tests/unit/kb-ingest-lease.test.ts +287 -0
- package/.framework/tests/unit/kb-search.test.ts +119 -0
- package/.framework/tests/unit/migrate.test.ts +509 -0
- package/.framework/tests/unit/notify.test.ts +136 -0
- package/.framework/tests/unit/permissions.test.ts +269 -0
- package/.framework/tests/unit/pipeline-runner.test.ts +755 -0
- package/.framework/tests/unit/principal-cache.test.ts +138 -0
- package/.framework/tests/unit/retrieval-golden.test.ts +520 -0
- package/.framework/tests/unit/runtime-isolation.test.ts +642 -0
- package/.framework/tests/unit/schema-utils.test.ts +225 -0
- package/.framework/tests/unit/trigger-engine.test.ts +513 -0
- package/.framework/tests/unit/validate-app.test.ts +527 -0
- package/README.md +34 -3
- package/bin/spine-framework.cjs +1 -0
- package/config/tailwind.config.cjs +7 -0
- package/config/tsconfig.functions.json +42 -0
- package/config/tsconfig.json +37 -9
- package/config/vite.config.ts +31 -2
- package/netlify.toml +31 -3
- package/package.json +46 -29
- package/scripts/assemble-frontend.sh +127 -44
- package/scripts/assemble-functions.sh +127 -29
- package/scripts/boundary-check.sh +6 -2
- package/scripts/build-manifest.sh +24 -68
- package/scripts/checksum-manifest.mts +345 -0
- package/scripts/dev-clean.sh +86 -0
- package/scripts/dev-netlify.sh +49 -0
- package/scripts/netlify-dev-wrapper.sh +2 -0
- package/scripts/verify-install.ts +358 -0
- package/scripts/verify-integrity.sh +21 -57
- package/scripts/verify-manifest.mts +305 -0
- package/templates/project/gitignore +45 -0
- package/{config → templates/project}/package-lock.json +22335 -9366
- package/vitest.config.ts +46 -0
- package/.framework/public/spine.config.json +0 -91
- package/config/deno.lock +0 -108
- package/config/tsconfig.node.tsbuildinfo +0 -1
- package/config/tsconfig.tsbuildinfo +0 -1
- package/config/vite.config.d.ts +0 -2
- package/custom/.devin/AGENT.md +0 -357
- package/custom/.devin/skills/install-app/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +0 -39
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +0 -36
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +0 -46
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +0 -28
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +0 -38
- package/custom/.devin/workflows/app-install.yaml +0 -83
- package/custom/README.md +0 -79
- package/docs/README.md +0 -15
- package/scripts/app-install-cli.ts +0 -286
- package/scripts/check-core-integrity.sh +0 -82
- package/scripts/ingest-chunks.cjs +0 -202
- package/scripts/kb-chunk-parser.cjs +0 -312
- package/scripts/kb-chunk-parser.ts +0 -330
- package/scripts/kb-ingest-docs.ts +0 -203
- package/scripts/load-test-app-install.ts +0 -484
- package/scripts/test-login.js +0 -33
- package/spine.config.json +0 -91
|
@@ -1,25 +1,34 @@
|
|
|
1
|
-
// CIL[BEGIN
|
|
2
|
-
// CIL[DOC-MACRO purpose="
|
|
3
|
-
// CIL[DOC-RESPONSIBILITY responsibility="
|
|
4
|
-
// CIL[DOC-CONTEXT module="integration-routes" layer="
|
|
5
|
-
// CIL[DOC-CONTRACT inputs="
|
|
6
|
-
// CIL[DOC-MICRO logic_summary="
|
|
7
|
-
// CIL[DOC-CONFIDENCE pass="
|
|
8
|
-
// CIL[DOC-STABILITY stability="
|
|
9
|
-
// CIL[DOC-AUDIENCE audience="
|
|
10
|
-
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/principal.ts, .framework/functions/_shared/webhook-registry.ts, .framework/functions/admin-data.ts, .framework/functions/_shared/hash-api-key.ts, .framework/functions/_shared/resolve-credentials.ts, .framework/migrations/051_integration_broker.sql."]
|
|
11
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
12
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
13
|
-
// CIL[DOC-VECTOR type="constraint" content="Requires x-api-key header and ?slug= query parameter."]
|
|
14
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="Called by external services as POST /.netlify/functions/integration-routes?slug=<integration>."]
|
|
15
|
-
// CIL[DOC-VECTOR type="user_journey" content="External service pushes data into Spine."]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/integration-routes.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Netlify function entry point for inbound integration webhooks"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import shared modules and export the public execute/default handlers"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports dependencies and wires the default public handler" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="system-ai"]
|
|
16
10
|
|
|
17
11
|
import { createPublicHandler, CoreContext } from './_shared/middleware'
|
|
18
12
|
import { adminDb } from './_shared/db'
|
|
19
13
|
import { emitLog } from './_shared/audit'
|
|
20
14
|
import { resolveHandler } from './_shared/webhook-registry'
|
|
21
15
|
import { create as adminDataCreate } from './admin-data'
|
|
22
|
-
|
|
16
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Netlify function entry point for inbound integration webhooks'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
17
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
18
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
19
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
20
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
21
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
22
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:module_header:module_header"]
|
|
23
|
+
|
|
24
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:InboundAdapterContext:interface" type="interface" identity="InboundAdapterContext" parent="~/.framework/functions/integration-routes.ts"]
|
|
25
|
+
// CIL[DOC-MACRO purpose="Defines the context passed to inbound webhook adapters"]
|
|
26
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide typed fields for adapter input, integration, API key, event, headers and logging"]
|
|
27
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
28
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface" errors="none" side_effects="none"]
|
|
29
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface describing the shape of the inbound adapter context" notable_decisions="[]"]
|
|
30
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
31
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
23
32
|
interface InboundAdapterContext {
|
|
24
33
|
payload: any
|
|
25
34
|
integration: any
|
|
@@ -30,7 +39,22 @@ interface InboundAdapterContext {
|
|
|
30
39
|
headers: Record<string, string>
|
|
31
40
|
logger: { info: (msg: string, meta?: any) => void; warn: (msg: string, meta?: any) => void; error: (msg: string, meta?: any) => void }
|
|
32
41
|
}
|
|
33
|
-
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Defines the context passed to inbound webhook adapters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
43
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
44
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
45
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
46
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
47
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
48
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:InboundAdapterContext:interface"]
|
|
49
|
+
|
|
50
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:AdapterResult:interface" type="interface" identity="AdapterResult" parent="~/.framework/functions/integration-routes.ts"]
|
|
51
|
+
// CIL[DOC-MACRO purpose="Describes the normalized result returned by inbound webhook adapters"]
|
|
52
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide a typed contract for adapter transformation output"]
|
|
53
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
54
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="interface" errors="none" side_effects="none"]
|
|
55
|
+
// CIL[DOC-MICRO logic_summary="TypeScript interface describing the normalized adapter result shape" notable_decisions="[]"]
|
|
56
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
57
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
34
58
|
interface AdapterResult {
|
|
35
59
|
type_slug: string
|
|
36
60
|
data: Record<string, any>
|
|
@@ -42,17 +66,62 @@ interface AdapterResult {
|
|
|
42
66
|
error?: string
|
|
43
67
|
retryable?: boolean
|
|
44
68
|
}
|
|
45
|
-
|
|
69
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Describes the normalized result returned by inbound webhook adapters'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
70
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
71
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
72
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
73
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
74
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
75
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:AdapterResult:interface"]
|
|
76
|
+
|
|
77
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:getClientIp:function" type="function" identity="getClientIp" parent="~/.framework/functions/integration-routes.ts"]
|
|
78
|
+
// CIL[DOC-MACRO purpose="Extract the client IP from a request event"]
|
|
79
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Resolve the X-Forwarded-For header from the incoming event"]
|
|
80
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
81
|
+
// CIL[DOC-CONTRACT inputs="event" outputs="string" errors="none" side_effects="none"]
|
|
82
|
+
// CIL[DOC-MICRO logic_summary="Fallback across lowercase and uppercase header forms, defaulting to 'unknown'" notable_decisions="[]"]
|
|
83
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
84
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
46
85
|
function getClientIp(event: any): string {
|
|
47
86
|
return event.headers?.['x-forwarded-for'] || event.headers?.['X-Forwarded-For'] || 'unknown'
|
|
48
87
|
}
|
|
49
|
-
|
|
88
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Extract the client IP from a request event'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
89
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
90
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
91
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
92
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
93
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
94
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:getClientIp:function"]
|
|
95
|
+
|
|
96
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:computeNextAttempt:function" type="function" identity="computeNextAttempt" parent="~/.framework/functions/integration-routes.ts"]
|
|
97
|
+
// CIL[DOC-MACRO purpose="Calculate the next retry timestamp for a failed webhook delivery"]
|
|
98
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Compute an exponential backoff delay with jitter, capped at a maximum"]
|
|
99
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
100
|
+
// CIL[DOC-CONTRACT inputs="attemptCount, baseMs, maxDelayMs" outputs="Date" errors="none" side_effects="uses Math.random"]
|
|
101
|
+
// CIL[DOC-MICRO logic_summary="Doubles the base delay per attempt, adds up to 20% jitter, and clamps to the configured max" notable_decisions="[]"]
|
|
102
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
103
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
50
104
|
function computeNextAttempt(attemptCount: number, baseMs = 30000, maxDelayMs = 3600000): Date {
|
|
51
105
|
const delay = Math.min(baseMs * Math.pow(2, attemptCount), maxDelayMs)
|
|
52
106
|
const jitter = Math.floor(Math.random() * delay * 0.2)
|
|
53
107
|
return new Date(Date.now() + delay + jitter)
|
|
54
108
|
}
|
|
55
|
-
|
|
109
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Calculate the next retry timestamp for a failed webhook delivery'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
110
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
111
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
112
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
113
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
114
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
115
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:computeNextAttempt:function"]
|
|
116
|
+
|
|
117
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:extractEvent:function" type="function" identity="extractEvent" parent="~/.framework/functions/integration-routes.ts"]
|
|
118
|
+
// CIL[DOC-MACRO purpose="Determine the event name from an inbound webhook payload"]
|
|
119
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Extract the event from a header or a dotted path in the payload"]
|
|
120
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
121
|
+
// CIL[DOC-CONTRACT inputs="payload, eventHeader, eventPath" outputs="string | null" errors="none" side_effects="none"]
|
|
122
|
+
// CIL[DOC-MICRO logic_summary="Returns the header value directly when provided; otherwise navigates the payload object by the dotted path and coerces to null if missing or empty" notable_decisions="[]"]
|
|
123
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
124
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
56
125
|
function extractEvent(payload: any, eventHeader?: string | null, eventPath?: string | null): string | null {
|
|
57
126
|
if (eventHeader) {
|
|
58
127
|
const h = eventHeader.toLowerCase()
|
|
@@ -69,7 +138,22 @@ function extractEvent(payload: any, eventHeader?: string | null, eventPath?: str
|
|
|
69
138
|
}
|
|
70
139
|
return null
|
|
71
140
|
}
|
|
72
|
-
|
|
141
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Determine the event name from an inbound webhook payload'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
142
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
143
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
144
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
145
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
146
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
147
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:extractEvent:function"]
|
|
148
|
+
|
|
149
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:execute:function" type="function" identity="execute" parent="~/.framework/functions/integration-routes.ts"]
|
|
150
|
+
// CIL[DOC-MACRO purpose="Main inbound webhook execution handler"]
|
|
151
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Validate the request, resolve the integration and adapter, persist delivery records, and create the resulting item"]
|
|
152
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
153
|
+
// CIL[DOC-CONTRACT inputs="ctx, body" outputs="record" errors="400, 401, 403, 404, adapter error" side_effects="Inserts and updates webhook_deliveries, emits audit logs, calls admin-data create"]
|
|
154
|
+
// CIL[DOC-MICRO logic_summary="Performs API key and integration authorization, extracts event, resolves the adapter, persists a delivery record, invokes the adapter, updates delivery status, and creates an admin-data record from the adapter result" notable_decisions="[]"]
|
|
155
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
156
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
73
157
|
export async function execute(ctx: CoreContext, body: any = {}): Promise<any> {
|
|
74
158
|
const slug = ctx.query?.slug || body?.slug
|
|
75
159
|
|
|
@@ -291,7 +375,28 @@ export async function execute(ctx: CoreContext, body: any = {}): Promise<any> {
|
|
|
291
375
|
throw err
|
|
292
376
|
}
|
|
293
377
|
}
|
|
294
|
-
|
|
378
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Main inbound webhook execution handler'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
379
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
380
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
381
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
382
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
383
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
384
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:execute:function"]
|
|
385
|
+
|
|
386
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integration-routes.ts:default:function" type="function" identity="default" parent="~/.framework/functions/integration-routes.ts"]
|
|
387
|
+
// CIL[DOC-MACRO purpose="Exports the default Netlify handler wrapping execute in public middleware"]
|
|
388
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Expose execute as the public Netlify function entry point"]
|
|
389
|
+
// CIL[DOC-CONTEXT module="integration-routes" layer="functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/webhook-registry.ts,.framework/functions/admin-data.ts,.framework/functions/integration-routes.ts"]
|
|
390
|
+
// CIL[DOC-CONTRACT inputs="none (createPublicHandler wraps execute)" outputs="public handler" errors="none" side_effects="none"]
|
|
391
|
+
// CIL[DOC-MICRO logic_summary="Wraps the execute function with createPublicHandler for public invocation" notable_decisions="[]"]
|
|
392
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
393
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
295
394
|
export default createPublicHandler(execute)
|
|
395
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Exports the default Netlify handler wrapping execute in public middleware'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
396
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
397
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
398
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
399
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
400
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
401
|
+
// CIL[END stable_id="~/.framework/functions/integration-routes.ts:default:function"]
|
|
296
402
|
|
|
297
|
-
// CIL[END chunk_id="integration_routes_module_header_1784200006"]
|
|
@@ -1,33 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// CIL[
|
|
8
|
-
// CIL[DOC-MACRO purpose="Import dependencies for integration CRUD API"]
|
|
9
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Import handler utilities and database access"]
|
|
10
|
-
// CIL[DOC-CONTEXT module="integrations" layer="api-handler" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
11
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Imported modules" errors="Import failures" side_effects="none"]
|
|
12
|
-
// CIL[DOC-MICRO logic_summary="Imports createHandler, joins, emitLog, sanitizeRecordData" notable_decisions="[]"]
|
|
13
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:module_header:module_header" type="module_header" identity="module_header" parent="~/.framework/functions/integrations.ts"]
|
|
2
|
+
// CIL[DOC-MACRO purpose="Integration handler module that exports CRUD handlers and helpers for the integrations table"]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Provide create, read, update, and delete handlers plus slug derivation and credential validation helpers for integration records"]
|
|
4
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="HTTP request context and method" outputs="Routed integration data responses" errors="Throws on missing context, invalid input, or database errors" side_effects="Reads and writes integrations table and emits audit logs"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports shared middleware, database joins, audit, and permissions helpers then defines slug derivation, credential configuration check, list, get, create, update, remove, and a top-level method router" notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
14
8
|
// CIL[DOC-STABILITY stability="stable"]
|
|
15
|
-
// CIL[DOC-AUDIENCE audience="
|
|
16
|
-
|
|
17
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
18
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
19
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
20
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
21
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="engineers maintaining integration handlers and related admin-data endpoints"]
|
|
10
|
+
|
|
22
11
|
import { createHandler } from './_shared/middleware'
|
|
23
12
|
import { joins } from './_shared/db'
|
|
24
13
|
import { emitLog } from './_shared/audit'
|
|
25
14
|
import { sanitizeRecordData } from './_shared/permissions'
|
|
26
|
-
|
|
15
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Integration handler module that exports CRUD handlers and helpers for the integrations table'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
16
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
17
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
18
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
19
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:module_header:module_header"]
|
|
22
|
+
|
|
23
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:deriveSlug:function" type="function" identity="deriveSlug" parent="~/.framework/functions/integrations.ts"]
|
|
24
|
+
// CIL[DOC-MACRO purpose="Derive a URL-safe slug from a name and optional override"]
|
|
25
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Normalize integration names to kebab-case slugs"]
|
|
26
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
27
|
+
// CIL[DOC-CONTRACT inputs="name: string, slug?: string" outputs="string" errors="none" side_effects="none"]
|
|
28
|
+
// CIL[DOC-STABILITY stability="internal"]
|
|
29
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
30
|
+
// CIL[DOC-MICRO logic_summary="Returns provided slug or lowercases the name, collapses whitespace to hyphens, and strips characters that are not alphanumeric or hyphens" notable_decisions="[]"]
|
|
27
31
|
function deriveSlug(name: string, slug?: string): string {
|
|
28
32
|
return slug || name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')
|
|
29
33
|
}
|
|
34
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:deriveSlug:function"]
|
|
30
35
|
|
|
36
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Derive a URL-safe slug from a name and optional override'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
37
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
38
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
39
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
40
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
41
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
42
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:computeIsConfigured:function" type="function" identity="computeIsConfigured" parent="~/.framework/functions/integrations.ts"]
|
|
43
|
+
// CIL[DOC-MACRO purpose="Determine whether all credential entries are populated strings"]
|
|
44
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Evaluate integration configured status from a credentials map"]
|
|
45
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
46
|
+
// CIL[DOC-CONTRACT inputs="credentials: Record<string, any> | undefined" outputs="boolean" errors="none" side_effects="none"]
|
|
47
|
+
// CIL[DOC-MICRO logic_summary="Returns false if credentials is undefined or empty; otherwise requires every entry to have a source and a non-empty string value" notable_decisions="[]"]
|
|
48
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
49
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
31
50
|
function computeIsConfigured(credentials: Record<string, any> | undefined): boolean {
|
|
32
51
|
if (!credentials || Object.keys(credentials).length === 0) return false
|
|
33
52
|
return Object.values(credentials).every((entry: any) => {
|
|
@@ -35,21 +54,21 @@ function computeIsConfigured(credentials: Record<string, any> | undefined): bool
|
|
|
35
54
|
return typeof entry.value === 'string' && entry.value.length > 0
|
|
36
55
|
})
|
|
37
56
|
}
|
|
38
|
-
// CIL[
|
|
39
|
-
// CIL[
|
|
40
|
-
// CIL[DOC-
|
|
41
|
-
// CIL[DOC-
|
|
42
|
-
// CIL[DOC-CONTEXT module="integrations" layer="api-handler" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/principal.ts\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
43
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Array of sanitized integration records" errors="Account context required, DB errors" side_effects="DB read operations"]
|
|
44
|
-
// CIL[DOC-MICRO logic_summary="Builds filtered query with joins, sanitizes each result before returning" notable_decisions="[]"]
|
|
45
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
46
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
47
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/principal.ts, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
48
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
49
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
50
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
57
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Determine whether all credential entries are populated strings'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
58
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
59
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
60
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
51
61
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
52
62
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
63
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:computeIsConfigured:function"]
|
|
64
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/integrations.ts"]
|
|
65
|
+
// CIL[DOC-MACRO purpose="List integration records with optional filters and pagination"]
|
|
66
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle GET /integrations list requests"]
|
|
67
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
68
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, _body: any" outputs="Sanitized integration records" errors="Throws on missing account or database error" side_effects="Reads integrations table with optional filters"]
|
|
69
|
+
// CIL[DOC-MICRO logic_summary="Builds a query from query parameters, applies pagination, and sanitizes each returned record" notable_decisions="[]"]
|
|
70
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
71
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
53
72
|
export const list = createHandler(async (ctx, _body) => {
|
|
54
73
|
const { integration_type, provider, is_active, is_configured, limit = 100, offset = 0 } = ctx.query || {}
|
|
55
74
|
|
|
@@ -89,21 +108,21 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
89
108
|
|
|
90
109
|
return sanitized
|
|
91
110
|
})
|
|
92
|
-
// CIL[
|
|
93
|
-
// CIL[
|
|
94
|
-
// CIL[DOC-
|
|
95
|
-
// CIL[DOC-
|
|
96
|
-
// CIL[DOC-CONTEXT module="integrations" layer="api-handler" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
97
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Sanitized integration record" errors="Integration ID required, not found, DB errors" side_effects="DB read operation"]
|
|
98
|
-
// CIL[DOC-MICRO logic_summary="Queries by ID with joins, sanitizes result before returning" notable_decisions="[]"]
|
|
99
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
100
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
101
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
102
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
103
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
104
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
111
|
+
// CIL[DOC-VECTOR type="context" content="purpose='List integration records with optional filters and pagination'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
112
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
113
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
114
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
105
115
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
106
116
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
117
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:list:constant"]
|
|
118
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/integrations.ts"]
|
|
119
|
+
// CIL[DOC-MACRO purpose="Retrieve a single integration by id"]
|
|
120
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle GET /integrations?id=... requests"]
|
|
121
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
122
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, _body: any" outputs="Sanitized integration record" errors="Throws when id missing or record not found" side_effects="Reads integrations table"]
|
|
123
|
+
// CIL[DOC-MICRO logic_summary="Fetches one integration by id and sanitizes the result for the caller" notable_decisions="[]"]
|
|
124
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
125
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
107
126
|
export const get = createHandler(async (ctx, _body) => {
|
|
108
127
|
const { id } = ctx.query || {}
|
|
109
128
|
|
|
@@ -121,21 +140,21 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
121
140
|
|
|
122
141
|
return await sanitizeRecordData(ctx, data, 'integration')
|
|
123
142
|
})
|
|
124
|
-
// CIL[
|
|
125
|
-
// CIL[
|
|
126
|
-
// CIL[DOC-
|
|
127
|
-
// CIL[DOC-
|
|
128
|
-
// CIL[DOC-CONTEXT module="integrations" layer="api-handler" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
129
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Created integration record" errors="Required fields missing, auth required, DB errors" side_effects="DB insert, audit logging"]
|
|
130
|
-
// CIL[DOC-MICRO logic_summary="Validates required fields, creates integration record, logs creation" notable_decisions="[]"]
|
|
131
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
132
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
133
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
134
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
135
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
136
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
143
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Retrieve a single integration by id'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
144
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
145
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
146
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
137
147
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
138
148
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
149
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:get:constant"]
|
|
150
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:create:constant" type="constant" identity="create" parent="~/.framework/functions/integrations.ts"]
|
|
151
|
+
// CIL[DOC-MACRO purpose="Create a new integration record"]
|
|
152
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle POST /integrations requests"]
|
|
153
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
154
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, body with integration fields" outputs="New integration record" errors="Throws on validation, permission, or database error" side_effects="Inserts into integrations table and emits audit log"]
|
|
155
|
+
// CIL[DOC-MICRO logic_summary="Validates required fields and context, derives a slug, computes configured state, inserts the record, and emits an audit log" notable_decisions="[]"]
|
|
156
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
157
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
139
158
|
export const create = createHandler(async (ctx, body) => {
|
|
140
159
|
const { app_id, name, description, integration_type, provider, version, config, credentials, metadata } = body
|
|
141
160
|
|
|
@@ -178,21 +197,21 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
178
197
|
|
|
179
198
|
return data
|
|
180
199
|
})
|
|
181
|
-
// CIL[
|
|
182
|
-
// CIL[
|
|
183
|
-
// CIL[DOC-
|
|
184
|
-
// CIL[DOC-
|
|
185
|
-
// CIL[DOC-CONTEXT module="integrations" layer="api-handler" related_files="[\".framework/src/pages/admin/IntegrationsPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/db.ts\"]"]
|
|
186
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Updated integration record" errors="Integration ID required, DB errors" side_effects="DB update, audit logging"]
|
|
187
|
-
// CIL[DOC-MICRO logic_summary="Updates only allowed fields, logs changes, returns updated record" notable_decisions="[]"]
|
|
188
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
189
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
190
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/IntegrationsPage.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/db.ts."]
|
|
191
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
192
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
193
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
200
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Create a new integration record'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
201
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
202
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
203
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
194
204
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
195
205
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
206
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:create:constant"]
|
|
207
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:update:constant" type="constant" identity="update" parent="~/.framework/functions/integrations.ts"]
|
|
208
|
+
// CIL[DOC-MACRO purpose="Update an existing integration record"]
|
|
209
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle PATCH /integrations requests"]
|
|
210
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
211
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, body with id and allowed fields" outputs="Updated integration record" errors="Throws on missing id or database error" side_effects="Updates integrations table and emits audit log"]
|
|
212
|
+
// CIL[DOC-MICRO logic_summary="Collects allowed fields, recomputes configured state when credentials change, updates by id, and emits an audit log" notable_decisions="[]"]
|
|
213
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
214
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
196
215
|
export const update = createHandler(async (ctx, body) => {
|
|
197
216
|
const id = body?.id || ctx.query?.id
|
|
198
217
|
const { id: _bodyId, ...updates } = body || {}
|
|
@@ -227,21 +246,21 @@ export const update = createHandler(async (ctx, body) => {
|
|
|
227
246
|
|
|
228
247
|
return data
|
|
229
248
|
})
|
|
230
|
-
// CIL[
|
|
231
|
-
// CIL[
|
|
232
|
-
// CIL[DOC-
|
|
233
|
-
// CIL[DOC-
|
|
234
|
-
// CIL[DOC-CONTEXT module="integrations" layer="api-handler" related_files="[]"]
|
|
235
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Updated integration record" errors="Integration ID required, not found, DB errors" side_effects="DB soft delete, audit logging"]
|
|
236
|
-
// CIL[DOC-MICRO logic_summary="Sets is_active false, logs deletion, preserves record for audit" notable_decisions="[]"]
|
|
237
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
238
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
239
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
240
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
241
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
242
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
249
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Update an existing integration record'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
250
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
251
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
252
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
243
253
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
244
254
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
255
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:update:constant"]
|
|
256
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:remove:constant" type="constant" identity="remove" parent="~/.framework/functions/integrations.ts"]
|
|
257
|
+
// CIL[DOC-MACRO purpose="Soft-delete an integration by marking it inactive"]
|
|
258
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle DELETE /integrations requests"]
|
|
259
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
260
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, _body: any" outputs="Record marked inactive" errors="Throws when id missing or record not found" side_effects="Sets is_active to false and emits audit log"]
|
|
261
|
+
// CIL[DOC-MICRO logic_summary="Verifies the integration exists, marks it inactive with an updated timestamp, and emits an audit log" notable_decisions="[]"]
|
|
262
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
263
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
245
264
|
export const remove = createHandler(async (ctx, _body) => {
|
|
246
265
|
const id = ctx.query?.id
|
|
247
266
|
|
|
@@ -273,21 +292,21 @@ export const remove = createHandler(async (ctx, _body) => {
|
|
|
273
292
|
|
|
274
293
|
return data
|
|
275
294
|
})
|
|
276
|
-
// CIL[END
|
|
277
|
-
// CIL[BEGIN
|
|
278
|
-
// CIL[DOC-MACRO purpose="Route HTTP
|
|
279
|
-
// CIL[DOC-
|
|
280
|
-
// CIL[DOC-
|
|
281
|
-
// CIL[DOC-
|
|
282
|
-
// CIL[DOC-
|
|
283
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
284
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
285
|
-
// CIL[DOC-VECTOR type="context" content="Layer: api-handler. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
286
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
287
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
288
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
295
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:remove:constant"]
|
|
296
|
+
// CIL[BEGIN stable_id="~/.framework/functions/integrations.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/integrations.ts"]
|
|
297
|
+
// CIL[DOC-MACRO purpose="Route integration HTTP requests by method"]
|
|
298
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Soft-delete an integration by marking it inactive'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
299
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
300
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
301
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
289
302
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
290
303
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
304
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch GET, POST, PATCH, DELETE to the appropriate handler"]
|
|
305
|
+
// CIL[DOC-CONTEXT module="integrations" layer=".framework/functions" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/permissions.ts,.framework/functions/integrations.ts"]
|
|
306
|
+
// CIL[DOC-CONTRACT inputs="ctx: RequestContext, body: any" outputs="Result from chosen handler" errors="Throws for unsupported method or delegate errors" side_effects="Delegates to CRUD handlers and helpers"]
|
|
307
|
+
// CIL[DOC-MICRO logic_summary="Selects a handler based on the request method and optional id in query" notable_decisions="[]"]
|
|
308
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
309
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
291
310
|
export const handler = createHandler(async (ctx, body) => {
|
|
292
311
|
const method = ctx.query?.method || 'GET'
|
|
293
312
|
|
|
@@ -308,4 +327,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
308
327
|
throw new Error(`Unsupported method: ${method}`)
|
|
309
328
|
}
|
|
310
329
|
})
|
|
311
|
-
// CIL[
|
|
330
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Route integration HTTP requests by method'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/db.ts,.framework/functions/_shared/audit.ts"]
|
|
331
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
332
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
333
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
334
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
335
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
336
|
+
// CIL[END stable_id="~/.framework/functions/integrations.ts:handler:constant"]
|