Class: StackShift::AssetsClient

Inherits:
Object
  • Object
show all
Defined in:
lib/stackshift/assets_client.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, base_url: "https://api.stackshift.cloud/api/v1", cdn_base_url: "https://cdn.stackshift.cloud") ⇒ AssetsClient

Returns a new instance of AssetsClient.

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
# File 'lib/stackshift/assets_client.rb', line 11

def initialize(api_key:, base_url: "https://api.stackshift.cloud/api/v1", cdn_base_url: "https://cdn.stackshift.cloud")
  raise ArgumentError, "StackShift SDK requires an API key" if api_key.to_s.strip.empty?

  @api_key = api_key
  @base_url = base_url.sub(%r{/$}, "")
  @cdn_base_url = cdn_base_url.sub(%r{/$}, "")
end

Instance Method Details

#ai(asset_id) ⇒ Object



152
153
154
# File 'lib/stackshift/assets_client.rb', line 152

def ai(asset_id)
	request(:get, "/assets/#{escape(asset_id)}/ai")
end

#analyticsObject



204
205
206
# File 'lib/stackshift/assets_client.rb', line 204

def analytics
	request(:get, "/assets/analytics")
end

#analyze(asset_id, idempotency_key: nil) ⇒ Object



148
149
150
# File 'lib/stackshift/assets_client.rb', line 148

def analyze(asset_id, idempotency_key: nil)
	asset_job("/assets/#{escape(asset_id)}/ai/analyze", idempotency_key)
end

#branch_url(asset_id, branch, token: nil) ⇒ Object



303
304
305
306
307
# File 'lib/stackshift/assets_client.rb', line 303

def branch_url(asset_id, branch, token: nil)
	prefix = token ? "/private/assets" : "/assets"
	url = "#{@cdn_base_url}#{prefix}/#{escape(asset_id)}/branches/#{escape(branch)}"
	token ? "#{url}?token=#{escape(token)}" : url
end

#bulk(action:, items:, idempotency_key: nil, **options) ⇒ Object



240
241
242
243
# File 'lib/stackshift/assets_client.rb', line 240

def bulk(action:, items:, idempotency_key: nil, **options)
	headers = idempotency_key ? { "Idempotency-Key" => idempotency_key } : {}
	request(:post, "/assets/bulk", body: options.merge(action: action, items: items), headers: headers)
end

#cancel_job(job_id) ⇒ Object



144
145
146
# File 'lib/stackshift/assets_client.rb', line 144

def cancel_job(job_id)
	request(:post, "/assets/jobs/#{escape(job_id)}/cancel")
end

#cancel_upload_session(session_id) ⇒ Object



69
70
71
# File 'lib/stackshift/assets_client.rb', line 69

def cancel_upload_session(session_id)
  request(:delete, "/assets/upload-sessions/#{escape(session_id)}")
end

#collectionsObject



261
262
263
# File 'lib/stackshift/assets_client.rb', line 261

def collections
	request(:get, "/assets/collections")
end

#complete_upload_session(session_id) ⇒ Object



61
62
63
# File 'lib/stackshift/assets_client.rb', line 61

def complete_upload_session(session_id)
  request(:post, "/assets/upload-sessions/#{escape(session_id)}/complete")
end

#create_branch(asset_id, name, from_version_id: nil) ⇒ Object



249
250
251
# File 'lib/stackshift/assets_client.rb', line 249

def create_branch(asset_id, name, from_version_id: nil)
	request(:post, "/assets/#{escape(asset_id)}/branches", body: compact(name: name, from_version_id: from_version_id))
end

#create_bucket(**policy) ⇒ Object



82
83
84
# File 'lib/stackshift/assets_client.rb', line 82

def create_bucket(**policy)
  request(:post, "/assets/buckets", body: compact(policy))
end

#create_collection(**collection) ⇒ Object



265
266
267
# File 'lib/stackshift/assets_client.rb', line 265

