slidge-whatsapp 0.2.5__cp311-cp311-manylinux_2_36_aarch64.whl → 0.2.7__cp311-cp311-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-311-aarch64-linux-gnu.h +170 -170
  6. slidge_whatsapp/generated/_whatsapp.cpython-311-aarch64-linux-gnu.so +0 -0
  7. slidge_whatsapp/generated/build.py +135 -135
  8. slidge_whatsapp/generated/whatsapp.c +1496 -1496
  9. slidge_whatsapp/generated/whatsapp.go +1137 -1137
  10. slidge_whatsapp/generated/whatsapp.py +1216 -1216
  11. slidge_whatsapp/generated/whatsapp_go.h +170 -170
  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
@@ -0,0 +1,88 @@
1
+ // Copyright (c) 2024 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exsync
8
+
9
+ import (
10
+ "context"
11
+ "sync"
12
+ "time"
13
+ )
14
+
15
+ // Event is a wrapper around a channel that can be used to notify multiple waiters that some event has happened.
16
+ //
17
+ // It's modelled after Python's asyncio.Event: https://docs.python.org/3/library/asyncio-sync.html#asyncio.Event
18
+ type Event struct {
19
+ ch chan empty
20
+ set bool
21
+ l sync.RWMutex
22
+ }
23
+
24
+ // NewEvent creates a new event. It will initially be unset.
25
+ func NewEvent() *Event {
26
+ return &Event{
27
+ ch: make(chan empty),
28
+ }
29
+ }
30
+
31
+ type EventChan = <-chan empty
32
+
33
+ // GetChan returns the channel that will be closed when the event is set.
34
+ func (e *Event) GetChan() EventChan {
35
+ e.l.RLock()
36
+ defer e.l.RUnlock()
37
+ return e.ch
38
+ }
39
+
40
+ // Wait waits for either the event to happen or the given context to be done.
41
+ // If the context is done first, the error is returned, otherwise the return value is nil.
42
+ func (e *Event) Wait(ctx context.Context) error {
43
+ select {
44
+ case <-e.GetChan():
45
+ return nil
46
+ case <-ctx.Done():
47
+ return ctx.Err()
48
+ }
49
+ }
50
+
51
+ // WaitTimeout waits for either the event to happen within the given timeout.
52
+ // If the timeout expires first, the return value is false, otherwise it's true.
53
+ func (e *Event) WaitTimeout(timeout time.Duration) bool {
54
+ select {
55
+ case <-e.GetChan():
56
+ return true
57
+ case <-time.After(timeout):
58
+ return false
59
+ }
60
+ }
61
+
62
+ // IsSet returns true if the event has been set.
63
+ func (e *Event) IsSet() bool {
64
+ e.l.RLock()
65
+ defer e.l.RUnlock()
66
+ return e.set
67
+ }
68
+
69
+ // Set sets the event, notifying all waiters.
70
+ func (e *Event) Set() {
71
+ e.l.Lock()
72
+ defer e.l.Unlock()
73
+ if !e.set {
74
+ close(e.ch)
75
+ e.set = true
76
+ }
77
+ }
78
+
79
+ // Clear clears the event, making it unset. Future calls to Wait will now block until Set is called again.
80
+ // If the event is not already set, this is a no-op and existing calls to Wait will keep working.
81
+ func (e *Event) Clear() {
82
+ e.l.Lock()
83
+ defer e.l.Unlock()
84
+ if e.set {
85
+ e.ch = make(chan empty)
86
+ e.set = false
87
+ }
88
+ }
@@ -0,0 +1,25 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exsync
8
+
9
+ import "sync"
10
+
11
+ // ReturnableOnce is a wrapper for sync.Once that can return a value
12
+ //
13
+ // Deprecated: Use [sync.OnceValues] instead.
14
+ type ReturnableOnce[Value any] struct {
15
+ once sync.Once
16
+ output Value
17
+ err error
18
+ }
19
+
20
+ func (ronce *ReturnableOnce[Value]) Do(fn func() (Value, error)) (Value, error) {
21
+ ronce.once.Do(func() {
22
+ ronce.output, ronce.err = fn()
23
+ })
24
+ return ronce.output, ronce.err
25
+ }
@@ -0,0 +1,139 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exsync
8
+
9
+ import (
10
+ "errors"
11
+ "sync"
12
+ )
13
+
14
+ type pair[Key comparable, Value any] struct {
15
+ Set bool
16
+ Key Key
17
+ Value Value
18
+ }
19
+
20
+ type RingBuffer[Key comparable, Value any] struct {
21
+ ptr int
22
+ data []pair[Key, Value]
23
+ lock sync.RWMutex
24
+ size int
25
+ }
26
+
27
+ func NewRingBuffer[Key comparable, Value any](size int) *RingBuffer[Key, Value] {
28
+ return &RingBuffer[Key, Value]{
29
+ data: make([]pair[Key, Value], size),
30
+ }
31
+ }
32
+
33
+ var (
34
+ // StopIteration can be returned by the RingBuffer.Iter or MapRingBuffer callbacks to stop iteration immediately.
35
+ StopIteration = errors.New("stop iteration") //lint:ignore ST1012 not an error
36
+
37
+ // SkipItem can be returned by the MapRingBuffer callback to skip adding a specific item.
38
+ SkipItem = errors.New("skip item") //lint:ignore ST1012 not an error
39
+ )
40
+
41
+ func (rb *RingBuffer[Key, Value]) unlockedIter(callback func(key Key, val Value) error) error {
42
+ end := rb.ptr
43
+ for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) {
44
+ entry := rb.data[i]
45
+ if !entry.Set {
46
+ break
47
+ }
48
+ err := callback(entry.Key, entry.Value)
49
+ if err != nil {
50
+ if errors.Is(err, StopIteration) {
51
+ return nil
52
+ }
53
+ return err
54
+ }
55
+ }
56
+ return nil
57
+ }
58
+
59
+ func (rb *RingBuffer[Key, Value]) Iter(callback func(key Key, val Value) error) error {
60
+ rb.lock.RLock()
61
+ defer rb.lock.RUnlock()
62
+ return rb.unlockedIter(callback)
63
+ }
64
+
65
+ func MapRingBuffer[Key comparable, Value, Output any](rb *RingBuffer[Key, Value], callback func(key Key, val Value) (Output, error)) ([]Output, error) {
66
+ rb.lock.RLock()
67
+ defer rb.lock.RUnlock()
68
+ output := make([]Output, 0, rb.size)
69
+ err := rb.unlockedIter(func(key Key, val Value) error {
70
+ item, err := callback(key, val)
71
+ if err != nil {
72
+ if errors.Is(err, SkipItem) {
73
+ return nil
74
+ }
75
+ return err
76
+ }
77
+ output = append(output, item)
78
+ return nil
79
+ })
80
+ return output, err
81
+ }
82
+
83
+ func (rb *RingBuffer[Key, Value]) Size() int {
84
+ rb.lock.RLock()
85
+ defer rb.lock.RUnlock()
86
+ return rb.size
87
+ }
88
+
89
+ func (rb *RingBuffer[Key, Value]) Contains(val Key) bool {
90
+ _, ok := rb.Get(val)
91
+ return ok
92
+ }
93
+
94
+ func (rb *RingBuffer[Key, Value]) Get(key Key) (val Value, found bool) {
95
+ rb.lock.RLock()
96
+ end := rb.ptr
97
+ for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) {
98
+ if rb.data[i].Key == key {
99
+ val = rb.data[i].Value
100
+ found = true
101
+ break
102
+ }
103
+ }
104
+ rb.lock.RUnlock()
105
+ return
106
+ }
107
+
108
+ func (rb *RingBuffer[Key, Value]) Replace(key Key, val Value) bool {
109
+ rb.lock.Lock()
110
+ defer rb.lock.Unlock()
111
+ end := rb.ptr
112
+ for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) {
113
+ if rb.data[i].Key == key {
114
+ rb.data[i].Value = val
115
+ return true
116
+ }
117
+ }
118
+ return false
119
+ }
120
+
121
+ func (rb *RingBuffer[Key, Value]) Push(key Key, val Value) {
122
+ rb.lock.Lock()
123
+ rb.data[rb.ptr] = pair[Key, Value]{Key: key, Value: val, Set: true}
124
+ rb.ptr = (rb.ptr + 1) % len(rb.data)
125
+ if rb.size < len(rb.data) {
126
+ rb.size++
127
+ }
128
+ rb.lock.Unlock()
129
+ }
130
+
131
+ func clamp(index, len int) int {
132
+ if index < 0 {
133
+ return len + index
134
+ } else if index >= len {
135
+ return len - index
136
+ } else {
137
+ return index
138
+ }
139
+ }
@@ -0,0 +1,94 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exsync
8
+
9
+ import "sync"
10
+
11
+ // Map is a simple map with a built-in mutex.
12
+ type Map[Key comparable, Value any] struct {
13
+ data map[Key]Value
14
+ lock sync.RWMutex
15
+ }
16
+
17
+ func NewMap[Key comparable, Value any]() *Map[Key, Value] {
18
+ return &Map[Key, Value]{
19
+ data: make(map[Key]Value),
20
+ }
21
+ }
22
+
23
+ // Set stores a value in the map.
24
+ func (sm *Map[Key, Value]) Set(key Key, value Value) {
25
+ sm.Swap(key, value)
26
+ }
27
+
28
+ // Swap sets a value in the map and returns the old value.
29
+ //
30
+ // The boolean return parameter is true if the value already existed, false if not.
31
+ func (sm *Map[Key, Value]) Swap(key Key, value Value) (oldValue Value, wasReplaced bool) {
32
+ sm.lock.Lock()
33
+ oldValue, wasReplaced = sm.data[key]
34
+ sm.data[key] = value
35
+ sm.lock.Unlock()
36
+ return
37
+ }
38
+
39
+ // Delete removes a key from the map.
40
+ func (sm *Map[Key, Value]) Delete(key Key) {
41
+ sm.Pop(key)
42
+ }
43
+
44
+ // Pop removes a key from the map and returns the old value.
45
+ //
46
+ // The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not).
47
+ func (sm *Map[Key, Value]) Pop(key Key) (value Value, ok bool) {
48
+ sm.lock.Lock()
49
+ value, ok = sm.data[key]
50
+ delete(sm.data, key)
51
+ sm.lock.Unlock()
52
+ return
53
+ }
54
+
55
+ // Get gets a value in the map.
56
+ //
57
+ // The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not).
58
+ func (sm *Map[Key, Value]) Get(key Key) (value Value, ok bool) {
59
+ sm.lock.RLock()
60
+ value, ok = sm.data[key]
61
+ sm.lock.RUnlock()
62
+ return
63
+ }
64
+
65
+ // GetOrSet gets a value in the map if the key already exists, otherwise inserts the given value and returns it.
66
+ //
67
+ // The boolean return parameter is true if the key already exists, and false if the given value was inserted.
68
+ func (sm *Map[Key, Value]) GetOrSet(key Key, value Value) (actual Value, wasGet bool) {
69
+ sm.lock.Lock()
70
+ defer sm.lock.Unlock()
71
+ actual, wasGet = sm.data[key]
72
+ if wasGet {
73
+ return
74
+ }
75
+ sm.data[key] = value
76
+ actual = value
77
+ return
78
+ }
79
+
80
+ // Clone returns a copy of the map.
81
+ func (sm *Map[Key, Value]) Clone() *Map[Key, Value] {
82
+ return &Map[Key, Value]{data: sm.CopyData()}
83
+ }
84
+
85
+ // CopyData returns a copy of the data in the map as a normal (non-atomic) map.
86
+ func (sm *Map[Key, Value]) CopyData() map[Key]Value {
87
+ sm.lock.RLock()
88
+ copied := make(map[Key]Value, len(sm.data))
89
+ for key, value := range sm.data {
90
+ copied[key] = value
91
+ }
92
+ sm.lock.RUnlock()
93
+ return copied
94
+ }
@@ -0,0 +1,136 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exsync
8
+
9
+ import (
10
+ "sync"
11
+ )
12
+
13
+ type empty struct{}
14
+
15
+ var emptyVal = empty{}
16
+
17
+ // Set is a wrapper around a map[T]struct{} with a built-in mutex.
18
+ type Set[T comparable] struct {
19
+ m map[T]empty
20
+ l sync.RWMutex
21
+ }
22
+
23
+ // NewSet constructs a Set with an empty map.
24
+ func NewSet[T comparable]() *Set[T] {
25
+ return NewSetWithMap[T](make(map[T]empty))
26
+ }
27
+
28
+ // NewSetWithSize constructs a Set with a map that has been allocated the given amount of space.
29
+ func NewSetWithSize[T comparable](size int) *Set[T] {
30
+ return NewSetWithMap[T](make(map[T]empty, size))
31
+ }
32
+
33
+ // NewSetWithMap constructs a Set with the given map. Accessing the map directly after passing it here is not safe.
34
+ func NewSetWithMap[T comparable](m map[T]empty) *Set[T] {
35
+ return &Set[T]{m: m}
36
+ }
37
+
38
+ // NewSetWithItems constructs a Set with items from the given slice pre-filled.
39
+ // The slice is not modified or used after the function returns, so using it after this is safe.
40
+ func NewSetWithItems[T comparable](items []T) *Set[T] {
41
+ s := NewSetWithSize[T](len(items))
42
+ for _, item := range items {
43
+ s.m[item] = emptyVal
44
+ }
45
+ return s
46
+ }
47
+
48
+ // Add adds an item to the set. The return value is true if the item was added to the set, or false otherwise.
49
+ func (s *Set[T]) Add(item T) bool {
50
+ if s == nil {
51
+ return false
52
+ }
53
+ s.l.Lock()
54
+ _, exists := s.m[item]
55
+ if exists {
56
+ s.l.Unlock()
57
+ return false
58
+ }
59
+ s.m[item] = emptyVal
60
+ s.l.Unlock()
61
+ return true
62
+ }
63
+
64
+ // Has checks if the given item is in the set.
65
+ func (s *Set[T]) Has(item T) bool {
66
+ if s == nil {
67
+ return false
68
+ }
69
+ s.l.RLock()
70
+ _, exists := s.m[item]
71
+ s.l.RUnlock()
72
+ return exists
73
+ }
74
+
75
+ // Pop removes the given item from the set. The return value is true if the item was in the set, or false otherwise.
76
+ func (s *Set[T]) Pop(item T) bool {
77
+ if s == nil {
78
+ return false
79
+ }
80
+ s.l.Lock()
81
+ _, exists := s.m[item]
82
+ if exists {
83
+ delete(s.m, item)
84
+ }
85
+ s.l.Unlock()
86
+ return exists
87
+ }
88
+
89
+ // Remove removes the given item from the set.
90
+ func (s *Set[T]) Remove(item T) {
91
+ if s == nil {
92
+ return
93
+ }
94
+ s.l.Lock()
95
+ delete(s.m, item)
96
+ s.l.Unlock()
97
+ }
98
+
99
+ // ReplaceAll replaces this set with the given set. If the given set is nil, the set is cleared.
100
+ func (s *Set[T]) ReplaceAll(newSet *Set[T]) {
101
+ if s == nil {
102
+ return
103
+ }
104
+ s.l.Lock()
105
+ if newSet == nil {
106
+ s.m = make(map[T]empty)
107
+ } else {
108
+ s.m = newSet.m
109
+ }
110
+ s.l.Unlock()
111
+ }
112
+
113
+ func (s *Set[T]) Size() int {
114
+ if s == nil {
115
+ return 0
116
+ }
117
+ s.l.RLock()
118
+ size := len(s.m)
119
+ s.l.RUnlock()
120
+ return size
121
+ }
122
+
123
+ func (s *Set[T]) AsList() []T {
124
+ if s == nil {
125
+ return nil
126
+ }
127
+ s.l.RLock()
128
+ list := make([]T, len(s.m))
129
+ i := 0
130
+ for item := range s.m {
131
+ list[i] = item
132
+ i++
133
+ }
134
+ s.l.RUnlock()
135
+ return list
136
+ }
@@ -0,0 +1,28 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exzerolog
8
+
9
+ import (
10
+ "fmt"
11
+ "runtime"
12
+ "strings"
13
+ )
14
+
15
+ // CallerWithFunctionName is an implementation for zerolog.CallerMarshalFunc that includes the caller function name
16
+ // in addition to the file and line number.
17
+ //
18
+ // Use as
19
+ //
20
+ // zerolog.CallerMarshalFunc = exzerolog.CallerWithFunctionName
21
+ func CallerWithFunctionName(pc uintptr, file string, line int) string {
22
+ files := strings.Split(file, "/")
23
+ file = files[len(files)-1]
24
+ name := runtime.FuncForPC(pc).Name()
25
+ fns := strings.Split(name, ".")
26
+ name = fns[len(fns)-1]
27
+ return fmt.Sprintf("%s:%d:%s()", file, line, name)
28
+ }
@@ -0,0 +1,32 @@
1
+ // Copyright (c) 2024 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exzerolog
8
+
9
+ import (
10
+ "time"
11
+
12
+ "github.com/rs/zerolog"
13
+ deflog "github.com/rs/zerolog/log"
14
+ )
15
+
16
+ // SetupDefaults updates zerolog globals with sensible defaults.
17
+ //
18
+ // * [zerolog.TimeFieldFormat] is set to time.RFC3339Nano instead of time.RFC3339
19
+ // * [zerolog.CallerMarshalFunc] is set to [CallerWithFunctionName]
20
+ // * [zerolog.DefaultContextLogger] is set to the given logger with default_context_log=true and caller info enabled
21
+ // * The global default [log.Logger] is set to the given logger with global_log=true and caller info enabled
22
+ // * [zerolog.LevelColors] are updated to swap trace and debug level colors
23
+ func SetupDefaults(log *zerolog.Logger) {
24
+ zerolog.TimeFieldFormat = time.RFC3339Nano
25
+ zerolog.CallerMarshalFunc = CallerWithFunctionName
26
+ defaultCtxLog := log.With().Bool("default_context_log", true).Caller().Logger()
27
+ zerolog.DefaultContextLogger = &defaultCtxLog
28
+ deflog.Logger = log.With().Bool("global_log", true).Caller().Logger()
29
+ // Swap trace and debug level colors so trace pops out the least
30
+ zerolog.LevelColors[zerolog.TraceLevel] = 0
31
+ zerolog.LevelColors[zerolog.DebugLevel] = 34 // blue
32
+ }
@@ -0,0 +1,45 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exzerolog
8
+
9
+ import (
10
+ "fmt"
11
+
12
+ "github.com/rs/zerolog"
13
+ )
14
+
15
+ func ArrayOf[T any](slice []T, fn func(arr *zerolog.Array, item T)) *zerolog.Array {
16
+ arr := zerolog.Arr()
17
+ for _, item := range slice {
18
+ fn(arr, item)
19
+ }
20
+ return arr
21
+ }
22
+
23
+ func AddObject[T zerolog.LogObjectMarshaler](arr *zerolog.Array, obj T) {
24
+ arr.Object(obj)
25
+ }
26
+
27
+ func AddStringer[T fmt.Stringer](arr *zerolog.Array, str T) {
28
+ arr.Str(str.String())
29
+ }
30
+
31
+ func AddStr[T ~string](arr *zerolog.Array, str T) {
32
+ arr.Str(string(str))
33
+ }
34
+
35
+ func ArrayOfObjs[T zerolog.LogObjectMarshaler](slice []T) *zerolog.Array {
36
+ return ArrayOf(slice, AddObject[T])
37
+ }
38
+
39
+ func ArrayOfStringers[T fmt.Stringer](slice []T) *zerolog.Array {
40
+ return ArrayOf(slice, AddStringer[T])
41
+ }
42
+
43
+ func ArrayOfStrs[T ~string](slice []T) *zerolog.Array {
44
+ return ArrayOf(slice, AddStr[T])
45
+ }
@@ -0,0 +1,81 @@
1
+ // Copyright (c) 2023 Tulir Asokan
2
+ //
3
+ // This Source Code Form is subject to the terms of the Mozilla Public
4
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
5
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
+
7
+ package exzerolog
8
+
9
+ import (
10
+ "bytes"
11
+ "sync"
12
+
13
+ "github.com/rs/zerolog"
14
+ )
15
+
16
+ // LogWriter wraps a zerolog.Logger and provides an io.Writer with buffering so each written line is logged separately.
17
+ type LogWriter struct {
18
+ log zerolog.Logger
19
+ level zerolog.Level
20
+ field string
21
+ mu sync.Mutex
22
+ buf bytes.Buffer
23
+ }
24
+
25
+ func NewLogWriter(log zerolog.Logger) *LogWriter {
26
+ zerolog.Nop()
27
+ return &LogWriter{
28
+ log: log,
29
+ level: zerolog.DebugLevel,
30
+ field: zerolog.MessageFieldName,
31
+ }
32
+ }
33
+
34
+ func (lw *LogWriter) WithLevel(level zerolog.Level) *LogWriter {
35
+ return &LogWriter{
36
+ log: lw.log,
37
+ level: level,
38
+ field: lw.field,
39
+ }
40
+ }
41
+
42
+ func (lw *LogWriter) WithField(field string) *LogWriter {
43
+ return &LogWriter{
44
+ log: lw.log,
45
+ level: lw.level,
46
+ field: field,
47
+ }
48
+ }
49
+
50
+ func (lw *LogWriter) writeLine(data []byte) {
51
+ if len(data) == 0 {
52
+ return
53
+ }
54
+ if data[len(data)-1] == '\n' {
55
+ data = data[:len(data)-1]
56
+ }
57
+ if lw.buf.Len() > 0 {
58
+ lw.buf.Write(data)
59
+ data = lw.buf.Bytes()
60
+ lw.buf.Reset()
61
+ }
62
+ lw.log.WithLevel(lw.level).Bytes(lw.field, data).Send()
63
+ }
64
+
65
+ func (lw *LogWriter) Write(data []byte) (n int, err error) {
66
+ lw.mu.Lock()
67
+ defer lw.mu.Unlock()
68
+ newline := bytes.IndexByte(data, '\n')
69
+ if newline == len(data)-1 {
70
+ lw.writeLine(data)
71
+ } else if newline < 0 {
72
+ lw.buf.Write(data)
73
+ } else {
74
+ lines := bytes.Split(data, []byte{'\n'})
75
+ for _, line := range lines[:len(lines)-1] {
76
+ lw.writeLine(line)
77
+ }
78
+ lw.buf.Write(lines[len(lines)-1])
79
+ }
80
+ return len(data), nil
81
+ }