spine-framework 0.3.145 → 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 +15 -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,3 +1,13 @@
|
|
|
1
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:module_header:module_header" type="module_header" identity="module_header" parent=""]
|
|
2
|
+
// CIL[DOC-MACRO purpose="React authentication context module: state, session, and provider."]
|
|
3
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Declare the module entry point, dependencies, constants, interfaces, hooks, and provider component."]
|
|
4
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
5
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="AuthContext, AuthProvider, useAuth, and helper functions" errors="n/a" side_effects="none"]
|
|
6
|
+
// CIL[DOC-MICRO logic_summary="Imports dependencies and defines constants, interfaces, and the provider for authentication." notable_decisions="[]"]
|
|
7
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
8
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
9
|
+
// CIL[DOC-AUDIENCE audience="framework-developers"]
|
|
10
|
+
|
|
1
11
|
|
|
2
12
|
|
|
3
13
|
|
|
@@ -8,65 +18,112 @@
|
|
|
8
18
|
|
|
9
19
|
|
|
10
20
|
|
|
11
|
-
// CIL[BEGIN chunk_id="AuthContext_module_header_1783749485" type="module_header" identity="module_header" parent="none"]
|
|
12
|
-
// CIL[DOC-MACRO purpose="Auth module imports and constants"]
|
|
13
|
-
// CIL[DOC-RESPONSIBILITY responsibility="Define React context types and storage constants"]
|
|
14
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-context" related_files="[\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/migrations/015_simplify_apps_table.sql\",\".framework/functions/_shared/principal.ts\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
15
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="type definitions" errors="none" side_effects="none"]
|
|
16
|
-
// CIL[DOC-MICRO logic_summary="Sets up imports and storage constants for auth management" notable_decisions="[]"]
|
|
17
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
18
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
19
|
-
// CIL[DOC-AUDIENCE audience="developer"]
|
|
20
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-context. Direct callers: 0. Direct calls: 0. Related files: custom/apps/cortex/pages/operations/OperationsDashboard.tsx, custom/apps/portal/pages/ContentPage.tsx, .framework/migrations/015_simplify_apps_table.sql, .framework/functions/_shared/principal.ts, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
21
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
22
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
23
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
24
|
-
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
25
|
-
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
26
21
|
import React, { createContext, useContext, useEffect, useState, useRef, useCallback } from 'react'
|
|
27
22
|
import { supabase } from '../lib/supabase'
|
|
28
23
|
import { setAccountId, apiFetch, onUnauthorized } from '../lib/api'
|
|
29
24
|
import { User } from '../types/auth'
|
|
30
|
-
|
|
25
|
+
// CIL[DOC-VECTOR type="context" content="purpose='React authentication context module: state, session, and provider.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
26
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
27
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
28
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
29
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
30
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
31
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:module_header:module_header"]
|
|
32
|
+
|
|
33
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_version:constant" type="constant" identity="storage_version" parent="module_header"]
|
|
34
|
+
// CIL[DOC-MACRO purpose="Define the storage_version constant."]
|
|
35
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Hold the storage_version value used by the auth context."]
|
|
36
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
37
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
|
|
38
|
+
// CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
|
|
39
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
40
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
31
41
|
const STORAGE_VERSION = 1
|
|
42
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the storage_version constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.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/src/contexts/AuthContext.tsx:storage_version:constant"]
|
|
49
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_key:constant" type="constant" identity="storage_key" parent="module_header"]
|
|
50
|
+
// CIL[DOC-MACRO purpose="Define the storage_key constant."]
|
|
51
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Hold the storage_key value used by the auth context."]
|
|
52
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
53
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
|
|
54
|
+
// CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
|
|
55
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
56
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
32
57
|
const STORAGE_KEY = 'spine_user'
|
|
58
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the storage_key constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
59
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
60
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
61
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
62
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
63
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
64
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_key:constant"]
|
|
65
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_ttl_ms:constant" type="constant" identity="storage_ttl_ms" parent="module_header"]
|
|
66
|
+
// CIL[DOC-MACRO purpose="Define the storage_ttl_ms constant."]
|
|
67
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Hold the storage_ttl_ms value used by the auth context."]
|
|
68
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
69
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
|
|
70
|
+
// CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
|
|
71
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
72
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
33
73
|
const STORAGE_TTL_MS = 24 * 60 * 60 * 1000
|
|
34
|
-
|
|
35
|
-
// CIL[
|
|
36
|
-
// CIL[
|
|
37
|
-
// CIL[DOC-
|
|
38
|
-
// CIL[DOC-
|
|
39
|
-
// CIL[DOC-
|
|
40
|
-
// CIL[
|
|
41
|
-
// CIL[
|
|
42
|
-
// CIL[DOC-
|
|
74
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the storage_ttl_ms constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
75
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
76
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
77
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
78
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
79
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
80
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storage_ttl_ms:constant"]
|
|
81
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:session_timeout_ms:constant" type="constant" identity="session_timeout_ms" parent="module_header"]
|
|
82
|
+
// CIL[DOC-MACRO purpose="Define the session_timeout_ms constant."]
|
|
83
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Hold the session_timeout_ms value used by the auth context."]
|
|
84
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
85
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
|
|
86
|
+
// CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
|
|
87
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
43
88
|
// CIL[DOC-STABILITY stability="stable"]
|
|
44
|
-
|
|
45
|
-
// CIL[DOC-VECTOR type="
|
|
46
|
-
// CIL[DOC-VECTOR type="
|
|
47
|
-
// CIL[DOC-VECTOR type="
|
|
89
|
+
const SESSION_TIMEOUT_MS = 15000
|
|
90
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the session_timeout_ms constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
91
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
92
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
93
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
48
94
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
49
95
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
96
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:session_timeout_ms:constant"]
|
|
97
|
+
|
|
98
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:storeduserenvelope:interface" type="interface" identity="storeduserenvelope" parent="module_header"]
|
|
99
|
+
// CIL[DOC-MACRO purpose="TypeScript interface/type definition for storeduserenvelope."]
|
|
100
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of storeduserenvelope data."]
|
|
101
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
102
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="storeduserenvelope interface shape" errors="n/a" side_effects="none"]
|
|
103
|
+
// CIL[DOC-MICRO logic_summary="Interface declaration for type checking and contracts." notable_decisions="[]"]
|
|
104
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
105
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
50
106
|
interface StoredUserEnvelope {
|
|
51
107
|
version: number
|
|
52
108
|
timestamp: number
|
|
53
109
|
user: User
|
|
54
110
|
}
|
|
55
|
-
// CIL[
|
|
56
|
-
// CIL[
|
|
57
|
-
// CIL[DOC-
|
|
58
|
-
// CIL[DOC-
|
|
59
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[\"\\\"]"]
|
|
60
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="User | null" errors="none" side_effects="localStorage read"]
|
|
61
|
-
// CIL[DOC-MICRO logic_summary="Validates version and TTL before returning cached user" notable_decisions="[]"]
|
|
62
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
63
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
64
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 1. Direct calls: 0. Related files: \."]
|
|
65
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
66
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
67
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
111
|
+
// CIL[DOC-VECTOR type="context" content="purpose='TypeScript interface/type definition for storeduserenvelope.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.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"]
|
|
68
115
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
69
116
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
117
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:storeduserenvelope:interface"]
|
|
118
|
+
|
|
119
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:readStoredUser:function" type="function" identity="readStoredUser" parent="module_header"]
|
|
120
|
+
// CIL[DOC-MACRO purpose="Deserialize and validate the cached user from localStorage."]
|
|
121
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Read the stored user envelope, validate version and TTL, and return the user."]
|
|
122
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
123
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="User | null" errors="returns null on parse, version mismatch, expiry, or storage read error" side_effects="reads from localStorage"]
|
|
124
|
+
// CIL[DOC-MICRO logic_summary="Reads localStorage by STORAGE_KEY, parses the JSON envelope, checks version and TTL, then returns user or null." notable_decisions="[]"]
|
|
125
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
126
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
70
127
|
function readStoredUser(): User | null {
|
|
71
128
|
try {
|
|
72
129
|
const raw = localStorage.getItem(STORAGE_KEY)
|
|
@@ -79,21 +136,22 @@ function readStoredUser(): User | null {
|
|
|
79
136
|
return null
|
|
80
137
|
}
|
|
81
138
|
}
|
|
82
|
-
// CIL[
|
|
83
|
-
// CIL[
|
|
84
|
-
// CIL[DOC-
|
|
85
|
-
// CIL[DOC-
|
|
86
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[\"custom/apps/cortex/functions/custom_cil-embeddings.ts\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
87
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="localStorage write"]
|
|
88
|
-
// CIL[DOC-MICRO logic_summary="Stores user in envelope or removes entry if null" notable_decisions="[]"]
|
|
89
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
90
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
91
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 1. Direct calls: 0. Related files: custom/apps/cortex/functions/custom_cil-embeddings.ts, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
92
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
93
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
94
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
139
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Deserialize and validate the cached user from localStorage.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
140
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
141
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
142
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
95
143
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
96
144
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
145
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:readStoredUser:function"]
|
|
146
|
+
|
|
147
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:writeStoredUser:function" type="function" identity="writeStoredUser" parent="module_header"]
|
|
148
|
+
// CIL[DOC-MACRO purpose="Persist or clear the cached user envelope in localStorage."]
|
|
149
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Serialize the user to a versioned envelope or remove the stored key."]
|
|
150
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
151
|
+
// CIL[DOC-CONTRACT inputs="user: User | null" outputs="none" errors="silently swallowed" side_effects="writes or removes localStorage key"]
|
|
152
|
+
// CIL[DOC-MICRO logic_summary="Writes a versioned envelope with timestamp when user is truthy, otherwise removes the storage key." notable_decisions="[]"]
|
|
153
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
154
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
97
155
|
function writeStoredUser(user: User | null) {
|
|
98
156
|
try {
|
|
99
157
|
if (user) {
|
|
@@ -109,21 +167,22 @@ function writeStoredUser(user: User | null) {
|
|
|
109
167
|
} catch {
|
|
110
168
|
}
|
|
111
169
|
}
|
|
112
|
-
// CIL[
|
|
113
|
-
// CIL[
|
|
114
|
-
// CIL[DOC-
|
|
115
|
-
// CIL[DOC-
|
|
116
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/schema-utils.ts\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/db.ts\",\".framework/src/components/ui/table-primitives.tsx\",\"\\\"]"]
|
|
117
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="session data" errors="none" side_effects="none"]
|
|
118
|
-
// CIL[DOC-MICRO logic_summary="Races session fetch against timeout to prevent hanging" notable_decisions="[]"]
|
|
119
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
120
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
121
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 1. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/schema-utils.ts, .framework/functions/_shared/principal.ts, .framework/functions/_shared/db.ts, .framework/src/components/ui/table-primitives.tsx, \."]
|
|
122
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 1. Total affected: 1."]
|
|
123
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
124
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
170
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Persist or clear the cached user envelope in localStorage.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
171
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
172
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
173
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
125
174
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
126
175
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
176
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:writeStoredUser:function"]
|
|
177
|
+
|
|
178
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:getSessionWithTimeout:function" type="function" identity="getSessionWithTimeout" parent="module_header"]
|
|
179
|
+
// CIL[DOC-MACRO purpose="Fetch the Supabase session with a timeout fallback."]
|
|
180
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Wrap supabase.auth.getSession in a Promise.race to avoid hanging on slow networks."]
|
|
181
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
182
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="{ data: { session: any | null } }" errors="returns null session on timeout or error" side_effects="none"]
|
|
183
|
+
// CIL[DOC-MICRO logic_summary="Races the Supabase getSession promise against a SESSION_TIMEOUT_MS timeout." notable_decisions="[]"]
|
|
184
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
185
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
127
186
|
async function getSessionWithTimeout(): Promise<{ data: { session: any | null } }> {
|
|
128
187
|
try {
|
|
129
188
|
return await Promise.race([
|
|
@@ -136,85 +195,110 @@ async function getSessionWithTimeout(): Promise<{ data: { session: any | null }
|
|
|
136
195
|
return { data: { session: null } }
|
|
137
196
|
}
|
|
138
197
|
}
|
|
139
|
-
// CIL[
|
|
140
|
-
// CIL[
|
|
141
|
-
// CIL[DOC-
|
|
142
|
-
// CIL[DOC-
|
|
143
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-types" related_files="[]"]
|
|
144
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
|
|
145
|
-
// CIL[DOC-MICRO logic_summary="Defines shape of auth context with user state and actions" notable_decisions="[]"]
|
|
146
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
147
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
148
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
149
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
150
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
151
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
198
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch the Supabase session with a timeout fallback.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
199
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
200
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
201
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
152
202
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
153
203
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
204
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:getSessionWithTimeout:function"]
|
|
205
|
+
|
|
206
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthContextType:interface" type="interface" identity="AuthContextType" parent="module_header"]
|
|
207
|
+
// CIL[DOC-MACRO purpose="TypeScript interface/type definition for AuthContextType."]
|
|
208
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of AuthContextType data."]
|
|
209
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
210
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="AuthContextType interface shape" errors="n/a" side_effects="none"]
|
|
211
|
+
// CIL[DOC-MICRO logic_summary="Interface declaration for type checking and contracts." notable_decisions="[]"]
|
|
212
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
213
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
154
214
|
interface AuthContextType {
|
|
155
215
|
user: User | null
|
|
156
216
|
isLoading: boolean
|
|
157
|
-
login: (email: string, password: string) => Promise<User | null>
|
|
217
|
+
login: (email: string, password: string, captchaToken?: string) => Promise<User | null>
|
|
158
218
|
logout: () => Promise<void>
|
|
159
219
|
refreshUser: () => Promise<User | null>
|
|
160
220
|
}
|
|
221
|
+
// CIL[DOC-VECTOR type="context" content="purpose='TypeScript interface/type definition for AuthContextType.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
222
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
223
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
224
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
225
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
226
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
227
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthContextType:interface"]
|
|
161
228
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
// CIL[
|
|
166
|
-
// CIL[DOC-
|
|
167
|
-
// CIL[DOC-
|
|
168
|
-
// CIL[DOC-
|
|
169
|
-
// CIL[DOC-
|
|
170
|
-
// CIL[DOC-
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:authcontext:constant" type="constant" identity="authcontext" parent="module_header"]
|
|
233
|
+
// CIL[DOC-MACRO purpose="Define the authcontext constant."]
|
|
234
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Hold the authcontext value used by the auth context."]
|
|
235
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
236
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="constant value" errors="n/a" side_effects="none"]
|
|
237
|
+
// CIL[DOC-MICRO logic_summary="Declarative constant with no runtime logic." notable_decisions="[]"]
|
|
238
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
171
239
|
// CIL[DOC-STABILITY stability="stable"]
|
|
172
|
-
|
|
173
|
-
// CIL[DOC-VECTOR type="
|
|
174
|
-
// CIL[DOC-VECTOR type="
|
|
175
|
-
// CIL[DOC-VECTOR type="
|
|
240
|
+
const AuthContext = createContext<AuthContextType | undefined>(undefined)
|
|
241
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Define the authcontext constant.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
242
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
243
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
244
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
176
245
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
177
246
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
247
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:authcontext:constant"]
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:useauth:function" type="function" identity="useauth" parent="module_header"]
|
|
251
|
+
// CIL[DOC-MACRO purpose="Hook to consume the AuthContext value."]
|
|
252
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Return the auth context or throw an error when used outside an AuthProvider."]
|
|
253
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
254
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="AuthContextType" errors="throws Error('useAuth must be used within an AuthProvider')" side_effects="none"]
|
|
255
|
+
// CIL[DOC-MICRO logic_summary="Calls useContext(AuthContext) and validates the result is defined." notable_decisions="[]"]
|
|
256
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
257
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
178
258
|
export function useAuth() {
|
|
179
259
|
const context = useContext(AuthContext)
|
|
180
260
|
if (context === undefined) {
|
|
181
261
|
throw new Error('useAuth must be used within an AuthProvider')
|
|
182
262
|
}
|
|
263
|
+
|
|
264
|
+
|
|
183
265
|
return context
|
|
184
266
|
}
|
|
185
|
-
// CIL[
|
|
186
|
-
// CIL[
|
|
187
|
-
// CIL[DOC-
|
|
188
|
-
// CIL[DOC-
|
|
189
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-types" related_files="[]"]
|
|
190
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="interface definition" errors="none" side_effects="none"]
|
|
191
|
-
// CIL[DOC-MICRO logic_summary="Simple props interface with only children" notable_decisions="[]"]
|
|
192
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
193
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
194
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-types. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
195
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
196
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
197
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
267
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Hook to consume the AuthContext value.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
268
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
269
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
270
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
198
271
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
199
272
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
273
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:useauth:function"]
|
|
274
|
+
|
|
275
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthProviderProps:interface" type="interface" identity="AuthProviderProps" parent="module_header"]
|
|
276
|
+
// CIL[DOC-MACRO purpose="TypeScript interface/type definition for AuthProviderProps."]
|
|
277
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Describe the shape of AuthProviderProps data."]
|
|
278
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
279
|
+
// CIL[DOC-CONTRACT inputs="n/a" outputs="AuthProviderProps interface shape" errors="n/a" side_effects="none"]
|
|
280
|
+
// CIL[DOC-MICRO logic_summary="Interface declaration for type checking and contracts." notable_decisions="[]"]
|
|
281
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
282
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
200
283
|
interface AuthProviderProps {
|
|
201
284
|
children: React.ReactNode
|
|
202
285
|
}
|
|
203
|
-
// CIL[
|
|
204
|
-
// CIL[
|
|
205
|
-
// CIL[DOC-
|
|
206
|
-
// CIL[DOC-
|
|
207
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-utility" related_files="[]"]
|
|
208
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="User | null" errors="none" side_effects="API calls"]
|
|
209
|
-
// CIL[DOC-MICRO logic_summary="Retries on network errors with exponential backoff" notable_decisions="[]"]
|
|
210
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
211
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
212
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-utility. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
213
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
214
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
215
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
286
|
+
// CIL[DOC-VECTOR type="context" content="purpose='TypeScript interface/type definition for AuthProviderProps.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
287
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
288
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
289
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
216
290
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
217
291
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
292
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:AuthProviderProps:interface"]
|
|
293
|
+
|
|
294
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:fetchUserContext:function" type="function" identity="fetchUserContext" parent="module_header"]
|
|
295
|
+
// CIL[DOC-MACRO purpose="Fetch remote user context with retries and transient error handling."]
|
|
296
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Load user data from /api/auth, tolerate transient network failures, and handle auth errors."]
|
|
297
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
298
|
+
// CIL[DOC-CONTRACT inputs="maxRetries: number (default 2)" outputs="User | null" errors="returns null for 401/403, client errors, or unrecoverable exceptions" side_effects="makes HTTP GET request to /api/auth"]
|
|
299
|
+
// CIL[DOC-MICRO logic_summary="Retry loop with exponential backoff; 5xx continues, 401/403/null returns, TypeError retries." notable_decisions="[]"]
|
|
300
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
301
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
218
302
|
async function fetchUserContext(maxRetries = 2): Promise<User | null> {
|
|
219
303
|
let lastError: unknown = null
|
|
220
304
|
|
|
@@ -250,21 +334,22 @@ async function fetchUserContext(maxRetries = 2): Promise<User | null> {
|
|
|
250
334
|
}
|
|
251
335
|
return null
|
|
252
336
|
}
|
|
253
|
-
// CIL[
|
|
254
|
-
// CIL[
|
|
255
|
-
// CIL[DOC-
|
|
256
|
-
// CIL[DOC-
|
|
257
|
-
// CIL[DOC-CONTEXT module="AuthContext" layer="frontend-provider" related_files="[]"]
|
|
258
|
-
// CIL[DOC-CONTRACT inputs="none" outputs="Provider component" errors="auth errors" side_effects="localStorage, API calls, Supabase auth"]
|
|
259
|
-
// CIL[DOC-MICRO logic_summary="Complex auth provider with storage sync, race guards, and cross-tab support" notable_decisions="[]"]
|
|
260
|
-
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
261
|
-
// CIL[DOC-STABILITY stability="stable"]
|
|
262
|
-
// CIL[DOC-VECTOR type="context" content="Layer: frontend-provider. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
263
|
-
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
264
|
-
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
265
|
-
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
337
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Fetch remote user context with retries and transient error handling.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
338
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
339
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
340
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
266
341
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
267
342
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
343
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:fetchUserContext:function"]
|
|
344
|
+
|
|
345
|
+
// CIL[BEGIN stable_id="~/.framework/src/contexts/AuthContext.tsx:authprovider:function" type="function" identity="authprovider" parent="module_header"]
|
|
346
|
+
// CIL[DOC-MACRO purpose="Provide authentication state and actions to the React component tree."]
|
|
347
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Manage user state, session lifecycle, login/logout/refresh, and storage synchronization."]
|
|
348
|
+
// CIL[DOC-CONTEXT module="AuthContext" layer="context" related_files=".framework/src/contexts/AuthContext.tsx,.framework/src/lib/api.ts,.framework/src/lib/supabase.ts,.framework/src/types/auth.ts"]
|
|
349
|
+
// CIL[DOC-CONTRACT inputs="children: React.ReactNode" outputs="AuthContext.Provider with value { user, isLoading, login, logout, refreshUser }" errors="login may propagate Supabase error; useAuth throws outside provider" side_effects="updates localStorage, Supabase auth session, account id, and window storage listener"]
|
|
350
|
+
// CIL[DOC-MICRO logic_summary="Initializes from cache, fetches/refresh session on mount, exposes callbacks, and listens to auth/storage events." notable_decisions="[]"]
|
|
351
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.85" flags="none"]
|
|
352
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
268
353
|
export function AuthProvider({ children }: AuthProviderProps) {
|
|
269
354
|
const storedUser = readStoredUser()
|
|
270
355
|
const [user, setUser] = useState<User | null>(storedUser)
|
|
@@ -290,11 +375,15 @@ export function AuthProvider({ children }: AuthProviderProps) {
|
|
|
290
375
|
setAccountId(ctx.account_id)
|
|
291
376
|
}, [setUserWithStorage])
|
|
292
377
|
|
|
293
|
-
const login = useCallback(async (email: string, password: string) => {
|
|
378
|
+
const login = useCallback(async (email: string, password: string, captchaToken?: string) => {
|
|
294
379
|
isLoggingInRef.current = true
|
|
295
380
|
|
|
296
381
|
try {
|
|
297
|
-
const { data, error } = await supabase.auth.signInWithPassword({
|
|
382
|
+
const { data, error } = await supabase.auth.signInWithPassword({
|
|
383
|
+
email,
|
|
384
|
+
password,
|
|
385
|
+
options: captchaToken ? { captchaToken } : undefined,
|
|
386
|
+
})
|
|
298
387
|
|
|
299
388
|
if (error) throw error
|
|
300
389
|
|
|
@@ -449,4 +538,10 @@ export function AuthProvider({ children }: AuthProviderProps) {
|
|
|
449
538
|
</AuthContext.Provider>
|
|
450
539
|
)
|
|
451
540
|
}
|
|
452
|
-
// CIL[
|
|
541
|
+
// CIL[DOC-VECTOR type="context" content="purpose='Provide authentication state and actions to the React component tree.'; No verified external callers; imports: .framework/src/lib/supabase.ts,.framework/src/lib/api.ts,.framework/src/types/auth.ts"]
|
|
542
|
+
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
543
|
+
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
544
|
+
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
545
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
546
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
547
|
+
// CIL[END stable_id="~/.framework/src/contexts/AuthContext.tsx:authprovider:function"]
|