fastpixapi 0.0.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 (217) hide show
  1. checksums.yaml +7 -0
  2. data/lib/crystalline/metadata_fields.rb +210 -0
  3. data/lib/crystalline/t.rb +78 -0
  4. data/lib/crystalline/utils.rb +95 -0
  5. data/lib/crystalline.rb +12 -0
  6. data/lib/fastpix_api_sdk/input_video.rb +454 -0
  7. data/lib/fastpix_api_sdk/manage_live_stream.rb +717 -0
  8. data/lib/fastpix_api_sdk/manage_videos.rb +960 -0
  9. data/lib/fastpix_api_sdk/models/components/audioinput.rb +41 -0
  10. data/lib/fastpix_api_sdk/models/components/audioinput_type.rb +19 -0
  11. data/lib/fastpix_api_sdk/models/components/createlivestreamrequest.rb +37 -0
  12. data/lib/fastpix_api_sdk/models/components/createlivestreamrequest_maxresolution.rb +21 -0
  13. data/lib/fastpix_api_sdk/models/components/createlivestreamrequest_metadata.rb +28 -0
  14. data/lib/fastpix_api_sdk/models/components/createmediarequest.rb +89 -0
  15. data/lib/fastpix_api_sdk/models/components/createmediarequest_accesspolicy.rb +22 -0
  16. data/lib/fastpix_api_sdk/models/components/createmediarequest_accessrestrictions.rb +37 -0
  17. data/lib/fastpix_api_sdk/models/components/createmediarequest_domains.rb +48 -0
  18. data/lib/fastpix_api_sdk/models/components/createmediarequest_domains_defaultpolicy.rb +23 -0
  19. data/lib/fastpix_api_sdk/models/components/createmediarequest_languagecode.rb +26 -0
  20. data/lib/fastpix_api_sdk/models/components/createmediarequest_maxresolution.rb +25 -0
  21. data/lib/fastpix_api_sdk/models/components/createmediarequest_metadata.rb +29 -0
  22. data/lib/fastpix_api_sdk/models/components/createmediarequest_mp4support.rb +22 -0
  23. data/lib/fastpix_api_sdk/models/components/createmediarequest_type.rb +22 -0
  24. data/lib/fastpix_api_sdk/models/components/createmediarequest_useragents.rb +48 -0
  25. data/lib/fastpix_api_sdk/models/components/createmediarequest_useragents_defaultpolicy.rb +23 -0
  26. data/lib/fastpix_api_sdk/models/components/createmediaresponse.rb +62 -0
  27. data/lib/fastpix_api_sdk/models/components/createmediaresponse_maxresolution.rb +24 -0
  28. data/lib/fastpix_api_sdk/models/components/createmediaresponse_metadata.rb +28 -0
  29. data/lib/fastpix_api_sdk/models/components/directupload.rb +58 -0
  30. data/lib/fastpix_api_sdk/models/components/directuploadresponse.rb +37 -0
  31. data/lib/fastpix_api_sdk/models/components/directuploadresponse_metadata.rb +28 -0
  32. data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto.rb +85 -0
  33. data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto_metadata.rb +28 -0
  34. data/lib/fastpix_api_sdk/models/components/getcreatelivestreamresponsedto_srtplaybackresponse.rb +37 -0
  35. data/lib/fastpix_api_sdk/models/components/getstreamsresponse.rb +41 -0
  36. data/lib/fastpix_api_sdk/models/components/imposetrack.rb +49 -0
  37. data/lib/fastpix_api_sdk/models/components/input.rb +28 -0
  38. data/lib/fastpix_api_sdk/models/components/inputmediasettings.rb +45 -0
  39. data/lib/fastpix_api_sdk/models/components/livestreamdeleteresponse.rb +33 -0
  40. data/lib/fastpix_api_sdk/models/components/livestreamgetresponse.rb +37 -0
  41. data/lib/fastpix_api_sdk/models/components/livestreamresponsedto.rb +37 -0
  42. data/lib/fastpix_api_sdk/models/components/media.rb +93 -0
  43. data/lib/fastpix_api_sdk/models/components/media_maxresolution.rb +24 -0
  44. data/lib/fastpix_api_sdk/models/components/media_metadata.rb +28 -0
  45. data/lib/fastpix_api_sdk/models/components/media_mp4support.rb +22 -0
  46. data/lib/fastpix_api_sdk/models/components/mediapolicy.rb +20 -0
  47. data/lib/fastpix_api_sdk/models/components/moderation.rb +34 -0
  48. data/lib/fastpix_api_sdk/models/components/pagination.rb +41 -0
  49. data/lib/fastpix_api_sdk/models/components/patchlivestreamrequest.rb +37 -0
  50. data/lib/fastpix_api_sdk/models/components/patchlivestreamrequest_metadata.rb +28 -0
  51. data/lib/fastpix_api_sdk/models/components/patchresponsedata.rb +85 -0
  52. data/lib/fastpix_api_sdk/models/components/patchresponsedata_metadata.rb +28 -0
  53. data/lib/fastpix_api_sdk/models/components/patchresponsedata_srtplaybackresponse.rb +37 -0
  54. data/lib/fastpix_api_sdk/models/components/patchresponsedto.rb +37 -0
  55. data/lib/fastpix_api_sdk/models/components/placement.rb +45 -0
  56. data/lib/fastpix_api_sdk/models/components/playbackid.rb +41 -0
  57. data/lib/fastpix_api_sdk/models/components/playbackid_accesspolicy.rb +21 -0
  58. data/lib/fastpix_api_sdk/models/components/playbackid_accessrestrictions.rb +37 -0
  59. data/lib/fastpix_api_sdk/models/components/playbackid_domains.rb +41 -0
  60. data/lib/fastpix_api_sdk/models/components/playbackid_domains_defaultpolicy.rb +20 -0
  61. data/lib/fastpix_api_sdk/models/components/playbackid_useragents.rb +41 -0
  62. data/lib/fastpix_api_sdk/models/components/playbackid_useragents_defaultpolicy.rb +20 -0
  63. data/lib/fastpix_api_sdk/models/components/playbackidrequest.rb +33 -0
  64. data/lib/fastpix_api_sdk/models/components/playbackidrequest_accesspolicy.rb +20 -0
  65. data/lib/fastpix_api_sdk/models/components/playbackidresponse.rb +37 -0
  66. data/lib/fastpix_api_sdk/models/components/playbackidresponse_data.rb +37 -0
  67. data/lib/fastpix_api_sdk/models/components/playbackids.rb +37 -0
  68. data/lib/fastpix_api_sdk/models/components/playbacksettings.rb +33 -0
  69. data/lib/fastpix_api_sdk/models/components/playbacksettings_accesspolicy.rb +20 -0
  70. data/lib/fastpix_api_sdk/models/components/security.rb +37 -0
  71. data/lib/fastpix_api_sdk/models/components/segment_1.rb +37 -0
  72. data/lib/fastpix_api_sdk/models/components/segment_2.rb +37 -0
  73. data/lib/fastpix_api_sdk/models/components/segment_union.rb +28 -0
  74. data/lib/fastpix_api_sdk/models/components/simulcastdeleteresponse.rb +33 -0
  75. data/lib/fastpix_api_sdk/models/components/simulcastrequest.rb +37 -0
  76. data/lib/fastpix_api_sdk/models/components/simulcastresponse.rb +37 -0
  77. data/lib/fastpix_api_sdk/models/components/simulcastresponse_data.rb +49 -0
  78. data/lib/fastpix_api_sdk/models/components/simulcastresponse_metadata.rb +28 -0
  79. data/lib/fastpix_api_sdk/models/components/simulcastupdaterequest.rb +37 -0
  80. data/lib/fastpix_api_sdk/models/components/simulcastupdaterequest_metadata.rb +28 -0
  81. data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse.rb +37 -0
  82. data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse_data.rb +49 -0
  83. data/lib/fastpix_api_sdk/models/components/simulcastupdateresponse_metadata.rb +28 -0
  84. data/lib/fastpix_api_sdk/models/components/sourceresolution.rb +24 -0
  85. data/lib/fastpix_api_sdk/models/components/subtitle.rb +45 -0
  86. data/lib/fastpix_api_sdk/models/components/subtitle_metadata.rb +29 -0
  87. data/lib/fastpix_api_sdk/models/components/subtitleinput.rb +47 -0
  88. data/lib/fastpix_api_sdk/models/components/subtitleinput_languagecode.rb +76 -0
  89. data/lib/fastpix_api_sdk/models/components/summary.rb +40 -0
  90. data/lib/fastpix_api_sdk/models/components/track.rb +53 -0
  91. data/lib/fastpix_api_sdk/models/components/videoinput.rb +68 -0
  92. data/lib/fastpix_api_sdk/models/components/watermarkinput.rb +53 -0
  93. data/lib/fastpix_api_sdk/models/components/watermarkinput_type.rb +19 -0
  94. data/lib/fastpix_api_sdk/models/components/xalign.rb +21 -0
  95. data/lib/fastpix_api_sdk/models/components/yalign.rb +21 -0
  96. data/lib/fastpix_api_sdk/models/components.rb +98 -0
  97. data/lib/fastpix_api_sdk/models/errors/apierror.rb +38 -0
  98. data/lib/fastpix_api_sdk/models/errors/badrequest_error.rb +37 -0
  99. data/lib/fastpix_api_sdk/models/errors/badrequest_error_error.rb +42 -0
  100. data/lib/fastpix_api_sdk/models/errors/field.rb +37 -0
  101. data/lib/fastpix_api_sdk/models/errors/forbidden_error.rb +37 -0
  102. data/lib/fastpix_api_sdk/models/errors/forbidden_error_error.rb +42 -0
  103. data/lib/fastpix_api_sdk/models/errors/invalidpermission_error.rb +37 -0
  104. data/lib/fastpix_api_sdk/models/errors/invalidpermission_error_error.rb +42 -0
  105. data/lib/fastpix_api_sdk/models/errors/medianotfound_error.rb +37 -0
  106. data/lib/fastpix_api_sdk/models/errors/medianotfound_error_error.rb +42 -0
  107. data/lib/fastpix_api_sdk/models/errors/mediaorplaybacknotfound_error.rb +37 -0
  108. data/lib/fastpix_api_sdk/models/errors/mediaorplaybacknotfound_error_error.rb +42 -0
  109. data/lib/fastpix_api_sdk/models/errors/notfounderror.rb +37 -0
  110. data/lib/fastpix_api_sdk/models/errors/notfounderror_error.rb +42 -0
  111. data/lib/fastpix_api_sdk/models/errors/notfounderrorplaybackid.rb +37 -0
  112. data/lib/fastpix_api_sdk/models/errors/notfounderrorplaybackid_error.rb +42 -0
  113. data/lib/fastpix_api_sdk/models/errors/notfounderrorsimulcast.rb +37 -0
  114. data/lib/fastpix_api_sdk/models/errors/notfounderrorsimulcast_error.rb +42 -0
  115. data/lib/fastpix_api_sdk/models/errors/simulcastunavailable_error.rb +38 -0
  116. data/lib/fastpix_api_sdk/models/errors/simulcastunavailable_error_error.rb +45 -0
  117. data/lib/fastpix_api_sdk/models/errors/unauthorized_error.rb +37 -0
  118. data/lib/fastpix_api_sdk/models/errors/unauthorized_error_error.rb +42 -0
  119. data/lib/fastpix_api_sdk/models/errors/validationerrorresponse.rb +37 -0
  120. data/lib/fastpix_api_sdk/models/errors/validationerrorresponse_error.rb +41 -0
  121. data/lib/fastpix_api_sdk/models/errors.rb +35 -0
  122. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_accesspolicy.rb +21 -0
  123. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_accessrestrictions.rb +37 -0
  124. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_domains.rb +48 -0
  125. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_domains_defaultpolicy.rb +23 -0
  126. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_request.rb +37 -0
  127. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_requestbody.rb +37 -0
  128. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_response.rb +45 -0
  129. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_responsebody.rb +37 -0
  130. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_useragents.rb +48 -0
  131. data/lib/fastpix_api_sdk/models/operations/create_media_playback_id_useragents_defaultpolicy.rb +23 -0
  132. data/lib/fastpix_api_sdk/models/operations/create_media_response.rb +45 -0
  133. data/lib/fastpix_api_sdk/models/operations/create_media_responsebody.rb +37 -0
  134. data/lib/fastpix_api_sdk/models/operations/create_new_stream_response.rb +45 -0
  135. data/lib/fastpix_api_sdk/models/operations/create_playbackid_of_stream_request.rb +37 -0
  136. data/lib/fastpix_api_sdk/models/operations/create_playbackid_of_stream_response.rb +45 -0
  137. data/lib/fastpix_api_sdk/models/operations/create_simulcast_of_stream_request.rb +37 -0
  138. data/lib/fastpix_api_sdk/models/operations/create_simulcast_of_stream_response.rb +45 -0
  139. data/lib/fastpix_api_sdk/models/operations/data.rb +33 -0
  140. data/lib/fastpix_api_sdk/models/operations/delete_live_stream_request.rb +33 -0
  141. data/lib/fastpix_api_sdk/models/operations/delete_live_stream_response.rb +45 -0
  142. data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_request.rb +37 -0
  143. data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_response.rb +45 -0
  144. data/lib/fastpix_api_sdk/models/operations/delete_media_playback_id_responsebody.rb +33 -0
  145. data/lib/fastpix_api_sdk/models/operations/delete_media_request.rb +33 -0
  146. data/lib/fastpix_api_sdk/models/operations/delete_media_response.rb +45 -0
  147. data/lib/fastpix_api_sdk/models/operations/delete_media_responsebody.rb +33 -0
  148. data/lib/fastpix_api_sdk/models/operations/delete_playbackid_of_stream_request.rb +37 -0
  149. data/lib/fastpix_api_sdk/models/operations/delete_playbackid_of_stream_response.rb +45 -0
  150. data/lib/fastpix_api_sdk/models/operations/delete_simulcast_of_stream_request.rb +37 -0
  151. data/lib/fastpix_api_sdk/models/operations/delete_simulcast_of_stream_response.rb +45 -0
  152. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_accesspolicy.rb +20 -0
  153. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_accessrestrictions.rb +37 -0
  154. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_domains.rb +48 -0
  155. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_domains_defaultpolicy.rb +23 -0
  156. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_metadata.rb +28 -0
  157. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_request.rb +37 -0
  158. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_response.rb +45 -0
  159. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_responsebody.rb +37 -0
  160. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_useragents.rb +48 -0
  161. data/lib/fastpix_api_sdk/models/operations/direct_upload_video_media_useragents_defaultpolicy.rb +23 -0
  162. data/lib/fastpix_api_sdk/models/operations/get_all_streams_orderby.rb +20 -0
  163. data/lib/fastpix_api_sdk/models/operations/get_all_streams_request.rb +41 -0
  164. data/lib/fastpix_api_sdk/models/operations/get_all_streams_response.rb +45 -0
  165. data/lib/fastpix_api_sdk/models/operations/get_live_stream_by_id_request.rb +33 -0
  166. data/lib/fastpix_api_sdk/models/operations/get_live_stream_by_id_response.rb +45 -0
  167. data/lib/fastpix_api_sdk/models/operations/get_live_stream_playback_id_request.rb +37 -0
  168. data/lib/fastpix_api_sdk/models/operations/get_live_stream_playback_id_response.rb +45 -0
  169. data/lib/fastpix_api_sdk/models/operations/get_media_request.rb +33 -0
  170. data/lib/fastpix_api_sdk/models/operations/get_media_response.rb +45 -0
  171. data/lib/fastpix_api_sdk/models/operations/get_media_responsebody.rb +37 -0
  172. data/lib/fastpix_api_sdk/models/operations/get_specific_simulcast_of_stream_request.rb +37 -0
  173. data/lib/fastpix_api_sdk/models/operations/get_specific_simulcast_of_stream_response.rb +45 -0
  174. data/lib/fastpix_api_sdk/models/operations/input.rb +28 -0
  175. data/lib/fastpix_api_sdk/models/operations/languagecode.rb +26 -0
  176. data/lib/fastpix_api_sdk/models/operations/list_media_orderby.rb +20 -0
  177. data/lib/fastpix_api_sdk/models/operations/list_media_request.rb +41 -0
  178. data/lib/fastpix_api_sdk/models/operations/list_media_response.rb +45 -0
  179. data/lib/fastpix_api_sdk/models/operations/list_media_responsebody.rb +41 -0
  180. data/lib/fastpix_api_sdk/models/operations/maxresolution.rb +25 -0
  181. data/lib/fastpix_api_sdk/models/operations/moderation.rb +34 -0
  182. data/lib/fastpix_api_sdk/models/operations/mp4support.rb +22 -0
  183. data/lib/fastpix_api_sdk/models/operations/push_media_settings.rb +95 -0
  184. data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_request.rb +33 -0
  185. data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_response.rb +45 -0
  186. data/lib/fastpix_api_sdk/models/operations/retrievemediainputinfo_responsebody.rb +37 -0
  187. data/lib/fastpix_api_sdk/models/operations/subtitles.rb +43 -0
  188. data/lib/fastpix_api_sdk/models/operations/subtitles_metadata.rb +28 -0
  189. data/lib/fastpix_api_sdk/models/operations/summary.rb +40 -0
  190. data/lib/fastpix_api_sdk/models/operations/type.rb +22 -0
  191. data/lib/fastpix_api_sdk/models/operations/update_live_stream_request.rb +37 -0
  192. data/lib/fastpix_api_sdk/models/operations/update_live_stream_response.rb +45 -0
  193. data/lib/fastpix_api_sdk/models/operations/update_specific_simulcast_of_stream_request.rb +41 -0
  194. data/lib/fastpix_api_sdk/models/operations/update_specific_simulcast_of_stream_response.rb +45 -0
  195. data/lib/fastpix_api_sdk/models/operations/updated_media_metadata.rb +28 -0
  196. data/lib/fastpix_api_sdk/models/operations/updated_media_request.rb +37 -0
  197. data/lib/fastpix_api_sdk/models/operations/updated_media_requestbody.rb +33 -0
  198. data/lib/fastpix_api_sdk/models/operations/updated_media_response.rb +45 -0
  199. data/lib/fastpix_api_sdk/models/operations/updated_media_responsebody.rb +37 -0
  200. data/lib/fastpix_api_sdk/models/operations.rb +89 -0
  201. data/lib/fastpix_api_sdk/playback.rb +941 -0
  202. data/lib/fastpix_api_sdk/sdk.rb +103 -0
  203. data/lib/fastpix_api_sdk/sdk_hooks/hooks.rb +96 -0
  204. data/lib/fastpix_api_sdk/sdk_hooks/types.rb +157 -0
  205. data/lib/fastpix_api_sdk/sdkconfiguration.rb +77 -0
  206. data/lib/fastpix_api_sdk/simulcast_stream.rb +767 -0
  207. data/lib/fastpix_api_sdk/start_live_stream.rb +208 -0
  208. data/lib/fastpix_api_sdk/utils/forms.rb +210 -0
  209. data/lib/fastpix_api_sdk/utils/headers.rb +79 -0
  210. data/lib/fastpix_api_sdk/utils/query_params.rb +133 -0
  211. data/lib/fastpix_api_sdk/utils/request_bodies.rb +62 -0
  212. data/lib/fastpix_api_sdk/utils/retries.rb +95 -0
  213. data/lib/fastpix_api_sdk/utils/security.rb +133 -0
  214. data/lib/fastpix_api_sdk/utils/url.rb +102 -0
  215. data/lib/fastpix_api_sdk/utils/utils.rb +186 -0
  216. data/lib/fastpixapi.rb +29 -0
  217. metadata +442 -0
