@vapi-ai/web 1.0.255 → 1.0.256

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.
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" />
2
+ import EventEmitter from "events";
3
+ declare global {
4
+ interface Window {
5
+ ManagedMediaSource: any;
6
+ }
7
+ }
8
+ declare class AtomicMediaSource extends EventEmitter {
9
+ mediaSource: any;
10
+ sourceBuffer: SourceBuffer | null;
11
+ private operationsQueue;
12
+ constructor();
13
+ appendBuffer(buffer: ArrayBuffer): void;
14
+ clearBuffer(): void;
15
+ private createOperationQueue;
16
+ }
17
+ export default AtomicMediaSource;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const async_1 = __importDefault(require("async"));
7
+ const events_1 = __importDefault(require("events"));
8
+ // ManagedMediaSource needed for iOS Safari
9
+ function getMediaSource() {
10
+ if (window.ManagedMediaSource) {
11
+ return new window.ManagedMediaSource();
12
+ }
13
+ if (window.MediaSource) {
14
+ return new window.MediaSource();
15
+ }
16
+ return null;
17
+ }
18
+ class AtomicMediaSource extends events_1.default {
19
+ constructor() {
20
+ super();
21
+ this.sourceBuffer = null;
22
+ this.mediaSource = getMediaSource();
23
+ this.operationsQueue = this.createOperationQueue();
24
+ if (!this.mediaSource) {
25
+ console.error("MediaSource is not supported in your browser.");
26
+ // Display a message to the user, or handle this situation in another way
27
+ return;
28
+ }
29
+ this.mediaSource.addEventListener("sourceopen", () => {
30
+ this.mediaSource.duration = Number.POSITIVE_INFINITY;
31
+ this.sourceBuffer = this.mediaSource.addSourceBuffer('audio/webm; codecs="opus"');
32
+ if (this.sourceBuffer) {
33
+ this.sourceBuffer.mode = "sequence";
34
+ }
35
+ });
36
+ }
37
+ appendBuffer(buffer) {
38
+ this.operationsQueue.push(() => {
39
+ return new Promise((resolve, reject) => {
40
+ if (this.sourceBuffer) {
41
+ this.sourceBuffer.addEventListener("updateend", () => {
42
+ resolve();
43
+ }, { once: true });
44
+ this.sourceBuffer.appendBuffer(buffer);
45
+ }
46
+ else {
47
+ reject();
48
+ }
49
+ });
50
+ });
51
+ }
52
+ clearBuffer() {
53
+ // this.operationsQueue.push(() => {
54
+ // return new Promise((resolve, reject) => {
55
+ // if (this.sourceBuffer) {
56
+ // this.sourceBuffer.addEventListener(
57
+ // "updateend",
58
+ // () => {
59
+ // resolve();
60
+ // },
61
+ // { once: true }
62
+ // );
63
+ // if (this.sourceBuffer.buffered.length > 0) {
64
+ // this.sourceBuffer.remove(0, this.sourceBuffer.buffered.end(0));
65
+ // }
66
+ // } else {
67
+ // reject();
68
+ // }
69
+ // });
70
+ // });
71
+ }
72
+ createOperationQueue() {
73
+ return async_1.default.queue((task, callback) => {
74
+ task().then(() => callback());
75
+ }, 1);
76
+ }
77
+ }
78
+ exports.default = AtomicMediaSource;