@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
package/src/auth/ca.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wechaty Certificate Authority Repo:
|
|
3
|
+
* https://github.com/wechaty/dotenv/tree/main/ca
|
|
4
|
+
*
|
|
5
|
+
* The SSL_ROOT_CERT is a root certificate generated by and for wechaty community.
|
|
6
|
+
*
|
|
7
|
+
* Because it's the default root cert for the puppet service,
|
|
8
|
+
* so all the Polyglot Wechaty SDK should set this cert to be trusted by default.
|
|
9
|
+
*
|
|
10
|
+
* Update:
|
|
11
|
+
* - Huan(202108): init, expired in 3650 days (after 2031/07)
|
|
12
|
+
*/
|
|
13
|
+
const TLS_CA_CERT = `-----BEGIN CERTIFICATE-----
|
|
14
|
+
MIIFxTCCA62gAwIBAgIUYddLAoa8JnLzJ80l2u5vGuFsaEIwDQYJKoZIhvcNAQEL
|
|
15
|
+
BQAwcjELMAkGA1UEBhMCVVMxFjAUBgNVBAgMDVNhbiBGcmFuY2lzY28xEjAQBgNV
|
|
16
|
+
BAcMCVBhbG8gQWx0bzEQMA4GA1UECgwHV2VjaGF0eTELMAkGA1UECwwCQ0ExGDAW
|
|
17
|
+
BgNVBAMMD3dlY2hhdHktcm9vdC1jYTAeFw0yMTA4MDkxNTQ4NTJaFw0zMTA4MDcx
|
|
18
|
+
NTQ4NTJaMHIxCzAJBgNVBAYTAlVTMRYwFAYDVQQIDA1TYW4gRnJhbmNpc2NvMRIw
|
|
19
|
+
EAYDVQQHDAlQYWxvIEFsdG8xEDAOBgNVBAoMB1dlY2hhdHkxCzAJBgNVBAsMAkNB
|
|
20
|
+
MRgwFgYDVQQDDA93ZWNoYXR5LXJvb3QtY2EwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
|
21
|
+
DwAwggIKAoICAQDulLjOZhzQ58TSQ7TfWNYgdtWhlc+5L9MnKb1nznVRhzAkZo3Q
|
|
22
|
+
rPLRW/HDjlv2OEbt4nFLaQgaMmc1oJTUVGDBDlrzesI/lJh7z4eA/B0z8eW7f6Cw
|
|
23
|
+
/TGc8lgzHvq7UIE507QYPhvfSejfW4Prw+90HJnuodriPdMGS0n9AR37JPdQm6sD
|
|
24
|
+
iMFeEvhHmM2SXRo/o7bll8UDZi81DoFu0XuTCx0esfCX1W5QWEmAJ5oAdjWxJ23C
|
|
25
|
+
lxI1+EjwBQKXGqp147VP9+pwpYW5Xxpy870kctPBHKjCAti8Bfo+Y6dyWz2UAd4w
|
|
26
|
+
4BFRD+18C/TgX+ECl1s9fsHMY15JitcSGgAIz8gQX1OelECaTMRTQfNaSnNW4LdS
|
|
27
|
+
sXMQEI9WxAU/W47GCQFmwcJeZvimqDF1QtflHSaARD3O8tlbduYqTR81LJ63bPoy
|
|
28
|
+
9e1pdB6w2bVOTlHunE0YaGSJERALVc1xz40QpPGcZ52mNCb3PBg462RQc77yv/QB
|
|
29
|
+
x/P2RC1y0zDUF2tP9J29gTatWq6+D4MhfEk2flZNyzAgJbDuT6KAIJGzOB1ZJ/MG
|
|
30
|
+
o1gS13eTuZYw24LElrhd1PrR6OHK+lkyYzqUPYMulUg4HzaZIDclfHKwAC4lecKm
|
|
31
|
+
zC5q9jJB4m4SKMKdzxvpIOfdahoqsZMg34l4AavWRqPTpwEU0C0dboNA/QIDAQAB
|
|
32
|
+
o1MwUTAdBgNVHQ4EFgQU0rey3QPklTOgdhMJ9VIA6KbZ5bAwHwYDVR0jBBgwFoAU
|
|
33
|
+
0rey3QPklTOgdhMJ9VIA6KbZ5bAwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
|
|
34
|
+
AQsFAAOCAgEAx2uyShx9kLoB1AJ8x7Vf95v6PX95L/4JkJ1WwzJ9Dlf3BcCI7VH7
|
|
35
|
+
Fp1dnQ6Ig7mFqSBDBAUUBWAptAnuqIDcgehI6XAEKxW8ZZRxD877pUNwZ/45tSC4
|
|
36
|
+
b5U5y9uaiNK7oC3LlDCsB0291b3KSOtevMeDFoh12LcliXAkdIGGTccUxrH+Cyij
|
|
37
|
+
cBOc+EKGJFBdLqcjLDU4M6QdMMMFOdfXyAOSpYuWGYqrxqvxQjAjvianEyMpNZWM
|
|
38
|
+
lajggJqiPhfF67sZTB2yzvRTmtHdUq7x+iNOVonOBcCHu31aGxa9Py91XEr9jaIQ
|
|
39
|
+
EBdl6sycLxKo8mxF/5tyUOns9+919aWNqTOUBmI15D68bqhhOVNyvsb7aVURIt5y
|
|
40
|
+
6A7Sj4gSBR9P22Ba6iFZgbvfLn0zKLzjlBonUGlSPf3rSIYUkawICtDyYPvK5mi3
|
|
41
|
+
mANgIChMiOw6LYCPmmUVVAWU/tDy36kr9ZV9YTIZRYAkWswsJB340whjuzvZUVaG
|
|
42
|
+
DgW45GPR6bGIwlFZeqCwXLput8Z3C8Sw9bE9vjlB2ZCpjPLmWV/WbDlH3J3uDjgt
|
|
43
|
+
9PoALW0sOPhHfYklH4/rrmsSWMYTUuGS/HqxrEER1vpIOOb0hIiAWENDT/mruq22
|
|
44
|
+
VqO8MHX9ebjInSxPmhYOlrSZrOgEcogyMB4Z0SOtKVqPnkWmdR5hatU=
|
|
45
|
+
-----END CERTIFICATE-----`
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Huan(202108): This private key is NOT SAFE!
|
|
49
|
+
*
|
|
50
|
+
* WARNING: This CA is not safe for production.
|
|
51
|
+
* **use environment variables to set your safe CA data**
|
|
52
|
+
*
|
|
53
|
+
* Our system use this private key for server by default for convience.
|
|
54
|
+
* However, everyone can get this key and use it to see the traffic between client and server.
|
|
55
|
+
*
|
|
56
|
+
* For security, we should not use this key in production
|
|
57
|
+
* by setting it manually by
|
|
58
|
+
* either the environment variable `WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY`
|
|
59
|
+
* or `options.tlsServerKey`
|
|
60
|
+
*
|
|
61
|
+
* So does the below `TLS_SERVER_CERT_UNSAFE`
|
|
62
|
+
*/
|
|
63
|
+
const TLS_INSECURE_SERVER_KEY = `-----BEGIN RSA PRIVATE KEY-----
|
|
64
|
+
MIIEpAIBAAKCAQEAtdFTXAKLW16uqNokJmSowbGtwnCvsPSqIHcdbKgdcuNpaJsZ
|
|
65
|
+
DTeBP0/XHFvnXcekHOyzncYgluxijzMSD1S8AKo3c2fROgem+E+WMSLYAZSTV48p
|
|
66
|
+
uzTRLoypvfhKfqxsrmpct2F6tRTIQ/EABOs0TYP0dY3Nd8NkCEWBmv7ioPDek/a4
|
|
67
|
+
esdisN7R1Ea6jx7ToegSwjkP9aFr2XHxyqR5wjJn/Q6nYZC9A90CKdxJ2WpXtluT
|
|
68
|
+
xFfFfqOhR/1te5/LpqXtqxo2yOwu8k67fHub1FyLu9sAYhcsuSjHVHxbK3nPf0mN
|
|
69
|
+
Gt0RiSwRj84qzbpfwrjMYrAJ3EqKrlxZurmX0wIDAQABAoIBAAcG+SbUPligtzV1
|
|
70
|
+
gPIu78rUuDeMrW20dyLcF7oMYV8AZSGS5Qv6ujcdOd4xuyaHwdMQXvzZHIdYyZJp
|
|
71
|
+
UehfyQhpi80dFRweEZkFUnPBugGNoYg/00gWCYO4EhNylkaBGY5ANCcuUFTRYdAm
|
|
72
|
+
b27BPHtGf1tPyMI5PhOHxDOeaFn6BKB1pcG4mQ+CNieadYxjgPcInh6mAqgJ40cR
|
|
73
|
+
ncWgLgSdChijLlVLW9lFVA+OAqv57vT3xW+Op1r7nBiigj67tka57spZTIEhrLXI
|
|
74
|
+
ZFMyRKQXlxh/l82vLmnYAhvSp/hHbARLwWfQ/znsFvTc/HXvXPocpZ2B9f0tlZ0W
|
|
75
|
+
dqOHSwkCgYEA3zJYAC5Afw3UKuAyApWOyI3AX+noq6ze8B3jFWEPmNdJrZpjLpzp
|
|
76
|
+
mntnWC8Wq0t821uiQXYlGUzF/pIg0rzVdPbc2VTdwKl+iptuCn3fC+LCTJKroRLq
|
|
77
|
+
2a6GDhtmV2g0SEaNdbJt1Zfwr0KyXLNwK+ZdJxhS44vfTCRB4YBsFw0CgYEA0Ioe
|
|
78
|
+
pcRBEyCJud8ZJnSN/HiOQ9kCIsnd8Pk4D7q+DGWY6lLGQddhlkp9Ah7yRIGJVg91
|
|
79
|
+
D6t5BfpiU8DRGFiEGMo+XWEKjLfRTxg03lBQYACJc2crgFRuG8GFuO/WQ1b9ihR5
|
|
80
|
+
nsdLc9cGIm6rFXaUsnLIN9IJhJg4BmFD1U9usl8CgYEArIN+D02wnkOzDRzSqrqs
|
|
81
|
+
bQlbewcRxrfMbS28moa2Bn3Ivf1J0fqIeNYPL9Ldo7KqI+Z0yEIoNKDpnHWYFyrL
|
|
82
|
+
lidE1lrJN6QKYdn3OPbHUqmHYqYvMEWt7mj9xqOY+9BYMNEPf7xVNrXE28IimJI9
|
|
83
|
+
DkF1GMWtM6GmC3Uu0rxvT3UCgYEAgroCylGDpbThAXa8cmHgXCNKs3eHIj2/dn8U
|
|
84
|
+
SK/80RKjUEkBZWbaEvew87Jols9JQ3y/GkqYvEmgd/ZIXWWnsU6e17Ssg1f7ywRW
|
|
85
|
+
qAJa0EOl5oUHPRQwTg/7ftpCS8Zte7CoKQOv5fcmLlGHyBWk01Sm9G8jbk5p2H4C
|
|
86
|
+
ouZ/cysCgYBqZHm6eg0tjwFPJJWgmAMdNvBlnIuW1t5dwa7B2F6ONveUTBBAxGLc
|
|
87
|
+
ZBVdEBseBPki5i7M7eNKNTEA3EM+Cfsfsp5U/S8ntDmzzaMoBhb+jBRor39l3+iG
|
|
88
|
+
qXI72DDvrh802t6KO9W6CQIfpVcxLeOy82RfUP1pHQ/sMPkx89Fd5A==
|
|
89
|
+
-----END RSA PRIVATE KEY-----`
|
|
90
|
+
|
|
91
|
+
const TLS_INSECURE_SERVER_CERT = `-----BEGIN CERTIFICATE-----
|
|
92
|
+
MIIEVTCCAj0CAQEwDQYJKoZIhvcNAQELBQAwcjELMAkGA1UEBhMCVVMxFjAUBgNV
|
|
93
|
+
BAgMDVNhbiBGcmFuY2lzY28xEjAQBgNVBAcMCVBhbG8gQWx0bzEQMA4GA1UECgwH
|
|
94
|
+
V2VjaGF0eTELMAkGA1UECwwCQ0ExGDAWBgNVBAMMD3dlY2hhdHktcm9vdC1jYTAe
|
|
95
|
+
Fw0yMTA4MjQxODMwMjBaFw0zMTA4MjIxODMwMjBaMG8xCzAJBgNVBAYTAlVTMRYw
|
|
96
|
+
FAYDVQQIDA1TYW4gRnJhbmNpc2NvMRIwEAYDVQQHDAlQYWxvIEFsdG8xEDAOBgNV
|
|
97
|
+
BAoMB1dlY2hhdHkxDzANBgNVBAsMBlB1cHBldDERMA8GA1UEAwwIaW5zZWN1cmUw
|
|
98
|
+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC10VNcAotbXq6o2iQmZKjB
|
|
99
|
+
sa3CcK+w9Kogdx1sqB1y42lomxkNN4E/T9ccW+ddx6Qc7LOdxiCW7GKPMxIPVLwA
|
|
100
|
+
qjdzZ9E6B6b4T5YxItgBlJNXjym7NNEujKm9+Ep+rGyualy3YXq1FMhD8QAE6zRN
|
|
101
|
+
g/R1jc13w2QIRYGa/uKg8N6T9rh6x2Kw3tHURrqPHtOh6BLCOQ/1oWvZcfHKpHnC
|
|
102
|
+
Mmf9DqdhkL0D3QIp3EnZale2W5PEV8V+o6FH/W17n8umpe2rGjbI7C7yTrt8e5vU
|
|
103
|
+
XIu72wBiFyy5KMdUfFsrec9/SY0a3RGJLBGPzirNul/CuMxisAncSoquXFm6uZfT
|
|
104
|
+
AgMBAAEwDQYJKoZIhvcNAQELBQADggIBALyPgW0VLlQfkgsNovyLg+zkF7oJZCvM
|
|
105
|
+
HS7m43abZb1H1xUH6Kd/sUFTQCAAPop/n4773iH0KggWtoPjkid1G1s/UWK6A0F1
|
|
106
|
+
IxRp0DYLgZfL/U+PQxe175ViYRLPUKj1YwagjX6HvM5bUMEYDnIypEH2UFIrD39J
|
|
107
|
+
69Q6M8hZ85oFDAo2hRqrjJo66c3+ygmXSCFIL64gsVLZkK3SHRAv3R90+blNgmo5
|
|
108
|
+
Yvh2xqvGuspd1Y3yzeOQreimJkMeDr/t/xucws1TK7fqMjlk/36W4S95xT7EYykf
|
|
109
|
+
rQ+1cDIJvGdVU/lod0/lWcOvqMtyf6wIjzFJaGAoqS5QT2IeeXQYbhq9bZIBQzth
|
|
110
|
+
IfvfdHuijUqOhT8LX8TYXPWVR/UEKItqktdvA7PXuHUdDxU3ldcXsjA+m9jVO81i
|
|
111
|
+
gIOUJQuBR/tImNnLFaTooO6RB71lBB1XCo8HvWPu47MPjxuf/Y+1frPzuP8LFMWj
|
|
112
|
+
bjw0QcwFUik8v+mSiPHhOIfzp0EQlFtlncTr+k0MFuRKokl0Yrs8jXOt30JC4tKS
|
|
113
|
+
GKXupLWnWE3Z15L9uk9zSAskL2T8LwnctaiMP0+mzf8gWchxUaHkk0yGj4gtNVyU
|
|
114
|
+
iJZfrWYwBY9y4SUjp6A7pLspw+i+jIO/EmcX2jbFt1LaajRgEw+uGvNMXhHqtsHC
|
|
115
|
+
WqE+fOGDBUET
|
|
116
|
+
-----END CERTIFICATE-----`
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Common Name:
|
|
120
|
+
* - Server Name Indication (SNI)
|
|
121
|
+
* - Case insensitive
|
|
122
|
+
*
|
|
123
|
+
* Wechaty Token format: `${SNI}/${UUIDv4}`
|
|
124
|
+
*
|
|
125
|
+
* Huan(202108): the CA generated by Wechaty Puppet Service
|
|
126
|
+
* default set to this value:
|
|
127
|
+
*
|
|
128
|
+
* grpc.ssl_target_name_override: 'insecure'
|
|
129
|
+
*/
|
|
130
|
+
const TLS_INSECURE_SERVER_CERT_COMMON_NAME = 'insecure' // case insensitive
|
|
131
|
+
|
|
132
|
+
export {
|
|
133
|
+
TLS_CA_CERT,
|
|
134
|
+
TLS_INSECURE_SERVER_CERT_COMMON_NAME,
|
|
135
|
+
TLS_INSECURE_SERVER_CERT,
|
|
136
|
+
TLS_INSECURE_SERVER_KEY,
|
|
137
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
test,
|
|
5
|
+
sinon,
|
|
6
|
+
} from 'tstest'
|
|
7
|
+
|
|
8
|
+
import { metaGeneratorToken } from './call-cred.js'
|
|
9
|
+
|
|
10
|
+
test('metaGeneratorToken()', async t => {
|
|
11
|
+
const TOKEN = 'UUIDv4'
|
|
12
|
+
const EXPECTED_AUTHORIZATION = `Wechaty ${TOKEN}`
|
|
13
|
+
|
|
14
|
+
const sandbox = sinon.createSandbox()
|
|
15
|
+
const spy = sandbox.spy()
|
|
16
|
+
|
|
17
|
+
const metaGenerator = metaGeneratorToken(TOKEN)
|
|
18
|
+
|
|
19
|
+
metaGenerator({} as any, spy)
|
|
20
|
+
t.equal(spy.args[0]![0], null, 'should no error')
|
|
21
|
+
|
|
22
|
+
const metadata = spy.args[0]![1]
|
|
23
|
+
const authorization = metadata.get('Authorization')[0]
|
|
24
|
+
t.equal(authorization, EXPECTED_AUTHORIZATION, 'should generate authorization in metadata')
|
|
25
|
+
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
credentials,
|
|
3
|
+
CallMetadataGenerator,
|
|
4
|
+
Metadata,
|
|
5
|
+
} from './grpc-js.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* With server authentication SSL/TLS and a custom header with token
|
|
9
|
+
* https://grpc.io/docs/guides/auth/#with-server-authentication-ssltls-and-a-custom-header-with-token-1
|
|
10
|
+
*/
|
|
11
|
+
const metaGeneratorToken: (token: string) => CallMetadataGenerator = token => (_params, callback) => {
|
|
12
|
+
const meta = new Metadata()
|
|
13
|
+
meta.add('authorization', `Wechaty ${token}`)
|
|
14
|
+
callback(null, meta)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const callCredToken = (token: string) => credentials.createFromMetadataGenerator(metaGeneratorToken(token))
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
callCredToken,
|
|
21
|
+
metaGeneratorToken,
|
|
22
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variables containing newlines in Node?
|
|
3
|
+
* `replace(/\\n/g, '\n')`
|
|
4
|
+
* https://stackoverflow.com/a/36439803/1123955
|
|
5
|
+
*/
|
|
6
|
+
const WECHATY_PUPPET_SERVICE_TLS_CA_CERT = (v?: string) => v
|
|
7
|
+
|| process.env['WECHATY_PUPPET_SERVICE_TLS_CA_CERT']?.replace(/\\n/g, '\n')
|
|
8
|
+
|
|
9
|
+
const WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT = (v?: string) => v
|
|
10
|
+
|| process.env['WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT']?.replace(/\\n/g, '\n')
|
|
11
|
+
|
|
12
|
+
const WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY = (v?: string) => v
|
|
13
|
+
|| process.env['WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY']?.replace(/\\n/g, '\n')
|
|
14
|
+
|
|
15
|
+
const WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME = (v?: string) => v
|
|
16
|
+
|| process.env['WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME']?.replace(/\\n/g, '\n')
|
|
17
|
+
|
|
18
|
+
const WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER = (v?: boolean) => typeof v === 'undefined'
|
|
19
|
+
? process.env['WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER'] === 'true'
|
|
20
|
+
: v
|
|
21
|
+
const WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT = (v?: boolean) => typeof v === 'undefined'
|
|
22
|
+
? process.env['WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT'] === 'true'
|
|
23
|
+
: v
|
|
24
|
+
|
|
25
|
+
export {
|
|
26
|
+
WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_CLIENT,
|
|
27
|
+
WECHATY_PUPPET_SERVICE_NO_TLS_INSECURE_SERVER,
|
|
28
|
+
WECHATY_PUPPET_SERVICE_TLS_CA_CERT,
|
|
29
|
+
WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT,
|
|
30
|
+
WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY,
|
|
31
|
+
WECHATY_PUPPET_SERVICE_TLS_SERVER_NAME,
|
|
32
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import {
|
|
2
|
+
credentials,
|
|
3
|
+
StatusBuilder,
|
|
4
|
+
UntypedHandleCall,
|
|
5
|
+
Metadata,
|
|
6
|
+
UntypedServiceImplementation,
|
|
7
|
+
} from '@grpc/grpc-js'
|
|
8
|
+
import type {
|
|
9
|
+
sendUnaryData,
|
|
10
|
+
ServerUnaryCall,
|
|
11
|
+
} from '@grpc/grpc-js/build/src/server-call.js'
|
|
12
|
+
import type {
|
|
13
|
+
CallMetadataGenerator,
|
|
14
|
+
} from '@grpc/grpc-js/build/src/call-credentials.js'
|
|
15
|
+
import { Status as GrpcStatus } from '@grpc/grpc-js/build/src/constants.js'
|
|
16
|
+
|
|
17
|
+
export type {
|
|
18
|
+
UntypedServiceImplementation,
|
|
19
|
+
UntypedHandleCall,
|
|
20
|
+
sendUnaryData,
|
|
21
|
+
ServerUnaryCall,
|
|
22
|
+
CallMetadataGenerator,
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
credentials,
|
|
26
|
+
GrpcStatus,
|
|
27
|
+
Metadata,
|
|
28
|
+
StatusBuilder,
|
|
29
|
+
}
|
package/src/auth/mod.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { authImplToken } from './auth-impl-token.js'
|
|
2
|
+
import { monkeyPatchMetadataFromHttp2Headers } from './mokey-patch-header-authorization.js'
|
|
3
|
+
import { callCredToken } from './call-cred.js'
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
authImplToken,
|
|
7
|
+
callCredToken,
|
|
8
|
+
monkeyPatchMetadataFromHttp2Headers,
|
|
9
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type http2 from 'http2'
|
|
2
|
+
|
|
3
|
+
import { log } from '@juzi/wechaty-puppet'
|
|
4
|
+
|
|
5
|
+
import type {
|
|
6
|
+
Metadata,
|
|
7
|
+
} from './grpc-js.js'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Huan(202108): This is for compatible with old clients (version v0.26 or before)
|
|
11
|
+
* for non-tls authorization:
|
|
12
|
+
* use the HTTP2 header `:authority` as the token.
|
|
13
|
+
*
|
|
14
|
+
* This feature is planed to be removed after Dec 31, 2022
|
|
15
|
+
*/
|
|
16
|
+
function monkeyPatchMetadataFromHttp2Headers (
|
|
17
|
+
MetadataClass: typeof Metadata,
|
|
18
|
+
): () => void {
|
|
19
|
+
log.verbose('wechaty-puppet-service', 'monkeyPatchMetadataFromHttp2Headers()')
|
|
20
|
+
|
|
21
|
+
const fromHttp2Headers = MetadataClass.fromHttp2Headers
|
|
22
|
+
MetadataClass.fromHttp2Headers = function (
|
|
23
|
+
headers: http2.IncomingHttpHeaders,
|
|
24
|
+
): Metadata {
|
|
25
|
+
const metadata = fromHttp2Headers.call(MetadataClass, headers)
|
|
26
|
+
|
|
27
|
+
if (metadata.get('authorization').length <= 0) {
|
|
28
|
+
const authority = headers[':authority']
|
|
29
|
+
const authorization = `Wechaty ${authority}`
|
|
30
|
+
metadata.set('authorization', authorization)
|
|
31
|
+
}
|
|
32
|
+
return metadata
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* un-monkey-patch
|
|
37
|
+
*/
|
|
38
|
+
return () => {
|
|
39
|
+
MetadataClass.fromHttp2Headers = fromHttp2Headers
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
monkeyPatchMetadataFromHttp2Headers,
|
|
45
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
import { test } from 'tstest'
|
|
4
|
+
import type http2 from 'http2'
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
Metadata,
|
|
8
|
+
} from './grpc-js.js'
|
|
9
|
+
|
|
10
|
+
import { monkeyPatchMetadataFromHttp2Headers } from './mokey-patch-header-authorization.js'
|
|
11
|
+
|
|
12
|
+
test('monkeyPatchMetadataFromHttp2Headers', async t => {
|
|
13
|
+
const AUTHORITY = '__authority__'
|
|
14
|
+
const headers: http2.IncomingHttpHeaders = {
|
|
15
|
+
':authority': AUTHORITY,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const dispose = monkeyPatchMetadataFromHttp2Headers(Metadata)
|
|
19
|
+
const meta = Metadata.fromHttp2Headers(headers)
|
|
20
|
+
|
|
21
|
+
const authorization = meta.get('authorization')[0]
|
|
22
|
+
const EXPECTED = `Wechaty ${AUTHORITY}`
|
|
23
|
+
t.equal(authorization, EXPECTED, 'should get authority from metadata')
|
|
24
|
+
|
|
25
|
+
dispose()
|
|
26
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
/* eslint-disable sort-keys */
|
|
21
|
+
import {
|
|
22
|
+
createAction,
|
|
23
|
+
} from 'typesafe-actions'
|
|
24
|
+
|
|
25
|
+
import * as types from './types.js'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Bug compatible & workaround for Ducks API
|
|
29
|
+
* https://github.com/huan/ducks/issues/2
|
|
30
|
+
*/
|
|
31
|
+
export const nop = createAction(types.NOP)()
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
/* eslint-disable func-call-spacing */
|
|
3
|
+
|
|
4
|
+
import { test } from 'tstest'
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
TestScheduler,
|
|
8
|
+
} from 'rxjs/testing'
|
|
9
|
+
import {
|
|
10
|
+
throttleTime,
|
|
11
|
+
} from 'rxjs/operators'
|
|
12
|
+
import PuppetMock from 'wechaty-puppet-mock'
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
Duck as PuppetDuck,
|
|
16
|
+
} from 'wechaty-redux'
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
epicRecoverReset$,
|
|
20
|
+
epicRecoverDing$,
|
|
21
|
+
monitorHeartbeat$,
|
|
22
|
+
} from './epic-recover.js'
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* RxJS Marble Testing
|
|
26
|
+
*
|
|
27
|
+
* - https://rxjs.dev/guide/testing/marble-testing
|
|
28
|
+
* - https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/testing/marble-testing.md
|
|
29
|
+
*
|
|
30
|
+
*/
|
|
31
|
+
test('Example: marble testing', async t => {
|
|
32
|
+
const testScheduler = new TestScheduler(t.same)
|
|
33
|
+
|
|
34
|
+
testScheduler.run(helpers => {
|
|
35
|
+
const { cold, time, expectObservable, expectSubscriptions } = helpers
|
|
36
|
+
const e1 = cold('-a--b--c---|')
|
|
37
|
+
const e1subs = ' ^----------!'
|
|
38
|
+
const t = time('---| ') // t = 3
|
|
39
|
+
const expected = ' -a-----c---|'
|
|
40
|
+
|
|
41
|
+
expectObservable(e1.pipe(throttleTime(t))).toBe(expected)
|
|
42
|
+
expectSubscriptions(e1.subscriptions).toBe(e1subs)
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
test('Example 2: marble subscribe time frame testing', async t => {
|
|
47
|
+
const testScheduler = new TestScheduler(t.same)
|
|
48
|
+
|
|
49
|
+
testScheduler.run(helpers => {
|
|
50
|
+
const { hot, expectObservable, expectSubscriptions } = helpers
|
|
51
|
+
const source = hot(' --a--b--c--d--e--f')
|
|
52
|
+
const subscription = '-----^------!-'
|
|
53
|
+
const expected = ' -----b--c--d--'
|
|
54
|
+
expectObservable(source, subscription).toBe(expected)
|
|
55
|
+
void expectSubscriptions
|
|
56
|
+
// expectSubscriptions(source.subscriptions).toBe(subscription)
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
test('Example 3: subscribe with unsubscribe / complete', async t => {
|
|
61
|
+
const testScheduler = new TestScheduler(t.same)
|
|
62
|
+
|
|
63
|
+
testScheduler.run(({ hot, expectObservable }) => {
|
|
64
|
+
const values = {
|
|
65
|
+
a: 0,
|
|
66
|
+
b: 1,
|
|
67
|
+
c: 2,
|
|
68
|
+
}
|
|
69
|
+
const source = hot(' 10ms a 9ms b 9ms c-|', values)
|
|
70
|
+
const subscription1 = ' 20ms ^ 9ms -!-'
|
|
71
|
+
const subscription2 = ' 30ms ^--'
|
|
72
|
+
const expected1 = ' 20ms b 9ms c--'
|
|
73
|
+
const expected2 = ' 30ms c-|'
|
|
74
|
+
expectObservable(source, subscription1).toBe(expected1, values)
|
|
75
|
+
expectObservable(source, subscription2).toBe(expected2, values)
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
test('Example 4: play ground', async t => {
|
|
80
|
+
const testScheduler = new TestScheduler(t.same)
|
|
81
|
+
|
|
82
|
+
testScheduler.run(helpers => {
|
|
83
|
+
const { hot, cold, expectObservable } = helpers
|
|
84
|
+
void hot
|
|
85
|
+
void cold
|
|
86
|
+
const TIMEOUT = 15
|
|
87
|
+
const source = hot(`-----a-----h------h ${TIMEOUT}ms --`)
|
|
88
|
+
const sub = ` ------^-------!---- ${TIMEOUT}ms --`
|
|
89
|
+
const expected = ` -----------h------- ${TIMEOUT}ms --`
|
|
90
|
+
|
|
91
|
+
expectObservable(source, sub).toBe(expected)
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
test('monitorHeartbeat$() emit once after lost heartbeat', async t => {
|
|
96
|
+
const testScheduler = new TestScheduler(t.same)
|
|
97
|
+
|
|
98
|
+
const puppet = new PuppetMock() as any
|
|
99
|
+
|
|
100
|
+
const TIMEOUT = 15
|
|
101
|
+
|
|
102
|
+
testScheduler.run(helpers => {
|
|
103
|
+
const { hot, expectObservable, expectSubscriptions } = helpers
|
|
104
|
+
|
|
105
|
+
const marble = {
|
|
106
|
+
a: PuppetDuck.actions.STATE_ACTIVATED_EVENT (puppet.id, true),
|
|
107
|
+
d: PuppetDuck.actions.DONG_RECEIVED_EVENT (puppet.id, { data: 'dong' }),
|
|
108
|
+
e: PuppetDuck.actions.ERROR_RECEIVED_EVENT (puppet.id, { gerror: `monitorHeartbeat$() TIMEOUT(${TIMEOUT})` }),
|
|
109
|
+
h: PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, { data: 'heartbeat' }),
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const puppet$ = hot(` -a----h----h ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT - 1}ms h ${TIMEOUT}ms ${TIMEOUT - 1}ms d ${TIMEOUT}ms ------`, marble)
|
|
113
|
+
const subscription = `^----------- ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms -----!`
|
|
114
|
+
const expected = ` ------------ ${TIMEOUT - 1}ms e ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT - 1}ms e ${TIMEOUT}ms ${TIMEOUT - 1}ms e ------`
|
|
115
|
+
|
|
116
|
+
expectObservable(
|
|
117
|
+
monitorHeartbeat$(TIMEOUT)(puppet$),
|
|
118
|
+
subscription,
|
|
119
|
+
).toBe(expected, marble)
|
|
120
|
+
|
|
121
|
+
void expectSubscriptions
|
|
122
|
+
// expectSubscriptions(puppet$.subscriptions).toBe(sub)
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
test('epicRecoverDing$() emit periodly', async t => {
|
|
127
|
+
const testScheduler = new TestScheduler(t.same)
|
|
128
|
+
|
|
129
|
+
const puppet = new PuppetMock() as any
|
|
130
|
+
|
|
131
|
+
const TIMEOUT = 15
|
|
132
|
+
|
|
133
|
+
testScheduler.run(helpers => {
|
|
134
|
+
const { hot, expectObservable } = helpers
|
|
135
|
+
|
|
136
|
+
const marble = {
|
|
137
|
+
a: PuppetDuck.actions.STATE_ACTIVATED_EVENT (puppet.id, true),
|
|
138
|
+
d: PuppetDuck.actions.DONG_RECEIVED_EVENT (puppet.id, { data: 'dong' }),
|
|
139
|
+
h: PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, { data: 'heartbeat' }),
|
|
140
|
+
i: PuppetDuck.actions.DING_COMMAND (puppet.id, 'epicRecoverDing$'),
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const puppet$ = hot(` -a----h----h ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT - 1}ms h ${TIMEOUT - 1}ms h ${TIMEOUT - 1}ms d ${TIMEOUT - 1}ms d ------`, marble)
|
|
144
|
+
const subscription = `^----------- ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms -----!`
|
|
145
|
+
const expected = ` ------------ ${TIMEOUT - 1}ms i ${TIMEOUT - 1}ms i ${TIMEOUT - 1}ms i ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ------`
|
|
146
|
+
|
|
147
|
+
expectObservable(
|
|
148
|
+
epicRecoverDing$(TIMEOUT)(puppet$),
|
|
149
|
+
subscription,
|
|
150
|
+
).toBe(expected, marble)
|
|
151
|
+
})
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
test('epicRecoverReset$() emit periodly', async t => {
|
|
155
|
+
const testScheduler = new TestScheduler(t.same)
|
|
156
|
+
|
|
157
|
+
const puppet = new PuppetMock() as any
|
|
158
|
+
|
|
159
|
+
const TIMEOUT = 60
|
|
160
|
+
|
|
161
|
+
testScheduler.run(helpers => {
|
|
162
|
+
const { hot, expectObservable } = helpers
|
|
163
|
+
|
|
164
|
+
const marble = {
|
|
165
|
+
a: PuppetDuck.actions.STATE_ACTIVATED_EVENT (puppet.id, true),
|
|
166
|
+
d: PuppetDuck.actions.DONG_RECEIVED_EVENT (puppet.id, { data: 'dong' }),
|
|
167
|
+
h: PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT(puppet.id, { data: 'heartbeat' }),
|
|
168
|
+
r: PuppetDuck.actions.RESET_COMMAND (puppet.id, 'epicRecoverReset$'),
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
const puppet$ = hot(` -a----h----h ${TIMEOUT}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2 - 1}ms h ${TIMEOUT - 1}ms h ${TIMEOUT - 1}ms d ${TIMEOUT - 1}ms d ------`, marble)
|
|
172
|
+
const subscription = `^----------- ${TIMEOUT}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2}ms ${TIMEOUT * 2}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms -----!`
|
|
173
|
+
const expected = ` ------------ ${TIMEOUT - 1}ms r ${TIMEOUT * 2 - 1}ms r ${TIMEOUT * 2 - 1}ms r ${TIMEOUT * 2}ms ${TIMEOUT}ms ${TIMEOUT}ms ${TIMEOUT}ms ------`
|
|
174
|
+
|
|
175
|
+
expectObservable(
|
|
176
|
+
epicRecoverReset$(TIMEOUT)(puppet$),
|
|
177
|
+
subscription,
|
|
178
|
+
).toBe(expected, marble)
|
|
179
|
+
})
|
|
180
|
+
})
|
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
Observable,
|
|
22
|
+
interval,
|
|
23
|
+
timer,
|
|
24
|
+
} from 'rxjs'
|
|
25
|
+
import {
|
|
26
|
+
debounce,
|
|
27
|
+
filter,
|
|
28
|
+
map,
|
|
29
|
+
switchMap,
|
|
30
|
+
takeUntil,
|
|
31
|
+
tap,
|
|
32
|
+
} from 'rxjs/operators'
|
|
33
|
+
import {
|
|
34
|
+
isActionOf,
|
|
35
|
+
} from 'typesafe-actions'
|
|
36
|
+
import type {
|
|
37
|
+
// type Action,
|
|
38
|
+
AnyAction,
|
|
39
|
+
} from 'redux'
|
|
40
|
+
import {
|
|
41
|
+
Duck as PuppetDuck,
|
|
42
|
+
} from 'wechaty-redux'
|
|
43
|
+
import { log } from '@juzi/wechaty-puppet'
|
|
44
|
+
|
|
45
|
+
const stateActive$ = (action$: Observable<AnyAction>) => action$.pipe(
|
|
46
|
+
filter(isActionOf(PuppetDuck.actions.STATE_ACTIVATED_EVENT)),
|
|
47
|
+
filter(action => action.payload.state === true),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
const stateInactive$ = (action$: Observable<AnyAction>) => action$.pipe(
|
|
51
|
+
filter(isActionOf(PuppetDuck.actions.STATE_INACTIVATED_EVENT)),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
const heartbeat$ = (action$: Observable<AnyAction>) => action$.pipe(
|
|
55
|
+
filter(isActionOf([
|
|
56
|
+
PuppetDuck.actions.HEARTBEAT_RECEIVED_EVENT,
|
|
57
|
+
PuppetDuck.actions.DONG_RECEIVED_EVENT,
|
|
58
|
+
])),
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
// Emit once when an active puppet lost heartbeat after a timeout period
|
|
62
|
+
const monitorHeartbeat$ = (timeoutMilliseconds: number) =>
|
|
63
|
+
(action$: Observable<AnyAction>) =>
|
|
64
|
+
stateActive$(action$).pipe(
|
|
65
|
+
switchMap(action => heartbeat$(action$).pipe(
|
|
66
|
+
debounce(() => interval(timeoutMilliseconds)),
|
|
67
|
+
tap(() => log.verbose('PuppetService', 'monitorHeartbeat$() %d seconds TIMEOUT',
|
|
68
|
+
Math.floor(timeoutMilliseconds / 1000),
|
|
69
|
+
)),
|
|
70
|
+
map(() => PuppetDuck.actions.ERROR_RECEIVED_EVENT(
|
|
71
|
+
action.meta.puppetId,
|
|
72
|
+
{ gerror: `monitorHeartbeat$() TIMEOUT(${timeoutMilliseconds})` },
|
|
73
|
+
)),
|
|
74
|
+
)),
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
const epicRecoverDing$ = (timeoutMilliseconds: number) =>
|
|
78
|
+
(action$: Observable<AnyAction>) =>
|
|
79
|
+
monitorHeartbeat$(timeoutMilliseconds)(action$).pipe(
|
|
80
|
+
switchMap(action => timer(0, Math.floor(timeoutMilliseconds)).pipe(
|
|
81
|
+
tap(n => log.verbose('PuppetService', 'epicRecoverDing$() actions.ding() emitted #%d', n)),
|
|
82
|
+
map(() => PuppetDuck.actions.DING_COMMAND(
|
|
83
|
+
action.meta.puppetId,
|
|
84
|
+
'epicRecoverDing$',
|
|
85
|
+
)),
|
|
86
|
+
takeUntil(heartbeat$(action$)),
|
|
87
|
+
takeUntil(stateInactive$(action$)),
|
|
88
|
+
)),
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
const epicRecoverReset$ = (timeoutMilliseconds: number) =>
|
|
92
|
+
(action$: Observable<AnyAction>) =>
|
|
93
|
+
monitorHeartbeat$(timeoutMilliseconds)(action$).pipe(
|
|
94
|
+
switchMap(action => timer(0, timeoutMilliseconds * 2).pipe(
|
|
95
|
+
tap(n => log.verbose('PuppetService', 'epicRecoverReset$() actions.reset() emitted #%d', n)),
|
|
96
|
+
map(() => PuppetDuck.actions.RESET_COMMAND(
|
|
97
|
+
action.meta.puppetId,
|
|
98
|
+
'epicRecoverReset$',
|
|
99
|
+
)),
|
|
100
|
+
takeUntil(heartbeat$(action$)),
|
|
101
|
+
takeUntil(stateInactive$(action$)),
|
|
102
|
+
)),
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
export {
|
|
106
|
+
monitorHeartbeat$,
|
|
107
|
+
epicRecoverReset$,
|
|
108
|
+
epicRecoverDing$,
|
|
109
|
+
}
|