noresponse 2.0.18 → 2.0.19

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/lib/no_response/models/operations/createwebhookendpoint_response.rb +34 -0
  3. data/lib/no_response/models/operations/createwebhookendpoint_response.rbi +20 -0
  4. data/lib/no_response/models/operations/deletewebhookendpoint_request.rb +29 -0
  5. data/lib/no_response/models/operations/deletewebhookendpoint_request.rbi +14 -0
  6. data/lib/no_response/models/operations/deletewebhookendpoint_response.rb +28 -0
  7. data/lib/no_response/models/operations/deletewebhookendpoint_response.rbi +14 -0
  8. data/lib/no_response/models/operations/listwebhookendpoints_response.rb +32 -0
  9. data/lib/no_response/models/operations/listwebhookendpoints_response.rbi +20 -0
  10. data/lib/no_response/models/operations/rotatewebhooksigningkey_request.rb +33 -0
  11. data/lib/no_response/models/operations/rotatewebhooksigningkey_request.rbi +20 -0
  12. data/lib/no_response/models/operations/rotatewebhooksigningkey_response.rb +32 -0
  13. data/lib/no_response/models/operations/rotatewebhooksigningkey_response.rbi +20 -0
  14. data/lib/no_response/models/operations/sendwebhooktestevent_request.rb +33 -0
  15. data/lib/no_response/models/operations/sendwebhooktestevent_request.rbi +20 -0
  16. data/lib/no_response/models/operations/sendwebhooktestevent_response.rb +32 -0
  17. data/lib/no_response/models/operations/sendwebhooktestevent_response.rbi +20 -0
  18. data/lib/no_response/models/operations.rb +8 -0
  19. data/lib/no_response/models/shared/assessmentquery.rb +1 -1
  20. data/lib/no_response/models/shared/assessmentrequest.rb +1 -1
  21. data/lib/no_response/models/shared/badrequesterrorcode.rb +1 -0
  22. data/lib/no_response/models/shared/conflicterrorcode.rb +2 -0
  23. data/lib/no_response/models/shared/responsemode.rb +4 -1
  24. data/lib/no_response/models/shared/signingkey.rb +49 -0
  25. data/lib/no_response/models/shared/signingkey.rbi +26 -0
  26. data/lib/no_response/models/shared/signingsecret.rb +49 -0
  27. data/lib/no_response/models/shared/signingsecret.rbi +26 -0
  28. data/lib/no_response/models/shared/webhookendpoint.rb +100 -0
  29. data/lib/no_response/models/shared/webhookendpoint.rbi +50 -0
  30. data/lib/no_response/models/shared/webhookendpointcreated.rb +41 -0
  31. data/lib/no_response/models/shared/webhookendpointcreated.rbi +20 -0
  32. data/lib/no_response/models/shared/webhookendpointlist.rb +32 -0
  33. data/lib/no_response/models/shared/webhookendpointlist.rbi +14 -0
  34. data/lib/no_response/models/shared/webhookendpointrequest.rb +42 -0
  35. data/lib/no_response/models/shared/webhookendpointrequest.rbi +20 -0
  36. data/lib/no_response/models/shared/webhookendpointstate.rb +20 -0
  37. data/lib/no_response/models/shared/webhookendpointstate.rbi +9 -0
  38. data/lib/no_response/models/shared/webhookkeyrotation.rb +65 -0
  39. data/lib/no_response/models/shared/webhookkeyrotation.rbi +32 -0
  40. data/lib/no_response/models/shared/webhookkeyrotationrequest.rb +23 -0
  41. data/lib/no_response/models/shared/webhookkeyrotationrequest.rbi +9 -0
  42. data/lib/no_response/models/shared/webhooktest.rb +86 -0
  43. data/lib/no_response/models/shared/webhooktest.rbi +38 -0
  44. data/lib/no_response/models/shared/webhooktestrequest.rb +39 -0
  45. data/lib/no_response/models/shared/webhooktestrequest.rbi +14 -0
  46. data/lib/no_response/models/shared/webhooktestrequestevent.rb +19 -0
  47. data/lib/no_response/models/shared/webhooktestrequestevent.rbi +9 -0
  48. data/lib/no_response/models/shared.rb +12 -0
  49. data/lib/no_response/noresponseclient.rb +2 -1
  50. data/lib/no_response/sdkconfiguration.rb +2 -2
  51. data/lib/no_response/webhookendpoints.rb +1444 -0
  52. data/lib/noresponse.rb +1 -0
  53. metadata +42 -1
