Class: BrainzLab::Vault::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/brainzlab/vault/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Client

Returns a new instance of Client.



10
11
12
13
# File 'lib/brainzlab/vault/client.rb', line 10

def initialize(config)
  @config = config
  @base_url = config.vault_url || 'https://vault.brainzlab.ai'
end

Instance Method Details

#delete(key) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/brainzlab/vault/client.rb', line 68

def delete(key)
  response = request(:delete, "/api/v1/secrets/#{CGI.escape(key)}")
  response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPNoContent)
rescue StandardError => e
  log_error('delete', e)
  false
end

#export(environment:, format:) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/brainzlab/vault/client.rb', line 76

def export(environment:, format:)
  params = { format: format }
  response = request(
    :get,
    '/api/v1/sync/export',
    headers: { 'X-Vault-Environment' => environment },
    params: params
  )

  return {} unless response.is_a?(Net::HTTPSuccess)

  case format
  when :json
    data = JSON.parse(response.body, symbolize_names: true)
    data[:secrets] || {}
  else
    response.body
  end
rescue StandardError => e
  log_error('export', e)
  format == :json ? {} : ''
end

#get(key, environment:) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/brainzlab/vault/client.rb', line 15

def get(key, environment:)
  response = request(
    :get,
    "/api/v1/secrets/#{CGI.escape(key)}",
    headers: { 'X-Vault-Environment' => environment }
  )

  return nil unless response.is_a?(Net::HTTPSuccess)

  data = JSON.parse(response.body, symbolize_names: true)
  data[:value]
rescue StandardError => e
  log_error('get', e)
  nil
end

#get_provider_key(provider:, model_type: 'llm') ⇒ Object

Get a specific provider key



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/brainzlab/vault/client.rb', line 133

def get_provider_key(provider:, model_type: 'llm')
  response = request(
    :get,
    '/api/v1/provider_keys/resolve',
    params: { provider: provider, model_type: model_type }
  )

  return nil unless response.is_a?(Net::HTTPSuccess)

  data = JSON.parse(response.body, symbolize_names: true)
  data[:key]
rescue StandardError => e
  log_error('get_provider_key', e)
  nil
end

#get_provider_keysObject

Get all provider keys for the current project Returns a hash of provider => decrypted_key



115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/brainzlab/vault/client.rb', line 115

def get_provider_keys
  response = request(:get, '/api/v1/provider_keys/bulk')

  return {} unless response.is_a?(Net::HTTPSuccess)

  data = JSON.parse(response.body, symbolize_names: true)
  # Convert to simple hash: { openai: "sk-...", anthropic: "sk-..." }
  keys = {}
  (data[:keys] || []).each do |key_data|
    keys[key_data[:provider].to_sym] = key_data[:key]
  end
  keys
rescue StandardError => e
  log_error('get_provider_keys', e)
  {}
end

#list(environment:) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/brainzlab/vault/client.rb', line 52

def list(environment:)
  response = request(
    :get,
    '/api/v1/secrets',
    headers: { 'X-Vault-Environment' => environment }
  )

  return [] unless response.is_a?(Net::HTTPSuccess)

  data = JSON.parse(response.body, symbolize_names: true)
  data[:secrets] || []
rescue StandardError => e
  log_error('list', e)
  []
end

#provision(project_id:, app_name:) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/brainzlab/vault/client.rb', line 99

def provision(project_id:, app_name:)
  response = request(
    :post,
    '/api/v1/projects/provision',
    body: { project_id: project_id, app_name: app_name },
    use_service_key: true
  )

  response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPCreated)
rescue StandardError => e
  log_error('provision', e)
  false
end

#set(key, value, environment:, description: nil, note: nil) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/brainzlab/vault/client.rb', line 31

def set(key, value, environment:, description: nil, note: nil)
  body = {
    key: key,
    value: value,
    description: description,
    note: note
  }.compact

  response = request(
    :post,
    '/api/v1/secrets',
    headers: { 'X-Vault-Environment' => environment },
    body: body
  )

  response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPCreated)
rescue StandardError => e
  log_error('set', e)
  false
end