async-matrix 2.1.0-aarch64-linux → 3.0.1-aarch64-linux

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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -58
  3. data/lib/async/matrix/3.3/async_matrix_e2ee.so +0 -0
  4. data/lib/async/matrix/3.4/async_matrix_e2ee.so +0 -0
  5. data/lib/async/matrix/4.0/async_matrix_e2ee.so +0 -0
  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/app_service_client.rb +213 -0
  11. data/lib/async/matrix/auth_error.rb +20 -0
  12. data/lib/async/matrix/bad_json_error.rb +20 -0
  13. data/lib/async/matrix/client/encryption.rb +413 -0
  14. data/lib/async/matrix/client/rooms.rb +478 -0
  15. data/lib/async/matrix/client/sync.rb +508 -0
  16. data/lib/async/matrix/client.rb +217 -113
  17. data/lib/async/matrix/config/vivify.rb +107 -0
  18. data/lib/async/matrix/config.rb +184 -0
  19. data/lib/async/matrix/device_store.rb +1621 -0
  20. data/lib/async/matrix/double_puppet_client.rb +1 -1
  21. data/lib/async/matrix/e2ee/pickle_key.rb +182 -0
  22. data/lib/async/matrix/error.rb +9 -36
  23. data/lib/async/matrix/{application_service/error_response.rb → error_response.rb} +10 -10
  24. data/lib/async/matrix/homeserver_error.rb +20 -0
  25. data/lib/async/matrix/invalid_endpoint_error.rb +20 -0
  26. data/lib/async/matrix/media_client.rb +46 -35
  27. data/lib/async/matrix/not_found_error.rb +20 -0
  28. data/lib/async/matrix/notifier.rb +7 -3
  29. data/lib/async/matrix/response_too_large_error.rb +20 -0
  30. data/lib/async/matrix/version.rb +1 -1
  31. data/lib/async/matrix.rb +16 -7
  32. data/lib/protocol/matrix/canonical_json.rb +200 -0
  33. data/lib/protocol/matrix/content.rb +106 -0
  34. data/lib/protocol/matrix/encrypted_message.rb +1018 -0
  35. data/lib/protocol/matrix/error.rb +49 -0
  36. data/lib/protocol/matrix/event.rb +208 -0
  37. data/lib/protocol/matrix/key_backup.rb +347 -0
  38. data/lib/protocol/matrix/keys.rb +381 -0
  39. data/lib/protocol/matrix/message_batch.rb +482 -0
  40. data/lib/protocol/matrix/schema/registry.rb +381 -0
  41. data/lib/protocol/matrix/schema/validation_error.rb +234 -0
  42. data/lib/protocol/matrix/schema.rb +170 -0
  43. data/lib/protocol/matrix/secret_storage.rb +535 -0
  44. data/lib/protocol/matrix/signing.rb +278 -0
  45. data/lib/protocol/matrix.rb +25 -0
  46. metadata +43 -136
  47. data/lib/async/discord/api/path_tree.rb +0 -127
  48. data/lib/async/discord/api.rb +0 -151
  49. data/lib/async/discord/client.rb +0 -283
  50. data/lib/async/discord/error.rb +0 -84
  51. data/lib/async/discord/gateway.rb +0 -359
  52. data/lib/async/discord.rb +0 -15
  53. data/lib/async/matrix/application_service/bot.rb +0 -232
  54. data/lib/async/matrix/application_service/config/schema/analytics.json +0 -21
  55. data/lib/async/matrix/application_service/config/schema/appservice.json +0 -82
  56. data/lib/async/matrix/application_service/config/schema/backfill.json +0 -91
  57. data/lib/async/matrix/application_service/config/schema/bridge.json +0 -209
  58. data/lib/async/matrix/application_service/config/schema/config.json +0 -61
  59. data/lib/async/matrix/application_service/config/schema/database.json +0 -38
  60. data/lib/async/matrix/application_service/config/schema/direct_media.json +0 -35
  61. data/lib/async/matrix/application_service/config/schema/double_puppet.json +0 -24
  62. data/lib/async/matrix/application_service/config/schema/encryption.json +0 -164
  63. data/lib/async/matrix/application_service/config/schema/homeserver.json +0 -58
  64. data/lib/async/matrix/application_service/config/schema/logging.json +0 -50
  65. data/lib/async/matrix/application_service/config/schema/management_room_texts.json +0 -25
  66. data/lib/async/matrix/application_service/config/schema/matrix.json +0 -45
  67. data/lib/async/matrix/application_service/config/schema/permissions.json +0 -54
  68. data/lib/async/matrix/application_service/config/schema/provisioning.json +0 -23
  69. data/lib/async/matrix/application_service/config/schema/public_media.json +0 -39
  70. data/lib/async/matrix/application_service/config/schema/relay.json +0 -43
  71. data/lib/async/matrix/application_service/config/vivify.rb +0 -109
  72. data/lib/async/matrix/application_service/config.rb +0 -225
  73. data/lib/async/matrix/application_service/dispatcher.rb +0 -185
  74. data/lib/async/matrix/application_service/event.rb +0 -285
  75. data/lib/async/matrix/application_service/server.rb +0 -430
  76. data/lib/async/matrix/application_service/transaction.rb +0 -66
  77. data/lib/async/matrix/application_service/transaction_handler.rb +0 -185
  78. data/lib/async/matrix/application_service/transaction_store.rb +0 -80
  79. data/lib/async/matrix/bridge/discord/db/connection.rb +0 -141
  80. data/lib/async/matrix/bridge/discord/db/file.rb +0 -118
  81. data/lib/async/matrix/bridge/discord/db/guild.rb +0 -120
  82. data/lib/async/matrix/bridge/discord/db/message.rb +0 -160
  83. data/lib/async/matrix/bridge/discord/db/migrations/001_create_users.rb +0 -14
  84. data/lib/async/matrix/bridge/discord/db/migrations/002_create_guilds.rb +0 -14
  85. data/lib/async/matrix/bridge/discord/db/migrations/003_create_portals.rb +0 -23
  86. data/lib/async/matrix/bridge/discord/db/migrations/004_create_puppets.rb +0 -19
  87. data/lib/async/matrix/bridge/discord/db/migrations/005_create_messages.rb +0 -20
  88. data/lib/async/matrix/bridge/discord/db/migrations/006_create_reactions.rb +0 -19
  89. data/lib/async/matrix/bridge/discord/db/migrations/007_create_files.rb +0 -18
  90. data/lib/async/matrix/bridge/discord/db/portal.rb +0 -150
  91. data/lib/async/matrix/bridge/discord/db/puppet.rb +0 -128
  92. data/lib/async/matrix/bridge/discord/db/reaction.rb +0 -165
  93. data/lib/async/matrix/bridge/discord/db/schema.rb +0 -18
  94. data/lib/async/matrix/bridge/discord/db/user.rb +0 -112
  95. data/lib/async/matrix/bridge/discord/db.rb +0 -138
  96. data/lib/async/matrix/schema/registry.rb +0 -354
  97. data/lib/async/matrix/schema/validation_error.rb +0 -225
  98. data/lib/async/matrix/schema.rb +0 -170
