spine-framework 0.4.4 → 0.5.0-rc.4
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 +13 -3
- package/.framework/cli/commands/bootstrap.ts +392 -0
- package/.framework/cli/commands/dev.ts +91 -218
- package/.framework/cli/commands/doctor.ts +132 -26
- package/.framework/cli/commands/generate.ts +38 -298
- package/.framework/cli/commands/init.ts +20 -1
- package/.framework/cli/commands/migrate.ts +36 -30
- package/.framework/cli/commands/migrations.ts +16 -56
- package/.framework/cli/commands/upgrade.ts +35 -0
- package/.framework/cli/commands/validate-schema.ts +147 -0
- package/.framework/cli/context.ts +223 -110
- package/.framework/cli/index.ts +6 -0
- package/.framework/cli/lib/project-files.ts +241 -1
- package/.framework/functions/_shared/hash-api-key.ts +183 -79
- package/.framework/functions/_shared/logging.ts +562 -224
- package/.framework/functions/_shared/middleware.ts +47 -44
- package/.framework/functions/admin-data.ts +39 -28
- package/.framework/functions/ai-agents.ts +10 -6
- package/.framework/functions/api-keys.ts +301 -122
- package/.framework/functions/apps.ts +43 -26
- package/.framework/functions/cil-ingest.ts +48 -15
- package/.framework/functions/debug-auth.ts +14 -8
- package/.framework/functions/deliveries.ts +39 -12
- package/.framework/functions/embeddings.ts +145 -76
- package/.framework/functions/integration-outbound.ts +67 -27
- package/.framework/functions/integrations.ts +254 -127
- package/.framework/functions/logs.ts +273 -133
- package/.framework/functions/observability.ts +277 -147
- package/.framework/functions/pipeline-executions.ts +1 -1
- package/.framework/functions/pipelines.ts +14 -9
- package/.framework/functions/prompt-configs.ts +7 -4
- package/.framework/functions/roles.ts +8 -5
- package/.framework/functions/security.ts +30 -17
- package/.framework/functions/system-cron.ts +240 -127
- package/.framework/functions/tests.ts +7 -6
- package/.framework/functions/timers.ts +310 -107
- package/.framework/functions/triggers.ts +28 -13
- package/.framework/functions/types.ts +13 -10
- package/.framework/migrations/069_log_stats_window.sql +54 -0
- package/.framework/migrations/070_app_type_schema_rpcs.sql +166 -0
- package/.framework/migrations/071_timer_interval_keys.sql +96 -0
- package/.framework/migrations/072_slug_autofill.sql +77 -0
- package/.framework/migrations/073_seed_member_roles.sql +26 -0
- package/.framework/src/apps/admin/index.tsx +1141 -775
- package/.framework/src/components/ErrorBoundary.tsx +136 -0
- package/.framework/src/components/admin/AdminListPage.tsx +81 -73
- package/.framework/src/components/admin/AdminSidebar.tsx +88 -79
- package/.framework/src/components/admin/EntitySelect.tsx +181 -0
- package/.framework/src/components/admin/PageInstructions.tsx +86 -127
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +37 -13
- package/.framework/src/components/app-shell/GenericListPage.tsx +28 -32
- package/.framework/src/components/layout/Sidebar.tsx +300 -177
- package/.framework/src/components/runtime/DataDetailPage.tsx +67 -35
- package/.framework/src/components/runtime/DataHeader.tsx +96 -48
- package/.framework/src/components/runtime/DataListPage.tsx +3 -26
- package/.framework/src/components/runtime/DataStats.tsx +10 -10
- package/.framework/src/components/runtime/DataTable.tsx +12 -10
- package/.framework/src/components/ui/sheet.tsx +24 -26
- package/.framework/src/components/ui/textarea.tsx +74 -48
- package/.framework/src/hooks/useEntityList.ts +12 -9
- package/.framework/src/hooks/useListSchema.ts +108 -58
- package/.framework/src/instructions/README.md +57 -0
- package/.framework/src/instructions/ai-agents.md +69 -0
- package/.framework/src/instructions/alerts.md +80 -0
- package/.framework/src/instructions/api-keys.md +87 -0
- package/.framework/src/instructions/apps.md +77 -0
- package/.framework/src/instructions/concepts/ai-and-prompts.md +150 -0
- package/.framework/src/instructions/concepts/apps-and-renderers.md +162 -0
- package/.framework/src/instructions/concepts/auth-and-api-keys.md +133 -0
- package/.framework/src/instructions/concepts/automation.md +186 -0
- package/.framework/src/instructions/concepts/concurrency-and-idempotency.md +125 -0
- package/.framework/src/instructions/concepts/core-vs-custom.md +124 -0
- package/.framework/src/instructions/concepts/design-schema.md +152 -0
- package/.framework/src/instructions/concepts/integrations-and-webhooks.md +127 -0
- package/.framework/src/instructions/concepts/observability.md +116 -0
- package/.framework/src/instructions/concepts/permissions.md +150 -0
- package/.framework/src/instructions/concepts/runtime-records.md +111 -0
- package/.framework/src/instructions/concepts/scope-and-accounts.md +112 -0
- package/.framework/src/instructions/concepts/spine-way.md +172 -0
- package/.framework/src/instructions/deliveries.md +59 -0
- package/.framework/src/instructions/guide/00-orientation.md +106 -0
- package/.framework/src/instructions/guide/01-install-and-first-run.md +253 -0
- package/.framework/src/instructions/guide/02-project-map.md +147 -0
- package/.framework/src/instructions/guide/03-domain-model.md +223 -0
- package/.framework/src/instructions/guide/04-first-app.md +227 -0
- package/.framework/src/instructions/guide/05-glossary.md +183 -0
- package/.framework/src/instructions/integrations.md +96 -0
- package/.framework/src/instructions/internal/cil-markers.md +83 -0
- package/.framework/src/instructions/invites.md +60 -0
- package/.framework/src/instructions/kb.md +80 -0
- package/.framework/src/instructions/logs.md +77 -0
- package/.framework/src/instructions/observability.md +61 -0
- package/.framework/src/instructions/operations/deployment.md +115 -0
- package/.framework/src/instructions/operations/migrations.md +125 -0
- package/.framework/src/instructions/operations/security-checklist.md +148 -0
- package/.framework/src/instructions/operations/troubleshooting.md +170 -0
- package/.framework/src/instructions/operations/upgrade.md +116 -0
- package/.framework/src/instructions/pipeline-executions.md +62 -0
- package/.framework/src/instructions/pipelines.md +78 -0
- package/.framework/src/instructions/prompts.md +95 -0
- package/.framework/src/instructions/reference/api/admin-data.md +162 -0
- package/.framework/src/instructions/reference/api/auth.md +113 -0
- package/.framework/src/instructions/reference/api/errors-and-envelopes.md +113 -0
- package/.framework/src/instructions/reference/app-manifest.md +150 -0
- package/.framework/src/instructions/reference/cli.md +124 -0
- package/.framework/src/instructions/reference/database.md +132 -0
- package/.framework/src/instructions/reference/design-schema.md +280 -0
- package/.framework/src/instructions/reference/env-vars.md +133 -0
- package/.framework/src/instructions/reference/functions/account-nodes.md +75 -0
- package/.framework/src/instructions/reference/functions/admin-data.md +195 -0
- package/.framework/src/instructions/reference/functions/admin-funnel.md +90 -0
- package/.framework/src/instructions/reference/functions/admin-install-funnel.md +107 -0
- package/.framework/src/instructions/reference/functions/admin-signals.md +102 -0
- package/.framework/src/instructions/reference/functions/ai-agents.md +148 -0
- package/.framework/src/instructions/reference/functions/ai-interactions.md +156 -0
- package/.framework/src/instructions/reference/functions/api-keys.md +130 -0
- package/.framework/src/instructions/reference/functions/apps.md +140 -0
- package/.framework/src/instructions/reference/functions/auth.md +99 -0
- package/.framework/src/instructions/reference/functions/debug-auth.md +91 -0
- package/.framework/src/instructions/reference/functions/deliveries.md +110 -0
- package/.framework/src/instructions/reference/functions/embeddings.md +166 -0
- package/.framework/src/instructions/reference/functions/eval-harness.md +149 -0
- package/.framework/src/instructions/reference/functions/index.md +103 -0
- package/.framework/src/instructions/reference/functions/integration-outbound.md +200 -0
- package/.framework/src/instructions/reference/functions/integration-routes.md +151 -0
- package/.framework/src/instructions/reference/functions/integrations.md +130 -0
- package/.framework/src/instructions/reference/functions/invites.md +182 -0
- package/.framework/src/instructions/reference/functions/item-progress.md +107 -0
- package/.framework/src/instructions/reference/functions/kb.md +166 -0
- package/.framework/src/instructions/reference/functions/logs.md +141 -0
- package/.framework/src/instructions/reference/functions/observability.md +105 -0
- package/.framework/src/instructions/reference/functions/pipeline-executions.md +132 -0
- package/.framework/src/instructions/reference/functions/pipeline-runner-background.md +121 -0
- package/.framework/src/instructions/reference/functions/pipelines.md +136 -0
- package/.framework/src/instructions/reference/functions/prompt-configs.md +121 -0
- package/.framework/src/instructions/reference/functions/roles.md +121 -0
- package/.framework/src/instructions/reference/functions/security.md +140 -0
- package/.framework/src/instructions/reference/functions/system-cron.md +136 -0
- package/.framework/src/instructions/reference/functions/system.md +106 -0
- package/.framework/src/instructions/reference/functions/tests.md +97 -0
- package/.framework/src/instructions/reference/functions/timers.md +117 -0
- package/.framework/src/instructions/reference/functions/trigger-scheduler.md +102 -0
- package/.framework/src/instructions/reference/functions/triggers.md +140 -0
- package/.framework/src/instructions/reference/functions/types.md +146 -0
- package/.framework/src/instructions/reference/seeds.md +126 -0
- package/.framework/src/instructions/reference/shared-modules.md +127 -0
- package/.framework/src/instructions/reference/spine-config.md +114 -0
- package/.framework/src/instructions/roles.md +80 -0
- package/.framework/src/instructions/runtime-detail.md +70 -0
- package/.framework/src/instructions/runtime-list.md +77 -0
- package/.framework/src/instructions/security.md +67 -0
- package/.framework/src/instructions/tasks/add-a-pipeline.md +110 -0
- package/.framework/src/instructions/tasks/add-a-role.md +96 -0
- package/.framework/src/instructions/tasks/add-a-timer.md +114 -0
- package/.framework/src/instructions/tasks/add-a-trigger.md +106 -0
- package/.framework/src/instructions/tasks/add-a-type.md +151 -0
- package/.framework/src/instructions/tasks/add-a-webhook.md +108 -0
- package/.framework/src/instructions/tasks/add-an-ai-agent.md +108 -0
- package/.framework/src/instructions/tasks/add-an-integration.md +124 -0
- package/.framework/src/instructions/tasks/build-a-custom-page.md +118 -0
- package/.framework/src/instructions/tasks/package-and-install-an-app.md +127 -0
- package/.framework/src/instructions/tasks/test-your-code.md +108 -0
- package/.framework/src/instructions/tasks/write-a-function.md +132 -0
- package/.framework/src/instructions/tasks/write-a-migration.md +110 -0
- package/.framework/src/instructions/testing.md +59 -0
- package/.framework/src/instructions/timers.md +82 -0
- package/.framework/src/instructions/triggers.md +69 -0
- package/.framework/src/instructions/types.md +93 -0
- package/.framework/src/pages/NotFoundPage.tsx +62 -31
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +117 -106
- package/.framework/src/pages/admin/AIAgentsPage.tsx +86 -48
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +153 -152
- package/.framework/src/pages/admin/APIKeysPage.tsx +91 -90
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +29 -18
- package/.framework/src/pages/admin/AppDetailPage.tsx +6 -60
- package/.framework/src/pages/admin/AppsPage.tsx +104 -66
- package/.framework/src/pages/admin/DeliveriesPage.tsx +5 -5
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +5 -23
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +5 -26
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +7 -7
- package/.framework/src/pages/admin/IntegrationsPage.tsx +85 -43
- package/.framework/src/pages/admin/LogsPage.tsx +144 -76
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +223 -140
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +134 -113
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +108 -45
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -115
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +96 -98
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +101 -59
- package/.framework/src/pages/admin/RoleDetailPage.tsx +90 -79
- package/.framework/src/pages/admin/RolesPage.tsx +86 -43
- package/.framework/src/pages/admin/SecurityPage.tsx +1 -1
- package/.framework/src/pages/admin/TestingDashboard.tsx +16 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +117 -100
- package/.framework/src/pages/admin/TimersPage.tsx +90 -62
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +90 -83
- package/.framework/src/pages/admin/TriggersPage.tsx +124 -99
- package/.framework/src/pages/admin/TypeDetailPage.tsx +152 -138
- package/.framework/src/pages/admin/TypesPage.tsx +90 -48
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +17 -25
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +17 -27
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +72 -40
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +321 -129
- package/.framework/src/pages/admin/cil/CILFileSelectPage.tsx +18 -29
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +26 -38
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +34 -46
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +189 -103
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +246 -136
- package/.framework/src/pages/admin/cil/CILSuggestionsPage.tsx +11 -22
- package/.framework/src/pages/admin/cil/CILVersionsPage.tsx +9 -20
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +26 -38
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +7 -26
- package/.framework/templates/agent/AGENTS.md +150 -0
- package/.framework/templates/agent/skills/spine-add-ai-agent/SKILL.md +58 -0
- package/.framework/templates/agent/skills/spine-add-automation/SKILL.md +62 -0
- package/.framework/templates/agent/skills/spine-add-integration/SKILL.md +63 -0
- package/.framework/templates/agent/skills/spine-architect/SKILL.md +86 -0
- package/.framework/templates/agent/skills/spine-install-app/SKILL.md +72 -0
- package/.framework/templates/agent/skills/spine-migration/SKILL.md +75 -0
- package/.framework/templates/agent/skills/spine-new-app/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-new-function/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-new-type/SKILL.md +65 -0
- package/.framework/templates/agent/skills/spine-schema/SKILL.md +77 -0
- package/.framework/templates/agent/skills/spine-test/SKILL.md +67 -0
- package/.framework/templates/agent/skills/spine-troubleshoot/SKILL.md +74 -0
- package/.framework/templates/agent/skills/spine-upgrade/SKILL.md +69 -0
- package/.framework/templates/project.json +4 -1
- package/.framework/tests/unit/account-scoping-gates.test.ts +392 -0
- package/.framework/tests/unit/agent-files.test.ts +355 -0
- package/.framework/tests/unit/agent-runner.test.ts +479 -44
- package/.framework/tests/unit/api-keys-create-scope-gate.test.ts +160 -0
- package/.framework/tests/unit/api-keys-omit-secret-fields.test.ts +38 -0
- package/.framework/tests/unit/bootstrap.test.ts +242 -0
- package/.framework/tests/unit/cli-context-api-key.test.ts +114 -0
- package/.framework/tests/unit/debug-auth.test.ts +38 -0
- package/.framework/tests/unit/deliveries-account-scoping.test.ts +185 -0
- package/.framework/tests/unit/integration-outbound-credentials.test.ts +167 -0
- package/.framework/tests/unit/integrations-audit-redaction.test.ts +130 -0
- package/.framework/tests/unit/logging-app-id.test.ts +75 -0
- package/.framework/tests/unit/system-context-denial.test.ts +145 -0
- package/.framework/tests/unit/system-cron.test.ts +240 -0
- package/.framework/tests/unit/timers.test.ts +159 -0
- package/README.md +125 -166
- package/config/tsconfig.cli.json +2 -2
- package/package.json +15 -4
- package/templates/project/package-lock.json +2 -2
- package/.framework/docs/admin-routes.md +0 -76
- package/.framework/docs/api-docs-progress.md +0 -38
- package/.framework/docs/api-governance.md +0 -146
- package/.framework/docs/api-testing-results.md +0 -212
- package/.framework/docs/assembly-launch-guide.md +0 -138
- package/.framework/docs/audit-results.md +0 -590
- package/.framework/docs/db-api-inventory.md +0 -95
- package/.framework/docs/gap-remediation-backlog.md +0 -103
- package/.framework/docs/ui-adoption-verification.md +0 -111
- package/.framework/docs/ui-api-coverage.md +0 -84
- package/.framework/docs/v2-compatibility-audit.md +0 -228
- package/.framework/mcp/index.ts +0 -133
- package/.framework/mcp/load-env.ts +0 -60
- package/.framework/mcp/shared/app-manifest.ts +0 -275
- package/.framework/mcp/shared/db.ts +0 -477
- package/.framework/mcp/shared/kb.ts +0 -118
- package/.framework/mcp/tools/architect.ts +0 -431
- package/.framework/mcp/tools/cil/context.ts +0 -345
- package/.framework/mcp/tools/cil/graph.ts +0 -242
- package/.framework/mcp/tools/cil/ingest.ts +0 -1217
- package/.framework/mcp/tools/cil/pipeline-orchestrator.ts +0 -693
- package/.framework/mcp/tools/cil/pipeline.ts +0 -767
- package/.framework/mcp/tools/cil/project.ts +0 -791
- package/.framework/mcp/tools/cil/retrieval.ts +0 -336
- package/.framework/mcp/tools/cil/search-core.ts +0 -454
- package/.framework/mcp/tools/cil/search.ts +0 -97
- package/.framework/mcp/tools/cil/suggest.ts +0 -186
- package/.framework/mcp/tools/cil/validate.ts +0 -1369
- package/.framework/mcp/tools/kb/delete.ts +0 -139
- package/.framework/mcp/tools/kb/index.ts +0 -52
- package/.framework/mcp/tools/kb/ingest.ts +0 -84
- package/.framework/mcp/tools/kb/list-types.ts +0 -102
- package/.framework/mcp/tools/kb/publish.ts +0 -100
- package/.framework/mcp/tools/kb/reindex.ts +0 -86
- package/.framework/mcp/tools/kb/revoke.ts +0 -85
- package/.framework/mcp/tools/kb/search.ts +0 -101
- package/.framework/mcp/tools/kb/upsert.ts +0 -125
- package/.framework/mcp/tools/observability.ts +0 -510
|
@@ -10,17 +10,27 @@
|
|
|
10
10
|
|
|
11
11
|
import { createHandler } from './_shared/middleware'
|
|
12
12
|
import { emitLog } from './_shared/audit'
|
|
13
|
-
import { SYSTEM_PRINCIPAL } from './_shared/principal'
|
|
13
|
+
import { SYSTEM_PRINCIPAL, isSystemAdmin } from './_shared/principal'
|
|
14
14
|
import { execute as executeOutbound } from './integration-outbound'
|
|
15
|
+
// CIL[END stable_id="~/.framework/functions/deliveries.ts:module_header:module_header"]
|
|
15
16
|
// CIL[DOC-VECTOR type="context" content="purpose='Module: webhook delivery handlers'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
|
|
16
17
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
17
18
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
18
19
|
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
19
20
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
20
21
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
21
|
-
// CIL[END stable_id="~/.framework/functions/deliveries.ts:module_header:module_header"]
|
|
22
22
|
|
|
23
|
-
//
|
|
23
|
+
// True only for platform-level principals: a system_admin role or an
|
|
24
|
+
// internal machine principal with no account binding (SYSTEM_PRINCIPAL,
|
|
25
|
+
// produced only by the INTERNAL_INVOKE_SECRET path). Machine principals
|
|
26
|
+
// resolve to the service-role adminDb via getPrincipalDb, so account-bound
|
|
27
|
+
// API keys must be scoped to their own account below.
|
|
28
|
+
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:isSystemPrincipal:function" type="function" identity="isSystemPrincipal" parent="~/.framework/functions/deliveries.ts"]
|
|
29
|
+
function isSystemPrincipal(ctx: any): boolean {
|
|
30
|
+
return isSystemAdmin(ctx.principal) || (ctx.principal?.isInternal === true && !ctx.accountId)
|
|
31
|
+
}
|
|
32
|
+
// CIL[END stable_id="~/.framework/functions/deliveries.ts:isSystemPrincipal:function"]
|
|
33
|
+
|
|
24
34
|
// CIL[DOC-MACRO purpose="List webhook deliveries for the current account with optional filters."]
|
|
25
35
|
// CIL[DOC-RESPONSIBILITY responsibility="Query and return a paginated list of webhook deliveries."]
|
|
26
36
|
// CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
|
|
@@ -28,6 +38,7 @@ import { execute as executeOutbound } from './integration-outbound'
|
|
|
28
38
|
// CIL[DOC-MICRO logic_summary="Builds a Supabase query for webhook_deliveries scoped to the account, applies optional equality filters, and returns a paginated range of results." notable_decisions="Defaults limit to 100 and offset to 0; returns empty array when no data."]
|
|
29
39
|
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
30
40
|
// CIL[DOC-STABILITY stability="stable"]
|
|
41
|
+
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:list:constant" type="constant" identity="list" parent="~/.framework/functions/deliveries.ts"]
|
|
31
42
|
export const list = createHandler(async (ctx, _body) => {
|
|
32
43
|
const { direction, status, integration_id, api_key_id, limit = 100, offset = 0 } = ctx.query || {}
|
|
33
44
|
|
|
@@ -54,15 +65,14 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
54
65
|
if (err) throw err
|
|
55
66
|
return data || []
|
|
56
67
|
})
|
|
68
|
+
// CIL[END stable_id="~/.framework/functions/deliveries.ts:list:constant"]
|
|
57
69
|
// CIL[DOC-VECTOR type="context" content="purpose='List webhook deliveries for the current account with optional filters.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
|
|
58
70
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
59
71
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
60
72
|
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
61
73
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
62
74
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
63
|
-
// CIL[END stable_id="~/.framework/functions/deliveries.ts:list:constant"]
|
|
64
75
|
|
|
65
|
-
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/deliveries.ts"]
|
|
66
76
|
// CIL[DOC-MACRO purpose="Retrieve a single webhook delivery by ID."]
|
|
67
77
|
// CIL[DOC-RESPONSIBILITY responsibility="Fetch and return one webhook delivery record."]
|
|
68
78
|
// CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
|
|
@@ -70,29 +80,35 @@ export const list = createHandler(async (ctx, _body) => {
|
|
|
70
80
|
// CIL[DOC-MICRO logic_summary="Selects a single webhook delivery matching the provided id." notable_decisions="Assumes id is present and unique; throws generic database error."]
|
|
71
81
|
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
72
82
|
// CIL[DOC-STABILITY stability="stable"]
|
|
83
|
+
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:get:constant" type="constant" identity="get" parent="~/.framework/functions/deliveries.ts"]
|
|
73
84
|
export const get = createHandler(async (ctx, _body) => {
|
|
74
85
|
const { id } = ctx.query || {}
|
|
75
86
|
|
|
76
87
|
if (!id) throw new Error('Delivery ID is required')
|
|
77
88
|
|
|
78
|
-
|
|
89
|
+
let query = ctx.db
|
|
79
90
|
.from('webhook_deliveries')
|
|
80
91
|
.select('*')
|
|
81
92
|
.eq('id', id)
|
|
82
|
-
|
|
93
|
+
|
|
94
|
+
if (!isSystemPrincipal(ctx)) {
|
|
95
|
+
if (!ctx.accountId) throw new Error('Account context required')
|
|
96
|
+
query = query.eq('account_id', ctx.accountId)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const { data, error: err } = await query.single()
|
|
83
100
|
|
|
84
101
|
if (err) throw err
|
|
85
102
|
return data
|
|
86
103
|
})
|
|
104
|
+
// CIL[END stable_id="~/.framework/functions/deliveries.ts:get:constant"]
|
|
87
105
|
// CIL[DOC-VECTOR type="context" content="purpose='Retrieve a single webhook delivery by ID.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
|
|
88
106
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
89
107
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
90
108
|
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
91
109
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
92
110
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
|
-
// CIL[END stable_id="~/.framework/functions/deliveries.ts:get:constant"]
|
|
94
111
|
|
|
95
|
-
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:retry:constant" type="constant" identity="retry" parent="~/.framework/functions/deliveries.ts"]
|
|
96
112
|
// CIL[DOC-MACRO purpose="Manually retry an outbound webhook delivery."]
|
|
97
113
|
// CIL[DOC-RESPONSIBILITY responsibility="Validate the delivery exists and is outbound, then re-run the outbound executor."]
|
|
98
114
|
// CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
|
|
@@ -100,6 +116,7 @@ export const get = createHandler(async (ctx, _body) => {
|
|
|
100
116
|
// CIL[DOC-MICRO logic_summary="Loads the delivery by id, restricts to outbound direction, builds a retry context using the stored account and system principal, invokes executeOutbound, and logs the retry." notable_decisions="Uses SYSTEM_PRINCIPAL for retries; emits audit log with delivery metadata."]
|
|
101
117
|
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
102
118
|
// CIL[DOC-STABILITY stability="stable"]
|
|
119
|
+
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:retry:constant" type="constant" identity="retry" parent="~/.framework/functions/deliveries.ts"]
|
|
103
120
|
export const retry = createHandler(async (ctx, body) => {
|
|
104
121
|
const { id } = body
|
|
105
122
|
|
|
@@ -113,6 +130,16 @@ export const retry = createHandler(async (ctx, body) => {
|
|
|
113
130
|
|
|
114
131
|
if (error || !delivery) throw new Error('Delivery not found')
|
|
115
132
|
|
|
133
|
+
// Retry re-executes the delivery under its own account as SYSTEM_PRINCIPAL,
|
|
134
|
+
// so the caller must be entitled to that account first: system-level
|
|
135
|
+
// callers pass through; everyone else may only retry their own account's
|
|
136
|
+
// deliveries.
|
|
137
|
+
if (!isSystemPrincipal(ctx) && (!ctx.accountId || delivery.account_id !== ctx.accountId)) {
|
|
138
|
+
const e: any = new Error('Insufficient permissions to retry this delivery')
|
|
139
|
+
e.statusCode = 403
|
|
140
|
+
throw e
|
|
141
|
+
}
|
|
142
|
+
|
|
116
143
|
if (delivery.direction !== 'outbound') {
|
|
117
144
|
throw new Error('Manual retry is only supported for outbound deliveries in this release')
|
|
118
145
|
}
|
|
@@ -134,15 +161,14 @@ export const retry = createHandler(async (ctx, body) => {
|
|
|
134
161
|
|
|
135
162
|
return result
|
|
136
163
|
})
|
|
164
|
+
// CIL[END stable_id="~/.framework/functions/deliveries.ts:retry:constant"]
|
|
137
165
|
// CIL[DOC-VECTOR type="context" content="purpose='Manually retry an outbound webhook delivery.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
|
|
138
166
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
139
167
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
140
168
|
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
141
169
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
142
170
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
143
|
-
// CIL[END stable_id="~/.framework/functions/deliveries.ts:retry:constant"]
|
|
144
171
|
|
|
145
|
-
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/deliveries.ts"]
|
|
146
172
|
// CIL[DOC-MACRO purpose="Route delivery requests to list, get, or retry handlers."]
|
|
147
173
|
// CIL[DOC-RESPONSIBILITY responsibility="Dispatch incoming requests based on action and HTTP method."]
|
|
148
174
|
// CIL[DOC-CONTEXT module="deliveries" layer="function" related_files=".framework/functions/_shared/audit.ts,.framework/functions/_shared/middleware.ts,.framework/functions/_shared/principal.ts,.framework/functions/deliveries.ts,.framework/functions/integration-outbound.ts"]
|
|
@@ -150,6 +176,7 @@ export const retry = createHandler(async (ctx, body) => {
|
|
|
150
176
|
// CIL[DOC-MICRO logic_summary="Routes GET requests with id to get, without id to list, and POST action retry to retry; otherwise throws." notable_decisions="Defaults method to GET; validates action and method combination."]
|
|
151
177
|
// CIL[DOC-CONFIDENCE pass="second" score="0.90" flags="none"]
|
|
152
178
|
// CIL[DOC-STABILITY stability="stable"]
|
|
179
|
+
// CIL[BEGIN stable_id="~/.framework/functions/deliveries.ts:handler:constant" type="constant" identity="handler" parent="~/.framework/functions/deliveries.ts"]
|
|
153
180
|
export const handler = createHandler(async (ctx, body) => {
|
|
154
181
|
const { action } = ctx.query || {}
|
|
155
182
|
const method = ctx.query?.method || 'GET'
|
|
@@ -167,10 +194,10 @@ export const handler = createHandler(async (ctx, body) => {
|
|
|
167
194
|
|
|
168
195
|
throw new Error('Invalid action or method')
|
|
169
196
|
})
|
|
197
|
+
// CIL[END stable_id="~/.framework/functions/deliveries.ts:handler:constant"]
|
|
170
198
|
// CIL[DOC-VECTOR type="context" content="purpose='Route delivery requests to list, get, or retry handlers.'; No verified external callers; imports: .framework/functions/_shared/middleware.ts,.framework/functions/_shared/audit.ts,.framework/functions/_shared/principal.ts"]
|
|
171
199
|
// CIL[DOC-VECTOR type="blast_radius" content="No direct caller data from CIL graph; local impact only"]
|
|
172
200
|
// CIL[DOC-VECTOR type="configuration" content="No environment or build configuration dependencies identified"]
|
|
173
201
|
// CIL[DOC-VECTOR type="constraint" content="Standard runtime; no special invariants documented"]
|
|
174
202
|
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
175
203
|
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
176
|
-
// CIL[END stable_id="~/.framework/functions/deliveries.ts:handler:constant"]
|