@contractspec/lib.contracts-integrations 2.0.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.
Files changed (240) hide show
  1. package/README.md +3 -0
  2. package/dist/index.d.ts +11 -0
  3. package/dist/index.js +3676 -0
  4. package/dist/integrations/binding.d.ts +14 -0
  5. package/dist/integrations/binding.js +1 -0
  6. package/dist/integrations/connection.d.ts +47 -0
  7. package/dist/integrations/connection.js +1 -0
  8. package/dist/integrations/docs/integrations.docblock.d.ts +2 -0
  9. package/dist/integrations/docs/integrations.docblock.js +110 -0
  10. package/dist/integrations/health.d.ts +17 -0
  11. package/dist/integrations/health.js +73 -0
  12. package/dist/integrations/health.test.d.ts +1 -0
  13. package/dist/integrations/index.d.ts +11 -0
  14. package/dist/integrations/index.js +3264 -0
  15. package/dist/integrations/integrations.capability.d.ts +1 -0
  16. package/dist/integrations/integrations.capability.js +18 -0
  17. package/dist/integrations/integrations.feature.d.ts +5 -0
  18. package/dist/integrations/integrations.feature.js +33 -0
  19. package/dist/integrations/meeting-recorder/contracts/index.d.ts +7 -0
  20. package/dist/integrations/meeting-recorder/contracts/index.js +474 -0
  21. package/dist/integrations/meeting-recorder/contracts/meetings.d.ts +451 -0
  22. package/dist/integrations/meeting-recorder/contracts/meetings.js +219 -0
  23. package/dist/integrations/meeting-recorder/contracts/transcripts.d.ts +166 -0
  24. package/dist/integrations/meeting-recorder/contracts/transcripts.js +287 -0
  25. package/dist/integrations/meeting-recorder/contracts/webhooks.d.ts +85 -0
  26. package/dist/integrations/meeting-recorder/contracts/webhooks.js +172 -0
  27. package/dist/integrations/meeting-recorder/meeting-recorder.capability.d.ts +1 -0
  28. package/dist/integrations/meeting-recorder/meeting-recorder.capability.js +18 -0
  29. package/dist/integrations/meeting-recorder/meeting-recorder.feature.d.ts +5 -0
  30. package/dist/integrations/meeting-recorder/meeting-recorder.feature.js +33 -0
  31. package/dist/integrations/meeting-recorder/models.d.ts +402 -0
  32. package/dist/integrations/meeting-recorder/models.js +122 -0
  33. package/dist/integrations/meeting-recorder/telemetry.d.ts +13 -0
  34. package/dist/integrations/meeting-recorder/telemetry.js +54 -0
  35. package/dist/integrations/openbanking/contracts/accounts.d.ts +282 -0
  36. package/dist/integrations/openbanking/contracts/accounts.js +328 -0
  37. package/dist/integrations/openbanking/contracts/balances.d.ts +158 -0
  38. package/dist/integrations/openbanking/contracts/balances.js +292 -0
  39. package/dist/integrations/openbanking/contracts/index.d.ts +7 -0
  40. package/dist/integrations/openbanking/contracts/index.js +644 -0
  41. package/dist/integrations/openbanking/contracts/transactions.d.ts +206 -0
  42. package/dist/integrations/openbanking/contracts/transactions.js +298 -0
  43. package/dist/integrations/openbanking/guards.d.ts +8 -0
  44. package/dist/integrations/openbanking/guards.js +42 -0
  45. package/dist/integrations/openbanking/guards.test.d.ts +1 -0
  46. package/dist/integrations/openbanking/models.d.ts +223 -0
  47. package/dist/integrations/openbanking/models.js +110 -0
  48. package/dist/integrations/openbanking/openbanking.capability.d.ts +1 -0
  49. package/dist/integrations/openbanking/openbanking.capability.js +18 -0
  50. package/dist/integrations/openbanking/openbanking.feature.d.ts +5 -0
  51. package/dist/integrations/openbanking/openbanking.feature.js +35 -0
  52. package/dist/integrations/openbanking/telemetry.d.ts +12 -0
  53. package/dist/integrations/openbanking/telemetry.js +51 -0
  54. package/dist/integrations/operations.d.ts +430 -0
  55. package/dist/integrations/operations.js +297 -0
  56. package/dist/integrations/operations.test.d.ts +1 -0
  57. package/dist/integrations/providers/analytics-reader.d.ts +103 -0
  58. package/dist/integrations/providers/analytics-reader.js +1 -0
  59. package/dist/integrations/providers/analytics-writer.d.ts +6 -0
  60. package/dist/integrations/providers/analytics-writer.js +1 -0
  61. package/dist/integrations/providers/analytics.d.ts +47 -0
  62. package/dist/integrations/providers/analytics.js +1 -0
  63. package/dist/integrations/providers/calendar.d.ts +75 -0
  64. package/dist/integrations/providers/calendar.js +1 -0
  65. package/dist/integrations/providers/database.d.ts +12 -0
  66. package/dist/integrations/providers/database.js +1 -0
  67. package/dist/integrations/providers/elevenlabs.d.ts +3 -0
  68. package/dist/integrations/providers/elevenlabs.js +86 -0
  69. package/dist/integrations/providers/email.d.ts +83 -0
  70. package/dist/integrations/providers/email.js +1 -0
  71. package/dist/integrations/providers/embedding.d.ts +21 -0
  72. package/dist/integrations/providers/embedding.js +1 -0
  73. package/dist/integrations/providers/fal.d.ts +3 -0
  74. package/dist/integrations/providers/fal.js +112 -0
  75. package/dist/integrations/providers/fathom.d.ts +3 -0
  76. package/dist/integrations/providers/fathom.js +126 -0
  77. package/dist/integrations/providers/fireflies.d.ts +3 -0
  78. package/dist/integrations/providers/fireflies.js +106 -0
  79. package/dist/integrations/providers/gcs-storage.d.ts +3 -0
  80. package/dist/integrations/providers/gcs-storage.js +97 -0
  81. package/dist/integrations/providers/gmail.d.ts +3 -0
  82. package/dist/integrations/providers/gmail.js +109 -0
  83. package/dist/integrations/providers/google-calendar.d.ts +3 -0
  84. package/dist/integrations/providers/google-calendar.js +92 -0
  85. package/dist/integrations/providers/gradium.d.ts +3 -0
  86. package/dist/integrations/providers/gradium.js +110 -0
  87. package/dist/integrations/providers/granola.d.ts +3 -0
  88. package/dist/integrations/providers/granola.js +107 -0
  89. package/dist/integrations/providers/index.d.ts +38 -0
  90. package/dist/integrations/providers/index.js +2094 -0
  91. package/dist/integrations/providers/jira.d.ts +3 -0
  92. package/dist/integrations/providers/jira.js +108 -0
  93. package/dist/integrations/providers/linear.d.ts +3 -0
  94. package/dist/integrations/providers/linear.js +107 -0
  95. package/dist/integrations/providers/llm.d.ts +79 -0
  96. package/dist/integrations/providers/llm.js +1 -0
  97. package/dist/integrations/providers/meeting-recorder.d.ts +129 -0
  98. package/dist/integrations/providers/meeting-recorder.js +1 -0
  99. package/dist/integrations/providers/mistral.d.ts +3 -0
  100. package/dist/integrations/providers/mistral.js +94 -0
  101. package/dist/integrations/providers/notion.d.ts +3 -0
  102. package/dist/integrations/providers/notion.js +113 -0
  103. package/dist/integrations/providers/openbanking.d.ts +125 -0
  104. package/dist/integrations/providers/openbanking.js +1 -0
  105. package/dist/integrations/providers/payments.d.ts +106 -0
  106. package/dist/integrations/providers/payments.js +1 -0
  107. package/dist/integrations/providers/posthog-llm-telemetry.d.ts +51 -0
  108. package/dist/integrations/providers/posthog-llm-telemetry.js +176 -0
  109. package/dist/integrations/providers/posthog.d.ts +3 -0
  110. package/dist/integrations/providers/posthog.js +106 -0
  111. package/dist/integrations/providers/postmark.d.ts +3 -0
  112. package/dist/integrations/providers/postmark.js +98 -0
  113. package/dist/integrations/providers/powens.d.ts +3 -0
  114. package/dist/integrations/providers/powens.js +124 -0
  115. package/dist/integrations/providers/project-management.d.ts +32 -0
  116. package/dist/integrations/providers/project-management.js +1 -0
  117. package/dist/integrations/providers/providers.test.d.ts +1 -0
  118. package/dist/integrations/providers/qdrant.d.ts +3 -0
  119. package/dist/integrations/providers/qdrant.js +101 -0
  120. package/dist/integrations/providers/registry.d.ts +6 -0
  121. package/dist/integrations/providers/registry.js +1878 -0
  122. package/dist/integrations/providers/sms.d.ts +31 -0
  123. package/dist/integrations/providers/sms.js +1 -0
  124. package/dist/integrations/providers/storage.d.ts +57 -0
  125. package/dist/integrations/providers/storage.js +1 -0
  126. package/dist/integrations/providers/stripe.d.ts +3 -0
  127. package/dist/integrations/providers/stripe.js +105 -0
  128. package/dist/integrations/providers/supabase-postgres.d.ts +3 -0
  129. package/dist/integrations/providers/supabase-postgres.js +87 -0
  130. package/dist/integrations/providers/supabase-vector.d.ts +3 -0
  131. package/dist/integrations/providers/supabase-vector.js +107 -0
  132. package/dist/integrations/providers/tldv.d.ts +3 -0
  133. package/dist/integrations/providers/tldv.js +106 -0
  134. package/dist/integrations/providers/twilio-sms.d.ts +3 -0
  135. package/dist/integrations/providers/twilio-sms.js +91 -0
  136. package/dist/integrations/providers/vector-store.d.ts +39 -0
  137. package/dist/integrations/providers/vector-store.js +1 -0
  138. package/dist/integrations/providers/voice.d.ts +31 -0
  139. package/dist/integrations/providers/voice.js +1 -0
  140. package/dist/integrations/runtime.d.ts +95 -0
  141. package/dist/integrations/runtime.js +209 -0
  142. package/dist/integrations/runtime.test.d.ts +1 -0
  143. package/dist/integrations/secrets/aws-secret-manager.d.ts +28 -0
  144. package/dist/integrations/secrets/aws-secret-manager.js +346 -0
  145. package/dist/integrations/secrets/env-secret-provider.d.ts +28 -0
  146. package/dist/integrations/secrets/env-secret-provider.js +159 -0
  147. package/dist/integrations/secrets/gcp-secret-manager.d.ts +29 -0
  148. package/dist/integrations/secrets/gcp-secret-manager.js +347 -0
  149. package/dist/integrations/secrets/index.d.ts +6 -0
  150. package/dist/integrations/secrets/index.js +1129 -0
  151. package/dist/integrations/secrets/manager.d.ts +44 -0
  152. package/dist/integrations/secrets/manager.js +183 -0
  153. package/dist/integrations/secrets/provider.d.ts +49 -0
  154. package/dist/integrations/secrets/provider.js +74 -0
  155. package/dist/integrations/secrets/provider.test.d.ts +1 -0
  156. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +35 -0
  157. package/dist/integrations/secrets/scaleway-secret-manager.js +375 -0
  158. package/dist/integrations/secrets-types.d.ts +14 -0
  159. package/dist/integrations/secrets-types.js +1 -0
  160. package/dist/integrations/spec.d.ts +72 -0
  161. package/dist/integrations/spec.js +22 -0
  162. package/dist/integrations/spec.test.d.ts +1 -0
  163. package/dist/node/index.js +3675 -0
  164. package/dist/node/integrations/binding.js +0 -0
  165. package/dist/node/integrations/connection.js +0 -0
  166. package/dist/node/integrations/docs/integrations.docblock.js +109 -0
  167. package/dist/node/integrations/health.js +72 -0
  168. package/dist/node/integrations/index.js +3263 -0
  169. package/dist/node/integrations/integrations.capability.js +17 -0
  170. package/dist/node/integrations/integrations.feature.js +32 -0
  171. package/dist/node/integrations/meeting-recorder/contracts/index.js +473 -0
  172. package/dist/node/integrations/meeting-recorder/contracts/meetings.js +218 -0
  173. package/dist/node/integrations/meeting-recorder/contracts/transcripts.js +286 -0
  174. package/dist/node/integrations/meeting-recorder/contracts/webhooks.js +171 -0
  175. package/dist/node/integrations/meeting-recorder/meeting-recorder.capability.js +17 -0
  176. package/dist/node/integrations/meeting-recorder/meeting-recorder.feature.js +32 -0
  177. package/dist/node/integrations/meeting-recorder/models.js +121 -0
  178. package/dist/node/integrations/meeting-recorder/telemetry.js +53 -0
  179. package/dist/node/integrations/openbanking/contracts/accounts.js +327 -0
  180. package/dist/node/integrations/openbanking/contracts/balances.js +291 -0
  181. package/dist/node/integrations/openbanking/contracts/index.js +643 -0
  182. package/dist/node/integrations/openbanking/contracts/transactions.js +297 -0
  183. package/dist/node/integrations/openbanking/guards.js +41 -0
  184. package/dist/node/integrations/openbanking/models.js +109 -0
  185. package/dist/node/integrations/openbanking/openbanking.capability.js +17 -0
  186. package/dist/node/integrations/openbanking/openbanking.feature.js +34 -0
  187. package/dist/node/integrations/openbanking/telemetry.js +50 -0
  188. package/dist/node/integrations/operations.js +296 -0
  189. package/dist/node/integrations/providers/analytics-reader.js +0 -0
  190. package/dist/node/integrations/providers/analytics-writer.js +0 -0
  191. package/dist/node/integrations/providers/analytics.js +0 -0
  192. package/dist/node/integrations/providers/calendar.js +0 -0
  193. package/dist/node/integrations/providers/database.js +0 -0
  194. package/dist/node/integrations/providers/elevenlabs.js +85 -0
  195. package/dist/node/integrations/providers/email.js +0 -0
  196. package/dist/node/integrations/providers/embedding.js +0 -0
  197. package/dist/node/integrations/providers/fal.js +111 -0
  198. package/dist/node/integrations/providers/fathom.js +125 -0
  199. package/dist/node/integrations/providers/fireflies.js +105 -0
  200. package/dist/node/integrations/providers/gcs-storage.js +96 -0
  201. package/dist/node/integrations/providers/gmail.js +108 -0
  202. package/dist/node/integrations/providers/google-calendar.js +91 -0
  203. package/dist/node/integrations/providers/gradium.js +109 -0
  204. package/dist/node/integrations/providers/granola.js +106 -0
  205. package/dist/node/integrations/providers/index.js +2093 -0
  206. package/dist/node/integrations/providers/jira.js +107 -0
  207. package/dist/node/integrations/providers/linear.js +106 -0
  208. package/dist/node/integrations/providers/llm.js +0 -0
  209. package/dist/node/integrations/providers/meeting-recorder.js +0 -0
  210. package/dist/node/integrations/providers/mistral.js +93 -0
  211. package/dist/node/integrations/providers/notion.js +112 -0
  212. package/dist/node/integrations/providers/openbanking.js +0 -0
  213. package/dist/node/integrations/providers/payments.js +0 -0
  214. package/dist/node/integrations/providers/posthog-llm-telemetry.js +175 -0
  215. package/dist/node/integrations/providers/posthog.js +105 -0
  216. package/dist/node/integrations/providers/postmark.js +97 -0
  217. package/dist/node/integrations/providers/powens.js +123 -0
  218. package/dist/node/integrations/providers/project-management.js +0 -0
  219. package/dist/node/integrations/providers/qdrant.js +100 -0
  220. package/dist/node/integrations/providers/registry.js +1877 -0
  221. package/dist/node/integrations/providers/sms.js +0 -0
  222. package/dist/node/integrations/providers/storage.js +0 -0
  223. package/dist/node/integrations/providers/stripe.js +104 -0
  224. package/dist/node/integrations/providers/supabase-postgres.js +86 -0
  225. package/dist/node/integrations/providers/supabase-vector.js +106 -0
  226. package/dist/node/integrations/providers/tldv.js +105 -0
  227. package/dist/node/integrations/providers/twilio-sms.js +90 -0
  228. package/dist/node/integrations/providers/vector-store.js +0 -0
  229. package/dist/node/integrations/providers/voice.js +0 -0
  230. package/dist/node/integrations/runtime.js +208 -0
  231. package/dist/node/integrations/secrets/aws-secret-manager.js +345 -0
  232. package/dist/node/integrations/secrets/env-secret-provider.js +158 -0
  233. package/dist/node/integrations/secrets/gcp-secret-manager.js +346 -0
  234. package/dist/node/integrations/secrets/index.js +1128 -0
  235. package/dist/node/integrations/secrets/manager.js +182 -0
  236. package/dist/node/integrations/secrets/provider.js +73 -0
  237. package/dist/node/integrations/secrets/scaleway-secret-manager.js +374 -0
  238. package/dist/node/integrations/secrets-types.js +0 -0
  239. package/dist/node/integrations/spec.js +21 -0
  240. package/package.json +1029 -0
