forest_admin_rpc_agent 1.13.3 → 1.13.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc072dfa0eb0ee3eb6030d5940d51a267885e520548c4fb2f2e30e6ff729865d
4
- data.tar.gz: 208ff7e08b008015673153e86eefc713f02f6685e4871d9fc413735cb4a9a8ab
3
+ metadata.gz: d53c87e67caf6c3d8d25e0153e5e2d9d70c9c2729068a8fdf9b1ae87fc1d2a9c
4
+ data.tar.gz: 33e47c98fa34e2334d1e11a6bf24a4402d3d71ef7fee86339de5b5a201577c96
5
5
  SHA512:
6
- metadata.gz: bd2154d299d309b5d25b6874b3adabbecf31783f2b9ccbd5046812da27460b42d66261ab8dec2f02121d806c12159fcec46ffef475a549144ccba148d6d39ad8
7
- data.tar.gz: 94d5a94f3277a712cc6e044c3fbff38d9a37e6b281ced666d7fbd32b5f2e4aa51d629635b2ffab77de6cb0a18bc651b2acc0a18c677bf168c667db93ae948f5d
6
+ metadata.gz: 9a8955692b0f1e9665c1449422d59ae40f3806c3be9e16f2a4de9a43a4a5e907ce1d0eafa0699fbdbf5b48cafb9b772cdbdfde12b45f1b9d0b95f819e50fb49c
7
+ data.tar.gz: 5bceed442425fdcbf317aab144eb58f05414d857183fe81a47339504701e1086c8c88938672854705952e5907e2a314b5a9377ddcd480dbdd371a3f03035c2a4
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module ForestAdminRpcAgent
2
4
  module Middleware
3
5
  class Authentication
@@ -19,7 +21,16 @@ module ForestAdminRpcAgent
19
21
  return [401, { 'Content-Type' => 'application/json' }, [{ error: 'Unauthorized' }.to_json]]
20
22
  end
21
23
 
22
- @app.call(env)
24
+ status, headers, response = @app.call(env)
25
+
26
+ if request.get_header('HTTP_FOREST_CALLER')
27
+ caller = ForestAdminDatasourceToolkit::Components::Caller.new(
28
+ **(JSON.parse(request.get_header('HTTP_FOREST_CALLER')).symbolize_keys)
29
+ )
30
+ headers = headers.merge({ caller: caller })
31
+ end
32
+
33
+ [status, headers, response]
23
34
  end
24
35
 
25
36
  private
@@ -12,19 +12,15 @@ module ForestAdminRpcAgent
12
12
  end
13
13
 
14
14
  def handle_request(args)
15
- return '{}' unless args[:params]['collection_name']
15
+ return {} unless args[:params]['collection_name']
16
16
 
17
17
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
18
18
  collection = datasource.get_collection(args[:params]['collection_name'])
19
-
20
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
21
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
22
- )
23
19
  filter = FilterFactory.from_plain_object(args[:params]['filter'])
24
20
  data = args[:params]['data']
25
21
  action = args[:params]['action']
26
22
 
27
- collection.execute(caller, action, data, filter).to_json
23
+ collection.execute(args[:caller], action, data, filter)
28
24
  end
29
25
  end
30
26
  end
@@ -12,24 +12,17 @@ module ForestAdminRpcAgent
12
12
  end
13
13
 
14
14
  def handle_request(args)
15
- return '{}' unless args[:params]['collection_name']
15
+ return {} unless args[:params]['collection_name']
16
16
 
17
17
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
18
18
  collection = datasource.get_collection(args[:params]['collection_name'])
19
-
20
- caller = if args[:params].key?('caller')
21
- ForestAdminDatasourceToolkit::Components::Caller.new(
22
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
23
- )
24
- end
25
19
  filter = FilterFactory.from_plain_object(args[:params]['filter'])
26
20
  metas = args[:params]['metas'] || {}
27
21
  data = args[:params]['data']
28
22
  action = args[:params]['action']
29
23
 
30
- form = collection.get_form(caller, action, data, filter, metas)
31
- form = encode_file_element(form)
32
- form.to_json
24
+ form = collection.get_form(args[:caller], action, data, filter, metas)
25
+ encode_file_element(form)
33
26
  end
34
27
 
35
28
  def encode_file_element(elements)
