async-matrix 2.0.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +8 -8
  3. data/README.md +33 -58
  4. data/ext/async_matrix_e2ee/Cargo.toml +7 -1
  5. data/ext/async_matrix_e2ee/src/lib.rs +43 -2
  6. data/lib/async/matrix/api/chain.rb +120 -94
  7. data/lib/async/matrix/api/concat.rb +28 -22
  8. data/lib/async/matrix/api/path_tree.rb +71 -44
  9. data/lib/async/matrix/api.rb +6 -1
  10. data/lib/async/matrix/auth_error.rb +20 -0
  11. data/lib/async/matrix/bad_json_error.rb +20 -0
  12. data/lib/async/matrix/client.rb +142 -110
  13. data/lib/async/matrix/config/vivify.rb +107 -0
  14. data/lib/async/matrix/config.rb +184 -0
  15. data/lib/async/matrix/content.rb +106 -0
  16. data/lib/async/matrix/double_puppet_client.rb +1 -1
  17. data/lib/async/matrix/e2ee.rb +37 -0
  18. data/lib/async/matrix/error.rb +0 -27
  19. data/lib/async/matrix/{application_service/error_response.rb → error_response.rb} +10 -10
  20. data/lib/async/matrix/event.rb +197 -0
  21. data/lib/async/matrix/homeserver_error.rb +20 -0
  22. data/lib/async/matrix/invalid_endpoint_error.rb +20 -0
  23. data/lib/async/matrix/media_client.rb +46 -35
  24. data/lib/async/matrix/not_found_error.rb +20 -0
  25. data/lib/async/matrix/notifier.rb +7 -3
  26. data/lib/async/matrix/response_too_large_error.rb +20 -0
  27. data/lib/async/matrix/schema/registry.rb +367 -340
  28. data/lib/async/matrix/schema/validation_error.rb +221 -214
  29. data/lib/async/matrix/schema.rb +161 -161
  30. data/lib/async/matrix/version.rb +3 -3
  31. data/lib/async/matrix.rb +0 -7
  32. metadata +28 -122
  33. data/lib/async/discord/api/path_tree.rb +0 -127
  34. data/lib/async/discord/api.rb +0 -151
  35. data/lib/async/discord/client.rb +0 -283
  36. data/lib/async/discord/error.rb +0 -84
  37. data/lib/async/discord/gateway.rb +0 -359
  38. data/lib/async/discord.rb +0 -15
  39. data/lib/async/matrix/application_service/bot.rb +0 -232
  40. data/lib/async/matrix/application_service/config/schema/analytics.json +0 -21
  41. data/lib/async/matrix/application_service/config/schema/appservice.json +0 -82
  42. data/lib/async/matrix/application_service/config/schema/backfill.json +0 -91
  43. data/lib/async/matrix/application_service/config/schema/bridge.json +0 -209
  44. data/lib/async/matrix/application_service/config/schema/config.json +0 -61
  45. data/lib/async/matrix/application_service/config/schema/database.json +0 -38
  46. data/lib/async/matrix/application_service/config/schema/direct_media.json +0 -35
  47. data/lib/async/matrix/application_service/config/schema/double_puppet.json +0 -24
  48. data/lib/async/matrix/application_service/config/schema/encryption.json +0 -164
  49. data/lib/async/matrix/application_service/config/schema/homeserver.json +0 -58
  50. data/lib/async/matrix/application_service/config/schema/logging.json +0 -50
  51. data/lib/async/matrix/application_service/config/schema/management_room_texts.json +0 -25
  52. data/lib/async/matrix/application_service/config/schema/matrix.json +0 -45
  53. data/lib/async/matrix/application_service/config/schema/permissions.json +0 -54
  54. data/lib/async/matrix/application_service/config/schema/provisioning.json +0 -23
  55. data/lib/async/matrix/application_service/config/schema/public_media.json +0 -39
  56. data/lib/async/matrix/application_service/config/schema/relay.json +0 -43
  57. data/lib/async/matrix/application_service/config/vivify.rb +0 -109
  58. data/lib/async/matrix/application_service/config.rb +0 -225
  59. data/lib/async/matrix/application_service/dispatcher.rb +0 -185
  60. data/lib/async/matrix/application_service/event.rb +0 -285
  61. data/lib/async/matrix/application_service/server.rb +0 -430
  62. data/lib/async/matrix/application_service/transaction.rb +0 -66
  63. data/lib/async/matrix/application_service/transaction_handler.rb +0 -185
  64. data/lib/async/matrix/application_service/transaction_store.rb +0 -80
  65. data/lib/async/matrix/bridge/discord/db/connection.rb +0 -141
  66. data/lib/async/matrix/bridge/discord/db/file.rb +0 -118
  67. data/lib/async/matrix/bridge/discord/db/guild.rb +0 -120
  68. data/lib/async/matrix/bridge/discord/db/message.rb +0 -160
  69. data/lib/async/matrix/bridge/discord/db/migrations/001_create_users.rb +0 -14
  70. data/lib/async/matrix/bridge/discord/db/migrations/002_create_guilds.rb +0 -14
  71. data/lib/async/matrix/bridge/discord/db/migrations/003_create_portals.rb +0 -23
  72. data/lib/async/matrix/bridge/discord/db/migrations/004_create_puppets.rb +0 -19
  73. data/lib/async/matrix/bridge/discord/db/migrations/005_create_messages.rb +0 -20
  74. data/lib/async/matrix/bridge/discord/db/migrations/006_create_reactions.rb +0 -19
  75. data/lib/async/matrix/bridge/discord/db/migrations/007_create_files.rb +0 -18
  76. data/lib/async/matrix/bridge/discord/db/portal.rb +0 -150
  77. data/lib/async/matrix/bridge/discord/db/puppet.rb +0 -128
  78. data/lib/async/matrix/bridge/discord/db/reaction.rb +0 -165
  79. data/lib/async/matrix/bridge/discord/db/schema.rb +0 -18
  80. data/lib/async/matrix/bridge/discord/db/user.rb +0 -112
  81. data/lib/async/matrix/bridge/discord/db.rb +0 -138
