@openclaw/google-meet 2026.7.2-beta.7 → 2026.8.1-beta.2
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/chrome-create-PKAyxCiL.js +325 -0
- package/dist/{cli-DCcRyaMf.js → cli-o7RWVqDb.js} +166 -224
- package/dist/{config-BcaS1BDr.js → config-wBK8loBb.js} +97 -221
- package/dist/{create-af1MDlus.js → create-UHeaRzsH.js} +3 -14
- package/dist/google-meet-platform-adapter-C3J-iFRE.js +791 -0
- package/dist/google-meet-platform-constants-Bs5iAg3E.js +25 -0
- package/dist/index.js +185 -2639
- package/dist/meet-url-BP2Jlvjs.js +17 -0
- package/dist/node-host-BXtXbsMa.js +49 -0
- package/dist/node-invoke-policy-B0gOlLJR.js +24 -0
- package/dist/{oauth-DOfMKlGp.js → oauth-9sUJ68Mw.js} +3 -14
- package/dist/{chrome-create-DMKruRFW.js → plugin-helpers-CfeT1SYY.js} +335 -355
- package/dist/plugin-registration-rSOssQmm.js +141 -0
- package/dist/runtime-B8d1beHo.js +1308 -0
- package/openclaw.plugin.json +8 -47
- package/package.json +4 -4
|
@@ -1,178 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { asRecord, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalTrimmedStringList } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
3
|
-
import { readProviderJsonResponse } from "openclaw/plugin-sdk/provider-http";
|
|
4
|
-
import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
|
|
5
|
-
import { buildMeetingSoxAudioCommands } from "openclaw/plugin-sdk/meeting-runtime";
|
|
1
|
+
import { asBoolean, asRecord, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalTrimmedStringList, parseBooleanValue } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
6
2
|
import { addTimerTimeoutGraceMs, resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
7
3
|
import { REALTIME_VOICE_AGENT_CONSULT_TOOL_NAME, resolveRealtimeVoiceAgentConsultToolPolicy } from "openclaw/plugin-sdk/realtime-voice";
|
|
8
|
-
//#region extensions/google-meet/src/meet-url.ts
|
|
9
|
-
function normalizeOptionalString$1(value) {
|
|
10
|
-
if (typeof value !== "string") return;
|
|
11
|
-
return value.trim() || void 0;
|
|
12
|
-
}
|
|
13
|
-
function normalizeMeetUrl(input) {
|
|
14
|
-
const raw = normalizeOptionalString$1(input);
|
|
15
|
-
if (!raw) throw new Error("url required");
|
|
16
|
-
let url;
|
|
17
|
-
try {
|
|
18
|
-
url = new URL(raw);
|
|
19
|
-
} catch {
|
|
20
|
-
throw new Error("url must be a valid Google Meet URL");
|
|
21
|
-
}
|
|
22
|
-
if (url.protocol !== "https:" || url.hostname.toLowerCase() !== "meet.google.com" || url.port || url.username || url.password) throw new Error("url must be an explicit https://meet.google.com/... URL");
|
|
23
|
-
if (!/^\/[a-z]{3}-[a-z]{4}-[a-z]{3}(?:$|[/?#])/i.test(url.pathname)) throw new Error("url must include a Google Meet meeting code");
|
|
24
|
-
return url.toString();
|
|
25
|
-
}
|
|
26
|
-
//#endregion
|
|
27
|
-
//#region extensions/google-meet/src/calendar.ts
|
|
28
|
-
const GOOGLE_CALENDAR_API_BASE_URL = "https://www.googleapis.com/calendar/v3";
|
|
29
|
-
const GOOGLE_CALENDAR_API_HOST = "www.googleapis.com";
|
|
30
|
-
const GOOGLE_CALENDAR_EVENTS_SCOPE = "https://www.googleapis.com/auth/calendar.events.readonly";
|
|
31
|
-
const GOOGLE_CALENDAR_REQUEST_TIMEOUT_MS = 3e4;
|
|
32
|
-
function appendQuery(url, query) {
|
|
33
|
-
const parsed = new URL(url);
|
|
34
|
-
for (const [key, value] of Object.entries(query)) if (value !== void 0) parsed.searchParams.set(key, String(value));
|
|
35
|
-
return parsed.toString();
|
|
36
|
-
}
|
|
37
|
-
function normalizeGoogleMeetCalendarUri(value) {
|
|
38
|
-
if (!value?.trim()) return;
|
|
39
|
-
try {
|
|
40
|
-
const url = new URL(value);
|
|
41
|
-
if (url.protocol !== "http:" && url.protocol !== "https:") return;
|
|
42
|
-
if (url.hostname.toLowerCase() !== "meet.google.com" || url.port || url.username || url.password) return;
|
|
43
|
-
url.protocol = "https:";
|
|
44
|
-
return normalizeMeetUrl(url.toString());
|
|
45
|
-
} catch {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function extractGoogleMeetUriFromText(value) {
|
|
50
|
-
const matches = value?.matchAll(/https:\/\/meet\.google\.com\/[a-z0-9-]+/gi);
|
|
51
|
-
for (const match of matches ?? []) {
|
|
52
|
-
const uri = normalizeGoogleMeetCalendarUri(match[0]);
|
|
53
|
-
if (uri) return uri;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
function findFirstGoogleMeetCalendarUri(entryPoints, predicate = () => true) {
|
|
57
|
-
for (const entry of entryPoints) {
|
|
58
|
-
if (!predicate(entry)) continue;
|
|
59
|
-
const uri = normalizeGoogleMeetCalendarUri(entry.uri);
|
|
60
|
-
if (uri) return uri;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function extractGoogleMeetUriFromCalendarEvent(event) {
|
|
64
|
-
const hangoutLink = normalizeGoogleMeetCalendarUri(event.hangoutLink);
|
|
65
|
-
if (hangoutLink) return hangoutLink;
|
|
66
|
-
const entryPoints = event.conferenceData?.entryPoints ?? [];
|
|
67
|
-
const videoEntryUri = findFirstGoogleMeetCalendarUri(entryPoints, (entry) => entry.entryPointType === "video");
|
|
68
|
-
if (videoEntryUri) return videoEntryUri;
|
|
69
|
-
const meetEntryUri = findFirstGoogleMeetCalendarUri(entryPoints);
|
|
70
|
-
if (meetEntryUri) return meetEntryUri;
|
|
71
|
-
return extractGoogleMeetUriFromText(event.location) ?? extractGoogleMeetUriFromText(event.description);
|
|
72
|
-
}
|
|
73
|
-
function buildGoogleMeetCalendarDayWindow(now = /* @__PURE__ */ new Date()) {
|
|
74
|
-
const start = new Date(now);
|
|
75
|
-
start.setHours(0, 0, 0, 0);
|
|
76
|
-
const end = new Date(start);
|
|
77
|
-
end.setDate(start.getDate() + 1);
|
|
78
|
-
return {
|
|
79
|
-
timeMin: start.toISOString(),
|
|
80
|
-
timeMax: end.toISOString()
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function parseCalendarEventTime(value) {
|
|
84
|
-
const raw = value?.dateTime ?? value?.date;
|
|
85
|
-
if (!raw) return;
|
|
86
|
-
const parsed = Date.parse(raw);
|
|
87
|
-
return Number.isFinite(parsed) ? parsed : void 0;
|
|
88
|
-
}
|
|
89
|
-
function rankCalendarEvent(event, nowMs) {
|
|
90
|
-
const startMs = parseCalendarEventTime(event.start) ?? Number.POSITIVE_INFINITY;
|
|
91
|
-
const endMs = parseCalendarEventTime(event.end) ?? startMs;
|
|
92
|
-
if (startMs <= nowMs && endMs >= nowMs) return 0;
|
|
93
|
-
if (startMs > nowMs) return startMs - nowMs;
|
|
94
|
-
return nowMs - startMs + 720 * 60 * 60 * 1e3;
|
|
95
|
-
}
|
|
96
|
-
function chooseBestMeetCalendarEvent(events, now) {
|
|
97
|
-
const nowMs = now.getTime();
|
|
98
|
-
let selected;
|
|
99
|
-
let selectedRank = Number.POSITIVE_INFINITY;
|
|
100
|
-
for (const event of events) {
|
|
101
|
-
if (event.status === "cancelled" || !extractGoogleMeetUriFromCalendarEvent(event)) continue;
|
|
102
|
-
const rank = rankCalendarEvent(event, nowMs);
|
|
103
|
-
if (!selected || rank < selectedRank) {
|
|
104
|
-
selected = event;
|
|
105
|
-
selectedRank = rank;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return selected;
|
|
109
|
-
}
|
|
110
|
-
async function fetchGoogleCalendarEvents(params) {
|
|
111
|
-
const calendarId = params.calendarId?.trim() || "primary";
|
|
112
|
-
const now = params.now ?? /* @__PURE__ */ new Date();
|
|
113
|
-
const defaultTimeMax = new Date(now);
|
|
114
|
-
defaultTimeMax.setDate(defaultTimeMax.getDate() + 7);
|
|
115
|
-
const { response, release } = await fetchWithSsrFGuard({
|
|
116
|
-
url: appendQuery(`${GOOGLE_CALENDAR_API_BASE_URL}/calendars/${encodeURIComponent(calendarId)}/events`, {
|
|
117
|
-
maxResults: params.maxResults ?? 50,
|
|
118
|
-
orderBy: "startTime",
|
|
119
|
-
q: params.eventQuery?.trim() || void 0,
|
|
120
|
-
showDeleted: false,
|
|
121
|
-
singleEvents: true,
|
|
122
|
-
timeMin: params.timeMin ?? now.toISOString(),
|
|
123
|
-
timeMax: params.timeMax ?? defaultTimeMax.toISOString()
|
|
124
|
-
}),
|
|
125
|
-
init: { headers: {
|
|
126
|
-
Authorization: `Bearer ${params.accessToken}`,
|
|
127
|
-
Accept: "application/json"
|
|
128
|
-
} },
|
|
129
|
-
policy: { allowedHostnames: [GOOGLE_CALENDAR_API_HOST] },
|
|
130
|
-
auditContext: "google-meet.calendar.events.list",
|
|
131
|
-
timeoutMs: GOOGLE_CALENDAR_REQUEST_TIMEOUT_MS
|
|
132
|
-
});
|
|
133
|
-
try {
|
|
134
|
-
if (!response.ok) throw await googleApiError({
|
|
135
|
-
response,
|
|
136
|
-
prefix: "Google Calendar events.list",
|
|
137
|
-
scopes: [GOOGLE_CALENDAR_EVENTS_SCOPE]
|
|
138
|
-
});
|
|
139
|
-
const payload = await readProviderJsonResponse(response, "Google Calendar events.list");
|
|
140
|
-
if (payload.items !== void 0 && !Array.isArray(payload.items)) throw new Error("Google Calendar events.list response had non-array items");
|
|
141
|
-
return {
|
|
142
|
-
calendarId,
|
|
143
|
-
events: payload.items ?? [],
|
|
144
|
-
now
|
|
145
|
-
};
|
|
146
|
-
} finally {
|
|
147
|
-
await release();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
async function listGoogleMeetCalendarEvents(params) {
|
|
151
|
-
const { calendarId, events, now } = await fetchGoogleCalendarEvents(params);
|
|
152
|
-
const best = chooseBestMeetCalendarEvent(events, now);
|
|
153
|
-
return {
|
|
154
|
-
calendarId,
|
|
155
|
-
events: events.map((event) => {
|
|
156
|
-
const meetingUri = extractGoogleMeetUriFromCalendarEvent(event);
|
|
157
|
-
return meetingUri ? {
|
|
158
|
-
event,
|
|
159
|
-
meetingUri,
|
|
160
|
-
selected: event === best
|
|
161
|
-
} : void 0;
|
|
162
|
-
}).filter((event) => Boolean(event))
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
async function findGoogleMeetCalendarEvent(params) {
|
|
166
|
-
const result = await listGoogleMeetCalendarEvents(params);
|
|
167
|
-
const selected = result.events.find((event) => event.selected) ?? result.events[0];
|
|
168
|
-
if (!selected) throw new Error("No Google Calendar event with a Google Meet link matched the query");
|
|
169
|
-
return {
|
|
170
|
-
calendarId: result.calendarId,
|
|
171
|
-
event: selected.event,
|
|
172
|
-
meetingUri: selected.meetingUri
|
|
173
|
-
};
|
|
174
|
-
}
|
|
175
|
-
//#endregion
|
|
176
4
|
//#region extensions/google-meet/src/config.ts
|
|
177
5
|
function resolveGoogleMeetGatewayOperationTimeoutMs(config) {
|
|
178
6
|
return Math.max(6e4, addTimerTimeoutGraceMs(config.chrome.joinTimeoutMs, 3e4) ?? 1, addTimerTimeoutGraceMs(config.voiceCall.requestTimeoutMs, 1e4) ?? 1);
|
|
@@ -181,31 +9,85 @@ const SOX_DEFAULT_BUFFER_BYTES = 8192;
|
|
|
181
9
|
const SOX_MIN_BUFFER_BYTES = 17;
|
|
182
10
|
const DEFAULT_GOOGLE_MEET_AUDIO_BUFFER_BYTES = SOX_DEFAULT_BUFFER_BYTES / 2;
|
|
183
11
|
const PLAIN_DECIMAL_NUMBER_RE = /^\d+(?:\.\d+)?$/;
|
|
184
|
-
function
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
12
|
+
function buildGoogleMeetAudioCommands(backend, format, bufferBytes) {
|
|
13
|
+
const pipeWire = backend === "pipewire-pulse" || backend === "auto" && process.platform === "linux";
|
|
14
|
+
const sampleRate = format === "g711-ulaw-8khz" ? 8e3 : 24e3;
|
|
15
|
+
const bits = format === "g711-ulaw-8khz" ? 8 : 16;
|
|
16
|
+
if (pipeWire) {
|
|
17
|
+
const pulseFormat = format === "g711-ulaw-8khz" ? "ulaw" : "s16le";
|
|
18
|
+
const latencyMs = Math.max(1, Math.ceil(bufferBytes / (sampleRate * Math.ceil(bits / 8)) * 1e3));
|
|
19
|
+
const common = [
|
|
20
|
+
"--device=openclaw_meeting_audio",
|
|
21
|
+
`--format=${pulseFormat}`,
|
|
22
|
+
`--rate=${sampleRate}`,
|
|
23
|
+
"--channels=1",
|
|
24
|
+
`--latency-msec=${latencyMs}`
|
|
25
|
+
];
|
|
26
|
+
return {
|
|
27
|
+
inputCommand: [
|
|
28
|
+
"parec",
|
|
29
|
+
"--raw",
|
|
30
|
+
...common
|
|
31
|
+
],
|
|
32
|
+
outputCommand: [
|
|
33
|
+
"pacat",
|
|
34
|
+
"--raw",
|
|
35
|
+
"--playback",
|
|
36
|
+
...common
|
|
37
|
+
]
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const wire = format === "g711-ulaw-8khz" ? [
|
|
41
|
+
"-t",
|
|
42
|
+
"raw",
|
|
43
|
+
"-r",
|
|
44
|
+
"8000",
|
|
45
|
+
"-c",
|
|
46
|
+
"1",
|
|
47
|
+
"-e",
|
|
48
|
+
"mu-law",
|
|
49
|
+
"-b",
|
|
50
|
+
"8",
|
|
51
|
+
"-"
|
|
52
|
+
] : [
|
|
53
|
+
"-t",
|
|
54
|
+
"raw",
|
|
55
|
+
"-r",
|
|
56
|
+
"24000",
|
|
57
|
+
"-c",
|
|
58
|
+
"1",
|
|
59
|
+
"-e",
|
|
60
|
+
"signed-integer",
|
|
61
|
+
"-b",
|
|
62
|
+
"16",
|
|
63
|
+
"-L",
|
|
64
|
+
"-"
|
|
65
|
+
];
|
|
66
|
+
const withBuffer = (executable, args) => [
|
|
67
|
+
executable,
|
|
68
|
+
"-q",
|
|
69
|
+
"--buffer",
|
|
70
|
+
String(bufferBytes),
|
|
71
|
+
...args
|
|
72
|
+
];
|
|
73
|
+
return {
|
|
74
|
+
inputCommand: withBuffer("sox", [
|
|
75
|
+
"-t",
|
|
76
|
+
"coreaudio",
|
|
77
|
+
"BlackHole 2ch",
|
|
78
|
+
...wire
|
|
79
|
+
]),
|
|
80
|
+
outputCommand: withBuffer("sox", [
|
|
81
|
+
...wire,
|
|
82
|
+
"-t",
|
|
83
|
+
"coreaudio",
|
|
84
|
+
"BlackHole 2ch"
|
|
85
|
+
])
|
|
86
|
+
};
|
|
205
87
|
}
|
|
206
|
-
const
|
|
207
|
-
const DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND =
|
|
208
|
-
const DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND =
|
|
88
|
+
const DEFAULT_GOOGLE_MEET_AUDIO_COMMANDS = buildGoogleMeetAudioCommands("blackhole-2ch", "pcm16-24khz", DEFAULT_GOOGLE_MEET_AUDIO_BUFFER_BYTES);
|
|
89
|
+
const DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND = DEFAULT_GOOGLE_MEET_AUDIO_COMMANDS.inputCommand;
|
|
90
|
+
const DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND = DEFAULT_GOOGLE_MEET_AUDIO_COMMANDS.outputCommand;
|
|
209
91
|
const DEFAULT_GOOGLE_MEET_CHROME_AUDIO_FORMAT = "pcm16-24khz";
|
|
210
92
|
const DEFAULT_GOOGLE_MEET_BARGE_IN_RMS_THRESHOLD = 650;
|
|
211
93
|
const DEFAULT_GOOGLE_MEET_BARGE_IN_PEAK_THRESHOLD = 2500;
|
|
@@ -219,7 +101,7 @@ const DEFAULT_GOOGLE_MEET_CONFIG = {
|
|
|
219
101
|
defaultTransport: "chrome",
|
|
220
102
|
defaultMode: "agent",
|
|
221
103
|
chrome: {
|
|
222
|
-
audioBackend: "
|
|
104
|
+
audioBackend: "auto",
|
|
223
105
|
audioFormat: DEFAULT_GOOGLE_MEET_CHROME_AUDIO_FORMAT,
|
|
224
106
|
audioBufferBytes: DEFAULT_GOOGLE_MEET_AUDIO_BUFFER_BYTES,
|
|
225
107
|
launch: true,
|
|
@@ -262,7 +144,7 @@ const GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT_KEYS = ["OPENCLAW_GOOGLE_MEET_ACCESS_T
|
|
|
262
144
|
const GOOGLE_MEET_DEFAULT_MEETING_KEYS = ["OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING", "GOOGLE_MEET_DEFAULT_MEETING"];
|
|
263
145
|
const GOOGLE_MEET_PREVIEW_ACK_KEYS = ["OPENCLAW_GOOGLE_MEET_PREVIEW_ACK", "GOOGLE_MEET_PREVIEW_ACK"];
|
|
264
146
|
function resolveBoolean(value, fallback) {
|
|
265
|
-
return
|
|
147
|
+
return asBoolean(value) ?? fallback;
|
|
266
148
|
}
|
|
267
149
|
function resolveNumber(value, fallback) {
|
|
268
150
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : fallback;
|
|
@@ -288,20 +170,7 @@ function normalizeStringAllowEmpty(value) {
|
|
|
288
170
|
return typeof value === "string" ? value.trim() : void 0;
|
|
289
171
|
}
|
|
290
172
|
function readEnvBoolean(env, keys) {
|
|
291
|
-
|
|
292
|
-
if (!normalized) return;
|
|
293
|
-
if ([
|
|
294
|
-
"1",
|
|
295
|
-
"true",
|
|
296
|
-
"yes",
|
|
297
|
-
"on"
|
|
298
|
-
].includes(normalized)) return true;
|
|
299
|
-
if ([
|
|
300
|
-
"0",
|
|
301
|
-
"false",
|
|
302
|
-
"no",
|
|
303
|
-
"off"
|
|
304
|
-
].includes(normalized)) return false;
|
|
173
|
+
return parseBooleanValue(readEnvString(env, keys));
|
|
305
174
|
}
|
|
306
175
|
function readEnvNumber(env, keys) {
|
|
307
176
|
return resolveOptionalNumber(readEnvString(env, keys));
|
|
@@ -351,11 +220,15 @@ function resolveAudioBufferBytes(value, fallback) {
|
|
|
351
220
|
if (!Number.isFinite(number) || number <= 0) return fallback;
|
|
352
221
|
return Math.max(SOX_MIN_BUFFER_BYTES, Math.trunc(number));
|
|
353
222
|
}
|
|
354
|
-
function defaultAudioInputCommand(format, bufferBytes) {
|
|
355
|
-
return
|
|
223
|
+
function defaultAudioInputCommand(backend, format, bufferBytes) {
|
|
224
|
+
return buildGoogleMeetAudioCommands(backend, format, bufferBytes).inputCommand;
|
|
225
|
+
}
|
|
226
|
+
function defaultAudioOutputCommand(backend, format, bufferBytes) {
|
|
227
|
+
return buildGoogleMeetAudioCommands(backend, format, bufferBytes).outputCommand;
|
|
356
228
|
}
|
|
357
|
-
function
|
|
358
|
-
|
|
229
|
+
function resolveAudioBackend(value) {
|
|
230
|
+
const normalized = normalizeOptionalLowercaseString(value)?.replaceAll("_", "-");
|
|
231
|
+
return normalized === "blackhole-2ch" || normalized === "pipewire-pulse" ? normalized : "auto";
|
|
359
232
|
}
|
|
360
233
|
function resolveGoogleMeetConfig(input) {
|
|
361
234
|
return resolveGoogleMeetConfigWithEnv(input);
|
|
@@ -370,6 +243,7 @@ function resolveGoogleMeetConfigWithEnv(input, env = process.env) {
|
|
|
370
243
|
const hasCustomAudioCommand = configuredAudioInputCommand !== void 0 || configuredAudioOutputCommand !== void 0;
|
|
371
244
|
const audioFormat = resolveChromeAudioFormat(chrome.audioFormat) ?? (hasCustomAudioCommand ? "g711-ulaw-8khz" : DEFAULT_GOOGLE_MEET_CONFIG.chrome.audioFormat);
|
|
372
245
|
const audioBufferBytes = resolveAudioBufferBytes(chrome.audioBufferBytes, DEFAULT_GOOGLE_MEET_CONFIG.chrome.audioBufferBytes);
|
|
246
|
+
const audioBackend = resolveAudioBackend(chrome.audioBackend);
|
|
373
247
|
const chromeNode = asRecord(raw.chromeNode);
|
|
374
248
|
const twilio = asRecord(raw.twilio);
|
|
375
249
|
const voiceCall = asRecord(raw.voiceCall);
|
|
@@ -385,7 +259,7 @@ function resolveGoogleMeetConfigWithEnv(input, env = process.env) {
|
|
|
385
259
|
defaultTransport: resolveTransport(raw.defaultTransport, DEFAULT_GOOGLE_MEET_CONFIG.defaultTransport),
|
|
386
260
|
defaultMode: resolveMode(raw.defaultMode, DEFAULT_GOOGLE_MEET_CONFIG.defaultMode),
|
|
387
261
|
chrome: {
|
|
388
|
-
audioBackend
|
|
262
|
+
audioBackend,
|
|
389
263
|
audioFormat,
|
|
390
264
|
audioBufferBytes,
|
|
391
265
|
launch: resolveBoolean(chrome.launch, DEFAULT_GOOGLE_MEET_CONFIG.chrome.launch),
|
|
@@ -395,8 +269,10 @@ function resolveGoogleMeetConfigWithEnv(input, env = process.env) {
|
|
|
395
269
|
autoJoin: resolveBoolean(chrome.autoJoin, DEFAULT_GOOGLE_MEET_CONFIG.chrome.autoJoin),
|
|
396
270
|
joinTimeoutMs: resolveTimerConfigMs(chrome.joinTimeoutMs, DEFAULT_GOOGLE_MEET_CONFIG.chrome.joinTimeoutMs),
|
|
397
271
|
waitForInCallMs: resolveTimerConfigMs(chrome.waitForInCallMs, DEFAULT_GOOGLE_MEET_CONFIG.chrome.waitForInCallMs),
|
|
398
|
-
audioInputCommand: configuredAudioInputCommand ?? defaultAudioInputCommand(audioFormat, audioBufferBytes),
|
|
399
|
-
audioOutputCommand: configuredAudioOutputCommand ?? defaultAudioOutputCommand(audioFormat, audioBufferBytes),
|
|
272
|
+
audioInputCommand: configuredAudioInputCommand ?? defaultAudioInputCommand(audioBackend, audioFormat, audioBufferBytes),
|
|
273
|
+
audioOutputCommand: configuredAudioOutputCommand ?? defaultAudioOutputCommand(audioBackend, audioFormat, audioBufferBytes),
|
|
274
|
+
audioInputCommandOverride: configuredAudioInputCommand,
|
|
275
|
+
audioOutputCommandOverride: configuredAudioOutputCommand,
|
|
400
276
|
bargeInInputCommand: resolveStringArray(chrome.bargeInInputCommand),
|
|
401
277
|
bargeInRmsThreshold: resolveNumber(chrome.bargeInRmsThreshold, DEFAULT_GOOGLE_MEET_CONFIG.chrome.bargeInRmsThreshold),
|
|
402
278
|
bargeInPeakThreshold: resolveNumber(chrome.bargeInPeakThreshold, DEFAULT_GOOGLE_MEET_CONFIG.chrome.bargeInPeakThreshold),
|
|
@@ -447,4 +323,4 @@ function resolveGoogleMeetConfigWithEnv(input, env = process.env) {
|
|
|
447
323
|
};
|
|
448
324
|
}
|
|
449
325
|
//#endregion
|
|
450
|
-
export {
|
|
326
|
+
export { resolveGoogleMeetGatewayOperationTimeoutMs as i, DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND as n, resolveGoogleMeetConfig as r, DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND as t };
|
|
@@ -1,18 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { resolveGoogleMeetAccessToken } from "./oauth-
|
|
1
|
+
import { h as __exportAll, l as createGoogleMeetSpace } from "./plugin-helpers-CfeT1SYY.js";
|
|
2
|
+
import { resolveGoogleMeetAccessToken } from "./oauth-9sUJ68Mw.js";
|
|
3
|
+
import { t as createMeetWithBrowserProxyOnNode } from "./chrome-create-PKAyxCiL.js";
|
|
3
4
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
4
|
-
//#region \0rolldown/runtime.js
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __exportAll = (all, no_symbols) => {
|
|
7
|
-
let target = {};
|
|
8
|
-
for (var name in all) __defProp(target, name, {
|
|
9
|
-
get: all[name],
|
|
10
|
-
enumerable: true
|
|
11
|
-
});
|
|
12
|
-
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
13
|
-
return target;
|
|
14
|
-
};
|
|
15
|
-
//#endregion
|
|
16
5
|
//#region extensions/google-meet/src/create.ts
|
|
17
6
|
var create_exports = /* @__PURE__ */ __exportAll({
|
|
18
7
|
createAndJoinMeetFromParams: () => createAndJoinMeetFromParams,
|