@contractspec/example.meeting-recorder-providers 3.7.24 → 3.7.25

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.
@@ -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 34ms
5
+ Bundled 10 modules in 15ms
6
6
 
7
7
  ./connection.sample.js 2.60 KB (entry point)
8
- ./index.js 8.50 KB (entry point)
8
+ ./index.js 8.54 KB (entry point)
9
9
  ./meeting-recorder-providers.feature.js 0.62 KB (entry point)
10
10
  docs/index.js 2.0 KB (entry point)
11
11
  docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
12
12
  ./example.js 0.71 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)
13
+ handlers/get-transcript.js 1.84 KB (entry point)
14
+ handlers/list-meetings.js 1.84 KB (entry point)
15
+ handlers/webhook-handler.js 2.41 KB (entry point)
16
+ handlers/create-provider.js 1.79 KB (entry point)
17
17
 
18
18
  [contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
19
- Bundled 10 modules in 26ms
19
+ Bundled 10 modules in 40ms
20
20
 
21
21
  ./connection.sample.js 2.60 KB (entry point)
22
- ./index.js 8.49 KB (entry point)
22
+ ./index.js 8.53 KB (entry point)
23
23
  ./meeting-recorder-providers.feature.js 0.61 KB (entry point)
24
24
  docs/index.js 2.0 KB (entry point)
25
25
  docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
26
26
  ./example.js 0.70 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)
27
+ handlers/get-transcript.js 1.84 KB (entry point)
28
+ handlers/list-meetings.js 1.83 KB (entry point)
29
+ handlers/webhook-handler.js 2.40 KB (entry point)
30
+ handlers/create-provider.js 1.78 KB (entry point)
31
31
 
32
32
  [contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
33
- Bundled 10 modules in 37ms
33
+ Bundled 10 modules in 34ms
34
34
 
35
35
  ./connection.sample.js 2.60 KB (entry point)
36
- ./index.js 8.49 KB (entry point)
36
+ ./index.js 8.53 KB (entry point)
37
37
  ./meeting-recorder-providers.feature.js 0.61 KB (entry point)
38
38
  docs/index.js 2.0 KB (entry point)
39
39
  docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
40
40
  ./example.js 0.70 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)
41
+ handlers/get-transcript.js 1.84 KB (entry point)
42
+ handlers/list-meetings.js 1.83 KB (entry point)
43
+ handlers/webhook-handler.js 2.40 KB (entry point)
44
+ handlers/create-provider.js 1.78 KB (entry point)
45
45
 
46
46
  $ contractspec-bun-build types
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @contractspec/example.meeting-recorder-providers
2
2
 
3
+ ## 3.7.25
4
+
5
+ ### Patch Changes
6
+
7
+ - Split provider implementations into targeted integration packages while preserving the legacy providers-impls facade.
8
+ - Packages: @contractspec/integration.providers-impls (minor), @contractspec/integration.provider.analytics (minor), @contractspec/integration.provider.calendar (minor), @contractspec/integration.provider.database (minor), @contractspec/integration.provider.email (minor), @contractspec/integration.provider.embedding (minor), @contractspec/integration.provider.health (minor), @contractspec/integration.provider.llm (minor), @contractspec/integration.provider.meeting-recorder (minor), @contractspec/integration.provider.messaging (minor), @contractspec/integration.provider.openbanking (minor), @contractspec/integration.provider.payments (minor), @contractspec/integration.provider.project-management (minor), @contractspec/integration.provider.sms (minor), @contractspec/integration.provider.storage (minor), @contractspec/integration.provider.vector-store (minor), @contractspec/integration.provider.voice (minor), @contractspec/app.api-library (patch), @contractspec/example.calendar-google (patch), @contractspec/example.email-gmail (patch), @contractspec/example.integration-posthog (patch), @contractspec/example.meeting-recorder-providers (patch), @contractspec/example.openbanking-powens (patch), @contractspec/example.product-intent (patch), @contractspec/example.project-management-sync (patch), @contractspec/example.voice-providers (patch)
9
+ - Migration: Replace direct provider imports such as `@contractspec/integration.providers-impls/impls/gmail-inbound` with targeted packages such as `@contractspec/integration.provider.email/impls/gmail-inbound`.; Continue importing `IntegrationProviderFactory` from `@contractspec/integration.providers-impls/impls/provider-factory` when you need broad provider routing.
10
+ - Updated dependencies because of chore: auto-bump internal dependents
11
+ - Updated dependencies because of Add mobile-safe FormSpec layout helpers and scoped DataView filters.
12
+
13
+ FormSpec authors can now use `responsiveFormColumns(...)` for explicit mobile-first column metadata without changing legacy numeric `layout.columns` behavior. DataView contracts can declare `filterScope.initial` and `filterScope.locked` filters so generic list/search contracts can be reused in context-restricted screens while keeping locked constraints out of user-editable URL state.
14
+
15
+ - Updated dependencies because of Add OSS harness CLI verification with deterministic Playwright, optional agent-browser visual runs, auth profile refs, visual diff evidence, replay bundles, and core scenario success semantics.
16
+ - Updated dependencies because of Split provider implementations into targeted integration packages while preserving the legacy providers-impls facade.
17
+ - @contractspec/lib.contracts-integrations@3.8.16
18
+ - @contractspec/lib.contracts-spec@5.7.0
19
+ - @contractspec/integration.provider.meeting-recorder@0.2.0
20
+
3
21
  ## 3.7.24
