safetykit 0.5.0

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 (158) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +47 -0
  4. data/README.md +208 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/safety_kit/client.rb +111 -0
  7. data/lib/safety_kit/errors.rb +228 -0
  8. data/lib/safety_kit/file_part.rb +58 -0
  9. data/lib/safety_kit/internal/transport/base_client.rb +575 -0
  10. data/lib/safety_kit/internal/transport/pooled_net_requester.rb +210 -0
  11. data/lib/safety_kit/internal/type/array_of.rb +168 -0
  12. data/lib/safety_kit/internal/type/base_model.rb +529 -0
  13. data/lib/safety_kit/internal/type/base_page.rb +55 -0
  14. data/lib/safety_kit/internal/type/boolean.rb +77 -0
  15. data/lib/safety_kit/internal/type/converter.rb +327 -0
  16. data/lib/safety_kit/internal/type/enum.rb +131 -0
  17. data/lib/safety_kit/internal/type/file_input.rb +111 -0
  18. data/lib/safety_kit/internal/type/hash_of.rb +188 -0
  19. data/lib/safety_kit/internal/type/request_parameters.rb +42 -0
  20. data/lib/safety_kit/internal/type/union.rb +237 -0
  21. data/lib/safety_kit/internal/type/unknown.rb +81 -0
  22. data/lib/safety_kit/internal/util.rb +966 -0
  23. data/lib/safety_kit/internal.rb +20 -0
  24. data/lib/safety_kit/models/agent_decision_create_agent_decision_params.rb +68 -0
  25. data/lib/safety_kit/models/agent_decision_create_agent_decision_response.rb +19 -0
  26. data/lib/safety_kit/models/beta/event_create_params.rb +1140 -0
  27. data/lib/safety_kit/models/beta/event_create_response.rb +41 -0
  28. data/lib/safety_kit/models/client_session_create_session_params.rb +30 -0
  29. data/lib/safety_kit/models/client_session_create_session_response.rb +19 -0
  30. data/lib/safety_kit/models/data_add_params.rb +52 -0
  31. data/lib/safety_kit/models/data_add_response.rb +44 -0
  32. data/lib/safety_kit/models/data_create_upload_url_params.rb +176 -0
  33. data/lib/safety_kit/models/data_create_upload_url_response.rb +69 -0
  34. data/lib/safety_kit/models/data_get_download_url_params.rb +30 -0
  35. data/lib/safety_kit/models/data_get_download_url_response.rb +80 -0
  36. data/lib/safety_kit/models/data_get_status_params.rb +30 -0
  37. data/lib/safety_kit/models/data_get_status_response.rb +128 -0
  38. data/lib/safety_kit/models/data_object.rb +24 -0
  39. data/lib/safety_kit/models/data_update_settings_params.rb +176 -0
  40. data/lib/safety_kit/models/data_update_settings_response.rb +34 -0
  41. data/lib/safety_kit/models/stream_add_frame_params.rb +50 -0
  42. data/lib/safety_kit/models/stream_add_frame_response.rb +34 -0
  43. data/lib/safety_kit/models/stream_add_params.rb +36 -0
  44. data/lib/safety_kit/models/stream_add_response.rb +34 -0
  45. data/lib/safety_kit/models/stream_add_transcript_params.rb +43 -0
  46. data/lib/safety_kit/models/stream_add_transcript_response.rb +34 -0
  47. data/lib/safety_kit/models.rb +65 -0
  48. data/lib/safety_kit/request_options.rb +77 -0
  49. data/lib/safety_kit/resources/agent_decisions.rb +55 -0
  50. data/lib/safety_kit/resources/beta/events.rb +45 -0
  51. data/lib/safety_kit/resources/beta.rb +19 -0
  52. data/lib/safety_kit/resources/client_sessions.rb +42 -0
  53. data/lib/safety_kit/resources/data.rb +159 -0
  54. data/lib/safety_kit/resources/streams.rb +113 -0
  55. data/lib/safety_kit/version.rb +5 -0
  56. data/lib/safety_kit.rb +84 -0
  57. data/manifest.yaml +17 -0
  58. data/rbi/safety_kit/client.rbi +68 -0
  59. data/rbi/safety_kit/errors.rbi +205 -0
  60. data/rbi/safety_kit/file_part.rbi +37 -0
  61. data/rbi/safety_kit/internal/transport/base_client.rbi +298 -0
  62. data/rbi/safety_kit/internal/transport/pooled_net_requester.rbi +83 -0
  63. data/rbi/safety_kit/internal/type/array_of.rbi +104 -0
  64. data/rbi/safety_kit/internal/type/base_model.rbi +308 -0
  65. data/rbi/safety_kit/internal/type/base_page.rbi +42 -0
  66. data/rbi/safety_kit/internal/type/boolean.rbi +58 -0
  67. data/rbi/safety_kit/internal/type/converter.rbi +216 -0
  68. data/rbi/safety_kit/internal/type/enum.rbi +82 -0
  69. data/rbi/safety_kit/internal/type/file_input.rbi +59 -0
  70. data/rbi/safety_kit/internal/type/hash_of.rbi +104 -0
  71. data/rbi/safety_kit/internal/type/request_parameters.rbi +29 -0
  72. data/rbi/safety_kit/internal/type/union.rbi +128 -0
  73. data/rbi/safety_kit/internal/type/unknown.rbi +58 -0
  74. data/rbi/safety_kit/internal/util.rbi +515 -0
  75. data/rbi/safety_kit/internal.rbi +18 -0
  76. data/rbi/safety_kit/models/agent_decision_create_agent_decision_params.rbi +95 -0
  77. data/rbi/safety_kit/models/agent_decision_create_agent_decision_response.rbi +31 -0
  78. data/rbi/safety_kit/models/beta/event_create_params.rbi +2379 -0
  79. data/rbi/safety_kit/models/beta/event_create_response.rbi +87 -0
  80. data/rbi/safety_kit/models/client_session_create_session_params.rbi +60 -0
  81. data/rbi/safety_kit/models/client_session_create_session_response.rbi +31 -0
  82. data/rbi/safety_kit/models/data_add_params.rbi +82 -0
  83. data/rbi/safety_kit/models/data_add_response.rbi +77 -0
  84. data/rbi/safety_kit/models/data_create_upload_url_params.rbi +473 -0
  85. data/rbi/safety_kit/models/data_create_upload_url_response.rbi +113 -0
  86. data/rbi/safety_kit/models/data_get_download_url_params.rbi +54 -0
  87. data/rbi/safety_kit/models/data_get_download_url_response.rbi +136 -0
  88. data/rbi/safety_kit/models/data_get_status_params.rbi +51 -0
  89. data/rbi/safety_kit/models/data_get_status_response.rbi +264 -0
  90. data/rbi/safety_kit/models/data_object.rbi +33 -0
  91. data/rbi/safety_kit/models/data_update_settings_params.rbi +458 -0
  92. data/rbi/safety_kit/models/data_update_settings_response.rbi +74 -0
  93. data/rbi/safety_kit/models/stream_add_frame_params.rbi +69 -0
  94. data/rbi/safety_kit/models/stream_add_frame_response.rbi +71 -0
  95. data/rbi/safety_kit/models/stream_add_params.rbi +55 -0
  96. data/rbi/safety_kit/models/stream_add_response.rbi +68 -0
  97. data/rbi/safety_kit/models/stream_add_transcript_params.rbi +64 -0
  98. data/rbi/safety_kit/models/stream_add_transcript_response.rbi +77 -0
  99. data/rbi/safety_kit/models.rbi +29 -0
  100. data/rbi/safety_kit/request_options.rbi +59 -0
  101. data/rbi/safety_kit/resources/agent_decisions.rbi +50 -0
  102. data/rbi/safety_kit/resources/beta/events.rbi +40 -0
  103. data/rbi/safety_kit/resources/beta.rbi +16 -0
  104. data/rbi/safety_kit/resources/client_sessions.rbi +33 -0
  105. data/rbi/safety_kit/resources/data.rbi +126 -0
  106. data/rbi/safety_kit/resources/streams.rbi +88 -0
  107. data/rbi/safety_kit/version.rbi +5 -0
  108. data/sig/safety_kit/client.rbs +34 -0
  109. data/sig/safety_kit/errors.rbs +117 -0
  110. data/sig/safety_kit/file_part.rbs +21 -0
  111. data/sig/safety_kit/internal/transport/base_client.rbs +133 -0
  112. data/sig/safety_kit/internal/transport/pooled_net_requester.rbs +48 -0
  113. data/sig/safety_kit/internal/type/array_of.rbs +48 -0
  114. data/sig/safety_kit/internal/type/base_model.rbs +102 -0
  115. data/sig/safety_kit/internal/type/base_page.rbs +24 -0
  116. data/sig/safety_kit/internal/type/boolean.rbs +26 -0
  117. data/sig/safety_kit/internal/type/converter.rbs +79 -0
  118. data/sig/safety_kit/internal/type/enum.rbs +32 -0
  119. data/sig/safety_kit/internal/type/file_input.rbs +25 -0
  120. data/sig/safety_kit/internal/type/hash_of.rbs +48 -0
  121. data/sig/safety_kit/internal/type/request_parameters.rbs +19 -0
  122. data/sig/safety_kit/internal/type/union.rbs +52 -0
  123. data/sig/safety_kit/internal/type/unknown.rbs +26 -0
  124. data/sig/safety_kit/internal/util.rbs +199 -0
  125. data/sig/safety_kit/internal.rbs +9 -0
  126. data/sig/safety_kit/models/agent_decision_create_agent_decision_params.rbs +53 -0
  127. data/sig/safety_kit/models/agent_decision_create_agent_decision_response.rbs +14 -0
  128. data/sig/safety_kit/models/beta/event_create_params.rbs +891 -0
  129. data/sig/safety_kit/models/beta/event_create_response.rbs +37 -0
  130. data/sig/safety_kit/models/client_session_create_session_params.rbs +32 -0
  131. data/sig/safety_kit/models/client_session_create_session_response.rbs +13 -0
  132. data/sig/safety_kit/models/data_add_params.rbs +38 -0
  133. data/sig/safety_kit/models/data_add_response.rbs +32 -0
  134. data/sig/safety_kit/models/data_create_upload_url_params.rbs +193 -0
  135. data/sig/safety_kit/models/data_create_upload_url_response.rbs +50 -0
  136. data/sig/safety_kit/models/data_get_download_url_params.rbs +28 -0
  137. data/sig/safety_kit/models/data_get_download_url_response.rbs +59 -0
  138. data/sig/safety_kit/models/data_get_status_params.rbs +28 -0
  139. data/sig/safety_kit/models/data_get_status_response.rbs +120 -0
  140. data/sig/safety_kit/models/data_object.rbs +13 -0
  141. data/sig/safety_kit/models/data_update_settings_params.rbs +189 -0
  142. data/sig/safety_kit/models/data_update_settings_response.rbs +35 -0
  143. data/sig/safety_kit/models/stream_add_frame_params.rbs +41 -0
  144. data/sig/safety_kit/models/stream_add_frame_response.rbs +35 -0
  145. data/sig/safety_kit/models/stream_add_params.rbs +32 -0
  146. data/sig/safety_kit/models/stream_add_response.rbs +35 -0
  147. data/sig/safety_kit/models/stream_add_transcript_params.rbs +36 -0
  148. data/sig/safety_kit/models/stream_add_transcript_response.rbs +35 -0
  149. data/sig/safety_kit/models.rbs +25 -0
  150. data/sig/safety_kit/request_options.rbs +34 -0
  151. data/sig/safety_kit/resources/agent_decisions.rbs +17 -0
  152. data/sig/safety_kit/resources/beta/events.rbs +14 -0
  153. data/sig/safety_kit/resources/beta.rbs +9 -0
  154. data/sig/safety_kit/resources/client_sessions.rbs +13 -0
  155. data/sig/safety_kit/resources/data.rbs +37 -0
  156. data/sig/safety_kit/resources/streams.rbs +30 -0
  157. data/sig/safety_kit/version.rbs +3 -0
  158. metadata +228 -0
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ # Specify HTTP behaviour to use for a specific request. These options supplement
5
+ # or override those provided at the client level.
6
+ #
7
+ # When making a request, you can pass an actual {RequestOptions} instance, or
8
+ # simply pass a Hash with symbol keys matching the attributes on this class.
9
+ class RequestOptions < SafetyKit::Internal::Type::BaseModel
10
+ # @api private
11
+ #
12
+ # @param opts [SafetyKit::RequestOptions, Hash{Symbol=>Object}]
13
+ #
14
+ # @raise [ArgumentError]
15
+ def self.validate!(opts)
16
+ case opts
17
+ in SafetyKit::RequestOptions | Hash
18
+ opts.to_h.each_key do |k|
19
+ unless fields.include?(k)
20
+ raise ArgumentError.new("Request `opts` keys must be one of #{fields.keys}, got #{k.inspect}")
21
+ end
22
+ end
23
+ else
24
+ raise ArgumentError.new("Request `opts` must be a Hash or RequestOptions, got #{opts.inspect}")
25
+ end
26
+ end
27
+
28
+ # @!attribute idempotency_key
29
+ # Idempotency key to send with request and all associated retries. Will only be
30
+ # sent for write requests.
31
+ #
32
+ # @return [String, nil]
33
+ optional :idempotency_key, String
34
+
35
+ # @!attribute extra_query
36
+ # Extra query params to send with the request. These are `.merge`’d into any
37
+ # `query` given at the client level.
38
+ #
39
+ # @return [Hash{String=>Array<String>, String, nil}, nil]
40
+ optional :extra_query, SafetyKit::Internal::Type::HashOf[SafetyKit::Internal::Type::ArrayOf[String]]
41
+
42
+ # @!attribute extra_headers
43
+ # Extra headers to send with the request. These are `.merged`’d into any
44
+ # `extra_headers` given at the client level.
45
+ #
46
+ # @return [Hash{String=>String, nil}, nil]
47
+ optional :extra_headers, SafetyKit::Internal::Type::HashOf[String, nil?: true]
48
+
49
+ # @!attribute extra_body
50
+ # Extra data to send with the request. These are deep merged into any data
51
+ # generated as part of the normal request.
52
+ #
53
+ # @return [Object, nil]
54
+ optional :extra_body, SafetyKit::Internal::Type::HashOf[SafetyKit::Internal::Type::Unknown]
55
+
56
+ # @!attribute max_retries
57
+ # Maximum number of retries to attempt after a failed initial request.
58
+ #
59
+ # @return [Integer, nil]
60
+ optional :max_retries, Integer
61
+
62
+ # @!attribute timeout
63
+ # Request timeout in seconds.
64
+ #
65
+ # @return [Float, nil]
66
+ optional :timeout, Float
67
+
68
+ # @!method initialize(values = {})
69
+ # Returns a new instance of RequestOptions.
70
+ #
71
+ # @param values [Hash{Symbol=>Object}]
72
+
73
+ define_sorbet_constant!(:OrHash) do
74
+ T.type_alias { T.any(SafetyKit::RequestOptions, SafetyKit::Internal::AnyHash) }
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ module Resources
5
+ # Send human reviewer final verdicts to SafetyKit. This feedback improves the
6
+ # accuracy of SafetyKit's automated decisions over time.
7
+ class AgentDecisions
8
+ # Some parameter documentations has been truncated, see
9
+ # {SafetyKit::Models::AgentDecisionCreateAgentDecisionParams} for more details.
10
+ #
11
+ # Record a human reviewer's final verdict for content that SafetyKit has
12
+ # previously reviewed. This ground truth feedback allows SafetyKit to improve the
13
+ # accuracy of automated decisions. Each call provides feedback on whether a given
14
+ # piece of content violates a specific policy category. If content is reviewed for
15
+ # multiple policies, send one call per policy.
16
+ #
17
+ # @overload create_agent_decision(content_type:, decision:, policy_id:, reference_id:, action: nil, comment: nil, request_options: {})
18
+ #
19
+ # @param content_type [String] The dataapi namespace of the content being reviewed
20
+ #
21
+ # @param decision [String] The human reviewer's verdict on whether the content violates the specified polic
22
+ #
23
+ # @param policy_id [String] The SafetyKit policy category ID that was evaluated, as configured for your acco
24
+ #
25
+ # @param reference_id [String] The external id for the content being reviewed
26
+ #
27
+ # @param action [String] The correct enforcement action for this content (e.g. 'reduce_visibility', 'unpu
28
+ #
29
+ # @param comment [String, nil] Additional context or details from the human reviewer
30
+ #
31
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
32
+ #
33
+ # @return [SafetyKit::Models::AgentDecisionCreateAgentDecisionResponse]
34
+ #
35
+ # @see SafetyKit::Models::AgentDecisionCreateAgentDecisionParams
36
+ def create_agent_decision(params)
37
+ parsed, options = SafetyKit::AgentDecisionCreateAgentDecisionParams.dump_request(params)
38
+ @client.request(
39
+ method: :post,
40
+ path: "v1/agent_decisions",
41
+ body: parsed,
42
+ model: SafetyKit::Models::AgentDecisionCreateAgentDecisionResponse,
43
+ options: options
44
+ )
45
+ end
46
+
47
+ # @api private
48
+ #
49
+ # @param client [SafetyKit::Client]
50
+ def initialize(client:)
51
+ @client = client
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ module Resources
5
+ class Beta
6
+ # Beta. Send backend events for account, content, and user interaction activity.
7
+ class Events
8
+ # Some parameter documentations has been truncated, see
9
+ # {SafetyKit::Models::Beta::EventCreateParams} for more details.
10
+ #
11
+ # Beta. Send a backend event after a meaningful product action happens in your
12
+ # system. Use events for durable server-side context such as account creation,
13
+ # account updates, user-to-user contact, and content uploads. Do not send browser
14
+ # pageviews, button clicks, or other client-only telemetry through this endpoint.
15
+ #
16
+ # @overload create(body:, request_options: {})
17
+ #
18
+ # @param body [SafetyKit::Models::Beta::EventCreateParams::Body::UserContact, SafetyKit::Models::Beta::EventCreateParams::Body::ContentUploaded, SafetyKit::Models::Beta::EventCreateParams::Body::CreateAccount, SafetyKit::Models::Beta::EventCreateParams::Body::UpdateAccount] Backend event to send to SafetyKit. Send events from your server after an action
19
+ #
20
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
21
+ #
22
+ # @return [SafetyKit::Models::Beta::EventCreateResponse]
23
+ #
24
+ # @see SafetyKit::Models::Beta::EventCreateParams
25
+ def create(params)
26
+ parsed, options = SafetyKit::Beta::EventCreateParams.dump_request(params)
27
+ @client.request(
28
+ method: :post,
29
+ path: "v1/events",
30
+ body: parsed[:body],
31
+ model: SafetyKit::Models::Beta::EventCreateResponse,
32
+ options: options
33
+ )
34
+ end
35
+
36
+ # @api private
37
+ #
38
+ # @param client [SafetyKit::Client]
39
+ def initialize(client:)
40
+ @client = client
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ module Resources
5
+ class Beta
6
+ # Beta. Send backend events for account, content, and user interaction activity.
7
+ # @return [SafetyKit::Resources::Beta::Events]
8
+ attr_reader :events
9
+
10
+ # @api private
11
+ #
12
+ # @param client [SafetyKit::Client]
13
+ def initialize(client:)
14
+ @client = client
15
+ @events = SafetyKit::Resources::Beta::Events.new(client: client)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ module Resources
5
+ # Create browser-safe webapp SDK session tokens from authenticated server-side
6
+ # code.
7
+ class ClientSessions
8
+ # Create a browser-safe SafetyKit webapp SDK session token from server-side code
9
+ # before rendering pages that load the browser SDK. The request must be
10
+ # authenticated with a valid Bearer token.
11
+ #
12
+ # @overload create_session(customer_session_hash: nil, customer_user_id: nil, request_options: {})
13
+ #
14
+ # @param customer_session_hash [String] Hashed customer browser session value associated with the browser SDK session.
15
+ #
16
+ # @param customer_user_id [String] Customer user identifier associated with the browser SDK session.
17
+ #
18
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
19
+ #
20
+ # @return [SafetyKit::Models::ClientSessionCreateSessionResponse]
21
+ #
22
+ # @see SafetyKit::Models::ClientSessionCreateSessionParams
23
+ def create_session(params = {})
24
+ parsed, options = SafetyKit::ClientSessionCreateSessionParams.dump_request(params)
25
+ @client.request(
26
+ method: :post,
27
+ path: "v1/sessions",
28
+ body: parsed,
29
+ model: SafetyKit::Models::ClientSessionCreateSessionResponse,
30
+ options: options
31
+ )
32
+ end
33
+
34
+ # @api private
35
+ #
36
+ # @param client [SafetyKit::Client]
37
+ def initialize(client:)
38
+ @client = client
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,159 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ module Resources
5
+ # Ingest data for fraud detection and risk analysis.
6
+ class Data
7
+ # Some parameter documentations has been truncated, see
8
+ # {SafetyKit::Models::DataAddParams} for more details.
9
+ #
10
+ # Add data to a namespace, returning immediately. Processing happens
11
+ # asynchronously in the background.
12
+ #
13
+ # @overload add(namespace, data:, request_options: {})
14
+ #
15
+ # @param namespace [String] The namespace to ingest data into
16
+ #
17
+ # @param data [SafetyKit::Models::DataObject, Array<SafetyKit::Models::DataObject>] A data object to ingest. It must include an id field. All other fields are flexi
18
+ #
19
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
20
+ #
21
+ # @return [SafetyKit::Models::DataAddResponse]
22
+ #
23
+ # @see SafetyKit::Models::DataAddParams
24
+ def add(namespace, params)
25
+ parsed, options = SafetyKit::DataAddParams.dump_request(params)
26
+ @client.request(
27
+ method: :post,
28
+ path: ["v1/data/%1$s", namespace],
29
+ body: parsed,
30
+ model: SafetyKit::Models::DataAddResponse,
31
+ options: options
32
+ )
33
+ end
34
+
35
+ # Some parameter documentations has been truncated, see
36
+ # {SafetyKit::Models::DataCreateUploadURLParams} for more details.
37
+ #
38
+ # Request a pre-signed upload URL for large JSONL batches into a namespace. After
39
+ # receiving `upload_url`, upload your JSONL file using `PUT {upload_url}` with
40
+ # header `Content-Type: application/json`; put each JSON object on a new line.
41
+ #
42
+ # @overload create_upload_url(namespace, schema: nil, request_options: {})
43
+ #
44
+ # @param namespace [String] The namespace to ingest data into
45
+ #
46
+ # @param schema [Hash{Symbol=>SafetyKit::Models::DataCreateUploadURLParams::Schema}] Schema mapping field names to their definitions. Use content_type to specify whi
47
+ #
48
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
49
+ #
50
+ # @return [SafetyKit::Models::DataCreateUploadURLResponse]
51
+ #
52
+ # @see SafetyKit::Models::DataCreateUploadURLParams
53
+ def create_upload_url(namespace, params = {})
54
+ parsed, options = SafetyKit::DataCreateUploadURLParams.dump_request(params)
55
+ @client.request(
56
+ method: :post,
57
+ path: ["v1/data/%1$s/requests/upload-url", namespace],
58
+ body: parsed,
59
+ model: SafetyKit::Models::DataCreateUploadURLResponse,
60
+ options: options
61
+ )
62
+ end
63
+
64
+ # Retrieve the status of a data ingestion request and, once complete, a temporary
65
+ # S3 URL for the full result file. This endpoint always uses the URL-based
66
+ # response shape regardless of request size.
67
+ #
68
+ # @overload get_download_url(request_id, namespace:, request_options: {})
69
+ #
70
+ # @param request_id [String] The request ID returned when the ingest request was created
71
+ #
72
+ # @param namespace [String] The namespace the data was ingested into
73
+ #
74
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
75
+ #
76
+ # @return [SafetyKit::Models::DataGetDownloadURLResponse]
77
+ #
78
+ # @see SafetyKit::Models::DataGetDownloadURLParams
79
+ def get_download_url(request_id, params)
80
+ parsed, options = SafetyKit::DataGetDownloadURLParams.dump_request(params)
81
+ namespace =
82
+ parsed.delete(:namespace) do
83
+ raise ArgumentError.new("missing required path argument #{_1}")
84
+ end
85
+ @client.request(
86
+ method: :get,
87
+ path: ["v1/data/%1$s/requests/%2$s/results/download-url", namespace, request_id],
88
+ model: SafetyKit::Models::DataGetDownloadURLResponse,
89
+ options: options
90
+ )
91
+ end
92
+
93
+ # Retrieve the status of a data ingestion request and, once complete, return
94
+ # processed objects inline. If the processed output exceeds the 5 MiB inline
95
+ # response limit, this endpoint returns an error instructing you to use the
96
+ # download endpoint instead.
97
+ #
98
+ # @overload get_status(request_id, namespace:, request_options: {})
99
+ #
100
+ # @param request_id [String] The request ID returned when the ingest request was created
101
+ #
102
+ # @param namespace [String] The namespace the data was ingested into
103
+ #
104
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
105
+ #
106
+ # @return [SafetyKit::Models::DataGetStatusResponse]
107
+ #
108
+ # @see SafetyKit::Models::DataGetStatusParams
109
+ def get_status(request_id, params)
110
+ parsed, options = SafetyKit::DataGetStatusParams.dump_request(params)
111
+ namespace =
112
+ parsed.delete(:namespace) do
113
+ raise ArgumentError.new("missing required path argument #{_1}")
114
+ end
115
+ @client.request(
116
+ method: :get,
117
+ path: ["v1/data/%1$s/requests/%2$s", namespace, request_id],
118
+ model: SafetyKit::Models::DataGetStatusResponse,
119
+ options: options
120
+ )
121
+ end
122
+
123
+ # Some parameter documentations has been truncated, see
124
+ # {SafetyKit::Models::DataUpdateSettingsParams} for more details.
125
+ #
126
+ # Create or replace settings for a namespace, primarily used to change the schema
127
+ # associated with the namespace.
128
+ #
129
+ # @overload update_settings(namespace, schema:, request_options: {})
130
+ #
131
+ # @param namespace [String] The namespace to ingest data into
132
+ #
133
+ # @param schema [Hash{Symbol=>SafetyKit::Models::DataUpdateSettingsParams::Schema}] Schema mapping field names to their definitions. Use content_type to specify whi
134
+ #
135
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
136
+ #
137
+ # @return [SafetyKit::Models::DataUpdateSettingsResponse]
138
+ #
139
+ # @see SafetyKit::Models::DataUpdateSettingsParams
140
+ def update_settings(namespace, params)
141
+ parsed, options = SafetyKit::DataUpdateSettingsParams.dump_request(params)
142
+ @client.request(
143
+ method: :put,
144
+ path: ["v1/data/%1$s/settings", namespace],
145
+ body: parsed,
146
+ model: SafetyKit::Models::DataUpdateSettingsResponse,
147
+ options: options
148
+ )
149
+ end
150
+
151
+ # @api private
152
+ #
153
+ # @param client [SafetyKit::Client]
154
+ def initialize(client:)
155
+ @client = client
156
+ end
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ module Resources
5
+ # Ingest and monitor livestream content.
6
+ class Streams
7
+ # Monitor the livestream at the given stream URL. This method returns immediately.
8
+ #
9
+ # @overload add(namespace, id:, stream_url:, request_options: {})
10
+ #
11
+ # @param namespace [String] The namespace to ingest stream data into
12
+ #
13
+ # @param id [String]
14
+ #
15
+ # @param stream_url [String]
16
+ #
17
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
18
+ #
19
+ # @return [SafetyKit::Models::StreamAddResponse]
20
+ #
21
+ # @see SafetyKit::Models::StreamAddParams
22
+ def add(namespace, params)
23
+ parsed, options = SafetyKit::StreamAddParams.dump_request(params)
24
+ @client.request(
25
+ method: :post,
26
+ path: ["v1/streams/%1$s", namespace],
27
+ body: parsed,
28
+ model: SafetyKit::Models::StreamAddResponse,
29
+ options: options
30
+ )
31
+ end
32
+
33
+ # Some parameter documentations has been truncated, see
34
+ # {SafetyKit::Models::StreamAddFrameParams} for more details.
35
+ #
36
+ # Ingest a single livestream frame as an image data URI plus relative timestamp in
37
+ # milliseconds. The stream does not need to be created beforehand. Only
38
+ # image/jpeg, image/png, and image/webp are accepted. The decoded bytes must match
39
+ # the declared mime type, decode as a valid image, stay within 5 MB, and stay
40
+ # within 4096x4096 / 16,000,000 total pixels. Timestamps are relative milliseconds
41
+ # from stream start and must be unique and strictly increasing within a stream.
42
+ # Duplicate or out-of-order frame timestamps are accepted at the API boundary but
43
+ # ignored by downstream processing. This method returns immediately after the
44
+ # frame has been accepted for processing.
45
+ #
46
+ # @overload add_frame(namespace, image_data_uri:, stream_id:, timestamp:, request_options: {})
47
+ #
48
+ # @param namespace [String] The namespace to ingest stream data into
49
+ #
50
+ # @param image_data_uri [String] A data URI containing a base64-encoded frame image. Only image/jpeg, image/png,
51
+ #
52
+ # @param stream_id [String]
53
+ #
54
+ # @param timestamp [Integer]
55
+ #
56
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
57
+ #
58
+ # @return [SafetyKit::Models::StreamAddFrameResponse]
59
+ #
60
+ # @see SafetyKit::Models::StreamAddFrameParams
61
+ def add_frame(namespace, params)
62
+ parsed, options = SafetyKit::StreamAddFrameParams.dump_request(params)
63
+ @client.request(
64
+ method: :post,
65
+ path: ["v1/streams/%1$s/frames", namespace],
66
+ body: parsed,
67
+ model: SafetyKit::Models::StreamAddFrameResponse,
68
+ options: options
69
+ )
70
+ end
71
+
72
+ # Ingest a single transcript segment for a livestream using a relative timestamp
73
+ # in milliseconds. The stream does not need to be created beforehand. Transcript
74
+ # timestamps are relative milliseconds from stream start and should be
75
+ # monotonically increasing within a stream so transcript context lines up
76
+ # correctly with later frames. This method returns immediately after the
77
+ # transcript has been accepted for processing.
78
+ #
79
+ # @overload add_transcript(namespace, stream_id:, text:, timestamp:, request_options: {})
80
+ #
81
+ # @param namespace [String] The namespace to ingest stream data into
82
+ #
83
+ # @param stream_id [String]
84
+ #
85
+ # @param text [String]
86
+ #
87
+ # @param timestamp [Integer]
88
+ #
89
+ # @param request_options [SafetyKit::RequestOptions, Hash{Symbol=>Object}, nil]
90
+ #
91
+ # @return [SafetyKit::Models::StreamAddTranscriptResponse]
92
+ #
93
+ # @see SafetyKit::Models::StreamAddTranscriptParams
94
+ def add_transcript(namespace, params)
95
+ parsed, options = SafetyKit::StreamAddTranscriptParams.dump_request(params)
96
+ @client.request(
97
+ method: :post,
98
+ path: ["v1/streams/%1$s/transcripts", namespace],
99
+ body: parsed,
100
+ model: SafetyKit::Models::StreamAddTranscriptResponse,
101
+ options: options
102
+ )
103
+ end
104
+
105
+ # @api private
106
+ #
107
+ # @param client [SafetyKit::Client]
108
+ def initialize(client:)
109
+ @client = client
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SafetyKit
4
+ VERSION = "0.5.0"
5
+ end
data/lib/safety_kit.rb ADDED
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Standard libraries.
4
+ # rubocop:disable Lint/RedundantRequireStatement
5
+ require "English"
6
+ require "base64"
7
+ require "cgi"
8
+ require "date"
9
+ require "erb"
10
+ require "etc"
11
+ require "json"
12
+ require "net/http"
13
+ require "openssl"
14
+ require "pathname"
15
+ require "rbconfig"
16
+ require "securerandom"
17
+ require "set"
18
+ require "stringio"
19
+ require "time"
20
+ require "uri"
21
+ # rubocop:enable Lint/RedundantRequireStatement
22
+
23
+ # We already ship the preferred sorbet manifests in the package itself.
24
+ # `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
25
+ if Object.const_defined?(:Tapioca) &&
26
+ caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
27
+ ARGV.none?(/dsl/)
28
+ return
29
+ end
30
+
31
+ # Gems.
32
+ require "connection_pool"
33
+
34
+ # Package files.
35
+ require_relative "safety_kit/version"
36
+ require_relative "safety_kit/internal/util"
37
+ require_relative "safety_kit/internal/type/converter"
38
+ require_relative "safety_kit/internal/type/unknown"
39
+ require_relative "safety_kit/internal/type/boolean"
40
+ require_relative "safety_kit/internal/type/file_input"
41
+ require_relative "safety_kit/internal/type/enum"
42
+ require_relative "safety_kit/internal/type/union"
43
+ require_relative "safety_kit/internal/type/array_of"
44
+ require_relative "safety_kit/internal/type/hash_of"
45
+ require_relative "safety_kit/internal/type/base_model"
46
+ require_relative "safety_kit/internal/type/base_page"
47
+ require_relative "safety_kit/internal/type/request_parameters"
48
+ require_relative "safety_kit/internal"
49
+ require_relative "safety_kit/request_options"
50
+ require_relative "safety_kit/file_part"
51
+ require_relative "safety_kit/errors"
52
+ require_relative "safety_kit/internal/transport/base_client"
53
+ require_relative "safety_kit/internal/transport/pooled_net_requester"
54
+ require_relative "safety_kit/client"
55
+ require_relative "safety_kit/models/agent_decision_create_agent_decision_params"
56
+ require_relative "safety_kit/models/agent_decision_create_agent_decision_response"
57
+ require_relative "safety_kit/models/beta/event_create_params"
58
+ require_relative "safety_kit/models/beta/event_create_response"
59
+ require_relative "safety_kit/models/client_session_create_session_params"
60
+ require_relative "safety_kit/models/client_session_create_session_response"
61
+ require_relative "safety_kit/models/data_add_params"
62
+ require_relative "safety_kit/models/data_add_response"
63
+ require_relative "safety_kit/models/data_create_upload_url_params"
64
+ require_relative "safety_kit/models/data_create_upload_url_response"
65
+ require_relative "safety_kit/models/data_get_download_url_params"
66
+ require_relative "safety_kit/models/data_get_download_url_response"
67
+ require_relative "safety_kit/models/data_get_status_params"
68
+ require_relative "safety_kit/models/data_get_status_response"
69
+ require_relative "safety_kit/models/data_object"
70
+ require_relative "safety_kit/models/data_update_settings_params"
71
+ require_relative "safety_kit/models/data_update_settings_response"
72
+ require_relative "safety_kit/models/stream_add_frame_params"
73
+ require_relative "safety_kit/models/stream_add_frame_response"
74
+ require_relative "safety_kit/models/stream_add_params"
75
+ require_relative "safety_kit/models/stream_add_response"
76
+ require_relative "safety_kit/models/stream_add_transcript_params"
77
+ require_relative "safety_kit/models/stream_add_transcript_response"
78
+ require_relative "safety_kit/models"
79
+ require_relative "safety_kit/resources/agent_decisions"
80
+ require_relative "safety_kit/resources/beta"
81
+ require_relative "safety_kit/resources/beta/events"
82
+ require_relative "safety_kit/resources/client_sessions"
83
+ require_relative "safety_kit/resources/data"
84
+ require_relative "safety_kit/resources/streams"
data/manifest.yaml ADDED
@@ -0,0 +1,17 @@
1
+ dependencies:
2
+ - English
3
+ - base64
4
+ - cgi
5
+ - date
6
+ - erb
7
+ - etc
8
+ - json
9
+ - net/http
10
+ - openssl
11
+ - pathname
12
+ - rbconfig
13
+ - securerandom
14
+ - set
15
+ - stringio
16
+ - time
17
+ - uri