def create_collection(**collection)
	request(:post, "/assets/collections", body: compact(collection))
end

#create_domain(domain) ⇒ Object



188
189
190
# File 'lib/stackshift/assets_client.rb', line 188

def create_domain(domain)
	request(:post, "/assets/domains", body: { domain: domain })
end

#create_lifecycle_rule(**rule) ⇒ Object



176
177
178
# File 'lib/stackshift/assets_client.rb', line 176

def create_lifecycle_rule(**rule)
	request(:post, "/assets/lifecycle-rules", body: compact(rule))
end

#create_saved_search(**search) ⇒ Object



281
282
283
# File 'lib/stackshift/assets_client.rb', line 281

def create_saved_search(**search)
	request(:post, "/assets/saved-searches", body: compact(search))
end

#create_transformation(name, **options) ⇒ Object



122
123
124
# File 'lib/stackshift/assets_client.rb', line 122

def create_transformation(name, **options)
	request(:post, "/assets/transformations", body: compact(options.merge(name: name)))
end

#create_upload_session(idempotency_key: nil, **options) ⇒ Object



41
42
43
44
# File 'lib/stackshift/assets_client.rb', line 41

def create_upload_session(idempotency_key: nil, **options)
  headers = idempotency_key ? { "Idempotency-Key" => idempotency_key } : {}
  request(:post, "/assets/upload-sessions", body: compact(options), headers: headers)
end

#create_webhook(url, event_types: ['asset.*']) ⇒ Object



216
217
218
# File 'lib/stackshift/assets_client.rb', line 216

def create_webhook(url, event_types: ['asset.*'])
	request(:post, '/assets/webhooks', body: { url: url, event_types: event_types })
end

#delete(asset_id, revision:, idempotency_key: nil) ⇒ Object



27
28
29
30
31
# File 'lib/stackshift/assets_client.rb', line 27

def delete(asset_id, revision:, idempotency_key: nil)
		headers = if_match(revision)
		headers["Idempotency-Key"] = idempotency_key if idempotency_key
  request(:delete, "/assets/#{escape(asset_id)}", headers: headers)
end

#delete_bucket(bucket_id, revision:) ⇒ Object



90
91
92
# File 'lib/stackshift/assets_client.rb', line 90

def delete_bucket(bucket_id, revision:)
  request(:delete, "/assets/buckets/#{escape(bucket_id)}", headers: if_match(revision))
end

#delete_collection(collection_id) ⇒ Object



273
274
275
# File 'lib/stackshift/assets_client.rb', line 273

def delete_collection(collection_id)
	request(:delete, "/assets/collections/#{escape(collection_id)}")
end

#delete_domain(domain_id) ⇒ Object



200
201
202
# File 'lib/stackshift/assets_client.rb', line 200

def delete_domain(domain_id)
	request(:delete, "/assets/domains/#{escape(domain_id)}")
end

#delete_lifecycle_rule(rule_id) ⇒ Object



184
185
186
# File 'lib/stackshift/assets_client.rb', line 184

def delete_lifecycle_rule(rule_id)
	request(:delete, "/assets/lifecycle-rules/#{escape(rule_id)}")
end

#delete_saved_search(search_id) ⇒ Object



289
290
291
# File 'lib/stackshift/assets_client.rb', line 289

def delete_saved_search(search_id)
	request(:delete, "/assets/saved-searches/#{escape(search_id)}")
end

#delete_transformation(name) ⇒ Object



126
127
128
# File 'lib/stackshift/assets_client.rb', line 126

def delete_transformation(name)
	request(:delete, "/assets/transformations/#{escape(name)}")
end

#delete_webhook(webhook_id) ⇒ Object



224
225
226
# File 'lib/stackshift/assets_client.rb', line 224

def delete_webhook(webhook_id)
	request(:delete, "/assets/webhooks/#{escape(webhook_id)}")
end

#events(limit: 50) ⇒ Object



212
213
214
# File 'lib/stackshift/assets_client.rb', line 212