@@ -12,11 +12,8 @@ module ForestAdminRpcAgent
12
12
  end
13
13
 
14
14
  def handle_request(args)
15
- return '{}' unless args[:params]['collection_name']
15
+ return {} unless args[:params]['collection_name']
16
16
 
17
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
18
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
19
- )
20
17
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
21
18
  collection = datasource.get_collection(args[:params]['collection_name'])
22
19
 
@@ -27,7 +24,7 @@ module ForestAdminRpcAgent
27
24
  )
28
25
  filter = FilterFactory.from_plain_object(args[:params]['filter'])
29
26
 
30
- collection.aggregate(caller, filter, aggregation, args[:params]['limit']).to_json
27
+ collection.aggregate(args[:caller], filter, aggregation, args[:params]['limit'])
31
28
  end
32
29
  end
33
30
  end
@@ -20,7 +20,8 @@ module ForestAdminRpcAgent
20
20
 
21
21
  def register_sinatra(app)
22
22
  app.send(@method.to_sym, @url) do
23
- handle_request(params)
23
+ result = handle_request(params)
24
+ serialize_response(result)
24
25
  end
25
26
  end
26
27
 
@@ -33,8 +34,8 @@ module ForestAdminRpcAgent
33
34
 
34
35
  if status == 200
35
36
  params = request.query_parameters.merge(request.request_parameters)
36
-
37
- [200, { 'Content-Type' => 'application/json' }, [handle_request({ params: params })]]
37
+ result = handle_request({ params: params, caller: headers[:caller] })
38
+ [200, { 'Content-Type' => 'application/json' }, [serialize_response(result)]]
38
39
  else
39
40
  [status, headers, response]
40
41
  end
@@ -47,6 +48,14 @@ module ForestAdminRpcAgent
47
48
  as: @name,
48
49
  route_alias: @name
49
50
  end
51
+
52
+ private
53
+
54
+ def serialize_response(result)
55
+ return result if result.is_a?(String) && (result.start_with?('{', '['))
56
+
57
+ result.to_json
58
+ end
50
59
  end
51
60
  end
52
61
  end
@@ -10,17 +10,13 @@ module ForestAdminRpcAgent
10
10
  end
11
11
 
12
12
  def handle_request(args)
13
- return '{}' unless args[:params]['collection_name']
13
+ return {} unless args[:params]['collection_name']
14
14
 
15
- chart_name = args[:params]['name']
16
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
17
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
18
- )
15
+ chart_name = args[:params]['chart']
19
16
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
20
17
  collection = datasource.get_collection(args[:params]['collection_name'])
21
18
 
22
- primary_key_values = ForestAdminAgent::Utils::Id.unpack_id(collection, args[:params]['record_id'])
23
- collection.render_chart(caller, chart_name, primary_key_values)
19
+ collection.render_chart(caller, chart_name, args[:params]['record_id'])
24
20
  end
25
21
  end
26
22
  end
@@ -8,15 +8,12 @@ module ForestAdminRpcAgent
8
8
  end
9
9
 
10
10
  def handle_request(args)
11
- return '{}' unless args[:params]['collection_name']
11
+ return {} unless args[:params]['collection_name']
12
12
 
13
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
14
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
15
- )
16
13
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
17
14
  collection = datasource.get_collection(args[:params]['collection_name'])
18
15
 
19
- [collection.create(caller, args[:params]['data'])].to_json
16
+ [collection.create(args[:caller], args[:params]['data'].first)]
20
17
  end
21
18
  end
22
19
  end
@@ -8,15 +8,12 @@ module ForestAdminRpcAgent
8
8
  end
9
9
 
10
10
  def handle_request(args)
11
- return '{}' unless args[:params]['chart']
11
+ return {} unless args[:params]['chart']
12
12
 
13
13
  chart_name = args[:params]['chart']
14
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
15
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
16
- )
17
14
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
18
15
 
19
- datasource.render_chart(caller, chart_name).to_json
16
+ datasource.render_chart(args[:caller], chart_name)
20
17
  end
21
18
  end
22
19
  end
@@ -12,16 +12,13 @@ module ForestAdminRpcAgent
12
12
  end
13
13
 
14
14
  def handle_request(args)
15
- return '{}' unless args[:params]['collection_name']
15
+ return {} unless args[:params]['collection_name']
16
16
 
