typecast-ruby 0.1.0 → 0.1.1

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/typecast/client.rb +24 -6
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 783ee042ba45a4a26659e61c50b2e28fb058f03ba0ad11e1573bf43a5abca44a
4
- data.tar.gz: a15b17e6e707b5dc8bf4c524c6a3b50ceee8b0dcada0d34820359905f38042c9
3
+ metadata.gz: 1694bfd6415ffc2b46d014e34add996248c255c68ce5927c76e213bcf3fa86da
4
+ data.tar.gz: afeef1970ae7e132bcd1438b942a25c834b5fe397f789e460c9dbf117bc6ab3f
5
5
  SHA512:
6
- metadata.gz: 66ace71a958a4f2f05e321d9be6ff162f66e8fbf4c327bb300ff29f716a4b4e64d426cc9034fb830452a97689a2e28ad6143135d501c1e8f024d7d3ab6926c2a
7
- data.tar.gz: 1145c85137b9fb6253b3db418c8f50ecd53afe244c98a8c6df3b867ed9dc94b24f49f34ee98707fd76f6dc8cbfa1c39ae84698ec31895dff619492731e2ae5f3
6
+ metadata.gz: f45bc9e47497cb6b7cd8d01a9d3ceaf767568b515e1ab6254ebf0d135d7c82cb4a743bb523dcf1bb227faa87963a0ab8a732ea36024e4deec70c53c307ae2c6f
7
+ data.tar.gz: '0388fe2ac016617905bd89af4dfff027210705866a47012d0c544a822d3dd5dca43fb6dd6fe70cb45c05a90130a4f4f440b453e647423c162c8ec2a08eb8247f'
@@ -14,8 +14,9 @@ module Typecast
14
14
  attr_reader :api_key, :base_url
15
15
 
16
16
  def initialize(api_key: ENV["TYPECAST_API_KEY"], base_url: ENV["TYPECAST_API_HOST"] || DEFAULT_BASE_URL, open_timeout: 10, read_timeout: 30)
17
- @api_key = api_key.to_s
17
+ @api_key = api_key.to_s.strip
18
18
  @base_url = normalize_base_url(base_url)
19
+ validate_api_key!
19
20
  @open_timeout = open_timeout
20
21
  @read_timeout = read_timeout
21
22
  end
@@ -81,11 +82,11 @@ module Typecast
81
82
  private
82
83
 
83
84
  def request_json(method, path, body = nil, query = nil)
84
- headers = { "X-API-KEY" => api_key, "Content-Type" => "application/json" }
85
+ headers = auth_headers.merge("Content-Type" => "application/json")
85
86
  request_raw(method, path, body.nil? ? nil : JSON.generate(body), headers, query)
86
87
  end
87
88
 
88
- def request_raw(method, path, body = nil, headers = { "X-API-KEY" => api_key }, query = nil)
89
+ def request_raw(method, path, body = nil, headers = auth_headers, query = nil)
89
90
  uri = build_uri(path, query)
90
91
  request = request_for(method, uri)
91
92
  headers.each { |key, value| request[key] = value }
@@ -121,13 +122,26 @@ module Typecast
121
122
  :post,
122
123
  path,
123
124
  body,
124
- {
125
- "X-API-KEY" => api_key,
125
+ auth_headers.merge(
126
126
  "Content-Type" => "multipart/form-data; boundary=#{boundary}"
127
- }
127
+ )
128
128
  )
129
129
  end
130
130
 
131
+ def auth_headers
132
+ api_key.empty? ? {} : { "X-API-KEY" => api_key }
133
+ end
134
+
135
+ def validate_api_key!
136
+ return unless api_key.empty? && default_base_url?
137
+
138
+ raise ArgumentError, "api_key is required for the default Typecast API host"
139
+ end
140
+
141
+ def default_base_url?
142
+ normalized_base_url(base_url).casecmp?(normalized_base_url(DEFAULT_BASE_URL))
143
+ end
144
+
131
145
  def validate_clone_inputs(audio, name)
132
146
  raise ArgumentError, "audio must be 25MB or smaller" if audio.bytesize > Models::CLONING_MAX_FILE_SIZE
133
147
  raise ArgumentError, "name must be 1-#{Models::CLONING_NAME_MAX_LENGTH} chars" if name.empty? || name.length > Models::CLONING_NAME_MAX_LENGTH
@@ -145,6 +159,10 @@ module Typecast
145
159
  raise ArgumentError, "base_url must be a valid URL"
146
160
  end
147
161
 
162
+ def normalized_base_url(value)
163
+ value.to_s.strip.sub(%r{/+\z}, "")
164
+ end
165
+
148
166
  def local_uri?(uri)
149
167
  uri.scheme == "http" && ["localhost", "127.0.0.1", "::1"].include?(uri.hostname)
150
168
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typecast-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neosapience
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-05 00:00:00.000000000 Z
11
+ date: 2026-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest