@lssm/lib.contracts 0.0.0-canary-20251217063201 → 0.0.0-canary-20251217072406

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 (239) hide show
  1. package/dist/app-config/app-config.feature.js +53 -1
  2. package/dist/app-config/contracts.d.ts +50 -50
  3. package/dist/app-config/contracts.js +396 -1
  4. package/dist/app-config/docs/app-config.docblock.js +22 -220
  5. package/dist/app-config/events.d.ts +27 -27
  6. package/dist/app-config/events.js +168 -1
  7. package/dist/app-config/index.js +8 -1
  8. package/dist/app-config/lifecycle-contracts.d.ts +80 -80
  9. package/dist/app-config/lifecycle-contracts.js +441 -1
  10. package/dist/app-config/runtime.js +617 -1
  11. package/dist/app-config/spec.js +36 -1
  12. package/dist/app-config/validation.js +538 -1
  13. package/dist/capabilities/docs/capabilities.docblock.js +22 -1
  14. package/dist/capabilities/openbanking.js +92 -1
  15. package/dist/capabilities.js +50 -1
  16. package/dist/client/index.js +9 -1
  17. package/dist/client/react/drivers/rn-reusables.js +21 -1
  18. package/dist/client/react/drivers/shadcn.js +11 -1
  19. package/dist/client/react/feature-render.js +43 -1
  20. package/dist/client/react/form-render.js +298 -1
  21. package/dist/client/react/index.js +8 -1
  22. package/dist/contract-registry/index.js +3 -1
  23. package/dist/contract-registry/schemas.js +61 -1
  24. package/dist/contracts-adapter-hydration.js +41 -1
  25. package/dist/contracts-adapter-input.js +77 -1
  26. package/dist/data-views/docs/data-views.docblock.js +22 -1
  27. package/dist/data-views/query-generator.js +48 -1
  28. package/dist/data-views/runtime.js +39 -1
  29. package/dist/data-views.js +35 -1
  30. package/dist/docs/PUBLISHING.docblock.js +17 -76
  31. package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +17 -350
  32. package/dist/docs/index.js +33 -1
  33. package/dist/docs/meta.docs.js +15 -2
  34. package/dist/docs/presentations.js +77 -1
  35. package/dist/docs/registry.js +51 -1
  36. package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +17 -383
  37. package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +17 -68
  38. package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +17 -140
  39. package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +17 -86
  40. package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +17 -1
  41. package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +25 -2
  42. package/dist/docs/tech/contracts/README.docblock.js +21 -1
  43. package/dist/docs/tech/contracts/create-subscription.docblock.js +21 -1
  44. package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +21 -180
  45. package/dist/docs/tech/contracts/migrations.docblock.js +21 -1
  46. package/dist/docs/tech/contracts/openapi-export.docblock.js +22 -2
  47. package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +19 -60
  48. package/dist/docs/tech/contracts/overlays.docblock.js +21 -68
  49. package/dist/docs/tech/contracts/tests.docblock.js +21 -132
  50. package/dist/docs/tech/contracts/themes.docblock.js +21 -1
  51. package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +21 -106
  52. package/dist/docs/tech/lifecycle-stage-system.docblock.js +17 -213
  53. package/dist/docs/tech/llm/llm-integration.docblock.js +74 -5
  54. package/dist/docs/tech/mcp-endpoints.docblock.js +38 -1
  55. package/dist/docs/tech/presentation-runtime.docblock.js +17 -1
  56. package/dist/docs/tech/schema/README.docblock.js +21 -262
  57. package/dist/docs/tech/studio/learning-events.docblock.js +49 -1
  58. package/dist/docs/tech/studio/learning-journeys.docblock.js +25 -2
  59. package/dist/docs/tech/studio/platform-admin-panel.docblock.js +24 -2
  60. package/dist/docs/tech/studio/project-access-teams.docblock.js +26 -16
  61. package/dist/docs/tech/studio/project-routing.docblock.js +68 -1
  62. package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +23 -2
  63. package/dist/docs/tech/studio/team-invitations.docblock.js +41 -36
  64. package/dist/docs/tech/studio/workspace-ops.docblock.js +48 -1
  65. package/dist/docs/tech/studio/workspaces.docblock.js +24 -2
  66. package/dist/docs/tech/telemetry-ingest.docblock.js +37 -3
  67. package/dist/docs/tech/templates/runtime.docblock.js +21 -1
  68. package/dist/docs/tech/vscode-extension.docblock.js +37 -3
  69. package/dist/docs/tech/workflows/overview.docblock.js +21 -1
  70. package/dist/docs/tech-contracts.docs.js +19 -2
  71. package/dist/events.js +12 -1
  72. package/dist/experiments/docs/experiments.docblock.js +22 -128
  73. package/dist/experiments/evaluator.js +101 -1
  74. package/dist/experiments/spec.js +33 -1
  75. package/dist/features.js +68 -1
  76. package/dist/forms/docs/forms.docblock.js +22 -1
  77. package/dist/forms.js +119 -1
  78. package/dist/index.js +107 -1
  79. package/dist/install.js +40 -1
  80. package/dist/integrations/contracts.d.ts +102 -102
  81. package/dist/integrations/contracts.js +388 -1
  82. package/dist/integrations/docs/integrations.docblock.js +95 -1
  83. package/dist/integrations/health.js +69 -1
  84. package/dist/integrations/index.js +23 -1
  85. package/dist/integrations/openbanking/contracts/accounts.d.ts +66 -66
  86. package/dist/integrations/openbanking/contracts/accounts.js +237 -1
  87. package/dist/integrations/openbanking/contracts/balances.d.ts +34 -34
  88. package/dist/integrations/openbanking/contracts/balances.js +167 -1
  89. package/dist/integrations/openbanking/contracts/index.js +12 -1
  90. package/dist/integrations/openbanking/contracts/transactions.d.ts +48 -48
  91. package/dist/integrations/openbanking/contracts/transactions.js +218 -1
  92. package/dist/integrations/openbanking/guards.js +32 -1
  93. package/dist/integrations/openbanking/models.d.ts +55 -55
  94. package/dist/integrations/openbanking/models.js +242 -1
  95. package/dist/integrations/openbanking/openbanking.feature.js +68 -1
  96. package/dist/integrations/openbanking/telemetry.js +39 -1
  97. package/dist/integrations/providers/elevenlabs.js +56 -1
  98. package/dist/integrations/providers/gcs-storage.js +79 -1
  99. package/dist/integrations/providers/gmail.js +91 -1
  100. package/dist/integrations/providers/google-calendar.js +70 -1
  101. package/dist/integrations/providers/impls/elevenlabs-voice.js +95 -1
  102. package/dist/integrations/providers/impls/gcs-storage.js +88 -1
  103. package/dist/integrations/providers/impls/gmail-inbound.js +200 -1
  104. package/dist/integrations/providers/impls/gmail-outbound.js +104 -5
  105. package/dist/integrations/providers/impls/google-calendar.js +154 -1
  106. package/dist/integrations/providers/impls/index.js +16 -1
  107. package/dist/integrations/providers/impls/mistral-embedding.js +41 -1
  108. package/dist/integrations/providers/impls/mistral-llm.js +247 -1
  109. package/dist/integrations/providers/impls/postmark-email.js +55 -1
  110. package/dist/integrations/providers/impls/powens-client.js +171 -1
  111. package/dist/integrations/providers/impls/powens-openbanking.js +218 -1
  112. package/dist/integrations/providers/impls/provider-factory.js +142 -1
  113. package/dist/integrations/providers/impls/qdrant-vector.js +69 -1
  114. package/dist/integrations/providers/impls/stripe-payments.js +202 -1
  115. package/dist/integrations/providers/impls/twilio-sms.js +58 -1
  116. package/dist/integrations/providers/index.js +13 -1
  117. package/dist/integrations/providers/mistral.js +72 -1
  118. package/dist/integrations/providers/postmark.js +72 -1
  119. package/dist/integrations/providers/powens.js +120 -1
  120. package/dist/integrations/providers/qdrant.js +77 -1
  121. package/dist/integrations/providers/registry.js +34 -1
  122. package/dist/integrations/providers/stripe.js +87 -1
  123. package/dist/integrations/providers/twilio-sms.js +65 -1
  124. package/dist/integrations/runtime.js +186 -1
  125. package/dist/integrations/secrets/aws-secret-manager.js +231 -1
  126. package/dist/integrations/secrets/env-secret-provider.js +81 -1
  127. package/dist/integrations/secrets/gcp-secret-manager.js +229 -1
  128. package/dist/integrations/secrets/index.js +8 -1
  129. package/dist/integrations/secrets/manager.js +103 -1
  130. package/dist/integrations/secrets/provider.js +58 -1
  131. package/dist/integrations/secrets/scaleway-secret-manager.js +247 -1
  132. package/dist/integrations/spec.js +39 -1
  133. package/dist/jobs/define-job.js +16 -1
  134. package/dist/jobs/gcp-cloud-tasks.js +53 -1
  135. package/dist/jobs/gcp-pubsub.js +39 -1
  136. package/dist/jobs/handlers/gmail-sync-handler.js +9 -1
  137. package/dist/jobs/handlers/index.js +12 -1
  138. package/dist/jobs/handlers/ping-handler.js +15 -1
  139. package/dist/jobs/handlers/storage-document-handler.js +14 -1
  140. package/dist/jobs/index.js +4 -1
  141. package/dist/jobs/memory-queue.js +71 -1
  142. package/dist/jobs/queue.js +33 -1
  143. package/dist/jobs/scaleway-sqs-queue.js +153 -1
  144. package/dist/jsonschema.d.ts +3 -3
  145. package/dist/jsonschema.js +32 -1
  146. package/dist/knowledge/contracts.d.ts +66 -66
  147. package/dist/knowledge/contracts.js +317 -1
  148. package/dist/knowledge/docs/knowledge.docblock.js +22 -138
  149. package/dist/knowledge/index.js +10 -1
  150. package/dist/knowledge/ingestion/document-processor.js +54 -1
  151. package/dist/knowledge/ingestion/embedding-service.js +25 -1
  152. package/dist/knowledge/ingestion/gmail-adapter.js +50 -5
  153. package/dist/knowledge/ingestion/index.js +7 -1
  154. package/dist/knowledge/ingestion/storage-adapter.js +26 -1
  155. package/dist/knowledge/ingestion/vector-indexer.js +32 -1
  156. package/dist/knowledge/query/index.js +3 -1
  157. package/dist/knowledge/query/service.js +64 -2
  158. package/dist/knowledge/runtime.js +49 -1
  159. package/dist/knowledge/spaces/email-threads.js +38 -1
  160. package/dist/knowledge/spaces/financial-docs.js +38 -1
  161. package/dist/knowledge/spaces/financial-overview.js +42 -1
  162. package/dist/knowledge/spaces/index.js +8 -1
  163. package/dist/knowledge/spaces/product-canon.js +38 -1
  164. package/dist/knowledge/spaces/support-faq.js +41 -1
  165. package/dist/knowledge/spaces/uploaded-docs.js +38 -1
  166. package/dist/knowledge/spec.js +39 -1
  167. package/dist/llm/exporters.js +541 -8
  168. package/dist/llm/index.js +4 -1
  169. package/dist/llm/prompts.js +246 -56
  170. package/dist/markdown.js +116 -3
  171. package/dist/migrations.js +33 -1
  172. package/dist/onboarding-base.d.ts +29 -29
  173. package/dist/onboarding-base.js +196 -1
  174. package/dist/openapi.js +75 -1
  175. package/dist/openbanking/docs/openbanking.docblock.js +22 -109
  176. package/dist/ownership.js +40 -1
  177. package/dist/policy/docs/policy.docblock.js +22 -1
  178. package/dist/policy/engine.js +223 -1
  179. package/dist/policy/opa-adapter.js +71 -1
  180. package/dist/policy/spec.js +33 -1
  181. package/dist/presentations/docs/presentations-conventions.docblock.js +21 -7
  182. package/dist/presentations.backcompat.js +47 -1
  183. package/dist/presentations.d.ts +3 -3
  184. package/dist/presentations.js +66 -1
  185. package/dist/presentations.v2.js +278 -6
  186. package/dist/prompt.js +10 -1
  187. package/dist/promptRegistry.js +34 -1
  188. package/dist/regenerator/docs/regenerator.docblock.js +22 -184
  189. package/dist/regenerator/executor.js +86 -1
  190. package/dist/regenerator/index.js +6 -1
  191. package/dist/regenerator/service.js +92 -1
  192. package/dist/regenerator/sinks.js +32 -1
  193. package/dist/regenerator/utils.js +51 -1
  194. package/dist/registry.js +208 -1
  195. package/dist/resources.js +47 -1
  196. package/dist/schema/dist/EnumType.js +2 -1
  197. package/dist/schema/dist/FieldType.js +49 -1
  198. package/dist/schema/dist/ScalarTypeEnum.js +236 -1
  199. package/dist/schema/dist/SchemaModel.js +39 -1
  200. package/dist/schema/dist/entity/defineEntity.js +1 -1
  201. package/dist/schema/dist/entity/index.js +2 -1
  202. package/dist/schema/dist/entity/types.js +1 -1
  203. package/dist/schema/dist/index.js +6 -1
  204. package/dist/schema-to-markdown.js +214 -10
  205. package/dist/server/graphql-pothos.js +128 -1
  206. package/dist/server/index.js +10 -1
  207. package/dist/server/mcp/createMcpServer.js +28 -1
  208. package/dist/server/mcp/registerPresentations.js +151 -1
  209. package/dist/server/mcp/registerPrompts.js +36 -2
  210. package/dist/server/mcp/registerResources.js +35 -1
  211. package/dist/server/mcp/registerTools.js +22 -1
  212. package/dist/server/provider-mcp.js +3 -1
  213. package/dist/server/rest-elysia.js +20 -1
  214. package/dist/server/rest-express.js +39 -1
  215. package/dist/server/rest-generic.js +125 -1
  216. package/dist/server/rest-next-app.js +38 -1
  217. package/dist/server/rest-next-mcp.js +45 -1
  218. package/dist/server/rest-next-pages.js +25 -1
  219. package/dist/spec.js +35 -1
  220. package/dist/telemetry/anomaly.js +48 -1
  221. package/dist/telemetry/docs/telemetry.docblock.js +22 -139
  222. package/dist/telemetry/index.js +5 -1
  223. package/dist/telemetry/spec.js +69 -1
  224. package/dist/telemetry/tracker.js +76 -1
  225. package/dist/tests/index.js +4 -1
  226. package/dist/tests/runner.js +150 -1
  227. package/dist/tests/spec.js +33 -1
  228. package/dist/themes.js +39 -1
  229. package/dist/workflow/adapters/db-adapter.js +83 -1
  230. package/dist/workflow/adapters/file-adapter.js +11 -1
  231. package/dist/workflow/adapters/index.js +5 -1
  232. package/dist/workflow/adapters/memory-store.js +58 -1
  233. package/dist/workflow/expression.js +98 -1
  234. package/dist/workflow/index.js +9 -1
  235. package/dist/workflow/runner.js +337 -1
  236. package/dist/workflow/sla-monitor.js +47 -1
  237. package/dist/workflow/spec.js +32 -1
  238. package/dist/workflow/validation.js +175 -1
  239. package/package.json +11 -4