@@ -0,0 +1,14 @@
1
+ export interface AppIntegrationBinding {
2
+ /** Which slot this binding satisfies. */
3
+ slotId: string;
4
+ /** Which IntegrationConnection to use. */
5
+ connectionId: string;
6
+ /** Optional: scope to specific workflows/features. */
7
+ scope?: {
8
+ workflows?: string[];
9
+ features?: string[];
10
+ operations?: string[];
11
+ };
12
+ /** Priority when multiple connections provide same capability. */
13
+ priority?: number;
14
+ }
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,47 @@
1
+ import type { IntegrationOwnershipMode } from './spec';
2
+ export type ConnectionStatus = 'connected' | 'disconnected' | 'error' | 'unknown';
3
+ export interface IntegrationConnectionHealth {
4
+ status: ConnectionStatus;
5
+ checkedAt?: Date;
6
+ latencyMs?: number;
7
+ errorCode?: string;
8
+ errorMessage?: string;
9
+ }
10
+ export interface IntegrationUsageMetrics {
11
+ requestCount?: number;
12
+ successCount?: number;
13
+ errorCount?: number;
14
+ lastUsed?: Date;
15
+ lastSuccessAt?: Date;
16
+ lastErrorAt?: Date;
17
+ lastErrorCode?: string;
18
+ }
19
+ export interface IntegrationConnectionMeta {
20
+ id: string;
21
+ tenantId: string;
22
+ /** Reference to IntegrationSpec. */
23
+ integrationKey: string;
24
+ integrationVersion: string;
25
+ /** Human-readable label (e.g., "Production Stripe"). */
26
+ label: string;
27
+ environment?: string;
28
+ createdAt: string | Date;
29
+ updatedAt: string | Date;
30
+ }
31
+ export interface IntegrationConnection {
32
+ meta: IntegrationConnectionMeta;
33
+ /** Ownership mode indicating who controls credentials. */
34
+ ownershipMode: IntegrationOwnershipMode;
35
+ /** External provider account/project identifier (BYOK scenarios). */
36
+ externalAccountId?: string;
37
+ /** Encrypted configuration matching IntegrationSpec.configSchema. */
38
+ config: Record<string, unknown>;
39
+ /** Reference to external secret store entry containing credentials. */
40
+ secretProvider: string;
41
+ secretRef: string;
42
+ status: ConnectionStatus;
43
+ /** Last health check result. */
44
+ health?: IntegrationConnectionHealth;
45
+ /** Usage tracking. */
46
+ usage?: IntegrationUsageMetrics;
47
+ }
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,2 @@
1
+ import type { DocBlock } from '@contractspec/lib.contracts-spec/docs';
2
+ export declare const tech_contracts_integrations_DocBlocks: DocBlock[];
@@ -0,0 +1,110 @@
1
+ // @bun
2
+ // src/integrations/docs/integrations.docblock.ts
3
+ import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs/registry";
4
+ var tech_contracts_integrations_DocBlocks = [
5
+ {
6
+ id: "docs.tech.contracts.integrations",
7
+ title: "ContractSpec Integrations",
8
+ summary: "Provider-agnostic integration contracts: specs, connections, secrets, health checks, and runtime guards.",
9
+ kind: "reference",
10
+ visibility: "public",
11
+ route: "/docs/tech/contracts/integrations",
12
+ tags: ["tech", "contracts", "integrations"],
13
+ body: `# ContractSpec Integrations
14
+
15
+ This document describes the integration architecture that powers ContractSpec-based apps. It focuses on provider-agnostic contracts, secret management, health checks, and runtime guards.
16
+
17
+ ## Core Concepts
18
+
19
+ - **IntegrationSpec** \u2013 declarative description of a provider that lists supported ownership modes, capability mappings, configuration schema, secret schema, health check policy, and documentation metadata.
20
+ - **IntegrationConnection** \u2013 tenant/environment binding to a provider (\`meta\` + ownership mode + config + \`secretRef\`). Secrets are never embedded in specs or configs.
21
+ - **AppIntegrationSlot** \u2013 blueprint-level requirement that declares which integration categories/capabilities must be satisfied at runtime (e.g. \`primaryLLM\`, \`primaryVectorDb\`).
22
+ - **AppIntegrationBinding** \u2013 tenant-level slot \u2192 connection mapping.
23
+ - **ResolvedIntegration** \u2013 runtime view containing slot metadata, connection details, and the resolved IntegrationSpec.
24
+
25
+ ## Registered Providers
26
+
27
+ The contracts library ships twenty-two priority providers in \`packages/libs/contracts/src/integrations/providers\`:
28
+
29
+ | Category | Provider | Key | Notes |
30
+ | ------------- | ---------------- | --------------------------- | ------------------------------------------------- |
31
+ | payments | Stripe | \`payments.stripe\` | Card + invoice flows, managed or BYOK credentials |
32
+ | email (out) | Postmark | \`email.postmark\` | Transactional email delivery |
33
+ | email (in) | Gmail API | \`email.gmail\` | Thread ingestion (OAuth BYOK or service account) |
34
+ | calendar | Google Calendar | \`calendar.google\` | Event scheduling via service account |
35
+ | analytics | PostHog | \`analytics.posthog\` | Product analytics, flags, and HogQL queries |
36
+ | vector-db | Qdrant | \`vectordb.qdrant\` | Embedding storage & search |
37
+ | vector-db | Supabase pgvector| \`vectordb.supabase\` | Embedding storage & search on Supabase Postgres |
38
+ | database | Supabase Postgres| \`database.supabase\` | SQL queries and transactions on Supabase Postgres |
39
+ | storage | Google Cloud | \`storage.gcs\` | Object storage |
40
+ | ai-llm | Mistral | \`ai-llm.mistral\` | Primary chat + embedding provider |
41
+ | ai-voice | ElevenLabs | \`ai-voice.elevenlabs\` | Text-to-speech synthesis |
42
+ | ai-voice | Gradium | \`ai-voice.gradium\` | Low-latency text-to-speech synthesis |
43
+ | ai-voice | Fal Chatterbox | \`ai-voice.fal\` | Chatterbox text-to-speech via queue API |
44
+ | sms | Twilio SMS | \`sms.twilio\` | Urgent and fallback reminders |
45
+ | open-banking | Powens | \`openbanking.powens\` | Read-only account, transaction, and balance sync |
46
+ | project-management | Linear | \`project-management.linear\` | Issues, project tracking, and team tasks |
47
+ | project-management | Jira Cloud | \`project-management.jira\` | Work item sync for Jira Cloud |
48
+ | project-management | Notion | \`project-management.notion\` | Shared summaries and task databases |
49
+ | meeting-recorder | Granola | \`meeting-recorder.granola\` | Meeting notes + transcripts via API or MCP |
50
+ | meeting-recorder | tl;dv | \`meeting-recorder.tldv\` | Meeting recordings, transcripts, and webhooks |
51
+ | meeting-recorder | Fireflies | \`meeting-recorder.fireflies\` | GraphQL transcripts + webhook events |
52
+ | meeting-recorder | Fathom | \`meeting-recorder.fathom\` | External API meetings + webhook registration |
53
+
54
+ PostHog adapters also support read access (events, persons, insights, cohorts, annotations) via analytics providers.
55
+
56
+ Each provider ships with:
57
+
58
+ - Strongly typed adapter interfaces (\`payments.ts\`, \`llm.ts\`, etc.)
59
+ - A concrete SDK-backed implementation under \`providers/impls\`
60
+ - Unit tests validating adapter behaviour and health checks
61
+
62
+ ### Example package
63
+
64
+ - Supabase dual-store example (vector + SQL): \`@contractspec/example.integration-supabase\`
65
+
66
+ ### Canonical registry builder
67
+
68
+ To list all shipped specs at runtime, use:
69
+
70
+ - \`createDefaultIntegrationSpecRegistry()\` from \`@contractspec/lib.contracts-integrations\`
71
+
72
+ ## Secret Management
73
+
74
+ All integrations rely on the \`SecretProvider\` abstraction defined in \`integrations/secrets\`. Providers ship with the contracts library and are orchestrated by the \`SecretProviderManager\` composite:
75
+
76
+ - **EnvSecretProvider** (\`env-secret-provider.ts\`) \u2013 high-priority, read-only overrides backed by environment variables.
77
+ - Supports the \`env://VARIABLE_NAME\` scheme
78
+ - Supports overrides for other schemes via \`?env=ALIAS\` or derived uppercase keys
79
+ - **GcpSecretManagerProvider** (\`gcp-secret-manager.ts\`) \u2013 versioned secrets stored in Google Cloud Secret Manager.
80
+ - Example: \`gcp://projects/demo/secrets/stripe-key/versions/latest\`
81
+ - **AwsSecretsManagerProvider** (\`aws-secret-manager.ts\`) \u2013 AWS Secrets Manager backend.
82
+ - Example: \`aws://secretsmanager/eu-west-1/my-secret?version=AWSCURRENT\`
83
+ - Region may be in the reference or provided via \`AWS_REGION\` / \`AWS_DEFAULT_REGION\`
84
+ - **ScalewaySecretManagerProvider** (\`scaleway-secret-manager.ts\`) \u2013 Scaleway Secret Manager backend.
85
+ - Example (id): \`scw://secret-manager/fr-par/1234...-uuid?version=latest\`
86
+ - Example (name, create+write): \`scw://secret-manager/fr-par/my-secret-name\`
87
+ - Requires \`SCW_SECRET_KEY\` (token) and \`SCW_DEFAULT_PROJECT_ID\` when creating secrets by name
88
+
89
+ The manager attempts providers in priority order (environment first, then cloud providers). Key points:
90
+
91
+ - \`secretRef\` is a URI-like reference; raw secrets are never returned.
92
+ - \`IntegrationCallGuard\` fetches and parses secrets before executing a provider adapter.
93
+ - Local development can rely on \`.env\` files, while staging/production reference cloud secret stores.
94
+
95
+ ## Health Checks & Telemetry
96
+
97
+ - Each IntegrationSpec optionally declares \`healthCheck.method\` and timeouts.
98
+ - \`IntegrationCallGuard\` enforces connection status, wraps retries with exponential back-off, and emits telemetry events tagged with tenant/app/slot metadata.
99
+ - Validation rules (\`app-config/validation.ts\`) surface issues at publish time (slot mismatch, unsupported ownership modes, missing capabilities, etc.).
100
+
101
+ ## Studio persistence (ContractSpec Studio)
102
+
103
+ ContractSpec Studio persists tenant \`IntegrationConnection\` records in Postgres (Prisma model \`IntegrationConnection\` in \`@contractspec/lib.database-studio\`) and exposes a platform-admin management surface (see the Studio platform admin panel).
104
+ `
105
+ }
106
+ ];
107
+ registerDocBlocks(tech_contracts_integrations_DocBlocks);
108
+ export {
109
+ tech_contracts_integrations_DocBlocks
110
+ };
@@ -0,0 +1,17 @@
1
+ import type { IntegrationConnectionHealth } from './connection';
2
+ import type { IntegrationContext, IntegrationTelemetryEmitter } from './runtime';
3
+ export interface IntegrationHealthCheckResult extends IntegrationConnectionHealth {
4
+ metadata?: Record<string, string>;
5
+ }
6
+ export type IntegrationHealthCheckExecutor = (context: IntegrationContext) => Promise<void>;
7
+ export interface IntegrationHealthServiceOptions {
8
+ telemetry?: IntegrationTelemetryEmitter;
9
+ now?: () => Date;
10
+ }
11
+ export declare class IntegrationHealthService {
12
+ private readonly telemetry?;
13
+ private readonly nowFn;
14
+ constructor(options?: IntegrationHealthServiceOptions);
15
+ check(context: IntegrationContext, executor: IntegrationHealthCheckExecutor): Promise<IntegrationHealthCheckResult>;
16
+ private emitTelemetry;
17
+ }
@@ -0,0 +1,73 @@
1
+ // @bun
2
+ // src/integrations/health.ts
3
+ class IntegrationHealthService {
4
+ telemetry;
5
+ nowFn;
6
+ constructor(options = {}) {
7
+ this.telemetry = options.telemetry;
8
+ this.nowFn = options.now ?? (() => new Date);
9
+ }
10
+ async check(context, executor) {
11
+ const start = this.nowFn();
12
+ try {
13
+ await executor(context);
14
+ const end = this.nowFn();
15
+ const result = {
16
+ status: "connected",
17
+ checkedAt: end,
18
+ latencyMs: end.getTime() - start.getTime()
19
+ };
20
+ this.emitTelemetry(context, result, "success");
21
+ return result;
22
+ } catch (error) {
23
+ const end = this.nowFn();
24
+ const message = error instanceof Error ? error.message : "Unknown error";
25
+ const code = extractErrorCode(error);
26
+ const result = {
27
+ status: "error",
28
+ checkedAt: end,
29
+ latencyMs: end.getTime() - start.getTime(),
30
+ errorMessage: message,
31
+ errorCode: code
32
+ };
33
+ this.emitTelemetry(context, result, "error", code, message);
34
+ return result;
35
+ }
36
+ }
37
+ emitTelemetry(context, result, status, errorCode, errorMessage) {
38
+ if (!this.telemetry)
39
+ return;
40
+ this.telemetry.record({
41
+ tenantId: context.tenantId,
42
+ appId: context.appId,
43
+ environment: context.environment,
44
+ slotId: context.slotId,
45
+ integrationKey: context.spec.meta.key,
46
+ integrationVersion: context.spec.meta.version,
47
+ connectionId: context.connection.meta.id,
48
+ status,
49
+ durationMs: result.latencyMs,
50
+ errorCode,
51
+ errorMessage,
52
+ occurredAt: result.checkedAt ?? this.nowFn(),
53
+ metadata: {
54
+ ...context.trace ? {
55
+ blueprint: `${context.trace.blueprintName}.v${context.trace.blueprintVersion}`,
56
+ configVersion: context.trace.configVersion
57
+ } : {},
58
+ status: result.status
59
+ }
60
+ });
61
+ }
62
+ }
63
+ function extractErrorCode(error) {
64
+ if (!error || typeof error !== "object")
65
+ return;
66
+ const candidate = error;
67
+ if (candidate.code == null)
68
+ return;
69
+ return String(candidate.code);
70
+ }
71
+ export {
72
+ IntegrationHealthService
73
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ export * from './spec';
2
+ export * from './connection';
3
+ export * from './binding';
4
+ export * from './providers';
5
+ export * from './openbanking/models';
6
+ export * from './openbanking/contracts';
7
+ export * from './openbanking/guards';
8
+ export * from './openbanking/telemetry';
9
+ export { MeetingParticipantRecord, MeetingTranscriptSegmentRecord, MeetingRecorderWebhookEventRecord, MeetingRecord as MeetingRecordModel, MeetingTranscriptRecord as MeetingTranscriptRecordModel, } from './meeting-recorder/models';
10
+ export * from './meeting-recorder/contracts';
11
+ export * from './meeting-recorder/telemetry';