@@ -0,0 +1,278 @@
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_relative "canonical_json"
7
+ require_relative "error"
8
+
9
+ module Protocol
10
+ module Matrix
11
+ # Signing JSON, per https://spec.matrix.org/latest/appendices/#signing-json
12
+ #
13
+ # The procedure, in full:
14
+ #
15
+ # 1. remove `signatures` and `unsigned`
16
+ # 2. encode what is left as canonical JSON
17
+ # 3. sign those bytes with ed25519
18
+ # 4. encode the signature as UNPADDED base64
19
+ # 5. store it under signatures[entity]["<algorithm>:<key_id>"]
20
+ #
21
+ # THE KEY MATERIAL IS INJECTED. `signer` is anything answering
22
+ # `sign(String) -> base64`, and `verifier` anything answering
23
+ # `verify_signature(key, message, signature) -> bool` — which is the shape
24
+ # the native E2EE module already exposes. So this file implements the
25
+ # procedure and holds no keys, which is what lets it sit in the protocol
26
+ # layer and be tested without cryptography.
27
+ module Signing
28
+ ED25519 = "ed25519"
29
+
30
+ class Error < Protocol::Matrix::Error; end
31
+
32
+ # No signature from the entity and key we were told to check.
33
+ class MissingSignatureError < Error; end
34
+
35
+ # "{algorithm}:{key_id}" — for a device key the key_id is the device id.
36
+ def self.key_id(name, algorithm: ED25519)
37
+ "#{algorithm}:#{name}"
38
+ end
39
+
40
+ # Sign +object+ as +user_id+ with +key_id+.
41
+ #
42
+ # @returns [Hash] a copy of +object+ with the signature added. EXISTING
43
+ # SIGNATURES ARE PRESERVED: a device-keys object legitimately carries
44
+ # several (our device key, our self-signing key, another user's
45
+ # attestation), and replacing the map rather than merging into it would
46
+ # silently discard them.
47
+ def self.sign(object, signer:, user_id:, key_id:)
48
+ signature = sign_bytes(CanonicalJson.signable_bytes(object), signer: signer)
49
+ existing = object["signatures"] || object[:signatures] || {}
50
+ mine = existing[user_id] || {}
51
+
52
+ object.merge(
53
+ "signatures" => existing.merge(user_id => mine.merge(key_id => signature)),
54
+ )
55
+ end
56
+
57
+ # Sign the given bytes, returning unpadded base64.
58
+ #
59
+ # PADDING IS STRIPPED HERE rather than assumed absent. The spec requires
60
+ # unpadded base64, and whether a given primitive emits padding is its own
61
+ # business; a stray "=" would make every signature we produce fail
62
+ # verification everywhere, which is an expensive thing to discover
63
+ # remotely.
64
+ def self.sign_bytes(message, signer:)
65
+ signer.sign(message).delete_suffix("==").delete_suffix("=")
66
+ end
67
+
68
+ # Is +object+ correctly signed by +user_id+ with +key_id+?
69
+ #
70
+ # @parameter key [String] the public ed25519 key to verify against.
71
+ # @parameter verifier [Object] answers
72
+ # `verify_signature(key, message, signature) -> bool`.
73
+ # @raises [MissingSignatureError] when there is no such signature to check
74
+ # — distinct from a signature that is present and wrong, because the two
75
+ # mean different things about the sender.
76
+ def self.verify(object, key:, verifier:, user_id:, key_id:)
77
+ signature = signature_for(object, user_id: user_id, key_id: key_id)
78
+
79
+ if signature.nil?
80
+ raise MissingSignatureError, "no #{key_id} signature from #{user_id}"
81
+ end
82
+
83
+ verifier.verify_signature(key, CanonicalJson.signable_bytes(object), signature)
84
+ end
85
+
86
+ # The signature +user_id+ made with +key_id+, or nil.
87
+ def self.signature_for(object, user_id:, key_id:)
88
+ signatures = object["signatures"] || object[:signatures] || {}
89
+ (signatures[user_id] || {})[key_id]
90
+ end
91
+
92
+ def self.signed_by?(object, user_id:, key_id:)
93
+ !signature_for(object, user_id: user_id, key_id: key_id).nil?
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ __END__
100
+ describe "Protocol::Matrix::Signing" do
101
+ # A signer that records what it was asked to sign, so a spec can assert on
102
+ # the exact bytes the signature covers.
103
+ def recording_signer(signature = "SIGNATURE")
104
+ signer = Object.new
105
+ signed = []
106
+ signer.define_singleton_method(:signed) { signed }
107
+ signer.define_singleton_method(:sign) do |message|
108
+ signed << message
109
+ signature
110
+ end
111
+ signer
112
+ end
113
+
114
+ def verifier(result = true)
115
+ verifier = Object.new
116
+ calls = []
117
+ verifier.define_singleton_method(:calls) { calls }
118
+ verifier.define_singleton_method(:verify_signature) do |key, message, signature|
119
+ calls << [key, message, signature]
120
+ result
121
+ end
122
+ verifier
123
+ end
124
+
125
+ it "builds a key identifier" do
126
+ Protocol::Matrix::Signing.key_id("JLAFKJWSCS").should == "ed25519:JLAFKJWSCS"
127
+ Protocol::Matrix::Signing.key_id("1", algorithm: "ed25519").should == "ed25519:1"
128
+ end
129
+
130
+ it "stores the signature under entity and key identifier" do
131
+ signed = Protocol::Matrix::Signing.sign(
132
+ {"a" => 1},
133
+ signer: recording_signer,
134
+ user_id: "@alice:example.com",
135
+ key_id: "ed25519:DEV",
136
+ )
137
+
138
+ signed["signatures"].should == {"@alice:example.com" => {"ed25519:DEV" => "SIGNATURE"}}
139
+ end
140
+
141
+ # The signature covers canonical JSON of the object MINUS signatures and
142
+ # unsigned.
143
+ it "signs the canonical form, excluding signatures and unsigned" do
144
+ signer = recording_signer
145
+ Protocol::Matrix::Signing.sign(
146
+ {"b" => 2, "a" => 1, "unsigned" => {"age" => 1}},
147
+ signer: signer,
148
+ user_id: "@alice:example.com",
149
+ key_id: "ed25519:DEV",
150
+ )
151
+
152
+ signer.signed.should == ['{"a":1,"b":2}']
153
+ end
154
+
155
+ # A device-keys object legitimately carries several signatures; replacing the
156
+ # map rather than merging into it would discard them.
157
+ it "preserves signatures already present" do
158
+ object = {
159
+ "a" => 1,
160
+ "signatures" => {
161
+ "@bob:example.com" => {"ed25519:OTHER" => "theirs"},
162
+ "@alice:example.com" => {"ed25519:SSK" => "self-signing"},
163
+ },
164
+ }
165
+ signed = Protocol::Matrix::Signing.sign(
166
+ object,
167
+ signer: recording_signer,
168
+ user_id: "@alice:example.com",
169
+ key_id: "ed25519:DEV",
170
+ )
171
+
172
+ signed["signatures"]["@bob:example.com"].should == {"ed25519:OTHER" => "theirs"}
173
+ signed["signatures"]["@alice:example.com"].should == {
174
+ "ed25519:SSK" => "self-signing", "ed25519:DEV" => "SIGNATURE",
175
+ }
176
+ end
177
+
178
+ it "returns a copy rather than mutating its argument" do
179
+ object = {"a" => 1}
180
+ Protocol::Matrix::Signing.sign(
181
+ object,
182
+ signer: recording_signer,
183
+ user_id: "@alice:example.com",
184
+ key_id: "ed25519:DEV",
185
+ )
186
+
187
+ object.key?("signatures").should == false
188
+ end
189
+
190
+ # The spec requires UNPADDED base64. Whether a primitive emits padding is its
191
+ # own business; a stray "=" would fail verification everywhere.
192
+ it "strips base64 padding from whatever the signer returns" do
193
+ Protocol::Matrix::Signing.sign_bytes("msg", signer: recording_signer("abc=")).should == "abc"
194
+ Protocol::Matrix::Signing.sign_bytes("msg", signer: recording_signer("abc==")).should == "abc"
195
+ Protocol::Matrix::Signing.sign_bytes("msg", signer: recording_signer("abc")).should == "abc"
196
+ end
197
+
198
+ # ── Verifying ─────────────────────────────────────────────────────────────
199
+
200
+ it "verifies against the same bytes it would have signed" do
201
+ check = verifier
202
+ object = {
203
+ "b" => 2,
204
+ "a" => 1,
205
+ "signatures" => {"@alice:example.com" => {"ed25519:DEV" => "SIG"}},
206
+ }
207
+
208
+ Protocol::Matrix::Signing.verify(
209
+ object,
210
+ key: "PUBKEY",
211
+ verifier: check,
212
+ user_id: "@alice:example.com",
213
+ key_id: "ed25519:DEV",
214
+ ).should == true
215
+
216
+ check.calls.should == [["PUBKEY", '{"a":1,"b":2}', "SIG"]]
217
+ end
218
+
219
+ it "reports a signature that does not verify" do
220
+ Protocol::Matrix::Signing.verify(
221
+ {"a" => 1, "signatures" => {"@alice:example.com" => {"ed25519:DEV" => "SIG"}}},
222
+ key: "PUBKEY",
223
+ verifier: verifier(false),
224
+ user_id: "@alice:example.com",
225
+ key_id: "ed25519:DEV",
226
+ ).should == false
227
+ end
228
+
229
+ # "A signature that is absent" and "a signature that is wrong" say different
230
+ # things about the sender, so they are not the same answer.
231
+ it "distinguishes a missing signature from a bad one" do
232
+ lambda {
233
+ Protocol::Matrix::Signing.verify(
234
+ {"a" => 1},
235
+ key: "PUBKEY",
236
+ verifier: verifier,
237
+ user_id: "@alice:example.com",
238
+ key_id: "ed25519:DEV",
239
+ )
240
+ }.should.raise(Protocol::Matrix::Signing::MissingSignatureError)
241
+ end
242
+
243
+ it "treats a signature from a different key as missing" do
244
+ lambda {
245
+ Protocol::Matrix::Signing.verify(
246
+ {"signatures" => {"@alice:example.com" => {"ed25519:OTHER" => "SIG"}}},
247
+ key: "PUBKEY",
248
+ verifier: verifier,
249
+ user_id: "@alice:example.com",
250
+ key_id: "ed25519:DEV",
251
+ )
252
+ }.should.raise(Protocol::Matrix::Signing::MissingSignatureError)
253
+ end
254
+
255
+ it "finds a signature, or reports its absence" do
256
+ object = {"signatures" => {"@alice:example.com" => {"ed25519:DEV" => "SIG"}}}
257
+
258
+ Protocol::Matrix::Signing.signature_for(object, user_id: "@alice:example.com", key_id: "ed25519:DEV")
259
+ .should == "SIG"
260
+ Protocol::Matrix::Signing.signed_by?(object, user_id: "@alice:example.com", key_id: "ed25519:DEV")
261
+ .should == true
262
+ Protocol::Matrix::Signing.signed_by?(object, user_id: "@bob:example.com", key_id: "ed25519:DEV")
263
+ .should == false
264
+ end
265
+
266
+ # A signature survives a round trip through canonical JSON regardless of the
267
+ # order the object was built in -- which is the entire purpose of the
268
+ # canonical encoding.
269
+ it "signs two differently ordered objects identically" do
270
+ first = recording_signer
271
+ second = recording_signer
272
+
273
+ Protocol::Matrix::Signing.sign({"a" => 1, "b" => 2}, signer: first, user_id: "@a:b", key_id: "ed25519:D")
274
+ Protocol::Matrix::Signing.sign({"b" => 2, "a" => 1}, signer: second, user_id: "@a:b", key_id: "ed25519:D")
275
+
276
+ first.signed.should == second.signed
277
+ end
278
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the Apache License, Version 2.0.
4
+ # Copyright, 2026, by General Intelligence Systems.
5
+
6
+ # The Matrix protocol layer: message formats, event schemas, and the rules for
7
+ # reading them. No HTTP, no sockets, no storage.
8
+ #
9
+ # The split follows the Socketry convention that `protocol-http` and
10
+ # `protocol-grpc` set: a protocol library owns the FORMAT and the state machine
11
+ # over it, and the `async-*` library binds that to IO. So an Event, a Content, an
12
+ # EncryptedMessage and the schemas that validate them live here, and the Client
13
+ # that fetches them lives in Async::Matrix.
14
+ #
15
+ # Practically, that means everything under this namespace can be unit tested
16
+ # with a Hash and no network, no homeserver, and — for EncryptedMessage — no
17
+ # crypto either.
18
+ module Protocol
19
+ module Matrix
20
+ end
21
+ end
22
+
23
+ Dir.glob("#{__dir__}/matrix/**/*.rb").sort.each do |path|
24
+ require path
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-matrix
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.1
5
5
  platform: aarch64-linux
