gifted-baileys 1.5.0 → 1.5.5

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 (222) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1429 -684
  3. package/package.json +11 -26
  4. package/src/Defaults/baileys-version.json +3 -0
  5. package/{lib → src}/Defaults/index.js +16 -8
  6. package/src/Defaults/index.ts +131 -0
  7. package/src/Defaults/phonenumber-mcc.json +223 -0
  8. package/src/Signal/libsignal.js +180 -0
  9. package/src/Signal/libsignal.ts +141 -0
  10. package/src/Socket/Client/abstract-socket-client.ts +19 -0
  11. package/src/Socket/Client/index.ts +3 -0
  12. package/src/Socket/Client/mobile-socket-client.js +78 -0
  13. package/src/Socket/Client/mobile-socket-client.ts +66 -0
  14. package/src/Socket/Client/web-socket-client.js +75 -0
  15. package/src/Socket/Client/web-socket-client.ts +57 -0
  16. package/{lib → src}/Socket/business.js +33 -27
  17. package/src/Socket/business.ts +281 -0
  18. package/{lib → src}/Socket/chats.js +197 -178
  19. package/src/Socket/chats.ts +1030 -0
  20. package/{lib → src}/Socket/groups.js +69 -79
  21. package/src/Socket/groups.ts +356 -0
  22. package/{lib → src}/Socket/index.js +1 -4
  23. package/src/Socket/index.ts +13 -0
  24. package/{lib → src}/Socket/messages-recv.js +160 -108
  25. package/src/Socket/messages-recv.ts +985 -0
  26. package/{lib → src}/Socket/messages-send.js +183 -100
  27. package/src/Socket/messages-send.ts +871 -0
  28. package/src/Socket/newsletter.js +227 -0
  29. package/src/Socket/newsletter.ts +282 -0
  30. package/{lib → src}/Socket/registration.js +55 -63
  31. package/src/Socket/registration.ts +250 -0
  32. package/{lib → src}/Socket/socket.js +107 -66
  33. package/src/Socket/socket.ts +777 -0
  34. package/src/Store/index.ts +3 -0
  35. package/{lib → src}/Store/make-cache-manager-store.js +34 -25
  36. package/src/Store/make-cache-manager-store.ts +100 -0
  37. package/{lib → src}/Store/make-in-memory-store.js +51 -61
  38. package/src/Store/make-in-memory-store.ts +475 -0
  39. package/src/Store/make-ordered-dictionary.ts +86 -0
  40. package/{lib → src}/Store/object-repository.js +1 -1
  41. package/src/Store/object-repository.ts +32 -0
  42. package/src/Tests/test.app-state-sync.js +204 -0
  43. package/src/Tests/test.app-state-sync.ts +207 -0
  44. package/src/Tests/test.event-buffer.js +270 -0
  45. package/src/Tests/test.event-buffer.ts +319 -0
  46. package/src/Tests/test.key-store.js +76 -0
  47. package/src/Tests/test.key-store.ts +92 -0
  48. package/src/Tests/test.libsignal.js +141 -0
  49. package/src/Tests/test.libsignal.ts +186 -0
  50. package/src/Tests/test.media-download.js +93 -0
  51. package/src/Tests/test.media-download.ts +76 -0
  52. package/src/Tests/test.messages.js +33 -0
  53. package/src/Tests/test.messages.ts +37 -0
  54. package/src/Tests/utils.js +34 -0
  55. package/src/Tests/utils.ts +36 -0
  56. package/src/Types/Auth.ts +113 -0
  57. package/src/Types/Call.ts +15 -0
  58. package/src/Types/Chat.ts +106 -0
  59. package/{lib/Types/Contact.d.ts → src/Types/Contact.ts} +9 -8
  60. package/src/Types/Events.ts +93 -0
  61. package/src/Types/GroupMetadata.ts +53 -0
  62. package/{lib → src}/Types/Label.js +1 -1
  63. package/src/Types/Label.ts +36 -0
  64. package/{lib → src}/Types/LabelAssociation.js +1 -1
  65. package/{lib/Types/LabelAssociation.d.ts → src/Types/LabelAssociation.ts} +22 -16
  66. package/src/Types/Message.ts +288 -0
  67. package/src/Types/Newsletter.js +32 -0
  68. package/src/Types/Newsletter.ts +98 -0
  69. package/src/Types/Product.ts +85 -0
  70. package/src/Types/Signal.ts +68 -0
  71. package/{lib/Types/Socket.d.ts → src/Types/Socket.ts} +68 -56
  72. package/src/Types/State.ts +29 -0
  73. package/{lib → src}/Types/index.js +2 -1
  74. package/src/Types/index.ts +59 -0
  75. package/{lib → src}/Utils/auth-utils.js +95 -76
  76. package/src/Utils/auth-utils.ts +222 -0
  77. package/src/Utils/baileys-event-stream.js +92 -0
  78. package/src/Utils/baileys-event-stream.ts +66 -0
  79. package/{lib → src}/Utils/business.js +45 -17
  80. package/src/Utils/business.ts +275 -0
  81. package/{lib → src}/Utils/chat-utils.js +74 -46
  82. package/src/Utils/chat-utils.ts +860 -0
  83. package/{lib → src}/Utils/crypto.js +31 -21
  84. package/src/Utils/crypto.ts +131 -0
  85. package/src/Utils/decode-wa-message.js +211 -0
  86. package/src/Utils/decode-wa-message.ts +228 -0
  87. package/{lib → src}/Utils/event-buffer.js +13 -4
  88. package/src/Utils/event-buffer.ts +613 -0
  89. package/{lib → src}/Utils/generics.js +98 -45
  90. package/src/Utils/generics.ts +434 -0
  91. package/{lib → src}/Utils/history.js +39 -10
  92. package/src/Utils/history.ts +112 -0
  93. package/src/Utils/index.ts +17 -0
  94. package/{lib → src}/Utils/link-preview.js +54 -17
  95. package/src/Utils/link-preview.ts +122 -0
  96. package/src/Utils/logger.ts +3 -0
  97. package/src/Utils/lt-hash.ts +61 -0
  98. package/{lib → src}/Utils/make-mutex.js +13 -4
  99. package/src/Utils/make-mutex.ts +44 -0
  100. package/{lib → src}/Utils/messages-media.js +296 -192
  101. package/src/Utils/messages-media.ts +847 -0
  102. package/{lib → src}/Utils/messages.js +124 -113
  103. package/src/Utils/messages.ts +956 -0
  104. package/{lib → src}/Utils/noise-handler.js +16 -3
  105. package/src/Utils/noise-handler.ts +197 -0
  106. package/{lib → src}/Utils/process-message.js +33 -29
  107. package/src/Utils/process-message.ts +414 -0
  108. package/{lib → src}/Utils/signal.js +23 -14
  109. package/src/Utils/signal.ts +177 -0
  110. package/{lib → src}/Utils/use-multi-file-auth-state.js +28 -19
  111. package/src/Utils/use-multi-file-auth-state.ts +90 -0
  112. package/{lib → src}/Utils/validate-connection.js +25 -42
  113. package/src/Utils/validate-connection.ts +238 -0
  114. package/src/WABinary/constants.ts +42 -0
  115. package/{lib → src}/WABinary/decode.js +17 -7
  116. package/src/WABinary/decode.ts +265 -0
  117. package/{lib → src}/WABinary/encode.js +17 -7
  118. package/src/WABinary/encode.ts +236 -0
  119. package/{lib → src}/WABinary/generic-utils.js +2 -2
  120. package/src/WABinary/generic-utils.ts +121 -0
  121. package/src/WABinary/index.ts +5 -0
  122. package/{lib → src}/WABinary/jid-utils.js +4 -1
  123. package/src/WABinary/jid-utils.ts +68 -0
  124. package/src/WABinary/types.ts +17 -0
  125. package/src/WAM/BinaryInfo.js +13 -0
  126. package/src/WAM/BinaryInfo.ts +12 -0
  127. package/src/WAM/constants.js +15350 -0
  128. package/src/WAM/constants.ts +15382 -0
  129. package/src/WAM/encode.js +155 -0
  130. package/src/WAM/encode.ts +174 -0
  131. package/src/WAM/index.js +19 -0
  132. package/src/WAM/index.ts +3 -0
  133. package/src/gifted +1 -0
  134. package/{lib → src}/index.js +1 -0
  135. package/src/index.ts +13 -0
  136. package/lib/Defaults/baileys-version.json +0 -3
  137. package/lib/Defaults/index.d.ts +0 -284
  138. package/lib/Defaults/phonenumber-mcc.json +0 -223
  139. package/lib/Signal/libsignal.d.ts +0 -3
  140. package/lib/Signal/libsignal.js +0 -152
  141. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -17
  142. package/lib/Socket/Client/index.d.ts +0 -3
  143. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -13
  144. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  145. package/lib/Socket/Client/web-socket-client.d.ts +0 -12
  146. package/lib/Socket/Client/web-socket-client.js +0 -62
  147. package/lib/Socket/business.d.ts +0 -135
  148. package/lib/Socket/chats.d.ts +0 -79
  149. package/lib/Socket/groups.d.ts +0 -113
  150. package/lib/Socket/index.d.ts +0 -137
  151. package/lib/Socket/messages-recv.d.ts +0 -124
  152. package/lib/Socket/messages-send.d.ts +0 -119
  153. package/lib/Socket/registration.d.ts +0 -232
  154. package/lib/Socket/socket.d.ts +0 -42
  155. package/lib/Store/index.d.ts +0 -3
  156. package/lib/Store/make-cache-manager-store.d.ts +0 -13
  157. package/lib/Store/make-in-memory-store.d.ts +0 -117
  158. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  159. package/lib/Store/object-repository.d.ts +0 -10
  160. package/lib/Types/Auth.d.ts +0 -108
  161. package/lib/Types/Call.d.ts +0 -13
  162. package/lib/Types/Chat.d.ts +0 -102
  163. package/lib/Types/Events.d.ts +0 -157
  164. package/lib/Types/GroupMetadata.d.ts +0 -52
  165. package/lib/Types/Label.d.ts +0 -35
  166. package/lib/Types/Message.d.ts +0 -261
  167. package/lib/Types/Product.d.ts +0 -78
  168. package/lib/Types/Signal.d.ts +0 -57
  169. package/lib/Types/State.d.ts +0 -27
  170. package/lib/Types/index.d.ts +0 -56
  171. package/lib/Utils/auth-utils.d.ts +0 -18
  172. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  173. package/lib/Utils/baileys-event-stream.js +0 -63
  174. package/lib/Utils/business.d.ts +0 -22
  175. package/lib/Utils/chat-utils.d.ts +0 -71
  176. package/lib/Utils/crypto.d.ts +0 -41
  177. package/lib/Utils/decode-wa-message.d.ts +0 -19
  178. package/lib/Utils/decode-wa-message.js +0 -174
  179. package/lib/Utils/event-buffer.d.ts +0 -35
  180. package/lib/Utils/generics.d.ts +0 -94
  181. package/lib/Utils/history.d.ts +0 -15
  182. package/lib/Utils/index.d.ts +0 -17
  183. package/lib/Utils/link-preview.d.ts +0 -21
  184. package/lib/Utils/logger.d.ts +0 -4
  185. package/lib/Utils/lt-hash.d.ts +0 -12
  186. package/lib/Utils/make-mutex.d.ts +0 -7
  187. package/lib/Utils/messages-media.d.ts +0 -107
  188. package/lib/Utils/messages.d.ts +0 -76
  189. package/lib/Utils/noise-handler.d.ts +0 -20
  190. package/lib/Utils/process-message.d.ts +0 -41
  191. package/lib/Utils/signal.d.ts +0 -32
  192. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
  193. package/lib/Utils/validate-connection.d.ts +0 -11
  194. package/lib/WABinary/constants.d.ts +0 -27
  195. package/lib/WABinary/decode.d.ts +0 -7
  196. package/lib/WABinary/encode.d.ts +0 -3
  197. package/lib/WABinary/generic-utils.d.ts +0 -15
  198. package/lib/WABinary/index.d.ts +0 -5
  199. package/lib/WABinary/jid-utils.d.ts +0 -29
  200. package/lib/WABinary/types.d.ts +0 -18
  201. package/lib/index.d.ts +0 -10
  202. /package/{lib → src}/Socket/Client/abstract-socket-client.js +0 -0
  203. /package/{lib → src}/Socket/Client/index.js +0 -0
  204. /package/{lib → src}/Store/index.js +0 -0
  205. /package/{lib → src}/Store/make-ordered-dictionary.js +0 -0
  206. /package/{lib → src}/Types/Auth.js +0 -0
  207. /package/{lib → src}/Types/Call.js +0 -0
  208. /package/{lib → src}/Types/Chat.js +0 -0
  209. /package/{lib → src}/Types/Contact.js +0 -0
  210. /package/{lib → src}/Types/Events.js +0 -0
  211. /package/{lib → src}/Types/GroupMetadata.js +0 -0
  212. /package/{lib → src}/Types/Message.js +0 -0
  213. /package/{lib → src}/Types/Product.js +0 -0
  214. /package/{lib → src}/Types/Signal.js +0 -0
  215. /package/{lib → src}/Types/Socket.js +0 -0
  216. /package/{lib → src}/Types/State.js +0 -0
  217. /package/{lib → src}/Utils/index.js +0 -0
  218. /package/{lib → src}/Utils/logger.js +0 -0
  219. /package/{lib → src}/Utils/lt-hash.js +0 -0
  220. /package/{lib → src}/WABinary/constants.js +0 -0
  221. /package/{lib → src}/WABinary/index.js +0 -0
  222. /package/{lib → src}/WABinary/types.js +0 -0
