lex-microsoft_teams 0.6.23 → 0.6.24
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/CHANGELOG.md +6 -0
- data/CLAUDE.md +1 -1
- data/lib/legion/extensions/microsoft_teams/actors/absorb_meeting.rb +60 -0
- data/lib/legion/extensions/microsoft_teams/helpers/graph_client.rb +75 -0
- data/lib/legion/extensions/microsoft_teams/version.rb +1 -1
- data/lib/legion/extensions/microsoft_teams.rb +1 -0
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 89010807fc32d72ba6fcefdd2239508ae1d384a14162265d3f97b6098d3114ea
|
|
4
|
+
data.tar.gz: 9b7909be2dfafd3242fb8407acfa2f0cf0d81365bb4d9606e475e0a40061ffa0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 32d5556151443500353755e7584ca526f778ebff2bdfeb19cd76ef53fc0f660e4ffc4b4ba6468834e06e5841edfc9b3fd3203f36acf03dc2436e40a82d0bf167
|
|
7
|
+
data.tar.gz: 5f107a3b5ea8cc0afdd662bf170fc06c74b4ba982e966d57b9d876b0e39bc3f422c43b36dc1f3ede9c502acf914f23f83bf7861ddf10f367df09941032832ae6
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.6.24] - 2026-03-28
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- `Actors::AbsorbMeeting` — Subscription actor that listens on `lex.microsoft_teams.absorbers.meeting.absorb` and delegates to `Absorbers::Meeting#absorb`
|
|
9
|
+
- `Helpers::GraphClient` — mixin module wrapping `Helpers::Client#graph_connection` with `graph_get`, `graph_post`, `graph_paginate`, and an inline `GraphError` class for responses other than 200, 201, 204, or 404; 401/403 raise with descriptive messages including the Graph error body when available
|
|
10
|
+
|
|
5
11
|
### Fixed
|
|
6
12
|
- `Absorbers::Meeting#graph_token` — rescue now captures the exception as `=> e` and logs a warning, satisfying the rescue-logging lint rule
|
|
7
13
|
|
data/CLAUDE.md
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module MicrosoftTeams
|
|
6
|
+
module Actor
|
|
7
|
+
class AbsorbMeeting < Legion::Extensions::Actors::Subscription
|
|
8
|
+
def runner_class = 'Legion::Extensions::MicrosoftTeams::Absorbers::Meeting'
|
|
9
|
+
def runner_function = 'absorb'
|
|
10
|
+
def check_subtask? = false
|
|
11
|
+
def generate_task? = false
|
|
12
|
+
|
|
13
|
+
def enabled?
|
|
14
|
+
defined?(Legion::Extensions::Absorbers::Base) &&
|
|
15
|
+
defined?(Legion::Extensions::MicrosoftTeams::Absorbers::Meeting)
|
|
16
|
+
rescue StandardError => e
|
|
17
|
+
log.debug("AbsorbMeeting#enabled?: #{e.message}")
|
|
18
|
+
false
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def work(payload)
|
|
22
|
+
parsed = parse_payload(payload)
|
|
23
|
+
absorber = Absorbers::Meeting.new
|
|
24
|
+
result = absorber.absorb(
|
|
25
|
+
url: parsed[:url],
|
|
26
|
+
metadata: parsed[:metadata] || {},
|
|
27
|
+
context: parsed[:context] || {}
|
|
28
|
+
)
|
|
29
|
+
if result.respond_to?(:[]) && result.key?(:success)
|
|
30
|
+
if result[:success]
|
|
31
|
+
ack!
|
|
32
|
+
else
|
|
33
|
+
log.error("AbsorbMeeting actor absorb failed: #{result.inspect}")
|
|
34
|
+
reject!(requeue: false)
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
ack!
|
|
38
|
+
end
|
|
39
|
+
result
|
|
40
|
+
rescue StandardError => e
|
|
41
|
+
log.error("AbsorbMeeting actor error: #{e.message}")
|
|
42
|
+
reject!(requeue: false)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def parse_payload(payload)
|
|
48
|
+
data = payload.is_a?(String) ? json_load(payload) : payload
|
|
49
|
+
return {} unless data.is_a?(Hash)
|
|
50
|
+
|
|
51
|
+
data.transform_keys(&:to_sym)
|
|
52
|
+
rescue StandardError => e
|
|
53
|
+
log.debug("AbsorbMeeting#parse_payload: #{e.message}")
|
|
54
|
+
{}
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module MicrosoftTeams
|
|
6
|
+
module Helpers
|
|
7
|
+
module GraphClient
|
|
8
|
+
class GraphError < StandardError; end
|
|
9
|
+
|
|
10
|
+
def graph_get(path, token:, params: {})
|
|
11
|
+
connection = graph_connection(token: token)
|
|
12
|
+
response = connection.get(path, params)
|
|
13
|
+
handle_graph_response(response, path)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def graph_paginate(path, token:, params: {}, max_pages: 10)
|
|
17
|
+
results = []
|
|
18
|
+
next_link = nil
|
|
19
|
+
page = 0
|
|
20
|
+
|
|
21
|
+
loop do
|
|
22
|
+
current_path = next_link || path
|
|
23
|
+
data = graph_get(current_path, token: token, params: page.zero? ? params : {})
|
|
24
|
+
break if data.nil?
|
|
25
|
+
|
|
26
|
+
items = data['value'] || data[:value]
|
|
27
|
+
results.concat(Array(items)) if items
|
|
28
|
+
|
|
29
|
+
next_link = data['@odata.nextLink'] || data[:'@odata.nextLink']
|
|
30
|
+
page += 1
|
|
31
|
+
break if next_link.nil? || page >= max_pages
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
results
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def graph_post(path, token:, body: {})
|
|
38
|
+
connection = graph_connection(token: token)
|
|
39
|
+
response = connection.post(path) do |req|
|
|
40
|
+
req.body = body
|
|
41
|
+
end
|
|
42
|
+
handle_graph_response(response, path)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
def handle_graph_response(response, path)
|
|
48
|
+
error_message =
|
|
49
|
+
if response.body.respond_to?(:dig)
|
|
50
|
+
response.body.dig('error', 'message') ||
|
|
51
|
+
response.body.dig(:error, :message)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
case response.status
|
|
55
|
+
when 200, 201
|
|
56
|
+
response.body
|
|
57
|
+
when 204, 404
|
|
58
|
+
nil
|
|
59
|
+
when 401
|
|
60
|
+
detail = error_message || 'Access token is missing, expired, or invalid.'
|
|
61
|
+
raise GraphError, "Graph API 401 Unauthorized on #{path}: #{detail}"
|
|
62
|
+
when 403
|
|
63
|
+
detail = error_message || 'Caller does not have sufficient permissions to perform this action.'
|
|
64
|
+
raise GraphError, "Graph API 403 Forbidden on #{path}: #{detail}"
|
|
65
|
+
else
|
|
66
|
+
base_message = "Graph API #{response.status} on #{path}"
|
|
67
|
+
base_message = "#{base_message}: #{error_message}" if error_message
|
|
68
|
+
raise GraphError, base_message
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -33,6 +33,7 @@ require 'legion/extensions/microsoft_teams/helpers/callback_server'
|
|
|
33
33
|
require 'legion/extensions/microsoft_teams/helpers/browser_auth'
|
|
34
34
|
require 'legion/extensions/microsoft_teams/helpers/permission_guard'
|
|
35
35
|
require 'legion/extensions/microsoft_teams/helpers/transform_definitions'
|
|
36
|
+
require 'legion/extensions/microsoft_teams/helpers/graph_client'
|
|
36
37
|
|
|
37
38
|
# Transport
|
|
38
39
|
if defined?(Legion::Transport)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-microsoft_teams
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.6.
|
|
4
|
+
version: 0.6.24
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -176,6 +176,7 @@ files:
|
|
|
176
176
|
- lex-microsoft_teams.gemspec
|
|
177
177
|
- lib/legion/extensions/microsoft_teams.rb
|
|
178
178
|
- lib/legion/extensions/microsoft_teams/absorbers/meeting.rb
|
|
179
|
+
- lib/legion/extensions/microsoft_teams/actors/absorb_meeting.rb
|
|
179
180
|
- lib/legion/extensions/microsoft_teams/actors/api_ingest.rb
|
|
180
181
|
- lib/legion/extensions/microsoft_teams/actors/auth_validator.rb
|
|
181
182
|
- lib/legion/extensions/microsoft_teams/actors/cache_bulk_ingest.rb
|
|
@@ -194,6 +195,7 @@ files:
|
|
|
194
195
|
- lib/legion/extensions/microsoft_teams/helpers/browser_auth.rb
|
|
195
196
|
- lib/legion/extensions/microsoft_teams/helpers/callback_server.rb
|
|
196
197
|
- lib/legion/extensions/microsoft_teams/helpers/client.rb
|
|
198
|
+
- lib/legion/extensions/microsoft_teams/helpers/graph_client.rb
|
|
197
199
|
- lib/legion/extensions/microsoft_teams/helpers/high_water_mark.rb
|
|
198
200
|
- lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb
|
|
199
201
|
- lib/legion/extensions/microsoft_teams/helpers/prompt_resolver.rb
|