@contractspec/example.meeting-recorder-providers 3.7.17 → 3.7.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +33 -33
- package/CHANGELOG.md +12 -0
- package/dist/browser/connection.sample.js +1 -123
- package/dist/browser/docs/index.js +16 -43
- package/dist/browser/docs/meeting-recorder-providers.docblock.js +16 -43
- package/dist/browser/example.js +1 -33
- package/dist/browser/handlers/create-provider.js +1 -67
- package/dist/browser/handlers/get-transcript.js +1 -73
- package/dist/browser/handlers/list-meetings.js +1 -73
- package/dist/browser/handlers/webhook-handler.js +1 -114
- package/dist/browser/index.js +18 -351
- package/dist/browser/meeting-recorder-providers.feature.js +1 -24
- package/dist/connection.sample.js +1 -123
- package/dist/docs/index.js +16 -43
- package/dist/docs/meeting-recorder-providers.docblock.js +16 -43
- package/dist/example.js +1 -33
- package/dist/handlers/create-provider.js +1 -67
- package/dist/handlers/get-transcript.js +1 -73
- package/dist/handlers/list-meetings.js +1 -73
- package/dist/handlers/webhook-handler.js +1 -114
- package/dist/index.js +18 -351
- package/dist/meeting-recorder-providers.feature.js +1 -24
- package/dist/node/connection.sample.js +1 -123
- package/dist/node/docs/index.js +16 -43
- package/dist/node/docs/meeting-recorder-providers.docblock.js +16 -43
- package/dist/node/example.js +1 -33
- package/dist/node/handlers/create-provider.js +1 -67
- package/dist/node/handlers/get-transcript.js +1 -73
- package/dist/node/handlers/list-meetings.js +1 -73
- package/dist/node/handlers/webhook-handler.js +1 -114
- package/dist/node/index.js +18 -351
- package/dist/node/meeting-recorder-providers.feature.js +1 -24
- package/package.json +7 -7
|
@@ -1,114 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { FathomMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";
|
|
3
|
-
import { FirefliesMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";
|
|
4
|
-
import { GranolaMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/granola-meeting-recorder";
|
|
5
|
-
import { TldvMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";
|
|
6
|
-
function createMeetingRecorderProvider(input) {
|
|
7
|
-
const { integrationKey, secrets, config } = input;
|
|
8
|
-
switch (integrationKey) {
|
|
9
|
-
case "meeting-recorder.granola":
|
|
10
|
-
if (config?.transport === "mcp") {
|
|
11
|
-
return new GranolaMeetingRecorderProvider({
|
|
12
|
-
transport: "mcp",
|
|
13
|
-
mcpUrl: config?.mcpUrl,
|
|
14
|
-
mcpHeaders: config?.mcpHeaders,
|
|
15
|
-
mcpAccessToken: secrets.mcpAccessToken ?? secrets.apiKey,
|
|
16
|
-
pageSize: config?.pageSize
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
if (!secrets.apiKey) {
|
|
20
|
-
throw new Error("Granola apiKey is required for API transport.");
|
|
21
|
-
}
|
|
22
|
-
return new GranolaMeetingRecorderProvider({
|
|
23
|
-
apiKey: secrets.apiKey,
|
|
24
|
-
baseUrl: config?.baseUrl,
|
|
25
|
-
pageSize: config?.pageSize
|
|
26
|
-
});
|
|
27
|
-
case "meeting-recorder.tldv":
|
|
28
|
-
if (!secrets.apiKey) {
|
|
29
|
-
throw new Error("tl;dv apiKey is required.");
|
|
30
|
-
}
|
|
31
|
-
return new TldvMeetingRecorderProvider({
|
|
32
|
-
apiKey: secrets.apiKey,
|
|
33
|
-
baseUrl: config?.baseUrl,
|
|
34
|
-
pageSize: config?.pageSize
|
|
35
|
-
});
|
|
36
|
-
case "meeting-recorder.fireflies":
|
|
37
|
-
if (!secrets.apiKey) {
|
|
38
|
-
throw new Error("Fireflies apiKey is required.");
|
|
39
|
-
}
|
|
40
|
-
return new FirefliesMeetingRecorderProvider({
|
|
41
|
-
apiKey: secrets.apiKey,
|
|
42
|
-
baseUrl: config?.baseUrl,
|
|
43
|
-
pageSize: config?.transcriptsPageSize ?? config?.pageSize,
|
|
44
|
-
webhookSecret: secrets.webhookSecret
|
|
45
|
-
});
|
|
46
|
-
case "meeting-recorder.fathom":
|
|
47
|
-
if (!secrets.apiKey) {
|
|
48
|
-
throw new Error("Fathom apiKey is required.");
|
|
49
|
-
}
|
|
50
|
-
return new FathomMeetingRecorderProvider({
|
|
51
|
-
apiKey: secrets.apiKey,
|
|
52
|
-
baseUrl: config?.baseUrl,
|
|
53
|
-
includeTranscript: config?.includeTranscript,
|
|
54
|
-
includeSummary: config?.includeSummary,
|
|
55
|
-
includeActionItems: config?.includeActionItems,
|
|
56
|
-
includeCrmMatches: config?.includeCrmMatches,
|
|
57
|
-
triggeredFor: config?.triggeredFor,
|
|
58
|
-
maxPages: config?.maxPages,
|
|
59
|
-
webhookSecret: secrets.webhookSecret
|
|
60
|
-
});
|
|
61
|
-
default:
|
|
62
|
-
throw new Error(`Unsupported meeting recorder provider: ${integrationKey}`);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// src/handlers/webhook-handler.ts
|
|
67
|
-
async function handleMeetingRecorderWebhook(input) {
|
|
68
|
-
const { integrationKey, request } = input;
|
|
69
|
-
const provider = createMeetingRecorderProvider(input);
|
|
70
|
-
const rawBody = await request.text();
|
|
71
|
-
const parsedBody = safeJsonParse(rawBody);
|
|
72
|
-
const webhookRequest = {
|
|
73
|
-
headers: toHeaderRecord(request.headers),
|
|
74
|
-
rawBody,
|
|
75
|
-
parsedBody
|
|
76
|
-
};
|
|
77
|
-
if (provider.verifyWebhook) {
|
|
78
|
-
const verified = await provider.verifyWebhook(webhookRequest);
|
|
79
|
-
if (!verified) {
|
|
80
|
-
return new Response("Invalid webhook signature", { status: 401 });
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
const event = provider.parseWebhook ? await provider.parseWebhook(webhookRequest) : fallbackWebhookEvent(integrationKey, parsedBody ?? rawBody);
|
|
84
|
-
return new Response(JSON.stringify({ status: "ok", event }), {
|
|
85
|
-
status: 200,
|
|
86
|
-
headers: { "Content-Type": "application/json" }
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
function toHeaderRecord(headers) {
|
|
90
|
-
const record = {};
|
|
91
|
-
headers.forEach((value, key) => {
|
|
92
|
-
record[key] = value;
|
|
93
|
-
});
|
|
94
|
-
return record;
|
|
95
|
-
}
|
|
96
|
-
function safeJsonParse(payload) {
|
|
97
|
-
if (!payload)
|
|
98
|
-
return;
|
|
99
|
-
try {
|
|
100
|
-
return JSON.parse(payload);
|
|
101
|
-
} catch {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
function fallbackWebhookEvent(providerKey, payload) {
|
|
106
|
-
return {
|
|
107
|
-
providerKey,
|
|
108
|
-
payload,
|
|
109
|
-
receivedAt: new Date().toISOString()
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
export {
|
|
113
|
-
handleMeetingRecorderWebhook
|
|
114
|
-
};
|
|
1
|
+
import{FathomMeetingRecorderProvider as h}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as k}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as i}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function s(t){let{integrationKey:n,secrets:r,config:e}=t;switch(n){case"meeting-recorder.granola":if(e?.transport==="mcp")return new i({transport:"mcp",mcpUrl:e?.mcpUrl,mcpHeaders:e?.mcpHeaders,mcpAccessToken:r.mcpAccessToken??r.apiKey,pageSize:e?.pageSize});if(!r.apiKey)throw Error("Granola apiKey is required for API transport.");return new i({apiKey:r.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.tldv":if(!r.apiKey)throw Error("tl;dv apiKey is required.");return new R({apiKey:r.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.fireflies":if(!r.apiKey)throw Error("Fireflies apiKey is required.");return new k({apiKey:r.apiKey,baseUrl:e?.baseUrl,pageSize:e?.transcriptsPageSize??e?.pageSize,webhookSecret:r.webhookSecret});case"meeting-recorder.fathom":if(!r.apiKey)throw Error("Fathom apiKey is required.");return new h({apiKey:r.apiKey,baseUrl:e?.baseUrl,includeTranscript:e?.includeTranscript,includeSummary:e?.includeSummary,includeActionItems:e?.includeActionItems,includeCrmMatches:e?.includeCrmMatches,triggeredFor:e?.triggeredFor,maxPages:e?.maxPages,webhookSecret:r.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${n}`)}}async function I(t){let{integrationKey:n,request:r}=t,e=s(t),o=await r.text(),d=b(o),a={headers:p(r.headers),rawBody:o,parsedBody:d};if(e.verifyWebhook){if(!await e.verifyWebhook(a))return new Response("Invalid webhook signature",{status:401})}let u=e.parseWebhook?await e.parseWebhook(a):v(n,d??o);return new Response(JSON.stringify({status:"ok",event:u}),{status:200,headers:{"Content-Type":"application/json"}})}function p(t){let n={};return t.forEach((r,e)=>{n[e]=r}),n}function b(t){if(!t)return;try{return JSON.parse(t)}catch{return}}function v(t,n){return{providerKey:t,payload:n,receivedAt:new Date().toISOString()}}export{I as handleMeetingRecorderWebhook};
|
package/dist/browser/index.js
CHANGED
|
@@ -1,351 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
secretProvider: "vault",
|
|
20
|
-
secretRef: "vault://integrations/acme-inc/conn-granola-demo",
|
|
21
|
-
status: "connected"
|
|
22
|
-
};
|
|
23
|
-
var granolaMcpMeetingRecorderConnection = {
|
|
24
|
-
meta: {
|
|
25
|
-
id: "conn-granola-mcp-demo",
|
|
26
|
-
tenantId: "acme-inc",
|
|
27
|
-
integrationKey: "meeting-recorder.granola",
|
|
28
|
-
integrationVersion: "1",
|
|
29
|
-
label: "Granola MCP Meeting Recorder",
|
|
30
|
-
environment: "production",
|
|
31
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
32
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
33
|
-
},
|
|
34
|
-
ownershipMode: "byok",
|
|
35
|
-
config: {
|
|
36
|
-
transport: "mcp",
|
|
37
|
-
mcpUrl: "https://mcp.granola.ai/mcp",
|
|
38
|
-
pageSize: 10
|
|
39
|
-
},
|
|
40
|
-
secretProvider: "vault",
|
|
41
|
-
secretRef: "vault://integrations/acme-inc/conn-granola-mcp-demo",
|
|
42
|
-
status: "connected"
|
|
43
|
-
};
|
|
44
|
-
var tldvMeetingRecorderConnection = {
|
|
45
|
-
meta: {
|
|
46
|
-
id: "conn-tldv-demo",
|
|
47
|
-
tenantId: "acme-inc",
|
|
48
|
-
integrationKey: "meeting-recorder.tldv",
|
|
49
|
-
integrationVersion: "1",
|
|
50
|
-
label: "tl;dv Meeting Recorder",
|
|
51
|
-
environment: "production",
|
|
52
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
53
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
54
|
-
},
|
|
55
|
-
ownershipMode: "byok",
|
|
56
|
-
config: {
|
|
57
|
-
baseUrl: "https://pasta.tldv.io/v1alpha1",
|
|
58
|
-
pageSize: 25
|
|
59
|
-
},
|
|
60
|
-
secretProvider: "vault",
|
|
61
|
-
secretRef: "vault://integrations/acme-inc/conn-tldv-demo",
|
|
62
|
-
status: "connected"
|
|
63
|
-
};
|
|
64
|
-
var firefliesMeetingRecorderConnection = {
|
|
65
|
-
meta: {
|
|
66
|
-
id: "conn-fireflies-demo",
|
|
67
|
-
tenantId: "acme-inc",
|
|
68
|
-
integrationKey: "meeting-recorder.fireflies",
|
|
69
|
-
integrationVersion: "1",
|
|
70
|
-
label: "Fireflies Meeting Recorder",
|
|
71
|
-
environment: "production",
|
|
72
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
73
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
74
|
-
},
|
|
75
|
-
ownershipMode: "byok",
|
|
76
|
-
config: {
|
|
77
|
-
baseUrl: "https://api.fireflies.ai/graphql",
|
|
78
|
-
transcriptsPageSize: 25
|
|
79
|
-
},
|
|
80
|
-
secretProvider: "vault",
|
|
81
|
-
secretRef: "vault://integrations/acme-inc/conn-fireflies-demo",
|
|
82
|
-
status: "connected"
|
|
83
|
-
};
|
|
84
|
-
var fathomMeetingRecorderConnection = {
|
|
85
|
-
meta: {
|
|
86
|
-
id: "conn-fathom-demo",
|
|
87
|
-
tenantId: "acme-inc",
|
|
88
|
-
integrationKey: "meeting-recorder.fathom",
|
|
89
|
-
integrationVersion: "1",
|
|
90
|
-
label: "Fathom Meeting Recorder",
|
|
91
|
-
environment: "production",
|
|
92
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
93
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
94
|
-
},
|
|
95
|
-
ownershipMode: "byok",
|
|
96
|
-
config: {
|
|
97
|
-
baseUrl: "https://api.fathom.ai/external/v1",
|
|
98
|
-
includeTranscript: true,
|
|
99
|
-
includeSummary: true,
|
|
100
|
-
includeActionItems: false,
|
|
101
|
-
includeCrmMatches: false,
|
|
102
|
-
triggeredFor: ["my_recordings"],
|
|
103
|
-
maxPages: 5
|
|
104
|
-
},
|
|
105
|
-
secretProvider: "vault",
|
|
106
|
-
secretRef: "vault://integrations/acme-inc/conn-fathom-demo",
|
|
107
|
-
status: "connected"
|
|
108
|
-
};
|
|
109
|
-
var meetingRecorderSampleConnections = [
|
|
110
|
-
granolaMeetingRecorderConnection,
|
|
111
|
-
granolaMcpMeetingRecorderConnection,
|
|
112
|
-
tldvMeetingRecorderConnection,
|
|
113
|
-
firefliesMeetingRecorderConnection,
|
|
114
|
-
fathomMeetingRecorderConnection
|
|
115
|
-
];
|
|
116
|
-
|
|
117
|
-
// src/docs/meeting-recorder-providers.docblock.ts
|
|
118
|
-
import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
|
|
119
|
-
var blocks = [
|
|
120
|
-
{
|
|
121
|
-
id: "docs.examples.meeting-recorder-providers",
|
|
122
|
-
title: "Meeting Recorder Providers (example)",
|
|
123
|
-
summary: "Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",
|
|
124
|
-
kind: "reference",
|
|
125
|
-
visibility: "public",
|
|
126
|
-
route: "/docs/examples/meeting-recorder-providers",
|
|
127
|
-
tags: ["meeting-recorder", "integration", "example", "transcripts"],
|
|
128
|
-
body: `## What this example shows
|
|
129
|
-
` + `- Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
|
|
130
|
-
` + `- List meetings + fetch transcripts using the MeetingRecorderProvider interface.
|
|
131
|
-
` + `- Webhook verification and normalization into a single event shape.
|
|
132
|
-
|
|
133
|
-
` + `## Secrets and config
|
|
134
|
-
` + `- apiKey (all providers)
|
|
135
|
-
` + `- Granola MCP: set transport=mcp and provide mcpAccessToken (or apiKey fallback for MCP proxy).
|
|
136
|
-
` + `- webhookSecret (Fireflies and Fathom)
|
|
137
|
-
` + `- baseUrl overrides for sandbox or proxy setups
|
|
138
|
-
` + `- mcpUrl and mcpHeaders for custom MCP routing
|
|
139
|
-
` + `- pageSize / transcriptsPageSize for pagination
|
|
140
|
-
` + `- Fathom options: includeTranscript, includeSummary, includeActionItems, includeCrmMatches, triggeredFor
|
|
141
|
-
|
|
142
|
-
` + `## Guardrails
|
|
143
|
-
` + `- Keep secrets in a dedicated secret provider.
|
|
144
|
-
` + `- Verify webhook signatures before triggering workflows.
|
|
145
|
-
` + "- Treat transcript ingestion as async workflows, not inline writes."
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
id: "docs.examples.meeting-recorder-providers.usage",
|
|
149
|
-
title: "Meeting Recorder Providers - Usage",
|
|
150
|
-
summary: "How to wire the provider factory and handlers in a runtime.",
|
|
151
|
-
kind: "usage",
|
|
152
|
-
visibility: "public",
|
|
153
|
-
route: "/docs/examples/meeting-recorder-providers/usage",
|
|
154
|
-
tags: ["meeting-recorder", "usage"],
|
|
155
|
-
body: `## Usage
|
|
156
|
-
` + "- Call `createMeetingRecorderProvider` with an integration key, secrets, and config.\n" + "- Use `listMeetingRecorderMeetings` to fetch metadata pages.\n" + "- Use `getMeetingRecorderTranscript` to fetch transcript content.\n" + "- Wire `handleMeetingRecorderWebhook` to your webhook endpoint.\n\n" + `## Notes
|
|
157
|
-
` + `- Replace the placeholder stores with your app persistence.
|
|
158
|
-
` + "- Record the raw webhook payload for replay or debugging."
|
|
159
|
-
}
|
|
160
|
-
];
|
|
161
|
-
registerDocBlocks(blocks);
|
|
162
|
-
// src/example.ts
|
|
163
|
-
import { defineExample } from "@contractspec/lib.contracts-spec";
|
|
164
|
-
var example = defineExample({
|
|
165
|
-
meta: {
|
|
166
|
-
key: "meeting-recorder-providers",
|
|
167
|
-
version: "1.0.0",
|
|
168
|
-
title: "Meeting Recorder Providers",
|
|
169
|
-
description: "Multi-provider meeting recorder integration example with list, transcript, and webhook handling.",
|
|
170
|
-
kind: "integration",
|
|
171
|
-
visibility: "public",
|
|
172
|
-
stability: "experimental",
|
|
173
|
-
owners: ["@platform.integrations"],
|
|
174
|
-
tags: ["meeting-recorder", "transcripts", "webhooks", "integrations"]
|
|
175
|
-
},
|
|
176
|
-
docs: {
|
|
177
|
-
rootDocId: "docs.examples.meeting-recorder-providers",
|
|
178
|
-
usageDocId: "docs.examples.meeting-recorder-providers.usage"
|
|
179
|
-
},
|
|
180
|
-
entrypoints: {
|
|
181
|
-
packageName: "@contractspec/example.meeting-recorder-providers",
|
|
182
|
-
docs: "./docs"
|
|
183
|
-
},
|
|
184
|
-
surfaces: {
|
|
185
|
-
templates: true,
|
|
186
|
-
sandbox: { enabled: true, modes: ["markdown", "specs"] },
|
|
187
|
-
studio: { enabled: true, installable: true },
|
|
188
|
-
mcp: { enabled: true }
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
var example_default = example;
|
|
192
|
-
|
|
193
|
-
// src/handlers/create-provider.ts
|
|
194
|
-
import { FathomMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";
|
|
195
|
-
import { FirefliesMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";
|
|
196
|
-
import { GranolaMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/granola-meeting-recorder";
|
|
197
|
-
import { TldvMeetingRecorderProvider } from "@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";
|
|
198
|
-
function createMeetingRecorderProvider(input) {
|
|
199
|
-
const { integrationKey, secrets, config } = input;
|
|
200
|
-
switch (integrationKey) {
|
|
201
|
-
case "meeting-recorder.granola":
|
|
202
|
-
if (config?.transport === "mcp") {
|
|
203
|
-
return new GranolaMeetingRecorderProvider({
|
|
204
|
-
transport: "mcp",
|
|
205
|
-
mcpUrl: config?.mcpUrl,
|
|
206
|
-
mcpHeaders: config?.mcpHeaders,
|
|
207
|
-
mcpAccessToken: secrets.mcpAccessToken ?? secrets.apiKey,
|
|
208
|
-
pageSize: config?.pageSize
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
if (!secrets.apiKey) {
|
|
212
|
-
throw new Error("Granola apiKey is required for API transport.");
|
|
213
|
-
}
|
|
214
|
-
return new GranolaMeetingRecorderProvider({
|
|
215
|
-
apiKey: secrets.apiKey,
|
|
216
|
-
baseUrl: config?.baseUrl,
|
|
217
|
-
pageSize: config?.pageSize
|
|
218
|
-
});
|
|
219
|
-
case "meeting-recorder.tldv":
|
|
220
|
-
if (!secrets.apiKey) {
|
|
221
|
-
throw new Error("tl;dv apiKey is required.");
|
|
222
|
-
}
|
|
223
|
-
return new TldvMeetingRecorderProvider({
|
|
224
|
-
apiKey: secrets.apiKey,
|
|
225
|
-
baseUrl: config?.baseUrl,
|
|
226
|
-
pageSize: config?.pageSize
|
|
227
|
-
});
|
|
228
|
-
case "meeting-recorder.fireflies":
|
|
229
|
-
if (!secrets.apiKey) {
|
|
230
|
-
throw new Error("Fireflies apiKey is required.");
|
|
231
|
-
}
|
|
232
|
-
return new FirefliesMeetingRecorderProvider({
|
|
233
|
-
apiKey: secrets.apiKey,
|
|
234
|
-
baseUrl: config?.baseUrl,
|
|
235
|
-
pageSize: config?.transcriptsPageSize ?? config?.pageSize,
|
|
236
|
-
webhookSecret: secrets.webhookSecret
|
|
237
|
-
});
|
|
238
|
-
case "meeting-recorder.fathom":
|
|
239
|
-
if (!secrets.apiKey) {
|
|
240
|
-
throw new Error("Fathom apiKey is required.");
|
|
241
|
-
}
|
|
242
|
-
return new FathomMeetingRecorderProvider({
|
|
243
|
-
apiKey: secrets.apiKey,
|
|
244
|
-
baseUrl: config?.baseUrl,
|
|
245
|
-
includeTranscript: config?.includeTranscript,
|
|
246
|
-
includeSummary: config?.includeSummary,
|
|
247
|
-
includeActionItems: config?.includeActionItems,
|
|
248
|
-
includeCrmMatches: config?.includeCrmMatches,
|
|
249
|
-
triggeredFor: config?.triggeredFor,
|
|
250
|
-
maxPages: config?.maxPages,
|
|
251
|
-
webhookSecret: secrets.webhookSecret
|
|
252
|
-
});
|
|
253
|
-
default:
|
|
254
|
-
throw new Error(`Unsupported meeting recorder provider: ${integrationKey}`);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// src/handlers/get-transcript.ts
|
|
259
|
-
async function getMeetingRecorderTranscript(input) {
|
|
260
|
-
const provider = createMeetingRecorderProvider(input);
|
|
261
|
-
return provider.getTranscript(input.params);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// src/handlers/list-meetings.ts
|
|
265
|
-
async function listMeetingRecorderMeetings(input) {
|
|
266
|
-
const provider = createMeetingRecorderProvider(input);
|
|
267
|
-
return provider.listMeetings(input.params);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// src/handlers/webhook-handler.ts
|
|
271
|
-
async function handleMeetingRecorderWebhook(input) {
|
|
272
|
-
const { integrationKey, request } = input;
|
|
273
|
-
const provider = createMeetingRecorderProvider(input);
|
|
274
|
-
const rawBody = await request.text();
|
|
275
|
-
const parsedBody = safeJsonParse(rawBody);
|
|
276
|
-
const webhookRequest = {
|
|
277
|
-
headers: toHeaderRecord(request.headers),
|
|
278
|
-
rawBody,
|
|
279
|
-
parsedBody
|
|
280
|
-
};
|
|
281
|
-
if (provider.verifyWebhook) {
|
|
282
|
-
const verified = await provider.verifyWebhook(webhookRequest);
|
|
283
|
-
if (!verified) {
|
|
284
|
-
return new Response("Invalid webhook signature", { status: 401 });
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
const event = provider.parseWebhook ? await provider.parseWebhook(webhookRequest) : fallbackWebhookEvent(integrationKey, parsedBody ?? rawBody);
|
|
288
|
-
return new Response(JSON.stringify({ status: "ok", event }), {
|
|
289
|
-
status: 200,
|
|
290
|
-
headers: { "Content-Type": "application/json" }
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
function toHeaderRecord(headers) {
|
|
294
|
-
const record = {};
|
|
295
|
-
headers.forEach((value, key) => {
|
|
296
|
-
record[key] = value;
|
|
297
|
-
});
|
|
298
|
-
return record;
|
|
299
|
-
}
|
|
300
|
-
function safeJsonParse(payload) {
|
|
301
|
-
if (!payload)
|
|
302
|
-
return;
|
|
303
|
-
try {
|
|
304
|
-
return JSON.parse(payload);
|
|
305
|
-
} catch {
|
|
306
|
-
return;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
function fallbackWebhookEvent(providerKey, payload) {
|
|
310
|
-
return {
|
|
311
|
-
providerKey,
|
|
312
|
-
payload,
|
|
313
|
-
receivedAt: new Date().toISOString()
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// src/meeting-recorder-providers.feature.ts
|
|
318
|
-
import { defineFeature } from "@contractspec/lib.contracts-spec";
|
|
319
|
-
var MeetingRecorderProvidersFeature = defineFeature({
|
|
320
|
-
meta: {
|
|
321
|
-
key: "meeting-recorder-providers",
|
|
322
|
-
version: "1.0.0",
|
|
323
|
-
title: "Meeting Recorder Providers",
|
|
324
|
-
description: "Meeting recorder provider integration with transcripts and webhook handling",
|
|
325
|
-
domain: "integration",
|
|
326
|
-
owners: ["@examples"],
|
|
327
|
-
tags: ["meeting", "recorder", "transcripts", "webhooks"],
|
|
328
|
-
stability: "experimental"
|
|
329
|
-
},
|
|
330
|
-
integrations: [
|
|
331
|
-
{ key: "meeting-recorder.integration.provider", version: "1.0.0" }
|
|
332
|
-
],
|
|
333
|
-
docs: [
|
|
334
|
-
"docs.examples.meeting-recorder-providers",
|
|
335
|
-
"docs.examples.meeting-recorder-providers.usage"
|
|
336
|
-
]
|
|
337
|
-
});
|
|
338
|
-
export {
|
|
339
|
-
tldvMeetingRecorderConnection,
|
|
340
|
-
meetingRecorderSampleConnections,
|
|
341
|
-
listMeetingRecorderMeetings,
|
|
342
|
-
handleMeetingRecorderWebhook,
|
|
343
|
-
granolaMeetingRecorderConnection,
|
|
344
|
-
granolaMcpMeetingRecorderConnection,
|
|
345
|
-
getMeetingRecorderTranscript,
|
|
346
|
-
firefliesMeetingRecorderConnection,
|
|
347
|
-
fathomMeetingRecorderConnection,
|
|
348
|
-
example_default as example,
|
|
349
|
-
createMeetingRecorderProvider,
|
|
350
|
-
MeetingRecorderProvidersFeature
|
|
351
|
-
};
|
|
1
|
+
var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},R={meta:{id:"conn-granola-mcp-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola MCP Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"mcp",mcpUrl:"https://mcp.granola.ai/mcp",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-mcp-demo",status:"connected"},M={meta:{id:"conn-tldv-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.tldv",integrationVersion:"1",label:"tl;dv Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://pasta.tldv.io/v1alpha1",pageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-tldv-demo",status:"connected"},c={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},q=[u,R,M,c,g];import{registerDocBlocks as v}from"@contractspec/lib.contracts-spec/docs";var h=[{id:"docs.examples.meeting-recorder-providers",title:"Meeting Recorder Providers (example)",summary:"Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",kind:"reference",visibility:"public",route:"/docs/examples/meeting-recorder-providers",tags:["meeting-recorder","integration","example","transcripts"],body:`## What this example shows
|
|
2
|
+
- Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
|
|
3
|
+
- List meetings + fetch transcripts using the MeetingRecorderProvider interface.
|
|
4
|
+
- Webhook verification and normalization into a single event shape.
|
|
5
|
+
|
|
6
|
+
## Secrets and config
|
|
7
|
+
- apiKey (all providers)
|
|
8
|
+
- Granola MCP: set transport=mcp and provide mcpAccessToken (or apiKey fallback for MCP proxy).
|
|
9
|
+
- webhookSecret (Fireflies and Fathom)
|
|
10
|
+
- baseUrl overrides for sandbox or proxy setups
|
|
11
|
+
- mcpUrl and mcpHeaders for custom MCP routing
|
|
12
|
+
- pageSize / transcriptsPageSize for pagination
|
|
13
|
+
- Fathom options: includeTranscript, includeSummary, includeActionItems, includeCrmMatches, triggeredFor
|
|
14
|
+
|
|
15
|
+
## Guardrails
|
|
16
|
+
- Keep secrets in a dedicated secret provider.
|
|
17
|
+
- Verify webhook signatures before triggering workflows.
|
|
18
|
+
- Treat transcript ingestion as async workflows, not inline writes.`},{id:"docs.examples.meeting-recorder-providers.usage",title:"Meeting Recorder Providers - Usage",summary:"How to wire the provider factory and handlers in a runtime.",kind:"usage",visibility:"public",route:"/docs/examples/meeting-recorder-providers/usage",tags:["meeting-recorder","usage"],body:"## Usage\n- Call `createMeetingRecorderProvider` with an integration key, secrets, and config.\n- Use `listMeetingRecorderMeetings` to fetch metadata pages.\n- Use `getMeetingRecorderTranscript` to fetch transcript content.\n- Wire `handleMeetingRecorderWebhook` to your webhook endpoint.\n\n## Notes\n- Replace the placeholder stores with your app persistence.\n- Record the raw webhook payload for replay or debugging."}];v(h);import{defineExample as y}from"@contractspec/lib.contracts-spec";var m=y({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Multi-provider meeting recorder integration example with list, transcript, and webhook handling.",kind:"integration",visibility:"public",stability:"experimental",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts","webhooks","integrations"]},docs:{rootDocId:"docs.examples.meeting-recorder-providers",usageDocId:"docs.examples.meeting-recorder-providers.usage"},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),k=m;import{FathomMeetingRecorderProvider as P}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as b}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function o(r){let{integrationKey:n,secrets:t,config:e}=r;switch(n){case"meeting-recorder.granola":if(e?.transport==="mcp")return new s({transport:"mcp",mcpUrl:e?.mcpUrl,mcpHeaders:e?.mcpHeaders,mcpAccessToken:t.mcpAccessToken??t.apiKey,pageSize:e?.pageSize});if(!t.apiKey)throw Error("Granola apiKey is required for API transport.");return new s({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.tldv":if(!t.apiKey)throw Error("tl;dv apiKey is required.");return new b({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.fireflies":if(!t.apiKey)throw Error("Fireflies apiKey is required.");return new I({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.transcriptsPageSize??e?.pageSize,webhookSecret:t.webhookSecret});case"meeting-recorder.fathom":if(!t.apiKey)throw Error("Fathom apiKey is required.");return new P({apiKey:t.apiKey,baseUrl:e?.baseUrl,includeTranscript:e?.includeTranscript,includeSummary:e?.includeSummary,includeActionItems:e?.includeActionItems,includeCrmMatches:e?.includeCrmMatches,triggeredFor:e?.triggeredFor,maxPages:e?.maxPages,webhookSecret:t.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${n}`)}}async function A(r){return o(r).getTranscript(r.params)}async function C(r){return o(r).listMeetings(r.params)}async function U(r){let{integrationKey:n,request:t}=r,e=o(r),i=await t.text(),a=W(i),d={headers:w(t.headers),rawBody:i,parsedBody:a};if(e.verifyWebhook){if(!await e.verifyWebhook(d))return new Response("Invalid webhook signature",{status:401})}let p=e.parseWebhook?await e.parseWebhook(d):f(n,a??i);return new Response(JSON.stringify({status:"ok",event:p}),{status:200,headers:{"Content-Type":"application/json"}})}function w(r){let n={};return r.forEach((t,e)=>{n[e]=t}),n}function W(r){if(!r)return;try{return JSON.parse(r)}catch{return}}function f(r,n){return{providerKey:r,payload:n,receivedAt:new Date().toISOString()}}import{defineFeature as T}from"@contractspec/lib.contracts-spec";var Y=T({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{M as tldvMeetingRecorderConnection,q as meetingRecorderSampleConnections,C as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,R as granolaMcpMeetingRecorderConnection,A as getMeetingRecorderTranscript,c as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,k as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature};
|
|
@@ -1,24 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { defineFeature } from "@contractspec/lib.contracts-spec";
|
|
3
|
-
var MeetingRecorderProvidersFeature = defineFeature({
|
|
4
|
-
meta: {
|
|
5
|
-
key: "meeting-recorder-providers",
|
|
6
|
-
version: "1.0.0",
|
|
7
|
-
title: "Meeting Recorder Providers",
|
|
8
|
-
description: "Meeting recorder provider integration with transcripts and webhook handling",
|
|
9
|
-
domain: "integration",
|
|
10
|
-
owners: ["@examples"],
|
|
11
|
-
tags: ["meeting", "recorder", "transcripts", "webhooks"],
|
|
12
|
-
stability: "experimental"
|
|
13
|
-
},
|
|
14
|
-
integrations: [
|
|
15
|
-
{ key: "meeting-recorder.integration.provider", version: "1.0.0" }
|
|
16
|
-
],
|
|
17
|
-
docs: [
|
|
18
|
-
"docs.examples.meeting-recorder-providers",
|
|
19
|
-
"docs.examples.meeting-recorder-providers.usage"
|
|
20
|
-
]
|
|
21
|
-
});
|
|
22
|
-
export {
|
|
23
|
-
MeetingRecorderProvidersFeature
|
|
24
|
-
};
|
|
1
|
+
import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
|
|
@@ -1,124 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
var granolaMeetingRecorderConnection = {
|
|
4
|
-
meta: {
|
|
5
|
-
id: "conn-granola-demo",
|
|
6
|
-
tenantId: "acme-inc",
|
|
7
|
-
integrationKey: "meeting-recorder.granola",
|
|
8
|
-
integrationVersion: "1",
|
|
9
|
-
label: "Granola Meeting Recorder",
|
|
10
|
-
environment: "production",
|
|
11
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
12
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
13
|
-
},
|
|
14
|
-
ownershipMode: "byok",
|
|
15
|
-
config: {
|
|
16
|
-
transport: "api",
|
|
17
|
-
baseUrl: "https://public-api.granola.ai",
|
|
18
|
-
pageSize: 10
|
|
19
|
-
},
|
|
20
|
-
secretProvider: "vault",
|
|
21
|
-
secretRef: "vault://integrations/acme-inc/conn-granola-demo",
|
|
22
|
-
status: "connected"
|
|
23
|
-
};
|
|
24
|
-
var granolaMcpMeetingRecorderConnection = {
|
|
25
|
-
meta: {
|
|
26
|
-
id: "conn-granola-mcp-demo",
|
|
27
|
-
tenantId: "acme-inc",
|
|
28
|
-
integrationKey: "meeting-recorder.granola",
|
|
29
|
-
integrationVersion: "1",
|
|
30
|
-
label: "Granola MCP Meeting Recorder",
|
|
31
|
-
environment: "production",
|
|
32
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
33
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
34
|
-
},
|
|
35
|
-
ownershipMode: "byok",
|
|
36
|
-
config: {
|
|
37
|
-
transport: "mcp",
|
|
38
|
-
mcpUrl: "https://mcp.granola.ai/mcp",
|
|
39
|
-
pageSize: 10
|
|
40
|
-
},
|
|
41
|
-
secretProvider: "vault",
|
|
42
|
-
secretRef: "vault://integrations/acme-inc/conn-granola-mcp-demo",
|
|
43
|
-
status: "connected"
|
|
44
|
-
};
|
|
45
|
-
var tldvMeetingRecorderConnection = {
|
|
46
|
-
meta: {
|
|
47
|
-
id: "conn-tldv-demo",
|
|
48
|
-
tenantId: "acme-inc",
|
|
49
|
-
integrationKey: "meeting-recorder.tldv",
|
|
50
|
-
integrationVersion: "1",
|
|
51
|
-
label: "tl;dv Meeting Recorder",
|
|
52
|
-
environment: "production",
|
|
53
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
54
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
55
|
-
},
|
|
56
|
-
ownershipMode: "byok",
|
|
57
|
-
config: {
|
|
58
|
-
baseUrl: "https://pasta.tldv.io/v1alpha1",
|
|
59
|
-
pageSize: 25
|
|
60
|
-
},
|
|
61
|
-
secretProvider: "vault",
|
|
62
|
-
secretRef: "vault://integrations/acme-inc/conn-tldv-demo",
|
|
63
|
-
status: "connected"
|
|
64
|
-
};
|
|
65
|
-
var firefliesMeetingRecorderConnection = {
|
|
66
|
-
meta: {
|
|
67
|
-
id: "conn-fireflies-demo",
|
|
68
|
-
tenantId: "acme-inc",
|
|
69
|
-
integrationKey: "meeting-recorder.fireflies",
|
|
70
|
-
integrationVersion: "1",
|
|
71
|
-
label: "Fireflies Meeting Recorder",
|
|
72
|
-
environment: "production",
|
|
73
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
74
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
75
|
-
},
|
|
76
|
-
ownershipMode: "byok",
|
|
77
|
-
config: {
|
|
78
|
-
baseUrl: "https://api.fireflies.ai/graphql",
|
|
79
|
-
transcriptsPageSize: 25
|
|
80
|
-
},
|
|
81
|
-
secretProvider: "vault",
|
|
82
|
-
secretRef: "vault://integrations/acme-inc/conn-fireflies-demo",
|
|
83
|
-
status: "connected"
|
|
84
|
-
};
|
|
85
|
-
var fathomMeetingRecorderConnection = {
|
|
86
|
-
meta: {
|
|
87
|
-
id: "conn-fathom-demo",
|
|
88
|
-
tenantId: "acme-inc",
|
|
89
|
-
integrationKey: "meeting-recorder.fathom",
|
|
90
|
-
integrationVersion: "1",
|
|
91
|
-
label: "Fathom Meeting Recorder",
|
|
92
|
-
environment: "production",
|
|
93
|
-
createdAt: "2026-01-01T00:00:00.000Z",
|
|
94
|
-
updatedAt: "2026-01-01T00:00:00.000Z"
|
|
95
|
-
},
|
|
96
|
-
ownershipMode: "byok",
|
|
97
|
-
config: {
|
|
98
|
-
baseUrl: "https://api.fathom.ai/external/v1",
|
|
99
|
-
includeTranscript: true,
|
|
100
|
-
includeSummary: true,
|
|
101
|
-
includeActionItems: false,
|
|
102
|
-
includeCrmMatches: false,
|
|
103
|
-
triggeredFor: ["my_recordings"],
|
|
104
|
-
maxPages: 5
|
|
105
|
-
},
|
|
106
|
-
secretProvider: "vault",
|
|
107
|
-
secretRef: "vault://integrations/acme-inc/conn-fathom-demo",
|
|
108
|
-
status: "connected"
|
|
109
|
-
};
|
|
110
|
-
var meetingRecorderSampleConnections = [
|
|
111
|
-
granolaMeetingRecorderConnection,
|
|
112
|
-
granolaMcpMeetingRecorderConnection,
|
|
113
|
-
tldvMeetingRecorderConnection,
|
|
114
|
-
firefliesMeetingRecorderConnection,
|
|
115
|
-
fathomMeetingRecorderConnection
|
|
116
|
-
];
|
|
117
|
-
export {
|
|
118
|
-
tldvMeetingRecorderConnection,
|
|
119
|
-
meetingRecorderSampleConnections,
|
|
120
|
-
granolaMeetingRecorderConnection,
|
|
121
|
-
granolaMcpMeetingRecorderConnection,
|
|
122
|
-
firefliesMeetingRecorderConnection,
|
|
123
|
-
fathomMeetingRecorderConnection
|
|
124
|
-
};
|
|
2
|
+
var b={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},f={meta:{id:"conn-granola-mcp-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola MCP Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"mcp",mcpUrl:"https://mcp.granola.ai/mcp",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-mcp-demo",status:"connected"},h={meta:{id:"conn-tldv-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.tldv",integrationVersion:"1",label:"tl;dv Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://pasta.tldv.io/v1alpha1",pageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-tldv-demo",status:"connected"},j={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},k={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},m=[b,f,h,j,k];export{h as tldvMeetingRecorderConnection,m as meetingRecorderSampleConnections,b as granolaMeetingRecorderConnection,f as granolaMcpMeetingRecorderConnection,j as firefliesMeetingRecorderConnection,k as fathomMeetingRecorderConnection};
|