@@ -0,0 +1,3 @@
1
+ import makeCacheManagerAuthState from './make-cache-manager-store'
2
+ import makeInMemoryStore from './make-in-memory-store'
3
+ export { makeInMemoryStore, makeCacheManagerAuthState }
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -7,19 +16,19 @@ const cache_manager_1 = require("cache-manager");
7
16
  const WAProto_1 = require("../../WAProto");
8
17
  const Utils_1 = require("../Utils");
9
18
  const logger_1 = __importDefault(require("../Utils/logger"));
10
- const makeCacheManagerAuthState = async (store, sessionKey) => {
19
+ const makeCacheManagerAuthState = (store, sessionKey) => __awaiter(void 0, void 0, void 0, function* () {
11
20
  const defaultKey = (file) => `${sessionKey}:${file}`;
12
- const databaseConn = await (0, cache_manager_1.caching)(store);
13
- const writeData = async (file, data) => {
21
+ const databaseConn = yield (0, cache_manager_1.caching)(store);
22
+ const writeData = (file, data) => __awaiter(void 0, void 0, void 0, function* () {
14
23
  let ttl = undefined;
15
24
  if (file === 'creds') {
16
25
  ttl = 63115200; // 2 years
17
26
  }
18
- await databaseConn.set(defaultKey(file), JSON.stringify(data, Utils_1.BufferJSON.replacer), ttl);
19
- };
20
- const readData = async (file) => {
27
+ yield databaseConn.set(defaultKey(file), JSON.stringify(data, Utils_1.BufferJSON.replacer), ttl);
28
+ });
29
+ const readData = (file) => __awaiter(void 0, void 0, void 0, function* () {
21
30
  try {
22
- const data = await databaseConn.get(defaultKey(file));
31
+ const data = yield databaseConn.get(defaultKey(file));
23
32
  if (data) {
24
33
  return JSON.parse(data, Utils_1.BufferJSON.reviver);
25
34
  }
@@ -29,42 +38,42 @@ const makeCacheManagerAuthState = async (store, sessionKey) => {
29
38
  logger_1.default.error(error);
30
39
  return null;
31
40
  }
32
- };
33
- const removeData = async (file) => {
41
+ });
42
+ const removeData = (file) => __awaiter(void 0, void 0, void 0, function* () {
34
43
  try {
35
- return await databaseConn.del(defaultKey(file));
44
+ return yield databaseConn.del(defaultKey(file));
36
45
  }
37
46
  catch (_a) {
38
47
  logger_1.default.error(`Error removing ${file} from session ${sessionKey}`);
39
48
  }
40
- };
41
- const clearState = async () => {
49
+ });
50
+ const clearState = () => __awaiter(void 0, void 0, void 0, function* () {
42
51
  try {
43
- const result = await databaseConn.store.keys(`${sessionKey}*`);
44
- await Promise.all(result.map(async (key) => await databaseConn.del(key)));
52
+ const result = yield databaseConn.store.keys(`${sessionKey}*`);
53
+ yield Promise.all(result.map((key) => __awaiter(void 0, void 0, void 0, function* () { return yield databaseConn.del(key); })));
45
54
  }
46
55
  catch (err) {
47
56
  }
48
- };
49
- const creds = (await readData('creds')) || (0, Utils_1.initAuthCreds)();
57
+ });
58
+ const creds = (yield readData('creds')) || (0, Utils_1.initAuthCreds)();
50
59
  return {
51
60
  clearState,
52
61
  saveCreds: () => writeData('creds', creds),
53
62
  state: {
54
63
  creds,
55
64
  keys: {
56
- get: async (type, ids) => {
65
+ get: (type, ids) => __awaiter(void 0, void 0, void 0, function* () {
57
66
  const data = {};
58
- await Promise.all(ids.map(async (id) => {
59
- let value = await readData(`${type}-${id}`);
67
+ yield Promise.all(ids.map((id) => __awaiter(void 0, void 0, void 0, function* () {
68
+ let value = yield readData(`${type}-${id}`);
60
69
  if (type === 'app-state-sync-key' && value) {
61
70
  value = WAProto_1.proto.Message.AppStateSyncKeyData.fromObject(value);
62
71
  }
63
72
  data[id] = value;
64
- }));
73
+ })));
65
74
  return data;
66
- },
67
- set: async (data) => {
75
+ }),
76
+ set: (data) => __awaiter(void 0, void 0, void 0, function* () {
68
77
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
78
  const tasks = [];
70
79
  for (const category in data) {
@@ -74,10 +83,10 @@ const makeCacheManagerAuthState = async (store, sessionKey) => {
74
83
  tasks.push(value ? writeData(key, value) : removeData(key));
75
84
  }
76
85
  }
77
- await Promise.all(tasks);
78
- },
86
+ yield Promise.all(tasks);
87
+ }),
79
88
  }
80
89
  }
81
90
  };
82
- };
91
+ });
83
92
  exports.default = makeCacheManagerAuthState;
@@ -0,0 +1,100 @@
1
+ import { caching, Storage } from 'cache-manager'
2
+ import { proto } from '../../WAProto'
3
+ import { AuthenticationCreds } from '../Types'
4
+ import { BufferJSON, initAuthCreds } from '../Utils'
5
+ import logger from '../Utils/logger'
6
+
7
+ const makeCacheManagerAuthState = async(store: Storage, sessionKey: string) => {
8
+ const defaultKey = (file: string): string => `${sessionKey}:${file}`
9
+
10
+ const databaseConn = await caching(store)
11
+
12
+ const writeData = async(file: string, data: object) => {
13
+ let ttl: number | undefined = undefined
14
+ if(file === 'creds') {
15
+ ttl = 63115200 // 2 years
16
+ }
17
+
18
+ await databaseConn.set(
19
+ defaultKey(file),
20
+ JSON.stringify(data, BufferJSON.replacer),
21
+ ttl
22
+ )
23
+ }
24
+
25
+ const readData = async(file: string): Promise<AuthenticationCreds | null> => {
26
+ try {
27
+ const data = await databaseConn.get(defaultKey(file))
28
+
29
+ if(data) {
30
+ return JSON.parse(data as string, BufferJSON.reviver)
31
+ }
32
+
33
+ return null
34
+ } catch(error) {
35
+ logger.error(error)
36
+ return null
37
+ }
38
+ }
39
+
40
+ const removeData = async(file: string) => {
41
+ try {
42
+ return await databaseConn.del(defaultKey(file))
43
+ } catch{
44
+ logger.error(`Error removing ${file} from session ${sessionKey}`)
45
+ }
46
+ }
47
+
48
+ const clearState = async() => {
49
+ try {
50
+ const result = await databaseConn.store.keys(`${sessionKey}*`)
51
+ await Promise.all(
52
+ result.map(async(key) => await databaseConn.del(key))
53
+ )
54
+ } catch(err) {
55
+ }
56
+ }
57
+
58
+ const creds: AuthenticationCreds = (await readData('creds')) || initAuthCreds()
59
+
60
+ return {
61
+ clearState,
62
+ saveCreds: () => writeData('creds', creds),
63
+ state: {
64
+ creds,
65
+ keys: {
66
+ get: async(type: string, ids: string[]) => {
67
+ const data = {}
68
+ await Promise.all(
69
+ ids.map(async(id) => {
70
+ let value: proto.Message.AppStateSyncKeyData | AuthenticationCreds | null =
71
+ await readData(`${type}-${id}`)
72
+ if(type === 'app-state-sync-key' && value) {
73
+ value = proto.Message.AppStateSyncKeyData.fromObject(value)
74
+ }
75
+
76
+ data[id] = value
77
+ })
78
+ )
79
+
80
+ return data
81
+ },
82
+ set: async(data) => {
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ const tasks: Promise<any>[] = []
85
+ for(const category in data) {
86
+ for(const id in data[category]) {
87
+ const value = data[category][id]
88
+ const key = `${category}-${id}`
89
+ tasks.push(value ? writeData(key, value) : removeData(key))
90
+ }
91
+ }
92
+
93
+ await Promise.all(tasks)
94
+ },
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ export default makeCacheManagerAuthState
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -23,48 +32,11 @@ exports.waLabelAssociationKey = {
23
32
  compare: (k1, k2) => k2.localeCompare(k1)
24
33
  };
25
34
  const makeMessagesDictionary = () => (0, make_ordered_dictionary_1.default)(exports.waMessageID);
26
- const predefinedLabels = Object.freeze({
27
- '1': {
28
- id: '1',
29
- name: 'New customer',
30
- predefinedId: '1',
31
- color: 1,
32
- deleted: false
33
- },
34
- '2': {
35
- id: '2',
36
- name: 'New order',
37
- predefinedId: '2',
38
- color: 2,
39
- deleted: false
40
- },
41
- '3': {
42
- id: '3',
43
- name: 'Pending payment',
44
- predefinedId: '3',
45
- color: 3,
46
- deleted: false
47
- },
48
- '4': {
49
- id: '4',
50
- name: 'Paid',
51
- predefinedId: '4',
52
- color: 4,
53
- deleted: false
54
- },
55
- '5': {
56
- id: '5',
57
- name: 'Order completed',
58
- predefinedId: '5',
59
- color: 5,
60
- deleted: false
61
- }
62
- });
63
- exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
64
- // const logger = _logger || DEFAULT_CONNECTION_CONFIG.logger.child({ stream: 'in-mem-store' })
65
- chatKey = chatKey || (0, exports.waChatKey)(true);
66
- labelAssociationKey = labelAssociationKey || exports.waLabelAssociationKey;
67
- const logger = _logger || Defaults_1.DEFAULT_CONNECTION_CONFIG.logger.child({ stream: 'in-mem-store' });
35
+ exports.default = (config) => {
36
+ const socket = config.socket;
37
+ const chatKey = config.chatKey || (0, exports.waChatKey)(true);
38
+ const labelAssociationKey = config.labelAssociationKey || exports.waLabelAssociationKey;
39
+ const logger = config.logger || Defaults_1.DEFAULT_CONNECTION_CONFIG.logger.child({ stream: 'in-mem-store' });
68
40
  const KeyedDB = require('@adiwajshing/keyed-db').default;
69
41
  const chats = new KeyedDB(chatKey, c => c.id);
70
42
  const messages = {};
@@ -72,7 +44,7 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
72
44
  const groupMetadata = {};
73
45
  const presences = {};
74
46
  const state = { connection: 'close' };
75
- const labels = new object_repository_1.ObjectRepository(predefinedLabels);
47
+ const labels = new object_repository_1.ObjectRepository();
76
48
  const labelAssociations = new KeyedDB(labelAssociationKey, labelAssociationKey.key);
77
49
  const assertMessageList = (jid) => {
78
50
  if (!messages[jid]) {
@@ -129,16 +101,34 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
129
101
  ev.on('contacts.upsert', contacts => {
130
102
  contactsUpsert(contacts);
131
103
  });
132
- ev.on('contacts.update', updates => {
104
+ ev.on('contacts.update', (updates) => __awaiter(void 0, void 0, void 0, function* () {
105
+ var _a;
133
106
  for (const update of updates) {
107
+ let contact;
134
108
  if (contacts[update.id]) {
135
- Object.assign(contacts[update.id], update);
109
+ contact = contacts[update.id];
136
110
  }
137
111
  else {
138
- logger.debug({ update }, 'got update for non-existant contact');
112
+ const contactHashes = yield Promise.all(Object.keys(contacts).map((contactId) => __awaiter(void 0, void 0, void 0, function* () {
113
+ const { user } = (0, WABinary_1.jidDecode)(contactId);
114
+ return [contactId, (yield (0, Utils_1.md5)(Buffer.from(user + 'WA_ADD_NOTIF', 'utf8'))).toString('base64').slice(0, 3)];
115
+ })));
116
+ contact = contacts[((_a = contactHashes.find(([, b]) => b === update.id)) === null || _a === void 0 ? void 0 : _a[0]) || '']; // find contact by attrs.hash, when user is not saved as a contact
139
117
  }
118
+ if (contact) {
119
+ if (update.imgUrl === 'changed') {
120
+ contact.imgUrl = socket ? yield (socket === null || socket === void 0 ? void 0 : socket.profilePictureUrl(contact.id)) : undefined;
121
+ }
122
+ else if (update.imgUrl === 'removed') {
123
+ delete contact.imgUrl;
124
+ }
125
+ }
126
+ else {
127
+ return logger.debug({ update }, 'got update for non-existant contact');
128
+ }
129
+ Object.assign(contacts[contact.id], contact);
140
130
  }
141
- });
131
+ }));
142
132
  ev.on('chats.upsert', newChats => {
143
133
  chats.upsert(...newChats);
144
134
  });
@@ -146,7 +136,7 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
146
136
  for (let update of updates) {
147
137
  const result = chats.update(update.id, chat => {
148
138
  if (update.unreadCount > 0) {
149
- update = { ...update };
139
+ update = Object.assign({}, update);
150
140
  update.unreadCount = (chat.unreadCount || 0) + update.unreadCount;
151
141
  }
152
142
  Object.assign(chat, update);
@@ -325,7 +315,7 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
325
315
  labelAssociations,
326
316
  bind,
327
317
  /** loads messages from the store, if not found -- uses the legacy connection */
328
- loadMessages: async (jid, count, cursor) => {
318
+ loadMessages: (jid, count, cursor) => __awaiter(void 0, void 0, void 0, function* () {
329
319
  const list = assertMessageList(jid);
330
320
  const mode = !cursor || 'before' in cursor ? 'before' : 'after';
331
321
  const cursorKey = !!cursor ? ('before' in cursor ? cursor.before : cursor.after) : undefined;
@@ -348,7 +338,7 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
348
338
  messages = [];
349
339
  }
350
340
  return messages;
351
- },
341
+ }),
352
342
  /**
353
343
  * Get all available labels for profile
354
344
  *
@@ -377,31 +367,31 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
377
367
  .all();
378
368
  return associations.map(({ labelId }) => labelId);
379
369
  },
380
- loadMessage: async (jid, id) => { var _a; return (_a = messages[jid]) === null || _a === void 0 ? void 0 : _a.get(id); },
381
- mostRecentMessage: async (jid) => {
370
+ loadMessage: (jid, id) => __awaiter(void 0, void 0, void 0, function* () { var _a; return (_a = messages[jid]) === null || _a === void 0 ? void 0 : _a.get(id); }),
371
+ mostRecentMessage: (jid) => __awaiter(void 0, void 0, void 0, function* () {
382
372
  var _a;
383
373
  const message = (_a = messages[jid]) === null || _a === void 0 ? void 0 : _a.array.slice(-1)[0];
384
374
  return message;
385
- },
386
- fetchImageUrl: async (jid, sock) => {
375
+ }),
376
+ fetchImageUrl: (jid, sock) => __awaiter(void 0, void 0, void 0, function* () {
387
377
  const contact = contacts[jid];
388
378
  if (!contact) {
389
379
  return sock === null || sock === void 0 ? void 0 : sock.profilePictureUrl(jid);
390
380
  }
391
381
  if (typeof contact.imgUrl === 'undefined') {
392
- contact.imgUrl = await (sock === null || sock === void 0 ? void 0 : sock.profilePictureUrl(jid));
382
+ contact.imgUrl = yield (sock === null || sock === void 0 ? void 0 : sock.profilePictureUrl(jid));
393
383
  }
394
384
  return contact.imgUrl;
395
- },
396
- fetchGroupMetadata: async (jid, sock) => {
385
+ }),
386
+ fetchGroupMetadata: (jid, sock) => __awaiter(void 0, void 0, void 0, function* () {
397
387
  if (!groupMetadata[jid]) {
398
- const metadata = await (sock === null || sock === void 0 ? void 0 : sock.groupMetadata(jid));
388
+ const metadata = yield (sock === null || sock === void 0 ? void 0 : sock.groupMetadata(jid));
399
389
  if (metadata) {
400
390
  groupMetadata[jid] = metadata;
401
391
  }
402
392
  }
403
393
  return groupMetadata[jid];
404
- },
394
+ }),
405
395
  // fetchBroadcastListInfo: async(jid: string, sock: WASocket | undefined) => {
406
396
  // if(!groupMetadata[jid]) {
407
397
  // const metadata = await sock?.getBroadcastListInfo(jid)
@@ -411,11 +401,11 @@ exports.default = ({ logger: _logger, chatKey, labelAssociationKey }) => {
411
401
  // }
412
402
  // return groupMetadata[jid]
413
403
  // },
414
- fetchMessageReceipts: async ({ remoteJid, id }) => {
404
+ fetchMessageReceipts: (_a) => __awaiter(void 0, [_a], void 0, function* ({ remoteJid, id }) {
415
405
  const list = messages[remoteJid];
416
406
  const msg = list === null || list === void 0 ? void 0 : list.get(id);
417
407
  return msg === null || msg === void 0 ? void 0 : msg.userReceipt;
418
- },
408
+ }),
419
409
  toJSON,
420
410
  fromJSON,
421
411
  writeToFile: (path) => {