spine-framework 0.3.125 → 0.3.126
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/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +169 -97
- package/.framework/cli/commands/generate.ts +82 -160
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +147 -54
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +222 -347
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +162 -14
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +687 -533
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +173 -145
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +192 -115
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +3 -3
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,59 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// CIL[BEGIN chunk_id="api-keys_moduleheader_1783969696" type="module_header" identity="imports" parent="none"]
|
|
31
|
+
// CIL[DOC-MACRO purpose="Import dependencies for API keys module"]
|
|
32
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Import middleware, audit, and permissions utilities"]
|
|
33
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
34
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imported_modules" errors="none" side_effects="none"]
|
|
35
|
+
// CIL[DOC-MICRO logic_summary="Imports required dependencies for API key management functions" notable_decisions="[]"]
|
|
36
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
37
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
38
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
39
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
40
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
41
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
42
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
43
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
44
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
35
45
|
|
|
36
46
|
import { createHandler } from './_shared/middleware'
|
|
47
|
+
import { adminDb } from './_shared/db'
|
|
37
48
|
import { emitLog } from './_shared/audit'
|
|
49
|
+
import { isSystemAdmin } from './_shared/principal'
|
|
38
50
|
import { sanitizeRecordData } from './_shared/permissions'
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
//
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
* @tags api-keys, list, crud, pagination
|
|
56
|
-
*/
|
|
51
|
+
import { hashApiKey } from './_shared/hash-api-key'
|
|
52
|
+
// CIL[END chunk_id="api-keys_moduleheader_1783969696"]
|
|
53
|
+
// CIL[BEGIN chunk_id="api-keys_list_1783969696" type="function" identity="list" parent="none"]
|
|
54
|
+
// CIL[DOC-MACRO purpose="List API keys with filtering"]
|
|
55
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieve and filter API keys by various criteria"]
|
|
56
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
57
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="sanitized_api_keys" errors="auth_errors,db_errors" side_effects="none"]
|
|
58
|
+
// CIL[DOC-MICRO logic_summary="Query API keys with filters, sanitize data, return paginated results" notable_decisions="[]"]
|
|
59
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
60
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
61
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 3. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/table-primitives.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
62
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 3. Total affected: 3."]
|
|
63
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
64
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
65
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
66
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
57
67
|
export const list = createHandler(async (ctx, _body) => {
|
|
58
68
|
const { integration_id, key_type, is_active, expires_before, expires_after, limit = 100, offset = 0 } = ctx.query || {}
|
|
59
69
|
|
|
@@ -61,13 +71,11 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
61
71
|
throw new Error('Account context required')
|
|
62
72
|
}
|
|
63
73
|
|
|
64
|
-
|
|
74
|
+
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
75
|
+
|
|
76
|
+
let query = db
|
|
65
77
|
.from('api_keys')
|
|
66
|
-
.select(
|
|
67
|
-
*,
|
|
68
|
-
integration:integrations(id, name, provider, integration_type),
|
|
69
|
-
created_by_person:people(id, full_name, email)
|
|
70
|
-
`)
|
|
78
|
+
.select('*')
|
|
71
79
|
.order('created_at', { ascending: false })
|
|
72
80
|
|
|
73
81
|
if (integration_id) {
|
|
@@ -100,23 +108,21 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
100
108
|
|
|
101
109
|
return sanitized
|
|
102
110
|
})
|
|
103
|
-
//
|
|
104
|
-
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
* @tags api-keys, get, crud, single-record
|
|
119
|
-
*/
|
|
111
|
+
// CIL[END chunk_id="api-keys_list_1783969696"]
|
|
112
|
+
// CIL[BEGIN chunk_id="api-keys_get_1783969696" type="function" identity="get" parent="none"]
|
|
113
|
+
// CIL[DOC-MACRO purpose="Get single API key by ID"]
|
|
114
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieve individual API key record with related data"]
|
|
115
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\"\\\"]"]
|
|
116
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="sanitized_api_key" errors="not_found,db_errors" side_effects="none"]
|
|
117
|
+
// CIL[DOC-MICRO logic_summary="Query API key by ID with integration and creator details, sanitize" notable_decisions="[]"]
|
|
118
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
119
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
120
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, \."]
|
|
121
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
122
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
123
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
124
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
125
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
120
126
|
export const get = createHandler(async (ctx, _body) => {
|
|
121
127
|
const { id } = ctx.query || {}
|
|
122
128
|
|
|
@@ -124,13 +130,11 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
124
130
|
throw new Error('API key ID is required')
|
|
125
131
|
}
|
|
126
132
|
|
|
127
|
-
const
|
|
133
|
+
const db = isSystemAdmin(ctx.principal) ? adminDb : ctx.db
|
|
134
|
+
|
|
135
|
+
const { data, error: err } = await db
|
|
128
136
|
.from('api_keys')
|
|
129
|
-
.select(
|
|
130
|
-
*,
|
|
131
|
-
integration:integrations(id, name, provider, integration_type),
|
|
132
|
-
created_by_person:people(id, full_name, email)
|
|
133
|
-
`)
|
|
137
|
+
.select('*')
|
|
134
138
|
.eq('id', id)
|
|
135
139
|
.single()
|
|
136
140
|
|
|
@@ -138,25 +142,35 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
138
142
|
|
|
139
143
|
return await sanitizeRecordData(ctx, data, 'api_key')
|
|
140
144
|
})
|
|
141
|
-
//
|
|
142
|
-
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
* @tags api-keys, create, crud, rpc, audit
|
|
157
|
-
*/
|
|
145
|
+
// CIL[END chunk_id="api-keys_get_1783969696"]
|
|
146
|
+
// CIL[BEGIN chunk_id="api-keys_create_1783969696" type="function" identity="create" parent="none"]
|
|
147
|
+
// CIL[DOC-MACRO purpose="Create new API key with validation"]
|
|
148
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Generate API key with permissions and audit logging"]
|
|
149
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\".framework/functions/_shared/schema-utils.ts\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
150
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="created_api_key" errors="validation_errors,db_errors" side_effects="db_write,audit_log"]
|
|
151
|
+
// CIL[DOC-MICRO logic_summary="Call stored procedure to create key, log creation event" notable_decisions="[]"]
|
|
152
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
|
|
153
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
154
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 4. Direct calls: 0. Related files: .framework/functions/_shared/schema-utils.ts, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
155
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 4. Total affected: 5."]
|
|
156
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
157
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
158
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
159
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
158
160
|
export const create = createHandler(async (ctx, body) => {
|
|
159
|
-
const {
|
|
161
|
+
const {
|
|
162
|
+
integration_id,
|
|
163
|
+
app_id,
|
|
164
|
+
name,
|
|
165
|
+
key_type,
|
|
166
|
+
permissions,
|
|
167
|
+
scopes,
|
|
168
|
+
rate_limit,
|
|
169
|
+
expires_at,
|
|
170
|
+
metadata,
|
|
171
|
+
machine_type,
|
|
172
|
+
is_internal
|
|
173
|
+
} = body
|
|
160
174
|
|
|
161
175
|
if (!name) {
|
|
162
176
|
throw new Error('name is required')
|
|
@@ -166,46 +180,65 @@ export const create = createHandler(async (ctx, body) => {
|
|
|
166
180
|
throw new Error('Account context required')
|
|
167
181
|
}
|
|
168
182
|
|
|
183
|
+
const slug = body.slug || name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')
|
|
184
|
+
|
|
185
|
+
const rawKey = `sk_${crypto.randomUUID().replace(/-/g, '')}`
|
|
186
|
+
const { key_prefix, key_hash } = hashApiKey(rawKey)
|
|
187
|
+
|
|
188
|
+
const insertData = {
|
|
189
|
+
integration_id: integration_id || null,
|
|
190
|
+
app_id: app_id || ctx.appId || null,
|
|
191
|
+
account_id: ctx.accountId,
|
|
192
|
+
slug,
|
|
193
|
+
name,
|
|
194
|
+
key_prefix,
|
|
195
|
+
key_hash,
|
|
196
|
+
key_type: key_type || 'inbound',
|
|
197
|
+
permissions: permissions || [],
|
|
198
|
+
scopes: scopes || [],
|
|
199
|
+
rate_limit: rate_limit || 100,
|
|
200
|
+
expires_at: expires_at || null,
|
|
201
|
+
metadata: metadata || {},
|
|
202
|
+
machine_type: machine_type || 'integration',
|
|
203
|
+
is_internal: is_internal || false,
|
|
204
|
+
is_active: true,
|
|
205
|
+
created_by: ctx.principal?.id || null
|
|
206
|
+
}
|
|
207
|
+
|
|
169
208
|
const { data, error: err } = await ctx.db
|
|
170
|
-
.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
key_prefix: key_prefix || 'sk_',
|
|
175
|
-
permissions: permissions || {},
|
|
176
|
-
rate_limit: rate_limit || 1000,
|
|
177
|
-
expires_at,
|
|
178
|
-
metadata: metadata || {},
|
|
179
|
-
created_by: ctx.principal?.id,
|
|
180
|
-
account_id: ctx.accountId
|
|
181
|
-
})
|
|
209
|
+
.from('api_keys')
|
|
210
|
+
.insert(insertData)
|
|
211
|
+
.select('id, name, key_type, rate_limit, expires_at, is_active, created_at')
|
|
212
|
+
.single()
|
|
182
213
|
|
|
183
214
|
if (err) throw err
|
|
184
215
|
|
|
185
|
-
await emitLog(ctx, 'api_key.created',
|
|
186
|
-
{ type: 'api_key', id: data
|
|
187
|
-
{ after: { name, key_type, rate_limit } }
|
|
216
|
+
await emitLog(ctx, 'api_key.created',
|
|
217
|
+
{ type: 'api_key', id: data.id },
|
|
218
|
+
{ after: { name, key_type, rate_limit, integration_id } }
|
|
188
219
|
)
|
|
189
220
|
|
|
190
|
-
return
|
|
221
|
+
return {
|
|
222
|
+
...data,
|
|
223
|
+
raw_key: rawKey,
|
|
224
|
+
warning: 'Store this key now. It will not be shown again.'
|
|
225
|
+
}
|
|
191
226
|
})
|
|
192
|
-
//
|
|
193
|
-
|
|
194
|
-
//
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
* @tags api-keys, validate, rpc, authentication
|
|
208
|
-
*/
|
|
227
|
+
// CIL[END chunk_id="api-keys_create_1783969696"]
|
|
228
|
+
// CIL[BEGIN chunk_id="api-keys_validate_1783969696" type="function" identity="validate" parent="none"]
|
|
229
|
+
// CIL[DOC-MACRO purpose="Validate API key and permissions"]
|
|
230
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Check API key validity and required permissions"]
|
|
231
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
232
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="validation_result" errors="validation_errors,db_errors" side_effects="none"]
|
|
233
|
+
// CIL[DOC-MICRO logic_summary="Call stored procedure to validate key against permissions" notable_decisions="[]"]
|
|
234
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="external_symbols_unknown"]
|
|
235
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
236
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 1. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/src/components/ui/dialog.tsx, \."]
|
|
237
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
238
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
239
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
240
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
241
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
209
242
|
export const validate = createHandler(async (ctx, body) => {
|
|
210
243
|
const { key_value, required_permissions } = body
|
|
211
244
|
|
|
@@ -213,33 +246,64 @@ export const validate = createHandler(async (ctx, body) => {
|
|
|
213
246
|
throw new Error('key_value is required')
|
|
214
247
|
}
|
|
215
248
|
|
|
216
|
-
const
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
249
|
+
const keyPrefix = key_value.slice(0, 8)
|
|
250
|
+
|
|
251
|
+
const { data: rows, error: err } = await ctx.db
|
|
252
|
+
.from('api_keys')
|
|
253
|
+
.select('*')
|
|
254
|
+
.eq('key_prefix', keyPrefix)
|
|
255
|
+
.eq('is_active', true)
|
|
256
|
+
.or('expires_at.is.null,expires_at.gte.now()')
|
|
221
257
|
|
|
222
258
|
if (err) throw err
|
|
259
|
+
if (!rows || rows.length === 0) {
|
|
260
|
+
return { is_valid: false, error: 'Invalid or inactive API key' }
|
|
261
|
+
}
|
|
223
262
|
|
|
224
|
-
|
|
263
|
+
const { verifyApiKey } = await import('./_shared/hash-api-key')
|
|
264
|
+
|
|
265
|
+
for (const key of rows) {
|
|
266
|
+
if (verifyApiKey(key_value, key.key_hash)) {
|
|
267
|
+
const hasPermissions = !required_permissions || required_permissions.length === 0 ||
|
|
268
|
+
(key.permissions || []).some((p: string) => required_permissions.includes(p))
|
|
269
|
+
|
|
270
|
+
if (!hasPermissions) {
|
|
271
|
+
return {
|
|
272
|
+
is_valid: false,
|
|
273
|
+
error: 'Insufficient permissions',
|
|
274
|
+
api_key_id: key.id
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
return {
|
|
279
|
+
is_valid: true,
|
|
280
|
+
api_key_id: key.id,
|
|
281
|
+
integration_id: key.integration_id,
|
|
282
|
+
app_id: key.app_id,
|
|
283
|
+
account_id: key.account_id,
|
|
284
|
+
scopes: key.scopes,
|
|
285
|
+
permissions: key.permissions
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return { is_valid: false, error: 'Invalid or inactive API key' }
|
|
225
291
|
})
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
//
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
* @tags api-keys, revoke, crud, audit
|
|
242
|
-
*/
|
|
292
|
+
// CIL[END chunk_id="api-keys_validate_1783969696"]
|
|
293
|
+
// CIL[BEGIN chunk_id="api-keys_revoke_1783969696" type="function" identity="revoke" parent="none"]
|
|
294
|
+
// CIL[DOC-MACRO purpose="Revoke API key by deactivating"]
|
|
295
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Deactivate API key with audit logging"]
|
|
296
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
297
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="revoked_api_key" errors="not_found,db_errors" side_effects="db_write,audit_log"]
|
|
298
|
+
// CIL[DOC-MICRO logic_summary="Set is_active=false, log revocation event" notable_decisions="[]"]
|
|
299
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
300
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
301
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
302
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
303
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
304
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
305
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
306
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
243
307
|
export const revoke = createHandler(async (ctx, body) => {
|
|
244
308
|
const { id } = body
|
|
245
309
|
|
|
@@ -263,23 +327,21 @@ export const revoke = createHandler(async (ctx, body) => {
|
|
|
263
327
|
|
|
264
328
|
return data
|
|
265
329
|
})
|
|
266
|
-
//
|
|
267
|
-
|
|
268
|
-
//
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
* @tags api-keys, usage-logs, pagination, monitoring
|
|
282
|
-
*/
|
|
330
|
+
// CIL[END chunk_id="api-keys_revoke_1783969696"]
|
|
331
|
+
// CIL[BEGIN chunk_id="api-keys_listusagelogs_1783969696" type="function" identity="listUsageLogs" parent="none"]
|
|
332
|
+
// CIL[DOC-MACRO purpose="List API key usage logs"]
|
|
333
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Retrieve API key usage history with filtering"]
|
|
334
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
335
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="usage_logs" errors="auth_errors,db_errors" side_effects="none"]
|
|
336
|
+
// CIL[DOC-MICRO logic_summary="Query usage logs with filters, return paginated results" notable_decisions="[]"]
|
|
337
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
338
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
339
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
340
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
341
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
342
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
343
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
344
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
283
345
|
export const listUsageLogs = createHandler(async (ctx, _body) => {
|
|
284
346
|
const { api_key_id, response_status, success, date_from, date_to, limit = 100, offset = 0 } = ctx.query || {}
|
|
285
347
|
|
|
@@ -320,25 +382,21 @@ export const listUsageLogs = createHandler(async (ctx, _body) => {
|
|
|
320
382
|
|
|
321
383
|
return data
|
|
322
384
|
})
|
|
323
|
-
//
|
|
324
|
-
|
|
325
|
-
//
|
|
326
|
-
|
|
327
|
-
//
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
* @depended-by [Netlify function routing]
|
|
339
|
-
* @side-effects [Delegates to appropriate handler]
|
|
340
|
-
* @tags api-keys, router, crud, netlify-function
|
|
341
|
-
*/
|
|
385
|
+
// CIL[END chunk_id="api-keys_listusagelogs_1783969696"]
|
|
386
|
+
// CIL[BEGIN chunk_id="api-keys_handler_1783969696" type="function" identity="handler" parent="none"]
|
|
387
|
+
// CIL[DOC-MACRO purpose="Route API key HTTP methods"]
|
|
388
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch requests to API key operations"]
|
|
389
|
+
// CIL[DOC-CONTEXT module="api-keys" layer="backend_functions" related_files="[]"]
|
|
390
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="function_responses" errors="method_errors" side_effects="none"]
|
|
391
|
+
// CIL[DOC-MICRO logic_summary="Route based on action and method to specific API key functions" notable_decisions="[]"]
|
|
392
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
393
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
394
|
+
// CIL[DOC-VECTOR type="context" content="Layer: backend_functions. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
395
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
396
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
397
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
398
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
399
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
342
400
|
export const handler = createHandler(async (ctx, body) => {
|
|
343
401
|
const { action } = ctx.query || {}
|
|
344
402
|
const method = ctx.query?.method || 'GET'
|
|
@@ -373,4 +431,4 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
373
431
|
|
|
374
432
|
throw new Error('Invalid action or method')
|
|
375
433
|
})
|
|
376
|
-
//
|
|
434
|
+
// CIL[END chunk_id="api-keys_handler_1783969696"]
|