slidge-whatsapp 0.2.5__cp313-cp313-manylinux_2_36_aarch64.whl → 0.2.7__cp313-cp313-manylinux_2_36_aarch64.whl

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.

Potentially problematic release.


This version of slidge-whatsapp might be problematic. Click here for more details.

Files changed (357) hide show
  1. slidge_whatsapp/config.py +3 -0
  2. slidge_whatsapp/event.go +31 -26
  3. slidge_whatsapp/gateway.go +13 -9
  4. slidge_whatsapp/gateway.py +2 -2
  5. slidge_whatsapp/generated/_whatsapp.cpython-313-aarch64-linux-gnu.h +135 -135
  6. slidge_whatsapp/generated/_whatsapp.cpython-313-aarch64-linux-gnu.so +0 -0
  7. slidge_whatsapp/generated/build.py +108 -108
  8. slidge_whatsapp/generated/whatsapp.c +954 -954
  9. slidge_whatsapp/generated/whatsapp.go +602 -602
  10. slidge_whatsapp/generated/whatsapp.py +783 -783
  11. slidge_whatsapp/generated/whatsapp_go.h +135 -135
  12. slidge_whatsapp/go.mod +15 -12
  13. slidge_whatsapp/go.sum +35 -29
  14. slidge_whatsapp/media/media.go +21 -11
  15. slidge_whatsapp/session.go +73 -66
  16. slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn.go +4 -4
  17. slidge_whatsapp/vendor/github.com/ebitengine/purego/dlfcn_darwin.go +0 -5
  18. slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go +3 -0
  19. slidge_whatsapp/vendor/github.com/ebitengine/purego/internal/fakecgo/symbols.go +40 -20
  20. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/CHANGELOG.md +14 -1
  21. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/ffi.go +2 -2
  22. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/fun.go +10 -2
  23. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib.go +1 -1
  24. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_unix.go +1 -1
  25. slidge_whatsapp/vendor/github.com/jupiterrider/ffi/lib_windows.go +1 -1
  26. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/README.md +2 -7
  27. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/callback.go +2 -1
  28. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.c +8510 -5090
  29. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3-binding.h +344 -150
  30. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3.go +57 -23
  31. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.c +4 -0
  32. slidge_whatsapp/vendor/github.com/mattn/go-sqlite3/sqlite3_opt_unlock_notify.go +4 -0
  33. slidge_whatsapp/vendor/github.com/petermattis/goid/.gitignore +4 -0
  34. slidge_whatsapp/vendor/github.com/petermattis/goid/LICENSE +202 -0
  35. slidge_whatsapp/vendor/github.com/petermattis/goid/README.md +4 -0
  36. slidge_whatsapp/vendor/github.com/petermattis/goid/goid.go +35 -0
  37. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_gccgo.go +26 -0
  38. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.c +23 -0
  39. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.3.go +22 -0
  40. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.go +35 -0
  41. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.4.s +18 -0
  42. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.go +28 -0
  43. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_go1.5.s +44 -0
  44. slidge_whatsapp/vendor/github.com/petermattis/goid/goid_slow.go +24 -0
  45. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go +17 -0
  46. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.23.go +38 -0
  47. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.5.go +57 -0
  48. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.6.go +43 -0
  49. slidge_whatsapp/vendor/github.com/petermattis/goid/runtime_go1.9.go +37 -0
  50. slidge_whatsapp/vendor/github.com/rs/zerolog/CONTRIBUTING.md +43 -0
  51. slidge_whatsapp/vendor/github.com/rs/zerolog/README.md +31 -0
  52. slidge_whatsapp/vendor/github.com/rs/zerolog/console.go +20 -5
  53. slidge_whatsapp/vendor/github.com/rs/zerolog/log/log.go +131 -0
  54. slidge_whatsapp/vendor/github.com/rs/zerolog/log.go +1 -1
  55. slidge_whatsapp/vendor/github.com/rs/zerolog/sampler.go +4 -1
  56. slidge_whatsapp/vendor/github.com/rs/zerolog/writer.go +9 -0
  57. slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupCipher.go +17 -6
  58. slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go +17 -7
  59. slidge_whatsapp/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go +4 -2
  60. slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go +1 -0
  61. slidge_whatsapp/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go +1 -0
  62. slidge_whatsapp/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go +2 -2
  63. slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go +3 -2
  64. slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go +3 -2
  65. slidge_whatsapp/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go +3 -2
  66. slidge_whatsapp/vendor/go.mau.fi/libsignal/session/Session.go +41 -17
  67. slidge_whatsapp/vendor/go.mau.fi/libsignal/session/SessionCipher.go +64 -30
  68. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go +5 -3
  69. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go +6 -4
  70. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go +6 -4
  71. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SessionStore.go +8 -6
  72. slidge_whatsapp/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go +7 -5
  73. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/connlog.go +257 -0
  74. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/database.go +309 -0
  75. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/iter.go +233 -0
  76. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/json.go +47 -0
  77. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/log.go +129 -0
  78. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/massinsert.go +164 -0
  79. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/queryhelper.go +137 -0
  80. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/reflectscan.go +30 -0
  81. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/transaction.go +180 -0
  82. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgrades.go +250 -0
  83. slidge_whatsapp/vendor/go.mau.fi/util/dbutil/upgradetable.go +331 -0
  84. slidge_whatsapp/vendor/go.mau.fi/util/exerrors/dualerror.go +33 -0
  85. slidge_whatsapp/vendor/go.mau.fi/util/exerrors/must.go +23 -0
  86. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/cors.go +32 -0
  87. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/handleerrors.go +64 -0
  88. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/json.go +36 -0
  89. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/middleware.go +30 -0
  90. slidge_whatsapp/vendor/go.mau.fi/util/exhttp/networkerror.go +37 -0
  91. slidge_whatsapp/vendor/go.mau.fi/util/exstrings/stringutil.go +76 -0
  92. slidge_whatsapp/vendor/go.mau.fi/util/exsync/event.go +88 -0
  93. slidge_whatsapp/vendor/go.mau.fi/util/exsync/returnonce.go +25 -0
  94. slidge_whatsapp/vendor/go.mau.fi/util/exsync/ringbuffer.go +139 -0
  95. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +94 -0
  96. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +136 -0
  97. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/callermarshal.go +28 -0
  98. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/defaults.go +32 -0
  99. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/generics.go +45 -0
  100. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/writer.go +81 -0
  101. slidge_whatsapp/vendor/go.mau.fi/util/ptr/ptr.go +43 -0
  102. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +27 -26
  103. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +4 -3
  104. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/keys.go +5 -4
  105. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +27 -25
  106. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +40 -7
  107. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/binary/encoder.go +1 -1
  108. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/broadcast.go +5 -4
  109. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/call.go +1 -1
  110. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +119 -37
  111. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +29 -11
  112. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download-to-file.go +63 -30
  113. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +74 -34
  114. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +1 -0
  115. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +61 -31
  116. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +188 -152
  117. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/keepalive.go +3 -2
  118. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaconn.go +5 -3
  119. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaretry.go +2 -1
  120. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +444 -135
  121. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +118 -31
  122. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +78 -42
  123. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +7 -4
  124. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +42 -18
  125. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +9 -5
  126. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +2 -1
  127. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/privacysettings.go +10 -11
  128. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/extra.go +7 -0
  129. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.pb.go +983 -0
  130. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.proto +85 -0
  131. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/extra.go +3 -0
  132. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.pb.go +197 -0
  133. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto +13 -0
  134. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.pb.go +279 -0
  135. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto +21 -0
  136. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.pb.go +137 -0
  137. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto +10 -0
  138. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.pb.go +313 -0
  139. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto +27 -0
  140. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.pb.go +1299 -0
  141. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto +112 -0
  142. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.pb.go +514 -0
  143. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.proto +47 -0
  144. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.pb.go +123 -0
  145. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.proto +7 -0
  146. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/extra.go +3 -0
  147. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.pb.go +720 -0
  148. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.proto +59 -0
  149. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/extra.go +3 -0
  150. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.pb.go +365 -0
  151. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.proto +33 -0
  152. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.pb.go +1238 -0
  153. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.proto +105 -0
  154. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +39 -9
  155. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +354 -175
  156. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +5 -5
  157. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +170 -15
  158. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +4 -0
  159. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +29 -9
  160. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +13 -9
  161. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +344 -31
  162. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +26 -0
  163. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.pb.go → WACompanionReg.pb.go} +184 -89
  164. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.proto → WACompanionReg.proto} +2 -1
  165. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +173 -9
  166. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +78 -16
  167. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +5 -0
  168. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +7428 -2151
  169. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +373 -44
  170. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +456 -135
  171. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +14 -0
  172. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.pb.go +198 -0
  173. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto +14 -0
  174. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +162 -9
  175. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +1 -0
  176. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +32 -9
  177. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +1 -0
  178. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +192 -52
  179. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +8 -0
  180. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +60 -9
  181. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go +7 -6
  182. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +39 -9
  183. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +61 -9
  184. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go +800 -0
  185. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto +72 -0
  186. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +1344 -438
  187. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +52 -0
  188. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +27 -9
  189. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +59 -9
  190. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +382 -78
  191. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +8 -0
  192. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +563 -9
  193. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +4 -0
  194. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +25 -9
  195. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/reportingfields.json +1 -0
  196. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/reportingtoken.go +176 -0
  197. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +39 -21
  198. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +261 -75
  199. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +28 -16
  200. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +3 -1
  201. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +85 -43
  202. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +75 -88
  203. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +86 -65
  204. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go +186 -0
  205. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +291 -167
  206. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql +155 -0
  207. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql +11 -0
  208. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql +8 -0
  209. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql +2 -0
  210. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql +2 -0
  211. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql +2 -0
  212. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql +5 -0
  213. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql +10 -0
  214. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/10-chat-db-lid-migration-ts.sql +2 -0
  215. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go +22 -0
  216. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +107 -56
  217. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/botmap.go +210 -0
  218. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +13 -2
  219. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/group.go +15 -6
  220. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +7 -8
  221. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/message.go +18 -0
  222. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/update.go +3 -2
  223. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/upload.go +1 -1
  224. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +47 -29
  225. slidge_whatsapp/vendor/golang.org/x/exp/LICENSE +27 -0
  226. slidge_whatsapp/vendor/golang.org/x/exp/PATENTS +22 -0
  227. slidge_whatsapp/vendor/golang.org/x/exp/constraints/constraints.go +54 -0
  228. slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
  229. slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
  230. slidge_whatsapp/vendor/golang.org/x/net/http2/.gitignore +2 -0
  231. slidge_whatsapp/vendor/golang.org/x/net/http2/ascii.go +53 -0
  232. slidge_whatsapp/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  233. slidge_whatsapp/vendor/golang.org/x/net/http2/client_conn_pool.go +311 -0
  234. slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +122 -0
  235. slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +61 -0
  236. slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +16 -0
  237. slidge_whatsapp/vendor/golang.org/x/net/http2/databuffer.go +149 -0
  238. slidge_whatsapp/vendor/golang.org/x/net/http2/errors.go +145 -0
  239. slidge_whatsapp/vendor/golang.org/x/net/http2/flow.go +120 -0
  240. slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +1702 -0
  241. slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +170 -0
  242. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
  243. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
  244. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
  245. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
  246. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
  247. slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +432 -0
  248. slidge_whatsapp/vendor/golang.org/x/net/http2/pipe.go +184 -0
  249. slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +3350 -0
  250. slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +20 -0
  251. slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +3287 -0
  252. slidge_whatsapp/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
  253. slidge_whatsapp/vendor/golang.org/x/net/http2/write.go +381 -0
  254. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +251 -0
  255. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority.go +451 -0
  256. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_random.go +77 -0
  257. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +119 -0
  258. slidge_whatsapp/vendor/golang.org/x/net/idna/go118.go +13 -0
  259. slidge_whatsapp/vendor/golang.org/x/net/idna/idna10.0.0.go +769 -0
  260. slidge_whatsapp/vendor/golang.org/x/net/idna/idna9.0.0.go +717 -0
  261. slidge_whatsapp/vendor/golang.org/x/net/idna/pre_go118.go +11 -0
  262. slidge_whatsapp/vendor/golang.org/x/net/idna/punycode.go +217 -0
  263. slidge_whatsapp/vendor/golang.org/x/net/idna/tables10.0.0.go +4559 -0
  264. slidge_whatsapp/vendor/golang.org/x/net/idna/tables11.0.0.go +4653 -0
  265. slidge_whatsapp/vendor/golang.org/x/net/idna/tables12.0.0.go +4733 -0
  266. slidge_whatsapp/vendor/golang.org/x/net/idna/tables13.0.0.go +4959 -0
  267. slidge_whatsapp/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
  268. slidge_whatsapp/vendor/golang.org/x/net/idna/tables9.0.0.go +4486 -0
  269. slidge_whatsapp/vendor/golang.org/x/net/idna/trie.go +51 -0
  270. slidge_whatsapp/vendor/golang.org/x/net/idna/trie12.0.0.go +30 -0
  271. slidge_whatsapp/vendor/golang.org/x/net/idna/trie13.0.0.go +30 -0
  272. slidge_whatsapp/vendor/golang.org/x/net/idna/trieval.go +119 -0
  273. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
  274. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
  275. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +467 -0
  276. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +148 -1
  277. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +16 -26
  278. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +84 -0
  279. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +20 -0
  280. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +84 -0
  281. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +20 -0
  282. slidge_whatsapp/vendor/golang.org/x/sys/windows/security_windows.go +44 -5
  283. slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +4 -2
  284. slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +239 -0
  285. slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +9 -0
  286. slidge_whatsapp/vendor/golang.org/x/text/LICENSE +27 -0
  287. slidge_whatsapp/vendor/golang.org/x/text/PATENTS +22 -0
  288. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule.go +336 -0
  289. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +11 -0
  290. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +14 -0
  291. slidge_whatsapp/vendor/golang.org/x/text/transform/transform.go +709 -0
  292. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
  293. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  294. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +1071 -0
  295. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  296. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +1815 -0
  297. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +1887 -0
  298. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +1923 -0
  299. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +1955 -0
  300. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
  301. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +1781 -0
  302. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
  303. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
  304. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/forminfo.go +279 -0
  305. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  306. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/iter.go +458 -0
  307. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
  308. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  309. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +7657 -0
  310. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +7693 -0
  311. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +7710 -0
  312. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +7760 -0
  313. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
  314. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +7637 -0
  315. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  316. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  317. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
  318. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +3 -0
  319. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +16 -0
  320. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/{strings_unsafe_go121.go → strings_unsafe.go} +0 -2
  321. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
  322. slidge_whatsapp/vendor/google.golang.org/protobuf/proto/merge.go +6 -0
  323. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +2 -0
  324. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/{value_unsafe_go121.go → value_unsafe.go} +0 -2
  325. slidge_whatsapp/vendor/modules.txt +52 -13
  326. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/METADATA +1 -1
  327. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/RECORD +330 -184
  328. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/WHEEL +1 -1
  329. slidge_whatsapp/vendor/github.com/rs/zerolog/CNAME +0 -1
  330. slidge_whatsapp/vendor/github.com/rs/zerolog/_config.yml +0 -1
  331. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw +0 -0
  332. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw +0 -0
  333. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw +0 -0
  334. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +0 -23
  335. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +0 -7
  336. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw +0 -0
  337. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw +0 -0
  338. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw +0 -0
  339. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw +0 -0
  340. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw +0 -0
  341. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw +0 -0
  342. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw +0 -0
  343. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw +0 -0
  344. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw +0 -0
  345. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw +0 -0
  346. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw +0 -0
  347. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw +0 -0
  348. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw +0 -0
  349. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw +0 -0
  350. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw +0 -0
  351. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw +0 -0
  352. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw +0 -0
  353. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +0 -296
  354. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +0 -94
  355. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +0 -98
  356. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/LICENSE +0 -0
  357. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.7.dist-info}/entry_points.txt +0 -0
