@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,10 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
import { test } from 'tstest'
|
|
4
|
+
|
|
5
|
+
import { packageJson } from './package-json.js'
|
|
6
|
+
|
|
7
|
+
test('Make sure the packageJson is fresh in source code', async t => {
|
|
8
|
+
const keyNum = Object.keys(packageJson).length
|
|
9
|
+
t.equal(keyNum, 0, 'packageJson should be empty in source code, only updated before publish to NPM')
|
|
10
|
+
})
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto generated from scripts/generate-version.sh
|
|
3
|
+
*/
|
|
4
|
+
import type { PackageJson } from 'type-fest'
|
|
5
|
+
export const packageJson: PackageJson = {
|
|
6
|
+
"name": "@juzi/wechaty-puppet-service",
|
|
7
|
+
"version": "1.0.0",
|
|
8
|
+
"description": "Puppet Service for Wechaty",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/esm/src/mod.js",
|
|
13
|
+
"require": "./dist/cjs/src/mod.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"typings": "./dist/esm/src/mod.d.ts",
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=16",
|
|
19
|
+
"npm": ">=7"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc && tsc -p tsconfig.cjs.json",
|
|
23
|
+
"clean": "shx rm -fr dist/*",
|
|
24
|
+
"dist": "npm-run-all clean build dist:commonjs",
|
|
25
|
+
"dist:commonjs": "jq -n \"{ type: \\\"commonjs\\\" }\" > dist/cjs/package.json",
|
|
26
|
+
"lint": "npm-run-all lint:es lint:ts lint:md",
|
|
27
|
+
"lint:md": "markdownlint README.md",
|
|
28
|
+
"lint:ts": "tsc --isolatedModules --noEmit",
|
|
29
|
+
"start": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ding-dong-bot.ts",
|
|
30
|
+
"test": "npm run lint && npm run test:unit",
|
|
31
|
+
"test:pack": "bash -x scripts/npm-pack-testing.sh",
|
|
32
|
+
"test:unit": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" TAP_TIMEOUT=60 tap \"src/**/*.spec.ts\" \"tests/**/*.spec.ts\"",
|
|
33
|
+
"lint:es": "eslint --ignore-pattern fixtures/ \"src/**/*.ts\" \"tests/**/*.ts\""
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/juzibot/wechaty-puppet-service.git"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"chatie",
|
|
41
|
+
"wechaty",
|
|
42
|
+
"chatbot",
|
|
43
|
+
"bot",
|
|
44
|
+
"grpc",
|
|
45
|
+
"wechat",
|
|
46
|
+
"sdk"
|
|
47
|
+
],
|
|
48
|
+
"author": "Huan LI <zixia@zixia.net>",
|
|
49
|
+
"license": "Apache-2.0",
|
|
50
|
+
"bugs": {
|
|
51
|
+
"url": "https://github.com/juzibot/wechaty-puppet-service/issues"
|
|
52
|
+
},
|
|
53
|
+
"homepage": "https://github.com/juzibot/wechaty-puppet-service#readme",
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@chatie/eslint-config": "^1.0.4",
|
|
56
|
+
"@chatie/semver": "^0.4.7",
|
|
57
|
+
"@chatie/tsconfig": "^4.6.3",
|
|
58
|
+
"@types/google-protobuf": "^3.15.5",
|
|
59
|
+
"@types/lru-cache": "^7.5.0",
|
|
60
|
+
"@types/semver": "^7.3.9",
|
|
61
|
+
"@types/temp": "^0.9.1",
|
|
62
|
+
"@types/uuid": "^8.3.4",
|
|
63
|
+
"@types/ws": "^8.5.3",
|
|
64
|
+
"get-port": "^6.1.2",
|
|
65
|
+
"temp": "^0.9.4",
|
|
66
|
+
"typed-emitter": "^1.5.0-from-event",
|
|
67
|
+
"utility-types": "^3.10.0",
|
|
68
|
+
"wechaty-puppet-mock": "^1.18.2",
|
|
69
|
+
"why-is-node-running": "^2.2.1"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"@juzi/wechaty-puppet": "1.0.0"
|
|
73
|
+
},
|
|
74
|
+
"dependencies": {
|
|
75
|
+
"clone-class": "^1.1.1",
|
|
76
|
+
"ducks": "^1.0.2",
|
|
77
|
+
"file-box": "^1.5.5",
|
|
78
|
+
"flash-store": "^1.3.4",
|
|
79
|
+
"gerror": "^1.0.16",
|
|
80
|
+
"redux-observable": "^2.0.0",
|
|
81
|
+
"rxjs": "^7.5.5",
|
|
82
|
+
"semver": "^7.3.5",
|
|
83
|
+
"stronger-typed-streams": "^0.2.0",
|
|
84
|
+
"uuid": "^8.3.2",
|
|
85
|
+
"@juzi/wechaty-grpc": "1.0.0",
|
|
86
|
+
"wechaty-redux": "^1.20.2",
|
|
87
|
+
"wechaty-token": "^1.0.6"
|
|
88
|
+
},
|
|
89
|
+
"publishConfig": {
|
|
90
|
+
"access": "public",
|
|
91
|
+
"tag": "next"
|
|
92
|
+
},
|
|
93
|
+
"files": [
|
|
94
|
+
"bin/",
|
|
95
|
+
"dist/",
|
|
96
|
+
"src/"
|
|
97
|
+
],
|
|
98
|
+
"tap": {
|
|
99
|
+
"check-coverage": false
|
|
100
|
+
}
|
|
101
|
+
} as any
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Timestamp } from '@juzi/wechaty-grpc'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* https://github.com/protocolbuffers/protobuf/blob/b6993a90605cde15ba004e0287bcb078b0f3959d/src/google/protobuf/timestamp.proto#L86-L91
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
function timestampFromMilliseconds (milliseconds: number) {
|
|
8
|
+
const seconds = Math.floor(milliseconds / 1000)
|
|
9
|
+
const nanos = (milliseconds % 1000) * 1000000
|
|
10
|
+
|
|
11
|
+
const timestamp = new Timestamp()
|
|
12
|
+
timestamp.setSeconds(seconds)
|
|
13
|
+
timestamp.setNanos(nanos)
|
|
14
|
+
|
|
15
|
+
return timestamp
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function millisecondsFromTimestamp (timestamp: ReturnType<typeof timestampFromMilliseconds>) {
|
|
19
|
+
const seconds = timestamp.getSeconds()
|
|
20
|
+
const nanos = timestamp.getNanos()
|
|
21
|
+
|
|
22
|
+
return seconds * 1000 + nanos / 1000000
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
millisecondsFromTimestamp,
|
|
27
|
+
timestampFromMilliseconds,
|
|
28
|
+
}
|
|
@@ -0,0 +1,383 @@
|
|
|
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 {
|
|
21
|
+
puppet as grpcPuppet,
|
|
22
|
+
grpc,
|
|
23
|
+
} from '@juzi/wechaty-grpc'
|
|
24
|
+
|
|
25
|
+
import * as PUPPET from '@juzi/wechaty-puppet'
|
|
26
|
+
|
|
27
|
+
import { log } from '../config.js'
|
|
28
|
+
import {
|
|
29
|
+
EventTypeRev,
|
|
30
|
+
} from '../event-type-rev.js'
|
|
31
|
+
|
|
32
|
+
class EventStreamManager {
|
|
33
|
+
|
|
34
|
+
protected eventStream: undefined | grpc.ServerWritableStream<grpcPuppet.EventRequest, grpcPuppet.EventResponse>
|
|
35
|
+
|
|
36
|
+
private puppetListening = false
|
|
37
|
+
|
|
38
|
+
constructor (
|
|
39
|
+
public puppet: PUPPET.impls.PuppetInterface,
|
|
40
|
+
) {
|
|
41
|
+
log.verbose('EventStreamManager', 'constructor(%s)', puppet)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public busy (): boolean {
|
|
45
|
+
return !!this.eventStream
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public start (
|
|
49
|
+
stream: grpc.ServerWritableStream<grpcPuppet.EventRequest, grpcPuppet.EventResponse>,
|
|
50
|
+
): void {
|
|
51
|
+
log.verbose('EventStreamManager', 'start(stream)')
|
|
52
|
+
|
|
53
|
+
if (this.eventStream) {
|
|
54
|
+
throw new Error('can not set twice')
|
|
55
|
+
}
|
|
56
|
+
this.eventStream = stream
|
|
57
|
+
|
|
58
|
+
const removeAllListeners = this.connectPuppetEventToStreamingCall()
|
|
59
|
+
this.onStreamingCallEnd(removeAllListeners)
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Huan(202108):
|
|
63
|
+
* We emit a hearbeat at the beginning of the connect
|
|
64
|
+
* to identicate that the connection is successeed.
|
|
65
|
+
*
|
|
66
|
+
* Our client (wechaty-puppet-service client) will wait for the heartbeat
|
|
67
|
+
* when it connect to the server.
|
|
68
|
+
*
|
|
69
|
+
* If the server does not send the heartbeat,
|
|
70
|
+
* then the client will wait for a 5 seconds timeout
|
|
71
|
+
* for compatible the community gRPC puppet service providers like paimon.
|
|
72
|
+
*/
|
|
73
|
+
const connectSuccessHeartbeatPayload = {
|
|
74
|
+
data: 'Wechaty Puppet gRPC stream connect successfully',
|
|
75
|
+
} as PUPPET.payloads.EventHeartbeat
|
|
76
|
+
this.grpcEmit(
|
|
77
|
+
grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT,
|
|
78
|
+
connectSuccessHeartbeatPayload,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* We emit the login event if current the puppet is logged in.
|
|
83
|
+
*/
|
|
84
|
+
if (this.puppet.isLoggedIn) {
|
|
85
|
+
log.verbose('EventStreamManager', 'start() puppet is logged in, emit a login event for downstream')
|
|
86
|
+
|
|
87
|
+
const payload = {
|
|
88
|
+
contactId: this.puppet.currentUserId,
|
|
89
|
+
} as PUPPET.payloads.EventLogin
|
|
90
|
+
|
|
91
|
+
this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_LOGIN, payload)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (this.puppet.readyIndicator.value()) {
|
|
95
|
+
log.verbose('EventStreamManager', 'start() puppet is ready, emit a ready event for downstream after 100ms delay')
|
|
96
|
+
|
|
97
|
+
const payload = {
|
|
98
|
+
data: 'ready',
|
|
99
|
+
} as PUPPET.payloads.EventReady
|
|
100
|
+
|
|
101
|
+
// no need to make this function async since it won't effect the start process of eventStreamManager
|
|
102
|
+
setTimeout(() => {
|
|
103
|
+
this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_READY, payload)
|
|
104
|
+
}, 100)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public stop (): void {
|
|
109
|
+
log.verbose('EventStreamManager', 'stop()')
|
|
110
|
+
|
|
111
|
+
if (!this.eventStream) {
|
|
112
|
+
throw new Error('no this.eventStream')
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
this.eventStream.end()
|
|
116
|
+
this.eventStream = undefined
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public grpcEmit (
|
|
120
|
+
type : grpcPuppet.EventTypeMap[keyof grpcPuppet.EventTypeMap], // https://stackoverflow.com/a/49286056/1123955
|
|
121
|
+
obj : object,
|
|
122
|
+
): void {
|
|
123
|
+
log.verbose('EventStreamManager', 'grpcEmit(%s[%s], %s)',
|
|
124
|
+
EventTypeRev[type],
|
|
125
|
+
type,
|
|
126
|
+
JSON.stringify(obj),
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
const response = new grpcPuppet.EventResponse()
|
|
130
|
+
|
|
131
|
+
response.setType(type)
|
|
132
|
+
response.setPayload(
|
|
133
|
+
JSON.stringify(obj),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
if (this.eventStream) {
|
|
137
|
+
this.eventStream.write(response)
|
|
138
|
+
} else {
|
|
139
|
+
/**
|
|
140
|
+
* Huan(202108): TODO: add a queue for store a maximum number of responses before the stream get connected
|
|
141
|
+
*/
|
|
142
|
+
log.warn('EventStreamManager', 'grpcEmit(%s, %s) this.eventStream is undefined.',
|
|
143
|
+
type,
|
|
144
|
+
JSON.stringify(obj),
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
public connectPuppetEventToStreamingCall (): () => void {
|
|
150
|
+
log.verbose('EventStreamManager', 'connectPuppetEventToStreamingCall() for %s', this.puppet)
|
|
151
|
+
|
|
152
|
+
const offCallbackList = [] as (() => void)[]
|
|
153
|
+
const offAll = () => {
|
|
154
|
+
log.verbose('EventStreamManager',
|
|
155
|
+
'connectPuppetEventToStreamingCall() offAll() %s callbacks',
|
|
156
|
+
offCallbackList.length,
|
|
157
|
+
)
|
|
158
|
+
offCallbackList.forEach(off => off())
|
|
159
|
+
this.puppetListening = false
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const eventNameList: PUPPET.types.PuppetEventName[] = Object.keys(PUPPET.types.PUPPET_EVENT_DICT) as PUPPET.types.PuppetEventName[]
|
|
163
|
+
for (const eventName of eventNameList) {
|
|
164
|
+
log.verbose('EventStreamManager',
|
|
165
|
+
'connectPuppetEventToStreamingCall() this.puppet.on(%s) (listenerCount:%s) registering...',
|
|
166
|
+
eventName,
|
|
167
|
+
this.puppet.listenerCount(eventName),
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
switch (eventName) {
|
|
171
|
+
case 'dong': {
|
|
172
|
+
const listener = (payload: PUPPET.payloads.EventDong) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_DONG, payload)
|
|
173
|
+
this.puppet.on('dong', listener)
|
|
174
|
+
const off = () => this.puppet.off('dong', listener)
|
|
175
|
+
offCallbackList.push(off)
|
|
176
|
+
break
|
|
177
|
+
}
|
|
178
|
+
case 'dirty': {
|
|
179
|
+
const listener = (payload: PUPPET.payloads.EventDirty) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_DIRTY, payload)
|
|
180
|
+
this.puppet.on('dirty', listener)
|
|
181
|
+
const off = () => this.puppet.off('dirty', listener)
|
|
182
|
+
offCallbackList.push(off)
|
|
183
|
+
break
|
|
184
|
+
}
|
|
185
|
+
case 'error': {
|
|
186
|
+
const listener = (payload: PUPPET.payloads.EventError) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ERROR, payload)
|
|
187
|
+
this.puppet.on('error', listener)
|
|
188
|
+
const off = () => this.puppet.off('error', listener)
|
|
189
|
+
offCallbackList.push(off)
|
|
190
|
+
break
|
|
191
|
+
}
|
|
192
|
+
case 'heartbeat': {
|
|
193
|
+
const listener = (payload: PUPPET.payloads.EventHeartbeat) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_HEARTBEAT, payload)
|
|
194
|
+
this.puppet.on('heartbeat', listener)
|
|
195
|
+
const off = () => this.puppet.off('heartbeat', listener)
|
|
196
|
+
offCallbackList.push(off)
|
|
197
|
+
break
|
|
198
|
+
}
|
|
199
|
+
case 'friendship': {
|
|
200
|
+
const listener = (payload: PUPPET.payloads.EventFriendship) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_FRIENDSHIP, payload)
|
|
201
|
+
this.puppet.on('friendship', listener)
|
|
202
|
+
const off = () => this.puppet.off('friendship', listener)
|
|
203
|
+
offCallbackList.push(off)
|
|
204
|
+
break
|
|
205
|
+
}
|
|
206
|
+
case 'login': {
|
|
207
|
+
const listener = (payload: PUPPET.payloads.EventLogin) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_LOGIN, payload)
|
|
208
|
+
this.puppet.on('login', listener)
|
|
209
|
+
const off = () => this.puppet.off('login', listener)
|
|
210
|
+
offCallbackList.push(off)
|
|
211
|
+
break
|
|
212
|
+
}
|
|
213
|
+
case 'logout': {
|
|
214
|
+
const listener = (payload: PUPPET.payloads.EventLogout) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_LOGOUT, payload)
|
|
215
|
+
this.puppet.on('logout', listener)
|
|
216
|
+
const off = () => this.puppet.off('logout', listener)
|
|
217
|
+
offCallbackList.push(off)
|
|
218
|
+
break
|
|
219
|
+
}
|
|
220
|
+
case 'message': {
|
|
221
|
+
const listener = (payload: PUPPET.payloads.EventMessage) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_MESSAGE, payload)
|
|
222
|
+
this.puppet.on('message', listener)
|
|
223
|
+
const off = () => this.puppet.off('message', listener)
|
|
224
|
+
offCallbackList.push(off)
|
|
225
|
+
break
|
|
226
|
+
}
|
|
227
|
+
case 'post': {
|
|
228
|
+
const listener = (payload: PUPPET.payloads.EventPost) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_POST, payload)
|
|
229
|
+
this.puppet.on('post', listener)
|
|
230
|
+
const off = () => this.puppet.off('post', listener)
|
|
231
|
+
offCallbackList.push(off)
|
|
232
|
+
break
|
|
233
|
+
}
|
|
234
|
+
case 'ready': {
|
|
235
|
+
const listener = (payload: PUPPET.payloads.EventReady) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_READY, payload)
|
|
236
|
+
this.puppet.on('ready', listener)
|
|
237
|
+
const off = () => this.puppet.off('ready', listener)
|
|
238
|
+
offCallbackList.push(off)
|
|
239
|
+
break
|
|
240
|
+
}
|
|
241
|
+
case 'room-invite': {
|
|
242
|
+
const listener = (payload: PUPPET.payloads.EventRoomInvite) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_INVITE, payload)
|
|
243
|
+
this.puppet.on('room-invite', listener)
|
|
244
|
+
const off = () => this.puppet.off('room-invite', listener)
|
|
245
|
+
offCallbackList.push(off)
|
|
246
|
+
break
|
|
247
|
+
}
|
|
248
|
+
case 'room-join': {
|
|
249
|
+
const listener = (payload: PUPPET.payloads.EventRoomJoin) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_JOIN, payload)
|
|
250
|
+
this.puppet.on('room-join', listener)
|
|
251
|
+
const off = () => this.puppet.off('room-join', listener)
|
|
252
|
+
offCallbackList.push(off)
|
|
253
|
+
break
|
|
254
|
+
}
|
|
255
|
+
case 'room-leave': {
|
|
256
|
+
const listener = (payload: PUPPET.payloads.EventRoomLeave) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_LEAVE, payload)
|
|
257
|
+
this.puppet.on('room-leave', listener)
|
|
258
|
+
const off = () => this.puppet.off('room-leave', listener)
|
|
259
|
+
offCallbackList.push(off)
|
|
260
|
+
break
|
|
261
|
+
}
|
|
262
|
+
case 'room-topic': {
|
|
263
|
+
const listener = (payload: PUPPET.payloads.EventRoomTopic) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_ROOM_TOPIC, payload)
|
|
264
|
+
this.puppet.on('room-topic', listener)
|
|
265
|
+
const off = () => this.puppet.off('room-topic', listener)
|
|
266
|
+
offCallbackList.push(off)
|
|
267
|
+
break
|
|
268
|
+
}
|
|
269
|
+
case 'scan': {
|
|
270
|
+
const listener = (payload: PUPPET.payloads.EventScan) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_SCAN, payload)
|
|
271
|
+
this.puppet.on('scan', listener)
|
|
272
|
+
const off = () => this.puppet.off('scan', listener)
|
|
273
|
+
offCallbackList.push(off)
|
|
274
|
+
break
|
|
275
|
+
}
|
|
276
|
+
case 'reset':
|
|
277
|
+
// the `reset` event should be dealed internally, should not send out
|
|
278
|
+
break
|
|
279
|
+
|
|
280
|
+
default:
|
|
281
|
+
// Huan(202003): in default, the `eventName` type should be `never`, please check.
|
|
282
|
+
throw new Error('eventName ' + eventName + ' unsupported!')
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
this.puppetListening = true
|
|
287
|
+
return offAll
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Detect if the streaming call was gone (GRPC disconnects)
|
|
292
|
+
* https://github.com/grpc/grpc/issues/8117#issuecomment-362198092
|
|
293
|
+
*/
|
|
294
|
+
private onStreamingCallEnd (
|
|
295
|
+
removePuppetListeners: () => void,
|
|
296
|
+
): void {
|
|
297
|
+
log.verbose('EventStreamManager', 'onStreamingCallEnd(callback)')
|
|
298
|
+
|
|
299
|
+
if (!this.eventStream) {
|
|
300
|
+
throw new Error('no this.eventStream found')
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Huan(202110): useful log messages
|
|
305
|
+
*
|
|
306
|
+
* ServiceCtl<PuppetServiceMixin> stop() super.stop() ... done
|
|
307
|
+
* StateSwitch <PuppetServiceMixin> inactive(true) <- (pending)
|
|
308
|
+
* EventStreamManager this.onStreamingCallEnd() this.eventStream.on(finish) fired
|
|
309
|
+
* EventStreamManager connectPuppetEventToStreamingCall() offAll() 14 callbacks
|
|
310
|
+
* EventStreamManager this.onStreamingCallEnd() this.eventStream.on(finish) eventStream is undefined
|
|
311
|
+
* EventStreamManager this.onStreamingCallEnd() this.eventStream.on(close) fired
|
|
312
|
+
* EventStreamManager this.onStreamingCallEnd() this.eventStream.on(close) eventStream is undefined
|
|
313
|
+
* EventStreamManager this.onStreamingCallEnd() this.eventStream.on(cancelled) fired with arguments: {}
|
|
314
|
+
* EventStreamManager this.onStreamingCallEnd() this.eventStream.on(cancelled) eventStream is undefined
|
|
315
|
+
* GrpcClient stop() stop client ... done
|
|
316
|
+
*/
|
|
317
|
+
this.eventStream.on('cancelled', () => {
|
|
318
|
+
log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(cancelled) fired with arguments: %s',
|
|
319
|
+
JSON.stringify(arguments),
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
if (this.puppetListening) {
|
|
323
|
+
removePuppetListeners()
|
|
324
|
+
}
|
|
325
|
+
if (this.eventStream) {
|
|
326
|
+
this.eventStream = undefined
|
|
327
|
+
} else {
|
|
328
|
+
log.warn('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(cancelled) eventStream is undefined')
|
|
329
|
+
}
|
|
330
|
+
})
|
|
331
|
+
|
|
332
|
+
this.eventStream.on('error', err => {
|
|
333
|
+
log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(error) fired: %s', err)
|
|
334
|
+
if (this.puppetListening) {
|
|
335
|
+
removePuppetListeners()
|
|
336
|
+
}
|
|
337
|
+
if (this.eventStream) {
|
|
338
|
+
this.eventStream = undefined
|
|
339
|
+
} else {
|
|
340
|
+
log.warn('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(error) eventStream is undefined')
|
|
341
|
+
}
|
|
342
|
+
})
|
|
343
|
+
|
|
344
|
+
this.eventStream.on('finish', () => {
|
|
345
|
+
log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(finish) fired')
|
|
346
|
+
if (this.puppetListening) {
|
|
347
|
+
removePuppetListeners()
|
|
348
|
+
}
|
|
349
|
+
if (this.eventStream) {
|
|
350
|
+
this.eventStream = undefined
|
|
351
|
+
} else {
|
|
352
|
+
log.warn('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(finish) eventStream is undefined')
|
|
353
|
+
}
|
|
354
|
+
})
|
|
355
|
+
|
|
356
|
+
this.eventStream.on('end', () => {
|
|
357
|
+
log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(end) fired')
|
|
358
|
+
if (this.puppetListening) {
|
|
359
|
+
removePuppetListeners()
|
|
360
|
+
}
|
|
361
|
+
if (this.eventStream) {
|
|
362
|
+
this.eventStream = undefined
|
|
363
|
+
} else {
|
|
364
|
+
log.warn('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(end) eventStream is undefined')
|
|
365
|
+
}
|
|
366
|
+
})
|
|
367
|
+
|
|
368
|
+
this.eventStream.on('close', () => {
|
|
369
|
+
log.verbose('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(close) fired')
|
|
370
|
+
if (this.puppetListening) {
|
|
371
|
+
removePuppetListeners()
|
|
372
|
+
}
|
|
373
|
+
if (this.eventStream) {
|
|
374
|
+
this.eventStream = undefined
|
|
375
|
+
} else {
|
|
376
|
+
log.warn('EventStreamManager', 'this.onStreamingCallEnd() this.eventStream.on(close) eventStream is undefined')
|
|
377
|
+
}
|
|
378
|
+
})
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
export { EventStreamManager }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { grpc } from '@juzi/wechaty-grpc'
|
|
2
|
+
import { log } from '@juzi/wechaty-puppet'
|
|
3
|
+
import { GError } from 'gerror'
|
|
4
|
+
|
|
5
|
+
type GErrorCallback = (
|
|
6
|
+
gerror: Partial<grpc.StatusObject>,
|
|
7
|
+
value: null,
|
|
8
|
+
) => void
|
|
9
|
+
|
|
10
|
+
export function grpcError (
|
|
11
|
+
method : string,
|
|
12
|
+
error : any,
|
|
13
|
+
callback : GErrorCallback,
|
|
14
|
+
): void {
|
|
15
|
+
const gerr = GError.from(error)
|
|
16
|
+
|
|
17
|
+
log.error('PuppetServiceImpl', `grpcError() ${method}() rejection: %s\n%s`,
|
|
18
|
+
gerr.message,
|
|
19
|
+
gerr.stack,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
return callback(gerr, null)
|
|
23
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* eslint-disable sort-keys */
|
|
2
|
+
import {
|
|
3
|
+
google as grpcGoogle,
|
|
4
|
+
} from '@juzi/wechaty-grpc'
|
|
5
|
+
import {
|
|
6
|
+
log,
|
|
7
|
+
Puppet,
|
|
8
|
+
} from '@juzi/wechaty-puppet'
|
|
9
|
+
|
|
10
|
+
const HEARTBEAT_TIMEOUT_SECONDS = 60
|
|
11
|
+
|
|
12
|
+
function healthImplementation (
|
|
13
|
+
puppet: Puppet,
|
|
14
|
+
): grpcGoogle.IHealthServer {
|
|
15
|
+
|
|
16
|
+
let lastHeartbeatTimestamp = -1
|
|
17
|
+
|
|
18
|
+
const healthCheckResponse = () => {
|
|
19
|
+
const response = new grpcGoogle.HealthCheckResponse()
|
|
20
|
+
|
|
21
|
+
if (lastHeartbeatTimestamp < 0 || lastHeartbeatTimestamp > Date.now()) {
|
|
22
|
+
response.setStatus(grpcGoogle.HealthCheckResponse.ServingStatus.SERVICE_UNKNOWN)
|
|
23
|
+
|
|
24
|
+
} else if (Date.now() - lastHeartbeatTimestamp < HEARTBEAT_TIMEOUT_SECONDS * 1000) {
|
|
25
|
+
response.setStatus(grpcGoogle.HealthCheckResponse.ServingStatus.SERVING)
|
|
26
|
+
|
|
27
|
+
} else {
|
|
28
|
+
response.setStatus(grpcGoogle.HealthCheckResponse.ServingStatus.NOT_SERVING)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return response
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
puppet.on('heartbeat', () => {
|
|
35
|
+
lastHeartbeatTimestamp = Date.now()
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
const healthServerImpl: grpcGoogle.IHealthServer = {
|
|
39
|
+
|
|
40
|
+
check: async (call, callback) => {
|
|
41
|
+
log.verbose('HealthServiceImpl', 'check()')
|
|
42
|
+
|
|
43
|
+
const service = call.request.getService()
|
|
44
|
+
log.verbose('HealServiceImpl', 'check() service="%s"', service)
|
|
45
|
+
|
|
46
|
+
const response = healthCheckResponse()
|
|
47
|
+
callback(null, response)
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
watch: async (call) => {
|
|
51
|
+
log.verbose('HealthServiceImpl', 'watch()')
|
|
52
|
+
|
|
53
|
+
const firstResponse = healthCheckResponse()
|
|
54
|
+
let currentStatus = firstResponse.getStatus()
|
|
55
|
+
|
|
56
|
+
call.write(firstResponse)
|
|
57
|
+
|
|
58
|
+
const timer = setInterval(() => {
|
|
59
|
+
const nextResponse = healthCheckResponse()
|
|
60
|
+
if (nextResponse.getStatus() !== currentStatus) {
|
|
61
|
+
currentStatus = nextResponse.getStatus()
|
|
62
|
+
call.write(nextResponse)
|
|
63
|
+
}
|
|
64
|
+
}, 5 * 1000)
|
|
65
|
+
|
|
66
|
+
const clear = () => clearInterval(timer)
|
|
67
|
+
|
|
68
|
+
call.on('end', clear)
|
|
69
|
+
call.on('error', clear)
|
|
70
|
+
call.on('close', clear)
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return healthServerImpl
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { healthImplementation }
|