@remits/remits-cli 0.1.107 → 0.1.108

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 (2) hide show
  1. package/index.js +54 -6
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1329,12 +1329,28 @@ function serviceRegistrationState() {
1329
1329
 
1330
1330
  function listenerRegistrationPayload(session, options = {}) {
1331
1331
  const service = serviceRegistrationState();
1332
+ const groupedSessions = Array.isArray(options.groupedSessions)
1333
+ ? options.groupedSessions.filter((entry) => entry && entry.token)
1334
+ : [];
1335
+ const sessionDataModes = Array.from(new Set(
1336
+ (groupedSessions.length ? groupedSessions : [session])
1337
+ .map((entry) => normalizeDataMode(entry && entry.dataMode))
1338
+ .filter(Boolean)
1339
+ )).sort();
1340
+ const sessionAccountIds = Array.from(new Set(
1341
+ (groupedSessions.length ? groupedSessions : [session])
1342
+ .map((entry) => Number(entry && entry.accountId))
1343
+ .filter((accountId) => Number.isFinite(accountId) && accountId > 0)
1344
+ )).sort((a, b) => a - b);
1332
1345
  return {
1333
1346
  client: 'remits-cli',
1334
1347
  reason: options.reason || 'heartbeat',
1335
1348
  baseUrl: normalizeBaseUrl(session.baseUrl || DEFAULT_BASE_URL),
1336
1349
  accountId: Number(session.accountId),
1337
1350
  dataMode: normalizeDataMode(session.dataMode),
1351
+ dataModes: sessionDataModes,
1352
+ sessionAccountIds,
1353
+ registrationSessionCount: groupedSessions.length || 1,
1338
1354
  websocketTopic: session.websocketTopic || (session.user && session.user.uuid ? String(session.user.uuid).replace(/-/g, '') : null),
1339
1355
  dashboardUrl: service.dashboardUrl || null,
1340
1356
  agent: getPreferredAgent(),
@@ -1348,6 +1364,8 @@ function listenerRegistrationSignature(payload) {
1348
1364
  baseUrl: payload.baseUrl,
1349
1365
  accountId: payload.accountId,
1350
1366
  dataMode: payload.dataMode,
1367
+ dataModes: payload.dataModes || [],
1368
+ sessionAccountIds: payload.sessionAccountIds || [],
1351
1369
  websocketTopic: payload.websocketTopic,
1352
1370
  dashboardUrl: payload.dashboardUrl,
1353
1371
  agent: payload.agent,
@@ -1386,6 +1404,9 @@ function rememberCliListenerRegistration(session, payload) {
1386
1404
  userId: session.user && session.user.id ? session.user.id : null,
1387
1405
  signature: listenerRegistrationSignature(payload),
1388
1406
  accountCount: Array.isArray(payload.repoAccounts) ? payload.repoAccounts.length : 0,
1407
+ sessionAccountIds: payload.sessionAccountIds || [],
1408
+ dataModes: payload.dataModes || [],
1409
+ registrationSessionCount: payload.registrationSessionCount || 1,
1389
1410
  lastRegisteredAt: new Date().toISOString(),
1390
1411
  lastRegisteredAtMs: Date.now()
1391
1412
  };
@@ -1412,17 +1433,44 @@ async function bestEffortRegisterCliListeners(options = {}) {
1412
1433
  if (!sessions.length) {
1413
1434
  return [];
1414
1435
  }
1415
- const results = await Promise.all(sessions.map(async (session) => {
1436
+ const groupedSessions = [];
1437
+ for (const session of sessions) {
1438
+ const key = listenerRegistrationStateKey(session);
1439
+ let group = groupedSessions.find((entry) => entry.key === key);
1440
+ if (!group) {
1441
+ group = { key, session, sessions: [] };
1442
+ groupedSessions.push(group);
1443
+ }
1444
+ group.sessions.push(session);
1445
+ }
1446
+
1447
+ const results = await Promise.all(groupedSessions.map(async (group) => {
1416
1448
  try {
1417
- const data = await registerCliListenerSession(session, options);
1418
- return { success: true, accountId: session.accountId, baseUrl: session.baseUrl, data };
1449
+ const data = await registerCliListenerSession(group.session, {
1450
+ ...options,
1451
+ groupedSessions: group.sessions
1452
+ });
1453
+ return {
1454
+ success: true,
1455
+ accountId: group.session.accountId,
1456
+ baseUrl: group.session.baseUrl,
1457
+ groupedAccountIds: group.sessions.map((session) => session.accountId),
1458
+ data
1459
+ };
1419
1460
  } catch (err) {
1420
1461
  appendGlobalActivityLog('listener', 'registration.failed', {
1421
- accountId: session.accountId,
1422
- baseUrl: normalizeBaseUrl(session.baseUrl || DEFAULT_BASE_URL),
1462
+ accountId: group.session.accountId,
1463
+ baseUrl: normalizeBaseUrl(group.session.baseUrl || DEFAULT_BASE_URL),
1464
+ groupedAccountIds: group.sessions.map((session) => session.accountId),
1423
1465
  error: describeError(err)
1424
1466
  }, 'error');
1425
- return { success: false, accountId: session.accountId, baseUrl: session.baseUrl, error: describeError(err) };
1467
+ return {
1468
+ success: false,
1469
+ accountId: group.session.accountId,
1470
+ baseUrl: group.session.baseUrl,
1471
+ groupedAccountIds: group.sessions.map((session) => session.accountId),
1472
+ error: describeError(err)
1473
+ };
1426
1474
  }
1427
1475
  }));
1428
1476
  return results;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remits/remits-cli",
3
- "version": "0.1.107",
3
+ "version": "0.1.108",
4
4
  "description": "Local CLI for auth, component sync, and live test execution against Remits",
5
5
  "license": "MIT",
6
6
  "private": false,