def events(limit: 50)
	request(:get, "/assets/events", query: { limit: limit })
end

#get(asset_id) ⇒ Object



23
24
25
# File 'lib/stackshift/assets_client.rb', line 23

def get(asset_id)
  request(:get, "/assets/#{escape(asset_id)}")
end

#get_ai_configObject



106
107
108
# File 'lib/stackshift/assets_client.rb', line 106

def get_ai_config
	request(:get, "/assets/ai/config")
end

#get_policyObject



110
111
112
# File 'lib/stackshift/assets_client.rb', line 110

def get_policy
	request(:get, "/assets/policy")
end

#immutable_version_url(asset_id, version_id, filename = "asset") ⇒ Object



293
294
295
# File 'lib/stackshift/assets_client.rb', line 293

def immutable_version_url(asset_id, version_id, filename = "asset")
  "#{@cdn_base_url}/assets/#{escape(asset_id)}/versions/#{escape(version_id)}/#{escape(filename)}"
end

#job(job_id) ⇒ Object



140
141
142
# File 'lib/stackshift/assets_client.rb', line 140

def job(job_id)
	request(:get, "/assets/jobs/#{escape(job_id)}")
end

#list(**filters) ⇒ Object



19
20
21
# File 'lib/stackshift/assets_client.rb', line 19

def list(**filters)
  request(:get, "/assets", query: compact(filters))
end

#list_bucketsObject



78
79
80
# File 'lib/stackshift/assets_client.rb', line 78

def list_buckets
  request(:get, "/assets/buckets")
end

#list_domainsObject



192
193
194
# File 'lib/stackshift/assets_client.rb', line 192

def list_domains
	request(:get, "/assets/domains")
end

#list_lifecycle_rulesObject



180
181
182
# File 'lib/stackshift/assets_client.rb', line 180

def list_lifecycle_rules
	request(:get, "/assets/lifecycle-rules")
end

#list_transformationsObject



118
119
120
# File 'lib/stackshift/assets_client.rb', line 118

def list_transformations
	request(:get, "/assets/transformations")
end

#list_webhook_deliveries(webhook_id, limit: 50) ⇒ Object



228
229
230
# File 'lib/stackshift/assets_client.rb', line 228

def list_webhook_deliveries(webhook_id, limit: 50)
	request(:get, "/assets/webhooks/#{escape(webhook_id)}/deliveries", query: { limit: limit })
end

#list_webhooksObject



220
221
222
# File 'lib/stackshift/assets_client.rb', line 220

def list_webhooks
	request(:get, '/assets/webhooks')
end

#moderate(asset_id, idempotency_key: nil) ⇒ Object



156
157
158
# File 'lib/stackshift/assets_client.rb', line 156

def moderate(asset_id, idempotency_key: nil)
	asset_job("/assets/#{escape(asset_id)}/moderation", idempotency_key)
end

#patch(asset_id, revision:, **changes) ⇒ Object



94
95
96
# File 'lib/stackshift/assets_client.rb', line 94

def patch(asset_id, revision:, **changes)
  request(:patch, "/assets/#{escape(asset_id)}", body: compact(changes), headers: if_match(revision))
end

#patch_metadata(asset_id, metadata, revision:) ⇒ Object



102
103
104
# File 'lib/stackshift/assets_client.rb', line 102

def (asset_id, , revision:)
  request(:patch, "/assets/#{escape(asset_id)}/metadata", body: { metadata:  }, headers: if_match(revision))
end

#promote_branch(asset_id, branch) ⇒ Object



257
258
259
# File 'lib/stackshift/assets_client.rb', line 257

def promote_branch(asset_id, branch)
	request(:post, "/assets/#{escape(asset_id)}/branches/#{escape(branch)}/promote")
end

#purge(asset_id) ⇒ Object



236
237
238
# File 'lib/stackshift/assets_client.rb', line 236

def purge(asset_id)
	request(:post, "/assets/#{escape(asset_id)}/purge")
