@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.
Files changed (33) hide show
  1. package/.turbo/turbo-build.log +33 -33
  2. package/CHANGELOG.md +12 -0
  3. package/dist/browser/connection.sample.js +1 -123
  4. package/dist/browser/docs/index.js +16 -43
  5. package/dist/browser/docs/meeting-recorder-providers.docblock.js +16 -43
  6. package/dist/browser/example.js +1 -33
  7. package/dist/browser/handlers/create-provider.js +1 -67
  8. package/dist/browser/handlers/get-transcript.js +1 -73
  9. package/dist/browser/handlers/list-meetings.js +1 -73
  10. package/dist/browser/handlers/webhook-handler.js +1 -114
  11. package/dist/browser/index.js +18 -351
  12. package/dist/browser/meeting-recorder-providers.feature.js +1 -24
  13. package/dist/connection.sample.js +1 -123
  14. package/dist/docs/index.js +16 -43
  15. package/dist/docs/meeting-recorder-providers.docblock.js +16 -43
  16. package/dist/example.js +1 -33
  17. package/dist/handlers/create-provider.js +1 -67
  18. package/dist/handlers/get-transcript.js +1 -73
  19. package/dist/handlers/list-meetings.js +1 -73
  20. package/dist/handlers/webhook-handler.js +1 -114
  21. package/dist/index.js +18 -351
  22. package/dist/meeting-recorder-providers.feature.js +1 -24
  23. package/dist/node/connection.sample.js +1 -123
  24. package/dist/node/docs/index.js +16 -43
  25. package/dist/node/docs/meeting-recorder-providers.docblock.js +16 -43
  26. package/dist/node/example.js +1 -33
  27. package/dist/node/handlers/create-provider.js +1 -67
  28. package/dist/node/handlers/get-transcript.js +1 -73
  29. package/dist/node/handlers/list-meetings.js +1 -73
  30. package/dist/node/handlers/webhook-handler.js +1 -114
  31. package/dist/node/index.js +18 -351
  32. package/dist/node/meeting-recorder-providers.feature.js +1 -24
  33. package/package.json +7 -7
@@ -2,45 +2,45 @@ $ contractspec-bun-build prebuild
2
2
  $ bun run build:bundle && bun run build:types
3
3
  $ contractspec-bun-build transpile
