crewly 1.20.35 → 1.20.40

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 (77) hide show
  1. package/config/skills/_common/lib.sh +6 -0
  2. package/config/skills/agent/core/calendar-create/SKILL.md +10 -0
  3. package/config/skills/agent/core/calendar-create/execute.sh +6 -0
  4. package/config/skills/agent/core/calendar-list/SKILL.md +10 -0
  5. package/config/skills/agent/core/calendar-list/execute.sh +6 -0
  6. package/config/skills/agent/core/docs-read/SKILL.md +10 -0
  7. package/config/skills/agent/core/docs-read/execute.sh +6 -1
  8. package/config/skills/agent/core/docs-write/SKILL.md +10 -0
  9. package/config/skills/agent/core/docs-write/execute.sh +6 -1
  10. package/config/skills/agent/core/drive-read/SKILL.md +10 -0
  11. package/config/skills/agent/core/drive-read/execute.sh +6 -1
  12. package/config/skills/agent/core/drive-search/SKILL.md +10 -0
  13. package/config/skills/agent/core/drive-search/execute.sh +6 -1
  14. package/config/skills/agent/core/drive-upload/SKILL.md +10 -0
  15. package/config/skills/agent/core/drive-upload/execute.sh +6 -1
  16. package/config/skills/agent/core/gmail-read/SKILL.md +10 -0
  17. package/config/skills/agent/core/gmail-read/execute.sh +6 -0
  18. package/config/skills/agent/core/gmail-search/SKILL.md +10 -0
  19. package/config/skills/agent/core/gmail-search/execute.sh +6 -0
  20. package/config/skills/agent/core/gmail-send/SKILL.md +10 -0
  21. package/config/skills/agent/core/gmail-send/execute.sh +6 -0
  22. package/config/skills/agent/core/sheets-read/SKILL.md +10 -0
  23. package/config/skills/agent/core/sheets-read/execute.sh +6 -1
  24. package/config/skills/agent/core/sheets-write/SKILL.md +10 -0
  25. package/config/skills/agent/core/sheets-write/execute.sh +6 -1
  26. package/config/skills/agent/core/slides-create/SKILL.md +10 -0
  27. package/config/skills/agent/core/slides-create/execute.sh +6 -1
  28. package/config/skills/agent/core/slides-read/SKILL.md +10 -0
  29. package/config/skills/agent/core/slides-read/execute.sh +6 -1
  30. package/config/slack-app-manifest.json +16 -9
  31. package/dist/backend/backend/src/constants.d.ts +18 -4
  32. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  33. package/dist/backend/backend/src/constants.js +16 -4
  34. package/dist/backend/backend/src/constants.js.map +1 -1
  35. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +8 -0
  36. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  37. package/dist/backend/backend/src/controllers/google/google.controller.js +137 -37
  38. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  39. package/dist/backend/backend/src/controllers/google/google.routes.d.ts +2 -1
  40. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  41. package/dist/backend/backend/src/controllers/google/google.routes.js +4 -2
  42. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  43. package/dist/backend/backend/src/controllers/slack/slack-error.utils.d.ts +46 -0
  44. package/dist/backend/backend/src/controllers/slack/slack-error.utils.d.ts.map +1 -0
  45. package/dist/backend/backend/src/controllers/slack/slack-error.utils.js +54 -0
  46. package/dist/backend/backend/src/controllers/slack/slack-error.utils.js.map +1 -0
  47. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  48. package/dist/backend/backend/src/controllers/slack/slack.controller.js +5 -12
  49. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  50. package/dist/backend/backend/src/services/google/google-api.client.d.ts +23 -2
  51. package/dist/backend/backend/src/services/google/google-api.client.d.ts.map +1 -1
  52. package/dist/backend/backend/src/services/google/google-api.client.js +5 -2
  53. package/dist/backend/backend/src/services/google/google-api.client.js.map +1 -1
  54. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +61 -11
  55. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
  56. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +108 -31
  57. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
  58. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +27 -4
  60. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  61. package/dist/backend/build-info.json +2 -2
  62. package/dist/cli/backend/src/constants.d.ts +18 -4
  63. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  64. package/dist/cli/backend/src/constants.js +16 -4
  65. package/dist/cli/backend/src/constants.js.map +1 -1
  66. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  67. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +27 -4
  68. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  69. package/frontend/dist/assets/{index-e079a375.js → index-e7785269.js} +267 -267
  70. package/frontend/dist/index.html +1 -1
  71. package/package.json +1 -1
  72. package/packages/crewly-agent/src/runtime/agent-runner.service.test.ts +10 -1
  73. package/packages/crewly-agent/src/runtime/agent-runner.service.ts +179 -3
  74. package/packages/crewly-agent/src/runtime/text-tool-calls.test.ts +144 -0
  75. package/packages/crewly-agent/src/runtime/text-tool-calls.ts +316 -0
  76. package/packages/crewly-agent/src/runtime/text-tool-salvage.test.ts +190 -0
  77. package/packages/crewly-agent/src/runtime/types.ts +6 -0
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * @module controllers/google/google.controller
13
13
  */