end

#replace(asset_id, file_path, revision:, **options) ⇒ Object



37
38
39
# File 'lib/stackshift/assets_client.rb', line 37

def replace(asset_id, file_path, revision:, **options)
  multipart(:put, "/assets/#{escape(asset_id)}/replace", file_path, options, headers: if_match(revision))
end

#request_background_removal(asset_id, idempotency_key: nil) ⇒ Object



172
173
174
# File 'lib/stackshift/assets_client.rb', line 172

def request_background_removal(asset_id, idempotency_key: nil)
	asset_job("/assets/#{escape(asset_id)}/background-remove", idempotency_key)
end

#request_smart_crop(asset_id, idempotency_key: nil) ⇒ Object



168
169
170
# File 'lib/stackshift/assets_client.rb', line 168

def request_smart_crop(asset_id, idempotency_key: nil)
	asset_job("/assets/#{escape(asset_id)}/smart-crop", idempotency_key)
end

#request_transcript(asset_id, idempotency_key: nil) ⇒ Object



164
165
166
# File 'lib/stackshift/assets_client.rb', line 164

def request_transcript(asset_id, idempotency_key: nil)
	asset_job("/assets/#{escape(asset_id)}/transcript", idempotency_key)
end

#restore_version(asset_id, version_id) ⇒ Object



253
254
255
# File 'lib/stackshift/assets_client.rb', line 253

def restore_version(asset_id, version_id)
	request(:post, "/assets/#{escape(asset_id)}/versions/#{escape(version_id)}/restore")
end

#resume_upload_session(session_id) ⇒ Object



65
66
67
# File 'lib/stackshift/assets_client.rb', line 65

def resume_upload_session(session_id)
  request(:get, "/assets/upload-sessions/#{escape(session_id)}")
end

#retry_webhook_delivery(delivery_id) ⇒ Object



232
233
234
# File 'lib/stackshift/assets_client.rb', line 232

def retry_webhook_delivery(delivery_id)
	request(:post, "/assets/webhook-deliveries/#{escape(delivery_id)}/retry")
end

#saved_searchesObject



277
278
279
# File 'lib/stackshift/assets_client.rb', line 277

def saved_searches
	request(:get, "/assets/saved-searches")
end

#set_tags(asset_id, tags, revision:) ⇒ Object



98
99
100
# File 'lib/stackshift/assets_client.rb', line 98

def set_tags(asset_id, tags, revision:)
  request(:put, "/assets/#{escape(asset_id)}/tags", body: { tags: tags }, headers: if_match(revision))
end

#signed_transform_url(asset_id, **options) ⇒ Object



130
131
132
# File 'lib/stackshift/assets_client.rb', line 130

def signed_transform_url(asset_id, **options)
	request(:post, "/assets/#{escape(asset_id)}/transform-url", body: compact(options))
end

#signed_upload_url(idempotency_key: nil, **options) ⇒ Object



46
47
48
49
# File 'lib/stackshift/assets_client.rb', line 46

def signed_upload_url(idempotency_key: nil, **options)
  headers = idempotency_key ? { "Idempotency-Key" => idempotency_key } : {}
  request(:post, "/assets/upload-url", body: compact(options), headers: headers)
end

#signed_url(asset_id, expires_in: "10m", max_downloads: nil) ⇒ Object



73
74
75
76
# File 'lib/stackshift/assets_client.rb', line 73

def signed_url(asset_id, expires_in: "10m", max_downloads: nil)
  request(:post, "/assets/#{escape(asset_id)}/signed-url",
body: compact(expires_in: expires_in, max_downloads: max_downloads))
end

#transcript(asset_id) ⇒ Object



160
161
162
# File 'lib/stackshift/assets_client.rb', line 160

def transcript(asset_id)
	request(:get, "/assets/#{escape(asset_id)}/transcript")
end

#update_ai_config(revision:, enabled_actions:, monthly_spend_cap_micros:) ⇒ Object



