@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,14 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
/**
|
|
3
|
+
* Software performance testing
|
|
4
|
+
* https://en.wikipedia.org/wiki/Software_performance_testing#Testing_types
|
|
5
|
+
*
|
|
6
|
+
* 负载测试,并发测试和压力测试,这三者之前的区别和联系?
|
|
7
|
+
* https://www.zhihu.com/question/269215477/answer/350162604
|
|
8
|
+
*
|
|
9
|
+
* NodeJS: How Is Logging Enabled for the @grpc/grpc.js Package
|
|
10
|
+
* https://stackoverflow.com/a/60935367/1123955
|
|
11
|
+
* GRPC_VERBOSITY=DEBUG GRPC_TRACE=all
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=performance.spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.spec.d.ts","sourceRoot":"","sources":["../../../tests/performance.spec.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
/**
|
|
3
|
+
* Software performance testing
|
|
4
|
+
* https://en.wikipedia.org/wiki/Software_performance_testing#Testing_types
|
|
5
|
+
*
|
|
6
|
+
* 负载测试,并发测试和压力测试,这三者之前的区别和联系?
|
|
7
|
+
* https://www.zhihu.com/question/269215477/answer/350162604
|
|
8
|
+
*
|
|
9
|
+
* NodeJS: How Is Logging Enabled for the @grpc/grpc.js Package
|
|
10
|
+
* https://stackoverflow.com/a/60935367/1123955
|
|
11
|
+
* GRPC_VERBOSITY=DEBUG GRPC_TRACE=all
|
|
12
|
+
*/
|
|
13
|
+
import { test, sinon, } from 'tstest';
|
|
14
|
+
import * as PUPPET from '@juzi/wechaty-puppet';
|
|
15
|
+
import { PuppetMock, } from 'wechaty-puppet-mock';
|
|
16
|
+
import { PuppetService, PuppetServer, } from '../src/mod.js';
|
|
17
|
+
import { log } from '../src/config.js';
|
|
18
|
+
const idToName = (id) => {
|
|
19
|
+
return `name of ${id}`;
|
|
20
|
+
};
|
|
21
|
+
class PuppetTest extends PuppetMock {
|
|
22
|
+
constructor(...args) {
|
|
23
|
+
super(...args);
|
|
24
|
+
}
|
|
25
|
+
async contactRawPayload(id) {
|
|
26
|
+
log.verbose('PuppetTest', 'contactRawPayload(%s)', id);
|
|
27
|
+
const rawPayload = {
|
|
28
|
+
avatar: '',
|
|
29
|
+
gender: PUPPET.types.ContactGender.Male,
|
|
30
|
+
id,
|
|
31
|
+
name: idToName(id),
|
|
32
|
+
phone: [],
|
|
33
|
+
type: PUPPET.types.Contact.Individual,
|
|
34
|
+
};
|
|
35
|
+
await new Promise(resolve => {
|
|
36
|
+
process.stdout.write(',');
|
|
37
|
+
setTimeout(() => {
|
|
38
|
+
process.stdout.write('.');
|
|
39
|
+
resolve();
|
|
40
|
+
}, 1000);
|
|
41
|
+
});
|
|
42
|
+
return rawPayload;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
test.skip('stress testing', async (t) => {
|
|
46
|
+
const TOKEN = 'test_token';
|
|
47
|
+
const ENDPOINT = '0.0.0.0:8788';
|
|
48
|
+
// const DING = 'ding_data'
|
|
49
|
+
/**
|
|
50
|
+
* Puppet in Service
|
|
51
|
+
*/
|
|
52
|
+
const puppet = new PuppetTest();
|
|
53
|
+
const spy = sinon.spy(puppet, 'contactRawPayload');
|
|
54
|
+
/**
|
|
55
|
+
* Puppet Server
|
|
56
|
+
*/
|
|
57
|
+
const serverOptions = {
|
|
58
|
+
endpoint: ENDPOINT,
|
|
59
|
+
puppet: puppet,
|
|
60
|
+
token: TOKEN,
|
|
61
|
+
};
|
|
62
|
+
const puppetServer = new PuppetServer(serverOptions);
|
|
63
|
+
await puppetServer.start();
|
|
64
|
+
/**
|
|
65
|
+
* Puppet Service Client
|
|
66
|
+
*/
|
|
67
|
+
const puppetOptions = {
|
|
68
|
+
endpoint: ENDPOINT,
|
|
69
|
+
token: TOKEN,
|
|
70
|
+
};
|
|
71
|
+
const puppetService = new PuppetService(puppetOptions);
|
|
72
|
+
await puppetService.start();
|
|
73
|
+
let COUNTER = 0;
|
|
74
|
+
const dongList = [];
|
|
75
|
+
puppetService.on('dong', payload => {
|
|
76
|
+
dongList.push(payload.data || '');
|
|
77
|
+
});
|
|
78
|
+
const timer = setInterval(() => {
|
|
79
|
+
puppetService.ding(`interval ${COUNTER++}`);
|
|
80
|
+
}, 10);
|
|
81
|
+
const CONCURRENCY = 1000;
|
|
82
|
+
const concurrencyList = [
|
|
83
|
+
...Array(CONCURRENCY).keys(),
|
|
84
|
+
].map(String);
|
|
85
|
+
const resultList = await Promise.all(concurrencyList.map(id => puppetService.contactPayload(id)));
|
|
86
|
+
console.info();
|
|
87
|
+
clearInterval(timer);
|
|
88
|
+
const actualNameList = resultList.map(payload => payload.name);
|
|
89
|
+
const EXPECTED_RESULT_LIST = concurrencyList.map(idToName);
|
|
90
|
+
t.equal(spy.callCount, CONCURRENCY, `should be called ${CONCURRENCY} times`);
|
|
91
|
+
t.same(actualNameList, EXPECTED_RESULT_LIST, `should get the right result with a huge concurrency ${CONCURRENCY}`);
|
|
92
|
+
t.ok(dongList.length > 10, `dongList should receive many dong data (actual: ${dongList.length})`);
|
|
93
|
+
t.equal(dongList[0], 'interval 0', 'dongList should get the first response from counter 0');
|
|
94
|
+
/**
|
|
95
|
+
* Stop
|
|
96
|
+
* 1. Puppet in Service
|
|
97
|
+
* 2. Puppet Service Server
|
|
98
|
+
* 3. Puppet Service Client
|
|
99
|
+
*
|
|
100
|
+
*/
|
|
101
|
+
await puppetService.stop();
|
|
102
|
+
await puppetServer.stop();
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=performance.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.spec.js","sourceRoot":"","sources":["../../../tests/performance.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready-event.spec.d.ts","sourceRoot":"","sources":["../../../tests/ready-event.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
import { test } from 'tstest';
|
|
3
|
+
import PuppetMock from 'wechaty-puppet-mock';
|
|
4
|
+
import getPort from 'get-port';
|
|
5
|
+
import PuppetService, { PuppetServer, } from '../src/mod.js';
|
|
6
|
+
const NIL_UUID_V4 = '00000000-0000-0000-0000-000000000000';
|
|
7
|
+
test('ready event test', async (t) => {
|
|
8
|
+
const PORT = await getPort();
|
|
9
|
+
const TOKEN = `insecure_${NIL_UUID_V4}`;
|
|
10
|
+
const ENDPOINT = `0.0.0.0:${PORT}`;
|
|
11
|
+
/**
|
|
12
|
+
* Puppet Server
|
|
13
|
+
*/
|
|
14
|
+
const puppet = new PuppetMock();
|
|
15
|
+
// set ready to true before service starts
|
|
16
|
+
puppet.readyIndicator.value(true);
|
|
17
|
+
puppet.__currentUserId = 'logged in';
|
|
18
|
+
const serverOptions = {
|
|
19
|
+
endpoint: ENDPOINT,
|
|
20
|
+
puppet: puppet,
|
|
21
|
+
token: TOKEN,
|
|
22
|
+
};
|
|
23
|
+
const puppetServer = new PuppetServer(serverOptions);
|
|
24
|
+
await puppetServer.start();
|
|
25
|
+
/**
|
|
26
|
+
* Puppet Service Client
|
|
27
|
+
*/
|
|
28
|
+
const puppetOptions = {
|
|
29
|
+
endpoint: ENDPOINT,
|
|
30
|
+
token: TOKEN,
|
|
31
|
+
};
|
|
32
|
+
// check if ready event is emited on this ready-ed puppet
|
|
33
|
+
const puppetService = new PuppetService(puppetOptions);
|
|
34
|
+
const eventList = [];
|
|
35
|
+
const loginFuture = new Promise(resolve => puppetService.once('login', () => {
|
|
36
|
+
eventList.push('login');
|
|
37
|
+
resolve();
|
|
38
|
+
}));
|
|
39
|
+
const readyFuture = new Promise(resolve => puppetService.once('ready', () => {
|
|
40
|
+
eventList.push('ready');
|
|
41
|
+
resolve();
|
|
42
|
+
}));
|
|
43
|
+
await Promise.all([
|
|
44
|
+
puppetService.start(),
|
|
45
|
+
loginFuture,
|
|
46
|
+
readyFuture,
|
|
47
|
+
]);
|
|
48
|
+
t.same(eventList, ['login', 'ready'], 'should have `login` event first then `ready`');
|
|
49
|
+
await puppetService.stop();
|
|
50
|
+
await puppetServer.stop();
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=ready-event.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready-event.spec.js","sourceRoot":"","sources":["../../../tests/ready-event.spec.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAI7B,OAAO,UAAU,MAAM,qBAAqB,CAAA;AAC5C,OAAO,OAAO,MAAM,UAAU,CAAA;AAE9B,OAAO,aAAa,EAAE,EACpB,YAAY,GAEb,MAAM,eAAe,CAAA;AAEtB,MAAM,WAAW,GAAG,sCAAsC,CAAA;AAE1D,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,YAAY,WAAW,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,WAAW,IAAI,EAAE,CAAA;IAElC;;OAEG;IACH,MAAM,MAAM,GAAG,IAAI,UAAU,EAAS,CAAA;IAEtC,0CAA0C;IAC1C,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAChC;IAAC,MAAc,CAAC,eAAe,GAAG,WAAW,CAAA;IAC9C,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,KAAK;KACU,CAAA;IAExB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAA;IAEpD,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;IAE1B;;OAEG;IACH,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,KAAK;KACI,CAAA;IAElB,yDAAyD;IACzD,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAA;IACtD,MAAM,SAAS,GAAU,EAAE,CAAA;IAE3B,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAChF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAC,CAAA;IACH,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QAChF,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvB,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAC,CAAA;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,aAAa,CAAC,KAAK,EAAE;QACrB,WAAW;QACX,WAAW;KACZ,CAAC,CAAA;IAEF,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,8CAA8C,CAAC,CAAA;IAErF,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;IAC1B,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-file-box.spec.d.ts","sourceRoot":"","sources":["../../../tests/uuid-file-box.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
import { test } from 'tstest';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import PuppetMock from 'wechaty-puppet-mock';
|
|
6
|
+
import getPort from 'get-port';
|
|
7
|
+
import temp from 'temp';
|
|
8
|
+
import { FileBox } from 'file-box';
|
|
9
|
+
import PuppetService, { PuppetServer } from '../src/mod.js';
|
|
10
|
+
const NIL_UUID_V4 = '00000000-0000-0000-0000-000000000000';
|
|
11
|
+
const __dirname = path.resolve();
|
|
12
|
+
test('message file test', async (t) => {
|
|
13
|
+
const PORT = await getPort();
|
|
14
|
+
const TOKEN = `insecure_${NIL_UUID_V4}`;
|
|
15
|
+
const ENDPOINT = `0.0.0.0:${PORT}`;
|
|
16
|
+
const FILE = path.join(__dirname, 'tests', 'fixtures', 'smoke-testing.ts');
|
|
17
|
+
const EXPECTED_SIZE = fs.statSync(FILE).size;
|
|
18
|
+
/**
|
|
19
|
+
* Puppet Server
|
|
20
|
+
*/
|
|
21
|
+
const puppet = new PuppetMock();
|
|
22
|
+
puppet.messageFile = async () => FileBox.fromFile(FILE);
|
|
23
|
+
const serverOptions = {
|
|
24
|
+
endpoint: ENDPOINT,
|
|
25
|
+
puppet: puppet,
|
|
26
|
+
token: TOKEN,
|
|
27
|
+
};
|
|
28
|
+
const puppetServer = new PuppetServer(serverOptions);
|
|
29
|
+
await puppetServer.start();
|
|
30
|
+
/**
|
|
31
|
+
* Puppet Service Client
|
|
32
|
+
*/
|
|
33
|
+
const puppetOptions = {
|
|
34
|
+
endpoint: ENDPOINT,
|
|
35
|
+
token: TOKEN,
|
|
36
|
+
};
|
|
37
|
+
const puppetService = new PuppetService(puppetOptions);
|
|
38
|
+
await puppetService.start();
|
|
39
|
+
const file = await puppetService.messageFile('sb');
|
|
40
|
+
const tmpFolder = temp.mkdirSync('test');
|
|
41
|
+
const tmpFile = path.join(tmpFolder, 'uuid-file.dat');
|
|
42
|
+
await file.toFile(tmpFile);
|
|
43
|
+
const fileSize = fs.statSync(tmpFile).size;
|
|
44
|
+
t.equal(fileSize, EXPECTED_SIZE, 'should save file with the correct size');
|
|
45
|
+
fs.rmSync(tmpFile);
|
|
46
|
+
await puppetService.stop();
|
|
47
|
+
await puppetServer.stop();
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=uuid-file-box.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-file-box.spec.js","sourceRoot":"","sources":["../../../tests/uuid-file-box.spec.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAsB,QAAQ,CAAA;AAC7C,OAAO,KAAK,IAAI,MAAqB,MAAM,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAuB,IAAI,CAAA;AAEzC,OAAO,UAAU,MAAoB,qBAAqB,CAAA;AAC1D,OAAO,OAAO,MAAuB,UAAU,CAAA;AAC/C,OAAO,IAAI,MAA0B,MAAM,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAmB,UAAU,CAAA;AAE/C,OAAO,aAAa,EAAE,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAA;AAEhF,MAAM,WAAW,GAAG,sCAAsC,CAAA;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;AAEhC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAA;IAC5B,MAAM,KAAK,GAAG,YAAY,WAAW,EAAE,CAAA;IACvC,MAAM,QAAQ,GAAG,WAAW,IAAI,EAAE,CAAA;IAElC,MAAM,IAAI,GAAY,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAA;IACnF,MAAM,aAAa,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAA;IAE5C;;OAEG;IACH,MAAM,MAAM,GAAG,IAAI,UAAU,EAAS,CAAA;IACtC,MAAM,CAAC,WAAW,GAAG,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEvD,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,KAAK;KACU,CAAA;IAExB,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAA;IACpD,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;IAE1B;;OAEG;IACH,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,KAAK;KACI,CAAA;IAElB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,aAAa,CAAC,CAAA;IACtD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;IAE3B,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAElD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IAErD,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAA;IAE1C,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,wCAAwC,CAAC,CAAA;IAE1E,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClB,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;IAC1B,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@juzi/wechaty-puppet-service",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Puppet Service for Wechaty",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"import": "./dist/esm/src/mod.js",
|
|
9
|
+
"require": "./dist/cjs/src/mod.js"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"typings": "./dist/esm/src/mod.d.ts",
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=16",
|
|
15
|
+
"npm": ">=7"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc && tsc -p tsconfig.cjs.json",
|
|
19
|
+
"clean": "shx rm -fr dist/*",
|
|
20
|
+
"dist": "npm-run-all clean build dist:commonjs",
|
|
21
|
+
"dist:commonjs": "jq -n \"{ type: \\\"commonjs\\\" }\" > dist/cjs/package.json",
|
|
22
|
+
"lint": "npm-run-all lint:es lint:ts lint:md",
|
|
23
|
+
"lint:md": "markdownlint README.md",
|
|
24
|
+
"lint:ts": "tsc --isolatedModules --noEmit",
|
|
25
|
+
"start": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ding-dong-bot.ts",
|
|
26
|
+
"test": "npm run lint && npm run test:unit",
|
|
27
|
+
"test:pack": "bash -x scripts/npm-pack-testing.sh",
|
|
28
|
+
"test:unit": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" TAP_TIMEOUT=60 tap \"src/**/*.spec.ts\" \"tests/**/*.spec.ts\"",
|
|
29
|
+
"lint:es": "eslint --ignore-pattern fixtures/ \"src/**/*.ts\" \"tests/**/*.ts\""
|
|
30
|
+
},
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "git+https://github.com/juzibot/wechaty-puppet-service.git"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"chatie",
|
|
37
|
+
"wechaty",
|
|
38
|
+
"chatbot",
|
|
39
|
+
"bot",
|
|
40
|
+
"grpc",
|
|
41
|
+
"wechat",
|
|
42
|
+
"sdk"
|
|
43
|
+
],
|
|
44
|
+
"author": "Huan LI <zixia@zixia.net>",
|
|
45
|
+
"license": "Apache-2.0",
|
|
46
|
+
"bugs": {
|
|
47
|
+
"url": "https://github.com/juzibot/wechaty-puppet-service/issues"
|
|
48
|
+
},
|
|
49
|
+
"homepage": "https://github.com/juzibot/wechaty-puppet-service#readme",
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@chatie/eslint-config": "^1.0.4",
|
|
52
|
+
"@chatie/semver": "^0.4.7",
|
|
53
|
+
"@chatie/tsconfig": "^4.6.3",
|
|
54
|
+
"@types/google-protobuf": "^3.15.5",
|
|
55
|
+
"@types/lru-cache": "^7.5.0",
|
|
56
|
+
"@types/semver": "^7.3.9",
|
|
57
|
+
"@types/temp": "^0.9.1",
|
|
58
|
+
"@types/uuid": "^8.3.4",
|
|
59
|
+
"@types/ws": "^8.5.3",
|
|
60
|
+
"get-port": "^6.1.2",
|
|
61
|
+
"temp": "^0.9.4",
|
|
62
|
+
"typed-emitter": "^1.5.0-from-event",
|
|
63
|
+
"utility-types": "^3.10.0",
|
|
64
|
+
"wechaty-puppet-mock": "^1.18.2",
|
|
65
|
+
"why-is-node-running": "^2.2.1"
|
|
66
|
+
},
|
|
67
|
+
"peerDependencies": {
|
|
68
|
+
"@juzi/wechaty-puppet": "1.0.0"
|
|
69
|
+
},
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"clone-class": "^1.1.1",
|
|
72
|
+
"ducks": "^1.0.2",
|
|
73
|
+
"file-box": "^1.5.5",
|
|
74
|
+
"flash-store": "^1.3.4",
|
|
75
|
+
"gerror": "^1.0.16",
|
|
76
|
+
"redux-observable": "^2.0.0",
|
|
77
|
+
"rxjs": "^7.5.5",
|
|
78
|
+
"semver": "^7.3.5",
|
|
79
|
+
"stronger-typed-streams": "^0.2.0",
|
|
80
|
+
"uuid": "^8.3.2",
|
|
81
|
+
"@juzi/wechaty-grpc": "1.0.0",
|
|
82
|
+
"wechaty-redux": "^1.20.2",
|
|
83
|
+
"wechaty-token": "^1.0.6"
|
|
84
|
+
},
|
|
85
|
+
"publishConfig": {
|
|
86
|
+
"access": "public",
|
|
87
|
+
"tag": "latest"
|
|
88
|
+
},
|
|
89
|
+
"files": [
|
|
90
|
+
"bin/",
|
|
91
|
+
"dist/",
|
|
92
|
+
"src/"
|
|
93
|
+
],
|
|
94
|
+
"tap": {
|
|
95
|
+
"check-coverage": false
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Auth for Wechaty Puppet Service gRPC
|
|
2
|
+
|
|
3
|
+
1. OpenSSL CA generation script: <https://github.com/wechaty/dotenv/blob/main/ca/generate.sh>
|
|
4
|
+
1. Common Name (CN) is very important because it will be used as Server Name Indication (SNI) in TLS handshake.
|
|
5
|
+
|
|
6
|
+
## Monkey Patch
|
|
7
|
+
|
|
8
|
+
We need to copy http2 header `:authority` to metadata.
|
|
9
|
+
|
|
10
|
+
See: <monkey-patch-header-authorization.ts>
|
|
@@ -0,0 +1,81 @@
|
|
|
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 {
|
|
9
|
+
GrpcStatus,
|
|
10
|
+
Metadata,
|
|
11
|
+
UntypedServiceImplementation,
|
|
12
|
+
} from './grpc-js.js'
|
|
13
|
+
|
|
14
|
+
import { authImplToken } from './auth-impl-token.js'
|
|
15
|
+
|
|
16
|
+
test('authImplToken()', async t => {
|
|
17
|
+
const sandbox = sinon.createSandbox()
|
|
18
|
+
const spy = sandbox.spy()
|
|
19
|
+
|
|
20
|
+
const TOKEN = 'UUIDv4'
|
|
21
|
+
const IMPL: UntypedServiceImplementation = {
|
|
22
|
+
spy,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const implWithAuth = authImplToken(TOKEN)(IMPL)
|
|
26
|
+
const validMetadata = new Metadata()
|
|
27
|
+
validMetadata.add('Authorization', 'Wechaty ' + TOKEN)
|
|
28
|
+
|
|
29
|
+
const TEST_LIST = [
|
|
30
|
+
{ // Valid Token Request
|
|
31
|
+
call: {
|
|
32
|
+
metadata: validMetadata,
|
|
33
|
+
} as any,
|
|
34
|
+
callback: sandbox.spy(),
|
|
35
|
+
ok: true,
|
|
36
|
+
},
|
|
37
|
+
{ // Invalid request for Callback
|
|
38
|
+
call: {
|
|
39
|
+
metadata: new Metadata(),
|
|
40
|
+
} as any,
|
|
41
|
+
callback: sandbox.spy(),
|
|
42
|
+
ok: false,
|
|
43
|
+
},
|
|
44
|
+
{ // Invalid request for Stream
|
|
45
|
+
call: {
|
|
46
|
+
emit: sandbox.spy(),
|
|
47
|
+
metadata: new Metadata(),
|
|
48
|
+
} as any,
|
|
49
|
+
callback: undefined,
|
|
50
|
+
ok: false,
|
|
51
|
+
},
|
|
52
|
+
] as const
|
|
53
|
+
|
|
54
|
+
const method = implWithAuth['spy']!
|
|
55
|
+
|
|
56
|
+
for (const { call, callback, ok } of TEST_LIST) {
|
|
57
|
+
spy.resetHistory()
|
|
58
|
+
|
|
59
|
+
method(call, callback as any)
|
|
60
|
+
|
|
61
|
+
if (ok) {
|
|
62
|
+
t.ok(spy.calledOnce, 'should call IMPL handler')
|
|
63
|
+
continue
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* not ok
|
|
68
|
+
*/
|
|
69
|
+
t.ok(spy.notCalled, 'should not call IMPL handler')
|
|
70
|
+
if (callback) {
|
|
71
|
+
t.equal(callback.args[0]![0].code, GrpcStatus.UNAUTHENTICATED, 'should return UNAUTHENTICATED')
|
|
72
|
+
} else {
|
|
73
|
+
t.equal(call.emit.args[0][0], 'error', 'should emit error')
|
|
74
|
+
t.equal(call.emit.args[0][1].code, GrpcStatus.UNAUTHENTICATED, 'should emit UNAUTHENTICATED')
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// console.info(spy.args)
|
|
78
|
+
// console.info(callback?.args)
|
|
79
|
+
}
|
|
80
|
+
sandbox.restore()
|
|
81
|
+
})
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { log } from '@juzi/wechaty-puppet'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
StatusBuilder,
|
|
5
|
+
UntypedHandleCall,
|
|
6
|
+
sendUnaryData,
|
|
7
|
+
Metadata,
|
|
8
|
+
ServerUnaryCall,
|
|
9
|
+
GrpcStatus,
|
|
10
|
+
UntypedServiceImplementation,
|
|
11
|
+
} from './grpc-js.js'
|
|
12
|
+
|
|
13
|
+
import { monkeyPatchMetadataFromHttp2Headers } from './mokey-patch-header-authorization.js'
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Huan(202108): Monkey patch to support
|
|
17
|
+
* copy `:authority` from header to metadata
|
|
18
|
+
*/
|
|
19
|
+
monkeyPatchMetadataFromHttp2Headers(Metadata)
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Huan(202108): wrap handle calls with authorization
|
|
23
|
+
*
|
|
24
|
+
* See:
|
|
25
|
+
* https://grpc.io/docs/guides/auth/#with-server-authentication-ssltls-and-a-custom-header-with-token
|
|
26
|
+
*/
|
|
27
|
+
const authWrapHandlerToken = (validToken: string) => (handler: UntypedHandleCall) => {
|
|
28
|
+
log.verbose('wechaty-puppet-service',
|
|
29
|
+
'auth/auth-impl-token.ts authWrapHandlerToken(%s)(%s)',
|
|
30
|
+
validToken,
|
|
31
|
+
handler.name,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
return function (
|
|
35
|
+
call: ServerUnaryCall<any, any>,
|
|
36
|
+
cb?: sendUnaryData<any>,
|
|
37
|
+
) {
|
|
38
|
+
// console.info('wrapAuthHandler internal')
|
|
39
|
+
|
|
40
|
+
const authorization = call.metadata.get('authorization')[0]
|
|
41
|
+
// console.info('authorization', authorization)
|
|
42
|
+
|
|
43
|
+
let errMsg = ''
|
|
44
|
+
if (typeof authorization === 'string') {
|
|
45
|
+
if (authorization.startsWith('Wechaty ')) {
|
|
46
|
+
const token = authorization.substring(8 /* 'Wechaty '.length */)
|
|
47
|
+
if (token === validToken) {
|
|
48
|
+
|
|
49
|
+
return handler(
|
|
50
|
+
call as any,
|
|
51
|
+
cb as any,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
} else {
|
|
55
|
+
errMsg = `Invalid Wechaty TOKEN "${token}"`
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
const type = authorization.split(/\s+/)[0]
|
|
59
|
+
errMsg = `Invalid authorization type: "${type}"`
|
|
60
|
+
}
|
|
61
|
+
} else {
|
|
62
|
+
errMsg = 'No Authorization found.'
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Not authorized
|
|
67
|
+
*/
|
|
68
|
+
const error = new StatusBuilder()
|
|
69
|
+
.withCode(GrpcStatus.UNAUTHENTICATED)
|
|
70
|
+
.withDetails(errMsg)
|
|
71
|
+
.withMetadata(call.metadata)
|
|
72
|
+
.build()
|
|
73
|
+
|
|
74
|
+
if (cb) {
|
|
75
|
+
/**
|
|
76
|
+
* Callback:
|
|
77
|
+
* handleUnaryCall
|
|
78
|
+
* handleClientStreamingCall
|
|
79
|
+
*/
|
|
80
|
+
cb(error)
|
|
81
|
+
} else if ('emit' in call) {
|
|
82
|
+
/**
|
|
83
|
+
* Stream:
|
|
84
|
+
* handleServerStreamingCall
|
|
85
|
+
* handleBidiStreamingCall
|
|
86
|
+
*/
|
|
87
|
+
call.emit('error', error)
|
|
88
|
+
} else {
|
|
89
|
+
throw new Error('no callback and call is not emit-able')
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const authImplToken = <T extends UntypedServiceImplementation>(validToken: string) => (
|
|
95
|
+
serviceImpl: T,
|
|
96
|
+
) => {
|
|
97
|
+
log.verbose('wechaty-puppet-service', 'authImplToken()')
|
|
98
|
+
|
|
99
|
+
for (const [key, val] of Object.entries(serviceImpl)) {
|
|
100
|
+
// any: https://stackoverflow.com/q/59572522/1123955
|
|
101
|
+
(serviceImpl as any)[key] = authWrapHandlerToken(validToken)(val)
|
|
102
|
+
}
|
|
103
|
+
return serviceImpl
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export {
|
|
107
|
+
authImplToken,
|
|
108
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
test,
|
|
5
|
+
} from 'tstest'
|
|
6
|
+
|
|
7
|
+
import https from 'https'
|
|
8
|
+
|
|
9
|
+
import * as envVar from './env-vars.js'
|
|
10
|
+
import type { AddressInfo } from 'ws'
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
TLS_CA_CERT,
|
|
14
|
+
TLS_INSECURE_SERVER_CERT_COMMON_NAME,
|
|
15
|
+
TLS_INSECURE_SERVER_CERT,
|
|
16
|
+
TLS_INSECURE_SERVER_KEY,
|
|
17
|
+
} from './ca.js'
|
|
18
|
+
|
|
19
|
+
test('CA smoke testing', async t => {
|
|
20
|
+
|
|
21
|
+
const ca = envVar.WECHATY_PUPPET_SERVICE_TLS_CA_CERT() || TLS_CA_CERT
|
|
22
|
+
const cert = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT() || TLS_INSECURE_SERVER_CERT
|
|
23
|
+
const key = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY() || TLS_INSECURE_SERVER_KEY
|
|
24
|
+
|
|
25
|
+
const server = https.createServer({
|
|
26
|
+
cert,
|
|
27
|
+
key,
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
const ALIVE = 'Alive!\n'
|
|
31
|
+
|
|
32
|
+
server.on('request', (_req, res) => {
|
|
33
|
+
res.writeHead(200)
|
|
34
|
+
res.end(ALIVE)
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
server.listen()
|
|
38
|
+
const port = (server.address() as AddressInfo).port
|
|
39
|
+
|
|
40
|
+
const reply = await new Promise((resolve, reject) => {
|
|
41
|
+
https.request({
|
|
42
|
+
ca,
|
|
43
|
+
hostname: '127.0.0.1',
|
|
44
|
+
method: 'GET',
|
|
45
|
+
path: '/',
|
|
46
|
+
port,
|
|
47
|
+
servername: TLS_INSECURE_SERVER_CERT_COMMON_NAME,
|
|
48
|
+
}, res => {
|
|
49
|
+
res.on('data', chunk => resolve(chunk.toString()))
|
|
50
|
+
res.on('error', reject)
|
|
51
|
+
}).end()
|
|
52
|
+
})
|
|
53
|
+
server.close()
|
|
54
|
+
|
|
55
|
+
t.equal(reply, ALIVE, 'should get https server reply')
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
test('CA SNI tests', async t => {
|
|
59
|
+
|
|
60
|
+
const ca = envVar.WECHATY_PUPPET_SERVICE_TLS_CA_CERT() || TLS_CA_CERT
|
|
61
|
+
const cert = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_CERT() || TLS_INSECURE_SERVER_CERT
|
|
62
|
+
const key = envVar.WECHATY_PUPPET_SERVICE_TLS_SERVER_KEY() || TLS_INSECURE_SERVER_KEY
|
|
63
|
+
|
|
64
|
+
const server = https.createServer({
|
|
65
|
+
cert,
|
|
66
|
+
key,
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
server.on('request', (_req, res) => {
|
|
70
|
+
res.writeHead(200)
|
|
71
|
+
res.end(ALIVE)
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
server.listen()
|
|
75
|
+
const port = (server.address() as AddressInfo).port
|
|
76
|
+
|
|
77
|
+
const ALIVE = 'Alive!\n'
|
|
78
|
+
const SNI_TEST_LIST = [
|
|
79
|
+
[
|
|
80
|
+
TLS_INSECURE_SERVER_CERT_COMMON_NAME,
|
|
81
|
+
true,
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
'invalid-sni',
|
|
85
|
+
false,
|
|
86
|
+
"Hostname/IP does not match certificate's altnames: Host: invalid-sni. is not cert's CN: insecure",
|
|
87
|
+
],
|
|
88
|
+
] as const
|
|
89
|
+
|
|
90
|
+
for (const [SNI, EXPECT, MSG] of SNI_TEST_LIST) {
|
|
91
|
+
const result = await new Promise((resolve, reject) => {
|
|
92
|
+
https.request({
|
|
93
|
+
ca,
|
|
94
|
+
hostname: '127.0.0.1',
|
|
95
|
+
method: 'GET',
|
|
96
|
+
path: '/',
|
|
97
|
+
port,
|
|
98
|
+
servername: SNI,
|
|
99
|
+
}, res => {
|
|
100
|
+
res.on('data', chunk => resolve(chunk.toString() === ALIVE))
|
|
101
|
+
res.on('error', reject)
|
|
102
|
+
})
|
|
103
|
+
.on('error', e => {
|
|
104
|
+
// console.info(e.message)
|
|
105
|
+
t.equal(e.message, MSG, 'should get the error for invalid SNI: ' + SNI)
|
|
106
|
+
resolve(false)
|
|
107
|
+
})
|
|
108
|
+
.end()
|
|
109
|
+
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
t.equal(result, EXPECT, 'should check the SNI: ' + SNI)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
server.close()
|
|
116
|
+
})
|