4
22
 
5
23
  ### Patch Changes
package/README.md CHANGED
@@ -70,4 +70,4 @@ Use `@contractspec/example.meeting-recorder-providers` as a reference implementa
70
70
 
71
71
  ## Notes
72
72
 
73
- - Works alongside `@contractspec/integration.providers-impls`, `@contractspec/lib.contracts-integrations`, `@contractspec/lib.contracts-spec`, `@contractspec/tool.bun`, `@contractspec/tool.typescript`.
73
+ - Works alongside `@contractspec/integration.provider.meeting-recorder`, `@contractspec/lib.contracts-integrations`, `@contractspec/lib.contracts-spec`, `@contractspec/tool.bun`, `@contractspec/tool.typescript`.
@@ -1 +1 @@
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
+ import{FathomMeetingRecorderProvider as q}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as w}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as k}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as x}from"@contractspec/integration.provider.meeting-recorder/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 +1 @@
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
+ import{FathomMeetingRecorderProvider as m}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as M}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as p}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/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 +1 @@
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};
1
+ import{FathomMeetingRecorderProvider as p}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as a}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as i}from"@contractspec/integration.provider.meeting-recorder/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};
@@ -1 +1 @@
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};
1
+ import{FathomMeetingRecorderProvider as h}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as k}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as i}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/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};
@@ -15,4 +15,4 @@ var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-
15
15
  ## Guardrails
16
16
  - Keep secrets in a dedicated secret provider.
17
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."}];h(y);import{defineExample as v}from"@contractspec/lib.contracts-spec/examples";var k=v({meta:{key:"examples.meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider example: list meetings, transcripts, and webhooks.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","meeting-recorder-providers"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers"}}),m=k;import{FathomMeetingRecorderProvider as b}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 P}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 P({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 b({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 B(r){return o(r).getTranscript(r.params)}async function D(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/features";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{R as tldvMeetingRecorderConnection,L as meetingRecorderSampleConnections,D as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,c as granolaMcpMeetingRecorderConnection,B as getMeetingRecorderTranscript,M as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,m as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature,k as ExamplesMeetingRecorderProvidersExample};
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."}];h(y);import{defineExample as v}from"@contractspec/lib.contracts-spec/examples";var k=v({meta:{key:"examples.meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider example: list meetings, transcripts, and webhooks.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","meeting-recorder-providers"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers"}}),m=k;import{FathomMeetingRecorderProvider as b}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as P}from"@contractspec/integration.provider.meeting-recorder/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 P({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 b({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 B(r){return o(r).getTranscript(r.params)}async function D(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/features";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{R as tldvMeetingRecorderConnection,L as meetingRecorderSampleConnections,D as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,c as granolaMcpMeetingRecorderConnection,B as getMeetingRecorderTranscript,M as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,m as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature,k as ExamplesMeetingRecorderProvidersExample};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- 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};
2
+ import{FathomMeetingRecorderProvider as q}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as w}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as k}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as x}from"@contractspec/integration.provider.meeting-recorder/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,2 +1,2 @@
1
1
  // @bun
2
- 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};
2
+ import{FathomMeetingRecorderProvider as m}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as M}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as p}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/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,2 +1,2 @@
1
1
  // @bun
2
- 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};
2
+ import{FathomMeetingRecorderProvider as p}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as a}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as i}from"@contractspec/integration.provider.meeting-recorder/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};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- 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};
2
+ import{FathomMeetingRecorderProvider as h}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as k}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as i}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/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/index.js CHANGED
@@ -16,4 +16,4 @@ var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-
16
16
  ## Guardrails
17
17
  - Keep secrets in a dedicated secret provider.
18
18
  - Verify webhook signatures before triggering workflows.