14
- import { GOOGLE_WORKSPACE_CONSTANTS } from '../../constants.js';
14
+ import { GOOGLE_WORKSPACE_CONSTANTS, GOOGLE_PRODUCTS } from '../../constants.js';
15
15
  import { LoggerService } from '../../services/core/logger.service.js';
16
16
  import { GoogleWorkspaceTokenService, GoogleWorkspaceError, } from '../../services/google/google-workspace-token.service.js';
17
17
  import { GmailService, buildRfc822 } from '../../services/google/gmail.service.js';
@@ -21,27 +21,68 @@ import { DocsService } from '../../services/google/docs.service.js';
21
21
  import { SheetsService } from '../../services/google/sheets.service.js';
22
22
  import { SlidesService } from '../../services/google/slides.service.js';
23
23
  const logger = LoggerService.getInstance().createComponentLogger('GoogleController');
24
- let deps = null;
24
+ /**
25
+ * A dependency set installed by a test, which then answers every request.
26
+ *
27
+ * Kept apart from the lazily-built default: if the two shared a variable,
28
+ * the first call would populate it and every later request would be served
29
+ * the default set, silently ignoring the Google account it named.
30
+ */
31
+ let override = null;
32
+ /** The lazily-built set for the default Google account. */
33
+ let defaultDeps = null;
34
+ /** Per-Google-account service sets, built on demand. */
35
+ const byAccount = new Map();
25
36
  /**
26
37
  * Lazily build the real services (token service singleton + Gmail/Calendar
27
38
  * bound to it).
28
39
  *
29
40
  * @returns The active dependency set
30
41
  */
42
+ function buildDeps(account) {
43
+ const tokens = GoogleWorkspaceTokenService.getInstance();
44
+ // Each service names the product it needs, so a call made against a grant
45
+ // that does not cover it fails with "connect Drive" rather than a Google 403.
46
+ const bind = (product) => ({ tokens, product, ...(account ? { account } : {}) });
47
+ return {
48
+ tokens,
49
+ gmail: new GmailService(bind('gmail')),
50
+ calendar: new CalendarService(bind('calendar')),
51
+ drive: new DriveService(bind('drive')),
52
+ docs: new DocsService(bind('drive')),
53
+ sheets: new SheetsService(bind('drive')),
54
+ slides: new SlidesService(bind('drive')),
55
+ };
56
+ }
31
57
  function getDeps() {
32
- if (!deps) {
33
- const tokens = GoogleWorkspaceTokenService.getInstance();
34
- deps = {
35
- tokens,
36
- gmail: new GmailService({ tokens }),
37
- calendar: new CalendarService({ tokens }),
38
- drive: new DriveService({ tokens }),
39
- docs: new DocsService({ tokens }),
40
- sheets: new SheetsService({ tokens }),
41
- slides: new SlidesService({ tokens }),
42
- };
43
- }
44
- return deps;
58
+ if (override)
59
+ return override;
60
+ if (!defaultDeps)
61
+ defaultDeps = buildDeps();
62
+ return defaultDeps;
63
+ }
64
+ /**
65
+ * The services for the Google account a request names, or the default set.
66
+ *
67
+ * Tests that install their own dependency set keep it whatever the request
68
+ * asks for — overriding it per account would make them untestable.
69
+ *
70
+ * @param req - Incoming request; `account` query or `X-Google-Account` header
71
+ * @returns The service set to use
72
+ */
73
+ function depsForRequest(req) {
74
+ if (override)
75
+ return override;
76
+ const raw = typeof req.query.account === 'string' ? req.query.account : req.get('X-Google-Account') ?? '';
77
+ const account = raw.trim();
78
+ if (!account)
79
+ return getDeps();
80
+ let set = byAccount.get(account);
81
+ if (!set) {
82
+ set = buildDeps(account);
83
+ byAccount.set(account, set);
84
+ }
85
+ return set;
45
86
  }
