@openclaw/google-meet 2026.9.6 → 2026.9.8
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/assets/icon.png +0 -0
- package/dist/.setup/{chrome-create-BZRBHJp9.mjs → chrome-create-wuAK5Pnq.mjs} +14 -19
- package/dist/.setup/{cli-CbxqjjTC.mjs → cli-DVDq0TFu.mjs} +27 -695
- package/dist/.setup/cli-export-D4IM6KLJ.mjs +632 -0
- package/dist/.setup/config-BXGAMntj.mjs +240 -0
- package/dist/.setup/{create-CG9Pgwsb.mjs → create-UrHOmnWb.mjs} +4 -17
- package/dist/.setup/{google-meet-platform-adapter-DQZ74Kd5.mjs → google-meet-platform-adapter-gosgbMIM.mjs} +337 -228
- package/dist/.setup/{google-meet-platform-constants-Bs5iAg3E.mjs → google-meet-platform-constants-CnRfrYX7.mjs} +1 -4
- package/dist/.setup/{node-host-BUrsParx.mjs → node-host-Tr7Mx3da.mjs} +3 -3
- package/dist/.setup/{node-invoke-policy-hwXq9MfV.mjs → node-invoke-policy-Dd3krTYV.mjs} +2 -2
- package/dist/.setup/{oauth-22Ey-zCb.mjs → oauth-BoyruWcS.mjs} +2 -2
- package/dist/.setup/{plugin-helpers--7X3icub.mjs → plugin-helpers-CdQ_YNA7.mjs} +147 -236
- package/dist/.setup/{plugin-registration-B3LXKV4R.mjs → plugin-registration-aCEuCerg.mjs} +34 -10
- package/dist/.setup/{runtime-BuIZ5e3V.mjs → runtime-BdiF53A2.mjs} +85 -41
- package/dist/doctor-contract-api.js +3 -6
- package/dist/index.js +48 -12
- package/node_modules/typebox/build/compile/code.mjs +1 -2
- package/node_modules/typebox/build/compile/validator.mjs +5 -1
- package/node_modules/typebox/build/format/iri.mjs +16 -9
- package/node_modules/typebox/build/guard/emit.mjs +2 -2
- package/node_modules/typebox/build/guard/guard.d.mts +7 -5
- package/node_modules/typebox/build/guard/guard.mjs +14 -9
- package/node_modules/typebox/build/guard/index.mjs +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
- package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
- package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
- package/node_modules/typebox/build/schema/build.mjs +2 -3
- package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
- package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
- package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
- package/node_modules/typebox/build/schema/parse.mjs +3 -0
- package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
- package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
- package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
- package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
- package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
- package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
- package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
- package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
- package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
- package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
- package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +3 -1
- package/package.json +5 -5
- package/dist/.setup/config-C-6enWkx.mjs +0 -328
- package/dist/.setup/google-api-errors-BDYXfKRa.mjs +0 -17
- /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { asBoolean, asRecord, normalizeOptionalLowercaseString, normalizeOptionalString, normalizeOptionalTrimmedStringList, parseBooleanValue, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
2
|
+
import { addTimerTimeoutGraceMs, asPositiveFiniteNumber, resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
|
|
3
|
+
import { REALTIME_VOICE_AGENT_CONSULT_TOOL_NAME, resolveRealtimeVoiceAgentConsultToolPolicy } from "openclaw/plugin-sdk/realtime-voice";
|
|
4
|
+
//#region extensions/google-meet/src/config.ts
|
|
5
|
+
function resolveGoogleMeetGatewayOperationTimeoutMs(config) {
|
|
6
|
+
return Math.max(6e4, addTimerTimeoutGraceMs(config.chrome.joinTimeoutMs, 3e4) ?? 1, addTimerTimeoutGraceMs(config.voiceCall.requestTimeoutMs, 1e4) ?? 1);
|
|
7
|
+
}
|
|
8
|
+
const SOX_DEFAULT_BUFFER_BYTES = 8192;
|
|
9
|
+
const SOX_MIN_BUFFER_BYTES = 17;
|
|
10
|
+
const DEFAULT_GOOGLE_MEET_AUDIO_BUFFER_BYTES = SOX_DEFAULT_BUFFER_BYTES / 2;
|
|
11
|
+
const PLAIN_DECIMAL_NUMBER_RE = /^\d+(?:\.\d+)?$/;
|
|
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
|
+
};
|
|
87
|
+
}
|
|
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;
|
|
91
|
+
const DEFAULT_GOOGLE_MEET_REALTIME_INSTRUCTIONS = `You are joining a private Google Meet as an OpenClaw voice transport. Keep spoken replies brief and natural. In agent mode, wait for OpenClaw consult results and speak them exactly. In bidi mode, answer directly and call ${REALTIME_VOICE_AGENT_CONSULT_TOOL_NAME} for deeper reasoning, current information, or tools.`;
|
|
92
|
+
const DEFAULT_GOOGLE_MEET_REALTIME_INTRO_MESSAGE = "Say exactly: I'm here and listening.";
|
|
93
|
+
function resolveOptionalNumber(value) {
|
|
94
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
95
|
+
if (typeof value === "string" && value.trim()) {
|
|
96
|
+
const trimmed = value.trim();
|
|
97
|
+
const parsed = PLAIN_DECIMAL_NUMBER_RE.test(trimmed) ? Number(trimmed) : NaN;
|
|
98
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function readGoogleMeetEnv(env, name) {
|
|
102
|
+
return normalizeOptionalString(env[name]) ?? normalizeOptionalString(env[name.slice(9)]);
|
|
103
|
+
}
|
|
104
|
+
function resolveProvidersConfig(value) {
|
|
105
|
+
const raw = asRecord(value);
|
|
106
|
+
const providers = {};
|
|
107
|
+
for (const [key, entry] of Object.entries(raw)) {
|
|
108
|
+
const providerId = normalizeOptionalLowercaseString(key);
|
|
109
|
+
if (!providerId) continue;
|
|
110
|
+
providers[providerId] = asRecord(entry);
|
|
111
|
+
}
|
|
112
|
+
return providers;
|
|
113
|
+
}
|
|
114
|
+
function resolveTransport(value, fallback) {
|
|
115
|
+
const normalized = normalizeOptionalLowercaseString(value);
|
|
116
|
+
return normalized === "chrome" || normalized === "chrome-node" || normalized === "twilio" ? normalized : fallback;
|
|
117
|
+
}
|
|
118
|
+
function resolveMode(value, fallback) {
|
|
119
|
+
const normalized = normalizeOptionalLowercaseString(value);
|
|
120
|
+
if (normalized === "realtime") return "agent";
|
|
121
|
+
return normalized === "agent" || normalized === "bidi" || normalized === "transcribe" ? normalized : fallback;
|
|
122
|
+
}
|
|
123
|
+
function resolveRealtimeStrategy(value, fallback) {
|
|
124
|
+
const normalized = normalizeOptionalLowercaseString(value);
|
|
125
|
+
return normalized === "agent" || normalized === "bidi" ? normalized : fallback;
|
|
126
|
+
}
|
|
127
|
+
function resolveChromeAudioFormat(value) {
|
|
128
|
+
switch (normalizeOptionalString(value)?.toLowerCase().replaceAll("_", "-")) {
|
|
129
|
+
case "pcm16-24khz":
|
|
130
|
+
case "pcm16-24k":
|
|
131
|
+
case "pcm24":
|
|
132
|
+
case "pcm": return "pcm16-24khz";
|
|
133
|
+
case "g711-ulaw-8khz":
|
|
134
|
+
case "g711-ulaw-8k":
|
|
135
|
+
case "g711-ulaw":
|
|
136
|
+
case "mulaw":
|
|
137
|
+
case "mu-law": return "g711-ulaw-8khz";
|
|
138
|
+
default: return;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function resolveAudioBufferBytes(value, fallback) {
|
|
142
|
+
return Math.max(SOX_MIN_BUFFER_BYTES, Math.trunc(asPositiveFiniteNumber(value) ?? fallback));
|
|
143
|
+
}
|
|
144
|
+
function resolveAudioBackend(value) {
|
|
145
|
+
const normalized = normalizeOptionalLowercaseString(value)?.replaceAll("_", "-");
|
|
146
|
+
return normalized === "blackhole-2ch" || normalized === "pipewire-pulse" ? normalized : "auto";
|
|
147
|
+
}
|
|
148
|
+
function resolveGoogleMeetConfig(input) {
|
|
149
|
+
const env = process.env;
|
|
150
|
+
const raw = asRecord(input);
|
|
151
|
+
const defaults = asRecord(raw.defaults);
|
|
152
|
+
const preview = asRecord(raw.preview);
|
|
153
|
+
const chrome = asRecord(raw.chrome);
|
|
154
|
+
const configuredAudioInputCommand = normalizeOptionalTrimmedStringList(chrome.audioInputCommand);
|
|
155
|
+
const configuredAudioOutputCommand = normalizeOptionalTrimmedStringList(chrome.audioOutputCommand);
|
|
156
|
+
const hasCustomAudioCommand = configuredAudioInputCommand !== void 0 || configuredAudioOutputCommand !== void 0;
|
|
157
|
+
const audioFormat = resolveChromeAudioFormat(chrome.audioFormat) ?? (hasCustomAudioCommand ? "g711-ulaw-8khz" : "pcm16-24khz");
|
|
158
|
+
const audioBufferBytes = resolveAudioBufferBytes(chrome.audioBufferBytes, DEFAULT_GOOGLE_MEET_AUDIO_BUFFER_BYTES);
|
|
159
|
+
const audioBackend = resolveAudioBackend(chrome.audioBackend);
|
|
160
|
+
const audioCommands = buildGoogleMeetAudioCommands(audioBackend, audioFormat, audioBufferBytes);
|
|
161
|
+
const chromeNode = asRecord(raw.chromeNode);
|
|
162
|
+
const twilio = asRecord(raw.twilio);
|
|
163
|
+
const voiceCall = asRecord(raw.voiceCall);
|
|
164
|
+
const realtime = asRecord(raw.realtime);
|
|
165
|
+
const realtimeProvider = normalizeOptionalString(realtime.provider);
|
|
166
|
+
const resolvedRealtimeProvider = realtimeProvider ?? "openai";
|
|
167
|
+
const oauth = asRecord(raw.oauth);
|
|
168
|
+
const auth = asRecord(raw.auth);
|
|
169
|
+
return {
|
|
170
|
+
enabled: asBoolean(raw.enabled) ?? true,
|
|
171
|
+
defaults: { meeting: normalizeOptionalString(defaults.meeting) ?? readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_DEFAULT_MEETING") },
|
|
172
|
+
preview: { enrollmentAcknowledged: asBoolean(preview.enrollmentAcknowledged) ?? parseBooleanValue(readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_PREVIEW_ACK")) ?? false },
|
|
173
|
+
defaultTransport: resolveTransport(raw.defaultTransport, "chrome"),
|
|
174
|
+
defaultMode: resolveMode(raw.defaultMode, "agent"),
|
|
175
|
+
chrome: {
|
|
176
|
+
audioBackend,
|
|
177
|
+
audioFormat,
|
|
178
|
+
audioBufferBytes,
|
|
179
|
+
launch: asBoolean(chrome.launch) ?? true,
|
|
180
|
+
browserProfile: normalizeOptionalString(chrome.browserProfile),
|
|
181
|
+
guestName: normalizeOptionalString(chrome.guestName) ?? "OpenClaw Agent",
|
|
182
|
+
reuseExistingTab: asBoolean(chrome.reuseExistingTab) ?? true,
|
|
183
|
+
autoJoin: asBoolean(chrome.autoJoin) ?? true,
|
|
184
|
+
joinTimeoutMs: resolvePositiveTimerTimeoutMs(chrome.joinTimeoutMs, 3e4),
|
|
185
|
+
waitForInCallMs: resolvePositiveTimerTimeoutMs(chrome.waitForInCallMs, 2e4),
|
|
186
|
+
audioInputCommand: configuredAudioInputCommand ?? audioCommands.inputCommand,
|
|
187
|
+
audioOutputCommand: configuredAudioOutputCommand ?? audioCommands.outputCommand,
|
|
188
|
+
audioInputCommandOverride: configuredAudioInputCommand,
|
|
189
|
+
audioOutputCommandOverride: configuredAudioOutputCommand,
|
|
190
|
+
bargeInInputCommand: normalizeOptionalTrimmedStringList(chrome.bargeInInputCommand),
|
|
191
|
+
bargeInRmsThreshold: asPositiveFiniteNumber(chrome.bargeInRmsThreshold) ?? 650,
|
|
192
|
+
bargeInPeakThreshold: asPositiveFiniteNumber(chrome.bargeInPeakThreshold) ?? 2500,
|
|
193
|
+
bargeInCooldownMs: resolvePositiveTimerTimeoutMs(chrome.bargeInCooldownMs, 900),
|
|
194
|
+
audioBridgeCommand: normalizeOptionalTrimmedStringList(chrome.audioBridgeCommand),
|
|
195
|
+
audioBridgeHealthCommand: normalizeOptionalTrimmedStringList(chrome.audioBridgeHealthCommand)
|
|
196
|
+
},
|
|
197
|
+
chromeNode: { node: normalizeOptionalString(chromeNode.node) },
|
|
198
|
+
twilio: {
|
|
199
|
+
defaultDialInNumber: normalizeOptionalString(twilio.defaultDialInNumber),
|
|
200
|
+
defaultPin: normalizeOptionalString(twilio.defaultPin),
|
|
201
|
+
defaultDtmfSequence: normalizeOptionalString(twilio.defaultDtmfSequence)
|
|
202
|
+
},
|
|
203
|
+
voiceCall: {
|
|
204
|
+
enabled: asBoolean(voiceCall.enabled) ?? true,
|
|
205
|
+
gatewayUrl: normalizeOptionalString(voiceCall.gatewayUrl),
|
|
206
|
+
token: normalizeOptionalString(voiceCall.token),
|
|
207
|
+
requestTimeoutMs: resolvePositiveTimerTimeoutMs(voiceCall.requestTimeoutMs, 3e4),
|
|
208
|
+
dtmfDelayMs: resolvePositiveTimerTimeoutMs(voiceCall.dtmfDelayMs, 12e3),
|
|
209
|
+
postDtmfSpeechDelayMs: resolvePositiveTimerTimeoutMs(voiceCall.postDtmfSpeechDelayMs, 5e3),
|
|
210
|
+
introMessage: normalizeOptionalString(voiceCall.introMessage)
|
|
211
|
+
},
|
|
212
|
+
realtime: {
|
|
213
|
+
strategy: resolveRealtimeStrategy(realtime.strategy, "agent"),
|
|
214
|
+
provider: resolvedRealtimeProvider,
|
|
215
|
+
transcriptionProvider: normalizeOptionalString(realtime.transcriptionProvider) ?? (realtimeProvider && realtimeProvider !== "google" ? resolvedRealtimeProvider : "openai"),
|
|
216
|
+
voiceProvider: normalizeOptionalString(realtime.voiceProvider),
|
|
217
|
+
model: normalizeOptionalString(realtime.model),
|
|
218
|
+
instructions: normalizeOptionalString(realtime.instructions) ?? DEFAULT_GOOGLE_MEET_REALTIME_INSTRUCTIONS,
|
|
219
|
+
introMessage: readStringValue(realtime.introMessage)?.trim() ?? DEFAULT_GOOGLE_MEET_REALTIME_INTRO_MESSAGE,
|
|
220
|
+
agentId: normalizeOptionalString(realtime.agentId),
|
|
221
|
+
toolPolicy: resolveRealtimeVoiceAgentConsultToolPolicy(realtime.toolPolicy, "safe-read-only"),
|
|
222
|
+
providers: resolveProvidersConfig(realtime.providers)
|
|
223
|
+
},
|
|
224
|
+
oauth: {
|
|
225
|
+
clientId: normalizeOptionalString(oauth.clientId) ?? normalizeOptionalString(auth.clientId) ?? readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_CLIENT_ID"),
|
|
226
|
+
clientSecret: normalizeOptionalString(oauth.clientSecret) ?? normalizeOptionalString(auth.clientSecret) ?? readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_CLIENT_SECRET"),
|
|
227
|
+
refreshToken: normalizeOptionalString(oauth.refreshToken) ?? readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_REFRESH_TOKEN"),
|
|
228
|
+
accessToken: normalizeOptionalString(oauth.accessToken) ?? readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN"),
|
|
229
|
+
expiresAt: resolveOptionalNumber(oauth.expiresAt) ?? resolveOptionalNumber(readGoogleMeetEnv(env, "OPENCLAW_GOOGLE_MEET_ACCESS_TOKEN_EXPIRES_AT"))
|
|
230
|
+
},
|
|
231
|
+
auth: {
|
|
232
|
+
provider: "google-oauth",
|
|
233
|
+
clientId: normalizeOptionalString(auth.clientId),
|
|
234
|
+
clientSecret: normalizeOptionalString(auth.clientSecret),
|
|
235
|
+
tokenPath: normalizeOptionalString(auth.tokenPath)
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
//#endregion
|
|
240
|
+
export { resolveGoogleMeetGatewayOperationTimeoutMs as i, DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND as n, resolveGoogleMeetConfig as r, DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as createMeetWithBrowserProxyOnNode } from "./chrome-create-
|
|
1
|
+
import { _ as __exportAll, o as resolveGoogleMeetTokenFromParams, u as createGoogleMeetSpace } from "./plugin-helpers-CdQ_YNA7.mjs";
|
|
2
|
+
import { d as normalizeTransport, u as normalizeMode } from "./plugin-registration-aCEuCerg.mjs";
|
|
3
|
+
import { t as createMeetWithBrowserProxyOnNode } from "./chrome-create-wuAK5Pnq.mjs";
|
|
4
4
|
import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
5
|
//#region extensions/google-meet/src/create.ts
|
|
6
6
|
var create_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -9,13 +9,6 @@ var create_exports = /* @__PURE__ */ __exportAll({
|
|
|
9
9
|
hasCreateSpaceConfigInput: () => hasCreateSpaceConfigInput,
|
|
10
10
|
resolveCreateSpaceConfig: () => resolveCreateSpaceConfig
|
|
11
11
|
});
|
|
12
|
-
function normalizeTransport(value) {
|
|
13
|
-
return value === "chrome" || value === "chrome-node" || value === "twilio" ? value : void 0;
|
|
14
|
-
}
|
|
15
|
-
function normalizeMode(value) {
|
|
16
|
-
if (value === "realtime") return "agent";
|
|
17
|
-
return value === "agent" || value === "bidi" || value === "transcribe" ? value : void 0;
|
|
18
|
-
}
|
|
19
12
|
function normalizeGoogleMeetAccessType(value) {
|
|
20
13
|
const normalized = normalizeOptionalString(value)?.toUpperCase().replaceAll("-", "_");
|
|
21
14
|
return normalized === "OPEN" || normalized === "TRUSTED" || normalized === "RESTRICTED" ? normalized : void 0;
|
|
@@ -41,13 +34,7 @@ function hasCreateSpaceConfigInput(raw) {
|
|
|
41
34
|
return normalizeOptionalString(raw.accessType) !== void 0 || normalizeOptionalString(raw.entryPointAccess) !== void 0;
|
|
42
35
|
}
|
|
43
36
|
async function createSpaceFromParams(config, raw) {
|
|
44
|
-
const token = await
|
|
45
|
-
clientId: normalizeOptionalString(raw.clientId) ?? config.oauth.clientId,
|
|
46
|
-
clientSecret: normalizeOptionalString(raw.clientSecret) ?? config.oauth.clientSecret,
|
|
47
|
-
refreshToken: normalizeOptionalString(raw.refreshToken) ?? config.oauth.refreshToken,
|
|
48
|
-
accessToken: normalizeOptionalString(raw.accessToken) ?? config.oauth.accessToken,
|
|
49
|
-
expiresAt: typeof raw.expiresAt === "number" ? raw.expiresAt : config.oauth.expiresAt
|
|
50
|
-
});
|
|
37
|
+
const token = await resolveGoogleMeetTokenFromParams(config, raw);
|
|
51
38
|
return {
|
|
52
39
|
source: "api",
|
|
53
40
|
token,
|