@contractspec/lib.contracts-integrations 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +3 -0
  2. package/dist/index.d.ts +11 -0
  3. package/dist/index.js +3676 -0
  4. package/dist/integrations/binding.d.ts +14 -0
  5. package/dist/integrations/binding.js +1 -0
  6. package/dist/integrations/connection.d.ts +47 -0
  7. package/dist/integrations/connection.js +1 -0
  8. package/dist/integrations/docs/integrations.docblock.d.ts +2 -0
  9. package/dist/integrations/docs/integrations.docblock.js +110 -0
  10. package/dist/integrations/health.d.ts +17 -0
  11. package/dist/integrations/health.js +73 -0
  12. package/dist/integrations/health.test.d.ts +1 -0
  13. package/dist/integrations/index.d.ts +11 -0
  14. package/dist/integrations/index.js +3264 -0
  15. package/dist/integrations/integrations.capability.d.ts +1 -0
  16. package/dist/integrations/integrations.capability.js +18 -0
  17. package/dist/integrations/integrations.feature.d.ts +5 -0
  18. package/dist/integrations/integrations.feature.js +33 -0
  19. package/dist/integrations/meeting-recorder/contracts/index.d.ts +7 -0
  20. package/dist/integrations/meeting-recorder/contracts/index.js +474 -0
  21. package/dist/integrations/meeting-recorder/contracts/meetings.d.ts +451 -0
  22. package/dist/integrations/meeting-recorder/contracts/meetings.js +219 -0
  23. package/dist/integrations/meeting-recorder/contracts/transcripts.d.ts +166 -0
  24. package/dist/integrations/meeting-recorder/contracts/transcripts.js +287 -0
  25. package/dist/integrations/meeting-recorder/contracts/webhooks.d.ts +85 -0
  26. package/dist/integrations/meeting-recorder/contracts/webhooks.js +172 -0
  27. package/dist/integrations/meeting-recorder/meeting-recorder.capability.d.ts +1 -0
  28. package/dist/integrations/meeting-recorder/meeting-recorder.capability.js +18 -0
  29. package/dist/integrations/meeting-recorder/meeting-recorder.feature.d.ts +5 -0
  30. package/dist/integrations/meeting-recorder/meeting-recorder.feature.js +33 -0
  31. package/dist/integrations/meeting-recorder/models.d.ts +402 -0
  32. package/dist/integrations/meeting-recorder/models.js +122 -0
  33. package/dist/integrations/meeting-recorder/telemetry.d.ts +13 -0
  34. package/dist/integrations/meeting-recorder/telemetry.js +54 -0
  35. package/dist/integrations/openbanking/contracts/accounts.d.ts +282 -0
  36. package/dist/integrations/openbanking/contracts/accounts.js +328 -0
  37. package/dist/integrations/openbanking/contracts/balances.d.ts +158 -0
  38. package/dist/integrations/openbanking/contracts/balances.js +292 -0
  39. package/dist/integrations/openbanking/contracts/index.d.ts +7 -0
  40. package/dist/integrations/openbanking/contracts/index.js +644 -0
  41. package/dist/integrations/openbanking/contracts/transactions.d.ts +206 -0
  42. package/dist/integrations/openbanking/contracts/transactions.js +298 -0
  43. package/dist/integrations/openbanking/guards.d.ts +8 -0
  44. package/dist/integrations/openbanking/guards.js +42 -0
  45. package/dist/integrations/openbanking/guards.test.d.ts +1 -0
  46. package/dist/integrations/openbanking/models.d.ts +223 -0
  47. package/dist/integrations/openbanking/models.js +110 -0
  48. package/dist/integrations/openbanking/openbanking.capability.d.ts +1 -0
  49. package/dist/integrations/openbanking/openbanking.capability.js +18 -0
  50. package/dist/integrations/openbanking/openbanking.feature.d.ts +5 -0
  51. package/dist/integrations/openbanking/openbanking.feature.js +35 -0
  52. package/dist/integrations/openbanking/telemetry.d.ts +12 -0
  53. package/dist/integrations/openbanking/telemetry.js +51 -0
  54. package/dist/integrations/operations.d.ts +430 -0
  55. package/dist/integrations/operations.js +297 -0
  56. package/dist/integrations/operations.test.d.ts +1 -0
  57. package/dist/integrations/providers/analytics-reader.d.ts +103 -0
  58. package/dist/integrations/providers/analytics-reader.js +1 -0
  59. package/dist/integrations/providers/analytics-writer.d.ts +6 -0
  60. package/dist/integrations/providers/analytics-writer.js +1 -0
  61. package/dist/integrations/providers/analytics.d.ts +47 -0
  62. package/dist/integrations/providers/analytics.js +1 -0
  63. package/dist/integrations/providers/calendar.d.ts +75 -0
  64. package/dist/integrations/providers/calendar.js +1 -0
  65. package/dist/integrations/providers/database.d.ts +12 -0
  66. package/dist/integrations/providers/database.js +1 -0
  67. package/dist/integrations/providers/elevenlabs.d.ts +3 -0
  68. package/dist/integrations/providers/elevenlabs.js +86 -0
  69. package/dist/integrations/providers/email.d.ts +83 -0
  70. package/dist/integrations/providers/email.js +1 -0
  71. package/dist/integrations/providers/embedding.d.ts +21 -0
  72. package/dist/integrations/providers/embedding.js +1 -0
  73. package/dist/integrations/providers/fal.d.ts +3 -0
  74. package/dist/integrations/providers/fal.js +112 -0
  75. package/dist/integrations/providers/fathom.d.ts +3 -0
  76. package/dist/integrations/providers/fathom.js +126 -0
  77. package/dist/integrations/providers/fireflies.d.ts +3 -0
  78. package/dist/integrations/providers/fireflies.js +106 -0
  79. package/dist/integrations/providers/gcs-storage.d.ts +3 -0
  80. package/dist/integrations/providers/gcs-storage.js +97 -0
  81. package/dist/integrations/providers/gmail.d.ts +3 -0
  82. package/dist/integrations/providers/gmail.js +109 -0
  83. package/dist/integrations/providers/google-calendar.d.ts +3 -0
  84. package/dist/integrations/providers/google-calendar.js +92 -0
  85. package/dist/integrations/providers/gradium.d.ts +3 -0
  86. package/dist/integrations/providers/gradium.js +110 -0
  87. package/dist/integrations/providers/granola.d.ts +3 -0
  88. package/dist/integrations/providers/granola.js +107 -0
  89. package/dist/integrations/providers/index.d.ts +38 -0
  90. package/dist/integrations/providers/index.js +2094 -0
  91. package/dist/integrations/providers/jira.d.ts +3 -0
  92. package/dist/integrations/providers/jira.js +108 -0
  93. package/dist/integrations/providers/linear.d.ts +3 -0
  94. package/dist/integrations/providers/linear.js +107 -0
  95. package/dist/integrations/providers/llm.d.ts +79 -0
  96. package/dist/integrations/providers/llm.js +1 -0
  97. package/dist/integrations/providers/meeting-recorder.d.ts +129 -0
  98. package/dist/integrations/providers/meeting-recorder.js +1 -0
  99. package/dist/integrations/providers/mistral.d.ts +3 -0
  100. package/dist/integrations/providers/mistral.js +94 -0
  101. package/dist/integrations/providers/notion.d.ts +3 -0
  102. package/dist/integrations/providers/notion.js +113 -0
  103. package/dist/integrations/providers/openbanking.d.ts +125 -0
  104. package/dist/integrations/providers/openbanking.js +1 -0
  105. package/dist/integrations/providers/payments.d.ts +106 -0
  106. package/dist/integrations/providers/payments.js +1 -0
  107. package/dist/integrations/providers/posthog-llm-telemetry.d.ts +51 -0
  108. package/dist/integrations/providers/posthog-llm-telemetry.js +176 -0
  109. package/dist/integrations/providers/posthog.d.ts +3 -0
  110. package/dist/integrations/providers/posthog.js +106 -0
  111. package/dist/integrations/providers/postmark.d.ts +3 -0
  112. package/dist/integrations/providers/postmark.js +98 -0
  113. package/dist/integrations/providers/powens.d.ts +3 -0
  114. package/dist/integrations/providers/powens.js +124 -0
  115. package/dist/integrations/providers/project-management.d.ts +32 -0
  116. package/dist/integrations/providers/project-management.js +1 -0
  117. package/dist/integrations/providers/providers.test.d.ts +1 -0
  118. package/dist/integrations/providers/qdrant.d.ts +3 -0
  119. package/dist/integrations/providers/qdrant.js +101 -0
  120. package/dist/integrations/providers/registry.d.ts +6 -0
  121. package/dist/integrations/providers/registry.js +1878 -0
  122. package/dist/integrations/providers/sms.d.ts +31 -0
  123. package/dist/integrations/providers/sms.js +1 -0
  124. package/dist/integrations/providers/storage.d.ts +57 -0
  125. package/dist/integrations/providers/storage.js +1 -0
  126. package/dist/integrations/providers/stripe.d.ts +3 -0
  127. package/dist/integrations/providers/stripe.js +105 -0
  128. package/dist/integrations/providers/supabase-postgres.d.ts +3 -0
  129. package/dist/integrations/providers/supabase-postgres.js +87 -0
  130. package/dist/integrations/providers/supabase-vector.d.ts +3 -0
  131. package/dist/integrations/providers/supabase-vector.js +107 -0
  132. package/dist/integrations/providers/tldv.d.ts +3 -0
  133. package/dist/integrations/providers/tldv.js +106 -0
  134. package/dist/integrations/providers/twilio-sms.d.ts +3 -0
  135. package/dist/integrations/providers/twilio-sms.js +91 -0
  136. package/dist/integrations/providers/vector-store.d.ts +39 -0
  137. package/dist/integrations/providers/vector-store.js +1 -0
  138. package/dist/integrations/providers/voice.d.ts +31 -0
  139. package/dist/integrations/providers/voice.js +1 -0
  140. package/dist/integrations/runtime.d.ts +95 -0
  141. package/dist/integrations/runtime.js +209 -0
  142. package/dist/integrations/runtime.test.d.ts +1 -0
  143. package/dist/integrations/secrets/aws-secret-manager.d.ts +28 -0
  144. package/dist/integrations/secrets/aws-secret-manager.js +346 -0
  145. package/dist/integrations/secrets/env-secret-provider.d.ts +28 -0
  146. package/dist/integrations/secrets/env-secret-provider.js +159 -0
  147. package/dist/integrations/secrets/gcp-secret-manager.d.ts +29 -0
  148. package/dist/integrations/secrets/gcp-secret-manager.js +347 -0
  149. package/dist/integrations/secrets/index.d.ts +6 -0
  150. package/dist/integrations/secrets/index.js +1129 -0
  151. package/dist/integrations/secrets/manager.d.ts +44 -0
  152. package/dist/integrations/secrets/manager.js +183 -0
  153. package/dist/integrations/secrets/provider.d.ts +49 -0
  154. package/dist/integrations/secrets/provider.js +74 -0
  155. package/dist/integrations/secrets/provider.test.d.ts +1 -0
  156. package/dist/integrations/secrets/scaleway-secret-manager.d.ts +35 -0
  157. package/dist/integrations/secrets/scaleway-secret-manager.js +375 -0
  158. package/dist/integrations/secrets-types.d.ts +14 -0
  159. package/dist/integrations/secrets-types.js +1 -0
  160. package/dist/integrations/spec.d.ts +72 -0
  161. package/dist/integrations/spec.js +22 -0
  162. package/dist/integrations/spec.test.d.ts +1 -0
  163. package/dist/node/index.js +3675 -0
  164. package/dist/node/integrations/binding.js +0 -0
  165. package/dist/node/integrations/connection.js +0 -0
  166. package/dist/node/integrations/docs/integrations.docblock.js +109 -0
  167. package/dist/node/integrations/health.js +72 -0
  168. package/dist/node/integrations/index.js +3263 -0
  169. package/dist/node/integrations/integrations.capability.js +17 -0
  170. package/dist/node/integrations/integrations.feature.js +32 -0
  171. package/dist/node/integrations/meeting-recorder/contracts/index.js +473 -0
  172. package/dist/node/integrations/meeting-recorder/contracts/meetings.js +218 -0
  173. package/dist/node/integrations/meeting-recorder/contracts/transcripts.js +286 -0
  174. package/dist/node/integrations/meeting-recorder/contracts/webhooks.js +171 -0
  175. package/dist/node/integrations/meeting-recorder/meeting-recorder.capability.js +17 -0
  176. package/dist/node/integrations/meeting-recorder/meeting-recorder.feature.js +32 -0
  177. package/dist/node/integrations/meeting-recorder/models.js +121 -0
  178. package/dist/node/integrations/meeting-recorder/telemetry.js +53 -0
  179. package/dist/node/integrations/openbanking/contracts/accounts.js +327 -0
  180. package/dist/node/integrations/openbanking/contracts/balances.js +291 -0
  181. package/dist/node/integrations/openbanking/contracts/index.js +643 -0
  182. package/dist/node/integrations/openbanking/contracts/transactions.js +297 -0
  183. package/dist/node/integrations/openbanking/guards.js +41 -0
  184. package/dist/node/integrations/openbanking/models.js +109 -0
  185. package/dist/node/integrations/openbanking/openbanking.capability.js +17 -0
  186. package/dist/node/integrations/openbanking/openbanking.feature.js +34 -0
  187. package/dist/node/integrations/openbanking/telemetry.js +50 -0
  188. package/dist/node/integrations/operations.js +296 -0
  189. package/dist/node/integrations/providers/analytics-reader.js +0 -0
  190. package/dist/node/integrations/providers/analytics-writer.js +0 -0
  191. package/dist/node/integrations/providers/analytics.js +0 -0
  192. package/dist/node/integrations/providers/calendar.js +0 -0
  193. package/dist/node/integrations/providers/database.js +0 -0
  194. package/dist/node/integrations/providers/elevenlabs.js +85 -0
  195. package/dist/node/integrations/providers/email.js +0 -0
  196. package/dist/node/integrations/providers/embedding.js +0 -0
  197. package/dist/node/integrations/providers/fal.js +111 -0
  198. package/dist/node/integrations/providers/fathom.js +125 -0
  199. package/dist/node/integrations/providers/fireflies.js +105 -0
  200. package/dist/node/integrations/providers/gcs-storage.js +96 -0
  201. package/dist/node/integrations/providers/gmail.js +108 -0
  202. package/dist/node/integrations/providers/google-calendar.js +91 -0
  203. package/dist/node/integrations/providers/gradium.js +109 -0
  204. package/dist/node/integrations/providers/granola.js +106 -0
  205. package/dist/node/integrations/providers/index.js +2093 -0
  206. package/dist/node/integrations/providers/jira.js +107 -0
  207. package/dist/node/integrations/providers/linear.js +106 -0
  208. package/dist/node/integrations/providers/llm.js +0 -0
  209. package/dist/node/integrations/providers/meeting-recorder.js +0 -0
  210. package/dist/node/integrations/providers/mistral.js +93 -0
  211. package/dist/node/integrations/providers/notion.js +112 -0
  212. package/dist/node/integrations/providers/openbanking.js +0 -0
  213. package/dist/node/integrations/providers/payments.js +0 -0
  214. package/dist/node/integrations/providers/posthog-llm-telemetry.js +175 -0
  215. package/dist/node/integrations/providers/posthog.js +105 -0
  216. package/dist/node/integrations/providers/postmark.js +97 -0
  217. package/dist/node/integrations/providers/powens.js +123 -0
  218. package/dist/node/integrations/providers/project-management.js +0 -0
  219. package/dist/node/integrations/providers/qdrant.js +100 -0
  220. package/dist/node/integrations/providers/registry.js +1877 -0
  221. package/dist/node/integrations/providers/sms.js +0 -0
  222. package/dist/node/integrations/providers/storage.js +0 -0
  223. package/dist/node/integrations/providers/stripe.js +104 -0
  224. package/dist/node/integrations/providers/supabase-postgres.js +86 -0
  225. package/dist/node/integrations/providers/supabase-vector.js +106 -0
  226. package/dist/node/integrations/providers/tldv.js +105 -0
  227. package/dist/node/integrations/providers/twilio-sms.js +90 -0
  228. package/dist/node/integrations/providers/vector-store.js +0 -0
  229. package/dist/node/integrations/providers/voice.js +0 -0
  230. package/dist/node/integrations/runtime.js +208 -0
  231. package/dist/node/integrations/secrets/aws-secret-manager.js +345 -0
  232. package/dist/node/integrations/secrets/env-secret-provider.js +158 -0
  233. package/dist/node/integrations/secrets/gcp-secret-manager.js +346 -0
  234. package/dist/node/integrations/secrets/index.js +1128 -0
  235. package/dist/node/integrations/secrets/manager.js +182 -0
  236. package/dist/node/integrations/secrets/provider.js +73 -0
  237. package/dist/node/integrations/secrets/scaleway-secret-manager.js +374 -0
  238. package/dist/node/integrations/secrets-types.js +0 -0
  239. package/dist/node/integrations/spec.js +21 -0
  240. package/package.json +1029 -0