134
135
136
137
138
# File 'lib/stackshift/assets_client.rb', line 134

def update_ai_config(revision:, enabled_actions:, monthly_spend_cap_micros:)
	request(:put, "/assets/ai/config", body: {
		enabled_actions: enabled_actions, monthly_spend_cap_micros: monthly_spend_cap_micros
	}, headers: if_match(revision))
end

#update_bucket(bucket_id, revision:, **policy) ⇒ Object



86
87
88
# File 'lib/stackshift/assets_client.rb', line 86

def update_bucket(bucket_id, revision:, **policy)
  request(:put, "/assets/buckets/#{escape(bucket_id)}", body: compact(policy), headers: if_match(revision))
end

#update_collection(collection_id, **collection) ⇒ Object



269
270
271
# File 'lib/stackshift/assets_client.rb', line 269

def update_collection(collection_id, **collection)
	request(:put, "/assets/collections/#{escape(collection_id)}", body: compact(collection))
end

#update_policy(**policy) ⇒ Object



114
115
116
# File 'lib/stackshift/assets_client.rb', line 114

def update_policy(**policy)
	request(:put, "/assets/policy", body: compact(policy))
end

#update_saved_search(search_id, **search) ⇒ Object



285
286
287
# File 'lib/stackshift/assets_client.rb', line 285

def update_saved_search(search_id, **search)
	request(:put, "/assets/saved-searches/#{escape(search_id)}", body: compact(search))
end

#upload(file_path, **options) ⇒ Object



33
34
35
# File 'lib/stackshift/assets_client.rb', line 33

def upload(file_path, **options)
  multipart(:post, "/assets/upload", file_path, options)
end

#upload_chunk(upload_url_or_token, part_number, bytes) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/stackshift/assets_client.rb', line 51

def upload_chunk(upload_url_or_token, part_number, bytes)
  target = if upload_url_or_token.start_with?("http")
             upload_url_or_token.sub(%r{/$}, "")
           else
             @base_url.sub(%r{/api/v1$}, "") + "/uploads/#{escape(upload_url_or_token)}"
           end
  request_absolute(:put, "#{target}/parts/#{part_number}", body: bytes, json: false, authenticated: false,
		headers: { "Content-Type" => "application/octet-stream", "X-Content-SHA256" => Digest::SHA256.hexdigest(bytes) })
end

#usage_summaryObject



208
209
210
# File 'lib/stackshift/assets_client.rb', line 208

def usage_summary
	request(:get, "/assets/summary")
end

#verify_domain(domain_id) ⇒ Object



196
197
198
# File 'lib/stackshift/assets_client.rb', line 196

def verify_domain(domain_id)
	request(:post, "/assets/domains/#{escape(domain_id)}/verify")
end

#version_url(asset_id, version_id, token: nil) ⇒ Object



297
298
299
300
301
# File 'lib/stackshift/assets_client.rb', line 297

def version_url(asset_id, version_id, token: nil)
	prefix = token ? "/private/assets" : "/assets"
	url = "#{@cdn_base_url}#{prefix}/#{escape(asset_id)}/versions/#{escape(version_id)}"
	token ? "#{url}?token=#{escape(token)}" : url
end

#versions(asset_id) ⇒ Object



245
246
247
# File 'lib/stackshift/assets_client.rb', line 245

def versions(asset_id)
	request(:get, "/assets/#{escape(asset_id)}/versions")
end

#video_url(asset_id, kind, profile = "default", token: nil) ⇒ Object



309
310
311
312
313
# File 'lib/stackshift/assets_client.rb', line 309

def video_url(asset_id, kind, profile = "default", token: nil)
	prefix = token ? "/private/assets" : "/assets"
	url = "#{@cdn_base_url}#{prefix}/#{escape(asset_id)}/video/#{escape(kind)}/#{escape(profile)}"
	token ? "#{url}?token=#{escape(token)}" : url
end