@juzi/wechaty-puppet-service 1.0.129 → 1.0.131

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 (98) hide show
  1. package/dist/cjs/src/auth/call-cred.d.ts +2 -2
  2. package/dist/cjs/src/auth/call-cred.d.ts.map +1 -1
  3. package/dist/cjs/src/auth/call-cred.js.map +1 -1
  4. package/dist/cjs/src/client/puppet-service.d.ts +27 -2
  5. package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
  6. package/dist/cjs/src/client/puppet-service.js +431 -124
  7. package/dist/cjs/src/client/puppet-service.js.map +1 -1
  8. package/dist/cjs/src/client/puppet-service.spec.js +107 -0
  9. package/dist/cjs/src/client/puppet-service.spec.js.map +1 -1
  10. package/dist/cjs/src/client/room-cache-coordinator.d.ts +14 -0
  11. package/dist/cjs/src/client/room-cache-coordinator.d.ts.map +1 -0
  12. package/dist/cjs/src/client/room-cache-coordinator.js +53 -0
  13. package/dist/cjs/src/client/room-cache-coordinator.js.map +1 -0
  14. package/dist/cjs/src/client/room-member-cache.spec.d.ts +2 -0
  15. package/dist/cjs/src/client/room-member-cache.spec.d.ts.map +1 -0
  16. package/dist/cjs/src/client/room-member-cache.spec.js +417 -0
  17. package/dist/cjs/src/client/room-member-cache.spec.js.map +1 -0
  18. package/dist/cjs/src/client/room-member-load.spec.d.ts +2 -0
  19. package/dist/cjs/src/client/room-member-load.spec.d.ts.map +1 -0
  20. package/dist/cjs/src/client/room-member-load.spec.js +324 -0
  21. package/dist/cjs/src/client/room-member-load.spec.js.map +1 -0
  22. package/dist/cjs/src/package-json.js +4 -4
  23. package/dist/cjs/src/server/event-stream-manager.d.ts.map +1 -1
  24. package/dist/cjs/src/server/event-stream-manager.js +30 -0
  25. package/dist/cjs/src/server/event-stream-manager.js.map +1 -1
  26. package/dist/cjs/src/server/event-stream-manager.spec.d.ts +3 -0
  27. package/dist/cjs/src/server/event-stream-manager.spec.d.ts.map +1 -0
  28. package/dist/cjs/src/server/event-stream-manager.spec.js +22 -0
  29. package/dist/cjs/src/server/event-stream-manager.spec.js.map +1 -0
  30. package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -1
  31. package/dist/cjs/src/server/puppet-implementation.js +135 -28
  32. package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
  33. package/dist/cjs/src/server/puppet-implementation.spec.js +98 -0
  34. package/dist/cjs/src/server/puppet-implementation.spec.js.map +1 -1
  35. package/dist/cjs/src/utils/pb-payload-helper.d.ts +10 -0
  36. package/dist/cjs/src/utils/pb-payload-helper.d.ts.map +1 -1
  37. package/dist/cjs/src/utils/pb-payload-helper.js +180 -1
  38. package/dist/cjs/src/utils/pb-payload-helper.js.map +1 -1
  39. package/dist/cjs/src/utils/room-member-load.spec.d.ts +2 -0
  40. package/dist/cjs/src/utils/room-member-load.spec.d.ts.map +1 -0
  41. package/dist/cjs/src/utils/room-member-load.spec.js +83 -0
  42. package/dist/cjs/src/utils/room-member-load.spec.js.map +1 -0
  43. package/dist/esm/src/auth/call-cred.d.ts +2 -2
  44. package/dist/esm/src/auth/call-cred.d.ts.map +1 -1
  45. package/dist/esm/src/auth/call-cred.js.map +1 -1
  46. package/dist/esm/src/client/puppet-service.d.ts +27 -2
  47. package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
  48. package/dist/esm/src/client/puppet-service.js +432 -125
  49. package/dist/esm/src/client/puppet-service.js.map +1 -1
  50. package/dist/esm/src/client/puppet-service.spec.js +107 -0
  51. package/dist/esm/src/client/puppet-service.spec.js.map +1 -1
  52. package/dist/esm/src/client/room-cache-coordinator.d.ts +14 -0
  53. package/dist/esm/src/client/room-cache-coordinator.d.ts.map +1 -0
  54. package/dist/esm/src/client/room-cache-coordinator.js +49 -0
  55. package/dist/esm/src/client/room-cache-coordinator.js.map +1 -0
  56. package/dist/esm/src/client/room-member-cache.spec.d.ts +2 -0
  57. package/dist/esm/src/client/room-member-cache.spec.d.ts.map +1 -0
  58. package/dist/esm/src/client/room-member-cache.spec.js +415 -0
  59. package/dist/esm/src/client/room-member-cache.spec.js.map +1 -0
  60. package/dist/esm/src/client/room-member-load.spec.d.ts +2 -0
  61. package/dist/esm/src/client/room-member-load.spec.d.ts.map +1 -0
  62. package/dist/esm/src/client/room-member-load.spec.js +296 -0
  63. package/dist/esm/src/client/room-member-load.spec.js.map +1 -0
  64. package/dist/esm/src/package-json.js +4 -4
  65. package/dist/esm/src/server/event-stream-manager.d.ts.map +1 -1
  66. package/dist/esm/src/server/event-stream-manager.js +30 -0
  67. package/dist/esm/src/server/event-stream-manager.js.map +1 -1
  68. package/dist/esm/src/server/event-stream-manager.spec.d.ts +3 -0
  69. package/dist/esm/src/server/event-stream-manager.spec.d.ts.map +1 -0
  70. package/dist/esm/src/server/event-stream-manager.spec.js +20 -0
  71. package/dist/esm/src/server/event-stream-manager.spec.js.map +1 -0
  72. package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
  73. package/dist/esm/src/server/puppet-implementation.js +136 -29
  74. package/dist/esm/src/server/puppet-implementation.js.map +1 -1
  75. package/dist/esm/src/server/puppet-implementation.spec.js +98 -0
  76. package/dist/esm/src/server/puppet-implementation.spec.js.map +1 -1
  77. package/dist/esm/src/utils/pb-payload-helper.d.ts +10 -0
  78. package/dist/esm/src/utils/pb-payload-helper.d.ts.map +1 -1
  79. package/dist/esm/src/utils/pb-payload-helper.js +169 -0
  80. package/dist/esm/src/utils/pb-payload-helper.js.map +1 -1
  81. package/dist/esm/src/utils/room-member-load.spec.d.ts +2 -0
  82. package/dist/esm/src/utils/room-member-load.spec.d.ts.map +1 -0
  83. package/dist/esm/src/utils/room-member-load.spec.js +58 -0
  84. package/dist/esm/src/utils/room-member-load.spec.js.map +1 -0
  85. package/package.json +4 -4
  86. package/src/auth/call-cred.ts +1 -1
  87. package/src/client/puppet-service.spec.ts +147 -0
  88. package/src/client/puppet-service.ts +378 -138
  89. package/src/client/room-cache-coordinator.ts +50 -0
  90. package/src/client/room-member-cache.spec.ts +448 -0
  91. package/src/client/room-member-load.spec.ts +319 -0
  92. package/src/package-json.ts +4 -4
  93. package/src/server/event-stream-manager.spec.ts +30 -0
  94. package/src/server/event-stream-manager.ts +29 -0
  95. package/src/server/puppet-implementation.spec.ts +127 -0
  96. package/src/server/puppet-implementation.ts +144 -29
  97. package/src/utils/pb-payload-helper.ts +150 -0
  98. package/src/utils/room-member-load.spec.ts +67 -0
