AbsoluteJS

Meeting

@absolutejs/meetingv0.0.1-beta.11betaVoice & Media

Meeting-bot core that joins calls through source adapters and surfaces live diarized turns and participants for analysis.

@absolutejs/meeting is the meeting-bot core for AbsoluteJS: join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns plus participants for downstream analysis such as deal coaching, summaries, or action items. The core is platform-agnostic — Recall.ai and Discord support live in separate adapter packages, and an in-memory buffer source ships in the box for testing without a real call.

#Installation

BASH
bun add @absolutejs/meeting

#Capabilities

Overview

Meeting-bot core for AbsoluteJS. Join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns + participants for analysis (deal coaching, summaries, action items, …).

Platform-agnostic: the core only depends on the small MeetingSource contract, so each platform is a separate adapter under meeting-adapters (mirrors voice-adapters):

@absolutejs/meeting-recall — Recall.ai (Meet / Zoom / Teams)

Show 1 more

@absolutejs/meeting-discord — native @discordjs/voice receive

Usage

For an application that joins dynamic calls, bind provider configuration once and use the multi-session manager. Installation itself never contacts a meeting platform:

Testing without a platform

createBufferMeetingSource streams an in-memory PCM buffer in real time — the reference MeetingSource implementation and a test harness.

API

createMeeting(options) → MeetingSession (on, start, stop,

getTranscript, getParticipants).

createMeetingManager(options) → dynamic, idempotent multi-session host

Show 4 more

boundary (start, stop, get, list).

createBufferMeetingSource(options) → MeetingSource.

Types: MeetingSource, MeetingSourceEventMap, MeetingParticipant,

MeetingSession, MeetingTurn, CreateMeetingOptions.

Live diarized transcription

createMeeting wires a source adapter to a speech-to-text scribe and emits diarized turns as the call happens.

Turn and end events

Subscribe to turn events for streaming analysis, and receive the full diarized transcript on the end event.

Platform-agnostic sources

The core depends only on the MeetingSource contract; Recall.ai and Discord ship as separate adapters, and you can implement your own.

Transcript and roster access

MeetingSession exposes getTranscript and getParticipants so you can inspect state at any point during or after the call.

Buffer source for tests

createBufferMeetingSource streams an in-memory PCM buffer in real time — the reference MeetingSource implementation and a test harness.

Outcomes

What you can build

Overview

Meeting-bot core for AbsoluteJS. Join a call through a source adapter, transcribe it live with the @absolutejs/voice scribe, and surface diarized turns + participants for analysis (deal coaching, summaries, action items, …).

Usage

For an application that joins dynamic calls, bind provider configuration once and use the multi-session manager. Installation itself never contacts a meeting platform:

API