6
6
  authors:
7
7
  - Nathan Kidd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-08-01 00:00:00.000000000 Z
11
+ date: 2026-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -16,84 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.39'
19
+ version: '2.46'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.39'
26
+ version: '2.46'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: async-http
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.95'
33
+ version: '0.105'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.95'
41
- - !ruby/object:Gem::Dependency
42
- name: async-websocket
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.30'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.30'
55
- - !ruby/object:Gem::Dependency
56
- name: grape
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '3.3'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '3.3'
40
+ version: '0.105'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: json_schemer
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
45
  - - "~>"
74
46
  - !ruby/object:Gem::Version
75
- version: '2.0'
47
+ version: '2.5'
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
52
  - - "~>"
81
53
  - !ruby/object:Gem::Version
82
- version: '2.0'
83
- - !ruby/object:Gem::Dependency
84
- name: sequel
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '5.0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '5.0'
54
+ version: '2.5'
97
55
  - !ruby/object:Gem::Dependency
98
56
  name: string_builder
99
57
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +80,6 @@ dependencies:
122
80
  - - "~>"
123
81
  - !ruby/object:Gem::Version
124
82
  version: '1.0'
125
- - !ruby/object:Gem::Dependency
126
- name: falcon
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.55'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.55'
139
83
  - !ruby/object:Gem::Dependency