@@ -1 +1,388 @@
1
- import{l as e}from"../schema/dist/ScalarTypeEnum.js";import{t}from"../schema/dist/SchemaModel.js";import"../schema/dist/index.js";import{defineCommand as n,defineQuery as r}from"../spec.js";const i=new t({name:`IntegrationConnectionRecord`,fields:{id:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},integrationKey:{type:e.NonEmptyString(),isOptional:!1},integrationVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},ownershipMode:{type:e.String_unsecure(),isOptional:!1},externalAccountId:{type:e.String_unsecure(),isOptional:!0},secretProvider:{type:e.String_unsecure(),isOptional:!1},secretRef:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},environment:{type:e.String_unsecure(),isOptional:!0},healthStatus:{type:e.String_unsecure(),isOptional:!0},healthCheckedAt:{type:e.DateTime(),isOptional:!0},healthLatencyMs:{type:e.Float_unsecure(),isOptional:!0},healthErrorCode:{type:e.String_unsecure(),isOptional:!0},healthErrorMessage:{type:e.String_unsecure(),isOptional:!0},usageRequestCount:{type:e.Int_unsecure(),isOptional:!0},usageSuccessCount:{type:e.Int_unsecure(),isOptional:!0},usageErrorCount:{type:e.Int_unsecure(),isOptional:!0},usageLastUsedAt:{type:e.DateTime(),isOptional:!0},usageLastErrorAt:{type:e.DateTime(),isOptional:!0},usageLastErrorCode:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!0},updatedAt:{type:e.DateTime(),isOptional:!0}}}),a=new t({name:`CreateIntegrationConnectionInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},integrationKey:{type:e.NonEmptyString(),isOptional:!1},integrationVersion:{type:e.Int_unsecure(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!1},ownershipMode:{type:e.String_unsecure(),isOptional:!1},externalAccountId:{type:e.String_unsecure(),isOptional:!0},secretProvider:{type:e.String_unsecure(),isOptional:!1},secretRef:{type:e.String_unsecure(),isOptional:!1},environment:{type:e.String_unsecure(),isOptional:!0},config:{type:e.JSONObject(),isOptional:!1}}}),o=new t({name:`UpdateIntegrationConnectionInput`,fields:{connectionId:{type:e.ID(),isOptional:!1},label:{type:e.String_unsecure(),isOptional:!0},status:{type:e.String_unsecure(),isOptional:!0},ownershipMode:{type:e.String_unsecure(),isOptional:!0},externalAccountId:{type:e.String_unsecure(),isOptional:!0},secretProvider:{type:e.String_unsecure(),isOptional:!0},secretRef:{type:e.String_unsecure(),isOptional:!0},config:{type:e.JSONObject(),isOptional:!0}}}),s=new t({name:`DeleteIntegrationConnectionInput`,fields:{connectionId:{type:e.ID(),isOptional:!1}}}),c=new t({name:`ListIntegrationConnectionsInput`,fields:{tenantId:{type:e.ID(),isOptional:!1},category:{type:e.String_unsecure(),isOptional:!0},status:{type:e.String_unsecure(),isOptional:!0}}}),l=new t({name:`ListIntegrationConnectionsOutput`,fields:{connections:{type:i,isOptional:!1,isArray:!0}}}),u=new t({name:`TestIntegrationConnectionInput`,fields:{connectionId:{type:e.ID(),isOptional:!1}}}),d=new t({name:`TestIntegrationConnectionOutput`,fields:{success:{type:e.Boolean(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!0},latencyMs:{type:e.Float_unsecure(),isOptional:!0},error:{type:e.String_unsecure(),isOptional:!0},errorCode:{type:e.String_unsecure(),isOptional:!0}}}),f=new t({name:`DeleteIntegrationConnectionOutput`,fields:{success:{type:e.Boolean(),isOptional:!1}}}),p=n({meta:{name:`integrations.connection.create`,version:1,description:`Create a new integration connection for a tenant.`,goal:`Provision a tenant-scoped connection to an external provider.`,context:`Used by Ops or the App Studio to configure external integrations such as Stripe or Qdrant.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:a,output:i},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),m=n({meta:{name:`integrations.connection.update`,version:1,description:`Update metadata or credentials for an integration connection.`,goal:`Allow secure rotation of credentials and metadata adjustments.`,context:`Supports rotating API keys, toggling status, or updating labels for tenant integrations.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:o,output:i},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),h=n({meta:{name:`integrations.connection.delete`,version:1,description:`Delete an integration connection for a tenant.`,goal:`Safely remove credentials and disable connector usage.`,context:`Ensures connections are de-provisioned when no longer needed or breached.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:s,output:f},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),g=r({meta:{name:`integrations.connection.list`,version:1,description:`List integration connections for a tenant.`,goal:`Provide visibility into configured integrations and their status.`,context:`Used by the App Studio and Ops flows to show bindings and health.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:c,output:l},policy:{auth:`admin`,policies:[{name:`platform.integration.read`,version:1}]}}),_=n({meta:{name:`integrations.connection.test`,version:1,description:`Run a health check against a configured integration connection.`,goal:`Validate credentials and connectivity for external providers.`,context:`Triggered manually or by background monitors to confirm provider availability.`,owners:[`platform.integrations`],tags:[`integration`,`connections`],stability:`experimental`},io:{input:u,output:d},policy:{auth:`admin`,policies:[{name:`platform.integration.manage`,version:1}]}}),v={CreateIntegrationConnection:p,UpdateIntegrationConnection:m,DeleteIntegrationConnection:h,ListIntegrationConnections:g,TestIntegrationConnection:_};function y(e){return e.register(p).register(m).register(h).register(g).register(_)}export{p as CreateIntegrationConnection,h as DeleteIntegrationConnection,g as ListIntegrationConnections,_ as TestIntegrationConnection,m as UpdateIntegrationConnection,v as integrationContracts,y as registerIntegrationContracts};
1
+ import { ScalarTypeEnum } from "../schema/dist/ScalarTypeEnum.js";
2
+ import { SchemaModel } from "../schema/dist/SchemaModel.js";
3
+ import "../schema/dist/index.js";
4
+ import { defineCommand, defineQuery } from "../spec.js";
5
+
6
+ //#region src/integrations/contracts.ts
7
+ const IntegrationConnectionRecord = new SchemaModel({
8
+ name: "IntegrationConnectionRecord",
9
+ fields: {
10
+ id: {
11
+ type: ScalarTypeEnum.ID(),
12
+ isOptional: false
13
+ },
14
+ tenantId: {
15
+ type: ScalarTypeEnum.ID(),
16
+ isOptional: false
17
+ },
18
+ integrationKey: {
19
+ type: ScalarTypeEnum.NonEmptyString(),
20
+ isOptional: false
21
+ },
22
+ integrationVersion: {
23
+ type: ScalarTypeEnum.Int_unsecure(),
24
+ isOptional: false
25
+ },
26
+ label: {
27
+ type: ScalarTypeEnum.String_unsecure(),
28
+ isOptional: false
29
+ },
30
+ ownershipMode: {
31
+ type: ScalarTypeEnum.String_unsecure(),
32
+ isOptional: false
33
+ },
34
+ externalAccountId: {
35
+ type: ScalarTypeEnum.String_unsecure(),
36
+ isOptional: true
37
+ },
38
+ secretProvider: {
39
+ type: ScalarTypeEnum.String_unsecure(),
40
+ isOptional: false
41
+ },
42
+ secretRef: {
43
+ type: ScalarTypeEnum.String_unsecure(),
44
+ isOptional: false
45
+ },
46
+ status: {
47
+ type: ScalarTypeEnum.String_unsecure(),
48
+ isOptional: false
49
+ },
50
+ environment: {
51
+ type: ScalarTypeEnum.String_unsecure(),
52
+ isOptional: true
53
+ },
54
+ healthStatus: {
55
+ type: ScalarTypeEnum.String_unsecure(),
56
+ isOptional: true
57
+ },
58
+ healthCheckedAt: {
59
+ type: ScalarTypeEnum.DateTime(),
60
+ isOptional: true
61
+ },
62
+ healthLatencyMs: {
63
+ type: ScalarTypeEnum.Float_unsecure(),
64
+ isOptional: true
65
+ },
66
+ healthErrorCode: {
67
+ type: ScalarTypeEnum.String_unsecure(),
68
+ isOptional: true
69
+ },
70
+ healthErrorMessage: {
71
+ type: ScalarTypeEnum.String_unsecure(),
72
+ isOptional: true
73
+ },
74
+ usageRequestCount: {
75
+ type: ScalarTypeEnum.Int_unsecure(),
76
+ isOptional: true
77
+ },
78
+ usageSuccessCount: {
79
+ type: ScalarTypeEnum.Int_unsecure(),
80
+ isOptional: true
81
+ },
82
+ usageErrorCount: {
83
+ type: ScalarTypeEnum.Int_unsecure(),
84
+ isOptional: true
85
+ },
86
+ usageLastUsedAt: {
87
+ type: ScalarTypeEnum.DateTime(),
88
+ isOptional: true
89
+ },
90
+ usageLastErrorAt: {
91
+ type: ScalarTypeEnum.DateTime(),
92
+ isOptional: true
93
+ },
94
+ usageLastErrorCode: {
95
+ type: ScalarTypeEnum.String_unsecure(),
96
+ isOptional: true
97
+ },
98
+ createdAt: {
99
+ type: ScalarTypeEnum.DateTime(),
100
+ isOptional: true
101
+ },
102
+ updatedAt: {
103
+ type: ScalarTypeEnum.DateTime(),
104
+ isOptional: true
105
+ }
106
+ }
107
+ });
108
+ const CreateIntegrationConnectionInput = new SchemaModel({
109
+ name: "CreateIntegrationConnectionInput",
110
+ fields: {
111
+ tenantId: {
112
+ type: ScalarTypeEnum.ID(),
113
+ isOptional: false
114
+ },
115
+ integrationKey: {
116
+ type: ScalarTypeEnum.NonEmptyString(),
117
+ isOptional: false
118
+ },
119
+ integrationVersion: {
120
+ type: ScalarTypeEnum.Int_unsecure(),
121
+ isOptional: false
122
+ },
123
+ label: {
124
+ type: ScalarTypeEnum.String_unsecure(),
125
+ isOptional: false
126
+ },
127
+ ownershipMode: {
128
+ type: ScalarTypeEnum.String_unsecure(),
129
+ isOptional: false
130
+ },
131
+ externalAccountId: {
132
+ type: ScalarTypeEnum.String_unsecure(),
133
+ isOptional: true
134
+ },
135
+ secretProvider: {
136
+ type: ScalarTypeEnum.String_unsecure(),
137
+ isOptional: false
138
+ },
139
+ secretRef: {
140
+ type: ScalarTypeEnum.String_unsecure(),
141
+ isOptional: false
142
+ },
143
+ environment: {
144
+ type: ScalarTypeEnum.String_unsecure(),
145
+ isOptional: true
146
+ },
147
+ config: {
148
+ type: ScalarTypeEnum.JSONObject(),
149
+ isOptional: false
150
+ }
151
+ }
152
+ });
153
+ const UpdateIntegrationConnectionInput = new SchemaModel({
154
+ name: "UpdateIntegrationConnectionInput",
155
+ fields: {
156
+ connectionId: {
157
+ type: ScalarTypeEnum.ID(),
158
+ isOptional: false
159
+ },
160
+ label: {
161
+ type: ScalarTypeEnum.String_unsecure(),
162
+ isOptional: true
163
+ },
164
+ status: {
165
+ type: ScalarTypeEnum.String_unsecure(),
166
+ isOptional: true
167
+ },
168
+ ownershipMode: {
169
+ type: ScalarTypeEnum.String_unsecure(),
170
+ isOptional: true
171
+ },
172
+ externalAccountId: {
173
+ type: ScalarTypeEnum.String_unsecure(),
174
+ isOptional: true
175
+ },
176
+ secretProvider: {
177
+ type: ScalarTypeEnum.String_unsecure(),
178
+ isOptional: true
179
+ },
180
+ secretRef: {
181
+ type: ScalarTypeEnum.String_unsecure(),
182
+ isOptional: true
183
+ },
184
+ config: {
185
+ type: ScalarTypeEnum.JSONObject(),
186
+ isOptional: true
187
+ }
188
+ }
189
+ });
190
+ const DeleteIntegrationConnectionInput = new SchemaModel({
191
+ name: "DeleteIntegrationConnectionInput",
192
+ fields: { connectionId: {
193
+ type: ScalarTypeEnum.ID(),
194
+ isOptional: false
195
+ } }
196
+ });
197
+ const ListIntegrationConnectionsInput = new SchemaModel({
198
+ name: "ListIntegrationConnectionsInput",
199
+ fields: {
200
+ tenantId: {
201
+ type: ScalarTypeEnum.ID(),
202
+ isOptional: false
203
+ },
204
+ category: {
205
+ type: ScalarTypeEnum.String_unsecure(),
206
+ isOptional: true
207
+ },
208
+ status: {
209
+ type: ScalarTypeEnum.String_unsecure(),
210
+ isOptional: true
211
+ }
212
+ }
213
+ });
214
+ const ListIntegrationConnectionsOutput = new SchemaModel({
215
+ name: "ListIntegrationConnectionsOutput",
216
+ fields: { connections: {
217
+ type: IntegrationConnectionRecord,
218
+ isOptional: false,
219
+ isArray: true
220
+ } }
221
+ });
222
+ const TestIntegrationConnectionInput = new SchemaModel({
223
+ name: "TestIntegrationConnectionInput",
224
+ fields: { connectionId: {
225
+ type: ScalarTypeEnum.ID(),
226
+ isOptional: false
227
+ } }
228
+ });
229
+ const TestIntegrationConnectionOutput = new SchemaModel({
230
+ name: "TestIntegrationConnectionOutput",
231
+ fields: {
232
+ success: {
233
+ type: ScalarTypeEnum.Boolean(),
234
+ isOptional: false
235
+ },
236
+ status: {
237
+ type: ScalarTypeEnum.String_unsecure(),
238
+ isOptional: true
239
+ },
240
+ latencyMs: {
241
+ type: ScalarTypeEnum.Float_unsecure(),
242
+ isOptional: true
243
+ },
244
+ error: {
245
+ type: ScalarTypeEnum.String_unsecure(),
246
+ isOptional: true
247
+ },
248
+ errorCode: {
249
+ type: ScalarTypeEnum.String_unsecure(),
250
+ isOptional: true
251
+ }
252
+ }
253
+ });
254
+ const DeleteIntegrationConnectionOutput = new SchemaModel({
255
+ name: "DeleteIntegrationConnectionOutput",
256
+ fields: { success: {
257
+ type: ScalarTypeEnum.Boolean(),
258
+ isOptional: false
259
+ } }
260
+ });
261
+ const CreateIntegrationConnection = defineCommand({
262
+ meta: {
263
+ name: "integrations.connection.create",
264
+ version: 1,
265
+ description: "Create a new integration connection for a tenant.",
266
+ goal: "Provision a tenant-scoped connection to an external provider.",
267
+ context: "Used by Ops or the App Studio to configure external integrations such as Stripe or Qdrant.",
268
+ owners: ["platform.integrations"],
269
+ tags: ["integration", "connections"],
270
+ stability: "experimental"
271
+ },
272
+ io: {
273
+ input: CreateIntegrationConnectionInput,
274
+ output: IntegrationConnectionRecord
275
+ },
276
+ policy: {
277
+ auth: "admin",
278
+ policies: [{
279
+ name: "platform.integration.manage",
280
+ version: 1
281
+ }]
282
+ }
283
+ });
284
+ const UpdateIntegrationConnection = defineCommand({
285
+ meta: {
286
+ name: "integrations.connection.update",
287
+ version: 1,
288
+ description: "Update metadata or credentials for an integration connection.",
289
+ goal: "Allow secure rotation of credentials and metadata adjustments.",
290
+ context: "Supports rotating API keys, toggling status, or updating labels for tenant integrations.",
291
+ owners: ["platform.integrations"],
292
+ tags: ["integration", "connections"],
293
+ stability: "experimental"
294
+ },
295
+ io: {
296
+ input: UpdateIntegrationConnectionInput,
297
+ output: IntegrationConnectionRecord
298
+ },
299
+ policy: {
300
+ auth: "admin",
301
+ policies: [{
302
+ name: "platform.integration.manage",
303
+ version: 1
304
+ }]
305
+ }
306
+ });
307
+ const DeleteIntegrationConnection = defineCommand({
308
+ meta: {
309
+ name: "integrations.connection.delete",
310
+ version: 1,
311
+ description: "Delete an integration connection for a tenant.",
312
+ goal: "Safely remove credentials and disable connector usage.",
313
+ context: "Ensures connections are de-provisioned when no longer needed or breached.",
314
+ owners: ["platform.integrations"],
315
+ tags: ["integration", "connections"],
316
+ stability: "experimental"
317
+ },
318
+ io: {
319
+ input: DeleteIntegrationConnectionInput,
320
+ output: DeleteIntegrationConnectionOutput
321
+ },
322
+ policy: {
323
+ auth: "admin",
324
+ policies: [{
325
+ name: "platform.integration.manage",
326
+ version: 1
327
+ }]
328
+ }
329
+ });
330
+ const ListIntegrationConnections = defineQuery({
331
+ meta: {
332
+ name: "integrations.connection.list",
333
+ version: 1,
334
+ description: "List integration connections for a tenant.",
335
+ goal: "Provide visibility into configured integrations and their status.",
336
+ context: "Used by the App Studio and Ops flows to show bindings and health.",
337
+ owners: ["platform.integrations"],
338
+ tags: ["integration", "connections"],
339
+ stability: "experimental"
340
+ },
341
+ io: {
342
+ input: ListIntegrationConnectionsInput,
343
+ output: ListIntegrationConnectionsOutput
344
+ },
345
+ policy: {
346
+ auth: "admin",
347
+ policies: [{
348
+ name: "platform.integration.read",
349
+ version: 1
350
+ }]
351
+ }
352
+ });
353
+ const TestIntegrationConnection = defineCommand({
354
+ meta: {
355
+ name: "integrations.connection.test",
356
+ version: 1,
357
+ description: "Run a health check against a configured integration connection.",
358
+ goal: "Validate credentials and connectivity for external providers.",
359
+ context: "Triggered manually or by background monitors to confirm provider availability.",
360
+ owners: ["platform.integrations"],
361
+ tags: ["integration", "connections"],
362
+ stability: "experimental"
363
+ },
364
+ io: {
365
+ input: TestIntegrationConnectionInput,
366
+ output: TestIntegrationConnectionOutput
367
+ },
368
+ policy: {
369
+ auth: "admin",
370
+ policies: [{
371
+ name: "platform.integration.manage",
372
+ version: 1
373
+ }]
374
+ }
375
+ });
376
+ const integrationContracts = {
377
+ CreateIntegrationConnection,
378
+ UpdateIntegrationConnection,
379
+ DeleteIntegrationConnection,
380
+ ListIntegrationConnections,
381
+ TestIntegrationConnection
382
+ };
383
+ function registerIntegrationContracts(registry) {
384
+ return registry.register(CreateIntegrationConnection).register(UpdateIntegrationConnection).register(DeleteIntegrationConnection).register(ListIntegrationConnections).register(TestIntegrationConnection);
385
+ }
386
+
387
+ //#endregion
388
+ export { CreateIntegrationConnection, DeleteIntegrationConnection, ListIntegrationConnections, TestIntegrationConnection, UpdateIntegrationConnection, integrationContracts, registerIntegrationContracts };
@@ -1 +1,95 @@
1
- import{registerDocBlocks as e}from"../../docs/registry.js";import"../../registry.js";const t=[{id:`docs.tech.contracts.integrations`,title:`ContractSpec Integrations`,summary:`Provider-agnostic integration contracts: specs, connections, secrets, health checks, and runtime guards.`,kind:`reference`,visibility:`public`,route:`/docs/tech/contracts/integrations`,tags:[`tech`,`contracts`,`integrations`],body:"# ContractSpec Integrations\n\nThis document describes the integration architecture that powers ContractSpec-based apps. It focuses on provider-agnostic contracts, secret management, health checks, and runtime guards.\n\n## Core Concepts\n\n- **IntegrationSpec** – declarative description of a provider that lists supported ownership modes, capability mappings, configuration schema, secret schema, health check policy, and documentation metadata.\n- **IntegrationConnection** – tenant/environment binding to a provider (`meta` + ownership mode + config + `secretRef`). Secrets are never embedded in specs or configs.\n- **AppIntegrationSlot** – blueprint-level requirement that declares which integration categories/capabilities must be satisfied at runtime (e.g. `primaryLLM`, `primaryVectorDb`).\n- **AppIntegrationBinding** – tenant-level slot → connection mapping.\n- **ResolvedIntegration** – runtime view containing slot metadata, connection details, and the resolved IntegrationSpec.\n\n## Registered Providers\n\nThe contracts library ships ten priority providers in `packages/libs/contracts/src/integrations/providers`:\n\n| Category | Provider | Key | Notes |\n| ------------- | ---------------- | --------------------------- | ------------------------------------------------- |\n| payments | Stripe | `payments.stripe` | Card + invoice flows, managed or BYOK credentials |\n| email (out) | Postmark | `email.postmark` | Transactional email delivery |\n| email (in) | Gmail API | `email.gmail` | Thread ingestion (OAuth BYOK or service account) |\n| calendar | Google Calendar | `calendar.google` | Event scheduling via service account |\n| vector-db | Qdrant | `vectordb.qdrant` | Embedding storage & search |\n| storage | Google Cloud | `storage.gcs` | Object storage |\n| ai-llm | Mistral | `ai-llm.mistral` | Primary chat + embedding provider |\n| ai-voice | ElevenLabs | `ai-voice.elevenlabs` | Text-to-speech synthesis |\n| sms | Twilio SMS | `sms.twilio` | Urgent and fallback reminders |\n| open-banking | Powens | `openbanking.powens` | Read-only account, transaction, and balance sync |\n\nEach provider ships with:\n\n- Strongly typed adapter interfaces (`payments.ts`, `llm.ts`, etc.)\n- A concrete SDK-backed implementation under `providers/impls`\n- Unit tests validating adapter behaviour and health checks\n\n### Canonical registry builder\n\nTo list all shipped specs at runtime, use:\n\n- `createDefaultIntegrationSpecRegistry()` from `@lssm/lib.contracts/integrations/providers/registry`\n\n## Secret Management\n\nAll integrations rely on the `SecretProvider` abstraction defined in `integrations/secrets`. Providers ship with the contracts library and are orchestrated by the `SecretProviderManager` composite:\n\n- **EnvSecretProvider** (`env-secret-provider.ts`) – high-priority, read-only overrides backed by environment variables.\n - Supports the `env://VARIABLE_NAME` scheme\n - Supports overrides for other schemes via `?env=ALIAS` or derived uppercase keys\n- **GcpSecretManagerProvider** (`gcp-secret-manager.ts`) – versioned secrets stored in Google Cloud Secret Manager.\n - Example: `gcp://projects/demo/secrets/stripe-key/versions/latest`\n- **AwsSecretsManagerProvider** (`aws-secret-manager.ts`) – AWS Secrets Manager backend.\n - Example: `aws://secretsmanager/eu-west-1/my-secret?version=AWSCURRENT`\n - Region may be in the reference or provided via `AWS_REGION` / `AWS_DEFAULT_REGION`\n- **ScalewaySecretManagerProvider** (`scaleway-secret-manager.ts`) – Scaleway Secret Manager backend.\n - Example (id): `scw://secret-manager/fr-par/1234...-uuid?version=latest`\n - Example (name, create+write): `scw://secret-manager/fr-par/my-secret-name`\n - Requires `SCW_SECRET_KEY` (token) and `SCW_DEFAULT_PROJECT_ID` when creating secrets by name\n\nThe manager attempts providers in priority order (environment first, then cloud providers). Key points:\n\n- `secretRef` is a URI-like reference; raw secrets are never returned.\n- `IntegrationCallGuard` fetches and parses secrets before executing a provider adapter.\n- Local development can rely on `.env` files, while staging/production reference cloud secret stores.\n\n## Health Checks & Telemetry\n\n- Each IntegrationSpec optionally declares `healthCheck.method` and timeouts.\n- `IntegrationCallGuard` enforces connection status, wraps retries with exponential back-off, and emits telemetry events tagged with tenant/app/slot metadata.\n- Validation rules (`app-config/validation.ts`) surface issues at publish time (slot mismatch, unsupported ownership modes, missing capabilities, etc.).\n\n## Studio persistence (ContractSpec Studio)\n\nContractSpec Studio persists tenant `IntegrationConnection` records in Postgres (Prisma model `IntegrationConnection` in `@lssm/lib.database-contractspec-studio`) and exposes a platform-admin management surface (see the Studio platform admin panel).\n"}];e(t);export{t as tech_contracts_integrations_DocBlocks};
1
+ import { registerDocBlocks } from "../../docs/registry.js";
2
+ import "../../registry.js";
3
+
4
+ //#region src/integrations/docs/integrations.docblock.ts
5
+ const tech_contracts_integrations_DocBlocks = [{
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: [
13
+ "tech",
14
+ "contracts",
15
+ "integrations"
16
+ ],
17
+ body: `# ContractSpec Integrations
18
+
19
+ This document describes the integration architecture that powers ContractSpec-based apps. It focuses on provider-agnostic contracts, secret management, health checks, and runtime guards.
20
+
21
+ ## Core Concepts
22
+
23
+ - **IntegrationSpec** – declarative description of a provider that lists supported ownership modes, capability mappings, configuration schema, secret schema, health check policy, and documentation metadata.
24
+ - **IntegrationConnection** – tenant/environment binding to a provider (\`meta\` + ownership mode + config + \`secretRef\`). Secrets are never embedded in specs or configs.
25
+ - **AppIntegrationSlot** – blueprint-level requirement that declares which integration categories/capabilities must be satisfied at runtime (e.g. \`primaryLLM\`, \`primaryVectorDb\`).
26
+ - **AppIntegrationBinding** – tenant-level slot → connection mapping.
27
+ - **ResolvedIntegration** – runtime view containing slot metadata, connection details, and the resolved IntegrationSpec.
28
+
29
+ ## Registered Providers
30
+
31
+ The contracts library ships ten priority providers in \`packages/libs/contracts/src/integrations/providers\`:
32
+
33
+ | Category | Provider | Key | Notes |
34
+ | ------------- | ---------------- | --------------------------- | ------------------------------------------------- |
35
+ | payments | Stripe | \`payments.stripe\` | Card + invoice flows, managed or BYOK credentials |
36
+ | email (out) | Postmark | \`email.postmark\` | Transactional email delivery |
37
+ | email (in) | Gmail API | \`email.gmail\` | Thread ingestion (OAuth BYOK or service account) |
38
+ | calendar | Google Calendar | \`calendar.google\` | Event scheduling via service account |
39
+ | vector-db | Qdrant | \`vectordb.qdrant\` | Embedding storage & search |
40
+ | storage | Google Cloud | \`storage.gcs\` | Object storage |
41
+ | ai-llm | Mistral | \`ai-llm.mistral\` | Primary chat + embedding provider |
42
+ | ai-voice | ElevenLabs | \`ai-voice.elevenlabs\` | Text-to-speech synthesis |
43
+ | sms | Twilio SMS | \`sms.twilio\` | Urgent and fallback reminders |
44
+ | open-banking | Powens | \`openbanking.powens\` | Read-only account, transaction, and balance sync |
45
+
46
+ Each provider ships with:
47
+
48
+ - Strongly typed adapter interfaces (\`payments.ts\`, \`llm.ts\`, etc.)
49
+ - A concrete SDK-backed implementation under \`providers/impls\`
50
+ - Unit tests validating adapter behaviour and health checks
51
+
52
+ ### Canonical registry builder
53
+
54
+ To list all shipped specs at runtime, use:
55
+
56
+ - \`createDefaultIntegrationSpecRegistry()\` from \`@lssm/lib.contracts/integrations/providers/registry\`
57
+
58
+ ## Secret Management
59
+
60
+ All integrations rely on the \`SecretProvider\` abstraction defined in \`integrations/secrets\`. Providers ship with the contracts library and are orchestrated by the \`SecretProviderManager\` composite:
61
+
62
+ - **EnvSecretProvider** (\`env-secret-provider.ts\`) – high-priority, read-only overrides backed by environment variables.
63
+ - Supports the \`env://VARIABLE_NAME\` scheme
64
+ - Supports overrides for other schemes via \`?env=ALIAS\` or derived uppercase keys
65
+ - **GcpSecretManagerProvider** (\`gcp-secret-manager.ts\`) – versioned secrets stored in Google Cloud Secret Manager.
66
+ - Example: \`gcp://projects/demo/secrets/stripe-key/versions/latest\`
67
+ - **AwsSecretsManagerProvider** (\`aws-secret-manager.ts\`) – AWS Secrets Manager backend.
68
+ - Example: \`aws://secretsmanager/eu-west-1/my-secret?version=AWSCURRENT\`
69
+ - Region may be in the reference or provided via \`AWS_REGION\` / \`AWS_DEFAULT_REGION\`
70
+ - **ScalewaySecretManagerProvider** (\`scaleway-secret-manager.ts\`) – Scaleway Secret Manager backend.
71
+ - Example (id): \`scw://secret-manager/fr-par/1234...-uuid?version=latest\`
72
+ - Example (name, create+write): \`scw://secret-manager/fr-par/my-secret-name\`
73
+ - Requires \`SCW_SECRET_KEY\` (token) and \`SCW_DEFAULT_PROJECT_ID\` when creating secrets by name
74
+
75
+ The manager attempts providers in priority order (environment first, then cloud providers). Key points:
76
+
77
+ - \`secretRef\` is a URI-like reference; raw secrets are never returned.
78
+ - \`IntegrationCallGuard\` fetches and parses secrets before executing a provider adapter.
79
+ - Local development can rely on \`.env\` files, while staging/production reference cloud secret stores.
80
+
81
+ ## Health Checks & Telemetry
82
+
83
+ - Each IntegrationSpec optionally declares \`healthCheck.method\` and timeouts.
84
+ - \`IntegrationCallGuard\` enforces connection status, wraps retries with exponential back-off, and emits telemetry events tagged with tenant/app/slot metadata.
85
+ - Validation rules (\`app-config/validation.ts\`) surface issues at publish time (slot mismatch, unsupported ownership modes, missing capabilities, etc.).
86
+
87
+ ## Studio persistence (ContractSpec Studio)
88
+
89
+ ContractSpec Studio persists tenant \`IntegrationConnection\` records in Postgres (Prisma model \`IntegrationConnection\` in \`@lssm/lib.database-contractspec-studio\`) and exposes a platform-admin management surface (see the Studio platform admin panel).
90
+ `
91
+ }];
92
+ registerDocBlocks(tech_contracts_integrations_DocBlocks);
93
+
94
+ //#endregion
95
+ export { tech_contracts_integrations_DocBlocks };
@@ -1 +1,69 @@
1
- var e=class{telemetry;nowFn;constructor(e={}){this.telemetry=e.telemetry,this.nowFn=e.now??(()=>new Date)}async check(e,n){let r=this.nowFn();try{await n(e);let t=this.nowFn(),i={status:`connected`,checkedAt:t,latencyMs:t.getTime()-r.getTime()};return this.emitTelemetry(e,i,`success`),i}catch(n){let i=this.nowFn(),a=n instanceof Error?n.message:`Unknown error`,o=t(n),s={status:`error`,checkedAt:i,latencyMs:i.getTime()-r.getTime(),errorMessage:a,errorCode:o};return this.emitTelemetry(e,s,`error`,o,a),s}}emitTelemetry(e,t,n,r,i){this.telemetry&&this.telemetry.record({tenantId:e.tenantId,appId:e.appId,environment:e.environment,slotId:e.slotId,integrationKey:e.spec.meta.key,integrationVersion:e.spec.meta.version,connectionId:e.connection.meta.id,status:n,durationMs:t.latencyMs,errorCode:r,errorMessage:i,occurredAt:t.checkedAt??this.nowFn(),metadata:{...e.trace?{blueprint:`${e.trace.blueprintName}.v${e.trace.blueprintVersion}`,configVersion:e.trace.configVersion}:{},status:t.status}})}};function t(e){if(!e||typeof e!=`object`)return;let t=e;if(t.code!=null)return String(t.code)}export{e as IntegrationHealthService};
1
+ //#region src/integrations/health.ts
2
+ var IntegrationHealthService = class {
3
+ telemetry;
4
+ nowFn;
5
+ constructor(options = {}) {
6
+ this.telemetry = options.telemetry;
7
+ this.nowFn = options.now ?? (() => /* @__PURE__ */ new Date());
8
+ }
9
+ async check(context, executor) {
10
+ const start = this.nowFn();
11
+ try {
12
+ await executor(context);
13
+ const end = this.nowFn();
14
+ const result = {
15
+ status: "connected",
16
+ checkedAt: end,
17
+ latencyMs: end.getTime() - start.getTime()
18
+ };
19
+ this.emitTelemetry(context, result, "success");
20
+ return result;
21
+ } catch (error) {
22
+ const end = this.nowFn();
23
+ const message = error instanceof Error ? error.message : "Unknown error";
24
+ const code = extractErrorCode(error);
25
+ const result = {
26
+ status: "error",
27
+ checkedAt: end,
28
+ latencyMs: end.getTime() - start.getTime(),
29
+ errorMessage: message,
30
+ errorCode: code
31
+ };
32
+ this.emitTelemetry(context, result, "error", code, message);
33
+ return result;
34
+ }
35
+ }
36
+ emitTelemetry(context, result, status, errorCode, errorMessage) {
37
+ if (!this.telemetry) return;
38
+ this.telemetry.record({
39
+ tenantId: context.tenantId,
40
+ appId: context.appId,
41
+ environment: context.environment,
42
+ slotId: context.slotId,
43
+ integrationKey: context.spec.meta.key,
44
+ integrationVersion: context.spec.meta.version,
45
+ connectionId: context.connection.meta.id,
46
+ status,
47
+ durationMs: result.latencyMs,
48
+ errorCode,
49
+ errorMessage,
50
+ occurredAt: result.checkedAt ?? this.nowFn(),
51
+ metadata: {
52
+ ...context.trace ? {
53
+ blueprint: `${context.trace.blueprintName}.v${context.trace.blueprintVersion}`,
54
+ configVersion: context.trace.configVersion
55
+ } : {},
56
+ status: result.status
57
+ }
58
+ });
59
+ }
60
+ };
61
+ function extractErrorCode(error) {
62
+ if (!error || typeof error !== "object") return void 0;
63
+ const candidate = error;
64
+ if (candidate.code == null) return void 0;
65
+ return String(candidate.code);
66
+ }
67
+
68
+ //#endregion
69
+ export { IntegrationHealthService };
@@ -1 +1,23 @@
1
- import{IntegrationSpecRegistry as e,makeIntegrationSpecKey as t}from"./spec.js";import{registerStripeIntegration as n,stripeIntegrationSpec as r}from"./providers/stripe.js";import{postmarkIntegrationSpec as i,registerPostmarkIntegration as a}from"./providers/postmark.js";import{qdrantIntegrationSpec as o,registerQdrantIntegration as s}from"./providers/qdrant.js";import{mistralIntegrationSpec as c,registerMistralIntegration as l}from"./providers/mistral.js";import{elevenLabsIntegrationSpec as u,registerElevenLabsIntegration as d}from"./providers/elevenlabs.js";import{gmailIntegrationSpec as f,registerGmailIntegration as p}from"./providers/gmail.js";import{googleCalendarIntegrationSpec as m,registerGoogleCalendarIntegration as h}from"./providers/google-calendar.js";import{registerTwilioSmsIntegration as g,twilioSmsIntegrationSpec as _}from"./providers/twilio-sms.js";import{gcsStorageIntegrationSpec as v,registerGcsStorageIntegration as y}from"./providers/gcs-storage.js";import{powensIntegrationSpec as b,registerPowensIntegration as x}from"./providers/powens.js";import{createDefaultIntegrationSpecRegistry as S}from"./providers/registry.js";import"./providers/index.js";import{AccountBalanceRecord as C,BankAccountRecord as w,BankTransactionRecord as T}from"./openbanking/models.js";import{OPENBANKING_PII_FIELDS as E,OPENBANKING_TELEMETRY_EVENTS as D,redactOpenBankingTelemetryPayload as O}from"./openbanking/telemetry.js";import{OpenBankingGetAccount as k,OpenBankingListAccounts as A,OpenBankingSyncAccounts as j}from"./openbanking/contracts/accounts.js";import{OpenBankingListTransactions as M,OpenBankingSyncTransactions as N}from"./openbanking/contracts/transactions.js";import{OpenBankingGetBalances as P,OpenBankingRefreshBalances as F}from"./openbanking/contracts/balances.js";import{OpenBankingFeature as I}from"./openbanking/openbanking.feature.js";import{registerOpenBankingContracts as L}from"./openbanking/contracts/index.js";import{assertPrimaryOpenBankingReady as R,ensurePrimaryOpenBankingIntegration as z}from"./openbanking/guards.js";export{C as AccountBalanceRecord,w as BankAccountRecord,T as BankTransactionRecord,e as IntegrationSpecRegistry,E as OPENBANKING_PII_FIELDS,D as OPENBANKING_TELEMETRY_EVENTS,I as OpenBankingFeature,k as OpenBankingGetAccount,P as OpenBankingGetBalances,A as OpenBankingListAccounts,M as OpenBankingListTransactions,F as OpenBankingRefreshBalances,j as OpenBankingSyncAccounts,N as OpenBankingSyncTransactions,R as assertPrimaryOpenBankingReady,S as createDefaultIntegrationSpecRegistry,u as elevenLabsIntegrationSpec,z as ensurePrimaryOpenBankingIntegration,v as gcsStorageIntegrationSpec,f as gmailIntegrationSpec,m as googleCalendarIntegrationSpec,t as makeIntegrationSpecKey,c as mistralIntegrationSpec,i as postmarkIntegrationSpec,b as powensIntegrationSpec,o as qdrantIntegrationSpec,O as redactOpenBankingTelemetryPayload,d as registerElevenLabsIntegration,y as registerGcsStorageIntegration,p as registerGmailIntegration,h as registerGoogleCalendarIntegration,l as registerMistralIntegration,L as registerOpenBankingContracts,a as registerPostmarkIntegration,x as registerPowensIntegration,s as registerQdrantIntegration,n as registerStripeIntegration,g as registerTwilioSmsIntegration,r as stripeIntegrationSpec,_ as twilioSmsIntegrationSpec};
1
+ import { IntegrationSpecRegistry, makeIntegrationSpecKey } from "./spec.js";
2
+ import { registerStripeIntegration, stripeIntegrationSpec } from "./providers/stripe.js";
3
+ import { postmarkIntegrationSpec, registerPostmarkIntegration } from "./providers/postmark.js";
4
+ import { qdrantIntegrationSpec, registerQdrantIntegration } from "./providers/qdrant.js";
5
+ import { mistralIntegrationSpec, registerMistralIntegration } from "./providers/mistral.js";
6
+ import { elevenLabsIntegrationSpec, registerElevenLabsIntegration } from "./providers/elevenlabs.js";
7
+ import { gmailIntegrationSpec, registerGmailIntegration } from "./providers/gmail.js";
8
+ import { googleCalendarIntegrationSpec, registerGoogleCalendarIntegration } from "./providers/google-calendar.js";
9
+ import { registerTwilioSmsIntegration, twilioSmsIntegrationSpec } from "./providers/twilio-sms.js";
10
+ import { gcsStorageIntegrationSpec, registerGcsStorageIntegration } from "./providers/gcs-storage.js";
11
+ import { powensIntegrationSpec, registerPowensIntegration } from "./providers/powens.js";
12
+ import { createDefaultIntegrationSpecRegistry } from "./providers/registry.js";
13
+ import "./providers/index.js";
14
+ import { AccountBalanceRecord, BankAccountRecord, BankTransactionRecord } from "./openbanking/models.js";
15
+ import { OPENBANKING_PII_FIELDS, OPENBANKING_TELEMETRY_EVENTS, redactOpenBankingTelemetryPayload } from "./openbanking/telemetry.js";
16
+ import { OpenBankingGetAccount, OpenBankingListAccounts, OpenBankingSyncAccounts } from "./openbanking/contracts/accounts.js";
17
+ import { OpenBankingListTransactions, OpenBankingSyncTransactions } from "./openbanking/contracts/transactions.js";
18
+ import { OpenBankingGetBalances, OpenBankingRefreshBalances } from "./openbanking/contracts/balances.js";
19
+ import { OpenBankingFeature } from "./openbanking/openbanking.feature.js";
20
+ import { registerOpenBankingContracts } from "./openbanking/contracts/index.js";
21
+ import { assertPrimaryOpenBankingReady, ensurePrimaryOpenBankingIntegration } from "./openbanking/guards.js";
22
+
23
+ export { AccountBalanceRecord, BankAccountRecord, BankTransactionRecord, IntegrationSpecRegistry, OPENBANKING_PII_FIELDS, OPENBANKING_TELEMETRY_EVENTS, OpenBankingFeature, OpenBankingGetAccount, OpenBankingGetBalances, OpenBankingListAccounts, OpenBankingListTransactions, OpenBankingRefreshBalances, OpenBankingSyncAccounts, OpenBankingSyncTransactions, assertPrimaryOpenBankingReady, createDefaultIntegrationSpecRegistry, elevenLabsIntegrationSpec, ensurePrimaryOpenBankingIntegration, gcsStorageIntegrationSpec, gmailIntegrationSpec, googleCalendarIntegrationSpec, makeIntegrationSpecKey, mistralIntegrationSpec, postmarkIntegrationSpec, powensIntegrationSpec, qdrantIntegrationSpec, redactOpenBankingTelemetryPayload, registerElevenLabsIntegration, registerGcsStorageIntegration, registerGmailIntegration, registerGoogleCalendarIntegration, registerMistralIntegration, registerOpenBankingContracts, registerPostmarkIntegration, registerPowensIntegration, registerQdrantIntegration, registerStripeIntegration, registerTwilioSmsIntegration, stripeIntegrationSpec, twilioSmsIntegrationSpec };