@@ -0,0 +1,208 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'faraday/retry'
9
+ require 'sorbet-runtime'
10
+ require_relative 'sdk_hooks/hooks'
11
+ require_relative 'utils/retries'
12
+
13
+ module FastpixApiSDK
14
+ extend T::Sig
15
+ class StartLiveStream
16
+ extend T::Sig
17
+ attr_accessor
18
+
19
+
20
+ sig { params(sdk_config: SDKConfiguration).void }
21
+ def initialize(sdk_config)
22
+ @sdk_configuration = sdk_config
23
+
24
+ end
25
+
26
+ sig { params(base_url: String, url_variables: T.nilable(T::Hash[Symbol, String])).returns(String) }
27
+ def get_url(base_url:, url_variables: nil)
28
+ sd_base_url, sd_options = @sdk_configuration.get_server_details
29
+
30
+ if base_url.nil?
31
+ base_url = sd_base_url
32
+ end
33
+
34
+ if url_variables.nil?
35
+ url_variables = sd_options
36
+ end
37
+
38
+ return Utils.template_url base_url, url_variables
39
+ end
40
+
41
+
42
+ sig { params(request: T.nilable(Models::Components::CreateLiveStreamRequest), timeout_ms: T.nilable(Integer)).returns(Models::Operations::CreateNewStreamResponse) }
43
+ def create_new_stream(request: nil, timeout_ms: nil)
44
+ # create_new_stream - Create a new stream
45
+ # Allows you to initiate a new RTMP or SRT live stream on FastPix. Upon creating a stream, FastPix generates a unique stream key and SRT secret, which can be used with any broadcasting software (like OBS) to connect to FastPix's RTMP or SRT servers. Users can configure the stream settings, including metadata (such as stream name and description), reconnect window (in case of disconnection), privacy options (public or private), and advanced features like enabling DVR mode.
46
+ # Leverage SRT for live streaming in environments with unstable networks, taking advantage of its error correction and encryption features for a resilient and secure broadcast.
47
+ #
48
+ # <h4>How it works</h4>
49
+ #
50
+ # When a user sends a POST request to this endpoint, FastPix returns the stream details for both RTMP and SRT configurations. These keys and IDs from the stream details are essential for connecting the broadcasting software to FastPix's servers and transmitting the live stream to viewers.
51
+ # FastPix uses <a href=https://docs.fastpix.io/docs/webhooks-for-status#/>webhooks</a> to tell your application about things that happen in the background, outside of the API regular request flow. For instance, once the live stream is created, we'll shoot a POST message to the address you give us with the webhook event <a href=https://docs.fastpix.io/docs/video-live_stream-created#/>video.live_stream.created</a>. Here're <a href=https://docs.fastpix.io/docs/webhooks-for-status#/live-stream-related-events>other live stream event related</a> webhooks you would want to look for.
52
+ #
53
+ # **Use case:** A gaming content creator initiates a live stream through the API, specifying a 1080p resolution and public access. They receive the stream key, RTMP and SRT details in the response. Using the SRT connection, they broadcast a high-action gaming session with reduced latency, offering viewers a seamless experience.
54
+ #
55
+ #
56
+ # **Detailed example:**
57
+ # Imagine a gaming platform that allows users to live stream gameplay directly from their dashboard. The API creates a new stream, provides the necessary stream key, and sets it to "private" so that only specific viewers can access it.
58
+ url, params = @sdk_configuration.get_server_details
59
+ base_url = Utils.template_url(url, params)
60
+ url = "#{base_url}/streams"
61
+ headers = {}
62
+ req_content_type, data, form = Utils.serialize_request_body(request, false, true, :request, :json)
63
+ headers['content-type'] = req_content_type
64
+
65
+ if form
66
+ body = Utils.encode_form(form)
67
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
68
+ body = URI.encode_www_form(data)
69
+ else
70
+ body = data
71
+ end
72
+ headers['Accept'] = 'application/json'
73
+ headers['user-agent'] = @sdk_configuration.user_agent
74
+
75
+ security = !@sdk_configuration.nil? && !@sdk_configuration.security_source.nil? ? @sdk_configuration.security_source.call : nil
76
+
77
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
78
+ timeout ||= @sdk_configuration.timeout
79
+
80
+ connection = @sdk_configuration.client
81
+
82
+ hook_ctx = SDKHooks::HookContext.new(
83
+ config: @sdk_configuration,
84
+ base_url: base_url,
85
+ oauth2_scopes: [],
86
+ operation_id: 'create-new-stream',
87
+ security_source: @sdk_configuration.security_source
88
+ )
89
+
90
+ error = T.let(nil, T.nilable(StandardError))
91
+ http_response = T.let(nil, T.nilable(Faraday::Response))
92
+
93
+
94
+ begin
95
+ http_response = connection.post(url) do |req|
96
+ req.body = body
97
+ req.headers.merge!(headers)
98
+ req.options.timeout = timeout unless timeout.nil?
99
+ Utils.configure_request_security(req, security)
100
+
101
+ @sdk_configuration.hooks.before_request(
102
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
103
+ hook_ctx: hook_ctx
104
+ ),
105
+ request: req
106
+ )
107
+ end
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, ['201'])
136
+ if Utils.match_content_type(content_type, 'application/json')
137
+ http_response = @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::Components::LiveStreamResponseDTO)
145
+ response = Models::Operations::CreateNewStreamResponse.new(
146
+ status_code: http_response.status,
147
+ content_type: content_type,
148
+ raw_response: http_response,
149
+ live_stream_response_dto: obj
150
+ )
151
+
152
+ return response
153
+ else
154
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
155
+ end
156
+ elsif Utils.match_status_code(http_response.status, ['401'])
157
+ if Utils.match_content_type(content_type, 'application/json')
158
+ http_response = @sdk_configuration.hooks.after_success(
159
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
160
+ hook_ctx: hook_ctx
161
+ ),
162
+ response: http_response
163
+ )
164
+ response_data = http_response.env.response_body
165
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::UnauthorizedError)
166
+ throw obj
167
+ else
168
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
169
+ end
170
+ elsif Utils.match_status_code(http_response.status, ['403'])
171
+ if Utils.match_content_type(content_type, 'application/json')
172
+ http_response = @sdk_configuration.hooks.after_success(
173
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
174
+ hook_ctx: hook_ctx
175
+ ),
176
+ response: http_response
177
+ )
178
+ response_data = http_response.env.response_body
179
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::InvalidPermissionError)
180
+ throw obj
181
+ else
182
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
183
+ end
184
+ elsif Utils.match_status_code(http_response.status, ['422'])
185
+ if Utils.match_content_type(content_type, 'application/json')
186
+ http_response = @sdk_configuration.hooks.after_success(
187
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
188
+ hook_ctx: hook_ctx
189
+ ),
190
+ response: http_response
191
+ )
192
+ response_data = http_response.env.response_body
193
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ValidationErrorResponse)
194
+ throw obj
195
+ else
196
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
197
+ end
198
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
199
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
200
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
201
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
202
+ else
203
+ raise ::FastpixApiSDK::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
204
+
205
+ end
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,210 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'sorbet-runtime'
9
+ require 'base64'
10
+
11
+ module FastpixApiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig do
16
+ params(field_name: String, explode: T::Boolean, obj: Object, delimiter: String,
17
+ get_field_name_lambda: T.proc.params(obj_field: ::Crystalline::MetadataFields::Field).returns(String))
18
+ .returns(T::Hash[Symbol, T::Array[String]])
19
+ end
20
+ def self._populate_form(field_name, explode, obj, delimiter, &get_field_name_lambda)
21
+ params = {}
22
+
23
+ return params if obj.nil?
24
+
25
+ if obj.respond_to? :fields
26
+ items = []
27
+ obj_fields = obj.fields
28
+ obj_fields.each do |obj_field|
29
+ obj_field_name = get_field_name_lambda.call(obj_field)
30
+ next if obj_field_name == ''
31
+
32
+ val = obj.send(obj_field.name.to_sym)
33
+ next if val.nil?
34
+
35
+ if explode
36
+ params[obj_field_name] = [val_to_string(val)]
37
+ else
38
+ items.append("#{obj_field_name}#{delimiter}#{val_to_string(val)}")
39
+ end
40
+ end
41
+
42
+ params[field_name] = [items.join(delimiter)] if !items.empty?
43
+ elsif obj.is_a? Hash
44
+ items = []
45
+ obj.each do |key, value|
46
+ next if value.nil?
47
+
48
+ if explode
49
+ params[key] = val_to_string(value)
50
+ else
51
+ items.append("#{key}#{delimiter}#{val_to_string(value)}")
52
+ end
53
+ end
54
+ params[field_name] = [items.join(delimiter)] if !items.empty?
55
+
56
+ elsif obj.is_a? Array
57
+ items = []
58
+ obj.each do |value|
59
+ next if value.nil?
60
+
61
+ if explode
62
+ params[field_name] = [] if !params.key? field_name
63
+
64
+ params[field_name].append(val_to_string(value))
65
+ else
66
+ items.append(val_to_string(value))
67
+ end
68
+ end
69
+ params[field_name] = items.map(&:to_s).join(delimiter) if !items.empty?
70
+
71
+ else
72
+ params[field_name] = val_to_string(obj)
73
+ end
74
+ params
75
+ end
76
+
77
+ sig { params(media_type: String, request: Object).returns([String, Object, T::Array[T::Array[Object]]]) }
78
+ def self.serialize_multipart_form(media_type, request)
79
+ form = []
80
+ request_fields = request.fields
81
+ request_fields.each do |field|
82
+ val = request.send(field.name)
83
+ next if val.nil?
84
+
85
+ field_metadata = field.metadata[:multipart_form]
86
+ next if field_metadata.nil?
87
+
88
+ if field_metadata[:file] == true
89
+ field_name = field_metadata[:field_name]
90
+
91
+ # Handle arrays of files
92
+ if val.is_a? Array
93
+ val.each do |file_obj|
94
+ file_fields = file_obj.fields
95
+ file_name = ''
96
+ content = nil
97
+
98
+ file_fields.each do |file_field|
99
+ file_metadata = file_field.metadata[:multipart_form]
100
+ next if file_metadata.nil?
101
+
102
+ if file_metadata[:content] == true
103
+ content = file_obj.send(file_field.name)
104
+ else
105
+ file_name = file_obj.send(file_field.name)
106
+ end
107
+ end
108
+ raise StandardError, 'invalid multipart/form-data file' if file_name == '' || content == nil?
109
+
110
+ form.append([field_name, [file_name, content]])
111
+ end
112
+ else
113
+ # Handle single file
114
+ file_fields = val.fields
115
+ file_name = ''
116
+ content = nil
117
+
118
+ file_fields.each do |file_field|
119
+ file_metadata = file_field.metadata[:multipart_form]
120
+ next if file_metadata.nil?
121
+
122
+ if file_metadata[:content] == true
123
+ content = val.send(file_field.name)
124
+ else
125
+ file_name = val.send(file_field.name)
126
+ end
127
+ end
128
+ raise StandardError, 'invalid multipart/form-data file' if file_name == '' || content == nil?
129
+
130
+ form.append([field_name, [file_name, content]])
131
+ end
132
+ elsif field_metadata[:json] == true
133
+ to_append = [
134
+ field_metadata.fetch(:field_name, field.name), [
135
+ nil, ::Crystalline.to_json(val), 'application/json'
136
+ ]
137
+ ]
138
+ form.append(to_append)
139
+ else
140
+ field_name = field_metadata.fetch(
141
+ :field_name, field.name
142
+ )
143
+ if val.is_a? Array
144
+ val.each do |value|
145
+ next if value.nil?
146
+
147
+ form.append(
148
+ ["#{field_name}[]", [nil, val_to_string(value)]]
149
+ )
150
+ end
151
+ else
152
+ form.append([field_name, [nil, val_to_string(val)]])
153
+ end
154
+ end
155
+ end
156
+ [media_type, nil, form]
157
+ end
158
+
159
+
160
+ sig do
161
+ params(field_name: Symbol, data: T.any(Object, T::Hash[Symbol, String]))
162
+ .returns(T::Hash[Symbol, Object])
163
+ end
164
+ def self.serialize_form_data(field_name, data)
165
+ get_form_field_name = lambda do |obj_field|
166
+ obj_param_metadata = obj_field.metadata[:form]
167
+
168
+ return '' if obj_param_metadata.nil?
169
+
170
+ return obj_param_metadata.fetch(:field_name, obj_field.name)
171
+ end
172
+
173
+ form = {}
174
+ if data.respond_to? :fields
175
+ data.fields.each do |field|
176
+ val = data.send(field.name)
177
+ next if val.nil?
178
+
179
+ metadata = field.metadata[:form]
180
+
181
+ next if metadata.nil?
182
+
183
+ field_name = metadata.fetch(:field_name, field.name)
184
+
185
+ if metadata[:json]
186
+ form[field_name] = ::Crystalline.to_json(val)
187
+ else
188
+ if metadata.fetch(:style, 'form') == 'form'
189
+ form = form.merge(
190
+ _populate_form(
191
+ field_name, metadata.fetch(:explode, true), val, ',', &get_form_field_name
192
+ )
193
+ )
194
+ else
195
+ raise StandardError, "Invalid form style for field #{field.name}"
196
+ end
197
+ end
198
+ end
199
+ elsif data.is_a? Hash
200
+ data.each do |key, value|
201
+ form[key] = [val_to_string(value)]
202
+ end
203
+ else
204
+ raise StandardError, "Invalid request body type for field #{field_name}"
205
+ end
206
+
207
+ form
208
+ end
209
+ end
210
+ end
@@ -0,0 +1,79 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'sorbet-runtime'
9
+ require 'base64'
10
+
11
+ module FastpixApiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig { params(headers_params: Object, gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(T::Hash[Symbol, String]) }
16
+ def self.get_headers(headers_params, gbls = nil)
17
+ return {} if headers_params.nil?
18
+
19
+ headers = {}
20
+ param_fields = headers_params.fields
21
+ param_fields.each do |f|
22
+ metadata = f.metadata[:header]
23
+ next if metadata.nil?
24
+
25
+ value = _populate_from_globals(f.name, headers_params&.send(f.name), 'header', gbls)
26
+ value = _serialize_header(metadata.fetch(:explode, false), value)
27
+ headers[metadata.fetch(:field_name, f.name)] = value if !value.empty?
28
+ end
29
+ headers
30
+ end
31
+
32
+ sig { params(explode: T::Boolean, obj: Object).returns(String) }
33
+ def self._serialize_header(explode, obj)
34
+ return '' if obj.nil?
35
+
36
+ if obj.respond_to? :fields
37
+ items = []
38
+ obj_fields = obj.fields
39
+ obj_fields.each do |obj_field|
40
+ obj_param_metadata = obj_field.metadata[:header]
41
+ next if obj_param_metadata.nil?
42
+
43
+ obj_field_name = obj_param_metadata.fetch(:field_name, obj_field.name)
44
+ next if obj_field_name == ''
45
+
46
+ val = obj.send(obj_field.name)
47
+ next if val.nil?
48
+
49
+ if explode
50
+ items.append("#{obj_field_name}=#{val_to_string(val)}")
51
+ else
52
+ items.append(obj_field_name)
53
+ items.append(val_to_string(val))
54
+ end
55
+ end
56
+
57
+ items.join(',') if !items.empty?
58
+ elsif obj.is_a? Hash
59
+ items = []
60
+ obj.each do |key, value|
61
+ next if value.nil?
62
+
63
+ if explode
64
+ items.append("#{key}=#{val_to_string(value)}")
65
+ else
66
+ items.append(key)
67
+ items.append(val_to_string(value))
68
+ end
69
+ end
70
+
71
+ items.join(',') if !items.empty?
72
+ elsif obj.is_a? Array
73
+ items = obj.filter { |v| !v.nil? }.map { |v| val_to_string(v) }.join(',')
74
+ else
75
+ val_to_string(obj)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,133 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'sorbet-runtime'
9
+ require 'base64'
10
+
11
+ module FastpixApiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig { params(clazz: Class, query_params: Object, url_override: T.nilable(::String), gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(T::Hash[Symbol, T::Array[String]]) }
16
+ def self.get_query_params(clazz, query_params, url_override = nil, gbls = nil)
17
+ parsed_params = {}
18
+ if !url_override.nil?
19
+ parsed_url = URI.parse url_override
20
+ parsed_params = CGI.parse parsed_url.query
21
+ end
22
+ params = {}
23
+ param_fields = clazz.fields
24
+ param_fields.each do |f|
25
+ request_metadata = f.metadata[:request]
26
+ next if !request_metadata.nil?
27
+
28
+ metadata = f.metadata[:query_param]
29
+ next if metadata.nil?
30
+
31
+ param_name = f.name
32
+ value = query_params&.send(param_name.to_sym)
33
+ value = _populate_from_globals(param_name, value, 'queryParam', gbls)
34
+
35
+ f_name = metadata[:field_name]
36
+ serialization = metadata.fetch(:serialization, '')
37
+ if serialization != ''
38
+ params = params.merge _get_serialized_params(
39
+ metadata, f_name, value
40
+ )
41
+ else
42
+ style = metadata.fetch(:style, 'form')
43
+ case style
44
+ when 'deepObject'
45
+ params = params.merge _get_deep_object_query_params(
46
+ metadata, f_name, value
47
+ )
48
+ when 'form'
49
+ params = params.merge _get_delimited_query_params(
50
+ metadata, f_name, value, ','
51
+ )
52
+ when 'pipeDelimited'
53
+ params = params.merge _get_delimited_query_params(
54
+ metadata, f_name, value, '|'
55
+ )
56
+ else
57
+ raise StandardError, 'not yet implemented'
58
+ end
59
+ end
60
+ end
61
+ params.merge parsed_params
62
+ end
63
+
64
+ sig do
65
+ params(metadata: T::Hash[Symbol, String], field_name: String, obj: Object)
66
+ .returns(T::Hash[Symbol, T::Array[String]])
67
+ end
68
+ def self._get_deep_object_query_params(metadata, field_name, obj)
69
+ params = {}
70
+
71
+ return params if obj.nil?
72
+
73
+ if obj.respond_to? :fields
74
+ obj_fields = obj.fields
75
+ obj_fields.each do |obj_field|
76
+ obj_param_metadata = obj_field.metadata[:query_param]
77
+ next if obj_param_metadata.nil?
78
+
79
+ val = obj.send(obj_field.name)
80
+ next if val.nil?
81
+
82
+ key = "#{metadata.fetch(:field_name, field_name)}[#{obj_param_metadata.fetch(:field_name, obj_field.name)}]"
83
+ if val.is_a? Array
84
+ val.each do |v|
85
+ next if v.nil?
86
+
87
+ params[key] = [] if !params.include? key
88
+
89
+ params[key] << val_to_string(v)
90
+ end
91
+ else
92
+ params[key] = [val_to_string(val)]
93
+ end
94
+ end
95
+ elsif obj.is_a? Hash
96
+ obj.each do |key, value|
97
+ next if value.nil?
98
+
99
+ param_key = "#{metadata.fetch(:field_name, field_name)}[#{key}]"
100
+ if value.is_a? Array
101
+ value.each do |val|
102
+ next if val.nil?
103
+
104
+ params[param_key] = [] if !params.include? param_key
105
+
106
+ params[param_key].append(val_to_string(val))
107
+ end
108
+ else
109
+ params[param_key] = [val_to_string(value)]
110
+ end
111
+ end
112
+ end
113
+ params
114
+ end
115
+
116
+
117
+ sig do
118
+ params(metadata: T::Hash[Symbol, String], field_name: String, obj: Object, delimiter: String)
119
+ .returns(T::Hash[Symbol, T::Array[String]])
120
+ end
121
+ def self._get_delimited_query_params(metadata, field_name, obj, delimiter)
122
+ get_query_param_field_name = lambda do |obj_field|
123
+ obj_param_metadata = obj_field.metadata[:query_param]
124
+
125
+ return '' if obj_param_metadata.nil?
126
+
127
+ return obj_param_metadata.fetch(:field_name, obj_field.name)
128
+ end
129
+
130
+ _populate_form(field_name, metadata.fetch(:explode, true), obj, delimiter, &get_query_param_field_name)
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,62 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'sorbet-runtime'
9
+ require 'base64'
10
+
11
+ module FastpixApiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
16
+ 'json': 'application/json',
17
+ 'form': 'application/x-www-form-urlencoded',
18
+ 'multipart': 'multipart/form-data',
19
+ 'raw': 'application/octet-stream',
20
+ 'string': 'text/plain'
21
+ }.freeze
22
+
23
+ sig do
24
+ params(request: Object, nullable: T::Boolean, optional: T::Boolean, request_field_name: Symbol, serialization_method: Symbol)
25
+ .returns([String, Object, Object])
26
+ end
27
+ def self.serialize_request_body(request, nullable, optional, request_field_name, serialization_method)
28
+ return ['', nil, nil] if request.nil? && !nullable && optional
29
+
30
+ return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request) if !request.respond_to?(:fields) || !request.respond_to?(request_field_name)
31
+
32
+ request_val = request.send(request_field_name)
33
+
34
+ request_fields = request.fields
35
+ request_metadata = nil
36
+ request_fields.each do |f|
37
+ if f.name == request_field_name
38
+ request_metadata = f.metadata[:request]
39
+ break
40
+ end
41
+ end
42
+ raise StandardError, 'invalid request type' if request_metadata.nil?
43
+
44
+ serialize_content_type(
45
+ :request, request_metadata.fetch(:media_type, 'application/octet-stream'), request_val
46
+ )
47
+ end
48
+
49
+ sig do
50
+ params(field_name: Symbol, media_type: String, request: Object)
51
+ .returns([String, Object, T.nilable(T::Array[T::Array[Object]])])
52
+ end
53
+ def self.serialize_content_type(field_name, media_type, request)
54
+ return media_type, ::Crystalline.to_json(request), nil if media_type.match('(application|text)\/.*?\+*json.*')
55
+ return serialize_multipart_form(media_type, request) if media_type.match('multipart\/.*')
56
+ return media_type, serialize_form_data(field_name, request), nil if media_type.match('application\/x-www-form-urlencoded.*')
57
+ return media_type, request, nil if request.is_a?(String) || request.is_a?(Array)
58
+
59
+ raise StandardError, "invalid request body type #{type(request)} for mediaType {metadata['media_type']}"
60
+ end
61
+ end
62
+ end