@@ -0,0 +1,83 @@
1
+ export interface EmailAddress {
2
+ email: string;
3
+ name?: string;
4
+ }
5
+ export interface EmailAttachment {
6
+ id: string;
7
+ filename: string;
8
+ contentType: string;
9
+ sizeBytes?: number;
10
+ data?: Uint8Array;
11
+ downloadUrl?: string;
12
+ }
13
+ export interface EmailOutboundMessage {
14
+ from: EmailAddress;
15
+ to: EmailAddress[];
16
+ cc?: EmailAddress[];
17
+ bcc?: EmailAddress[];
18
+ replyTo?: EmailAddress;
19
+ subject: string;
20
+ textBody?: string;
21
+ htmlBody?: string;
22
+ headers?: Record<string, string>;
23
+ attachments?: EmailAttachment[];
24
+ metadata?: Record<string, string>;
25
+ }
26
+ export interface EmailOutboundResult {
27
+ id: string;
28
+ providerMessageId?: string;
29
+ queuedAt?: Date;
30
+ deliveredAt?: Date;
31
+ }
32
+ export interface EmailThread {
33
+ id: string;
34
+ subject?: string;
35
+ snippet?: string;
36
+ participants: EmailAddress[];
37
+ messages: EmailMessage[];
38
+ updatedAt: Date;
39
+ labels?: string[];
40
+ metadata?: Record<string, string>;
41
+ }
42
+ export interface EmailMessage {
43
+ id: string;
44
+ threadId: string;
45
+ subject?: string;
46
+ from: EmailAddress;
47
+ to: EmailAddress[];
48
+ cc?: EmailAddress[];
49
+ bcc?: EmailAddress[];
50
+ replyTo?: EmailAddress;
51
+ sentAt: Date;
52
+ receivedAt?: Date;
53
+ textBody?: string;
54
+ htmlBody?: string;
55
+ attachments?: EmailAttachment[];
56
+ headers?: Record<string, string>;
57
+ metadata?: Record<string, string>;
58
+ }
59
+ export interface EmailThreadListQuery {
60
+ label?: string;
61
+ query?: string;
62
+ pageSize?: number;
63
+ pageToken?: string;
64
+ includeArchived?: boolean;
65
+ updatedSince?: Date;
66
+ }
67
+ export interface EmailMessagesSinceQuery {
68
+ label?: string;
69
+ since?: Date;
70
+ pageSize?: number;
71
+ pageToken?: string;
72
+ }
73
+ export interface EmailOutboundProvider {
74
+ sendEmail(message: EmailOutboundMessage): Promise<EmailOutboundResult>;
75
+ }
76
+ export interface EmailInboundProvider {
77
+ listThreads(query?: EmailThreadListQuery): Promise<EmailThread[]>;
78
+ getThread(threadId: string): Promise<EmailThread | null>;
79
+ listMessagesSince(query: EmailMessagesSinceQuery): Promise<{
80
+ messages: EmailMessage[];
81
+ nextPageToken?: string;
82
+ }>;
83
+ }
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,21 @@
1
+ export type EmbeddingVector = number[];
2
+ export interface EmbeddingDocument {
3
+ id: string;
4
+ text: string;
5
+ metadata?: Record<string, string | number | boolean>;
6
+ }
7
+ export interface EmbeddingResult {
8
+ id: string;
9
+ vector: EmbeddingVector;
10
+ dimensions: number;
11
+ model: string;
12
+ metadata?: Record<string, string>;
13
+ }
14
+ export interface EmbeddingProvider {
15
+ embedDocuments(documents: EmbeddingDocument[], options?: {
16
+ model?: string;
17
+ }): Promise<EmbeddingResult[]>;
18
+ embedQuery(query: string, options?: {
19
+ model?: string;
20
+ }): Promise<EmbeddingResult>;
21
+ }
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,3 @@
1
+ import { IntegrationSpecRegistry } from '../spec';
2
+ export declare const falIntegrationSpec: import("..").IntegrationSpec;
3
+ export declare function registerFalIntegration(registry: IntegrationSpecRegistry): IntegrationSpecRegistry;
@@ -0,0 +1,112 @@
1
+ // @bun
2
+ // src/integrations/spec.ts
3
+ import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
4
+ var integrationKey = (meta) => `${meta.key}.v${meta.version}`;
5
+
6
+ class IntegrationSpecRegistry extends SpecContractRegistry {
7
+ constructor(items) {
8
+ super("integration", items);
9
+ }
10
+ getByCategory(category) {
11
+ return this.list().filter((spec) => spec.meta.category === category);
12
+ }
13
+ }
14
+ function makeIntegrationSpecKey(meta) {
15
+ return integrationKey(meta);
16
+ }
17
+ var defineIntegration = (spec) => spec;
18
+
19
+ // src/integrations/providers/fal.ts
20
+ import { StabilityEnum } from "@contractspec/lib.contracts-spec/ownership";
21
+ var falIntegrationSpec = defineIntegration({
22
+ meta: {
23
+ key: "ai-voice.fal",
24
+ version: "1.0.0",
25
+ category: "ai-voice",
26
+ title: "Fal Chatterbox Text-to-Speech",
27
+ description: "Fal integration for voice synthesis using Chatterbox text-to-speech models.",
28
+ domain: "ai",
29
+ owners: ["platform.ai"],
30
+ tags: ["voice", "tts", "chatterbox"],
31
+ stability: StabilityEnum.Experimental
32
+ },
33
+ supportedModes: ["byok"],
34
+ capabilities: {
35
+ provides: [{ key: "ai.voice.synthesis", version: "1.0.0" }]
36
+ },
37
+ configSchema: {
38
+ schema: {
39
+ type: "object",
40
+ properties: {
41
+ modelId: {
42
+ type: "string",
43
+ description: "Fal model endpoint identifier (e.g. fal-ai/chatterbox/text-to-speech)."
44
+ },
45
+ defaultVoiceUrl: {
46
+ type: "string",
47
+ description: "Optional reference audio URL used as default voice conditioning input."
48
+ },
49
+ defaultExaggeration: {
50
+ type: "number",
51
+ minimum: 0,
52
+ maximum: 1,
53
+ description: "Optional default exaggeration value for speech output."
54
+ },
55
+ defaultTemperature: {
56
+ type: "number",
57
+ minimum: 0.05,
58
+ maximum: 2,
59
+ description: "Optional default temperature for synthesis requests."
60
+ },
61
+ defaultCfg: {
62
+ type: "number",
63
+ minimum: 0.1,
64
+ maximum: 1,
65
+ description: "Optional default cfg value for synthesis requests."
66
+ },
67
+ pollIntervalMs: {
68
+ type: "number",
69
+ description: "Optional queue polling interval in milliseconds."
70
+ }
71
+ }
72
+ },
73
+ example: {
74
+ modelId: "fal-ai/chatterbox/text-to-speech",
75
+ defaultVoiceUrl: "https://storage.googleapis.com/chatterbox-demo-samples/prompts/male_rickmorty.mp3",
76
+ defaultExaggeration: 0.25,
77
+ defaultTemperature: 0.7,
78
+ defaultCfg: 0.5,
79
+ pollIntervalMs: 1000
80
+ }
81
+ },
82
+ secretSchema: {
83
+ schema: {
84
+ type: "object",
85
+ required: ["apiKey"],
86
+ properties: {
87
+ apiKey: {
88
+ type: "string",
89
+ description: "Fal API key (FAL_KEY)."
90
+ }
91
+ }
92
+ },
93
+ example: {
94
+ apiKey: "key-id:key-secret"
95
+ }
96
+ },
97
+ healthCheck: {
98
+ method: "custom",
99
+ timeoutMs: 7000
100
+ },
101
+ docsUrl: "https://fal.ai/models/fal-ai/chatterbox/text-to-speech/api",
102
+ byokSetup: {
103
+ setupInstructions: "Create a Fal API key and configure the desired voice model endpoint before connecting tenants."
104
+ }
105
+ });
106
+ function registerFalIntegration(registry) {
107
+ return registry.register(falIntegrationSpec);
108
+ }
109
+ export {
110
+ registerFalIntegration,
111
+ falIntegrationSpec
112
+ };
@@ -0,0 +1,3 @@
1
+ import { IntegrationSpecRegistry } from '../spec';
2
+ export declare const fathomIntegrationSpec: import("..").IntegrationSpec;
3
+ export declare function registerFathomIntegration(registry: IntegrationSpecRegistry): IntegrationSpecRegistry;
@@ -0,0 +1,126 @@
1
+ // @bun
2
+ // src/integrations/spec.ts
3
+ import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
4
+ var integrationKey = (meta) => `${meta.key}.v${meta.version}`;
5
+
6
+ class IntegrationSpecRegistry extends SpecContractRegistry {
7
+ constructor(items) {
8
+ super("integration", items);
9
+ }
10
+ getByCategory(category) {
11
+ return this.list().filter((spec) => spec.meta.category === category);
12
+ }
13
+ }
14
+ function makeIntegrationSpecKey(meta) {
15
+ return integrationKey(meta);
16
+ }
17
+ var defineIntegration = (spec) => spec;
18
+
19
+ // src/integrations/providers/fathom.ts
20
+ import { StabilityEnum } from "@contractspec/lib.contracts-spec/ownership";
21
+ var fathomIntegrationSpec = defineIntegration({
22
+ meta: {
23
+ key: "meeting-recorder.fathom",
24
+ version: "1.0.0",
25
+ category: "meeting-recorder",
26
+ title: "Fathom Meeting Recorder",
27
+ description: "Fathom External API for meetings, transcripts, and webhook events.",
28
+ domain: "productivity",
29
+ owners: ["platform.integrations"],
30
+ tags: ["meeting-recorder", "fathom", "transcripts"],
31
+ stability: StabilityEnum.Experimental
32
+ },
33
+ supportedModes: ["byok"],
34
+ capabilities: {
35
+ provides: [
36
+ { key: "meeting-recorder.meetings.read", version: "1.0.0" },
37
+ { key: "meeting-recorder.transcripts.read", version: "1.0.0" },
38
+ { key: "meeting-recorder.webhooks", version: "1.0.0" }
39
+ ]
40
+ },
41
+ configSchema: {
42
+ schema: {
43
+ type: "object",
44
+ properties: {
45
+ baseUrl: {
46
+ type: "string",
47
+ description: "Optional override for the Fathom API base URL. Defaults to https://api.fathom.ai/external/v1."
48
+ },
49
+ webhookUrl: {
50
+ type: "string",
51
+ description: "Webhook destination URL used when registering Fathom webhooks."
52
+ },
53
+ includeTranscript: {
54
+ type: "boolean",
55
+ description: "Include transcript data in Fathom webhook payloads."
56
+ },
57
+ includeSummary: {
58
+ type: "boolean",
59
+ description: "Include summary data in Fathom webhook payloads."
60
+ },
61
+ includeActionItems: {
62
+ type: "boolean",
63
+ description: "Include action items in Fathom webhook payloads."
64
+ },
65
+ includeCrmMatches: {
66
+ type: "boolean",
67
+ description: "Include CRM matches in Fathom webhook payloads."
68
+ },
69
+ triggeredFor: {
70
+ type: "array",
71
+ items: { type: "string" },
72
+ description: "Recording scopes to trigger webhooks for (e.g., my_recordings)."
73
+ }
74
+ }
75
+ },
76
+ example: {
77
+ baseUrl: "https://api.fathom.ai/external/v1",
78
+ webhookUrl: "https://example.com/webhooks/fathom",
79
+ includeTranscript: true,
80
+ includeSummary: true,
81
+ includeActionItems: false,
82
+ includeCrmMatches: false,
83
+ triggeredFor: ["my_recordings"]
84
+ }
85
+ },
86
+ secretSchema: {
87
+ schema: {
88
+ type: "object",
89
+ required: ["apiKey"],
90
+ properties: {
91
+ apiKey: {
92
+ type: "string",
93
+ description: "Fathom API key used in the X-Api-Key header."
94
+ },
95
+ webhookSecret: {
96
+ type: "string",
97
+ description: "Optional webhook secret used to verify Fathom webhook signatures."
98
+ }
99
+ }
100
+ },
101
+ example: {
102
+ apiKey: "fathom-***",
103
+ webhookSecret: "whsec_***"
104
+ }
105
+ },
106
+ healthCheck: {
107
+ method: "list",
108
+ timeoutMs: 8000
109
+ },
110
+ docsUrl: "https://developers.fathom.ai/",
111
+ constraints: {
112
+ rateLimit: {
113
+ rpm: 60
114
+ }
115
+ },
116
+ byokSetup: {
117
+ setupInstructions: "Generate an API key in Fathom settings and optionally configure webhooks for meeting content readiness."
118
+ }
119
+ });
120
+ function registerFathomIntegration(registry) {
121
+ return registry.register(fathomIntegrationSpec);
122
+ }
123
+ export {
124
+ registerFathomIntegration,
125
+ fathomIntegrationSpec
126
+ };
@@ -0,0 +1,3 @@
1
+ import { IntegrationSpecRegistry } from '../spec';
2
+ export declare const firefliesIntegrationSpec: import("..").IntegrationSpec;
3
+ export declare function registerFirefliesIntegration(registry: IntegrationSpecRegistry): IntegrationSpecRegistry;
@@ -0,0 +1,106 @@
1
+ // @bun
2
+ // src/integrations/spec.ts
3
+ import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
4
+ var integrationKey = (meta) => `${meta.key}.v${meta.version}`;
5
+
6
+ class IntegrationSpecRegistry extends SpecContractRegistry {
7
+ constructor(items) {
8
+ super("integration", items);
9
+ }
10
+ getByCategory(category) {
11
+ return this.list().filter((spec) => spec.meta.category === category);
12
+ }
13
+ }
14
+ function makeIntegrationSpecKey(meta) {
15
+ return integrationKey(meta);
16
+ }
17
+ var defineIntegration = (spec) => spec;
18
+
19
+ // src/integrations/providers/fireflies.ts
20
+ import { StabilityEnum } from "@contractspec/lib.contracts-spec/ownership";
21
+ var firefliesIntegrationSpec = defineIntegration({
22
+ meta: {
23
+ key: "meeting-recorder.fireflies",
24
+ version: "1.0.0",
25
+ category: "meeting-recorder",
26
+ title: "Fireflies.ai Meeting Recorder",
27
+ description: "Fireflies GraphQL API for meeting transcripts, metadata, and webhook events.",
28
+ domain: "productivity",
29
+ owners: ["platform.integrations"],
30
+ tags: ["meeting-recorder", "fireflies", "transcripts"],
31
+ stability: StabilityEnum.Experimental
32
+ },
33
+ supportedModes: ["byok"],
34
+ capabilities: {
35
+ provides: [
36
+ { key: "meeting-recorder.meetings.read", version: "1.0.0" },
37
+ { key: "meeting-recorder.transcripts.read", version: "1.0.0" },
38
+ { key: "meeting-recorder.webhooks", version: "1.0.0" }
39
+ ]
40
+ },
41
+ configSchema: {
42
+ schema: {
43
+ type: "object",
44
+ properties: {
45
+ baseUrl: {
46
+ type: "string",
47
+ description: "Optional override for the Fireflies GraphQL endpoint. Defaults to https://api.fireflies.ai/graphql."
48
+ },
49
+ webhookUrl: {
50
+ type: "string",
51
+ description: "Webhook destination URL configured in Fireflies developer settings."
52
+ },
53
+ webhookEvents: {
54
+ type: "array",
55
+ items: { type: "string" },
56
+ description: "Webhook events to subscribe to (e.g., Transcription completed)."
57
+ },
58
+ transcriptsPageSize: {
59
+ type: "number",
60
+ description: "Number of transcripts to request per GraphQL query."
61
+ }
62
+ }
63
+ },
64
+ example: {
65
+ baseUrl: "https://api.fireflies.ai/graphql",
66
+ webhookUrl: "https://example.com/webhooks/fireflies",
67
+ webhookEvents: ["Transcription completed"],
68
+ transcriptsPageSize: 25
69
+ }
70
+ },
71
+ secretSchema: {
72
+ schema: {
73
+ type: "object",
74
+ required: ["apiKey"],
75
+ properties: {
76
+ apiKey: {
77
+ type: "string",
78
+ description: "Fireflies API key for GraphQL requests."
79
+ },
80
+ webhookSecret: {
81
+ type: "string",
82
+ description: "Optional webhook secret used to verify x-hub-signature HMAC payloads."
83
+ }
84
+ }
85
+ },
86
+ example: {
87
+ apiKey: "fireflies-***",
88
+ webhookSecret: "fireflies-webhook-secret"
89
+ }
90
+ },
91
+ healthCheck: {
92
+ method: "custom",
93
+ timeoutMs: 6000
94
+ },
95
+ docsUrl: "https://docs.fireflies.ai/getting-started/introduction",
96
+ byokSetup: {
97
+ setupInstructions: "Create a Fireflies API key and optionally configure webhook settings in Developer Settings."
98
+ }
99
+ });
100
+ function registerFirefliesIntegration(registry) {
101
+ return registry.register(firefliesIntegrationSpec);
102
+ }
103
+ export {
104
+ registerFirefliesIntegration,
105
+ firefliesIntegrationSpec
106
+ };
@@ -0,0 +1,3 @@
1
+ import { IntegrationSpecRegistry } from '../spec';
2
+ export declare const gcsStorageIntegrationSpec: import("..").IntegrationSpec;
3
+ export declare function registerGcsStorageIntegration(registry: IntegrationSpecRegistry): IntegrationSpecRegistry;
@@ -0,0 +1,97 @@
1
+ // @bun
2
+ // src/integrations/spec.ts
3
+ import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
4
+ var integrationKey = (meta) => `${meta.key}.v${meta.version}`;
5
+
6
+ class IntegrationSpecRegistry extends SpecContractRegistry {
7
+ constructor(items) {
8
+ super("integration", items);
9
+ }
10
+ getByCategory(category) {
11
+ return this.list().filter((spec) => spec.meta.category === category);
12
+ }
13
+ }
14
+ function makeIntegrationSpecKey(meta) {
15
+ return integrationKey(meta);
16
+ }
17
+ var defineIntegration = (spec) => spec;
18
+
19
+ // src/integrations/providers/gcs-storage.ts
20
+ import { StabilityEnum } from "@contractspec/lib.contracts-spec/ownership";
21
+ var gcsStorageIntegrationSpec = defineIntegration({
22
+ meta: {
23
+ key: "storage.gcs",
24
+ version: "1.0.0",
25
+ category: "storage",
26
+ title: "Google Cloud Storage Buckets",
27
+ description: "Google Cloud Storage integration for object storage and retrieval.",
28
+ domain: "infrastructure",
29
+ owners: ["platform.infrastructure"],
30
+ tags: ["storage", "gcs", "google-cloud"],
31
+ stability: StabilityEnum.Beta
32
+ },
33
+ supportedModes: ["managed", "byok"],
34
+ capabilities: {
35
+ provides: [{ key: "storage.objects", version: "1.0.0" }]
36
+ },
37
+ configSchema: {
38
+ schema: {
39
+ type: "object",
40
+ required: ["bucket"],
41
+ properties: {
42
+ bucket: {
43
+ type: "string",
44
+ description: "Primary bucket name used for storing objects."
45
+ },
46
+ prefix: {
47
+ type: "string",
48
+ description: "Optional prefix applied to object keys."
49
+ }
50
+ }
51
+ },
52
+ example: {
53
+ bucket: "pfo-tenant-assets",
54
+ prefix: "documents/"
55
+ }
56
+ },
57
+ secretSchema: {
58
+ schema: {
59
+ type: "object",
60
+ properties: {
61
+ type: {
62
+ type: "string",
63
+ description: "Service account type field from Google credentials JSON (if provided)."
64
+ },
65
+ client_email: { type: "string" },
66
+ private_key: { type: "string" },
67
+ project_id: { type: "string" }
68
+ }
69
+ },
70
+ example: {
71
+ type: "service_account",
72
+ client_email: "svc-account@example.iam.gserviceaccount.com",
73
+ private_key: "-----BEGIN PRIVATE KEY-----...",
74
+ project_id: "example-project"
75
+ }
76
+ },
77
+ healthCheck: {
78
+ method: "ping",
79
+ timeoutMs: 4000
80
+ },
81
+ docsUrl: "https://cloud.google.com/storage/docs/apis",
82
+ constraints: {
83
+ quotas: {
84
+ storageGb: 5120
85
+ }
86
+ },
87
+ byokSetup: {
88
+ setupInstructions: "Create a Google Cloud service account with Storage Object Admin role and upload the JSON credentials to the secret store."
89
+ }
90
+ });
91
+ function registerGcsStorageIntegration(registry) {
92
+ return registry.register(gcsStorageIntegrationSpec);
93
+ }
94
+ export {
95
+ registerGcsStorageIntegration,
96
+ gcsStorageIntegrationSpec
97
+ };
@@ -0,0 +1,3 @@
1
+ import { IntegrationSpecRegistry } from '../spec';
2
+ export declare const gmailIntegrationSpec: import("..").IntegrationSpec;
3
+ export declare function registerGmailIntegration(registry: IntegrationSpecRegistry): IntegrationSpecRegistry;
@@ -0,0 +1,109 @@
1
+ // @bun
2
+ // src/integrations/spec.ts
3
+ import { SpecContractRegistry } from "@contractspec/lib.contracts-spec/registry";
4
+ var integrationKey = (meta) => `${meta.key}.v${meta.version}`;
5
+
6
+ class IntegrationSpecRegistry extends SpecContractRegistry {
7
+ constructor(items) {
8
+ super("integration", items);
9
+ }
10
+ getByCategory(category) {
11
+ return this.list().filter((spec) => spec.meta.category === category);
12
+ }
13
+ }
14
+ function makeIntegrationSpecKey(meta) {
15
+ return integrationKey(meta);
16
+ }
17
+ var defineIntegration = (spec) => spec;
18
+
19
+ // src/integrations/providers/gmail.ts
20
+ import { StabilityEnum } from "@contractspec/lib.contracts-spec/ownership";
21
+ var gmailIntegrationSpec = defineIntegration({
22
+ meta: {
23
+ key: "email.gmail",
24
+ version: "1.0.0",
25
+ category: "email",
26
+ title: "Google Gmail API",
27
+ description: "Gmail integration supporting inbound thread ingestion and outbound transactional email.",
28
+ domain: "communications",
29
+ owners: ["platform.messaging"],
30
+ tags: ["email", "gmail"],
31
+ stability: StabilityEnum.Beta
32
+ },
33
+ supportedModes: ["managed", "byok"],
34
+ capabilities: {
35
+ provides: [
36
+ { key: "email.inbound", version: "1.0.0" },
37
+ { key: "email.outbound", version: "1.0.0" }
38
+ ]
39
+ },
40
+ configSchema: {
41
+ schema: {
42
+ type: "object",
43
+ properties: {
44
+ labelIds: {
45
+ type: "array",
46
+ items: { type: "string" },
47
+ description: "Optional list of label IDs to scope inbound sync."
48
+ },
49
+ includeSpamTrash: {
50
+ type: "boolean",
51
+ description: "Whether to include spam or trash messages during sync."
52
+ }
53
+ }
54
+ },
55
+ example: {
56
+ labelIds: ["INBOX"],
57
+ includeSpamTrash: false
58
+ }
59
+ },
60
+ secretSchema: {
61
+ schema: {
62
+ type: "object",
63
+ required: ["clientId", "clientSecret", "refreshToken"],
64
+ properties: {
65
+ clientId: {
66
+ type: "string",
67
+ description: "OAuth client ID for the Google Cloud project."
68
+ },
69
+ clientSecret: {
70
+ type: "string",
71
+ description: "OAuth client secret for the Google Cloud project."
72
+ },
73
+ refreshToken: {
74
+ type: "string",
75
+ description: "OAuth refresh token for delegated Gmail access."
76
+ },
77
+ redirectUri: {
78
+ type: "string",
79
+ description: "Optional redirect URI used when issuing the refresh token."
80
+ }
81
+ }
82
+ },
83
+ example: {
84
+ clientId: "xxx.apps.googleusercontent.com",
85
+ clientSecret: "secret",
86
+ refreshToken: "refresh-token"
87
+ }
88
+ },
89
+ healthCheck: {
90
+ method: "custom",
91
+ timeoutMs: 4000
92
+ },
93
+ docsUrl: "https://developers.google.com/gmail/api",
94
+ constraints: {
95
+ rateLimit: {
96
+ rpm: 600
97
+ }
98
+ },
99
+ byokSetup: {
100
+ setupInstructions: "Create an OAuth consent screen and credentials within Google Cloud Console, then authorize the Gmail scopes and store the resulting refresh token."
101
+ }
102
+ });
103
+ function registerGmailIntegration(registry) {
104
+ return registry.register(gmailIntegrationSpec);
105
+ }
106
+ export {
107
+ registerGmailIntegration,
108
+ gmailIntegrationSpec
109
+ };
@@ -0,0 +1,3 @@
1
+ import { IntegrationSpecRegistry } from '../spec';
2
+ export declare const googleCalendarIntegrationSpec: import("..").IntegrationSpec;
3
+ export declare function registerGoogleCalendarIntegration(registry: IntegrationSpecRegistry): IntegrationSpecRegistry;