@@ -1,138 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Released under the Apache License, Version 2.0.
4
- # Copyright, 2026, by General Intelligence Systems.
5
-
6
- require "sequel"
7
- require "sequel/extensions/migration"
8
-
9
- # The Discord bridge's database layer. Requiring this file loads the whole
10
- # subsystem: the Sequel placeholder (schema), the connection helper, and every
11
- # model class, so DB.connect can bind them all.
12
- require_relative "db/schema"
13
- require_relative "db/connection"
14
- require_relative "db/user"
15
- require_relative "db/guild"
16
- require_relative "db/portal"
17
- require_relative "db/puppet"
18
- require_relative "db/message"
19
- require_relative "db/reaction"
20
- require_relative "db/file"
21
-
22
- module Async
23
- module Matrix
24
- module Bridge
25
- module Discord
26
- # Database module for the Discord bridge.
27
- #
28
- # Establishes a connection using the bridge config's database section,
29
- # runs Sequel migrations, and wires up all model classes to the database.
30
- #
31
- # Supports both SQLite (with foreign keys + WAL) and PostgreSQL.
32
- #
33
- # db = Async::Matrix::Bridge::Discord::DB.connect(config)
34
- # # All models are now ready:
35
- # DB::User.create(mxid: "@alice:example.com")
36
- # DB::Portal.where(discord_guild_id: "123").all
37
- #
38
- module DB
39
- MIGRATIONS_PATH = File.join(__dir__, "db", "migrations").freeze
40
-
41
- # Connect to the database, run migrations, and bind all models.
42
- #
43
- # @param config [Async::Matrix::ApplicationService::Config] the bridge config
44
- # @return [Sequel::Database]
45
- def self.connect(config)
46
- db = Connection.establish(config.database)
47
- migrate!(db)
48
- bind_models(db)
49
- db
50
- end
51
-
52
- # Run pending migrations.
53
- #
54
- # @param db [Sequel::Database]
55
- def self.migrate!(db)
56
- Sequel::Migrator.run(db, MIGRATIONS_PATH)
57
- end
58
-
59
- # Bind all model classes to the given database.
60
- #
61
- # @param db [Sequel::Database]
62
- def self.bind_models(db)
63
- Async::Matrix::Bridge::Discord::DB::User.dataset = db[:users]
64
- Async::Matrix::Bridge::Discord::DB::Guild.dataset = db[:guilds]
65
- Async::Matrix::Bridge::Discord::DB::Portal.dataset = db[:portals]
66
- Async::Matrix::Bridge::Discord::DB::Puppet.dataset = db[:puppets]
67
- Async::Matrix::Bridge::Discord::DB::Message.dataset = db[:messages]
68
- Async::Matrix::Bridge::Discord::DB::Reaction.dataset = db[:reactions]
69
- Async::Matrix::Bridge::Discord::DB::CachedFile.dataset = db[:files]
70
- end
71
- end
72
- end
73
- end
74
- end
75
- end
76
-
77
- __END__
78
- describe "Async::Matrix::Bridge::Discord::DB" do
79
- it "connects, migrates, and binds models from config" do
80
- database_config = Object.new
81
- database_config.define_singleton_method(:type) { "sqlite3-fk-wal" }
82
- database_config.define_singleton_method(:uri) { "sqlite:/" }
83
- database_config.define_singleton_method(:max_open_conns) { 1 }
84
-
85
- config = Object.new
86
- config.define_singleton_method(:database) { database_config }
87
-
88
- db = Async::Matrix::Bridge::Discord::DB.connect(config)
89
- db.should.be.kind_of Sequel::Database
90
-
91
- # All tables should exist
92
- db.tables.should.include :users
93
- db.tables.should.include :guilds
94
- db.tables.should.include :portals
95
- db.tables.should.include :puppets
96
- db.tables.should.include :messages
97
- db.tables.should.include :reactions
98
- db.tables.should.include :files
99
-
100
- # Models should be bound and functional
101
- db[:users].delete
102
- db[:guilds].delete
103
- db[:portals].delete
104
- db[:puppets].delete
105
-
106
- Async::Matrix::Bridge::Discord::DB::User.create(mxid: "@db_int:x")
107
- Async::Matrix::Bridge::Discord::DB::User["@db_int:x"].should.not.be.nil
108
-
109
- Async::Matrix::Bridge::Discord::DB::Guild.create(discord_id: "g_int")
110
- Async::Matrix::Bridge::Discord::DB::Guild["g_int"].should.not.be.nil
111
-
112
- Async::Matrix::Bridge::Discord::DB::Portal.create(discord_id: "p_int", receiver: "")
113
- Async::Matrix::Bridge::Discord::DB::Portal["p_int", ""].should.not.be.nil
114
-
115
- Async::Matrix::Bridge::Discord::DB::Puppet.create(discord_id: "d_int")
116
- Async::Matrix::Bridge::Discord::DB::Puppet["d_int"].should.not.be.nil
117
-
118
- db.disconnect
119
- end
120
-
121
- it "exposes MIGRATIONS_PATH" do
122
- File.directory?(Async::Matrix::Bridge::Discord::DB::MIGRATIONS_PATH).should == true
123
- end
124
-
125
- it "is idempotent — running migrations twice does not raise" do
126
- database_config = Object.new
127
- database_config.define_singleton_method(:type) { "sqlite3-fk-wal" }
128
- database_config.define_singleton_method(:uri) { "sqlite:/" }
129
- database_config.define_singleton_method(:max_open_conns) { 1 }
130
-
131
- config = Object.new
132
- config.define_singleton_method(:database) { database_config }
133
-
134
- db = Async::Matrix::Bridge::Discord::DB.connect(config)
135
- lambda { Async::Matrix::Bridge::Discord::DB.migrate!(db) }.should.not.raise
136
- db.disconnect
137
- end
138
- end