140
84
  name: logger
141
85
  requirement: !ruby/object:Gem::Requirement
@@ -150,50 +94,37 @@ dependencies:
150
94
  - - ">="
151
95
  - !ruby/object:Gem::Version
152
96
  version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: sqlite3
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
97
  - !ruby/object:Gem::Dependency
168
98
  name: rake-compiler
169
99
  requirement: !ruby/object:Gem::Requirement
170
100
  requirements:
171
101
  - - "~>"
172
102
  - !ruby/object:Gem::Version
173
- version: '1.2'
103
+ version: '1.3'
174
104
  type: :development
175
105
  prerelease: false
176
106
  version_requirements: !ruby/object:Gem::Requirement
177
107
  requirements:
178
108
  - - "~>"
179
109
  - !ruby/object:Gem::Version
180
- version: '1.2'
110
+ version: '1.3'
181
111
  - !ruby/object:Gem::Dependency
182
112
  name: lefthook
183
113
  requirement: !ruby/object:Gem::Requirement
184
114
  requirements:
185
115
  - - "~>"
186
116
  - !ruby/object:Gem::Version
187
- version: '2.1'
117
+ version: '2.2'
188
118
  type: :development
189
119
  prerelease: false
190
120
  version_requirements: !ruby/object:Gem::Requirement