@@ -1,3 +1,4 @@
1
+ import { inspect } from 'util';
1
2
  import { chunkDecoder, chunkEncoder, StringValue, grpc, puppet as grpcPuppet, } from '@juzi/wechaty-grpc';
2
3
  import * as PUPPET from '@juzi/wechaty-puppet';
3
4
  import { timeoutPromise } from 'gerror';
@@ -6,9 +7,27 @@ import { normalizeFileBoxUuid, } from '../file-box-helper/mod.js';
6
7
  import { log } from '../config.js';
7
8
  import { grpcError } from './grpc-error.js';
8
9
  import { EventStreamManager } from './event-stream-manager.js';
9
- import { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPayloadToPb, channelPayloadToPb, channelPbToPayload, chatHistoryPayloadToPb, postPbToPayload, urlLinkPayloadToPb, channelCardPayloadToPb } from '../utils/pb-payload-helper.js';
10
+ import { OptionalBooleanUnwrapper, OptionalBooleanWrapper, callRecordPayloadToPb, channelPayloadToPb, channelPbToPayload, chatHistoryPayloadToPb, postPbToPayload, urlLinkPayloadToPb, channelCardPayloadToPb, roomPayloadToPb, roomMemberLoadStateToPb, roomMemberSnapshotToPb, validateRoomMemberLoadState, validateRoomMemberSnapshot, validateRoomMemberRevision } from '../utils/pb-payload-helper.js';
10
11
  import { grpcCallTypeToPuppetMedia, puppetCallMediaTypeToGrpc } from '../utils/call-media-mapping.js';