createMeeting(options) → MeetingSession (on, start, stop,

Hardening checklist

Production guidance

Make every external boundary explicitPin the deployed @absolutejs/meeting version, replace example or memory-backed dependencies with durable implementations, bound external calls, protect credentials, and emit enough evidence to retry or recover safely.

Follow in order

Troubleshooting path

1
Trace from the first failed boundary
Reproduce the smallest canonical @absolutejs/meeting example, confirm the supported entry point and version in the API explorer, then inspect the first boundary that did not produce its documented result.

#Usage

Partial snippet

Working example for Usage.

TS
import { createMeeting } from "@absolutejs/meeting";
import { deepgram } from "@absolutejs/voice-deepgram";
import { createRecallMeetingSource } from "@absolutejs/meeting-recall";

const meeting = await createMeeting({
  source: createRecallMeetingSource({
    apiKey: process.env.RECALL_API_KEY!,
    meetingUrl,
    websocketUrl: process.env.RECALL_WEBSOCKET_URL!,
  }),
  stt: deepgram({ apiKey: process.env.DEEPGRAM_API_KEY!, diarize: true }),
  sessionId: "deal-123",
});

meeting.on("turn", ({ turn }) => {
  // { speaker, text, participant? } — stream to your analyzer / UI
});
meeting.on("end", ({ transcript }) => {
  // full diarized transcript — run your deal-call analysis
});

await meeting.start(); // bot joins the call
// ... later: await meeting.stop()

#Usage 2

Partial snippet

For an application that joins dynamic calls, bind provider configuration once and use the multi-session manager. Installation itself never contacts a meeting platform:

TS
import { createMeetingManager } from "@absolutejs/meeting";
import { createRecallMeetingSourceFactory } from "@absolutejs/meeting-recall";

const meetings = createMeetingManager({
  source: createRecallMeetingSourceFactory({
    apiKey: process.env.RECALL_API_KEY!,
    websocketUrl: "wss://app.example.com/meeting/audio",
  }),
  stt: deepgram({ apiKey: process.env.DEEPGRAM_API_KEY!, diarize: true }),
});

await meetings.start({
  sessionId: "deal-123",
  target: "https://meet.google.com/abc-defg-hij",
});

#Quick Start

Partial snippet

Join a Google Meet, Zoom, or Teams call through the Recall.ai adapter and stream diarized turns from Deepgram.

TS
import { createMeeting } from '@absolutejs/meeting';
import { recall } from '@absolutejs/meeting-recall';
import { deepgram } from '@absolutejs/voice-deepgram';

const meeting = await createMeeting({
	sessionId: 'deal-123',
	source: recall({
		apiKey: process.env.RECALL_API_KEY ?? '',
		meetingUrl
	}),
	stt: deepgram({
		apiKey: process.env.DEEPGRAM_API_KEY ?? '',
		diarize: true
	})
});

meeting.on('turn', ({ turn }) => {
	// { speaker, text, participant? } — stream to your analyzer / UI
});
meeting.on('end', ({ transcript }) => {
	// full diarized transcript — run your deal-call analysis
});

await meeting.start(); // bot joins the call
// ...later
await meeting.stop();

#Testing Without a Platform

Partial snippet

Exercise the full pipeline against a recorded PCM buffer — useful in tests and CI where no live call exists.

TS
import {
	createBufferMeetingSource,
	createMeeting
} from '@absolutejs/meeting';
import { deepgram } from '@absolutejs/voice-deepgram';

// Streams an in-memory PCM buffer in real time — no platform needed
const source = createBufferMeetingSource({
	chunkMs: 40,
	format: {
		channels: 1,
		container: 'raw',
		encoding: 'pcm_s16le',
		sampleRateHz: 16000
	},
	pcm: recordedCallBytes
});

const meeting = await createMeeting({
	sessionId: 'fixture-run',
	source,
	stt: deepgram({
		apiKey: process.env.DEEPGRAM_API_KEY ?? '',
		diarize: true
	})
});

await meeting.start();

#Source Adapters

The core only depends on the small MeetingSource contract, so each platform ships as a separate adapter package (mirroring voice-adapters).

@absolutejs/meeting-discordv0.0.1-beta.17A bot joins a Discord voice channel via native @discordjs/voice receive and streams per-participant audio — speakers are known, so no diarization is needed.
@absolutejs/meeting-recallv0.0.1-beta.10Recall.ai joins a Google Meet, Zoom, or Teams call as a bot and streams per-participant audio into the meeting core for live transcription and analysis.
Beta
This package is in early beta; the MeetingSource contract and event shapes may still change between releases.
Pairs with voice
Speech-to-text comes from @absolutejs/voice provider adapters (for example @absolutejs/voice-deepgram), so the same scribe configuration you use for voice agents works here.

#API reference

Search the declarations exported by the current package type files. Expand a symbol to inspect its source-backed signature.

20 symbols
createMeetingexportPermalink
TS
createMeeting
Exported from @absolutejs/meeting

Current package surface

What ships today

@absolutejs/meetingv0.0.1-beta.11 · betaVoice & MedianpmSource
3entry points21symbols

Import surface · click to copy