@corti/dictation-web 0.6.0-rc.1 → 0.6.1-rc.1
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/dist/bundle.js +167 -57
- package/dist/components/recording-button.js +4 -1
- package/dist/components/recording-button.js.map +1 -1
- package/dist/controllers/dictation-controller.d.ts +1 -1
- package/dist/controllers/dictation-controller.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/devices.d.ts +12 -8
- package/dist/utils/devices.js +39 -28
- package/dist/utils/devices.js.map +1 -1
- package/dist/utils/events.d.ts +2 -0
- package/dist/utils/events.js +7 -0
- package/dist/utils/events.js.map +1 -1
- package/dist/utils/keybinding.d.ts +2 -1
- package/dist/utils/keybinding.js +12 -6
- package/dist/utils/keybinding.js.map +1 -1
- package/package.json +2 -2
package/dist/bundle.js
CHANGED
|
@@ -962,36 +962,43 @@ function c5({ context: c6, subscribe: e10 }) {
|
|
|
962
962
|
}
|
|
963
963
|
|
|
964
964
|
// dist/utils/devices.js
|
|
965
|
-
async function
|
|
966
|
-
if (
|
|
967
|
-
const
|
|
968
|
-
|
|
969
|
-
track.stop();
|
|
965
|
+
async function primeMicStream() {
|
|
966
|
+
if (navigator.permissions) {
|
|
967
|
+
const permissionStatus = await navigator.permissions.query({
|
|
968
|
+
name: "microphone"
|
|
970
969
|
});
|
|
971
|
-
|
|
970
|
+
if (permissionStatus.state === "denied") {
|
|
971
|
+
throw new Error("Microphone permission is denied");
|
|
972
|
+
}
|
|
972
973
|
}
|
|
973
|
-
const
|
|
974
|
-
|
|
974
|
+
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
975
|
+
stream.getTracks().forEach((track) => {
|
|
976
|
+
track.stop();
|
|
975
977
|
});
|
|
976
|
-
if (permissionStatus.state === "denied") {
|
|
977
|
-
throw new Error("Microphone permission is denied");
|
|
978
|
-
}
|
|
979
|
-
if (permissionStatus.state === "prompt") {
|
|
980
|
-
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
|
981
|
-
stream.getTracks().forEach((track) => {
|
|
982
|
-
track.stop();
|
|
983
|
-
});
|
|
984
|
-
}
|
|
985
978
|
}
|
|
986
979
|
async function getAudioDevices() {
|
|
987
980
|
if (!navigator.mediaDevices?.enumerateDevices) {
|
|
988
981
|
throw new Error("MediaDevices API is not available");
|
|
989
982
|
}
|
|
990
|
-
await
|
|
983
|
+
let audioDevices = await listAudioInputs();
|
|
984
|
+
if (needsMicPriming(audioDevices)) {
|
|
985
|
+
await primeMicStream();
|
|
986
|
+
audioDevices = await listAudioInputs();
|
|
987
|
+
}
|
|
988
|
+
return {
|
|
989
|
+
defaultDevice: audioDevices[0],
|
|
990
|
+
devices: audioDevices
|
|
991
|
+
};
|
|
992
|
+
}
|
|
993
|
+
async function listAudioInputs() {
|
|
991
994
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
+
return devices.filter((device) => device.kind === "audioinput");
|
|
996
|
+
}
|
|
997
|
+
function needsMicPriming(audioInputs) {
|
|
998
|
+
if (audioInputs.length === 0) {
|
|
999
|
+
return false;
|
|
1000
|
+
}
|
|
1001
|
+
return audioInputs.some((d3) => d3.deviceId === "" || d3.label === "");
|
|
995
1002
|
}
|
|
996
1003
|
|
|
997
1004
|
// dist/utils/events.js
|
|
@@ -1048,6 +1055,13 @@ function usageEvent(detail) {
|
|
|
1048
1055
|
detail
|
|
1049
1056
|
});
|
|
1050
1057
|
}
|
|
1058
|
+
function deltaUsageEvent(detail) {
|
|
1059
|
+
return new CustomEvent("delta-usage", {
|
|
1060
|
+
bubbles: true,
|
|
1061
|
+
composed: true,
|
|
1062
|
+
detail
|
|
1063
|
+
});
|
|
1064
|
+
}
|
|
1051
1065
|
function errorToMessage(error) {
|
|
1052
1066
|
if (error instanceof Error) {
|
|
1053
1067
|
return error.message;
|
|
@@ -1850,15 +1864,16 @@ var StreamConfigStatusMessageType = {
|
|
|
1850
1864
|
ConfigDenied: "CONFIG_DENIED",
|
|
1851
1865
|
ConfigMissing: "CONFIG_MISSING",
|
|
1852
1866
|
ConfigNotProvided: "CONFIG_NOT_PROVIDED",
|
|
1853
|
-
ConfigAlreadyReceived: "CONFIG_ALREADY_RECEIVED"
|
|
1854
|
-
ConfigTimeout: "CONFIG_TIMEOUT"
|
|
1867
|
+
ConfigAlreadyReceived: "CONFIG_ALREADY_RECEIVED"
|
|
1855
1868
|
};
|
|
1856
1869
|
|
|
1857
1870
|
// node_modules/@corti/sdk/dist/esm/api/types/TranscribeConfigStatusMessageType.mjs
|
|
1858
1871
|
var TranscribeConfigStatusMessageType = {
|
|
1859
1872
|
ConfigAccepted: "CONFIG_ACCEPTED",
|
|
1860
1873
|
ConfigDenied: "CONFIG_DENIED",
|
|
1861
|
-
ConfigTimeout: "CONFIG_TIMEOUT"
|
|
1874
|
+
ConfigTimeout: "CONFIG_TIMEOUT",
|
|
1875
|
+
ConfigAlreadyReceived: "CONFIG_ALREADY_RECEIVED",
|
|
1876
|
+
ConfigMissing: "CONFIG_MISSING"
|
|
1862
1877
|
};
|
|
1863
1878
|
|
|
1864
1879
|
// node_modules/@corti/sdk/dist/esm/core/schemas/builders/schema-utils/stringifyValidationErrors.mjs
|
|
@@ -2198,15 +2213,15 @@ var HttpResponsePromise = class _HttpResponsePromise extends Promise {
|
|
|
2198
2213
|
};
|
|
2199
2214
|
|
|
2200
2215
|
// node_modules/@corti/sdk/dist/esm/core/fetcher/Headers.mjs
|
|
2201
|
-
var
|
|
2216
|
+
var Headers2;
|
|
2202
2217
|
if (typeof globalThis.Headers !== "undefined") {
|
|
2203
|
-
|
|
2218
|
+
Headers2 = globalThis.Headers;
|
|
2204
2219
|
} else {
|
|
2205
|
-
|
|
2220
|
+
Headers2 = class Headers3 {
|
|
2206
2221
|
constructor(init) {
|
|
2207
2222
|
this.headers = /* @__PURE__ */ new Map();
|
|
2208
2223
|
if (init) {
|
|
2209
|
-
if (init instanceof
|
|
2224
|
+
if (init instanceof Headers3) {
|
|
2210
2225
|
init.forEach((value, key) => this.append(key, value));
|
|
2211
2226
|
} else if (Array.isArray(init)) {
|
|
2212
2227
|
for (const [key, value] of init) {
|
|
@@ -2277,7 +2292,7 @@ if (typeof globalThis.Headers !== "undefined") {
|
|
|
2277
2292
|
|
|
2278
2293
|
// node_modules/@corti/sdk/dist/esm/core/fetcher/RawResponse.mjs
|
|
2279
2294
|
var abortRawResponse = {
|
|
2280
|
-
headers: new
|
|
2295
|
+
headers: new Headers2(),
|
|
2281
2296
|
redirected: false,
|
|
2282
2297
|
status: 499,
|
|
2283
2298
|
statusText: "Client Closed Request",
|
|
@@ -2285,7 +2300,7 @@ var abortRawResponse = {
|
|
|
2285
2300
|
url: ""
|
|
2286
2301
|
};
|
|
2287
2302
|
var unknownRawResponse = {
|
|
2288
|
-
headers: new
|
|
2303
|
+
headers: new Headers2(),
|
|
2289
2304
|
redirected: false,
|
|
2290
2305
|
status: 0,
|
|
2291
2306
|
statusText: "Unknown Error",
|
|
@@ -2859,7 +2874,7 @@ var SENSITIVE_HEADERS = /* @__PURE__ */ new Set([
|
|
|
2859
2874
|
]);
|
|
2860
2875
|
function redactHeaders(headers) {
|
|
2861
2876
|
const filtered = {};
|
|
2862
|
-
for (const [key, value] of headers instanceof
|
|
2877
|
+
for (const [key, value] of headers instanceof Headers2 ? headers.entries() : Object.entries(headers)) {
|
|
2863
2878
|
if (SENSITIVE_HEADERS.has(key.toLowerCase())) {
|
|
2864
2879
|
filtered[key] = "[REDACTED]";
|
|
2865
2880
|
} else {
|
|
@@ -2957,7 +2972,7 @@ function redactUrl(url) {
|
|
|
2957
2972
|
function getHeaders(args) {
|
|
2958
2973
|
return __awaiter10(this, void 0, void 0, function* () {
|
|
2959
2974
|
var _a;
|
|
2960
|
-
const newHeaders = new
|
|
2975
|
+
const newHeaders = new Headers2();
|
|
2961
2976
|
newHeaders.set("Accept", args.responseType === "json" ? "application/json" : args.responseType === "text" ? "text/plain" : args.responseType === "sse" ? "text/event-stream" : "*/*");
|
|
2962
2977
|
if (args.body !== void 0 && args.contentType != null) {
|
|
2963
2978
|
newHeaders.set("Content-Type", args.contentType);
|
|
@@ -5964,8 +5979,7 @@ var StreamConfigStatusMessageType2 = schemas_exports.enum_([
|
|
|
5964
5979
|
"CONFIG_DENIED",
|
|
5965
5980
|
"CONFIG_MISSING",
|
|
5966
5981
|
"CONFIG_NOT_PROVIDED",
|
|
5967
|
-
"CONFIG_ALREADY_RECEIVED"
|
|
5968
|
-
"CONFIG_TIMEOUT"
|
|
5982
|
+
"CONFIG_ALREADY_RECEIVED"
|
|
5969
5983
|
]);
|
|
5970
5984
|
|
|
5971
5985
|
// node_modules/@corti/sdk/dist/esm/serialization/types/StreamConfigStatusMessage.mjs
|
|
@@ -5974,6 +5988,12 @@ var StreamConfigStatusMessage = schemas_exports.object({
|
|
|
5974
5988
|
reason: schemas_exports.string().optional()
|
|
5975
5989
|
});
|
|
5976
5990
|
|
|
5991
|
+
// node_modules/@corti/sdk/dist/esm/serialization/types/StreamDeltaUsageMessage.mjs
|
|
5992
|
+
var StreamDeltaUsageMessage = schemas_exports.object({
|
|
5993
|
+
type: schemas_exports.stringLiteral("delta_usage"),
|
|
5994
|
+
credits: schemas_exports.number()
|
|
5995
|
+
});
|
|
5996
|
+
|
|
5977
5997
|
// node_modules/@corti/sdk/dist/esm/serialization/types/StreamEndedMessage.mjs
|
|
5978
5998
|
var StreamEndedMessage = schemas_exports.object({
|
|
5979
5999
|
type: schemas_exports.stringLiteral("ENDED")
|
|
@@ -6057,6 +6077,7 @@ var StreamSocketResponse = schemas_exports.undiscriminatedUnion([
|
|
|
6057
6077
|
StreamTranscriptMessage,
|
|
6058
6078
|
StreamFactsMessage,
|
|
6059
6079
|
StreamFlushedMessage,
|
|
6080
|
+
StreamDeltaUsageMessage,
|
|
6060
6081
|
StreamEndedMessage,
|
|
6061
6082
|
StreamUsageMessage,
|
|
6062
6083
|
StreamErrorMessage,
|
|
@@ -6079,7 +6100,13 @@ var TranscribeCommandMessage = schemas_exports.object({
|
|
|
6079
6100
|
});
|
|
6080
6101
|
|
|
6081
6102
|
// node_modules/@corti/sdk/dist/esm/serialization/types/TranscribeConfigStatusMessageType.mjs
|
|
6082
|
-
var TranscribeConfigStatusMessageType2 = schemas_exports.enum_([
|
|
6103
|
+
var TranscribeConfigStatusMessageType2 = schemas_exports.enum_([
|
|
6104
|
+
"CONFIG_ACCEPTED",
|
|
6105
|
+
"CONFIG_DENIED",
|
|
6106
|
+
"CONFIG_TIMEOUT",
|
|
6107
|
+
"CONFIG_ALREADY_RECEIVED",
|
|
6108
|
+
"CONFIG_MISSING"
|
|
6109
|
+
]);
|
|
6083
6110
|
|
|
6084
6111
|
// node_modules/@corti/sdk/dist/esm/serialization/types/TranscribeConfigStatusMessage.mjs
|
|
6085
6112
|
var TranscribeConfigStatusMessage = schemas_exports.object({
|
|
@@ -6088,6 +6115,12 @@ var TranscribeConfigStatusMessage = schemas_exports.object({
|
|
|
6088
6115
|
sessionId: schemas_exports.string()
|
|
6089
6116
|
});
|
|
6090
6117
|
|
|
6118
|
+
// node_modules/@corti/sdk/dist/esm/serialization/types/TranscribeDeltaUsageMessage.mjs
|
|
6119
|
+
var TranscribeDeltaUsageMessage = schemas_exports.object({
|
|
6120
|
+
type: schemas_exports.stringLiteral("delta_usage"),
|
|
6121
|
+
credits: schemas_exports.number()
|
|
6122
|
+
});
|
|
6123
|
+
|
|
6091
6124
|
// node_modules/@corti/sdk/dist/esm/serialization/types/TranscribeEndedMessage.mjs
|
|
6092
6125
|
var TranscribeEndedMessage = schemas_exports.object({
|
|
6093
6126
|
type: schemas_exports.stringLiteral("ended")
|
|
@@ -6138,6 +6171,7 @@ var TranscribeUsageMessage = schemas_exports.object({
|
|
|
6138
6171
|
var TranscribeSocketResponse = schemas_exports.undiscriminatedUnion([
|
|
6139
6172
|
TranscribeUsageMessage,
|
|
6140
6173
|
TranscribeFlushedMessage,
|
|
6174
|
+
TranscribeDeltaUsageMessage,
|
|
6141
6175
|
TranscribeEndedMessage,
|
|
6142
6176
|
TranscribeErrorMessage,
|
|
6143
6177
|
TranscribeTranscriptMessage,
|
|
@@ -7521,8 +7555,8 @@ function normalizeClientOptions(options) {
|
|
|
7521
7555
|
const headers = mergeHeaders({
|
|
7522
7556
|
"X-Fern-Language": "JavaScript",
|
|
7523
7557
|
"X-Fern-SDK-Name": "@corti/sdk",
|
|
7524
|
-
"X-Fern-SDK-Version": "1.0.0
|
|
7525
|
-
"User-Agent": "@corti/sdk/1.0.0
|
|
7558
|
+
"X-Fern-SDK-Version": "1.0.0",
|
|
7559
|
+
"User-Agent": "@corti/sdk/1.0.0",
|
|
7526
7560
|
"X-Fern-Runtime": RUNTIME.type,
|
|
7527
7561
|
"X-Fern-Runtime-Version": RUNTIME.version,
|
|
7528
7562
|
"Tenant-Name": options === null || options === void 0 ? void 0 : options.tenantName
|
|
@@ -11829,7 +11863,7 @@ var CortiClient = class {
|
|
|
11829
11863
|
}
|
|
11830
11864
|
};
|
|
11831
11865
|
|
|
11832
|
-
// node_modules/@corti/sdk/dist/esm/custom/
|
|
11866
|
+
// node_modules/@corti/sdk/dist/esm/custom/agents/CustomAgents.mjs
|
|
11833
11867
|
var __awaiter32 = function(thisArg, _arguments, P2, generator) {
|
|
11834
11868
|
function adopt(value) {
|
|
11835
11869
|
return value instanceof P2 ? value : new P2(function(resolve) {
|
|
@@ -11857,8 +11891,46 @@ var __awaiter32 = function(thisArg, _arguments, P2, generator) {
|
|
|
11857
11891
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11858
11892
|
});
|
|
11859
11893
|
};
|
|
11894
|
+
var CustomAgents = class extends AgentsClient {
|
|
11895
|
+
constructor() {
|
|
11896
|
+
super(...arguments);
|
|
11897
|
+
this.getCardUrl = (agentId) => __awaiter32(this, void 0, void 0, function* () {
|
|
11898
|
+
const encodedAgentId = encodeURIComponent(agentId);
|
|
11899
|
+
return new URL(`/agents/${encodedAgentId}/agent-card.json`, (yield Supplier.get(this._options.environment)).agents);
|
|
11900
|
+
});
|
|
11901
|
+
}
|
|
11902
|
+
};
|
|
11903
|
+
|
|
11904
|
+
// node_modules/@corti/sdk/dist/esm/custom/utils/encodeHeadersAsWsProtocols.mjs
|
|
11905
|
+
var __awaiter33 = function(thisArg, _arguments, P2, generator) {
|
|
11906
|
+
function adopt(value) {
|
|
11907
|
+
return value instanceof P2 ? value : new P2(function(resolve) {
|
|
11908
|
+
resolve(value);
|
|
11909
|
+
});
|
|
11910
|
+
}
|
|
11911
|
+
return new (P2 || (P2 = Promise))(function(resolve, reject) {
|
|
11912
|
+
function fulfilled(value) {
|
|
11913
|
+
try {
|
|
11914
|
+
step(generator.next(value));
|
|
11915
|
+
} catch (e10) {
|
|
11916
|
+
reject(e10);
|
|
11917
|
+
}
|
|
11918
|
+
}
|
|
11919
|
+
function rejected(value) {
|
|
11920
|
+
try {
|
|
11921
|
+
step(generator["throw"](value));
|
|
11922
|
+
} catch (e10) {
|
|
11923
|
+
reject(e10);
|
|
11924
|
+
}
|
|
11925
|
+
}
|
|
11926
|
+
function step(result) {
|
|
11927
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
11928
|
+
}
|
|
11929
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11930
|
+
});
|
|
11931
|
+
};
|
|
11860
11932
|
function buildProtocolsFromHeaders(headers_1) {
|
|
11861
|
-
return
|
|
11933
|
+
return __awaiter33(this, arguments, void 0, function* (headers, filterSdkHeaders = false) {
|
|
11862
11934
|
if (!headers || Object.keys(headers).length === 0) {
|
|
11863
11935
|
return [];
|
|
11864
11936
|
}
|
|
@@ -11876,7 +11948,7 @@ function buildProtocolsFromHeaders(headers_1) {
|
|
|
11876
11948
|
});
|
|
11877
11949
|
}
|
|
11878
11950
|
function getWsProtocols(options, proxyProtocols) {
|
|
11879
|
-
return
|
|
11951
|
+
return __awaiter33(this, void 0, void 0, function* () {
|
|
11880
11952
|
const headerProtocols = options.encodeHeadersAsWsProtocols && options.headers ? yield buildProtocolsFromHeaders(options.headers, true) : [];
|
|
11881
11953
|
const resolvedProxy = proxyProtocols == null ? [] : Array.isArray(proxyProtocols) ? proxyProtocols : yield buildProtocolsFromHeaders(proxyProtocols, false);
|
|
11882
11954
|
const combined = [...headerProtocols, ...resolvedProxy];
|
|
@@ -11911,7 +11983,7 @@ function parseStreamResponseType(raw) {
|
|
|
11911
11983
|
}
|
|
11912
11984
|
|
|
11913
11985
|
// node_modules/@corti/sdk/dist/esm/custom/stream/CustomStream.mjs
|
|
11914
|
-
var
|
|
11986
|
+
var __awaiter34 = function(thisArg, _arguments, P2, generator) {
|
|
11915
11987
|
function adopt(value) {
|
|
11916
11988
|
return value instanceof P2 ? value : new P2(function(resolve) {
|
|
11917
11989
|
resolve(value);
|
|
@@ -11952,7 +12024,6 @@ var __rest3 = function(s8, e10) {
|
|
|
11952
12024
|
var STREAM_CONFIG_REJECTION_TYPES = [
|
|
11953
12025
|
StreamConfigStatusMessageType.ConfigDenied,
|
|
11954
12026
|
StreamConfigStatusMessageType.ConfigMissing,
|
|
11955
|
-
StreamConfigStatusMessageType.ConfigTimeout,
|
|
11956
12027
|
StreamConfigStatusMessageType.ConfigNotProvided
|
|
11957
12028
|
];
|
|
11958
12029
|
var CustomStream = class extends StreamClient {
|
|
@@ -11964,7 +12035,7 @@ var CustomStream = class extends StreamClient {
|
|
|
11964
12035
|
const _super = Object.create(null, {
|
|
11965
12036
|
connect: { get: () => super.connect }
|
|
11966
12037
|
});
|
|
11967
|
-
return
|
|
12038
|
+
return __awaiter34(this, void 0, void 0, function* () {
|
|
11968
12039
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
11969
12040
|
const { configuration, awaitConfiguration = true, proxy } = args, rest = __rest3(args, ["configuration", "awaitConfiguration", "proxy"]);
|
|
11970
12041
|
const useProxyPath = proxy || this._encodeHeadersAsWsProtocols;
|
|
@@ -11992,7 +12063,7 @@ var CustomStream = class extends StreamClient {
|
|
|
11992
12063
|
* CONFIG_NOT_PROVIDED / connection error / ENDED.
|
|
11993
12064
|
*/
|
|
11994
12065
|
_connectWithConfigAck(socket, configuration) {
|
|
11995
|
-
return
|
|
12066
|
+
return __awaiter34(this, void 0, void 0, function* () {
|
|
11996
12067
|
const configAck = this._buildConfigAckPromise(socket);
|
|
11997
12068
|
yield socket.waitForOpen();
|
|
11998
12069
|
socket.sendConfiguration({ type: "config", configuration });
|
|
@@ -12018,7 +12089,7 @@ var CustomStream = class extends StreamClient {
|
|
|
12018
12089
|
});
|
|
12019
12090
|
socket.socket.addEventListener("message", (event) => {
|
|
12020
12091
|
const type = parseStreamResponseType(event.data);
|
|
12021
|
-
if (type == null || type === StreamConfigStatusMessageType.ConfigAccepted) {
|
|
12092
|
+
if (type == null || type === StreamConfigStatusMessageType.ConfigAccepted || type === StreamConfigStatusMessageType.ConfigAlreadyReceived) {
|
|
12022
12093
|
return;
|
|
12023
12094
|
}
|
|
12024
12095
|
if (STREAM_CONFIG_REJECTION_TYPES.includes(type) || type === "error") {
|
|
@@ -12045,7 +12116,7 @@ var CustomStream = class extends StreamClient {
|
|
|
12045
12116
|
const type = parseStreamResponseType(event.data);
|
|
12046
12117
|
if (type == null)
|
|
12047
12118
|
return;
|
|
12048
|
-
if (type === StreamConfigStatusMessageType.ConfigAccepted) {
|
|
12119
|
+
if (type === StreamConfigStatusMessageType.ConfigAccepted || type === StreamConfigStatusMessageType.ConfigAlreadyReceived) {
|
|
12049
12120
|
cleanup();
|
|
12050
12121
|
resolve();
|
|
12051
12122
|
} else if (STREAM_CONFIG_REJECTION_TYPES.includes(type)) {
|
|
@@ -12089,7 +12160,7 @@ function parseTranscribeResponseType(raw) {
|
|
|
12089
12160
|
}
|
|
12090
12161
|
|
|
12091
12162
|
// node_modules/@corti/sdk/dist/esm/custom/transcribe/CustomTranscribe.mjs
|
|
12092
|
-
var
|
|
12163
|
+
var __awaiter35 = function(thisArg, _arguments, P2, generator) {
|
|
12093
12164
|
function adopt(value) {
|
|
12094
12165
|
return value instanceof P2 ? value : new P2(function(resolve) {
|
|
12095
12166
|
resolve(value);
|
|
@@ -12129,7 +12200,8 @@ var __rest4 = function(s8, e10) {
|
|
|
12129
12200
|
};
|
|
12130
12201
|
var TRANSCRIBE_CONFIG_REJECTION_TYPES = [
|
|
12131
12202
|
TranscribeConfigStatusMessageType.ConfigDenied,
|
|
12132
|
-
TranscribeConfigStatusMessageType.ConfigTimeout
|
|
12203
|
+
TranscribeConfigStatusMessageType.ConfigTimeout,
|
|
12204
|
+
TranscribeConfigStatusMessageType.ConfigMissing
|
|
12133
12205
|
];
|
|
12134
12206
|
var CustomTranscribe = class extends TranscribeClient {
|
|
12135
12207
|
constructor(options) {
|
|
@@ -12140,7 +12212,7 @@ var CustomTranscribe = class extends TranscribeClient {
|
|
|
12140
12212
|
const _super = Object.create(null, {
|
|
12141
12213
|
connect: { get: () => super.connect }
|
|
12142
12214
|
});
|
|
12143
|
-
return
|
|
12215
|
+
return __awaiter35(this, void 0, void 0, function* () {
|
|
12144
12216
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
12145
12217
|
const _j = args !== null && args !== void 0 ? args : {}, { configuration, awaitConfiguration = true, proxy } = _j, rest = __rest4(_j, ["configuration", "awaitConfiguration", "proxy"]);
|
|
12146
12218
|
const useProxyPath = proxy || this._encodeHeadersAsWsProtocols;
|
|
@@ -12168,7 +12240,7 @@ var CustomTranscribe = class extends TranscribeClient {
|
|
|
12168
12240
|
* connection error / ended.
|
|
12169
12241
|
*/
|
|
12170
12242
|
_connectWithConfigAck(socket, configuration) {
|
|
12171
|
-
return
|
|
12243
|
+
return __awaiter35(this, void 0, void 0, function* () {
|
|
12172
12244
|
const configAck = this._buildConfigAckPromise(socket);
|
|
12173
12245
|
yield socket.waitForOpen();
|
|
12174
12246
|
socket.sendConfiguration({ type: "config", configuration });
|
|
@@ -12194,7 +12266,7 @@ var CustomTranscribe = class extends TranscribeClient {
|
|
|
12194
12266
|
});
|
|
12195
12267
|
socket.socket.addEventListener("message", (event) => {
|
|
12196
12268
|
const type = parseTranscribeResponseType(event.data);
|
|
12197
|
-
if (type == null || type === TranscribeConfigStatusMessageType.ConfigAccepted) {
|
|
12269
|
+
if (type == null || type === TranscribeConfigStatusMessageType.ConfigAccepted || type === TranscribeConfigStatusMessageType.ConfigAlreadyReceived) {
|
|
12198
12270
|
return;
|
|
12199
12271
|
}
|
|
12200
12272
|
if (TRANSCRIBE_CONFIG_REJECTION_TYPES.includes(type) || type === "error") {
|
|
@@ -12221,7 +12293,7 @@ var CustomTranscribe = class extends TranscribeClient {
|
|
|
12221
12293
|
const type = parseTranscribeResponseType(event.data);
|
|
12222
12294
|
if (type == null)
|
|
12223
12295
|
return;
|
|
12224
|
-
if (type === TranscribeConfigStatusMessageType.ConfigAccepted) {
|
|
12296
|
+
if (type === TranscribeConfigStatusMessageType.ConfigAccepted || type === TranscribeConfigStatusMessageType.ConfigAlreadyReceived) {
|
|
12225
12297
|
cleanup();
|
|
12226
12298
|
resolve();
|
|
12227
12299
|
} else if (TRANSCRIBE_CONFIG_REJECTION_TYPES.includes(type)) {
|
|
@@ -12298,7 +12370,7 @@ function decodeToken2(token) {
|
|
|
12298
12370
|
}
|
|
12299
12371
|
|
|
12300
12372
|
// node_modules/@corti/sdk/dist/esm/custom/utils/resolveClientOptions.mjs
|
|
12301
|
-
var
|
|
12373
|
+
var __awaiter36 = function(thisArg, _arguments, P2, generator) {
|
|
12302
12374
|
function adopt(value) {
|
|
12303
12375
|
return value instanceof P2 ? value : new P2(function(resolve) {
|
|
12304
12376
|
resolve(value);
|
|
@@ -12356,7 +12428,7 @@ function resolveClientOptions(options) {
|
|
|
12356
12428
|
};
|
|
12357
12429
|
}
|
|
12358
12430
|
const auth = opts.auth;
|
|
12359
|
-
const discoveryPromise = (() =>
|
|
12431
|
+
const discoveryPromise = (() => __awaiter36(this, void 0, void 0, function* () {
|
|
12360
12432
|
var _a;
|
|
12361
12433
|
const tokenResponse = yield auth.refreshAccessToken(auth.refreshToken);
|
|
12362
12434
|
const decoded = decodeToken2((_a = tokenResponse.accessToken) !== null && _a !== void 0 ? _a : "");
|
|
@@ -12377,12 +12449,44 @@ function resolveClientOptions(options) {
|
|
|
12377
12449
|
}
|
|
12378
12450
|
|
|
12379
12451
|
// node_modules/@corti/sdk/dist/esm/custom/CortiClient.mjs
|
|
12452
|
+
var __awaiter37 = function(thisArg, _arguments, P2, generator) {
|
|
12453
|
+
function adopt(value) {
|
|
12454
|
+
return value instanceof P2 ? value : new P2(function(resolve) {
|
|
12455
|
+
resolve(value);
|
|
12456
|
+
});
|
|
12457
|
+
}
|
|
12458
|
+
return new (P2 || (P2 = Promise))(function(resolve, reject) {
|
|
12459
|
+
function fulfilled(value) {
|
|
12460
|
+
try {
|
|
12461
|
+
step(generator.next(value));
|
|
12462
|
+
} catch (e10) {
|
|
12463
|
+
reject(e10);
|
|
12464
|
+
}
|
|
12465
|
+
}
|
|
12466
|
+
function rejected(value) {
|
|
12467
|
+
try {
|
|
12468
|
+
step(generator["throw"](value));
|
|
12469
|
+
} catch (e10) {
|
|
12470
|
+
reject(e10);
|
|
12471
|
+
}
|
|
12472
|
+
}
|
|
12473
|
+
function step(result) {
|
|
12474
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
12475
|
+
}
|
|
12476
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12477
|
+
});
|
|
12478
|
+
};
|
|
12380
12479
|
var CortiClient2 = class extends CortiClient {
|
|
12381
12480
|
constructor(options) {
|
|
12382
12481
|
const opts = options;
|
|
12383
12482
|
const ctx = resolveClientOptions(options);
|
|
12384
12483
|
const restOptions = Object.assign(Object.assign(Object.assign({}, opts), { tenantName: ctx.tenantName, environment: getEnvironment(ctx.environment) }), ctx.initialTokenResponse != null ? { initialTokenResponse: ctx.initialTokenResponse } : {});
|
|
12385
12484
|
super(authToBaseOptions(opts.auth, restOptions));
|
|
12485
|
+
this.getAuthHeaders = () => __awaiter37(this, void 0, void 0, function* () {
|
|
12486
|
+
var _a;
|
|
12487
|
+
const req = yield this._options.authProvider.getAuthRequest();
|
|
12488
|
+
return new Headers(Object.assign(Object.assign({}, (_a = req.headers) !== null && _a !== void 0 ? _a : {}), { "Tenant-Name": yield Supplier.get(this._options.tenantName) }));
|
|
12489
|
+
});
|
|
12386
12490
|
setDefaultWithCredentials(options.withCredentials);
|
|
12387
12491
|
this._encodeHeadersAsWsProtocols = options.encodeHeadersAsWsProtocols;
|
|
12388
12492
|
}
|
|
@@ -12398,6 +12502,10 @@ var CortiClient2 = class extends CortiClient {
|
|
|
12398
12502
|
var _a;
|
|
12399
12503
|
return (_a = this._transcribe) !== null && _a !== void 0 ? _a : this._transcribe = new CustomTranscribe(Object.assign(Object.assign({}, this._options), { encodeHeadersAsWsProtocols: this._encodeHeadersAsWsProtocols }));
|
|
12400
12504
|
}
|
|
12505
|
+
get agents() {
|
|
12506
|
+
var _a;
|
|
12507
|
+
return (_a = this._agents) !== null && _a !== void 0 ? _a : this._agents = new CustomAgents(this._options);
|
|
12508
|
+
}
|
|
12401
12509
|
};
|
|
12402
12510
|
|
|
12403
12511
|
// node_modules/@corti/sdk/dist/esm/custom/proxy/CustomProxyStream.mjs
|
|
@@ -12744,11 +12852,10 @@ function normalizeKeybinding(keybinding) {
|
|
|
12744
12852
|
if (!keybinding) {
|
|
12745
12853
|
return null;
|
|
12746
12854
|
}
|
|
12747
|
-
|
|
12748
|
-
if (trimmed === "") {
|
|
12855
|
+
if (keybinding !== " " && keybinding.trim() === "") {
|
|
12749
12856
|
return null;
|
|
12750
12857
|
}
|
|
12751
|
-
return normalizeKeyForKeybinding(
|
|
12858
|
+
return normalizeKeyForKeybinding(keybinding);
|
|
12752
12859
|
}
|
|
12753
12860
|
function matchesKeybinding(event, keybinding) {
|
|
12754
12861
|
const normalizedKeybinding = normalizeKeybinding(keybinding);
|
|
@@ -13413,6 +13520,9 @@ var DictationRecordingButton = class DictationRecordingButton2 extends i4 {
|
|
|
13413
13520
|
case "usage":
|
|
13414
13521
|
this.dispatchEvent(usageEvent(message));
|
|
13415
13522
|
break;
|
|
13523
|
+
case "delta_usage":
|
|
13524
|
+
this.dispatchEvent(deltaUsageEvent(message));
|
|
13525
|
+
break;
|
|
13416
13526
|
case "error":
|
|
13417
13527
|
this.dispatchEvent(errorEvent(message.error));
|
|
13418
13528
|
__classPrivateFieldGet7(this, _DictationRecordingButton_instances, "m", _DictationRecordingButton_handleStop).call(this);
|
|
@@ -26,7 +26,7 @@ import { KeybindingController } from "../controllers/keybinding-controller.js";
|
|
|
26
26
|
import { MediaController } from "../controllers/media-controller.js";
|
|
27
27
|
import ButtonStyles from "../styles/buttons.js";
|
|
28
28
|
import RecordingButtonStyles from "../styles/recording-button.js";
|
|
29
|
-
import { audioLevelChangedEvent, commandEvent, errorEvent, networkActivityEvent, recordingStateChangedEvent, streamClosedEvent, transcriptEvent, usageEvent, } from "../utils/events.js";
|
|
29
|
+
import { audioLevelChangedEvent, commandEvent, deltaUsageEvent, errorEvent, networkActivityEvent, recordingStateChangedEvent, streamClosedEvent, transcriptEvent, usageEvent, } from "../utils/events.js";
|
|
30
30
|
import "./audio-visualiser.js";
|
|
31
31
|
import "../icons/icons.js";
|
|
32
32
|
let DictationRecordingButton = class DictationRecordingButton extends LitElement {
|
|
@@ -60,6 +60,9 @@ let DictationRecordingButton = class DictationRecordingButton extends LitElement
|
|
|
60
60
|
case "usage":
|
|
61
61
|
this.dispatchEvent(usageEvent(message));
|
|
62
62
|
break;
|
|
63
|
+
case "delta_usage":
|
|
64
|
+
this.dispatchEvent(deltaUsageEvent(message));
|
|
65
|
+
break;
|
|
63
66
|
case "error":
|
|
64
67
|
this.dispatchEvent(errorEvent(message.error));
|
|
65
68
|
__classPrivateFieldGet(this, _DictationRecordingButton_instances, "m", _DictationRecordingButton_handleStop).call(this);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-button.js","sourceRoot":"","sources":["../../src/components/recording-button.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti, CortiAuth } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport {\n type CSSResultGroup,\n html,\n LitElement,\n type PropertyValues,\n} from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { AUDIO_CHUNK_INTERVAL_MS } from \"../constants.js\";\nimport {\n accessTokenContext,\n authConfigContext,\n debugDisplayAudioContext,\n dictationConfigContext,\n pushToTalkKeybindingContext,\n recordingStateContext,\n regionContext,\n selectedDeviceContext,\n socketProxyContext,\n socketUrlContext,\n tenantNameContext,\n toggleToTalkKeybindingContext,\n} from \"../contexts/dictation-context.js\";\nimport {\n DictationController,\n type TranscribeMessage,\n} from \"../controllers/dictation-controller.js\";\nimport { KeybindingController } from \"../controllers/keybinding-controller.js\";\nimport { MediaController } from \"../controllers/media-controller.js\";\nimport ButtonStyles from \"../styles/buttons.js\";\nimport RecordingButtonStyles from \"../styles/recording-button.js\";\nimport type { ProxyOptions, RecordingState } from \"../types.js\";\nimport {\n audioLevelChangedEvent,\n commandEvent,\n errorEvent,\n networkActivityEvent,\n type RecordingStateChangedEventDetail,\n recordingStateChangedEvent,\n streamClosedEvent,\n transcriptEvent,\n usageEvent,\n} from \"../utils/events.js\";\n\nimport \"./audio-visualiser.js\";\nimport \"../icons/icons.js\";\n\n@customElement(\"dictation-recording-button\")\nexport class DictationRecordingButton extends LitElement {\n @consume({ context: recordingStateContext, subscribe: true })\n @state()\n _recordingState: RecordingState = \"stopped\";\n\n @consume({ context: selectedDeviceContext, subscribe: true })\n @state()\n _selectedDevice?: MediaDeviceInfo;\n\n @consume({ context: accessTokenContext, subscribe: true })\n @state()\n _accessToken?: string;\n\n @consume({ context: authConfigContext, subscribe: true })\n @state()\n _authConfig?: CortiAuth.AuthTokenDerivable;\n\n @consume({ context: regionContext, subscribe: true })\n @state()\n _region?: string;\n\n @consume({ context: tenantNameContext, subscribe: true })\n @state()\n _tenantName?: string;\n\n @consume({ context: dictationConfigContext, subscribe: true })\n @state()\n _dictationConfig?: Corti.TranscribeConfig;\n\n @consume({ context: socketUrlContext, subscribe: true })\n @state()\n _socketUrl?: string;\n\n @consume({ context: socketProxyContext, subscribe: true })\n @state()\n _socketProxy?: ProxyOptions;\n\n @consume({ context: debugDisplayAudioContext, subscribe: true })\n @state()\n _debug_displayAudio?: boolean;\n\n @consume({ context: pushToTalkKeybindingContext, subscribe: true })\n @state()\n _pushToTalkKeybinding?: string | null;\n\n @consume({ context: toggleToTalkKeybindingContext, subscribe: true })\n @state()\n _toggleToTalkKeybinding?: string | null;\n\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n #mediaController = new MediaController(this);\n #dictationController = new DictationController(this);\n #keybindingController = new KeybindingController(this);\n #closeConnectionOnInit = false;\n #processing = false;\n #connection: RecordingStateChangedEventDetail[\"connection\"] = \"CLOSED\";\n\n static styles: CSSResultGroup = [RecordingButtonStyles, ButtonStyles];\n\n protected update(changedProperties: PropertyValues) {\n if (\n changedProperties.has(\"_recordingState\") &&\n this._recordingState === \"recording\" &&\n this.#closeConnectionOnInit\n ) {\n this.#closeConnectionOnInit = false;\n this.#handleStop();\n }\n\n super.update(changedProperties);\n }\n\n #handleClick(event: MouseEvent): void {\n if (!this.allowButtonFocus) {\n event.preventDefault();\n }\n\n this.toggleRecording();\n }\n\n #handleWebSocketMessage = (message: TranscribeMessage): void => {\n switch (message.type) {\n case \"CONFIG_DENIED\":\n this.dispatchEvent(\n errorEvent(`Config denied: ${message.reason ?? \"Unknown reason\"}`),\n );\n this.#handleStop();\n break;\n case \"CONFIG_TIMEOUT\":\n this.dispatchEvent(errorEvent(\"Config timeout\"));\n this.#handleStop();\n break;\n case \"transcript\":\n this.dispatchEvent(transcriptEvent(message));\n break;\n case \"command\":\n this.dispatchEvent(commandEvent(message));\n break;\n case \"usage\":\n this.dispatchEvent(usageEvent(message));\n break;\n case \"error\":\n this.dispatchEvent(errorEvent(message.error));\n this.#handleStop();\n break;\n case \"flushed\":\n if (\n this._recordingState === \"stopped\" ||\n this._recordingState === \"stopping\"\n ) {\n this.#processing = false;\n this.#dispatchRecordingStateChanged(this._recordingState);\n }\n break;\n }\n };\n\n #handleWebSocketError = (error: Error): void => {\n this.dispatchEvent(errorEvent(\"Socket error: \" + error.message));\n this.#processing = false;\n this.#connection = \"CLOSED\";\n this.#handleStop();\n };\n\n #handleWebSocketClose = (event: unknown): void => {\n // When we already have new socket opened\n if (\n this.#dictationController.isConnectionOpen() ||\n this.#dictationController.isConnecting()\n ) {\n return;\n }\n\n this.#processing = false;\n this.#connection = \"CLOSED\";\n this.dispatchEvent(streamClosedEvent(event));\n this.#dispatchRecordingStateChanged(this._recordingState);\n };\n\n #dispatchRecordingStateChanged(state: RecordingState): void {\n this.dispatchEvent(\n recordingStateChangedEvent(state, {\n connection: this.#connection,\n processing: this.#processing,\n }),\n );\n }\n\n async #handleStart(): Promise<void> {\n this.#dispatchRecordingStateChanged(\"initializing\");\n\n try {\n await this.#mediaController.initialize(() => {\n if (this._recordingState === \"recording\") {\n this.dispatchEvent(errorEvent(\"Recording device access was lost.\"));\n this.#handleStop();\n }\n }, this.#dictationController.mediaRecorderHandler);\n this.#mediaController.mediaRecorder?.start(AUDIO_CHUNK_INTERVAL_MS);\n this.#mediaController.startAudioLevelMonitoring((level) => {\n this.dispatchEvent(audioLevelChangedEvent(level));\n });\n\n this.#processing = true;\n\n if (this.#connection !== \"OPEN\") {\n this.#connection = \"CONNECTING\";\n }\n\n this.#dispatchRecordingStateChanged(\"recording\");\n\n const isNewConnection = await this.#dictationController.connect(\n this._dictationConfig,\n {\n onClose: this.#handleWebSocketClose,\n onError: this.#handleWebSocketError,\n onMessage: this.#handleWebSocketMessage,\n onNetworkActivity: (direction, data) => {\n this.dispatchEvent(networkActivityEvent(direction, data));\n },\n },\n );\n\n if (isNewConnection === \"superseded\") {\n return;\n }\n\n this.#connection = \"OPEN\";\n\n this.#dispatchRecordingStateChanged(this._recordingState);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n await this.#handleStop();\n }\n }\n\n async #handleStop(): Promise<void> {\n this.#dispatchRecordingStateChanged(\"stopping\");\n\n try {\n this.#mediaController.stopAudioLevelMonitoring();\n await this.#mediaController.stopRecording();\n\n this.#dispatchRecordingStateChanged(\"stopped\");\n\n await this.#dictationController.pause();\n await this.#mediaController.cleanup();\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n public startRecording(): void {\n if (this._recordingState !== \"stopped\") {\n return;\n }\n\n this.#handleStart();\n }\n\n public stopRecording(): void {\n if (\n this._recordingState === \"stopped\" ||\n this._recordingState === \"stopping\"\n ) {\n return;\n }\n\n if (this._recordingState === \"initializing\") {\n this.#closeConnectionOnInit = true;\n return;\n }\n\n this.#handleStop();\n }\n\n public toggleRecording(): void {\n if (this._recordingState === \"stopped\") {\n this.startRecording();\n } else if (this._recordingState === \"recording\") {\n this.stopRecording();\n }\n }\n\n public async openConnection(): Promise<void> {\n if (this._recordingState !== \"stopped\" || this.#processing) {\n return;\n }\n\n if (this.#dictationController.isConnectionOpen()) {\n return;\n }\n\n try {\n this.#connection = \"CONNECTING\";\n this.#dispatchRecordingStateChanged(this._recordingState);\n\n await this.#dictationController.connect(this._dictationConfig, {\n onClose: this.#handleWebSocketClose,\n onError: this.#handleWebSocketError,\n onMessage: this.#handleWebSocketMessage,\n onNetworkActivity: (direction, data) => {\n this.dispatchEvent(networkActivityEvent(direction, data));\n },\n });\n\n this.#connection = \"OPEN\";\n this.#dispatchRecordingStateChanged(this._recordingState);\n } catch (error) {\n this.#connection = \"CLOSED\";\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n public async closeConnection(): Promise<void> {\n if (this._recordingState !== \"stopped\" || this.#processing) {\n return;\n }\n\n if (this.#dictationController.isConnecting()) {\n await this.#dictationController.waitForConnection();\n }\n\n if (!this.#dictationController.isConnectionOpen()) {\n this.#connection = \"CLOSED\";\n this.#dispatchRecordingStateChanged(\"stopped\");\n return;\n }\n\n try {\n this.#connection = \"CLOSING\";\n this.#dispatchRecordingStateChanged(\"stopped\");\n await this.#dictationController.closeConnection(\n this.#handleWebSocketClose,\n );\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n render() {\n const isLoading =\n this._recordingState === \"initializing\" ||\n this._recordingState === \"stopping\";\n const isRecording = this._recordingState === \"recording\";\n\n return html`\n <button\n @click=${this.#handleClick}\n ?disabled=${isLoading}\n class=${isRecording ? \"red\" : \"accent\"}\n aria-label=${isRecording ? \"Stop recording\" : \"Start recording\"}\n aria-pressed=${isRecording}\n >\n ${\n isLoading\n ? html`<icon-loading-spinner />`\n : isRecording\n ? html`<icon-recording />`\n : html`<icon-mic-on />`\n }\n <dictation-audio-visualiser\n .level=${this.#mediaController.audioLevel}\n ?active=${isRecording}\n />\n </button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-recording-button\": DictationRecordingButton;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"recording-button.js","sourceRoot":"","sources":["../../src/components/recording-button.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti, CortiAuth } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport {\n type CSSResultGroup,\n html,\n LitElement,\n type PropertyValues,\n} from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { AUDIO_CHUNK_INTERVAL_MS } from \"../constants.js\";\nimport {\n accessTokenContext,\n authConfigContext,\n debugDisplayAudioContext,\n dictationConfigContext,\n pushToTalkKeybindingContext,\n recordingStateContext,\n regionContext,\n selectedDeviceContext,\n socketProxyContext,\n socketUrlContext,\n tenantNameContext,\n toggleToTalkKeybindingContext,\n} from \"../contexts/dictation-context.js\";\nimport {\n DictationController,\n type TranscribeMessage,\n} from \"../controllers/dictation-controller.js\";\nimport { KeybindingController } from \"../controllers/keybinding-controller.js\";\nimport { MediaController } from \"../controllers/media-controller.js\";\nimport ButtonStyles from \"../styles/buttons.js\";\nimport RecordingButtonStyles from \"../styles/recording-button.js\";\nimport type { ProxyOptions, RecordingState } from \"../types.js\";\nimport {\n audioLevelChangedEvent,\n commandEvent,\n deltaUsageEvent,\n errorEvent,\n networkActivityEvent,\n type RecordingStateChangedEventDetail,\n recordingStateChangedEvent,\n streamClosedEvent,\n transcriptEvent,\n usageEvent,\n} from \"../utils/events.js\";\n\nimport \"./audio-visualiser.js\";\nimport \"../icons/icons.js\";\n\n@customElement(\"dictation-recording-button\")\nexport class DictationRecordingButton extends LitElement {\n @consume({ context: recordingStateContext, subscribe: true })\n @state()\n _recordingState: RecordingState = \"stopped\";\n\n @consume({ context: selectedDeviceContext, subscribe: true })\n @state()\n _selectedDevice?: MediaDeviceInfo;\n\n @consume({ context: accessTokenContext, subscribe: true })\n @state()\n _accessToken?: string;\n\n @consume({ context: authConfigContext, subscribe: true })\n @state()\n _authConfig?: CortiAuth.AuthTokenDerivable;\n\n @consume({ context: regionContext, subscribe: true })\n @state()\n _region?: string;\n\n @consume({ context: tenantNameContext, subscribe: true })\n @state()\n _tenantName?: string;\n\n @consume({ context: dictationConfigContext, subscribe: true })\n @state()\n _dictationConfig?: Corti.TranscribeConfig;\n\n @consume({ context: socketUrlContext, subscribe: true })\n @state()\n _socketUrl?: string;\n\n @consume({ context: socketProxyContext, subscribe: true })\n @state()\n _socketProxy?: ProxyOptions;\n\n @consume({ context: debugDisplayAudioContext, subscribe: true })\n @state()\n _debug_displayAudio?: boolean;\n\n @consume({ context: pushToTalkKeybindingContext, subscribe: true })\n @state()\n _pushToTalkKeybinding?: string | null;\n\n @consume({ context: toggleToTalkKeybindingContext, subscribe: true })\n @state()\n _toggleToTalkKeybinding?: string | null;\n\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n #mediaController = new MediaController(this);\n #dictationController = new DictationController(this);\n #keybindingController = new KeybindingController(this);\n #closeConnectionOnInit = false;\n #processing = false;\n #connection: RecordingStateChangedEventDetail[\"connection\"] = \"CLOSED\";\n\n static styles: CSSResultGroup = [RecordingButtonStyles, ButtonStyles];\n\n protected update(changedProperties: PropertyValues) {\n if (\n changedProperties.has(\"_recordingState\") &&\n this._recordingState === \"recording\" &&\n this.#closeConnectionOnInit\n ) {\n this.#closeConnectionOnInit = false;\n this.#handleStop();\n }\n\n super.update(changedProperties);\n }\n\n #handleClick(event: MouseEvent): void {\n if (!this.allowButtonFocus) {\n event.preventDefault();\n }\n\n this.toggleRecording();\n }\n\n #handleWebSocketMessage = (message: TranscribeMessage): void => {\n switch (message.type) {\n case \"CONFIG_DENIED\":\n this.dispatchEvent(\n errorEvent(`Config denied: ${message.reason ?? \"Unknown reason\"}`),\n );\n this.#handleStop();\n break;\n case \"CONFIG_TIMEOUT\":\n this.dispatchEvent(errorEvent(\"Config timeout\"));\n this.#handleStop();\n break;\n case \"transcript\":\n this.dispatchEvent(transcriptEvent(message));\n break;\n case \"command\":\n this.dispatchEvent(commandEvent(message));\n break;\n case \"usage\":\n this.dispatchEvent(usageEvent(message));\n break;\n case \"delta_usage\":\n this.dispatchEvent(deltaUsageEvent(message));\n break;\n case \"error\":\n this.dispatchEvent(errorEvent(message.error));\n this.#handleStop();\n break;\n case \"flushed\":\n if (\n this._recordingState === \"stopped\" ||\n this._recordingState === \"stopping\"\n ) {\n this.#processing = false;\n this.#dispatchRecordingStateChanged(this._recordingState);\n }\n break;\n }\n };\n\n #handleWebSocketError = (error: Error): void => {\n this.dispatchEvent(errorEvent(\"Socket error: \" + error.message));\n this.#processing = false;\n this.#connection = \"CLOSED\";\n this.#handleStop();\n };\n\n #handleWebSocketClose = (event: unknown): void => {\n // When we already have new socket opened\n if (\n this.#dictationController.isConnectionOpen() ||\n this.#dictationController.isConnecting()\n ) {\n return;\n }\n\n this.#processing = false;\n this.#connection = \"CLOSED\";\n this.dispatchEvent(streamClosedEvent(event));\n this.#dispatchRecordingStateChanged(this._recordingState);\n };\n\n #dispatchRecordingStateChanged(state: RecordingState): void {\n this.dispatchEvent(\n recordingStateChangedEvent(state, {\n connection: this.#connection,\n processing: this.#processing,\n }),\n );\n }\n\n async #handleStart(): Promise<void> {\n this.#dispatchRecordingStateChanged(\"initializing\");\n\n try {\n await this.#mediaController.initialize(() => {\n if (this._recordingState === \"recording\") {\n this.dispatchEvent(errorEvent(\"Recording device access was lost.\"));\n this.#handleStop();\n }\n }, this.#dictationController.mediaRecorderHandler);\n this.#mediaController.mediaRecorder?.start(AUDIO_CHUNK_INTERVAL_MS);\n this.#mediaController.startAudioLevelMonitoring((level) => {\n this.dispatchEvent(audioLevelChangedEvent(level));\n });\n\n this.#processing = true;\n\n if (this.#connection !== \"OPEN\") {\n this.#connection = \"CONNECTING\";\n }\n\n this.#dispatchRecordingStateChanged(\"recording\");\n\n const isNewConnection = await this.#dictationController.connect(\n this._dictationConfig,\n {\n onClose: this.#handleWebSocketClose,\n onError: this.#handleWebSocketError,\n onMessage: this.#handleWebSocketMessage,\n onNetworkActivity: (direction, data) => {\n this.dispatchEvent(networkActivityEvent(direction, data));\n },\n },\n );\n\n if (isNewConnection === \"superseded\") {\n return;\n }\n\n this.#connection = \"OPEN\";\n\n this.#dispatchRecordingStateChanged(this._recordingState);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n await this.#handleStop();\n }\n }\n\n async #handleStop(): Promise<void> {\n this.#dispatchRecordingStateChanged(\"stopping\");\n\n try {\n this.#mediaController.stopAudioLevelMonitoring();\n await this.#mediaController.stopRecording();\n\n this.#dispatchRecordingStateChanged(\"stopped\");\n\n await this.#dictationController.pause();\n await this.#mediaController.cleanup();\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n public startRecording(): void {\n if (this._recordingState !== \"stopped\") {\n return;\n }\n\n this.#handleStart();\n }\n\n public stopRecording(): void {\n if (\n this._recordingState === \"stopped\" ||\n this._recordingState === \"stopping\"\n ) {\n return;\n }\n\n if (this._recordingState === \"initializing\") {\n this.#closeConnectionOnInit = true;\n return;\n }\n\n this.#handleStop();\n }\n\n public toggleRecording(): void {\n if (this._recordingState === \"stopped\") {\n this.startRecording();\n } else if (this._recordingState === \"recording\") {\n this.stopRecording();\n }\n }\n\n public async openConnection(): Promise<void> {\n if (this._recordingState !== \"stopped\" || this.#processing) {\n return;\n }\n\n if (this.#dictationController.isConnectionOpen()) {\n return;\n }\n\n try {\n this.#connection = \"CONNECTING\";\n this.#dispatchRecordingStateChanged(this._recordingState);\n\n await this.#dictationController.connect(this._dictationConfig, {\n onClose: this.#handleWebSocketClose,\n onError: this.#handleWebSocketError,\n onMessage: this.#handleWebSocketMessage,\n onNetworkActivity: (direction, data) => {\n this.dispatchEvent(networkActivityEvent(direction, data));\n },\n });\n\n this.#connection = \"OPEN\";\n this.#dispatchRecordingStateChanged(this._recordingState);\n } catch (error) {\n this.#connection = \"CLOSED\";\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n public async closeConnection(): Promise<void> {\n if (this._recordingState !== \"stopped\" || this.#processing) {\n return;\n }\n\n if (this.#dictationController.isConnecting()) {\n await this.#dictationController.waitForConnection();\n }\n\n if (!this.#dictationController.isConnectionOpen()) {\n this.#connection = \"CLOSED\";\n this.#dispatchRecordingStateChanged(\"stopped\");\n return;\n }\n\n try {\n this.#connection = \"CLOSING\";\n this.#dispatchRecordingStateChanged(\"stopped\");\n await this.#dictationController.closeConnection(\n this.#handleWebSocketClose,\n );\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n render() {\n const isLoading =\n this._recordingState === \"initializing\" ||\n this._recordingState === \"stopping\";\n const isRecording = this._recordingState === \"recording\";\n\n return html`\n <button\n @click=${this.#handleClick}\n ?disabled=${isLoading}\n class=${isRecording ? \"red\" : \"accent\"}\n aria-label=${isRecording ? \"Stop recording\" : \"Start recording\"}\n aria-pressed=${isRecording}\n >\n ${\n isLoading\n ? html`<icon-loading-spinner />`\n : isRecording\n ? html`<icon-recording />`\n : html`<icon-mic-on />`\n }\n <dictation-audio-visualiser\n .level=${this.#mediaController.audioLevel}\n ?active=${isRecording}\n />\n </button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-recording-button\": DictationRecordingButton;\n }\n}\n"]}
|
|
@@ -11,7 +11,7 @@ interface DictationControllerHost extends ReactiveControllerHost {
|
|
|
11
11
|
_socketProxy?: ProxyOptions;
|
|
12
12
|
_dictationConfig?: Corti.TranscribeConfig;
|
|
13
13
|
}
|
|
14
|
-
export type TranscribeMessage = Corti.TranscribeConfigStatusMessage | Corti.TranscribeUsageMessage | Corti.TranscribeEndedMessage | Corti.TranscribeErrorMessage | Corti.TranscribeTranscriptMessage | Corti.TranscribeCommandMessage | Corti.TranscribeFlushedMessage;
|
|
14
|
+
export type TranscribeMessage = Corti.TranscribeConfigStatusMessage | Corti.TranscribeUsageMessage | Corti.TranscribeDeltaUsageMessage | Corti.TranscribeEndedMessage | Corti.TranscribeErrorMessage | Corti.TranscribeTranscriptMessage | Corti.TranscribeCommandMessage | Corti.TranscribeFlushedMessage;
|
|
15
15
|
interface WebSocketCallbacks {
|
|
16
16
|
onMessage?: (message: TranscribeMessage) => void;
|
|
17
17
|
onError?: (error: Error) => void;
|