4
4
  [contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
5
- Bundled 10 modules in 38ms
5
+ Bundled 10 modules in 48ms
6
6
 
7
- ./connection.sample.js 3.53 KB (entry point)
8
- ./index.js 12.11 KB (entry point)
9
- ./meeting-recorder-providers.feature.js 0.79 KB (entry point)
10
- docs/index.js 2.34 KB (entry point)
11
- docs/meeting-recorder-providers.docblock.js 2.34 KB (entry point)
12
- ./example.js 1.1 KB (entry point)
13
- handlers/get-transcript.js 2.88 KB (entry point)
14
- handlers/list-meetings.js 2.87 KB (entry point)
15
- handlers/webhook-handler.js 3.97 KB (entry point)
16
- handlers/create-provider.js 2.68 KB (entry point)
7
+ ./connection.sample.js 2.60 KB (entry point)
8
+ ./index.js 8.59 KB (entry point)
9
+ ./meeting-recorder-providers.feature.js 0.61 KB (entry point)
10
+ docs/index.js 2.0 KB (entry point)
11
+ docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
12
+ ./example.js 0.81 KB (entry point)
13
+ handlers/get-transcript.js 1.80 KB (entry point)
14
+ handlers/list-meetings.js 1.80 KB (entry point)
15
+ handlers/webhook-handler.js 2.37 KB (entry point)
16
+ handlers/create-provider.js 1.75 KB (entry point)
17
17
 
18
18
  [contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
19
- Bundled 10 modules in 27ms
19
+ Bundled 10 modules in 42ms
20
20
 
21
- ./connection.sample.js 3.52 KB (entry point)
22
- ./index.js 12.1 KB (entry point)
23
- ./meeting-recorder-providers.feature.js 0.78 KB (entry point)
24
- docs/index.js 2.34 KB (entry point)
25
- docs/meeting-recorder-providers.docblock.js 2.34 KB (entry point)
26
- ./example.js 1.0 KB (entry point)
27
- handlers/get-transcript.js 2.87 KB (entry point)
28
- handlers/list-meetings.js 2.87 KB (entry point)
29
- handlers/webhook-handler.js 3.97 KB (entry point)
30
- handlers/create-provider.js 2.68 KB (entry point)
21
+ ./connection.sample.js 2.60 KB (entry point)
22
+ ./index.js 8.58 KB (entry point)
23
+ ./meeting-recorder-providers.feature.js 0.60 KB (entry point)
24
+ docs/index.js 2.0 KB (entry point)
25
+ docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
26
+ ./example.js 0.80 KB (entry point)
27
+ handlers/get-transcript.js 1.80 KB (entry point)
28
+ handlers/list-meetings.js 1.79 KB (entry point)
29
+ handlers/webhook-handler.js 2.36 KB (entry point)
30
+ handlers/create-provider.js 1.74 KB (entry point)
31
31
 
32
32
  [contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
33
- Bundled 10 modules in 22ms
33
+ Bundled 10 modules in 33ms
34
34
 
35
- ./connection.sample.js 3.52 KB (entry point)
36
- ./index.js 12.1 KB (entry point)
37
- ./meeting-recorder-providers.feature.js 0.78 KB (entry point)
38
- docs/index.js 2.34 KB (entry point)
39
- docs/meeting-recorder-providers.docblock.js 2.34 KB (entry point)
40
- ./example.js 1.0 KB (entry point)
41
- handlers/get-transcript.js 2.87 KB (entry point)
42
- handlers/list-meetings.js 2.87 KB (entry point)
43
- handlers/webhook-handler.js 3.97 KB (entry point)
44
- handlers/create-provider.js 2.68 KB (entry point)
35
+ ./connection.sample.js 2.60 KB (entry point)
36
+ ./index.js 8.58 KB (entry point)
37
+ ./meeting-recorder-providers.feature.js 0.60 KB (entry point)
38
+ docs/index.js 2.0 KB (entry point)
39
+ docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
40
+ ./example.js 0.80 KB (entry point)
41
+ handlers/get-transcript.js 1.80 KB (entry point)
42
+ handlers/list-meetings.js 1.79 KB (entry point)
43
+ handlers/webhook-handler.js 2.36 KB (entry point)
44
+ handlers/create-provider.js 1.74 KB (entry point)
45
45
 
46
46
  $ contractspec-bun-build types
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @contractspec/example.meeting-recorder-providers
2
2
 
3
+ ## 3.7.18
4
+
5
+ ### Patch Changes
6
+
7
+ - chore: auto-bump internal dependents
8
+ - Updated dependencies because of chore: auto-bump internal dependents
9
+ - Updated dependencies because of Introduce the Builder v3 control plane as a governed authoring layer over external execution providers.
10
+ - Updated dependencies because of Implement ContractSpec Connect as a first-class spec, runtime, and CLI workflow.
11
+ - @contractspec/integration.providers-impls@3.8.10
12
+ - @contractspec/lib.contracts-integrations@3.8.10
13
+ - @contractspec/lib.contracts-spec@5.2.0
14
+
3
15
  ## 3.7.17
4
16
 
5
17
  ### Patch Changes
@@ -1,123 +1 @@
1
- // src/connection.sample.ts
2
- var granolaMeetingRecorderConnection = {
3
- meta: {
4
- id: "conn-granola-demo",
5
- tenantId: "acme-inc",
6
- integrationKey: "meeting-recorder.granola",
7
- integrationVersion: "1",
8
- label: "Granola Meeting Recorder",
9
- environment: "production",
10
- createdAt: "2026-01-01T00:00:00.000Z",
11
- updatedAt: "2026-01-01T00:00:00.000Z"
12
- },
13
- ownershipMode: "byok",
14
- config: {
15
- transport: "api",
16
- baseUrl: "https://public-api.granola.ai",
17
- pageSize: 10
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
- export {
117
- tldvMeetingRecorderConnection,
118
- meetingRecorderSampleConnections,
119
- granolaMeetingRecorderConnection,
120
- granolaMcpMeetingRecorderConnection,
121
- firefliesMeetingRecorderConnection,
122
- fathomMeetingRecorderConnection
123
- };
1
+ 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};
@@ -1,45 +1,18 @@
1
- // src/docs/meeting-recorder-providers.docblock.ts
2
- import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
3
- var blocks = [
4
- {
5
- id: "docs.examples.meeting-recorder-providers",
6
- title: "Meeting Recorder Providers (example)",
7
- summary: "Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",
8
- kind: "reference",
9
- visibility: "public",
10
- route: "/docs/examples/meeting-recorder-providers",
11
- tags: ["meeting-recorder", "integration", "example", "transcripts"],
12
- body: `## What this example shows
13
- ` + `- Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
14
- ` + `- List meetings + fetch transcripts using the MeetingRecorderProvider interface.
15
- ` + `- Webhook verification and normalization into a single event shape.
1
+ import{registerDocBlocks as f}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.
16
5
 
17
- ` + `## Secrets and config
18
- ` + `- apiKey (all providers)
19
- ` + `- Granola MCP: set transport=mcp and provide mcpAccessToken (or apiKey fallback for MCP proxy).
20
- ` + `- webhookSecret (Fireflies and Fathom)
21
- ` + `- baseUrl overrides for sandbox or proxy setups
22
- ` + `- mcpUrl and mcpHeaders for custom MCP routing
23
- ` + `- pageSize / transcriptsPageSize for pagination
24
- ` + `- Fathom options: includeTranscript, includeSummary, includeActionItems, includeCrmMatches, triggeredFor
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
25
14
 
26
- ` + `## Guardrails
27
- ` + `- Keep secrets in a dedicated secret provider.
28
- ` + `- Verify webhook signatures before triggering workflows.
29
- ` + "- Treat transcript ingestion as async workflows, not inline writes."
30
- },
31
- {
32
- id: "docs.examples.meeting-recorder-providers.usage",
33
- title: "Meeting Recorder Providers - Usage",
34
- summary: "How to wire the provider factory and handlers in a runtime.",
35
- kind: "usage",
36
- visibility: "public",
37
- route: "/docs/examples/meeting-recorder-providers/usage",
38
- tags: ["meeting-recorder", "usage"],
39
- body: `## Usage
40
- ` + "- 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
41
- ` + `- Replace the placeholder stores with your app persistence.
42
- ` + "- Record the raw webhook payload for replay or debugging."
43
- }
44
- ];
45
- registerDocBlocks(blocks);
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."}];f(h);
@@ -1,45 +1,18 @@
1
- // src/docs/meeting-recorder-providers.docblock.ts
2
- import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
3
- var blocks = [
4
- {
5
- id: "docs.examples.meeting-recorder-providers",
6
- title: "Meeting Recorder Providers (example)",
7
- summary: "Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",
8
- kind: "reference",
9
- visibility: "public",
10
- route: "/docs/examples/meeting-recorder-providers",
11
- tags: ["meeting-recorder", "integration", "example", "transcripts"],
12
- body: `## What this example shows
13
- ` + `- Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
14
- ` + `- List meetings + fetch transcripts using the MeetingRecorderProvider interface.
15
- ` + `- Webhook verification and normalization into a single event shape.
1
+ import{registerDocBlocks as f}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.
16
5
 
17
- ` + `## Secrets and config
18
- ` + `- apiKey (all providers)
19
- ` + `- Granola MCP: set transport=mcp and provide mcpAccessToken (or apiKey fallback for MCP proxy).
20
- ` + `- webhookSecret (Fireflies and Fathom)
21
- ` + `- baseUrl overrides for sandbox or proxy setups
22
- ` + `- mcpUrl and mcpHeaders for custom MCP routing
23
- ` + `- pageSize / transcriptsPageSize for pagination
24
- ` + `- Fathom options: includeTranscript, includeSummary, includeActionItems, includeCrmMatches, triggeredFor
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
25
14
 
26
- ` + `## Guardrails
27
- ` + `- Keep secrets in a dedicated secret provider.
28
- ` + `- Verify webhook signatures before triggering workflows.
29
- ` + "- Treat transcript ingestion as async workflows, not inline writes."
30
- },
31
- {
32
- id: "docs.examples.meeting-recorder-providers.usage",
33
- title: "Meeting Recorder Providers - Usage",
34
- summary: "How to wire the provider factory and handlers in a runtime.",
35
- kind: "usage",
36
- visibility: "public",
37
- route: "/docs/examples/meeting-recorder-providers/usage",
38
- tags: ["meeting-recorder", "usage"],
39
- body: `## Usage
40
- ` + "- 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
41
- ` + `- Replace the placeholder stores with your app persistence.
42
- ` + "- Record the raw webhook payload for replay or debugging."
43
- }
44
- ];
45
- registerDocBlocks(blocks);
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."}];f(h);
@@ -1,33 +1 @@
1
- // src/example.ts
2
- import { defineExample } from "@contractspec/lib.contracts-spec";
3
- var example = defineExample({
4
- meta: {
5
- key: "meeting-recorder-providers",
6
- version: "1.0.0",
7
- title: "Meeting Recorder Providers",
8
- description: "Multi-provider meeting recorder integration example with list, transcript, and webhook handling.",
9
- kind: "integration",
10
- visibility: "public",
11
- stability: "experimental",
12
- owners: ["@platform.integrations"],
13
- tags: ["meeting-recorder", "transcripts", "webhooks", "integrations"]
14
- },
15
- docs: {
16
- rootDocId: "docs.examples.meeting-recorder-providers",
17
- usageDocId: "docs.examples.meeting-recorder-providers.usage"
18
- },
19
- entrypoints: {
20
- packageName: "@contractspec/example.meeting-recorder-providers",
21
- docs: "./docs"
22
- },
23
- surfaces: {
24
- templates: true,
25
- sandbox: { enabled: true, modes: ["markdown", "specs"] },
26
- studio: { enabled: true, installable: true },
27
- mcp: { enabled: true }
28
- }
29
- });
30
- var example_default = example;
31
- export {
32
- example_default as default
33
- };
1
+ import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({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}}}),q=h;export{q as default};
@@ -1,67 +1 @@
1
- // src/handlers/create-provider.ts
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
- export {
66
- createMeetingRecorderProvider
67
- };
1
+ import{FathomMeetingRecorderProvider as q}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as w}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as k}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as x}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function D(m){let{integrationKey:j,secrets:h,config:b}=m;switch(j){case"meeting-recorder.granola":if(b?.transport==="mcp")return new k({transport:"mcp",mcpUrl:b?.mcpUrl,mcpHeaders:b?.mcpHeaders,mcpAccessToken:h.mcpAccessToken??h.apiKey,pageSize:b?.pageSize});if(!h.apiKey)throw Error("Granola apiKey is required for API transport.");return new k({apiKey:h.apiKey,baseUrl:b?.baseUrl,pageSize:b?.pageSize});case"meeting-recorder.tldv":if(!h.apiKey)throw Error("tl;dv apiKey is required.");return new x({apiKey:h.apiKey,baseUrl:b?.baseUrl,pageSize:b?.pageSize});case"meeting-recorder.fireflies":if(!h.apiKey)throw Error("Fireflies apiKey is required.");return new w({apiKey:h.apiKey,baseUrl:b?.baseUrl,pageSize:b?.transcriptsPageSize??b?.pageSize,webhookSecret:h.webhookSecret});case"meeting-recorder.fathom":if(!h.apiKey)throw Error("Fathom apiKey is required.");return new q({apiKey:h.apiKey,baseUrl:b?.baseUrl,includeTranscript:b?.includeTranscript,includeSummary:b?.includeSummary,includeActionItems:b?.includeActionItems,includeCrmMatches:b?.includeCrmMatches,triggeredFor:b?.triggeredFor,maxPages:b?.maxPages,webhookSecret:h.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${j}`)}}export{D as createMeetingRecorderProvider};
@@ -1,73 +1 @@
1
- // src/handlers/create-provider.ts
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/get-transcript.ts
67
- async function getMeetingRecorderTranscript(input) {
68
- const provider = createMeetingRecorderProvider(input);
69
- return provider.getTranscript(input.params);
70
- }
71
- export {
72
- getMeetingRecorderTranscript
73
- };
1
+ import{FathomMeetingRecorderProvider as m}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as M}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as p}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function d(t){let{integrationKey:a,secrets:e,config:r}=t;switch(a){case"meeting-recorder.granola":if(r?.transport==="mcp")return new p({transport:"mcp",mcpUrl:r?.mcpUrl,mcpHeaders:r?.mcpHeaders,mcpAccessToken:e.mcpAccessToken??e.apiKey,pageSize:r?.pageSize});if(!e.apiKey)throw Error("Granola apiKey is required for API transport.");return new p({apiKey:e.apiKey,baseUrl:r?.baseUrl,pageSize:r?.pageSize});case"meeting-recorder.tldv":if(!e.apiKey)throw Error("tl;dv apiKey is required.");return new R({apiKey:e.apiKey,baseUrl:r?.baseUrl,pageSize:r?.pageSize});case"meeting-recorder.fireflies":if(!e.apiKey)throw Error("Fireflies apiKey is required.");return new M({apiKey:e.apiKey,baseUrl:r?.baseUrl,pageSize:r?.transcriptsPageSize??r?.pageSize,webhookSecret:e.webhookSecret});case"meeting-recorder.fathom":if(!e.apiKey)throw Error("Fathom apiKey is required.");return new m({apiKey:e.apiKey,baseUrl:r?.baseUrl,includeTranscript:r?.includeTranscript,includeSummary:r?.includeSummary,includeActionItems:r?.includeActionItems,includeCrmMatches:r?.includeCrmMatches,triggeredFor:r?.triggeredFor,maxPages:r?.maxPages,webhookSecret:e.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${a}`)}}async function I(t){return d(t).getTranscript(t.params)}export{I as getMeetingRecorderTranscript};
@@ -1,73 +1 @@
1
- // src/handlers/create-provider.ts
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/list-meetings.ts
67
- async function listMeetingRecorderMeetings(input) {
68
- const provider = createMeetingRecorderProvider(input);
69
- return provider.listMeetings(input.params);
70
- }
71
- export {
72
- listMeetingRecorderMeetings
73
- };
1
+ import{FathomMeetingRecorderProvider as p}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as R}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as a}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as i}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function d(r){let{integrationKey:M,secrets:t,config:e}=r;switch(M){case"meeting-recorder.granola":if(e?.transport==="mcp")return new a({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 a({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 i({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.fireflies":if(!t.apiKey)throw Error("Fireflies apiKey is required.");return new R({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: ${M}`)}}async function l(r){return d(r).listMeetings(r.params)}export{l as listMeetingRecorderMeetings};