hume 0.5.8 → 0.5.9
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.
- package/README.md +3 -5
- package/dist/wrapper/convertBase64ToBlob.d.ts +8 -0
- package/dist/wrapper/convertBase64ToBlob.js +23 -0
- package/dist/wrapper/convertBlobToBase64.d.ts +8 -0
- package/dist/wrapper/convertBlobToBase64.js +40 -0
- package/dist/wrapper/empathicVoice/chat/ChatClient.js +0 -1
- package/dist/wrapper/empathicVoice/chat/StreamSocket.d.ts +2 -2
- package/dist/wrapper/empathicVoice/chat/StreamSocket.js +2 -2
- package/dist/wrapper/ensureSingleValidAudioTrack.d.ts +11 -0
- package/dist/wrapper/ensureSingleValidAudioTrack.js +26 -0
- package/dist/wrapper/getAudioStream.d.ts +8 -0
- package/dist/wrapper/getAudioStream.js +30 -0
- package/dist/wrapper/getBrowserSupportedMimeType.d.ts +40 -0
- package/dist/wrapper/getBrowserSupportedMimeType.js +61 -0
- package/dist/wrapper/index.d.ts +5 -0
- package/dist/wrapper/index.js +12 -1
- package/package.json +2 -2
- package/wrapper/convertBase64ToBlob.d.ts +8 -0
- package/wrapper/convertBase64ToBlob.js +23 -0
- package/wrapper/convertBlobToBase64.d.ts +8 -0
- package/wrapper/convertBlobToBase64.js +40 -0
- package/wrapper/empathicVoice/chat/ChatClient.js +0 -1
- package/wrapper/empathicVoice/chat/StreamSocket.d.ts +2 -2
- package/wrapper/empathicVoice/chat/StreamSocket.js +2 -2
- package/wrapper/ensureSingleValidAudioTrack.d.ts +11 -0
- package/wrapper/ensureSingleValidAudioTrack.js +26 -0
- package/wrapper/getAudioStream.d.ts +8 -0
- package/wrapper/getAudioStream.js +30 -0
- package/wrapper/getBrowserSupportedMimeType.d.ts +40 -0
- package/wrapper/getBrowserSupportedMimeType.js +61 -0
- package/wrapper/index.d.ts +5 -0
- package/wrapper/index.js +12 -1
package/README.md
CHANGED
|
@@ -92,12 +92,10 @@ for (const sample of samples) {
|
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
### Empathic Voice
|
|
95
|
-
The SDK supports sending and receiving audio from Empathic Voice.
|
|
96
|
-
running with Node.js you can also import our `ffplay` function which will
|
|
97
|
-
play the audio for you.
|
|
95
|
+
The SDK supports sending and receiving audio from Empathic Voice.
|
|
98
96
|
|
|
99
97
|
```typescript
|
|
100
|
-
import { HumeClient
|
|
98
|
+
import { HumeClient } from "hume";
|
|
101
99
|
|
|
102
100
|
const hume = new HumeClient({
|
|
103
101
|
apiKey: "<>",
|
|
@@ -108,7 +106,7 @@ const socket = await hume.empathicVoice.chat.connect({
|
|
|
108
106
|
async onMessage(message): Promise<void> {
|
|
109
107
|
if (message.type === "audio_output") {
|
|
110
108
|
const decoded = Buffer.from(message.data, "base64");
|
|
111
|
-
|
|
109
|
+
// play decoded message
|
|
112
110
|
}
|
|
113
111
|
}
|
|
114
112
|
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a base64-encoded string into a `Blob` object with the specified content type.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} base64 - The base64-encoded string representing binary data.
|
|
5
|
+
* @param {string} contentType - The MIME type to assign to the resulting `Blob`.
|
|
6
|
+
* @returns {Blob} A `Blob` object containing the binary data from the base64 string.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertBase64ToBlob(base64: string, contentType: string): Blob;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertBase64ToBlob = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Converts a base64-encoded string into a `Blob` object with the specified content type.
|
|
6
|
+
*
|
|
7
|
+
* @param {string} base64 - The base64-encoded string representing binary data.
|
|
8
|
+
* @param {string} contentType - The MIME type to assign to the resulting `Blob`.
|
|
9
|
+
* @returns {Blob} A `Blob` object containing the binary data from the base64 string.
|
|
10
|
+
*/
|
|
11
|
+
function convertBase64ToBlob(base64, contentType) {
|
|
12
|
+
// Decode base64 string to a binary string
|
|
13
|
+
const binaryString = window.atob(base64);
|
|
14
|
+
// Create a Uint8Array with the same length as the binary string
|
|
15
|
+
const byteArray = new Uint8Array(binaryString.length);
|
|
16
|
+
// Fill the Uint8Array by converting each character's Unicode value to a byte
|
|
17
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
18
|
+
byteArray[i] = binaryString.charCodeAt(i);
|
|
19
|
+
}
|
|
20
|
+
// Create and return a Blob with the specified content type
|
|
21
|
+
return new Blob([byteArray], { type: contentType });
|
|
22
|
+
}
|
|
23
|
+
exports.convertBase64ToBlob = convertBase64ToBlob;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a `Blob` object into a base64-encoded string.
|
|
3
|
+
* The resulting string contains the binary data from the `Blob`.
|
|
4
|
+
*
|
|
5
|
+
* @param {Blob} blob - The `Blob` object to convert to base64.
|
|
6
|
+
* @returns {Promise<string>} A promise that resolves to a base64-encoded string representing the `Blob` data.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertBlobToBase64(blob: Blob): Promise<string>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertBlobToBase64 = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Converts a `Blob` object into a base64-encoded string.
|
|
6
|
+
* The resulting string contains the binary data from the `Blob`.
|
|
7
|
+
*
|
|
8
|
+
* @param {Blob} blob - The `Blob` object to convert to base64.
|
|
9
|
+
* @returns {Promise<string>} A promise that resolves to a base64-encoded string representing the `Blob` data.
|
|
10
|
+
*/
|
|
11
|
+
function convertBlobToBase64(blob) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const reader = new FileReader();
|
|
14
|
+
// Handle the load event which is triggered when readAsDataURL completes
|
|
15
|
+
reader.onloadend = () => {
|
|
16
|
+
// Ensure reader.result is not null and is a string
|
|
17
|
+
if (typeof reader.result === "string") {
|
|
18
|
+
// Extract the Base64 encoded string, skipping the data URL prefix (e.g., "data:image/png;base64,")
|
|
19
|
+
const base64Data = reader.result.split(",")[1];
|
|
20
|
+
if (base64Data) {
|
|
21
|
+
resolve(base64Data);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
reject(new Error("Failed to split the result into Base64 data."));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
reject(new Error("FileReader result is null or not a string."));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// Handle errors during the read process
|
|
32
|
+
reader.onerror = () => {
|
|
33
|
+
var _a;
|
|
34
|
+
reject(new Error(`Error reading blob: ${(_a = reader.error) === null || _a === void 0 ? void 0 : _a.message}`));
|
|
35
|
+
};
|
|
36
|
+
// Initiate reading the blob as a data URL
|
|
37
|
+
reader.readAsDataURL(blob);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
exports.convertBlobToBase64 = convertBlobToBase64;
|
|
@@ -135,7 +135,6 @@ function parse(data, args = {}) {
|
|
|
135
135
|
var _a, _b;
|
|
136
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
137
137
|
const message = JSON.parse(data);
|
|
138
|
-
console.log(message);
|
|
139
138
|
const parsedResponse = yield serializers.empathicVoice.SubscribeEvent.parse(message, {
|
|
140
139
|
unrecognizedObjectKeys: "passthrough",
|
|
141
140
|
allowUnrecognizedUnionMembers: true,
|
|
@@ -14,11 +14,11 @@ export declare class StreamSocket {
|
|
|
14
14
|
/**
|
|
15
15
|
* Send session settings
|
|
16
16
|
*/
|
|
17
|
-
sendSessionSettings(message: Hume.empathicVoice.SessionSettings): Promise<void>;
|
|
17
|
+
sendSessionSettings(message: Omit<Hume.empathicVoice.SessionSettings, "type">): Promise<void>;
|
|
18
18
|
/**
|
|
19
19
|
* Send session settings
|
|
20
20
|
*/
|
|
21
|
-
sendAssistantInput(message: Hume.empathicVoice.AssistantInput): Promise<void>;
|
|
21
|
+
sendAssistantInput(message: Omit<Hume.empathicVoice.AssistantInput, "type">): Promise<void>;
|
|
22
22
|
/**
|
|
23
23
|
* Send text input
|
|
24
24
|
*/
|
|
@@ -51,7 +51,7 @@ class StreamSocket {
|
|
|
51
51
|
*/
|
|
52
52
|
sendSessionSettings(message) {
|
|
53
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
yield this.sendJson(message);
|
|
54
|
+
yield this.sendJson(Object.assign({ type: "session_settings" }, message));
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
@@ -59,7 +59,7 @@ class StreamSocket {
|
|
|
59
59
|
*/
|
|
60
60
|
sendAssistantInput(message) {
|
|
61
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
yield this.sendJson(message);
|
|
62
|
+
yield this.sendJson(Object.assign(Object.assign({}, message), { type: "assistant_input" }));
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensures that the given media stream contains exactly one valid audio track.
|
|
3
|
+
* Throws an error if no audio tracks are found, if there is more than one audio track,
|
|
4
|
+
* or if the sole audio track is falsy.
|
|
5
|
+
*
|
|
6
|
+
* @param {MediaStream} stream - The media stream object containing audio tracks to validate.
|
|
7
|
+
* @throws {Error} "No audio tracks" if the stream contains zero audio tracks.
|
|
8
|
+
* @throws {Error} "Multiple audio tracks" if the stream contains more than one audio track.
|
|
9
|
+
* @throws {Error} "No audio track" if the sole audio track is falsy.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ensureSingleValidAudioTrack: (stream: MediaStream) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureSingleValidAudioTrack = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Ensures that the given media stream contains exactly one valid audio track.
|
|
6
|
+
* Throws an error if no audio tracks are found, if there is more than one audio track,
|
|
7
|
+
* or if the sole audio track is falsy.
|
|
8
|
+
*
|
|
9
|
+
* @param {MediaStream} stream - The media stream object containing audio tracks to validate.
|
|
10
|
+
* @throws {Error} "No audio tracks" if the stream contains zero audio tracks.
|
|
11
|
+
* @throws {Error} "Multiple audio tracks" if the stream contains more than one audio track.
|
|
12
|
+
* @throws {Error} "No audio track" if the sole audio track is falsy.
|
|
13
|
+
*/
|
|
14
|
+
const ensureSingleValidAudioTrack = (stream) => {
|
|
15
|
+
const tracks = stream.getAudioTracks();
|
|
16
|
+
if (tracks.length === 0) {
|
|
17
|
+
throw new Error("No audio tracks available");
|
|
18
|
+
}
|
|
19
|
+
else if (tracks.length > 1) {
|
|
20
|
+
throw new Error("Multiple audio tracks found");
|
|
21
|
+
}
|
|
22
|
+
else if (!tracks[0]) {
|
|
23
|
+
throw new Error("The audio track is invalid");
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.ensureSingleValidAudioTrack = ensureSingleValidAudioTrack;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Requests an audio stream from the user's device using the `getUserMedia` API.
|
|
3
|
+
* The stream will have echo cancellation, noise suppression, and auto gain control enabled.
|
|
4
|
+
*
|
|
5
|
+
* @returns {Promise<MediaStream>} A promise that resolves to a `MediaStream` containing audio data only.
|
|
6
|
+
* @throws {DOMException} If the user denies access or no audio input devices are found.
|
|
7
|
+
*/
|
|
8
|
+
export declare const getAudioStream: () => Promise<MediaStream>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getAudioStream = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Requests an audio stream from the user's device using the `getUserMedia` API.
|
|
15
|
+
* The stream will have echo cancellation, noise suppression, and auto gain control enabled.
|
|
16
|
+
*
|
|
17
|
+
* @returns {Promise<MediaStream>} A promise that resolves to a `MediaStream` containing audio data only.
|
|
18
|
+
* @throws {DOMException} If the user denies access or no audio input devices are found.
|
|
19
|
+
*/
|
|
20
|
+
const getAudioStream = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
return navigator.mediaDevices.getUserMedia({
|
|
22
|
+
audio: {
|
|
23
|
+
echoCancellation: true,
|
|
24
|
+
noiseSuppression: true,
|
|
25
|
+
autoGainControl: true,
|
|
26
|
+
},
|
|
27
|
+
video: false,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
exports.getAudioStream = getAudioStream;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum representing the supported MIME types for audio recording.
|
|
3
|
+
*/
|
|
4
|
+
export declare enum MimeType {
|
|
5
|
+
WEBM = "audio/webm",
|
|
6
|
+
MP4 = "audio/mp4",
|
|
7
|
+
WAV = "audio/wav"
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Represents a successful result where a compatible MIME type was found.
|
|
11
|
+
* @property {true} success - Indicates a successful result.
|
|
12
|
+
* @property {MimeType} mimeType - The MIME type supported by the browser.
|
|
13
|
+
*/
|
|
14
|
+
declare type MimeTypeSuccessResult = {
|
|
15
|
+
success: true;
|
|
16
|
+
mimeType: MimeType;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Represents a failure result when no compatible MIME type is supported or an error occurs.
|
|
20
|
+
* @property {false} success - Indicates a failure result.
|
|
21
|
+
* @property {Error} error - The error explaining why a compatible MIME type was not found.
|
|
22
|
+
*/
|
|
23
|
+
declare type MimeTypeFailureResult = {
|
|
24
|
+
success: false;
|
|
25
|
+
error: Error;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Union type representing the possible outcomes of checking for a supported MIME type.
|
|
29
|
+
* Could either be a successful or failure result.
|
|
30
|
+
*/
|
|
31
|
+
declare type MimeTypeResult = MimeTypeSuccessResult | MimeTypeFailureResult;
|
|
32
|
+
/**
|
|
33
|
+
* Determines if the current browser supports any of the predefined audio MIME types
|
|
34
|
+
* (WEBM, MP4, or WAV) via the `MediaRecorder` API.
|
|
35
|
+
*
|
|
36
|
+
* @returns {MimeTypeResult} An object containing the success status and either a supported MIME type or an error.
|
|
37
|
+
* @throws {Error} If the `MediaRecorder` API is not supported by the browser or no compatible types are found.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getBrowserSupportedMimeType(): MimeTypeResult;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getBrowserSupportedMimeType = exports.MimeType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Enum representing the supported MIME types for audio recording.
|
|
6
|
+
*/
|
|
7
|
+
var MimeType;
|
|
8
|
+
(function (MimeType) {
|
|
9
|
+
MimeType["WEBM"] = "audio/webm";
|
|
10
|
+
MimeType["MP4"] = "audio/mp4";
|
|
11
|
+
MimeType["WAV"] = "audio/wav";
|
|
12
|
+
})(MimeType = exports.MimeType || (exports.MimeType = {}));
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether the `MediaRecorder` API is supported in the current environment.
|
|
15
|
+
*
|
|
16
|
+
* @returns {boolean} Returns `true` if the `MediaRecorder` API is supported, otherwise `false`.
|
|
17
|
+
*/
|
|
18
|
+
function isMediaRecorderSupported() {
|
|
19
|
+
return typeof MediaRecorder !== "undefined";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Finds and returns the first MIME type from the given array that is supported by the `MediaRecorder`.
|
|
23
|
+
*
|
|
24
|
+
* @param {MimeType[]} mimeTypes - An array of MIME types to check for compatibility.
|
|
25
|
+
* @returns {MimeType | null} The first supported MIME type or `null` if none are supported.
|
|
26
|
+
*/
|
|
27
|
+
function getSupportedMimeType(mimeTypes) {
|
|
28
|
+
return mimeTypes.find((type) => MediaRecorder.isTypeSupported(type)) || null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Determines if the current browser supports any of the predefined audio MIME types
|
|
32
|
+
* (WEBM, MP4, or WAV) via the `MediaRecorder` API.
|
|
33
|
+
*
|
|
34
|
+
* @returns {MimeTypeResult} An object containing the success status and either a supported MIME type or an error.
|
|
35
|
+
* @throws {Error} If the `MediaRecorder` API is not supported by the browser or no compatible types are found.
|
|
36
|
+
*/
|
|
37
|
+
function getBrowserSupportedMimeType() {
|
|
38
|
+
// Check if the MediaRecorder API is supported in the current environment.
|
|
39
|
+
if (!isMediaRecorderSupported()) {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: new Error("MediaRecorder is not supported"),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const COMPATIBLE_MIME_TYPES = [MimeType.WEBM, MimeType.MP4, MimeType.WAV];
|
|
46
|
+
// Find the first compatible MIME type that the browser's MediaRecorder supports.
|
|
47
|
+
const supportedMimeType = getSupportedMimeType(COMPATIBLE_MIME_TYPES);
|
|
48
|
+
// If no compatible MIME type is found, return a failure result with an appropriate error message.
|
|
49
|
+
if (!supportedMimeType) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: new Error("Browser does not support any compatible mime types"),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// If a compatible MIME type is found, return a success result with the supported MIME type.
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
mimeType: supportedMimeType,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.getBrowserSupportedMimeType = getBrowserSupportedMimeType;
|
package/dist/wrapper/index.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
export { base64Decode } from "./base64Decode";
|
|
2
2
|
export { base64Encode } from "./base64Encode";
|
|
3
|
+
export { convertBase64ToBlob } from "./convertBase64ToBlob";
|
|
4
|
+
export { convertBlobToBase64 } from "./convertBlobToBase64";
|
|
5
|
+
export { ensureSingleValidAudioTrack } from "./ensureSingleValidAudioTrack";
|
|
6
|
+
export { getAudioStream } from "./getAudioStream";
|
|
7
|
+
export { MimeType, getBrowserSupportedMimeType } from "./getBrowserSupportedMimeType";
|
|
3
8
|
export { HumeClient } from "./HumeClient";
|
package/dist/wrapper/index.js
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HumeClient = exports.base64Encode = exports.base64Decode = void 0;
|
|
3
|
+
exports.HumeClient = exports.getBrowserSupportedMimeType = exports.MimeType = exports.getAudioStream = exports.ensureSingleValidAudioTrack = exports.convertBlobToBase64 = exports.convertBase64ToBlob = exports.base64Encode = exports.base64Decode = void 0;
|
|
4
4
|
var base64Decode_1 = require("./base64Decode");
|
|
5
5
|
Object.defineProperty(exports, "base64Decode", { enumerable: true, get: function () { return base64Decode_1.base64Decode; } });
|
|
6
6
|
var base64Encode_1 = require("./base64Encode");
|
|
7
7
|
Object.defineProperty(exports, "base64Encode", { enumerable: true, get: function () { return base64Encode_1.base64Encode; } });
|
|
8
|
+
var convertBase64ToBlob_1 = require("./convertBase64ToBlob");
|
|
9
|
+
Object.defineProperty(exports, "convertBase64ToBlob", { enumerable: true, get: function () { return convertBase64ToBlob_1.convertBase64ToBlob; } });
|
|
10
|
+
var convertBlobToBase64_1 = require("./convertBlobToBase64");
|
|
11
|
+
Object.defineProperty(exports, "convertBlobToBase64", { enumerable: true, get: function () { return convertBlobToBase64_1.convertBlobToBase64; } });
|
|
12
|
+
var ensureSingleValidAudioTrack_1 = require("./ensureSingleValidAudioTrack");
|
|
13
|
+
Object.defineProperty(exports, "ensureSingleValidAudioTrack", { enumerable: true, get: function () { return ensureSingleValidAudioTrack_1.ensureSingleValidAudioTrack; } });
|
|
14
|
+
var getAudioStream_1 = require("./getAudioStream");
|
|
15
|
+
Object.defineProperty(exports, "getAudioStream", { enumerable: true, get: function () { return getAudioStream_1.getAudioStream; } });
|
|
16
|
+
var getBrowserSupportedMimeType_1 = require("./getBrowserSupportedMimeType");
|
|
17
|
+
Object.defineProperty(exports, "MimeType", { enumerable: true, get: function () { return getBrowserSupportedMimeType_1.MimeType; } });
|
|
18
|
+
Object.defineProperty(exports, "getBrowserSupportedMimeType", { enumerable: true, get: function () { return getBrowserSupportedMimeType_1.getBrowserSupportedMimeType; } });
|
|
8
19
|
var HumeClient_1 = require("./HumeClient");
|
|
9
20
|
Object.defineProperty(exports, "HumeClient", { enumerable: true, get: function () { return HumeClient_1.HumeClient; } });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hume",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"repository": "https://github.com/HumeAI/hume-typescript-sdk",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -32,4 +32,4 @@
|
|
|
32
32
|
"@types/ws": "^8.5.9",
|
|
33
33
|
"@types/uuid": "9.0.7"
|
|
34
34
|
}
|
|
35
|
-
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a base64-encoded string into a `Blob` object with the specified content type.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} base64 - The base64-encoded string representing binary data.
|
|
5
|
+
* @param {string} contentType - The MIME type to assign to the resulting `Blob`.
|
|
6
|
+
* @returns {Blob} A `Blob` object containing the binary data from the base64 string.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertBase64ToBlob(base64: string, contentType: string): Blob;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertBase64ToBlob = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Converts a base64-encoded string into a `Blob` object with the specified content type.
|
|
6
|
+
*
|
|
7
|
+
* @param {string} base64 - The base64-encoded string representing binary data.
|
|
8
|
+
* @param {string} contentType - The MIME type to assign to the resulting `Blob`.
|
|
9
|
+
* @returns {Blob} A `Blob` object containing the binary data from the base64 string.
|
|
10
|
+
*/
|
|
11
|
+
function convertBase64ToBlob(base64, contentType) {
|
|
12
|
+
// Decode base64 string to a binary string
|
|
13
|
+
const binaryString = window.atob(base64);
|
|
14
|
+
// Create a Uint8Array with the same length as the binary string
|
|
15
|
+
const byteArray = new Uint8Array(binaryString.length);
|
|
16
|
+
// Fill the Uint8Array by converting each character's Unicode value to a byte
|
|
17
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
18
|
+
byteArray[i] = binaryString.charCodeAt(i);
|
|
19
|
+
}
|
|
20
|
+
// Create and return a Blob with the specified content type
|
|
21
|
+
return new Blob([byteArray], { type: contentType });
|
|
22
|
+
}
|
|
23
|
+
exports.convertBase64ToBlob = convertBase64ToBlob;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a `Blob` object into a base64-encoded string.
|
|
3
|
+
* The resulting string contains the binary data from the `Blob`.
|
|
4
|
+
*
|
|
5
|
+
* @param {Blob} blob - The `Blob` object to convert to base64.
|
|
6
|
+
* @returns {Promise<string>} A promise that resolves to a base64-encoded string representing the `Blob` data.
|
|
7
|
+
*/
|
|
8
|
+
export declare function convertBlobToBase64(blob: Blob): Promise<string>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.convertBlobToBase64 = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Converts a `Blob` object into a base64-encoded string.
|
|
6
|
+
* The resulting string contains the binary data from the `Blob`.
|
|
7
|
+
*
|
|
8
|
+
* @param {Blob} blob - The `Blob` object to convert to base64.
|
|
9
|
+
* @returns {Promise<string>} A promise that resolves to a base64-encoded string representing the `Blob` data.
|
|
10
|
+
*/
|
|
11
|
+
function convertBlobToBase64(blob) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
const reader = new FileReader();
|
|
14
|
+
// Handle the load event which is triggered when readAsDataURL completes
|
|
15
|
+
reader.onloadend = () => {
|
|
16
|
+
// Ensure reader.result is not null and is a string
|
|
17
|
+
if (typeof reader.result === "string") {
|
|
18
|
+
// Extract the Base64 encoded string, skipping the data URL prefix (e.g., "data:image/png;base64,")
|
|
19
|
+
const base64Data = reader.result.split(",")[1];
|
|
20
|
+
if (base64Data) {
|
|
21
|
+
resolve(base64Data);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
reject(new Error("Failed to split the result into Base64 data."));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
reject(new Error("FileReader result is null or not a string."));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// Handle errors during the read process
|
|
32
|
+
reader.onerror = () => {
|
|
33
|
+
var _a;
|
|
34
|
+
reject(new Error(`Error reading blob: ${(_a = reader.error) === null || _a === void 0 ? void 0 : _a.message}`));
|
|
35
|
+
};
|
|
36
|
+
// Initiate reading the blob as a data URL
|
|
37
|
+
reader.readAsDataURL(blob);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
exports.convertBlobToBase64 = convertBlobToBase64;
|
|
@@ -135,7 +135,6 @@ function parse(data, args = {}) {
|
|
|
135
135
|
var _a, _b;
|
|
136
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
137
137
|
const message = JSON.parse(data);
|
|
138
|
-
console.log(message);
|
|
139
138
|
const parsedResponse = yield serializers.empathicVoice.SubscribeEvent.parse(message, {
|
|
140
139
|
unrecognizedObjectKeys: "passthrough",
|
|
141
140
|
allowUnrecognizedUnionMembers: true,
|
|
@@ -14,11 +14,11 @@ export declare class StreamSocket {
|
|
|
14
14
|
/**
|
|
15
15
|
* Send session settings
|
|
16
16
|
*/
|
|
17
|
-
sendSessionSettings(message: Hume.empathicVoice.SessionSettings): Promise<void>;
|
|
17
|
+
sendSessionSettings(message: Omit<Hume.empathicVoice.SessionSettings, "type">): Promise<void>;
|
|
18
18
|
/**
|
|
19
19
|
* Send session settings
|
|
20
20
|
*/
|
|
21
|
-
sendAssistantInput(message: Hume.empathicVoice.AssistantInput): Promise<void>;
|
|
21
|
+
sendAssistantInput(message: Omit<Hume.empathicVoice.AssistantInput, "type">): Promise<void>;
|
|
22
22
|
/**
|
|
23
23
|
* Send text input
|
|
24
24
|
*/
|
|
@@ -51,7 +51,7 @@ class StreamSocket {
|
|
|
51
51
|
*/
|
|
52
52
|
sendSessionSettings(message) {
|
|
53
53
|
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
yield this.sendJson(message);
|
|
54
|
+
yield this.sendJson(Object.assign({ type: "session_settings" }, message));
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
/**
|
|
@@ -59,7 +59,7 @@ class StreamSocket {
|
|
|
59
59
|
*/
|
|
60
60
|
sendAssistantInput(message) {
|
|
61
61
|
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
-
yield this.sendJson(message);
|
|
62
|
+
yield this.sendJson(Object.assign(Object.assign({}, message), { type: "assistant_input" }));
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
/**
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensures that the given media stream contains exactly one valid audio track.
|
|
3
|
+
* Throws an error if no audio tracks are found, if there is more than one audio track,
|
|
4
|
+
* or if the sole audio track is falsy.
|
|
5
|
+
*
|
|
6
|
+
* @param {MediaStream} stream - The media stream object containing audio tracks to validate.
|
|
7
|
+
* @throws {Error} "No audio tracks" if the stream contains zero audio tracks.
|
|
8
|
+
* @throws {Error} "Multiple audio tracks" if the stream contains more than one audio track.
|
|
9
|
+
* @throws {Error} "No audio track" if the sole audio track is falsy.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ensureSingleValidAudioTrack: (stream: MediaStream) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ensureSingleValidAudioTrack = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Ensures that the given media stream contains exactly one valid audio track.
|
|
6
|
+
* Throws an error if no audio tracks are found, if there is more than one audio track,
|
|
7
|
+
* or if the sole audio track is falsy.
|
|
8
|
+
*
|
|
9
|
+
* @param {MediaStream} stream - The media stream object containing audio tracks to validate.
|
|
10
|
+
* @throws {Error} "No audio tracks" if the stream contains zero audio tracks.
|
|
11
|
+
* @throws {Error} "Multiple audio tracks" if the stream contains more than one audio track.
|
|
12
|
+
* @throws {Error} "No audio track" if the sole audio track is falsy.
|
|
13
|
+
*/
|
|
14
|
+
const ensureSingleValidAudioTrack = (stream) => {
|
|
15
|
+
const tracks = stream.getAudioTracks();
|
|
16
|
+
if (tracks.length === 0) {
|
|
17
|
+
throw new Error("No audio tracks available");
|
|
18
|
+
}
|
|
19
|
+
else if (tracks.length > 1) {
|
|
20
|
+
throw new Error("Multiple audio tracks found");
|
|
21
|
+
}
|
|
22
|
+
else if (!tracks[0]) {
|
|
23
|
+
throw new Error("The audio track is invalid");
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.ensureSingleValidAudioTrack = ensureSingleValidAudioTrack;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Requests an audio stream from the user's device using the `getUserMedia` API.
|
|
3
|
+
* The stream will have echo cancellation, noise suppression, and auto gain control enabled.
|
|
4
|
+
*
|
|
5
|
+
* @returns {Promise<MediaStream>} A promise that resolves to a `MediaStream` containing audio data only.
|
|
6
|
+
* @throws {DOMException} If the user denies access or no audio input devices are found.
|
|
7
|
+
*/
|
|
8
|
+
export declare const getAudioStream: () => Promise<MediaStream>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.getAudioStream = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* Requests an audio stream from the user's device using the `getUserMedia` API.
|
|
15
|
+
* The stream will have echo cancellation, noise suppression, and auto gain control enabled.
|
|
16
|
+
*
|
|
17
|
+
* @returns {Promise<MediaStream>} A promise that resolves to a `MediaStream` containing audio data only.
|
|
18
|
+
* @throws {DOMException} If the user denies access or no audio input devices are found.
|
|
19
|
+
*/
|
|
20
|
+
const getAudioStream = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
return navigator.mediaDevices.getUserMedia({
|
|
22
|
+
audio: {
|
|
23
|
+
echoCancellation: true,
|
|
24
|
+
noiseSuppression: true,
|
|
25
|
+
autoGainControl: true,
|
|
26
|
+
},
|
|
27
|
+
video: false,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
exports.getAudioStream = getAudioStream;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum representing the supported MIME types for audio recording.
|
|
3
|
+
*/
|
|
4
|
+
export declare enum MimeType {
|
|
5
|
+
WEBM = "audio/webm",
|
|
6
|
+
MP4 = "audio/mp4",
|
|
7
|
+
WAV = "audio/wav"
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Represents a successful result where a compatible MIME type was found.
|
|
11
|
+
* @property {true} success - Indicates a successful result.
|
|
12
|
+
* @property {MimeType} mimeType - The MIME type supported by the browser.
|
|
13
|
+
*/
|
|
14
|
+
declare type MimeTypeSuccessResult = {
|
|
15
|
+
success: true;
|
|
16
|
+
mimeType: MimeType;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Represents a failure result when no compatible MIME type is supported or an error occurs.
|
|
20
|
+
* @property {false} success - Indicates a failure result.
|
|
21
|
+
* @property {Error} error - The error explaining why a compatible MIME type was not found.
|
|
22
|
+
*/
|
|
23
|
+
declare type MimeTypeFailureResult = {
|
|
24
|
+
success: false;
|
|
25
|
+
error: Error;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Union type representing the possible outcomes of checking for a supported MIME type.
|
|
29
|
+
* Could either be a successful or failure result.
|
|
30
|
+
*/
|
|
31
|
+
declare type MimeTypeResult = MimeTypeSuccessResult | MimeTypeFailureResult;
|
|
32
|
+
/**
|
|
33
|
+
* Determines if the current browser supports any of the predefined audio MIME types
|
|
34
|
+
* (WEBM, MP4, or WAV) via the `MediaRecorder` API.
|
|
35
|
+
*
|
|
36
|
+
* @returns {MimeTypeResult} An object containing the success status and either a supported MIME type or an error.
|
|
37
|
+
* @throws {Error} If the `MediaRecorder` API is not supported by the browser or no compatible types are found.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getBrowserSupportedMimeType(): MimeTypeResult;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getBrowserSupportedMimeType = exports.MimeType = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Enum representing the supported MIME types for audio recording.
|
|
6
|
+
*/
|
|
7
|
+
var MimeType;
|
|
8
|
+
(function (MimeType) {
|
|
9
|
+
MimeType["WEBM"] = "audio/webm";
|
|
10
|
+
MimeType["MP4"] = "audio/mp4";
|
|
11
|
+
MimeType["WAV"] = "audio/wav";
|
|
12
|
+
})(MimeType = exports.MimeType || (exports.MimeType = {}));
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether the `MediaRecorder` API is supported in the current environment.
|
|
15
|
+
*
|
|
16
|
+
* @returns {boolean} Returns `true` if the `MediaRecorder` API is supported, otherwise `false`.
|
|
17
|
+
*/
|
|
18
|
+
function isMediaRecorderSupported() {
|
|
19
|
+
return typeof MediaRecorder !== "undefined";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Finds and returns the first MIME type from the given array that is supported by the `MediaRecorder`.
|
|
23
|
+
*
|
|
24
|
+
* @param {MimeType[]} mimeTypes - An array of MIME types to check for compatibility.
|
|
25
|
+
* @returns {MimeType | null} The first supported MIME type or `null` if none are supported.
|
|
26
|
+
*/
|
|
27
|
+
function getSupportedMimeType(mimeTypes) {
|
|
28
|
+
return mimeTypes.find((type) => MediaRecorder.isTypeSupported(type)) || null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Determines if the current browser supports any of the predefined audio MIME types
|
|
32
|
+
* (WEBM, MP4, or WAV) via the `MediaRecorder` API.
|
|
33
|
+
*
|
|
34
|
+
* @returns {MimeTypeResult} An object containing the success status and either a supported MIME type or an error.
|
|
35
|
+
* @throws {Error} If the `MediaRecorder` API is not supported by the browser or no compatible types are found.
|
|
36
|
+
*/
|
|
37
|
+
function getBrowserSupportedMimeType() {
|
|
38
|
+
// Check if the MediaRecorder API is supported in the current environment.
|
|
39
|
+
if (!isMediaRecorderSupported()) {
|
|
40
|
+
return {
|
|
41
|
+
success: false,
|
|
42
|
+
error: new Error("MediaRecorder is not supported"),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
const COMPATIBLE_MIME_TYPES = [MimeType.WEBM, MimeType.MP4, MimeType.WAV];
|
|
46
|
+
// Find the first compatible MIME type that the browser's MediaRecorder supports.
|
|
47
|
+
const supportedMimeType = getSupportedMimeType(COMPATIBLE_MIME_TYPES);
|
|
48
|
+
// If no compatible MIME type is found, return a failure result with an appropriate error message.
|
|
49
|
+
if (!supportedMimeType) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: new Error("Browser does not support any compatible mime types"),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
// If a compatible MIME type is found, return a success result with the supported MIME type.
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
mimeType: supportedMimeType,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.getBrowserSupportedMimeType = getBrowserSupportedMimeType;
|
package/wrapper/index.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
export { base64Decode } from "./base64Decode";
|
|
2
2
|
export { base64Encode } from "./base64Encode";
|
|
3
|
+
export { convertBase64ToBlob } from "./convertBase64ToBlob";
|
|
4
|
+
export { convertBlobToBase64 } from "./convertBlobToBase64";
|
|
5
|
+
export { ensureSingleValidAudioTrack } from "./ensureSingleValidAudioTrack";
|
|
6
|
+
export { getAudioStream } from "./getAudioStream";
|
|
7
|
+
export { MimeType, getBrowserSupportedMimeType } from "./getBrowserSupportedMimeType";
|
|
3
8
|
export { HumeClient } from "./HumeClient";
|
package/wrapper/index.js
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HumeClient = exports.base64Encode = exports.base64Decode = void 0;
|
|
3
|
+
exports.HumeClient = exports.getBrowserSupportedMimeType = exports.MimeType = exports.getAudioStream = exports.ensureSingleValidAudioTrack = exports.convertBlobToBase64 = exports.convertBase64ToBlob = exports.base64Encode = exports.base64Decode = void 0;
|
|
4
4
|
var base64Decode_1 = require("./base64Decode");
|
|
5
5
|
Object.defineProperty(exports, "base64Decode", { enumerable: true, get: function () { return base64Decode_1.base64Decode; } });
|
|
6
6
|
var base64Encode_1 = require("./base64Encode");
|
|
7
7
|
Object.defineProperty(exports, "base64Encode", { enumerable: true, get: function () { return base64Encode_1.base64Encode; } });
|
|
8
|
+
var convertBase64ToBlob_1 = require("./convertBase64ToBlob");
|
|
9
|
+
Object.defineProperty(exports, "convertBase64ToBlob", { enumerable: true, get: function () { return convertBase64ToBlob_1.convertBase64ToBlob; } });
|
|
10
|
+
var convertBlobToBase64_1 = require("./convertBlobToBase64");
|
|
11
|
+
Object.defineProperty(exports, "convertBlobToBase64", { enumerable: true, get: function () { return convertBlobToBase64_1.convertBlobToBase64; } });
|
|
12
|
+
var ensureSingleValidAudioTrack_1 = require("./ensureSingleValidAudioTrack");
|
|
13
|
+
Object.defineProperty(exports, "ensureSingleValidAudioTrack", { enumerable: true, get: function () { return ensureSingleValidAudioTrack_1.ensureSingleValidAudioTrack; } });
|
|
14
|
+
var getAudioStream_1 = require("./getAudioStream");
|
|
15
|
+
Object.defineProperty(exports, "getAudioStream", { enumerable: true, get: function () { return getAudioStream_1.getAudioStream; } });
|
|
16
|
+
var getBrowserSupportedMimeType_1 = require("./getBrowserSupportedMimeType");
|
|
17
|
+
Object.defineProperty(exports, "MimeType", { enumerable: true, get: function () { return getBrowserSupportedMimeType_1.MimeType; } });
|
|
18
|
+
Object.defineProperty(exports, "getBrowserSupportedMimeType", { enumerable: true, get: function () { return getBrowserSupportedMimeType_1.getBrowserSupportedMimeType; } });
|
|
8
19
|
var HumeClient_1 = require("./HumeClient");
|
|
9
20
|
Object.defineProperty(exports, "HumeClient", { enumerable: true, get: function () { return HumeClient_1.HumeClient; } });
|