clerk-sdk-ruby 5.1.2 → 5.1.3
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 +4 -4
- data/lib/clerk/actortokens.rb +11 -3
- data/lib/clerk/agenttasks.rb +335 -0
- data/lib/clerk/allowlistidentifiers.rb +15 -4
- data/lib/clerk/api_keys.rb +35 -9
- data/lib/clerk/betafeatures.rb +11 -3
- data/lib/clerk/billing.rb +43 -11
- data/lib/clerk/blocklistidentifiers.rb +15 -4
- data/lib/clerk/clients.rb +15 -4
- data/lib/clerk/domains.rb +19 -5
- data/lib/clerk/emailaddresses.rb +21 -7
- data/lib/clerk/emailandsmstemplates.rb +7 -2
- data/lib/clerk/emailsmstemplates.rb +19 -5
- data/lib/clerk/instancesettings.rb +299 -8
- data/lib/clerk/invitations.rb +19 -5
- data/lib/clerk/jwks.rb +7 -2
- data/lib/clerk/jwttemplates.rb +23 -6
- data/lib/clerk/m2m.rb +23 -5
- data/lib/clerk/machines.rb +39 -10
- data/lib/clerk/miscellaneous.rb +7 -2
- data/lib/clerk/models/components/action.rb +20 -0
- data/lib/clerk/models/components/action.rbi +11 -0
- data/lib/clerk/models/components/adjustcreditbalancerequest.rb +48 -0
- data/lib/clerk/models/components/adjustcreditbalancerequest.rbi +21 -0
- data/lib/clerk/models/components/agenttask.rb +47 -0
- data/lib/clerk/models/components/agenttask.rbi +19 -0
- data/lib/clerk/models/components/agenttask_object.rb +19 -0
- data/lib/clerk/models/components/agenttask_object.rbi +11 -0
- data/lib/clerk/models/components/balance.rb +44 -0
- data/lib/clerk/models/components/balance.rbi +19 -0
- data/lib/clerk/models/components/billingpaymentattempt.rb +5 -1
- data/lib/clerk/models/components/billingpaymentattempt.rbi +2 -0
- data/lib/clerk/models/components/billingpaymentattempt_credits.rb +40 -0
- data/lib/clerk/models/components/billingpaymentattempt_credits.rbi +17 -0
- data/lib/clerk/models/components/billingpaymentattempt_payer.rb +36 -0
- data/lib/clerk/models/components/billingpaymentattempt_payer.rbi +15 -0
- data/lib/clerk/models/components/billingpaymentattempt_proration.rb +44 -0
- data/lib/clerk/models/components/billingpaymentattempt_proration.rbi +19 -0
- data/lib/clerk/models/components/billingpaymentattempt_totals.rb +52 -0
- data/lib/clerk/models/components/billingpaymentattempt_totals.rbi +23 -0
- data/lib/clerk/models/components/billingpriceresponse.rb +5 -1
- data/lib/clerk/models/components/billingpriceresponse.rbi +2 -0
- data/lib/clerk/models/components/billingstatement.rb +1 -1
- data/lib/clerk/models/components/{totals.rb → billingstatement_totals.rb} +6 -2
- data/lib/clerk/models/components/{totals.rbi → billingstatement_totals.rbi} +4 -2
- data/lib/clerk/models/components/commercecreditbalanceresponse.rb +36 -0
- data/lib/clerk/models/components/commercecreditbalanceresponse.rbi +15 -0
- data/lib/clerk/models/components/commercecreditledgerresponse.rb +64 -0
- data/lib/clerk/models/components/commercecreditledgerresponse.rbi +29 -0
- data/lib/clerk/models/components/commerceperunittotal.rb +40 -0
- data/lib/clerk/models/components/commerceperunittotal.rbi +17 -0
- data/lib/clerk/models/components/commerceperunittotaltier.rb +40 -0
- data/lib/clerk/models/components/commerceperunittotaltier.rbi +17 -0
- data/lib/clerk/models/components/commerceplan.rb +5 -1
- data/lib/clerk/models/components/commerceplan.rbi +2 -0
- data/lib/clerk/models/components/commerceplanunitprice.rb +40 -0
- data/lib/clerk/models/components/commerceplanunitprice.rbi +17 -0
- data/lib/clerk/models/components/commerceplanunitpricetier.rb +40 -0
- data/lib/clerk/models/components/commerceplanunitpricetier.rbi +17 -0
- data/lib/clerk/models/components/commercesubscriptionitem.rb +13 -1
- data/lib/clerk/models/components/commercesubscriptionitem.rbi +6 -0
- data/lib/clerk/models/components/commercesubscriptionitem_credits.rb +40 -0
- data/lib/clerk/models/components/commercesubscriptionitem_credits.rbi +17 -0
- data/lib/clerk/models/components/commercesubscriptionitem_payer.rb +36 -0
- data/lib/clerk/models/components/commercesubscriptionitem_payer.rbi +15 -0
- data/lib/clerk/models/components/commercesubscriptionitem_plan.rb +5 -1
- data/lib/clerk/models/components/commercesubscriptionitem_plan.rbi +2 -0
- data/lib/clerk/models/components/commercesubscriptionitem_proration.rb +44 -0
- data/lib/clerk/models/components/commercesubscriptionitem_proration.rbi +19 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals.rb +52 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals.rbi +23 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_credits.rb +40 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_credits.rbi +17 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_payer.rb +36 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_payer.rbi +15 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_proration.rb +44 -0
- data/lib/clerk/models/components/commercesubscriptionitem_totals_proration.rbi +19 -0
- data/lib/clerk/models/components/oauthapplicationsettings.rb +40 -0
- data/lib/clerk/models/components/oauthapplicationsettings.rbi +17 -0
- data/lib/clerk/models/components/oauthapplicationsettings_object.rb +19 -0
- data/lib/clerk/models/components/oauthapplicationsettings_object.rbi +11 -0
- data/lib/clerk/models/components/schemas_commercesubscriptionitem.rb +1 -1
- data/lib/clerk/models/components/{payer.rb → schemas_commercesubscriptionitem_payer.rb} +1 -1
- data/lib/clerk/models/components/{payer.rbi → schemas_commercesubscriptionitem_payer.rbi} +2 -2
- data/lib/clerk/models/components/seats.rb +32 -0
- data/lib/clerk/models/components/seats.rbi +13 -0
- data/lib/clerk/models/components.rb +27 -2
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_request.rb +36 -0
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_request.rbi +15 -0
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/adjustorganizationbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_request.rb +36 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_request.rbi +15 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/adjustuserbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/createagenttask_request.rb +60 -0
- data/lib/clerk/models/operations/createagenttask_request.rbi +23 -0
- data/lib/clerk/models/operations/createagenttask_response.rb +44 -0
- data/lib/clerk/models/operations/createagenttask_response.rbi +19 -0
- data/lib/clerk/models/operations/createm2mtoken_request.rb +5 -1
- data/lib/clerk/models/operations/createm2mtoken_request.rbi +2 -0
- data/lib/clerk/models/operations/getinstanceoauthapplicationsettings_response.rb +44 -0
- data/lib/clerk/models/operations/getinstanceoauthapplicationsettings_response.rbi +19 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_request.rb +32 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_request.rbi +13 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/getorganizationbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_request.rb +32 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_request.rbi +13 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_response.rb +44 -0
- data/lib/clerk/models/operations/getuserbillingcreditbalance_response.rbi +19 -0
- data/lib/clerk/models/operations/listinstanceorganizationinvitations_status.rb +1 -0
- data/lib/clerk/models/operations/listorganizationinvitations_status.rb +1 -0
- data/lib/clerk/models/operations/on_behalf_of.rb +37 -0
- data/lib/clerk/models/operations/on_behalf_of.rbi +15 -0
- data/lib/clerk/models/operations/permissions.rb +19 -0
- data/lib/clerk/models/operations/permissions.rbi +11 -0
- data/lib/clerk/models/operations/revokeagenttask_request.rb +32 -0
- data/lib/clerk/models/operations/revokeagenttask_request.rbi +13 -0
- data/lib/clerk/models/operations/revokeagenttask_response.rb +44 -0
- data/lib/clerk/models/operations/revokeagenttask_response.rbi +19 -0
- data/lib/clerk/models/operations/token_format.rb +20 -0
- data/lib/clerk/models/operations/token_format.rbi +11 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_request.rb +36 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_request.rbi +15 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_response.rb +44 -0
- data/lib/clerk/models/operations/updateinstanceoauthapplicationsettings_response.rbi +19 -0
- data/lib/clerk/models/operations/usersgetorganizationinvitations_status.rb +1 -0
- data/lib/clerk/models/operations.rb +18 -0
- data/lib/clerk/oauthaccesstokens.rb +7 -2
- data/lib/clerk/oauthapplications.rb +27 -7
- data/lib/clerk/openapiclient.rb +4 -2
- data/lib/clerk/organizationdomains.rb +23 -6
- data/lib/clerk/organizationinvitations.rb +32 -9
- data/lib/clerk/organizationmemberships.rb +23 -6
- data/lib/clerk/organizationpermissions.rb +23 -6
- data/lib/clerk/organizationroles.rb +31 -8
- data/lib/clerk/organizations.rb +374 -11
- data/lib/clerk/phonenumbers.rb +19 -5
- data/lib/clerk/proxychecks.rb +7 -2
- data/lib/clerk/redirecturls.rb +19 -5
- data/lib/clerk/rolesets.rb +31 -8
- data/lib/clerk/samlconnections.rb +23 -6
- data/lib/clerk/sdkconfiguration.rb +3 -3
- data/lib/clerk/sessions.rb +35 -9
- data/lib/clerk/signintokens.rb +11 -3
- data/lib/clerk/signups.rb +11 -3
- data/lib/clerk/templates.rb +7 -2
- data/lib/clerk/testingtokens.rb +7 -2
- data/lib/clerk/users.rb +458 -32
- data/lib/clerk/waitlistentries.rb +27 -7
- data/lib/clerk/webhooks.rb +15 -4
- data/lib/clerk_sdk_ruby.rb +1 -0
- data/lib/crystalline/types.rb +11 -3
- metadata +107 -6
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
|
|
11
|
+
class CommercePlanUnitPriceTier
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
# Start block (inclusive) for this tier
|
|
16
|
+
field :starts_at_block, ::Integer, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('starts_at_block'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :fee_per_block, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('fee_per_block'), required: true } }
|
|
19
|
+
# End block (inclusive) for this tier; null means unlimited
|
|
20
|
+
field :ends_after_block, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('ends_after_block') } }
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def initialize(starts_at_block:, fee_per_block:, ends_after_block: nil)
|
|
24
|
+
@starts_at_block = starts_at_block
|
|
25
|
+
@fee_per_block = fee_per_block
|
|
26
|
+
@ends_after_block = ends_after_block
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def ==(other)
|
|
31
|
+
return false unless other.is_a? self.class
|
|
32
|
+
return false unless @starts_at_block == other.starts_at_block
|
|
33
|
+
return false unless @fee_per_block == other.fee_per_block
|
|
34
|
+
return false unless @ends_after_block == other.ends_after_block
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommercePlanUnitPriceTier
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommercePlanUnitPriceTier
|
|
11
|
+
def starts_at_block(); end
|
|
12
|
+
def starts_at_block=(str_); end
|
|
13
|
+
def fee_per_block(); end
|
|
14
|
+
def fee_per_block=(str_); end
|
|
15
|
+
def ends_after_block(); end
|
|
16
|
+
def ends_after_block=(str_); end
|
|
17
|
+
end
|
|
@@ -54,13 +54,19 @@ module Clerk
|
|
|
54
54
|
field :created_at, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('created_at') } }
|
|
55
55
|
# Unix timestamp (in milliseconds) when the subscription item was last updated.
|
|
56
56
|
field :updated_at, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('updated_at') } }
|
|
57
|
+
# Unified credits breakdown for this subscription item.
|
|
58
|
+
field :credits, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemCredits), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('credits') } }
|
|
57
59
|
# The associated plan.
|
|
58
60
|
field :plan, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemPlan), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('plan') } }
|
|
59
61
|
# Information about the next payment.
|
|
60
62
|
field :next_payment, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemNextPayment), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('next_payment') } }
|
|
63
|
+
# Seat quantity for seat-based billing.
|
|
64
|
+
field :seats, Crystalline::Nilable.new(Models::Components::Seats), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('seats') } }
|
|
65
|
+
# Totals for this subscription item.
|
|
66
|
+
field :totals, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemTotals), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('totals') } }
|
|
61
67
|
|
|
62
68
|
|
|
63
|
-
def initialize(object:, id:, instance_id:, status:, plan_period:, payer_id:, is_free_trial:, period_start:, credit: nil, plan_id: nil, price_id: nil, payment_method: nil, lifetime_paid: nil, payer: nil, period_end: nil, proration_date: nil, canceled_at: nil, past_due_at: nil, ended_at: nil, created_at: nil, updated_at: nil, plan: nil, next_payment: nil)
|
|
69
|
+
def initialize(object:, id:, instance_id:, status:, plan_period:, payer_id:, is_free_trial:, period_start:, credit: nil, plan_id: nil, price_id: nil, payment_method: nil, lifetime_paid: nil, payer: nil, period_end: nil, proration_date: nil, canceled_at: nil, past_due_at: nil, ended_at: nil, created_at: nil, updated_at: nil, credits: nil, plan: nil, next_payment: nil, seats: nil, totals: nil)
|
|
64
70
|
@object = object
|
|
65
71
|
@id = id
|
|
66
72
|
@instance_id = instance_id
|
|
@@ -82,8 +88,11 @@ module Clerk
|
|
|
82
88
|
@ended_at = ended_at
|
|
83
89
|
@created_at = created_at
|
|
84
90
|
@updated_at = updated_at
|
|
91
|
+
@credits = credits
|
|
85
92
|
@plan = plan
|
|
86
93
|
@next_payment = next_payment
|
|
94
|
+
@seats = seats
|
|
95
|
+
@totals = totals
|
|
87
96
|
end
|
|
88
97
|
|
|
89
98
|
|
|
@@ -110,8 +119,11 @@ module Clerk
|
|
|
110
119
|
return false unless @ended_at == other.ended_at
|
|
111
120
|
return false unless @created_at == other.created_at
|
|
112
121
|
return false unless @updated_at == other.updated_at
|
|
122
|
+
return false unless @credits == other.credits
|
|
113
123
|
return false unless @plan == other.plan
|
|
114
124
|
return false unless @next_payment == other.next_payment
|
|
125
|
+
return false unless @seats == other.seats
|
|
126
|
+
return false unless @totals == other.totals
|
|
115
127
|
true
|
|
116
128
|
end
|
|
117
129
|
end
|
|
@@ -50,8 +50,14 @@ class Clerk::Models::Components::CommerceSubscriptionItem
|
|
|
50
50
|
def created_at=(str_); end
|
|
51
51
|
def updated_at(); end
|
|
52
52
|
def updated_at=(str_); end
|
|
53
|
+
def credits(); end
|
|
54
|
+
def credits=(str_); end
|
|
53
55
|
def plan(); end
|
|
54
56
|
def plan=(str_); end
|
|
55
57
|
def next_payment(); end
|
|
56
58
|
def next_payment=(str_); end
|
|
59
|
+
def seats(); end
|
|
60
|
+
def seats=(str_); end
|
|
61
|
+
def totals(); end
|
|
62
|
+
def totals=(str_); end
|
|
57
63
|
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
# Unified credits breakdown for this subscription item.
|
|
11
|
+
class CommerceSubscriptionItemCredits
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :total, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('total'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :proration, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemProration), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('proration'), required: true } }
|
|
19
|
+
|
|
20
|
+
field :payer, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemPayer), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('payer'), required: true } }
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def initialize(total:, proration: nil, payer: nil)
|
|
24
|
+
@total = total
|
|
25
|
+
@proration = proration
|
|
26
|
+
@payer = payer
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def ==(other)
|
|
31
|
+
return false unless other.is_a? self.class
|
|
32
|
+
return false unless @total == other.total
|
|
33
|
+
return false unless @proration == other.proration
|
|
34
|
+
return false unless @payer == other.payer
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemCredits
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemCredits
|
|
11
|
+
def total(); end
|
|
12
|
+
def total=(str_); end
|
|
13
|
+
def proration(); end
|
|
14
|
+
def proration=(str_); end
|
|
15
|
+
def payer(); end
|
|
16
|
+
def payer=(str_); end
|
|
17
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
|
|
11
|
+
class CommerceSubscriptionItemPayer
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :remaining_balance, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('remaining_balance'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :applied_amount, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('applied_amount'), required: true } }
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def initialize(remaining_balance:, applied_amount:)
|
|
22
|
+
@remaining_balance = remaining_balance
|
|
23
|
+
@applied_amount = applied_amount
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def ==(other)
|
|
28
|
+
return false unless other.is_a? self.class
|
|
29
|
+
return false unless @remaining_balance == other.remaining_balance
|
|
30
|
+
return false unless @applied_amount == other.applied_amount
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemPayer
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemPayer
|
|
11
|
+
def remaining_balance(); end
|
|
12
|
+
def remaining_balance=(str_); end
|
|
13
|
+
def applied_amount(); end
|
|
14
|
+
def applied_amount=(str_); end
|
|
15
|
+
end
|
|
@@ -50,9 +50,11 @@ module Clerk
|
|
|
50
50
|
field :features, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::FeatureResponse)), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('features') } }
|
|
51
51
|
# Number of free trial days for this plan.
|
|
52
52
|
field :free_trial_days, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('free_trial_days'), required: true } }
|
|
53
|
+
# Per-unit pricing tiers for this plan (for example, seats)
|
|
54
|
+
field :unit_prices, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::CommercePlanUnitPrice)), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('unit_prices') } }
|
|
53
55
|
|
|
54
56
|
|
|
55
|
-
def initialize(object:, id:, name:, fee:, product_id:, is_default:, is_recurring:, publicly_visible:, has_base_fee:, for_payer_type:, slug:, free_trial_enabled:, annual_monthly_fee: nil, annual_fee: nil, description: nil, avatar_url: nil, features: nil, free_trial_days: nil)
|
|
57
|
+
def initialize(object:, id:, name:, fee:, product_id:, is_default:, is_recurring:, publicly_visible:, has_base_fee:, for_payer_type:, slug:, free_trial_enabled:, annual_monthly_fee: nil, annual_fee: nil, description: nil, avatar_url: nil, features: nil, free_trial_days: nil, unit_prices: nil)
|
|
56
58
|
@object = object
|
|
57
59
|
@id = id
|
|
58
60
|
@name = name
|
|
@@ -71,6 +73,7 @@ module Clerk
|
|
|
71
73
|
@avatar_url = avatar_url
|
|
72
74
|
@features = features
|
|
73
75
|
@free_trial_days = free_trial_days
|
|
76
|
+
@unit_prices = unit_prices
|
|
74
77
|
end
|
|
75
78
|
|
|
76
79
|
|
|
@@ -94,6 +97,7 @@ module Clerk
|
|
|
94
97
|
return false unless @avatar_url == other.avatar_url
|
|
95
98
|
return false unless @features == other.features
|
|
96
99
|
return false unless @free_trial_days == other.free_trial_days
|
|
100
|
+
return false unless @unit_prices == other.unit_prices
|
|
97
101
|
true
|
|
98
102
|
end
|
|
99
103
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
|
|
11
|
+
class CommerceSubscriptionItemProration
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :amount, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('amount'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :cycle_days_remaining, ::Integer, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('cycle_days_remaining'), required: true } }
|
|
19
|
+
|
|
20
|
+
field :cycle_days_total, ::Integer, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('cycle_days_total'), required: true } }
|
|
21
|
+
|
|
22
|
+
field :cycle_remaining_percent, ::Float, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('cycle_remaining_percent'), required: true } }
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def initialize(amount:, cycle_days_remaining:, cycle_days_total:, cycle_remaining_percent:)
|
|
26
|
+
@amount = amount
|
|
27
|
+
@cycle_days_remaining = cycle_days_remaining
|
|
28
|
+
@cycle_days_total = cycle_days_total
|
|
29
|
+
@cycle_remaining_percent = cycle_remaining_percent
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def ==(other)
|
|
34
|
+
return false unless other.is_a? self.class
|
|
35
|
+
return false unless @amount == other.amount
|
|
36
|
+
return false unless @cycle_days_remaining == other.cycle_days_remaining
|
|
37
|
+
return false unless @cycle_days_total == other.cycle_days_total
|
|
38
|
+
return false unless @cycle_remaining_percent == other.cycle_remaining_percent
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemProration
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemProration
|
|
11
|
+
def amount(); end
|
|
12
|
+
def amount=(str_); end
|
|
13
|
+
def cycle_days_remaining(); end
|
|
14
|
+
def cycle_days_remaining=(str_); end
|
|
15
|
+
def cycle_days_total(); end
|
|
16
|
+
def cycle_days_total=(str_); end
|
|
17
|
+
def cycle_remaining_percent(); end
|
|
18
|
+
def cycle_remaining_percent=(str_); end
|
|
19
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
# Totals for this subscription item.
|
|
11
|
+
class CommerceSubscriptionItemTotals
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :subtotal, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('subtotal'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :base_fee, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('base_fee'), required: true } }
|
|
19
|
+
|
|
20
|
+
field :tax_total, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('tax_total'), required: true } }
|
|
21
|
+
|
|
22
|
+
field :grand_total, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('grand_total'), required: true } }
|
|
23
|
+
|
|
24
|
+
field :per_unit_totals, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::CommercePerUnitTotal)), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('per_unit_totals') } }
|
|
25
|
+
|
|
26
|
+
field :credits, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemTotalsCredits), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('credits') } }
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def initialize(subtotal:, base_fee:, tax_total:, grand_total:, per_unit_totals: nil, credits: nil)
|
|
30
|
+
@subtotal = subtotal
|
|
31
|
+
@base_fee = base_fee
|
|
32
|
+
@tax_total = tax_total
|
|
33
|
+
@grand_total = grand_total
|
|
34
|
+
@per_unit_totals = per_unit_totals
|
|
35
|
+
@credits = credits
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def ==(other)
|
|
40
|
+
return false unless other.is_a? self.class
|
|
41
|
+
return false unless @subtotal == other.subtotal
|
|
42
|
+
return false unless @base_fee == other.base_fee
|
|
43
|
+
return false unless @tax_total == other.tax_total
|
|
44
|
+
return false unless @grand_total == other.grand_total
|
|
45
|
+
return false unless @per_unit_totals == other.per_unit_totals
|
|
46
|
+
return false unless @credits == other.credits
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotals
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotals
|
|
11
|
+
def subtotal(); end
|
|
12
|
+
def subtotal=(str_); end
|
|
13
|
+
def base_fee(); end
|
|
14
|
+
def base_fee=(str_); end
|
|
15
|
+
def tax_total(); end
|
|
16
|
+
def tax_total=(str_); end
|
|
17
|
+
def grand_total(); end
|
|
18
|
+
def grand_total=(str_); end
|
|
19
|
+
def per_unit_totals(); end
|
|
20
|
+
def per_unit_totals=(str_); end
|
|
21
|
+
def credits(); end
|
|
22
|
+
def credits=(str_); end
|
|
23
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
|
|
11
|
+
class CommerceSubscriptionItemTotalsCredits
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :total, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('total'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :proration, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemTotalsProration), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('proration'), required: true } }
|
|
19
|
+
|
|
20
|
+
field :payer, Crystalline::Nilable.new(Models::Components::CommerceSubscriptionItemTotalsPayer), { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('payer'), required: true } }
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def initialize(total:, proration: nil, payer: nil)
|
|
24
|
+
@total = total
|
|
25
|
+
@proration = proration
|
|
26
|
+
@payer = payer
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def ==(other)
|
|
31
|
+
return false unless other.is_a? self.class
|
|
32
|
+
return false unless @total == other.total
|
|
33
|
+
return false unless @proration == other.proration
|
|
34
|
+
return false unless @payer == other.payer
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotalsCredits
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotalsCredits
|
|
11
|
+
def total(); end
|
|
12
|
+
def total=(str_); end
|
|
13
|
+
def proration(); end
|
|
14
|
+
def proration=(str_); end
|
|
15
|
+
def payer(); end
|
|
16
|
+
def payer=(str_); end
|
|
17
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
|
|
11
|
+
class CommerceSubscriptionItemTotalsPayer
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :remaining_balance, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('remaining_balance'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :applied_amount, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('applied_amount'), required: true } }
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def initialize(remaining_balance:, applied_amount:)
|
|
22
|
+
@remaining_balance = remaining_balance
|
|
23
|
+
@applied_amount = applied_amount
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def ==(other)
|
|
28
|
+
return false unless other.is_a? self.class
|
|
29
|
+
return false unless @remaining_balance == other.remaining_balance
|
|
30
|
+
return false unless @applied_amount == other.applied_amount
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotalsPayer
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotalsPayer
|
|
11
|
+
def remaining_balance(); end
|
|
12
|
+
def remaining_balance=(str_); end
|
|
13
|
+
def applied_amount(); end
|
|
14
|
+
def applied_amount=(str_); end
|
|
15
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
|
|
11
|
+
class CommerceSubscriptionItemTotalsProration
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
field :amount, Models::Components::CommerceMoneyResponse, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('amount'), required: true } }
|
|
17
|
+
|
|
18
|
+
field :cycle_days_remaining, ::Integer, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('cycle_days_remaining'), required: true } }
|
|
19
|
+
|
|
20
|
+
field :cycle_days_total, ::Integer, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('cycle_days_total'), required: true } }
|
|
21
|
+
|
|
22
|
+
field :cycle_remaining_percent, ::Float, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('cycle_remaining_percent'), required: true } }
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def initialize(amount:, cycle_days_remaining:, cycle_days_total:, cycle_remaining_percent:)
|
|
26
|
+
@amount = amount
|
|
27
|
+
@cycle_days_remaining = cycle_days_remaining
|
|
28
|
+
@cycle_days_total = cycle_days_total
|
|
29
|
+
@cycle_remaining_percent = cycle_remaining_percent
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def ==(other)
|
|
34
|
+
return false unless other.is_a? self.class
|
|
35
|
+
return false unless @amount == other.amount
|
|
36
|
+
return false unless @cycle_days_remaining == other.cycle_days_remaining
|
|
37
|
+
return false unless @cycle_days_total == other.cycle_days_total
|
|
38
|
+
return false unless @cycle_remaining_percent == other.cycle_remaining_percent
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotalsProration
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::CommerceSubscriptionItemTotalsProration
|
|
11
|
+
def amount(); end
|
|
12
|
+
def amount=(str_); end
|
|
13
|
+
def cycle_days_remaining(); end
|
|
14
|
+
def cycle_days_remaining=(str_); end
|
|
15
|
+
def cycle_days_total(); end
|
|
16
|
+
def cycle_days_total=(str_); end
|
|
17
|
+
def cycle_remaining_percent(); end
|
|
18
|
+
def cycle_remaining_percent=(str_); end
|
|
19
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
# Success
|
|
11
|
+
class OAuthApplicationSettings
|
|
12
|
+
|
|
13
|
+
include Crystalline::MetadataFields
|
|
14
|
+
|
|
15
|
+
# String representing the object's type. Objects of the same type share the same value.
|
|
16
|
+
field :object, Models::Components::OAuthApplicationSettingsObject, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('object'), required: true, 'decoder': ::Clerk::Utils.enum_from_string(Models::Components::OAuthApplicationSettingsObject, false) } }
|
|
17
|
+
# Whether dynamic OAuth client registration is enabled for the instance (RFC 7591).
|
|
18
|
+
field :dynamic_oauth_client_registration, Crystalline::Boolean.new, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('dynamic_oauth_client_registration'), required: true } }
|
|
19
|
+
# Whether OAuth JWT access tokens are enabled for the instance (disabled indicates opaque access tokens).
|
|
20
|
+
field :oauth_jwt_access_tokens, Crystalline::Boolean.new, { 'format_json': { 'letter_case': ::Clerk::Utils.field_name('oauth_jwt_access_tokens'), required: true } }
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def initialize(object:, dynamic_oauth_client_registration:, oauth_jwt_access_tokens:)
|
|
24
|
+
@object = object
|
|
25
|
+
@dynamic_oauth_client_registration = dynamic_oauth_client_registration
|
|
26
|
+
@oauth_jwt_access_tokens = oauth_jwt_access_tokens
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def ==(other)
|
|
31
|
+
return false unless other.is_a? self.class
|
|
32
|
+
return false unless @object == other.object
|
|
33
|
+
return false unless @dynamic_oauth_client_registration == other.dynamic_oauth_client_registration
|
|
34
|
+
return false unless @oauth_jwt_access_tokens == other.oauth_jwt_access_tokens
|
|
35
|
+
true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# typed: false
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Clerk::Models::Components::OAuthApplicationSettings
|
|
6
|
+
extend ::Crystalline::MetadataFields::ClassMethods
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Clerk::Models::Components::OAuthApplicationSettings
|
|
11
|
+
def object(); end
|
|
12
|
+
def object=(str_); end
|
|
13
|
+
def dynamic_oauth_client_registration(); end
|
|
14
|
+
def dynamic_oauth_client_registration=(str_); end
|
|
15
|
+
def oauth_jwt_access_tokens(); end
|
|
16
|
+
def oauth_jwt_access_tokens=(str_); end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
|
2
|
+
|
|
3
|
+
# typed: false
|
|
4
|
+
# frozen_string_literal: true
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
module Clerk
|
|
8
|
+
module Models
|
|
9
|
+
module Components
|
|
10
|
+
# OAuthApplicationSettingsObject - String representing the object's type. Objects of the same type share the same value.
|
|
11
|
+
class OAuthApplicationSettingsObject
|
|
12
|
+
include ::Crystalline::Enum
|
|
13
|
+
enums do
|
|
14
|
+
OAUTH_APPLICATION_SETTINGS = new('oauth_application_settings')
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|