async-matrix 2.1.0 → 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 (79) 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/lib/async/matrix/api/chain.rb +120 -94
  6. data/lib/async/matrix/api/concat.rb +28 -22
  7. data/lib/async/matrix/api/path_tree.rb +71 -44
  8. data/lib/async/matrix/api.rb +6 -1
  9. data/lib/async/matrix/auth_error.rb +20 -0
  10. data/lib/async/matrix/bad_json_error.rb +20 -0
  11. data/lib/async/matrix/client.rb +142 -110
  12. data/lib/async/matrix/config/vivify.rb +107 -0
  13. data/lib/async/matrix/config.rb +184 -0
  14. data/lib/async/matrix/content.rb +106 -0
  15. data/lib/async/matrix/double_puppet_client.rb +1 -1
  16. data/lib/async/matrix/error.rb +0 -27
  17. data/lib/async/matrix/{application_service/error_response.rb → error_response.rb} +10 -10
  18. data/lib/async/matrix/event.rb +197 -0
  19. data/lib/async/matrix/homeserver_error.rb +20 -0
  20. data/lib/async/matrix/invalid_endpoint_error.rb +20 -0
  21. data/lib/async/matrix/media_client.rb +46 -35
  22. data/lib/async/matrix/not_found_error.rb +20 -0
  23. data/lib/async/matrix/notifier.rb +7 -3
  24. data/lib/async/matrix/response_too_large_error.rb +20 -0
  25. data/lib/async/matrix/schema/registry.rb +367 -340
  26. data/lib/async/matrix/schema/validation_error.rb +221 -214
  27. data/lib/async/matrix/schema.rb +161 -161
  28. data/lib/async/matrix/version.rb +3 -3
  29. data/lib/async/matrix.rb +0 -7
  30. metadata +24 -132
  31. data/lib/async/discord/api/path_tree.rb +0 -127
  32. data/lib/async/discord/api.rb +0 -151
  33. data/lib/async/discord/client.rb +0 -283
  34. data/lib/async/discord/error.rb +0 -84
  35. data/lib/async/discord/gateway.rb +0 -359
  36. data/lib/async/discord.rb +0 -15
  37. data/lib/async/matrix/application_service/bot.rb +0 -232
  38. data/lib/async/matrix/application_service/config/schema/analytics.json +0 -21
  39. data/lib/async/matrix/application_service/config/schema/appservice.json +0 -82
  40. data/lib/async/matrix/application_service/config/schema/backfill.json +0 -91
  41. data/lib/async/matrix/application_service/config/schema/bridge.json +0 -209
  42. data/lib/async/matrix/application_service/config/schema/config.json +0 -61
  43. data/lib/async/matrix/application_service/config/schema/database.json +0 -38
  44. data/lib/async/matrix/application_service/config/schema/direct_media.json +0 -35
  45. data/lib/async/matrix/application_service/config/schema/double_puppet.json +0 -24
  46. data/lib/async/matrix/application_service/config/schema/encryption.json +0 -164
  47. data/lib/async/matrix/application_service/config/schema/homeserver.json +0 -58
  48. data/lib/async/matrix/application_service/config/schema/logging.json +0 -50
  49. data/lib/async/matrix/application_service/config/schema/management_room_texts.json +0 -25
  50. data/lib/async/matrix/application_service/config/schema/matrix.json +0 -45
  51. data/lib/async/matrix/application_service/config/schema/permissions.json +0 -54
  52. data/lib/async/matrix/application_service/config/schema/provisioning.json +0 -23
  53. data/lib/async/matrix/application_service/config/schema/public_media.json +0 -39
  54. data/lib/async/matrix/application_service/config/schema/relay.json +0 -43
  55. data/lib/async/matrix/application_service/config/vivify.rb +0 -109
  56. data/lib/async/matrix/application_service/config.rb +0 -225
  57. data/lib/async/matrix/application_service/dispatcher.rb +0 -185
  58. data/lib/async/matrix/application_service/event.rb +0 -285
  59. data/lib/async/matrix/application_service/server.rb +0 -430
  60. data/lib/async/matrix/application_service/transaction.rb +0 -66
  61. data/lib/async/matrix/application_service/transaction_handler.rb +0 -185
  62. data/lib/async/matrix/application_service/transaction_store.rb +0 -80
  63. data/lib/async/matrix/bridge/discord/db/connection.rb +0 -141
  64. data/lib/async/matrix/bridge/discord/db/file.rb +0 -118
  65. data/lib/async/matrix/bridge/discord/db/guild.rb +0 -120
  66. data/lib/async/matrix/bridge/discord/db/message.rb +0 -160
  67. data/lib/async/matrix/bridge/discord/db/migrations/001_create_users.rb +0 -14
  68. data/lib/async/matrix/bridge/discord/db/migrations/002_create_guilds.rb +0 -14
  69. data/lib/async/matrix/bridge/discord/db/migrations/003_create_portals.rb +0 -23
  70. data/lib/async/matrix/bridge/discord/db/migrations/004_create_puppets.rb +0 -19
  71. data/lib/async/matrix/bridge/discord/db/migrations/005_create_messages.rb +0 -20
  72. data/lib/async/matrix/bridge/discord/db/migrations/006_create_reactions.rb +0 -19
  73. data/lib/async/matrix/bridge/discord/db/migrations/007_create_files.rb +0 -18
  74. data/lib/async/matrix/bridge/discord/db/portal.rb +0 -150
  75. data/lib/async/matrix/bridge/discord/db/puppet.rb +0 -128
  76. data/lib/async/matrix/bridge/discord/db/reaction.rb +0 -165
  77. data/lib/async/matrix/bridge/discord/db/schema.rb +0 -18
  78. data/lib/async/matrix/bridge/discord/db/user.rb +0 -112
  79. 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