191
121
  requirements:
192
122
  - - "~>"
193
123
  - !ruby/object:Gem::Version
194
- version: '2.1'
124
+ version: '2.2'
195
125
  description: Async-native Matrix protocol primitives built on the Socketry async ecosystem.
196
- Provides well-known discovery, event notification, and application service models.
126
+ Provides a Client-Server API client, schema-validated events, media and end-to-end
127
+ encryption.
197
128
  email:
198
129
  - nathankidd@hey.com
199
130
  executables: []
@@ -498,12 +429,6 @@ files:
498
429
  - data/matrix-spec/event-schemas/schema/m.sticker.yaml
499
430
  - data/matrix-spec/event-schemas/schema/m.tag.yaml
500
431
  - data/matrix-spec/event-schemas/schema/m.typing.yaml
501
- - lib/async/discord.rb
502
- - lib/async/discord/api.rb
503
- - lib/async/discord/api/path_tree.rb
504
- - lib/async/discord/client.rb
505
- - lib/async/discord/error.rb
506
- - lib/async/discord/gateway.rb
507
432
  - lib/async/matrix.rb
508
433
  - lib/async/matrix/3.3/async_matrix_e2ee.so
509
434
  - lib/async/matrix/3.4/async_matrix_e2ee.so
@@ -512,64 +437,46 @@ files:
512
437
  - lib/async/matrix/api/chain.rb
