gws-axi 0.1.0

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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/dist/bin/gws-axi.d.ts +2 -0
  4. package/dist/bin/gws-axi.js +4 -0
  5. package/dist/bin/gws-axi.js.map +1 -0
  6. package/dist/src/auth/gcloud.d.ts +21 -0
  7. package/dist/src/auth/gcloud.js +134 -0
  8. package/dist/src/auth/gcloud.js.map +1 -0
  9. package/dist/src/auth/loopback.d.ts +50 -0
  10. package/dist/src/auth/loopback.js +420 -0
  11. package/dist/src/auth/loopback.js.map +1 -0
  12. package/dist/src/auth/pending.d.ts +15 -0
  13. package/dist/src/auth/pending.js +35 -0
  14. package/dist/src/auth/pending.js.map +1 -0
  15. package/dist/src/auth/scopes.d.ts +13 -0
  16. package/dist/src/auth/scopes.js +29 -0
  17. package/dist/src/auth/scopes.js.map +1 -0
  18. package/dist/src/auth/setup-html.d.ts +13 -0
  19. package/dist/src/auth/setup-html.js +245 -0
  20. package/dist/src/auth/setup-html.js.map +1 -0
  21. package/dist/src/auth/state.d.ts +4 -0
  22. package/dist/src/auth/state.js +41 -0
  23. package/dist/src/auth/state.js.map +1 -0
  24. package/dist/src/auth/steps.d.ts +30 -0
  25. package/dist/src/auth/steps.js +306 -0
  26. package/dist/src/auth/steps.js.map +1 -0
  27. package/dist/src/cli.d.ts +2 -0
  28. package/dist/src/cli.js +72 -0
  29. package/dist/src/cli.js.map +1 -0
  30. package/dist/src/commands/auth.d.ts +2 -0
  31. package/dist/src/commands/auth.js +453 -0
  32. package/dist/src/commands/auth.js.map +1 -0
  33. package/dist/src/commands/calendar/calendars.d.ts +2 -0
  34. package/dist/src/commands/calendar/calendars.js +98 -0
  35. package/dist/src/commands/calendar/calendars.js.map +1 -0
  36. package/dist/src/commands/calendar/events.d.ts +2 -0
  37. package/dist/src/commands/calendar/events.js +261 -0
  38. package/dist/src/commands/calendar/events.js.map +1 -0
  39. package/dist/src/commands/calendar/get.d.ts +2 -0
  40. package/dist/src/commands/calendar/get.js +176 -0
  41. package/dist/src/commands/calendar/get.js.map +1 -0
  42. package/dist/src/commands/calendar.d.ts +2 -0
  43. package/dist/src/commands/calendar.js +76 -0
  44. package/dist/src/commands/calendar.js.map +1 -0
  45. package/dist/src/commands/docs.d.ts +2 -0
  46. package/dist/src/commands/docs.js +19 -0
  47. package/dist/src/commands/docs.js.map +1 -0
  48. package/dist/src/commands/doctor.d.ts +2 -0
  49. package/dist/src/commands/doctor.js +213 -0
  50. package/dist/src/commands/doctor.js.map +1 -0
  51. package/dist/src/commands/drive.d.ts +2 -0
  52. package/dist/src/commands/drive.js +17 -0
  53. package/dist/src/commands/drive.js.map +1 -0
  54. package/dist/src/commands/gmail.d.ts +2 -0
  55. package/dist/src/commands/gmail.js +20 -0
  56. package/dist/src/commands/gmail.js.map +1 -0
  57. package/dist/src/commands/home.d.ts +1 -0
  58. package/dist/src/commands/home.js +42 -0
  59. package/dist/src/commands/home.js.map +1 -0
  60. package/dist/src/commands/service-stub.d.ts +8 -0
  61. package/dist/src/commands/service-stub.js +67 -0
  62. package/dist/src/commands/service-stub.js.map +1 -0
  63. package/dist/src/commands/slides.d.ts +2 -0
  64. package/dist/src/commands/slides.js +11 -0
  65. package/dist/src/commands/slides.js.map +1 -0
  66. package/dist/src/config.d.ts +46 -0
  67. package/dist/src/config.js +155 -0
  68. package/dist/src/config.js.map +1 -0
  69. package/dist/src/google/account.d.ts +12 -0
  70. package/dist/src/google/account.js +65 -0
  71. package/dist/src/google/account.js.map +1 -0
  72. package/dist/src/google/client.d.ts +29 -0
  73. package/dist/src/google/client.js +106 -0
  74. package/dist/src/google/client.js.map +1 -0
  75. package/dist/src/google/probe.d.ts +15 -0
  76. package/dist/src/google/probe.js +200 -0
  77. package/dist/src/google/probe.js.map +1 -0
  78. package/dist/src/google/tokens.d.ts +22 -0
  79. package/dist/src/google/tokens.js +91 -0
  80. package/dist/src/google/tokens.js.map +1 -0
  81. package/dist/src/output/index.d.ts +2 -0
  82. package/dist/src/output/index.js +3 -0
  83. package/dist/src/output/index.js.map +1 -0
  84. package/dist/src/output/render.d.ts +40 -0
  85. package/dist/src/output/render.js +65 -0
  86. package/dist/src/output/render.js.map +1 -0
  87. package/dist/src/output/schema.d.ts +32 -0
  88. package/dist/src/output/schema.js +69 -0
  89. package/dist/src/output/schema.js.map +1 -0
  90. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/commands/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const DOCS_HELP: string;