@@ -0,0 +1,1444 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require "faraday"
5
+ require "faraday/multipart"
6
+ require "faraday/retry"
7
+ require "sorbet-runtime"
8
+
9
+ require_relative "sdk_hooks/hooks"
10
+ require_relative "utils/retries"
11
+
12
+ module NoResponse
13
+ extend T::Sig
14
+
15
+ class WebhookEndpoints
16
+ extend T::Sig
17
+
18
+ # Your webhook endpoints: register, list, rotate signing keys, send test events and delete.
19
+
20
+ sig { params(sdk_config: SDKConfiguration).void }
21
+ def initialize(sdk_config)
22
+ @sdk_configuration = sdk_config
23
+ end
24
+
25
+ sig { params(base_url: String, url_variables: T.nilable(T::Hash[Symbol, T.any(String, T::Enum)])).returns(String) }
26
+ def get_url(base_url:, url_variables: nil)
27
+ sd_base_url, sd_options = @sdk_configuration.get_server_details
28
+
29
+ if base_url.nil?
30
+ base_url = sd_base_url
31
+ end
32
+
33
+ if url_variables.nil?
34
+ url_variables = sd_options
35
+ end
36
+
37
+ return Utils.template_url(base_url, url_variables)
38
+ end
39
+
40
+ sig {
41
+ params(
42
+ retries: T.nilable(Utils::RetryConfig),
43
+ timeout_ms: T.nilable(Integer),
44
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
45
+ )
46
+ .returns(Models::Operations::ListWebhookEndpointsResponse)
47
+ }
48
+ def list(retries: nil, timeout_ms: nil, http_headers: nil)
49
+ # list - List the tenant's webhook endpoints.
50
+ # Lists your webhook endpoints in every state, ordered by endpoint_id, with the ids of their signing keys and without secrets. Requires the webhooks scope.
51
+ url, params = @sdk_configuration.get_server_details
52
+ base_url = Utils.template_url(url, params)
53
+ url = "#{base_url}/v1/webhooks"
54
+ headers = {}
55
+ headers = T.cast(headers, T::Hash[String, String])
56
+ headers["Accept"] = "application/json"
57
+ headers["user-agent"] = @sdk_configuration.user_agent
58
+ retries ||= @sdk_configuration.retry_config
59
+ retries ||= Utils::RetryConfig.new(
60
+ backoff: Utils::BackoffStrategy.new(
61
+ exponent: 2.0,
62
+ initial_interval: 500,
63
+ max_elapsed_time: 30_000,
64
+ max_interval: 8000
65
+ ),
66
+ retry_connection_errors: true,
67
+ strategy: "backoff"
68
+ )
69
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
70
+ retry_options[:retry_statuses] = [408, 429, 500, 501, 502, 503, 504, 505]
71
+
72
+ security = @sdk_configuration.security_source&.call
73
+
74
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
75
+ timeout ||= @sdk_configuration.timeout
76
+
77
+ connection = @sdk_configuration.client.dup
78
+ connection.use(Utils::RetryMiddleware, retry_options)
79
+
80
+ hook_ctx = SDKHooks::HookContext.new(
81
+ config: @sdk_configuration,
82
+ base_url: base_url,
83
+ oauth2_scopes: nil,
84
+ operation_id: "listWebhookEndpoints",
85
+ security_source: @sdk_configuration.security_source
86
+ )
87
+
88
+ error = T.let(nil, T.nilable(StandardError))
89
+ http_response = T.let(nil, T.nilable(Faraday::Response))
90
+
91
+ begin
92
+ http_response = T.must(connection).get(url) do |req|
93
+ req.headers.merge!(headers)
94
+ req.options.timeout = timeout unless timeout.nil?
95
+ Utils.configure_request_security(req, security)
96
+ http_headers&.each do |key, value|
97
+ req.headers[key.to_s] = value
98
+ end
99
+
100
+ @sdk_configuration.hooks.before_request(
101
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
102
+ hook_ctx: hook_ctx
103
+ ),
104
+ request: req
105
+ )
106
+ end
107
+
108
+ rescue StandardError => e
109
+ error = e
110
+ ensure
111
+ if http_response.nil? || Utils.error_status?(http_response.status)
112
+ http_response = @sdk_configuration.hooks.after_error(
113
+ error: error,
114
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
115
+ hook_ctx: hook_ctx
116
+ ),
117
+ response: http_response
118
+ )
119
+ else
120
+ http_response = @sdk_configuration.hooks.after_success(
121
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
122
+ hook_ctx: hook_ctx
123
+ ),
124
+ response: http_response
125
+ )
126
+ end
127
+
128
+ if http_response.nil?
129
+ raise error if !error.nil?
130
+ raise "no response"
131
+ end
132
+ end
133
+
134
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
135
+ if Utils.match_status_code(http_response.status, ["200"])
136
+ if Utils.match_content_type(content_type, "application/json")
137
+ @sdk_configuration.hooks.after_success(
138
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
139
+ hook_ctx: hook_ctx
140
+ ),
141
+ response: http_response
142
+ )
143
+ response_data = http_response.env.response_body
144
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::WebhookEndpointList)
145
+ result = obj
146
+ response = Models::Operations::ListWebhookEndpointsResponse.new(
147
+ result: result,
148
+ headers: http_response.headers
149
+ )
150
+
151
+ return response
152
+ else
153
+ raise(
154
+ ::NoResponse::Models::Errors::APIStatusError.new(
155
+ status_code: http_response.status,
156
+ body: http_response.env.response_body,
157
+ raw_response: http_response
158
+ ),
159
+ "Unknown content type received"
160
+ )
161
+ end
162
+ elsif Utils.match_status_code(http_response.status, ["400"])
163
+ if Utils.match_content_type(content_type, "application/problem+json")
164
+ @sdk_configuration.hooks.after_success(
165
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
166
+ hook_ctx: hook_ctx
167
+ ),
168
+ response: http_response
169
+ )
170
+ response_data = http_response.env.response_body
171
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
172
+ raise obj
173
+ else
174
+ raise(
175
+ ::NoResponse::Models::Errors::APIStatusError.new(
176
+ status_code: http_response.status,
177
+ body: http_response.env.response_body,
178
+ raw_response: http_response
179
+ ),
180
+ "Unknown content type received"
181
+ )
182
+ end
183
+ elsif Utils.match_status_code(http_response.status, ["401"])
184
+ if Utils.match_content_type(content_type, "application/problem+json")
185
+ @sdk_configuration.hooks.after_success(
186
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
187
+ hook_ctx: hook_ctx
188
+ ),
189
+ response: http_response
190
+ )
191
+ response_data = http_response.env.response_body
192
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
193
+ raise obj
194
+ else
195
+ raise(
196
+ ::NoResponse::Models::Errors::APIStatusError.new(
197
+ status_code: http_response.status,
198
+ body: http_response.env.response_body,
199
+ raw_response: http_response
200
+ ),
201
+ "Unknown content type received"
202
+ )
203
+ end
204
+ elsif Utils.match_status_code(http_response.status, ["403"])
205
+ if Utils.match_content_type(content_type, "application/problem+json")
206
+ @sdk_configuration.hooks.after_success(
207
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
208
+ hook_ctx: hook_ctx
209
+ ),
210
+ response: http_response
211
+ )
212
+ response_data = http_response.env.response_body
213
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
214
+ raise obj
215
+ else
216
+ raise(
217
+ ::NoResponse::Models::Errors::APIStatusError.new(
218
+ status_code: http_response.status,
219
+ body: http_response.env.response_body,
220
+ raw_response: http_response
221
+ ),
222
+ "Unknown content type received"
223
+ )
224
+ end
225
+ elsif Utils.match_status_code(http_response.status, ["404"])
226
+ if Utils.match_content_type(content_type, "application/problem+json")
227
+ @sdk_configuration.hooks.after_success(
228
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
229
+ hook_ctx: hook_ctx
230
+ ),
231
+ response: http_response
232
+ )
233
+ response_data = http_response.env.response_body
234
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
235
+ raise obj
236
+ else
237
+ raise(
238
+ ::NoResponse::Models::Errors::APIStatusError.new(
239
+ status_code: http_response.status,
240
+ body: http_response.env.response_body,
241
+ raw_response: http_response
242
+ ),
243
+ "Unknown content type received"
244
+ )
245
+ end
246
+ elsif Utils.match_status_code(http_response.status, ["409"])
247
+ if Utils.match_content_type(content_type, "application/problem+json")
248
+ @sdk_configuration.hooks.after_success(
249
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
250
+ hook_ctx: hook_ctx
251
+ ),
252
+ response: http_response
253
+ )
254
+ response_data = http_response.env.response_body
255
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
256
+ raise obj
257
+ else
258
+ raise(
259
+ ::NoResponse::Models::Errors::APIStatusError.new(
260
+ status_code: http_response.status,
261
+ body: http_response.env.response_body,
262
+ raw_response: http_response
263
+ ),
264
+ "Unknown content type received"
265
+ )
266
+ end
267
+ elsif Utils.match_status_code(http_response.status, ["429"])
268
+ if Utils.match_content_type(content_type, "application/problem+json")
269
+ @sdk_configuration.hooks.after_success(
270
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
271
+ hook_ctx: hook_ctx
272
+ ),
273
+ response: http_response
274
+ )
275
+ response_data = http_response.env.response_body
276
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
277
+ raise obj
278
+ else
279
+ raise(
280
+ ::NoResponse::Models::Errors::APIStatusError.new(
281
+ status_code: http_response.status,
282
+ body: http_response.env.response_body,
283
+ raw_response: http_response
284
+ ),
285
+ "Unknown content type received"
286
+ )
287
+ end
288
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
289
+ raise(
290
+ ::NoResponse::Models::Errors::APIStatusError.new(
291
+ status_code: http_response.status,
292
+ body: http_response.env.response_body,
293
+ raw_response: http_response
294
+ ),
295
+ "API error occurred"
296
+ )
297
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
298
+ raise(
299
+ ::NoResponse::Models::Errors::APIStatusError.new(
300
+ status_code: http_response.status,
301
+ body: http_response.env.response_body,
302
+ raw_response: http_response
303
+ ),
304
+ "API error occurred"
305
+ )
306
+ else
307
+ raise(
308
+ ::NoResponse::Models::Errors::APIStatusError.new(
309
+ status_code: http_response.status,
310
+ body: http_response.env.response_body,
311
+ raw_response: http_response
312
+ ),
313
+ "Unknown status code received"
314
+ )
315
+
316
+ end
317
+ end
318
+
319
+ sig {
320
+ params(
321
+ request: Models::Shared::WebhookEndpointRequest,
322
+ timeout_ms: T.nilable(Integer),
323
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
324
+ )
325
+ .returns(Models::Operations::CreateWebhookEndpointResponse)
326
+ }
327
+ def create(request:, timeout_ms: nil, http_headers: nil)
328
+ # create - Register a webhook endpoint.
329
+ # Registers a webhook endpoint and returns it with its first signing secret, shown only in this answer: store it where your receiver reads it. The URL is https on port 443 or 8443 with a DNS host whose every address is public; it is checked now and on every delivery. The endpoint starts unverified and receives assessment events once it echoes an endpoint.verification challenge, which sendTestEvent sends. You can hold 5 endpoints. Requires the webhooks scope, and response_mode detailed also the detailed scope. Registration is not idempotent: a retry after a lost answer registers a second endpoint, which you can list and delete.
330
+ url, params = @sdk_configuration.get_server_details
331
+ base_url = Utils.template_url(url, params)
332
+ url = "#{base_url}/v1/webhooks"
333
+ headers = {}
334
+ headers = T.cast(headers, T::Hash[String, String])
335
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :request, :json)
336
+ headers["content-type"] = req_content_type
337
+ raise StandardError, "request body is required" if data.nil? && form.nil?
338
+
339
+ if form && !form.empty?
340
+ body = Utils.encode_form(form)
341
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
342
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
343
+ else
344
+ body = data
345
+ end
346
+
347
+ headers["Accept"] = "application/json"
348
+ headers["user-agent"] = @sdk_configuration.user_agent
349
+
350
+ security = @sdk_configuration.security_source&.call
351
+
352
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
353
+ timeout ||= @sdk_configuration.timeout
354
+
355
+ connection = @sdk_configuration.client
356
+
357
+ hook_ctx = SDKHooks::HookContext.new(
358
+ config: @sdk_configuration,
359
+ base_url: base_url,
360
+ oauth2_scopes: nil,
361
+ operation_id: "createWebhookEndpoint",
362
+ security_source: @sdk_configuration.security_source
363
+ )
364
+
365
+ error = T.let(nil, T.nilable(StandardError))
366
+ http_response = T.let(nil, T.nilable(Faraday::Response))
367
+
368
+ begin
369
+ http_response = T.must(connection).post(url) do |req|
370
+ req.body = body
371
+ req.headers.merge!(headers)
372
+ req.options.timeout = timeout unless timeout.nil?
373
+ Utils.configure_request_security(req, security)
374
+ http_headers&.each do |key, value|
375
+ req.headers[key.to_s] = value
376
+ end
377
+
378
+ @sdk_configuration.hooks.before_request(
379
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
380
+ hook_ctx: hook_ctx
381
+ ),
382
+ request: req
383
+ )
384
+ end
385
+
386
+ rescue StandardError => e
387
+ error = e
388
+ ensure
389
+ if http_response.nil? || Utils.error_status?(http_response.status)
390
+ http_response = @sdk_configuration.hooks.after_error(
391
+ error: error,
392
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
393
+ hook_ctx: hook_ctx
394
+ ),
395
+ response: http_response
396
+ )
397
+ else
398
+ http_response = @sdk_configuration.hooks.after_success(
399
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
400
+ hook_ctx: hook_ctx
401
+ ),
402
+ response: http_response
403
+ )
404
+ end
405
+
406
+ if http_response.nil?
407
+ raise error if !error.nil?
408
+ raise "no response"
409
+ end
410
+ end
411
+
412
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
413
+ if Utils.match_status_code(http_response.status, ["201"])
414
+ if Utils.match_content_type(content_type, "application/json")
415
+ @sdk_configuration.hooks.after_success(
416
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
417
+ hook_ctx: hook_ctx
418
+ ),
419
+ response: http_response
420
+ )
421
+ response_data = http_response.env.response_body
422
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::WebhookEndpointCreated)
423
+ result = obj
424
+ response = Models::Operations::CreateWebhookEndpointResponse.new(
425
+ result: result,
426
+ headers: http_response.headers
427
+ )
428
+
429
+ return response
430
+ else
431
+ raise(
432
+ ::NoResponse::Models::Errors::APIStatusError.new(
433
+ status_code: http_response.status,
434
+ body: http_response.env.response_body,
435
+ raw_response: http_response
436
+ ),
437
+ "Unknown content type received"
438
+ )
439
+ end
440
+ elsif Utils.match_status_code(http_response.status, ["400"])
441
+ if Utils.match_content_type(content_type, "application/problem+json")
442
+ @sdk_configuration.hooks.after_success(
443
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
444
+ hook_ctx: hook_ctx
445
+ ),
446
+ response: http_response
447
+ )
448
+ response_data = http_response.env.response_body
449
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
450
+ raise obj
451
+ else
452
+ raise(
453
+ ::NoResponse::Models::Errors::APIStatusError.new(
454
+ status_code: http_response.status,
455
+ body: http_response.env.response_body,
456
+ raw_response: http_response
457
+ ),
458
+ "Unknown content type received"
459
+ )
460
+ end
461
+ elsif Utils.match_status_code(http_response.status, ["401"])
462
+ if Utils.match_content_type(content_type, "application/problem+json")
463
+ @sdk_configuration.hooks.after_success(
464
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
465
+ hook_ctx: hook_ctx
466
+ ),
467
+ response: http_response
468
+ )
469
+ response_data = http_response.env.response_body
470
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
471
+ raise obj
472
+ else
473
+ raise(
474
+ ::NoResponse::Models::Errors::APIStatusError.new(
475
+ status_code: http_response.status,
476
+ body: http_response.env.response_body,
477
+ raw_response: http_response
478
+ ),
479
+ "Unknown content type received"
480
+ )
481
+ end
482
+ elsif Utils.match_status_code(http_response.status, ["403"])
483
+ if Utils.match_content_type(content_type, "application/problem+json")
484
+ @sdk_configuration.hooks.after_success(
485
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
486
+ hook_ctx: hook_ctx
487
+ ),
488
+ response: http_response
489
+ )
490
+ response_data = http_response.env.response_body
491
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
492
+ raise obj
493
+ else
494
+ raise(
495
+ ::NoResponse::Models::Errors::APIStatusError.new(
496
+ status_code: http_response.status,
497
+ body: http_response.env.response_body,
498
+ raw_response: http_response
499
+ ),
500
+ "Unknown content type received"
501
+ )
502
+ end
503
+ elsif Utils.match_status_code(http_response.status, ["404"])
504
+ if Utils.match_content_type(content_type, "application/problem+json")
505
+ @sdk_configuration.hooks.after_success(
506
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
507
+ hook_ctx: hook_ctx
508
+ ),
509
+ response: http_response
510
+ )
511
+ response_data = http_response.env.response_body
512
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
513
+ raise obj
514
+ else
515
+ raise(
516
+ ::NoResponse::Models::Errors::APIStatusError.new(
517
+ status_code: http_response.status,
518
+ body: http_response.env.response_body,
519
+ raw_response: http_response
520
+ ),
521
+ "Unknown content type received"
522
+ )
523
+ end
524
+ elsif Utils.match_status_code(http_response.status, ["409"])
525
+ if Utils.match_content_type(content_type, "application/problem+json")
526
+ @sdk_configuration.hooks.after_success(
527
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
528
+ hook_ctx: hook_ctx
529
+ ),
530
+ response: http_response
531
+ )
532
+ response_data = http_response.env.response_body
533
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
534
+ raise obj
535
+ else
536
+ raise(
537
+ ::NoResponse::Models::Errors::APIStatusError.new(
538
+ status_code: http_response.status,
539
+ body: http_response.env.response_body,
540
+ raw_response: http_response
541
+ ),
542
+ "Unknown content type received"
543
+ )
544
+ end
545
+ elsif Utils.match_status_code(http_response.status, ["429"])
546
+ if Utils.match_content_type(content_type, "application/problem+json")
547
+ @sdk_configuration.hooks.after_success(
548
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
549
+ hook_ctx: hook_ctx
550
+ ),
551
+ response: http_response
552
+ )
553
+ response_data = http_response.env.response_body
554
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
555
+ raise obj
556
+ else
557
+ raise(
558
+ ::NoResponse::Models::Errors::APIStatusError.new(
559
+ status_code: http_response.status,
560
+ body: http_response.env.response_body,
561
+ raw_response: http_response
562
+ ),
563
+ "Unknown content type received"
564
+ )
565
+ end
566
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
567
+ raise(
568
+ ::NoResponse::Models::Errors::APIStatusError.new(
569
+ status_code: http_response.status,
570
+ body: http_response.env.response_body,
571
+ raw_response: http_response
572
+ ),
573
+ "API error occurred"
574
+ )
575
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
576
+ raise(
577
+ ::NoResponse::Models::Errors::APIStatusError.new(
578
+ status_code: http_response.status,
579
+ body: http_response.env.response_body,
580
+ raw_response: http_response
581
+ ),
582
+ "API error occurred"
583
+ )
584
+ else
585
+ raise(
586
+ ::NoResponse::Models::Errors::APIStatusError.new(
587
+ status_code: http_response.status,
588
+ body: http_response.env.response_body,
589
+ raw_response: http_response
590
+ ),
591
+ "Unknown status code received"
592
+ )
593
+
594
+ end
595
+ end
596
+
597
+ sig {
598
+ params(
599
+ endpoint_id: ::String,
600
+ retries: T.nilable(Utils::RetryConfig),
601
+ timeout_ms: T.nilable(Integer),
602
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
603
+ )
604
+ .returns(Models::Operations::DeleteWebhookEndpointResponse)
605
+ }
606
+ def delete(endpoint_id:, retries: nil, timeout_ms: nil, http_headers: nil)
607
+ # delete - Delete a webhook endpoint.
608
+ # Deletes the endpoint and its signing keys. Deliveries still queued for it are dropped. Requires the webhooks scope. An endpoint that is already gone answers 404.
609
+ request = Models::Operations::DeleteWebhookEndpointRequest.new(
610
+ endpoint_id: endpoint_id
611
+ )
612
+ url, params = @sdk_configuration.get_server_details
613
+ base_url = Utils.template_url(url, params)
614
+ url = Utils.generate_url(
615
+ Models::Operations::DeleteWebhookEndpointRequest,
616
+ base_url,
617
+ "/v1/webhooks/{endpoint_id}",
618
+ request
619
+ )
620
+ headers = {}
621
+ headers = T.cast(headers, T::Hash[String, String])
622
+ headers["Accept"] = "application/problem+json"
623
+ headers["user-agent"] = @sdk_configuration.user_agent
624
+ retries ||= @sdk_configuration.retry_config
625
+ retries ||= Utils::RetryConfig.new(
626
+ backoff: Utils::BackoffStrategy.new(
627
+ exponent: 2.0,
628
+ initial_interval: 500,
629
+ max_elapsed_time: 30_000,
630
+ max_interval: 8000
631
+ ),
632
+ retry_connection_errors: true,
633
+ strategy: "backoff"
634
+ )
635
+ retry_options = retries.to_faraday_retry_options(initial_time: Time.now)
636
+ retry_options[:retry_statuses] = [408, 429, 500, 501, 502, 503, 504, 505]
637
+
638
+ security = @sdk_configuration.security_source&.call
639
+
640
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
641
+ timeout ||= @sdk_configuration.timeout
642
+
643
+ connection = @sdk_configuration.client.dup
644
+ connection.use(Utils::RetryMiddleware, retry_options)
645
+
646
+ hook_ctx = SDKHooks::HookContext.new(
647
+ config: @sdk_configuration,
648
+ base_url: base_url,
649
+ oauth2_scopes: nil,
650
+ operation_id: "deleteWebhookEndpoint",
651
+ security_source: @sdk_configuration.security_source
652
+ )
653
+
654
+ error = T.let(nil, T.nilable(StandardError))
655
+ http_response = T.let(nil, T.nilable(Faraday::Response))
656
+
657
+ begin
658
+ http_response = T.must(connection).delete(url) do |req|
659
+ req.headers.merge!(headers)
660
+ req.options.timeout = timeout unless timeout.nil?
661
+ Utils.configure_request_security(req, security)
662
+ http_headers&.each do |key, value|
663
+ req.headers[key.to_s] = value
664
+ end
665
+
666
+ @sdk_configuration.hooks.before_request(
667
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
668
+ hook_ctx: hook_ctx
669
+ ),
670
+ request: req
671
+ )
672
+ end
673
+
674
+ rescue StandardError => e
675
+ error = e
676
+ ensure
677
+ if http_response.nil? || Utils.error_status?(http_response.status)
678
+ http_response = @sdk_configuration.hooks.after_error(
679
+ error: error,
680
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
681
+ hook_ctx: hook_ctx
682
+ ),
683
+ response: http_response
684
+ )
685
+ else
686
+ http_response = @sdk_configuration.hooks.after_success(
687
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
688
+ hook_ctx: hook_ctx
689
+ ),
690
+ response: http_response
691
+ )
692
+ end
693
+
694
+ if http_response.nil?
695
+ raise error if !error.nil?
696
+ raise "no response"
697
+ end
698
+ end
699
+
700
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
701
+ if Utils.match_status_code(http_response.status, ["204"])
702
+ @sdk_configuration.hooks.after_success(
703
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
704
+ hook_ctx: hook_ctx
705
+ ),
706
+ response: http_response
707
+ )
708
+ return Models::Operations::DeleteWebhookEndpointResponse.new(
709
+ headers: {}
710
+ )
711
+ elsif Utils.match_status_code(http_response.status, ["400"])
712
+ if Utils.match_content_type(content_type, "application/problem+json")
713
+ @sdk_configuration.hooks.after_success(
714
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
715
+ hook_ctx: hook_ctx
716
+ ),
717
+ response: http_response
718
+ )
719
+ response_data = http_response.env.response_body
720
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
721
+ raise obj
722
+ else
723
+ raise(
724
+ ::NoResponse::Models::Errors::APIStatusError.new(
725
+ status_code: http_response.status,
726
+ body: http_response.env.response_body,
727
+ raw_response: http_response
728
+ ),
729
+ "Unknown content type received"
730
+ )
731
+ end
732
+ elsif Utils.match_status_code(http_response.status, ["401"])
733
+ if Utils.match_content_type(content_type, "application/problem+json")
734
+ @sdk_configuration.hooks.after_success(
735
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
736
+ hook_ctx: hook_ctx
737
+ ),
738
+ response: http_response
739
+ )
740
+ response_data = http_response.env.response_body
741
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
742
+ raise obj
743
+ else
744
+ raise(
745
+ ::NoResponse::Models::Errors::APIStatusError.new(
746
+ status_code: http_response.status,
747
+ body: http_response.env.response_body,
748
+ raw_response: http_response
749
+ ),
750
+ "Unknown content type received"
751
+ )
752
+ end
753
+ elsif Utils.match_status_code(http_response.status, ["403"])
754
+ if Utils.match_content_type(content_type, "application/problem+json")
755
+ @sdk_configuration.hooks.after_success(
756
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
757
+ hook_ctx: hook_ctx
758
+ ),
759
+ response: http_response
760
+ )
761
+ response_data = http_response.env.response_body
762
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
763
+ raise obj
764
+ else
765
+ raise(
766
+ ::NoResponse::Models::Errors::APIStatusError.new(
767
+ status_code: http_response.status,
768
+ body: http_response.env.response_body,
769
+ raw_response: http_response
770
+ ),
771
+ "Unknown content type received"
772
+ )
773
+ end
774
+ elsif Utils.match_status_code(http_response.status, ["404"])
775
+ if Utils.match_content_type(content_type, "application/problem+json")
776
+ @sdk_configuration.hooks.after_success(
777
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
778
+ hook_ctx: hook_ctx
779
+ ),
780
+ response: http_response
781
+ )
782
+ response_data = http_response.env.response_body
783
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
784
+ raise obj
785
+ else
786
+ raise(
787
+ ::NoResponse::Models::Errors::APIStatusError.new(
788
+ status_code: http_response.status,
789
+ body: http_response.env.response_body,
790
+ raw_response: http_response
791
+ ),
792
+ "Unknown content type received"
793
+ )
794
+ end
795
+ elsif Utils.match_status_code(http_response.status, ["409"])
796
+ if Utils.match_content_type(content_type, "application/problem+json")
797
+ @sdk_configuration.hooks.after_success(
798
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
799
+ hook_ctx: hook_ctx
800
+ ),
801
+ response: http_response
802
+ )
803
+ response_data = http_response.env.response_body
804
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
805
+ raise obj
806
+ else
807
+ raise(
808
+ ::NoResponse::Models::Errors::APIStatusError.new(
809
+ status_code: http_response.status,
810
+ body: http_response.env.response_body,
811
+ raw_response: http_response
812
+ ),
813
+ "Unknown content type received"
814
+ )
815
+ end
816
+ elsif Utils.match_status_code(http_response.status, ["429"])
817
+ if Utils.match_content_type(content_type, "application/problem+json")
818
+ @sdk_configuration.hooks.after_success(
819
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
820
+ hook_ctx: hook_ctx
821
+ ),
822
+ response: http_response
823
+ )
824
+ response_data = http_response.env.response_body
825
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
826
+ raise obj
827
+ else
828
+ raise(
829
+ ::NoResponse::Models::Errors::APIStatusError.new(
830
+ status_code: http_response.status,
831
+ body: http_response.env.response_body,
832
+ raw_response: http_response
833
+ ),
834
+ "Unknown content type received"
835
+ )
836
+ end
837
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
838
+ raise(
839
+ ::NoResponse::Models::Errors::APIStatusError.new(
840
+ status_code: http_response.status,
841
+ body: http_response.env.response_body,
842
+ raw_response: http_response
843
+ ),
844
+ "API error occurred"
845
+ )
846
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
847
+ raise(
848
+ ::NoResponse::Models::Errors::APIStatusError.new(
849
+ status_code: http_response.status,
850
+ body: http_response.env.response_body,
851
+ raw_response: http_response
852
+ ),
853
+ "API error occurred"
854
+ )
855
+ else
856
+ raise(
857
+ ::NoResponse::Models::Errors::APIStatusError.new(
858
+ status_code: http_response.status,
859
+ body: http_response.env.response_body,
860
+ raw_response: http_response
861
+ ),
862
+ "Unknown status code received"
863
+ )
864
+
865
+ end
866
+ end
867
+
868
+ sig {
869
+ params(
870
+ body: Models::Shared::WebhookKeyRotationRequest,
871
+ endpoint_id: ::String,
872
+ timeout_ms: T.nilable(Integer),
873
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
874
+ )
875
+ .returns(Models::Operations::RotateWebhookSigningKeyResponse)
876
+ }
877
+ def rotate_signing_key(body:, endpoint_id:, timeout_ms: nil, http_headers: nil)
878
+ # rotate_signing_key - Rotate an endpoint's signing key.
879
+ # Issues a new signing key for the endpoint and returns its secret once. Every delivery from now on is signed with it; the key it replaces keeps verifying for 7 days, so your receiver can hold both while it switches. Requires the webhooks scope. Rotation is not idempotent: a retry after a lost answer issues another key, which replaces the first.
880
+ request = Models::Operations::RotateWebhookSigningKeyRequest.new(
881
+ endpoint_id: endpoint_id,
882
+ body: body
883
+ )
884
+ url, params = @sdk_configuration.get_server_details
885
+ base_url = Utils.template_url(url, params)
886
+ url = Utils.generate_url(
887
+ Models::Operations::RotateWebhookSigningKeyRequest,
888
+ base_url,
889
+ "/v1/webhooks/{endpoint_id}/rotate",
890
+ request
891
+ )
892
+ headers = {}
893
+ headers = T.cast(headers, T::Hash[String, String])
894
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
895
+ headers["content-type"] = req_content_type
896
+ raise StandardError, "request body is required" if data.nil? && form.nil?
897
+
898
+ if form && !form.empty?
899
+ body = Utils.encode_form(form)
900
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
901
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
902
+ else
903
+ body = data
904
+ end
905
+
906
+ headers["Accept"] = "application/json"
907
+ headers["user-agent"] = @sdk_configuration.user_agent
908
+
909
+ security = @sdk_configuration.security_source&.call
910
+
911
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
912
+ timeout ||= @sdk_configuration.timeout
913
+
914
+ connection = @sdk_configuration.client
915
+
916
+ hook_ctx = SDKHooks::HookContext.new(
917
+ config: @sdk_configuration,
918
+ base_url: base_url,
919
+ oauth2_scopes: nil,
920
+ operation_id: "rotateWebhookSigningKey",
921
+ security_source: @sdk_configuration.security_source
922
+ )
923
+
924
+ error = T.let(nil, T.nilable(StandardError))
925
+ http_response = T.let(nil, T.nilable(Faraday::Response))
926
+
927
+ begin
928
+ http_response = T.must(connection).post(url) do |req|
929
+ req.body = body
930
+ req.headers.merge!(headers)
931
+ req.options.timeout = timeout unless timeout.nil?
932
+ Utils.configure_request_security(req, security)
933
+ http_headers&.each do |key, value|
934
+ req.headers[key.to_s] = value
935
+ end
936
+
937
+ @sdk_configuration.hooks.before_request(
938
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
939
+ hook_ctx: hook_ctx
940
+ ),
941
+ request: req
942
+ )
943
+ end
944
+
945
+ rescue StandardError => e
946
+ error = e
947
+ ensure
948
+ if http_response.nil? || Utils.error_status?(http_response.status)
949
+ http_response = @sdk_configuration.hooks.after_error(
950
+ error: error,
951
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
952
+ hook_ctx: hook_ctx
953
+ ),
954
+ response: http_response
955
+ )
956
+ else
957
+ http_response = @sdk_configuration.hooks.after_success(
958
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
959
+ hook_ctx: hook_ctx
960
+ ),
961
+ response: http_response
962
+ )
963
+ end
964
+
965
+ if http_response.nil?
966
+ raise error if !error.nil?
967
+ raise "no response"
968
+ end
969
+ end
970
+
971
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
972
+ if Utils.match_status_code(http_response.status, ["201"])
973
+ if Utils.match_content_type(content_type, "application/json")
974
+ @sdk_configuration.hooks.after_success(
975
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
976
+ hook_ctx: hook_ctx
977
+ ),
978
+ response: http_response
979
+ )
980
+ response_data = http_response.env.response_body
981
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::WebhookKeyRotation)
982
+ result = obj
983
+ response = Models::Operations::RotateWebhookSigningKeyResponse.new(
984
+ result: result,
985
+ headers: http_response.headers
986
+ )
987
+
988
+ return response
989
+ else
990
+ raise(
991
+ ::NoResponse::Models::Errors::APIStatusError.new(
992
+ status_code: http_response.status,
993
+ body: http_response.env.response_body,
994
+ raw_response: http_response
995
+ ),
996
+ "Unknown content type received"
997
+ )
998
+ end
999
+ elsif Utils.match_status_code(http_response.status, ["400"])
1000
+ if Utils.match_content_type(content_type, "application/problem+json")
1001
+ @sdk_configuration.hooks.after_success(
1002
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1003
+ hook_ctx: hook_ctx
1004
+ ),
1005
+ response: http_response
1006
+ )
1007
+ response_data = http_response.env.response_body
1008
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
1009
+ raise obj
1010
+ else
1011
+ raise(
1012
+ ::NoResponse::Models::Errors::APIStatusError.new(
1013
+ status_code: http_response.status,
1014
+ body: http_response.env.response_body,
1015
+ raw_response: http_response
1016
+ ),
1017
+ "Unknown content type received"
1018
+ )
1019
+ end
1020
+ elsif Utils.match_status_code(http_response.status, ["401"])
1021
+ if Utils.match_content_type(content_type, "application/problem+json")
1022
+ @sdk_configuration.hooks.after_success(
1023
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1024
+ hook_ctx: hook_ctx
1025
+ ),
1026
+ response: http_response
1027
+ )
1028
+ response_data = http_response.env.response_body
1029
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
1030
+ raise obj
1031
+ else
1032
+ raise(
1033
+ ::NoResponse::Models::Errors::APIStatusError.new(
1034
+ status_code: http_response.status,
1035
+ body: http_response.env.response_body,
1036
+ raw_response: http_response
1037
+ ),
1038
+ "Unknown content type received"
1039
+ )
1040
+ end
1041
+ elsif Utils.match_status_code(http_response.status, ["403"])
1042
+ if Utils.match_content_type(content_type, "application/problem+json")
1043
+ @sdk_configuration.hooks.after_success(
1044
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1045
+ hook_ctx: hook_ctx
1046
+ ),
1047
+ response: http_response
1048
+ )
1049
+ response_data = http_response.env.response_body
1050
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
1051
+ raise obj
1052
+ else
1053
+ raise(
1054
+ ::NoResponse::Models::Errors::APIStatusError.new(
1055
+ status_code: http_response.status,
1056
+ body: http_response.env.response_body,
1057
+ raw_response: http_response
1058
+ ),
1059
+ "Unknown content type received"
1060
+ )
1061
+ end
1062
+ elsif Utils.match_status_code(http_response.status, ["404"])
1063
+ if Utils.match_content_type(content_type, "application/problem+json")
1064
+ @sdk_configuration.hooks.after_success(
1065
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1066
+ hook_ctx: hook_ctx
1067
+ ),
1068
+ response: http_response
1069
+ )
1070
+ response_data = http_response.env.response_body
1071
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
1072
+ raise obj
1073
+ else
1074
+ raise(
1075
+ ::NoResponse::Models::Errors::APIStatusError.new(
1076
+ status_code: http_response.status,
1077
+ body: http_response.env.response_body,
1078
+ raw_response: http_response
1079
+ ),
1080
+ "Unknown content type received"
1081
+ )
1082
+ end
1083
+ elsif Utils.match_status_code(http_response.status, ["409"])
1084
+ if Utils.match_content_type(content_type, "application/problem+json")
1085
+ @sdk_configuration.hooks.after_success(
1086
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1087
+ hook_ctx: hook_ctx
1088
+ ),
1089
+ response: http_response
1090
+ )
1091
+ response_data = http_response.env.response_body
1092
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
1093
+ raise obj
1094
+ else
1095
+ raise(
1096
+ ::NoResponse::Models::Errors::APIStatusError.new(
1097
+ status_code: http_response.status,
1098
+ body: http_response.env.response_body,
1099
+ raw_response: http_response
1100
+ ),
1101
+ "Unknown content type received"
1102
+ )
1103
+ end
1104
+ elsif Utils.match_status_code(http_response.status, ["429"])
1105
+ if Utils.match_content_type(content_type, "application/problem+json")
1106
+ @sdk_configuration.hooks.after_success(
1107
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1108
+ hook_ctx: hook_ctx
1109
+ ),
1110
+ response: http_response
1111
+ )
1112
+ response_data = http_response.env.response_body
1113
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
1114
+ raise obj
1115
+ else
1116
+ raise(
1117
+ ::NoResponse::Models::Errors::APIStatusError.new(
1118
+ status_code: http_response.status,
1119
+ body: http_response.env.response_body,
1120
+ raw_response: http_response
1121
+ ),
1122
+ "Unknown content type received"
1123
+ )
1124
+ end
1125
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1126
+ raise(
1127
+ ::NoResponse::Models::Errors::APIStatusError.new(
1128
+ status_code: http_response.status,
1129
+ body: http_response.env.response_body,
1130
+ raw_response: http_response
1131
+ ),
1132
+ "API error occurred"
1133
+ )
1134
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1135
+ raise(
1136
+ ::NoResponse::Models::Errors::APIStatusError.new(
1137
+ status_code: http_response.status,
1138
+ body: http_response.env.response_body,
1139
+ raw_response: http_response
1140
+ ),
1141
+ "API error occurred"
1142
+ )
1143
+ else
1144
+ raise(
1145
+ ::NoResponse::Models::Errors::APIStatusError.new(
1146
+ status_code: http_response.status,
1147
+ body: http_response.env.response_body,
1148
+ raw_response: http_response
1149
+ ),
1150
+ "Unknown status code received"
1151
+ )
1152
+
1153
+ end
1154
+ end
1155
+
1156
+ sig {
1157
+ params(
1158
+ body: Models::Shared::WebhookTestRequest,
1159
+ endpoint_id: ::String,
1160
+ timeout_ms: T.nilable(Integer),
1161
+ http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])
1162
+ )
1163
+ .returns(Models::Operations::SendWebhookTestEventResponse)
1164
+ }
1165
+ def send_test_event(body:, endpoint_id:, timeout_ms: nil, http_headers: nil)
1166
+ # send_test_event - Send a test event to an endpoint.
1167
+ # endpoint.verification sends a signed challenge now and answers whether the endpoint echoed it within 5 seconds; an echo verifies the endpoint, including a disabled one. assessment.updated queues one signed event with test: true and a fixed example assessment in the endpoint's response mode, delivered and retried like any other event; the endpoint must be verified. Both use the endpoint's current signing key. Requires the webhooks scope.
1168
+ request = Models::Operations::SendWebhookTestEventRequest.new(
1169
+ endpoint_id: endpoint_id,
1170
+ body: body
1171
+ )
1172
+ url, params = @sdk_configuration.get_server_details
1173
+ base_url = Utils.template_url(url, params)
1174
+ url = Utils.generate_url(
1175
+ Models::Operations::SendWebhookTestEventRequest,
1176
+ base_url,
1177
+ "/v1/webhooks/{endpoint_id}/test",
1178
+ request
1179
+ )
1180
+ headers = {}
1181
+ headers = T.cast(headers, T::Hash[String, String])
1182
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :body, :json)
1183
+ headers["content-type"] = req_content_type
1184
+ raise StandardError, "request body is required" if data.nil? && form.nil?
1185
+
1186
+ if form && !form.empty?
1187
+ body = Utils.encode_form(form)
1188
+ elsif Utils.match_content_type(req_content_type, "application/x-www-form-urlencoded")
1189
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
1190
+ else
1191
+ body = data
1192
+ end
1193
+
1194
+ headers["Accept"] = "application/json"
1195
+ headers["user-agent"] = @sdk_configuration.user_agent
1196
+
1197
+ security = @sdk_configuration.security_source&.call
1198
+
1199
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
1200
+ timeout ||= @sdk_configuration.timeout
1201
+
1202
+ connection = @sdk_configuration.client
1203
+
1204
+ hook_ctx = SDKHooks::HookContext.new(
1205
+ config: @sdk_configuration,
1206
+ base_url: base_url,
1207
+ oauth2_scopes: nil,
1208
+ operation_id: "sendWebhookTestEvent",
1209
+ security_source: @sdk_configuration.security_source
1210
+ )
1211
+
1212
+ error = T.let(nil, T.nilable(StandardError))
1213
+ http_response = T.let(nil, T.nilable(Faraday::Response))
1214
+
1215
+ begin
1216
+ http_response = T.must(connection).post(url) do |req|
1217
+ req.body = body
1218
+ req.headers.merge!(headers)
1219
+ req.options.timeout = timeout unless timeout.nil?
1220
+ Utils.configure_request_security(req, security)
1221
+ http_headers&.each do |key, value|
1222
+ req.headers[key.to_s] = value
1223
+ end
1224
+
1225
+ @sdk_configuration.hooks.before_request(
1226
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
1227
+ hook_ctx: hook_ctx
1228
+ ),
1229
+ request: req
1230
+ )
1231
+ end
1232
+
1233
+ rescue StandardError => e
1234
+ error = e
1235
+ ensure
1236
+ if http_response.nil? || Utils.error_status?(http_response.status)
1237
+ http_response = @sdk_configuration.hooks.after_error(
1238
+ error: error,
1239
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
1240
+ hook_ctx: hook_ctx
1241
+ ),
1242
+ response: http_response
1243
+ )
1244
+ else
1245
+ http_response = @sdk_configuration.hooks.after_success(
1246
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1247
+ hook_ctx: hook_ctx
1248
+ ),
1249
+ response: http_response
1250
+ )
1251
+ end
1252
+
1253
+ if http_response.nil?
1254
+ raise error if !error.nil?
1255
+ raise "no response"
1256
+ end
1257
+ end
1258
+
1259
+ content_type = http_response.headers.fetch("Content-Type", "application/octet-stream")
1260
+ if Utils.match_status_code(http_response.status, ["202"])
1261
+ if Utils.match_content_type(content_type, "application/json")
1262
+ @sdk_configuration.hooks.after_success(
1263
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1264
+ hook_ctx: hook_ctx
1265
+ ),
1266
+ response: http_response
1267
+ )
1268
+ response_data = http_response.env.response_body
1269
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Shared::WebhookTest)
1270
+ result = obj
1271
+ response = Models::Operations::SendWebhookTestEventResponse.new(
1272
+ result: result,
1273
+ headers: http_response.headers
1274
+ )
1275
+
1276
+ return response
1277
+ else
1278
+ raise(
1279
+ ::NoResponse::Models::Errors::APIStatusError.new(
1280
+ status_code: http_response.status,
1281
+ body: http_response.env.response_body,
1282
+ raw_response: http_response
1283
+ ),
1284
+ "Unknown content type received"
1285
+ )
1286
+ end
1287
+ elsif Utils.match_status_code(http_response.status, ["400"])
1288
+ if Utils.match_content_type(content_type, "application/problem+json")
1289
+ @sdk_configuration.hooks.after_success(
1290
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1291
+ hook_ctx: hook_ctx
1292
+ ),
1293
+ response: http_response
1294
+ )
1295
+ response_data = http_response.env.response_body
1296
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::BadRequestError)
1297
+ raise obj
1298
+ else
1299
+ raise(
1300
+ ::NoResponse::Models::Errors::APIStatusError.new(
1301
+ status_code: http_response.status,
1302
+ body: http_response.env.response_body,
1303
+ raw_response: http_response
1304
+ ),
1305
+ "Unknown content type received"
1306
+ )
1307
+ end
1308
+ elsif Utils.match_status_code(http_response.status, ["401"])
1309
+ if Utils.match_content_type(content_type, "application/problem+json")
1310
+ @sdk_configuration.hooks.after_success(
1311
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1312
+ hook_ctx: hook_ctx
1313
+ ),
1314
+ response: http_response
1315
+ )
1316
+ response_data = http_response.env.response_body
1317
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::AuthenticationError)
1318
+ raise obj
1319
+ else
1320
+ raise(
1321
+ ::NoResponse::Models::Errors::APIStatusError.new(
1322
+ status_code: http_response.status,
1323
+ body: http_response.env.response_body,
1324
+ raw_response: http_response
1325
+ ),
1326
+ "Unknown content type received"
1327
+ )
1328
+ end
1329
+ elsif Utils.match_status_code(http_response.status, ["403"])
1330
+ if Utils.match_content_type(content_type, "application/problem+json")
1331
+ @sdk_configuration.hooks.after_success(
1332
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1333
+ hook_ctx: hook_ctx
1334
+ ),
1335
+ response: http_response
1336
+ )
1337
+ response_data = http_response.env.response_body
1338
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::PermissionDeniedError)
1339
+ raise obj
1340
+ else
1341
+ raise(
1342
+ ::NoResponse::Models::Errors::APIStatusError.new(
1343
+ status_code: http_response.status,
1344
+ body: http_response.env.response_body,
1345
+ raw_response: http_response
1346
+ ),
1347
+ "Unknown content type received"
1348
+ )
1349
+ end
1350
+ elsif Utils.match_status_code(http_response.status, ["404"])
1351
+ if Utils.match_content_type(content_type, "application/problem+json")
1352
+ @sdk_configuration.hooks.after_success(
1353
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1354
+ hook_ctx: hook_ctx
1355
+ ),
1356
+ response: http_response
1357
+ )
1358
+ response_data = http_response.env.response_body
1359
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::NotFoundError)
1360
+ raise obj
1361
+ else
1362
+ raise(
1363
+ ::NoResponse::Models::Errors::APIStatusError.new(
1364
+ status_code: http_response.status,
1365
+ body: http_response.env.response_body,
1366
+ raw_response: http_response
1367
+ ),
1368
+ "Unknown content type received"
1369
+ )
1370
+ end
1371
+ elsif Utils.match_status_code(http_response.status, ["409"])
1372
+ if Utils.match_content_type(content_type, "application/problem+json")
1373
+ @sdk_configuration.hooks.after_success(
1374
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1375
+ hook_ctx: hook_ctx
1376
+ ),
1377
+ response: http_response
1378
+ )
1379
+ response_data = http_response.env.response_body
1380
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ConflictError)
1381
+ raise obj
1382
+ else
1383
+ raise(
1384
+ ::NoResponse::Models::Errors::APIStatusError.new(
1385
+ status_code: http_response.status,
1386
+ body: http_response.env.response_body,
1387
+ raw_response: http_response
1388
+ ),
1389
+ "Unknown content type received"
1390
+ )
1391
+ end
1392
+ elsif Utils.match_status_code(http_response.status, ["429"])
1393
+ if Utils.match_content_type(content_type, "application/problem+json")
1394
+ @sdk_configuration.hooks.after_success(
1395
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
1396
+ hook_ctx: hook_ctx
1397
+ ),
1398
+ response: http_response
1399
+ )
1400
+ response_data = http_response.env.response_body
1401
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::RateLimitError)
1402
+ raise obj
1403
+ else
1404
+ raise(
1405
+ ::NoResponse::Models::Errors::APIStatusError.new(
1406
+ status_code: http_response.status,
1407
+ body: http_response.env.response_body,
1408
+ raw_response: http_response
1409
+ ),
1410
+ "Unknown content type received"
1411
+ )
1412
+ end
1413
+ elsif Utils.match_status_code(http_response.status, ["4XX"])
1414
+ raise(
1415
+ ::NoResponse::Models::Errors::APIStatusError.new(
1416
+ status_code: http_response.status,
1417
+ body: http_response.env.response_body,
1418
+ raw_response: http_response
1419
+ ),
1420
+ "API error occurred"
1421
+ )
1422
+ elsif Utils.match_status_code(http_response.status, ["5XX"])
1423
+ raise(
1424
+ ::NoResponse::Models::Errors::APIStatusError.new(
1425
+ status_code: http_response.status,
1426
+ body: http_response.env.response_body,
1427
+ raw_response: http_response
1428
+ ),
1429
+ "API error occurred"
1430
+ )
1431
+ else
1432
+ raise(
1433
+ ::NoResponse::Models::Errors::APIStatusError.new(
1434
+ status_code: http_response.status,
1435
+ body: http_response.env.response_body,
1436
+ raw_response: http_response
1437
+ ),
1438
+ "Unknown status code received"
1439
+ )
1440
+
1441
+ end
1442
+ end
1443
+ end
1444
+ end