@juzi/wechaty-puppet-service 1.0.18 → 1.0.19

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 (47) hide show
  1. package/dist/cjs/src/client/payload-store.d.ts +2 -0
  2. package/dist/cjs/src/client/payload-store.d.ts.map +1 -1
  3. package/dist/cjs/src/client/payload-store.js +10 -0
  4. package/dist/cjs/src/client/payload-store.js.map +1 -1
  5. package/dist/cjs/src/client/puppet-service.d.ts +8 -6
  6. package/dist/cjs/src/client/puppet-service.d.ts.map +1 -1
  7. package/dist/cjs/src/client/puppet-service.js +83 -51
  8. package/dist/cjs/src/client/puppet-service.js.map +1 -1
  9. package/dist/cjs/src/config.d.ts +1 -0
  10. package/dist/cjs/src/config.d.ts.map +1 -1
  11. package/dist/cjs/src/config.js +2 -1
  12. package/dist/cjs/src/config.js.map +1 -1
  13. package/dist/cjs/src/package-json.js +5 -5
  14. package/dist/cjs/src/package-json.js.map +1 -1
  15. package/dist/cjs/src/server/event-stream-manager.d.ts.map +1 -1
  16. package/dist/cjs/src/server/event-stream-manager.js +7 -0
  17. package/dist/cjs/src/server/event-stream-manager.js.map +1 -1
  18. package/dist/cjs/src/server/puppet-implementation.d.ts.map +1 -1
  19. package/dist/cjs/src/server/puppet-implementation.js +63 -42
  20. package/dist/cjs/src/server/puppet-implementation.js.map +1 -1
  21. package/dist/esm/src/client/payload-store.d.ts +2 -0
  22. package/dist/esm/src/client/payload-store.d.ts.map +1 -1
  23. package/dist/esm/src/client/payload-store.js +10 -0
  24. package/dist/esm/src/client/payload-store.js.map +1 -1
  25. package/dist/esm/src/client/puppet-service.d.ts +8 -6
  26. package/dist/esm/src/client/puppet-service.d.ts.map +1 -1
  27. package/dist/esm/src/client/puppet-service.js +84 -52
  28. package/dist/esm/src/client/puppet-service.js.map +1 -1
  29. package/dist/esm/src/config.d.ts +1 -0
  30. package/dist/esm/src/config.d.ts.map +1 -1
  31. package/dist/esm/src/config.js +1 -0
  32. package/dist/esm/src/config.js.map +1 -1
  33. package/dist/esm/src/package-json.js +5 -5
  34. package/dist/esm/src/package-json.js.map +1 -1
  35. package/dist/esm/src/server/event-stream-manager.d.ts.map +1 -1
  36. package/dist/esm/src/server/event-stream-manager.js +7 -0
  37. package/dist/esm/src/server/event-stream-manager.js.map +1 -1
  38. package/dist/esm/src/server/puppet-implementation.d.ts.map +1 -1
  39. package/dist/esm/src/server/puppet-implementation.js +63 -42
  40. package/dist/esm/src/server/puppet-implementation.js.map +1 -1
  41. package/package.json +5 -5
  42. package/src/client/payload-store.ts +10 -0
  43. package/src/client/puppet-service.ts +113 -62
  44. package/src/config.ts +1 -0
  45. package/src/package-json.ts +5 -5
  46. package/src/server/event-stream-manager.ts +7 -0
  47. package/src/server/puppet-implementation.ts +72 -42