46
87
  /**
47
88
  * Replace (or, with null, reset) the services the handlers use. Tests only.
@@ -49,7 +90,9 @@ function getDeps() {
49
90
  * @param next - Dependency set or null to rebuild lazily
50
91
  */
51
92
  export function setGoogleControllerDeps(next) {
52
- deps = next;
93
+ override = next;
94
+ defaultDeps = null;
95
+ byAccount.clear();
53
96
  }
54
97
  /**
55
98
  * Where Cloud should send the owner after consent: an explicit http(s)
@@ -74,12 +117,46 @@ function resolveReturnUrl(req) {
74
117
  */
75
118
  function connectUrlOrNull(req) {
76
119
  try {
77
- return getDeps().tokens.buildConnectUrl(resolveReturnUrl(req));
120
+ return getDeps().tokens.buildConnectUrl(resolveReturnUrl(req), connectOptions(req));
78
121
  }
79
122
  catch {
80
123
  return null;
81
124
  }
82
125
  }
126
+ /**
127
+ * Which products a connect request is for, and which Google account to sign
128
+ * in as.
129
+ *
130
+ * `products` narrows the consent screen to what the caller actually wants —
131
+ * asking for Calendar must not show "read all your mail". `loginHint` is
132
+ * what makes adding a *second* Google account possible: without it Google
133
+ * reuses whichever session the browser is already signed in to.
134
+ *
135
+ * @param req - Incoming request
136
+ * @returns Options for `buildConnectUrl`
137
+ */
138
+ function connectOptions(req) {
139
+ const raw = typeof req.query.products === 'string' ? req.query.products : '';
140
+ const wanted = new Set(raw.split(',').map((p) => p.trim().toLowerCase()));
141
+ const products = GOOGLE_PRODUCTS.filter((p) => wanted.has(p));
142
+ const hint = typeof req.query.loginHint === 'string' ? req.query.loginHint.trim() : '';
143
+ const chooseAccount = req.query.chooseAccount === '1' || req.query.chooseAccount === 'true';
144
+ return {
145
+ ...(products.length ? { products } : {}),
146
+ ...(hint ? { loginHint: hint } : {}),
147
+ ...(chooseAccount ? { chooseAccount } : {}),
148
+ };
149
+ }
150
+ /**
151
+ * The Google account a grant request names, if any.
152
+ *
153
+ * @param req - Incoming request
154
+ * @returns The email, or undefined for "the default connection"
155
+ */
156
+ function accountOf(req) {
157
+ const raw = typeof req.query.account === 'string' ? req.query.account : req.get('X-Google-Account') ?? '';
158
+ return raw.trim() || undefined;
159
+ }
83
160
  /**
84
161
  * Answer a failure with the contract's `{ success:false, error, hint }`
85
162
  * shape. `not_connected` carries the consent URL as the hint; the other
@@ -165,7 +242,7 @@ export async function getStatus(req, res) {
165
242
  */
