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.
- checksums.yaml +4 -4
- data/Cargo.lock +8 -8
- data/README.md +33 -58
- data/ext/async_matrix_e2ee/Cargo.toml +7 -1
- data/lib/async/matrix/api/chain.rb +120 -94
- data/lib/async/matrix/api/concat.rb +28 -22
- data/lib/async/matrix/api/path_tree.rb +71 -44
- data/lib/async/matrix/api.rb +6 -1
- data/lib/async/matrix/auth_error.rb +20 -0
- data/lib/async/matrix/bad_json_error.rb +20 -0
- data/lib/async/matrix/client.rb +142 -110
- data/lib/async/matrix/config/vivify.rb +107 -0
- data/lib/async/matrix/config.rb +184 -0
- data/lib/async/matrix/content.rb +106 -0
- data/lib/async/matrix/double_puppet_client.rb +1 -1
- data/lib/async/matrix/error.rb +0 -27
- data/lib/async/matrix/{application_service/error_response.rb → error_response.rb} +10 -10
- data/lib/async/matrix/event.rb +197 -0
- data/lib/async/matrix/homeserver_error.rb +20 -0
- data/lib/async/matrix/invalid_endpoint_error.rb +20 -0
- data/lib/async/matrix/media_client.rb +46 -35
- data/lib/async/matrix/not_found_error.rb +20 -0
- data/lib/async/matrix/notifier.rb +7 -3
- data/lib/async/matrix/response_too_large_error.rb +20 -0
- data/lib/async/matrix/schema/registry.rb +367 -340
- data/lib/async/matrix/schema/validation_error.rb +221 -214
- data/lib/async/matrix/schema.rb +161 -161
- data/lib/async/matrix/version.rb +3 -3
- data/lib/async/matrix.rb +0 -7
- metadata +24 -132
- data/lib/async/discord/api/path_tree.rb +0 -127
- data/lib/async/discord/api.rb +0 -151
- data/lib/async/discord/client.rb +0 -283
- data/lib/async/discord/error.rb +0 -84
- data/lib/async/discord/gateway.rb +0 -359
- data/lib/async/discord.rb +0 -15
- data/lib/async/matrix/application_service/bot.rb +0 -232
- data/lib/async/matrix/application_service/config/schema/analytics.json +0 -21
- data/lib/async/matrix/application_service/config/schema/appservice.json +0 -82
- data/lib/async/matrix/application_service/config/schema/backfill.json +0 -91
- data/lib/async/matrix/application_service/config/schema/bridge.json +0 -209
- data/lib/async/matrix/application_service/config/schema/config.json +0 -61
- data/lib/async/matrix/application_service/config/schema/database.json +0 -38
- data/lib/async/matrix/application_service/config/schema/direct_media.json +0 -35
- data/lib/async/matrix/application_service/config/schema/double_puppet.json +0 -24
- data/lib/async/matrix/application_service/config/schema/encryption.json +0 -164
- data/lib/async/matrix/application_service/config/schema/homeserver.json +0 -58
- data/lib/async/matrix/application_service/config/schema/logging.json +0 -50
- data/lib/async/matrix/application_service/config/schema/management_room_texts.json +0 -25
- data/lib/async/matrix/application_service/config/schema/matrix.json +0 -45
- data/lib/async/matrix/application_service/config/schema/permissions.json +0 -54
- data/lib/async/matrix/application_service/config/schema/provisioning.json +0 -23
- data/lib/async/matrix/application_service/config/schema/public_media.json +0 -39
- data/lib/async/matrix/application_service/config/schema/relay.json +0 -43
- data/lib/async/matrix/application_service/config/vivify.rb +0 -109
- data/lib/async/matrix/application_service/config.rb +0 -225
- data/lib/async/matrix/application_service/dispatcher.rb +0 -185
- data/lib/async/matrix/application_service/event.rb +0 -285
- data/lib/async/matrix/application_service/server.rb +0 -430
- data/lib/async/matrix/application_service/transaction.rb +0 -66
- data/lib/async/matrix/application_service/transaction_handler.rb +0 -185
- data/lib/async/matrix/application_service/transaction_store.rb +0 -80
- data/lib/async/matrix/bridge/discord/db/connection.rb +0 -141
- data/lib/async/matrix/bridge/discord/db/file.rb +0 -118
- data/lib/async/matrix/bridge/discord/db/guild.rb +0 -120
- data/lib/async/matrix/bridge/discord/db/message.rb +0 -160
- data/lib/async/matrix/bridge/discord/db/migrations/001_create_users.rb +0 -14
- data/lib/async/matrix/bridge/discord/db/migrations/002_create_guilds.rb +0 -14
- data/lib/async/matrix/bridge/discord/db/migrations/003_create_portals.rb +0 -23
- data/lib/async/matrix/bridge/discord/db/migrations/004_create_puppets.rb +0 -19
- data/lib/async/matrix/bridge/discord/db/migrations/005_create_messages.rb +0 -20
- data/lib/async/matrix/bridge/discord/db/migrations/006_create_reactions.rb +0 -19
- data/lib/async/matrix/bridge/discord/db/migrations/007_create_files.rb +0 -18
- data/lib/async/matrix/bridge/discord/db/portal.rb +0 -150
- data/lib/async/matrix/bridge/discord/db/puppet.rb +0 -128
- data/lib/async/matrix/bridge/discord/db/reaction.rb +0 -165
- data/lib/async/matrix/bridge/discord/db/schema.rb +0 -18
- data/lib/async/matrix/bridge/discord/db/user.rb +0 -112
- 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
|