@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/config.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference path="./typings.d.ts" />
|
|
2
|
+
|
|
3
|
+
import { log } from '@juzi/wechaty-puppet'
|
|
4
|
+
|
|
5
|
+
import { packageJson } from './package-json.js'
|
|
6
|
+
|
|
7
|
+
import * as rootEnvVars from './env-vars.js'
|
|
8
|
+
import * as authEnvVars from './auth/env-vars.js'
|
|
9
|
+
|
|
10
|
+
const VERSION = packageJson.version || '0.0.0'
|
|
11
|
+
|
|
12
|
+
const envVars = {
|
|
13
|
+
...rootEnvVars,
|
|
14
|
+
...authEnvVars,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* gRPC default options
|
|
19
|
+
*/
|
|
20
|
+
const GRPC_OPTIONS = {
|
|
21
|
+
// https://github.com/wechaty/wechaty-puppet-service/issues/86
|
|
22
|
+
// 'grpc.max_receive_message_length': 1024 * 1024 * 150,
|
|
23
|
+
// 'grpc.max_send_message_length': 1024 * 1024 * 150,
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export {
|
|
27
|
+
envVars,
|
|
28
|
+
log,
|
|
29
|
+
GRPC_OPTIONS,
|
|
30
|
+
VERSION,
|
|
31
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
import { test } from 'tstest'
|
|
4
|
+
|
|
5
|
+
import { PassThrough } from 'stream'
|
|
6
|
+
|
|
7
|
+
import { FileBox } from 'file-box'
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
puppet,
|
|
11
|
+
} from '@juzi/wechaty-grpc'
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
unpackFileBoxFromChunk,
|
|
15
|
+
packFileBoxToChunk,
|
|
16
|
+
} from './file-box-chunk.js'
|
|
17
|
+
import {
|
|
18
|
+
unpackFileBoxChunkFromPb,
|
|
19
|
+
packFileBoxChunkToPb,
|
|
20
|
+
} from './chunk-pb.js'
|
|
21
|
+
|
|
22
|
+
test('packFileBoxChunk()', async t => {
|
|
23
|
+
const FILE_BOX_DATA = 'test'
|
|
24
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
25
|
+
|
|
26
|
+
const fileBox = FileBox.fromBuffer(
|
|
27
|
+
Buffer.from(FILE_BOX_DATA),
|
|
28
|
+
FILE_BOX_NAME,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
const chunkStream = await packFileBoxToChunk(fileBox)
|
|
32
|
+
const pbStream = await packFileBoxChunkToPb(puppet.MessageFileStreamResponse)(chunkStream)
|
|
33
|
+
|
|
34
|
+
let name = ''
|
|
35
|
+
let buffer = ''
|
|
36
|
+
pbStream.on('data', (data: puppet.MessageFileStreamResponse) => {
|
|
37
|
+
if (data.hasFileBoxChunk()) {
|
|
38
|
+
const fileBoxChunk = data.getFileBoxChunk()
|
|
39
|
+
if (fileBoxChunk!.hasData()) {
|
|
40
|
+
buffer += fileBoxChunk!.getData()
|
|
41
|
+
} else if (fileBoxChunk!.hasName()) {
|
|
42
|
+
name = fileBoxChunk!.getName()
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
await new Promise(resolve => chunkStream.on('end', resolve))
|
|
48
|
+
t.equal(name, FILE_BOX_NAME, 'should get file box name')
|
|
49
|
+
t.equal(buffer, FILE_BOX_DATA, 'should get file box data')
|
|
50
|
+
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('unpackFileBoxChunkFromPb()', async t => {
|
|
54
|
+
const FILE_BOX_DATA = 'test'
|
|
55
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
56
|
+
|
|
57
|
+
const fileBox = FileBox.fromBuffer(
|
|
58
|
+
Buffer.from(FILE_BOX_DATA),
|
|
59
|
+
FILE_BOX_NAME,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
const chunkStream = await packFileBoxToChunk(fileBox)
|
|
63
|
+
const request = new puppet.MessageSendFileStreamRequest()
|
|
64
|
+
|
|
65
|
+
const packedStream = new PassThrough({ objectMode: true })
|
|
66
|
+
|
|
67
|
+
chunkStream.on('data', (data: puppet.FileBoxChunk) => {
|
|
68
|
+
request.setFileBoxChunk(data)
|
|
69
|
+
packedStream.write(request)
|
|
70
|
+
}).on('end', () => {
|
|
71
|
+
packedStream.end()
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
const outputChunkStream = unpackFileBoxChunkFromPb(packedStream)
|
|
75
|
+
const outputFileBox = await unpackFileBoxFromChunk(outputChunkStream)
|
|
76
|
+
|
|
77
|
+
t.equal((await outputFileBox.toBuffer()).toString(), FILE_BOX_DATA, 'should get file box data')
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('packFileBoxChunk() <-> unpackFileBoxChunkFromPb()', async t => {
|
|
81
|
+
const FILE_BOX_DATA = 'test'
|
|
82
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
83
|
+
|
|
84
|
+
const fileBox = FileBox.fromBuffer(
|
|
85
|
+
Buffer.from(FILE_BOX_DATA),
|
|
86
|
+
FILE_BOX_NAME,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
const chunkStream = await packFileBoxToChunk(fileBox)
|
|
90
|
+
const packedStream = packFileBoxChunkToPb(puppet.MessageFileStreamResponse)(chunkStream)
|
|
91
|
+
|
|
92
|
+
const unpackedStream = unpackFileBoxChunkFromPb(packedStream)
|
|
93
|
+
const restoredBox = await unpackFileBoxFromChunk(unpackedStream)
|
|
94
|
+
t.equal(fileBox.name, restoredBox.name, 'should be same name')
|
|
95
|
+
|
|
96
|
+
const EXPECTED_BASE64 = await fileBox.toBase64()
|
|
97
|
+
const actualBase64 = await restoredBox.toBase64()
|
|
98
|
+
|
|
99
|
+
t.equal(EXPECTED_BASE64, actualBase64, 'should be same content')
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
test('packFileBoxChunk(): should not throw if no read on the stream', async t => {
|
|
103
|
+
|
|
104
|
+
t.plan(1)
|
|
105
|
+
const stream = await getTestChunkStream({})
|
|
106
|
+
let outStream
|
|
107
|
+
try {
|
|
108
|
+
outStream = packFileBoxChunkToPb(puppet.MessageFileStreamResponse)(stream)
|
|
109
|
+
} catch (e) {
|
|
110
|
+
t.ok((e as Error).message)
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
outStream.on('error', _ => { /* Do nothing */ })
|
|
114
|
+
t.pass()
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
test('packFileBoxChunk(): should emit error in the output stream', async t => {
|
|
118
|
+
const EXPECTED_MESSAGE = 'test emit error'
|
|
119
|
+
|
|
120
|
+
const stream = await getTestChunkStream({ errorMessage: EXPECTED_MESSAGE })
|
|
121
|
+
const outStream = packFileBoxChunkToPb(puppet.MessageFileStreamResponse)(stream)
|
|
122
|
+
|
|
123
|
+
const error = await new Promise<Error>(resolve => outStream.on('error', resolve))
|
|
124
|
+
// await new Promise(resolve => outStream.on('end', resolve))
|
|
125
|
+
t.equal(error.message, EXPECTED_MESSAGE, 'should emit error message')
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
test('unpackFileBoxChunkFromPb(): should not throw if no read on the stream', async t => {
|
|
129
|
+
|
|
130
|
+
t.plan(1)
|
|
131
|
+
const stream = await getTestPackedStream({})
|
|
132
|
+
let outStream
|
|
133
|
+
try {
|
|
134
|
+
outStream = unpackFileBoxChunkFromPb(stream)
|
|
135
|
+
t.pass('should no rejection')
|
|
136
|
+
} catch (e) {
|
|
137
|
+
t.fail((e as Error).message)
|
|
138
|
+
return
|
|
139
|
+
}
|
|
140
|
+
outStream.on('error', _ => { /* Do nothing */ })
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
test('unpackFileBoxChunkFromPb(): should emit error in the output stream', async t => {
|
|
144
|
+
|
|
145
|
+
const errorMessage = 'test emit error'
|
|
146
|
+
const stream = await getTestPackedStream({ errorMessage })
|
|
147
|
+
|
|
148
|
+
const outStream = packFileBoxChunkToPb(puppet.MessageFileStreamResponse)(stream)
|
|
149
|
+
|
|
150
|
+
try {
|
|
151
|
+
await new Promise((resolve, reject) => {
|
|
152
|
+
outStream.on('error', reject)
|
|
153
|
+
outStream.on('end', resolve)
|
|
154
|
+
})
|
|
155
|
+
t.fail('should reject the promise')
|
|
156
|
+
} catch (e) {
|
|
157
|
+
t.equal((e as Error).message, errorMessage, 'should get the expected rejection error message')
|
|
158
|
+
}
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
async function getTestChunkStream (options: {
|
|
162
|
+
errorMessage?: string,
|
|
163
|
+
}) {
|
|
164
|
+
const { errorMessage } = options
|
|
165
|
+
|
|
166
|
+
const FILE_BOX_DATA = 'test'
|
|
167
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
168
|
+
|
|
169
|
+
const fileBox = FileBox.fromBuffer(
|
|
170
|
+
Buffer.from(FILE_BOX_DATA),
|
|
171
|
+
FILE_BOX_NAME,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
const chunkStream = await packFileBoxToChunk(fileBox)
|
|
175
|
+
setImmediate(() => {
|
|
176
|
+
chunkStream.emit('error', new Error(errorMessage))
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
return chunkStream
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
async function getTestPackedStream (options: {
|
|
183
|
+
errorMessage?: string,
|
|
184
|
+
}) {
|
|
185
|
+
const { errorMessage } = options
|
|
186
|
+
|
|
187
|
+
const FILE_BOX_DATA = 'test'
|
|
188
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
189
|
+
|
|
190
|
+
const fileBox = FileBox.fromBuffer(
|
|
191
|
+
Buffer.from(FILE_BOX_DATA),
|
|
192
|
+
FILE_BOX_NAME,
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
const chunkStream = await packFileBoxToChunk(fileBox)
|
|
196
|
+
const packedStream = new PassThrough({ objectMode: true })
|
|
197
|
+
chunkStream.on('data', d => {
|
|
198
|
+
const packedChunk = new puppet.MessageFileStreamResponse()
|
|
199
|
+
packedChunk.setFileBoxChunk(d)
|
|
200
|
+
packedStream.write(packedChunk)
|
|
201
|
+
}).on('error', e => {
|
|
202
|
+
packedStream.emit('error', e)
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
setImmediate(() => {
|
|
206
|
+
chunkStream.emit('error', new Error(errorMessage))
|
|
207
|
+
})
|
|
208
|
+
|
|
209
|
+
return packedStream
|
|
210
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { puppet } from '@juzi/wechaty-grpc'
|
|
2
|
+
import { Readable, Transform } from 'stronger-typed-streams'
|
|
3
|
+
import { PassThrough } from 'stream'
|
|
4
|
+
|
|
5
|
+
import type { FileBoxPb } from './file-box-pb.type.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Wrap FileBoxChunk
|
|
9
|
+
* @deprecated Will be removed after Dec 31, 2022
|
|
10
|
+
*/
|
|
11
|
+
const encoder = <T extends FileBoxPb>(
|
|
12
|
+
PbConstructor: { new(): T },
|
|
13
|
+
) => new Transform<puppet.FileBoxChunk, T>({
|
|
14
|
+
objectMode: true,
|
|
15
|
+
transform: (chunk: puppet.FileBoxChunk, _: any, callback: (error: Error | null, data: T) => void) => {
|
|
16
|
+
const message = new PbConstructor()
|
|
17
|
+
message.setFileBoxChunk(chunk)
|
|
18
|
+
callback(null, message)
|
|
19
|
+
},
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Will be removed after Dec 31, 2022
|
|
24
|
+
*/
|
|
25
|
+
function packFileBoxChunkToPb<T extends FileBoxPb> (
|
|
26
|
+
PbConstructor: { new(): T },
|
|
27
|
+
) {
|
|
28
|
+
return (stream: Readable<puppet.FileBoxChunk>): Readable<T> => {
|
|
29
|
+
const outStream = new PassThrough({ objectMode: true })
|
|
30
|
+
const encodedStream = stream.pipe(encoder(PbConstructor))
|
|
31
|
+
|
|
32
|
+
stream.on('error', e => outStream.emit('error', e))
|
|
33
|
+
encodedStream.on('error', e => outStream.emit('error', e))
|
|
34
|
+
|
|
35
|
+
encodedStream.pipe(outStream)
|
|
36
|
+
return outStream
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Unwrap FileBoxChunk
|
|
42
|
+
* @deprecated Will be removed after Dec 31, 2022
|
|
43
|
+
*/
|
|
44
|
+
const decoder = <T extends FileBoxPb>() => new Transform<T, puppet.FileBoxChunk>({
|
|
45
|
+
objectMode: true,
|
|
46
|
+
transform: (chunk: T, _: any, callback: (error: Error | null, data?: puppet.FileBoxChunk) => void) => {
|
|
47
|
+
const fileBoxChunk = chunk.getFileBoxChunk()
|
|
48
|
+
if (!fileBoxChunk) {
|
|
49
|
+
callback(new Error('No FileBoxChunk'))
|
|
50
|
+
} else {
|
|
51
|
+
callback(null, fileBoxChunk)
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated Will be removed after Dec 31, 2022
|
|
58
|
+
*/
|
|
59
|
+
function unpackFileBoxChunkFromPb<T extends FileBoxPb> (
|
|
60
|
+
stream: Readable<T>,
|
|
61
|
+
): Readable<puppet.FileBoxChunk> {
|
|
62
|
+
const outStream = new PassThrough({ objectMode: true })
|
|
63
|
+
const decodedStream = stream.pipe(decoder())
|
|
64
|
+
|
|
65
|
+
stream.on('error', e => outStream.emit('error', e))
|
|
66
|
+
decodedStream.on('error', e => outStream.emit('error', e))
|
|
67
|
+
|
|
68
|
+
decodedStream.pipe(outStream)
|
|
69
|
+
return outStream
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export {
|
|
73
|
+
packFileBoxChunkToPb,
|
|
74
|
+
unpackFileBoxChunkFromPb,
|
|
75
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wechaty Chatbot SDK - https://github.com/wechaty/wechaty
|
|
5
|
+
*
|
|
6
|
+
* @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
|
|
7
|
+
* Wechaty Contributors <https://github.com/wechaty>.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
import {
|
|
23
|
+
puppet,
|
|
24
|
+
} from '@juzi/wechaty-grpc'
|
|
25
|
+
|
|
26
|
+
import { test } from 'tstest'
|
|
27
|
+
import { PassThrough } from 'stream'
|
|
28
|
+
import { FileBox } from 'file-box'
|
|
29
|
+
|
|
30
|
+
import { nextData } from './next-data.js'
|
|
31
|
+
import {
|
|
32
|
+
packConversationIdFileBoxToPb,
|
|
33
|
+
unpackConversationIdFileBoxArgsFromPb,
|
|
34
|
+
} from './conversation-id-file-box.js'
|
|
35
|
+
|
|
36
|
+
test('unpackConversationIdFileBoxArgsFromPb()', async t => {
|
|
37
|
+
const FILE_BOX_DATA = 'test'
|
|
38
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
39
|
+
const CONVERSATION_ID = 'conversation_id'
|
|
40
|
+
|
|
41
|
+
const fileBox = FileBox.fromBuffer(
|
|
42
|
+
Buffer.from(FILE_BOX_DATA),
|
|
43
|
+
FILE_BOX_NAME,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
const stream = new PassThrough({ objectMode: true })
|
|
47
|
+
|
|
48
|
+
const req1 = new puppet.MessageSendFileStreamRequest()
|
|
49
|
+
req1.setConversationId(CONVERSATION_ID)
|
|
50
|
+
stream.write(req1)
|
|
51
|
+
|
|
52
|
+
const req2 = new puppet.MessageSendFileStreamRequest()
|
|
53
|
+
const chunk1 = new puppet.FileBoxChunk()
|
|
54
|
+
chunk1.setName(fileBox.name)
|
|
55
|
+
req2.setFileBoxChunk(chunk1)
|
|
56
|
+
stream.write(req2)
|
|
57
|
+
|
|
58
|
+
const fileBoxStream = await fileBox.toStream()
|
|
59
|
+
fileBoxStream.on('data', chunk => {
|
|
60
|
+
const fileBoxChunk = new puppet.FileBoxChunk()
|
|
61
|
+
fileBoxChunk.setData(chunk)
|
|
62
|
+
const req3 = new puppet.MessageSendFileStreamRequest()
|
|
63
|
+
req3.setFileBoxChunk(fileBoxChunk)
|
|
64
|
+
stream.write(req3)
|
|
65
|
+
})
|
|
66
|
+
fileBoxStream.on('end', () => stream.end())
|
|
67
|
+
|
|
68
|
+
const args = await unpackConversationIdFileBoxArgsFromPb(stream)
|
|
69
|
+
const data = (await args.fileBox.toBuffer()).toString()
|
|
70
|
+
|
|
71
|
+
t.equal(args.conversationId, CONVERSATION_ID, 'should get conversation id')
|
|
72
|
+
t.equal(args.fileBox.name, FILE_BOX_NAME, 'should get file box name')
|
|
73
|
+
t.equal(data, FILE_BOX_DATA, 'should get file box data')
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
test('packConversationIdFileBoxToPb()', async t => {
|
|
77
|
+
const FILE_BOX_DATA = 'test'
|
|
78
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
79
|
+
const CONVERSATION_ID = 'conv_id'
|
|
80
|
+
|
|
81
|
+
const fileBox = FileBox.fromBuffer(
|
|
82
|
+
Buffer.from(FILE_BOX_DATA),
|
|
83
|
+
FILE_BOX_NAME,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
const stream = await packConversationIdFileBoxToPb(puppet.MessageSendFileStreamRequest)(
|
|
87
|
+
CONVERSATION_ID,
|
|
88
|
+
fileBox,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
const data1 = await nextData(stream)
|
|
92
|
+
t.equal(data1.getConversationId(), CONVERSATION_ID, 'match conversation id')
|
|
93
|
+
|
|
94
|
+
const data2 = await nextData(stream)
|
|
95
|
+
t.ok(data2.hasFileBoxChunk(), 'has file box chunk')
|
|
96
|
+
t.ok(data2.getFileBoxChunk()!.hasName(), 'has file box name')
|
|
97
|
+
t.equal(data2.getFileBoxChunk()!.getName(), FILE_BOX_NAME, 'match file box name')
|
|
98
|
+
|
|
99
|
+
let data = ''
|
|
100
|
+
stream.on('data', (chunk: puppet.MessageSendFileStreamRequest) => {
|
|
101
|
+
if (!chunk.hasFileBoxChunk()) {
|
|
102
|
+
throw new Error('no file box chunk')
|
|
103
|
+
}
|
|
104
|
+
if (!chunk.getFileBoxChunk()!.hasData()) {
|
|
105
|
+
throw new Error('no file box chunk data')
|
|
106
|
+
}
|
|
107
|
+
data += chunk.getFileBoxChunk()!.getData()
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
await new Promise(resolve => stream.on('end', resolve))
|
|
111
|
+
|
|
112
|
+
t.equal(data.toString(), FILE_BOX_DATA, 'should get file box data')
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
test('unpackConversationIdFileBoxArgsFromPb() <-> packConversationIdFileBoxToPb()', async t => {
|
|
116
|
+
const FILE_BOX_DATA = 'test'
|
|
117
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
118
|
+
const CONVERSATION_ID = 'conv_id'
|
|
119
|
+
|
|
120
|
+
const fileBox = FileBox.fromBuffer(
|
|
121
|
+
Buffer.from(FILE_BOX_DATA),
|
|
122
|
+
FILE_BOX_NAME,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
const stream = await packConversationIdFileBoxToPb(puppet.MessageSendFileStreamRequest)(CONVERSATION_ID, fileBox)
|
|
126
|
+
const args = await unpackConversationIdFileBoxArgsFromPb(stream)
|
|
127
|
+
|
|
128
|
+
t.equal(args.conversationId, CONVERSATION_ID, 'should match conversation id')
|
|
129
|
+
t.equal(args.fileBox.name, FILE_BOX_NAME, 'should be same name')
|
|
130
|
+
t.equal((await args.fileBox.toBuffer()).toString(), FILE_BOX_DATA, 'should be same content')
|
|
131
|
+
})
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
FileBoxInterface,
|
|
3
|
+
} from 'file-box'
|
|
4
|
+
import { PassThrough } from 'stream'
|
|
5
|
+
import type { Readable } from 'stronger-typed-streams'
|
|
6
|
+
|
|
7
|
+
import { nextData } from './next-data.js'
|
|
8
|
+
import {
|
|
9
|
+
packFileBoxToPb,
|
|
10
|
+
unpackFileBoxFromPb,
|
|
11
|
+
} from './file-box-pb.js'
|
|
12
|
+
import type { ConversationIdFileBoxPb } from './file-box-pb.type.js'
|
|
13
|
+
|
|
14
|
+
interface ConversationIdFileBoxArgs {
|
|
15
|
+
conversationId: string,
|
|
16
|
+
fileBox: FileBoxInterface,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* MessageSendFileStreamRequest to Args
|
|
21
|
+
* @deprecated Will be removed after Dec 31, 2022
|
|
22
|
+
*/
|
|
23
|
+
async function unpackConversationIdFileBoxArgsFromPb (
|
|
24
|
+
stream: Readable<ConversationIdFileBoxPb>,
|
|
25
|
+
): Promise<ConversationIdFileBoxArgs> {
|
|
26
|
+
const chunk = await nextData(stream)
|
|
27
|
+
if (!chunk.hasConversationId()) {
|
|
28
|
+
throw new Error('no conversation id')
|
|
29
|
+
}
|
|
30
|
+
const conversationId = chunk.getConversationId()
|
|
31
|
+
|
|
32
|
+
// unpackFileBoxFromChunk(unpackFileBoxChunkFromPb(stream))
|
|
33
|
+
const fileBox = await unpackFileBoxFromPb(stream)
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
conversationId,
|
|
37
|
+
fileBox,
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Args to MessageSendFileStreamRequest
|
|
43
|
+
* @deprecated Will be removed after Dec 31, 2022
|
|
44
|
+
*/
|
|
45
|
+
function packConversationIdFileBoxToPb<T extends ConversationIdFileBoxPb> (
|
|
46
|
+
PbConstructor: { new(): T },
|
|
47
|
+
) {
|
|
48
|
+
return async (
|
|
49
|
+
conversationId: string,
|
|
50
|
+
fileBox: FileBoxInterface,
|
|
51
|
+
): Promise<
|
|
52
|
+
Readable<T>
|
|
53
|
+
> => {
|
|
54
|
+
const stream = new PassThrough({ objectMode: true })
|
|
55
|
+
|
|
56
|
+
const first = new PbConstructor()
|
|
57
|
+
first.setConversationId(conversationId)
|
|
58
|
+
stream.write(first)
|
|
59
|
+
|
|
60
|
+
// const fileBoxChunkStream = await packFileBoxToChunk(fileBox)
|
|
61
|
+
// packFileBoxChunkToPb(MessageSendFileStreamRequest)(fileBoxChunkStream)
|
|
62
|
+
const pbStream = await packFileBoxToPb(PbConstructor)(fileBox)
|
|
63
|
+
pbStream.pipe(stream)
|
|
64
|
+
|
|
65
|
+
return stream
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export {
|
|
70
|
+
unpackConversationIdFileBoxArgsFromPb,
|
|
71
|
+
packConversationIdFileBoxToPb,
|
|
72
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
#!/usr/bin/env -S node --no-warnings --loader ts-node/esm
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wechaty Chatbot SDK - https://github.com/wechaty/wechaty
|
|
5
|
+
*
|
|
6
|
+
* @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
|
|
7
|
+
* Wechaty Contributors <https://github.com/wechaty>.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
import { test } from 'tstest'
|
|
23
|
+
|
|
24
|
+
import { PassThrough } from 'stream'
|
|
25
|
+
import type { Duplex } from 'stronger-typed-streams'
|
|
26
|
+
import { FileBox } from 'file-box'
|
|
27
|
+
|
|
28
|
+
import {
|
|
29
|
+
puppet,
|
|
30
|
+
} from '@juzi/wechaty-grpc'
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
unpackFileBoxFromChunk,
|
|
34
|
+
packFileBoxToChunk,
|
|
35
|
+
} from './file-box-chunk.js'
|
|
36
|
+
import { nextData } from './next-data.js'
|
|
37
|
+
|
|
38
|
+
test('unpackFileBoxFromChunk()', async t => {
|
|
39
|
+
const FILE_BOX_DATA = 'test'
|
|
40
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
41
|
+
|
|
42
|
+
const stream = await getFileBoxStreamStub(FILE_BOX_DATA, FILE_BOX_NAME)
|
|
43
|
+
|
|
44
|
+
const decodedFileBox = await unpackFileBoxFromChunk(stream)
|
|
45
|
+
const data = (await decodedFileBox.toBuffer()).toString()
|
|
46
|
+
|
|
47
|
+
t.equal(decodedFileBox.name, FILE_BOX_NAME, 'should get file box name')
|
|
48
|
+
t.equal(data, FILE_BOX_DATA, 'should get file box data')
|
|
49
|
+
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
test('packFileBoxToChunk()', async t => {
|
|
53
|
+
const FILE_BOX_DATA = 'test'
|
|
54
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
55
|
+
|
|
56
|
+
const fileBox = FileBox.fromBuffer(
|
|
57
|
+
Buffer.from(FILE_BOX_DATA),
|
|
58
|
+
FILE_BOX_NAME,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
const stream = await packFileBoxToChunk(fileBox)
|
|
62
|
+
|
|
63
|
+
const fileBoxChunk = await nextData(stream)
|
|
64
|
+
t.ok(fileBoxChunk.hasName(), 'has name')
|
|
65
|
+
|
|
66
|
+
const fileName = fileBoxChunk.getName()
|
|
67
|
+
t.equal(fileName, FILE_BOX_NAME, 'should get name')
|
|
68
|
+
|
|
69
|
+
let data = ''
|
|
70
|
+
stream.on('data', (chunk: puppet.FileBoxChunk) => {
|
|
71
|
+
if (!chunk.hasData()) {
|
|
72
|
+
throw new Error('no data')
|
|
73
|
+
}
|
|
74
|
+
data += chunk.getData()
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
await new Promise(resolve => stream.on('end', resolve))
|
|
78
|
+
|
|
79
|
+
t.equal(data, FILE_BOX_DATA, 'should get file box data')
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
test('packFileBoxToChunk() <-> unpackFileBoxFromChunk()', async t => {
|
|
83
|
+
const FILE_BOX_DATA = 'test'
|
|
84
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
85
|
+
|
|
86
|
+
const fileBox = FileBox.fromBuffer(
|
|
87
|
+
Buffer.from(FILE_BOX_DATA),
|
|
88
|
+
FILE_BOX_NAME,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
const stream = await packFileBoxToChunk(fileBox)
|
|
92
|
+
const restoredBox = await unpackFileBoxFromChunk(stream)
|
|
93
|
+
|
|
94
|
+
t.equal(fileBox.name, restoredBox.name, 'should be same name')
|
|
95
|
+
t.equal(await fileBox.toBase64(), await restoredBox.toBase64(), 'should be same content')
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
test('should handle no name error in catch', async t => {
|
|
99
|
+
t.plan(1)
|
|
100
|
+
const FILE_BOX_DATA = 'test'
|
|
101
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
102
|
+
|
|
103
|
+
const stream = await getFileBoxStreamStub(FILE_BOX_DATA, FILE_BOX_NAME, true)
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
await unpackFileBoxFromChunk(stream)
|
|
107
|
+
} catch (e) {
|
|
108
|
+
t.equal((e as Error).message, 'no name')
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
test('should handle first error catch', async t => {
|
|
113
|
+
t.plan(1)
|
|
114
|
+
const FILE_BOX_DATA = 'test'
|
|
115
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
116
|
+
|
|
117
|
+
const stream = await getFileBoxStreamStub(FILE_BOX_DATA, FILE_BOX_NAME, false, true)
|
|
118
|
+
|
|
119
|
+
try {
|
|
120
|
+
await unpackFileBoxFromChunk(stream)
|
|
121
|
+
} catch (e) {
|
|
122
|
+
t.equal((e as Error).message, 'first exception')
|
|
123
|
+
}
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
test('should handle middle error in further ops', async t => {
|
|
127
|
+
t.plan(1)
|
|
128
|
+
const FILE_BOX_DATA = 'test'
|
|
129
|
+
const FILE_BOX_NAME = 'test.dat'
|
|
130
|
+
|
|
131
|
+
const stream = await getFileBoxStreamStub(FILE_BOX_DATA, FILE_BOX_NAME, false, false, true)
|
|
132
|
+
|
|
133
|
+
const fileBox = await unpackFileBoxFromChunk(stream)
|
|
134
|
+
try {
|
|
135
|
+
await fileBox.toBuffer()
|
|
136
|
+
} catch (e) {
|
|
137
|
+
t.equal((e as Error).message, 'middle exception')
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
async function getFileBoxStreamStub (
|
|
142
|
+
data: string,
|
|
143
|
+
name: string,
|
|
144
|
+
noname = false,
|
|
145
|
+
firstException = false,
|
|
146
|
+
middleException = false,
|
|
147
|
+
) {
|
|
148
|
+
const fileBox = FileBox.fromBuffer(
|
|
149
|
+
Buffer.from(data),
|
|
150
|
+
name,
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
const stream: Duplex<puppet.FileBoxChunk, puppet.FileBoxChunk> = new PassThrough({ objectMode: true })
|
|
154
|
+
|
|
155
|
+
if (firstException) {
|
|
156
|
+
stream.pause()
|
|
157
|
+
setImmediate(() => {
|
|
158
|
+
stream.emit('error', new Error('first exception'))
|
|
159
|
+
stream.resume()
|
|
160
|
+
})
|
|
161
|
+
} else {
|
|
162
|
+
const chunk1 = new puppet.FileBoxChunk()
|
|
163
|
+
if (!noname) {
|
|
164
|
+
chunk1.setName(fileBox.name)
|
|
165
|
+
}
|
|
166
|
+
setTimeout(() => stream.write(chunk1), 10)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (middleException) {
|
|
170
|
+
setTimeout(() => {
|
|
171
|
+
stream.emit('error', new Error('middle exception'))
|
|
172
|
+
}, 100)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const fileBoxStream = await fileBox.toStream()
|
|
176
|
+
fileBoxStream.on('data', chunk => {
|
|
177
|
+
const fileBoxChunk = new puppet.FileBoxChunk()
|
|
178
|
+
fileBoxChunk.setData(chunk)
|
|
179
|
+
setTimeout(() => stream.write(fileBoxChunk), 200)
|
|
180
|
+
})
|
|
181
|
+
fileBoxStream.on('end', () => setTimeout(() => stream.end(), 250))
|
|
182
|
+
|
|
183
|
+
return stream
|
|
184
|
+
}
|