513
438
  - lib/async/matrix/api/concat.rb
514
439
  - lib/async/matrix/api/path_tree.rb
515
- - lib/async/matrix/application_service/bot.rb
516
- - lib/async/matrix/application_service/config.rb
517
- - lib/async/matrix/application_service/config/schema/analytics.json
518
- - lib/async/matrix/application_service/config/schema/appservice.json
519
- - lib/async/matrix/application_service/config/schema/backfill.json
520
- - lib/async/matrix/application_service/config/schema/bridge.json
521
- - lib/async/matrix/application_service/config/schema/config.json
522
- - lib/async/matrix/application_service/config/schema/database.json
523
- - lib/async/matrix/application_service/config/schema/direct_media.json
524
- - lib/async/matrix/application_service/config/schema/double_puppet.json
525
- - lib/async/matrix/application_service/config/schema/encryption.json
526
- - lib/async/matrix/application_service/config/schema/homeserver.json
527
- - lib/async/matrix/application_service/config/schema/logging.json
528
- - lib/async/matrix/application_service/config/schema/management_room_texts.json
529
- - lib/async/matrix/application_service/config/schema/matrix.json
530
- - lib/async/matrix/application_service/config/schema/permissions.json
531
- - lib/async/matrix/application_service/config/schema/provisioning.json
532
- - lib/async/matrix/application_service/config/schema/public_media.json
533
- - lib/async/matrix/application_service/config/schema/relay.json
534
- - lib/async/matrix/application_service/config/vivify.rb
535
- - lib/async/matrix/application_service/dispatcher.rb
536
- - lib/async/matrix/application_service/error_response.rb
537
- - lib/async/matrix/application_service/event.rb
538
- - lib/async/matrix/application_service/server.rb
539
- - lib/async/matrix/application_service/transaction.rb
540
- - lib/async/matrix/application_service/transaction_handler.rb
541
- - lib/async/matrix/application_service/transaction_store.rb
542
- - lib/async/matrix/bridge/discord/db.rb
543
- - lib/async/matrix/bridge/discord/db/connection.rb
544
- - lib/async/matrix/bridge/discord/db/file.rb
545
- - lib/async/matrix/bridge/discord/db/guild.rb
546
- - lib/async/matrix/bridge/discord/db/message.rb
547
- - lib/async/matrix/bridge/discord/db/migrations/001_create_users.rb
548
- - lib/async/matrix/bridge/discord/db/migrations/002_create_guilds.rb
549
- - lib/async/matrix/bridge/discord/db/migrations/003_create_portals.rb
550
- - lib/async/matrix/bridge/discord/db/migrations/004_create_puppets.rb
551
- - lib/async/matrix/bridge/discord/db/migrations/005_create_messages.rb
552
- - lib/async/matrix/bridge/discord/db/migrations/006_create_reactions.rb
553
- - lib/async/matrix/bridge/discord/db/migrations/007_create_files.rb
554
- - lib/async/matrix/bridge/discord/db/portal.rb
555
- - lib/async/matrix/bridge/discord/db/puppet.rb
556
- - lib/async/matrix/bridge/discord/db/reaction.rb
557
- - lib/async/matrix/bridge/discord/db/schema.rb
558
- - lib/async/matrix/bridge/discord/db/user.rb
440
+ - lib/async/matrix/app_service_client.rb
441
+ - lib/async/matrix/auth_error.rb
442
+ - lib/async/matrix/bad_json_error.rb
559
443
  - lib/async/matrix/client.rb
