@lightupai/polaris 0.0.73 → 0.0.74

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightupai/polaris",
3
- "version": "0.0.73",
3
+ "version": "0.0.74",
4
4
  "description": "Record and stream Claude Code sessions to Slack. Like Gong for AI coding — capture every prompt, response, and tool call. Multiplayer collaboration across AI coding agents.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -450,25 +450,32 @@ export async function startServer(opts: {
450
450
  const users = await listUsers(sql, orgId);
451
451
  const org = await getOrgFn(sql, orgId);
452
452
 
453
- // Resolve Slack user info if bot token available
453
+ // Resolve Slack user info if bot token available (paginate through all members)
454
454
  let slackMembers: Array<{ id: string; name: string; display_name: string; email: string; username: string }> = [];
455
455
  if (org?.slack_bot_token) {
456
456
  try {
457
- const slackRes = await fetch("https://slack.com/api/users.list?limit=200", {
458
- headers: { Authorization: `Bearer ${org.slack_bot_token}` },
459
- });
460
- if (slackRes.ok) {
461
- const slackData = (await slackRes.json()) as { members?: Array<{ id: string; name: string; real_name?: string; profile?: { display_name?: string; email?: string }; deleted?: boolean; is_bot?: boolean }> };
462
- slackMembers = (slackData.members ?? [])
463
- .filter((m) => !m.deleted && !m.is_bot)
464
- .map((m) => ({
457
+ type SlackMember = { id: string; name: string; real_name?: string; profile?: { display_name?: string; email?: string }; deleted?: boolean; is_bot?: boolean };
458
+ type SlackResponse = { ok?: boolean; members?: SlackMember[]; response_metadata?: { next_cursor?: string } };
459
+ let cursor = "";
460
+ do {
461
+ const url = `https://slack.com/api/users.list?limit=200${cursor ? `&cursor=${cursor}` : ""}`;
462
+ const slackRes = await fetch(url, {
463
+ headers: { Authorization: `Bearer ${org.slack_bot_token}` },
464
+ });
465
+ if (!slackRes.ok) break;
466
+ const slackData = (await slackRes.json()) as SlackResponse;
467
+ for (const m of slackData.members ?? []) {
468
+ if (m.deleted || m.is_bot) continue;
469
+ slackMembers.push({
465
470
  id: m.id,
466
471
  name: m.real_name ?? "",
467
472
  display_name: m.profile?.display_name ?? "",
468
473
  email: m.profile?.email ?? "",
469
474
  username: m.name ?? "",
470
- }));
471
- }
475
+ });
476
+ }
477
+ cursor = slackData.response_metadata?.next_cursor ?? "";
478
+ } while (cursor);
472
479
  } catch { /* Slack API unavailable */ }
473
480
  }
474
481