11
12
  import { TextContentType } from '@juzi/wechaty-puppet/types';
13
+ function roomMemberRpcError(method, error, callback) {
14
+ log.error('PuppetServiceImpl', 'roomMemberRpcError() %s() rejection: %s', method, inspect(error));
15
+ if (typeof error === 'object' && error !== null && 'code' in error) {
16
+ const status = error;
17
+ const code = status['code'];
18
+ if (typeof code === 'number' && Number.isInteger(code) && code > 0 && code <= 16) {
19
+ const details = typeof status['details'] === 'string' ? status['details']
20
+ : error instanceof Error ? error.message : 'Room member RPC failed';
21
+ callback({ code, details }, null);
22
+ return;
23
+ }
24
+ }
25
+ if (error instanceof Error && /unsupported/i.test(error.message)) {
26
+ callback({ code: grpc.status.UNIMPLEMENTED, details: error.message }, null);
27
+ return;
28
+ }
29
+ grpcError(method, error, callback);
30
+ }
12
31
  const setGrpcBatchResults = (response, ResultClass, payload) => {
13
32
  response.setResultsList(payload.results.map(result => {
14
33
  const pbResult = new ResultClass();
@@ -1572,6 +1591,76 @@ function puppetImplementation(puppet, FileBoxUuid) {
1572
1591
  return grpcError('roomList', e, callback);
1573
1592
  }
1574
1593
  },
1594
+ roomMemberSync: async (call, callback) => {
1595
+ try {
1596
+ const roomId = call.request.getId();
1597
+ if (!roomId) {
1598
+ return callback({ code: grpc.status.INVALID_ARGUMENT, details: 'roomId is required' }, null);
1599
+ }
1600
+ const options = call.request.getForce() ? { force: true } : undefined;
1601
+ if (typeof puppet.roomMemberSync !== 'function') {
1602
+ throw new Error('roomMemberSync unsupported by adapter');
1603
+ }
1604
+ const state = await puppet.roomMemberSync(roomId, options);
1605
+ validateRoomMemberLoadState(state, roomId);
1606
+ return callback(null, roomMemberLoadStateToPb(state));
1607
+ }
1608
+ catch (error) {
1609
+ return roomMemberRpcError('roomMemberSync', error, callback);
1610
+ }
1611
+ },
1612
+ roomMemberLoadState: async (call, callback) => {
1613
+ try {
1614
+ const roomId = call.request.getId();
1615
+ if (!roomId) {
1616
+ return callback({ code: grpc.status.INVALID_ARGUMENT, details: 'roomId is required' }, null);
1617
+ }
1618
+ if (typeof puppet.roomMemberLoadState !== 'function') {
1619
+ throw new Error('roomMemberLoadState unsupported by adapter');
1620
+ }
1621
+ const state = await puppet.roomMemberLoadState(roomId);
1622
+ validateRoomMemberLoadState(state, roomId);
1623
+ return callback(null, roomMemberLoadStateToPb(state));
1624
+ }
1625
+ catch (error) {
1626
+ return roomMemberRpcError('roomMemberLoadState', error, callback);
1627
+ }
1628
+ },
1629
+ roomMemberSnapshot: async (call, callback) => {
1630
+ try {
1631
+ const roomId = call.request.getId();
1632
+ const revision = call.request.getRevision();
1633
+ const pageSize = call.request.getPageSize();
1634
+ try {
1635
+ if (!roomId) {
1636
+ throw new Error('roomId is required');
1637
+ }
1638
+ validateRoomMemberRevision(revision);
1639
+ if (!Number.isInteger(pageSize) || pageSize < 0 || pageSize > 500) {
1640
+ throw new Error('pageSize must be an integer between 0 and 500');
1641
+ }
1642
+ }
1643
+ catch (error) {
1644
+ return callback({ code: grpc.status.INVALID_ARGUMENT, details: error.message }, null);
1645
+ }
1646
+ if (typeof puppet.roomMemberSnapshot !== 'function') {
1647
+ throw new Error('roomMemberSnapshot unsupported by adapter');
1648
+ }
1649
+ const snapshot = await puppet.roomMemberSnapshot(roomId, revision, {
1650
+ pageToken: call.request.getPageToken(), pageSize,
1651
+ });
1652
+ try {
1653
+ validateRoomMemberSnapshot(snapshot, roomId, revision);
1654
+ }
1655
+ catch (error) {
1656
+ return callback({ code: grpc.status.FAILED_PRECONDITION, details: error.message }, null);
1657
+ }
1658
+ return callback(null, roomMemberSnapshotToPb(snapshot));
1659
+ }
1660
+ catch (error) {
1661
+ return roomMemberRpcError('roomMemberSnapshot', error, callback);
1662
+ }
1663
+ },
1575
1664
  roomMemberList: async (call, callback) => {
1576
1665
  log.verbose('PuppetServiceImpl', 'roomMemberList()');
1577
1666
  try {
@@ -1640,20 +1729,7 @@ function puppetImplementation(puppet, FileBoxUuid) {
1640
1729
  try {
1641
1730
  const roomId = call.request.getId();
1642
1731
  const payload = await puppet.roomPayload(roomId);
1643
- const response = new grpcPuppet.RoomPayloadResponse();
1644
- response.setAdminIdsList(payload.adminIdList);
1645
- response.setAvatar(payload.avatar || '');
1646
- response.setHandle(payload.handle || '');
1647
- response.setId(payload.id);
1648
- response.setMemberIdsList(payload.memberIdList);
1649
- response.setOwnerId(payload.ownerId || '');
1650
- response.setTopic(payload.topic);
1651
- response.setAdditionalInfo(payload.additionalInfo || '');
1652
- response.setRoomRemark(payload.remark || '');
1653
- response.setExternal(!!payload.external);
1654
- if (payload.createTime) {
1655
- response.setCreateTime(timestampFromMilliseconds(payload.createTime));
1656
- }
1732
+ const response = roomPayloadToPb(payload);
1657
1733
  return callback(null, response);
1658
1734
  }
1659
1735
  catch (e) {
@@ -1668,20 +1744,7 @@ function puppetImplementation(puppet, FileBoxUuid) {
1668
1744
  const response = new grpcPuppet.BatchRoomPayloadResponse();
1669
1745
  const payloads = [];
1670
1746
  for (const [_, payload] of payloadMap.entries()) {
1671
- const pb = new grpcPuppet.RoomPayloadResponse();
1672
- pb.setAdminIdsList(payload.adminIdList);
1673
- pb.setAvatar(payload.avatar || '');
1674
- pb.setHandle(payload.handle || '');
1675
- pb.setId(payload.id);
1676
- pb.setMemberIdsList(payload.memberIdList);
1677
- pb.setOwnerId(payload.ownerId || '');
1678
- pb.setTopic(payload.topic);
1679
- pb.setAdditionalInfo(payload.additionalInfo || '');
1680
- pb.setRoomRemark(payload.remark || '');
1681
- pb.setExternal(!!payload.external);
1682
- if (payload.createTime) {
1683
- pb.setCreateTime(timestampFromMilliseconds(payload.createTime));
1684
- }
1747
+ const pb = roomPayloadToPb(payload);
1685
1748
  payloads.push(pb);
1686
1749
  }
1687
1750
  response.setRoomPayloadsList(payloads);
@@ -2403,6 +2466,50 @@ function puppetImplementation(puppet, FileBoxUuid) {
2403
2466
  return grpcError('applyRoomAntiSpamStrategy', e, callback);
2404
2467
  }
2405
2468
  },
2469
+ orgBroadcastPayload: async (call, callback) => {
2470
+ log.verbose('PuppetServiceImpl', 'orgBroadcastPayload()');
2471
+ try {
2472
+ const orgBroadcastId = call.request.getId();
2473
+ const payload = await puppet.orgBroadcastPayload(orgBroadcastId);
2474
+ const response = new grpcPuppet.OrgBroadcastPayloadResponse();
2475
+ response.setId(payload.id);
2476
+ response.setSendType(payload.sendType);
2477
+ response.setConversationType(payload.conversationType);
2478
+ response.setCreatorId(payload.creatorId ?? '');
2479
+ response.setExecTime(payload.execTime);
2480
+ response.setStatus(payload.status);
2481
+ response.setCanCancel(payload.canCancel);
2482
+ response.setAllowSelect(payload.allowSelect);
2483
+ response.setSent(payload.sent);
2484
+ response.setTotalCount(payload.totalCount);
2485
+ response.setSentCount(payload.sentCount);
2486
+ response.setContentListJson(payload.contentListJson);
2487
+ response.setTargetsList(payload.targets.map(target => {
2488
+ const targetPb = new grpcPuppet.OrgBroadcastTarget();
2489
+ targetPb.setContactId(target.contactId ?? '');
2490
+ targetPb.setRoomId(target.roomId ?? '');
2491
+ targetPb.setStatus(target.status);
2492
+ return targetPb;
2493
+ }));
2494
+ return callback(null, response);
2495
+ }
2496
+ catch (e) {
2497
+ return grpcError('orgBroadcastPayload', e, callback);
2498
+ }
2499
+ },
2500
+ orgBroadcastExecute: async (call, callback) => {
2501
+ log.verbose('PuppetServiceImpl', 'orgBroadcastExecute()');
2502
+ try {
2503
+ const orgBroadcastId = call.request.getId();
2504
+ const targetIds = call.request.getTargetIdsList();
2505
+ // an empty target_ids on the wire means all targets of the org broadcast
2506
+ await puppet.orgBroadcastExecute(orgBroadcastId, targetIds.length ? targetIds : undefined);
2507
+ return callback(null, new grpcPuppet.OrgBroadcastExecuteResponse());
2508
+ }
2509
+ catch (e) {
2510
+ return grpcError('orgBroadcastExecute', e, callback);
2511
+ }
2512
+ },
2406
2513
  download: async (call) => {
2407
2514
  log.verbose('PuppetServiceImpl', 'download()');
2408
2515
  try {