444
+ - lib/async/matrix/client/encryption.rb
445
+ - lib/async/matrix/client/rooms.rb
446
+ - lib/async/matrix/client/sync.rb
447
+ - lib/async/matrix/config.rb
448
+ - lib/async/matrix/config/vivify.rb
560
449
  - lib/async/matrix/connection.rb
450
+ - lib/async/matrix/device_store.rb
561
451
  - lib/async/matrix/double_puppet_client.rb
562
452
  - lib/async/matrix/e2ee.rb
453
+ - lib/async/matrix/e2ee/pickle_key.rb
563
454
  - lib/async/matrix/endpoint.rb
564
455
  - lib/async/matrix/error.rb
456
+ - lib/async/matrix/error_response.rb
457
+ - lib/async/matrix/homeserver_error.rb
458
+ - lib/async/matrix/invalid_endpoint_error.rb
565
459
  - lib/async/matrix/media_client.rb
460
+ - lib/async/matrix/not_found_error.rb
566
461
  - lib/async/matrix/notifier.rb
567
- - lib/async/matrix/schema.rb
568
- - lib/async/matrix/schema/registry.rb
569
- - lib/async/matrix/schema/validation_error.rb
462
+ - lib/async/matrix/response_too_large_error.rb
570
463
  - lib/async/matrix/server.rb
571
464
  - lib/async/matrix/stream.rb
572
465
  - lib/async/matrix/version.rb
466
+ - lib/protocol/matrix.rb
467
+ - lib/protocol/matrix/canonical_json.rb
468
+ - lib/protocol/matrix/content.rb
469
+ - lib/protocol/matrix/encrypted_message.rb
470
+ - lib/protocol/matrix/error.rb
471
+ - lib/protocol/matrix/event.rb
472
+ - lib/protocol/matrix/key_backup.rb
473
+ - lib/protocol/matrix/keys.rb
474
+ - lib/protocol/matrix/message_batch.rb
475
+ - lib/protocol/matrix/schema.rb
476
+ - lib/protocol/matrix/schema/registry.rb
477
+ - lib/protocol/matrix/schema/validation_error.rb
478
+ - lib/protocol/matrix/secret_storage.rb
479
+ - lib/protocol/matrix/signing.rb
573
480
  homepage: https://github.com/general-intelligence-systems/async-matrix
574
481
  licenses:
575
482
  - Apache-2.0