slidge-whatsapp 0.2.5__cp312-cp312-manylinux_2_36_aarch64.whl → 0.2.6__cp312-cp312-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 (320) hide show
  1. slidge_whatsapp/config.py +3 -0
  2. slidge_whatsapp/event.go +23 -24
  3. slidge_whatsapp/gateway.go +13 -9
  4. slidge_whatsapp/gateway.py +2 -2
  5. slidge_whatsapp/generated/_whatsapp.cpython-312-aarch64-linux-gnu.h +169 -169
  6. slidge_whatsapp/generated/_whatsapp.cpython-312-aarch64-linux-gnu.so +0 -0
  7. slidge_whatsapp/generated/build.py +135 -135
  8. slidge_whatsapp/generated/whatsapp.c +1455 -1455
  9. slidge_whatsapp/generated/whatsapp.go +737 -737
  10. slidge_whatsapp/generated/whatsapp.py +1038 -1038
  11. slidge_whatsapp/generated/whatsapp_go.h +169 -169
  12. slidge_whatsapp/go.mod +15 -12
  13. slidge_whatsapp/go.sum +41 -29
  14. slidge_whatsapp/media/media.go +16 -10
  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 +41 -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/exsync/event.go +88 -0
  92. slidge_whatsapp/vendor/go.mau.fi/util/exsync/returnonce.go +25 -0
  93. slidge_whatsapp/vendor/go.mau.fi/util/exsync/ringbuffer.go +139 -0
  94. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncmap.go +94 -0
  95. slidge_whatsapp/vendor/go.mau.fi/util/exsync/syncset.go +136 -0
  96. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/callermarshal.go +28 -0
  97. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/defaults.go +32 -0
  98. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/generics.go +45 -0
  99. slidge_whatsapp/vendor/go.mau.fi/util/exzerolog/writer.go +81 -0
  100. slidge_whatsapp/vendor/go.mau.fi/util/ptr/ptr.go +43 -0
  101. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/decode.go +27 -26
  102. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/encode.go +4 -3
  103. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate/keys.go +5 -4
  104. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/appstate.go +27 -25
  105. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/armadillomessage.go +3 -2
  106. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/broadcast.go +5 -4
  107. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/client.go +60 -15
  108. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/connectionevents.go +25 -9
  109. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download-to-file.go +45 -19
  110. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/download.go +52 -28
  111. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/errors.go +1 -0
  112. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/group.go +59 -29
  113. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/internals.go +166 -146
  114. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/keepalive.go +2 -2
  115. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaconn.go +5 -3
  116. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/mediaretry.go +2 -1
  117. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/message.go +270 -111
  118. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/msgsecret.go +118 -31
  119. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/notification.go +67 -36
  120. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair-code.go +7 -4
  121. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/pair.go +42 -18
  122. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/prekeys.go +9 -5
  123. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/presence.go +2 -1
  124. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/privacysettings.go +10 -11
  125. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +39 -9
  126. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +354 -175
  127. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +5 -5
  128. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +158 -15
  129. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +1 -0
  130. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +29 -9
  131. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +13 -9
  132. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +344 -31
  133. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +26 -0
  134. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.pb.go → WACompanionReg.pb.go} +170 -84
  135. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/{WAWebProtobufsCompanionReg.proto → WACompanionReg.proto} +1 -1
  136. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +173 -9
  137. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +78 -16
  138. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +5 -0
  139. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +6747 -2230
  140. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +294 -43
  141. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +456 -135
  142. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +14 -0
  143. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +162 -9
  144. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +1 -0
  145. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +32 -9
  146. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +1 -0
  147. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +192 -52
  148. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +8 -0
  149. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +60 -9
  150. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +39 -9
  151. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +61 -9
  152. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +1051 -382
  153. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +32 -0
  154. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +27 -9
  155. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +59 -9
  156. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +382 -78
  157. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +8 -0
  158. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +555 -9
  159. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +2 -0
  160. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/receipt.go +13 -3
  161. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/retry.go +29 -19
  162. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/send.go +244 -73
  163. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/sendfb.go +27 -16
  164. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +3 -1
  165. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/noop.go +85 -43
  166. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/signal.go +75 -88
  167. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +79 -61
  168. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go +186 -0
  169. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +291 -167
  170. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql +153 -0
  171. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql +11 -0
  172. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql +8 -0
  173. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql +2 -0
  174. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql +2 -0
  175. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql +2 -0
  176. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql +5 -0
  177. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql +10 -0
  178. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go +22 -0
  179. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/store.go +105 -56
  180. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/botmap.go +210 -0
  181. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/events/events.go +8 -0
  182. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/group.go +15 -6
  183. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/jid.go +7 -8
  184. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/types/message.go +17 -0
  185. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/update.go +3 -2
  186. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/upload.go +1 -1
  187. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/user.go +45 -29
  188. slidge_whatsapp/vendor/golang.org/x/exp/LICENSE +27 -0
  189. slidge_whatsapp/vendor/golang.org/x/exp/PATENTS +22 -0
  190. slidge_whatsapp/vendor/golang.org/x/exp/constraints/constraints.go +54 -0
  191. slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/guts.go +50 -0
  192. slidge_whatsapp/vendor/golang.org/x/net/http/httpguts/httplex.go +347 -0
  193. slidge_whatsapp/vendor/golang.org/x/net/http2/.gitignore +2 -0
  194. slidge_whatsapp/vendor/golang.org/x/net/http2/ascii.go +53 -0
  195. slidge_whatsapp/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  196. slidge_whatsapp/vendor/golang.org/x/net/http2/client_conn_pool.go +311 -0
  197. slidge_whatsapp/vendor/golang.org/x/net/http2/config.go +122 -0
  198. slidge_whatsapp/vendor/golang.org/x/net/http2/config_go124.go +61 -0
  199. slidge_whatsapp/vendor/golang.org/x/net/http2/config_pre_go124.go +16 -0
  200. slidge_whatsapp/vendor/golang.org/x/net/http2/databuffer.go +149 -0
  201. slidge_whatsapp/vendor/golang.org/x/net/http2/errors.go +145 -0
  202. slidge_whatsapp/vendor/golang.org/x/net/http2/flow.go +120 -0
  203. slidge_whatsapp/vendor/golang.org/x/net/http2/frame.go +1702 -0
  204. slidge_whatsapp/vendor/golang.org/x/net/http2/gotrack.go +170 -0
  205. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/encode.go +245 -0
  206. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/hpack.go +523 -0
  207. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/huffman.go +226 -0
  208. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/static_table.go +188 -0
  209. slidge_whatsapp/vendor/golang.org/x/net/http2/hpack/tables.go +403 -0
  210. slidge_whatsapp/vendor/golang.org/x/net/http2/http2.go +432 -0
  211. slidge_whatsapp/vendor/golang.org/x/net/http2/pipe.go +184 -0
  212. slidge_whatsapp/vendor/golang.org/x/net/http2/server.go +3350 -0
  213. slidge_whatsapp/vendor/golang.org/x/net/http2/timer.go +20 -0
  214. slidge_whatsapp/vendor/golang.org/x/net/http2/transport.go +3287 -0
  215. slidge_whatsapp/vendor/golang.org/x/net/http2/unencrypted.go +32 -0
  216. slidge_whatsapp/vendor/golang.org/x/net/http2/write.go +381 -0
  217. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched.go +251 -0
  218. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_priority.go +451 -0
  219. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_random.go +77 -0
  220. slidge_whatsapp/vendor/golang.org/x/net/http2/writesched_roundrobin.go +119 -0
  221. slidge_whatsapp/vendor/golang.org/x/net/idna/go118.go +13 -0
  222. slidge_whatsapp/vendor/golang.org/x/net/idna/idna10.0.0.go +769 -0
  223. slidge_whatsapp/vendor/golang.org/x/net/idna/idna9.0.0.go +717 -0
  224. slidge_whatsapp/vendor/golang.org/x/net/idna/pre_go118.go +11 -0
  225. slidge_whatsapp/vendor/golang.org/x/net/idna/punycode.go +217 -0
  226. slidge_whatsapp/vendor/golang.org/x/net/idna/tables10.0.0.go +4559 -0
  227. slidge_whatsapp/vendor/golang.org/x/net/idna/tables11.0.0.go +4653 -0
  228. slidge_whatsapp/vendor/golang.org/x/net/idna/tables12.0.0.go +4733 -0
  229. slidge_whatsapp/vendor/golang.org/x/net/idna/tables13.0.0.go +4959 -0
  230. slidge_whatsapp/vendor/golang.org/x/net/idna/tables15.0.0.go +5144 -0
  231. slidge_whatsapp/vendor/golang.org/x/net/idna/tables9.0.0.go +4486 -0
  232. slidge_whatsapp/vendor/golang.org/x/net/idna/trie.go +51 -0
  233. slidge_whatsapp/vendor/golang.org/x/net/idna/trie12.0.0.go +30 -0
  234. slidge_whatsapp/vendor/golang.org/x/net/idna/trie13.0.0.go +30 -0
  235. slidge_whatsapp/vendor/golang.org/x/net/idna/trieval.go +119 -0
  236. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/ascii.go +53 -0
  237. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/headermap.go +115 -0
  238. slidge_whatsapp/vendor/golang.org/x/net/internal/httpcommon/request.go +467 -0
  239. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_darwin.go +148 -1
  240. slidge_whatsapp/vendor/golang.org/x/sys/unix/syscall_linux.go +16 -26
  241. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +84 -0
  242. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +20 -0
  243. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +84 -0
  244. slidge_whatsapp/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +20 -0
  245. slidge_whatsapp/vendor/golang.org/x/sys/windows/security_windows.go +44 -5
  246. slidge_whatsapp/vendor/golang.org/x/sys/windows/syscall_windows.go +4 -2
  247. slidge_whatsapp/vendor/golang.org/x/sys/windows/types_windows.go +239 -0
  248. slidge_whatsapp/vendor/golang.org/x/sys/windows/zsyscall_windows.go +9 -0
  249. slidge_whatsapp/vendor/golang.org/x/text/LICENSE +27 -0
  250. slidge_whatsapp/vendor/golang.org/x/text/PATENTS +22 -0
  251. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule.go +336 -0
  252. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +11 -0
  253. slidge_whatsapp/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +14 -0
  254. slidge_whatsapp/vendor/golang.org/x/text/transform/transform.go +709 -0
  255. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bidi.go +359 -0
  256. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  257. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/core.go +1071 -0
  258. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  259. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +1815 -0
  260. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +1887 -0
  261. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +1923 -0
  262. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +1955 -0
  263. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +2042 -0
  264. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +1781 -0
  265. slidge_whatsapp/vendor/golang.org/x/text/unicode/bidi/trieval.go +48 -0
  266. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/composition.go +512 -0
  267. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/forminfo.go +279 -0
  268. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  269. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/iter.go +458 -0
  270. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/normalize.go +610 -0
  271. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  272. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +7657 -0
  273. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +7693 -0
  274. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +7710 -0
  275. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +7760 -0
  276. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +7907 -0
  277. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +7637 -0
  278. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  279. slidge_whatsapp/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  280. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb +0 -0
  281. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +3 -0
  282. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +16 -0
  283. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/{strings_unsafe_go121.go → strings_unsafe.go} +0 -2
  284. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/version/version.go +1 -1
  285. slidge_whatsapp/vendor/google.golang.org/protobuf/proto/merge.go +6 -0
  286. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +2 -0
  287. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/{value_unsafe_go121.go → value_unsafe.go} +0 -2
  288. slidge_whatsapp/vendor/modules.txt +38 -13
  289. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/METADATA +1 -1
  290. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/RECORD +293 -180
  291. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/WHEEL +1 -1
  292. slidge_whatsapp/vendor/github.com/rs/zerolog/CNAME +0 -1
  293. slidge_whatsapp/vendor/github.com/rs/zerolog/_config.yml +0 -1
  294. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw +0 -0
  295. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw +0 -0
  296. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw +0 -0
  297. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +0 -23
  298. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +0 -7
  299. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw +0 -0
  300. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw +0 -0
  301. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw +0 -0
  302. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw +0 -0
  303. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw +0 -0
  304. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw +0 -0
  305. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw +0 -0
  306. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw +0 -0
  307. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw +0 -0
  308. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw +0 -0
  309. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw +0 -0
  310. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw +0 -0
  311. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw +0 -0
  312. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw +0 -0
  313. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw +0 -0
  314. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw +0 -0
  315. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw +0 -0
  316. slidge_whatsapp/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +0 -296
  317. slidge_whatsapp/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +0 -94
  318. slidge_whatsapp/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +0 -98
  319. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.dist-info}/LICENSE +0 -0
  320. {slidge_whatsapp-0.2.5.dist-info → slidge_whatsapp-0.2.6.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,41 @@
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
+ if AutoAllowCORS {
36
+ AddCORSHeaders(w)
37
+ }
38
+ w.Header().Set("Content-Type", "application/json")
39
+ w.WriteHeader(httpStatusCode)
40
+ _, _ = w.Write([]byte("{}"))
41
+ }
@@ -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,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
+ }