2
+ export declare const docsCommand: (args: string[]) => Promise<Record<string, unknown>>;
@@ -0,0 +1,19 @@
1
+ import { buildServiceStub } from "./service-stub.js";
2
+ const stub = buildServiceStub("docs", [
3
+ { name: "read", mutation: false },
4
+ { name: "find", mutation: false },
5
+ { name: "comments", mutation: false },
6
+ { name: "append", mutation: true },
7
+ { name: "insert-text", mutation: true },
8
+ { name: "delete-range", mutation: true },
9
+ { name: "style-text", mutation: true },
10
+ { name: "style-paragraph", mutation: true },
11
+ { name: "insert-table", mutation: true },
12
+ { name: "edit-cell", mutation: true },
13
+ { name: "comment-add", mutation: true },
14
+ { name: "comment-reply", mutation: true },
15
+ { name: "comment-resolve", mutation: true },
16
+ ]);
17
+ export const DOCS_HELP = stub.help;
18
+ export const docsCommand = stub.command;
19
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/commands/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE;IACpC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;IACtC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE;IAC3C,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const DOCTOR_HELP: string;
2
+ export declare function doctorCommand(args: string[]): Promise<Record<string, unknown>>;
@@ -0,0 +1,213 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { existsSync, accessSync, constants } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { configDir, getDefaultAccount, listAccounts, readSetupState, setupProgress, SETUP_STEP_ORDER, } from "../config.js";
5
+ import { probeAccount } from "../google/probe.js";
6
+ import { SERVICES } from "../auth/scopes.js";
7
+ function collapseHomeDirectory(path) {
8
+ const home = homedir();
9
+ return path.startsWith(home) ? `~${path.slice(home.length)}` : path;
10
+ }
11
+ export const DOCTOR_HELP = `usage: gws-axi doctor [--check <tier|tier.service>] [--summary]
12
+ flags[3]:
13
+ --check <tier> Run only one tier (prerequisites|setup|runtime)
14
+ --check runtime.<service> Run probes for one service (${SERVICES.join(" | ")})
15
+ --summary One-line summary output (used by SessionStart hook)
16
+ tiers:
17
+ prerequisites gcloud presence, node version, config dir perms
18
+ setup progress of the 7-step BYO onboarding
19
+ runtime live per-account × per-service API probes (token, scope, reachability)
20
+ exit codes:
21
+ 0 all checks passed (or warnings only)
22
+ 1 at least one failing check
23
+ examples:
24
+ gws-axi doctor
25
+ gws-axi doctor --summary
26
+ gws-axi doctor --check prerequisites
27
+ gws-axi doctor --check runtime
28
+ gws-axi doctor --check runtime.gmail
29
+ `;
30
+ function checkPrerequisites() {
31
+ const rows = [];
32
+ try {
33
+ const version = execFileSync("gcloud", ["--version"], {
34
+ encoding: "utf-8",
35
+ stdio: ["ignore", "pipe", "ignore"],
36
+ })
37
+ .split("\n")[0]
38
+ .trim();
39
+ rows.push({ check: "gcloud CLI", status: "ok", detail: version });
40
+ }
41
+ catch {
42
+ rows.push({
43
+ check: "gcloud CLI",
44
+ status: "warn",
45
+ detail: "not installed (setup will use deep-links instead)",
46
+ });
47
+ }
48
+ const nodeVersion = process.versions.node;
49
+ const major = parseInt(nodeVersion.split(".")[0] ?? "0", 10);
50
+ rows.push({
51
+ check: "node runtime",
52
+ status: major >= 20 ? "ok" : "fail",
53
+ detail: `v${nodeVersion}${major >= 20 ? "" : " (requires >=20)"}`,
54
+ });
55
+ const dir = configDir();
56
+ if (!existsSync(dir)) {
57
+ rows.push({
58
+ check: "config dir",
59
+ status: "warn",
60
+ detail: `${collapseHomeDirectory(dir)} does not exist yet (created on first setup)`,
61
+ });
62
+ }
63
+ else {
64
+ try {
65
+ accessSync(dir, constants.R_OK | constants.W_OK);
66
+ rows.push({
67
+ check: "config dir",
68
+ status: "ok",
69
+ detail: `${collapseHomeDirectory(dir)} (rw)`,
70
+ });
71
+ }
72
+ catch {
73
+ rows.push({
74
+ check: "config dir",
75
+ status: "fail",
76
+ detail: `${collapseHomeDirectory(dir)} not writable`,
77
+ });
78
+ }
79
+ }
80
+ return rows;
81
+ }
82
+ function checkSetup() {
83
+ const state = readSetupState();
84
+ return SETUP_STEP_ORDER.map((key) => {
85
+ const step = state.steps[key];
86
+ if (step.done) {
87
+ return {
88
+ check: key,
89
+ status: "ok",
90
+ detail: typeof step.project_id === "string"
91
+ ? step.project_id
92
+ : typeof step.email === "string"
93
+ ? step.email
94
+ : "",
95
+ };
96
+ }
97
+ return { check: key, status: "fail", detail: "not done" };
98
+ });
99
+ }
100
+ async function checkRuntime(serviceFilter) {
101
+ const accounts = listAccounts();
102
+ if (accounts.length === 0) {
103
+ return [
104
+ {
105
+ account: "(none)",
106
+ service: "—",
107
+ status: "fail",
108
+ detail: "no accounts authenticated — run `gws-axi auth login`",
109
+ },
110
+ ];
111
+ }
112
+ // Probe all accounts in parallel. Per-account, services that can run in
113
+ // parallel (gmail/calendar/drive) already do inside probeAccount.
114
+ const perAccount = await Promise.all(accounts.map(async (email) => {
115
+ const results = await probeAccount(email);
116
+ return { email, results };
117
+ }));
118
+ const rows = [];
119
+ for (const { email, results } of perAccount) {
120
+ for (const result of results) {
121
+ if (serviceFilter && result.service !== serviceFilter)
122
+ continue;
123
+ rows.push({
124
+ account: email,
125
+ service: result.service,
126
+ status: result.status,
127
+ detail: result.detail,
128
+ });
129
+ }
130
+ }
131
+ return rows;
132
+ }
133
+ export async function doctorCommand(args) {
134
+ const summaryMode = args.includes("--summary");
135
+ const checkIdx = args.indexOf("--check");
136
+ const checkTarget = checkIdx >= 0 ? args[checkIdx + 1] : undefined;
137
+ const [tier, name] = checkTarget ? checkTarget.split(".") : [undefined, undefined];
138
+ if (tier && !["prerequisites", "setup", "runtime"].includes(tier)) {
139
+ return {
140
+ error: `Unknown tier: ${tier}`,
141
+ code: "VALIDATION_ERROR",
142
+ help: ["Valid tiers: prerequisites, setup, runtime"],
143
+ };
144
+ }
145
+ const prereqs = !tier || tier === "prerequisites" ? checkPrerequisites() : [];
146
+ const setupRows = !tier || tier === "setup" ? checkSetup() : [];
147
+ const runtimeRows = !tier || tier === "runtime"
148
+ ? await checkRuntime(tier === "runtime" ? name : undefined)
149
+ : [];
150
+ const failing = prereqs.filter((r) => r.status === "fail").length +
151
+ setupRows.filter((r) => r.status === "fail").length +
152
+ runtimeRows.filter((r) => r.status === "fail").length;
153
+ const warning = prereqs.filter((r) => r.status === "warn").length +
154
+ setupRows.filter((r) => r.status === "warn").length +
155
+ runtimeRows.filter((r) => r.status === "warn").length;
156
+ if (summaryMode) {
157
+ const state = readSetupState();
158
+ const { done, total } = setupProgress(state);
159
+ if (done < total) {
160
+ return {
161
+ status: `setup ${done}/${total} — run 'gws-axi auth setup' to continue`,
162
+ };
163
+ }
164
+ if (failing > 0) {
165
+ return {
166
+ status: `${failing} failing check${failing === 1 ? "" : "s"} — run 'gws-axi doctor'`,
167
+ };
168
+ }
169
+ return { status: "ok" };
170
+ }
171
+ const accounts = listAccounts();
172
+ const defaultAccount = getDefaultAccount();
173
+ const output = {};
174
+ if (accounts.length > 0) {
175
+ output.accounts = accounts;
176
+ if (defaultAccount)
177
+ output.default_account = defaultAccount;
178
+ if (accounts.length > 1) {
179
+ output.write_protection = "enabled — writes require --account";
180
+ }
181
+ }
182
+ if (prereqs.length > 0)
183
+ output.prerequisites = prereqs;
184
+ if (setupRows.length > 0)
185
+ output.setup = setupRows;
186
+ if (runtimeRows.length > 0)
187
+ output.runtime = runtimeRows;
188
+ output.summary = `${failing} failing, ${warning} warning`;
189
+ const help = [];
190
+ const setupFailing = setupRows.some((r) => r.status === "fail");
191
+ const runtimeFailing = runtimeRows.some((r) => r.status === "fail");
192
+ const tokenFailures = runtimeRows.filter((r) => r.status === "fail" && /401|revoked|refresh/i.test(r.detail));
193
+ const scopeFailures = runtimeRows.filter((r) => r.status === "fail" && /scope/i.test(r.detail));
194
+ if (setupFailing) {
195
+ help.push("Run `gws-axi auth setup` to advance incomplete setup steps");
196
+ }
197
+ if (tokenFailures.length > 0) {
198
+ const accts = [...new Set(tokenFailures.map((r) => r.account))];
199
+ help.push(`Token issues detected on ${accts.join(", ")} — run \`gws-axi auth login --account <email>\` + \`auth login --wait\` to re-auth`);
200
+ }
201
+ if (scopeFailures.length > 0) {
202
+ const accts = [...new Set(scopeFailures.map((r) => r.account))];
203
+ help.push(`Scope gaps on ${accts.join(", ")} — re-auth to re-consent to the full scope set`);
204
+ }
205
+ if (failing === 0 && warning === 0) {
206
+ help.push("All checks passed — you can start using service commands");
207
+ }
208
+ help.push("Run `gws-axi doctor --help` for check targeting");
209
+ output.help = help;
210
+ process.exitCode = failing > 0 ? 1 : 0;
211
+ return output;
212
+ }
213
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const DRIVE_HELP: string;
2
+ export declare const driveCommand: (args: string[]) => Promise<Record<string, unknown>>;
@@ -0,0 +1,17 @@
1
+ import { buildServiceStub } from "./service-stub.js";
2
+ const stub = buildServiceStub("drive", [
3
+ { name: "search", mutation: false },
4
+ { name: "get", mutation: false },
5
+ { name: "ls", mutation: false },
6
+ { name: "permissions", mutation: false },
7
+ { name: "download", mutation: false },
8
+ { name: "create", mutation: true },
9
+ { name: "copy", mutation: true },
10
+ { name: "move", mutation: true },
11
+ { name: "rename", mutation: true },
12
+ { name: "delete", mutation: true },
13
+ { name: "mkdir", mutation: true },
14
+ ]);
15
+ export const DRIVE_HELP = stub.help;
16
+ export const driveCommand = stub.command;
17
+ //# sourceMappingURL=drive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive.js","sourceRoot":"","sources":["../../../src/commands/drive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACnC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;IAChC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC/B,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const GMAIL_HELP: string;
2
+ export declare const gmailCommand: (args: string[]) => Promise<Record<string, unknown>>;
@@ -0,0 +1,20 @@
1
+ import { buildServiceStub } from "./service-stub.js";
2
+ const stub = buildServiceStub("gmail", [
3
+ { name: "search", mutation: false },
4
+ { name: "read", mutation: false },
5
+ { name: "labels", mutation: false },
6
+ { name: "filter-list", mutation: false },
7
+ { name: "download", mutation: false },
8
+ { name: "send", mutation: true },
9
+ { name: "draft", mutation: true },
10
+ { name: "modify", mutation: true },
11
+ { name: "batch-modify", mutation: true },
12
+ { name: "label-create", mutation: true },
13
+ { name: "label-update", mutation: true },
14
+ { name: "label-delete", mutation: true },
15
+ { name: "filter-create", mutation: true },
16
+ { name: "filter-delete", mutation: true },
17
+ ]);
18
+ export const GMAIL_HELP = stub.help;
19
+ export const gmailCommand = stub.command;
20
+ //# sourceMappingURL=gmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmail.js","sourceRoot":"","sources":["../../../src/commands/gmail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,EAAE;IACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACnC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;IACnC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IACxC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE;IACrC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IAChC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACxC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function homeCommand(): Promise<Record<string, unknown>>;
@@ -0,0 +1,42 @@
1
+ import { getDefaultAccount, listAccounts, readSetupState, setupProgress, } from "../config.js";
2
+ export async function homeCommand() {
3
+ const state = readSetupState();
4
+ const { done, total, nextStep } = setupProgress(state);
5
+ const accounts = listAccounts();
6
+ const defaultAccount = getDefaultAccount();
7
+ const output = {};
8
+ if (accounts.length > 0) {
9
+ output.account = defaultAccount ?? accounts[0];
10
+ if (accounts.length > 1) {
11
+ output.other_accounts = accounts.filter((a) => a !== (defaultAccount ?? accounts[0]));
12
+ output.write_protection = "enabled (2+ accounts — writes require --account)";
13
+ }
14
+ }
15
+ const setup = {
16
+ progress: `${done} of ${total} steps complete`,
17
+ };
18
+ if (nextStep)
19
+ setup.next_step = nextStep;
20
+ output.setup = setup;
21
+ const help = [];
22
+ if (done < total) {
23
+ help.push("Run `gws-axi auth setup` to continue setup");
24
+ }
25
+ else if (accounts.length === 0) {
26
+ help.push("Run `gws-axi auth login` to authenticate your first account");
27
+ }
28
+ else {
29
+ help.push("Run `gws-axi doctor` to check auth + runtime health");
30
+ help.push("Run `gws-axi calendar events` to list upcoming events");
31
+ if (accounts.length === 1) {
32
+ help.push("Run `gws-axi auth login --account <email>` to add another account");
33
+ }
34
+ else {
35
+ help.push("Run `gws-axi auth accounts` to see all accounts");
36
+ }
37
+ }
38
+ help.push("Run `gws-axi --help` for the full command list");
39
+ output.help = help;
40
+ return output;
41
+ }
42
+ //# sourceMappingURL=home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../../src/commands/home.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,OAAO,GAAG,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC,MAAM,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAC;YACF,MAAM,CAAC,gBAAgB,GAAG,kDAAkD,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA4B;QACrC,QAAQ,EAAE,GAAG,IAAI,OAAO,KAAK,iBAAiB;KAC/C,CAAC;IACF,IAAI,QAAQ;QAAE,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;IACzC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IAErB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;QACnE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAEnB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ServiceSubcommand {
2
+ name: string;
3
+ mutation: boolean;
4
+ }
5
+ export declare function buildServiceStub(service: string, subcommands: ServiceSubcommand[]): {
6
+ help: string;
7
+ command: (args: string[]) => Promise<Record<string, unknown>>;
8
+ };
@@ -0,0 +1,67 @@
1
+ import { AxiError } from "axi-sdk-js";
2
+ import { resolveAccount, } from "../google/account.js";
3
+ function parseAccountFlag(args) {
4
+ const rest = [];
5
+ let account;
6
+ for (let i = 0; i < args.length; i++) {
7
+ const arg = args[i];
8
+ if (arg === "--account" && args[i + 1]) {
9
+ account = args[i + 1];
10
+ i++;
11
+ continue;
12
+ }
13
+ rest.push(arg);
14
+ }
15
+ return { account, rest };
16
+ }
17
+ export function buildServiceStub(service, subcommands) {
18
+ const readOps = subcommands.filter((s) => !s.mutation).map((s) => s.name);
19
+ const writeOps = subcommands.filter((s) => s.mutation).map((s) => s.name);
20
+ const help = `usage: gws-axi ${service} <subcommand> [args] [--account <email>] [flags]
21
+ reads[${readOps.length}]:
22
+ ${readOps.join(", ") || "(none)"}
23
+ writes[${writeOps.length}]:
24
+ ${writeOps.join(", ") || "(none)"}
25
+ status: ${service} is not yet implemented in v1-dev
26
+ see: docs/design.md for the full command surface plan
27
+ notes:
28
+ Writes require --account <email> when 2+ accounts are authenticated.
29
+ Reads use the default account when --account is not provided.
30
+ `;
31
+ const command = async (args) => {
32
+ if (args.length === 0) {
33
+ // Return help as structured output so it integrates with TOON
34
+ return {
35
+ service,
36
+ status: "not_implemented",
37
+ reads: readOps,
38
+ writes: writeOps,
39
+ help: [
40
+ `Run \`gws-axi ${service} --help\` for details`,
41
+ "See docs/design.md for implementation roadmap",
42
+ ],
43
+ };
44
+ }
45
+ const sub = args[0];
46
+ const def = subcommands.find((s) => s.name === sub);
47
+ if (!def) {
48
+ throw new AxiError(`Unknown ${service} subcommand: ${sub}`, "VALIDATION_ERROR", [`Run \`gws-axi ${service} --help\` to see available subcommands`]);
49
+ }
50
+ // Account resolution runs even though the operation is stubbed — this
51
+ // exercises write-protection and error paths without needing real API
52
+ // plumbing, and gives users an accurate preview of the multi-account
53
+ // error messages they'd see in production.
54
+ const { account } = parseAccountFlag(args.slice(1));
55
+ const resolution = resolveAccount(account, {
56
+ mutation: def.mutation,
57
+ commandName: `${service} ${sub}`,
58
+ });
59
+ throw new AxiError(`gws-axi ${service} ${sub} is not yet implemented in v1-dev`, "NOT_IMPLEMENTED", [
60
+ `Account resolution succeeded: would run as ${resolution.account}`,
61
+ `Run \`gws-axi ${service} --help\` for the planned command surface`,
62
+ "See docs/design.md for implementation roadmap",
63
+ ]);
64
+ };
65
+ return { help, command };
66
+ }
67
+ //# sourceMappingURL=service-stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-stub.js","sourceRoot":"","sources":["../../../src/commands/service-stub.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const SLIDES_HELP: string;
2
+ export declare const slidesCommand: (args: string[]) => Promise<Record<string, unknown>>;
@@ -0,0 +1,11 @@
1
+ import { buildServiceStub } from "./service-stub.js";
2
+ const stub = buildServiceStub("slides", [
3
+ { name: "get", mutation: false },
4
+ { name: "page", mutation: false },
5
+ { name: "summarize", mutation: false },
6
+ { name: "create", mutation: true },
7
+ { name: "update", mutation: true },
8
+ ]);
9
+ export const SLIDES_HELP = stub.help;
10
+ export const slidesCommand = stub.command;
11
+ //# sourceMappingURL=slides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slides.js","sourceRoot":"","sources":["../../../src/commands/slides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE;IACtC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;IAChC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IACjC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE;IACtC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;IAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC"}
@@ -0,0 +1,46 @@
1
+ export declare const SETUP_VERSION = 1;
2
+ export declare const CONFIG_VERSION = 1;
3
+ export type SetupStepKey = "gcp_project" | "apis_enabled" | "oauth_client" | "credentials_saved" | "consent_screen" | "test_user_added" | "tokens_obtained";
4
+ export interface SetupStep {
5
+ done: boolean;
6
+ at?: string;
7
+ [key: string]: unknown;
8
+ }
9
+ export interface SetupState {
10
+ version: number;
11
+ auth_mode: "byo";
12
+ steps: Record<SetupStepKey, SetupStep>;
13
+ last_action?: string;
14
+ resume_hint?: string;
15
+ }
16
+ export interface UserConfig {
17
+ version: number;
18
+ default_account?: string;
19
+ }
20
+ declare const SETUP_STEP_ORDER: SetupStepKey[];
21
+ export declare function configDir(): string;
22
+ export declare function setupStatePath(): string;
23
+ export declare function credentialsPath(): string;
24
+ export declare function userConfigPath(): string;
25
+ export declare function accountsDir(): string;
26
+ export declare function accountDir(email: string): string;
27
+ export declare function tokensPathForAccount(email: string): string;
28
+ export declare function profilePathForAccount(email: string): string;
29
+ export declare function normalizeEmail(email: string): string;
30
+ export declare function defaultSetupState(): SetupState;
31
+ export declare function readSetupState(): SetupState;
32
+ export declare function writeSetupState(state: SetupState): void;
33
+ export declare function setupProgress(state: SetupState): {
34
+ done: number;
35
+ total: number;
36
+ nextStep: SetupStepKey | null;
37
+ };
38
+ export declare function defaultUserConfig(): UserConfig;
39
+ export declare function readUserConfig(): UserConfig;
40
+ export declare function writeUserConfig(cfg: UserConfig): void;
41
+ export declare function listAccounts(): string[];
42
+ export declare function hasAccount(email: string): boolean;
43
+ export declare function removeAccount(email: string): void;
44
+ export declare function getDefaultAccount(): string | undefined;
45
+ export declare function setDefaultAccount(email: string): void;
46
+ export { SETUP_STEP_ORDER };