@@ -49,6 +49,8 @@ class PayloadStore {
49
49
  public contact? : FlashStore<string, PUPPET.payloads.Contact>
50
50
  public roomMember? : FlashStore<string, StoreRoomMemberPayload>
51
51
  public room? : FlashStore<string, PUPPET.payloads.Room>
52
+ public tag? : FlashStore<string, PUPPET.payloads.Tag>
53
+ public tagGroup? : FlashStore<string, PUPPET.payloads.TagGroup>
52
54
 
53
55
  protected storeDir: string
54
56
  protected accountId?: string
@@ -87,6 +89,8 @@ class PayloadStore {
87
89
  this.contact = new FlashStore(path.join(accountDir, 'contact-payload'))
88
90
  this.roomMember = new FlashStore(path.join(accountDir, 'room-member-payload'))
89
91
  this.room = new FlashStore(path.join(accountDir, 'room-payload'))
92
+ this.tag = new FlashStore(path.join(accountDir, 'tag-payload'))
93
+ this.tagGroup = new FlashStore(path.join(accountDir, 'tag-group'))
90
94
 
91
95
  /**
92
96
  * LRU
@@ -112,6 +116,8 @@ class PayloadStore {
112
116
  const contactStore = this.contact
113
117
  const roomMemberStore = this.roomMember
114
118
  const roomStore = this.room
119
+ const tagStore = this.tag
120
+ const tagGroupStore = this.tagGroup
115
121
  /**
116
122
  * Huan(202108): we must set all the instances of the store to underfined
117
123
  * in the current event loop as soon as possible
@@ -120,6 +126,8 @@ class PayloadStore {
120
126
  this.contact = undefined
121
127
  this.roomMember = undefined
122
128
  this.room = undefined
129
+ this.tag = undefined
130
+ this.tagGroup = undefined
123
131
 
124
132
  // LRU
125
133
  // this.message = undefined
@@ -130,6 +138,8 @@ class PayloadStore {
130
138
  await contactStore?.close()
131
139
  await roomMemberStore?.close()
132
140
  await roomStore?.close()
141
+ await tagStore?.close()
142
+ await tagGroupStore?.close()
133
143
  }
134
144
 
135
145
  async destroy (): Promise<void> {
@@ -57,6 +57,7 @@ import {
57
57
  } from '../file-box-helper/mod.js'
58
58
  import {
59
59
  envVars,
60
+ FOUR_PER_EM_SPACE,
60
61
  log,
61
62
  NO_LOG_EVENTS,
62
63
  VERSION,
@@ -348,6 +349,9 @@ class PuppetService extends PUPPET.Puppet {
348
349
  case grpcPuppet.EventType.EVENT_TYPE_SCAN:
349
350
  this.emit('scan', JSON.parse(payload) as PUPPET.payloads.EventScan)
350
351
  break
352
+ case grpcPuppet.EventType.EVENT_TYPE_TAG:
353
+ this.emit('tag', JSON.parse(payload) as PUPPET.payloads.EventTag)
354
+ break
351
355
  case grpcPuppet.EventType.EVENT_TYPE_RESET:
352
356
  log.warn('PuppetService', 'onGrpcStreamEvent() got an EventType.EVENT_TYPE_RESET ?')
353
357
  // the `reset` event should be dealed not send out
@@ -1975,7 +1979,7 @@ class PuppetService extends PUPPET.Puppet {
1975
1979
 
1976
1980
  override async tagGroupAdd (
1977
1981
  tagGroupName: string,
1978
- ): Promise<PUPPET.payloads.TagGroup | void> {
1982
+ ): Promise<string | void> {
1979
1983
  log.verbose('PuppetService', 'tagGroupAdd(%s)', tagGroupName)
1980
1984
 
1981
1985
  const request = new grpcPuppet.TagGroupAddRequest()
@@ -1987,18 +1991,9 @@ class PuppetService extends PUPPET.Puppet {
1987
1991
  .bind(this.grpcManager.client),
1988
1992
  )(request)
1989
1993
 
1990
- const grpcPayload = result.getPayload()
1991
- const id = grpcPayload?.getId()
1992
- const name = grpcPayload?.getName()
1993
-
1994
- if (id && name) {
1995
- const payload: PUPPET.payloads.TagGroup = {
1996
- id,
1997
- name,
1998
- }
1999
- return payload
2000
- }
1994
+ const id = result.getTagGroupId()
2001
1995
 
1996
+ return id
2002
1997
  }
2003
1998
 
2004
1999
  override async tagGroupDelete (
@@ -2020,7 +2015,7 @@ class PuppetService extends PUPPET.Puppet {
2020
2015
  override async tagTagAdd (
2021
2016
  tagName: string,
2022
2017
  tagGroupId?: string,
2023
- ): Promise<PUPPET.payloads.Tag | void> {
2018
+ ): Promise<PUPPET.filters.TagIdentifier | void> {
2024
2019
  log.verbose('PuppetService', 'tagTagAdd(%s, %s)', tagName, tagGroupId)
2025
2020
 
2026
2021
  const request = new grpcPuppet.TagTagAddRequest()
@@ -2035,22 +2030,16 @@ class PuppetService extends PUPPET.Puppet {
2035
2030
  .bind(this.grpcManager.client),
2036
2031
  )(request)
2037
2032
 
2038
- const grpcPayload = result.getPayload()
2039
- const id = grpcPayload?.getId()
2040
- const name = grpcPayload?.getName()
2041
- const groupId = grpcPayload?.getGroupId()
2042
- const type = grpcPayload?.getType()
2033
+ const tag = result.getTag()
2034
+ const id = tag?.getId()
2035
+ const groupId = tag?.getGroupId()
2043
2036
 
2044
- if (id && name && (typeof type !== 'undefined')) {
2045
- const payload: PUPPET.payloads.Tag = {
2037
+ if (id) {
2038
+ return {
2046
2039
  id,
2047
- name,
2048
2040
  groupId,
2049
- type,
2050
2041
  }
2051
- return payload
2052
2042
  }
2053
-
2054
2043
  }
2055
2044
 
2056
2045
  override async tagTagDelete (
@@ -2074,7 +2063,7 @@ class PuppetService extends PUPPET.Puppet {
2074
2063
 
2075
2064
  }
2076
2065
 
2077
- override async tagGroupList (): Promise<PUPPET.payloads.TagGroup[]> {
2066
+ override async tagGroupList (): Promise<string[]> {
2078
2067
  log.verbose('PuppetService', 'tagGroupList()')
2079
2068
 
2080
2069
  const request = new grpcPuppet.TagGroupListRequest()
@@ -2084,19 +2073,13 @@ class PuppetService extends PUPPET.Puppet {
2084
2073
  .bind(this.grpcManager.client),
2085
2074
  )(request)
2086
2075
 
2087
- const grpcPayloads = result.getPayloadsList()
2088
- const payloads: PUPPET.payloads.TagGroup[] = grpcPayloads.map(payload => {
2089
- return {
2090
- id: payload.getId(),
2091
- name: payload.getName(),
2092
- } as PUPPET.payloads.TagGroup
2093
- })
2094
- return payloads
2076
+ const groupIds = result.getTagGroupIdsList()
2077
+ return groupIds
2095
2078
  }
2096
2079
 
2097
2080
  override async tagGroupTagList (
2098
2081
  tagGroupId?: string,
2099
- ): Promise<PUPPET.payloads.Tag[]> {
2082
+ ): Promise<PUPPET.filters.TagIdentifier[]> {
2100
2083
  log.verbose('PuppetService', 'tagGroupTagList(%s)', tagGroupId)
2101
2084
 
2102
2085
  const request = new grpcPuppet.TagGroupTagListRequest()
@@ -2109,20 +2092,18 @@ class PuppetService extends PUPPET.Puppet {
2109
2092
  .bind(this.grpcManager.client),
2110
2093
  )(request)
2111
2094
 
2112
- const grpcPayloads = result.getPayloadsList()
2113
- const payloads: PUPPET.payloads.Tag[] = grpcPayloads.map(payload => {
2095
+ const tags = result.getTagsList()
2096
+ const tagIdentifiers = tags.map(tag => {
2114
2097
  return {
2115
- id: payload.getId(),
2116
- name: payload.getName(),
2117
- groupId: payload.getGroupId(),
2118
- type: payload.getType(),
2119
- } as PUPPET.payloads.Tag
2098
+ id: tag.getId(),
2099
+ groupId: tag.getGroupId(),
2100
+ }
2120
2101
  })
2121
- return payloads
2102
+ return tagIdentifiers
2122
2103
  }
2123
2104
 
2124
2105
  override async tagTagList (
2125
- ): Promise<PUPPET.payloads.Tag[]> {
2106
+ ): Promise<PUPPET.filters.TagIdentifier[]> {
2126
2107
  log.verbose('PuppetService', 'tagTagList()')
2127
2108
 
2128
2109
  const request = new grpcPuppet.TagTagListRequest()
@@ -2132,21 +2113,19 @@ class PuppetService extends PUPPET.Puppet {
2132
2113
  .bind(this.grpcManager.client),
2133
2114
  )(request)
2134
2115
 
2135
- const grpcPayloads = result.getPayloadsList()
2136
- const payloads: PUPPET.payloads.Tag[] = grpcPayloads.map(payload => {
2116
+ const tags = result.getTagsList()
2117
+ const tagIdentifiers = tags.map(tag => {
2137
2118
  return {
2138
- id: payload.getId(),
2139
- name: payload.getName(),
2140
- groupId: payload.getGroupId(),
2141
- type: payload.getType(),
2142
- } as PUPPET.payloads.Tag
2119
+ id: tag.getId(),
2120
+ groupId: tag.getGroupId(),
2121
+ }
2143
2122
  })
2144
- return payloads
2123
+ return tagIdentifiers
2145
2124
  }
2146
2125
 
2147
2126
  override async tagContactTagList (
2148
2127
  contactId: string,
2149
- ): Promise<PUPPET.payloads.Tag[]> {
2128
+ ): Promise<PUPPET.filters.TagIdentifier[]> {
2150
2129
  log.verbose('PuppetService', 'tagContactTagList(%s)', contactId)
2151
2130
 
2152
2131
  const request = new grpcPuppet.TagContactTagListRequest()
@@ -2157,16 +2136,14 @@ class PuppetService extends PUPPET.Puppet {
2157
2136
  .bind(this.grpcManager.client),
2158
2137
  )(request)
2159
2138
 
2160
- const grpcPayloads = result.getPayloadsList()
2161
- const payloads: PUPPET.payloads.Tag[] = grpcPayloads.map(payload => {
2139
+ const grpcPayloads = result.getTagsList()
2140
+ const tags: PUPPET.filters.TagIdentifier[] = grpcPayloads.map(tag => {
2162
2141
  return {
2163
- id: payload.getId(),
2164
- name: payload.getName(),
2165
- groupId: payload.getGroupId(),
2166
- type: payload.getType(),
2167
- } as PUPPET.payloads.Tag
2142
+ id: tag.getId(),
2143
+ groupId: tag.getGroupId(),
2144
+ }
2168
2145
  })
2169
- return payloads
2146
+ return tags
2170
2147
  }
2171
2148
 
2172
2149
  override async tagTagContactList (
@@ -2186,8 +2163,82 @@ class PuppetService extends PUPPET.Puppet {
2186
2163
  .bind(this.grpcManager.client),
2187
2164
  )(request)
2188
2165
 
2189
- const payloads = result.getPayloadsList()
2190
- return payloads
2166
+ const contactIds = result.getContactIdsList()
2167
+ return contactIds
2168
+ }
2169
+
2170
+ override async tagGroupPayloadPuppet (id: string): Promise<PUPPET.payloads.TagGroup> {
2171
+ log.verbose('PuppetService', 'tagGroupPayload(%s)', id)
2172
+
2173
+ const cachedPayload = await this._payloadStore.tagGroup?.get(id)
2174
+ if (cachedPayload) {
2175
+ log.silly('PuppetService', 'tagGroupPayload(%s) cache HIT', id)
2176
+ return cachedPayload
2177
+ }
2178
+
2179
+ const request = new grpcPuppet.TagGroupPayloadRequest()
2180
+ request.setGroupId(id)
2181
+
2182
+ const response = await util.promisify(
2183
+ this.grpcManager.client.tagGroupPayload
2184
+ .bind(this.grpcManager.client),
2185
+ )(request)
2186
+ const grpcPayload = response.getPayload()
2187
+
2188
+ if (!grpcPayload) {
2189
+ throw new Error(`tagGroup ${id} got no payload!`)
2190
+ }
2191
+
2192
+ const payload: PUPPET.payloads.TagGroup = {
2193
+ id: grpcPayload.getId(),
2194
+ name: grpcPayload.getName(),
2195
+ }
2196
+
2197
+ await this._payloadStore.tagGroup?.set(id, payload)
2198
+ log.silly('PuppetService', 'tagGroupPayloadPuppet(%s) cache SET', id)
2199
+
2200
+ return payload
2201
+ }
2202
+
2203
+ override async tagPayloadPuppet (tag: PUPPET.filters.TagIdentifier): Promise<PUPPET.payloads.Tag> {
2204
+ log.verbose('PuppetService', 'tagPayloadPuppet(%s)', JSON.stringify(tag))
2205
+
2206
+ const key = tag.groupId || '' + FOUR_PER_EM_SPACE + tag.id
2207
+ const cachedPayload = await this._payloadStore.tag?.get(key)
2208
+ if (cachedPayload) {
2209
+ log.silly('PuppetService', 'tagPayloadPuppet(%s) cache HIT', tag)
2210
+ return cachedPayload
2211
+ }
2212
+
2213
+ const tagIdentifier = new grpcPuppet.TagIdentifier()
2214
+ tagIdentifier.setId(tag.id)
2215
+ if (tag.groupId) {
2216
+ tagIdentifier.setGroupId(tag.groupId)
2217
+ }
2218
+ const request = new grpcPuppet.TagPayloadRequest()
2219
+ request.setTag(tagIdentifier)
2220
+
2221
+ const response = await util.promisify(
2222
+ this.grpcManager.client.tagPayload
2223
+ .bind(this.grpcManager.client),
2224
+ )(request)
2225
+ const grpcPayload = response.getPayload()
2226
+
2227
+ if (!grpcPayload) {
2228
+ throw new Error(`tag ${JSON.stringify(tag)} got no payload!`)
2229
+ }
2230
+
2231
+ const payload: PUPPET.payloads.Tag = {
2232
+ id: grpcPayload.getId(),
2233
+ name: grpcPayload.getName(),
2234
+ groupId: grpcPayload.getGroupId(),
2235
+ type: grpcPayload.getType(),
2236
+ }
2237
+
2238
+ await this._payloadStore.tag?.set(key, payload)
2239
+ log.silly('PuppetService', 'tagPayloadPuppet(%s) cache SET', JSON.stringify(tag))
2240
+
2241
+ return payload
2191
2242
  }
2192
2243
 
2193
2244
  /**
package/src/config.ts CHANGED
@@ -12,6 +12,7 @@ import {
12
12
  } from '@juzi/wechaty-grpc'
13
13
 
14
14
  const VERSION = packageJson.version || '0.0.0'
15
+ export const FOUR_PER_EM_SPACE = String.fromCharCode(0x2005)
15
16
 
16
17
  const envVars = {
17
18
  ...rootEnvVars,
@@ -4,7 +4,7 @@
4
4
  import type { PackageJson } from 'type-fest'
5
5
  export const packageJson: PackageJson = {
6
6
  "name": "@juzi/wechaty-puppet-service",
7
- "version": "1.0.18",
7
+ "version": "1.0.19",
8
8
  "description": "Puppet Service for Wechaty",
9
9
  "type": "module",
10
10
  "exports": {
@@ -55,6 +55,7 @@ export const packageJson: PackageJson = {
55
55
  "@chatie/eslint-config": "^1.0.4",
56
56
  "@chatie/semver": "^0.4.7",
57
57
  "@chatie/tsconfig": "^4.6.3",
58
+ "@juzi/wechaty-puppet-mock": "^1.0.1",
58
59
  "@types/google-protobuf": "^3.15.5",
59
60
  "@types/lru-cache": "^7.5.0",
60
61
  "@types/semver": "^7.3.9",
@@ -65,14 +66,14 @@ export const packageJson: PackageJson = {
65
66
  "temp": "^0.9.4",
66
67
  "typed-emitter": "^1.5.0-from-event",
67
68
  "utility-types": "^3.10.0",
68
- "@juzi/wechaty-puppet-mock": "^1.0.1",
69
69
  "why-is-node-running": "^2.2.1"
70
70
  },
71
71
  "peerDependencies": {
72
- "@juzi/wechaty-puppet": "^1.0.15"
72
+ "@juzi/wechaty-puppet": "^1.0.22"
73
73
  },
74
74
  "dependencies": {
75
- "@juzi/wechaty-grpc": "^1.0.12",
75
+ "@juzi/wechaty-grpc": "^1.0.13",
76
+ "@juzi/wechaty-redux": "^1.0.1",
76
77
  "clone-class": "^1.1.1",
77
78
  "ducks": "^1.0.2",
78
79
  "file-box": "^1.5.5",
@@ -83,7 +84,6 @@ export const packageJson: PackageJson = {
83
84
  "semver": "^7.3.5",
84
85
  "stronger-typed-streams": "^0.2.0",
85
86
  "uuid": "^8.3.2",
86
- "@juzi/wechaty-redux": "^1.0.1",
87
87
  "wechaty-token": "^1.0.6"
88
88
  },
89
89
  "publishConfig": {
@@ -273,6 +273,13 @@ class EventStreamManager {
273
273
  this.offCallbackList.push(off)
274
274
  break
275
275
  }
276
+ case 'tag': {
277
+ const listener = (payload: PUPPET.payloads.EventTag) => this.grpcEmit(grpcPuppet.EventType.EVENT_TYPE_TAG, payload)
278
+ this.puppet.on('tag', listener)
279
+ const off = () => this.puppet.off('tag', listener)
280
+ this.offCallbackList.push(off)
281
+ break
282
+ }
276
283
  case 'reset':
277
284
  // the `reset` event should be dealed internally, should not send out
278
285
  break
@@ -1552,13 +1552,11 @@ function puppetImplementation (
1552
1552
  const tagGroupName = call.request.getTagGroupName()
1553
1553
 
1554
1554
  const result = await puppet.tagGroupAdd(tagGroupName)
1555
- const payload = new grpcPuppet.TagGroupPayload()
1555
+
1556
1556
  const response = new grpcPuppet.TagGroupAddResponse()
1557
1557
 
1558
1558
  if (result) {
1559
- payload.setId(result.id)
1560
- payload.setName(result.name)
1561
- response.setPayload(payload)
1559
+ response.setTagGroupId(result)
1562
1560
  }
1563
1561
 
1564
1562
  return callback(null, response)
@@ -1589,17 +1587,15 @@ function puppetImplementation (
1589
1587
  const tagName = call.request.getTagName()
1590
1588
 
1591
1589
  const result = await puppet.tagTagAdd(tagName, tagGroupId)
1592
- const payload = new grpcPuppet.TagPayload()
1590
+ const tagIdentifier = new grpcPuppet.TagIdentifier()
1593
1591
  const response = new grpcPuppet.TagTagAddResponse()
1594
1592
 
1595
1593
  if (result) {
1596
- payload.setId(result.id)
1597
- payload.setName(result.name)
1598
- payload.setType(result.type)
1594
+ tagIdentifier.setId(result.id)
1599
1595
  if (result.groupId) {
1600
- payload.setGroupId(result.groupId)
1596
+ tagIdentifier.setGroupId(result.groupId)
1601
1597
  }
1602
- response.setPayload(payload)
1598
+ response.setTag(tagIdentifier)
1603
1599
  }
1604
1600
 
1605
1601
  return callback(null, response)
@@ -1630,14 +1626,8 @@ function puppetImplementation (
1630
1626
 
1631
1627
  try {
1632
1628
  const result = await puppet.tagGroupList()
1633
- const payloads = result.map(tagGroup => {
1634
- const payload = new grpcPuppet.TagGroupPayload()
1635
- payload.setId(tagGroup.id)
1636
- payload.setName(tagGroup.name)
1637
- return payload
1638
- })
1639
1629
  const response = new grpcPuppet.TagGroupListResponse()
1640
- response.setPayloadsList(payloads)
1630
+ response.setTagGroupIdsList(result)
1641
1631
 
1642
1632
  return callback(null, response)
1643
1633
  } catch (e) {
@@ -1652,18 +1642,16 @@ function puppetImplementation (
1652
1642
  const tagGroupId = call.request.getTagGroupId()
1653
1643
 
1654
1644
  const result = await puppet.tagGroupTagList(tagGroupId)
1655
- const payloads = result.map(tag => {
1656
- const payload = new grpcPuppet.TagPayload()
1657
- payload.setId(tag.id)
1658
- payload.setName(tag.name)
1659
- payload.setType(tag.type)
1645
+ const tagIdentifiers = result.map(tag => {
1646
+ const tagIdentifier = new grpcPuppet.TagIdentifier()
1647
+ tagIdentifier.setId(tag.id)
1660
1648
  if (tag.groupId) {
1661
- payload.setGroupId(tag.groupId)
1649
+ tagIdentifier.setGroupId(tag.groupId)
1662
1650
  }
1663
- return payload
1651
+ return tagIdentifier
1664
1652
  })
1665
1653
  const response = new grpcPuppet.TagGroupTagListResponse()
1666
- response.setPayloadsList(payloads)
1654
+ response.setTagsList(tagIdentifiers)
1667
1655
 
1668
1656
  return callback(null, response)
1669
1657
  } catch (e) {
@@ -1677,18 +1665,16 @@ function puppetImplementation (
1677
1665
 
1678
1666
  try {
1679
1667
  const result = await puppet.tagTagList()
1680
- const payloads = result.map(tag => {
1681
- const payload = new grpcPuppet.TagPayload()
1682
- payload.setId(tag.id)
1683
- payload.setName(tag.name)
1684
- payload.setType(tag.type)
1668
+ const tagIdentifiers = result.map(tag => {
1669
+ const tagIdentifier = new grpcPuppet.TagIdentifier()
1670
+ tagIdentifier.setId(tag.id)
1685
1671
  if (tag.groupId) {
1686
- payload.setGroupId(tag.groupId)
1672
+ tagIdentifier.setGroupId(tag.groupId)
1687
1673
  }
1688
- return payload
1674
+ return tagIdentifier
1689
1675
  })
1690
1676
  const response = new grpcPuppet.TagTagListResponse()
1691
- response.setPayloadsList(payloads)
1677
+ response.setTagsList(tagIdentifiers)
1692
1678
 
1693
1679
  return callback(null, response)
1694
1680
  } catch (e) {
@@ -1703,18 +1689,16 @@ function puppetImplementation (
1703
1689
  const contactId = call.request.getContactId()
1704
1690
 
1705
1691
  const result = await puppet.tagContactTagList(contactId)
1706
- const payloads = result.map(tag => {
1707
- const payload = new grpcPuppet.TagPayload()
1708
- payload.setId(tag.id)
1709
- payload.setName(tag.name)
1710
- payload.setType(tag.type)
1692
+ const tagIdentifiers = result.map(tag => {
1693
+ const tagIdentifier = new grpcPuppet.TagIdentifier()
1694
+ tagIdentifier.setId(tag.id)
1711
1695
  if (tag.groupId) {
1712
- payload.setGroupId(tag.groupId)
1696
+ tagIdentifier.setGroupId(tag.groupId)
1713
1697
  }
1714
- return payload
1698
+ return tagIdentifier
1715
1699
  })
1716
1700
  const response = new grpcPuppet.TagContactTagListResponse()
1717
- response.setPayloadsList(payloads)
1701
+ response.setTagsList(tagIdentifiers)
1718
1702
 
1719
1703
  return callback(null, response)
1720
1704
  } catch (e) {
@@ -1733,9 +1717,55 @@ function puppetImplementation (
1733
1717
  const result = await puppet.tagTagContactList({ id, groupId })
1734
1718
 
1735
1719
  const response = new grpcPuppet.TagTagContactListResponse()
1736
- response.setPayloadsList(result)
1720
+ response.setContactIdsList(result)
1721
+
1722
+ return callback(null, response)
1723
+ } catch (e) {
1724
+ return grpcError('tagTagContactList', e, callback)
1725
+ }
1726
+ },
1727
+
1728
+ tagGroupPayload: async (call, callback) => {
1729
+ log.verbose('PuppetServiceImpl', 'tagGroupPayload()')
1730
+
1731
+ try {
1732
+ const id = call.request.getGroupId()
1733
+
1734
+ const result = await puppet.tagGroupPayloadPuppet(id)
1735
+ const response = new grpcPuppet.TagGroupPayloadResponse()
1736
+ const payload = new grpcPuppet.TagGroupPayload()
1737
+ payload.setId(result.id)
1738
+ payload.setName(result.name)
1739
+ response.setPayload(payload)
1737
1740
 
1738
1741
  return callback(null, response)
1742
+
1743
+ } catch (e) {
1744
+ return grpcError('tagTagContactList', e, callback)
1745
+ }
1746
+ },
1747
+
1748
+ tagPayload: async (call, callback) => {
1749
+ log.verbose('PuppetServiceImpl', 'tagPayload()')
1750
+
1751
+ try {
1752
+ const tag = call.request.getTag()!
1753
+ const id = tag.getId()
1754
+ const groupId = tag.getGroupId() || ''
1755
+
1756
+ const result = await puppet.tagPayloadPuppet({ id, groupId })
1757
+ const response = new grpcPuppet.TagPayloadResponse()
1758
+ const payload = new grpcPuppet.TagPayload()
1759
+ payload.setId(result.id)
1760
+ payload.setName(result.name)
1761
+ payload.setType(result.type)
1762
+ if (result.groupId) {
1763
+ payload.setGroupId(result.groupId)
1764
+ }
1765
+ response.setPayload(payload)
1766
+
1767
+ return callback(null, response)
1768
+
1739
1769
  } catch (e) {
1740
1770
  return grpcError('tagTagContactList', e, callback)
1741
1771
  }