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
@@ -0,0 +1,331 @@
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 dbutil
8
+
9
+ import (
10
+ "bytes"
11
+ "context"
12
+ "errors"
13
+ "fmt"
14
+ "io/fs"
15
+ "path/filepath"
16
+ "regexp"
17
+ "strconv"
18
+ "strings"
19
+ )
20
+
21
+ type TxnMode string
22
+
23
+ const (
24
+ TxnModeOn TxnMode = "on"
25
+ TxnModeOff TxnMode = "off"
26
+ TxnModeSQLiteForeignKeysOff TxnMode = "sqlite-fkey-off"
27
+ )
28
+
29
+ type UpgradeTable []upgrade
30
+
31
+ func (ut *UpgradeTable) extend(toSize int) {
32
+ if cap(*ut) >= toSize {
33
+ *ut = (*ut)[:toSize]
34
+ } else {
35
+ resized := make([]upgrade, toSize)
36
+ copy(resized, *ut)
37
+ *ut = resized
38
+ }
39
+ }
40
+
41
+ func (ut *UpgradeTable) Register(from, to, compat int, message string, txn TxnMode, fn upgradeFunc) {
42
+ if from < 0 {
43
+ from += to
44
+ }
45
+ if from < 0 {
46
+ panic("invalid from value in UpgradeTable.Register() call")
47
+ }
48
+ if compat <= 0 {
49
+ compat = to
50
+ }
51
+ upg := upgrade{message: message, fn: fn, upgradesTo: to, compatVersion: compat, transaction: txn}
52
+ if len(*ut) == from {
53
+ *ut = append(*ut, upg)
54
+ return
55
+ } else if len(*ut) < from {
56
+ ut.extend(from + 1)
57
+ } else if (*ut)[from].fn != nil {
58
+ panic(fmt.Errorf("tried to override upgrade at %d ('%s') with '%s'", from, (*ut)[from].message, upg.message))
59
+ }
60
+ (*ut)[from] = upg
61
+ }
62
+
63
+ // Syntax is either
64
+ //
65
+ // -- v0 -> v1: Message
66
+ //
67
+ // or
68
+ //
69
+ // -- v1: Message
70
+ //
71
+ // Both syntaxes may also have a compatibility notice before the colon:
72
+ //
73
+ // -- v5 (compatible with v3+): Upgrade with backwards compatibility
74
+ var upgradeHeaderRegex = regexp.MustCompile(`^-- (?:v(\d+) -> )?v(\d+)(?: \(compatible with v(\d+)\+\))?: (.+)$`)
75
+
76
+ // To disable wrapping the upgrade in a single transaction, put `--transaction: off` on the second line.
77
+ //
78
+ // -- v5: Upgrade without transaction
79
+ // -- transaction: off
80
+ // // do dangerous stuff
81
+ var transactionDisableRegex = regexp.MustCompile(`^-- transaction: ([a-z-]*)`)
82
+
83
+ func parseFileHeader(file []byte) (from, to, compat int, message string, txn TxnMode, lines [][]byte, err error) {
84
+ lines = bytes.Split(file, []byte("\n"))
85
+ if len(lines) < 2 {
86
+ err = errors.New("upgrade file too short")
87
+ return
88
+ }
89
+ var maybeFrom int
90
+ match := upgradeHeaderRegex.FindSubmatch(lines[0])
91
+ lines = lines[1:]
92
+ if match == nil {
93
+ err = errors.New("header not found")
94
+ } else if len(match) != 5 {
95
+ err = errors.New("unexpected number of items in regex match")
96
+ } else if maybeFrom, err = strconv.Atoi(string(match[1])); len(match[1]) > 0 && err != nil {
97
+ err = fmt.Errorf("invalid source version: %w", err)
98
+ } else if to, err = strconv.Atoi(string(match[2])); err != nil {
99
+ err = fmt.Errorf("invalid target version: %w", err)
100
+ } else if compat, err = strconv.Atoi(string(match[3])); len(match[3]) > 0 && err != nil {
101
+ err = fmt.Errorf("invalid compatible version: %w", err)
102
+ } else {
103
+ err = nil
104
+ if len(match[1]) > 0 {
105
+ from = maybeFrom
106
+ } else {
107
+ from = -1
108
+ }
109
+ message = string(match[4])
110
+ txn = "on"
111
+ match = transactionDisableRegex.FindSubmatch(lines[0])
112
+ if match != nil {
113
+ lines = lines[1:]
114
+ txn = TxnMode(match[1])
115
+ switch txn {
116
+ case TxnModeOff, TxnModeOn, TxnModeSQLiteForeignKeysOff:
117
+ // ok
118
+ default:
119
+ err = fmt.Errorf("invalid value %q for transaction flag", match[1])
120
+ }
121
+ }
122
+ }
123
+ return
124
+ }
125
+
126
+ // To limit the next line to one dialect:
127
+ //
128
+ // -- only: postgres
129
+ //
130
+ // To limit the next N lines:
131
+ //
132
+ // -- only: sqlite for next 123 lines
133
+ //
134
+ // To limit a block of code, fenced by another directive:
135
+ //
136
+ // -- only: sqlite until "end only"
137
+ // QUERY;
138
+ // ANOTHER QUERY;
139
+ // -- end only sqlite
140
+ //
141
+ // If the single-line limit is on the second line of the file, the whole file is limited to that dialect.
142
+ //
143
+ // If the filter ends with `(lines commented)`, then ALL lines chosen by the filter will be uncommented.
144
+ var dialectLineFilter = regexp.MustCompile(`^\s*-- only: (postgres|sqlite)(?: for next (\d+) lines| until "(end) only")?(?: \(lines? (commented)\))?`)
145
+
146
+ // Constants used to make parseDialectFilter clearer
147
+ const (
148
+ skipUntilEndTag = -1
149
+ skipNothing = 0
150
+ skipNextLine = 1
151
+ )
152
+
153
+ func (db *Database) parseDialectFilter(line []byte) (dialect Dialect, lineCount int, uncomment bool, err error) {
154
+ match := dialectLineFilter.FindSubmatch(line)
155
+ if match == nil {
156
+ return
157
+ }
158
+ dialect, err = ParseDialect(string(match[1]))
159
+ if err != nil {
160
+ return
161
+ }
162
+ uncomment = bytes.Equal(match[4], []byte("commented"))
163
+ if bytes.Equal(match[3], []byte("end")) {
164
+ lineCount = skipUntilEndTag
165
+ } else if len(match[2]) == 0 {
166
+ lineCount = skipNextLine
167
+ } else {
168
+ lineCount, err = strconv.Atoi(string(match[2]))
169
+ if err != nil {
170
+ err = fmt.Errorf("invalid line count %q: %w", match[2], err)
171
+ }
172
+ }
173
+ return
174
+ }
175
+
176
+ var endLineFilter = regexp.MustCompile(`^\s*-- end only (postgres|sqlite)$`)
177
+
178
+ func (db *Database) Internals() *publishDatabaseInternals {
179
+ return (*publishDatabaseInternals)(db)
180
+ }
181
+
182
+ type publishDatabaseInternals Database
183
+
184
+ func (di *publishDatabaseInternals) FilterSQLUpgrade(lines [][]byte) (string, error) {
185
+ return (*Database)(di).filterSQLUpgrade(lines)
186
+ }
187
+
188
+ func (db *Database) filterSQLUpgrade(lines [][]byte) (string, error) {
189
+ output := make([][]byte, 0, len(lines))
190
+ for i := 0; i < len(lines); i++ {
191
+ dialect, lineCount, uncomment, err := db.parseDialectFilter(lines[i])
192
+ if err != nil {
193
+ return "", err
194
+ } else if lineCount == skipNothing {
195
+ output = append(output, lines[i])
196
+ } else if lineCount == skipUntilEndTag {
197
+ startedAt := i
198
+ startedAtMatch := dialectLineFilter.FindSubmatch(lines[startedAt])
199
+ // Skip filter start line
200
+ i++
201
+ for ; i < len(lines); i++ {
202
+ if match := endLineFilter.FindSubmatch(lines[i]); match != nil {
203
+ if !bytes.Equal(match[1], startedAtMatch[1]) {
204
+ return "", fmt.Errorf(`unexpected end tag %q for %q start at line %d`, string(match[0]), string(startedAtMatch[1]), startedAt)
205
+ }
206
+ break
207
+ }
208
+ if dialect == db.Dialect {
209
+ if uncomment {
210
+ output = append(output, bytes.TrimPrefix(lines[i], []byte("--")))
211
+ } else {
212
+ output = append(output, lines[i])
213
+ }
214
+ }
215
+ }
216
+ if i == len(lines) {
217
+ return "", fmt.Errorf(`didn't get end tag matching start %q at line %d`, string(startedAtMatch[1]), startedAt)
218
+ }
219
+ } else if dialect != db.Dialect {
220
+ i += lineCount
221
+ } else {
222
+ // Skip current line, uncomment the specified number of lines
223
+ i++
224
+ targetI := i + lineCount
225
+ for ; i < targetI; i++ {
226
+ if uncomment {
227
+ output = append(output, bytes.TrimPrefix(lines[i], []byte("--")))
228
+ } else {
229
+ output = append(output, lines[i])
230
+ }
231
+ }
232
+ // Decrement counter to avoid skipping the next line
233
+ i--
234
+ }
235
+ }
236
+ return string(bytes.Join(output, []byte("\n"))), nil
237
+ }
238
+
239
+ func sqlUpgradeFunc(fileName string, lines [][]byte) upgradeFunc {
240
+ return func(ctx context.Context, db *Database) error {
241
+ if dialect, skip, _, err := db.parseDialectFilter(lines[0]); err == nil && skip == skipNextLine && dialect != db.Dialect {
242
+ return nil
243
+ } else if upgradeSQL, err := db.filterSQLUpgrade(lines); err != nil {
244
+ panic(fmt.Errorf("failed to parse upgrade %s: %w", fileName, err))
245
+ } else {
246
+ _, err = db.Exec(ctx, upgradeSQL)
247
+ return err
248
+ }
249
+ }
250
+ }
251
+
252
+ func splitSQLUpgradeFunc(sqliteData, postgresData string) upgradeFunc {
253
+ return func(ctx context.Context, db *Database) (err error) {
254
+ switch db.Dialect {
255
+ case SQLite:
256
+ _, err = db.Exec(ctx, sqliteData)
257
+ case Postgres:
258
+ _, err = db.Exec(ctx, postgresData)
259
+ default:
260
+ err = fmt.Errorf("unknown dialect %s", db.Dialect)
261
+ }
262
+ return
263
+ }
264
+ }
265
+
266
+ func parseSplitSQLUpgrade(name string, fs fullFS, skipNames map[string]struct{}) (from, to, compat int, message string, txn TxnMode, fn upgradeFunc) {
267
+ postgresName := fmt.Sprintf("%s.postgres.sql", name)
268
+ sqliteName := fmt.Sprintf("%s.sqlite.sql", name)
269
+ skipNames[postgresName] = struct{}{}
270
+ skipNames[sqliteName] = struct{}{}
271
+ postgresData, err := fs.ReadFile(postgresName)
272
+ if err != nil {
273
+ panic(err)
274
+ }
275
+ sqliteData, err := fs.ReadFile(sqliteName)
276
+ if err != nil {
277
+ panic(err)
278
+ }
279
+ from, to, compat, message, txn, _, err = parseFileHeader(postgresData)
280
+ if err != nil {
281
+ panic(fmt.Errorf("failed to parse header in %s: %w", postgresName, err))
282
+ }
283
+ sqliteFrom, sqliteTo, sqliteCompat, sqliteMessage, sqliteTxn, _, err := parseFileHeader(sqliteData)
284
+ if err != nil {
285
+ panic(fmt.Errorf("failed to parse header in %s: %w", sqliteName, err))
286
+ }
287
+ if from != sqliteFrom || to != sqliteTo || compat != sqliteCompat {
288
+ panic(fmt.Errorf("mismatching versions in postgres and sqlite versions of %s: %d/%d -> %d/%d", name, from, sqliteFrom, to, sqliteTo))
289
+ } else if message != sqliteMessage {
290
+ panic(fmt.Errorf("mismatching message in postgres and sqlite versions of %s: %q != %q", name, message, sqliteMessage))
291
+ } else if txn != sqliteTxn {
292
+ panic(fmt.Errorf("mismatching transaction flag in postgres and sqlite versions of %s: %s != %s", name, txn, sqliteTxn))
293
+ }
294
+ fn = splitSQLUpgradeFunc(string(sqliteData), string(postgresData))
295
+ return
296
+ }
297
+
298
+ type fullFS interface {
299
+ fs.ReadFileFS
300
+ fs.ReadDirFS
301
+ }
302
+
303
+ var splitFileNameRegex = regexp.MustCompile(`^(.+)\.(postgres|sqlite)\.sql$`)
304
+
305
+ func (ut *UpgradeTable) RegisterFS(fs fullFS) {
306
+ ut.RegisterFSPath(fs, ".")
307
+ }
308
+
309
+ func (ut *UpgradeTable) RegisterFSPath(fs fullFS, dir string) {
310
+ files, err := fs.ReadDir(dir)
311
+ if err != nil {
312
+ panic(err)
313
+ }
314
+ skipNames := map[string]struct{}{}
315
+ for _, file := range files {
316
+ if file.IsDir() || !strings.HasSuffix(file.Name(), ".sql") {
317
+ // do nothing
318
+ } else if _, skip := skipNames[file.Name()]; skip {
319
+ // also do nothing
320
+ } else if splitName := splitFileNameRegex.FindStringSubmatch(file.Name()); splitName != nil {
321
+ from, to, compat, message, txn, fn := parseSplitSQLUpgrade(splitName[1], fs, skipNames)
322
+ ut.Register(from, to, compat, message, txn, fn)
323
+ } else if data, err := fs.ReadFile(filepath.Join(dir, file.Name())); err != nil {
324
+ panic(err)
325
+ } else if from, to, compat, message, txn, lines, err := parseFileHeader(data); err != nil {
326
+ panic(fmt.Errorf("failed to parse header in %s: %w", file.Name(), err))
327
+ } else {
328
+ ut.Register(from, to, compat, message, txn, sqlUpgradeFunc(file.Name(), lines))
329
+ }
330
+ }
331
+ }
@@ -0,0 +1,33 @@
1
+ // Copyright (c) 2022 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 exerrors
8
+
9
+ import (
10
+ "errors"
11
+ "fmt"
12
+ )
13
+
14
+ type DualError struct {
15
+ High error
16
+ Low error
17
+ }
18
+
19
+ func NewDualError(high, low error) DualError {
20
+ return DualError{high, low}
21
+ }
22
+
23
+ func (err DualError) Is(other error) bool {
24
+ return errors.Is(other, err.High) || errors.Is(other, err.Low)
25
+ }
26
+
27
+ func (err DualError) Unwrap() error {
28
+ return err.Low
29
+ }
30
+
31
+ func (err DualError) Error() string {
32
+ return fmt.Sprintf("%v: %v", err.High, err.Low)
33
+ }
@@ -0,0 +1,23 @@
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 exerrors
8
+
9
+ func Must[T any](val T, err error) T {
10
+ PanicIfNotNil(err)
11
+ return val
12
+ }
13
+
14
+ func Must2[T any, T2 any](val T, val2 T2, err error) (T, T2) {
15
+ PanicIfNotNil(err)
16
+ return val, val2
17
+ }
18
+
19
+ func PanicIfNotNil(err error) {
20
+ if err != nil {
21
+ panic(err)
22
+ }
23
+ }
@@ -0,0 +1,32 @@
1
+ // Copyright (c) 2024 Sumner Evans
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 exhttp
8
+
9
+ import "net/http"
10
+
11
+ func AddCORSHeaders(w http.ResponseWriter) {
12
+ // Recommended CORS headers can be found in https://spec.matrix.org/v1.3/client-server-api/#web-browser-clients
13
+ w.Header().Set("Access-Control-Allow-Origin", "*")
14
+ w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
15
+ w.Header().Set("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Authorization")
16
+ w.Header().Set("Content-Security-Policy", "sandbox; default-src 'none'; script-src 'none'; plugin-types application/pdf; style-src 'unsafe-inline'; object-src 'self';")
17
+ // Allow browsers to cache above for 1 day
18
+ w.Header().Set("Access-Control-Max-Age", "86400")
19
+ }
20
+
21
+ // CORSMiddleware adds CORS headers to the response and handles OPTIONS
22
+ // requests by returning 200 OK immediately.
23
+ func CORSMiddleware(next http.Handler) http.Handler {
24
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
25
+ AddCORSHeaders(w)
26
+ if r.Method == http.MethodOptions {
27
+ w.WriteHeader(http.StatusOK)
28
+ return
29
+ }
30
+ next.ServeHTTP(w, r)
31
+ })
32
+ }
@@ -0,0 +1,64 @@
1
+ // Copyright (c) 2024 Sumner Evans
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 exhttp
8
+
9
+ import "net/http"
10
+
11
+ type ErrorBodyGenerators struct {
12
+ NotFound func() []byte
13
+ MethodNotAllowed func() []byte
14
+ }
15
+
16
+ func HandleErrors(next http.Handler, gen ErrorBodyGenerators) http.Handler {
17
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
18
+ next.ServeHTTP(&bodyOverrider{
19
+ ResponseWriter: w,
20
+ statusNotFoundBodyGenerator: gen.NotFound,
21
+ statusMethodNotAllowedBodyGenerator: gen.MethodNotAllowed,
22
+ }, r)
23
+ })
24
+ }
25
+
26
+ type bodyOverrider struct {
27
+ http.ResponseWriter
28
+
29
+ code int
30
+ override bool
31
+
32
+ statusNotFoundBodyGenerator func() []byte
33
+ statusMethodNotAllowedBodyGenerator func() []byte
34
+ }
35
+
36
+ var _ http.ResponseWriter = (*bodyOverrider)(nil)
37
+
38
+ func (b *bodyOverrider) WriteHeader(code int) {
39
+ if b.Header().Get("Content-Type") == "text/plain; charset=utf-8" {
40
+ b.Header().Set("Content-Type", "application/json")
41
+
42
+ b.override = true
43
+ }
44
+
45
+ b.code = code
46
+ b.ResponseWriter.WriteHeader(code)
47
+ }
48
+
49
+ func (b *bodyOverrider) Write(body []byte) (int, error) {
50
+ if b.override {
51
+ switch b.code {
52
+ case http.StatusNotFound:
53
+ if b.statusNotFoundBodyGenerator != nil {
54
+ body = b.statusNotFoundBodyGenerator()
55
+ }
56
+ case http.StatusMethodNotAllowed:
57
+ if b.statusMethodNotAllowedBodyGenerator != nil {
58
+ body = b.statusMethodNotAllowedBodyGenerator()
59
+ }
60
+ }
61
+ }
62
+
63
+ return b.ResponseWriter.Write(body)
64
+ }
@@ -0,0 +1,36 @@
1
+ // Copyright (c) 2024 Sumner Evans
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 exhttp
8
+
9
+ import (
10
+ "encoding/json"
11
+ "net/http"
12
+ )
13
+
14
+ var AutoAllowCORS = true
15
+
16
+ func WriteJSONResponse(w http.ResponseWriter, httpStatusCode int, jsonData any) {
17
+ if AutoAllowCORS {
18
+ AddCORSHeaders(w)
19
+ }
20
+ w.Header().Set("Content-Type", "application/json")
21
+ w.WriteHeader(httpStatusCode)
22
+ _ = json.NewEncoder(w).Encode(jsonData)
23
+ }
24
+
25
+ func WriteJSONData(w http.ResponseWriter, httpStatusCode int, data []byte) {
26
+ if AutoAllowCORS {
27
+ AddCORSHeaders(w)
28
+ }
29
+ w.Header().Set("Content-Type", "application/json")
30
+ w.WriteHeader(httpStatusCode)
31
+ _, _ = w.Write(data)
32
+ }
33
+
34
+ func WriteEmptyJSONResponse(w http.ResponseWriter, httpStatusCode int) {
35
+ WriteJSONData(w, httpStatusCode, []byte("{}"))
36
+ }
@@ -0,0 +1,30 @@
1
+ // Copyright (c) 2024 Sumner Evans
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 exhttp
8
+
9
+ import "net/http"
10
+
11
+ // Middleware represents a middleware that can be applied to an [http.Handler].
12
+ type Middleware func(http.Handler) http.Handler
13
+
14
+ // ApplyMiddleware applies the provided [Middleware] functions to the given
15
+ // router. The middlewares will be applied in the order they are provided.
16
+ func ApplyMiddleware(router http.Handler, middlewares ...Middleware) http.Handler {
17
+ // Apply middlewares in reverse order because the first middleware provided
18
+ // needs to be the outermost one.
19
+ for i := len(middlewares) - 1; i >= 0; i-- {
20
+ router = middlewares[i](router)
21
+ }
22
+ return router
23
+ }
24
+
25
+ // StripPrefix is a wrapper for [http.StripPrefix] is compatible with the middleware pattern.
26
+ func StripPrefix(prefix string) Middleware {
27
+ return func(next http.Handler) http.Handler {
28
+ return http.StripPrefix(prefix, next)
29
+ }
30
+ }
@@ -0,0 +1,37 @@
1
+ // Copyright (c) 2025 Toni Spets
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 exhttp
8
+
9
+ import (
10
+ "errors"
11
+ "net"
12
+ "syscall"
13
+
14
+ "golang.org/x/net/http2"
15
+ )
16
+
17
+ func IsNetworkError(err error) bool {
18
+ if errno := syscall.Errno(0); errors.As(err, &errno) {
19
+ // common errnos for network related operations
20
+ return errno == syscall.ENETDOWN ||
21
+ errno == syscall.ENETUNREACH ||
22
+ errno == syscall.ENETRESET ||
23
+ errno == syscall.ECONNABORTED ||
24
+ errno == syscall.ECONNRESET ||
25
+ errno == syscall.ENOBUFS ||
26
+ errno == syscall.ETIMEDOUT ||
27
+ errno == syscall.ECONNREFUSED ||
28
+ errno == syscall.EHOSTDOWN ||
29
+ errno == syscall.EHOSTUNREACH
30
+ } else if netError := net.Error(nil); errors.As(err, &netError) {
31
+ return true
32
+ } else if errors.As(err, &http2.StreamError{}) {
33
+ return true
34
+ }
35
+
36
+ return false
37
+ }
@@ -0,0 +1,76 @@
1
+ // Copyright (c) 2025 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 exstrings
8
+
9
+ import (
10
+ "crypto/sha256"
11
+ "crypto/subtle"
12
+ "strings"
13
+ "unsafe"
14
+ )
15
+
16
+ // UnsafeBytes returns a byte slice that points to the same memory as the input string.
17
+ //
18
+ // The returned byte slice must not be modified.
19
+ func UnsafeBytes(str string) []byte {
20
+ return unsafe.Slice(unsafe.StringData(str), len(str))
21
+ }
22
+
23
+ // SHA256 returns the SHA-256 hash of the input string without copying the string.
24
+ func SHA256(str string) [32]byte {
25
+ return sha256.Sum256(UnsafeBytes(str))
26
+ }
27
+
28
+ // ConstantTimeEqual compares two strings using [subtle.ConstantTimeCompare] without copying the strings.
29
+ //
30
+ // Note that ConstantTimeCompare is not constant time if the strings are of different length.
31
+ func ConstantTimeEqual(a, b string) bool {
32
+ return subtle.ConstantTimeCompare(UnsafeBytes(a), UnsafeBytes(b)) == 1
33
+ }
34
+
35
+ // LongestSequenceOf returns the length of the longest contiguous sequence of a single rune in a string.
36
+ func LongestSequenceOf(a string, b rune) int {
37
+ // IndexRune has some optimizations, so use it to find the starting point
38
+ firstIndex := strings.IndexRune(a, b)
39
+ if firstIndex == -1 {
40
+ return 0
41
+ }
42
+ count := 0
43
+ maxCount := 0
44
+ for _, r := range a[firstIndex:] {
45
+ if r == b {
46
+ count++
47
+ if count > maxCount {
48
+ maxCount = count
49
+ }
50
+ } else {
51
+ count = 0
52
+ }
53
+ }
54
+ return maxCount
55
+ }
56
+
57
+ // LongestSequenceOfFunc returns the length of the longest contiguous sequence of runes in a string.
58
+ //
59
+ // If the provided function returns zero or higher, the return value is added to the current count.
60
+ // If the return value is negative, the count is reset to zero.
61
+ func LongestSequenceOfFunc(a string, fn func(b rune) int) int {
62
+ count := 0
63
+ maxCount := 0
64
+ for _, r := range a {
65
+ val := fn(r)
66
+ if val < 0 {
67
+ count = 0
68
+ } else {
69
+ count += val
70
+ if count > maxCount {
71
+ maxCount = count
72
+ }
73
+ }
74
+ }
75
+ return maxCount
76
+ }