ding_sdk 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,64 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'sorbet-runtime'
7
+ require 'faraday'
8
+
9
+ module DingSDK
10
+ module Shared
11
+ # RetryAuthenticationResponseStatus - The status of the retry. Possible values are:
12
+ # * `approved` - The retry was approved and a new code was sent.
13
+ # * `denied` - The retry was denied.
14
+ # * `no_attempt` - No attempt was sent yet, so a retry cannot be completed.
15
+ # * `rate_limited` - The authentication was rate limited and cannot be retried.
16
+ # * `expired_auth` - The authentication has expired and cannot be retried.
17
+ # * `already_validated` - The authentication has already been validated.
18
+ #
19
+ class RetryAuthenticationResponseStatus < T::Enum
20
+ enums do
21
+ APPROVED = new('approved')
22
+ DENIED = new('denied')
23
+ NO_ATTEMPT = new('no_attempt')
24
+ RATE_LIMITED = new('rate_limited')
25
+ EXPIRED_AUTH = new('expired_auth')
26
+ ALREADY_VALIDATED = new('already_validated')
27
+ end
28
+ end
29
+
30
+
31
+
32
+ class RetryAuthenticationResponse < DingSDK::Utils::FieldAugmented
33
+ extend T::Sig
34
+
35
+ # The UUID of the corresponding authentication.
36
+ field :authentication_uuid, T.nilable(String), { 'format_json': { 'letter_case': OpenApiSDK::Utils.field_name('authentication_uuid') } }
37
+
38
+ field :created_at, T.nilable(DateTime), { 'format_json': { 'letter_case': OpenApiSDK::Utils.field_name('created_at'), 'decoder': Utils.datetime_from_iso_format(true) } }
39
+ # The time at which the next retry will be available.
40
+ field :next_retry_at, T.nilable(DateTime), { 'format_json': { 'letter_case': OpenApiSDK::Utils.field_name('next_retry_at'), 'decoder': Utils.datetime_from_iso_format(true) } }
41
+ # The number of remaining retries.
42
+ field :remaining_retry, T.nilable(Integer), { 'format_json': { 'letter_case': OpenApiSDK::Utils.field_name('remaining_retry') } }
43
+ # The status of the retry. Possible values are:
44
+ # * `approved` - The retry was approved and a new code was sent.
45
+ # * `denied` - The retry was denied.
46
+ # * `no_attempt` - No attempt was sent yet, so a retry cannot be completed.
47
+ # * `rate_limited` - The authentication was rate limited and cannot be retried.
48
+ # * `expired_auth` - The authentication has expired and cannot be retried.
49
+ # * `already_validated` - The authentication has already been validated.
50
+ #
51
+ field :status, T.nilable(Shared::RetryAuthenticationResponseStatus), { 'format_json': { 'letter_case': OpenApiSDK::Utils.field_name('status'), 'decoder': Utils.enum_from_string(Shared::RetryAuthenticationResponseStatus, true) } }
52
+
53
+
54
+ sig { params(authentication_uuid: T.nilable(String), created_at: T.nilable(DateTime), next_retry_at: T.nilable(DateTime), remaining_retry: T.nilable(Integer), status: T.nilable(Shared::RetryAuthenticationResponseStatus)).void }
55
+ def initialize(authentication_uuid: nil, created_at: nil, next_retry_at: nil, remaining_retry: nil, status: nil)
56
+ @authentication_uuid = authentication_uuid
57
+ @created_at = created_at
58
+ @next_retry_at = next_retry_at
59
+ @remaining_retry = remaining_retry
60
+ @status = status
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,25 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'sorbet-runtime'
7
+ require 'faraday'
8
+
9
+ module DingSDK
10
+ module Shared
11
+
12
+ class Security < DingSDK::Utils::FieldAugmented
13
+ extend T::Sig
14
+
15
+
16
+ field :api_key, String, { 'security': { 'scheme': true, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'x-api-key' } }
17
+
18
+
19
+ sig { params(api_key: String).void }
20
+ def initialize(api_key: nil)
21
+ @api_key = api_key
22
+ end
23
+ end
24
+ end
25
+ end
data/lib/ding/otp.rb ADDED
@@ -0,0 +1,149 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'sorbet-runtime'
9
+
10
+ module DingSDK
11
+ extend T::Sig
12
+ class Otp
13
+ # Send OTP codes to your users using their phone numbers.
14
+ extend T::Sig
15
+ sig { params(sdk_config: SDKConfiguration).void }
16
+ def initialize(sdk_config)
17
+ @sdk_configuration = sdk_config
18
+ end
19
+
20
+ sig { params(request: T.nilable(Shared::CreateCheckRequest)).returns(Utils::FieldAugmented) }
21
+ def check(request)
22
+ # check - Check a code
23
+ url, params = @sdk_configuration.get_server_details
24
+ base_url = Utils.template_url(url, params)
25
+ url = "#{base_url}/check"
26
+ headers = {}
27
+ req_content_type, data, form = Utils.serialize_request_body(request, :request, :json)
28
+ headers['content-type'] = req_content_type
29
+ headers['Accept'] = 'application/json'
30
+ headers['user-agent'] = @sdk_configuration.user_agent
31
+
32
+ r = @sdk_configuration.client.post(url) do |req|
33
+ req.headers = headers
34
+ Utils.configure_request_security(req, @sdk_configuration.security) if !@sdk_configuration.nil? && !@sdk_configuration.security.nil?
35
+ if form
36
+ req.body = Utils.encode_form(form)
37
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
38
+ req.body = URI.encode_www_form(data)
39
+ else
40
+ req.body = data
41
+ end
42
+ end
43
+
44
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
45
+
46
+ res = Operations::CheckResponse.new(
47
+ status_code: r.status, content_type: content_type, raw_response: r
48
+ )
49
+ if r.status == 200
50
+ if Utils.match_content_type(content_type, 'application/json')
51
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::CreateCheckResponse)
52
+ res.create_check_response = out
53
+ end
54
+ elsif r.status == 400
55
+ if Utils.match_content_type(content_type, 'application/json')
56
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::ErrorResponse)
57
+ res.error_response = out
58
+ end
59
+ end
60
+ res
61
+ end
62
+
63
+ sig { params(request: T.nilable(Shared::CreateAuthenticationRequest)).returns(Utils::FieldAugmented) }
64
+ def create_autentication(request)
65
+ # create_autentication - Send a code
66
+ url, params = @sdk_configuration.get_server_details
67
+ base_url = Utils.template_url(url, params)
68
+ url = "#{base_url}/authentication"
69
+ headers = {}
70
+ req_content_type, data, form = Utils.serialize_request_body(request, :request, :json)
71
+ headers['content-type'] = req_content_type
72
+ headers['Accept'] = 'application/json'
73
+ headers['user-agent'] = @sdk_configuration.user_agent
74
+
75
+ r = @sdk_configuration.client.post(url) do |req|
76
+ req.headers = headers
77
+ Utils.configure_request_security(req, @sdk_configuration.security) if !@sdk_configuration.nil? && !@sdk_configuration.security.nil?
78
+ if form
79
+ req.body = Utils.encode_form(form)
80
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
81
+ req.body = URI.encode_www_form(data)
82
+ else
83
+ req.body = data
84
+ end
85
+ end
86
+
87
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
88
+
89
+ res = Operations::CreateAutenticationResponse.new(
90
+ status_code: r.status, content_type: content_type, raw_response: r
91
+ )
92
+ if r.status == 200
93
+ if Utils.match_content_type(content_type, 'application/json')
94
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::CreateAuthenticationResponse)
95
+ res.create_authentication_response = out
96
+ end
97
+ elsif r.status == 400
98
+ if Utils.match_content_type(content_type, 'application/json')
99
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::ErrorResponse)
100
+ res.error_response = out
101
+ end
102
+ end
103
+ res
104
+ end
105
+
106
+ sig { params(request: T.nilable(Shared::RetryAuthenticationRequest)).returns(Utils::FieldAugmented) }
107
+ def retry(request)
108
+ # retry - Perform a retry
109
+ url, params = @sdk_configuration.get_server_details
110
+ base_url = Utils.template_url(url, params)
111
+ url = "#{base_url}/retry"
112
+ headers = {}
113
+ req_content_type, data, form = Utils.serialize_request_body(request, :request, :json)
114
+ headers['content-type'] = req_content_type
115
+ headers['Accept'] = 'application/json'
116
+ headers['user-agent'] = @sdk_configuration.user_agent
117
+
118
+ r = @sdk_configuration.client.post(url) do |req|
119
+ req.headers = headers
120
+ Utils.configure_request_security(req, @sdk_configuration.security) if !@sdk_configuration.nil? && !@sdk_configuration.security.nil?
121
+ if form
122
+ req.body = Utils.encode_form(form)
123
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
124
+ req.body = URI.encode_www_form(data)
125
+ else
126
+ req.body = data
127
+ end
128
+ end
129
+
130
+ content_type = r.headers.fetch('Content-Type', 'application/octet-stream')
131
+
132
+ res = Operations::RetryResponse.new(
133
+ status_code: r.status, content_type: content_type, raw_response: r
134
+ )
135
+ if r.status == 200
136
+ if Utils.match_content_type(content_type, 'application/json')
137
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::RetryAuthenticationResponse)
138
+ res.retry_authentication_response = out
139
+ end
140
+ elsif r.status == 400
141
+ if Utils.match_content_type(content_type, 'application/json')
142
+ out = Utils.unmarshal_complex(r.env.response_body, Shared::ErrorResponse)
143
+ res.error_response = out
144
+ end
145
+ end
146
+ res
147
+ end
148
+ end
149
+ end
data/lib/ding/sdk.rb ADDED
@@ -0,0 +1,89 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'sorbet-runtime'
9
+ module DingSDK
10
+ extend T::Sig
11
+
12
+ class Ding
13
+ extend T::Sig
14
+
15
+ attr_accessor :otp, :lookup
16
+
17
+ attr_accessor :security, :language, :sdk_version, :gen_version
18
+
19
+ sig do
20
+ params(security: T.nilable(Shared::Security),
21
+ server: String,
22
+ server_url: String,
23
+ url_params: T::Hash[Symbol, String],
24
+ client: Faraday::Request).void
25
+ end
26
+ def initialize(security: nil,
27
+ server: nil,
28
+ server_url: nil,
29
+ url_params: nil,
30
+ client: nil)
31
+
32
+ ## Instantiates the SDK configuring it with the provided parameters.
33
+ # @param [Shared::Security] security The security details required for authentication
34
+ # @param [String] server The server by name to use for all operations
35
+ # @param [String] server_url The server URL to use for all operations
36
+ # @param [Hash<Symbol, String>] url_params Parameters to optionally template the server URL with
37
+ # @param [Faraday::Request] client The faraday HTTP client to use for all operations
38
+
39
+ if client.nil?
40
+ client = Faraday.new(request: {
41
+ params_encoder: Faraday::FlatParamsEncoder
42
+ }) do |f|
43
+ f.request :multipart, {}
44
+ # f.response :logger
45
+ end
46
+ end
47
+
48
+ if !server_url.nil?
49
+ if !url_params.nil?
50
+ server_url = Utils.template_url(server_url, url_params)
51
+ end
52
+ end
53
+ server = SERVER_PRODUCTION if server.nil?
54
+
55
+
56
+
57
+ @sdk_configuration = SDKConfiguration.new(client, security, server_url, server)
58
+ init_sdks
59
+ end
60
+
61
+ sig { params(params: T.nilable(T::Hash[Symbol, String])).void }
62
+ def config_server_url(params)
63
+ if !params.nil?
64
+ @server_url = Utils.template_url(@server_url, params)
65
+ end
66
+ init_sdks
67
+ end
68
+
69
+ sig { params(server: String, params: T.nilable(T::Hash[Symbol, String])).void }
70
+ def config_server(params)
71
+ raise StandardError, 'Invalid server' if !SERVERS.include? server
72
+
73
+ config_server_url(params)
74
+ init_sdks
75
+ end
76
+
77
+ sig { params(security: Shared::Security).void }
78
+ def config_security(security)
79
+ @security = security
80
+ @sdk_configuration.security = security
81
+ end
82
+
83
+ sig { void }
84
+ def init_sdks
85
+ @otp = Otp.new(@sdk_configuration)
86
+ @lookup = Lookup.new(@sdk_configuration)
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,55 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'sorbet-runtime'
9
+
10
+ module OpenApiSDK
11
+ extend T::Sig
12
+
13
+
14
+ SERVER_PRODUCTION = 'production' # The production Ding API server
15
+ SERVERS = {
16
+ SERVER_PRODUCTION: 'https://api.ding.live/v1',
17
+ }.freeze
18
+ # Contains the list of servers available to the SDK
19
+
20
+
21
+ class SDKConfiguration < OpenApiSDK::Utils::FieldAugmented
22
+ extend T::Sig
23
+
24
+ field :client, T.nilable(Faraday::Connection)
25
+ field :security, Shared::Security
26
+ field :server_url, T.nilable(String)
27
+ field :server, T.nilable(String)
28
+ field :server_defaults, Hash[Symbol, Hash[Symbol, String]], { 'default_factory': Hash}
29
+ field :language, String
30
+ field :openapi_doc_version, String
31
+ field :sdk_version, String
32
+ field :gen_version, String
33
+ field :user_agent, String
34
+
35
+
36
+ sig { params(client: Faraday::Connection, security: T.nilable(Shared::Security), server_url: T.nilable(String), server_idx: T.nilable(Integer), server_defaults: T::Hash[Symbol, String], globals: T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]]).void }
37
+ def initialize(client, security, server_url, server_idx, server_defaults, globals)
38
+ @client = client
39
+ @server = server_url.nil? ? '' : server_url
40
+ @language = 'ruby'
41
+ @openapi_doc_version = '1.0.0'
42
+ @sdk_version = '0.3.0'
43
+ @gen_version = '2.189.1'
44
+ @user_agent = 'speakeasy-sdk/ruby 0.3.0 2.189.1 1.0.0 ding_sdk'
45
+ end
46
+
47
+ sig { returns([String, T::Hash[Symbol, String]]) }
48
+ def get_server_details
49
+ return [@server_url.delete_suffix('/'), {}] if !@server_url.nil?
50
+ @server = SERVER_PRODUCTION if @server.nil?
51
+
52
+ [SERVERS[@server], {}]
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,154 @@
1
+ # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ module DingSDK
7
+ module MetadataFields
8
+ extend T::Sig
9
+
10
+ class Field
11
+ attr_accessor :name, :type, :metadata
12
+
13
+ def initialize(name, type, metadata)
14
+ @name = name
15
+ @type = type
16
+ @metadata = metadata
17
+ end
18
+ end
19
+
20
+ module ClassMethods
21
+ extend T::Sig
22
+
23
+ def fields
24
+ @__fields__ = [] if @__fields__.nil?
25
+
26
+ @__fields__
27
+ end
28
+
29
+ def field(field_name, type, metadata = {})
30
+ attr_accessor field_name
31
+
32
+ fields << Field.new(field_name, type, metadata)
33
+ end
34
+
35
+ def unmarshal_single(field_type, value, decoder = nil)
36
+ if field_type.respond_to? :unmarshal_json
37
+ unmarshalled = field_type.unmarshal_json(value)
38
+ return unmarshalled
39
+ elsif field_type.to_s == 'Object'
40
+ # rubocop:disable Lint/SuppressedException
41
+ begin
42
+ value = JSON.parse(value)
43
+ rescue TypeError, JSON::ParserError
44
+ end
45
+ # rubocop:enable Lint/SuppressedException
46
+ return value
47
+ end
48
+ if decoder.nil?
49
+ value
50
+ else
51
+ decoder.call(value)
52
+ end
53
+ end
54
+
55
+ sig { params(json_obj: T.any(String, T::Hash[Symbol, String])).returns(Utils::FieldAugmented) }
56
+ def unmarshal_json(json_obj)
57
+ to_build = new
58
+ begin
59
+ d = JSON.parse(json_obj)
60
+ rescue TypeError, JSON::ParserError
61
+ d = json_obj
62
+ end
63
+ fields.each do |field|
64
+ field_type = field.type
65
+ if field.type.respond_to?(:types) && field.type.types.length == 2
66
+ type2 = field.type.types[1]
67
+ if type2.raw_type == NilClass
68
+ field_type = field.type.types[0]
69
+ field_type = field_type.raw_type if field_type.respond_to? :raw_type
70
+ end
71
+ end
72
+
73
+
74
+ key = "#{field.name}="
75
+ lookup = field.metadata.fetch(:format_json, {}).fetch(:letter_case, nil).call
76
+ value = d[lookup]
77
+ next if value.nil?
78
+
79
+ if field_type.to_s.start_with? 'T::Array'
80
+ inner_type = field_type.type.raw_type
81
+ unmarshalled_array = value.map { |f| unmarshal_single(inner_type, f) }
82
+ to_build.send(key, unmarshalled_array)
83
+ elsif field_type.to_s.start_with? 'T::Hash'
84
+ _, val_type = field_type.type.types
85
+ # rubocop:disable Style/HashTransformValues
86
+ unmarshalled_hash = value.map { |k, v| [k, unmarshal_single(val_type.raw_type, v)] }.to_h
87
+ # rubocop:enable Style/HashTransformValues
88
+ to_build.send(key, unmarshalled_hash)
89
+ else
90
+ decoder = field.metadata.fetch(:format_json, {}).fetch(:decoder, nil)
91
+ final_value = unmarshal_single(field_type, value, decoder)
92
+ to_build.send(key, final_value)
93
+ end
94
+ end
95
+ to_build
96
+ end
97
+ end
98
+
99
+ def initialize
100
+ instance = allocate
101
+ fields.each { |mod| instance.singleton_class.include(mod) }
102
+ instance.send(:initialize)
103
+ end
104
+
105
+ def self.included(base)
106
+ base.extend(ClassMethods)
107
+ end
108
+
109
+ def fields
110
+ self.class.fields
111
+ end
112
+
113
+ def field(field_name)
114
+ fields.each do |f|
115
+ return f if f.name == field_name
116
+ end
117
+ end
118
+
119
+ def marshal_single(field)
120
+ if field.respond_to? :marshal_json
121
+ field.marshal_json(encode: false)
122
+ else
123
+ Utils.val_to_string(field, primitives: false)
124
+ end
125
+ end
126
+
127
+ def marshal_json(encode: true)
128
+ d = {}
129
+ fields.sort_by(&:name).each do |field|
130
+ f = send(field.name)
131
+ next if f.nil?
132
+
133
+ format_json_meta = field.metadata[:format_json]
134
+ if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
135
+ key = format_json_meta[:letter_case].call(field.name)
136
+ else
137
+ key = field.name
138
+ end
139
+ if f.is_a? Array
140
+ d[key] = f.map { |o| marshal_single(o) }
141
+ elsif f.is_a? Hash
142
+ d[key] = f.map { |k, v| [k, marshal_single(v)] }
143
+ else
144
+ d[key] = marshal_single(f)
145
+ end
146
+ end
147
+ if encode
148
+ JSON.dump(d)
149
+ else
150
+ d
151
+ end
152
+ end
153
+ end
154
+ end