@@ -7,6 +7,9 @@
7
7
  package store
8
8
 
9
9
  import (
10
+ "context"
11
+ "fmt"
12
+
10
13
  "go.mau.fi/libsignal/ecc"
11
14
  groupRecord "go.mau.fi/libsignal/groups/state/record"
12
15
  "go.mau.fi/libsignal/keys/identity"
@@ -14,8 +17,6 @@ import (
14
17
  "go.mau.fi/libsignal/serialize"
15
18
  "go.mau.fi/libsignal/state/record"
16
19
  "go.mau.fi/libsignal/state/store"
17
-
18
- "go.mau.fi/whatsmeow/util/keys"
19
20
  )
20
21
 
21
22
  var SignalProtobufSerializer = serialize.NewProtoBufSerializer()
@@ -29,167 +30,153 @@ func (device *Device) GetIdentityKeyPair() *identity.KeyPair {
29
30
  )
30
31
  }
31
32
 
32
- func (device *Device) GetLocalRegistrationId() uint32 {
33
+ func (device *Device) GetLocalRegistrationID() uint32 {
33
34
  return device.RegistrationID
34
35
  }
35
36
 
36
- func (device *Device) SaveIdentity(address *protocol.SignalAddress, identityKey *identity.Key) {
37
- for i := 0; ; i++ {
38
- err := device.Identities.PutIdentity(address.String(), identityKey.PublicKey().PublicKey())
39
- if err == nil || !device.handleDatabaseError(i, err, "save identity of %s", address.String()) {
40
- break
41
- }
37
+ func (device *Device) SaveIdentity(ctx context.Context, address *protocol.SignalAddress, identityKey *identity.Key) error {
38
+ addrString := address.String()
39
+ err := device.Identities.PutIdentity(ctx, addrString, identityKey.PublicKey().PublicKey())
40
+ if err != nil {
41
+ return fmt.Errorf("failed to save identity of %s: %w", addrString, err)
42
42
  }
43
+ return nil
43
44
  }
44
45
 
45
- func (device *Device) IsTrustedIdentity(address *protocol.SignalAddress, identityKey *identity.Key) bool {
46
- for i := 0; ; i++ {
47
- isTrusted, err := device.Identities.IsTrustedIdentity(address.String(), identityKey.PublicKey().PublicKey())
48
- if err == nil || !device.handleDatabaseError(i, err, "check if %s's identity is trusted", address.String()) {
49
- return isTrusted
50
- }
46
+ func (device *Device) IsTrustedIdentity(ctx context.Context, address *protocol.SignalAddress, identityKey *identity.Key) (bool, error) {
47
+ addrString := address.String()
48
+ isTrusted, err := device.Identities.IsTrustedIdentity(ctx, addrString, identityKey.PublicKey().PublicKey())
49
+ if err != nil {
50
+ return false, fmt.Errorf("failed to check if %s's identity is trusted: %w", addrString, err)
51
51
  }
52
+ return isTrusted, nil
52
53
  }
53
54
 
54
- func (device *Device) LoadPreKey(id uint32) *record.PreKey {
55
- var preKey *keys.PreKey
56
- for i := 0; ; i++ {
57
- var err error
58
- preKey, err = device.PreKeys.GetPreKey(id)
59
- if err == nil || !device.handleDatabaseError(i, err, "load prekey %d", id) {
60
- break
61
- }
55
+ func (device *Device) LoadPreKey(ctx context.Context, id uint32) (*record.PreKey, error) {
56
+ preKey, err := device.PreKeys.GetPreKey(ctx, id)
57
+ if err != nil {
58
+ return nil, fmt.Errorf("failed to load prekey %d: %w", id, err)
62
59
  }
63
60
  if preKey == nil {
64
- return nil
61
+ return nil, nil
65
62
  }
66
63
  return record.NewPreKey(preKey.KeyID, ecc.NewECKeyPair(
67
64
  ecc.NewDjbECPublicKey(*preKey.Pub),
68
65
  ecc.NewDjbECPrivateKey(*preKey.Priv),
69
- ), nil)
66
+ ), nil), nil
70
67
  }
71
68
 
72
- func (device *Device) RemovePreKey(id uint32) {
73
- for i := 0; ; i++ {
74
- err := device.PreKeys.RemovePreKey(id)
75
- if err == nil || !device.handleDatabaseError(i, err, "remove prekey %d", id) {
76
- break
77
- }
69
+ func (device *Device) RemovePreKey(ctx context.Context, id uint32) error {
70
+ err := device.PreKeys.RemovePreKey(ctx, id)
71
+ if err != nil {
72
+ return fmt.Errorf("failed to remove prekey %d: %w", id, err)
78
73
  }
74
+ return nil
79
75
  }
80
76
 
81
- func (device *Device) StorePreKey(preKeyID uint32, preKeyRecord *record.PreKey) {
77
+ func (device *Device) StorePreKey(ctx context.Context, preKeyID uint32, preKeyRecord *record.PreKey) error {
82
78
  panic("not implemented")
83
79
  }
84
80
 
85
- func (device *Device) ContainsPreKey(preKeyID uint32) bool {
81
+ func (device *Device) ContainsPreKey(ctx context.Context, preKeyID uint32) (bool, error) {
86
82
  panic("not implemented")
87
83
  }
88
84
 
89
- func (device *Device) LoadSession(address *protocol.SignalAddress) *record.Session {
90
- var rawSess []byte
91
- var err error
92
- for i := 0; ; i++ {
93
- rawSess, err = device.Sessions.GetSession(address.String())
94
- if err == nil || !device.handleDatabaseError(i, err, "load session with %s", address.String()) {
95
- break
96
- }
85
+ func (device *Device) LoadSession(ctx context.Context, address *protocol.SignalAddress) (*record.Session, error) {
86
+ addrString := address.String()
87
+ rawSess, err := device.Sessions.GetSession(ctx, addrString)
88
+ if err != nil {
89
+ return nil, fmt.Errorf("failed to load session with %s: %w", addrString, err)
97
90
  }
98
91
  if rawSess == nil {
99
- if err != nil {
100
- return nil
101
- }
102
- return record.NewSession(SignalProtobufSerializer.Session, SignalProtobufSerializer.State)
92
+ return record.NewSession(SignalProtobufSerializer.Session, SignalProtobufSerializer.State), nil
103
93
  }
104
94
  sess, err := record.NewSessionFromBytes(rawSess, SignalProtobufSerializer.Session, SignalProtobufSerializer.State)
105
95
  if err != nil {
106
- device.Log.Errorf("Failed to deserialize session with %s: %v", address.String(), err)
107
- return nil
96
+ return nil, fmt.Errorf("failed to deserialize session with %s: %w", addrString, err)
108
97
  }
109
- return sess
98
+ return sess, nil
110
99
  }
111
100
 
112
- func (device *Device) GetSubDeviceSessions(name string) []uint32 {
101
+ func (device *Device) GetSubDeviceSessions(ctx context.Context, name string) ([]uint32, error) {
113
102
  panic("not implemented")
114
103
  }
115
104
 
116
- func (device *Device) StoreSession(address *protocol.SignalAddress, record *record.Session) {
117
- for i := 0; ; i++ {
118
- err := device.Sessions.PutSession(address.String(), record.Serialize())
119
- if err == nil || !device.handleDatabaseError(i, err, "store session with %s", address.String()) {
120
- return
121
- }
105
+ func (device *Device) StoreSession(ctx context.Context, address *protocol.SignalAddress, record *record.Session) error {
106
+ addrString := address.String()
107
+ err := device.Sessions.PutSession(ctx, addrString, record.Serialize())
108
+ if err != nil {
109
+ return fmt.Errorf("failed to store session with %s: %w", addrString, err)
122
110
  }
111
+ return nil
123
112
  }
124
113
 
125
- func (device *Device) ContainsSession(remoteAddress *protocol.SignalAddress) bool {
126
- for i := 0; ; i++ {
127
- hasSession, err := device.Sessions.HasSession(remoteAddress.String())
128
- if err == nil || !device.handleDatabaseError(i, err, "store has session for %s", remoteAddress.String()) {
129
- return hasSession
130
- }
114
+ func (device *Device) ContainsSession(ctx context.Context, remoteAddress *protocol.SignalAddress) (bool, error) {
115
+ addrString := remoteAddress.String()
116
+ hasSession, err := device.Sessions.HasSession(ctx, addrString)
117
+ if err != nil {
118
+ return false, fmt.Errorf("failed to check if store has session for %s: %w", addrString, err)
131
119
  }
120
+ return hasSession, nil
132
121
  }
133
122
 
134
- func (device *Device) DeleteSession(remoteAddress *protocol.SignalAddress) {
123
+ func (device *Device) DeleteSession(ctx context.Context, remoteAddress *protocol.SignalAddress) error {
135
124
  panic("not implemented")
136
125
  }
137
126
 
138
- func (device *Device) DeleteAllSessions() {
127
+ func (device *Device) DeleteAllSessions(ctx context.Context) error {
139
128
  panic("not implemented")
140
129
  }
141
130
 
142
- func (device *Device) LoadSignedPreKey(signedPreKeyID uint32) *record.SignedPreKey {
131
+ func (device *Device) LoadSignedPreKey(ctx context.Context, signedPreKeyID uint32) (*record.SignedPreKey, error) {
143
132
  if signedPreKeyID == device.SignedPreKey.KeyID {
144
133
  return record.NewSignedPreKey(signedPreKeyID, 0, ecc.NewECKeyPair(
145
134
  ecc.NewDjbECPublicKey(*device.SignedPreKey.Pub),
146
135
  ecc.NewDjbECPrivateKey(*device.SignedPreKey.Priv),
147
- ), *device.SignedPreKey.Signature, nil)
136
+ ), *device.SignedPreKey.Signature, nil), nil
148
137
  }
149
- return nil
138
+ return nil, nil
150
139
  }
151
140
 
152
- func (device *Device) LoadSignedPreKeys() []*record.SignedPreKey {
141
+ func (device *Device) LoadSignedPreKeys(ctx context.Context) ([]*record.SignedPreKey, error) {
153
142
  panic("not implemented")
154
143
  }
155
144
 
156
- func (device *Device) StoreSignedPreKey(signedPreKeyID uint32, record *record.SignedPreKey) {
145
+ func (device *Device) StoreSignedPreKey(ctx context.Context, signedPreKeyID uint32, record *record.SignedPreKey) error {
157
146
  panic("not implemented")
158
147
  }
159
148
 
160
- func (device *Device) ContainsSignedPreKey(signedPreKeyID uint32) bool {
149
+ func (device *Device) ContainsSignedPreKey(ctx context.Context, signedPreKeyID uint32) (bool, error) {
161
150
  panic("not implemented")
162
151
  }
163
152
 
164
- func (device *Device) RemoveSignedPreKey(signedPreKeyID uint32) {
153
+ func (device *Device) RemoveSignedPreKey(ctx context.Context, signedPreKeyID uint32) error {
165
154
  panic("not implemented")
166
155
  }
167
156
 
168
- func (device *Device) StoreSenderKey(senderKeyName *protocol.SenderKeyName, keyRecord *groupRecord.SenderKey) {
169
- for i := 0; ; i++ {
170
- err := device.SenderKeys.PutSenderKey(senderKeyName.GroupID(), senderKeyName.Sender().String(), keyRecord.Serialize())
171
- if err == nil || !device.handleDatabaseError(i, err, "store sender key from %s", senderKeyName.Sender().String()) {
172
- return
173
- }
157
+ func (device *Device) StoreSenderKey(ctx context.Context, senderKeyName *protocol.SenderKeyName, keyRecord *groupRecord.SenderKey) error {
158
+ groupID := senderKeyName.GroupID()
159
+ senderString := senderKeyName.Sender().String()
160
+ err := device.SenderKeys.PutSenderKey(ctx, groupID, senderString, keyRecord.Serialize())
161
+ if err != nil {
162
+ return fmt.Errorf("failed to store sender key from %s for %s: %w", senderString, groupID, err)
174
163
  }
164
+ return nil
175
165
  }
176
166
 
177
- func (device *Device) LoadSenderKey(senderKeyName *protocol.SenderKeyName) *groupRecord.SenderKey {
178
- var rawKey []byte
179
- for i := 0; ; i++ {
180
- var err error
181
- rawKey, err = device.SenderKeys.GetSenderKey(senderKeyName.GroupID(), senderKeyName.Sender().String())
182
- if err == nil || !device.handleDatabaseError(i, err, "load sender key from %s for %s", senderKeyName.Sender().String(), senderKeyName.GroupID()) {
183
- break
184
- }
167
+ func (device *Device) LoadSenderKey(ctx context.Context, senderKeyName *protocol.SenderKeyName) (*groupRecord.SenderKey, error) {
168
+ groupID := senderKeyName.GroupID()
169
+ senderString := senderKeyName.Sender().String()
170
+ rawKey, err := device.SenderKeys.GetSenderKey(ctx, groupID, senderString)
171
+ if err != nil {
172
+ return nil, fmt.Errorf("failed to load sender key from %s for %s: %w", senderString, groupID, err)
185
173
  }
186
174
  if rawKey == nil {
187
- return groupRecord.NewSenderKey(SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState)
175
+ return groupRecord.NewSenderKey(SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState), nil
188
176
  }
189
177
  key, err := groupRecord.NewSenderKeyFromBytes(rawKey, SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState)
190
178
  if err != nil {
191
- device.Log.Errorf("Failed to deserialize sender key from %s for %s: %v", senderKeyName.Sender().String(), senderKeyName.GroupID(), err)
192
- return groupRecord.NewSenderKey(SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState)
179
+ return nil, fmt.Errorf("failed to deserialize sender key from %s for %s: %w", senderString, groupID, err)
193
180
  }
194
- return key
181
+ return key, nil
195
182
  }
@@ -7,16 +7,19 @@
7
7
  package sqlstore
8
8
 
9
9
  import (
10
+ "context"
10
11
  "database/sql"
11
12
  "errors"
12
13
  "fmt"
13
- mathRand "math/rand"
14
+ mathRand "math/rand/v2"
14
15
 
15
16
  "github.com/google/uuid"
17
+ "go.mau.fi/util/dbutil"
16
18
  "go.mau.fi/util/random"
17
19
 
18
20
  "go.mau.fi/whatsmeow/proto/waAdv"
19
21
  "go.mau.fi/whatsmeow/store"
22
+ "go.mau.fi/whatsmeow/store/sqlstore/upgrades"
20
23
  "go.mau.fi/whatsmeow/types"
21
24
  "go.mau.fi/whatsmeow/util/keys"
22
25
  waLog "go.mau.fi/whatsmeow/util/log"
@@ -24,11 +27,9 @@ import (
24
27
 
25
28
  // Container is a wrapper for a SQL database that can contain multiple whatsmeow sessions.
26
29
  type Container struct {
27
- db *sql.DB
28
- dialect string
29
- log waLog.Logger
30
-
31
- DatabaseErrorHandler func(device *store.Device, action string, attemptIndex int, err error) (retry bool)
30
+ db *dbutil.Database
31
+ log waLog.Logger
32
+ LIDMap *CachedLIDMap
32
33
  }
33
34
 
34
35
  var _ store.DeviceContainer = (*Container)(nil)
@@ -41,14 +42,14 @@ var _ store.DeviceContainer = (*Container)(nil)
41
42
  //
42
43
  // When using SQLite, it's strongly recommended to enable foreign keys by adding `?_foreign_keys=true`:
43
44
  //
44
- // container, err := sqlstore.New("sqlite3", "file:yoursqlitefile.db?_foreign_keys=on", nil)
45
- func New(dialect, address string, log waLog.Logger) (*Container, error) {
45
+ // container, err := sqlstore.New(context.Background(), "sqlite3", "file:yoursqlitefile.db?_foreign_keys=on", nil)
46
+ func New(ctx context.Context, dialect, address string, log waLog.Logger) (*Container, error) {
46
47
  db, err := sql.Open(dialect, address)
47
48
  if err != nil {
48
49
  return nil, fmt.Errorf("failed to open database: %w", err)
49
50
  }
50
51
  container := NewWithDB(db, dialect, log)
51
- err = container.Upgrade()
52
+ err = container.Upgrade(ctx)
52
53
  if err != nil {
53
54
  return nil, fmt.Errorf("failed to upgrade database: %w", err)
54
55
  }
@@ -74,33 +75,54 @@ func New(dialect, address string, log waLog.Logger) (*Container, error) {
74
75
  // container := sqlstore.NewWithDB(...)
75
76
  // err := container.Upgrade()
76
77
  func NewWithDB(db *sql.DB, dialect string, log waLog.Logger) *Container {
78
+ wrapped, err := dbutil.NewWithDB(db, dialect)
79
+ if err != nil {
80
+ // This will only panic if the dialect is invalid
81
+ panic(err)
82
+ }
83
+ wrapped.UpgradeTable = upgrades.Table
84
+ wrapped.VersionTable = "whatsmeow_version"
85
+ return NewWithWrappedDB(wrapped, log)
86
+ }
87
+
88
+ func NewWithWrappedDB(wrapped *dbutil.Database, log waLog.Logger) *Container {
77
89
  if log == nil {
78
90
  log = waLog.Noop
79
91
  }
80
92
  return &Container{
81
- db: db,
82
- dialect: dialect,
83
- log: log,
93
+ db: wrapped,
94
+ log: log,
95
+ LIDMap: NewCachedLIDMap(wrapped),
84
96
  }
85
97
  }
86
98
 
99
+ // Upgrade upgrades the database from the current to the latest version available.
100
+ func (c *Container) Upgrade(ctx context.Context) error {
101
+ if c.db.Dialect == dbutil.SQLite {
102
+ var foreignKeysEnabled bool
103
+ err := c.db.QueryRow(ctx, "PRAGMA foreign_keys").Scan(&foreignKeysEnabled)
104
+ if err != nil {
105
+ return fmt.Errorf("failed to check if foreign keys are enabled: %w", err)
106
+ } else if !foreignKeysEnabled {
107
+ return fmt.Errorf("foreign keys are not enabled")
108
+ }
109
+ }
110
+
111
+ return c.db.Upgrade(ctx)
112
+ }
113
+
87
114
  const getAllDevicesQuery = `
88
- SELECT jid, registration_id, noise_key, identity_key,
115
+ SELECT jid, lid, registration_id, noise_key, identity_key,
89
116
  signed_pre_key, signed_pre_key_id, signed_pre_key_sig,
90
117
  adv_key, adv_details, adv_account_sig, adv_account_sig_key, adv_device_sig,
91
- platform, business_name, push_name, facebook_uuid
118
+ platform, business_name, push_name, facebook_uuid, lid_migration_ts
92
119
  FROM whatsmeow_device
93
120
  `
94
121
 
95
122
  const getDeviceQuery = getAllDevicesQuery + " WHERE jid=$1"
96
123
 
97
- type scannable interface {
98
- Scan(dest ...interface{}) error
99
- }
100
-
101
- func (c *Container) scanDevice(row scannable) (*store.Device, error) {
124
+ func (c *Container) scanDevice(row dbutil.Scannable) (*store.Device, error) {
102
125
  var device store.Device
103
- device.DatabaseErrorHandler = c.DatabaseErrorHandler
104
126
  device.Log = c.log
105
127
  device.SignedPreKey = &keys.PreKey{}
106
128
  var noisePriv, identityPriv, preKeyPriv, preKeySig []byte
@@ -108,10 +130,10 @@ func (c *Container) scanDevice(row scannable) (*store.Device, error) {
108
130
  var fbUUID uuid.NullUUID
109
131
 
110
132
  err := row.Scan(
111
- &device.ID, &device.RegistrationID, &noisePriv, &identityPriv,
133
+ &device.ID, &device.LID, &device.RegistrationID, &noisePriv, &identityPriv,
112
134
  &preKeyPriv, &device.SignedPreKey.KeyID, &preKeySig,
113
135
  &device.AdvSecretKey, &account.Details, &account.AccountSignature, &account.AccountSignatureKey, &account.DeviceSignature,
114
- &device.Platform, &device.BusinessName, &device.PushName, &fbUUID)
136
+ &device.Platform, &device.BusinessName, &device.PushName, &fbUUID, &device.LIDMigrationTimestamp)
115
137
  if err != nil {
116
138
  return nil, fmt.Errorf("failed to scan session: %w", err)
117
139
  } else if len(noisePriv) != 32 || len(identityPriv) != 32 || len(preKeyPriv) != 32 || len(preKeySig) != 64 {
@@ -125,26 +147,14 @@ func (c *Container) scanDevice(row scannable) (*store.Device, error) {
125
147
  device.Account = &account
126
148
  device.FacebookUUID = fbUUID.UUID
127
149
 
128
- innerStore := NewSQLStore(c, *device.ID)
129
- device.Identities = innerStore
130
- device.Sessions = innerStore
131
- device.PreKeys = innerStore
132
- device.SenderKeys = innerStore
133
- device.AppStateKeys = innerStore
134
- device.AppState = innerStore
135
- device.Contacts = innerStore
136
- device.ChatSettings = innerStore
137
- device.MsgSecrets = innerStore
138
- device.PrivacyTokens = innerStore
139
- device.Container = c
140
- device.Initialized = true
150
+ c.initializeDevice(&device)
141
151
 
142
152
  return &device, nil
143
153
  }
144
154
 
145
155
  // GetAllDevices finds all the devices in the database.
146
- func (c *Container) GetAllDevices() ([]*store.Device, error) {
147
- res, err := c.db.Query(getAllDevicesQuery)
156
+ func (c *Container) GetAllDevices(ctx context.Context) ([]*store.Device, error) {
157
+ res, err := c.db.Query(ctx, getAllDevicesQuery)
148
158
  if err != nil {
149
159
  return nil, fmt.Errorf("failed to query sessions: %w", err)
150
160
  }
@@ -162,8 +172,8 @@ func (c *Container) GetAllDevices() ([]*store.Device, error) {
162
172
  // GetFirstDevice is a convenience method for getting the first device in the store. If there are
163
173
  // no devices, then a new device will be created. You should only use this if you don't want to
164
174
  // have multiple sessions simultaneously.
165
- func (c *Container) GetFirstDevice() (*store.Device, error) {
166
- devices, err := c.GetAllDevices()
175
+ func (c *Container) GetFirstDevice(ctx context.Context) (*store.Device, error) {
176
+ devices, err := c.GetAllDevices(ctx)
167
177
  if err != nil {
168
178
  return nil, err
169
179
  }
@@ -179,8 +189,8 @@ func (c *Container) GetFirstDevice() (*store.Device, error) {
179
189
  // If the device is not found, nil is returned instead.
180
190
  //
181
191
  // Note that the parameter usually must be an AD-JID.
182
- func (c *Container) GetDevice(jid types.JID) (*store.Device, error) {
183
- sess, err := c.scanDevice(c.db.QueryRow(getDeviceQuery, jid))
192
+ func (c *Container) GetDevice(ctx context.Context, jid types.JID) (*store.Device, error) {
193
+ sess, err := c.scanDevice(c.db.QueryRow(ctx, getDeviceQuery, jid))
184
194
  if errors.Is(err, sql.ErrNoRows) {
185
195
  return nil, nil
186
196
  }
@@ -189,13 +199,17 @@ func (c *Container) GetDevice(jid types.JID) (*store.Device, error) {
189
199
 
190
200
  const (
191
201
  insertDeviceQuery = `
192
- INSERT INTO whatsmeow_device (jid, registration_id, noise_key, identity_key,
202
+ INSERT INTO whatsmeow_device (jid, lid, registration_id, noise_key, identity_key,
193
203
  signed_pre_key, signed_pre_key_id, signed_pre_key_sig,
194
204
  adv_key, adv_details, adv_account_sig, adv_account_sig_key, adv_device_sig,
195
- platform, business_name, push_name, facebook_uuid)
196
- VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
205
+ platform, business_name, push_name, facebook_uuid, lid_migration_ts)
206
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18)
197
207
  ON CONFLICT (jid) DO UPDATE
198
- SET platform=excluded.platform, business_name=excluded.business_name, push_name=excluded.push_name
208
+ SET lid=excluded.lid,
209
+ platform=excluded.platform,
210
+ business_name=excluded.business_name,
211
+ push_name=excluded.push_name,
212
+ lid_migration_ts=excluded.lid_migration_ts
199
213
  `
200
214
  deleteDeviceQuery = `DELETE FROM whatsmeow_device WHERE jid=$1`
201
215
  )
@@ -209,8 +223,6 @@ func (c *Container) NewDevice() *store.Device {
209
223
  Log: c.log,
210
224
  Container: c,
211
225
 
212
- DatabaseErrorHandler: c.DatabaseErrorHandler,
213
-
214
226
  NoiseKey: keys.NewKeyPair(),
215
227
  IdentityKey: keys.NewKeyPair(),
216
228
  RegistrationID: mathRand.Uint32(),
@@ -233,38 +245,47 @@ func (c *Container) Close() error {
233
245
 
234
246
  // PutDevice stores the given device in this database. This should be called through Device.Save()
235
247
  // (which usually doesn't need to be called manually, as the library does that automatically when relevant).
236
- func (c *Container) PutDevice(device *store.Device) error {
248
+ func (c *Container) PutDevice(ctx context.Context, device *store.Device) error {
237
249
  if device.ID == nil {
238
250
  return ErrDeviceIDMustBeSet
239
251
  }
240
- _, err := c.db.Exec(insertDeviceQuery,
241
- device.ID.String(), device.RegistrationID, device.NoiseKey.Priv[:], device.IdentityKey.Priv[:],
252
+ _, err := c.db.Exec(ctx, insertDeviceQuery,
253
+ device.ID, device.LID, device.RegistrationID, device.NoiseKey.Priv[:], device.IdentityKey.Priv[:],
242
254
  device.SignedPreKey.Priv[:], device.SignedPreKey.KeyID, device.SignedPreKey.Signature[:],
243
255
  device.AdvSecretKey, device.Account.Details, device.Account.AccountSignature, device.Account.AccountSignatureKey, device.Account.DeviceSignature,
244
- device.Platform, device.BusinessName, device.PushName, uuid.NullUUID{UUID: device.FacebookUUID, Valid: device.FacebookUUID != uuid.Nil})
256
+ device.Platform, device.BusinessName, device.PushName, uuid.NullUUID{UUID: device.FacebookUUID, Valid: device.FacebookUUID != uuid.Nil},
257
+ device.LIDMigrationTimestamp,
258
+ )
245
259
 
246
260
  if !device.Initialized {
247
- innerStore := NewSQLStore(c, *device.ID)
248
- device.Identities = innerStore
249
- device.Sessions = innerStore
250
- device.PreKeys = innerStore
251
- device.SenderKeys = innerStore
252
- device.AppStateKeys = innerStore
253
- device.AppState = innerStore
254
- device.Contacts = innerStore
255
- device.ChatSettings = innerStore
256
- device.MsgSecrets = innerStore
257
- device.PrivacyTokens = innerStore
258
- device.Initialized = true
261
+ c.initializeDevice(device)
259
262
  }
260
263
  return err
261
264
  }
262
265
 
266
+ func (c *Container) initializeDevice(device *store.Device) {
267
+ innerStore := NewSQLStore(c, *device.ID)
268
+ device.Identities = innerStore
269
+ device.Sessions = innerStore
270
+ device.PreKeys = innerStore
271
+ device.SenderKeys = innerStore
272
+ device.AppStateKeys = innerStore
273
+ device.AppState = innerStore
274
+ device.Contacts = innerStore
275
+ device.ChatSettings = innerStore
276
+ device.MsgSecrets = innerStore
277
+ device.PrivacyTokens = innerStore
278
+ device.EventBuffer = innerStore
279
+ device.LIDs = c.LIDMap
280
+ device.Container = c
281
+ device.Initialized = true
282
+ }
283
+
263
284
  // DeleteDevice deletes the given device from this database. This should be called through Device.Delete()
264
- func (c *Container) DeleteDevice(store *store.Device) error {
285
+ func (c *Container) DeleteDevice(ctx context.Context, store *store.Device) error {
265
286
  if store.ID == nil {
266
287
  return ErrDeviceIDMustBeSet
267
288
  }
268
- _, err := c.db.Exec(deleteDeviceQuery, store.ID.String())
289
+ _, err := c.db.Exec(ctx, deleteDeviceQuery, store.ID)
269
290
  return err
270
291
  }