19
- - 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."}];h(y);import{defineExample as v}from"@contractspec/lib.contracts-spec/examples";var k=v({meta:{key:"examples.meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider example: list meetings, transcripts, and webhooks.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","meeting-recorder-providers"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers"}}),m=k;import{FathomMeetingRecorderProvider as b}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 P}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 P({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 b({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 B(r){return o(r).getTranscript(r.params)}async function D(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/features";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{R as tldvMeetingRecorderConnection,L as meetingRecorderSampleConnections,D as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,c as granolaMcpMeetingRecorderConnection,B as getMeetingRecorderTranscript,M as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,m as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature,k as ExamplesMeetingRecorderProvidersExample};
19
+ - 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."}];h(y);import{defineExample as v}from"@contractspec/lib.contracts-spec/examples";var k=v({meta:{key:"examples.meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider example: list meetings, transcripts, and webhooks.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","meeting-recorder-providers"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers"}}),m=k;import{FathomMeetingRecorderProvider as b}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as P}from"@contractspec/integration.provider.meeting-recorder/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 P({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 b({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 B(r){return o(r).getTranscript(r.params)}async function D(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/features";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{R as tldvMeetingRecorderConnection,L as meetingRecorderSampleConnections,D as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,c as granolaMcpMeetingRecorderConnection,B as getMeetingRecorderTranscript,M as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,m as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature,k as ExamplesMeetingRecorderProvidersExample};
@@ -1 +1 @@
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
+ import{FathomMeetingRecorderProvider as q}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as w}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as k}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as x}from"@contractspec/integration.provider.meeting-recorder/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 +1 @@
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
+ import{FathomMeetingRecorderProvider as m}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as M}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as p}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/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 +1 @@
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};
1
+ import{FathomMeetingRecorderProvider as p}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as a}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as i}from"@contractspec/integration.provider.meeting-recorder/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};
@@ -1 +1 @@
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};
1
+ import{FathomMeetingRecorderProvider as h}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as k}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as i}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as R}from"@contractspec/integration.provider.meeting-recorder/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};
@@ -15,4 +15,4 @@ var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-
15
15
  ## Guardrails
16
16
  - Keep secrets in a dedicated secret provider.
17
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."}];h(y);import{defineExample as v}from"@contractspec/lib.contracts-spec/examples";var k=v({meta:{key:"examples.meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider example: list meetings, transcripts, and webhooks.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","meeting-recorder-providers"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers"}}),m=k;import{FathomMeetingRecorderProvider as b}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 P}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 P({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 b({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 B(r){return o(r).getTranscript(r.params)}async function D(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/features";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{R as tldvMeetingRecorderConnection,L as meetingRecorderSampleConnections,D as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,c as granolaMcpMeetingRecorderConnection,B as getMeetingRecorderTranscript,M as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,m as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature,k as ExamplesMeetingRecorderProvidersExample};
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."}];h(y);import{defineExample as v}from"@contractspec/lib.contracts-spec/examples";var k=v({meta:{key:"examples.meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider example: list meetings, transcripts, and webhooks.",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","meeting-recorder-providers"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers"}}),m=k;import{FathomMeetingRecorderProvider as b}from"@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as P}from"@contractspec/integration.provider.meeting-recorder/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 P({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 b({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 B(r){return o(r).getTranscript(r.params)}async function D(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/features";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{R as tldvMeetingRecorderConnection,L as meetingRecorderSampleConnections,D as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,c as granolaMcpMeetingRecorderConnection,B as getMeetingRecorderTranscript,M as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,m as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature,k as ExamplesMeetingRecorderProvidersExample};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/example.meeting-recorder-providers",
3
- "version": "3.7.24",
3
+ "version": "3.7.25",
4
4
  "description": "Meeting recorder provider example: list meetings, transcripts, and webhooks.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -92,9 +92,9 @@
92
92
  "typecheck": "tsc --noEmit"
93
93
  },
94
94
  "dependencies": {
95
- "@contractspec/integration.providers-impls": "4.0.2",
96
- "@contractspec/lib.contracts-spec": "5.6.0",
97
- "@contractspec/lib.contracts-integrations": "3.8.15",
95
+ "@contractspec/integration.provider.meeting-recorder": "0.2.0",
96
+ "@contractspec/lib.contracts-integrations": "3.8.16",
97
+ "@contractspec/lib.contracts-spec": "5.7.0",
98
98
  "fathom-typescript": "^0.0.37"
99
99
  },
100
100
  "devDependencies": {
@@ -1,7 +1,7 @@
1
- import { FathomMeetingRecorderProvider } from '@contractspec/integration.providers-impls/impls/fathom-meeting-recorder';
2
- import { FirefliesMeetingRecorderProvider } from '@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder';
3
- import { GranolaMeetingRecorderProvider } from '@contractspec/integration.providers-impls/impls/granola-meeting-recorder';
4
- import { TldvMeetingRecorderProvider } from '@contractspec/integration.providers-impls/impls/tldv-meeting-recorder';
1
+ import { FathomMeetingRecorderProvider } from '@contractspec/integration.provider.meeting-recorder/impls/fathom-meeting-recorder';
2
+ import { FirefliesMeetingRecorderProvider } from '@contractspec/integration.provider.meeting-recorder/impls/fireflies-meeting-recorder';
3
+ import { GranolaMeetingRecorderProvider } from '@contractspec/integration.provider.meeting-recorder/impls/granola-meeting-recorder';
4
+ import { TldvMeetingRecorderProvider } from '@contractspec/integration.provider.meeting-recorder/impls/tldv-meeting-recorder';
5
5
  import type { MeetingRecorderProvider } from '@contractspec/lib.contracts-integrations';
6
6
 
7
7
  export type MeetingRecorderIntegrationKey =