166
243
  export async function getConnectUrl(req, res) {
167
244
  try {
168
- const url = getDeps().tokens.buildConnectUrl(resolveReturnUrl(req));
245
+ const url = getDeps().tokens.buildConnectUrl(resolveReturnUrl(req), connectOptions(req));
169
246
  res.json({ success: true, data: { url } });
170
247
  }
171
248
  catch (err) {
@@ -180,7 +257,30 @@ export async function getConnectUrl(req, res) {
180
257
  */
181
258
  export async function disconnect(req, res) {
182
259
  try {
183
- const data = await getDeps().tokens.disconnect();
260
+ const account = accountOf(req);
261
+ const data = await getDeps().tokens.disconnect({ ...(account ? { account } : {}) });
262
+ res.json({ success: true, data });
263
+ }
264
+ catch (err) {
265
+ sendGoogleError(req, res, err);
266
+ }
267
+ }
268
+ /**
269
+ * POST /api/google/default — choose which connected Google account answers
270
+ * a skill or agent that names none.
271
+ *
272
+ * @param req - Body `{ email }`
273
+ * @param res - Response
274
+ */
275
+ export async function setDefaultAccount(req, res) {
276
+ try {
277
+ const body = (req.body ?? {});
278
+ const email = typeof body.email === 'string' ? body.email.trim() : '';
279
+ if (!email) {
280
+ res.status(400).json({ success: false, error: 'validation', message: 'email is required' });
281
+ return;
282
+ }
283
+ const data = await getDeps().tokens.setDefaultAccount(email);
184
284
  res.json({ success: true, data });
185
285
  }
186
286
  catch (err) {
@@ -199,7 +299,7 @@ export async function gmailSearch(req, res) {
199
299
  if (!query) {
200
300
  throw new GoogleWorkspaceError(400, GOOGLE_WORKSPACE_CONSTANTS.ERROR_CODES.VALIDATION, '"q" is required');
201
301
  }
202
- const messages = await getDeps().gmail.search({ query, max: qInt(req, 'max') });
302
+ const messages = await depsForRequest(req).gmail.search({ query, max: qInt(req, 'max') });
203
303
  res.json({ success: true, data: { query, count: messages.length, messages } });
204
304
  }
205
305
  catch (err) {
@@ -214,7 +314,7 @@ export async function gmailSearch(req, res) {
214
314
  */
215
315
  export async function gmailRead(req, res) {
216
316
  try {
217
- const message = await getDeps().gmail.read(String(req.params.id ?? ''));
317
+ const message = await depsForRequest(req).gmail.read(String(req.params.id ?? ''));
218
318
  res.json({ success: true, data: message });
219
319
  }
220
320
  catch (err) {
@@ -244,7 +344,7 @@ export async function gmailSend(req, res) {
244
344
  res.json({ success: true, data: { dryRun: true, raw: buildRfc822(input) } });
245
345
  return;
246
346
  }
247
- const sent = await getDeps().gmail.send(input);
347
+ const sent = await depsForRequest(req).gmail.send(input);
248
348
  logger.info('Gmail message sent', { id: sent.id, threadId: sent.threadId, to: input.to });
249
349
  res.json({ success: true, data: sent });
250
350
  }
@@ -260,7 +360,7 @@ export async function gmailSend(req, res) {
260
360
  */
261
361
  export async function calendarList(req, res) {
262
362
  try {
263
- const events = await getDeps().calendar.listEvents({
363
+ const events = await depsForRequest(req).calendar.listEvents({
264
364
  calendarId: q(req, 'calendarId') || undefined,
265
365
  timeMin: q(req, 'from') || undefined,
266
366
  timeMax: q(req, 'to') || undefined,
@@ -287,7 +387,7 @@ export async function calendarCreate(req, res) {
287
387
  : typeof body.attendees === 'string'
288
388
  ? body.attendees.split(',')
289
389
  : [];
290
- const event = await getDeps().calendar.createEvent({
390
+ const event = await depsForRequest(req).calendar.createEvent({
291
391
  calendarId: body.calendarId,
292
392
  summary: String(body.summary ?? ''),
293
393
  start: String(body.start ?? ''),
@@ -313,7 +413,7 @@ export async function calendarCreate(req, res) {
313
413
  */
314
414
  export async function driveSearch(req, res) {
315
415
  try {
316
- const files = await getDeps().drive.search({
416
+ const files = await depsForRequest(req).drive.search({
317
417
  query: q(req, 'q') || undefined,
318
418
  mimeType: q(req, 'mimeType') || undefined,
319
419
  folderId: q(req, 'folderId') || undefined,
@@ -333,7 +433,7 @@ export async function driveSearch(req, res) {
333
433
  */
334
434
  export async function driveGet(req, res) {
335
435
  try {
336
- res.json({ success: true, data: await getDeps().drive.get(String(req.params.id ?? '')) });
436
+ res.json({ success: true, data: await depsForRequest(req).drive.get(String(req.params.id ?? '')) });
337
437
  }
338
438
  catch (err) {
339
439
  sendGoogleError(req, res, err);
@@ -347,7 +447,7 @@ export async function driveGet(req, res) {
347
447
  */
348
448
  export async function driveContent(req, res) {
349
449
  try {
350
- res.json({ success: true, data: await getDeps().drive.readContent(String(req.params.id ?? '')) });
450
+ res.json({ success: true, data: await depsForRequest(req).drive.readContent(String(req.params.id ?? '')) });
351
451
  }
352
452
  catch (err) {
353
453
  sendGoogleError(req, res, err);
@@ -362,7 +462,7 @@ export async function driveContent(req, res) {
362
462
  export async function driveUpload(req, res) {
363
463
  try {
364
464
  const body = (req.body ?? {});
365
- const file = await getDeps().drive.upload({
465
+ const file = await depsForRequest(req).drive.upload({
366
466
  name: String(body.name ?? ''),
367
467
  content: typeof body.content === 'string' ? body.content : '',
368
468
  encoding: body.encoding === 'base64' ? 'base64' : 'utf8',
@@ -388,7 +488,7 @@ export async function driveUpload(req, res) {
388
488
  */
389
489
  export async function docsRead(req, res) {
390
490
  try {
391
- res.json({ success: true, data: await getDeps().docs.read(String(req.params.id ?? '')) });
491
+ res.json({ success: true, data: await depsForRequest(req).docs.read(String(req.params.id ?? '')) });
392
492
  }
393
493
  catch (err) {
394
494
  sendGoogleError(req, res, err);
@@ -403,7 +503,7 @@ export async function docsRead(req, res) {
403
503
  export async function docsCreate(req, res) {
404
504
  try {
405
505
  const body = (req.body ?? {});
406
- const doc = await getDeps().docs.create({ title: String(body.title ?? ''), text: typeof body.text === 'string' ? body.text : undefined });
506
+ const doc = await depsForRequest(req).docs.create({ title: String(body.title ?? ''), text: typeof body.text === 'string' ? body.text : undefined });
407
507
  logger.info('Google Doc created', { id: doc.id, title: doc.title });
408
508
  res.json({ success: true, data: doc });
409
509
  }
@@ -420,7 +520,7 @@ export async function docsCreate(req, res) {
420
520
  export async function docsAppend(req, res) {
421
521
  try {
422
522
  const body = (req.body ?? {});
423
- res.json({ success: true, data: await getDeps().docs.append(String(req.params.id ?? ''), String(body.text ?? '')) });
523
+ res.json({ success: true, data: await depsForRequest(req).docs.append(String(req.params.id ?? ''), String(body.text ?? '')) });
424
524
  }
425
525
  catch (err) {
426
526
  sendGoogleError(req, res, err);
@@ -437,7 +537,7 @@ export async function docsAppend(req, res) {
437
537
  */
438
538
  export async function sheetsInfo(req, res) {
439
539
  try {
440
- res.json({ success: true, data: await getDeps().sheets.info(String(req.params.id ?? '')) });
540
+ res.json({ success: true, data: await depsForRequest(req).sheets.info(String(req.params.id ?? '')) });
441
541
  }
442
542
  catch (err) {
443
543
  sendGoogleError(req, res, err);
@@ -451,7 +551,7 @@ export async function sheetsInfo(req, res) {
451
551
  */
452
552
  export async function sheetsRead(req, res) {
453
553
  try {
454
- res.json({ success: true, data: await getDeps().sheets.read(String(req.params.id ?? ''), q(req, 'range') || undefined) });
554
+ res.json({ success: true, data: await depsForRequest(req).sheets.read(String(req.params.id ?? ''), q(req, 'range') || undefined) });
455
555
  }
456
556
  catch (err) {
457
557
  sendGoogleError(req, res, err);
@@ -466,7 +566,7 @@ export async function sheetsRead(req, res) {
466
566
  export async function sheetsCreate(req, res) {
467
567
  try {
468
568
  const body = (req.body ?? {});
469
- const info = await getDeps().sheets.create({ title: String(body.title ?? ''), sheetTitle: body.sheetTitle, rows: body.rows });
569
+ const info = await depsForRequest(req).sheets.create({ title: String(body.title ?? ''), sheetTitle: body.sheetTitle, rows: body.rows });
470
570
  logger.info('Google Sheet created', { id: info.id, title: info.title });
471
571
  res.json({ success: true, data: info });
472
572
  }
@@ -485,7 +585,7 @@ export async function sheetsWrite(req, res) {
485
585
  try {
486
586
  const body = (req.body ?? {});
487
587
  const input = { spreadsheetId: String(req.params.id ?? ''), range: body.range, rows: body.rows };
488
- const result = body.mode === 'update' ? await getDeps().sheets.update(input) : await getDeps().sheets.append(input);
588
+ const result = body.mode === 'update' ? await depsForRequest(req).sheets.update(input) : await depsForRequest(req).sheets.append(input);
489
589
  res.json({ success: true, data: { mode: body.mode === 'update' ? 'update' : 'append', ...result } });
490
590
  }
491
591
  catch (err) {
@@ -503,7 +603,7 @@ export async function sheetsWrite(req, res) {
503
603
  */
504
604
  export async function slidesRead(req, res) {
505
605
  try {
506
- res.json({ success: true, data: await getDeps().slides.read(String(req.params.id ?? '')) });
606
+ res.json({ success: true, data: await depsForRequest(req).slides.read(String(req.params.id ?? '')) });
507
607
  }
508
608
  catch (err) {
509
609
  sendGoogleError(req, res, err);
@@ -518,7 +618,7 @@ export async function slidesRead(req, res) {
518
618
  export async function slidesCreate(req, res) {
519
619
  try {
520
620
  const body = (req.body ?? {});
521
- const deck = await getDeps().slides.create({ title: String(body.title ?? ''), slides: Array.isArray(body.slides) ? body.slides : [] });
621
+ const deck = await depsForRequest(req).slides.create({ title: String(body.title ?? ''), slides: Array.isArray(body.slides) ? body.slides : [] });
522
622
  logger.info('Google Slides deck created', { id: deck.id, title: deck.title, slides: deck.slideCount });
523
623
  res.json({ success: true, data: deck });
524
624
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/google/google.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"google.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/google/google.controller.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,8 @@ import { Router } from 'express';
13
13
  * Routes (everything after /disconnect is behind the connector's role allowlist):
14
14
  * - GET /status — grant status (connected, email, scopes)
15
15
  * - GET /connect-url — Cloud consent-start URL for the browser
16
- * - DELETE /disconnect — revoke + forget the grant
16
+ * - POST /default — choose the account used when none is named
17
+ * - DELETE /disconnect — revoke + forget the grant (optional ?account=)
17
18
  * - GET /gmail/search — ?q=&max=
18
19
  * - GET /gmail/messages/:id — read one message
19
20
  * - POST /gmail/send — { to, cc?, subject, text, threadId?, inReplyTo?, dryRun? }
@@ -1 +1 @@
1
- {"version":3,"file":"google.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/google/google.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA0BjC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAgC3C"}
1
+ {"version":3,"file":"google.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/google/google.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA2BjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAiC3C"}
@@ -8,14 +8,15 @@
8
8
  */
9
9
  import { Router } from 'express';
10
10
  import { requireConnectorAccess } from '../connector/connector.controller.js';
11
- import { getStatus, getConnectUrl, disconnect, gmailSearch, gmailRead, gmailSend, calendarList, calendarCreate, driveSearch, driveGet, driveContent, driveUpload, docsRead, docsCreate, docsAppend, sheetsInfo, sheetsRead, sheetsCreate, sheetsWrite, slidesRead, slidesCreate, } from './google.controller.js';
11
+ import { getStatus, getConnectUrl, disconnect, setDefaultAccount, gmailSearch, gmailRead, gmailSend, calendarList, calendarCreate, driveSearch, driveGet, driveContent, driveUpload, docsRead, docsCreate, docsAppend, sheetsInfo, sheetsRead, sheetsCreate, sheetsWrite, slidesRead, slidesCreate, } from './google.controller.js';
12
12
  /**
13
13
  * Creates the Google Workspace router.
14
14
  *
15
15
  * Routes (everything after /disconnect is behind the connector's role allowlist):
16
16
  * - GET /status — grant status (connected, email, scopes)
17
17
  * - GET /connect-url — Cloud consent-start URL for the browser
18
- * - DELETE /disconnect — revoke + forget the grant
18
+ * - POST /default — choose the account used when none is named
19
+ * - DELETE /disconnect — revoke + forget the grant (optional ?account=)
19
20
  * - GET /gmail/search — ?q=&max=
20
21
  * - GET /gmail/messages/:id — read one message
21
22
  * - POST /gmail/send — { to, cc?, subject, text, threadId?, inReplyTo?, dryRun? }
@@ -41,6 +42,7 @@ export function createGoogleRouter() {
41
42
  const router = Router();
42
43
  router.get('/status', getStatus);
43
44
  router.get('/connect-url', getConnectUrl);
45
+ router.post('/default', setDefaultAccount);
44
46
  router.delete('/disconnect', disconnect);
45
47
  // Everything below touches the owner's Google data, so it goes through the
46
48
  // per-connector role allowlist. Registered here on purpose: Express matches
@@ -1 +1 @@
1
- {"version":3,"file":"google.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/google/google.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEzC,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,gBAAgB;IAChB,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"google.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/google/google.routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,EACd,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAEzC,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,gBAAgB;IAChB,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Turning a Slack API failure into something the owner can act on.
3
+ *
4
+ * The Slack SDK raises `slack_webapi_platform_error` with Slack's own body
5
+ * attached. For a scope failure that body says exactly which scope was
6
+ * needed and which the token has — and the controller used to read only
7
+ * `error`, so the owner saw a bare "Slack API error: missing_scope" with no
8
+ * way to know what to add (2026-09-19, a second install whose Slack app
9
+ * predated team channels and so lacked `groups:read`).
10
+ *
11
+ * @module controllers/slack/slack-error.utils
12
+ */
13
+ /** What the caller should be told about a Slack platform failure. */
14
+ export interface SlackErrorPayload {
15
+ success: false;
16
+ /** Human summary, naming the missing scope when Slack named one. */
17
+ error: string;
18
+ /** Slack's machine-readable code, e.g. `missing_scope`. */
19
+ slackError: string;
20
+ /** The scope Slack wanted, when it said so. */
21
+ needed?: string;
22
+ /** The scopes the token actually carries, when Slack said so. */
23
+ provided?: string;
24
+ /** What to do about it. */
25
+ hint?: string;
26
+ }
27
+ /**
28
+ * Whether this is a Slack platform error (as opposed to a network or
29
+ * programming failure, which belong to the generic handler).
30
+ *
31
+ * @param error - The caught value
32
+ * @returns True when it carries Slack's platform-error code
33
+ */
34
+ export declare function isSlackPlatformError(error: unknown): boolean;
35
+ /**
36
+ * Describe a Slack platform error for the client.
37
+ *
38
+ * @param error - The caught value (only its `data` is read)
39
+ * @returns The response body to send with 422
40
+ *
41
+ * @example
42
+ * describeSlackError(err) // err.data = { error: 'missing_scope', needed: 'groups:read' }
43
+ * // → { error: 'Slack API error: missing_scope (needs groups:read)', needed: 'groups:read', hint: '…' }
44
+ */
45
+ export declare function describeSlackError(error: unknown): SlackErrorPayload;
46
+ //# sourceMappingURL=slack-error.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-error.utils.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/slack/slack-error.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,KAAK,CAAC;IACf,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAKD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAM5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,CAkBpE"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Turning a Slack API failure into something the owner can act on.
3
+ *
4
+ * The Slack SDK raises `slack_webapi_platform_error` with Slack's own body
5
+ * attached. For a scope failure that body says exactly which scope was
6
+ * needed and which the token has — and the controller used to read only
7
+ * `error`, so the owner saw a bare "Slack API error: missing_scope" with no
8
+ * way to know what to add (2026-09-19, a second install whose Slack app
9
+ * predated team channels and so lacked `groups:read`).
10
+ *
11
+ * @module controllers/slack/slack-error.utils
12
+ */
13
+ /** The SDK's platform-error marker. */
14
+ const PLATFORM_ERROR_CODE = 'slack_webapi_platform_error';
15
+ /**
16
+ * Whether this is a Slack platform error (as opposed to a network or
17
+ * programming failure, which belong to the generic handler).
18
+ *
19
+ * @param error - The caught value
20
+ * @returns True when it carries Slack's platform-error code
21
+ */
22
+ export function isSlackPlatformError(error) {
23
+ return (error instanceof Error &&
24
+ 'code' in error &&
25
+ error.code === PLATFORM_ERROR_CODE);
26
+ }
27
+ /**
28
+ * Describe a Slack platform error for the client.
29
+ *
30
+ * @param error - The caught value (only its `data` is read)
31
+ * @returns The response body to send with 422
32
+ *
33
+ * @example
34
+ * describeSlackError(err) // err.data = { error: 'missing_scope', needed: 'groups:read' }
35
+ * // → { error: 'Slack API error: missing_scope (needs groups:read)', needed: 'groups:read', hint: '…' }
36
+ */
37
+ export function describeSlackError(error) {
38
+ const data = error?.data ?? {};
39
+ const slackError = typeof data.error === 'string' && data.error ? data.error : 'unknown_slack_error';
40
+ const needed = typeof data.needed === 'string' && data.needed ? data.needed : undefined;
41
+ const provided = typeof data.provided === 'string' && data.provided ? data.provided : undefined;
42
+ const hint = slackError === 'missing_scope' && needed
43
+ ? `Your Slack app is missing the ${needed} scope. Add it under OAuth & Permissions → Bot Token Scopes, then reinstall the app to your workspace.`
44
+ : undefined;
45
+ return {
46
+ success: false,
47
+ error: needed ? `Slack API error: ${slackError} (needs ${needed})` : `Slack API error: ${slackError}`,
48
+ slackError,
49
+ ...(needed ? { needed } : {}),
50
+ ...(provided ? { provided } : {}),
51
+ ...(hint ? { hint } : {}),
52
+ };
53
+ }
54
+ //# sourceMappingURL=slack-error.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-error.utils.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/slack/slack-error.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,uCAAuC;AACvC,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,KAAK,YAAY,KAAK;QACtB,MAAM,IAAI,KAAK;QACd,KAA4B,CAAC,IAAI,KAAK,mBAAmB,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,MAAM,IAAI,GAAI,KAAwD,EAAE,IAAI,IAAI,EAAE,CAAC;IACnF,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACrG,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAChG,MAAM,IAAI,GACR,UAAU,KAAK,eAAe,IAAI,MAAM;QACtC,CAAC,CAAC,iCAAiC,MAAM,wGAAwG;QACjJ,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,UAAU,WAAW,MAAM,GAAG,CAAC,CAAC,CAAC,oBAAoB,UAAU,EAAE;QACrG,UAAU;QACV,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/slack/slack.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH,QAAA,MAAM,MAAM,4CAAW,CAAC;AAu3CxB,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"slack.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/slack/slack.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,QAAA,MAAM,MAAM,4CAAW,CAAC;AA42CxB,eAAe,MAAM,CAAC"}
@@ -7,6 +7,7 @@
7
7
  * @module controllers/slack
8
8
  */
9
9
  import { Router } from 'express';
10
+ import { describeSlackError, isSlackPlatformError } from './slack-error.utils.js';
10
11
  import { promises as fs } from 'fs';
11
12
  import path from 'path';
12
13
  import { getSlackService } from '../../services/slack/slack.service.js';
@@ -43,18 +44,10 @@ const UPLOAD_MARKER_CONTENT_MAX = 500;
43
44
  * @returns True if a Slack platform error response was sent
44
45
  */
45
46
  function handleSlackPlatformError(error, res) {
46
- if (error instanceof Error &&
47
- 'code' in error &&
48
- error.code === 'slack_webapi_platform_error') {
49
- const slackError = error.data?.error || 'unknown_slack_error';
50
- res.status(422).json({
51
- success: false,
52
- error: `Slack API error: ${slackError}`,
53
- slackError,
54
- });
55
- return true;
56
- }
57
- return false;
47
+ if (!isSlackPlatformError(error))
48
+ return false;
49
+ res.status(422).json(describeSlackError(error));
50
+ return true;
58
51
  }
59
52
  /**
60
53
  * Post-Slack-send bookkeeping shared by /send, /upload-image, and /upload-file.