@juzi/wechaty-puppet-service 1.0.114 → 1.0.115

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.
Files changed (72) hide show
  1. package/dist/cjs/src/client/call-raw-payload-parser.spec.d.ts +3 -0
  2. package/dist/cjs/src/client/call-raw-payload-parser.spec.d.ts.map +1 -0
  3. package/dist/cjs/src/client/call-raw-payload-parser.spec.js +128 -0
  4. package/dist/cjs/src/client/call-raw-payload-parser.spec.js.map +1 -0
  5. package/dist/cjs/src/client/puppet-service.d.ts +10 -0
  6. package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
  7. package/dist/cjs/src/client/puppet-service.js +109 -0
  8. package/dist/cjs/src/client/puppet-service.js.map +1 -1
  9. package/dist/cjs/src/package-json.js +4 -4
  10. package/dist/cjs/src/pure-functions/timestamp.d.ts +15 -1
  11. package/dist/cjs/src/pure-functions/timestamp.d.ts.map +1 -1
  12. package/dist/cjs/src/pure-functions/timestamp.js +10 -1
  13. package/dist/cjs/src/pure-functions/timestamp.js.map +1 -1
  14. package/dist/cjs/src/pure-functions/timestamp.spec.d.ts +3 -0
  15. package/dist/cjs/src/pure-functions/timestamp.spec.d.ts.map +1 -0
  16. package/dist/cjs/src/pure-functions/timestamp.spec.js +48 -0
  17. package/dist/cjs/src/pure-functions/timestamp.spec.js.map +1 -0
  18. package/dist/cjs/src/server/event-stream-manager.d.ts.map +1 -1
  19. package/dist/cjs/src/server/event-stream-manager.js +7 -0
  20. package/dist/cjs/src/server/event-stream-manager.js.map +1 -1
  21. package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -1
  22. package/dist/cjs/src/server/puppet-implementation.js +148 -0
  23. package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
  24. package/dist/cjs/src/utils/call-media-mapping.d.ts +17 -0
  25. package/dist/cjs/src/utils/call-media-mapping.d.ts.map +1 -0
  26. package/dist/cjs/src/utils/call-media-mapping.js +60 -0
  27. package/dist/cjs/src/utils/call-media-mapping.js.map +1 -0
  28. package/dist/cjs/src/utils/call-media-mapping.spec.d.ts +3 -0
  29. package/dist/cjs/src/utils/call-media-mapping.spec.d.ts.map +1 -0
  30. package/dist/cjs/src/utils/call-media-mapping.spec.js +65 -0
  31. package/dist/cjs/src/utils/call-media-mapping.spec.js.map +1 -0
  32. package/dist/esm/src/client/call-raw-payload-parser.spec.d.ts +3 -0
  33. package/dist/esm/src/client/call-raw-payload-parser.spec.d.ts.map +1 -0
  34. package/dist/esm/src/client/call-raw-payload-parser.spec.js +103 -0
  35. package/dist/esm/src/client/call-raw-payload-parser.spec.js.map +1 -0
  36. package/dist/esm/src/client/puppet-service.d.ts +10 -0
  37. package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
  38. package/dist/esm/src/client/puppet-service.js +110 -1
  39. package/dist/esm/src/client/puppet-service.js.map +1 -1
  40. package/dist/esm/src/package-json.js +4 -4
  41. package/dist/esm/src/pure-functions/timestamp.d.ts +15 -1
  42. package/dist/esm/src/pure-functions/timestamp.d.ts.map +1 -1
  43. package/dist/esm/src/pure-functions/timestamp.js +9 -1
  44. package/dist/esm/src/pure-functions/timestamp.js.map +1 -1
  45. package/dist/esm/src/pure-functions/timestamp.spec.d.ts +3 -0
  46. package/dist/esm/src/pure-functions/timestamp.spec.d.ts.map +1 -0
  47. package/dist/esm/src/pure-functions/timestamp.spec.js +46 -0
  48. package/dist/esm/src/pure-functions/timestamp.spec.js.map +1 -0
  49. package/dist/esm/src/server/event-stream-manager.d.ts.map +1 -1
  50. package/dist/esm/src/server/event-stream-manager.js +7 -0
  51. package/dist/esm/src/server/event-stream-manager.js.map +1 -1
  52. package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
  53. package/dist/esm/src/server/puppet-implementation.js +148 -0
  54. package/dist/esm/src/server/puppet-implementation.js.map +1 -1
  55. package/dist/esm/src/utils/call-media-mapping.d.ts +17 -0
  56. package/dist/esm/src/utils/call-media-mapping.d.ts.map +1 -0
  57. package/dist/esm/src/utils/call-media-mapping.js +32 -0
  58. package/dist/esm/src/utils/call-media-mapping.js.map +1 -0
  59. package/dist/esm/src/utils/call-media-mapping.spec.d.ts +3 -0
  60. package/dist/esm/src/utils/call-media-mapping.spec.d.ts.map +1 -0
  61. package/dist/esm/src/utils/call-media-mapping.spec.js +40 -0
  62. package/dist/esm/src/utils/call-media-mapping.spec.js.map +1 -0
  63. package/package.json +4 -4
  64. package/src/client/call-raw-payload-parser.spec.ts +131 -0
  65. package/src/client/puppet-service.ts +191 -1
  66. package/src/package-json.ts +4 -4
  67. package/src/pure-functions/timestamp.spec.ts +56 -0
  68. package/src/pure-functions/timestamp.ts +19 -0
  69. package/src/server/event-stream-manager.ts +7 -0
  70. package/src/server/puppet-implementation.ts +175 -0
  71. package/src/utils/call-media-mapping.spec.ts +53 -0
  72. package/src/utils/call-media-mapping.ts +35 -0
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env -S node --no-warnings --loader ts-node/esm
2
+
3
+ import { test } from 'tstest'
4
+
5
+ import * as PUPPET from '@juzi/wechaty-puppet'
6
+ import { puppet as grpcPuppet } from '@juzi/wechaty-grpc'
7
+
8
+ import {
9
+ puppetCallMediaTypeToGrpc,
10
+ grpcCallTypeToPuppetMedia,
11
+ } from './call-media-mapping.js'
12
+
13
+ /**
14
+ * 1. CallMediaType Audio and Video round-trip: PUPPET -> gRPC -> PUPPET === original.
15
+ */
16
+ test('CallMediaType: Audio and Video survive a round-trip through gRPC', async t => {
17
+ const mediaCases = [
18
+ PUPPET.types.CallMediaType.Audio,
19
+ PUPPET.types.CallMediaType.Video,
20
+ ] as const
21
+
22
+ for (const media of mediaCases) {
23
+ const grpcValue = puppetCallMediaTypeToGrpc(media)
24
+ const roundTripped = grpcCallTypeToPuppetMedia(grpcValue)
25
+ t.equal(roundTripped, media, `round-trip should be identity for CallMediaType.${media}`)
26
+ }
27
+ })
28
+
29
+ /**
30
+ * 2. Each direction maps to the expected concrete enum member.
31
+ */
32
+ test('puppetCallMediaTypeToGrpc: Audio -> VOICE, Video -> VIDEO', async t => {
33
+ t.equal(puppetCallMediaTypeToGrpc(PUPPET.types.CallMediaType.Audio), grpcPuppet.CallType.CALL_TYPE_VOICE, 'Audio maps to CALL_TYPE_VOICE')
34
+ t.equal(puppetCallMediaTypeToGrpc(PUPPET.types.CallMediaType.Video), grpcPuppet.CallType.CALL_TYPE_VIDEO, 'Video maps to CALL_TYPE_VIDEO')
35
+ })
36
+
37
+ /**
38
+ * 3. CALL_TYPE_UNKNOWN (wire zero value) maps to undefined so callers can reject it explicitly.
39
+ */
40
+ test('grpcCallTypeToPuppetMedia: CALL_TYPE_UNKNOWN returns undefined', async t => {
41
+ const result = grpcCallTypeToPuppetMedia(grpcPuppet.CallType.CALL_TYPE_UNKNOWN)
42
+ t.equal(result, undefined, 'CALL_TYPE_UNKNOWN should map to undefined')
43
+ })
44
+
45
+ /**
46
+ * 4. Unknown numeric values not in the proto enum throw rather than silently returning garbage.
47
+ */
48
+ test('grpcCallTypeToPuppetMedia: unknown value 999 throws', async t => {
49
+ t.throws(
50
+ () => grpcCallTypeToPuppetMedia(999),
51
+ 'should throw for unknown CallType value 999',
52
+ )
53
+ })
@@ -0,0 +1,35 @@
1
+ import * as PUPPET from '@juzi/wechaty-puppet'
2
+ import { puppet as grpcPuppet } from '@juzi/wechaty-grpc'
3
+
4
+ type GrpcCallType = grpcPuppet.CallTypeMap[keyof grpcPuppet.CallTypeMap]
5
+
6
+ /**
7
+ * PUPPET CallMediaType (string enum) -> gRPC CallType (number enum).
8
+ * The `never` check in default guarantees exhaustiveness at compile time,
9
+ * while the throw still guards against untyped callers at runtime.
10
+ * media is required per upstream contract: every call invite must carry a media type.
11
+ */
12
+ export function puppetCallMediaTypeToGrpc (media: PUPPET.types.CallMediaType): GrpcCallType {
13
+ switch (media) {
14
+ case PUPPET.types.CallMediaType.Audio: return grpcPuppet.CallType.CALL_TYPE_VOICE
15
+ case PUPPET.types.CallMediaType.Video: return grpcPuppet.CallType.CALL_TYPE_VIDEO
16
+ default: {
17
+ const exhaustive: never = media
18
+ throw new Error(`puppetCallMediaTypeToGrpc: unknown CallMediaType "${String(exhaustive)}"`)
19
+ }
20
+ }
21
+ }
22
+
23
+ /**
24
+ * gRPC CallType (number enum) -> PUPPET CallMediaType (string enum).
25
+ * CALL_TYPE_UNKNOWN (wire zero value) maps to undefined so callers can reject it explicitly.
26
+ */
27
+ export function grpcCallTypeToPuppetMedia (grpcType: number): PUPPET.types.CallMediaType | undefined {
28
+ switch (grpcType) {
29
+ case grpcPuppet.CallType.CALL_TYPE_UNKNOWN: return undefined
30
+ case grpcPuppet.CallType.CALL_TYPE_VOICE: return PUPPET.types.CallMediaType.Audio
31
+ case grpcPuppet.CallType.CALL_TYPE_VIDEO: return PUPPET.types.CallMediaType.Video
32
+ default:
33
+ throw new Error(`grpcCallTypeToPuppetMedia: unknown gRPC CallType value ${grpcType}`)
34
+ }
35
+ }