userplex 0.1.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.
- checksums.yaml +7 -0
- data/.ignore +2 -0
- data/CHANGELOG.md +14 -0
- data/README.md +217 -0
- data/SECURITY.md +23 -0
- data/lib/userplex/client.rb +80 -0
- data/lib/userplex/errors.rb +228 -0
- data/lib/userplex/file_part.rb +58 -0
- data/lib/userplex/internal/transport/base_client.rb +567 -0
- data/lib/userplex/internal/transport/pooled_net_requester.rb +198 -0
- data/lib/userplex/internal/type/array_of.rb +168 -0
- data/lib/userplex/internal/type/base_model.rb +530 -0
- data/lib/userplex/internal/type/base_page.rb +55 -0
- data/lib/userplex/internal/type/boolean.rb +77 -0
- data/lib/userplex/internal/type/converter.rb +327 -0
- data/lib/userplex/internal/type/enum.rb +131 -0
- data/lib/userplex/internal/type/file_input.rb +111 -0
- data/lib/userplex/internal/type/hash_of.rb +188 -0
- data/lib/userplex/internal/type/request_parameters.rb +42 -0
- data/lib/userplex/internal/type/union.rb +237 -0
- data/lib/userplex/internal/type/unknown.rb +81 -0
- data/lib/userplex/internal/util.rb +915 -0
- data/lib/userplex/internal.rb +20 -0
- data/lib/userplex/models/event_track_params.rb +46 -0
- data/lib/userplex/models/event_track_response.rb +33 -0
- data/lib/userplex/models/user_identify_params.rb +46 -0
- data/lib/userplex/models/user_identify_response.rb +25 -0
- data/lib/userplex/models.rb +45 -0
- data/lib/userplex/request_options.rb +77 -0
- data/lib/userplex/resources/events.rb +43 -0
- data/lib/userplex/resources/users.rb +43 -0
- data/lib/userplex/version.rb +5 -0
- data/lib/userplex.rb +59 -0
- data/manifest.yaml +15 -0
- data/rbi/userplex/client.rbi +54 -0
- data/rbi/userplex/errors.rbi +205 -0
- data/rbi/userplex/file_part.rbi +37 -0
- data/rbi/userplex/internal/transport/base_client.rbi +292 -0
- data/rbi/userplex/internal/transport/pooled_net_requester.rbi +79 -0
- data/rbi/userplex/internal/type/array_of.rbi +104 -0
- data/rbi/userplex/internal/type/base_model.rbi +302 -0
- data/rbi/userplex/internal/type/base_page.rbi +42 -0
- data/rbi/userplex/internal/type/boolean.rbi +58 -0
- data/rbi/userplex/internal/type/converter.rbi +216 -0
- data/rbi/userplex/internal/type/enum.rbi +82 -0
- data/rbi/userplex/internal/type/file_input.rbi +59 -0
- data/rbi/userplex/internal/type/hash_of.rbi +104 -0
- data/rbi/userplex/internal/type/request_parameters.rbi +29 -0
- data/rbi/userplex/internal/type/union.rbi +128 -0
- data/rbi/userplex/internal/type/unknown.rbi +58 -0
- data/rbi/userplex/internal/util.rbi +487 -0
- data/rbi/userplex/internal.rbi +16 -0
- data/rbi/userplex/models/event_track_params.rbi +73 -0
- data/rbi/userplex/models/event_track_response.rbi +52 -0
- data/rbi/userplex/models/user_identify_params.rbi +70 -0
- data/rbi/userplex/models/user_identify_response.rbi +38 -0
- data/rbi/userplex/models.rbi +7 -0
- data/rbi/userplex/request_options.rbi +59 -0
- data/rbi/userplex/resources/events.rbi +36 -0
- data/rbi/userplex/resources/users.rbi +36 -0
- data/rbi/userplex/version.rbi +5 -0
- data/sig/userplex/client.rbs +28 -0
- data/sig/userplex/errors.rbs +117 -0
- data/sig/userplex/file_part.rbs +21 -0
- data/sig/userplex/internal/transport/base_client.rbs +131 -0
- data/sig/userplex/internal/transport/pooled_net_requester.rbs +45 -0
- data/sig/userplex/internal/type/array_of.rbs +48 -0
- data/sig/userplex/internal/type/base_model.rbs +102 -0
- data/sig/userplex/internal/type/base_page.rbs +24 -0
- data/sig/userplex/internal/type/boolean.rbs +26 -0
- data/sig/userplex/internal/type/converter.rbs +79 -0
- data/sig/userplex/internal/type/enum.rbs +32 -0
- data/sig/userplex/internal/type/file_input.rbs +25 -0
- data/sig/userplex/internal/type/hash_of.rbs +48 -0
- data/sig/userplex/internal/type/request_parameters.rbs +17 -0
- data/sig/userplex/internal/type/union.rbs +52 -0
- data/sig/userplex/internal/type/unknown.rbs +26 -0
- data/sig/userplex/internal/util.rbs +185 -0
- data/sig/userplex/internal.rbs +9 -0
- data/sig/userplex/models/event_track_params.rbs +45 -0
- data/sig/userplex/models/event_track_response.rbs +22 -0
- data/sig/userplex/models/user_identify_params.rbs +43 -0
- data/sig/userplex/models/user_identify_response.rbs +15 -0
- data/sig/userplex/models.rbs +5 -0
- data/sig/userplex/request_options.rbs +34 -0
- data/sig/userplex/resources/events.rbs +15 -0
- data/sig/userplex/resources/users.rbs +15 -0
- data/sig/userplex/version.rbs +3 -0
- metadata +146 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Internal
|
5
|
+
extend Userplex::Internal::Util::SorbetRuntimeSupport
|
6
|
+
|
7
|
+
OMIT =
|
8
|
+
Object.new.tap do
|
9
|
+
_1.define_singleton_method(:inspect) { "#<#{Userplex::Internal}::OMIT>" }
|
10
|
+
end
|
11
|
+
.freeze
|
12
|
+
|
13
|
+
define_sorbet_constant!(:AnyHash) do
|
14
|
+
T.type_alias { T::Hash[Symbol, T.anything] }
|
15
|
+
end
|
16
|
+
define_sorbet_constant!(:FileInput) do
|
17
|
+
T.type_alias { T.any(Pathname, StringIO, IO, String, Userplex::FilePart) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Models
|
5
|
+
# @see Userplex::Resources::Events#track
|
6
|
+
class EventTrackParams < Userplex::Internal::Type::BaseModel
|
7
|
+
extend Userplex::Internal::Type::RequestParameters::Converter
|
8
|
+
include Userplex::Internal::Type::RequestParameters
|
9
|
+
|
10
|
+
# @!attribute event
|
11
|
+
# Event name
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
required :event, String
|
15
|
+
|
16
|
+
# @!attribute user_id
|
17
|
+
# External user ID
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
required :user_id, String, api_name: :userId
|
21
|
+
|
22
|
+
# @!attribute properties
|
23
|
+
# Event metadata
|
24
|
+
#
|
25
|
+
# @return [Hash{Symbol=>Object, nil}, nil]
|
26
|
+
optional :properties, Userplex::Internal::Type::HashOf[Userplex::Internal::Type::Unknown, nil?: true]
|
27
|
+
|
28
|
+
# @!attribute timestamp
|
29
|
+
# Event timestamp (ISO 8601)
|
30
|
+
#
|
31
|
+
# @return [Time, nil]
|
32
|
+
optional :timestamp, Time
|
33
|
+
|
34
|
+
# @!method initialize(event:, user_id:, properties: nil, timestamp: nil, request_options: {})
|
35
|
+
# @param event [String] Event name
|
36
|
+
#
|
37
|
+
# @param user_id [String] External user ID
|
38
|
+
#
|
39
|
+
# @param properties [Hash{Symbol=>Object, nil}] Event metadata
|
40
|
+
#
|
41
|
+
# @param timestamp [Time] Event timestamp (ISO 8601)
|
42
|
+
#
|
43
|
+
# @param request_options [Userplex::RequestOptions, Hash{Symbol=>Object}]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Models
|
5
|
+
# @see Userplex::Resources::Events#track
|
6
|
+
class EventTrackResponse < Userplex::Internal::Type::BaseModel
|
7
|
+
# @!attribute event_id
|
8
|
+
# The event ID
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
required :event_id, String, api_name: :eventId
|
12
|
+
|
13
|
+
# @!attribute occurrence_id
|
14
|
+
# The event occurrence ID
|
15
|
+
#
|
16
|
+
# @return [String]
|
17
|
+
required :occurrence_id, String, api_name: :occurrenceId
|
18
|
+
|
19
|
+
# @!attribute success
|
20
|
+
# Whether the operation was successful
|
21
|
+
#
|
22
|
+
# @return [Boolean]
|
23
|
+
required :success, Userplex::Internal::Type::Boolean
|
24
|
+
|
25
|
+
# @!method initialize(event_id:, occurrence_id:, success:)
|
26
|
+
# @param event_id [String] The event ID
|
27
|
+
#
|
28
|
+
# @param occurrence_id [String] The event occurrence ID
|
29
|
+
#
|
30
|
+
# @param success [Boolean] Whether the operation was successful
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Models
|
5
|
+
# @see Userplex::Resources::Users#identify
|
6
|
+
class UserIdentifyParams < Userplex::Internal::Type::BaseModel
|
7
|
+
extend Userplex::Internal::Type::RequestParameters::Converter
|
8
|
+
include Userplex::Internal::Type::RequestParameters
|
9
|
+
|
10
|
+
# @!attribute email
|
11
|
+
# User email address
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
required :email, String
|
15
|
+
|
16
|
+
# @!attribute name
|
17
|
+
# User full name
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
required :name, String
|
21
|
+
|
22
|
+
# @!attribute user_id
|
23
|
+
# Unique identifier for the user
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
required :user_id, String, api_name: :userId
|
27
|
+
|
28
|
+
# @!attribute properties
|
29
|
+
# Additional user properties
|
30
|
+
#
|
31
|
+
# @return [Hash{Symbol=>Object, nil}, nil]
|
32
|
+
optional :properties, Userplex::Internal::Type::HashOf[Userplex::Internal::Type::Unknown, nil?: true]
|
33
|
+
|
34
|
+
# @!method initialize(email:, name:, user_id:, properties: nil, request_options: {})
|
35
|
+
# @param email [String] User email address
|
36
|
+
#
|
37
|
+
# @param name [String] User full name
|
38
|
+
#
|
39
|
+
# @param user_id [String] Unique identifier for the user
|
40
|
+
#
|
41
|
+
# @param properties [Hash{Symbol=>Object, nil}] Additional user properties
|
42
|
+
#
|
43
|
+
# @param request_options [Userplex::RequestOptions, Hash{Symbol=>Object}]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Models
|
5
|
+
# @see Userplex::Resources::Users#identify
|
6
|
+
class UserIdentifyResponse < Userplex::Internal::Type::BaseModel
|
7
|
+
# @!attribute success
|
8
|
+
# Whether the operation was successful
|
9
|
+
#
|
10
|
+
# @return [Boolean]
|
11
|
+
required :success, Userplex::Internal::Type::Boolean
|
12
|
+
|
13
|
+
# @!attribute user_id
|
14
|
+
# The identified user ID
|
15
|
+
#
|
16
|
+
# @return [String]
|
17
|
+
required :user_id, String, api_name: :userId
|
18
|
+
|
19
|
+
# @!method initialize(success:, user_id:)
|
20
|
+
# @param success [Boolean] Whether the operation was successful
|
21
|
+
#
|
22
|
+
# @param user_id [String] The identified user ID
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
[Userplex::Internal::Type::BaseModel, *Userplex::Internal::Type::BaseModel.subclasses].each do |cls|
|
5
|
+
cls.define_sorbet_constant!(:OrHash) { T.type_alias { T.any(cls, Userplex::Internal::AnyHash) } }
|
6
|
+
end
|
7
|
+
|
8
|
+
Userplex::Internal::Util.walk_namespaces(Userplex::Models).each do |mod|
|
9
|
+
case mod
|
10
|
+
in Userplex::Internal::Type::Enum | Userplex::Internal::Type::Union
|
11
|
+
mod.constants.each do |name|
|
12
|
+
case mod.const_get(name)
|
13
|
+
in true | false
|
14
|
+
mod.define_sorbet_constant!(:TaggedBoolean) { T.type_alias { T::Boolean } }
|
15
|
+
mod.define_sorbet_constant!(:OrBoolean) { T.type_alias { T::Boolean } }
|
16
|
+
in Integer
|
17
|
+
mod.define_sorbet_constant!(:TaggedInteger) { T.type_alias { Integer } }
|
18
|
+
mod.define_sorbet_constant!(:OrInteger) { T.type_alias { Integer } }
|
19
|
+
in Float
|
20
|
+
mod.define_sorbet_constant!(:TaggedFloat) { T.type_alias { Float } }
|
21
|
+
mod.define_sorbet_constant!(:OrFloat) { T.type_alias { Float } }
|
22
|
+
in Symbol
|
23
|
+
mod.define_sorbet_constant!(:TaggedSymbol) { T.type_alias { Symbol } }
|
24
|
+
mod.define_sorbet_constant!(:OrSymbol) { T.type_alias { T.any(Symbol, String) } }
|
25
|
+
else
|
26
|
+
end
|
27
|
+
end
|
28
|
+
else
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Userplex::Internal::Util.walk_namespaces(Userplex::Models)
|
33
|
+
.lazy
|
34
|
+
.grep(Userplex::Internal::Type::Union)
|
35
|
+
.each do |mod|
|
36
|
+
const = :Variants
|
37
|
+
next if mod.sorbet_constant_defined?(const)
|
38
|
+
|
39
|
+
mod.define_sorbet_constant!(const) { T.type_alias { mod.to_sorbet_type } }
|
40
|
+
end
|
41
|
+
|
42
|
+
EventTrackParams = Userplex::Models::EventTrackParams
|
43
|
+
|
44
|
+
UserIdentifyParams = Userplex::Models::UserIdentifyParams
|
45
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
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 < Userplex::Internal::Type::BaseModel
|
10
|
+
# @api private
|
11
|
+
#
|
12
|
+
# @param opts [Userplex::RequestOptions, Hash{Symbol=>Object}]
|
13
|
+
#
|
14
|
+
# @raise [ArgumentError]
|
15
|
+
def self.validate!(opts)
|
16
|
+
case opts
|
17
|
+
in Userplex::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, Userplex::Internal::Type::HashOf[Userplex::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, Userplex::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, Userplex::Internal::Type::HashOf[Userplex::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(Userplex::RequestOptions, Userplex::Internal::AnyHash) }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Resources
|
5
|
+
class Events
|
6
|
+
# Creates or uses an existing event and records an event occurrence for an end
|
7
|
+
# user. Requires a valid API key for authentication.
|
8
|
+
#
|
9
|
+
# @overload track(event:, user_id:, properties: nil, timestamp: nil, request_options: {})
|
10
|
+
#
|
11
|
+
# @param event [String] Event name
|
12
|
+
#
|
13
|
+
# @param user_id [String] External user ID
|
14
|
+
#
|
15
|
+
# @param properties [Hash{Symbol=>Object, nil}] Event metadata
|
16
|
+
#
|
17
|
+
# @param timestamp [Time] Event timestamp (ISO 8601)
|
18
|
+
#
|
19
|
+
# @param request_options [Userplex::RequestOptions, Hash{Symbol=>Object}, nil]
|
20
|
+
#
|
21
|
+
# @return [Userplex::Models::EventTrackResponse]
|
22
|
+
#
|
23
|
+
# @see Userplex::Models::EventTrackParams
|
24
|
+
def track(params)
|
25
|
+
parsed, options = Userplex::EventTrackParams.dump_request(params)
|
26
|
+
@client.request(
|
27
|
+
method: :post,
|
28
|
+
path: "api/event",
|
29
|
+
body: parsed,
|
30
|
+
model: Userplex::Models::EventTrackResponse,
|
31
|
+
options: options
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @api private
|
36
|
+
#
|
37
|
+
# @param client [Userplex::Client]
|
38
|
+
def initialize(client:)
|
39
|
+
@client = client
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
module Resources
|
5
|
+
class Users
|
6
|
+
# Creates or updates an end user in InstantDB with the provided information.
|
7
|
+
# Requires a valid API key for authentication.
|
8
|
+
#
|
9
|
+
# @overload identify(email:, name:, user_id:, properties: nil, request_options: {})
|
10
|
+
#
|
11
|
+
# @param email [String] User email address
|
12
|
+
#
|
13
|
+
# @param name [String] User full name
|
14
|
+
#
|
15
|
+
# @param user_id [String] Unique identifier for the user
|
16
|
+
#
|
17
|
+
# @param properties [Hash{Symbol=>Object, nil}] Additional user properties
|
18
|
+
#
|
19
|
+
# @param request_options [Userplex::RequestOptions, Hash{Symbol=>Object}, nil]
|
20
|
+
#
|
21
|
+
# @return [Userplex::Models::UserIdentifyResponse]
|
22
|
+
#
|
23
|
+
# @see Userplex::Models::UserIdentifyParams
|
24
|
+
def identify(params)
|
25
|
+
parsed, options = Userplex::UserIdentifyParams.dump_request(params)
|
26
|
+
@client.request(
|
27
|
+
method: :post,
|
28
|
+
path: "api/identify",
|
29
|
+
body: parsed,
|
30
|
+
model: Userplex::Models::UserIdentifyResponse,
|
31
|
+
options: options
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @api private
|
36
|
+
#
|
37
|
+
# @param client [Userplex::Client]
|
38
|
+
def initialize(client:)
|
39
|
+
@client = client
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/userplex.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Standard libraries.
|
4
|
+
# rubocop:disable Lint/RedundantRequireStatement
|
5
|
+
require "English"
|
6
|
+
require "cgi"
|
7
|
+
require "date"
|
8
|
+
require "erb"
|
9
|
+
require "etc"
|
10
|
+
require "json"
|
11
|
+
require "net/http"
|
12
|
+
require "pathname"
|
13
|
+
require "rbconfig"
|
14
|
+
require "securerandom"
|
15
|
+
require "set"
|
16
|
+
require "stringio"
|
17
|
+
require "time"
|
18
|
+
require "uri"
|
19
|
+
# rubocop:enable Lint/RedundantRequireStatement
|
20
|
+
|
21
|
+
# We already ship the preferred sorbet manifests in the package itself.
|
22
|
+
# `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
|
23
|
+
if Object.const_defined?(:Tapioca) &&
|
24
|
+
caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
|
25
|
+
ARGV.none?(/dsl/)
|
26
|
+
return
|
27
|
+
end
|
28
|
+
|
29
|
+
# Gems.
|
30
|
+
require "connection_pool"
|
31
|
+
|
32
|
+
# Package files.
|
33
|
+
require_relative "userplex/version"
|
34
|
+
require_relative "userplex/internal/util"
|
35
|
+
require_relative "userplex/internal/type/converter"
|
36
|
+
require_relative "userplex/internal/type/unknown"
|
37
|
+
require_relative "userplex/internal/type/boolean"
|
38
|
+
require_relative "userplex/internal/type/file_input"
|
39
|
+
require_relative "userplex/internal/type/enum"
|
40
|
+
require_relative "userplex/internal/type/union"
|
41
|
+
require_relative "userplex/internal/type/array_of"
|
42
|
+
require_relative "userplex/internal/type/hash_of"
|
43
|
+
require_relative "userplex/internal/type/base_model"
|
44
|
+
require_relative "userplex/internal/type/base_page"
|
45
|
+
require_relative "userplex/internal/type/request_parameters"
|
46
|
+
require_relative "userplex/internal"
|
47
|
+
require_relative "userplex/request_options"
|
48
|
+
require_relative "userplex/file_part"
|
49
|
+
require_relative "userplex/errors"
|
50
|
+
require_relative "userplex/internal/transport/base_client"
|
51
|
+
require_relative "userplex/internal/transport/pooled_net_requester"
|
52
|
+
require_relative "userplex/client"
|
53
|
+
require_relative "userplex/models/event_track_params"
|
54
|
+
require_relative "userplex/models/event_track_response"
|
55
|
+
require_relative "userplex/models/user_identify_params"
|
56
|
+
require_relative "userplex/models/user_identify_response"
|
57
|
+
require_relative "userplex/models"
|
58
|
+
require_relative "userplex/resources/events"
|
59
|
+
require_relative "userplex/resources/users"
|
data/manifest.yaml
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# typed: strong
|
2
|
+
|
3
|
+
module Userplex
|
4
|
+
class Client < Userplex::Internal::Transport::BaseClient
|
5
|
+
DEFAULT_MAX_RETRIES = 2
|
6
|
+
|
7
|
+
DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
|
8
|
+
|
9
|
+
DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
|
10
|
+
|
11
|
+
DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
|
12
|
+
|
13
|
+
# Enter your API key from your project settings
|
14
|
+
sig { returns(String) }
|
15
|
+
attr_reader :api_key
|
16
|
+
|
17
|
+
sig { returns(Userplex::Resources::Users) }
|
18
|
+
attr_reader :users
|
19
|
+
|
20
|
+
sig { returns(Userplex::Resources::Events) }
|
21
|
+
attr_reader :events
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
sig { override.returns(T::Hash[String, String]) }
|
25
|
+
private def auth_headers
|
26
|
+
end
|
27
|
+
|
28
|
+
# Creates and returns a new client for interacting with the API.
|
29
|
+
sig do
|
30
|
+
params(
|
31
|
+
api_key: T.nilable(String),
|
32
|
+
base_url: T.nilable(String),
|
33
|
+
max_retries: Integer,
|
34
|
+
timeout: Float,
|
35
|
+
initial_retry_delay: Float,
|
36
|
+
max_retry_delay: Float
|
37
|
+
).returns(T.attached_class)
|
38
|
+
end
|
39
|
+
def self.new(
|
40
|
+
# Enter your API key from your project settings Defaults to
|
41
|
+
# `ENV["USERPLEX_API_KEY"]`
|
42
|
+
api_key: ENV["USERPLEX_API_KEY"],
|
43
|
+
# Override the default base URL for the API, e.g.,
|
44
|
+
# `"https://api.example.com/v2/"`. Defaults to `ENV["USERPLEX_BASE_URL"]`
|
45
|
+
base_url: ENV["USERPLEX_BASE_URL"],
|
46
|
+
# Max number of retries to attempt after a failed retryable request.
|
47
|
+
max_retries: Userplex::Client::DEFAULT_MAX_RETRIES,
|
48
|
+
timeout: Userplex::Client::DEFAULT_TIMEOUT_IN_SECONDS,
|
49
|
+
initial_retry_delay: Userplex::Client::DEFAULT_INITIAL_RETRY_DELAY,
|
50
|
+
max_retry_delay: Userplex::Client::DEFAULT_MAX_RETRY_DELAY
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|