multi-gws 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/account-add.d.ts +1 -1
- package/dist/account-add.d.ts.map +1 -1
- package/dist/account-add.js +158 -24
- package/dist/account-add.js.map +1 -1
- package/dist/cli.js +3 -3
- package/dist/cli.js.map +1 -1
- package/dist/gws-command-policy.d.ts +1 -1
- package/dist/gws-command-policy.d.ts.map +1 -1
- package/dist/gws-command-policy.js +74 -8
- package/dist/gws-command-policy.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +45 -6
- package/dist/run.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -21,6 +21,11 @@ Add or reconnect an account:
|
|
|
21
21
|
mgws account add <email-address> --gmail=<none|read|manage> --drive=<none|read|manage> --calendar=<none|read|manage>
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
Account authorization streams the Google OAuth URL to the terminal and waits up
|
|
25
|
+
to five minutes for the browser callback. `Ctrl-C` and termination signals are
|
|
26
|
+
forwarded to the complete authorization process tree. Set
|
|
27
|
+
`MGWS_OAUTH_TIMEOUT_MS` to a positive integer to override the timeout.
|
|
28
|
+
|
|
24
29
|
`mgws` treats the current working directory as the workspace. Shared OAuth configuration belongs at `credentials/google-oauth-client.json`; account state is stored under `accounts/<account-slug>/gws/`.
|
|
25
30
|
|
|
26
31
|
## Development
|
package/dist/account-add.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export interface AddAccountOptions extends AccountAccess {
|
|
|
5
5
|
workspaceRoot?: string;
|
|
6
6
|
}
|
|
7
7
|
export declare function accountSlug(email: string): string;
|
|
8
|
-
export declare function addAccount({ email, gmail, drive, calendar, login, workspaceRoot, }: AddAccountOptions): number
|
|
8
|
+
export declare function addAccount({ email, gmail, drive, calendar, login, workspaceRoot, }: AddAccountOptions): Promise<number>;
|
|
9
9
|
//# sourceMappingURL=account-add.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-add.d.ts","sourceRoot":"","sources":["../src/account-add.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"account-add.d.ts","sourceRoot":"","sources":["../src/account-add.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AA6ND,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAED,wBAAsB,UAAU,CAAC,EAC/B,KAAK,EACL,KAAK,EACL,KAAK,EACL,QAAQ,EACR,KAAK,EACL,aAAa,GACd,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ErC"}
|
package/dist/account-add.js
CHANGED
|
@@ -1,9 +1,133 @@
|
|
|
1
|
-
import { spawnSync } from "node:child_process";
|
|
1
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
3
|
import { chmodSync, copyFileSync, lstatSync, mkdirSync, writeFileSync, } from "node:fs";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
5
|
import { resolveAccountScopes } from "./account-permissions.js";
|
|
6
6
|
import { CliError, EXIT, errorCode } from "./errors.js";
|
|
7
|
+
const DEFAULT_OAUTH_TIMEOUT_MS = 5 * 60 * 1000;
|
|
8
|
+
const OAUTH_KILL_GRACE_MS = 1000;
|
|
9
|
+
const FORWARDED_SIGNALS = ["SIGINT", "SIGTERM"];
|
|
10
|
+
function oauthTimeoutMs() {
|
|
11
|
+
const configured = process.env.MGWS_OAUTH_TIMEOUT_MS;
|
|
12
|
+
if (configured === undefined)
|
|
13
|
+
return DEFAULT_OAUTH_TIMEOUT_MS;
|
|
14
|
+
if (!/^[1-9][0-9]*$/.test(configured)) {
|
|
15
|
+
throw new CliError(EXIT.usage, "MGWS_OAUTH_TIMEOUT_MS must be a positive integer");
|
|
16
|
+
}
|
|
17
|
+
const timeout = Number(configured);
|
|
18
|
+
if (!Number.isSafeInteger(timeout)) {
|
|
19
|
+
throw new CliError(EXIT.usage, "MGWS_OAUTH_TIMEOUT_MS must be a positive integer");
|
|
20
|
+
}
|
|
21
|
+
return timeout;
|
|
22
|
+
}
|
|
23
|
+
function terminateProcessTree(child, signal) {
|
|
24
|
+
if (child.pid === undefined)
|
|
25
|
+
return;
|
|
26
|
+
try {
|
|
27
|
+
if (process.platform === "win32") {
|
|
28
|
+
spawnSync("taskkill", ["/pid", child.pid.toString(), "/t", "/f"], {
|
|
29
|
+
stdio: "ignore",
|
|
30
|
+
windowsHide: true,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
process.kill(-child.pid, signal);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (errorCode(error) !== "ESRCH")
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function runOauthLogin(root, slug, scopes) {
|
|
43
|
+
const timeoutMs = oauthTimeoutMs();
|
|
44
|
+
console.log(`Waiting up to ${timeoutMs}ms for OAuth approval. Press Ctrl-C to cancel.`);
|
|
45
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
46
|
+
const child = spawn(process.execPath, [
|
|
47
|
+
process.argv[1] ?? "mgws",
|
|
48
|
+
"run",
|
|
49
|
+
slug,
|
|
50
|
+
"auth",
|
|
51
|
+
"login",
|
|
52
|
+
"--scopes",
|
|
53
|
+
scopes.join(","),
|
|
54
|
+
], {
|
|
55
|
+
cwd: root,
|
|
56
|
+
detached: process.platform !== "win32",
|
|
57
|
+
stdio: "inherit",
|
|
58
|
+
});
|
|
59
|
+
let completed = false;
|
|
60
|
+
let terminationError;
|
|
61
|
+
let killTimer;
|
|
62
|
+
const timeoutTimer = setTimeout(() => {
|
|
63
|
+
requestTermination("SIGTERM", new CliError(EXIT.unavailable, `OAuth login timed out after ${timeoutMs}ms`));
|
|
64
|
+
}, timeoutMs);
|
|
65
|
+
const signalHandlers = new Map();
|
|
66
|
+
const cleanup = () => {
|
|
67
|
+
clearTimeout(timeoutTimer);
|
|
68
|
+
if (killTimer !== undefined)
|
|
69
|
+
clearTimeout(killTimer);
|
|
70
|
+
for (const [signal, handler] of signalHandlers) {
|
|
71
|
+
process.removeListener(signal, handler);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const reject = (error) => {
|
|
75
|
+
if (completed)
|
|
76
|
+
return;
|
|
77
|
+
completed = true;
|
|
78
|
+
cleanup();
|
|
79
|
+
rejectPromise(error);
|
|
80
|
+
};
|
|
81
|
+
const requestTermination = (signal, error) => {
|
|
82
|
+
if (completed || terminationError !== undefined)
|
|
83
|
+
return;
|
|
84
|
+
terminationError = error;
|
|
85
|
+
try {
|
|
86
|
+
terminateProcessTree(child, signal);
|
|
87
|
+
}
|
|
88
|
+
catch (terminationFailure) {
|
|
89
|
+
reject(new CliError(EXIT.unavailable, `could not terminate OAuth login: ${terminationFailure instanceof Error
|
|
90
|
+
? terminationFailure.message
|
|
91
|
+
: String(terminationFailure)}`));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
killTimer = setTimeout(() => {
|
|
95
|
+
try {
|
|
96
|
+
terminateProcessTree(child, "SIGKILL");
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// The close handler reports the original timeout or cancellation.
|
|
100
|
+
}
|
|
101
|
+
}, OAUTH_KILL_GRACE_MS);
|
|
102
|
+
killTimer.unref();
|
|
103
|
+
};
|
|
104
|
+
for (const signal of FORWARDED_SIGNALS) {
|
|
105
|
+
const handler = () => {
|
|
106
|
+
requestTermination(signal, new CliError(signal === "SIGINT" ? 130 : 143, `OAuth login cancelled by ${signal}`));
|
|
107
|
+
};
|
|
108
|
+
signalHandlers.set(signal, handler);
|
|
109
|
+
process.once(signal, handler);
|
|
110
|
+
}
|
|
111
|
+
child.once("error", (error) => {
|
|
112
|
+
reject(new CliError(EXIT.unavailable, `could not start OAuth login: ${error.message}`));
|
|
113
|
+
});
|
|
114
|
+
child.once("close", (status, signal) => {
|
|
115
|
+
if (completed)
|
|
116
|
+
return;
|
|
117
|
+
if (terminationError !== undefined) {
|
|
118
|
+
reject(terminationError);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
completed = true;
|
|
122
|
+
cleanup();
|
|
123
|
+
if (status !== null) {
|
|
124
|
+
resolvePromise(status);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
rejectPromise(new CliError(1, `OAuth login terminated by signal ${signal ?? "unknown"}`));
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
7
131
|
function isFile(path) {
|
|
8
132
|
try {
|
|
9
133
|
return lstatSync(path).isFile();
|
|
@@ -25,6 +149,28 @@ function pathExists(path) {
|
|
|
25
149
|
throw error;
|
|
26
150
|
}
|
|
27
151
|
}
|
|
152
|
+
function ensurePrivateDirectory(path) {
|
|
153
|
+
try {
|
|
154
|
+
mkdirSync(path, { mode: 0o700 });
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
if (errorCode(error) !== "EEXIST")
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
const directory = lstatSync(path);
|
|
161
|
+
if (!directory.isDirectory() || directory.isSymbolicLink()) {
|
|
162
|
+
throw new CliError(EXIT.noPermission, `unsafe account path: ${path}`);
|
|
163
|
+
}
|
|
164
|
+
chmodSync(path, 0o700);
|
|
165
|
+
}
|
|
166
|
+
function ensureSafeFileIfPresent(path) {
|
|
167
|
+
if (!pathExists(path))
|
|
168
|
+
return;
|
|
169
|
+
const file = lstatSync(path);
|
|
170
|
+
if (!file.isFile() || file.isSymbolicLink()) {
|
|
171
|
+
throw new CliError(EXIT.noPermission, `unsafe account path: ${path}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
28
174
|
export function accountSlug(email) {
|
|
29
175
|
const normalizedEmail = email.toLowerCase();
|
|
30
176
|
const readableSlug = normalizedEmail
|
|
@@ -39,7 +185,7 @@ export function accountSlug(email) {
|
|
|
39
185
|
.slice(0, 16);
|
|
40
186
|
return `${readableSlug}-${fingerprint}`;
|
|
41
187
|
}
|
|
42
|
-
export function addAccount({ email, gmail, drive, calendar, login, workspaceRoot, }) {
|
|
188
|
+
export async function addAccount({ email, gmail, drive, calendar, login, workspaceRoot, }) {
|
|
43
189
|
if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) {
|
|
44
190
|
throw new CliError(EXIT.usage, `invalid email address: ${email}`);
|
|
45
191
|
}
|
|
@@ -48,7 +194,8 @@ export function addAccount({ email, gmail, drive, calendar, login, workspaceRoot
|
|
|
48
194
|
const root = resolve(workspaceRoot ?? process.cwd());
|
|
49
195
|
const credentialsDir = join(root, "credentials");
|
|
50
196
|
const oauthClient = join(credentialsDir, "google-oauth-client.json");
|
|
51
|
-
const
|
|
197
|
+
const accountsDir = join(root, "accounts");
|
|
198
|
+
const accountDir = join(accountsDir, slug);
|
|
52
199
|
const configDir = join(accountDir, "gws");
|
|
53
200
|
const accountOauthClient = join(configDir, "client_secret.json");
|
|
54
201
|
const accessProfile = join(configDir, "access.json");
|
|
@@ -62,9 +209,9 @@ export function addAccount({ email, gmail, drive, calendar, login, workspaceRoot
|
|
|
62
209
|
}
|
|
63
210
|
chmodSync(credentialsDir, 0o700);
|
|
64
211
|
chmodSync(oauthClient, 0o600);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
212
|
+
ensurePrivateDirectory(accountsDir);
|
|
213
|
+
ensurePrivateDirectory(accountDir);
|
|
214
|
+
ensurePrivateDirectory(configDir);
|
|
68
215
|
if (pathExists(accountOauthClient)) {
|
|
69
216
|
const accountOauthClientFile = lstatSync(accountOauthClient);
|
|
70
217
|
if (!accountOauthClientFile.isFile() ||
|
|
@@ -74,6 +221,7 @@ export function addAccount({ email, gmail, drive, calendar, login, workspaceRoot
|
|
|
74
221
|
}
|
|
75
222
|
copyFileSync(oauthClient, accountOauthClient);
|
|
76
223
|
chmodSync(accountOauthClient, 0o600);
|
|
224
|
+
ensureSafeFileIfPresent(accessProfile);
|
|
77
225
|
const saveAccessProfile = () => {
|
|
78
226
|
writeFileSync(accessProfile, `${JSON.stringify({ email, gmail, drive, calendar }, null, 2)}\n`, {
|
|
79
227
|
mode: 0o600,
|
|
@@ -89,23 +237,9 @@ export function addAccount({ email, gmail, drive, calendar, login, workspaceRoot
|
|
|
89
237
|
console.log("Skipped OAuth login (--no-login).");
|
|
90
238
|
return 0;
|
|
91
239
|
}
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
"auth",
|
|
97
|
-
"login",
|
|
98
|
-
"--scopes",
|
|
99
|
-
scopes.join(","),
|
|
100
|
-
], { cwd: root, stdio: "inherit" });
|
|
101
|
-
if (result.error) {
|
|
102
|
-
throw new CliError(EXIT.unavailable, `could not start OAuth login: ${result.error.message}`);
|
|
103
|
-
}
|
|
104
|
-
if (result.status !== null) {
|
|
105
|
-
if (result.status === 0)
|
|
106
|
-
saveAccessProfile();
|
|
107
|
-
return result.status;
|
|
108
|
-
}
|
|
109
|
-
throw new CliError(1, `OAuth login terminated by signal ${result.signal ?? "unknown"}`);
|
|
240
|
+
const status = await runOauthLogin(root, slug, scopes);
|
|
241
|
+
if (status === 0)
|
|
242
|
+
saveAccessProfile();
|
|
243
|
+
return status;
|
|
110
244
|
}
|
|
111
245
|
//# sourceMappingURL=account-add.js.map
|
package/dist/account-add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-add.js","sourceRoot":"","sources":["../src/account-add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"account-add.js","sourceRoot":"","sources":["../src/account-add.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -49,13 +49,13 @@ account
|
|
|
49
49
|
.argParser(accessLevel)
|
|
50
50
|
.makeOptionMandatory())
|
|
51
51
|
.option("--no-login", "create account state without starting OAuth")
|
|
52
|
-
.action((email, options) => {
|
|
52
|
+
.action(async (email, options) => {
|
|
53
53
|
if (!isAccessLevel(options.gmail) ||
|
|
54
54
|
!isAccessLevel(options.drive) ||
|
|
55
55
|
!isAccessLevel(options.calendar)) {
|
|
56
56
|
throw new CliError(EXIT.usage, "invalid permission level");
|
|
57
57
|
}
|
|
58
|
-
process.exitCode = addAccount({
|
|
58
|
+
process.exitCode = await addAccount({
|
|
59
59
|
email,
|
|
60
60
|
gmail: options.gmail,
|
|
61
61
|
drive: options.drive,
|
|
@@ -81,7 +81,7 @@ try {
|
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
|
-
program.
|
|
84
|
+
await program.parseAsync();
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
catch (error) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOlC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAChC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAC/C,CAAC;AAErB,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CACtB,IAAI,CAAC,KAAK,EACV,oBAAoB,EACpB,oBAAoB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,eAAe,CAAC,WAAW,CAAC;KACxC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC;KAChC,kBAAkB,EAAE;KACpB,YAAY,EAAE,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,oDAAoD,CAAC;KACjE,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;KACrC,QAAQ,CAAC,oBAAoB,EAAE,4BAA4B,CAAC;KAC5D,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,kBAAkB,EAAE;KACpB,MAAM,CACL,CACE,OAAe,EACf,YAAsB,EACtB,OAA8B,EAC9B,EAAE;IACF,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;QACxB,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI;QACnC,YAAY;KACb,CAAC,CAAC;AACL,CAAC,CACF,CAAC;AAEJ,MAAM,OAAO,GAAG,OAAO;KACpB,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,iCAAiC,CAAC,CAAC;AAElD,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,0BAA0B,CAAC;KACvC,QAAQ,CAAC,SAAS,EAAE,8BAA8B,CAAC;KACnD,SAAS,CACR,IAAI,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;KACpD,SAAS,CAAC,WAAW,CAAC;KACtB,mBAAmB,EAAE,CACzB;KACA,SAAS,CACR,IAAI,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;KACpD,SAAS,CAAC,WAAW,CAAC;KACtB,mBAAmB,EAAE,CACzB;KACA,SAAS,CACR,IAAI,MAAM,CAAC,oBAAoB,EAAE,2BAA2B,CAAC;KAC1D,SAAS,CAAC,WAAW,CAAC;KACtB,mBAAmB,EAAE,CACzB;KACA,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;KACnE,MAAM,CACL,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,5 @@ export type CommandPolicy = {
|
|
|
7
7
|
action: "prohibit";
|
|
8
8
|
reason: string;
|
|
9
9
|
};
|
|
10
|
-
export declare function classifyGwsCommand(args: readonly string[]): CommandPolicy;
|
|
10
|
+
export declare function classifyGwsCommand(args: readonly string[], selfEmail?: string): CommandPolicy;
|
|
11
11
|
//# sourceMappingURL=gws-command-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gws-command-policy.d.ts","sourceRoot":"","sources":["../src/gws-command-policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gws-command-policy.d.ts","sourceRoot":"","sources":["../src/gws-command-policy.ts"],"names":[],"mappings":"AAwDA,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAwF3C,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAmFf"}
|
|
@@ -12,6 +12,7 @@ const GMAIL_PROHIBITED_METHODS = new Set([
|
|
|
12
12
|
]);
|
|
13
13
|
const GMAIL_CONFIRM_METHODS = new Set(["drafts:send", "messages:send"]);
|
|
14
14
|
const DRIVE_PROHIBITED_METHODS = new Set([
|
|
15
|
+
"drives:delete",
|
|
15
16
|
"files:delete",
|
|
16
17
|
"files:emptyTrash",
|
|
17
18
|
"revisions:delete",
|
|
@@ -30,16 +31,19 @@ const CALENDAR_CONFIRM_METHODS = new Set([
|
|
|
30
31
|
"acl:update",
|
|
31
32
|
"acl:patch",
|
|
32
33
|
"acl:delete",
|
|
33
|
-
"events:insert",
|
|
34
|
-
"events:import",
|
|
35
|
-
"events:quickAdd",
|
|
36
34
|
"events:update",
|
|
37
35
|
"events:patch",
|
|
38
36
|
"events:move",
|
|
39
37
|
"events:delete",
|
|
40
38
|
]);
|
|
39
|
+
const CALENDAR_CREATE_METHODS = new Set([
|
|
40
|
+
"events:insert",
|
|
41
|
+
"events:import",
|
|
42
|
+
"events:quickAdd",
|
|
43
|
+
]);
|
|
41
44
|
const GWS_VALUE_FLAGS = new Set([
|
|
42
45
|
"--api-version",
|
|
46
|
+
"--attendees",
|
|
43
47
|
"--format",
|
|
44
48
|
"--json",
|
|
45
49
|
"--output",
|
|
@@ -68,7 +72,59 @@ function positionalArguments(args) {
|
|
|
68
72
|
}
|
|
69
73
|
return positional;
|
|
70
74
|
}
|
|
71
|
-
|
|
75
|
+
function flagValues(args, flag) {
|
|
76
|
+
const values = [];
|
|
77
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
78
|
+
const argument = args[index];
|
|
79
|
+
if (argument === flag) {
|
|
80
|
+
const value = args[index + 1];
|
|
81
|
+
if (value !== undefined) {
|
|
82
|
+
values.push(value);
|
|
83
|
+
index += 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else if (argument?.startsWith(`${flag}=`)) {
|
|
87
|
+
values.push(argument.slice(flag.length + 1));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return values;
|
|
91
|
+
}
|
|
92
|
+
function hasExternalAttendees(args, selfEmail) {
|
|
93
|
+
const normalizedSelf = selfEmail?.trim().toLowerCase();
|
|
94
|
+
const isExternal = (email) => email.trim().toLowerCase() !== normalizedSelf;
|
|
95
|
+
for (const value of flagValues(args, "--attendees")) {
|
|
96
|
+
for (const email of value.split(",").filter((entry) => entry.length > 0)) {
|
|
97
|
+
if (isExternal(email))
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
for (const value of flagValues(args, "--json")) {
|
|
102
|
+
let body;
|
|
103
|
+
try {
|
|
104
|
+
body = JSON.parse(value);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
if (typeof body !== "object" || body === null || !("attendees" in body)) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const attendees = body.attendees;
|
|
113
|
+
if (!Array.isArray(attendees))
|
|
114
|
+
return true;
|
|
115
|
+
for (const attendee of attendees) {
|
|
116
|
+
if (typeof attendee !== "object" ||
|
|
117
|
+
attendee === null ||
|
|
118
|
+
!("email" in attendee) ||
|
|
119
|
+
typeof attendee.email !== "string" ||
|
|
120
|
+
isExternal(attendee.email)) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
export function classifyGwsCommand(args, selfEmail) {
|
|
72
128
|
const [serviceWithVersion, resource, collection, method] = positionalArguments(args);
|
|
73
129
|
const service = serviceWithVersion?.split(":", 1)[0];
|
|
74
130
|
if (service === "gmail") {
|
|
@@ -111,10 +167,12 @@ export function classifyGwsCommand(args) {
|
|
|
111
167
|
}
|
|
112
168
|
if (service === "calendar") {
|
|
113
169
|
if (resource === "+insert") {
|
|
114
|
-
return
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
170
|
+
return hasExternalAttendees(args, selfEmail)
|
|
171
|
+
? {
|
|
172
|
+
action: "confirm",
|
|
173
|
+
reason: "Inviting other people to Calendar events requires explicit confirmation",
|
|
174
|
+
}
|
|
175
|
+
: { action: "allow" };
|
|
118
176
|
}
|
|
119
177
|
const operation = `${resource ?? ""}:${collection ?? ""}`;
|
|
120
178
|
if (CALENDAR_PROHIBITED_METHODS.has(operation)) {
|
|
@@ -123,6 +181,14 @@ export function classifyGwsCommand(args) {
|
|
|
123
181
|
reason: "Permanently clearing or deleting calendars is prohibited",
|
|
124
182
|
};
|
|
125
183
|
}
|
|
184
|
+
if (CALENDAR_CREATE_METHODS.has(operation)) {
|
|
185
|
+
return hasExternalAttendees(args, selfEmail)
|
|
186
|
+
? {
|
|
187
|
+
action: "confirm",
|
|
188
|
+
reason: "Inviting other people to Calendar events requires explicit confirmation",
|
|
189
|
+
}
|
|
190
|
+
: { action: "allow" };
|
|
191
|
+
}
|
|
126
192
|
if (CALENDAR_CONFIRM_METHODS.has(operation)) {
|
|
127
193
|
return {
|
|
128
194
|
action: "confirm",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gws-command-policy.js","sourceRoot":"","sources":["../src/gws-command-policy.ts"],"names":[],"mappings":"AAAA,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,UAAU;CACX,CAAC,CAAC;AACH,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,iBAAiB;IACjB,sBAAsB;IACtB,gBAAgB;IAChB,eAAe;CAChB,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AACxE,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,cAAc;IACd,kBAAkB;IAClB,kBAAkB;CACnB,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;CACrB,CAAC,CAAC;AACH,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,iBAAiB;IACjB,kBAAkB;CACnB,CAAC,CAAC;AACH,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,eAAe;IACf,
|
|
1
|
+
{"version":3,"file":"gws-command-policy.js","sourceRoot":"","sources":["../src/gws-command-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAmGD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAiCV;AAED,wBAAgB,MAAM,CAAC,EACrB,OAAO,EACP,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,UAAU,GAAG,MAAM,CAyFrB"}
|
package/dist/run.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
-
import { accessSync, chmodSync, constants, lstatSync, mkdirSync, statSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { accessSync, chmodSync, constants, lstatSync, mkdirSync, readFileSync, statSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { createRequire } from "node:module";
|
|
4
4
|
import { isAbsolute, join, resolve } from "node:path";
|
|
5
|
+
import { accountSlug } from "./account-add.js";
|
|
5
6
|
import { CliError, EXIT, errorCode } from "./errors.js";
|
|
6
7
|
import { classifyGwsCommand } from "./gws-command-policy.js";
|
|
7
8
|
const require = createRequire(import.meta.url);
|
|
8
9
|
const FILE_PATH_FLAGS = new Set(["--output", "--upload"]);
|
|
9
|
-
function
|
|
10
|
+
function isSafeAccountDirectory(path) {
|
|
10
11
|
try {
|
|
11
|
-
|
|
12
|
+
const directory = lstatSync(path);
|
|
13
|
+
if (!directory.isDirectory() || directory.isSymbolicLink()) {
|
|
14
|
+
throw new CliError(EXIT.noPermission, `unsafe account path: ${path}`);
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
12
17
|
}
|
|
13
18
|
catch (error) {
|
|
14
19
|
if (errorCode(error) === "ENOENT")
|
|
@@ -35,6 +40,36 @@ function isFile(path) {
|
|
|
35
40
|
throw error;
|
|
36
41
|
}
|
|
37
42
|
}
|
|
43
|
+
function readAccountEmail(configDir, account) {
|
|
44
|
+
const accessProfile = join(configDir, "access.json");
|
|
45
|
+
let profileFile;
|
|
46
|
+
try {
|
|
47
|
+
profileFile = lstatSync(accessProfile);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
if (errorCode(error) === "ENOENT")
|
|
51
|
+
return undefined;
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
if (!profileFile.isFile() || profileFile.isSymbolicLink()) {
|
|
55
|
+
throw new CliError(EXIT.noPermission, `unsafe account path: ${accessProfile}`);
|
|
56
|
+
}
|
|
57
|
+
let profile;
|
|
58
|
+
try {
|
|
59
|
+
profile = JSON.parse(readFileSync(accessProfile, "utf8"));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
if (typeof profile !== "object" ||
|
|
65
|
+
profile === null ||
|
|
66
|
+
!("email" in profile) ||
|
|
67
|
+
typeof profile.email !== "string" ||
|
|
68
|
+
accountSlug(profile.email) !== account) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
return profile.email;
|
|
72
|
+
}
|
|
38
73
|
function ensureRuntimeDirectory(path) {
|
|
39
74
|
mkdirSync(path, { recursive: true, mode: 0o700 });
|
|
40
75
|
const directory = lstatSync(path);
|
|
@@ -92,13 +127,17 @@ export function runGws({ account, confirmed, gwsArguments, workspaceRoot, }) {
|
|
|
92
127
|
throw new CliError(EXIT.usage, "missing gws arguments");
|
|
93
128
|
}
|
|
94
129
|
const root = resolve(workspaceRoot ?? process.cwd());
|
|
95
|
-
const
|
|
130
|
+
const accountsDir = join(root, "accounts");
|
|
131
|
+
const accountDir = join(accountsDir, account);
|
|
132
|
+
const configDir = join(accountDir, "gws");
|
|
96
133
|
const runtimeDir = join(configDir, ".runtime");
|
|
97
134
|
const gwsOverride = process.env.GWS_EXECUTABLE;
|
|
98
135
|
const gwsEntrypoint = require.resolve("@googleworkspace/cli/run.js");
|
|
99
136
|
const gwsExecutable = gwsOverride ?? process.execPath;
|
|
100
137
|
const gwsPrefixArgs = gwsOverride === undefined ? [gwsEntrypoint] : [];
|
|
101
|
-
if (!
|
|
138
|
+
if (!isSafeAccountDirectory(accountsDir) ||
|
|
139
|
+
!isSafeAccountDirectory(accountDir) ||
|
|
140
|
+
!isSafeAccountDirectory(configDir)) {
|
|
102
141
|
throw new CliError(EXIT.noInput, `unknown account: ${account}\nask your agent to use $add-account to connect it`);
|
|
103
142
|
}
|
|
104
143
|
if (gwsOverride !== undefined
|
|
@@ -106,7 +145,7 @@ export function runGws({ account, confirmed, gwsArguments, workspaceRoot, }) {
|
|
|
106
145
|
: !isFile(gwsEntrypoint)) {
|
|
107
146
|
throw new CliError(EXIT.unavailable, "gws is not installed; run: npm install");
|
|
108
147
|
}
|
|
109
|
-
const policy = classifyGwsCommand(gwsArguments);
|
|
148
|
+
const policy = classifyGwsCommand(gwsArguments, readAccountEmail(configDir, account));
|
|
110
149
|
if (policy.action === "prohibit")
|
|
111
150
|
throw new CliError(EXIT.noPermission, policy.reason);
|
|
112
151
|
if (policy.action === "confirm" && !confirmed) {
|
package/dist/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AAS1D,SAAS,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|