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

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,242 @@
1
- import{l as e}from"../../schema/dist/ScalarTypeEnum.js";import{t}from"../../schema/dist/SchemaModel.js";import"../../schema/dist/index.js";const n=new t({name:`BankAccountRecord`,description:`Canonical representation of a bank account synced from an open banking provider.`,fields:{id:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},userId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!1},externalId:{type:e.NonEmptyString(),isOptional:!1},institutionId:{type:e.NonEmptyString(),isOptional:!1},institutionName:{type:e.NonEmptyString(),isOptional:!1},institutionLogoUrl:{type:e.URL(),isOptional:!0},iban:{type:e.String_unsecure(),isOptional:!0},bic:{type:e.String_unsecure(),isOptional:!0},accountType:{type:e.NonEmptyString(),isOptional:!1},currency:{type:e.Currency(),isOptional:!1},displayName:{type:e.NonEmptyString(),isOptional:!1},accountNumberMasked:{type:e.String_unsecure(),isOptional:!0},productCode:{type:e.String_unsecure(),isOptional:!0},balance:{type:e.Float_unsecure(),isOptional:!0},availableBalance:{type:e.Float_unsecure(),isOptional:!0},lastSyncedAt:{type:e.DateTime(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1},metadata:{type:e.JSONObject(),isOptional:!0}}}),r=new t({name:`BankTransactionRecord`,description:`Canonical transaction entry mapped from Powens into the open banking ledger.`,fields:{id:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!1},externalId:{type:e.NonEmptyString(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.Currency(),isOptional:!1},date:{type:e.DateTime(),isOptional:!1},bookingDate:{type:e.DateTime(),isOptional:!0},valueDate:{type:e.DateTime(),isOptional:!0},description:{type:e.String_unsecure(),isOptional:!0},counterpartyName:{type:e.String_unsecure(),isOptional:!0},counterpartyAccount:{type:e.String_unsecure(),isOptional:!0},merchantCategoryCode:{type:e.String_unsecure(),isOptional:!0},rawCategory:{type:e.String_unsecure(),isOptional:!0},standardizedCategory:{type:e.String_unsecure(),isOptional:!0},transactionType:{type:e.NonEmptyString(),isOptional:!1},status:{type:e.NonEmptyString(),isOptional:!1},runningBalance:{type:e.Float_unsecure(),isOptional:!0},metadata:{type:e.JSONObject(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1}}}),i=new t({name:`AccountBalanceRecord`,description:`Canonical balance snapshot computed from Powens balance payloads.`,fields:{id:{type:e.ID(),isOptional:!1},accountId:{type:e.ID(),isOptional:!1},tenantId:{type:e.ID(),isOptional:!1},connectionId:{type:e.ID(),isOptional:!1},balanceType:{type:e.NonEmptyString(),isOptional:!1},currentBalance:{type:e.Float_unsecure(),isOptional:!1},availableBalance:{type:e.Float_unsecure(),isOptional:!0},currency:{type:e.Currency(),isOptional:!1},lastUpdatedAt:{type:e.DateTime(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},metadata:{type:e.JSONObject(),isOptional:!0}}});export{i as AccountBalanceRecord,n as BankAccountRecord,r as BankTransactionRecord};
1
+ import { ScalarTypeEnum } from "../../schema/dist/ScalarTypeEnum.js";
2
+ import { SchemaModel } from "../../schema/dist/SchemaModel.js";
3
+ import "../../schema/dist/index.js";
4
+
5
+ //#region src/integrations/openbanking/models.ts
6
+ const BankAccountRecord = new SchemaModel({
7
+ name: "BankAccountRecord",
8
+ description: "Canonical representation of a bank account synced from an open banking provider.",
9
+ fields: {
10
+ id: {
11
+ type: ScalarTypeEnum.ID(),
12
+ isOptional: false
13
+ },
14
+ tenantId: {
15
+ type: ScalarTypeEnum.ID(),
16
+ isOptional: false
17
+ },
18
+ userId: {
19
+ type: ScalarTypeEnum.ID(),
20
+ isOptional: false
21
+ },
22
+ connectionId: {
23
+ type: ScalarTypeEnum.ID(),
24
+ isOptional: false
25
+ },
26
+ externalId: {
27
+ type: ScalarTypeEnum.NonEmptyString(),
28
+ isOptional: false
29
+ },
30
+ institutionId: {
31
+ type: ScalarTypeEnum.NonEmptyString(),
32
+ isOptional: false
33
+ },
34
+ institutionName: {
35
+ type: ScalarTypeEnum.NonEmptyString(),
36
+ isOptional: false
37
+ },
38
+ institutionLogoUrl: {
39
+ type: ScalarTypeEnum.URL(),
40
+ isOptional: true
41
+ },
42
+ iban: {
43
+ type: ScalarTypeEnum.String_unsecure(),
44
+ isOptional: true
45
+ },
46
+ bic: {
47
+ type: ScalarTypeEnum.String_unsecure(),
48
+ isOptional: true
49
+ },
50
+ accountType: {
51
+ type: ScalarTypeEnum.NonEmptyString(),
52
+ isOptional: false
53
+ },
54
+ currency: {
55
+ type: ScalarTypeEnum.Currency(),
56
+ isOptional: false
57
+ },
58
+ displayName: {
59
+ type: ScalarTypeEnum.NonEmptyString(),
60
+ isOptional: false
61
+ },
62
+ accountNumberMasked: {
63
+ type: ScalarTypeEnum.String_unsecure(),
64
+ isOptional: true
65
+ },
66
+ productCode: {
67
+ type: ScalarTypeEnum.String_unsecure(),
68
+ isOptional: true
69
+ },
70
+ balance: {
71
+ type: ScalarTypeEnum.Float_unsecure(),
72
+ isOptional: true
73
+ },
74
+ availableBalance: {
75
+ type: ScalarTypeEnum.Float_unsecure(),
76
+ isOptional: true
77
+ },
78
+ lastSyncedAt: {
79
+ type: ScalarTypeEnum.DateTime(),
80
+ isOptional: false
81
+ },
82
+ createdAt: {
83
+ type: ScalarTypeEnum.DateTime(),
84
+ isOptional: false
85
+ },
86
+ updatedAt: {
87
+ type: ScalarTypeEnum.DateTime(),
88
+ isOptional: false
89
+ },
90
+ metadata: {
91
+ type: ScalarTypeEnum.JSONObject(),
92
+ isOptional: true
93
+ }
94
+ }
95
+ });
96
+ const BankTransactionRecord = new SchemaModel({
97
+ name: "BankTransactionRecord",
98
+ description: "Canonical transaction entry mapped from Powens into the open banking ledger.",
99
+ fields: {
100
+ id: {
101
+ type: ScalarTypeEnum.ID(),
102
+ isOptional: false
103
+ },
104
+ accountId: {
105
+ type: ScalarTypeEnum.ID(),
106
+ isOptional: false
107
+ },
108
+ tenantId: {
109
+ type: ScalarTypeEnum.ID(),
110
+ isOptional: false
111
+ },
112
+ connectionId: {
113
+ type: ScalarTypeEnum.ID(),
114
+ isOptional: false
115
+ },
116
+ externalId: {
117
+ type: ScalarTypeEnum.NonEmptyString(),
118
+ isOptional: false
119
+ },
120
+ amount: {
121
+ type: ScalarTypeEnum.Float_unsecure(),
122
+ isOptional: false
123
+ },
124
+ currency: {
125
+ type: ScalarTypeEnum.Currency(),
126
+ isOptional: false
127
+ },
128
+ date: {
129
+ type: ScalarTypeEnum.DateTime(),
130
+ isOptional: false
131
+ },
132
+ bookingDate: {
133
+ type: ScalarTypeEnum.DateTime(),
134
+ isOptional: true
135
+ },
136
+ valueDate: {
137
+ type: ScalarTypeEnum.DateTime(),
138
+ isOptional: true
139
+ },
140
+ description: {
141
+ type: ScalarTypeEnum.String_unsecure(),
142
+ isOptional: true
143
+ },
144
+ counterpartyName: {
145
+ type: ScalarTypeEnum.String_unsecure(),
146
+ isOptional: true
147
+ },
148
+ counterpartyAccount: {
149
+ type: ScalarTypeEnum.String_unsecure(),
150
+ isOptional: true
151
+ },
152
+ merchantCategoryCode: {
153
+ type: ScalarTypeEnum.String_unsecure(),
154
+ isOptional: true
155
+ },
156
+ rawCategory: {
157
+ type: ScalarTypeEnum.String_unsecure(),
158
+ isOptional: true
159
+ },
160
+ standardizedCategory: {
161
+ type: ScalarTypeEnum.String_unsecure(),
162
+ isOptional: true
163
+ },
164
+ transactionType: {
165
+ type: ScalarTypeEnum.NonEmptyString(),
166
+ isOptional: false
167
+ },
168
+ status: {
169
+ type: ScalarTypeEnum.NonEmptyString(),
170
+ isOptional: false
171
+ },
172
+ runningBalance: {
173
+ type: ScalarTypeEnum.Float_unsecure(),
174
+ isOptional: true
175
+ },
176
+ metadata: {
177
+ type: ScalarTypeEnum.JSONObject(),
178
+ isOptional: true
179
+ },
180
+ createdAt: {
181
+ type: ScalarTypeEnum.DateTime(),
182
+ isOptional: false
183
+ },
184
+ updatedAt: {
185
+ type: ScalarTypeEnum.DateTime(),
186
+ isOptional: false
187
+ }
188
+ }
189
+ });
190
+ const AccountBalanceRecord = new SchemaModel({
191
+ name: "AccountBalanceRecord",
192
+ description: "Canonical balance snapshot computed from Powens balance payloads.",
193
+ fields: {
194
+ id: {
195
+ type: ScalarTypeEnum.ID(),
196
+ isOptional: false
197
+ },
198
+ accountId: {
199
+ type: ScalarTypeEnum.ID(),
200
+ isOptional: false
201
+ },
202
+ tenantId: {
203
+ type: ScalarTypeEnum.ID(),
204
+ isOptional: false
205
+ },
206
+ connectionId: {
207
+ type: ScalarTypeEnum.ID(),
208
+ isOptional: false
209
+ },
210
+ balanceType: {
211
+ type: ScalarTypeEnum.NonEmptyString(),
212
+ isOptional: false
213
+ },
214
+ currentBalance: {
215
+ type: ScalarTypeEnum.Float_unsecure(),
216
+ isOptional: false
217
+ },
218
+ availableBalance: {
219
+ type: ScalarTypeEnum.Float_unsecure(),
220
+ isOptional: true
221
+ },
222
+ currency: {
223
+ type: ScalarTypeEnum.Currency(),
224
+ isOptional: false
225
+ },
226
+ lastUpdatedAt: {
227
+ type: ScalarTypeEnum.DateTime(),
228
+ isOptional: false
229
+ },
230
+ createdAt: {
231
+ type: ScalarTypeEnum.DateTime(),
232
+ isOptional: false
233
+ },
234
+ metadata: {
235
+ type: ScalarTypeEnum.JSONObject(),
236
+ isOptional: true
237
+ }
238
+ }
239
+ });
240
+
241
+ //#endregion
242
+ export { AccountBalanceRecord, BankAccountRecord, BankTransactionRecord };
@@ -1 +1,68 @@
1
- const e={meta:{key:`openbanking`,title:`Open Banking Integration`,description:`Open banking account sync, balance refresh, and transaction synchronization`,domain:`integrations`,owners:[`@platform.finance`],tags:[`open-banking`,`powens`,`finance`,`banking`],stability:`experimental`},operations:[{name:`openbanking.accounts.sync`,version:1},{name:`openbanking.accounts.list`,version:1},{name:`openbanking.accounts.get`,version:1},{name:`openbanking.balances.refresh`,version:1},{name:`openbanking.balances.get`,version:1},{name:`openbanking.transactions.sync`,version:1},{name:`openbanking.transactions.list`,version:1}],events:[],presentations:[],opToPresentation:[],presentationsTargets:[],capabilities:{provides:[{key:`openbanking`,version:1}],requires:[{key:`identity`,version:1}]}};export{e as OpenBankingFeature};
1
+ //#region src/integrations/openbanking/openbanking.feature.ts
2
+ /**
3
+ * OpenBanking feature module that bundles account, balance,
4
+ * and transaction synchronization capabilities.
5
+ */
6
+ const OpenBankingFeature = {
7
+ meta: {
8
+ key: "openbanking",
9
+ title: "Open Banking Integration",
10
+ description: "Open banking account sync, balance refresh, and transaction synchronization",
11
+ domain: "integrations",
12
+ owners: ["@platform.finance"],
13
+ tags: [
14
+ "open-banking",
15
+ "powens",
16
+ "finance",
17
+ "banking"
18
+ ],
19
+ stability: "experimental"
20
+ },
21
+ operations: [
22
+ {
23
+ name: "openbanking.accounts.sync",
24
+ version: 1
25
+ },
26
+ {
27
+ name: "openbanking.accounts.list",
28
+ version: 1
29
+ },
30
+ {
31
+ name: "openbanking.accounts.get",
32
+ version: 1
33
+ },
34
+ {
35
+ name: "openbanking.balances.refresh",
36
+ version: 1
37
+ },
38
+ {
39
+ name: "openbanking.balances.get",
40
+ version: 1
41
+ },
42
+ {
43
+ name: "openbanking.transactions.sync",
44
+ version: 1
45
+ },
46
+ {
47
+ name: "openbanking.transactions.list",
48
+ version: 1
49
+ }
50
+ ],
51
+ events: [],
52
+ presentations: [],
53
+ opToPresentation: [],
54
+ presentationsTargets: [],
55
+ capabilities: {
56
+ provides: [{
57
+ key: "openbanking",
58
+ version: 1
59
+ }],
60
+ requires: [{
61
+ key: "identity",
62
+ version: 1
63
+ }]
64
+ }
65
+ };
66
+
67
+ //#endregion
68
+ export { OpenBankingFeature };
@@ -1 +1,39 @@
1
- const e=[`iban`,`bic`,`accountNumberMasked`,`accountNumber`,`counterpartyName`,`counterpartyAccount`,`description`,`merchantName`,`merchantCategoryCode`,`reference`],t={accountsSynced:`openbanking.accounts.synced`,accountsSyncFailed:`openbanking.accounts.sync_failed`,transactionsSynced:`openbanking.transactions.synced`,transactionsSyncFailed:`openbanking.transactions.sync_failed`,balancesRefreshed:`openbanking.balances.refreshed`,balancesRefreshFailed:`openbanking.balances.refresh_failed`,overviewGenerated:`openbanking.overview.generated`};function n(t){let i={};for(let[a,o]of Object.entries(t))e.includes(a)?i[a]=r(o):Array.isArray(o)?i[a]=o.map(e=>typeof e==`object`&&e?n(e):e):typeof o==`object`&&o?i[a]=n(o):i[a]=o;return i}function r(e){if(e==null)return``;let t=String(e);return t.length<=4?`*`.repeat(t.length):`${`*`.repeat(Math.max(t.length-4,0))}${t.slice(-4)}`}export{e as OPENBANKING_PII_FIELDS,t as OPENBANKING_TELEMETRY_EVENTS,n as redactOpenBankingTelemetryPayload};
1
+ //#region src/integrations/openbanking/telemetry.ts
2
+ const OPENBANKING_PII_FIELDS = [
3
+ "iban",
4
+ "bic",
5
+ "accountNumberMasked",
6
+ "accountNumber",
7
+ "counterpartyName",
8
+ "counterpartyAccount",
9
+ "description",
10
+ "merchantName",
11
+ "merchantCategoryCode",
12
+ "reference"
13
+ ];
14
+ const OPENBANKING_TELEMETRY_EVENTS = {
15
+ accountsSynced: "openbanking.accounts.synced",
16
+ accountsSyncFailed: "openbanking.accounts.sync_failed",
17
+ transactionsSynced: "openbanking.transactions.synced",
18
+ transactionsSyncFailed: "openbanking.transactions.sync_failed",
19
+ balancesRefreshed: "openbanking.balances.refreshed",
20
+ balancesRefreshFailed: "openbanking.balances.refresh_failed",
21
+ overviewGenerated: "openbanking.overview.generated"
22
+ };
23
+ function redactOpenBankingTelemetryPayload(payload) {
24
+ const redacted = {};
25
+ for (const [key, value] of Object.entries(payload)) if (OPENBANKING_PII_FIELDS.includes(key)) redacted[key] = maskValue(value);
26
+ else if (Array.isArray(value)) redacted[key] = value.map((item) => typeof item === "object" && item !== null ? redactOpenBankingTelemetryPayload(item) : item);
27
+ else if (typeof value === "object" && value !== null) redacted[key] = redactOpenBankingTelemetryPayload(value);
28
+ else redacted[key] = value;
29
+ return redacted;
30
+ }
31
+ function maskValue(value) {
32
+ if (value == null) return "";
33
+ const str = String(value);
34
+ if (str.length <= 4) return "*".repeat(str.length);
35
+ return `${"*".repeat(Math.max(str.length - 4, 0))}${str.slice(-4)}`;
36
+ }
37
+
38
+ //#endregion
39
+ export { OPENBANKING_PII_FIELDS, OPENBANKING_TELEMETRY_EVENTS, redactOpenBankingTelemetryPayload };
@@ -1 +1,56 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`ai-voice.elevenlabs`,version:1,category:`ai-voice`,displayName:`ElevenLabs Voice`,title:`ElevenLabs Text-to-Speech`,description:`ElevenLabs integration for neural voice synthesis and voice catalog access.`,domain:`ai`,owners:[`platform.ai`],tags:[`voice`,`tts`],stability:e.Beta},supportedModes:[`managed`,`byok`],capabilities:{provides:[{key:`ai.voice.synthesis`,version:1}]},configSchema:{schema:{type:`object`,properties:{defaultVoiceId:{type:`string`,description:`Optional default voice identifier for synthesis requests.`}}},example:{defaultVoiceId:`pNInz6obpgDQGcFmaJgB`}},secretSchema:{schema:{type:`object`,required:[`apiKey`],properties:{apiKey:{type:`string`,description:`ElevenLabs API key with text-to-speech permissions.`}}},example:{apiKey:`eleven-***`}},healthCheck:{method:`custom`,timeoutMs:4e3},docsUrl:`https://elevenlabs.io/docs/api-reference/text-to-speech`,constraints:{rateLimit:{rpm:120}},byokSetup:{setupInstructions:`Create an ElevenLabs API key and ensure the desired voices are accessible to the key scope.`}};function n(e){return e.register(t)}export{t as elevenLabsIntegrationSpec,n as registerElevenLabsIntegration};
1
+ import { StabilityEnum } from "../../ownership.js";
2
+
3
+ //#region src/integrations/providers/elevenlabs.ts
4
+ const elevenLabsIntegrationSpec = {
5
+ meta: {
6
+ key: "ai-voice.elevenlabs",
7
+ version: 1,
8
+ category: "ai-voice",
9
+ displayName: "ElevenLabs Voice",
10
+ title: "ElevenLabs Text-to-Speech",
11
+ description: "ElevenLabs integration for neural voice synthesis and voice catalog access.",
12
+ domain: "ai",
13
+ owners: ["platform.ai"],
14
+ tags: ["voice", "tts"],
15
+ stability: StabilityEnum.Beta
16
+ },
17
+ supportedModes: ["managed", "byok"],
18
+ capabilities: { provides: [{
19
+ key: "ai.voice.synthesis",
20
+ version: 1
21
+ }] },
22
+ configSchema: {
23
+ schema: {
24
+ type: "object",
25
+ properties: { defaultVoiceId: {
26
+ type: "string",
27
+ description: "Optional default voice identifier for synthesis requests."
28
+ } }
29
+ },
30
+ example: { defaultVoiceId: "pNInz6obpgDQGcFmaJgB" }
31
+ },
32
+ secretSchema: {
33
+ schema: {
34
+ type: "object",
35
+ required: ["apiKey"],
36
+ properties: { apiKey: {
37
+ type: "string",
38
+ description: "ElevenLabs API key with text-to-speech permissions."
39
+ } }
40
+ },
41
+ example: { apiKey: "eleven-***" }
42
+ },
43
+ healthCheck: {
44
+ method: "custom",
45
+ timeoutMs: 4e3
46
+ },
47
+ docsUrl: "https://elevenlabs.io/docs/api-reference/text-to-speech",
48
+ constraints: { rateLimit: { rpm: 120 } },
49
+ byokSetup: { setupInstructions: "Create an ElevenLabs API key and ensure the desired voices are accessible to the key scope." }
50
+ };
51
+ function registerElevenLabsIntegration(registry) {
52
+ return registry.register(elevenLabsIntegrationSpec);
53
+ }
54
+
55
+ //#endregion
56
+ export { elevenLabsIntegrationSpec, registerElevenLabsIntegration };
@@ -1 +1,79 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`storage.gcs`,version:1,category:`storage`,displayName:`Google Cloud Storage`,title:`Google Cloud Storage Buckets`,description:`Google Cloud Storage integration for object storage and retrieval.`,domain:`infrastructure`,owners:[`platform.infrastructure`],tags:[`storage`,`gcs`,`google-cloud`],stability:e.Beta},supportedModes:[`managed`,`byok`],capabilities:{provides:[{key:`storage.objects`,version:1}]},configSchema:{schema:{type:`object`,required:[`bucket`],properties:{bucket:{type:`string`,description:`Primary bucket name used for storing objects.`},prefix:{type:`string`,description:`Optional prefix applied to object keys.`}}},example:{bucket:`pfo-tenant-assets`,prefix:`documents/`}},secretSchema:{schema:{type:`object`,properties:{type:{type:`string`,description:`Service account type field from Google credentials JSON (if provided).`},client_email:{type:`string`},private_key:{type:`string`},project_id:{type:`string`}}},example:{type:`service_account`,client_email:`svc-account@example.iam.gserviceaccount.com`,private_key:`-----BEGIN PRIVATE KEY-----...`,project_id:`example-project`}},healthCheck:{method:`ping`,timeoutMs:4e3},docsUrl:`https://cloud.google.com/storage/docs/apis`,constraints:{quotas:{storageGb:5120}},byokSetup:{setupInstructions:`Create a Google Cloud service account with Storage Object Admin role and upload the JSON credentials to the secret store.`}};function n(e){return e.register(t)}export{t as gcsStorageIntegrationSpec,n as registerGcsStorageIntegration};
1
+ import { StabilityEnum } from "../../ownership.js";
2
+
3
+ //#region src/integrations/providers/gcs-storage.ts
4
+ const gcsStorageIntegrationSpec = {
5
+ meta: {
6
+ key: "storage.gcs",
7
+ version: 1,
8
+ category: "storage",
9
+ displayName: "Google Cloud Storage",
10
+ title: "Google Cloud Storage Buckets",
11
+ description: "Google Cloud Storage integration for object storage and retrieval.",
12
+ domain: "infrastructure",
13
+ owners: ["platform.infrastructure"],
14
+ tags: [
15
+ "storage",
16
+ "gcs",
17
+ "google-cloud"
18
+ ],
19
+ stability: StabilityEnum.Beta
20
+ },
21
+ supportedModes: ["managed", "byok"],
22
+ capabilities: { provides: [{
23
+ key: "storage.objects",
24
+ version: 1
25
+ }] },
26
+ configSchema: {
27
+ schema: {
28
+ type: "object",
29
+ required: ["bucket"],
30
+ properties: {
31
+ bucket: {
32
+ type: "string",
33
+ description: "Primary bucket name used for storing objects."
34
+ },
35
+ prefix: {
36
+ type: "string",
37
+ description: "Optional prefix applied to object keys."
38
+ }
39
+ }
40
+ },
41
+ example: {
42
+ bucket: "pfo-tenant-assets",
43
+ prefix: "documents/"
44
+ }
45
+ },
46
+ secretSchema: {
47
+ schema: {
48
+ type: "object",
49
+ properties: {
50
+ type: {
51
+ type: "string",
52
+ description: "Service account type field from Google credentials JSON (if provided)."
53
+ },
54
+ client_email: { type: "string" },
55
+ private_key: { type: "string" },
56
+ project_id: { type: "string" }
57
+ }
58
+ },
59
+ example: {
60
+ type: "service_account",
61
+ client_email: "svc-account@example.iam.gserviceaccount.com",
62
+ private_key: "-----BEGIN PRIVATE KEY-----...",
63
+ project_id: "example-project"
64
+ }
65
+ },
66
+ healthCheck: {
67
+ method: "ping",
68
+ timeoutMs: 4e3
69
+ },
70
+ docsUrl: "https://cloud.google.com/storage/docs/apis",
71
+ constraints: { quotas: { storageGb: 5120 } },
72
+ byokSetup: { setupInstructions: "Create a Google Cloud service account with Storage Object Admin role and upload the JSON credentials to the secret store." }
73
+ };
74
+ function registerGcsStorageIntegration(registry) {
75
+ return registry.register(gcsStorageIntegrationSpec);
76
+ }
77
+
78
+ //#endregion
79
+ export { gcsStorageIntegrationSpec, registerGcsStorageIntegration };
@@ -1 +1,91 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`email.gmail`,version:1,category:`email`,displayName:`Gmail API`,title:`Google Gmail API`,description:`Gmail integration supporting inbound thread ingestion and outbound transactional email.`,domain:`communications`,owners:[`platform.messaging`],tags:[`email`,`gmail`],stability:e.Beta},supportedModes:[`managed`,`byok`],capabilities:{provides:[{key:`email.inbound`,version:1},{key:`email.outbound`,version:1}]},configSchema:{schema:{type:`object`,properties:{labelIds:{type:`array`,items:{type:`string`},description:`Optional list of label IDs to scope inbound sync.`},includeSpamTrash:{type:`boolean`,description:`Whether to include spam or trash messages during sync.`}}},example:{labelIds:[`INBOX`],includeSpamTrash:!1}},secretSchema:{schema:{type:`object`,required:[`clientId`,`clientSecret`,`refreshToken`],properties:{clientId:{type:`string`,description:`OAuth client ID for the Google Cloud project.`},clientSecret:{type:`string`,description:`OAuth client secret for the Google Cloud project.`},refreshToken:{type:`string`,description:`OAuth refresh token for delegated Gmail access.`},redirectUri:{type:`string`,description:`Optional redirect URI used when issuing the refresh token.`}}},example:{clientId:`xxx.apps.googleusercontent.com`,clientSecret:`secret`,refreshToken:`refresh-token`}},healthCheck:{method:`custom`,timeoutMs:4e3},docsUrl:`https://developers.google.com/gmail/api`,constraints:{rateLimit:{rpm:600}},byokSetup:{setupInstructions:`Create an OAuth consent screen and credentials within Google Cloud Console, then authorize the Gmail scopes and store the resulting refresh token.`}};function n(e){return e.register(t)}export{t as gmailIntegrationSpec,n as registerGmailIntegration};
1
+ import { StabilityEnum } from "../../ownership.js";
2
+
3
+ //#region src/integrations/providers/gmail.ts
4
+ const gmailIntegrationSpec = {
5
+ meta: {
6
+ key: "email.gmail",
7
+ version: 1,
8
+ category: "email",
9
+ displayName: "Gmail API",
10
+ title: "Google Gmail API",
11
+ description: "Gmail integration supporting inbound thread ingestion and outbound transactional email.",
12
+ domain: "communications",
13
+ owners: ["platform.messaging"],
14
+ tags: ["email", "gmail"],
15
+ stability: StabilityEnum.Beta
16
+ },
17
+ supportedModes: ["managed", "byok"],
18
+ capabilities: { provides: [{
19
+ key: "email.inbound",
20
+ version: 1
21
+ }, {
22
+ key: "email.outbound",
23
+ version: 1
24
+ }] },
25
+ configSchema: {
26
+ schema: {
27
+ type: "object",
28
+ properties: {
29
+ labelIds: {
30
+ type: "array",
31
+ items: { type: "string" },
32
+ description: "Optional list of label IDs to scope inbound sync."
33
+ },
34
+ includeSpamTrash: {
35
+ type: "boolean",
36
+ description: "Whether to include spam or trash messages during sync."
37
+ }
38
+ }
39
+ },
40
+ example: {
41
+ labelIds: ["INBOX"],
42
+ includeSpamTrash: false
43
+ }
44
+ },
45
+ secretSchema: {
46
+ schema: {
47
+ type: "object",
48
+ required: [
49
+ "clientId",
50
+ "clientSecret",
51
+ "refreshToken"
52
+ ],
53
+ properties: {
54
+ clientId: {
55
+ type: "string",
56
+ description: "OAuth client ID for the Google Cloud project."
57
+ },
58
+ clientSecret: {
59
+ type: "string",
60
+ description: "OAuth client secret for the Google Cloud project."
61
+ },
62
+ refreshToken: {
63
+ type: "string",
64
+ description: "OAuth refresh token for delegated Gmail access."
65
+ },
66
+ redirectUri: {
67
+ type: "string",
68
+ description: "Optional redirect URI used when issuing the refresh token."
69
+ }
70
+ }
71
+ },
72
+ example: {
73
+ clientId: "xxx.apps.googleusercontent.com",
74
+ clientSecret: "secret",
75
+ refreshToken: "refresh-token"
76
+ }
77
+ },
78
+ healthCheck: {
79
+ method: "custom",
80
+ timeoutMs: 4e3
81
+ },
82
+ docsUrl: "https://developers.google.com/gmail/api",
83
+ constraints: { rateLimit: { rpm: 600 } },
84
+ byokSetup: { setupInstructions: "Create an OAuth consent screen and credentials within Google Cloud Console, then authorize the Gmail scopes and store the resulting refresh token." }
85
+ };
86
+ function registerGmailIntegration(registry) {
87
+ return registry.register(gmailIntegrationSpec);
88
+ }
89
+
90
+ //#endregion
91
+ export { gmailIntegrationSpec, registerGmailIntegration };
@@ -1 +1,70 @@
1
- import{StabilityEnum as e}from"../../ownership.js";const t={meta:{key:`calendar.google`,version:1,category:`calendar`,displayName:`Google Calendar`,title:`Google Calendar API`,description:`Google Calendar integration for event creation, updates, and scheduling automations.`,domain:`productivity`,owners:[`platform.messaging`],tags:[`calendar`,`google`],stability:e.Beta},supportedModes:[`managed`,`byok`],capabilities:{provides:[{key:`calendar.events`,version:1}]},configSchema:{schema:{type:`object`,properties:{calendarId:{type:`string`,description:`Default calendar identifier (defaults to primary).`}}},example:{calendarId:`primary`}},secretSchema:{schema:{type:`object`,required:[`clientEmail`,`privateKey`],properties:{clientEmail:{type:`string`,description:`Service account client email.`},privateKey:{type:`string`,description:`Service account private key.`},projectId:{type:`string`,description:`Google Cloud project ID.`}}},example:{clientEmail:`svc-calendar@example.iam.gserviceaccount.com`,privateKey:`-----BEGIN PRIVATE KEY-----...`,projectId:`calendar-project`}},healthCheck:{method:`custom`,timeoutMs:4e3},docsUrl:`https://developers.google.com/calendar/api`,constraints:{},byokSetup:{setupInstructions:`Create a Google service account with Calendar access and share the target calendars with the service account email.`}};function n(e){return e.register(t)}export{t as googleCalendarIntegrationSpec,n as registerGoogleCalendarIntegration};
1
+ import { StabilityEnum } from "../../ownership.js";
2
+
3
+ //#region src/integrations/providers/google-calendar.ts
4
+ const googleCalendarIntegrationSpec = {
5
+ meta: {
6
+ key: "calendar.google",
7
+ version: 1,
8
+ category: "calendar",
9
+ displayName: "Google Calendar",
10
+ title: "Google Calendar API",
11
+ description: "Google Calendar integration for event creation, updates, and scheduling automations.",
12
+ domain: "productivity",
13
+ owners: ["platform.messaging"],
14
+ tags: ["calendar", "google"],
15
+ stability: StabilityEnum.Beta
16
+ },
17
+ supportedModes: ["managed", "byok"],
18
+ capabilities: { provides: [{
19
+ key: "calendar.events",
20
+ version: 1
21
+ }] },
22
+ configSchema: {
23
+ schema: {
24
+ type: "object",
25
+ properties: { calendarId: {
26
+ type: "string",
27
+ description: "Default calendar identifier (defaults to primary)."
28
+ } }
29
+ },
30
+ example: { calendarId: "primary" }
31
+ },
32
+ secretSchema: {
33
+ schema: {
34
+ type: "object",
35
+ required: ["clientEmail", "privateKey"],
36
+ properties: {
37
+ clientEmail: {
38
+ type: "string",
39
+ description: "Service account client email."
40
+ },
41
+ privateKey: {
42
+ type: "string",
43
+ description: "Service account private key."
44
+ },
45
+ projectId: {
46
+ type: "string",
47
+ description: "Google Cloud project ID."
48
+ }
49
+ }
50
+ },
51
+ example: {
52
+ clientEmail: "svc-calendar@example.iam.gserviceaccount.com",
53
+ privateKey: "-----BEGIN PRIVATE KEY-----...",
54
+ projectId: "calendar-project"
55
+ }
56
+ },
57
+ healthCheck: {
58
+ method: "custom",
59
+ timeoutMs: 4e3
60
+ },
61
+ docsUrl: "https://developers.google.com/calendar/api",
62
+ constraints: {},
63
+ byokSetup: { setupInstructions: "Create a Google service account with Calendar access and share the target calendars with the service account email." }
64
+ };
65
+ function registerGoogleCalendarIntegration(registry) {
66
+ return registry.register(googleCalendarIntegrationSpec);
67
+ }
68
+
69
+ //#endregion
70
+ export { googleCalendarIntegrationSpec, registerGoogleCalendarIntegration };