@openclaw/google-meet 2026.5.27 → 2026.5.28-beta.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/{cli-CS9eUUSs.js → cli-DbeIN4D0.js} +5 -2
- package/dist/index.js +14 -17
- package/npm-shrinkwrap.json +3 -3
- package/package.json +4 -4
|
@@ -10,6 +10,7 @@ import { createInterface } from "node:readline/promises";
|
|
|
10
10
|
import { format } from "node:util";
|
|
11
11
|
//#region extensions/google-meet/src/cli.ts
|
|
12
12
|
const GOOGLE_MEET_GATEWAY_DEFAULT_TIMEOUT_MS = 5e3;
|
|
13
|
+
const PLAIN_DECIMAL_NUMBER_RE = /^\d+(?:\.\d+)?$/;
|
|
13
14
|
function writeStdoutJson(value) {
|
|
14
15
|
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
15
16
|
}
|
|
@@ -41,7 +42,8 @@ async function promptInput(message) {
|
|
|
41
42
|
}
|
|
42
43
|
function parseOptionalNumber(value) {
|
|
43
44
|
if (!value?.trim()) return;
|
|
44
|
-
const
|
|
45
|
+
const trimmed = value.trim();
|
|
46
|
+
const parsed = PLAIN_DECIMAL_NUMBER_RE.test(trimmed) ? Number(trimmed) : NaN;
|
|
45
47
|
if (!Number.isFinite(parsed)) throw new Error(`Expected a numeric value, received ${value}`);
|
|
46
48
|
return parsed;
|
|
47
49
|
}
|
|
@@ -57,7 +59,8 @@ function formatOptional(value) {
|
|
|
57
59
|
}
|
|
58
60
|
function parsePositiveNumber(value, label) {
|
|
59
61
|
if (value === void 0) return;
|
|
60
|
-
const
|
|
62
|
+
const trimmed = value.trim();
|
|
63
|
+
const parsed = PLAIN_DECIMAL_NUMBER_RE.test(trimmed) ? Number(trimmed) : NaN;
|
|
61
64
|
if (!Number.isFinite(parsed) || parsed <= 0) throw new Error(`${label} must be a positive number`);
|
|
62
65
|
return parsed;
|
|
63
66
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { a as isSameMeetUrlForReuse, c as resolveChromeNode, f as endGoogleMeetActiveConference, g as fetchLatestGoogleMeetConferenceRecord, h as fetchGoogleMeetSpace, i as callBrowserProxyOnNode, l as resolveChromeNodeInfo, m as fetchGoogleMeetAttendance, n as isGoogleMeetBrowserManualActionError, o as normalizeMeetUrlForReuse, p as fetchGoogleMeetArtifacts, r as asBrowserTabs, s as readBrowserTab, t as createMeetWithBrowserProxyOnNode, u as buildGoogleMeetPreflightReport } from "./chrome-create-B3zyjf5f.js";
|
|
2
2
|
import { n as findGoogleMeetCalendarEvent, r as listGoogleMeetCalendarEvents, t as buildGoogleMeetCalendarDayWindow } from "./calendar-IxWkFtfn.js";
|
|
3
|
+
import { optionalPositiveIntegerSchema, readPositiveIntegerParam } from "openclaw/plugin-sdk/channel-actions";
|
|
3
4
|
import { formatErrorMessage } from "openclaw/plugin-sdk/error-runtime";
|
|
4
5
|
import { ErrorCodes, GatewayClient, callGatewayFromCli, errorShape, startGatewayClientWhenEventLoopReady } from "openclaw/plugin-sdk/gateway-runtime";
|
|
5
6
|
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
@@ -20,6 +21,7 @@ import { getRealtimeTranscriptionProvider, listRealtimeTranscriptionProviders }
|
|
|
20
21
|
const SOX_DEFAULT_BUFFER_BYTES = 8192;
|
|
21
22
|
const SOX_MIN_BUFFER_BYTES = 17;
|
|
22
23
|
const DEFAULT_GOOGLE_MEET_AUDIO_BUFFER_BYTES = SOX_DEFAULT_BUFFER_BYTES / 2;
|
|
24
|
+
const PLAIN_DECIMAL_NUMBER_RE = /^\d+(?:\.\d+)?$/;
|
|
23
25
|
function withSoxBuffer(command, bufferBytes) {
|
|
24
26
|
return [
|
|
25
27
|
command[0] ?? "sox",
|
|
@@ -163,7 +165,8 @@ function resolveNumber(value, fallback) {
|
|
|
163
165
|
function resolveOptionalNumber(value) {
|
|
164
166
|
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
165
167
|
if (typeof value === "string" && value.trim()) {
|
|
166
|
-
const
|
|
168
|
+
const trimmed = value.trim();
|
|
169
|
+
const parsed = PLAIN_DECIMAL_NUMBER_RE.test(trimmed) ? Number(trimmed) : NaN;
|
|
167
170
|
return Number.isFinite(parsed) ? parsed : void 0;
|
|
168
171
|
}
|
|
169
172
|
}
|
|
@@ -4338,13 +4341,13 @@ const GoogleMeetToolSchema = Type.Object({
|
|
|
4338
4341
|
dtmfSequence: Type.Optional(Type.String({ description: "Explicit DTMF sequence for Twilio" })),
|
|
4339
4342
|
sessionId: Type.Optional(Type.String({ description: "Meet session ID" })),
|
|
4340
4343
|
message: Type.Optional(Type.String({ description: "Realtime instructions to speak now" })),
|
|
4341
|
-
timeoutMs:
|
|
4344
|
+
timeoutMs: optionalPositiveIntegerSchema({ description: "Probe timeout in milliseconds" }),
|
|
4342
4345
|
meeting: Type.Optional(Type.String({ description: "Meet URL, meeting code, or spaces/{id}" })),
|
|
4343
4346
|
today: Type.Optional(Type.Boolean({ description: "For latest, artifacts, or attendance, find a Meet link on today's calendar." })),
|
|
4344
4347
|
event: Type.Optional(Type.String({ description: "For latest, artifacts, or attendance, find a matching Calendar event." })),
|
|
4345
4348
|
calendarId: Type.Optional(Type.String({ description: "Calendar id for today/event lookup" })),
|
|
4346
4349
|
conferenceRecord: Type.Optional(Type.String({ description: "Meet conferenceRecords/{id} resource name or id" })),
|
|
4347
|
-
pageSize:
|
|
4350
|
+
pageSize: optionalPositiveIntegerSchema({ description: "Meet API page size for list actions" }),
|
|
4348
4351
|
includeTranscriptEntries: Type.Optional(Type.Boolean({ description: "For artifacts, include structured transcript entries" })),
|
|
4349
4352
|
includeDocumentBodies: Type.Optional(Type.Boolean({ description: "For artifacts/export, export linked transcript and smart-note Google Docs text through Drive." })),
|
|
4350
4353
|
outputDir: Type.Optional(Type.String({ description: "For export, output directory" })),
|
|
@@ -4352,8 +4355,8 @@ const GoogleMeetToolSchema = Type.Object({
|
|
|
4352
4355
|
dryRun: Type.Optional(Type.Boolean({ description: "For export, return the manifest without writing files." })),
|
|
4353
4356
|
includeAllConferenceRecords: Type.Optional(Type.Boolean({ description: "For artifacts, attendance, or export with meeting input, fetch all conference records instead of only the latest." })),
|
|
4354
4357
|
mergeDuplicateParticipants: Type.Optional(Type.Boolean({ description: "For attendance, merge duplicate participant resources." })),
|
|
4355
|
-
lateAfterMinutes:
|
|
4356
|
-
earlyBeforeMinutes:
|
|
4358
|
+
lateAfterMinutes: optionalPositiveIntegerSchema({ description: "For attendance, mark participants late after this many minutes." }),
|
|
4359
|
+
earlyBeforeMinutes: optionalPositiveIntegerSchema({ description: "For attendance, mark early leavers before this many minutes." }),
|
|
4357
4360
|
accessToken: Type.Optional(Type.String({ description: "Access token override" })),
|
|
4358
4361
|
refreshToken: Type.Optional(Type.String({ description: "Refresh token override" })),
|
|
4359
4362
|
clientId: Type.Optional(Type.String({ description: "OAuth client id override" })),
|
|
@@ -4387,12 +4390,6 @@ function resolveMeetingInput(config, value) {
|
|
|
4387
4390
|
if (!meeting) throw new Error("Meeting input is required");
|
|
4388
4391
|
return meeting;
|
|
4389
4392
|
}
|
|
4390
|
-
function resolveOptionalPositiveInteger(value) {
|
|
4391
|
-
if (value === void 0) return;
|
|
4392
|
-
const parsed = typeof value === "number" ? value : Number(normalizeOptionalString(value));
|
|
4393
|
-
if (!Number.isInteger(parsed) || parsed <= 0) throw new Error("Expected pageSize to be a positive integer");
|
|
4394
|
-
return parsed;
|
|
4395
|
-
}
|
|
4396
4393
|
function shouldJoinCreatedMeet(raw) {
|
|
4397
4394
|
return raw.join !== false && raw.join !== "false";
|
|
4398
4395
|
}
|
|
@@ -4517,13 +4514,13 @@ async function resolveArtifactQueryFromParams(config, raw) {
|
|
|
4517
4514
|
meeting: resolvedMeeting.meeting,
|
|
4518
4515
|
calendarEvent: resolvedMeeting.calendarEvent,
|
|
4519
4516
|
conferenceRecord,
|
|
4520
|
-
pageSize:
|
|
4517
|
+
pageSize: readPositiveIntegerParam(raw, "pageSize"),
|
|
4521
4518
|
includeTranscriptEntries: raw.includeTranscriptEntries !== false,
|
|
4522
4519
|
includeDocumentBodies: raw.includeDocumentBodies === true,
|
|
4523
4520
|
allConferenceRecords: raw.includeAllConferenceRecords === true,
|
|
4524
4521
|
mergeDuplicateParticipants: raw.mergeDuplicateParticipants !== false,
|
|
4525
|
-
lateAfterMinutes:
|
|
4526
|
-
earlyBeforeMinutes:
|
|
4522
|
+
lateAfterMinutes: readPositiveIntegerParam(raw, "lateAfterMinutes"),
|
|
4523
|
+
earlyBeforeMinutes: readPositiveIntegerParam(raw, "earlyBeforeMinutes")
|
|
4527
4524
|
};
|
|
4528
4525
|
}
|
|
4529
4526
|
async function exportGoogleMeetBundleFromParams(config, raw) {
|
|
@@ -4546,7 +4543,7 @@ async function exportGoogleMeetBundleFromParams(config, raw) {
|
|
|
4546
4543
|
lateAfterMinutes: resolved.lateAfterMinutes,
|
|
4547
4544
|
earlyBeforeMinutes: resolved.earlyBeforeMinutes
|
|
4548
4545
|
})]);
|
|
4549
|
-
const { buildGoogleMeetExportManifest, googleMeetExportFileNames, writeMeetExportBundle } = await import("./cli-
|
|
4546
|
+
const { buildGoogleMeetExportManifest, googleMeetExportFileNames, writeMeetExportBundle } = await import("./cli-DbeIN4D0.js");
|
|
4550
4547
|
const calendarId = normalizeOptionalString(raw.calendarId);
|
|
4551
4548
|
const request = {
|
|
4552
4549
|
...resolved.meeting ? { meeting: resolved.meeting } : {},
|
|
@@ -4807,7 +4804,7 @@ var google_meet_default = definePluginEntry({
|
|
|
4807
4804
|
url: resolveMeetingInput(config, params?.url),
|
|
4808
4805
|
transport: normalizeTransport(params?.transport),
|
|
4809
4806
|
mode: normalizeMode(params?.mode),
|
|
4810
|
-
timeoutMs:
|
|
4807
|
+
timeoutMs: readPositiveIntegerParam(asParamRecord(params), "timeoutMs")
|
|
4811
4808
|
}));
|
|
4812
4809
|
} catch (err) {
|
|
4813
4810
|
sendError(respond, err);
|
|
@@ -4962,7 +4959,7 @@ var google_meet_default = definePluginEntry({
|
|
|
4962
4959
|
handle: handleGoogleMeetNodeHostCommand
|
|
4963
4960
|
});
|
|
4964
4961
|
api.registerCli(async ({ program }) => {
|
|
4965
|
-
const { registerGoogleMeetCli } = await import("./cli-
|
|
4962
|
+
const { registerGoogleMeetCli } = await import("./cli-DbeIN4D0.js");
|
|
4966
4963
|
registerGoogleMeetCli({
|
|
4967
4964
|
program,
|
|
4968
4965
|
config,
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/google-meet",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.28-beta.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@openclaw/google-meet",
|
|
9
|
-
"version": "2026.5.
|
|
9
|
+
"version": "2026.5.28-beta.1",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"commander": "14.0.3",
|
|
12
12
|
"typebox": "1.1.38"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"openclaw": ">=2026.5.
|
|
15
|
+
"openclaw": ">=2026.5.28-beta.1"
|
|
16
16
|
},
|
|
17
17
|
"peerDependenciesMeta": {
|
|
18
18
|
"openclaw": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/google-meet",
|
|
3
|
-
"version": "2026.5.
|
|
3
|
+
"version": "2026.5.28-beta.1",
|
|
4
4
|
"description": "OpenClaw Google Meet participant plugin for joining calls through Chrome or Twilio transports.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"typebox": "1.1.38"
|
|
13
13
|
},
|
|
14
14
|
"peerDependencies": {
|
|
15
|
-
"openclaw": ">=2026.5.
|
|
15
|
+
"openclaw": ">=2026.5.28-beta.1"
|
|
16
16
|
},
|
|
17
17
|
"peerDependenciesMeta": {
|
|
18
18
|
"openclaw": {
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"minHostVersion": ">=2026.4.20"
|
|
30
30
|
},
|
|
31
31
|
"compat": {
|
|
32
|
-
"pluginApi": ">=2026.5.
|
|
32
|
+
"pluginApi": ">=2026.5.28-beta.1"
|
|
33
33
|
},
|
|
34
34
|
"build": {
|
|
35
|
-
"openclawVersion": "2026.5.
|
|
35
|
+
"openclawVersion": "2026.5.28-beta.1"
|
|
36
36
|
},
|
|
37
37
|
"release": {
|
|
38
38
|
"publishToClawHub": true,
|