@contractspec/example.meeting-recorder-providers 3.7.19 → 3.7.21

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.
@@ -1,46 +1,47 @@
1
- $ contractspec-bun-build prebuild
2
- $ bun run build:bundle && bun run build:types
3
- $ contractspec-bun-build transpile
4
- [contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
5
- Bundled 10 modules in 17ms
6
-
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
-
18
- [contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
19
- Bundled 10 modules in 16ms
20
-
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
-
32
- [contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
33
- Bundled 10 modules in 9ms
34
-
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
-
46
- $ contractspec-bun-build types
1
+
2
+ $ contractspec-bun-build prebuild
3
+ $ bun run build:bundle && bun run build:types
4
+ $ contractspec-bun-build transpile
5
+ [contractspec-bun-build] transpile target=bun root=src entries=10 noBundle=false
6
+ Bundled 10 modules in 16ms
7
+
8
+ ./connection.sample.js 2.60 KB (entry point)
9
+ ./index.js 8.50 KB (entry point)
10
+ ./meeting-recorder-providers.feature.js 0.62 KB (entry point)
11
+ docs/index.js 2.0 KB (entry point)
12
+ docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
13
+ ./example.js 0.71 KB (entry point)
14
+ handlers/get-transcript.js 1.80 KB (entry point)
15
+ handlers/list-meetings.js 1.80 KB (entry point)
16
+ handlers/webhook-handler.js 2.37 KB (entry point)
17
+ handlers/create-provider.js 1.75 KB (entry point)
18
+
19
+ [contractspec-bun-build] transpile target=node root=src entries=10 noBundle=false
20
+ Bundled 10 modules in 9ms
21
+
22
+ ./connection.sample.js 2.60 KB (entry point)
23
+ ./index.js 8.49 KB (entry point)
24
+ ./meeting-recorder-providers.feature.js 0.61 KB (entry point)
25
+ docs/index.js 2.0 KB (entry point)
26
+ docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
27
+ ./example.js 0.70 KB (entry point)
28
+ handlers/get-transcript.js 1.80 KB (entry point)
29
+ handlers/list-meetings.js 1.79 KB (entry point)
30
+ handlers/webhook-handler.js 2.36 KB (entry point)
31
+ handlers/create-provider.js 1.74 KB (entry point)
32
+
33
+ [contractspec-bun-build] transpile target=browser root=src entries=10 noBundle=false
34
+ Bundled 10 modules in 11ms
35
+
36
+ ./connection.sample.js 2.60 KB (entry point)
37
+ ./index.js 8.49 KB (entry point)
38
+ ./meeting-recorder-providers.feature.js 0.61 KB (entry point)
39
+ docs/index.js 2.0 KB (entry point)
40
+ docs/meeting-recorder-providers.docblock.js 2.0 KB (entry point)
41
+ ./example.js 0.70 KB (entry point)
42
+ handlers/get-transcript.js 1.80 KB (entry point)
43
+ handlers/list-meetings.js 1.79 KB (entry point)
44
+ handlers/webhook-handler.js 2.36 KB (entry point)
45
+ handlers/create-provider.js 1.74 KB (entry point)
46
+
47
+ $ contractspec-bun-build types
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @contractspec/example.meeting-recorder-providers
2
2
 
3
+ ## 3.7.21
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 Add FormSpec layout hints, semantic field rendering, and portable text/textarea input-group addons.
10
+ - Updated dependencies because of Add ThemeSpec light/dark modes and a design-system Tailwind bridge for CSS variables, presets, CSS text, and OKLCH color pass-through.
11
+ - Updated dependencies because of Add a canonical typed result system for ContractSpec success and failure propagation across operations, workflows, jobs, server adapters, MCP, GraphQL, and React clients.
12
+ - @contractspec/integration.providers-impls@3.8.13
13
+ - @contractspec/lib.contracts-integrations@3.8.13
14
+ - @contractspec/lib.contracts-spec@5.5.0
15
+
16
+ ## 3.7.20
17
+
18
+ ### Patch Changes
19
+
20
+ - chore: auto-bump internal dependents
21
+ - Updated dependencies because of Add a family-aware ContractSpec Adoption Engine, expand contract authoring targets across CLI and VS Code tooling, and refresh release-facing schema and policy artifacts for downstream workspaces.
22
+ - Updated dependencies because of chore: auto-bump internal dependents
23
+ - Updated dependencies because of Improve app-config, theme, and feature authoring with explicit validation APIs, first-class theme discovery and scaffolding, and key-based app-config generation across contracts, workspace tooling, and the CLI.
24
+ - Updated dependencies because of Refresh root, package, website, and LLM-facing docs so Connect, Builder, release capsules, and the current contracts-spec export surface stay aligned.
25
+ - Updated dependencies because of Persist canonical knowledge payload text during indexing and align the retrieval/query docs with the corrected behavior.
26
+ - @contractspec/lib.contracts-spec@5.4.0
27
+ - @contractspec/integration.providers-impls@3.8.12
28
+ - @contractspec/lib.contracts-integrations@3.8.12
29
+
3
30
  ## 3.7.19
4
31
 
5
32
  ### Patch Changes
@@ -1 +1 @@
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
+ import{defineExample as b}from"@contractspec/lib.contracts-spec/examples";var f=b({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"}}),k=f;export{k as default,f as ExamplesMeetingRecorderProvidersExample};
@@ -1,4 +1,4 @@
1
- var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},R={meta:{id:"conn-granola-mcp-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola MCP Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"mcp",mcpUrl:"https://mcp.granola.ai/mcp",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-mcp-demo",status:"connected"},M={meta:{id:"conn-tldv-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.tldv",integrationVersion:"1",label:"tl;dv Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://pasta.tldv.io/v1alpha1",pageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-tldv-demo",status:"connected"},c={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},q=[u,R,M,c,g];import{registerDocBlocks as v}from"@contractspec/lib.contracts-spec/docs";var h=[{id:"docs.examples.meeting-recorder-providers",title:"Meeting Recorder Providers (example)",summary:"Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",kind:"reference",visibility:"public",route:"/docs/examples/meeting-recorder-providers",tags:["meeting-recorder","integration","example","transcripts"],body:`## What this example shows
1
+ var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},c={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"},R={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"},M={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},L=[u,c,R,M,g];import{registerDocBlocks as h}from"@contractspec/lib.contracts-spec/docs";var y=[{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
2
  - Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
3
3
  - List meetings + fetch transcripts using the MeetingRecorderProvider interface.
4
4
  - Webhook verification and normalization into a single event shape.
@@ -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."}];v(h);import{defineExample as y}from"@contractspec/lib.contracts-spec";var m=y({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Multi-provider meeting recorder integration example with list, transcript, and webhook handling.",kind:"integration",visibility:"public",stability:"experimental",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts","webhooks","integrations"]},docs:{rootDocId:"docs.examples.meeting-recorder-providers",usageDocId:"docs.examples.meeting-recorder-providers.usage"},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),k=m;import{FathomMeetingRecorderProvider as P}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as b}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function o(r){let{integrationKey:n,secrets:t,config:e}=r;switch(n){case"meeting-recorder.granola":if(e?.transport==="mcp")return new s({transport:"mcp",mcpUrl:e?.mcpUrl,mcpHeaders:e?.mcpHeaders,mcpAccessToken:t.mcpAccessToken??t.apiKey,pageSize:e?.pageSize});if(!t.apiKey)throw Error("Granola apiKey is required for API transport.");return new s({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.tldv":if(!t.apiKey)throw Error("tl;dv apiKey is required.");return new b({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.fireflies":if(!t.apiKey)throw Error("Fireflies apiKey is required.");return new I({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.transcriptsPageSize??e?.pageSize,webhookSecret:t.webhookSecret});case"meeting-recorder.fathom":if(!t.apiKey)throw Error("Fathom apiKey is required.");return new P({apiKey:t.apiKey,baseUrl:e?.baseUrl,includeTranscript:e?.includeTranscript,includeSummary:e?.includeSummary,includeActionItems:e?.includeActionItems,includeCrmMatches:e?.includeCrmMatches,triggeredFor:e?.triggeredFor,maxPages:e?.maxPages,webhookSecret:t.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${n}`)}}async function A(r){return o(r).getTranscript(r.params)}async function C(r){return o(r).listMeetings(r.params)}async function U(r){let{integrationKey:n,request:t}=r,e=o(r),i=await t.text(),a=W(i),d={headers:w(t.headers),rawBody:i,parsedBody:a};if(e.verifyWebhook){if(!await e.verifyWebhook(d))return new Response("Invalid webhook signature",{status:401})}let p=e.parseWebhook?await e.parseWebhook(d):f(n,a??i);return new Response(JSON.stringify({status:"ok",event:p}),{status:200,headers:{"Content-Type":"application/json"}})}function w(r){let n={};return r.forEach((t,e)=>{n[e]=t}),n}function W(r){if(!r)return;try{return JSON.parse(r)}catch{return}}function f(r,n){return{providerKey:r,payload:n,receivedAt:new Date().toISOString()}}import{defineFeature as T}from"@contractspec/lib.contracts-spec";var Y=T({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{M as tldvMeetingRecorderConnection,q as meetingRecorderSampleConnections,C as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,R as granolaMcpMeetingRecorderConnection,A as getMeetingRecorderTranscript,c as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,k as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature};
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};
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
package/dist/example.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- declare const example: import("@contractspec/lib.contracts-spec").ExampleSpec;
2
- export default example;
1
+ declare const ExamplesMeetingRecorderProvidersExample: import("@contractspec/lib.contracts-spec").ExampleSpec;
2
+ export default ExamplesMeetingRecorderProvidersExample;
3
+ export { ExamplesMeetingRecorderProvidersExample };
package/dist/example.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- 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};
2
+ import{defineExample as b}from"@contractspec/lib.contracts-spec/examples";var f=b({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"}}),k=f;export{k as default,f as ExamplesMeetingRecorderProvidersExample};
package/dist/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export * from './handlers/list-meetings';
6
6
  export * from './handlers/webhook-handler';
7
7
  export * from './meeting-recorder-providers.feature';
8
8
  import './docs';
9
+ export * from './example';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},R={meta:{id:"conn-granola-mcp-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola MCP Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"mcp",mcpUrl:"https://mcp.granola.ai/mcp",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-mcp-demo",status:"connected"},M={meta:{id:"conn-tldv-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.tldv",integrationVersion:"1",label:"tl;dv Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://pasta.tldv.io/v1alpha1",pageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-tldv-demo",status:"connected"},c={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},q=[u,R,M,c,g];import{registerDocBlocks as v}from"@contractspec/lib.contracts-spec/docs";var h=[{id:"docs.examples.meeting-recorder-providers",title:"Meeting Recorder Providers (example)",summary:"Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",kind:"reference",visibility:"public",route:"/docs/examples/meeting-recorder-providers",tags:["meeting-recorder","integration","example","transcripts"],body:`## What this example shows
2
+ var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},c={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"},R={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"},M={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},L=[u,c,R,M,g];import{registerDocBlocks as h}from"@contractspec/lib.contracts-spec/docs";var y=[{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
3
3
  - Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
4
4
  - List meetings + fetch transcripts using the MeetingRecorderProvider interface.
5
5
  - Webhook verification and normalization into a single event shape.
@@ -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."}];v(h);import{defineExample as y}from"@contractspec/lib.contracts-spec";var m=y({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Multi-provider meeting recorder integration example with list, transcript, and webhook handling.",kind:"integration",visibility:"public",stability:"experimental",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts","webhooks","integrations"]},docs:{rootDocId:"docs.examples.meeting-recorder-providers",usageDocId:"docs.examples.meeting-recorder-providers.usage"},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),k=m;import{FathomMeetingRecorderProvider as P}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as b}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function o(r){let{integrationKey:n,secrets:t,config:e}=r;switch(n){case"meeting-recorder.granola":if(e?.transport==="mcp")return new s({transport:"mcp",mcpUrl:e?.mcpUrl,mcpHeaders:e?.mcpHeaders,mcpAccessToken:t.mcpAccessToken??t.apiKey,pageSize:e?.pageSize});if(!t.apiKey)throw Error("Granola apiKey is required for API transport.");return new s({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.tldv":if(!t.apiKey)throw Error("tl;dv apiKey is required.");return new b({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.fireflies":if(!t.apiKey)throw Error("Fireflies apiKey is required.");return new I({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.transcriptsPageSize??e?.pageSize,webhookSecret:t.webhookSecret});case"meeting-recorder.fathom":if(!t.apiKey)throw Error("Fathom apiKey is required.");return new P({apiKey:t.apiKey,baseUrl:e?.baseUrl,includeTranscript:e?.includeTranscript,includeSummary:e?.includeSummary,includeActionItems:e?.includeActionItems,includeCrmMatches:e?.includeCrmMatches,triggeredFor:e?.triggeredFor,maxPages:e?.maxPages,webhookSecret:t.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${n}`)}}async function A(r){return o(r).getTranscript(r.params)}async function C(r){return o(r).listMeetings(r.params)}async function U(r){let{integrationKey:n,request:t}=r,e=o(r),i=await t.text(),a=W(i),d={headers:w(t.headers),rawBody:i,parsedBody:a};if(e.verifyWebhook){if(!await e.verifyWebhook(d))return new Response("Invalid webhook signature",{status:401})}let p=e.parseWebhook?await e.parseWebhook(d):f(n,a??i);return new Response(JSON.stringify({status:"ok",event:p}),{status:200,headers:{"Content-Type":"application/json"}})}function w(r){let n={};return r.forEach((t,e)=>{n[e]=t}),n}function W(r){if(!r)return;try{return JSON.parse(r)}catch{return}}function f(r,n){return{providerKey:r,payload:n,receivedAt:new Date().toISOString()}}import{defineFeature as T}from"@contractspec/lib.contracts-spec";var Y=T({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{M as tldvMeetingRecorderConnection,q as meetingRecorderSampleConnections,C as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,R as granolaMcpMeetingRecorderConnection,A as getMeetingRecorderTranscript,c as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,k as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature};
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};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
2
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
@@ -1 +1 @@
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
+ import{defineExample as b}from"@contractspec/lib.contracts-spec/examples";var f=b({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"}}),k=f;export{k as default,f as ExamplesMeetingRecorderProvidersExample};
@@ -1,4 +1,4 @@
1
- var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},R={meta:{id:"conn-granola-mcp-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola MCP Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"mcp",mcpUrl:"https://mcp.granola.ai/mcp",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-mcp-demo",status:"connected"},M={meta:{id:"conn-tldv-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.tldv",integrationVersion:"1",label:"tl;dv Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://pasta.tldv.io/v1alpha1",pageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-tldv-demo",status:"connected"},c={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},q=[u,R,M,c,g];import{registerDocBlocks as v}from"@contractspec/lib.contracts-spec/docs";var h=[{id:"docs.examples.meeting-recorder-providers",title:"Meeting Recorder Providers (example)",summary:"Multi-provider meeting recorder example covering list, transcript fetch, and webhook ingestion.",kind:"reference",visibility:"public",route:"/docs/examples/meeting-recorder-providers",tags:["meeting-recorder","integration","example","transcripts"],body:`## What this example shows
1
+ var u={meta:{id:"conn-granola-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.granola",integrationVersion:"1",label:"Granola Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{transport:"api",baseUrl:"https://public-api.granola.ai",pageSize:10},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-granola-demo",status:"connected"},c={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"},R={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"},M={meta:{id:"conn-fireflies-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fireflies",integrationVersion:"1",label:"Fireflies Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fireflies.ai/graphql",transcriptsPageSize:25},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fireflies-demo",status:"connected"},g={meta:{id:"conn-fathom-demo",tenantId:"acme-inc",integrationKey:"meeting-recorder.fathom",integrationVersion:"1",label:"Fathom Meeting Recorder",environment:"production",createdAt:"2026-01-01T00:00:00.000Z",updatedAt:"2026-01-01T00:00:00.000Z"},ownershipMode:"byok",config:{baseUrl:"https://api.fathom.ai/external/v1",includeTranscript:!0,includeSummary:!0,includeActionItems:!1,includeCrmMatches:!1,triggeredFor:["my_recordings"],maxPages:5},secretProvider:"vault",secretRef:"vault://integrations/acme-inc/conn-fathom-demo",status:"connected"},L=[u,c,R,M,g];import{registerDocBlocks as h}from"@contractspec/lib.contracts-spec/docs";var y=[{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
2
  - Provider selection for Granola (API and MCP), tl;dv, Fireflies, and Fathom.
3
3
  - List meetings + fetch transcripts using the MeetingRecorderProvider interface.
4
4
  - Webhook verification and normalization into a single event shape.
@@ -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."}];v(h);import{defineExample as y}from"@contractspec/lib.contracts-spec";var m=y({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Multi-provider meeting recorder integration example with list, transcript, and webhook handling.",kind:"integration",visibility:"public",stability:"experimental",owners:["@platform.integrations"],tags:["meeting-recorder","transcripts","webhooks","integrations"]},docs:{rootDocId:"docs.examples.meeting-recorder-providers",usageDocId:"docs.examples.meeting-recorder-providers.usage"},entrypoints:{packageName:"@contractspec/example.meeting-recorder-providers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["markdown","specs"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),k=m;import{FathomMeetingRecorderProvider as P}from"@contractspec/integration.providers-impls/impls/fathom-meeting-recorder";import{FirefliesMeetingRecorderProvider as I}from"@contractspec/integration.providers-impls/impls/fireflies-meeting-recorder";import{GranolaMeetingRecorderProvider as s}from"@contractspec/integration.providers-impls/impls/granola-meeting-recorder";import{TldvMeetingRecorderProvider as b}from"@contractspec/integration.providers-impls/impls/tldv-meeting-recorder";function o(r){let{integrationKey:n,secrets:t,config:e}=r;switch(n){case"meeting-recorder.granola":if(e?.transport==="mcp")return new s({transport:"mcp",mcpUrl:e?.mcpUrl,mcpHeaders:e?.mcpHeaders,mcpAccessToken:t.mcpAccessToken??t.apiKey,pageSize:e?.pageSize});if(!t.apiKey)throw Error("Granola apiKey is required for API transport.");return new s({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.tldv":if(!t.apiKey)throw Error("tl;dv apiKey is required.");return new b({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.pageSize});case"meeting-recorder.fireflies":if(!t.apiKey)throw Error("Fireflies apiKey is required.");return new I({apiKey:t.apiKey,baseUrl:e?.baseUrl,pageSize:e?.transcriptsPageSize??e?.pageSize,webhookSecret:t.webhookSecret});case"meeting-recorder.fathom":if(!t.apiKey)throw Error("Fathom apiKey is required.");return new P({apiKey:t.apiKey,baseUrl:e?.baseUrl,includeTranscript:e?.includeTranscript,includeSummary:e?.includeSummary,includeActionItems:e?.includeActionItems,includeCrmMatches:e?.includeCrmMatches,triggeredFor:e?.triggeredFor,maxPages:e?.maxPages,webhookSecret:t.webhookSecret});default:throw Error(`Unsupported meeting recorder provider: ${n}`)}}async function A(r){return o(r).getTranscript(r.params)}async function C(r){return o(r).listMeetings(r.params)}async function U(r){let{integrationKey:n,request:t}=r,e=o(r),i=await t.text(),a=W(i),d={headers:w(t.headers),rawBody:i,parsedBody:a};if(e.verifyWebhook){if(!await e.verifyWebhook(d))return new Response("Invalid webhook signature",{status:401})}let p=e.parseWebhook?await e.parseWebhook(d):f(n,a??i);return new Response(JSON.stringify({status:"ok",event:p}),{status:200,headers:{"Content-Type":"application/json"}})}function w(r){let n={};return r.forEach((t,e)=>{n[e]=t}),n}function W(r){if(!r)return;try{return JSON.parse(r)}catch{return}}function f(r,n){return{providerKey:r,payload:n,receivedAt:new Date().toISOString()}}import{defineFeature as T}from"@contractspec/lib.contracts-spec";var Y=T({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{M as tldvMeetingRecorderConnection,q as meetingRecorderSampleConnections,C as listMeetingRecorderMeetings,U as handleMeetingRecorderWebhook,u as granolaMeetingRecorderConnection,R as granolaMcpMeetingRecorderConnection,A as getMeetingRecorderTranscript,c as firefliesMeetingRecorderConnection,g as fathomMeetingRecorderConnection,k as example,o as createMeetingRecorderProvider,Y as MeetingRecorderProvidersFeature};
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};
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"meeting-recorder-providers",version:"1.0.0",title:"Meeting Recorder Providers",description:"Meeting recorder provider integration with transcripts and webhook handling",domain:"integration",owners:["@examples"],tags:["meeting","recorder","transcripts","webhooks"],stability:"experimental"},integrations:[{key:"meeting-recorder.integration.provider",version:"1.0.0"}],docs:["docs.examples.meeting-recorder-providers","docs.examples.meeting-recorder-providers.usage"]});export{j as MeetingRecorderProvidersFeature};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/example.meeting-recorder-providers",
3
- "version": "3.7.19",
3
+ "version": "3.7.21",
4
4
  "description": "Meeting recorder provider example: list meetings, transcripts, and webhooks.",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -92,14 +92,14 @@
92
92
  "typecheck": "tsc --noEmit"
93
93
  },
94
94
  "dependencies": {
95
- "@contractspec/integration.providers-impls": "3.8.11",
96
- "@contractspec/lib.contracts-spec": "5.3.0",
97
- "@contractspec/lib.contracts-integrations": "3.8.11"
95
+ "@contractspec/integration.providers-impls": "3.8.13",
96
+ "@contractspec/lib.contracts-spec": "5.5.0",
97
+ "@contractspec/lib.contracts-integrations": "3.8.13"
98
98
  },
99
99
  "devDependencies": {
100
100
  "@contractspec/tool.typescript": "3.7.13",
101
101
  "typescript": "^5.9.3",
102
- "@contractspec/tool.bun": "3.7.14"
102
+ "@contractspec/tool.bun": "3.7.15"
103
103
  },
104
104
  "publishConfig": {
105
105
  "access": "public",
package/src/example.ts CHANGED
@@ -1,32 +1,28 @@
1
- import { defineExample } from '@contractspec/lib.contracts-spec';
1
+ import { defineExample } from '@contractspec/lib.contracts-spec/examples';
2
2
 
3
- const example = defineExample({
3
+ const ExamplesMeetingRecorderProvidersExample = defineExample({
4
4
  meta: {
5
- key: 'meeting-recorder-providers',
5
+ key: 'examples.meeting-recorder-providers',
6
6
  version: '1.0.0',
7
7
  title: 'Meeting Recorder Providers',
8
8
  description:
9
- 'Multi-provider meeting recorder integration example with list, transcript, and webhook handling.',
10
- kind: 'integration',
11
- visibility: 'public',
9
+ 'Meeting recorder provider example: list meetings, transcripts, and webhooks.',
10
+ kind: 'template',
11
+ visibility: 'experimental',
12
12
  stability: 'experimental',
13
- owners: ['@platform.integrations'],
14
- tags: ['meeting-recorder', 'transcripts', 'webhooks', 'integrations'],
13
+ owners: ['@contractspec-core'],
14
+ tags: ['package', 'examples', 'meeting-recorder-providers'],
15
15
  },
16
- docs: {
17
- rootDocId: 'docs.examples.meeting-recorder-providers',
18
- usageDocId: 'docs.examples.meeting-recorder-providers.usage',
16
+ surfaces: {
17
+ templates: true,
18
+ sandbox: { enabled: true, modes: ['playground', 'specs'] },
19
+ studio: { enabled: false, installable: false },
20
+ mcp: { enabled: false },
19
21
  },
20
22
  entrypoints: {
21
23
  packageName: '@contractspec/example.meeting-recorder-providers',
22
- docs: './docs',
23
- },
24
- surfaces: {
25
- templates: true,
26
- sandbox: { enabled: true, modes: ['markdown', 'specs'] },
27
- studio: { enabled: true, installable: true },
28
- mcp: { enabled: true },
29
24
  },
30
25
  });
31
26
 
32
- export default example;
27
+ export default ExamplesMeetingRecorderProvidersExample;
28
+ export { ExamplesMeetingRecorderProvidersExample };
package/src/index.ts CHANGED
@@ -6,3 +6,5 @@ export * from './handlers/list-meetings';
6
6
  export * from './handlers/webhook-handler';
7
7
  export * from './meeting-recorder-providers.feature';
8
8
  import './docs';
9
+
10
+ export * from './example';
@@ -1,4 +1,4 @@
1
- import { defineFeature } from '@contractspec/lib.contracts-spec';
1
+ import { defineFeature } from '@contractspec/lib.contracts-spec/features';
2
2
 
3
3
  export const MeetingRecorderProvidersFeature = defineFeature({
4
4
  meta: {