17
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
18
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
19
- )
20
17
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
21
18
  collection = datasource.get_collection(args[:params]['collection_name'])
22
19
  filter = FilterFactory.from_plain_object(args[:params]['filter'])
23
20
 
24
- collection.delete(caller, filter).to_json
21
+ collection.delete(args[:caller], filter)
25
22
  end
26
23
  end
27
24
  end
@@ -12,17 +12,14 @@ module ForestAdminRpcAgent
12
12
  end
13
13
 
14
14
  def handle_request(args)
15
- return '{}' unless args[:params]['collection_name']
15
+ return {} unless args[:params]['collection_name']
16
16
 
17
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
18
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
19
- )
20
17
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
21
18
  collection = datasource.get_collection(args[:params]['collection_name'])
22
19
  projection = Projection.new(args[:params]['projection'])
23
20
  filter = FilterFactory.from_plain_object(args[:params]['filter'])
24
21
 
25
- collection.list(caller, filter, projection).to_json
22
+ collection.list(args[:caller], filter, projection)
26
23
  end
27
24
  end
28
25
  end
@@ -8,14 +8,14 @@ module ForestAdminRpcAgent
8
8
  end
9
9
 
10
10
  def handle_request(args)
11
- return '{}' unless args[:params]['connection_name'] && args[:params]['query']
11
+ return {} unless args[:params]['connection_name'] && args[:params]['query']
12
12
 
13
13
  connection_name = args[:params]['connection_name']
14
14
  query = args[:params]['query']
15
15
  binds = args[:params]['binds'] || []
16
16
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
17
17
 
18
- datasource.execute_native_query(connection_name, query, binds).to_json
18
+ datasource.execute_native_query(connection_name, query, binds)
19
19
  end
20
20
  end
21
21
  end
@@ -18,15 +18,10 @@ module ForestAdminRpcAgent
18
18
  .map { |_name, collection| collection.schema.merge({ name: collection.name }) }
19
19
  .sort_by { |collection| collection[:name] }
20
20
 
21
- connections = []
22
- agent.customizer.datasources.each do |root_datasource|
23
- connections = connections.union(
24
- root_datasource.live_query_connections.keys.map { |connection_name| { name: connection_name } }
25
- )
26
- end
21
+ connections = datasource.live_query_connections.keys.map { |connection_name| { name: connection_name } }
27
22
  schema[:native_query_connections] = connections
28
23
 
29
- schema.to_json
24
+ schema
30
25
  end
31
26
  end
32
27
  end
@@ -5,7 +5,7 @@ module ForestAdminRpcAgent
5
5
  class Sse
6
6
  DEFAULT_HEARTBEAT_INTERVAL = 1
7
7
 
8
- def initialize(url = 'rpc-sse', method = 'get', name = 'rpc_sse', heartbeat_interval: DEFAULT_HEARTBEAT_INTERVAL)
8
+ def initialize(url = 'sse', method = 'get', name = 'rpc_sse', heartbeat_interval: DEFAULT_HEARTBEAT_INTERVAL)
9
9
  @url = url
10
10
  @method = method
11
11
  @name = name
@@ -10,16 +10,13 @@ module ForestAdminRpcAgent
10
10
  end
11
11
 
12
12
  def handle_request(args)
13
- return '{}' unless args[:params]['collection_name']
13
+ return {} unless args[:params]['collection_name']
14
14
 
15
- caller = ForestAdminDatasourceToolkit::Components::Caller.new(
16
- **args[:params]['caller'].to_h.transform_keys(&:to_sym)
17
- )
18
15
  datasource = ForestAdminRpcAgent::Facades::Container.datasource
19
16
  collection = datasource.get_collection(args[:params]['collection_name'])
20
17
  filter = FilterFactory.from_plain_object(args[:params]['filter'])
21
18
 
22
- collection.update(caller, filter, args[:params]['data']).to_json
19
+ collection.update(args[:caller], filter, args[:params]['patch'])
23
20
  end
24
21
  end
25
22
  end
@@ -1,3 +1,3 @@
1
1
  module ForestAdminRpcAgent
2
- VERSION = "1.13.3"
2
+ VERSION = "1.13.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forest_admin_rpc_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.3
4
+ version: 1.13.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthieu
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-11-05 00:00:00.000000000 Z
12
+ date: 2025-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: base64