@juzi/wechaty-puppet-service 1.0.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.
- package/LICENSE +201 -0
- package/README.md +166 -0
- package/dist/cjs/examples/ding-dong-bot.d.ts +2 -0
- package/dist/cjs/examples/ding-dong-bot.d.ts.map +1 -0
- package/dist/cjs/examples/ding-dong-bot.js +156 -0
- package/dist/cjs/examples/ding-dong-bot.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/src/auth/auth-impl-token.d.ts +4 -0
- package/dist/cjs/src/auth/auth-impl-token.d.ts.map +1 -0
- package/dist/cjs/src/auth/auth-impl-token.js +81 -0
- package/dist/cjs/src/auth/auth-impl-token.js.map +1 -0
- package/dist/cjs/src/auth/auth-impl-token.spec.d.ts +3 -0
- package/dist/cjs/src/auth/auth-impl-token.spec.d.ts.map +1 -0
- package/dist/cjs/src/auth/auth-impl-token.spec.js +65 -0
- package/dist/cjs/src/auth/auth-impl-token.spec.js.map +1 -0
- package/dist/cjs/src/auth/ca.d.ts +46 -0
- package/dist/cjs/src/auth/ca.d.ts.map +1 -0
- package/dist/cjs/src/auth/ca.js +135 -0
- package/dist/cjs/src/auth/ca.js.map +1 -0
- package/dist/cjs/src/auth/ca.spec.d.ts +3 -0
- package/dist/cjs/src/auth/ca.spec.d.ts.map +1 -0
- package/dist/cjs/src/auth/ca.spec.js +115 -0
- package/dist/cjs/src/auth/ca.spec.js.map +1 -0
- package/dist/cjs/src/auth/call-cred.d.ts +9 -0
- package/dist/cjs/src/auth/call-cred.d.ts.map +1 -0
- package/dist/cjs/src/auth/call-cred.js +17 -0
- package/dist/cjs/src/auth/call-cred.js.map +1 -0
- package/dist/cjs/src/auth/call-cred.spec.d.ts +3 -0
- package/dist/cjs/src/auth/call-cred.spec.d.ts.map +1 -0
- package/dist/cjs/src/auth/call-cred.spec.js +18 -0
- package/dist/cjs/src/auth/call-cred.spec.js.map +1 -0
- package/dist/cjs/src/auth/env-vars.d.ts +13 -0
- package/dist/cjs/src/auth/env-vars.d.ts.map +1 -0
- package/dist/cjs/src/auth/env-vars.js +29 -0
- package/dist/cjs/src/auth/env-vars.js.map +1 -0
- package/dist/cjs/src/auth/grpc-js.d.ts +7 -0
- package/dist/cjs/src/auth/grpc-js.d.ts.map +1 -0
- package/dist/cjs/src/auth/grpc-js.js +10 -0
- package/dist/cjs/src/auth/grpc-js.js.map +1 -0
- package/dist/cjs/src/auth/mod.d.ts +5 -0
- package/dist/cjs/src/auth/mod.d.ts.map +1 -0
- package/dist/cjs/src/auth/mod.js +10 -0
- package/dist/cjs/src/auth/mod.js.map +1 -0
- package/dist/cjs/src/auth/mokey-patch-header-authorization.d.ts +11 -0
- package/dist/cjs/src/auth/mokey-patch-header-authorization.d.ts.map +1 -0
- package/dist/cjs/src/auth/mokey-patch-header-authorization.js +32 -0
- package/dist/cjs/src/auth/mokey-patch-header-authorization.js.map +1 -0
- package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.d.ts +3 -0
- package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.d.ts.map +1 -0
- package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.js +19 -0
- package/dist/cjs/src/auth/monkey-patch-header-authorization.spec.js.map +1 -0
- package/dist/cjs/src/client/duck/actions.d.ts +6 -0
- package/dist/cjs/src/client/duck/actions.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/actions.js +54 -0
- package/dist/cjs/src/client/duck/actions.js.map +1 -0
- package/dist/cjs/src/client/duck/epic-recover.d.ts +36 -0
- package/dist/cjs/src/client/duck/epic-recover.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/epic-recover.js +41 -0
- package/dist/cjs/src/client/duck/epic-recover.js.map +1 -0
- package/dist/cjs/src/client/duck/epic-recover.spec.d.ts +3 -0
- package/dist/cjs/src/client/duck/epic-recover.spec.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/epic-recover.spec.js +131 -0
- package/dist/cjs/src/client/duck/epic-recover.spec.js.map +1 -0
- package/dist/cjs/src/client/duck/epics.d.ts +4 -0
- package/dist/cjs/src/client/duck/epics.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/epics.js +36 -0
- package/dist/cjs/src/client/duck/epics.js.map +1 -0
- package/dist/cjs/src/client/duck/mod.d.ts +29 -0
- package/dist/cjs/src/client/duck/mod.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/mod.js +63 -0
- package/dist/cjs/src/client/duck/mod.js.map +1 -0
- package/dist/cjs/src/client/duck/operations.d.ts +23 -0
- package/dist/cjs/src/client/duck/operations.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/operations.js +30 -0
- package/dist/cjs/src/client/duck/operations.js.map +1 -0
- package/dist/cjs/src/client/duck/reducers.d.ts +59 -0
- package/dist/cjs/src/client/duck/reducers.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/reducers.js +51 -0
- package/dist/cjs/src/client/duck/reducers.js.map +1 -0
- package/dist/cjs/src/client/duck/selectors.d.ts +21 -0
- package/dist/cjs/src/client/duck/selectors.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/selectors.js +23 -0
- package/dist/cjs/src/client/duck/selectors.js.map +1 -0
- package/dist/cjs/src/client/duck/tests.spec.d.ts +3 -0
- package/dist/cjs/src/client/duck/tests.spec.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/tests.spec.js +49 -0
- package/dist/cjs/src/client/duck/tests.spec.js.map +1 -0
- package/dist/cjs/src/client/duck/types.d.ts +21 -0
- package/dist/cjs/src/client/duck/types.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/types.js +24 -0
- package/dist/cjs/src/client/duck/types.js.map +1 -0
- package/dist/cjs/src/client/duck/utils.d.ts +21 -0
- package/dist/cjs/src/client/duck/utils.d.ts.map +1 -0
- package/dist/cjs/src/client/duck/utils.js +3 -0
- package/dist/cjs/src/client/duck/utils.js.map +1 -0
- package/dist/cjs/src/client/grpc-manager.d.ts +29 -0
- package/dist/cjs/src/client/grpc-manager.d.ts.map +1 -0
- package/dist/cjs/src/client/grpc-manager.js +359 -0
- package/dist/cjs/src/client/grpc-manager.js.map +1 -0
- package/dist/cjs/src/client/grpc-manager.spec.d.ts +3 -0
- package/dist/cjs/src/client/grpc-manager.spec.d.ts.map +1 -0
- package/dist/cjs/src/client/grpc-manager.spec.js +19 -0
- package/dist/cjs/src/client/grpc-manager.spec.js.map +1 -0
- package/dist/cjs/src/client/payload-store.d.ts +26 -0
- package/dist/cjs/src/client/payload-store.d.ts.map +1 -0
- package/dist/cjs/src/client/payload-store.js +118 -0
- package/dist/cjs/src/client/payload-store.js.map +1 -0
- package/dist/cjs/src/client/payload-store.spec.d.ts +3 -0
- package/dist/cjs/src/client/payload-store.spec.d.ts.map +1 -0
- package/dist/cjs/src/client/payload-store.spec.js +17 -0
- package/dist/cjs/src/client/payload-store.spec.js.map +1 -0
- package/dist/cjs/src/client/puppet-service.d.ts +161 -0
- package/dist/cjs/src/client/puppet-service.d.ts.map +1 -0
- package/dist/cjs/src/client/puppet-service.js +1384 -0
- package/dist/cjs/src/client/puppet-service.js.map +1 -0
- package/dist/cjs/src/client/puppet-service.spec.d.ts +3 -0
- package/dist/cjs/src/client/puppet-service.spec.d.ts.map +1 -0
- package/dist/cjs/src/client/puppet-service.spec.js +55 -0
- package/dist/cjs/src/client/puppet-service.spec.js.map +1 -0
- package/dist/cjs/src/config.d.ts +20 -0
- package/dist/cjs/src/config.d.ts.map +1 -0
- package/dist/cjs/src/config.js +49 -0
- package/dist/cjs/src/config.js.map +1 -0
- package/dist/cjs/src/deprecated/chunk-pb.d.ts +15 -0
- package/dist/cjs/src/deprecated/chunk-pb.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/chunk-pb.js +60 -0
- package/dist/cjs/src/deprecated/chunk-pb.js.map +1 -0
- package/dist/cjs/src/deprecated/chunk-pb.spec.d.ts +3 -0
- package/dist/cjs/src/deprecated/chunk-pb.spec.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/chunk-pb.spec.js +144 -0
- package/dist/cjs/src/deprecated/chunk-pb.spec.js.map +1 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.d.ts +21 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.js +43 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.js.map +1 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.spec.d.ts +3 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.spec.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.spec.js +94 -0
- package/dist/cjs/src/deprecated/conversation-id-file-box.spec.js.map +1 -0
- package/dist/cjs/src/deprecated/file-box-chunk.d.ts +14 -0
- package/dist/cjs/src/deprecated/file-box-chunk.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/file-box-chunk.js +67 -0
- package/dist/cjs/src/deprecated/file-box-chunk.js.map +1 -0
- package/dist/cjs/src/deprecated/file-box-chunk.spec.d.ts +3 -0
- package/dist/cjs/src/deprecated/file-box-chunk.spec.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/file-box-chunk.spec.js +134 -0
- package/dist/cjs/src/deprecated/file-box-chunk.spec.js.map +1 -0
- package/dist/cjs/src/deprecated/file-box-pb.d.ts +15 -0
- package/dist/cjs/src/deprecated/file-box-pb.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/file-box-pb.js +26 -0
- package/dist/cjs/src/deprecated/file-box-pb.js.map +1 -0
- package/dist/cjs/src/deprecated/file-box-pb.spec.d.ts +3 -0
- package/dist/cjs/src/deprecated/file-box-pb.spec.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/file-box-pb.spec.js +18 -0
- package/dist/cjs/src/deprecated/file-box-pb.spec.js.map +1 -0
- package/dist/cjs/src/deprecated/file-box-pb.type.d.ts +15 -0
- package/dist/cjs/src/deprecated/file-box-pb.type.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/file-box-pb.type.js +3 -0
- package/dist/cjs/src/deprecated/file-box-pb.type.js.map +1 -0
- package/dist/cjs/src/deprecated/mod.d.ts +3 -0
- package/dist/cjs/src/deprecated/mod.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/mod.js +10 -0
- package/dist/cjs/src/deprecated/mod.js.map +1 -0
- package/dist/cjs/src/deprecated/next-data.d.ts +7 -0
- package/dist/cjs/src/deprecated/next-data.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/next-data.js +26 -0
- package/dist/cjs/src/deprecated/next-data.js.map +1 -0
- package/dist/cjs/src/deprecated/serialize-file-box.d.ts +6 -0
- package/dist/cjs/src/deprecated/serialize-file-box.d.ts.map +1 -0
- package/dist/cjs/src/deprecated/serialize-file-box.js +22 -0
- package/dist/cjs/src/deprecated/serialize-file-box.js.map +1 -0
- package/dist/cjs/src/env-vars.d.ts +5 -0
- package/dist/cjs/src/env-vars.d.ts.map +1 -0
- package/dist/cjs/src/env-vars.js +88 -0
- package/dist/cjs/src/env-vars.js.map +1 -0
- package/dist/cjs/src/env-vars.spec.d.ts +3 -0
- package/dist/cjs/src/env-vars.spec.d.ts.map +1 -0
- package/dist/cjs/src/env-vars.spec.js +21 -0
- package/dist/cjs/src/env-vars.spec.js.map +1 -0
- package/dist/cjs/src/event-type-rev.d.ts +11 -0
- package/dist/cjs/src/event-type-rev.d.ts.map +1 -0
- package/dist/cjs/src/event-type-rev.js +17 -0
- package/dist/cjs/src/event-type-rev.js.map +1 -0
- package/dist/cjs/src/file-box-helper/mod.d.ts +4 -0
- package/dist/cjs/src/file-box-helper/mod.d.ts.map +1 -0
- package/dist/cjs/src/file-box-helper/mod.js +8 -0
- package/dist/cjs/src/file-box-helper/mod.js.map +1 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.d.ts +6 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.d.ts.map +1 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.js +76 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.js.map +1 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.spec.d.ts +3 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.spec.d.ts.map +1 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.spec.js +35 -0
- package/dist/cjs/src/file-box-helper/normalize-filebox.spec.js.map +1 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.d.ts +6 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.d.ts.map +1 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.js +45 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-grpc.js.map +1 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-local.d.ts +5 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-local.d.ts.map +1 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-local.js +19 -0
- package/dist/cjs/src/file-box-helper/uuidify-file-box-local.js.map +1 -0
- package/dist/cjs/src/mod.d.ts +8 -0
- package/dist/cjs/src/mod.d.ts.map +1 -0
- package/dist/cjs/src/mod.js +13 -0
- package/dist/cjs/src/mod.js.map +1 -0
- package/dist/cjs/src/mod.spec.d.ts +3 -0
- package/dist/cjs/src/mod.spec.d.ts.map +1 -0
- package/dist/cjs/src/mod.spec.js +32 -0
- package/dist/cjs/src/mod.spec.js.map +1 -0
- package/dist/cjs/src/package-json.d.ts +6 -0
- package/dist/cjs/src/package-json.d.ts.map +1 -0
- package/dist/cjs/src/package-json.js +101 -0
- package/dist/cjs/src/package-json.js.map +1 -0
- package/dist/cjs/src/package-json.spec.d.ts +3 -0
- package/dist/cjs/src/package-json.spec.d.ts.map +1 -0
- package/dist/cjs/src/package-json.spec.js +10 -0
- package/dist/cjs/src/package-json.spec.js.map +1 -0
- package/dist/cjs/src/pure-functions/timestamp.d.ts +8 -0
- package/dist/cjs/src/pure-functions/timestamp.d.ts.map +1 -0
- package/dist/cjs/src/pure-functions/timestamp.js +23 -0
- package/dist/cjs/src/pure-functions/timestamp.js.map +1 -0
- package/dist/cjs/src/server/event-stream-manager.d.ts +40 -0
- package/dist/cjs/src/server/event-stream-manager.d.ts.map +1 -0
- package/dist/cjs/src/server/event-stream-manager.js +344 -0
- package/dist/cjs/src/server/event-stream-manager.js.map +1 -0
- package/dist/cjs/src/server/grpc-error.d.ts +5 -0
- package/dist/cjs/src/server/grpc-error.d.ts.map +1 -0
- package/dist/cjs/src/server/grpc-error.js +12 -0
- package/dist/cjs/src/server/grpc-error.js.map +1 -0
- package/dist/cjs/src/server/health-implementation.d.ts +5 -0
- package/dist/cjs/src/server/health-implementation.d.ts.map +1 -0
- package/dist/cjs/src/server/health-implementation.js +55 -0
- package/dist/cjs/src/server/health-implementation.js.map +1 -0
- package/dist/cjs/src/server/puppet-implementation.d.ts +6 -0
- package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -0
- package/dist/cjs/src/server/puppet-implementation.js +1226 -0
- package/dist/cjs/src/server/puppet-implementation.js.map +1 -0
- package/dist/cjs/src/server/puppet-server.d.ts +23 -0
- package/dist/cjs/src/server/puppet-server.d.ts.map +1 -0
- package/dist/cjs/src/server/puppet-server.js +159 -0
- package/dist/cjs/src/server/puppet-server.js.map +1 -0
- package/dist/cjs/src/server/puppet-server.spec.d.ts +3 -0
- package/dist/cjs/src/server/puppet-server.spec.d.ts.map +1 -0
- package/dist/cjs/src/server/puppet-server.spec.js +15 -0
- package/dist/cjs/src/server/puppet-server.spec.js.map +1 -0
- package/dist/cjs/tests/grpc-client.spec.d.ts +3 -0
- package/dist/cjs/tests/grpc-client.spec.d.ts.map +1 -0
- package/dist/cjs/tests/grpc-client.spec.js +137 -0
- package/dist/cjs/tests/grpc-client.spec.js.map +1 -0
- package/dist/cjs/tests/grpc-stream.spec.d.ts +15 -0
- package/dist/cjs/tests/grpc-stream.spec.d.ts.map +1 -0
- package/dist/cjs/tests/grpc-stream.spec.js +67 -0
- package/dist/cjs/tests/grpc-stream.spec.js.map +1 -0
- package/dist/cjs/tests/integration.spec.d.ts +3 -0
- package/dist/cjs/tests/integration.spec.d.ts.map +1 -0
- package/dist/cjs/tests/integration.spec.js +70 -0
- package/dist/cjs/tests/integration.spec.js.map +1 -0
- package/dist/cjs/tests/performance.spec.d.ts +14 -0
- package/dist/cjs/tests/performance.spec.d.ts.map +1 -0
- package/dist/cjs/tests/performance.spec.js +129 -0
- package/dist/cjs/tests/performance.spec.js.map +1 -0
- package/dist/cjs/tests/ready-event.spec.d.ts +3 -0
- package/dist/cjs/tests/ready-event.spec.d.ts.map +1 -0
- package/dist/cjs/tests/ready-event.spec.js +80 -0
- package/dist/cjs/tests/ready-event.spec.js.map +1 -0
- package/dist/cjs/tests/uuid-file-box.spec.d.ts +3 -0
- package/dist/cjs/tests/uuid-file-box.spec.d.ts.map +1 -0
- package/dist/cjs/tests/uuid-file-box.spec.js +77 -0
- package/dist/cjs/tests/uuid-file-box.spec.js.map +1 -0
- package/dist/esm/examples/ding-dong-bot.d.ts +2 -0
- package/dist/esm/examples/ding-dong-bot.d.ts.map +1 -0
- package/dist/esm/examples/ding-dong-bot.js +131 -0
- package/dist/esm/examples/ding-dong-bot.js.map +1 -0
- package/dist/esm/src/auth/auth-impl-token.d.ts +4 -0
- package/dist/esm/src/auth/auth-impl-token.d.ts.map +1 -0
- package/dist/esm/src/auth/auth-impl-token.js +78 -0
- package/dist/esm/src/auth/auth-impl-token.js.map +1 -0
- package/dist/esm/src/auth/auth-impl-token.spec.d.ts +3 -0
- package/dist/esm/src/auth/auth-impl-token.spec.d.ts.map +1 -0
- package/dist/esm/src/auth/auth-impl-token.spec.js +63 -0
- package/dist/esm/src/auth/auth-impl-token.spec.js.map +1 -0
- package/dist/esm/src/auth/ca.d.ts +46 -0
- package/dist/esm/src/auth/ca.d.ts.map +1 -0
- package/dist/esm/src/auth/ca.js +129 -0
- package/dist/esm/src/auth/ca.js.map +1 -0
- package/dist/esm/src/auth/ca.spec.d.ts +3 -0
- package/dist/esm/src/auth/ca.spec.d.ts.map +1 -0
- package/dist/esm/src/auth/ca.spec.js +87 -0
- package/dist/esm/src/auth/ca.spec.js.map +1 -0
- package/dist/esm/src/auth/call-cred.d.ts +9 -0
- package/dist/esm/src/auth/call-cred.d.ts.map +1 -0
- package/dist/esm/src/auth/call-cred.js +13 -0
- package/dist/esm/src/auth/call-cred.js.map +1 -0
- package/dist/esm/src/auth/call-cred.spec.d.ts +3 -0
- package/dist/esm/src/auth/call-cred.spec.d.ts.map +1 -0
- package/dist/esm/src/auth/call-cred.spec.js +16 -0
- package/dist/esm/src/auth/call-cred.spec.js.map +1 -0
- package/dist/esm/src/auth/env-vars.d.ts +13 -0
- package/dist/esm/src/auth/env-vars.d.ts.map +1 -0
- package/dist/esm/src/auth/env-vars.js +21 -0
- package/dist/esm/src/auth/env-vars.js.map +1 -0
- package/dist/esm/src/auth/grpc-js.d.ts +7 -0
- package/dist/esm/src/auth/grpc-js.d.ts.map +1 -0
- package/dist/esm/src/auth/grpc-js.js +4 -0
- package/dist/esm/src/auth/grpc-js.js.map +1 -0
- package/dist/esm/src/auth/mod.d.ts +5 -0
- package/dist/esm/src/auth/mod.d.ts.map +1 -0
- package/dist/esm/src/auth/mod.js +5 -0
- package/dist/esm/src/auth/mod.js.map +1 -0
- package/dist/esm/src/auth/mokey-patch-header-authorization.d.ts +11 -0
- package/dist/esm/src/auth/mokey-patch-header-authorization.d.ts.map +1 -0
- package/dist/esm/src/auth/mokey-patch-header-authorization.js +29 -0
- package/dist/esm/src/auth/mokey-patch-header-authorization.js.map +1 -0
- package/dist/esm/src/auth/monkey-patch-header-authorization.spec.d.ts +3 -0
- package/dist/esm/src/auth/monkey-patch-header-authorization.spec.d.ts.map +1 -0
- package/dist/esm/src/auth/monkey-patch-header-authorization.spec.js +17 -0
- package/dist/esm/src/auth/monkey-patch-header-authorization.spec.js.map +1 -0
- package/dist/esm/src/client/duck/actions.d.ts +6 -0
- package/dist/esm/src/client/duck/actions.d.ts.map +1 -0
- package/dist/esm/src/client/duck/actions.js +28 -0
- package/dist/esm/src/client/duck/actions.js.map +1 -0
- package/dist/esm/src/client/duck/epic-recover.d.ts +36 -0
- package/dist/esm/src/client/duck/epic-recover.d.ts.map +1 -0
- package/dist/esm/src/client/duck/epic-recover.js +36 -0
- package/dist/esm/src/client/duck/epic-recover.js.map +1 -0
- package/dist/esm/src/client/duck/epic-recover.spec.d.ts +3 -0
- package/dist/esm/src/client/duck/epic-recover.spec.d.ts.map +1 -0
- package/dist/esm/src/client/duck/epic-recover.spec.js +126 -0
- package/dist/esm/src/client/duck/epic-recover.spec.js.map +1 -0
- package/dist/esm/src/client/duck/epics.d.ts +4 -0
- package/dist/esm/src/client/duck/epics.d.ts.map +1 -0
- package/dist/esm/src/client/duck/epics.js +33 -0
- package/dist/esm/src/client/duck/epics.js.map +1 -0
- package/dist/esm/src/client/duck/mod.d.ts +29 -0
- package/dist/esm/src/client/duck/mod.d.ts.map +1 -0
- package/dist/esm/src/client/duck/mod.js +29 -0
- package/dist/esm/src/client/duck/mod.js.map +1 -0
- package/dist/esm/src/client/duck/operations.d.ts +23 -0
- package/dist/esm/src/client/duck/operations.d.ts.map +1 -0
- package/dist/esm/src/client/duck/operations.js +4 -0
- package/dist/esm/src/client/duck/operations.js.map +1 -0
- package/dist/esm/src/client/duck/reducers.d.ts +59 -0
- package/dist/esm/src/client/duck/reducers.d.ts.map +1 -0
- package/dist/esm/src/client/duck/reducers.js +26 -0
- package/dist/esm/src/client/duck/reducers.js.map +1 -0
- package/dist/esm/src/client/duck/selectors.d.ts +21 -0
- package/dist/esm/src/client/duck/selectors.d.ts.map +1 -0
- package/dist/esm/src/client/duck/selectors.js +22 -0
- package/dist/esm/src/client/duck/selectors.js.map +1 -0
- package/dist/esm/src/client/duck/tests.spec.d.ts +3 -0
- package/dist/esm/src/client/duck/tests.spec.d.ts.map +1 -0
- package/dist/esm/src/client/duck/tests.spec.js +24 -0
- package/dist/esm/src/client/duck/tests.spec.js.map +1 -0
- package/dist/esm/src/client/duck/types.d.ts +21 -0
- package/dist/esm/src/client/duck/types.d.ts.map +1 -0
- package/dist/esm/src/client/duck/types.js +21 -0
- package/dist/esm/src/client/duck/types.js.map +1 -0
- package/dist/esm/src/client/duck/utils.d.ts +21 -0
- package/dist/esm/src/client/duck/utils.d.ts.map +1 -0
- package/dist/esm/src/client/duck/utils.js +2 -0
- package/dist/esm/src/client/duck/utils.js.map +1 -0
- package/dist/esm/src/client/grpc-manager.d.ts +29 -0
- package/dist/esm/src/client/grpc-manager.d.ts.map +1 -0
- package/dist/esm/src/client/grpc-manager.js +353 -0
- package/dist/esm/src/client/grpc-manager.js.map +1 -0
- package/dist/esm/src/client/grpc-manager.spec.d.ts +3 -0
- package/dist/esm/src/client/grpc-manager.spec.d.ts.map +1 -0
- package/dist/esm/src/client/grpc-manager.spec.js +17 -0
- package/dist/esm/src/client/grpc-manager.spec.js.map +1 -0
- package/dist/esm/src/client/payload-store.d.ts +26 -0
- package/dist/esm/src/client/payload-store.d.ts.map +1 -0
- package/dist/esm/src/client/payload-store.js +112 -0
- package/dist/esm/src/client/payload-store.js.map +1 -0
- package/dist/esm/src/client/payload-store.spec.d.ts +3 -0
- package/dist/esm/src/client/payload-store.spec.d.ts.map +1 -0
- package/dist/esm/src/client/payload-store.spec.js +15 -0
- package/dist/esm/src/client/payload-store.spec.js.map +1 -0
- package/dist/esm/src/client/puppet-service.d.ts +161 -0
- package/dist/esm/src/client/puppet-service.d.ts.map +1 -0
- package/dist/esm/src/client/puppet-service.js +1357 -0
- package/dist/esm/src/client/puppet-service.js.map +1 -0
- package/dist/esm/src/client/puppet-service.spec.d.ts +3 -0
- package/dist/esm/src/client/puppet-service.spec.d.ts.map +1 -0
- package/dist/esm/src/client/puppet-service.spec.js +50 -0
- package/dist/esm/src/client/puppet-service.spec.js.map +1 -0
- package/dist/esm/src/config.d.ts +20 -0
- package/dist/esm/src/config.d.ts.map +1 -0
- package/dist/esm/src/config.js +20 -0
- package/dist/esm/src/config.js.map +1 -0
- package/dist/esm/src/deprecated/chunk-pb.d.ts +15 -0
- package/dist/esm/src/deprecated/chunk-pb.d.ts.map +1 -0
- package/dist/esm/src/deprecated/chunk-pb.js +56 -0
- package/dist/esm/src/deprecated/chunk-pb.js.map +1 -0
- package/dist/esm/src/deprecated/chunk-pb.spec.d.ts +3 -0
- package/dist/esm/src/deprecated/chunk-pb.spec.d.ts.map +1 -0
- package/dist/esm/src/deprecated/chunk-pb.spec.js +142 -0
- package/dist/esm/src/deprecated/chunk-pb.spec.js.map +1 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.d.ts +21 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.d.ts.map +1 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.js +39 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.js.map +1 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.spec.d.ts +3 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.spec.d.ts.map +1 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.spec.js +92 -0
- package/dist/esm/src/deprecated/conversation-id-file-box.spec.js.map +1 -0
- package/dist/esm/src/deprecated/file-box-chunk.d.ts +14 -0
- package/dist/esm/src/deprecated/file-box-chunk.d.ts.map +1 -0
- package/dist/esm/src/deprecated/file-box-chunk.js +63 -0
- package/dist/esm/src/deprecated/file-box-chunk.js.map +1 -0
- package/dist/esm/src/deprecated/file-box-chunk.spec.d.ts +3 -0
- package/dist/esm/src/deprecated/file-box-chunk.spec.d.ts.map +1 -0
- package/dist/esm/src/deprecated/file-box-chunk.spec.js +132 -0
- package/dist/esm/src/deprecated/file-box-chunk.spec.js.map +1 -0
- package/dist/esm/src/deprecated/file-box-pb.d.ts +15 -0
- package/dist/esm/src/deprecated/file-box-pb.d.ts.map +1 -0
- package/dist/esm/src/deprecated/file-box-pb.js +22 -0
- package/dist/esm/src/deprecated/file-box-pb.js.map +1 -0
- package/dist/esm/src/deprecated/file-box-pb.spec.d.ts +3 -0
- package/dist/esm/src/deprecated/file-box-pb.spec.d.ts.map +1 -0
- package/dist/esm/src/deprecated/file-box-pb.spec.js +16 -0
- package/dist/esm/src/deprecated/file-box-pb.spec.js.map +1 -0
- package/dist/esm/src/deprecated/file-box-pb.type.d.ts +15 -0
- package/dist/esm/src/deprecated/file-box-pb.type.d.ts.map +1 -0
- package/dist/esm/src/deprecated/file-box-pb.type.js +2 -0
- package/dist/esm/src/deprecated/file-box-pb.type.js.map +1 -0
- package/dist/esm/src/deprecated/mod.d.ts +3 -0
- package/dist/esm/src/deprecated/mod.d.ts.map +1 -0
- package/dist/esm/src/deprecated/mod.js +3 -0
- package/dist/esm/src/deprecated/mod.js.map +1 -0
- package/dist/esm/src/deprecated/next-data.d.ts +7 -0
- package/dist/esm/src/deprecated/next-data.d.ts.map +1 -0
- package/dist/esm/src/deprecated/next-data.js +23 -0
- package/dist/esm/src/deprecated/next-data.js.map +1 -0
- package/dist/esm/src/deprecated/serialize-file-box.d.ts +6 -0
- package/dist/esm/src/deprecated/serialize-file-box.d.ts.map +1 -0
- package/dist/esm/src/deprecated/serialize-file-box.js +18 -0
- package/dist/esm/src/deprecated/serialize-file-box.js.map +1 -0
- package/dist/esm/src/env-vars.d.ts +5 -0
- package/dist/esm/src/env-vars.d.ts.map +1 -0
- package/dist/esm/src/env-vars.js +83 -0
- package/dist/esm/src/env-vars.js.map +1 -0
- package/dist/esm/src/env-vars.spec.d.ts +3 -0
- package/dist/esm/src/env-vars.spec.d.ts.map +1 -0
- package/dist/esm/src/env-vars.spec.js +19 -0
- package/dist/esm/src/env-vars.spec.js.map +1 -0
- package/dist/esm/src/event-type-rev.d.ts +11 -0
- package/dist/esm/src/event-type-rev.d.ts.map +1 -0
- package/dist/esm/src/event-type-rev.js +14 -0
- package/dist/esm/src/event-type-rev.js.map +1 -0
- package/dist/esm/src/file-box-helper/mod.d.ts +4 -0
- package/dist/esm/src/file-box-helper/mod.d.ts.map +1 -0
- package/dist/esm/src/file-box-helper/mod.js +4 -0
- package/dist/esm/src/file-box-helper/mod.js.map +1 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.d.ts +6 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.d.ts.map +1 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.js +72 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.js.map +1 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.spec.d.ts +3 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.spec.d.ts.map +1 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.spec.js +33 -0
- package/dist/esm/src/file-box-helper/normalize-filebox.spec.js.map +1 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.d.ts +6 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.d.ts.map +1 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.js +42 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-grpc.js.map +1 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-local.d.ts +5 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-local.d.ts.map +1 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-local.js +16 -0
- package/dist/esm/src/file-box-helper/uuidify-file-box-local.js.map +1 -0
- package/dist/esm/src/mod.d.ts +8 -0
- package/dist/esm/src/mod.d.ts.map +1 -0
- package/dist/esm/src/mod.js +7 -0
- package/dist/esm/src/mod.js.map +1 -0
- package/dist/esm/src/mod.spec.d.ts +3 -0
- package/dist/esm/src/mod.spec.d.ts.map +1 -0
- package/dist/esm/src/mod.spec.js +7 -0
- package/dist/esm/src/mod.spec.js.map +1 -0
- package/dist/esm/src/package-json.d.ts +6 -0
- package/dist/esm/src/package-json.d.ts.map +1 -0
- package/dist/esm/src/package-json.js +98 -0
- package/dist/esm/src/package-json.js.map +1 -0
- package/dist/esm/src/package-json.spec.d.ts +3 -0
- package/dist/esm/src/package-json.spec.d.ts.map +1 -0
- package/dist/esm/src/package-json.spec.js +8 -0
- package/dist/esm/src/package-json.spec.js.map +1 -0
- package/dist/esm/src/pure-functions/timestamp.d.ts +8 -0
- package/dist/esm/src/pure-functions/timestamp.d.ts.map +1 -0
- package/dist/esm/src/pure-functions/timestamp.js +19 -0
- package/dist/esm/src/pure-functions/timestamp.js.map +1 -0
- package/dist/esm/src/server/event-stream-manager.d.ts +40 -0
- package/dist/esm/src/server/event-stream-manager.d.ts.map +1 -0
- package/dist/esm/src/server/event-stream-manager.js +318 -0
- package/dist/esm/src/server/event-stream-manager.js.map +1 -0
- package/dist/esm/src/server/grpc-error.d.ts +5 -0
- package/dist/esm/src/server/grpc-error.d.ts.map +1 -0
- package/dist/esm/src/server/grpc-error.js +8 -0
- package/dist/esm/src/server/grpc-error.js.map +1 -0
- package/dist/esm/src/server/health-implementation.d.ts +5 -0
- package/dist/esm/src/server/health-implementation.d.ts.map +1 -0
- package/dist/esm/src/server/health-implementation.js +52 -0
- package/dist/esm/src/server/health-implementation.js.map +1 -0
- package/dist/esm/src/server/puppet-implementation.d.ts +6 -0
- package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -0
- package/dist/esm/src/server/puppet-implementation.js +1200 -0
- package/dist/esm/src/server/puppet-implementation.js.map +1 -0
- package/dist/esm/src/server/puppet-server.d.ts +23 -0
- package/dist/esm/src/server/puppet-server.d.ts.map +1 -0
- package/dist/esm/src/server/puppet-server.js +152 -0
- package/dist/esm/src/server/puppet-server.js.map +1 -0
- package/dist/esm/src/server/puppet-server.spec.d.ts +3 -0
- package/dist/esm/src/server/puppet-server.spec.d.ts.map +1 -0
- package/dist/esm/src/server/puppet-server.spec.js +13 -0
- package/dist/esm/src/server/puppet-server.spec.js.map +1 -0
- package/dist/esm/tests/grpc-client.spec.d.ts +3 -0
- package/dist/esm/tests/grpc-client.spec.d.ts.map +1 -0
- package/dist/esm/tests/grpc-client.spec.js +132 -0
- package/dist/esm/tests/grpc-client.spec.js.map +1 -0
- package/dist/esm/tests/grpc-stream.spec.d.ts +15 -0
- package/dist/esm/tests/grpc-stream.spec.d.ts.map +1 -0
- package/dist/esm/tests/grpc-stream.spec.js +62 -0
- package/dist/esm/tests/grpc-stream.spec.js.map +1 -0
- package/dist/esm/tests/integration.spec.d.ts +3 -0
- package/dist/esm/tests/integration.spec.d.ts.map +1 -0
- package/dist/esm/tests/integration.spec.js +65 -0
- package/dist/esm/tests/integration.spec.js.map +1 -0
- package/dist/esm/tests/performance.spec.d.ts +14 -0
- package/dist/esm/tests/performance.spec.d.ts.map +1 -0
- package/dist/esm/tests/performance.spec.js +104 -0
- package/dist/esm/tests/performance.spec.js.map +1 -0
- package/dist/esm/tests/ready-event.spec.d.ts +3 -0
- package/dist/esm/tests/ready-event.spec.d.ts.map +1 -0
- package/dist/esm/tests/ready-event.spec.js +52 -0
- package/dist/esm/tests/ready-event.spec.js.map +1 -0
- package/dist/esm/tests/uuid-file-box.spec.d.ts +3 -0
- package/dist/esm/tests/uuid-file-box.spec.d.ts.map +1 -0
- package/dist/esm/tests/uuid-file-box.spec.js +49 -0
- package/dist/esm/tests/uuid-file-box.spec.js.map +1 -0
- package/package.json +97 -0
- package/src/auth/README.md +10 -0
- package/src/auth/auth-impl-token.spec.ts +81 -0
- package/src/auth/auth-impl-token.ts +108 -0
- package/src/auth/ca.spec.ts +116 -0
- package/src/auth/ca.ts +137 -0
- package/src/auth/call-cred.spec.ts +25 -0
- package/src/auth/call-cred.ts +22 -0
- package/src/auth/env-vars.ts +32 -0
- package/src/auth/grpc-js.ts +29 -0
- package/src/auth/mod.ts +9 -0
- package/src/auth/mokey-patch-header-authorization.ts +45 -0
- package/src/auth/monkey-patch-header-authorization.spec.ts +26 -0
- package/src/client/duck/actions.ts +31 -0
- package/src/client/duck/epic-recover.spec.ts +180 -0
- package/src/client/duck/epic-recover.ts +109 -0
- package/src/client/duck/epics.ts +53 -0
- package/src/client/duck/mod.ts +38 -0
- package/src/client/duck/operations.ts +28 -0
- package/src/client/duck/reducers.ts +36 -0
- package/src/client/duck/selectors.ts +27 -0
- package/src/client/duck/tests.spec.ts +25 -0
- package/src/client/duck/types.ts +20 -0
- package/src/client/duck/utils.ts +20 -0
- package/src/client/grpc-manager.spec.ts +20 -0
- package/src/client/grpc-manager.ts +440 -0
- package/src/client/payload-store.spec.ts +19 -0
- package/src/client/payload-store.ts +153 -0
- package/src/client/puppet-service.spec.ts +59 -0
- package/src/client/puppet-service.ts +1938 -0
- package/src/config.ts +31 -0
- package/src/deprecated/chunk-pb.spec.ts +210 -0
- package/src/deprecated/chunk-pb.ts +75 -0
- package/src/deprecated/conversation-id-file-box.spec.ts +131 -0
- package/src/deprecated/conversation-id-file-box.ts +72 -0
- package/src/deprecated/file-box-chunk.spec.ts +184 -0
- package/src/deprecated/file-box-chunk.ts +87 -0
- package/src/deprecated/file-box-pb.spec.ts +31 -0
- package/src/deprecated/file-box-pb.ts +41 -0
- package/src/deprecated/file-box-pb.type.ts +16 -0
- package/src/deprecated/mod.ts +8 -0
- package/src/deprecated/next-data.ts +35 -0
- package/src/deprecated/serialize-file-box.ts +24 -0
- package/src/env-vars.spec.ts +23 -0
- package/src/env-vars.ts +100 -0
- package/src/event-type-rev.ts +19 -0
- package/src/file-box-helper/mod.ts +11 -0
- package/src/file-box-helper/normalize-filebox.spec.ts +47 -0
- package/src/file-box-helper/normalize-filebox.ts +90 -0
- package/src/file-box-helper/uuidify-file-box-grpc.ts +83 -0
- package/src/file-box-helper/uuidify-file-box-local.ts +31 -0
- package/src/mod.spec.ts +9 -0
- package/src/mod.ts +25 -0
- package/src/package-json.spec.ts +10 -0
- package/src/package-json.ts +101 -0
- package/src/pure-functions/timestamp.ts +28 -0
- package/src/server/event-stream-manager.ts +383 -0
- package/src/server/grpc-error.ts +23 -0
- package/src/server/health-implementation.ts +78 -0
- package/src/server/puppet-implementation.ts +1539 -0
- package/src/server/puppet-server.spec.ts +21 -0
- package/src/server/puppet-server.ts +239 -0
- package/src/typings.d.ts +68 -0
|
@@ -0,0 +1,1938 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wechaty Open Source Software - https://github.com/wechaty
|
|
3
|
+
*
|
|
4
|
+
* @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
|
|
5
|
+
* Wechaty Contributors <https://github.com/wechaty>.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*
|
|
19
|
+
*/
|
|
20
|
+
import util from 'util'
|
|
21
|
+
import type { Writable } from 'stream'
|
|
22
|
+
import * as PUPPET from '@juzi/wechaty-puppet'
|
|
23
|
+
|
|
24
|
+
import type {
|
|
25
|
+
FileBoxInterface,
|
|
26
|
+
FileBox,
|
|
27
|
+
} from 'file-box'
|
|
28
|
+
import {
|
|
29
|
+
StringValue,
|
|
30
|
+
puppet as grpcPuppet,
|
|
31
|
+
} from '@juzi/wechaty-grpc'
|
|
32
|
+
import {
|
|
33
|
+
puppet$,
|
|
34
|
+
Duck as PuppetDuck,
|
|
35
|
+
} from 'wechaty-redux'
|
|
36
|
+
import {
|
|
37
|
+
Ducks,
|
|
38
|
+
// Bundle,
|
|
39
|
+
} from 'ducks'
|
|
40
|
+
import type { Store } from 'redux'
|
|
41
|
+
// import type { Subscription } from 'rxjs'
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Deprecated. Will be removed after Dec 31, 2022
|
|
45
|
+
*/
|
|
46
|
+
import {
|
|
47
|
+
packConversationIdFileBoxToPb,
|
|
48
|
+
unpackFileBoxFromPb,
|
|
49
|
+
} from '../deprecated/mod.js'
|
|
50
|
+
import { serializeFileBox } from '../deprecated/serialize-file-box.js'
|
|
51
|
+
|
|
52
|
+
import { millisecondsFromTimestamp } from '../pure-functions/timestamp.js'
|
|
53
|
+
|
|
54
|
+
import {
|
|
55
|
+
uuidifyFileBoxGrpc,
|
|
56
|
+
normalizeFileBoxUuid,
|
|
57
|
+
} from '../file-box-helper/mod.js'
|
|
58
|
+
import {
|
|
59
|
+
envVars,
|
|
60
|
+
log,
|
|
61
|
+
VERSION,
|
|
62
|
+
} from '../config.js'
|
|
63
|
+
import {
|
|
64
|
+
EventTypeRev,
|
|
65
|
+
} from '../event-type-rev.js'
|
|
66
|
+
import { packageJson } from '../package-json.js'
|
|
67
|
+
|
|
68
|
+
import { GrpcManager } from './grpc-manager.js'
|
|
69
|
+
import { PayloadStore } from './payload-store.js'
|
|
70
|
+
|
|
71
|
+
export type PuppetServiceOptions = PUPPET.PuppetOptions & {
|
|
72
|
+
authority? : string
|
|
73
|
+
tls?: {
|
|
74
|
+
caCert? : string
|
|
75
|
+
serverName? : string
|
|
76
|
+
/**
|
|
77
|
+
* Huan(202108): only for compatible with old clients/servers
|
|
78
|
+
* for disabling TLS
|
|
79
|
+
*/
|
|
80
|
+
disable? : boolean
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
class PuppetService extends PUPPET.Puppet {
|
|
85
|
+
|
|
86
|
+
static override readonly VERSION = VERSION
|
|
87
|
+
|
|
88
|
+
protected _cleanupCallbackList: (() => void)[]
|
|
89
|
+
protected _payloadStore: PayloadStore
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Wechaty Redux
|
|
93
|
+
*/
|
|
94
|
+
protected _ducks: Ducks<{ puppet: typeof PuppetDuck }>
|
|
95
|
+
protected _store: Store
|
|
96
|
+
|
|
97
|
+
protected _grpcManager?: GrpcManager
|
|
98
|
+
get grpcManager (): GrpcManager {
|
|
99
|
+
if (!this._grpcManager) {
|
|
100
|
+
throw new Error('no grpc manager')
|
|
101
|
+
}
|
|
102
|
+
return this._grpcManager
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* UUIDify:
|
|
107
|
+
* We need to clone a FileBox
|
|
108
|
+
* to set uuid loader/saver with this grpc client
|
|
109
|
+
*/
|
|
110
|
+
protected FileBoxUuid: typeof FileBox
|
|
111
|
+
|
|
112
|
+
constructor (
|
|
113
|
+
public override options: PuppetServiceOptions = {},
|
|
114
|
+
) {
|
|
115
|
+
super(options)
|
|
116
|
+
this._payloadStore = new PayloadStore({
|
|
117
|
+
token: envVars.WECHATY_PUPPET_SERVICE_TOKEN(this.options.token),
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
this.hookPayloadStore()
|
|
121
|
+
|
|
122
|
+
this._ducks = new Ducks({ puppet: PuppetDuck })
|
|
123
|
+
this._store = this._ducks.configureStore()
|
|
124
|
+
|
|
125
|
+
this._cleanupCallbackList = []
|
|
126
|
+
|
|
127
|
+
this.FileBoxUuid = uuidifyFileBoxGrpc(() => this.grpcManager.client)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
protected async serializeFileBox (fileBox: FileBoxInterface): Promise<string> {
|
|
131
|
+
/**
|
|
132
|
+
* 1. if the fileBox is one of type `Url`, `QRCode`, `Uuid`, etc,
|
|
133
|
+
* then it can be serialized by `fileBox.toString()`
|
|
134
|
+
* 2. if the fileBox is one of type `Stream`, `Buffer`, `File`, etc,
|
|
135
|
+
* then it need to be convert to type `Uuid`
|
|
136
|
+
* before serialized by `fileBox.toString()`
|
|
137
|
+
*/
|
|
138
|
+
const normalizedFileBox = await normalizeFileBoxUuid(this.FileBoxUuid)(fileBox)
|
|
139
|
+
return JSON.stringify(normalizedFileBox)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
override name () {
|
|
143
|
+
return packageJson.name || 'wechaty-puppet-service'
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
override version () {
|
|
147
|
+
return packageJson.version || '0.0.0'
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
override async onStart (): Promise<void> {
|
|
151
|
+
log.verbose('PuppetService', 'onStart()')
|
|
152
|
+
|
|
153
|
+
if (this._grpcManager) {
|
|
154
|
+
log.warn('PuppetService', 'onStart() found this.grpc is already existed. dropped.')
|
|
155
|
+
this._grpcManager = undefined
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
log.verbose('PuppetService', 'start() instanciating GrpcManager ...')
|
|
159
|
+
const grpcManager = new GrpcManager(this.options)
|
|
160
|
+
log.verbose('PuppetService', 'start() instanciating GrpcManager ... done')
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Huan(202108): when we started the event stream,
|
|
164
|
+
* the `this.grpc` need to be available for all listeners.
|
|
165
|
+
*/
|
|
166
|
+
this._grpcManager = grpcManager
|
|
167
|
+
|
|
168
|
+
log.verbose('PuppetService', 'start() setting up bridge grpc event stream ...')
|
|
169
|
+
this.bridgeGrpcEventStream(grpcManager)
|
|
170
|
+
log.verbose('PuppetService', 'start() setting up bridge grpc event stream ... done')
|
|
171
|
+
|
|
172
|
+
log.verbose('PuppetService', 'start() starting grpc manager...')
|
|
173
|
+
await grpcManager.start()
|
|
174
|
+
log.verbose('PuppetService', 'start() starting grpc manager... done')
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Ducks management
|
|
178
|
+
*/
|
|
179
|
+
const subscription = puppet$(this)
|
|
180
|
+
.subscribe(this._store.dispatch)
|
|
181
|
+
|
|
182
|
+
this._cleanupCallbackList.push(
|
|
183
|
+
() => subscription.unsubscribe(),
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
log.verbose('PuppetService', 'onStart() ... done')
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
override async onStop (): Promise<void> {
|
|
190
|
+
log.verbose('PuppetService', 'onStop()')
|
|
191
|
+
|
|
192
|
+
this._cleanupCallbackList.map(setImmediate)
|
|
193
|
+
this._cleanupCallbackList.length = 0
|
|
194
|
+
|
|
195
|
+
if (this._grpcManager) {
|
|
196
|
+
log.verbose('PuppetService', 'onStop() stopping grpc manager ...')
|
|
197
|
+
const grpcManager = this._grpcManager
|
|
198
|
+
this._grpcManager = undefined
|
|
199
|
+
await grpcManager.stop()
|
|
200
|
+
log.verbose('PuppetService', 'onStop() stopping grpc manager ... done')
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
log.verbose('PuppetService', 'onStop() ... done')
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
protected hookPayloadStore (): void {
|
|
207
|
+
log.verbose('PuppetService', 'hookPayloadStore()')
|
|
208
|
+
|
|
209
|
+
this.on('login', async ({ contactId }) => {
|
|
210
|
+
try {
|
|
211
|
+
log.verbose('PuppetService', 'hookPayloadStore() this.on(login) contactId: "%s"', contactId)
|
|
212
|
+
await this._payloadStore.start(contactId)
|
|
213
|
+
} catch (e) {
|
|
214
|
+
log.verbose('PuppetService', 'hookPayloadStore() this.on(login) rejection "%s"', (e as Error).message)
|
|
215
|
+
}
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
this.on('logout', async ({ contactId }) => {
|
|
219
|
+
log.verbose('PuppetService', 'hookPayloadStore() this.on(logout) contactId: "%s"', contactId)
|
|
220
|
+
try {
|
|
221
|
+
await this._payloadStore.stop()
|
|
222
|
+
} catch (e) {
|
|
223
|
+
log.verbose('PuppetService', 'hookPayloadStore() this.on(logout) rejection "%s"', (e as Error).message)
|
|
224
|
+
}
|
|
225
|
+
})
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
protected bridgeGrpcEventStream (client: GrpcManager): void {
|
|
229
|
+
log.verbose('PuppetService', 'bridgeGrpcEventStream(client)')
|
|
230
|
+
|
|
231
|
+
client
|
|
232
|
+
.on('data', this.onGrpcStreamEvent.bind(this))
|
|
233
|
+
.on('end', () => {
|
|
234
|
+
log.verbose('PuppetService', 'bridgeGrpcEventStream() eventStream.on(end)')
|
|
235
|
+
})
|
|
236
|
+
.on('error', (e: unknown) => {
|
|
237
|
+
this.emit('error', e)
|
|
238
|
+
// https://github.com/wechaty/wechaty-puppet-service/issues/16
|
|
239
|
+
// log.verbose('PuppetService', 'bridgeGrpcEventStream() eventStream.on(error) %s', e)
|
|
240
|
+
// const reason = 'bridgeGrpcEventStream() eventStream.on(error) ' + e
|
|
241
|
+
/**
|
|
242
|
+
* Huan(202110): simple reset puppet when grpc client has error? (or not?)
|
|
243
|
+
*/
|
|
244
|
+
// this.wrapAsync(this.reset())
|
|
245
|
+
// /**
|
|
246
|
+
// * The `Puppet` class have a throttleQueue for receiving the `reset` events
|
|
247
|
+
// * and it's the `Puppet` class's duty for call the `puppet.reset()` to reset the puppet.
|
|
248
|
+
// */
|
|
249
|
+
// if (this.state.on()) {
|
|
250
|
+
// this.emit('reset', { data: reason })
|
|
251
|
+
// }
|
|
252
|
+
})
|
|
253
|
+
.on('cancel', (...args: any[]) => {
|
|
254
|
+
log.verbose('PuppetService', 'bridgeGrpcEventStream() eventStream.on(cancel), %s', JSON.stringify(args))
|
|
255
|
+
})
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
private onGrpcStreamEvent (event: grpcPuppet.EventResponse): void {
|
|
259
|
+
const type = event.getType()
|
|
260
|
+
const payload = event.getPayload()
|
|
261
|
+
|
|
262
|
+
log.verbose('PuppetService',
|
|
263
|
+
'onGrpcStreamEvent({type:%s(%s), payload(len:%s)})',
|
|
264
|
+
EventTypeRev[type],
|
|
265
|
+
type,
|
|
266
|
+
payload.length,
|
|
267
|
+
)
|
|
268
|
+
log.silly('PuppetService',
|
|
269
|
+
'onGrpcStreamEvent({type:%s(%s), payload:"%s"})',
|
|
270
|
+
EventTypeRev[type],
|
|
271
|
+
type,
|
|
272
|
+
payload,
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
if (type !== grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT) {
|
|
276
|
+
this.emit('heartbeat', {
|
|
277
|
+
data: `onGrpcStreamEvent(${EventTypeRev[type]})`,
|
|
278
|
+
})
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
switch (type) {
|
|
282
|
+
case grpcPuppet.EventType.EVENT_TYPE_DONG:
|
|
283
|
+
this.emit('dong', JSON.parse(payload) as PUPPET.payloads.EventDong)
|
|
284
|
+
break
|
|
285
|
+
case grpcPuppet.EventType.EVENT_TYPE_ERROR:
|
|
286
|
+
this.emit('error', JSON.parse(payload) as PUPPET.payloads.EventError)
|
|
287
|
+
break
|
|
288
|
+
case grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT:
|
|
289
|
+
this.emit('heartbeat', JSON.parse(payload) as PUPPET.payloads.EventHeartbeat)
|
|
290
|
+
break
|
|
291
|
+
case grpcPuppet.EventType.EVENT_TYPE_FRIENDSHIP:
|
|
292
|
+
this.emit('friendship', JSON.parse(payload) as PUPPET.payloads.EventFriendship)
|
|
293
|
+
break
|
|
294
|
+
case grpcPuppet.EventType.EVENT_TYPE_LOGIN:
|
|
295
|
+
{
|
|
296
|
+
const loginPayload = JSON.parse(payload) as PUPPET.payloads.EventLogin
|
|
297
|
+
;(
|
|
298
|
+
async () => this.login(loginPayload.contactId)
|
|
299
|
+
)().catch(e =>
|
|
300
|
+
log.error('PuppetService', 'onGrpcStreamEvent() this.login() rejection %s',
|
|
301
|
+
(e as Error).message,
|
|
302
|
+
),
|
|
303
|
+
)
|
|
304
|
+
}
|
|
305
|
+
break
|
|
306
|
+
case grpcPuppet.EventType.EVENT_TYPE_LOGOUT:
|
|
307
|
+
{
|
|
308
|
+
const logoutPayload = JSON.parse(payload) as PUPPET.payloads.EventLogout
|
|
309
|
+
;(
|
|
310
|
+
async () => this.logout(logoutPayload.data)
|
|
311
|
+
)().catch(e =>
|
|
312
|
+
log.error('PuppetService', 'onGrpcStreamEvent() this.logout() rejection %s',
|
|
313
|
+
(e as Error).message,
|
|
314
|
+
),
|
|
315
|
+
)
|
|
316
|
+
}
|
|
317
|
+
break
|
|
318
|
+
case grpcPuppet.EventType.EVENT_TYPE_DIRTY:
|
|
319
|
+
this.emit('dirty', JSON.parse(payload) as PUPPET.payloads.EventDirty)
|
|
320
|
+
break
|
|
321
|
+
case grpcPuppet.EventType.EVENT_TYPE_MESSAGE:
|
|
322
|
+
this.emit('message', JSON.parse(payload) as PUPPET.payloads.EventMessage)
|
|
323
|
+
break
|
|
324
|
+
case grpcPuppet.EventType.EVENT_TYPE_POST:
|
|
325
|
+
this.emit('post', JSON.parse(payload) as PUPPET.payloads.EventPost)
|
|
326
|
+
break
|
|
327
|
+
case grpcPuppet.EventType.EVENT_TYPE_READY:
|
|
328
|
+
this.emit('ready', JSON.parse(payload) as PUPPET.payloads.EventReady)
|
|
329
|
+
break
|
|
330
|
+
case grpcPuppet.EventType.EVENT_TYPE_ROOM_INVITE:
|
|
331
|
+
this.emit('room-invite', JSON.parse(payload) as PUPPET.payloads.EventRoomInvite)
|
|
332
|
+
break
|
|
333
|
+
case grpcPuppet.EventType.EVENT_TYPE_ROOM_JOIN:
|
|
334
|
+
this.emit('room-join', JSON.parse(payload) as PUPPET.payloads.EventRoomJoin)
|
|
335
|
+
break
|
|
336
|
+
case grpcPuppet.EventType.EVENT_TYPE_ROOM_LEAVE:
|
|
337
|
+
this.emit('room-leave', JSON.parse(payload) as PUPPET.payloads.EventRoomLeave)
|
|
338
|
+
break
|
|
339
|
+
case grpcPuppet.EventType.EVENT_TYPE_ROOM_TOPIC:
|
|
340
|
+
this.emit('room-topic', JSON.parse(payload) as PUPPET.payloads.EventRoomTopic)
|
|
341
|
+
break
|
|
342
|
+
case grpcPuppet.EventType.EVENT_TYPE_SCAN:
|
|
343
|
+
this.emit('scan', JSON.parse(payload) as PUPPET.payloads.EventScan)
|
|
344
|
+
break
|
|
345
|
+
case grpcPuppet.EventType.EVENT_TYPE_RESET:
|
|
346
|
+
log.warn('PuppetService', 'onGrpcStreamEvent() got an EventType.EVENT_TYPE_RESET ?')
|
|
347
|
+
// the `reset` event should be dealed not send out
|
|
348
|
+
break
|
|
349
|
+
|
|
350
|
+
case grpcPuppet.EventType.EVENT_TYPE_UNSPECIFIED:
|
|
351
|
+
log.error('PuppetService', 'onGrpcStreamEvent() got an EventType.EVENT_TYPE_UNSPECIFIED ?')
|
|
352
|
+
break
|
|
353
|
+
|
|
354
|
+
default:
|
|
355
|
+
// Huan(202003): in default, the `type` type should be `never`, please check.
|
|
356
|
+
throw new Error('eventType ' + type + ' unsupported! (code should not reach here)')
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
override async logout (reason?: string): Promise<void> {
|
|
361
|
+
log.verbose('PuppetService', 'logout(%s)', reason ? `"${reason}"` : '')
|
|
362
|
+
|
|
363
|
+
await super.logout(reason)
|
|
364
|
+
|
|
365
|
+
try {
|
|
366
|
+
await util.promisify(
|
|
367
|
+
this.grpcManager.client.logout
|
|
368
|
+
.bind(this.grpcManager.client),
|
|
369
|
+
)(new grpcPuppet.LogoutRequest())
|
|
370
|
+
|
|
371
|
+
} catch (e) {
|
|
372
|
+
log.silly('PuppetService', 'logout() no grpc client')
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
override ding (data: string): void {
|
|
377
|
+
log.silly('PuppetService', 'ding(%s)', data)
|
|
378
|
+
|
|
379
|
+
const request = new grpcPuppet.DingRequest()
|
|
380
|
+
request.setData(data || '')
|
|
381
|
+
|
|
382
|
+
this.grpcManager.client.ding(
|
|
383
|
+
request,
|
|
384
|
+
(error, _response) => {
|
|
385
|
+
if (error) {
|
|
386
|
+
log.error('PuppetService', 'ding() rejection: %s', error)
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
)
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
*
|
|
394
|
+
* Huan(202111) Issue #158 - Refactoring the 'dirty' event, dirtyPayload(),
|
|
395
|
+
* and XXXPayloadDirty() methods logic & spec
|
|
396
|
+
*
|
|
397
|
+
* @see https://github.com/wechaty/puppet/issues/158
|
|
398
|
+
*
|
|
399
|
+
*/
|
|
400
|
+
override async dirtyPayload (type: PUPPET.types.Dirty, id: string) {
|
|
401
|
+
log.verbose('PuppetService', 'dirtyPayload(%s, %s)', type, id)
|
|
402
|
+
|
|
403
|
+
const request = new grpcPuppet.DirtyPayloadRequest()
|
|
404
|
+
request.setId(id)
|
|
405
|
+
request.setType(type as Parameters<typeof request.setType>[0])
|
|
406
|
+
try {
|
|
407
|
+
await util.promisify(
|
|
408
|
+
this.grpcManager.client.dirtyPayload
|
|
409
|
+
.bind(this.grpcManager.client),
|
|
410
|
+
)(request)
|
|
411
|
+
|
|
412
|
+
} catch (e) {
|
|
413
|
+
log.error('PuppetService', 'dirtyPayload() rejection: %s', e && (e as Error).message)
|
|
414
|
+
throw e
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* `onDirty()` is called when the puppet emit `dirty` event.
|
|
420
|
+
* the event listener will be registered in `start()` from the `PuppetAbstract` class
|
|
421
|
+
*/
|
|
422
|
+
override onDirty (
|
|
423
|
+
{
|
|
424
|
+
payloadType,
|
|
425
|
+
payloadId,
|
|
426
|
+
}: PUPPET.payloads.EventDirty,
|
|
427
|
+
): void {
|
|
428
|
+
log.verbose('PuppetService', 'onDirty(%s<%s>, %s)', PUPPET.types.Dirty[payloadType], payloadType, payloadId)
|
|
429
|
+
|
|
430
|
+
const dirtyMap = {
|
|
431
|
+
[PUPPET.types.Dirty.Contact]: async (id: string) => this._payloadStore.contact?.delete(id),
|
|
432
|
+
[PUPPET.types.Dirty.Friendship]: async (_: string) => {},
|
|
433
|
+
[PUPPET.types.Dirty.Message]: async (_: string) => {},
|
|
434
|
+
[PUPPET.types.Dirty.Post]: async (_: string) => {},
|
|
435
|
+
[PUPPET.types.Dirty.Room]: async (id: string) => this._payloadStore.room?.delete(id),
|
|
436
|
+
[PUPPET.types.Dirty.RoomMember]: async (id: string) => this._payloadStore.roomMember?.delete(id),
|
|
437
|
+
[PUPPET.types.Dirty.Unspecified]: async (id: string) => { throw new Error('Unspecified type with id: ' + id) },
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
const dirtyFuncSync = this.wrapAsync(dirtyMap[payloadType])
|
|
441
|
+
dirtyFuncSync(payloadId)
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* We need to call `super.onDirty()` to clean the `PuppetAbstract` LRUCache
|
|
445
|
+
*/
|
|
446
|
+
super.onDirty({ payloadId, payloadType })
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
*
|
|
451
|
+
* Contact
|
|
452
|
+
*
|
|
453
|
+
*/
|
|
454
|
+
override contactAlias (contactId: string) : Promise<string>
|
|
455
|
+
override contactAlias (contactId: string, alias: string | null): Promise<void>
|
|
456
|
+
|
|
457
|
+
override async contactAlias (contactId: string, alias?: string | null): Promise<void | string> {
|
|
458
|
+
log.verbose('PuppetService', 'contactAlias(%s, %s)', contactId, alias)
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Get alias
|
|
462
|
+
*/
|
|
463
|
+
if (typeof alias === 'undefined') {
|
|
464
|
+
const request = new grpcPuppet.ContactAliasRequest()
|
|
465
|
+
request.setId(contactId)
|
|
466
|
+
|
|
467
|
+
const response = await util.promisify(
|
|
468
|
+
this.grpcManager.client.contactAlias
|
|
469
|
+
.bind(this.grpcManager.client),
|
|
470
|
+
)(request)
|
|
471
|
+
|
|
472
|
+
const result = response.getAlias()
|
|
473
|
+
if (result) {
|
|
474
|
+
return result
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
{
|
|
478
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
479
|
+
const aliasWrapper = response.getAliasStringValueDeprecated()
|
|
480
|
+
|
|
481
|
+
if (!aliasWrapper) {
|
|
482
|
+
throw new Error('can not get aliasWrapper')
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
return aliasWrapper.getValue()
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Set alias
|
|
491
|
+
*/
|
|
492
|
+
const request = new grpcPuppet.ContactAliasRequest()
|
|
493
|
+
request.setId(contactId)
|
|
494
|
+
request.setAlias(alias || '') // null -> '', in server, we treat '' as null
|
|
495
|
+
|
|
496
|
+
{
|
|
497
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
498
|
+
const aliasWrapper = new StringValue()
|
|
499
|
+
aliasWrapper.setValue(alias || '') // null -> '', in server, we treat '' as null
|
|
500
|
+
request.setAliasStringValueDeprecated(aliasWrapper)
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
await util.promisify(
|
|
504
|
+
this.grpcManager.client.contactAlias
|
|
505
|
+
.bind(this.grpcManager.client),
|
|
506
|
+
)(request)
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
override async contactPhone (contactId: string, phoneList: string[]): Promise<void> {
|
|
510
|
+
log.verbose('PuppetService', 'contactPhone(%s, %s)', contactId, phoneList)
|
|
511
|
+
|
|
512
|
+
const request = new grpcPuppet.ContactPhoneRequest()
|
|
513
|
+
request.setContactId(contactId)
|
|
514
|
+
request.setPhonesList(phoneList)
|
|
515
|
+
|
|
516
|
+
await util.promisify(
|
|
517
|
+
this.grpcManager.client.contactPhone
|
|
518
|
+
.bind(this.grpcManager.client),
|
|
519
|
+
)(request)
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
override async contactCorporationRemark (contactId: string, corporationRemark: string | null) {
|
|
523
|
+
log.verbose('PuppetService', 'contactCorporationRemark(%s, %s)', contactId, corporationRemark)
|
|
524
|
+
|
|
525
|
+
const request = new grpcPuppet.ContactCorporationRemarkRequest()
|
|
526
|
+
request.setContactId(contactId)
|
|
527
|
+
if (corporationRemark) {
|
|
528
|
+
request.setCorporationRemark(corporationRemark)
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
{
|
|
532
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
533
|
+
const corporationRemarkWrapper = new StringValue()
|
|
534
|
+
if (corporationRemark) {
|
|
535
|
+
corporationRemarkWrapper.setValue(corporationRemark)
|
|
536
|
+
request.setCorporationRemarkStringValueDeprecated(corporationRemarkWrapper)
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
await util.promisify(
|
|
541
|
+
this.grpcManager.client.contactCorporationRemark
|
|
542
|
+
.bind(this.grpcManager.client),
|
|
543
|
+
)(request)
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
override async contactDescription (contactId: string, description: string | null) {
|
|
547
|
+
log.verbose('PuppetService', 'contactDescription(%s, %s)', contactId, description)
|
|
548
|
+
|
|
549
|
+
const request = new grpcPuppet.ContactDescriptionRequest()
|
|
550
|
+
request.setContactId(contactId)
|
|
551
|
+
if (description) {
|
|
552
|
+
request.setDescription(description)
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
{
|
|
556
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
557
|
+
const descriptionWrapper = new StringValue()
|
|
558
|
+
if (description) {
|
|
559
|
+
descriptionWrapper.setValue(description)
|
|
560
|
+
request.setDescriptionStringValueDeprecated(descriptionWrapper)
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
await util.promisify(
|
|
565
|
+
this.grpcManager.client.contactDescription
|
|
566
|
+
.bind(this.grpcManager.client),
|
|
567
|
+
)(request)
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
override async contactList (): Promise<string[]> {
|
|
571
|
+
log.verbose('PuppetService', 'contactList()')
|
|
572
|
+
|
|
573
|
+
const response = await util.promisify(
|
|
574
|
+
this.grpcManager.client.contactList
|
|
575
|
+
.bind(this.grpcManager.client),
|
|
576
|
+
)(new grpcPuppet.ContactListRequest())
|
|
577
|
+
|
|
578
|
+
return response.getIdsList()
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
override async contactAvatar (contactId: string) : Promise<FileBoxInterface>
|
|
582
|
+
override async contactAvatar (contactId: string, file: FileBoxInterface) : Promise<void>
|
|
583
|
+
|
|
584
|
+
override async contactAvatar (contactId: string, fileBox?: FileBoxInterface): Promise<void | FileBoxInterface> {
|
|
585
|
+
log.verbose('PuppetService', 'contactAvatar(%s)', contactId)
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* 1. set
|
|
589
|
+
*/
|
|
590
|
+
if (fileBox) {
|
|
591
|
+
const request = new grpcPuppet.ContactAvatarRequest()
|
|
592
|
+
request.setId(contactId)
|
|
593
|
+
|
|
594
|
+
const serializedFileBox = await this.serializeFileBox(fileBox)
|
|
595
|
+
request.setFileBox(serializedFileBox)
|
|
596
|
+
|
|
597
|
+
{
|
|
598
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
599
|
+
const fileboxWrapper = new StringValue()
|
|
600
|
+
fileboxWrapper.setValue(await serializeFileBox(fileBox))
|
|
601
|
+
request.setFileboxStringValueDeprecated(fileboxWrapper)
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
await util.promisify(
|
|
605
|
+
this.grpcManager.client.contactAvatar
|
|
606
|
+
.bind(this.grpcManager.client),
|
|
607
|
+
)(request)
|
|
608
|
+
|
|
609
|
+
return
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* 2. get
|
|
614
|
+
*/
|
|
615
|
+
const request = new grpcPuppet.ContactAvatarRequest()
|
|
616
|
+
request.setId(contactId)
|
|
617
|
+
|
|
618
|
+
const response = await util.promisify(
|
|
619
|
+
this.grpcManager.client.contactAvatar
|
|
620
|
+
.bind(this.grpcManager.client),
|
|
621
|
+
)(request)
|
|
622
|
+
|
|
623
|
+
let jsonText: string
|
|
624
|
+
jsonText = response.getFileBox()
|
|
625
|
+
|
|
626
|
+
{
|
|
627
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
628
|
+
const deprecated = true
|
|
629
|
+
void deprecated
|
|
630
|
+
|
|
631
|
+
if (!jsonText) {
|
|
632
|
+
const textWrapper = response.getFileboxStringValueDeprecated()
|
|
633
|
+
if (!textWrapper) {
|
|
634
|
+
throw new Error('can not get textWrapper')
|
|
635
|
+
}
|
|
636
|
+
jsonText = textWrapper.getValue()
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
return this.FileBoxUuid.fromJSON(jsonText)
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
override async contactRawPayload (id: string): Promise<PUPPET.payloads.Contact> {
|
|
644
|
+
log.verbose('PuppetService', 'contactRawPayload(%s)', id)
|
|
645
|
+
|
|
646
|
+
const cachedPayload = await this._payloadStore.contact?.get(id)
|
|
647
|
+
if (cachedPayload) {
|
|
648
|
+
log.silly('PuppetService', 'contactRawPayload(%s) cache HIT', id)
|
|
649
|
+
return cachedPayload
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
const request = new grpcPuppet.ContactPayloadRequest()
|
|
653
|
+
request.setId(id)
|
|
654
|
+
|
|
655
|
+
const response = await util.promisify(
|
|
656
|
+
this.grpcManager.client.contactPayload
|
|
657
|
+
.bind(this.grpcManager.client),
|
|
658
|
+
)(request)
|
|
659
|
+
|
|
660
|
+
const payload: PUPPET.payloads.Contact = {
|
|
661
|
+
address : response.getAddress(),
|
|
662
|
+
alias : response.getAlias(),
|
|
663
|
+
avatar : response.getAvatar(),
|
|
664
|
+
city : response.getCity(),
|
|
665
|
+
corporation : response.getCorporation(),
|
|
666
|
+
coworker : response.getCoworker(),
|
|
667
|
+
description : response.getDescription(),
|
|
668
|
+
friend : response.getFriend(),
|
|
669
|
+
gender : response.getGender() as number,
|
|
670
|
+
/**
|
|
671
|
+
* Huan(202203): rename `getWeixin()` to `getHandle()` in v2.0.0
|
|
672
|
+
* @link https://github.com/wechaty/grpc/issues/174
|
|
673
|
+
*/
|
|
674
|
+
handle : response.getWeixin(),
|
|
675
|
+
id : response.getId(),
|
|
676
|
+
name : response.getName(),
|
|
677
|
+
phone : response.getPhonesList(),
|
|
678
|
+
province : response.getProvince(),
|
|
679
|
+
signature : response.getSignature(),
|
|
680
|
+
star : response.getStar(),
|
|
681
|
+
title : response.getTitle(),
|
|
682
|
+
type : response.getType() as number,
|
|
683
|
+
/**
|
|
684
|
+
* `weixin` is deprecated, will be removed after Dec 31, 2022
|
|
685
|
+
* use `handle` instead.
|
|
686
|
+
*/
|
|
687
|
+
weixin : response.getWeixin(),
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
await this._payloadStore.contact?.set(id, payload)
|
|
691
|
+
log.silly('PuppetService', 'contactRawPayload(%s) cache SET', id)
|
|
692
|
+
|
|
693
|
+
return payload
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
override async contactRawPayloadParser (payload: PUPPET.payloads.Contact): Promise<PUPPET.payloads.Contact> {
|
|
697
|
+
// log.silly('PuppetService', 'contactRawPayloadParser({id:%s})', payload.id)
|
|
698
|
+
// passthrough
|
|
699
|
+
return payload
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
override async contactSelfName (name: string): Promise<void> {
|
|
703
|
+
log.verbose('PuppetService', 'contactSelfName(%s)', name)
|
|
704
|
+
|
|
705
|
+
const request = new grpcPuppet.ContactSelfNameRequest()
|
|
706
|
+
request.setName(name)
|
|
707
|
+
|
|
708
|
+
await util.promisify(
|
|
709
|
+
this.grpcManager.client.contactSelfName
|
|
710
|
+
.bind(this.grpcManager.client),
|
|
711
|
+
)(request)
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
override async contactSelfQRCode (): Promise<string> {
|
|
715
|
+
log.verbose('PuppetService', 'contactSelfQRCode()')
|
|
716
|
+
|
|
717
|
+
const response = await util.promisify(
|
|
718
|
+
this.grpcManager.client.contactSelfQRCode
|
|
719
|
+
.bind(this.grpcManager.client),
|
|
720
|
+
)(new grpcPuppet.ContactSelfQRCodeRequest())
|
|
721
|
+
|
|
722
|
+
return response.getQrcode()
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
override async contactSelfSignature (signature: string): Promise<void> {
|
|
726
|
+
log.verbose('PuppetService', 'contactSelfSignature(%s)', signature)
|
|
727
|
+
|
|
728
|
+
const request = new grpcPuppet.ContactSelfSignatureRequest()
|
|
729
|
+
request.setSignature(signature)
|
|
730
|
+
|
|
731
|
+
await util.promisify(
|
|
732
|
+
this.grpcManager.client.contactSelfSignature
|
|
733
|
+
.bind(this.grpcManager.client),
|
|
734
|
+
)(request)
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
*
|
|
739
|
+
* Conversation
|
|
740
|
+
*
|
|
741
|
+
*/
|
|
742
|
+
override conversationReadMark (
|
|
743
|
+
conversationId: string,
|
|
744
|
+
hasRead = true,
|
|
745
|
+
) : Promise<void> {
|
|
746
|
+
log.verbose('PuppetService', 'conversationMarkRead(%s, %s)', conversationId, hasRead)
|
|
747
|
+
return PUPPET.throwUnsupportedError('not implemented. See https://github.com/wechaty/wechaty-puppet/pull/132')
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
*
|
|
752
|
+
* Message
|
|
753
|
+
*
|
|
754
|
+
*/
|
|
755
|
+
override async messageMiniProgram (
|
|
756
|
+
messageId: string,
|
|
757
|
+
): Promise<PUPPET.payloads.MiniProgram> {
|
|
758
|
+
log.verbose('PuppetService', 'messageMiniProgram(%s)', messageId)
|
|
759
|
+
|
|
760
|
+
const request = new grpcPuppet.MessageMiniProgramRequest()
|
|
761
|
+
request.setId(messageId)
|
|
762
|
+
|
|
763
|
+
const response = await util.promisify(
|
|
764
|
+
this.grpcManager.client.messageMiniProgram
|
|
765
|
+
.bind(this.grpcManager.client),
|
|
766
|
+
)(request)
|
|
767
|
+
|
|
768
|
+
let miniProgramPayload = response.getMiniProgram()?.toObject()
|
|
769
|
+
if (!miniProgramPayload) {
|
|
770
|
+
/**
|
|
771
|
+
* Deprecated: will be removed after Dec 22, 2022
|
|
772
|
+
*/
|
|
773
|
+
const jsonText = response.getMiniProgramDeprecated()
|
|
774
|
+
miniProgramPayload = JSON.parse(jsonText)
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
const payload: PUPPET.payloads.MiniProgram = {
|
|
778
|
+
...miniProgramPayload,
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
return payload
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
override async messageLocation (
|
|
785
|
+
messageId: string,
|
|
786
|
+
): Promise<PUPPET.payloads.Location> {
|
|
787
|
+
log.verbose('PuppetService', 'messageLocation(%s)', messageId)
|
|
788
|
+
|
|
789
|
+
const request = new grpcPuppet.MessageLocationRequest()
|
|
790
|
+
request.setId(messageId)
|
|
791
|
+
|
|
792
|
+
const response = await util.promisify(
|
|
793
|
+
this.grpcManager.client.messageLocation
|
|
794
|
+
.bind(this.grpcManager.client),
|
|
795
|
+
)(request)
|
|
796
|
+
|
|
797
|
+
const locationPayload = response.getLocation()
|
|
798
|
+
const payload: PUPPET.payloads.Location = {
|
|
799
|
+
accuracy : 0,
|
|
800
|
+
address : 'NOADDRESS',
|
|
801
|
+
latitude : 0,
|
|
802
|
+
longitude : 0,
|
|
803
|
+
name : 'NONAME',
|
|
804
|
+
...locationPayload,
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
return payload
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
override async messageImage (
|
|
811
|
+
messageId: string,
|
|
812
|
+
imageType: PUPPET.types.Image,
|
|
813
|
+
): Promise<FileBoxInterface> {
|
|
814
|
+
log.verbose('PuppetService', 'messageImage(%s, %s[%s])',
|
|
815
|
+
messageId,
|
|
816
|
+
imageType,
|
|
817
|
+
PUPPET.types.Image[imageType],
|
|
818
|
+
)
|
|
819
|
+
|
|
820
|
+
try {
|
|
821
|
+
const request = new grpcPuppet.MessageImageRequest()
|
|
822
|
+
request.setId(messageId)
|
|
823
|
+
request.setType(imageType)
|
|
824
|
+
|
|
825
|
+
const response = await util.promisify(
|
|
826
|
+
this.grpcManager.client.messageImage
|
|
827
|
+
.bind(this.grpcManager.client),
|
|
828
|
+
)(request)
|
|
829
|
+
|
|
830
|
+
const jsonText = response.getFileBox()
|
|
831
|
+
|
|
832
|
+
if (jsonText) {
|
|
833
|
+
return this.FileBoxUuid.fromJSON(jsonText)
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
} catch (e) {
|
|
837
|
+
log.verbose('PuppetService', 'messageImage() rejection %s', (e as Error).message)
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
{
|
|
841
|
+
// Deprecated. Will be removed after Dec 31, 2022
|
|
842
|
+
const request = new grpcPuppet.MessageImageStreamRequest()
|
|
843
|
+
request.setId(messageId)
|
|
844
|
+
request.setType(imageType)
|
|
845
|
+
|
|
846
|
+
const pbStream = this.grpcManager.client.messageImageStream(request)
|
|
847
|
+
const fileBox = await unpackFileBoxFromPb(pbStream)
|
|
848
|
+
// const fileBoxChunkStream = unpackFileBoxChunk(stream)
|
|
849
|
+
// return unpackFileBox(fileBoxChunkStream)
|
|
850
|
+
return fileBox
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
override async messageContact (
|
|
855
|
+
messageId: string,
|
|
856
|
+
): Promise<string> {
|
|
857
|
+
log.verbose('PuppetService', 'messageContact(%s)', messageId)
|
|
858
|
+
|
|
859
|
+
const request = new grpcPuppet.MessageContactRequest()
|
|
860
|
+
request.setId(messageId)
|
|
861
|
+
|
|
862
|
+
const response = await util.promisify(
|
|
863
|
+
this.grpcManager.client.messageContact
|
|
864
|
+
.bind(this.grpcManager.client),
|
|
865
|
+
)(request)
|
|
866
|
+
|
|
867
|
+
const contactId = response.getId()
|
|
868
|
+
return contactId
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
override async messageSendMiniProgram (
|
|
872
|
+
conversationId : string,
|
|
873
|
+
miniProgramPayload : PUPPET.payloads.MiniProgram,
|
|
874
|
+
): Promise<void | string> {
|
|
875
|
+
log.verbose('PuppetService', 'messageSendMiniProgram(%s, "%s")', conversationId, JSON.stringify(miniProgramPayload))
|
|
876
|
+
|
|
877
|
+
const request = new grpcPuppet.MessageSendMiniProgramRequest()
|
|
878
|
+
request.setConversationId(conversationId)
|
|
879
|
+
|
|
880
|
+
const pbMiniProgramPayload = new grpcPuppet.MiniProgramPayload()
|
|
881
|
+
if (miniProgramPayload.appid) { pbMiniProgramPayload.setAppid(miniProgramPayload.appid) }
|
|
882
|
+
if (miniProgramPayload.description) { pbMiniProgramPayload.setDescription(miniProgramPayload.description) }
|
|
883
|
+
if (miniProgramPayload.iconUrl) { pbMiniProgramPayload.setIconUrl(miniProgramPayload.iconUrl) }
|
|
884
|
+
if (miniProgramPayload.pagePath) { pbMiniProgramPayload.setPagePath(miniProgramPayload.pagePath) }
|
|
885
|
+
if (miniProgramPayload.shareId) { pbMiniProgramPayload.setShareId(miniProgramPayload.shareId) }
|
|
886
|
+
if (miniProgramPayload.thumbKey) { pbMiniProgramPayload.setThumbKey(miniProgramPayload.thumbKey) }
|
|
887
|
+
if (miniProgramPayload.thumbUrl) { pbMiniProgramPayload.setThumbUrl(miniProgramPayload.thumbUrl) }
|
|
888
|
+
if (miniProgramPayload.title) { pbMiniProgramPayload.setTitle(miniProgramPayload.title) }
|
|
889
|
+
if (miniProgramPayload.username) { pbMiniProgramPayload.setUsername(miniProgramPayload.username) }
|
|
890
|
+
request.setMiniProgram(pbMiniProgramPayload)
|
|
891
|
+
|
|
892
|
+
/**
|
|
893
|
+
* Deprecated: will be removed after Dec 31, 2022
|
|
894
|
+
*/
|
|
895
|
+
request.setMiniProgramDeprecated(JSON.stringify(miniProgramPayload))
|
|
896
|
+
|
|
897
|
+
const response = await util.promisify(
|
|
898
|
+
this.grpcManager.client.messageSendMiniProgram
|
|
899
|
+
.bind(this.grpcManager.client),
|
|
900
|
+
)(request)
|
|
901
|
+
|
|
902
|
+
const messageId = response.getId()
|
|
903
|
+
|
|
904
|
+
if (messageId) {
|
|
905
|
+
return messageId
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
{
|
|
909
|
+
/**
|
|
910
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
911
|
+
*/
|
|
912
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
913
|
+
|
|
914
|
+
if (messageIdWrapper) {
|
|
915
|
+
return messageIdWrapper.getValue()
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
override async messageSendLocation (
|
|
921
|
+
conversationId: string,
|
|
922
|
+
locationPayload: PUPPET.payloads.Location,
|
|
923
|
+
): Promise<void | string> {
|
|
924
|
+
log.verbose('PuppetService', 'messageSendLocation(%s)', conversationId, JSON.stringify(locationPayload))
|
|
925
|
+
|
|
926
|
+
const request = new grpcPuppet.MessageSendLocationRequest()
|
|
927
|
+
request.setConversationId(conversationId)
|
|
928
|
+
|
|
929
|
+
const pbLocationPayload = new grpcPuppet.LocationPayload()
|
|
930
|
+
pbLocationPayload.setAccuracy(locationPayload.accuracy)
|
|
931
|
+
pbLocationPayload.setAddress(locationPayload.address)
|
|
932
|
+
pbLocationPayload.setLatitude(locationPayload.latitude)
|
|
933
|
+
pbLocationPayload.setLongitude(locationPayload.longitude)
|
|
934
|
+
pbLocationPayload.setName(locationPayload.name)
|
|
935
|
+
request.setLocation(pbLocationPayload)
|
|
936
|
+
|
|
937
|
+
const response = await util.promisify(
|
|
938
|
+
this.grpcManager.client.messageSendLocation
|
|
939
|
+
.bind(this.grpcManager.client),
|
|
940
|
+
)(request)
|
|
941
|
+
|
|
942
|
+
const id = response.getId()
|
|
943
|
+
|
|
944
|
+
if (id) {
|
|
945
|
+
return id
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
override async messageRecall (
|
|
950
|
+
messageId: string,
|
|
951
|
+
): Promise<boolean> {
|
|
952
|
+
log.verbose('PuppetService', 'messageRecall(%s)', messageId)
|
|
953
|
+
|
|
954
|
+
const request = new grpcPuppet.MessageRecallRequest()
|
|
955
|
+
request.setId(messageId)
|
|
956
|
+
|
|
957
|
+
const response = await util.promisify(
|
|
958
|
+
this.grpcManager.client.messageRecall
|
|
959
|
+
.bind(this.grpcManager.client),
|
|
960
|
+
)(request)
|
|
961
|
+
|
|
962
|
+
return response.getSuccess()
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
override async messageFile (id: string): Promise<FileBoxInterface> {
|
|
966
|
+
log.verbose('PuppetService', 'messageFile(%s)', id)
|
|
967
|
+
|
|
968
|
+
try {
|
|
969
|
+
const request = new grpcPuppet.MessageFileRequest()
|
|
970
|
+
request.setId(id)
|
|
971
|
+
const response = await util.promisify(
|
|
972
|
+
this.grpcManager.client.messageFile
|
|
973
|
+
.bind(this.grpcManager.client),
|
|
974
|
+
)(request)
|
|
975
|
+
|
|
976
|
+
const jsonText = response.getFileBox()
|
|
977
|
+
if (jsonText) {
|
|
978
|
+
return this.FileBoxUuid.fromJSON(jsonText)
|
|
979
|
+
}
|
|
980
|
+
} catch (e) {
|
|
981
|
+
log.warn('PuppetService', 'messageFile() rejection: %s', (e as Error).message)
|
|
982
|
+
log.warn('PuppetService', [
|
|
983
|
+
'This might because you are using Wechaty v1.x with a Puppet Service v0.x',
|
|
984
|
+
'Contact your Wechaty Puppet Service provided to report this problem',
|
|
985
|
+
'Related issues:',
|
|
986
|
+
' - https://github.com/wechaty/puppet-service/issues/179',
|
|
987
|
+
' - https://github.com/wechaty/puppet-service/pull/170',
|
|
988
|
+
].join('\n'))
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
{
|
|
992
|
+
// Deprecated. `MessageFileStream` Will be removed after Dec 31, 2022
|
|
993
|
+
const request = new grpcPuppet.MessageFileStreamRequest()
|
|
994
|
+
request.setId(id)
|
|
995
|
+
|
|
996
|
+
const pbStream = this.grpcManager.client.messageFileStream(request)
|
|
997
|
+
// const fileBoxChunkStream = unpackFileBoxChunk(pbStream)
|
|
998
|
+
// return unpackFileBox(fileBoxChunkStream)
|
|
999
|
+
const fileBox = await unpackFileBoxFromPb(pbStream)
|
|
1000
|
+
return fileBox
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
override async messageForward (
|
|
1005
|
+
conversationId: string,
|
|
1006
|
+
messageId: string,
|
|
1007
|
+
): Promise<string | void> {
|
|
1008
|
+
log.verbose('PuppetService', 'messageForward(%s, %s)', conversationId, messageId)
|
|
1009
|
+
|
|
1010
|
+
const request = new grpcPuppet.MessageForwardRequest()
|
|
1011
|
+
request.setConversationId(conversationId)
|
|
1012
|
+
request.setMessageId(messageId)
|
|
1013
|
+
|
|
1014
|
+
const response = await util.promisify(
|
|
1015
|
+
this.grpcManager.client.messageForward
|
|
1016
|
+
.bind(this.grpcManager.client),
|
|
1017
|
+
)(request)
|
|
1018
|
+
|
|
1019
|
+
const forwardedMessageId = response.getId()
|
|
1020
|
+
|
|
1021
|
+
if (forwardedMessageId) {
|
|
1022
|
+
return forwardedMessageId
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
{
|
|
1026
|
+
/**
|
|
1027
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1028
|
+
*/
|
|
1029
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
1030
|
+
|
|
1031
|
+
if (messageIdWrapper) {
|
|
1032
|
+
return messageIdWrapper.getValue()
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
override async messageRawPayload (id: string): Promise<PUPPET.payloads.Message> {
|
|
1038
|
+
log.verbose('PuppetService', 'messageRawPayload(%s)', id)
|
|
1039
|
+
|
|
1040
|
+
// const cachedPayload = await this.payloadStore.message?.get(id)
|
|
1041
|
+
// if (cachedPayload) {
|
|
1042
|
+
// log.silly('PuppetService', 'messageRawPayload(%s) cache HIT', id)
|
|
1043
|
+
// return cachedPayload
|
|
1044
|
+
// }
|
|
1045
|
+
|
|
1046
|
+
const request = new grpcPuppet.MessagePayloadRequest()
|
|
1047
|
+
request.setId(id)
|
|
1048
|
+
|
|
1049
|
+
const response = await util.promisify(
|
|
1050
|
+
this.grpcManager.client.messagePayload
|
|
1051
|
+
.bind(this.grpcManager.client),
|
|
1052
|
+
)(request)
|
|
1053
|
+
|
|
1054
|
+
let timestamp
|
|
1055
|
+
const receiveTime = response.getReceiveTime()
|
|
1056
|
+
if (receiveTime) {
|
|
1057
|
+
timestamp = millisecondsFromTimestamp(receiveTime)
|
|
1058
|
+
} else {
|
|
1059
|
+
// Deprecated: will be removed after Dec 31, 2022
|
|
1060
|
+
timestamp = response.getTimestampDeprecated()
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
const payload: PUPPET.payloads.Message = {
|
|
1064
|
+
filename : response.getFilename(),
|
|
1065
|
+
id : response.getId(),
|
|
1066
|
+
listenerId : response.getListenerId(),
|
|
1067
|
+
mentionIdList : response.getMentionIdsList(),
|
|
1068
|
+
roomId : response.getRoomId(),
|
|
1069
|
+
talkerId : response.getTalkerId(),
|
|
1070
|
+
text : response.getText(),
|
|
1071
|
+
timestamp,
|
|
1072
|
+
type : response.getType() as number,
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
// log.silly('PuppetService', 'messageRawPayload(%s) cache SET', id)
|
|
1076
|
+
// await this.payloadStore.message?.set(id, payload)
|
|
1077
|
+
|
|
1078
|
+
return payload
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
override async messageRawPayloadParser (payload: PUPPET.payloads.Message): Promise<PUPPET.payloads.Message> {
|
|
1082
|
+
// log.silly('PuppetService', 'messagePayload({id:%s})', payload.id)
|
|
1083
|
+
// passthrough
|
|
1084
|
+
return payload
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
override async messageSendText (
|
|
1088
|
+
conversationId : string,
|
|
1089
|
+
text : string,
|
|
1090
|
+
mentionIdList? : string[],
|
|
1091
|
+
): Promise<void | string> {
|
|
1092
|
+
log.verbose('PuppetService', 'messageSend(%s, %s)', conversationId, text)
|
|
1093
|
+
|
|
1094
|
+
const request = new grpcPuppet.MessageSendTextRequest()
|
|
1095
|
+
request.setConversationId(conversationId)
|
|
1096
|
+
request.setText(text)
|
|
1097
|
+
if (typeof mentionIdList !== 'undefined') {
|
|
1098
|
+
request.setMentionalIdsList(mentionIdList)
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
const response = await util.promisify(
|
|
1102
|
+
this.grpcManager.client.messageSendText
|
|
1103
|
+
.bind(this.grpcManager.client),
|
|
1104
|
+
)(request)
|
|
1105
|
+
|
|
1106
|
+
const messageId = response.getId()
|
|
1107
|
+
|
|
1108
|
+
if (messageId) {
|
|
1109
|
+
return messageId
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
{
|
|
1113
|
+
/**
|
|
1114
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1115
|
+
*/
|
|
1116
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
1117
|
+
|
|
1118
|
+
if (messageIdWrapper) {
|
|
1119
|
+
return messageIdWrapper.getValue()
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
override async messageSendFile (
|
|
1125
|
+
conversationId : string,
|
|
1126
|
+
fileBox : FileBoxInterface,
|
|
1127
|
+
): Promise<void | string> {
|
|
1128
|
+
log.verbose('PuppetService', 'messageSendFile(%s, %s)', conversationId, fileBox)
|
|
1129
|
+
|
|
1130
|
+
try {
|
|
1131
|
+
const request = new grpcPuppet.MessageSendFileRequest()
|
|
1132
|
+
request.setConversationId(conversationId)
|
|
1133
|
+
|
|
1134
|
+
const serializedFileBox = await this.serializeFileBox(fileBox)
|
|
1135
|
+
request.setFileBox(serializedFileBox)
|
|
1136
|
+
|
|
1137
|
+
const response = await util.promisify(
|
|
1138
|
+
this.grpcManager.client.messageSendFile
|
|
1139
|
+
.bind(this.grpcManager.client),
|
|
1140
|
+
)(request)
|
|
1141
|
+
|
|
1142
|
+
const messageId = response.getId()
|
|
1143
|
+
|
|
1144
|
+
if (messageId) {
|
|
1145
|
+
return messageId
|
|
1146
|
+
} else {
|
|
1147
|
+
/**
|
|
1148
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1149
|
+
*/
|
|
1150
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
1151
|
+
if (messageIdWrapper) {
|
|
1152
|
+
return messageIdWrapper.getValue()
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
return // void
|
|
1157
|
+
|
|
1158
|
+
} catch (e) {
|
|
1159
|
+
log.verbose('PuppetService', 'messageSendFile() rejection: %s', (e as Error).message)
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/**
|
|
1163
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1164
|
+
* The old server will not support `Upload` gRPC method,
|
|
1165
|
+
* which I'm expecting the above code will throw a exception,
|
|
1166
|
+
* then the below code will be executed.
|
|
1167
|
+
*/
|
|
1168
|
+
return this.messageSendFileStream(conversationId, fileBox)
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1171
|
+
override async messageSendContact (
|
|
1172
|
+
conversationId : string,
|
|
1173
|
+
contactId : string,
|
|
1174
|
+
): Promise<void | string> {
|
|
1175
|
+
log.verbose('PuppetService', 'messageSend("%s", %s)', conversationId, contactId)
|
|
1176
|
+
|
|
1177
|
+
const request = new grpcPuppet.MessageSendContactRequest()
|
|
1178
|
+
request.setConversationId(conversationId)
|
|
1179
|
+
request.setContactId(contactId)
|
|
1180
|
+
|
|
1181
|
+
const response = await util.promisify(
|
|
1182
|
+
this.grpcManager.client.messageSendContact
|
|
1183
|
+
.bind(this.grpcManager.client),
|
|
1184
|
+
)(request)
|
|
1185
|
+
|
|
1186
|
+
const messageId = response.getId()
|
|
1187
|
+
|
|
1188
|
+
if (messageId) {
|
|
1189
|
+
return messageId
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
{
|
|
1193
|
+
/**
|
|
1194
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1195
|
+
*/
|
|
1196
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
1197
|
+
|
|
1198
|
+
if (messageIdWrapper) {
|
|
1199
|
+
return messageIdWrapper.getValue()
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
|
|
1204
|
+
override async messageSendUrl (
|
|
1205
|
+
conversationId: string,
|
|
1206
|
+
urlLinkPayload: PUPPET.payloads.UrlLink,
|
|
1207
|
+
): Promise<void | string> {
|
|
1208
|
+
log.verbose('PuppetService', 'messageSendUrl("%s", %s)', conversationId, JSON.stringify(urlLinkPayload))
|
|
1209
|
+
|
|
1210
|
+
const request = new grpcPuppet.MessageSendUrlRequest()
|
|
1211
|
+
request.setConversationId(conversationId)
|
|
1212
|
+
|
|
1213
|
+
const pbUrlLinkPayload = new grpcPuppet.UrlLinkPayload()
|
|
1214
|
+
pbUrlLinkPayload.setUrl(urlLinkPayload.url)
|
|
1215
|
+
pbUrlLinkPayload.setTitle(urlLinkPayload.title)
|
|
1216
|
+
if (urlLinkPayload.description) { pbUrlLinkPayload.setDescription(urlLinkPayload.description) }
|
|
1217
|
+
if (urlLinkPayload.thumbnailUrl) { pbUrlLinkPayload.setThumbnailUrl(urlLinkPayload.thumbnailUrl) }
|
|
1218
|
+
request.setUrlLink(pbUrlLinkPayload)
|
|
1219
|
+
|
|
1220
|
+
// Deprecated: will be removed after Dec 31, 2022
|
|
1221
|
+
request.setUrlLinkDeprecated(JSON.stringify(urlLinkPayload))
|
|
1222
|
+
|
|
1223
|
+
const response = await util.promisify(
|
|
1224
|
+
this.grpcManager.client.messageSendUrl
|
|
1225
|
+
.bind(this.grpcManager.client),
|
|
1226
|
+
)(request)
|
|
1227
|
+
|
|
1228
|
+
const messageId = response.getId()
|
|
1229
|
+
|
|
1230
|
+
if (messageId) {
|
|
1231
|
+
return messageId
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
{
|
|
1235
|
+
/**
|
|
1236
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1237
|
+
*/
|
|
1238
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
1239
|
+
|
|
1240
|
+
if (messageIdWrapper) {
|
|
1241
|
+
return messageIdWrapper.getValue()
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
override async messageUrl (messageId: string): Promise<PUPPET.payloads.UrlLink> {
|
|
1247
|
+
log.verbose('PuppetService', 'messageUrl(%s)', messageId)
|
|
1248
|
+
|
|
1249
|
+
const request = new grpcPuppet.MessageUrlRequest()
|
|
1250
|
+
request.setId(messageId)
|
|
1251
|
+
|
|
1252
|
+
const response = await util.promisify(
|
|
1253
|
+
this.grpcManager.client.messageUrl
|
|
1254
|
+
.bind(this.grpcManager.client),
|
|
1255
|
+
)(request)
|
|
1256
|
+
|
|
1257
|
+
let pbUrlLinkPayload = response.getUrlLink()?.toObject()
|
|
1258
|
+
if (!pbUrlLinkPayload) {
|
|
1259
|
+
// Deprecated: will be removed after Dec 31, 2022
|
|
1260
|
+
const jsonText = response.getUrlLinkDeprecated()
|
|
1261
|
+
pbUrlLinkPayload = JSON.parse(jsonText)
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
const payload: PUPPET.payloads.UrlLink = {
|
|
1265
|
+
title : 'NOTITLE',
|
|
1266
|
+
url : 'NOURL',
|
|
1267
|
+
...pbUrlLinkPayload,
|
|
1268
|
+
}
|
|
1269
|
+
return payload
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
/**
|
|
1273
|
+
*
|
|
1274
|
+
* Room
|
|
1275
|
+
*
|
|
1276
|
+
*/
|
|
1277
|
+
override async roomRawPayload (
|
|
1278
|
+
id: string,
|
|
1279
|
+
): Promise<PUPPET.payloads.Room> {
|
|
1280
|
+
log.verbose('PuppetService', 'roomRawPayload(%s)', id)
|
|
1281
|
+
|
|
1282
|
+
const cachedPayload = await this._payloadStore.room?.get(id)
|
|
1283
|
+
if (cachedPayload) {
|
|
1284
|
+
log.silly('PuppetService', 'roomRawPayload(%s) cache HIT', id)
|
|
1285
|
+
return cachedPayload
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
const request = new grpcPuppet.RoomPayloadRequest()
|
|
1289
|
+
request.setId(id)
|
|
1290
|
+
|
|
1291
|
+
const response = await util.promisify(
|
|
1292
|
+
this.grpcManager.client.roomPayload
|
|
1293
|
+
.bind(this.grpcManager.client),
|
|
1294
|
+
)(request)
|
|
1295
|
+
|
|
1296
|
+
const payload: PUPPET.payloads.Room = {
|
|
1297
|
+
adminIdList : response.getAdminIdsList(),
|
|
1298
|
+
avatar : response.getAvatar(),
|
|
1299
|
+
handle : response.getHandle(),
|
|
1300
|
+
id : response.getId(),
|
|
1301
|
+
memberIdList : response.getMemberIdsList(),
|
|
1302
|
+
ownerId : response.getOwnerId(),
|
|
1303
|
+
topic : response.getTopic(),
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
await this._payloadStore.room?.set(id, payload)
|
|
1307
|
+
log.silly('PuppetService', 'roomRawPayload(%s) cache SET', id)
|
|
1308
|
+
|
|
1309
|
+
return payload
|
|
1310
|
+
}
|
|
1311
|
+
|
|
1312
|
+
override async roomRawPayloadParser (payload: PUPPET.payloads.Room): Promise<PUPPET.payloads.Room> {
|
|
1313
|
+
// log.silly('PuppetService', 'roomRawPayloadParser({id:%s})', payload.id)
|
|
1314
|
+
// passthrough
|
|
1315
|
+
return payload
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
override async roomList (): Promise<string[]> {
|
|
1319
|
+
log.verbose('PuppetService', 'roomList()')
|
|
1320
|
+
|
|
1321
|
+
const response = await util.promisify(
|
|
1322
|
+
this.grpcManager.client.roomList
|
|
1323
|
+
.bind(this.grpcManager.client),
|
|
1324
|
+
)(new grpcPuppet.RoomListRequest())
|
|
1325
|
+
|
|
1326
|
+
return response.getIdsList()
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
override async roomDel (
|
|
1330
|
+
roomId : string,
|
|
1331
|
+
contactId : string,
|
|
1332
|
+
): Promise<void> {
|
|
1333
|
+
log.verbose('PuppetService', 'roomDel(%s, %s)', roomId, contactId)
|
|
1334
|
+
|
|
1335
|
+
const request = new grpcPuppet.RoomDelRequest()
|
|
1336
|
+
request.setId(roomId)
|
|
1337
|
+
request.setContactId(contactId)
|
|
1338
|
+
|
|
1339
|
+
await util.promisify(
|
|
1340
|
+
this.grpcManager.client.roomDel
|
|
1341
|
+
.bind(this.grpcManager.client),
|
|
1342
|
+
)(request)
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
override async roomAvatar (roomId: string): Promise<FileBoxInterface> {
|
|
1346
|
+
log.verbose('PuppetService', 'roomAvatar(%s)', roomId)
|
|
1347
|
+
|
|
1348
|
+
const request = new grpcPuppet.RoomAvatarRequest()
|
|
1349
|
+
request.setId(roomId)
|
|
1350
|
+
|
|
1351
|
+
const response = await util.promisify(
|
|
1352
|
+
this.grpcManager.client.roomAvatar
|
|
1353
|
+
.bind(this.grpcManager.client),
|
|
1354
|
+
)(request)
|
|
1355
|
+
|
|
1356
|
+
const jsonText = response.getFileBox()
|
|
1357
|
+
return this.FileBoxUuid.fromJSON(jsonText)
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
override async roomAdd (
|
|
1361
|
+
roomId : string,
|
|
1362
|
+
contactId : string,
|
|
1363
|
+
inviteOnly : boolean,
|
|
1364
|
+
): Promise<void> {
|
|
1365
|
+
log.verbose('PuppetService', 'roomAdd(%s, %s)', roomId, contactId)
|
|
1366
|
+
|
|
1367
|
+
const request = new grpcPuppet.RoomAddRequest()
|
|
1368
|
+
request.setId(roomId)
|
|
1369
|
+
request.setContactId(contactId)
|
|
1370
|
+
request.setInviteOnly(inviteOnly)
|
|
1371
|
+
|
|
1372
|
+
await util.promisify(
|
|
1373
|
+
this.grpcManager.client.roomAdd
|
|
1374
|
+
.bind(this.grpcManager.client),
|
|
1375
|
+
)(request)
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
override async roomTopic (roomId: string) : Promise<string>
|
|
1379
|
+
override async roomTopic (roomId: string, topic: string) : Promise<void>
|
|
1380
|
+
|
|
1381
|
+
override async roomTopic (
|
|
1382
|
+
roomId: string,
|
|
1383
|
+
topic?: string,
|
|
1384
|
+
): Promise<void | string> {
|
|
1385
|
+
log.verbose('PuppetService', 'roomTopic(%s, %s)', roomId, topic)
|
|
1386
|
+
|
|
1387
|
+
/**
|
|
1388
|
+
* Get
|
|
1389
|
+
*/
|
|
1390
|
+
if (typeof topic === 'undefined') {
|
|
1391
|
+
const request = new grpcPuppet.RoomTopicRequest()
|
|
1392
|
+
request.setId(roomId)
|
|
1393
|
+
|
|
1394
|
+
const response = await util.promisify(
|
|
1395
|
+
this.grpcManager.client.roomTopic
|
|
1396
|
+
.bind(this.grpcManager.client),
|
|
1397
|
+
)(request)
|
|
1398
|
+
|
|
1399
|
+
const result = response.getTopic()
|
|
1400
|
+
if (result) {
|
|
1401
|
+
return result
|
|
1402
|
+
}
|
|
1403
|
+
|
|
1404
|
+
{
|
|
1405
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
1406
|
+
const topicWrapper = response.getTopicStringValueDeprecated()
|
|
1407
|
+
if (topicWrapper) {
|
|
1408
|
+
return topicWrapper.getValue()
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
return ''
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
/**
|
|
1416
|
+
* Set
|
|
1417
|
+
*/
|
|
1418
|
+
const request = new grpcPuppet.RoomTopicRequest()
|
|
1419
|
+
request.setId(roomId)
|
|
1420
|
+
request.setTopic(topic)
|
|
1421
|
+
|
|
1422
|
+
{
|
|
1423
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
1424
|
+
const topicWrapper = new StringValue()
|
|
1425
|
+
topicWrapper.setValue(topic)
|
|
1426
|
+
|
|
1427
|
+
request.setTopicStringValueDeprecated(topicWrapper)
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
await util.promisify(
|
|
1431
|
+
this.grpcManager.client.roomTopic
|
|
1432
|
+
.bind(this.grpcManager.client),
|
|
1433
|
+
)(request)
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1436
|
+
override async roomCreate (
|
|
1437
|
+
contactIdList : string[],
|
|
1438
|
+
topic : string,
|
|
1439
|
+
): Promise<string> {
|
|
1440
|
+
log.verbose('PuppetService', 'roomCreate(%s, %s)', contactIdList, topic)
|
|
1441
|
+
|
|
1442
|
+
const request = new grpcPuppet.RoomCreateRequest()
|
|
1443
|
+
request.setContactIdsList(contactIdList)
|
|
1444
|
+
request.setTopic(topic)
|
|
1445
|
+
|
|
1446
|
+
const response = await util.promisify(
|
|
1447
|
+
this.grpcManager.client.roomCreate
|
|
1448
|
+
.bind(this.grpcManager.client),
|
|
1449
|
+
)(request)
|
|
1450
|
+
|
|
1451
|
+
return response.getId()
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
override async roomQuit (roomId: string): Promise<void> {
|
|
1455
|
+
log.verbose('PuppetService', 'roomQuit(%s)', roomId)
|
|
1456
|
+
|
|
1457
|
+
const request = new grpcPuppet.RoomQuitRequest()
|
|
1458
|
+
request.setId(roomId)
|
|
1459
|
+
|
|
1460
|
+
await util.promisify(
|
|
1461
|
+
this.grpcManager.client.roomQuit
|
|
1462
|
+
.bind(this.grpcManager.client),
|
|
1463
|
+
)(request)
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
override async roomQRCode (roomId: string): Promise<string> {
|
|
1467
|
+
log.verbose('PuppetService', 'roomQRCode(%s)', roomId)
|
|
1468
|
+
|
|
1469
|
+
const request = new grpcPuppet.RoomQRCodeRequest()
|
|
1470
|
+
request.setId(roomId)
|
|
1471
|
+
|
|
1472
|
+
const response = await util.promisify(
|
|
1473
|
+
this.grpcManager.client.roomQRCode
|
|
1474
|
+
.bind(this.grpcManager.client),
|
|
1475
|
+
)(request)
|
|
1476
|
+
|
|
1477
|
+
return response.getQrcode()
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
override async roomMemberList (roomId: string) : Promise<string[]> {
|
|
1481
|
+
log.verbose('PuppetService', 'roomMemberList(%s)', roomId)
|
|
1482
|
+
|
|
1483
|
+
const request = new grpcPuppet.RoomMemberListRequest()
|
|
1484
|
+
request.setId(roomId)
|
|
1485
|
+
|
|
1486
|
+
const response = await util.promisify(
|
|
1487
|
+
this.grpcManager.client.roomMemberList
|
|
1488
|
+
.bind(this.grpcManager.client),
|
|
1489
|
+
)(request)
|
|
1490
|
+
|
|
1491
|
+
return response.getMemberIdsList()
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
override async roomMemberRawPayload (roomId: string, contactId: string): Promise<PUPPET.payloads.RoomMember> {
|
|
1495
|
+
log.verbose('PuppetService', 'roomMemberRawPayload(%s, %s)', roomId, contactId)
|
|
1496
|
+
|
|
1497
|
+
const cachedPayload = await this._payloadStore.roomMember?.get(roomId)
|
|
1498
|
+
const cachedRoomMemberPayload = cachedPayload && cachedPayload[contactId]
|
|
1499
|
+
|
|
1500
|
+
if (cachedRoomMemberPayload) {
|
|
1501
|
+
log.silly('PuppetService', 'roomMemberRawPayload(%s, %s) cache HIT', roomId, contactId)
|
|
1502
|
+
return cachedRoomMemberPayload
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
const request = new grpcPuppet.RoomMemberPayloadRequest()
|
|
1506
|
+
request.setId(roomId)
|
|
1507
|
+
request.setMemberId(contactId)
|
|
1508
|
+
|
|
1509
|
+
const response = await util.promisify(
|
|
1510
|
+
this.grpcManager.client.roomMemberPayload
|
|
1511
|
+
.bind(this.grpcManager.client),
|
|
1512
|
+
)(request)
|
|
1513
|
+
|
|
1514
|
+
const payload: PUPPET.payloads.RoomMember = {
|
|
1515
|
+
avatar : response.getAvatar(),
|
|
1516
|
+
id : response.getId(),
|
|
1517
|
+
inviterId : response.getInviterId(),
|
|
1518
|
+
name : response.getName(),
|
|
1519
|
+
roomAlias : response.getRoomAlias(),
|
|
1520
|
+
}
|
|
1521
|
+
|
|
1522
|
+
await this._payloadStore.roomMember?.set(roomId, {
|
|
1523
|
+
...cachedPayload,
|
|
1524
|
+
[contactId]: payload,
|
|
1525
|
+
})
|
|
1526
|
+
log.silly('PuppetService', 'roomMemberRawPayload(%s, %s) cache SET', roomId, contactId)
|
|
1527
|
+
|
|
1528
|
+
return payload
|
|
1529
|
+
}
|
|
1530
|
+
|
|
1531
|
+
override async roomMemberRawPayloadParser (payload: PUPPET.payloads.RoomMember): Promise<PUPPET.payloads.RoomMember> {
|
|
1532
|
+
// log.silly('PuppetService', 'roomMemberRawPayloadParser({id:%s})', payload.id)
|
|
1533
|
+
// passthrough
|
|
1534
|
+
return payload
|
|
1535
|
+
}
|
|
1536
|
+
|
|
1537
|
+
override async roomAnnounce (roomId: string) : Promise<string>
|
|
1538
|
+
override async roomAnnounce (roomId: string, text: string) : Promise<void>
|
|
1539
|
+
|
|
1540
|
+
override async roomAnnounce (roomId: string, text?: string) : Promise<void | string> {
|
|
1541
|
+
log.verbose('PuppetService', 'roomAnnounce(%s%s)',
|
|
1542
|
+
roomId,
|
|
1543
|
+
typeof text === 'undefined'
|
|
1544
|
+
? ''
|
|
1545
|
+
: `, ${text}`,
|
|
1546
|
+
)
|
|
1547
|
+
|
|
1548
|
+
/**
|
|
1549
|
+
* Set
|
|
1550
|
+
*/
|
|
1551
|
+
if (text) {
|
|
1552
|
+
const request = new grpcPuppet.RoomAnnounceRequest()
|
|
1553
|
+
request.setId(roomId)
|
|
1554
|
+
request.setText(text)
|
|
1555
|
+
|
|
1556
|
+
{
|
|
1557
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
1558
|
+
const textWrapper = new StringValue()
|
|
1559
|
+
textWrapper.setValue(text)
|
|
1560
|
+
request.setTextStringValueDeprecated(textWrapper)
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
await util.promisify(
|
|
1564
|
+
this.grpcManager.client.roomAnnounce
|
|
1565
|
+
.bind(this.grpcManager.client),
|
|
1566
|
+
)(request)
|
|
1567
|
+
|
|
1568
|
+
return
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
/**
|
|
1572
|
+
* Get
|
|
1573
|
+
*/
|
|
1574
|
+
const request = new grpcPuppet.RoomAnnounceRequest()
|
|
1575
|
+
request.setId(roomId)
|
|
1576
|
+
|
|
1577
|
+
const response = await util.promisify(
|
|
1578
|
+
this.grpcManager.client.roomAnnounce
|
|
1579
|
+
.bind(this.grpcManager.client),
|
|
1580
|
+
)(request)
|
|
1581
|
+
|
|
1582
|
+
const result = response.getText()
|
|
1583
|
+
if (result) {
|
|
1584
|
+
return result
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
{
|
|
1588
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
1589
|
+
const textWrapper = response.getTextStringValueDeprecated()
|
|
1590
|
+
if (textWrapper) {
|
|
1591
|
+
return textWrapper.getValue()
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
return ''
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
override async roomInvitationAccept (
|
|
1599
|
+
roomInvitationId: string,
|
|
1600
|
+
): Promise<void> {
|
|
1601
|
+
log.verbose('PuppetService', 'roomInvitationAccept(%s)', roomInvitationId)
|
|
1602
|
+
|
|
1603
|
+
const request = new grpcPuppet.RoomInvitationAcceptRequest()
|
|
1604
|
+
request.setId(roomInvitationId)
|
|
1605
|
+
|
|
1606
|
+
await util.promisify(
|
|
1607
|
+
this.grpcManager.client.roomInvitationAccept
|
|
1608
|
+
.bind(this.grpcManager.client),
|
|
1609
|
+
)(request)
|
|
1610
|
+
}
|
|
1611
|
+
|
|
1612
|
+
override async roomInvitationRawPayload (
|
|
1613
|
+
id: string,
|
|
1614
|
+
): Promise<PUPPET.payloads.RoomInvitation> {
|
|
1615
|
+
log.verbose('PuppetService', 'roomInvitationRawPayload(%s)', id)
|
|
1616
|
+
|
|
1617
|
+
const request = new grpcPuppet.RoomInvitationPayloadRequest()
|
|
1618
|
+
request.setId(id)
|
|
1619
|
+
|
|
1620
|
+
const response = await util.promisify(
|
|
1621
|
+
this.grpcManager.client.roomInvitationPayload
|
|
1622
|
+
.bind(this.grpcManager.client),
|
|
1623
|
+
)(request)
|
|
1624
|
+
|
|
1625
|
+
let timestamp
|
|
1626
|
+
const receiveTime = response.getReceiveTime()
|
|
1627
|
+
if (receiveTime) {
|
|
1628
|
+
timestamp = millisecondsFromTimestamp(receiveTime)
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
{
|
|
1632
|
+
// Deprecated: will be removed after Dec 31, 2022
|
|
1633
|
+
const deprecated = true
|
|
1634
|
+
void deprecated
|
|
1635
|
+
|
|
1636
|
+
if (!receiveTime) {
|
|
1637
|
+
timestamp = response.getTimestampUint64Deprecated()
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
// FIXME: how to set it better?
|
|
1642
|
+
timestamp ??= 0
|
|
1643
|
+
|
|
1644
|
+
const payload: PUPPET.payloads.RoomInvitation = {
|
|
1645
|
+
avatar : response.getAvatar(),
|
|
1646
|
+
id : response.getId(),
|
|
1647
|
+
invitation : response.getInvitation(),
|
|
1648
|
+
inviterId : response.getInviterId(),
|
|
1649
|
+
memberCount : response.getMemberCount(),
|
|
1650
|
+
memberIdList : response.getMemberIdsList(),
|
|
1651
|
+
receiverId : response.getReceiverId(),
|
|
1652
|
+
timestamp,
|
|
1653
|
+
topic : response.getTopic(),
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1656
|
+
return payload
|
|
1657
|
+
}
|
|
1658
|
+
|
|
1659
|
+
override async roomInvitationRawPayloadParser (payload: PUPPET.payloads.RoomInvitation): Promise<PUPPET.payloads.RoomInvitation> {
|
|
1660
|
+
// log.silly('PuppetService', 'roomInvitationRawPayloadParser({id:%s})', payload.id)
|
|
1661
|
+
// passthrough
|
|
1662
|
+
return payload
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1665
|
+
/**
|
|
1666
|
+
*
|
|
1667
|
+
* Friendship
|
|
1668
|
+
*
|
|
1669
|
+
*/
|
|
1670
|
+
override async friendshipSearchPhone (
|
|
1671
|
+
phone: string,
|
|
1672
|
+
): Promise<string | null> {
|
|
1673
|
+
log.verbose('PuppetService', 'friendshipSearchPhone(%s)', phone)
|
|
1674
|
+
|
|
1675
|
+
const request = new grpcPuppet.FriendshipSearchPhoneRequest()
|
|
1676
|
+
request.setPhone(phone)
|
|
1677
|
+
|
|
1678
|
+
const response = await util.promisify(
|
|
1679
|
+
this.grpcManager.client.friendshipSearchPhone
|
|
1680
|
+
.bind(this.grpcManager.client),
|
|
1681
|
+
)(request)
|
|
1682
|
+
|
|
1683
|
+
const contactId = response.getContactId()
|
|
1684
|
+
if (contactId) {
|
|
1685
|
+
return contactId
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1688
|
+
{
|
|
1689
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
1690
|
+
const contactIdWrapper = response.getContactIdStringValueDeprecated()
|
|
1691
|
+
if (contactIdWrapper) {
|
|
1692
|
+
return contactIdWrapper.getValue()
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
return null
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
override async friendshipSearchHandle (
|
|
1700
|
+
handle: string,
|
|
1701
|
+
): Promise<string | null> {
|
|
1702
|
+
log.verbose('PuppetService', 'friendshipSearchHandle(%s)', handle)
|
|
1703
|
+
|
|
1704
|
+
const request = new grpcPuppet.FriendshipSearchHandleRequest()
|
|
1705
|
+
/**
|
|
1706
|
+
* TODO: use `setHandle()` in v2.0.0
|
|
1707
|
+
* @link https://github.com/wechaty/grpc/issues/174
|
|
1708
|
+
*/
|
|
1709
|
+
request.setWeixin(handle)
|
|
1710
|
+
|
|
1711
|
+
const response = await util.promisify(
|
|
1712
|
+
this.grpcManager.client.friendshipSearchHandle
|
|
1713
|
+
.bind(this.grpcManager.client),
|
|
1714
|
+
)(request)
|
|
1715
|
+
|
|
1716
|
+
const contactId = response.getContactId()
|
|
1717
|
+
if (contactId) {
|
|
1718
|
+
return contactId
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
{
|
|
1722
|
+
// DEPRECATED, will be removed after Dec 31, 2022
|
|
1723
|
+
const contactIdWrapper = response.getContactIdStringValueDeprecated()
|
|
1724
|
+
if (contactIdWrapper) {
|
|
1725
|
+
return contactIdWrapper.getValue()
|
|
1726
|
+
}
|
|
1727
|
+
}
|
|
1728
|
+
|
|
1729
|
+
return null
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
override async friendshipRawPayload (id: string): Promise<PUPPET.payloads.Friendship> {
|
|
1733
|
+
log.verbose('PuppetService', 'friendshipRawPayload(%s)', id)
|
|
1734
|
+
|
|
1735
|
+
const request = new grpcPuppet.FriendshipPayloadRequest()
|
|
1736
|
+
request.setId(id)
|
|
1737
|
+
|
|
1738
|
+
const response = await util.promisify(
|
|
1739
|
+
this.grpcManager.client.friendshipPayload
|
|
1740
|
+
.bind(this.grpcManager.client),
|
|
1741
|
+
)(request)
|
|
1742
|
+
|
|
1743
|
+
const payload: PUPPET.payloads.Friendship = {
|
|
1744
|
+
contactId : response.getContactId(),
|
|
1745
|
+
hello: response.getHello(),
|
|
1746
|
+
id,
|
|
1747
|
+
scene : response.getScene() as number,
|
|
1748
|
+
stranger : response.getStranger(),
|
|
1749
|
+
ticket : response.getTicket(),
|
|
1750
|
+
type : response.getType() as number,
|
|
1751
|
+
} as any // FIXME: Huan(202002)
|
|
1752
|
+
|
|
1753
|
+
return payload
|
|
1754
|
+
}
|
|
1755
|
+
|
|
1756
|
+
override async friendshipRawPayloadParser (payload: PUPPET.payloads.Friendship) : Promise<PUPPET.payloads.Friendship> {
|
|
1757
|
+
// log.silly('PuppetService', 'friendshipRawPayloadParser({id:%s})', payload.id)
|
|
1758
|
+
// passthrough
|
|
1759
|
+
return payload
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
override async friendshipAdd (
|
|
1763
|
+
contactId : string,
|
|
1764
|
+
options : PUPPET.types.FriendshipAddOptions,
|
|
1765
|
+
): Promise<void> {
|
|
1766
|
+
log.verbose('PuppetService', 'friendshipAdd(%s, %s)', contactId, JSON.stringify(options))
|
|
1767
|
+
|
|
1768
|
+
const request = new grpcPuppet.FriendshipAddRequest()
|
|
1769
|
+
request.setContactId(contactId)
|
|
1770
|
+
|
|
1771
|
+
// FIXME: for backward compatibility, need to be removed after all puppet has updated.
|
|
1772
|
+
if (typeof options === 'string') {
|
|
1773
|
+
request.setHello(options)
|
|
1774
|
+
} else {
|
|
1775
|
+
request.setHello(options.hello!)
|
|
1776
|
+
|
|
1777
|
+
const referrer = new grpcPuppet.Referrer()
|
|
1778
|
+
if (options.contactId) { referrer.setContactId(options.contactId) }
|
|
1779
|
+
if (options.roomId) { referrer.setRoomId(options.roomId) }
|
|
1780
|
+
request.setReferrer(referrer)
|
|
1781
|
+
|
|
1782
|
+
{
|
|
1783
|
+
// Deprecated: will be removed after Dec 31, 2022
|
|
1784
|
+
const contactIdWrapper = new StringValue()
|
|
1785
|
+
contactIdWrapper.setValue(options.contactId || '')
|
|
1786
|
+
const roomIdWrapper = new StringValue()
|
|
1787
|
+
roomIdWrapper.setValue(options.roomId || '')
|
|
1788
|
+
request.setSourceRoomIdStringValueDeprecated(roomIdWrapper)
|
|
1789
|
+
request.setSourceContactIdStringValueDeprecated(contactIdWrapper)
|
|
1790
|
+
}
|
|
1791
|
+
}
|
|
1792
|
+
|
|
1793
|
+
await util.promisify(
|
|
1794
|
+
this.grpcManager.client.friendshipAdd
|
|
1795
|
+
.bind(this.grpcManager.client),
|
|
1796
|
+
)(request)
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1799
|
+
override async friendshipAccept (
|
|
1800
|
+
friendshipId : string,
|
|
1801
|
+
): Promise<void> {
|
|
1802
|
+
log.verbose('PuppetService', 'friendshipAccept(%s)', friendshipId)
|
|
1803
|
+
|
|
1804
|
+
const request = new grpcPuppet.FriendshipAcceptRequest()
|
|
1805
|
+
request.setId(friendshipId)
|
|
1806
|
+
|
|
1807
|
+
await util.promisify(
|
|
1808
|
+
this.grpcManager.client.friendshipAccept
|
|
1809
|
+
.bind(this.grpcManager.client),
|
|
1810
|
+
)(request)
|
|
1811
|
+
}
|
|
1812
|
+
|
|
1813
|
+
/**
|
|
1814
|
+
*
|
|
1815
|
+
* Tag
|
|
1816
|
+
*
|
|
1817
|
+
*/
|
|
1818
|
+
// add a tag for a Contact. Create it first if it not exist.
|
|
1819
|
+
override async tagContactAdd (
|
|
1820
|
+
id: string,
|
|
1821
|
+
contactId: string,
|
|
1822
|
+
): Promise<void> {
|
|
1823
|
+
log.verbose('PuppetService', 'tagContactAdd(%s, %s)', id, contactId)
|
|
1824
|
+
|
|
1825
|
+
const request = new grpcPuppet.TagContactAddRequest()
|
|
1826
|
+
request.setId(id)
|
|
1827
|
+
request.setContactId(contactId)
|
|
1828
|
+
|
|
1829
|
+
await util.promisify(
|
|
1830
|
+
this.grpcManager.client.tagContactAdd
|
|
1831
|
+
.bind(this.grpcManager.client),
|
|
1832
|
+
)(request)
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
// remove a tag from the Contact
|
|
1836
|
+
override async tagContactRemove (
|
|
1837
|
+
id: string,
|
|
1838
|
+
contactId: string,
|
|
1839
|
+
) : Promise<void> {
|
|
1840
|
+
log.verbose('PuppetService', 'tagContactRemove(%s, %s)', id, contactId)
|
|
1841
|
+
|
|
1842
|
+
const request = new grpcPuppet.TagContactRemoveRequest()
|
|
1843
|
+
request.setId(id)
|
|
1844
|
+
request.setContactId(contactId)
|
|
1845
|
+
|
|
1846
|
+
await util.promisify(
|
|
1847
|
+
this.grpcManager.client.tagContactRemove
|
|
1848
|
+
.bind(this.grpcManager.client),
|
|
1849
|
+
)(request)
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
// delete a tag from Wechat
|
|
1853
|
+
override async tagContactDelete (
|
|
1854
|
+
id: string,
|
|
1855
|
+
) : Promise<void> {
|
|
1856
|
+
log.verbose('PuppetService', 'tagContactDelete(%s)', id)
|
|
1857
|
+
|
|
1858
|
+
const request = new grpcPuppet.TagContactDeleteRequest()
|
|
1859
|
+
request.setId(id)
|
|
1860
|
+
|
|
1861
|
+
await util.promisify(
|
|
1862
|
+
this.grpcManager.client.tagContactDelete
|
|
1863
|
+
.bind(this.grpcManager.client),
|
|
1864
|
+
)(request)
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1867
|
+
// get tags from a specific Contact
|
|
1868
|
+
override async tagContactList (
|
|
1869
|
+
contactId?: string,
|
|
1870
|
+
) : Promise<string[]> {
|
|
1871
|
+
log.verbose('PuppetService', 'tagContactList(%s)', contactId)
|
|
1872
|
+
|
|
1873
|
+
const request = new grpcPuppet.TagContactListRequest()
|
|
1874
|
+
|
|
1875
|
+
if (typeof contactId !== 'undefined') {
|
|
1876
|
+
request.setContactId(contactId)
|
|
1877
|
+
{
|
|
1878
|
+
|
|
1879
|
+
/**
|
|
1880
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1881
|
+
*/
|
|
1882
|
+
const contactIdWrapper = new StringValue()
|
|
1883
|
+
contactIdWrapper.setValue(contactId)
|
|
1884
|
+
request.setContactIdStringValueDeprecated(contactIdWrapper)
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
const response = await util.promisify(
|
|
1889
|
+
this.grpcManager.client.tagContactList
|
|
1890
|
+
.bind(this.grpcManager.client),
|
|
1891
|
+
)(request)
|
|
1892
|
+
|
|
1893
|
+
return response.getIdsList()
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
/**
|
|
1897
|
+
* @deprecated Will be removed in v2.0
|
|
1898
|
+
*/
|
|
1899
|
+
private async messageSendFileStream (
|
|
1900
|
+
conversationId : string,
|
|
1901
|
+
file : FileBoxInterface,
|
|
1902
|
+
): Promise<void | string> {
|
|
1903
|
+
const request = await packConversationIdFileBoxToPb(grpcPuppet.MessageSendFileStreamRequest)(conversationId, file)
|
|
1904
|
+
|
|
1905
|
+
const response = await new Promise<grpcPuppet.MessageSendFileStreamResponse>((resolve, reject) => {
|
|
1906
|
+
const stream = this.grpcManager.client.messageSendFileStream((err, response) => {
|
|
1907
|
+
if (err) {
|
|
1908
|
+
reject(err)
|
|
1909
|
+
} else {
|
|
1910
|
+
resolve(response)
|
|
1911
|
+
}
|
|
1912
|
+
})
|
|
1913
|
+
request.pipe(stream as unknown as Writable) // Huan(202203): FIXME: as unknown as
|
|
1914
|
+
})
|
|
1915
|
+
|
|
1916
|
+
const messageId = response.getId()
|
|
1917
|
+
|
|
1918
|
+
if (messageId) {
|
|
1919
|
+
return messageId
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
{
|
|
1923
|
+
/**
|
|
1924
|
+
* Huan(202110): Deprecated: will be removed after Dec 31, 2022
|
|
1925
|
+
*/
|
|
1926
|
+
const messageIdWrapper = response.getIdStringValueDeprecated()
|
|
1927
|
+
if (messageIdWrapper) {
|
|
1928
|
+
return messageIdWrapper.getValue()
|
|
1929
|
+
}
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
export {
|
|
1936
|
+
PuppetService,
|
|
1937
|
+
}
|
|
1938
|
+
export default PuppetService
|