diff --git a/CHANGELOG.md b/CHANGELOG.md index d4776c376..f293f98dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,42 @@ # Changelog Fab-manager +## v5.1.11 2021 October 22 + +- Refactored subscription new/renew/free extend interfaces and API +- Ability to configure data sources for preventing booking on overlapping slots +- Updated production documentation +- Updated SSO documentation +- Improved stripe subscription process with better error handling +- The upgrade script will check and report the ability to access the hub API +- Fix a bug: canceled training reservation is not marked as this in admin/edit members/trainings +- Fix a bug: users can set their birthdate in the future +- Fix a bug: the upgrade script won't add environment variables that are already present anymore +- Fix a bug: admin cannot take or renew a subscription for a member from member/edit interface +- Fix a bug: missing translations +- Fix a bug: the upgrade script report an invalid version to upgrade to +- Fix a bug: invalid amount provided to the PayZen payment gateway when using a currency with anything else than 2 decimals +- Fix a bug: incorrect behavior for the setting "email confirmation required" +- Fix a bug: invalid text shown when a member confirms a free cart +- Fix a bug: 3DS confirmation is not asked when an admin is subscribing a user through a payment schedule using PayZen +- Updated @rails/webpacker to 5.4.3 +- Updated react-refresh-webpack-plugin to 0.5.1 +- Updated react-refresh to 0.10.0 +- Fix a security issue: updated tar to 6.1.11 to fix [CVE-2021-37712](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37712), [CVE-2021-37701](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37701) and [CVE-2021-37713](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-37713) +- Fix a security issue: updated immer to 9.0.6 to fix [CVE-2021-3757](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3757) and [CVE-2021-23436](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-23436) +- Fix a security issue: updated url-parse to 1.5.3 to fix [CVE-2021-3664](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3664) +- Fix a security issue: updated axios to 0.21.2 to fix [CVE-2021-3749](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3749) +- Fix a security issue: updated nokogiri to 1.12.5 to fix [CVE-2021-41098](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41098) +- Fix a security issue: updated puma to 4.3.9 to fix [CVE-2021-41136](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-41136) +- Fix a security issue: updated sidekiq to 6.2.1 to fix [CVE-2021-30151](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-30151) +- [TODO DEPLOY] `rails db:seed` + ## v5.1.10 2021 October 04 + - Fix a bug: the image of the about page is not using the image set in backoffice - Fix a bug: updated sassc to 2.4.0 to fix ruby runtime error on some CPU architectures (#270) - Fix a security issue: prevent HTML code edition in projects, to prevent XSS vulnerability (#293) +- Fix a bug : cover image doesn't display in profile +- Fix a bug : it redirects to home when we delete a machine record photo ## v5.1.9 2021 September 21 diff --git a/Gemfile b/Gemfile index ba51c9e79..85a7fb58f 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem 'rails', '~> 5.2.4' # Used by rails 5.2 to reduce the app boot time by over 50% gem 'bootsnap' # Use Puma as web server -gem 'puma', '4.3.8' +gem 'puma', '4.3.9' gem 'webpacker', '~> 5.x' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder diff --git a/Gemfile.lock b/Gemfile.lock index 731af7df2..932f16792 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -89,7 +89,7 @@ GEM coercible (1.0.0) descendants_tracker (~> 0.0.1) concurrent-ruby (1.1.8) - connection_pool (2.2.3) + connection_pool (2.2.5) coveralls_reborn (0.18.0) simplecov (>= 0.18.1, < 0.20.0) term-ansicolor (~> 1.6) @@ -205,7 +205,7 @@ GEM rake mini_magick (4.10.1) mini_mime (1.1.0) - mini_portile2 (2.5.1) + mini_portile2 (2.6.1) minitest (5.14.4) minitest-reporters (1.4.2) ansi @@ -216,9 +216,9 @@ GEM multi_json (1.14.1) multi_xml (0.6.0) multipart-post (2.1.1) - nio4r (2.5.7) - nokogiri (1.11.4) - mini_portile2 (~> 2.5.0) + nio4r (2.5.8) + nokogiri (1.12.5) + mini_portile2 (~> 2.6.1) racc (~> 1.4) notify_with (0.0.2) jbuilder (~> 2.0) @@ -264,15 +264,13 @@ GEM prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) public_suffix (4.0.6) - puma (4.3.8) + puma (4.3.9) nio4r (~> 2.0) pundit (2.1.0) activesupport (>= 3.0.0) raabro (1.1.6) racc (1.5.2) rack (2.2.3) - rack-protection (2.0.8.1) - rack rack-proxy (0.6.5) rack rack-test (1.1.0) @@ -318,7 +316,7 @@ GEM recurrence (1.3.0) activesupport i18n - redis (4.1.4) + redis (4.4.0) repost (0.3.2) responders (2.4.1) actionpack (>= 4.2.0, < 6.0) @@ -348,11 +346,10 @@ GEM activesupport (>= 4) semantic_range (2.3.0) sha3 (1.0.1) - sidekiq (6.0.7) + sidekiq (6.2.1) connection_pool (>= 2.2.2) rack (~> 2.0) - rack-protection (>= 2.0.0) - redis (>= 4.1.0) + redis (>= 4.2.0) sidekiq-cron (1.1.0) fugit (~> 1.1) sidekiq (>= 4.2.1) @@ -470,7 +467,7 @@ DEPENDENCIES pg_search prawn prawn-table - puma (= 4.3.8) + puma (= 4.3.9) pundit railroady rails (~> 5.2.4) diff --git a/README.md b/README.md index 7a108ee3b..0840d78b9 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,6 @@ Fab-manager is the Fab Lab management solution. It provides a comprehensive, web Please visit [fab-manager.com](https://www.fab-manager.com/) for more information about this software and its features. -##### Table of Contents -1. [Contributing](#contributing) -2. [Documentation](#documentation) -3. [Open Projects](#open-projects) -4. [Plugins](#plugins) -5. [Single Sign-On](#sso) - ## Contributing @@ -26,45 +19,8 @@ Contributions are welcome. Please read [the contribution guidelines](CONTRIBUTIN The full documentation is available at [doc.fab.mn](http://doc.fab.mn). - -## Open Projects + +## Copyright -**This configuration is optional.** - -You can configure your Fab-manager to synchronize every project with the [Open Projects platform](https://github.com/sleede/openlab-projects). -It's very simple and straightforward and in return, your users will be able to search over projects from all Fab-manager instances from within your platform. -The deal is fair, you share your projects and as reward you benefits from projects of the whole community. - -If you want to try it, you can visit [this Fab-manager](https://fablab.lacasemate.fr/#!/projects) and see projects from different Fab-managers. - -To start using this awesome feature, there are a few steps: -- send a mail to **contact@fab-manager.com** asking for your Open Projects client's credentials and giving them the name and the URL of your Fab-manager, they will give you an `App ID` and a `secret` -- fill in the value of the keys in Admin > Projects > Settings > Projects sharing -- export your projects to open-projects (if you already have projects created on your Fab-manager, unless you can skip that part) executing this command: `bundle exec rails fablab:openlab:bulk_export` - -**IMPORTANT: please run your server in production mode.** - -Go to your projects gallery and enjoy seeing your projects available from everywhere ! That's all. - - -## Plugins - -Fab-manager has a system of plugins mainly inspired by [Discourse](https://github.com/discourse/discourse) architecture. - -It enables you to write plugins which can: -- have its proper models and database tables -- have its proper assets (js & css) -- override existing behaviours of Fab-manager -- add features by adding views, controllers, ect... - -To install a plugin, you just have to copy the plugin folder which contains its code into the folder `plugins` of Fab-manager. - -You can see an example on the [repo of navinum gamification plugin](https://github.com/sleede/navinum-gamification) - - -## Single Sign-On - -Fab-manager can be connected to a [Single Sign-On](https://en.wikipedia.org/wiki/Single_sign-on) server which will provide its own authentication for the platform's users. -Currently, OAuth 2 is the only supported protocol for SSO authentication. - -For an example of how to use configure an SSO in Fab-manager, please read [sso_with_github.md](doc/sso_with_github.md). +This free software is available under the terms of the [GNU Affero General Public License](LICENSE.md). +Fab-manager is developed by [sleede](https://www.sleede.com/) and the [open-open contributors](https://github.com/sleede/fab-manager/graphs/contributors) of the community. diff --git a/app/controllers/api/payments_controller.rb b/app/controllers/api/payments_controller.rb index 06e49ed47..ec3b2faa4 100644 --- a/app/controllers/api/payments_controller.rb +++ b/app/controllers/api/payments_controller.rb @@ -39,7 +39,7 @@ class API::PaymentsController < API::ApiController post_save(gateway_item_id, gateway_item_type, res[:payment]) res[:payment].render_resource.merge(status: :created) else - { json: res[:errors], status: :unprocessable_entity } + { json: res[:errors].drop_while(&:empty?), status: :unprocessable_entity } end end end diff --git a/app/controllers/api/payzen_controller.rb b/app/controllers/api/payzen_controller.rb index 07653f854..76d60980f 100644 --- a/app/controllers/api/payzen_controller.rb +++ b/app/controllers/api/payzen_controller.rb @@ -7,6 +7,7 @@ class API::PayzenController < API::PaymentsController require 'pay_zen/token' require 'pay_zen/transaction' require 'pay_zen/helper' + require 'pay_zen/service' def sdk_test str = 'fab-manager' @@ -25,7 +26,7 @@ class API::PayzenController < API::PaymentsController @id = PayZen::Helper.generate_ref(params[:cart_items], params[:customer_id]) client = PayZen::Charge.new - @result = client.create_payment(amount: amount[:amount], + @result = client.create_payment(amount: PayZen::Service.new.payzen_amount(amount[:amount]), order_id: @id, customer: PayZen::Helper.generate_customer(params[:customer_id], current_user.id, params[:cart_items])) rescue PayzenError => e diff --git a/app/controllers/api/stripe_controller.rb b/app/controllers/api/stripe_controller.rb index c5e92e1c6..f771f0435 100644 --- a/app/controllers/api/stripe_controller.rb +++ b/app/controllers/api/stripe_controller.rb @@ -47,7 +47,7 @@ class API::StripeController < API::PaymentsController res = on_payment_success(intent, cart) if intent&.status == 'succeeded' - render generate_payment_response(intent, res) + render generate_payment_response(intent, 'payment', res) end def online_payment_status @@ -69,30 +69,38 @@ class API::StripeController < API::PaymentsController render json: { id: @intent.id, client_secret: @intent.client_secret } end - def payment_schedule + def setup_subscription cart = shopping_cart - Stripe.api_key = Setting.get('stripe_secret_key') - @intent = Stripe::PaymentMethod.attach( + cart.items.each do |item| + raise InvalidSubscriptionError unless item.valid?(cart.items) + raise InvalidSubscriptionError unless item.to_object.errors.empty? + end + + service = Stripe::Service.new + method = service.attach_method_as_default( params[:payment_method_id], - customer: cart.customer.payment_gateway_object.gateway_object_id + cart.customer.payment_gateway_object.gateway_object_id ) - # Set the default payment method on the customer - Stripe::Customer.update( - cart.customer.payment_gateway_object.gateway_object_id, - invoice_settings: { default_payment_method: params[:payment_method_id] } - ) - @res = cart.pay_schedule(@intent.id, @intent.class.name) - render json: @res.to_json + + stp_subscription = service.subscribe(method.id, cart) + + res = on_payment_success(stp_subscription, cart) if %w[active not_started].include?(stp_subscription&.status) + render generate_payment_response(stp_subscription.try(:latest_invoice)&.payment_intent, 'subscription', res, stp_subscription.id) end - def confirm_payment_schedule + def confirm_subscription key = Setting.get('stripe_secret_key') - subscription = Stripe::Subscription.retrieve(params[:subscription_id], api_key: key) + subscription = Stripe::Subscription.retrieve( + { id: params[:subscription_id], expand: %w[latest_invoice.payment_intent] }, + { api_key: key } + ) cart = shopping_cart if subscription&.status == 'active' res = on_payment_success(subscription, cart) - render generate_payment_response(subscription, res) + render generate_payment_response(subscription.latest_invoice.payment_intent, 'subscription', res) + else + render generate_payment_response(subscription.latest_invoice.payment_intent, 'subscription', nil, subscription.id) end rescue Stripe::InvalidRequestError => e render json: e, status: :unprocessable_entity @@ -130,7 +138,7 @@ class API::StripeController < API::PaymentsController super(intent.id, intent.class.name, cart) end - def generate_payment_response(intent, res = nil) + def generate_payment_response(intent, type, res = nil, stp_subscription_id = nil) return res unless res.nil? if intent.status == 'requires_action' && intent.next_action.type == 'use_stripe_sdk' @@ -139,7 +147,9 @@ class API::StripeController < API::PaymentsController status: 200, json: { requires_action: true, - payment_intent_client_secret: intent.client_secret + payment_intent_client_secret: intent.client_secret, + type: type, + subscription_id: stp_subscription_id } } elsif intent.status == 'succeeded' diff --git a/app/controllers/api/subscriptions_controller.rb b/app/controllers/api/subscriptions_controller.rb index bca08d5e5..753fbca06 100644 --- a/app/controllers/api/subscriptions_controller.rb +++ b/app/controllers/api/subscriptions_controller.rb @@ -2,28 +2,15 @@ # API Controller for resources of type Subscription class API::SubscriptionsController < API::ApiController - before_action :set_subscription, only: %i[show edit update destroy] + before_action :set_subscription, only: %i[show payment_details] before_action :authenticate_user! def show authorize @subscription end - def update + def payment_details authorize @subscription - - free_days = params[:subscription][:free] || false - - res = Subscriptions::Subscribe.new(current_user.invoicing_profile.id) - .extend_subscription(@subscription, subscription_update_params[:expired_at], free_days) - if res.is_a?(Subscription) - @subscription = res - render status: :created - elsif res - render status: :ok - else - render status: :unprocessable_entity - end end private @@ -32,8 +19,4 @@ class API::SubscriptionsController < API::ApiController def set_subscription @subscription = Subscription.find(params[:id]) end - - def subscription_update_params - params.require(:subscription).permit(:expired_at) - end end diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 5ffe4e481..7ceee313d 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -20,7 +20,7 @@ class RegistrationsController < Devise::RegistrationsController # Allows sending the confirmation email without blocking the access to the dashboard resource.send_confirmation_instructions - sign_up(resource_name, resource) + sign_up(resource_name, resource) unless Setting.get('confirmation_required') respond_with resource, location: after_sign_up_path_for(resource) else set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format? diff --git a/app/frontend/src/javascript/api/stripe.ts b/app/frontend/src/javascript/api/stripe.ts index 2604e9e15..e51b1c738 100644 --- a/app/frontend/src/javascript/api/stripe.ts +++ b/app/frontend/src/javascript/api/stripe.ts @@ -1,6 +1,6 @@ import apiClient from './clients/api-client'; import { AxiosResponse } from 'axios'; -import { ShoppingCart, IntentConfirmation, PaymentConfirmation, UpdateCardResponse, StripeSubscription } from '../models/payment'; +import { ShoppingCart, IntentConfirmation, PaymentConfirmation, UpdateCardResponse } from '../models/payment'; import { PaymentSchedule } from '../models/payment-schedule'; import { Invoice } from '../models/invoice'; @@ -21,8 +21,8 @@ export default class StripeAPI { return res?.data; } - static async paymentSchedule (paymentMethodId: string, cartItems: ShoppingCart): Promise { - const res: AxiosResponse = await apiClient.post('/api/stripe/payment_schedule', { + static async setupSubscription (paymentMethodId: string, cartItems: ShoppingCart): Promise { + const res: AxiosResponse = await apiClient.post('/api/stripe/setup_subscription', { payment_method_id: paymentMethodId, cart_items: cartItems }); @@ -34,8 +34,8 @@ export default class StripeAPI { return res?.data; } - static async confirmPaymentSchedule (subscriptionId: string, cartItems: ShoppingCart): Promise { - const res: AxiosResponse = await apiClient.post('/api/stripe/confirm_payment_schedule', { + static async confirmSubscription (subscriptionId: string, cartItems: ShoppingCart): Promise { + const res: AxiosResponse = await apiClient.post('/api/stripe/confirm_subscription', { subscription_id: subscriptionId, cart_items: cartItems }); diff --git a/app/frontend/src/javascript/api/subscription.ts b/app/frontend/src/javascript/api/subscription.ts new file mode 100644 index 000000000..3a18cc539 --- /dev/null +++ b/app/frontend/src/javascript/api/subscription.ts @@ -0,0 +1,20 @@ +import apiClient from './clients/api-client'; +import { Subscription, SubscriptionPaymentDetails, UpdateSubscriptionRequest } from '../models/subscription'; +import { AxiosResponse } from 'axios'; + +export default class SubscriptionAPI { + static async update (request: UpdateSubscriptionRequest): Promise { + const res: AxiosResponse = await apiClient.patch(`/api/subscriptions/${request.id}`, { subscription: request }); + return res?.data; + } + + static async get (id: number): Promise { + const res: AxiosResponse = await apiClient.get(`/api/subscriptions/${id}`); + return res?.data; + } + + static async paymentsDetails (id: number): Promise { + const res: AxiosResponse = await apiClient.get(`/api/subscriptions/${id}/payment_details`); + return res?.data; + } +} diff --git a/app/frontend/src/javascript/components/machines/pending-training-modal.tsx b/app/frontend/src/javascript/components/machines/pending-training-modal.tsx index 3c732b321..e1f32fd2a 100644 --- a/app/frontend/src/javascript/components/machines/pending-training-modal.tsx +++ b/app/frontend/src/javascript/components/machines/pending-training-modal.tsx @@ -1,11 +1,8 @@ import React from 'react'; -import moment from 'moment'; import { FabModal } from '../base/fab-modal'; import { useTranslation } from 'react-i18next'; import { HtmlTranslate } from '../base/html-translate'; -import { IFablab } from '../../models/fablab'; - -declare let Fablab: IFablab; +import FormatLib from '../../lib/format'; interface PendingTrainingModalProps { isOpen: boolean, @@ -24,9 +21,7 @@ export const PendingTrainingModal: React.FC = ({ isOp * Return the formatted localized date for the given date */ const formatDateTime = (date: Date): string => { - const day = Intl.DateTimeFormat().format(moment(date).toDate()); - const time = Intl.DateTimeFormat(Fablab.intl_locale, { hour: 'numeric', minute: 'numeric' }).format(moment(date).toDate()); - return t('app.logged.pending_training_modal.DATE_TIME', { DATE: day, TIME: time }); + return t('app.logged.pending_training_modal.DATE_TIME', { DATE: FormatLib.date(date), TIME: FormatLib.time(date) }); }; return ( diff --git a/app/frontend/src/javascript/components/payment-schedule/payment-schedule-summary.tsx b/app/frontend/src/javascript/components/payment-schedule/payment-schedule-summary.tsx index 5ac79dfd9..342d425c5 100644 --- a/app/frontend/src/javascript/components/payment-schedule/payment-schedule-summary.tsx +++ b/app/frontend/src/javascript/components/payment-schedule/payment-schedule-summary.tsx @@ -17,7 +17,7 @@ interface PaymentScheduleSummaryProps { /** * This component displays a summary of the monthly payment schedule for the current cart, with a subscription */ -const PaymentScheduleSummary: React.FC = ({ schedule }) => { +export const PaymentScheduleSummary: React.FC = ({ schedule }) => { const { t } = useTranslation('shared'); // is open, the modal dialog showing the full details of the payment schedule? @@ -77,6 +77,7 @@ const PaymentScheduleSummary: React.FC = ({ schedul ); }; + const PaymentScheduleSummaryWrapper: React.FC = ({ schedule }) => { return ( diff --git a/app/frontend/src/javascript/components/payment-schedule/payment-schedules-table.tsx b/app/frontend/src/javascript/components/payment-schedule/payment-schedules-table.tsx index 7846939f8..6abb085ff 100644 --- a/app/frontend/src/javascript/components/payment-schedule/payment-schedules-table.tsx +++ b/app/frontend/src/javascript/components/payment-schedule/payment-schedules-table.tsx @@ -353,7 +353,7 @@ const PaymentSchedulesTableComponent: React.FC = ({ {expandCollapseIcon(p.id)} {p.reference} - {FormatLib.date(p.created_at)} + {FormatLib.date(_.minBy(p.items, 'due_date').due_date)} {FormatLib.price(p.total)} {showCustomer && {p.user.name}} {downloadButton(TargetType.PaymentSchedule, p.id)} diff --git a/app/frontend/src/javascript/components/payment-schedule/select-schedule.tsx b/app/frontend/src/javascript/components/payment-schedule/select-schedule.tsx index bff5e0b52..03419ab61 100644 --- a/app/frontend/src/javascript/components/payment-schedule/select-schedule.tsx +++ b/app/frontend/src/javascript/components/payment-schedule/select-schedule.tsx @@ -12,19 +12,19 @@ interface SelectScheduleProps { show: boolean, selected: boolean, onChange: (selected: boolean) => void, - className: string, + className?: string, } /** * This component is a switch enabling the users to choose if they want to pay by monthly schedule * or with a one time payment */ -const SelectSchedule: React.FC = ({ show, selected, onChange, className }) => { +export const SelectSchedule: React.FC = ({ show, selected, onChange, className }) => { const { t } = useTranslation('shared'); return (
- {show &&
+ {show &&
} diff --git a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx index 35b7199a0..c526be301 100644 --- a/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent, ReactNode, useEffect, useState } from 'react'; +import React, { FunctionComponent, ReactNode, useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import WalletLib from '../../lib/wallet'; import { WalletInfo } from '../wallet-info'; @@ -27,6 +27,7 @@ export interface GatewayFormProps { className?: string, paymentSchedule?: PaymentSchedule, cart?: ShoppingCart, + updateCart?: (cart: ShoppingCart) => void, formId: string, } @@ -34,7 +35,9 @@ interface AbstractPaymentModalProps { isOpen: boolean, toggleModal: () => void, afterSuccess: (result: Invoice|PaymentSchedule) => void, + onError: (message: string) => void, cart: ShoppingCart, + updateCart?: (cart: ShoppingCart) => void, currentUser: User, schedule?: PaymentSchedule, customer: User, @@ -55,7 +58,7 @@ interface AbstractPaymentModalProps { * This component must not be called directly but must be extended for each implemented payment gateway * @see https://reactjs.org/docs/composition-vs-inheritance.html */ -export const AbstractPaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, cart, currentUser, schedule, customer, logoFooter, GatewayForm, formId, className, formClassName, title, preventCgv, preventScheduleInfo, modalSize }) => { +export const AbstractPaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, updateCart, currentUser, schedule, customer, logoFooter, GatewayForm, formId, className, formClassName, title, preventCgv, preventScheduleInfo, modalSize }) => { // customer's wallet const [wallet, setWallet] = useState(null); // server-computed price with all details @@ -74,6 +77,8 @@ export const AbstractPaymentModal: React.FC = ({ isOp const [gateway, setGateway] = useState(null); // the sales conditions const [cgv, setCgv] = useState(null); + // is the component mounted + const mounted = useRef(false); const { t } = useTranslation('shared'); @@ -81,11 +86,14 @@ export const AbstractPaymentModal: React.FC = ({ isOp * When the component loads first, get the name of the currently active payment modal */ useEffect(() => { + mounted.current = true; CustomAssetAPI.get(CustomAssetName.CgvFile).then(asset => setCgv(asset)); SettingAPI.get(SettingName.PaymentGateway).then((setting) => { // we capitalize the first letter of the name setGateway(setting.value.replace(/^\w/, (c) => c.toUpperCase())); }); + + return () => { mounted.current = false; }; }, []); /** @@ -153,8 +161,12 @@ export const AbstractPaymentModal: React.FC = ({ isOp * When the payment form raises an error, it is handled by this callback which display it in the modal. */ const handleFormError = (message: string): void => { - setSubmitState(false); - setErrors(message); + if (mounted.current) { + setSubmitState(false); + setErrors(message); + } else { + onError(message); + } }; /** @@ -195,13 +207,14 @@ export const AbstractPaymentModal: React.FC = ({ isOp className={`gateway-form ${formClassName || ''}`} formId={formId} cart={cart} + updateCart={updateCart} customer={customer} paymentSchedule={schedule}> {hasErrors() &&
{errors}
} {hasPaymentScheduleInfo() &&
- +
} {hasCgv() &&
@@ -216,7 +229,8 @@ export const AbstractPaymentModal: React.FC = ({ isOp disabled={!canSubmit()} form={formId} className="validate-btn"> - {t('app.shared.payment.confirm_payment_of_', { AMOUNT: FormatLib.price(remainingPrice) })} + {remainingPrice > 0 && t('app.shared.payment.confirm_payment_of_', { AMOUNT: FormatLib.price(remainingPrice) })} + {remainingPrice === 0 && t('app.shared.payment.validate')} } {submitState &&
diff --git a/app/frontend/src/javascript/components/payment/local-payment/local-payment-form.tsx b/app/frontend/src/javascript/components/payment/local-payment/local-payment-form.tsx index fae0f482e..0192fd4b8 100644 --- a/app/frontend/src/javascript/components/payment/local-payment/local-payment-form.tsx +++ b/app/frontend/src/javascript/components/payment/local-payment/local-payment-form.tsx @@ -1,4 +1,4 @@ -import React, { FormEvent, useState } from 'react'; +import React, { FormEvent, useEffect, useState } from 'react'; import Select from 'react-select'; import { useTranslation } from 'react-i18next'; import { GatewayFormProps } from '../abstract-payment-modal'; @@ -24,12 +24,20 @@ type selectOption = { value: scheduleMethod, label: string }; * This is intended for use by privileged users. * The form validation button must be created elsewhere, using the attribute form={formId}. */ -export const LocalPaymentForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule, cart, customer, operator, formId }) => { +export const LocalPaymentForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule, cart, updateCart, customer, operator, formId }) => { const { t } = useTranslation('admin'); const [method, setMethod] = useState('check'); const [onlinePaymentModal, setOnlinePaymentModal] = useState(false); + useEffect(() => { + if (cart.payment_method === PaymentMethod.Card) { + setMethod('card'); + } else { + setMethod('check'); + } + }, [cart]); + /** * Open/closes the online payment modal, used to collect card credentials when paying the payment schedule by card. */ @@ -58,9 +66,9 @@ export const LocalPaymentForm: React.FC = ({ onSubmit, onSucce */ const handleUpdateMethod = (option: selectOption) => { if (option.value === 'card') { - cart.payment_method = PaymentMethod.Card; + updateCart(Object.assign({}, cart, { payment_method: PaymentMethod.Card })); } else { - cart.payment_method = PaymentMethod.Other; + updateCart(Object.assign({}, cart, { payment_method: PaymentMethod.Other })); } setMethod(option.value); }; @@ -101,9 +109,26 @@ export const LocalPaymentForm: React.FC = ({ onSubmit, onSucce onSuccess(document); }; + /** + * Generally, this form component is only shown to admins or to managers when they book for someone else. + * If this is not the case, then it is shown to validate a free (or prepaid by wallet) cart. + * This function will return `true` in the later case. + */ + const isFreeOfCharge = (): boolean => { + return (customer.id === operator.id); + }; + + /** + * Get the type of the main item in the cart compile + */ + const mainItemType = (): string => { + return Object.keys(cart.items[0])[0]; + }; + return (
- {!paymentSchedule &&

{t('app.admin.local_payment.about_to_cash')}

} + {!paymentSchedule && !isFreeOfCharge() &&

{t('app.admin.local_payment.about_to_cash')}

} + {!paymentSchedule && isFreeOfCharge() &&

{t('app.admin.local_payment.about_to_confirm', { ITEM: mainItemType() })}

} {paymentSchedule &&
@@ -112,7 +137,7 @@ export const LocalPaymentForm: React.FC = ({ onSubmit, onSucce className="method-select" onChange={handleUpdateMethod} options={buildMethodOptions()} - defaultValue={methodToOption(method)} /> + value={methodToOption(method)} /> {method === 'card' &&

{t('app.admin.local_payment.card_collection_info')}

} {method === 'check' &&

{t('app.admin.local_payment.check_collection_info', { DEADLINES: paymentSchedule.items.length })}

}
diff --git a/app/frontend/src/javascript/components/payment/local-payment/local-payment-modal.tsx b/app/frontend/src/javascript/components/payment/local-payment/local-payment-modal.tsx index 069d0668b..8f9a7dcf1 100644 --- a/app/frontend/src/javascript/components/payment/local-payment/local-payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/local-payment/local-payment-modal.tsx @@ -3,7 +3,7 @@ import { AbstractPaymentModal, GatewayFormProps } from '../abstract-payment-moda import { LocalPaymentForm } from './local-payment-form'; import { ShoppingCart } from '../../../models/payment'; import { PaymentSchedule } from '../../../models/payment-schedule'; -import { User } from '../../../models/user'; +import { User, UserRole } from '../../../models/user'; import { Invoice } from '../../../models/invoice'; import { useTranslation } from 'react-i18next'; import { ModalSize } from '../../base/fab-modal'; @@ -17,7 +17,9 @@ interface LocalPaymentModalProps { isOpen: boolean, toggleModal: () => void, afterSuccess: (result: Invoice|PaymentSchedule) => void, + onError: (message: string) => void, cart: ShoppingCart, + updateCart: (cart: ShoppingCart) => void, currentUser: User, schedule?: PaymentSchedule, customer: User @@ -26,7 +28,7 @@ interface LocalPaymentModalProps { /** * This component enables a privileged user to confirm a local payments. */ -const LocalPaymentModalComponent: React.FC = ({ isOpen, toggleModal, afterSuccess, cart, currentUser, schedule, customer }) => { +const LocalPaymentModalComponent: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, updateCart, currentUser, schedule, customer }) => { const { t } = useTranslation('admin'); /** @@ -40,10 +42,19 @@ const LocalPaymentModalComponent: React.FC = ({ isOpen, ); }; + /** + * Generally, this modal dialog is only shown to admins or to managers when they book for someone else. + * If this is not the case, then it is shown to validate a free (or prepaid by wallet) cart. + * This function will return `true` in the later case. + */ + const isFreeOfCharge = (): boolean => { + return (customer.id === currentUser.id); + }; + /** * Integrates the LocalPaymentForm into the parent AbstractPaymentModal */ - const renderForm: FunctionComponent = ({ onSubmit, onSuccess, onError, operator, className, formId, cart, customer, paymentSchedule, children }) => { + const renderForm: FunctionComponent = ({ onSubmit, onSuccess, onError, operator, className, formId, cart, updateCart, customer, paymentSchedule, children }) => { return ( = ({ isOpen, className={className} formId={formId} cart={cart} + updateCart={updateCart} customer={customer} paymentSchedule={paymentSchedule}> {children} @@ -64,13 +76,15 @@ const LocalPaymentModalComponent: React.FC = ({ isOpen, isOpen={isOpen} toggleModal={toggleModal} logoFooter={logoFooter()} - title={t('app.admin.local_payment.offline_payment')} + title={isFreeOfCharge() ? t('app.admin.local_payment.validate_cart') : t('app.admin.local_payment.offline_payment')} formId="local-payment-form" formClassName="local-payment-form" currentUser={currentUser} cart={cart} + updateCart={updateCart} customer={customer} afterSuccess={afterSuccess} + onError={onError} schedule={schedule} GatewayForm={renderForm} modalSize={schedule ? ModalSize.large : ModalSize.medium} @@ -79,12 +93,12 @@ const LocalPaymentModalComponent: React.FC = ({ isOpen, ); }; -export const LocalPaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, currentUser, schedule, cart, customer }) => { +export const LocalPaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, currentUser, schedule, cart, updateCart, customer }) => { return ( - + ); }; -Application.Components.component('localPaymentModal', react2angular(LocalPaymentModal, ['isOpen', 'toggleModal', 'afterSuccess', 'currentUser', 'schedule', 'cart', 'customer'])); +Application.Components.component('localPaymentModal', react2angular(LocalPaymentModal, ['isOpen', 'toggleModal', 'afterSuccess', 'onError', 'currentUser', 'schedule', 'cart', 'updateCart', 'customer'])); diff --git a/app/frontend/src/javascript/components/payment/payment-modal.tsx b/app/frontend/src/javascript/components/payment/payment-modal.tsx index a48f8a454..6ad9b52fb 100644 --- a/app/frontend/src/javascript/components/payment/payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/payment-modal.tsx @@ -47,6 +47,7 @@ const PaymentModalComponent: React.FC = ({ isOpen, toggleModa return = ({ isOpen, toggleModa return = ({ onSubmit, onSuccess, onE .then(({ KR, result }) => KR.showForm(result.formId)) .then(({ KR }) => KR.onFormReady(handleFormReady)) .then(({ KR }) => KR.onFormCreated(handleFormCreated)) - .then(({ KR }) => { PayZenKR.current = KR; }); + .then(({ KR }) => { PayZenKR.current = KR; }) + .catch(error => onError(error)); }).catch(error => onError(error)); }); }, [cart, paymentSchedule, customer]); @@ -125,6 +126,7 @@ export const PayzenForm: React.FC = ({ onSubmit, onSuccess, onE */ const handleSubmit = async (event: FormEvent): Promise => { event.preventDefault(); + event.stopPropagation(); onSubmit(); try { diff --git a/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx b/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx index 838ca5eb4..a05195ba6 100644 --- a/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx +++ b/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx @@ -14,6 +14,7 @@ interface PayZenModalProps { isOpen: boolean, toggleModal: () => void, afterSuccess: (result: Invoice|PaymentSchedule) => void, + onError: (message: string) => void, cart: ShoppingCart, currentUser: User, schedule?: PaymentSchedule, @@ -27,7 +28,7 @@ interface PayZenModalProps { * This component should not be called directly. Prefer using which can handle the configuration * of a different payment gateway. */ -export const PayZenModal: React.FC = ({ isOpen, toggleModal, afterSuccess, cart, currentUser, schedule, customer }) => { +export const PayZenModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, currentUser, schedule, customer }) => { /** * Return the logos, shown in the modal footer. */ @@ -71,6 +72,7 @@ export const PayZenModal: React.FC = ({ isOpen, toggleModal, a cart={cart} customer={customer} afterSuccess={afterSuccess} + onError={onError} schedule={schedule} GatewayForm={renderForm} /> ); diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx index 180f98288..3b62d3a89 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx @@ -2,9 +2,10 @@ import React, { FormEvent } from 'react'; import { CardElement, useElements, useStripe } from '@stripe/react-stripe-js'; import { useTranslation } from 'react-i18next'; import { GatewayFormProps } from '../abstract-payment-modal'; -import { PaymentConfirmation, StripeSubscription } from '../../../models/payment'; +import { PaymentConfirmation } from '../../../models/payment'; import StripeAPI from '../../../api/stripe'; import { Invoice } from '../../../models/invoice'; +import { PaymentSchedule } from '../../../models/payment-schedule'; /** * A form component to collect the credit card details and to create the payment method on Stripe. @@ -22,6 +23,7 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on */ const handleSubmit = async (event: FormEvent): Promise => { event.preventDefault(); + event.stopPropagation(); onSubmit(); // Stripe.js has not loaded yet @@ -43,36 +45,8 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on const res = await StripeAPI.confirmMethod(paymentMethod.id, cart); await handleServerConfirmation(res); } else { - const paymentMethodId = paymentMethod.id; - const subscription: StripeSubscription = await StripeAPI.paymentSchedule(paymentMethod.id, cart); - if (subscription && subscription.status === 'active') { - // Subscription is active, no customer actions required. - const res = await StripeAPI.confirmPaymentSchedule(subscription.id, cart); - onSuccess(res); - } - const paymentIntent = subscription.latest_invoice.payment_intent; - - if (paymentIntent.status === 'requires_action') { - return stripe - .confirmCardPayment(paymentIntent.client_secret, { - payment_method: paymentMethodId - }) - .then(async (result) => { - if (result.error) { - throw result.error; - } else { - if (result.paymentIntent.status === 'succeeded') { - const res = await StripeAPI.confirmPaymentSchedule(subscription.id, cart); - onSuccess(res); - } - } - }) - .catch((error) => { - onError(error.message); - }); - } else if (paymentIntent.status === 'requires_payment_method') { - onError(t('app.shared.messages.payment_card_declined')); - } + const res = await StripeAPI.setupSubscription(paymentMethod.id, cart); + await handleServerConfirmation(res, paymentMethod.id); } } catch (err) { // catch api errors @@ -83,10 +57,11 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on /** * Process the server response about the Strong-customer authentication (SCA) - * @param response can be a PaymentConfirmation, or an Invoice (if the payment succeeded) + * @param response can be a PaymentConfirmation, or an Invoice/PaymentSchedule (if the payment succeeded) + * @param paymentMethodId ID of the payment method, required only when confirming a payment schedule * @see app/controllers/api/stripe_controller.rb#confirm_payment */ - const handleServerConfirmation = async (response: PaymentConfirmation|Invoice) => { + const handleServerConfirmation = async (response: PaymentConfirmation|Invoice|PaymentSchedule, paymentMethodId?: string) => { if ('error' in response) { if (response.error.statusText) { onError(response.error.statusText); @@ -94,18 +69,34 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on onError(`${t('app.shared.messages.payment_card_error')} ${response.error}`); } } else if ('requires_action' in response) { - // Use Stripe.js to handle required card action - const result = await stripe.handleCardAction(response.payment_intent_client_secret); - if (result.error) { - onError(result.error.message); - } else { - // The card action has been handled - // The PaymentIntent can be confirmed again on the server - try { - const confirmation = await StripeAPI.confirmIntent(result.paymentIntent.id, cart); - await handleServerConfirmation(confirmation); - } catch (e) { - onError(e); + if (response.type === 'payment') { + // Use Stripe.js to handle required card action + const result = await stripe.handleCardAction(response.payment_intent_client_secret); + if (result.error) { + onError(result.error.message); + } else { + // The card action has been handled + // The PaymentIntent can be confirmed again on the server + try { + const confirmation = await StripeAPI.confirmIntent(result.paymentIntent.id, cart); + await handleServerConfirmation(confirmation); + } catch (e) { + onError(e); + } + } + } else if (response.type === 'subscription') { + const result = await stripe.confirmCardPayment(response.payment_intent_client_secret, { + payment_method: paymentMethodId + }); + if (result.error) { + onError(result.error.message); + } else { + try { + const confirmation = await StripeAPI.confirmSubscription(response.subscription_id, cart); + await handleServerConfirmation(confirmation); + } catch (e) { + onError(e); + } } } } else if ('id' in response) { diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-modal.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-modal.tsx index 3e62a26af..96880b7ee 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-modal.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-modal.tsx @@ -15,6 +15,7 @@ interface StripeModalProps { isOpen: boolean, toggleModal: () => void, afterSuccess: (result: Invoice|PaymentSchedule) => void, + onError: (message: string) => void, cart: ShoppingCart, currentUser: User, schedule?: PaymentSchedule, @@ -28,7 +29,7 @@ interface StripeModalProps { * This component should not be called directly. Prefer using which can handle the configuration * of a different payment gateway. */ -export const StripeModal: React.FC = ({ isOpen, toggleModal, afterSuccess, cart, currentUser, schedule, customer }) => { +export const StripeModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, currentUser, schedule, customer }) => { /** * Return the logos, shown in the modal footer. */ @@ -75,6 +76,7 @@ export const StripeModal: React.FC = ({ isOpen, toggleModal, a cart={cart} customer={customer} afterSuccess={afterSuccess} + onError={onError} schedule={schedule} GatewayForm={renderForm} /> ); diff --git a/app/frontend/src/javascript/components/plans/plan-card.tsx b/app/frontend/src/javascript/components/plans/plan-card.tsx index 509ec8709..244e099fd 100644 --- a/app/frontend/src/javascript/components/plans/plan-card.tsx +++ b/app/frontend/src/javascript/components/plans/plan-card.tsx @@ -2,13 +2,11 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; import moment from 'moment'; import _ from 'lodash'; -import { IFablab } from '../../models/fablab'; import { Plan } from '../../models/plan'; import { User, UserRole } from '../../models/user'; import { Loader } from '../base/loader'; import '../../lib/i18n'; - -declare let Fablab: IFablab; +import FormatLib from '../../lib/format'; interface PlanCardProps { plan: Plan, @@ -29,14 +27,14 @@ const PlanCardComponent: React.FC = ({ plan, userId, subscribedPl * Return the formatted localized amount of the given plan (eg. 20.5 => "20,50 €") */ const amount = () : string => { - return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(plan.amount); + return FormatLib.price(plan.amount); }; /** * Return the formatted localized amount, divided by the number of months (eg. 120 => "10,00 € / month") */ const monthlyAmount = (): string => { const monthly = plan.amount / moment.duration(plan.interval_count, plan.interval).asMonths(); - return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(monthly); + return FormatLib.price(monthly); }; /** * Return the formatted localized duration of te given plan (eg. Month/3 => "3 mois") diff --git a/app/frontend/src/javascript/components/prepaid-packs/propose-packs-modal.tsx b/app/frontend/src/javascript/components/prepaid-packs/propose-packs-modal.tsx index 15b18b67d..a228ccda2 100644 --- a/app/frontend/src/javascript/components/prepaid-packs/propose-packs-modal.tsx +++ b/app/frontend/src/javascript/components/prepaid-packs/propose-packs-modal.tsx @@ -162,7 +162,9 @@ export const ProposePacksModal: React.FC = ({ isOpen, to
} diff --git a/app/frontend/src/javascript/components/pricing/machines-pricing.tsx b/app/frontend/src/javascript/components/pricing/machines-pricing.tsx index 4356913d7..cfde86d70 100644 --- a/app/frontend/src/javascript/components/pricing/machines-pricing.tsx +++ b/app/frontend/src/javascript/components/pricing/machines-pricing.tsx @@ -17,6 +17,7 @@ import { Price } from '../../models/price'; import PrepaidPackAPI from '../../api/prepaid-pack'; import { PrepaidPack } from '../../models/prepaid-pack'; import { useImmer } from 'use-immer'; +import FormatLib from '../../lib/format'; declare let Fablab: IFablab; declare const Application: IApplication; @@ -63,11 +64,11 @@ const MachinesPricing: React.FC = ({ onError, onSuccess }) const hourlyRate = 10; if (type === 'hourly_rate') { - return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(hourlyRate); + return FormatLib.price(hourlyRate); } const price = (hourlyRate / 60) * EXEMPLE_DURATION; - return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(price); + return FormatLib.price(price); }; /** @@ -111,7 +112,7 @@ const MachinesPricing: React.FC = ({ onError, onSuccess })

-

+

{t('app.admin.machines_pricing.you_can_override')}

diff --git a/app/frontend/src/javascript/components/settings/check-list-setting.tsx b/app/frontend/src/javascript/components/settings/check-list-setting.tsx new file mode 100644 index 000000000..909509e58 --- /dev/null +++ b/app/frontend/src/javascript/components/settings/check-list-setting.tsx @@ -0,0 +1,92 @@ +import React, { BaseSyntheticEvent, useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { SettingName } from '../../models/setting'; +import { IApplication } from '../../models/application'; +import { react2angular } from 'react2angular'; +import SettingAPI from '../../api/setting'; +import { Loader } from '../base/loader'; +import { FabButton } from '../base/fab-button'; + +declare const Application: IApplication; + +interface CheckListSettingProps { + name: SettingName, + label: string, + className?: string, + // availableOptions must be like this [['option1', 'label 1'], ['option2', 'label 2']] + availableOptions: Array>, + onSuccess: (message: string) => void, + onError: (message: string) => void, +} + +/** + * This component allows to configure multiples values for a setting, like a check list. + * The result is stored as a string, composed of the checked values, e.g. 'option1,option2' + */ +const CheckListSetting: React.FC = ({ name, label, className, availableOptions, onSuccess, onError }) => { + const { t } = useTranslation('admin'); + + const [value, setValue] = useState(null); + + // on component load, we retrieve the current value of the list from the API + useEffect(() => { + SettingAPI.get(name) + .then(res => setValue(res.value)) + .catch(err => onError(err)); + }, []); + + /** + * Callback triggered when a checkbox is ticked or unticked. + * This function construct the resulting string, by adding or deleting the provided option identifier. + */ + const toggleCheckbox = (option: string) => { + return (event: BaseSyntheticEvent) => { + if (event.target.checked) { + let newValue = value ? `${value},` : ''; + newValue += option; + setValue(newValue); + } else { + const regex = new RegExp(`,?${option}`, 'g'); + setValue(value.replace(regex, '')); + } + }; + }; + + /** + * Callback triggered when the 'save' button is clicked. + * Save the built string to the Setting API + */ + const handleSave = () => { + SettingAPI.update(name, value) + .then(() => onSuccess(t('app.admin.check_list_setting.customization_of_SETTING_successfully_saved', { SETTING: t(`app.admin.settings.${name}`) }))) + .catch(err => onError(err)); + }; + + /** + * Verify if the provided option is currently ticked (i.e. included in the value string) + */ + const isChecked = (option) => { + return value?.includes(option); + }; + + return ( +
+

{label}

+ {availableOptions.map(option =>
+ + +
)} + {t('app.admin.check_list_setting.save')} +
+ ); +}; + +const CheckListSettingWrapper: React.FC = ({ availableOptions, onSuccess, onError, label, className, name }) => { + return ( + + + + ); +}; + +Application.Components.component('checkListSetting', react2angular(CheckListSettingWrapper, ['className', 'name', 'label', 'availableOptions', 'onSuccess', 'onError'])); diff --git a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx new file mode 100644 index 000000000..595d0ac8c --- /dev/null +++ b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx @@ -0,0 +1,126 @@ +import React, { useEffect, useState } from 'react'; +import { Subscription } from '../../models/subscription'; +import { FabModal, ModalSize } from '../base/fab-modal'; +import { useTranslation } from 'react-i18next'; +import { FabAlert } from '../base/fab-alert'; +import { FabInput } from '../base/fab-input'; +import FormatLib from '../../lib/format'; +import { Loader } from '../base/loader'; +import { react2angular } from 'react2angular'; +import { IApplication } from '../../models/application'; +import LocalPaymentAPI from '../../api/local-payment'; +import { PaymentMethod } from '../../models/payment'; + +declare const Application: IApplication; + +interface FreeExtendModalProps { + isOpen: boolean, + toggleModal: () => void, + subscription: Subscription, + customerId: number, + onSuccess: (message: string, newExpirationDate: Date) => void, + onError: (message: string) => void, +} + +/** + * Modal dialog shown to extend the current subscription of a customer, for free + */ +const FreeExtendModal: React.FC = ({ isOpen, toggleModal, subscription, customerId, onError, onSuccess }) => { + + // we do not render the modal if the subscription was not provided + if (!subscription) return null; + + const { t } = useTranslation('admin'); + + const [expirationDate, setExpirationDate] = useState(new Date(subscription.expired_at)); + const [freeDays, setFreeDays] = useState(0); + + // we update the number of free days when the new expiration date is updated + useEffect(() => { + if (!expirationDate || !subscription.expired_at) { + setFreeDays(0); + } + // 86400000 = 1000 * 3600 * 24 = number of ms per day + setFreeDays(Math.ceil((expirationDate.getTime() - new Date(subscription.expired_at).getTime()) / 86400000)); + }, [expirationDate]); + + /** + * Return the formatted localized date for the given date + */ + const formatDateTime = (date: Date): string => { + return t('app.admin.free_extend_modal.DATE_TIME', { DATE: FormatLib.date(date), TIME: FormatLib.time(date) }); + }; + + /** + * Return the given date formatted for the HTML input-date + */ + const formatDefaultDate = (date: Date): string => { + return date.toISOString().substr(0, 10); + }; + + /** + * Parse the given date and record it as the new expiration date of the subscription + */ + const handleDateUpdate = (date: string): void => { + setExpirationDate(new Date(Date.parse(date))); + }; + + /** + * Callback triggered when the user validates the free extent of the subscription + */ + const handleConfirmExtend = (): void => { + LocalPaymentAPI.confirmPayment({ + customer_id: customerId, + payment_method: PaymentMethod.Other, + items: [ + { + free_extension: { + end_at: expirationDate + } + } + ] + }).then(() => { + onSuccess(t('app.admin.free_extend_modal.extend_success'), expirationDate); + toggleModal(); + }).catch(err => onError(err)); + }; + + return ( + + +

{t('app.admin.free_extend_modal.offer_free_days_infos')}

+

{t('app.admin.free_extend_modal.credits_will_remain_unchanged')}

+
+ + + + + + + + +
+ ); +}; + +const FreeExtendModalWrapper: React.FC = ({ toggleModal, subscription, customerId, isOpen, onSuccess, onError }) => { + return ( + + + + ); +}; + +Application.Components.component('freeExtendModal', react2angular(FreeExtendModalWrapper, ['toggleModal', 'subscription', 'customerId', 'isOpen', 'onError', 'onSuccess'])); diff --git a/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx b/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx new file mode 100644 index 000000000..3b9fca1db --- /dev/null +++ b/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx @@ -0,0 +1,164 @@ +import React, { useEffect, useState } from 'react'; +import { Subscription } from '../../models/subscription'; +import { FabModal, ModalSize } from '../base/fab-modal'; +import { useTranslation } from 'react-i18next'; +import { FabAlert } from '../base/fab-alert'; +import { FabInput } from '../base/fab-input'; +import FormatLib from '../../lib/format'; +import { Loader } from '../base/loader'; +import { react2angular } from 'react2angular'; +import { IApplication } from '../../models/application'; +import { PaymentMethod, ShoppingCart } from '../../models/payment'; +import moment from 'moment'; +import { SelectSchedule } from '../payment-schedule/select-schedule'; +import SubscriptionAPI from '../../api/subscription'; +import PriceAPI from '../../api/price'; +import { ComputePriceResult } from '../../models/price'; +import { PaymentScheduleSummary } from '../payment-schedule/payment-schedule-summary'; +import { PaymentSchedule } from '../../models/payment-schedule'; +import { LocalPaymentModal } from '../payment/local-payment/local-payment-modal'; +import { User } from '../../models/user'; + +declare const Application: IApplication; + +interface RenewModalProps { + isOpen: boolean, + toggleModal: () => void, + subscription?: Subscription, + customer: User, + operator: User, + onSuccess: (message: string, newExpirationDate: Date) => void, + onError: (message: string) => void, +} + +/** + * Modal dialog shown to renew the current subscription of a customer, for free + */ +const RenewModal: React.FC = ({ isOpen, toggleModal, subscription, customer, operator, onError, onSuccess }) => { + + // we do not render the modal if the subscription was not provided + if (!subscription) return null; + + const { t } = useTranslation('admin'); + + const [expirationDate, setExpirationDate] = useState(new Date()); + const [localPaymentModal, setLocalPaymentModal] = useState(false); + const [cart, setCart] = useState(null); + const [price, setPrice] = useState(null); + const [scheduleRequired, setScheduleRequired] = useState(false); + + // on init, we compute the new expiration date + useEffect(() => { + setExpirationDate(moment(subscription.expired_at) + .add(subscription.plan.interval_count, subscription.plan.interval) + .toDate()); + SubscriptionAPI.paymentsDetails(subscription.id) + .then(res => setScheduleRequired(res.payment_schedule)) + .catch(err => onError(err)); + }, []); + + // when the payment schedule is toggled (requested/ignored), we update the cart accordingly + useEffect(() => { + setCart({ + customer_id: customer.id, + items: [{ + subscription: { + plan_id: subscription.plan.id, + start_at: subscription.expired_at + } + }], + payment_method: PaymentMethod.Other, + payment_schedule: scheduleRequired + }); + }, [scheduleRequired]); + + // when the cart is updated, re-compute the price and the payment schedule + useEffect(() => { + if (!cart) return; + + PriceAPI.compute(cart) + .then(res => setPrice(res)) + .catch(err => onError(err)); + }, [cart]); + + /** + * Return the formatted localized date for the given date + */ + const formatDateTime = (date: Date): string => { + return t('app.admin.free_extend_modal.DATE_TIME', { DATE: FormatLib.date(date), TIME: FormatLib.time(date) }); + }; + + /** + * Callback triggered when the payment of the subscription renewal was successful + */ + const onPaymentSuccess = (): void => { + onSuccess(t('app.admin.renew_subscription_modal.renew_success'), expirationDate); + toggleModal(); + }; + + /** + * Open/closes the local payment modal + */ + const toggleLocalPaymentModal = (): void => { + setLocalPaymentModal(!localPaymentModal); + }; + + return ( + + +

{t('app.admin.renew_subscription_modal.renew_subscription_info')}

+

{t('app.admin.renew_subscription_modal.credits_will_be_reset')}

+
+
+
+ + + + + + + +
+ {subscription.plan.monthly_payment && } + {price?.schedule && } + {price && !price?.schedule &&
+

{t('app.admin.renew_subscription_modal.pay_in_one_go')}

+ {FormatLib.price(price.price)} +
} +
+
+ +
+ ); +}; + +const RenewModalWrapper: React.FC = ({ toggleModal, subscription, customer, operator, isOpen, onSuccess, onError }) => { + return ( + + + + ); +}; + +Application.Components.component('renewModal', react2angular(RenewModalWrapper, ['toggleModal', 'subscription', 'customer', 'operator', 'isOpen', 'onError', 'onSuccess'])); diff --git a/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx b/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx new file mode 100644 index 000000000..2ca4b5c5f --- /dev/null +++ b/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx @@ -0,0 +1,171 @@ +import React, { useEffect, useState } from 'react'; +import Select from 'react-select'; +import { useTranslation } from 'react-i18next'; +import { Subscription } from '../../models/subscription'; +import { User } from '../../models/user'; +import { PaymentMethod, ShoppingCart } from '../../models/payment'; +import { FabModal } from '../base/fab-modal'; +import SubscriptionAPI from '../../api/subscription'; +import { Plan } from '../../models/plan'; +import PlanAPI from '../../api/plan'; +import { Loader } from '../base/loader'; +import { react2angular } from 'react2angular'; +import { IApplication } from '../../models/application'; +import FormatLib from '../../lib/format'; +import { SelectSchedule } from '../payment-schedule/select-schedule'; +import { ComputePriceResult } from '../../models/price'; +import { PaymentScheduleSummary } from '../payment-schedule/payment-schedule-summary'; +import { PaymentSchedule } from '../../models/payment-schedule'; +import PriceAPI from '../../api/price'; +import { LocalPaymentModal } from '../payment/local-payment/local-payment-modal'; + +declare const Application: IApplication; + +interface SubscribeModalProps { + isOpen: boolean, + toggleModal: () => void, + customer: User, + operator: User, + onSuccess: (message: string, subscription: Subscription) => void, + onError: (message: string) => void, +} + +/** + * Option format, expected by react-select + * @see https://github.com/JedWatson/react-select + */ +type selectOption = { value: number, label: string }; + +/** + * Modal dialog shown to create a subscription for the given customer + */ +const SubscribeModal: React.FC = ({ isOpen, toggleModal, customer, operator, onError, onSuccess }) => { + const { t } = useTranslation('admin'); + + const [selectedPlan, setSelectedPlan] = useState(null); + const [selectedSchedule, setSelectedSchedule] = useState(false); + const [allPlans, setAllPlans] = useState>(null); + const [price, setPrice] = useState(null); + const [cart, setCart] = useState(null); + const [localPaymentModal, setLocalPaymentModal] = useState(false); + + // fetch all plans from the API on component mount + useEffect(() => { + PlanAPI.index() + .then(plans => setAllPlans(plans)) + .catch(error => onError(error)); + }, []); + + // when the plan is updated, update the default value for the payment schedule requirement + useEffect(() => { + if (!selectedPlan) return; + + setSelectedSchedule(selectedPlan.monthly_payment); + }, [selectedPlan]); + + // when the plan or the requirement for a payment schedule are updated, update the cart accordingly + useEffect(() => { + if (!selectedPlan) return; + + setCart({ + customer_id: customer.id, + items: [{ + subscription: { + plan_id: selectedPlan.id + } + }], + payment_method: PaymentMethod.Other, + payment_schedule: selectedSchedule + }); + }, [selectedSchedule, selectedPlan]); + + // when the cart is updated, update the price accordingly + useEffect(() => { + if (!cart) return; + + PriceAPI.compute(cart) + .then(res => setPrice(res)) + .catch(err => onError(err)); + }, [cart]); + + /** + * Callback triggered when the user selects a group in the dropdown list + */ + const handlePlanSelect = (option: selectOption): void => { + const plan = allPlans.find(p => p.id === option.value); + setSelectedPlan(plan); + }; + + /** + * Callback triggered when the payment of the subscription was successful + */ + const onPaymentSuccess = (res): void => { + SubscriptionAPI.get(res.main_object.id).then(subscription => { + onSuccess(t('app.admin.subscribe_modal.subscription_success'), subscription); + toggleModal(); + }).catch(error => onError(error)); + }; + + /** + * Open/closes the local payment modal + */ + const toggleLocalPaymentModal = (): void => { + setLocalPaymentModal(!localPaymentModal); + }; + + /** + * Convert all groups to the react-select format + */ + const buildOptions = (): Array => { + if (!allPlans) return []; + + return allPlans.filter(p => !p.disabled && p.group_id === customer.group_id).map(p => { + return { value: p.id, label: `${p.base_name} (${FormatLib.duration(p.interval, p.interval_count)})` }; + }); + }; + + return ( + +
+ + - -
-
- - -
- - - diff --git a/app/frontend/templates/admin/subscriptions/expired_at_modal.html b/app/frontend/templates/admin/subscriptions/expired_at_modal.html deleted file mode 100644 index 02e0b71ac..000000000 --- a/app/frontend/templates/admin/subscriptions/expired_at_modal.html +++ /dev/null @@ -1,36 +0,0 @@ - - - diff --git a/app/frontend/templates/shared/_cart.html b/app/frontend/templates/shared/_cart.html index 93ad2aa57..f13bd55a4 100644 --- a/app/frontend/templates/shared/_cart.html +++ b/app/frontend/templates/shared/_cart.html @@ -214,7 +214,9 @@ diff --git a/app/mailers/notifications_mailer.rb b/app/mailers/notifications_mailer.rb index 6e49d9d85..0dc51d356 100644 --- a/app/mailers/notifications_mailer.rb +++ b/app/mailers/notifications_mailer.rb @@ -24,6 +24,8 @@ class NotificationsMailer < NotifyWith::NotificationsMailer end send(notification.notification_type) + rescue StandardError => e + STDERR.puts "[NotificationsMailer] notification cannot be sent: #{e}" end def helpers diff --git a/app/models/cart_item/free_extension.rb b/app/models/cart_item/free_extension.rb new file mode 100644 index 000000000..af64d1fef --- /dev/null +++ b/app/models/cart_item/free_extension.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +# A subscription extended for free, added to the shopping cart +class CartItem::FreeExtension < CartItem::BaseItem + def initialize(customer, subscription, new_expiration_date) + raise TypeError unless subscription.is_a? Subscription + + @customer = customer + @new_expiration_date = new_expiration_date + @subscription = subscription + super + end + + def start_at + raise InvalidSubscriptionError if @subscription.nil? + raise InvalidSubscriptionError if @new_expiration_date <= @subscription.expired_at + + @subscription.expired_at + end + + def price + elements = { OfferDay: 0 } + + { elements: elements, amount: 0 } + end + + def name + I18n.t('cart_items.free_extension', DATE: I18n.l(@new_expiration_date)) + end + + def to_object + ::OfferDay.new( + subscription_id: @subscription.id, + start_at: start_at, + end_at: @new_expiration_date + ) + end +end diff --git a/app/models/cart_item/payment_schedule.rb b/app/models/cart_item/payment_schedule.rb index 7c7a52175..34c7d5e2e 100644 --- a/app/models/cart_item/payment_schedule.rb +++ b/app/models/cart_item/payment_schedule.rb @@ -4,17 +4,19 @@ class CartItem::PaymentSchedule attr_reader :requested - def initialize(plan, coupon, requested) + def initialize(plan, coupon, requested, customer, start_at = nil) raise TypeError unless coupon.is_a? CartItem::Coupon @plan = plan @coupon = coupon @requested = requested + @customer = customer + @start_at = start_at end def schedule(total, total_without_coupon) schedule = if @requested && @plan&.monthly_payment - PaymentScheduleService.new.compute(@plan, total_without_coupon, coupon: @coupon.coupon) + PaymentScheduleService.new.compute(@plan, total_without_coupon, @customer, coupon: @coupon.coupon, start_at: @start_at) else nil end diff --git a/app/models/cart_item/subscription.rb b/app/models/cart_item/subscription.rb index d4ccd3e13..0b235a736 100644 --- a/app/models/cart_item/subscription.rb +++ b/app/models/cart_item/subscription.rb @@ -2,11 +2,14 @@ # A subscription added to the shopping cart class CartItem::Subscription < CartItem::BaseItem - def initialize(plan, customer) + attr_reader :start_at + + def initialize(plan, customer, start_at = nil) raise TypeError unless plan.is_a? Plan @plan = plan @customer = customer + @start_at = start_at super end @@ -30,7 +33,8 @@ class CartItem::Subscription < CartItem::BaseItem def to_object ::Subscription.new( plan_id: @plan.id, - statistic_profile_id: StatisticProfile.find_by(user: @customer).id + statistic_profile_id: StatisticProfile.find_by(user: @customer).id, + start_at: @start_at ) end end diff --git a/app/models/invoice.rb b/app/models/invoice.rb index 3e0e6a108..1b138151c 100644 --- a/app/models/invoice.rb +++ b/app/models/invoice.rb @@ -129,7 +129,6 @@ class Invoice < PaymentDocument def prevent_refund? return true if user.nil? - # workaround for reservation saved after invoice if main_item.object_type == 'Reservation' && main_item.object&.reservable_type == 'Training' user.trainings.include?(main_item.object.reservable_id) else diff --git a/app/models/offer_day.rb b/app/models/offer_day.rb index 36d754842..be998908d 100644 --- a/app/models/offer_day.rb +++ b/app/models/offer_day.rb @@ -7,6 +7,8 @@ class OfferDay < ApplicationRecord has_many :invoice_items, as: :object, dependent: :destroy belongs_to :subscription + after_create :notify_subscription_extended + # buying invoice def original_invoice invoice_items.select(:invoice_id) @@ -15,4 +17,20 @@ class OfferDay < ApplicationRecord .map { |id| Invoice.find_by(id: id, type: nil) } .first end + + private + + def notify_subscription_extended + meta_data = { free_days: true } + NotificationCenter.call type: :notify_member_subscription_extended, + receiver: subscription.user, + attached_object: subscription, + meta_data: meta_data + + NotificationCenter.call type: :notify_admin_subscription_extended, + receiver: User.admins_and_managers, + attached_object: subscription, + meta_data: meta_data + end + end diff --git a/app/models/payment_document.rb b/app/models/payment_document.rb index 39149a5c7..1f2ef946c 100644 --- a/app/models/payment_document.rb +++ b/app/models/payment_document.rb @@ -22,7 +22,7 @@ class PaymentDocument < Footprintable self.wallet_transaction_id = transaction_id end - def post_save(arg); end + def post_save(*args); end def render_resource; end end diff --git a/app/models/payment_schedule.rb b/app/models/payment_schedule.rb index c3edf9758..749e31d9e 100644 --- a/app/models/payment_schedule.rb +++ b/app/models/payment_schedule.rb @@ -75,14 +75,10 @@ class PaymentSchedule < PaymentDocument payment_schedule_items end - def post_save(gateway_method_id) + def post_save(*args) return unless payment_method == 'card' - PaymentGatewayService.new.create_subscription(self, gateway_method_id) - end - - def pay(gateway_method_id) - PaymentGatewayService.new.pay_subscription(self, gateway_method_id) + PaymentGatewayService.new.create_subscription(self, *args) end def render_resource diff --git a/app/models/setting.rb b/app/models/setting.rb index aee06ebae..d0742a62d 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -120,8 +120,13 @@ class Setting < ApplicationRecord payzen_currency public_agenda_module renew_pack_threshold - pack_only_for_subscription] } - # WARNING: when adding a new key, you may also want to add it in app/policies/setting_policy.rb#public_whitelist + pack_only_for_subscription + overlapping_categories] } + # WARNING: when adding a new key, you may also want to add it in: + # - config/locales/en.yml#settings + # - app/frontend/src/javascript/models/setting.ts#SettingName + # - db/seeds.rb (to set the default value) + # - app/policies/setting_policy.rb#public_whitelist (if the setting can be read by anyone) def value last_value = history_values.order(HistoryValue.arel_table['created_at'].desc).limit(1).first diff --git a/app/models/shopping_cart.rb b/app/models/shopping_cart.rb index 60d4f09bb..1758c11f5 100644 --- a/app/models/shopping_cart.rb +++ b/app/models/shopping_cart.rb @@ -61,29 +61,15 @@ class ShoppingCart payment = create_payment_document(price, objects, payment_id, payment_type) WalletService.debit_user_wallet(payment, @customer) payment.save - payment.post_save(payment_id) + payment.post_save(payment_id, payment_type) end - success = objects.map(&:errors).flatten.map(&:empty?).all? && items.map(&:errors).map(&:empty?).all? + success = !payment.nil? && objects.map(&:errors).flatten.map(&:empty?).all? && items.map(&:errors).map(&:empty?).all? errors = objects.map(&:errors).flatten.concat(items.map(&:errors)) + errors.push('Unable to create the PaymentDocument') if payment.nil? { success: success, payment: payment, errors: errors } end - def pay_schedule(payment_id, payment_type) - price = total - objects = [] - items.each do |item| - raise InvalidSubscriptionError unless item.valid?(@items) - - object = item.to_object - objects.push(object) - raise InvalidSubscriptionError unless object.errors.empty? - end - payment = create_payment_document(price, objects, payment_id, payment_type) - WalletService.debit_user_wallet(payment, @customer, transaction: false) - payment.pay(payment_id) - end - private # Save the object associated with the provided item or raise and Rollback if something wrong append. @@ -103,10 +89,10 @@ class ShoppingCart PaymentScheduleService.new.create( objects, price[:before_coupon], + @customer, coupon: @coupon.coupon, operator: @operator, payment_method: @payment_method, - user: @customer, payment_id: payment_id, payment_type: payment_type ) diff --git a/app/models/statistic_profile.rb b/app/models/statistic_profile.rb index b67a790e0..30a79ab50 100644 --- a/app/models/statistic_profile.rb +++ b/app/models/statistic_profile.rb @@ -28,6 +28,8 @@ class StatisticProfile < ApplicationRecord # Projects that the current user is the author has_many :my_projects, foreign_key: :author_statistic_profile_id, class_name: 'Project', dependent: :destroy + validate :check_birthday_in_past + def str_gender gender ? 'male' : 'female' end @@ -40,4 +42,10 @@ class StatisticProfile < ApplicationRecord '' end end + + private + + def check_birthday_in_past + errors.add(:birthday, I18n.t('statistic_profile.birthday_in_past')) if birthday.present? && birthday > DateTime.current + end end diff --git a/app/models/subscription.rb b/app/models/subscription.rb index 980c94b4b..5c0e40dd1 100644 --- a/app/models/subscription.rb +++ b/app/models/subscription.rb @@ -47,26 +47,6 @@ class Subscription < ApplicationRecord expiration_date end - def free_extend(expiration, operator_profile_id) - return false if expiration <= expired_at - - od = offer_days.create(start_at: expired_at, end_at: expiration) - invoice = Invoice.new( - invoicing_profile: user.invoicing_profile, - statistic_profile: user.statistic_profile, - operator_profile_id: operator_profile_id, - total: 0 - ) - invoice.invoice_items.push InvoiceItem.new(amount: 0, description: plan.base_name, object: od) - invoice.save - - if save - notify_subscription_extended(true) - return true - end - false - end - def user statistic_profile.user end @@ -116,9 +96,8 @@ class Subscription < ApplicationRecord attached_object: self end - def notify_subscription_extended(free_days) - meta_data = {} - meta_data[:free_days] = true if free_days + def notify_subscription_extended + meta_data = { free_days: false } NotificationCenter.call type: :notify_member_subscription_extended, receiver: user, attached_object: self, @@ -131,7 +110,7 @@ class Subscription < ApplicationRecord end def set_expiration_date - start_at = DateTime.current.in_time_zone + start_at = self.start_at || DateTime.current.in_time_zone self.expiration_date = start_at + plan.duration end diff --git a/app/policies/local_payment_policy.rb b/app/policies/local_payment_policy.rb index 6b0b075a5..3b0971eab 100644 --- a/app/policies/local_payment_policy.rb +++ b/app/policies/local_payment_policy.rb @@ -3,6 +3,9 @@ # Check the access policies for API::LocalPaymentsController class LocalPaymentPolicy < ApplicationPolicy def confirm_payment? - user.admin? || (user.manager? && record.shopping_cart.customer.id != user.id) || record.price.zero? + # only admins and managers can offer free extensions of a subscription + has_free_days = record.shopping_cart.items.any? { |item| item.is_a? CartItem::FreeExtension } + + user.admin? || (user.manager? && record.shopping_cart.customer.id != user.id) || (record.price.zero? && !has_free_days) end end diff --git a/app/policies/setting_policy.rb b/app/policies/setting_policy.rb index e9496a6f8..0eabb57c6 100644 --- a/app/policies/setting_policy.rb +++ b/app/policies/setting_policy.rb @@ -40,7 +40,7 @@ class SettingPolicy < ApplicationPolicy recaptcha_site_key feature_tour_display disqus_shortname allowed_cad_extensions openlab_app_id openlab_default online_payment_module stripe_public_key confirmation_required wallet_module trainings_module address_required payment_gateway payzen_endpoint payzen_public_key public_agenda_module renew_pack_threshold statistics_module - pack_only_for_subscription] + pack_only_for_subscription overlapping_categories] end ## diff --git a/app/policies/subscription_policy.rb b/app/policies/subscription_policy.rb index 968304d17..67de23c61 100644 --- a/app/policies/subscription_policy.rb +++ b/app/policies/subscription_policy.rb @@ -2,15 +2,11 @@ # Check the access policies for API::SubscriptionsController class SubscriptionPolicy < ApplicationPolicy - def create? - Setting.get('plans_module') && (user.admin? || (user.manager? && record.user_id != user.id) || record.price.zero?) - end - def show? user.admin? or record.user_id == user.id end - def update? - user.admin? || (user.manager? && record.user.id != user.id) + def payment_details? + user.admin? || user.manager? end end diff --git a/app/services/cart_service.rb b/app/services/cart_service.rb index 95d439e1f..1c4bb29a1 100644 --- a/app/services/cart_service.rb +++ b/app/services/cart_service.rb @@ -17,16 +17,18 @@ class CartService items = [] cart_items[:items].each do |item| if ['subscription', :subscription].include?(item.keys.first) - items.push(CartItem::Subscription.new(plan_info[:plan], @customer)) if plan_info[:new_subscription] + items.push(CartItem::Subscription.new(plan_info[:plan], @customer, item[:subscription][:start_at])) if plan_info[:new_subscription] elsif ['reservation', :reservation].include?(item.keys.first) items.push(reservable_from_hash(item[:reservation], plan_info)) elsif ['prepaid_pack', :prepaid_pack].include?(item.keys.first) items.push(CartItem::PrepaidPack.new(PrepaidPack.find(item[:prepaid_pack][:id]), @customer)) + elsif ['free_extension', :free_extension].include?(item.keys.first) + items.push(CartItem::FreeExtension.new(@customer, plan_info[:subscription], item[:free_extension][:end_at])) end end coupon = CartItem::Coupon.new(@customer, @operator, cart_items[:coupon_code]) - schedule = CartItem::PaymentSchedule.new(plan_info[:plan], coupon, cart_items[:payment_schedule]) + schedule = CartItem::PaymentSchedule.new(plan_info[:plan], coupon, cart_items[:payment_schedule], @customer, plan_info[:subscription]&.start_at) ShoppingCart.new( @customer, @@ -40,19 +42,22 @@ class CartService def from_payment_schedule(payment_schedule) @customer = payment_schedule.user - plan = payment_schedule.payment_schedule_objects.find { |pso| pso.object_type == Subscription.name }&.subscription&.plan + subscription = payment_schedule.payment_schedule_objects.find { |pso| pso.object_type == Subscription.name }&.subscription + plan = subscription&.plan coupon = CartItem::Coupon.new(@customer, @operator, payment_schedule.coupon&.code) - schedule = CartItem::PaymentSchedule.new(plan, coupon, true) + schedule = CartItem::PaymentSchedule.new(plan, coupon, true, @customer, subscription.start_at) items = [] payment_schedule.payment_schedule_objects.each do |object| if object.object_type == Subscription.name - items.push(CartItem::Subscription.new(object.subscription.plan, @customer)) + items.push(CartItem::Subscription.new(object.subscription.plan, @customer, object.subscription.start_at)) elsif object.object_type == Reservation.name items.push(reservable_from_payment_schedule_object(object, plan)) elsif object.object_type == PrepaidPack.name items.push(CartItem::PrepaidPack.new(object.statistic_profile_prepaid_pack.prepaid_pack_id, @customer)) + elsif object.object_type == OfferDay.name + items.push(CartItem::FreeExtension.new(@customer, object.offer_day.subscription, object.offer_day.end_date)) end end @@ -70,18 +75,22 @@ class CartService def plan(cart_items) new_plan_being_bought = false + subscription = nil plan = if cart_items[:items].any? { |item| ['subscription', :subscription].include?(item.keys.first) } index = cart_items[:items].index { |item| ['subscription', :subscription].include?(item.keys.first) } if cart_items[:items][index][:subscription][:plan_id] new_plan_being_bought = true - Plan.find(cart_items[:items][index][:subscription][:plan_id]) + plan = Plan.find(cart_items[:items][index][:subscription][:plan_id]) + subscription = CartItem::Subscription.new(plan, @customer, cart_items[:items][index][:subscription][:start_at]).to_object + plan end elsif @customer.subscribed_plan + subscription = @customer.subscription unless @customer.subscription.expired_at < DateTime.current @customer.subscribed_plan else nil end - { plan: plan, new_subscription: new_plan_being_bought } + { plan: plan, subscription: subscription, new_subscription: new_plan_being_bought } end def customer(cart_items) diff --git a/app/services/invoices_service.rb b/app/services/invoices_service.rb index bed591f4b..4d207545b 100644 --- a/app/services/invoices_service.rb +++ b/app/services/invoices_service.rb @@ -93,7 +93,7 @@ class InvoicesService end ## - # Generate an array of {InvoiceItem} with the elements in provided reservation, price included. + # Generate an array of {InvoiceItem} with the provided elements, price included. # @param invoice {Invoice} the parent invoice # @param payment_details {Hash} as generated by ShoppingCart.total # @param objects {Array} diff --git a/app/services/payment_gateway_service.rb b/app/services/payment_gateway_service.rb index ef98896e5..5641db951 100644 --- a/app/services/payment_gateway_service.rb +++ b/app/services/payment_gateway_service.rb @@ -19,12 +19,8 @@ class PaymentGatewayService @gateway = service.new end - def create_subscription(payment_schedule, gateway_object_id) - @gateway.create_subscription(payment_schedule, gateway_object_id) - end - - def pay_subscription(payment_schedule, gateway_object_id) - @gateway.pay_subscription(payment_schedule, gateway_object_id) + def create_subscription(payment_schedule, *args) + @gateway.create_subscription(payment_schedule, *args) end def create_user(user_id) diff --git a/app/services/payment_schedule_service.rb b/app/services/payment_schedule_service.rb index c626b1a95..14dd6e078 100644 --- a/app/services/payment_schedule_service.rb +++ b/app/services/payment_schedule_service.rb @@ -6,9 +6,11 @@ class PaymentScheduleService # Compute a payment schedule for a new subscription to the provided plan # @param plan {Plan} # @param total {Number} Total amount of the current shopping cart (which includes this plan) - without coupon + # @param customer {User} the customer # @param coupon {Coupon} apply this coupon, if any + # @param start_at {DateTime} schedule the PaymentSchedule to start in the future ## - def compute(plan, total, coupon: nil) + def compute(plan, total, customer, coupon: nil, start_at: nil) other_items = total - plan.amount # base monthly price of the plan price = plan.amount @@ -22,7 +24,7 @@ class PaymentScheduleService end items = [] (0..deadlines - 1).each do |i| - date = DateTime.current + i.months + date = (start_at || DateTime.current) + i.months details = { recurring: per_month } amount = if i.zero? details[:adjustment] = adjustment.truncate @@ -45,15 +47,18 @@ class PaymentScheduleService details: details ) end + ps.start_at = start_at ps.total = items.map(&:amount).reduce(:+) + ps.invoicing_profile = customer.invoicing_profile + ps.statistic_profile = customer.statistic_profile { payment_schedule: ps, items: items } end - def create(objects, total, coupon: nil, operator: nil, payment_method: nil, user: nil, + def create(objects, total, customer, coupon: nil, operator: nil, payment_method: nil, payment_id: nil, payment_type: nil) subscription = objects.find { |item| item.class == Subscription } - schedule = compute(subscription.plan, total, coupon: coupon) + schedule = compute(subscription.plan, total, customer, coupon: coupon, start_at: subscription.start_at) ps = schedule[:payment_schedule] items = schedule[:items] @@ -68,8 +73,6 @@ class PaymentScheduleService ps.payment_gateway_objects.push(pgo) end ps.operator_profile = operator.invoicing_profile - ps.invoicing_profile = user.invoicing_profile - ps.statistic_profile = user.statistic_profile ps.payment_schedule_items = items ps end diff --git a/app/services/subscriptions/subscribe.rb b/app/services/subscriptions/subscribe.rb deleted file mode 100644 index 806aa4d37..000000000 --- a/app/services/subscriptions/subscribe.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: true - -# Provides helper methods for Subscription actions -class Subscriptions::Subscribe - attr_accessor :user_id, :operator_profile_id - - def initialize(operator_profile_id, user_id = nil) - @user_id = user_id - @operator_profile_id = operator_profile_id - end - - def extend_subscription(subscription, new_expiration_date, free_days) - return subscription.free_extend(new_expiration_date, @operator_profile_id) if free_days - - new_sub = Subscription.create( - plan_id: subscription.plan_id, - statistic_profile_id: subscription.statistic_profile_id, - ) - new_sub.expiration_date = new_expiration_date - if new_sub.save - schedule = subscription.original_payment_schedule - - operator = InvoicingProfile.find(@operator_profile_id).user - cs = CartService.new(operator) - cart = cs.from_hash(customer_id: subscription.user.id, - items: [ - { - subscription: { - plan_id: subscription.plan_id - } - } - ], - payment_schedule: !schedule.nil?) - details = cart.total - - payment = if schedule - operator = InvoicingProfile.find(operator_profile_id)&.user - - PaymentScheduleService.new.create( - [new_sub], - details[:before_coupon], - operator: operator, - payment_method: schedule.payment_method, - user: new_sub.user, - payment_id: schedule.gateway_payment_mean&.id, - payment_type: schedule.gateway_payment_mean&.class - ) - else - InvoicesService.create( - details, - operator_profile_id, - [new_sub], - new_sub.user - ) - end - payment.save - payment.post_save(schedule&.gateway_payment_mean&.id) - UsersCredits::Manager.new(user: new_sub.user).reset_credits - return new_sub - end - false - end -end diff --git a/app/services/wallet_service.rb b/app/services/wallet_service.rb index 362a7d239..73f2b31ee 100644 --- a/app/services/wallet_service.rb +++ b/app/services/wallet_service.rb @@ -94,6 +94,7 @@ class WalletService ## # Subtract the amount of the payment document (Invoice|PaymentSchedule) from the customer's wallet + # @param transaction, if false: the wallet is not debited, the transaction is only simulated on the payment document ## def self.debit_user_wallet(payment, user, transaction: true) wallet_amount = WalletService.wallet_amount_debit(payment, user) diff --git a/app/views/api/members/_member.json.jbuilder b/app/views/api/members/_member.json.jbuilder index ce47ba100..bda15311c 100644 --- a/app/views/api/members/_member.json.jbuilder +++ b/app/views/api/members/_member.json.jbuilder @@ -72,6 +72,7 @@ if member.subscription json.interval member.subscription.plan.interval json.interval_count member.subscription.plan.interval_count json.amount member.subscription.plan.amount ? (member.subscription.plan.amount / 100.0) : 0 + json.monthly_payment member.subscription.plan.monthly_payment end end end diff --git a/app/views/api/subscriptions/payment_details.json.jbuilder b/app/views/api/subscriptions/payment_details.json.jbuilder new file mode 100644 index 000000000..2088900ba --- /dev/null +++ b/app/views/api/subscriptions/payment_details.json.jbuilder @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +json.payment_schedule !@subscription.original_payment_schedule.nil? +json.card @subscription.original_invoice&.paid_by_card? diff --git a/app/views/api/subscriptions/show.json.jbuilder b/app/views/api/subscriptions/show.json.jbuilder index f48db8b44..1fd063185 100644 --- a/app/views/api/subscriptions/show.json.jbuilder +++ b/app/views/api/subscriptions/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'api/subscriptions/subscription', subscription: @subscription diff --git a/app/views/api/subscriptions/update.json.jbuilder b/app/views/api/subscriptions/update.json.jbuilder deleted file mode 100644 index f48db8b44..000000000 --- a/app/views/api/subscriptions/update.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! 'api/subscriptions/subscription', subscription: @subscription diff --git a/config/locales/app.admin.de.yml b/config/locales/app.admin.de.yml index 68873bdf0..aa500c49d 100644 --- a/config/locales/app.admin.de.yml +++ b/config/locales/app.admin.de.yml @@ -866,7 +866,7 @@ de: expires_at: "Läuft ab am:" price_: "Preis:" offer_free_days: "Kostenlose Tage anbieten" - extend_subscription: "Abonnement verlängern" + renew_subscription: "Renew the subscription" user_has_no_current_subscription: "Benutzer hat kein aktuelles Abonnement." subscribe_to_a_plan: "Plan abonnieren" trainings: "Schulungen" @@ -888,13 +888,6 @@ de: download_the_invoice: "Rechnung herunterladen" download_the_refund_invoice: "Rückerstattungsrechnung herunterladen" no_invoices_for_now: "Momentan keine Rechnungen." - expiration_date: "Ablaufdatum" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "Sie entscheiden sich absichtlich dafür, das Abonnement des Benutzers zu verlängern, indem Sie ihm kostenlose Tage anbieten." - credits_will_remain_unchanged: "Der Saldo der freien Gutschriften (Schulungen / Maschinen / Räume) des Nutzers bleibt unverändert." - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "Sie entscheiden sich absichtlich dafür, das Abonnement des Benutzers zu verlängern, indem Sie ihn für sein aktuelles Abonnement erneut belasten." - credits_will_be_reset: "Das Inklusiv-Guthaben (für Schulungen / Maschinen / Räume) des Benutzers wird zurückgesetzt, nicht genutztes Guthaben geht verloren." - payment_scheduled: "If the previous subscription was charged through a payment schedule, this one will be charged the same way, the first deadline being charged right now, then each following month." - until_expiration_date: "Bis (Ablaufdatum):" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "Sie haben das Ablaufdatum des Abonnements erfolgreich geändert" a_problem_occurred_while_saving_the_date: "Beim Speichern des Datums ist ein Problem aufgetreten." new_subscription: "Neues Abonnement" @@ -906,6 +899,35 @@ de: to_credit: 'Guthaben' cannot_credit_own_wallet: "Sie können keine Gutschrift auf Ihr eigenes Guthaben einbuchen. Bitten Sie einen anderen Manager oder einen Administrator um die Gutschreibung." cannot_extend_own_subscription: "Sie können Ihr eigenes Abonnement nicht erweitern. Bitte fragen Sie einen anderen Manager oder einen Administrator." + #extend a subscription for free + free_extend_modal: + extend_subscription: "Extend the subscription" + offer_free_days_infos: "You are about to extend the user's subscription by offering him free additional days." + credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." + current_expiration: "Current subscription will expire at:" + DATE_TIME: "{DATE} {TIME}" + new_expiration_date: "New expiration date:" + number_of_free_days: "Number of free days:" + extend: "Extend" + extend_success: "The subscription was successfully extended for free" + #renew a subscription + renew_subscription_modal: + renew_subscription: "Renew the subscription" + renew_subscription_info: "You are about to renew the user's subscription by charging him again for his current subscription." + credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." + current_expiration: "Current subscription will expire at:" + new_start: "The new subscription will start at:" + new_expiration_date: "The new subscription will expire at:" + pay_in_one_go: "Pay in one go" + renew: "Renew" + renew_success: "The subscription was successfully renewed" + #take a new subscription + subscribe_modal: + subscribe_USER: "Subscribe {USER}" + subscribe: "Subscribe" + select_plan: "Please select a plan" + pay_in_one_go: "Pay in one go" + subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Administrator hinzufügen" @@ -1154,8 +1176,9 @@ de: error_SETTING_locked: "Die Einstellung konnte nicht aktualisiert werden: {SETTING} ist gesperrt. Bitte kontaktieren Sie Ihren Systemadministrator." an_error_occurred_saving_the_setting: "Beim Speichern der Einstellung ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut." book_overlapping_slots_info: "Erlauben / Verhindern der Reservierung von überlappenden Slots" - prevent_booking: "Buchungen verhindern" allow_booking: "Allow booking" + overlapping_categories: "Overlapping categories" + overlapping_categories_info: "Preventing booking on overlapping slots will be done by comparing the date and time of the following categories of reservations." default_slot_duration: "Standarddauer für Slots" duration_minutes: "Dauer (in Minuten)" default_slot_duration_info: "Die Verfügbarkeit von Maschinen und Räumen ist in mehrere Slots dieser Dauer aufgeteilt. Dieser Wert kann je Verfügbarkeit überschrieben werden." @@ -1212,6 +1235,11 @@ de: pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" + overlapping_options: + training_reservations: "Trainings" + machine_reservations: "Machines" + space_reservations: "Spaces" + events_reservations: "Events" general: general: "Allgemein" title: "Titel" @@ -1364,14 +1392,19 @@ de: category_deleted: "The category was successfully deleted" unable_to_delete: "Unable to delete the category: " local_payment: + validate_cart: "Validate my cart" offline_payment: "Payment on site" about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment." + about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}." payment_method: "Payment method" method_card: "Online by card" method_check: "By check" card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card." + check_list_setting: + save: 'Save' + customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved." #feature tour tour: conclusion: diff --git a/config/locales/app.admin.en.yml b/config/locales/app.admin.en.yml index 93c05fd35..570dd1a24 100644 --- a/config/locales/app.admin.en.yml +++ b/config/locales/app.admin.en.yml @@ -866,7 +866,7 @@ en: expires_at: "Expires at:" price_: "Price:" offer_free_days: "Offer free days" - extend_subscription: "Extend subscription" + renew_subscription: "Renew the subscription" user_has_no_current_subscription: "User has no current subscription." subscribe_to_a_plan: "Subscribe to a plan" trainings: "Trainings" @@ -888,13 +888,6 @@ en: download_the_invoice: "Download the invoice" download_the_refund_invoice: "Download the refund invoice" no_invoices_for_now: "No invoices for now." - expiration_date: "Expiration date" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "You intentionally decide to extend the user's subscription by offering him free days." - credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "You intentionally decide to extend the user's subscription by charging him again for his current subscription." - credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." - payment_scheduled: "If the previous subscription was charged through a payment schedule, this one will be charged the same way, the first deadline being charged right now, then each following month." - until_expiration_date: "Until (expiration date):" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "You successfully changed the expiration date of the user's subscription" a_problem_occurred_while_saving_the_date: "A problem occurred while saving the date." new_subscription: "New subscription" @@ -906,6 +899,35 @@ en: to_credit: 'Credit' cannot_credit_own_wallet: "You cannot credit your own wallet. Please ask another manager or an administrator to credit your wallet." cannot_extend_own_subscription: "You cannot extend your own subscription. Please ask another manager or an administrator to extend your subscription." + # extend a subscription for free + free_extend_modal: + extend_subscription: "Extend the subscription" + offer_free_days_infos: "You are about to extend the user's subscription by offering him free additional days." + credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." + current_expiration: "Current subscription will expire at:" + DATE_TIME: "{DATE} {TIME}" + new_expiration_date: "New expiration date:" + number_of_free_days: "Number of free days:" + extend: "Extend" + extend_success: "The subscription was successfully extended for free" + # renew a subscription + renew_subscription_modal: + renew_subscription: "Renew the subscription" + renew_subscription_info: "You are about to renew the user's subscription by charging him again for his current subscription." + credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." + current_expiration: "Current subscription will expire at:" + new_start: "The new subscription will start at:" + new_expiration_date: "The new subscription will expire at:" + pay_in_one_go: "Pay in one go" + renew: "Renew" + renew_success: "The subscription was successfully renewed" + # take a new subscription + subscribe_modal: + subscribe_USER: "Subscribe {USER}" + subscribe: "Subscribe" + select_plan: "Please select a plan" + pay_in_one_go: "Pay in one go" + subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Add an administrator" @@ -1155,6 +1177,8 @@ en: an_error_occurred_saving_the_setting: "An error occurred while saving the setting. Please try again later." book_overlapping_slots_info: "Allow / prevent the reservation of overlapping slots" allow_booking: "Allow booking" + overlapping_categories: "Overlapping categories" + overlapping_categories_info: "Preventing booking on overlapping slots will be done by comparing the date and time of the following categories of reservations." default_slot_duration: "Default duration for slots" duration_minutes: "Duration (in minutes)" default_slot_duration_info: "Machine and space availabilities are divided in multiple slots of this duration. This value can be overridden per availability." @@ -1211,6 +1235,11 @@ en: pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" + overlapping_options: + training_reservations: "Trainings" + machine_reservations: "Machines" + space_reservations: "Spaces" + events_reservations: "Events" general: general: "General" title: "Title" @@ -1363,14 +1392,19 @@ en: category_deleted: "The category was successfully deleted" unable_to_delete: "Unable to delete the category: " local_payment: + validate_cart: "Validate my cart" offline_payment: "Payment on site" about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment." + about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}." payment_method: "Payment method" method_card: "Online by card" method_check: "By check" card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card." + check_list_setting: + save: 'Save' + customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved." #feature tour tour: conclusion: diff --git a/config/locales/app.admin.es.yml b/config/locales/app.admin.es.yml index 465a8056f..9f2a8426e 100644 --- a/config/locales/app.admin.es.yml +++ b/config/locales/app.admin.es.yml @@ -866,7 +866,7 @@ es: expires_at: "Caduca en:" price_: "Precio:" offer_free_days: "Ofrecer días gratis" - extend_subscription: "Ampliar suscripción" + renew_subscription: "Renew the subscription" user_has_no_current_subscription: "El usuario no tiene una suscripción actual." subscribe_to_a_plan: "Suscribirse a un plan" trainings: "Trainings" @@ -888,13 +888,6 @@ es: download_the_invoice: "Download the invoice" download_the_refund_invoice: "Descargar la factura de reembolso" no_invoices_for_now: "No invoices for now." - expiration_date: "Fecha de caducidad" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "Usted intencionalmente decide extender la suscripción del usuario ofreciéndole días libres." - credits_will_remain_unchanged: "El saldo de créditos gratuitos (entrenamiento / máquinas / espacios) del usuario permanecerá sin cambios." - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "Usted intencionalmente decide extender la suscripción del usuario al cobrarle de nuevo por su suscripción actual." - credits_will_be_reset: "Se restablecerá el saldo de créditos gratuitos (entrenamiento / máquinas / espacios) del usuario, se perderán los créditos no utilizados." - payment_scheduled: "If the previous subscription was charged through a payment schedule, this one will be charged the same way, the first deadline being charged right now, then each following month." - until_expiration_date: "Until (expiration date):" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "Ha cambiado correctamente la fecha de caducidad de la suscripción del usuario" a_problem_occurred_while_saving_the_date: "Se ha producido un problema al guardar la fecha." new_subscription: "Nueva suscripción" @@ -906,6 +899,35 @@ es: to_credit: 'Credit' cannot_credit_own_wallet: "You cannot credit your own wallet. Please ask another manager or an administrator to credit your wallet." cannot_extend_own_subscription: "You cannot extend your own subscription. Please ask another manager or an administrator to extend your subscription." + #extend a subscription for free + free_extend_modal: + extend_subscription: "Extend the subscription" + offer_free_days_infos: "You are about to extend the user's subscription by offering him free additional days." + credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." + current_expiration: "Current subscription will expire at:" + DATE_TIME: "{DATE} {TIME}" + new_expiration_date: "New expiration date:" + number_of_free_days: "Number of free days:" + extend: "Extend" + extend_success: "The subscription was successfully extended for free" + #renew a subscription + renew_subscription_modal: + renew_subscription: "Renew the subscription" + renew_subscription_info: "You are about to renew the user's subscription by charging him again for his current subscription." + credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." + current_expiration: "Current subscription will expire at:" + new_start: "The new subscription will start at:" + new_expiration_date: "The new subscription will expire at:" + pay_in_one_go: "Pay in one go" + renew: "Renew" + renew_success: "The subscription was successfully renewed" + #take a new subscription + subscribe_modal: + subscribe_USER: "Subscribe {USER}" + subscribe: "Subscribe" + select_plan: "Please select a plan" + pay_in_one_go: "Pay in one go" + subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Agregar un administrador" @@ -1154,8 +1176,9 @@ es: error_SETTING_locked: "Unable to update the setting: {SETTING} is locked. Please contact your system administrator." an_error_occurred_saving_the_setting: "An error occurred while saving the setting. Please try again later." book_overlapping_slots_info: "Allow / prevent the reservation of overlapping slots" - prevent_booking: "Impedir reservas" allow_booking: "Allow booking" + overlapping_categories: "Overlapping categories" + overlapping_categories_info: "Preventing booking on overlapping slots will be done by comparing the date and time of the following categories of reservations." default_slot_duration: "Default duration for slots" duration_minutes: "Duration (in minutes)" default_slot_duration_info: "Machine and space availabilities are divided in multiple slots of this duration. This value can be overridden per availability." @@ -1212,6 +1235,11 @@ es: pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" + overlapping_options: + training_reservations: "Trainings" + machine_reservations: "Machines" + space_reservations: "Spaces" + events_reservations: "Events" general: general: "General" title: "Title" @@ -1364,14 +1392,19 @@ es: category_deleted: "The category was successfully deleted" unable_to_delete: "Unable to delete the category: " local_payment: + validate_cart: "Validate my cart" offline_payment: "Payment on site" about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment." + about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}." payment_method: "Payment method" method_card: "Online by card" method_check: "By check" card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card." + check_list_setting: + save: 'Save' + customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved." #feature tour tour: conclusion: diff --git a/config/locales/app.admin.fr.yml b/config/locales/app.admin.fr.yml index d75da84b1..0ff61d212 100644 --- a/config/locales/app.admin.fr.yml +++ b/config/locales/app.admin.fr.yml @@ -866,7 +866,7 @@ fr: expires_at: "Expire le :" price_: "Prix :" offer_free_days: "Offrir des jours gratuits" - extend_subscription: "Prolonger l'abonnement" + renew_subscription: "Renouveler l'abonnement" user_has_no_current_subscription: "L'utilisateur n'a pas d'abonnement en cours." subscribe_to_a_plan: "Souscrire à un abonnement" trainings: "Formations" @@ -888,13 +888,6 @@ fr: download_the_invoice: "Télécharger la facture" download_the_refund_invoice: "Télécharger l'avoir" no_invoices_for_now: "Aucune facture pour le moment." - expiration_date: "Date d'expiration" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "Vous décidez délibérément d'étendre l'abonnement de l'utilisateur en lui offrant des jours gratuits." - credits_will_remain_unchanged: "Le solde de crédits gratuits (formations/machines/espaces) de l'utilisateur restera inchangé." - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "Vous décidez délibérément d'étendre l'abonnement de l'utilisateur en lui faisant repayer le prix de l'abonnement qu'il possède actuellement." - credits_will_be_reset: "Le solde de crédits gratuits (formations/machines/espaces) de l'utilisateur sera remis à zéro, ses crédits non utilisés seront perdu." - payment_scheduled: "Si l'abonnement précédent a été facturé via un échéancier de paiement mensualisé, celui-ci sera facturé de la même façon, la première échéance étant facturée immédiatement, puis chaque mois suivant." - until_expiration_date: "Jusqu'à (date d'expiration) :" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "Vous avez bien modifié la date d'expiration de l'abonnement de l'utilisateur" a_problem_occurred_while_saving_the_date: "Il y a eu un problème lors de l'enregistrement de la date." new_subscription: "Nouvelle souscription" @@ -906,6 +899,35 @@ fr: to_credit: 'Créditer' cannot_credit_own_wallet: "Vous ne pouvez pas créditer votre propre porte-monnaie. Veuillez demander à un autre gestionnaire ou à un administrateur de créditer votre porte-monnaie." cannot_extend_own_subscription: "Vous ne pouvez pas prolonger votre propre abonnement. Veuillez demander à un autre gestionnaire ou à un administrateur de prolonger votre abonnement." + #extend a subscription for free + free_extend_modal: + extend_subscription: "Prolonger l'abonnement" + offer_free_days_infos: "Vous êtes sur le point de prolonger l'abonnement de l'utilisateur en lui offrant des jours supplémentaires gratuits." + credits_will_remain_unchanged: "Le solde de crédits gratuits (formations / machines / espaces) de l'utilisateur restera inchangé." + current_expiration: "L'abonnement actuel expirera le :" + DATE_TIME: "{DATE} à {TIME}" + new_expiration_date: "Nouvelle date d'expiration :" + number_of_free_days: "Nombre de jours gratuits :" + extend: "Prolonger" + extend_success: "L'abonnement a été prolongé gratuitement" + #renew a subscription + renew_subscription_modal: + renew_subscription: "Renouveler l'abonnement" + renew_subscription_info: "Vous êtes sur le point de renouveler l'abonnement de l'utilisateur en lui refacturant son abonnement actuel." + credits_will_be_reset: "Le solde de crédits gratuits (formations / machines / espaces) de l'utilisateur sera remis à zéro, ses crédits non utilisés seront perdu." + current_expiration: "L'abonnement actuel expirera le :" + new_start: "La nouvelle souscription commencera le :" + new_expiration_date: "Le nouvel abonnement expirera le :" + pay_in_one_go: "Payer en une fois" + renew: "Renouveler" + renew_success: "L'abonnement a bien été renouvelé" + #take a new subscription + subscribe_modal: + subscribe_USER: "Abonner {USER}" + subscribe: "Abonner" + select_plan: "Veuillez choisir une formule d'abonnement" + pay_in_one_go: "Payer en une fois" + subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Ajouter un administrateur" @@ -1154,8 +1176,9 @@ fr: error_SETTING_locked: "Impossible de mettre à jour le paramètre : {SETTING} est verrouillé. Veuillez contacter votre administrateur système." an_error_occurred_saving_the_setting: "Une erreur est survenue pendant l'enregistrement du paramètre. Veuillez réessayer plus tard." book_overlapping_slots_info: "Autoriser / empêcher la réservation de créneaux qui se chevauchent" - prevent_booking: "Empêcher la réservation" allow_booking: "Autoriser la réservation" + overlapping_categories: "Catégories des chevauchements" + overlapping_categories_info: "Éviter la réservation de créneaux qui se chevauchent sera effectué en comparant la date et l'heure des catégories de réservations suivantes." default_slot_duration: "Durée par défaut pour les créneaux" duration_minutes: "Durée (en minutes)" default_slot_duration_info: "Les disponibilités des machines et des espaces sont divisées en plusieurs créneaux de cette durée. Cette valeur peur être changée pour chaque disponibilité." @@ -1209,9 +1232,14 @@ fr: display_invite_to_renew_pack: "Afficher l'invitation à renouveler les packs prépayés" packs_threshold_info_html: "Vous pouvez définir le nombre d'heures en dessous duquel l'utilisateur sera invité à acheter un nouveau pack prépayé, si son stock d'heures prépayées est inférieur à ce seuil.
Vous pouvez définir un nombre d'heures (par exemple. 5) ou un pourcentage de son pack actuel (par exemple 0,05 signifie 5%)." renew_pack_threshold: "seuil de renouvellement des packs" - pack_only_for_subscription_info_html: "Si cette option est activée, l'achat et l'utilisation d'un pack prépayé est seulement possible pour l'utilisateur possédant un abonnement en cours de validité." - pack_only_for_subscription: "Abonnement valide pour achat et utilisation d'un pack prépayé" - pack_only_for_subscription_info: "Rendre obligatoire l'abonnement pour les packs prépayés" + pack_only_for_subscription_info_html: "Si cette option est activée, l'achat et l'utilisation d'un pack prépayé n'est possible que pour l'utilisateur possédant un abonnement en cours de validité." + pack_only_for_subscription: "Abonnement valide pour l'achat et l'utilisation d'un pack prépayé" + pack_only_for_subscription_info: "Rendre l'abonnement obligatoire pour les packs prépayés" + overlapping_options: + training_reservations: "Formations" + machine_reservations: "Machines" + space_reservations: "Espaces" + events_reservations: "Événements" general: general: "Général" title: "Titre" @@ -1364,14 +1392,19 @@ fr: category_deleted: "La catégorie a bien été supprimée" unable_to_delete: "Impossible de supprimer la catégorie : " local_payment: + validate_cart: "Valider mon panier" offline_payment: "Paiement sur place" about_to_cash: "Vous êtes sur le point de confirmer l'encaissement par un moyen de paiement externe. Veuillez ne pas cliquer sur le bouton ci-dessous tant que vous n'avez pas encaissé le paiement demandé." + about_to_confirm: "Vous êtes sur le point de confirmer votre {ITEM, select, subscription{abonnement} other{réservation}}." payment_method: "Moyen de paiement" method_card: "Carte bancaire en ligne" method_check: "Par chèques" card_collection_info: "En validant, vous serez invité à saisir les informations de carte bancaire du membre. Cette carte sera prélevée automatiquement aux échéances." check_collection_info: "En validant, vous confirmez être en possession de {DEADLINES} chèques permettant d'encaisser l'ensemble des mensualité." online_payment_disabled: "Le paiement en ligne n'est pas disponible. Vous ne pouvez pas encaisser cet échéancier de paiement en utilisant la carte bancaire en ligne." + check_list_setting: + save: 'Enregistrer' + customization_of_SETTING_successfully_saved: "La personnalisation de {SETTING} a bien été enregistrée." #feature tour tour: conclusion: diff --git a/config/locales/app.admin.no.yml b/config/locales/app.admin.no.yml index e02a860e6..858780308 100644 --- a/config/locales/app.admin.no.yml +++ b/config/locales/app.admin.no.yml @@ -866,7 +866,7 @@ expires_at: "Utløper:" price_: "Pris:" offer_free_days: "Tilby gratis dager" - extend_subscription: "Forleng medlemskap" + renew_subscription: "Renew the subscription" user_has_no_current_subscription: "Brukeren har ikke noe gjeldende medlemskap." subscribe_to_a_plan: "Abonner på et medlemskap" trainings: "Opplæringer/kurs" @@ -888,13 +888,6 @@ download_the_invoice: "Last ned fakturaen" download_the_refund_invoice: "Last ned refusjonsfakturaen" no_invoices_for_now: "Ingen fakturaer for øyeblikket." - expiration_date: "Utløpsdato" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "Du ønsker å forlenge brukerens abonnement ved å tilby gratisdager." - credits_will_remain_unchanged: "Brukernes gjenværende kreditter (opplæring / maskiner/lokaler) vil ikke være endret." - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "Du vil forlenge brukerens abonnement ved å kreve betaling for gjeldende abonnement." - credits_will_be_reset: "Brukernes gjenværende kreditter (opplæring / maskiner/lokaler) vil annulleres." - payment_scheduled: "Dersom det forrige abonnementet ble betalt gjennom en betalingsplan, vil denne bli belastet på samme måte. Første betalingsfrist er nå, deretter samme dato hver måned fremover." - until_expiration_date: "Til (utløpsdato):" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "Du har endret utløpsdato på brukerens abonnement" a_problem_occurred_while_saving_the_date: "Det oppstod et problem under lagring av dato." new_subscription: "Nytt abonnement/medlemskap" @@ -906,6 +899,35 @@ to_credit: 'Kreditt' cannot_credit_own_wallet: "Du kan ikke kreditere din egen lommebok. Vennligst spør en annen leder eller administrator om å kreditere din lommebok." cannot_extend_own_subscription: "Du kan ikke utvide ditt eget medlemskap. Be en annen leder eller en administrator om å utvide abonnementet." + #extend a subscription for free + free_extend_modal: + extend_subscription: "Extend the subscription" + offer_free_days_infos: "You are about to extend the user's subscription by offering him free additional days." + credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." + current_expiration: "Current subscription will expire at:" + DATE_TIME: "{DATE} {TIME}" + new_expiration_date: "New expiration date:" + number_of_free_days: "Number of free days:" + extend: "Extend" + extend_success: "The subscription was successfully extended for free" + #renew a subscription + renew_subscription_modal: + renew_subscription: "Renew the subscription" + renew_subscription_info: "You are about to renew the user's subscription by charging him again for his current subscription." + credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." + current_expiration: "Current subscription will expire at:" + new_start: "The new subscription will start at:" + new_expiration_date: "The new subscription will expire at:" + pay_in_one_go: "Pay in one go" + renew: "Renew" + renew_success: "The subscription was successfully renewed" + #take a new subscription + subscribe_modal: + subscribe_USER: "Subscribe {USER}" + subscribe: "Subscribe" + select_plan: "Please select a plan" + pay_in_one_go: "Pay in one go" + subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Legg til administrator" @@ -1154,7 +1176,9 @@ error_SETTING_locked: "Unable to update the setting: {SETTING} is locked. Please contact your system administrator." an_error_occurred_saving_the_setting: "An error occurred while saving the setting. Please try again later." book_overlapping_slots_info: "Allow / prevent the reservation of overlapping slots" - prevent_booking: "Prevent booking" + allow_booking: "Allow booking" + overlapping_categories: "Overlapping categories" + overlapping_categories_info: "Preventing booking on overlapping slots will be done by comparing the date and time of the following categories of reservations." default_slot_duration: "Default duration for slots" duration_minutes: "Duration (in minutes)" default_slot_duration_info: "Machine and space availabilities are divided in multiple slots of this duration. This value can be overridden per availability." @@ -1211,6 +1235,11 @@ pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" + overlapping_options: + training_reservations: "Trainings" + machine_reservations: "Machines" + space_reservations: "Spaces" + events_reservations: "Events" general: general: "Generelt" title: "Tittel" @@ -1363,14 +1392,19 @@ category_deleted: "The category was successfully deleted" unable_to_delete: "Unable to delete the category: " local_payment: + validate_cart: "Validate my cart" offline_payment: "Payment on site" about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment." + about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}." payment_method: "Payment method" method_card: "Online by card" method_check: "By check" card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card." + check_list_setting: + save: 'Save' + customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved." #feature tour tour: conclusion: diff --git a/config/locales/app.admin.pt.yml b/config/locales/app.admin.pt.yml index 7e557b690..ad0859e89 100755 --- a/config/locales/app.admin.pt.yml +++ b/config/locales/app.admin.pt.yml @@ -866,7 +866,7 @@ pt: expires_at: "Experia em:" price_: "Preço:" offer_free_days: "Oferecer dias grátis" - extend_subscription: "Estender inscrição" + renew_subscription: "Renew the subscription" user_has_no_current_subscription: "O usuário não possui inscrição." subscribe_to_a_plan: "Plano de inscrição" trainings: "Treinamentos" @@ -888,13 +888,6 @@ pt: download_the_invoice: "Baixar a fatura" download_the_refund_invoice: "Baixar fatura de reembolso" no_invoices_for_now: "Nenhuma fatura." - expiration_date: "Data de expiração" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "Você intencionalmente decidir estender a inscrição do usuário, oferecendo-lhe dias livres." - credits_will_remain_unchanged: "O saldo de créditos gratuitos (treinamento / máquinas / espaços) do usuário permanecerá inalterado." - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "Você decide intencionalmente estender a assinatura do usuário cobrando-o novamente por sua assinatura atual." - credits_will_be_reset: "O saldo de créditos gratuitos (treinamento / máquinas / espaços) do usuário será redefinido, os créditos não utilizados serão perdidos." - payment_scheduled: "If the previous subscription was charged through a payment schedule, this one will be charged the same way, the first deadline being charged right now, then each following month." - until_expiration_date: "Até (data de expiração):" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "Você alterou com êxito a data de expiração da assinatura do usuário" a_problem_occurred_while_saving_the_date: "Um erro ocorreu ao salvar a data." new_subscription: "Nova inscrição" @@ -906,6 +899,35 @@ pt: to_credit: 'Crédito' cannot_credit_own_wallet: "Você não pode creditar sua própria carteira. Por favor, peça a outro gerente ou a um administrador para creditar sua carteira." cannot_extend_own_subscription: "Você não pode estender sua própria assinatura. Por favor, peça a outro gerente ou administrador para estender sua assinatura." + #extend a subscription for free + free_extend_modal: + extend_subscription: "Extend the subscription" + offer_free_days_infos: "You are about to extend the user's subscription by offering him free additional days." + credits_will_remain_unchanged: "The balance of free credits (training / machines / spaces) of the user will remain unchanged." + current_expiration: "Current subscription will expire at:" + DATE_TIME: "{DATE} {TIME}" + new_expiration_date: "New expiration date:" + number_of_free_days: "Number of free days:" + extend: "Extend" + extend_success: "The subscription was successfully extended for free" + #renew a subscription + renew_subscription_modal: + renew_subscription: "Renew the subscription" + renew_subscription_info: "You are about to renew the user's subscription by charging him again for his current subscription." + credits_will_be_reset: "The balance of free credits (training / machines / spaces) of the user will be reset, unused credits will be lost." + current_expiration: "Current subscription will expire at:" + new_start: "The new subscription will start at:" + new_expiration_date: "The new subscription will expire at:" + pay_in_one_go: "Pay in one go" + renew: "Renew" + renew_success: "The subscription was successfully renewed" + #take a new subscription + subscribe_modal: + subscribe_USER: "Subscribe {USER}" + subscribe: "Subscribe" + select_plan: "Please select a plan" + pay_in_one_go: "Pay in one go" + subscription_success: "" #add a new administrator to the platform admins_new: add_an_administrator: "Adicionar administrador" @@ -1154,8 +1176,9 @@ pt: error_SETTING_locked: "Não foi possível atualizar a configuração: {SETTING} está bloqueado. Por favor contate o administrador do sistema." an_error_occurred_saving_the_setting: "Ocorreu um erro ao salvar a configuração. Por favor, tente novamente mais tarde." book_overlapping_slots_info: "Permitir / impedir a reserva de slots sobrepostos" - prevent_booking: "Prevent booking" allow_booking: "Allow booking" + overlapping_categories: "Overlapping categories" + overlapping_categories_info: "Preventing booking on overlapping slots will be done by comparing the date and time of the following categories of reservations." default_slot_duration: "Duração padrão para slots" duration_minutes: "Duração (em minutos)" default_slot_duration_info: "Máquina e espaço disponíveis são divididos em vários slots desta duração. Esse valor pode ser substituído por disponibilidade." @@ -1212,6 +1235,11 @@ pt: pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" + overlapping_options: + training_reservations: "Trainings" + machine_reservations: "Machines" + space_reservations: "Spaces" + events_reservations: "Events" general: general: "Geral" title: "Título" @@ -1364,14 +1392,19 @@ pt: category_deleted: "The category was successfully deleted" unable_to_delete: "Unable to delete the category: " local_payment: + validate_cart: "Validate my cart" offline_payment: "Payment on site" about_to_cash: "You're about to confirm the cashing by an external payment mean. Please do not click on the button below until you have fully cashed the requested payment." + about_to_confirm: "You're about to confirm your {ITEM, select, subscription{subscription} other{reservation}}." payment_method: "Payment method" method_card: "Online by card" method_check: "By check" card_collection_info: "By validating, you'll be prompted for the member's card number. This card will be automatically charged at the deadlines." check_collection_info: "By validating, you confirm that you have {DEADLINES} checks, allowing you to collect all the monthly payments." online_payment_disabled: "Online payment is not available. You cannot collect this payment schedule by online card." + check_list_setting: + save: 'Save' + customization_of_SETTING_successfully_saved: "Customization of the {SETTING} successfully saved." #feature tour tour: conclusion: diff --git a/config/locales/app.admin.zu.yml b/config/locales/app.admin.zu.yml index 4d2d7750f..4a1156656 100644 --- a/config/locales/app.admin.zu.yml +++ b/config/locales/app.admin.zu.yml @@ -866,7 +866,7 @@ zu: expires_at: "crwdns7949:0crwdne7949:0" price_: "crwdns7951:0crwdne7951:0" offer_free_days: "crwdns7953:0crwdne7953:0" - extend_subscription: "crwdns7955:0crwdne7955:0" + renew_subscription: "crwdns22045:0crwdne22045:0" user_has_no_current_subscription: "crwdns7957:0crwdne7957:0" subscribe_to_a_plan: "crwdns7959:0crwdne7959:0" trainings: "crwdns7961:0crwdne7961:0" @@ -888,13 +888,6 @@ zu: download_the_invoice: "crwdns7993:0crwdne7993:0" download_the_refund_invoice: "crwdns7995:0crwdne7995:0" no_invoices_for_now: "crwdns7997:0crwdne7997:0" - expiration_date: "crwdns7999:0crwdne7999:0" - you_intentionally_decide_to_extend_the_user_s_subscription_by_offering_him_free_days: "crwdns8001:0crwdne8001:0" - credits_will_remain_unchanged: "crwdns8003:0crwdne8003:0" - you_intentionally_decide_to_extend_the_user_s_subscription_by_charging_him_again_for_his_current_subscription: "crwdns8005:0crwdne8005:0" - credits_will_be_reset: "crwdns8007:0crwdne8007:0" - payment_scheduled: "crwdns21084:0crwdne21084:0" - until_expiration_date: "crwdns8009:0crwdne8009:0" you_successfully_changed_the_expiration_date_of_the_user_s_subscription: "crwdns8011:0crwdne8011:0" a_problem_occurred_while_saving_the_date: "crwdns8013:0crwdne8013:0" new_subscription: "crwdns8015:0crwdne8015:0" @@ -906,6 +899,35 @@ zu: to_credit: 'crwdns8025:0crwdne8025:0' cannot_credit_own_wallet: "crwdns20344:0crwdne20344:0" cannot_extend_own_subscription: "crwdns20346:0crwdne20346:0" + #extend a subscription for free + free_extend_modal: + extend_subscription: "crwdns22047:0crwdne22047:0" + offer_free_days_infos: "crwdns22049:0crwdne22049:0" + credits_will_remain_unchanged: "crwdns22051:0crwdne22051:0" + current_expiration: "crwdns22053:0crwdne22053:0" + DATE_TIME: "crwdns22055:0{DATE}crwdnd22055:0{TIME}crwdne22055:0" + new_expiration_date: "crwdns22057:0crwdne22057:0" + number_of_free_days: "crwdns22059:0crwdne22059:0" + extend: "crwdns22061:0crwdne22061:0" + extend_success: "crwdns22063:0crwdne22063:0" + #renew a subscription + renew_subscription_modal: + renew_subscription: "crwdns22065:0crwdne22065:0" + renew_subscription_info: "crwdns22067:0crwdne22067:0" + credits_will_be_reset: "crwdns22069:0crwdne22069:0" + current_expiration: "crwdns22071:0crwdne22071:0" + new_start: "crwdns22073:0crwdne22073:0" + new_expiration_date: "crwdns22075:0crwdne22075:0" + pay_in_one_go: "crwdns22085:0crwdne22085:0" + renew: "crwdns22087:0crwdne22087:0" + renew_success: "crwdns22089:0crwdne22089:0" + #take a new subscription + subscribe_modal: + subscribe_USER: "crwdns22133:0{USER}crwdne22133:0" + subscribe: "crwdns22099:0crwdne22099:0" + select_plan: "crwdns22101:0crwdne22101:0" + pay_in_one_go: "crwdns22103:0crwdne22103:0" + subscription_success: "crwdns22105:0crwdne22105:0" #add a new administrator to the platform admins_new: add_an_administrator: "crwdns8027:0crwdne8027:0" @@ -1154,8 +1176,9 @@ zu: error_SETTING_locked: "crwdns20640:0{SETTING}crwdne20640:0" an_error_occurred_saving_the_setting: "crwdns20380:0crwdne20380:0" book_overlapping_slots_info: "crwdns20642:0crwdne20642:0" - prevent_booking: "crwdns21478:0crwdne21478:0" - allow_booking: "Allow booking" + allow_booking: "crwdns22035:0crwdne22035:0" + overlapping_categories: "crwdns22107:0crwdne22107:0" + overlapping_categories_info: "crwdns22109:0crwdne22109:0" default_slot_duration: "crwdns20646:0crwdne20646:0" duration_minutes: "crwdns20648:0crwdne20648:0" default_slot_duration_info: "crwdns20650:0crwdne20650:0" @@ -1209,9 +1232,14 @@ zu: display_invite_to_renew_pack: "crwdns22000:0crwdne22000:0" packs_threshold_info_html: "crwdns22030:0crwdne22030:0" renew_pack_threshold: "crwdns22004:0crwdne22004:0" - pack_only_for_subscription_info_html: "If this option is activated, the purchase and use of a prepaid pack is only possible for the user with a valid subscription." - pack_only_for_subscription: "Subscription valid for purchase and use of a prepaid pack" - pack_only_for_subscription_info: "Make subscription mandatory for prepaid packs" + pack_only_for_subscription_info_html: "crwdns22037:0crwdne22037:0" + pack_only_for_subscription: "crwdns22039:0crwdne22039:0" + pack_only_for_subscription_info: "crwdns22041:0crwdne22041:0" + overlapping_options: + training_reservations: "crwdns22111:0crwdne22111:0" + machine_reservations: "crwdns22113:0crwdne22113:0" + space_reservations: "crwdns22115:0crwdne22115:0" + events_reservations: "crwdns22117:0crwdne22117:0" general: general: "crwdns20726:0crwdne20726:0" title: "crwdns20728:0crwdne20728:0" @@ -1364,14 +1392,19 @@ zu: category_deleted: "crwdns21618:0crwdne21618:0" unable_to_delete: "crwdns21620:0crwdne21620:0" local_payment: + validate_cart: "crwdns22119:0crwdne22119:0" offline_payment: "crwdns22006:0crwdne22006:0" about_to_cash: "crwdns22008:0crwdne22008:0" + about_to_confirm: "crwdns22121:0ITEM={ITEM}crwdne22121:0" payment_method: "crwdns22010:0crwdne22010:0" method_card: "crwdns22012:0crwdne22012:0" method_check: "crwdns22014:0crwdne22014:0" card_collection_info: "crwdns22016:0crwdne22016:0" check_collection_info: "crwdns22018:0{DEADLINES}crwdne22018:0" online_payment_disabled: "crwdns22020:0crwdne22020:0" + check_list_setting: + save: 'crwdns22123:0crwdne22123:0' + customization_of_SETTING_successfully_saved: "crwdns22125:0{SETTING}crwdne22125:0" #feature tour tour: conclusion: diff --git a/config/locales/app.logged.fr.yml b/config/locales/app.logged.fr.yml index 7de08e03f..2d55864fb 100644 --- a/config/locales/app.logged.fr.yml +++ b/config/locales/app.logged.fr.yml @@ -196,7 +196,7 @@ fr: remaining_HOURS: "Il vous reste {HOURS} heures prépayées pour {ITEM, select, Machine{cette machine} Space{cet espace} other{}}." no_hours: "Vous n'avez aucune heure prépayée pour {ITEM, select, Machine{cette machine} Space{cet espace} other{}}." buy_a_new_pack: "Acheter un nouveau pack" - unable_to_use_pack_for_subsription_is_expired: "Vous devez avoir un abonnement en cours de validité pour consommer vos heures restantes." + unable_to_use_pack_for_subsription_is_expired: "Vous devez avoir un abonnement en cours de validité pour utiliser vos heures restantes." #book a training trainings_reserve: trainings_planning: "Planning formations" diff --git a/config/locales/app.logged.zu.yml b/config/locales/app.logged.zu.yml index 64bc38500..374fb9027 100644 --- a/config/locales/app.logged.zu.yml +++ b/config/locales/app.logged.zu.yml @@ -196,7 +196,7 @@ zu: remaining_HOURS: "crwdns21934:0HOURS={HOURS}crwdnd21934:0ITEM={ITEM}crwdne21934:0" no_hours: "crwdns21936:0ITEM={ITEM}crwdne21936:0" buy_a_new_pack: "crwdns21938:0crwdne21938:0" - unable_to_use_pack_for_subsription_is_expired: "You must have a valid subscription to use your remaining hours." + unable_to_use_pack_for_subsription_is_expired: "crwdns22043:0crwdne22043:0" #book a training trainings_reserve: trainings_planning: "crwdns8767:0crwdne8767:0" diff --git a/config/locales/app.shared.de.yml b/config/locales/app.shared.de.yml index 41f2e6735..14b3494b1 100644 --- a/config/locales/app.shared.de.yml +++ b/config/locales/app.shared.de.yml @@ -125,6 +125,7 @@ de: _the_general_terms_and_conditions: "die allgemeinen Nutzungs- und Geschäftsbedingungen." payment_schedule_html: "

You're about to subscribe to a payment schedule of {DEADLINES} months.

By paying this bill, you agree to send instructions to the financial institution that issue your card, to take payments from your card account, for the whole duration of this subscription. This imply that your card data are saved by {GATEWAY} and a series of payments will be initiated on your behalf, conforming to the payment schedule previously shown.

" confirm_payment_of_: "Bezahlen: {AMOUNT}" + validate: "Validate" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Buchungsbestätigung" @@ -417,7 +418,7 @@ de: NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}" first_debit: "First debit on the day of the order." debit: "Debit on the day of the order." - view_full_schedule: "View the complete payement schedule" + view_full_schedule: "View the complete payment schedule" confirm_and_pay: "Bestätigen und bezahlen" you_have_settled_the_following_TYPE: "Sie haben die folgenden {TYPE, select, Machine{Maschinenslots} Training{Schulungen} other{Elemente}} beglichen:" you_have_settled_a_: "Sie haben beglichen" diff --git a/config/locales/app.shared.en.yml b/config/locales/app.shared.en.yml index 2d3fef2b1..0e23b125a 100644 --- a/config/locales/app.shared.en.yml +++ b/config/locales/app.shared.en.yml @@ -125,6 +125,7 @@ en: _the_general_terms_and_conditions: "the general terms and conditions." payment_schedule_html: "

You're about to subscribe to a payment schedule of {DEADLINES} months.

By paying this bill, you agree to send instructions to the financial institution that issue your card, to take payments from your card account, for the whole duration of this subscription. This imply that your card data are saved by {GATEWAY} and a series of payments will be initiated on your behalf, conforming to the payment schedule previously shown.

" confirm_payment_of_: "Pay: {AMOUNT}" + validate: "Validate" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Booking confirmation" @@ -417,7 +418,7 @@ en: NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}" first_debit: "First debit on the day of the order." debit: "Debit on the day of the order." - view_full_schedule: "View the complete payement schedule" + view_full_schedule: "View the complete payment schedule" confirm_and_pay: "Confirm and pay" you_have_settled_the_following_TYPE: "You have settled the following {TYPE, select, Machine{machine slots} Training{training} other{elements}}:" you_have_settled_a_: "You have settled a" diff --git a/config/locales/app.shared.es.yml b/config/locales/app.shared.es.yml index 828f47736..166def91b 100644 --- a/config/locales/app.shared.es.yml +++ b/config/locales/app.shared.es.yml @@ -125,6 +125,7 @@ es: _the_general_terms_and_conditions: "los términos y condiciones." payment_schedule_html: "

You're about to subscribe to a payment schedule of {DEADLINES} months.

By paying this bill, you agree to send instructions to the financial institution that issue your card, to take payments from your card account, for the whole duration of this subscription. This imply that your card data are saved by {GATEWAY} and a series of payments will be initiated on your behalf, conforming to the payment schedule previously shown.

" confirm_payment_of_: "Pay: {AMOUNT}" + validate: "Validate" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Confirmar reserva" @@ -417,7 +418,7 @@ es: NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}" first_debit: "First debit on the day of the order." debit: "Debit on the day of the order." - view_full_schedule: "View the complete payement schedule" + view_full_schedule: "View the complete payment schedule" confirm_and_pay: "Confirmar y pagar" you_have_settled_the_following_TYPE: "Acaba de seleccionar {TYPE, select, Machine{machine slots} Training{training} other{elements}}:" you_have_settled_a_: "Ha establecido una" diff --git a/config/locales/app.shared.fr.yml b/config/locales/app.shared.fr.yml index f99781860..1283efb00 100644 --- a/config/locales/app.shared.fr.yml +++ b/config/locales/app.shared.fr.yml @@ -125,6 +125,7 @@ fr: _the_general_terms_and_conditions: "les conditions générales de vente." payment_schedule_html: "

Vous êtes sur le point de souscrire à un échéancier de paiement de {DEADLINES} mois.

En payant cette facture, vous vous engagez à l'envoi d'instructions vers l'institution financière émettrice de votre carte, afin de prélever des paiements sur votre compte, pendant toute la durée de cet abonnement. Cela implique que les données de votre carte soient enregistrées par {GATEWAY} et qu'une série de paiements sera initiée en votre nom, conformément à l'échéancier de paiement précédemment affiché.

" confirm_payment_of_: "Payer : {AMOUNT}" + validate: "Valider" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Validation réservation" diff --git a/config/locales/app.shared.no.yml b/config/locales/app.shared.no.yml index 71a927347..85e02cb87 100644 --- a/config/locales/app.shared.no.yml +++ b/config/locales/app.shared.no.yml @@ -125,6 +125,7 @@ _the_general_terms_and_conditions: "generelle vilkår og betingelser." payment_schedule_html: "

Du er i ferd med å abonnere på en betalingsplan på {DEADLINES} måneder.

Ved å betale denne regningen godtar du å sende instrukser til den finansielle institusjonen som utsteder kortet, for å ta betalinger fra din kortkonto, så lenge det varer i dette abonnementet. Dette antyder at kortdataene dine lagres av {GATEWAY} og en rekke betalinger vil bli satt i gang på dine vegne, i samsvar med betalingsplanen som tidligere er vist

" confirm_payment_of_: "Betal: {AMOUNT}" + validate: "Validate" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Bestillingsbekreftelse" @@ -417,7 +418,7 @@ NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} månedlig {NUMBER, plural, one {} =1{betaling} other{betalinger}} på {AMOUNT}" first_debit: "Første debet på bestillingsdato." debit: "Første trekk på bestillingsdato." - view_full_schedule: "Vis fullstendig betalingsplan" + view_full_schedule: "View the complete payment schedule" confirm_and_pay: "Bekreft og betal" you_have_settled_the_following_TYPE: "Du har betalt for følgende {TYPE, select, Machine{maskinplasser} Training{opplæring/kurs} other{elementer}}:" you_have_settled_a_: "Du har gjort opp en" diff --git a/config/locales/app.shared.pt.yml b/config/locales/app.shared.pt.yml index 5a2fcfe07..2120b312f 100755 --- a/config/locales/app.shared.pt.yml +++ b/config/locales/app.shared.pt.yml @@ -125,6 +125,7 @@ pt: _the_general_terms_and_conditions: "os termos e condições." payment_schedule_html: "

You're about to subscribe to a payment schedule of {DEADLINES} months.

By paying this bill, you agree to send instructions to the financial institution that issue your card, to take payments from your card account, for the whole duration of this subscription. This imply that your card data are saved by {GATEWAY} and a series of payments will be initiated on your behalf, conforming to the payment schedule previously shown.

" confirm_payment_of_: "Pay: {AMOUNT}" + validate: "Validate" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "Confirmação de reserva" @@ -417,7 +418,7 @@ pt: NUMBER_monthly_payment_of_AMOUNT: "{NUMBER} monthly {NUMBER, plural, =1{payment} other{payments}} of {AMOUNT}" first_debit: "First debit on the day of the order." debit: "Debit on the day of the order." - view_full_schedule: "View the complete payement schedule" + view_full_schedule: "View the complete payment schedule" confirm_and_pay: "Confirmar e pagar" you_have_settled_the_following_TYPE: "Você liquidou o seguinte {TYPE, select, Machine{slots de máquina} Training{training} other{elements}}:" you_have_settled_a_: "Você tem liquidado:" diff --git a/config/locales/app.shared.zu.yml b/config/locales/app.shared.zu.yml index 45ef638e6..5d9067c6a 100644 --- a/config/locales/app.shared.zu.yml +++ b/config/locales/app.shared.zu.yml @@ -22,7 +22,7 @@ zu: you_will_lose_any_unsaved_modification_if_you_quit_this_page: "crwdns9405:0crwdne9405:0" you_will_lose_any_unsaved_modification_if_you_reload_this_page: "crwdns9407:0crwdne9407:0" payment_card_error: "crwdns9409:0crwdne9409:0" - payment_card_declined: "Your card was declined." + payment_card_declined: "crwdns22033:0crwdne22033:0" #user edition form user: man: "crwdns9411:0crwdne9411:0" @@ -125,6 +125,7 @@ zu: _the_general_terms_and_conditions: "crwdns21488:0crwdne21488:0" payment_schedule_html: "crwdns21490:0{DEADLINES}crwdnd21490:0{GATEWAY}crwdne21490:0" confirm_payment_of_: "crwdns21492:0{AMOUNT}crwdne21492:0" + validate: "crwdns22131:0crwdne22131:0" #dialog of on site payment for reservations valid_reservation_modal: booking_confirmation: "crwdns9587:0crwdne9587:0" @@ -417,7 +418,7 @@ zu: NUMBER_monthly_payment_of_AMOUNT: "crwdns20980:0NUMBER={NUMBER}crwdnd20980:0NUMBER={NUMBER}crwdnd20980:0AMOUNT={AMOUNT}crwdne20980:0" first_debit: "crwdns20982:0crwdne20982:0" debit: "crwdns20984:0crwdne20984:0" - view_full_schedule: "crwdns20986:0crwdne20986:0" + view_full_schedule: "crwdns22095:0crwdne22095:0" confirm_and_pay: "crwdns10057:0crwdne10057:0" you_have_settled_the_following_TYPE: "crwdns10059:0TYPE={TYPE}crwdne10059:0" you_have_settled_a_: "crwdns10061:0crwdne10061:0" diff --git a/config/locales/de.yml b/config/locales/de.yml index 9b1f32103..0d0db4abc 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -416,6 +416,10 @@ de: group: #name of the user's group for administrators admins: 'Administratoren' + cart_items: + free_extension: "Free extension of a subscription, until %{DATE}" + statistic_profile: + birthday_in_past: "The date of birth must be in the past" settings: locked_setting: "the setting is locked." about_title: "\"About\" page title" @@ -529,3 +533,5 @@ de: payzen_currency: "PayZen currency" public_agenda_module: "Public agenda module" renew_pack_threshold: "Threshold for packs renewal" + pack_only_for_subscription: "Restrict packs for subscribers" + overlapping_categories: "Categories for overlapping booking prevention" diff --git a/config/locales/en.yml b/config/locales/en.yml index bda3715f2..688e92473 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -416,6 +416,10 @@ en: group: #name of the user's group for administrators admins: 'Administrators' + cart_items: + free_extension: "Free extension of a subscription, until %{DATE}" + statistic_profile: + birthday_in_past: "The date of birth must be in the past" settings: locked_setting: "the setting is locked." about_title: "\"About\" page title" @@ -529,3 +533,5 @@ en: payzen_currency: "PayZen currency" public_agenda_module: "Public agenda module" renew_pack_threshold: "Threshold for packs renewal" + pack_only_for_subscription: "Restrict packs for subscribers" + overlapping_categories: "Categories for overlapping booking prevention" diff --git a/config/locales/es.yml b/config/locales/es.yml index 22d81b9c2..6ac0679a4 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -416,6 +416,10 @@ es: group: #name of the user's group for administrators admins: 'Administradores' + cart_items: + free_extension: "Free extension of a subscription, until %{DATE}" + statistic_profile: + birthday_in_past: "The date of birth must be in the past" settings: locked_setting: "the setting is locked." about_title: "\"About\" page title" @@ -529,3 +533,5 @@ es: payzen_currency: "PayZen currency" public_agenda_module: "Public agenda module" renew_pack_threshold: "Threshold for packs renewal" + pack_only_for_subscription: "Restrict packs for subscribers" + overlapping_categories: "Categories for overlapping booking prevention" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 047a7a593..2dcf06c18 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -416,6 +416,10 @@ fr: group: #name of the user's group for administrators admins: 'Administrateurs' + cart_items: + free_extension: "Extension gratuite d'un abonnement, jusqu'au %{DATE}" + statistic_profile: + birthday_in_past: "La date de naissance doit être dans le passé" settings: locked_setting: "le paramètre est verrouillé." about_title: "Le titre de la page \"À propos\"" @@ -529,3 +533,5 @@ fr: payzen_currency: "Devise PayZen" public_agenda_module: "Module d'agenda public" renew_pack_threshold: "Seuil de renouvellement des packs" + pack_only_for_subscription: "Restreindre les packs pour les abonnés" + overlapping_categories: "Catégories pour la prévention du chevauchement des réservations" diff --git a/config/locales/no.yml b/config/locales/no.yml index b1ac6cb9b..36a5b70d1 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -416,6 +416,10 @@ group: #name of the user's group for administrators admins: 'Administratorer' + cart_items: + free_extension: "Free extension of a subscription, until %{DATE}" + statistic_profile: + birthday_in_past: "The date of birth must be in the past" settings: locked_setting: "innstillingen er låst." about_title: "\"Om\" sidetittel" @@ -529,3 +533,5 @@ payzen_currency: "PayZen currency" public_agenda_module: "Public agenda module" renew_pack_threshold: "Threshold for packs renewal" + pack_only_for_subscription: "Restrict packs for subscribers" + overlapping_categories: "Categories for overlapping booking prevention" diff --git a/config/locales/pt.yml b/config/locales/pt.yml index 278eaf209..fbec30fa9 100755 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -416,6 +416,10 @@ pt: group: #name of the user's group for administrators admins: 'Administradores' + cart_items: + free_extension: "Free extension of a subscription, until %{DATE}" + statistic_profile: + birthday_in_past: "The date of birth must be in the past" settings: locked_setting: "the setting is locked." about_title: "\"About\" page title" @@ -529,3 +533,5 @@ pt: payzen_currency: "PayZen currency" public_agenda_module: "Public agenda module" renew_pack_threshold: "Threshold for packs renewal" + pack_only_for_subscription: "Restrict packs for subscribers" + overlapping_categories: "Categories for overlapping booking prevention" diff --git a/config/locales/zu.yml b/config/locales/zu.yml index 223d7bbac..b96924f49 100644 --- a/config/locales/zu.yml +++ b/config/locales/zu.yml @@ -416,6 +416,10 @@ zu: group: #name of the user's group for administrators admins: 'crwdns3769:0crwdne3769:0' + cart_items: + free_extension: "crwdns22091:0%{DATE}crwdne22091:0" + statistic_profile: + birthday_in_past: "crwdns22127:0crwdne22127:0" settings: locked_setting: "crwdns21632:0crwdne21632:0" about_title: "crwdns21634:0crwdne21634:0" @@ -529,3 +533,5 @@ zu: payzen_currency: "crwdns21850:0crwdne21850:0" public_agenda_module: "crwdns21874:0crwdne21874:0" renew_pack_threshold: "crwdns22032:0crwdne22032:0" + pack_only_for_subscription: "crwdns22093:0crwdne22093:0" + overlapping_categories: "crwdns22129:0crwdne22129:0" diff --git a/config/routes.rb b/config/routes.rb index ce0f73fa8..4fca0d997 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -98,7 +98,9 @@ Rails.application.routes.draw do end resources :groups, only: %i[index create update destroy] - resources :subscriptions, only: %i[show update] + resources :subscriptions, only: %i[show] do + get 'payment_details', action: 'payment_details', on: :member + end resources :plan_categories resources :plans do get 'durations', on: :collection @@ -180,10 +182,10 @@ Rails.application.routes.draw do # card payments handling ## Stripe gateway post 'stripe/confirm_payment' => 'stripe/confirm_payment' - post 'stripe/payment_schedule' => 'stripe/payment_schedule' get 'stripe/online_payment_status' => 'stripe/online_payment_status' get 'stripe/setup_intent/:user_id' => 'stripe#setup_intent' - post 'stripe/confirm_payment_schedule' => 'stripe#confirm_payment_schedule' + post 'stripe/setup_subscription' => 'stripe/setup_subscription' + post 'stripe/confirm_subscription' => 'stripe#confirm_subscription' post 'stripe/update_card' => 'stripe#update_card' ## PayZen gateway diff --git a/db/migrate/20211014135151_add_start_at_again_to_subscription.rb b/db/migrate/20211014135151_add_start_at_again_to_subscription.rb new file mode 100644 index 000000000..2a727aefc --- /dev/null +++ b/db/migrate/20211014135151_add_start_at_again_to_subscription.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +# From this migration we save again the start_at field to subscriptions (was removed in 20140703100457_change_start_at_to_expired_at_from_subscription.rb). +# This is used to schedule subscriptions start at a future date +class AddStartAtAgainToSubscription < ActiveRecord::Migration[5.2] + def change + add_column :subscriptions, :start_at, :datetime + end +end diff --git a/db/migrate/20211018121822_add_start_at_to_payment_schedule.rb b/db/migrate/20211018121822_add_start_at_to_payment_schedule.rb new file mode 100644 index 000000000..942d2a845 --- /dev/null +++ b/db/migrate/20211018121822_add_start_at_to_payment_schedule.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +# From this migration, we allow PaymentSchedules to start later, previously the started +# as soon as they were created. +class AddStartAtToPaymentSchedule < ActiveRecord::Migration[5.2] + def change + add_column :payment_schedules, :start_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index b05131656..406fda14c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2020_06_22_135401) do +ActiveRecord::Schema.define(version: 2021_10_18_121822) do # These are extensions that must be enabled in order to support this database enable_extension "fuzzystrmatch" @@ -207,6 +207,14 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.index ["user_id"], name: "index_exports_on_user_id" end + create_table "footprint_debugs", force: :cascade do |t| + t.string "footprint" + t.string "data" + t.string "klass" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "friendly_id_slugs", id: :serial, force: :cascade do |t| t.string "slug", null: false t.integer "sluggable_id", null: false @@ -274,21 +282,20 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do create_table "invoice_items", id: :serial, force: :cascade do |t| t.integer "invoice_id" - t.string "stp_invoice_item_id" t.integer "amount" t.datetime "created_at" t.datetime "updated_at" t.text "description" - t.integer "subscription_id" t.integer "invoice_item_id" t.string "footprint" + t.string "object_type" + t.bigint "object_id" + t.boolean "main" t.index ["invoice_id"], name: "index_invoice_items_on_invoice_id" + t.index ["object_type", "object_id"], name: "index_invoice_items_on_object_type_and_object_id" end create_table "invoices", id: :serial, force: :cascade do |t| - t.integer "invoiced_id" - t.string "invoiced_type" - t.string "stp_invoice_id" t.integer "total" t.datetime "created_at" t.datetime "updated_at" @@ -307,7 +314,6 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.integer "invoicing_profile_id" t.integer "operator_profile_id" t.integer "statistic_profile_id" - t.string "stp_payment_intent_id" t.index ["coupon_id"], name: "index_invoices_on_coupon_id" t.index ["invoice_id"], name: "index_invoices_on_invoice_id" t.index ["invoicing_profile_id"], name: "index_invoices_on_invoicing_profile_id" @@ -421,6 +427,73 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.index ["invoicing_profile_id"], name: "index_organizations_on_invoicing_profile_id" end + create_table "payment_gateway_objects", force: :cascade do |t| + t.string "gateway_object_id" + t.string "gateway_object_type" + t.string "item_type" + t.bigint "item_id" + t.bigint "payment_gateway_object_id" + t.index ["item_type", "item_id"], name: "index_payment_gateway_objects_on_item_type_and_item_id" + t.index ["payment_gateway_object_id"], name: "index_payment_gateway_objects_on_payment_gateway_object_id" + end + + create_table "payment_schedule_items", force: :cascade do |t| + t.integer "amount" + t.datetime "due_date" + t.string "state", default: "new" + t.jsonb "details", default: "{}" + t.string "payment_method" + t.string "client_secret" + t.bigint "payment_schedule_id" + t.bigint "invoice_id" + t.string "footprint" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["invoice_id"], name: "index_payment_schedule_items_on_invoice_id" + t.index ["payment_schedule_id"], name: "index_payment_schedule_items_on_payment_schedule_id" + end + + create_table "payment_schedule_objects", force: :cascade do |t| + t.string "object_type" + t.bigint "object_id" + t.bigint "payment_schedule_id" + t.boolean "main" + t.string "footprint" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["object_type", "object_id"], name: "index_payment_schedule_objects_on_object_type_and_object_id" + t.index ["payment_schedule_id"], name: "index_payment_schedule_objects_on_payment_schedule_id" + end + + create_table "payment_schedules", force: :cascade do |t| + t.integer "total" + t.string "reference" + t.string "payment_method" + t.integer "wallet_amount" + t.bigint "wallet_transaction_id" + t.bigint "coupon_id" + t.string "footprint" + t.string "environment" + t.bigint "invoicing_profile_id" + t.bigint "statistic_profile_id" + t.bigint "operator_profile_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.datetime "start_at" + t.index ["coupon_id"], name: "index_payment_schedules_on_coupon_id" + t.index ["invoicing_profile_id"], name: "index_payment_schedules_on_invoicing_profile_id" + t.index ["operator_profile_id"], name: "index_payment_schedules_on_operator_profile_id" + t.index ["statistic_profile_id"], name: "index_payment_schedules_on_statistic_profile_id" + t.index ["wallet_transaction_id"], name: "index_payment_schedules_on_wallet_transaction_id" + end + + create_table "plan_categories", force: :cascade do |t| + t.string "name" + t.integer "weight" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + create_table "plans", id: :serial, force: :cascade do |t| t.string "name" t.integer "amount" @@ -438,7 +511,10 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.integer "interval_count", default: 1 t.string "slug" t.boolean "disabled" + t.boolean "monthly_payment" + t.bigint "plan_category_id" t.index ["group_id"], name: "index_plans_on_group_id" + t.index ["plan_category_id"], name: "index_plans_on_plan_category_id" end create_table "plans_availabilities", id: :serial, force: :cascade do |t| @@ -448,6 +524,21 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.index ["plan_id"], name: "index_plans_availabilities_on_plan_id" end + create_table "prepaid_packs", force: :cascade do |t| + t.string "priceable_type" + t.bigint "priceable_id" + t.bigint "group_id" + t.integer "amount" + t.integer "minutes" + t.string "validity_interval" + t.integer "validity_count" + t.boolean "disabled" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["group_id"], name: "index_prepaid_packs_on_group_id" + t.index ["priceable_type", "priceable_id"], name: "index_prepaid_packs_on_priceable_type_and_priceable_id" + end + create_table "price_categories", id: :serial, force: :cascade do |t| t.string "name" t.text "conditions" @@ -531,6 +622,8 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.string "slug" t.datetime "published_at" t.integer "author_statistic_profile_id" + t.tsvector "search_vector" + t.index ["search_vector"], name: "projects_search_vector_idx", using: :gin t.index ["slug"], name: "index_projects_on_slug", unique: true end @@ -671,6 +764,17 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.boolean "ca", default: true end + create_table "statistic_profile_prepaid_packs", force: :cascade do |t| + t.bigint "prepaid_pack_id" + t.bigint "statistic_profile_id" + t.integer "minutes_used", default: 0 + t.datetime "expires_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["prepaid_pack_id"], name: "index_statistic_profile_prepaid_packs_on_prepaid_pack_id" + t.index ["statistic_profile_id"], name: "index_statistic_profile_prepaid_packs_on_statistic_profile_id" + end + create_table "statistic_profile_trainings", id: :serial, force: :cascade do |t| t.integer "statistic_profile_id" t.integer "training_id" @@ -729,12 +833,12 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do create_table "subscriptions", id: :serial, force: :cascade do |t| t.integer "plan_id" - t.string "stp_subscription_id" t.datetime "created_at" t.datetime "updated_at" t.datetime "expiration_date" t.datetime "canceled_at" t.integer "statistic_profile_id" + t.datetime "start_at" t.index ["plan_id"], name: "index_subscriptions_on_plan_id" t.index ["statistic_profile_id"], name: "index_subscriptions_on_statistic_profile_id" end @@ -827,7 +931,6 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do t.datetime "updated_at" t.boolean "is_allow_contact", default: true t.integer "group_id" - t.string "stp_customer_id" t.string "username" t.string "slug" t.boolean "is_active", default: true @@ -868,15 +971,12 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do create_table "wallet_transactions", id: :serial, force: :cascade do |t| t.integer "wallet_id" - t.integer "transactable_id" - t.string "transactable_type" t.string "transaction_type" t.integer "amount" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "invoicing_profile_id" t.index ["invoicing_profile_id"], name: "index_wallet_transactions_on_invoicing_profile_id" - t.index ["transactable_type", "transactable_id"], name: "index_wallet_transactions_on_transactable" t.index ["wallet_id"], name: "index_wallet_transactions_on_wallet_id" end @@ -909,6 +1009,17 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do add_foreign_key "o_auth2_mappings", "o_auth2_providers" add_foreign_key "open_api_calls_count_tracings", "open_api_clients" add_foreign_key "organizations", "invoicing_profiles" + add_foreign_key "payment_gateway_objects", "payment_gateway_objects" + add_foreign_key "payment_schedule_items", "invoices" + add_foreign_key "payment_schedule_items", "payment_schedules" + add_foreign_key "payment_schedule_objects", "payment_schedules" + add_foreign_key "payment_schedules", "coupons" + add_foreign_key "payment_schedules", "invoicing_profiles" + add_foreign_key "payment_schedules", "invoicing_profiles", column: "operator_profile_id" + add_foreign_key "payment_schedules", "statistic_profiles" + add_foreign_key "payment_schedules", "wallet_transactions" + add_foreign_key "plans", "plan_categories" + add_foreign_key "prepaid_packs", "groups" add_foreign_key "prices", "groups" add_foreign_key "prices", "plans" add_foreign_key "project_steps", "projects" @@ -929,6 +1040,8 @@ ActiveRecord::Schema.define(version: 2020_06_22_135401) do add_foreign_key "spaces_availabilities", "availabilities" add_foreign_key "spaces_availabilities", "spaces" add_foreign_key "statistic_custom_aggregations", "statistic_types" + add_foreign_key "statistic_profile_prepaid_packs", "prepaid_packs" + add_foreign_key "statistic_profile_prepaid_packs", "statistic_profiles" add_foreign_key "statistic_profile_trainings", "statistic_profiles" add_foreign_key "statistic_profile_trainings", "trainings" add_foreign_key "statistic_profiles", "groups" diff --git a/db/seeds.rb b/db/seeds.rb index d25f4e9d6..73c9ff89e 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -901,6 +901,10 @@ Setting.set('renew_pack_threshold', 0.2) unless Setting.find_by(name: 'renew_pac Setting.set('pack_only_for_subscription', true) unless Setting.find_by(name: 'pack_only_for_subscription').try(:value) +unless Setting.find_by(name: 'overlapping_categories').try(:value) + Setting.set('overlapping_categories', 'training_reservations,machine_reservations,space_reservations,events_reservations') +end + if StatisticCustomAggregation.count.zero? # available reservations hours for machines machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2) diff --git a/doc/README.md b/doc/README.md index 8c6aa6266..8775de5ee 100644 --- a/doc/README.md +++ b/doc/README.md @@ -26,10 +26,12 @@ The following guides are designed for the people that perform software maintenan - [Advanced PostgreSQL usage](postgresql_readme.md) -- [Connecting a SSO using oAuth 2.0](sso_with_github.md) +- [Connecting an SSO using oAuth 2.0](sso_with_github.md) - [Upgrade from Fab-manager v1.0](upgrade_v1.md) +- [Configuring OpenProjects](open_projects.md) + #### Upgrades procedures - [PostgreSQL](postgres_upgrade.md) - [ElasticSearch](elastic_upgrade.md) @@ -43,6 +45,8 @@ The following guides should help those who want to contribute to the code. #### Architecture - [Code architecture](architecture.md) +- [Plugins](plugins.md) + #### How to setup a development environment - [With docker-compose](development_readme.md) diff --git a/doc/open_projects.md b/doc/open_projects.md new file mode 100644 index 000000000..cd8eab990 --- /dev/null +++ b/doc/open_projects.md @@ -0,0 +1,18 @@ +# Open Projects + +**This configuration is optional.** + +You can configure your Fab-manager to synchronize every project with the [Open Projects platform](https://github.com/sleede/openlab-projects). +It's very simple and straightforward and in return, your users will be able to search over projects from all Fab-manager instances from within your platform. +The deal is fair, you share your projects and as reward you benefits from projects of the whole community. + +If you want to try it, you can visit [this Fab-manager](https://fablab.lacasemate.fr/#!/projects) and see projects from different Fab-managers. + +To start using this awesome feature, there are a few steps: +- send a mail to **contact@fab-manager.com** asking for your Open Projects client's credentials and giving them the name and the URL of your Fab-manager, they will give you an `App ID` and a `secret` +- fill in the value of the keys in Admin > Projects > Settings > Projects sharing +- export your projects to open-projects (if you already have projects created on your Fab-manager, unless you can skip that part) executing this command: `bundle exec rails fablab:openlab:bulk_export` + +**IMPORTANT: please run your server in production mode.** + +Go to your projects gallery and enjoy seeing your projects available from everywhere ! That's all. diff --git a/doc/plugins.md b/doc/plugins.md new file mode 100644 index 000000000..7c87f9ca9 --- /dev/null +++ b/doc/plugins.md @@ -0,0 +1,13 @@ +# Plugins + +Fab-manager has a system of plugins mainly inspired by [Discourse](https://github.com/discourse/discourse) architecture. + +It enables you to write plugins which can: +- have its proper models and database tables +- have its proper assets (js & css) +- override existing behaviours of Fab-manager +- add features by adding views, controllers, ect... + +To install a plugin, you just have to copy the plugin folder which contains its code into the folder `plugins` of Fab-manager. + +You can see an example on the [repo of navinum gamification plugin](https://github.com/sleede/navinum-gamification) diff --git a/doc/production_readme.md b/doc/production_readme.md index 741453936..cb76da9b8 100644 --- a/doc/production_readme.md +++ b/doc/production_readme.md @@ -13,7 +13,7 @@ You will need to be root through the rest of the setup. 1.3. [Connect through SSH](#connect-through-ssh)
1.4. [Prepare the server](#prepare-the-server)
2. [Install Fab-manager](#install-fab-manager)
-3. [Docker utils](#docker-utils) +3. [Useful commands](#useful-commands) 4. [Update Fab-manager](#update-fab-manager)
4.1. [Scripted update](#scripted-update)
4.2. [Update manually](#update-manually)
@@ -29,36 +29,34 @@ You will need to be root through the rest of the setup. ### Setup the server -There are many hosting providers on the internet, providing affordable virtual private serveurs (VPS). -Here's a non exhaustive list: -- [DigitalOcean](https://www.digitalocean.com/pricing/#droplet) -- [OVH](https://www.ovh.com/fr/vps/) -- [Amazon](https://aws.amazon.com/fr/ec2/) -- [Gandi](https://v4.gandi.net/hebergement/serveur/prix) -- [Ikoula](https://express.ikoula.com/fr/serveur-virtuel) -- [1&1](https://www.1and1.fr/serveurs-virtuels) -- [GoDaddy](https://fr.godaddy.com/hosting/vps-hosting) -- [and many others...](https://www.google.fr/search?q=vps+hosting) - +There are [many hosting providers](https://duckduckgo.com/?q=vps+hosting) on the internet, providing affordable virtual private serveurs (VPS). Choose one, depending on your budget, on the server's location, on the uptime guarantee, etc. -You will need at least 2GB of addressable memory (RAM + swap) to install and use Fab-manager. -We recommend 4 GB RAM for larger communities. +#### System requirements +##### Memory + +If you do not plan to use the statistics module, you will need at least 2 GB of addressable memory (RAM + swap) to install and use Fab-manager. +We recommend 4 GB of RAM to take full advantage of Fab-manager and be able to use the statistics module. +If you have a large community (~ 200 active membres), we recommend 4 GB of RAM, even without the statistics module. + +During the installation and the upgrades, the assets' compilation phase may fail if you do not have sufficient available memory. + +##### CPU and Operating system Supported operating systems are Ubuntu LTS 16.04+ and Debian 8+ with an x86 64-bits architecture. This might work on other linux systems, and CPU architectures but this is untested for now, and we do not recommend for production purposes. -Choose one and install docker on it: -- Install [Docker on Debian](https://docs.docker.com/engine/installation/linux/docker-ce/debian/) -- Install [Docker on Ubuntu](https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/) +#### Software requirements +`curl` and `bash` are needed to retrieve and run the automated deployment scripts. +Then the various scripts will check for their own dependencies. -Then install [Docker Compose](https://docs.docker.com/compose/install/) +Moreover, the main software dependencies to run fab-manager are [Docker](https://docs.docker.com/engine/installation/linux/docker-ce/debian/) and [Docker Compose](https://docs.docker.com/compose/install/) +They can be easily installed using the [`prepare-vps.sleede.com` script below](#prepare-the-server). ### Set up the domain name -There are many domain name registrars on the internet, you may choose one that fit your needs. -You can find an exhaustive list [on the ICANN website](https://www.icann.org/registrar-reports/accredited-list.html) +There are [many domain name registrars](https://duckduckgo.com/?q=register+domain+name) on the internet, choose one that fit your needs. 1. Once done, buy a domain name on it 2. Replace the IP address of the domain with the IP address of your VPS (This is a DNS record of **type A**) @@ -113,8 +111,8 @@ docker-compose down && docker-compose up -d Disabling ElasticSearch will save up to 800 Mb of memory. - -## Docker utils + +## Useful commands Below, you'll find a collection of useful commands to control your instance with docker-compose. Before using any of these commands, you must first `cd` into the app directory. @@ -122,15 +120,19 @@ Before using any of these commands, you must first `cd` into the app directory. ```bash docker-compose down && docker-compose up -d ``` -- Open a bash prompt in the app context +- Open a bash prompt inside the app container ```bash docker-compose exec fabmanager bash ``` +- Open the ruby console in the application +```bash +\curl -sSL run.fab.mn | bash +``` - Show services status ```bash docker-compose ps ``` -- Example of command passing env variables +- Run a command and provide it environment variables ```bash docker-compose run --rm -e VAR1=xxx -e VAR2=xxx fabmanager bundle exec rails my:command ``` diff --git a/doc/sso_with_github.md b/doc/sso_with_github.md index ee61dcf76..26b92fee2 100644 --- a/doc/sso_with_github.md +++ b/doc/sso_with_github.md @@ -33,6 +33,8 @@ For this guide, we will use [GitHub](https://developer.github.com/v3/oauth/) as - **Client identifier**: Your Client ID, collected just before. - **Client secret**: Your Client Secret, collected just before. +Please note that in some cases we'll encounter an issue unless the **common URL** must only contain the root domain (e.g. `http://github.com`), and the other parts of the URL must go to **Authorization endpoint** (e.g. `/login/oauth/authorize`) and **Token Acquisition Endpoint** (e.g. `/login/oauth/access_token`). + - Then you will need to define the matching of the fields between the Fab-manager and what the external SSO can provide. Please note that the only mandatory field is `User.uid`. To continue with our GitHub example, you will need to look at [this documentation page](https://developer.github.com/v3/users/#get-the-authenticated-user) to know witch field can be mapped and how, and [this one](https://developer.github.com/v3/) to know the root URL of the API. @@ -59,7 +61,7 @@ rails fablab:auth:switch_provider[GitHub] - As the command just prompted you, you have to re-compile the assets - In development, `rails tmp:clear` will do the job. - - In production with Docker, `rm -rf public/assets`, followed by `docker-compose run --rm fabmanager bundle exec rails assets:precompile` + - In production with Docker, `rm -rf public/packs`, followed by `docker-compose run --rm fabmanager bundle exec rails assets:precompile` - Then restart the web-server or the container. - Finally, to notify all existing users about the change (and send them their migration code/link), run: ```bash diff --git a/lib/integrity/checksum.rb b/lib/integrity/checksum.rb index a48bffefe..e0667ead3 100644 --- a/lib/integrity/checksum.rb +++ b/lib/integrity/checksum.rb @@ -9,20 +9,25 @@ class Integrity::Checksum def code dir = Dir.pwd - files = children_files("#{dir}/*") - .concat(children_files("#{dir}/app/**/*")) - .concat(children_files("#{dir}/bin/**/*")) - .concat(children_files("#{dir}/config/**/*")) - .concat(children_files("#{dir}/db/**/*")) - .concat(children_files("#{dir}/doc/**/*")) - .concat(children_files("#{dir}/docker/**/*")) - .concat(children_files("#{dir}/lib/**/*")) - .concat(children_files("#{dir}/node_modules/**/*")) - .concat(children_files("#{dir}/plugins/**/*")) - .concat(children_files("#{dir}/provision/**/*")) - .concat(children_files("#{dir}/scripts/**/*")) - .concat(children_files("#{dir}/test/**/*")) - .concat(children_files("#{dir}/vendor/**/*")) + files = if Rails.env.test? + # in test mode, we compute a "lite" checksum to speed-up test running time + children_files("#{dir}/*") + else + children_files("#{dir}/*") + .concat(children_files("#{dir}/app/**/*")) + .concat(children_files("#{dir}/bin/**/*")) + .concat(children_files("#{dir}/config/**/*")) + .concat(children_files("#{dir}/db/**/*")) + .concat(children_files("#{dir}/doc/**/*")) + .concat(children_files("#{dir}/docker/**/*")) + .concat(children_files("#{dir}/lib/**/*")) + .concat(children_files("#{dir}/node_modules/**/*")) + .concat(children_files("#{dir}/plugins/**/*")) + .concat(children_files("#{dir}/provision/**/*")) + .concat(children_files("#{dir}/scripts/**/*")) + .concat(children_files("#{dir}/test/**/*")) + .concat(children_files("#{dir}/vendor/**/*")) + end content = files.map { |f| File.read(f) }.join diff --git a/lib/pay_zen/service.rb b/lib/pay_zen/service.rb index b09678bd8..35f2fc4a2 100644 --- a/lib/pay_zen/service.rb +++ b/lib/pay_zen/service.rb @@ -10,7 +10,7 @@ module PayZen; end ## create remote objects on PayZen class PayZen::Service < Payment::Service - def create_subscription(payment_schedule, order_id) + def create_subscription(payment_schedule, order_id, *args) first_item = payment_schedule.ordered_items.first order = PayZen::Order.new.get(order_id, operation_type: 'VERIFICATION') @@ -18,14 +18,14 @@ class PayZen::Service < Payment::Service token_id = order['answer']['transactions'].first['paymentMethodToken'] params = { - amount: first_item.details['recurring'].to_i, + amount: payzen_amount(first_item.details['recurring'].to_i), effect_date: first_item.due_date.iso8601, payment_method_token: token_id, rrule: rrule(payment_schedule), order_id: order_id } unless first_item.details['adjustment']&.zero? && first_item.details['other_items']&.zero? - params[:initial_amount] = first_item.amount + params[:initial_amount] = payzen_amount(first_item.amount) params[:initial_amount_number] = 1 end pz_subscription = client.create_subscription(params) @@ -81,6 +81,14 @@ class PayZen::Service < Payment::Service end end + def payzen_amount(amount) + currency = Setting.get('payzen_currency') + return amount / 100 if zero_decimal_currencies.any? { |s| s.casecmp(currency).zero? } + return amount * 10 if three_decimal_currencies.any? { |s| s.casecmp(currency).zero? } + + amount + end + private def rrule(payment_schedule) @@ -96,4 +104,13 @@ class PayZen::Service < Payment::Service transaction_date >= payment_schedule_item.due_date.to_date && transaction_date <= payment_schedule_item.due_date.to_date + 7.days end + + # @see https://payzen.io/en-EN/payment-file/ips/list-of-supported-currencies.html + def zero_decimal_currencies + %w[KHR JPY KRW XOF XPF] + end + + def three_decimal_currencies + %w[KWD TND] + end end diff --git a/lib/payment/service.rb b/lib/payment/service.rb index 4437328e8..0d050becb 100644 --- a/lib/payment/service.rb +++ b/lib/payment/service.rb @@ -6,7 +6,7 @@ module Payment; end # Abstract class that must be implemented by each payment gateway. # Provides methods to create remote objects on the payment gateway class Payment::Service - def create_subscription(_payment_schedule, _gateway_object_id); end + def create_subscription(_payment_schedule, *args); end def create_user(_user_id); end diff --git a/lib/stripe/item.rb b/lib/stripe/item.rb index 903ea497b..a81e2c671 100644 --- a/lib/stripe/item.rb +++ b/lib/stripe/item.rb @@ -15,7 +15,7 @@ class Stripe::Item < Payment::Item end def payment_mean? - klass == 'Stripe::SetupIntent' + klass == 'Stripe::PaymentMethod' end def subscription? diff --git a/lib/stripe/service.rb b/lib/stripe/service.rb index 71a0eeb2b..65744e2db 100644 --- a/lib/stripe/service.rb +++ b/lib/stripe/service.rb @@ -7,34 +7,19 @@ module Stripe; end ## create remote objects on stripe class Stripe::Service < Payment::Service - # Create the provided PaymentSchedule on Stripe, using the Subscription API - def create_subscription(payment_schedule, subscription_id) - stripe_key = Setting.get('stripe_secret_key') - handle_wallet_transaction(payment_schedule) + # Build the subscription base on the given shopping cart and create it on the remote stripe API + def subscribe(payment_method_id, shopping_cart) + price_details = shopping_cart.total - stp_subscription = Stripe::Subscription.retrieve(subscription_id, api_key: stripe_key) - pgo = PaymentGatewayObject.new(item: payment_schedule) - pgo.gateway_object = stp_subscription - pgo.save! - end - - def pay_subscription(payment_schedule, payment_method_id) - stripe_key = Setting.get('stripe_secret_key') - first_item = payment_schedule.payment_schedule_items.min_by(&:due_date) - - main_object = payment_schedule.payment_schedule_objects.find(&:main) - case main_object.object_type - when Reservation.name - subscription = payment_schedule.payment_schedule_objects.find { |pso| pso.object_type == Subscription.name }.object - reservable_stp_id = main_object.object.reservable&.payment_gateway_object&.gateway_object_id - when Subscription.name - subscription = main_object.object - reservable_stp_id = nil - else - raise InvalidSubscriptionError - end + payment_schedule = price_details[:schedule][:payment_schedule] + payment_schedule.payment_schedule_items = price_details[:schedule][:items] + first_item = price_details[:schedule][:items].min_by(&:due_date) + subscription = shopping_cart.items.find { |item| item.class == CartItem::Subscription }.to_object + reservable_stp_id = shopping_cart.items.find { |item| item.is_a?(CartItem::Reservation) }&.to_object + &.reservable&.payment_gateway_object&.gateway_object_id + WalletService.debit_user_wallet(payment_schedule, shopping_cart.customer, transaction: false) handle_wallet_transaction(payment_schedule) price = create_price(first_item.details['recurring'], @@ -43,17 +28,19 @@ class Stripe::Service < Payment::Service # other items (not recurring) items = subscription_invoice_items(payment_schedule, subscription, first_item, reservable_stp_id) - Stripe::Subscription.create({ - customer: payment_schedule.invoicing_profile.user.payment_gateway_object.gateway_object_id, - cancel_at: (payment_schedule.payment_schedule_items.max_by(&:due_date).due_date + 1.month).to_i, - add_invoice_items: items, - coupon: payment_schedule.coupon&.code, - items: [ - { price: price[:id] } - ], - default_payment_method: payment_method_id, - expand: %w[latest_invoice.payment_intent] - }, { api_key: stripe_key }) + create_remote_subscription(shopping_cart, payment_schedule, items, price, payment_method_id) + end + + def create_subscription(payment_schedule, stp_object_id, stp_object_type) + stripe_key = Setting.get('stripe_secret_key') + + stp_subscription = Stripe::Item.new(stp_object_type, stp_object_id).retrieve + + payment_method_id = Stripe::Customer.retrieve(stp_subscription.customer, api_key: stripe_key).invoice_settings.default_payment_method + payment_method = Stripe::PaymentMethod.retrieve(payment_method_id, api_key: stripe_key) + pgo = PaymentGatewayObject.new(item: payment_schedule) + pgo.gateway_object = payment_method + pgo.save! end def create_user(user_id) @@ -145,8 +132,64 @@ class Stripe::Service < Payment::Service { status: stp_invoice.status, error: e } end + def attach_method_as_default(payment_method_id, customer_id) + stripe_key = Setting.get('stripe_secret_key') + + # attach the payment method to the given customer + method = Stripe::PaymentMethod.attach( + payment_method_id, + { customer: customer_id }, + { api_key: stripe_key } + ) + # then set it as the default payment method for this customer + Stripe::Customer.update( + customer_id, + { invoice_settings: { default_payment_method: payment_method_id } }, + { api_key: stripe_key } + ) + method + end + private + + # Create the provided PaymentSchedule on Stripe, using the Subscription API + def create_remote_subscription(shopping_cart, payment_schedule, items, price, payment_method_id) + stripe_key = Setting.get('stripe_secret_key') + if payment_schedule.start_at.nil? + Stripe::Subscription.create({ + customer: shopping_cart.customer.payment_gateway_object.gateway_object_id, + cancel_at: (payment_schedule.payment_schedule_items.max_by(&:due_date).due_date + 1.month).to_i, + add_invoice_items: items, + coupon: payment_schedule.coupon&.code, + items: [ + { price: price[:id] } + ], + default_payment_method: payment_method_id, + expand: %w[latest_invoice.payment_intent] + }, { api_key: stripe_key }) + else + Stripe::SubscriptionSchedule.create({ + customer: shopping_cart.customer.payment_gateway_object.gateway_object_id, + start_date: payment_schedule.start_at.to_i, + end_behavior: 'cancel', + phases: [ + { + items: [ + { price: price[:id] } + ], + add_invoice_items: items, + coupon: payment_schedule.coupon&.code, + default_payment_method: payment_method_id, + end_date: ( + payment_schedule.payment_schedule_items.max_by(&:due_date).due_date + 1.month + ).to_i + } + ] + }, { api_key: stripe_key }) + end + end + def subscription_invoice_items(payment_schedule, subscription, first_item, reservable_stp_id) second_item = payment_schedule.payment_schedule_items.sort_by(&:due_date)[1] diff --git a/package.json b/package.json index 1561dc5db..c967a2f55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fab-manager", - "version": "5.1.10", + "version": "5.1.11", "description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.", "keywords": [ "fablab", @@ -21,10 +21,17 @@ }, "license": "AGPL-3.0-only", "devDependencies": { - "@pmmmwh/react-refresh-webpack-plugin": "^0.4.2", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-runtime": "^7.15.0", + "@babel/preset-env": "^7.15.6", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.1", "@typescript-eslint/eslint-plugin": "^4.28.1", "@typescript-eslint/parser": "^4.28.1", "auto-ngtemplate-loader": "^3.1.0", + "babel-loader": "^8.2.2", "eslint": "~6.8.0", "eslint-config-standard": "~14.1.1", "eslint-plugin-import": "~2.20.1", @@ -36,7 +43,7 @@ "html-loader": "^1.3.0", "ngtemplate-loader": "^2.1.0", "rails-erb-loader": "^5.5.2", - "react-refresh": "^0.9.0", + "react-refresh": "^0.10.0", "resolve-url-loader": "^4.0.0", "webpack": "^4.44.1", "webpack-dev-server": "^3.11.0" @@ -48,7 +55,7 @@ "@claviska/jquery-minicolors": "^2.3.5", "@fortawesome/fontawesome-free": "5.14.0", "@lyracom/embedded-form-glue": "^0.3.3", - "@rails/webpacker": "5.4.0", + "@rails/webpacker": "5.4.3", "@stripe/react-stripe-js": "^1.4.0", "@stripe/stripe-js": "^1.13.2", "@types/react": "^17.0.3", @@ -83,7 +90,7 @@ "angular-ui-tour": "https://github.com/sleede/angular-ui-tour.git#master", "angular-unsavedchanges": "0.2", "angular-xeditable": "0.10", - "axios": "^0.21.1", + "axios": "^0.21.2", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", "bootstrap-sass": "3.4.1", "checklist-model": "0.2", @@ -95,7 +102,7 @@ "i18next": "^19.8.3", "i18next-http-backend": "^1.0.21", "i18next-icu": "^1.4.2", - "immer": "^9.0.1", + "immer": "^9.0.6", "jasny-bootstrap": "3.1", "jquery": ">=3.5.0", "jquery-ujs": "^1.2.2", diff --git a/setup/upgrade.sh b/setup/upgrade.sh index 1c9fb469d..ab0f9c48f 100644 --- a/setup/upgrade.sh +++ b/setup/upgrade.sh @@ -89,6 +89,11 @@ target_version() if [[ "$TAG" =~ ^:release-v[\.0-9]+$ ]]; then TARGET=$(echo "$TAG" | grep -Eo '[\.0-9]{5}') elif [ "$TAG" = ":latest" ] || [ "$TAG" = "" ]; then + HTTP_CODE=$(curl -I -s -w "%{http_code}\n" -o /dev/null https://hub.fab-manager.com/api/versions/latest) + if [ "$HTTP_CODE" != 200 ]; then + printf "\n\n\e[91m[ ❌ ] Unable to retrieve the last version of Fab-manager. Please check your internet connection or restart this script providing the \e[1m-t\e[0m\e[91m option\n\e[39m" + exit 3 + fi TARGET=$(\curl -sSL "https://hub.fab-manager.com/api/versions/latest" | jq -r '.semver') else TARGET='custom' @@ -120,8 +125,8 @@ version_check() version_error "v4.0.4 first" elif verlt "$VERSION" 4.4.6 && verlt 4.4.6 "$TARGET"; then version_error "v4.4.6 first" - elif verlt "$VERSION" 4.7.13 && verlt 4.7.13 "$TARGET"; then - version_error "v4.7.13 first" + elif verlt "$VERSION" 4.7.14 && verlt 4.7.14 "$TARGET"; then + version_error "v4.7.14 first" elif verlt "$TARGET" "$VERSION"; then version_error "a version > $VERSION" fi @@ -131,8 +136,14 @@ add_environments() { for ENV in "${ENVIRONMENTS[@]}"; do if [[ "$ENV" =~ ^[A-Z0-9_]+=.*$ ]]; then - printf "\e[91m::\e[0m \e[1mInserting variable %s..\e[0m.\n" "$ENV" - printf "# added on %s\n%s\n" "$(date +%Y-%m-%d\ %R)" "$ENV" >> "config/env" + local var=$(echo "$ENV" | cut -d '=' -f1) + grep "$var" ./config/env + if [[ "$?" = 1 ]]; then + printf "\e[91m::\e[0m \e[1mInserting variable %s..\e[0m.\n" "$ENV" + printf "# added on %s\n%s\n" "$(date +%Y-%m-%d\ %R)" "$ENV" >> "config/env" + else + printf "\e[93m[ ⚠ ] %s is already defined in config/env, ignoring...\e[39m\n" "$var" + fi else printf "\e[93m[ ⚠ ] Ignoring invalid option: -e %s.\e[39m\n Given value is not valid environment variable, please see http://env.doc.fab.mn\n" "$ENV" fi diff --git a/test/integration/reservations/create_test.rb b/test/integration/reservations/create_test.rb index f49304bd3..415b9799b 100644 --- a/test/integration/reservations/create_test.rb +++ b/test/integration/reservations/create_test.rb @@ -705,36 +705,10 @@ class Reservations::CreateTest < ActionDispatch::IntegrationTest plan = Plan.find_by(group_id: @user_without_subscription.group.id, type: 'Plan', base_name: 'Abonnement mensualisable') VCR.use_cassette('reservations_training_subscription_with_payment_schedule') do - post '/api/stripe/payment_schedule', + post '/api/stripe/setup_subscription', params: { payment_method_id: stripe_payment_method, cart_items: { - items: [ - { - subscription: { - plan_id: plan.id - } - } - ], - payment_schedule: true, - payment_method: 'cart' - } - }.to_json, headers: default_headers - - # Check response format & status - assert_equal 200, response.status, response.body - assert_equal Mime[:json], response.content_type - - # Check the response - sub = json_response(response.body) - assert_not_nil sub[:id] - - post '/api/stripe/confirm_payment_schedule', - params: { - subscription_id: sub[:id], - cart_items: { - payment_schedule: true, - payment_method: 'card', items: [ { reservation: { @@ -754,9 +728,19 @@ class Reservations::CreateTest < ActionDispatch::IntegrationTest plan_id: plan.id } } - ] + ], + payment_schedule: true, + payment_method: 'cart' } }.to_json, headers: default_headers + + # Check response format & status + assert_equal 201, response.status, response.body + assert_equal Mime[:json], response.content_type + + # Check the response + sub = json_response(response.body) + assert_not_nil sub[:id] end # Check response format & status @@ -809,37 +793,10 @@ class Reservations::CreateTest < ActionDispatch::IntegrationTest plan = Plan.find_by(group_id: user.group.id, type: 'Plan', base_name: 'Abonnement mensualisable') VCR.use_cassette('reservations_machine_subscription_with_payment_schedule_coupon_wallet') do - post '/api/stripe/payment_schedule', + post '/api/stripe/setup_subscription', params: { payment_method_id: stripe_payment_method, cart_items: { - items: [ - { - subscription: { - plan_id: plan.id - } - } - ], - payment_schedule: true, - payment_method: 'cart' - } - }.to_json, headers: default_headers - - # Check response format & status - assert_equal 200, response.status, response.body - assert_equal Mime[:json], response.content_type - - # Check the response - res = json_response(response.body) - assert_not_nil res[:id] - - post '/api/stripe/confirm_payment_schedule', - params: { - subscription_id: res[:id], - cart_items: { - coupon_code: 'GIME3EUR', - payment_schedule: true, - payment_method: 'card', items: [ { reservation: { @@ -859,14 +816,22 @@ class Reservations::CreateTest < ActionDispatch::IntegrationTest plan_id: plan.id } } - ] + ], + payment_schedule: true, + payment_method: 'card', + coupon_code: 'GIME3EUR' } }.to_json, headers: default_headers + + # Check response format & status + assert_equal 201, response.status, response.body + assert_equal Mime[:json], response.content_type + + # Check the response + res = json_response(response.body) + assert_not_nil res[:id] end - # Check response format & status - assert_equal 201, response.status, response.body - assert_equal Mime[:json], response.content_type assert_equal reservations_count + 1, Reservation.count, 'missing the reservation' assert_equal invoice_count, Invoice.count, "an invoice was generated but it shouldn't" assert_equal invoice_items_count, InvoiceItem.count, "some invoice items were generated but they shouldn't" @@ -896,7 +861,7 @@ class Reservations::CreateTest < ActionDispatch::IntegrationTest assert_not_nil payment_schedule.reference assert_equal 'card', payment_schedule.payment_method assert_equal 2, payment_schedule.payment_gateway_objects.count - #assert_not_nil payment_schedule.gateway_payment_mean + assert_not_nil payment_schedule.gateway_payment_mean assert_not_nil payment_schedule.wallet_transaction assert_equal payment_schedule.ordered_items.first.amount, payment_schedule.wallet_amount assert_equal Coupon.find_by(code: 'GIME3EUR').id, payment_schedule.coupon_id diff --git a/test/integration/subscriptions/create_as_admin_test.rb b/test/integration/subscriptions/create_as_admin_test.rb index 014bf9ab9..54856a5e3 100644 --- a/test/integration/subscriptions/create_as_admin_test.rb +++ b/test/integration/subscriptions/create_as_admin_test.rb @@ -77,7 +77,7 @@ class Subscriptions::CreateAsAdminTest < ActionDispatch::IntegrationTest payment_schedule_items_count = PaymentScheduleItem.count VCR.use_cassette('subscriptions_admin_create_with_payment_schedule') do - post '/api/stripe/payment_schedule', + post '/api/stripe/setup_subscription', params: { payment_method_id: stripe_payment_method, cart_items: { @@ -95,34 +95,15 @@ class Subscriptions::CreateAsAdminTest < ActionDispatch::IntegrationTest }.to_json, headers: default_headers # Check response format & status - assert_equal 200, response.status, response.body + assert_equal 201, response.status, response.body assert_equal Mime[:json], response.content_type # Check the response res = json_response(response.body) assert_not_nil res[:id] - - post '/api/stripe/confirm_payment_schedule', - params: { - subscription_id: res[:id], - cart_items: { - customer_id: user.id, - payment_schedule: true, - payment_method: 'card', - items: [ - { - subscription: { - plan_id: plan.id - } - } - ] - } - }.to_json, headers: default_headers end # Check generalities - assert_equal 201, response.status, response.body - assert_equal Mime[:json], response.content_type assert_equal invoice_count, Invoice.count, "an invoice was generated but it shouldn't" assert_equal payment_schedule_count + 1, PaymentSchedule.count, 'missing the payment schedule' assert_equal payment_schedule_items_count + 12, PaymentScheduleItem.count, 'missing some payment schedule items' diff --git a/test/integration/subscriptions/create_as_user_test.rb b/test/integration/subscriptions/create_as_user_test.rb index abb522a4b..8679e1c8d 100644 --- a/test/integration/subscriptions/create_as_user_test.rb +++ b/test/integration/subscriptions/create_as_user_test.rb @@ -195,7 +195,7 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest payment_schedule_items_count = PaymentScheduleItem.count VCR.use_cassette('subscriptions_user_create_with_payment_schedule') do - post '/api/stripe/payment_schedule', + post '/api/stripe/setup_subscription', params: { payment_method_id: stripe_payment_method, cart_items: { @@ -211,18 +211,68 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest } }.to_json, headers: default_headers + # Check response format & status + assert_equal 201, response.status, response.body + assert_equal Mime[:json], response.content_type + + # Check the response + sub = json_response(response.body) + assert_not_nil sub[:id] + end + + # Check generalities + assert_equal payment_schedule_count + 1, PaymentSchedule.count, 'missing the payment schedule' + assert_equal payment_schedule_items_count + 12, PaymentScheduleItem.count, 'missing some payment schedule items' + + # Check the correct plan was subscribed + result = json_response(response.body) + assert_equal PaymentSchedule.last.id, result[:id], 'payment schedule id does not match' + subscription = PaymentSchedule.find(result[:id]).payment_schedule_objects.first.object + assert_equal plan.id, subscription.plan_id, 'subscribed plan does not match' + + # Check that the user has the correct subscription + assert_not_nil @user.subscription, "user's subscription was not found" + assert_not_nil @user.subscription.plan, "user's subscribed plan was not found" + assert_equal plan.id, @user.subscription.plan_id, "user's plan does not match" + end + + test 'user takes a subscription but does not confirm 3DS' do + plan = Plan.find_by(group_id: @user.group.id, type: 'Plan', base_name: 'Abonnement mensualisable') + payment_schedule_count = PaymentSchedule.count + payment_schedule_items_count = PaymentScheduleItem.count + + VCR.use_cassette('subscriptions_user_create_without_3ds_confirmation') do + post '/api/stripe/setup_subscription', + params: { + payment_method_id: stripe_payment_method(error: :require_3ds), + cart_items: { + items: [ + { + subscription: { + plan_id: plan.id + } + } + ], + payment_schedule: true, + payment_method: 'cart' + } + }.to_json, headers: default_headers + # Check response format & status assert_equal 200, response.status, response.body assert_equal Mime[:json], response.content_type # Check the response - sub = json_response(response.body) - assert_not_nil sub[:id] + res = json_response(response.body) + assert res[:requires_action] + assert_not_nil res[:payment_intent_client_secret] + assert_not_nil res[:subscription_id] + assert_equal 'subscription', res[:type] - # create the subscription - post '/api/stripe/confirm_payment_schedule', + # try to confirm the subscription + post '/api/stripe/confirm_subscription', params: { - subscription_id: sub[:id], + subscription_id: res[:subscription_id], cart_items: { payment_schedule: true, payment_method: 'card', @@ -238,20 +288,19 @@ class Subscriptions::CreateAsUserTest < ActionDispatch::IntegrationTest end # Check generalities - assert_equal 201, response.status, response.body + assert_equal 200, response.status, response.body assert_equal Mime[:json], response.content_type - assert_equal payment_schedule_count + 1, PaymentSchedule.count, 'missing the payment schedule' - assert_equal payment_schedule_items_count + 12, PaymentScheduleItem.count, 'missing some payment schedule items' - # Check the correct plan was subscribed - result = json_response(response.body) - assert_equal PaymentSchedule.last.id, result[:id], 'payment schedule id does not match' - subscription = PaymentSchedule.find(result[:id]).payment_schedule_objects.first.object - assert_equal plan.id, subscription.plan_id, 'subscribed plan does not match' + res = json_response(response.body) + assert res[:requires_action] + assert_not_nil res[:payment_intent_client_secret] + assert_not_nil res[:subscription_id] + assert_equal 'subscription', res[:type] - # Check that the user has the correct subscription - assert_not_nil @user.subscription, "user's subscription was not found" - assert_not_nil @user.subscription.plan, "user's subscribed plan was not found" - assert_equal plan.id, @user.subscription.plan_id, "user's plan does not match" + assert_equal payment_schedule_count, PaymentSchedule.count, 'the payment schedule was created anyway' + assert_equal payment_schedule_items_count, PaymentScheduleItem.count, 'some payment schedule items were created anyway' + + # Check that the user has no subscription + assert_nil @user.subscription, "user's subscription was not found" end end diff --git a/test/integration/subscriptions/renew_as_admin_test.rb b/test/integration/subscriptions/renew_as_admin_test.rb index a25d6e920..a454bacda 100644 --- a/test/integration/subscriptions/renew_as_admin_test.rb +++ b/test/integration/subscriptions/renew_as_admin_test.rb @@ -2,6 +2,9 @@ require 'test_helper' +module Subscriptions; end + + class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest setup do @admin = User.find_by(username: 'admin') @@ -81,29 +84,38 @@ class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest user = User.find_by(username: 'pdurand') subscription = user.subscription.clone new_date = (1.month.from_now - 4.days).utc + offer_days_count = OfferDay.count VCR.use_cassette('subscriptions_admin_offer_free_days') do - put "/api/subscriptions/#{subscription.id}", - params: { - subscription: { - expired_at: new_date.strftime('%Y-%m-%d %H:%M:%S.%9N Z'), - free: true - } - }.to_json, headers: default_headers + post '/api/local_payment/confirm_payment', + params: { + customer_id: user.id, + items: [ + { + free_extension: { + end_at: new_date.strftime('%Y-%m-%d %H:%M:%S.%9N Z') + } + } + ] + }.to_json, headers: default_headers end # Check response format & status - assert_equal 200, response.status, response.body + assert_equal 201, response.status, response.body assert_equal Mime[:json], response.content_type # Check that the subscribed plan was not altered - res_subscription = json_response(response.body) - assert_equal subscription.id, res_subscription[:id], 'subscription id has changed' - assert_equal subscription.plan_id, res_subscription[:plan_id], 'subscribed plan does not match' - assert_dates_equal new_date, res_subscription[:expired_at], 'subscription end date was not updated' + res = json_response(response.body) + assert_equal 'OfferDay', res[:main_object][:type] + assert_equal 0, res[:items][0][:amount] + + assert_equal subscription.id, user.subscription.id, 'subscription id has changed' + assert_equal subscription.plan_id, user.subscription.plan_id, 'subscribed plan does not match' + assert_dates_equal new_date, user.subscription.expired_at, 'subscription end date was not updated' # Check the subscription was correctly saved assert_equal 1, user.subscriptions.count + assert_equal offer_days_count + 1, OfferDay.count # Check notification was sent to the user notification = Notification.find_by( @@ -120,31 +132,39 @@ class Subscriptions::RenewAsAdminTest < ActionDispatch::IntegrationTest test 'admin successfully extends a subscription' do user = User.find_by(username: 'pdurand') subscription = user.subscription.clone - new_date = (1.month.from_now - 4.days).utc + new_date = subscription.expired_at + subscription.plan.interval_count.send(subscription.plan.interval) VCR.use_cassette('subscriptions_admin_extends_subscription') do - put "/api/subscriptions/#{subscription.id}", - params: { - subscription: { - expired_at: new_date.strftime('%Y-%m-%d %H:%M:%S.%9N Z') - } - }.to_json, headers: default_headers + post '/api/local_payment/confirm_payment', + params: { + customer_id: user.id, + payment_method: 'check', + payment_schedule: false, + items: [ + { + subscription: { + start_at: subscription.expired_at.strftime('%Y-%m-%d %H:%M:%S.%9N Z'), + plan_id: subscription.plan_id + } + } + ] + }.to_json, headers: default_headers end # Check response format & status assert_equal 201, response.status, response.body assert_equal Mime[:json], response.content_type - # Check that the subscribed plan is still the same res_subscription = json_response(response.body) - assert_equal subscription.plan_id, res_subscription[:plan_id], 'subscribed plan does not match' + assert_equal 'Subscription', res_subscription[:main_object][:type] + assert_equal subscription.plan.amount / 100.0, res_subscription[:items][0][:amount] # Check the subscription was correctly saved assert_equal 2, user.subscriptions.count # Check that the subscription is new - assert_not_equal subscription.id, res_subscription[:id], 'subscription id has not changed' - assert_dates_equal new_date, res_subscription[:expired_at], 'subscription end date does not match' + assert_not_equal subscription.id, user.subscription.id, 'subscription id has not changed' + assert_dates_equal new_date, user.subscription.expired_at, 'subscription end date does not match' # Check notification was sent to the user notification = Notification.find_by( diff --git a/test/test_helper.rb b/test/test_helper.rb index 39b482a24..2f550685b 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -57,6 +57,8 @@ class ActiveSupport::TestCase exp_year = 1964 when /invalid_cvc/ cvc = '99' + when /require_3ds/ + number = '4000002760003184' end Stripe::PaymentMethod.create( diff --git a/test/vcr_cassettes/reservations_machine_subscription_with_payment_schedule_coupon_wallet.yml b/test/vcr_cassettes/reservations_machine_subscription_with_payment_schedule_coupon_wallet.yml index 3affd2dad..774e662b9 100644 --- a/test/vcr_cassettes/reservations_machine_subscription_with_payment_schedule_coupon_wallet.yml +++ b/test/vcr_cassettes/reservations_machine_subscription_with_payment_schedule_coupon_wallet.yml @@ -14,13 +14,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_kM3vfzGXrrL9Yq","request_duration_ms":423}}' + - '{"last_request_metrics":{"request_id":"req_TMXYBFdX8Zu0bv","request_duration_ms":6}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -33,7 +33,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:46 GMT + - Mon, 18 Oct 2021 08:44:41 GMT Content-Type: - application/json Content-Length: @@ -52,19 +52,23 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 192810f7-ee10-4430-bc3e-056f93c2123b + Original-Request: + - req_JEUZMg7gUSaXWN Request-Id: - - req_1Z5aj4S5ljdDib + - req_JEUZMg7gUSaXWN + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '6' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "pm_1JZDIE2sOmf47Nz941MJycRQ", + "id": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", "object": "payment_method", "billing_details": { "address": { @@ -104,17 +108,17 @@ http_interactions: }, "wallet": null }, - "created": 1631532346, + "created": 1634546681, "customer": null, "livemode": false, "metadata": { }, "type": "card" } - recorded_at: Mon, 13 Sep 2021 11:25:46 GMT + recorded_at: Mon, 18 Oct 2021 08:44:41 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1JZDIE2sOmf47Nz941MJycRQ/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1JlrSX2sOmf47Nz9O4x8IvAt/attach body: encoding: UTF-8 string: customer=cus_8E2ys9zDZgetWX @@ -126,13 +130,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_1Z5aj4S5ljdDib","request_duration_ms":591}}' + - '{"last_request_metrics":{"request_id":"req_JEUZMg7gUSaXWN","request_duration_ms":844}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -145,7 +149,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:47 GMT + - Mon, 18 Oct 2021 08:44:42 GMT Content-Type: - application/json Content-Length: @@ -164,19 +168,23 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 42aa9edc-e9f8-431a-b2ad-007b00df1560 + Original-Request: + - req_O04AJo622DNNGe Request-Id: - - req_RLXYEM99UHqZW7 + - req_O04AJo622DNNGe + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '6' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "pm_1JZDIE2sOmf47Nz941MJycRQ", + "id": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", "object": "payment_method", "billing_details": { "address": { @@ -216,20 +224,20 @@ http_interactions: }, "wallet": null }, - "created": 1631532346, + "created": 1634546681, "customer": "cus_8E2ys9zDZgetWX", "livemode": false, "metadata": { }, "type": "card" } - recorded_at: Mon, 13 Sep 2021 11:25:47 GMT + recorded_at: Mon, 18 Oct 2021 08:44:42 GMT - request: method: post uri: https://api.stripe.com/v1/customers/cus_8E2ys9zDZgetWX body: encoding: UTF-8 - string: invoice_settings[default_payment_method]=pm_1JZDIE2sOmf47Nz941MJycRQ + string: invoice_settings[default_payment_method]=pm_1JlrSX2sOmf47Nz9O4x8IvAt headers: User-Agent: - Stripe/v1 RubyBindings/5.29.0 @@ -238,13 +246,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_RLXYEM99UHqZW7","request_duration_ms":748}}' + - '{"last_request_metrics":{"request_id":"req_O04AJo622DNNGe","request_duration_ms":883}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -257,11 +265,11 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:48 GMT + - Mon, 18 Oct 2021 08:44:43 GMT Content-Type: - application/json Content-Length: - - '49689' + - '49799' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -276,12 +284,16 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 0ca2d40b-08fe-4ea4-aabe-26ac0f9ffef0 + Original-Request: + - req_ORMShp1iikLzR8 Request-Id: - - req_m9MUTsJHEtPipd + - req_ORMShp1iikLzR8 + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: @@ -290,9 +302,9 @@ http_interactions: { "id": "cus_8E2ys9zDZgetWX", "object": "customer", - "account_balance": -10174, + "account_balance": 0, "address": null, - "balance": -10174, + "balance": 0, "created": 1460026822, "currency": "usd", "default_source": "card_1Euc902sOmf47Nz9eZvNNyyQ", @@ -303,14 +315,14 @@ http_interactions: "invoice_prefix": "BCC32B8", "invoice_settings": { "custom_fields": null, - "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", + "default_payment_method": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", "footer": null }, "livemode": false, "metadata": { }, "name": null, - "next_invoice_sequence": 441, + "next_invoice_sequence": 517, "phone": null, "preferred_locales": [ @@ -354,25 +366,25 @@ http_interactions: "object": "list", "data": [ { - "id": "sub_KDeOOxKFukSOFq", + "id": "sub_1JkmBg2sOmf47Nz9MGXiiaqr", "object": "subscription", "application_fee_percent": null, "automatic_tax": { "enabled": false }, "billing": "charge_automatically", - "billing_cycle_anchor": 1631531544, + "billing_cycle_anchor": 1634288088, "billing_thresholds": null, - "cancel_at": 1663067542, + "cancel_at": 1665824085, "cancel_at_period_end": false, - "canceled_at": 1631531544, + "canceled_at": 1634288088, "collection_method": "charge_automatically", - "created": 1631531544, - "current_period_end": 1634123544, - "current_period_start": 1631531544, + "created": 1634288088, + "current_period_end": 1636966488, + "current_period_start": 1634288088, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, - "default_payment_method": "pm_1JZD5E2sOmf47Nz9spRv1Hzv", + "default_payment_method": "pm_1JkmBa2sOmf47Nz9ocFmIyBw", "default_source": null, "default_tax_rates": [ @@ -386,21 +398,21 @@ http_interactions: "object": "list", "data": [ { - "id": "si_KDeO7ibOLIHrd2", + "id": "si_KPbOBUeFMwAvpR", "object": "subscription_item", "billing_thresholds": null, - "created": 1631531545, + "created": 1634288088, "metadata": { }, "plan": { - "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631531543, + "created": 1634288086, "currency": "usd", "interval": "month", "interval_count": 1, @@ -416,11 +428,11 @@ http_interactions: "usage_type": "licensed" }, "price": { - "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631531543, + "created": 1634288086, "currency": "usd", "livemode": false, "lookup_key": null, @@ -443,7 +455,7 @@ http_interactions: "unit_amount_decimal": "9466" }, "quantity": 1, - "subscription": "sub_KDeOOxKFukSOFq", + "subscription": "sub_1JkmBg2sOmf47Nz9MGXiiaqr", "tax_rates": [ ] @@ -451,9 +463,9 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDeOOxKFukSOFq" + "url": "/v1/subscription_items?subscription=sub_1JkmBg2sOmf47Nz9MGXiiaqr" }, - "latest_invoice": "in_1JZD5I2sOmf47Nz9JNfjxEpM", + "latest_invoice": "in_1JkmBg2sOmf47Nz9yKTwqM67", "livemode": false, "metadata": { }, @@ -467,14 +479,14 @@ http_interactions: "pending_setup_intent": null, "pending_update": null, "plan": { - "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631531543, + "created": 1634288086, "currency": "usd", "interval": "month", "interval_count": 1, @@ -491,8 +503,8 @@ http_interactions: }, "quantity": 1, "schedule": null, - "start": 1631531544, - "start_date": 1631531544, + "start": 1634288088, + "start_date": 1634288088, "status": "active", "tax_percent": null, "transfer_data": null, @@ -500,25 +512,25 @@ http_interactions: "trial_start": null }, { - "id": "sub_KDeL49sskbLJn5", + "id": "sub_1JklFr2sOmf47Nz9JAPgZ9YT", "object": "subscription", "application_fee_percent": null, "automatic_tax": { "enabled": false }, "billing": "charge_automatically", - "billing_cycle_anchor": 1631531384, + "billing_cycle_anchor": 1634284503, "billing_thresholds": null, - "cancel_at": 1663067382, + "cancel_at": 1665820500, "cancel_at_period_end": false, - "canceled_at": 1631531384, + "canceled_at": 1634284503, "collection_method": "charge_automatically", - "created": 1631531384, - "current_period_end": 1634123384, - "current_period_start": 1631531384, + "created": 1634284503, + "current_period_end": 1636962903, + "current_period_start": 1634284503, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, - "default_payment_method": "pm_1JZD2e2sOmf47Nz9cm1GFlt9", + "default_payment_method": "pm_1JklFm2sOmf47Nz9zXEuYdNz", "default_source": null, "default_tax_rates": [ @@ -532,21 +544,21 @@ http_interactions: "object": "list", "data": [ { - "id": "si_KDeLVc4MXPXjat", + "id": "si_KPaQHXj6njZcgk", "object": "subscription_item", "billing_thresholds": null, - "created": 1631531385, + "created": 1634284503, "metadata": { }, "plan": { - "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "id": "price_1JklFp2sOmf47Nz9VscUWcco", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631531384, + "created": 1634284501, "currency": "usd", "interval": "month", "interval_count": 1, @@ -562,11 +574,11 @@ http_interactions: "usage_type": "licensed" }, "price": { - "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "id": "price_1JklFp2sOmf47Nz9VscUWcco", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631531384, + "created": 1634284501, "currency": "usd", "livemode": false, "lookup_key": null, @@ -589,7 +601,7 @@ http_interactions: "unit_amount_decimal": "9466" }, "quantity": 1, - "subscription": "sub_KDeL49sskbLJn5", + "subscription": "sub_1JklFr2sOmf47Nz9JAPgZ9YT", "tax_rates": [ ] @@ -597,9 +609,9 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDeL49sskbLJn5" + "url": "/v1/subscription_items?subscription=sub_1JklFr2sOmf47Nz9JAPgZ9YT" }, - "latest_invoice": "in_1JZD2j2sOmf47Nz9aSkXbY3K", + "latest_invoice": "in_1JklFr2sOmf47Nz9iDXxFP7P", "livemode": false, "metadata": { }, @@ -613,14 +625,14 @@ http_interactions: "pending_setup_intent": null, "pending_update": null, "plan": { - "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "id": "price_1JklFp2sOmf47Nz9VscUWcco", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631531384, + "created": 1634284501, "currency": "usd", "interval": "month", "interval_count": 1, @@ -637,8 +649,8 @@ http_interactions: }, "quantity": 1, "schedule": null, - "start": 1631531384, - "start_date": 1631531384, + "start": 1634284503, + "start_date": 1634284503, "status": "active", "tax_percent": null, "transfer_data": null, @@ -646,25 +658,25 @@ http_interactions: "trial_start": null }, { - "id": "sub_KDddMFRwup6SeD", + "id": "sub_1JkWe12sOmf47Nz937vcnagn", "object": "subscription", "application_fee_percent": null, "automatic_tax": { "enabled": false }, "billing": "charge_automatically", - "billing_cycle_anchor": 1631528772, + "billing_cycle_anchor": 1634228340, "billing_thresholds": null, - "cancel_at": 1663064770, + "cancel_at": 1665764338, "cancel_at_period_end": false, - "canceled_at": 1631528772, + "canceled_at": 1634228340, "collection_method": "charge_automatically", - "created": 1631528772, - "current_period_end": 1634120772, - "current_period_start": 1631528772, + "created": 1634228340, + "current_period_end": 1636906740, + "current_period_start": 1634228340, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, - "default_payment_method": "pm_1JZCMW2sOmf47Nz9Av5ineIY", + "default_payment_method": "pm_1JkWdv2sOmf47Nz9cmQRMuk3", "default_source": null, "default_tax_rates": [ @@ -678,21 +690,21 @@ http_interactions: "object": "list", "data": [ { - "id": "si_KDddHFLKMC8QAW", + "id": "si_KPLKMa1jO2CS4F", "object": "subscription_item", "billing_thresholds": null, - "created": 1631528773, + "created": 1634228341, "metadata": { }, "plan": { - "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631528772, + "created": 1634228339, "currency": "usd", "interval": "month", "interval_count": 1, @@ -708,11 +720,11 @@ http_interactions: "usage_type": "licensed" }, "price": { - "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631528772, + "created": 1634228339, "currency": "usd", "livemode": false, "lookup_key": null, @@ -735,7 +747,7 @@ http_interactions: "unit_amount_decimal": "9466" }, "quantity": 1, - "subscription": "sub_KDddMFRwup6SeD", + "subscription": "sub_1JkWe12sOmf47Nz937vcnagn", "tax_rates": [ ] @@ -743,9 +755,9 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDddMFRwup6SeD" + "url": "/v1/subscription_items?subscription=sub_1JkWe12sOmf47Nz937vcnagn" }, - "latest_invoice": "in_1JZCMb2sOmf47Nz9ui14Zzyv", + "latest_invoice": "in_1JkWe12sOmf47Nz9m0Su80Lj", "livemode": false, "metadata": { }, @@ -759,14 +771,14 @@ http_interactions: "pending_setup_intent": null, "pending_update": null, "plan": { - "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631528772, + "created": 1634228339, "currency": "usd", "interval": "month", "interval_count": 1, @@ -783,8 +795,8 @@ http_interactions: }, "quantity": 1, "schedule": null, - "start": 1631528772, - "start_date": 1631528772, + "start": 1634228340, + "start_date": 1634228340, "status": "active", "tax_percent": null, "transfer_data": null, @@ -792,25 +804,25 @@ http_interactions: "trial_start": null }, { - "id": "sub_KDcr7oTexO2Zqj", + "id": "sub_1JkWOC2sOmf47Nz9FTXocHRk", "object": "subscription", "application_fee_percent": null, "automatic_tax": { "enabled": false }, "billing": "charge_automatically", - "billing_cycle_anchor": 1631525872, + "billing_cycle_anchor": 1634227359, "billing_thresholds": null, - "cancel_at": 1663061870, + "cancel_at": 1665763357, "cancel_at_period_end": false, - "canceled_at": 1631525872, + "canceled_at": 1634227359, "collection_method": "charge_automatically", - "created": 1631525872, - "current_period_end": 1634117872, - "current_period_start": 1631525872, + "created": 1634227359, + "current_period_end": 1636905759, + "current_period_start": 1634227359, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, - "default_payment_method": "pm_1JZBbj2sOmf47Nz9tbdhvlLv", + "default_payment_method": "pm_1JkWO62sOmf47Nz9wbRCcazs", "default_source": null, "default_tax_rates": [ @@ -824,21 +836,21 @@ http_interactions: "object": "list", "data": [ { - "id": "si_KDcrMC54ieiESF", + "id": "si_KPL4QikDwY0073", "object": "subscription_item", "billing_thresholds": null, - "created": 1631525873, + "created": 1634227360, "metadata": { }, "plan": { - "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631525871, + "created": 1634227358, "currency": "usd", "interval": "month", "interval_count": 1, @@ -854,11 +866,11 @@ http_interactions: "usage_type": "licensed" }, "price": { - "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631525871, + "created": 1634227358, "currency": "usd", "livemode": false, "lookup_key": null, @@ -881,7 +893,7 @@ http_interactions: "unit_amount_decimal": "9466" }, "quantity": 1, - "subscription": "sub_KDcr7oTexO2Zqj", + "subscription": "sub_1JkWOC2sOmf47Nz9FTXocHRk", "tax_rates": [ ] @@ -889,9 +901,9 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcr7oTexO2Zqj" + "url": "/v1/subscription_items?subscription=sub_1JkWOC2sOmf47Nz9FTXocHRk" }, - "latest_invoice": "in_1JZBbo2sOmf47Nz9zIjFCbHt", + "latest_invoice": "in_1JkWOC2sOmf47Nz9f0lRIjGY", "livemode": false, "metadata": { }, @@ -905,14 +917,14 @@ http_interactions: "pending_setup_intent": null, "pending_update": null, "plan": { - "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631525871, + "created": 1634227358, "currency": "usd", "interval": "month", "interval_count": 1, @@ -929,3097 +941,14 @@ http_interactions: }, "quantity": 1, "schedule": null, - "start": 1631525872, - "start_date": 1631525872, + "start": 1634227359, + "start_date": 1634227359, "status": "active", "tax_percent": null, "transfer_data": null, "trial_end": null, "trial_start": null }, - { - "id": "sub_KDcnjixXJ0mBtk", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631525630, - "billing_thresholds": null, - "cancel_at": 1663061628, - "cancel_at_period_end": false, - "canceled_at": 1631525630, - "collection_method": "charge_automatically", - "created": 1631525630, - "current_period_end": 1634117630, - "current_period_start": 1631525630, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBXq2sOmf47Nz9L2oVybfx", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcn3F2qHgjfmO", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631525631, - "metadata": { - }, - "plan": { - "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525629, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631525629, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcnjixXJ0mBtk", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcnjixXJ0mBtk" - }, - "latest_invoice": "in_1JZBXu2sOmf47Nz9P19l9fy5", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525629, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631525630, - "start_date": 1631525630, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcYiLLbeDKj9g", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524733, - "billing_thresholds": null, - "cancel_at": 1663060731, - "cancel_at_period_end": false, - "canceled_at": 1631524733, - "collection_method": "charge_automatically", - "created": 1631524733, - "current_period_end": 1634116733, - "current_period_start": 1631524733, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBJN2sOmf47Nz9xyv4Ze7i", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcY9IkGJngPha", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524734, - "metadata": { - }, - "plan": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcYiLLbeDKj9g", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcYiLLbeDKj9g" - }, - "latest_invoice": "in_1JZBJS2sOmf47Nz92oK28Bh9", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524733, - "start_date": 1631524733, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcRXDcJ0ix3MN", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524314, - "billing_thresholds": null, - "cancel_at": 1663060311, - "cancel_at_period_end": false, - "canceled_at": 1631524314, - "collection_method": "charge_automatically", - "created": 1631524314, - "current_period_end": 1634116314, - "current_period_start": 1631524314, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBCb2sOmf47Nz9TM4fz9pW", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcROMyFV4MBYX", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524315, - "metadata": { - }, - "plan": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcRXDcJ0ix3MN", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcRXDcJ0ix3MN" - }, - "latest_invoice": "in_1JZBCg2sOmf47Nz9aE9Fiwqy", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524314, - "start_date": 1631524314, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcNdHpPzwgIaW", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524071, - "billing_thresholds": null, - "cancel_at": 1663060069, - "cancel_at_period_end": false, - "canceled_at": 1631524071, - "collection_method": "charge_automatically", - "created": 1631524071, - "current_period_end": 1634116071, - "current_period_start": 1631524071, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZB8g2sOmf47Nz9m3OUFPiE", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcNEhMYWfjQft", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524072, - "metadata": { - }, - "plan": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcNdHpPzwgIaW", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcNdHpPzwgIaW" - }, - "latest_invoice": "in_1JZB8l2sOmf47Nz9EtKwTvUm", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524071, - "start_date": 1631524071, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcKVM2g2bzgZ9", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523883, - "billing_thresholds": null, - "cancel_at": 1663059881, - "cancel_at_period_end": false, - "canceled_at": 1631523883, - "collection_method": "charge_automatically", - "created": 1631523883, - "current_period_end": 1634115883, - "current_period_start": 1631523883, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZB5f2sOmf47Nz9g9tEapIV", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcKUZlGLYXeCS", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523884, - "metadata": { - }, - "plan": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcKVM2g2bzgZ9", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcKVM2g2bzgZ9" - }, - "latest_invoice": "in_1JZB5j2sOmf47Nz9mBKngZRT", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523883, - "start_date": 1631523883, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_JeS63F3gpNRyDK", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1623413431, - "billing_thresholds": null, - "cancel_at": 1652530228, - "cancel_at_period_end": false, - "canceled_at": 1623413431, - "collection_method": "charge_automatically", - "created": 1623413431, - "current_period_end": 1633954231, - "current_period_start": 1631362231, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1J19Bv2sOmf47Nz95pa9Kosw", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_JeS6YPrUZsMh08", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1623413432, - "metadata": { - }, - "plan": { - "id": "price_1J19By2sOmf47Nz9KVhsAQuQ", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1623413430, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1J19By2sOmf47Nz9KVhsAQuQ", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1623413430, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_JeS63F3gpNRyDK", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_JeS63F3gpNRyDK" - }, - "latest_invoice": "in_1JYV2t2sOmf47Nz9Yv2Px1F3", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1J19By2sOmf47Nz9KVhsAQuQ", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1623413430, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1623413431, - "start_date": 1623413431, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - ], - "has_more": true, - "total_count": 63, - "url": "/v1/customers/cus_8E2ys9zDZgetWX/subscriptions" - }, - "tax_exempt": "none", - "tax_ids": { - "object": "list", - "data": [ - - ], - "has_more": false, - "total_count": 0, - "url": "/v1/customers/cus_8E2ys9zDZgetWX/tax_ids" - }, - "tax_info": null, - "tax_info_verification": null - } - recorded_at: Mon, 13 Sep 2021 11:25:48 GMT -- request: - method: post - uri: https://api.stripe.com/v1/customers/cus_8E2ys9zDZgetWX - body: - encoding: UTF-8 - string: balance=-9474 - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_m9MUTsJHEtPipd","request_duration_ms":995}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:49 GMT - Content-Type: - - application/json - Content-Length: - - '49687' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_CWrxgY2wwPpdC6 - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "cus_8E2ys9zDZgetWX", - "object": "customer", - "account_balance": -9474, - "address": null, - "balance": -9474, - "created": 1460026822, - "currency": "usd", - "default_source": "card_1Euc902sOmf47Nz9eZvNNyyQ", - "delinquent": false, - "description": "Lucile Seguin", - "discount": null, - "email": "lucile.seguin@live.fr", - "invoice_prefix": "BCC32B8", - "invoice_settings": { - "custom_fields": null, - "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", - "footer": null - }, - "livemode": false, - "metadata": { - }, - "name": null, - "next_invoice_sequence": 441, - "phone": null, - "preferred_locales": [ - - ], - "shipping": null, - "sources": { - "object": "list", - "data": [ - { - "id": "card_1Euc902sOmf47Nz9eZvNNyyQ", - "object": "card", - "address_city": null, - "address_country": null, - "address_line1": null, - "address_line1_check": null, - "address_line2": null, - "address_state": null, - "address_zip": null, - "address_zip_check": null, - "brand": "Visa", - "country": "US", - "customer": "cus_8E2ys9zDZgetWX", - "cvc_check": "unchecked", - "dynamic_last4": null, - "exp_month": 4, - "exp_year": 2020, - "fingerprint": "o52jybR7bnmNn6AT", - "funding": "credit", - "last4": "4242", - "metadata": { - }, - "name": null, - "tokenization_method": null - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/customers/cus_8E2ys9zDZgetWX/sources" - }, - "subscriptions": { - "object": "list", - "data": [ - { - "id": "sub_KDeOOxKFukSOFq", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631531544, - "billing_thresholds": null, - "cancel_at": 1663067542, - "cancel_at_period_end": false, - "canceled_at": 1631531544, - "collection_method": "charge_automatically", - "created": 1631531544, - "current_period_end": 1634123544, - "current_period_start": 1631531544, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZD5E2sOmf47Nz9spRv1Hzv", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDeO7ibOLIHrd2", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631531545, - "metadata": { - }, - "plan": { - "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631531543, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631531543, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDeOOxKFukSOFq", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDeOOxKFukSOFq" - }, - "latest_invoice": "in_1JZD5I2sOmf47Nz9JNfjxEpM", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631531543, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631531544, - "start_date": 1631531544, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDeL49sskbLJn5", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631531384, - "billing_thresholds": null, - "cancel_at": 1663067382, - "cancel_at_period_end": false, - "canceled_at": 1631531384, - "collection_method": "charge_automatically", - "created": 1631531384, - "current_period_end": 1634123384, - "current_period_start": 1631531384, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZD2e2sOmf47Nz9cm1GFlt9", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDeLVc4MXPXjat", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631531385, - "metadata": { - }, - "plan": { - "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631531384, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631531384, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDeL49sskbLJn5", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDeL49sskbLJn5" - }, - "latest_invoice": "in_1JZD2j2sOmf47Nz9aSkXbY3K", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631531384, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631531384, - "start_date": 1631531384, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDddMFRwup6SeD", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631528772, - "billing_thresholds": null, - "cancel_at": 1663064770, - "cancel_at_period_end": false, - "canceled_at": 1631528772, - "collection_method": "charge_automatically", - "created": 1631528772, - "current_period_end": 1634120772, - "current_period_start": 1631528772, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZCMW2sOmf47Nz9Av5ineIY", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDddHFLKMC8QAW", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631528773, - "metadata": { - }, - "plan": { - "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631528772, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631528772, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDddMFRwup6SeD", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDddMFRwup6SeD" - }, - "latest_invoice": "in_1JZCMb2sOmf47Nz9ui14Zzyv", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631528772, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631528772, - "start_date": 1631528772, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcr7oTexO2Zqj", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631525872, - "billing_thresholds": null, - "cancel_at": 1663061870, - "cancel_at_period_end": false, - "canceled_at": 1631525872, - "collection_method": "charge_automatically", - "created": 1631525872, - "current_period_end": 1634117872, - "current_period_start": 1631525872, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBbj2sOmf47Nz9tbdhvlLv", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcrMC54ieiESF", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631525873, - "metadata": { - }, - "plan": { - "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525871, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631525871, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcr7oTexO2Zqj", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcr7oTexO2Zqj" - }, - "latest_invoice": "in_1JZBbo2sOmf47Nz9zIjFCbHt", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525871, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631525872, - "start_date": 1631525872, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcnjixXJ0mBtk", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631525630, - "billing_thresholds": null, - "cancel_at": 1663061628, - "cancel_at_period_end": false, - "canceled_at": 1631525630, - "collection_method": "charge_automatically", - "created": 1631525630, - "current_period_end": 1634117630, - "current_period_start": 1631525630, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBXq2sOmf47Nz9L2oVybfx", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcn3F2qHgjfmO", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631525631, - "metadata": { - }, - "plan": { - "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525629, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631525629, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcnjixXJ0mBtk", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcnjixXJ0mBtk" - }, - "latest_invoice": "in_1JZBXu2sOmf47Nz9P19l9fy5", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525629, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631525630, - "start_date": 1631525630, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcYiLLbeDKj9g", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524733, - "billing_thresholds": null, - "cancel_at": 1663060731, - "cancel_at_period_end": false, - "canceled_at": 1631524733, - "collection_method": "charge_automatically", - "created": 1631524733, - "current_period_end": 1634116733, - "current_period_start": 1631524733, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBJN2sOmf47Nz9xyv4Ze7i", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcY9IkGJngPha", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524734, - "metadata": { - }, - "plan": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcYiLLbeDKj9g", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcYiLLbeDKj9g" - }, - "latest_invoice": "in_1JZBJS2sOmf47Nz92oK28Bh9", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524733, - "start_date": 1631524733, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcRXDcJ0ix3MN", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524314, - "billing_thresholds": null, - "cancel_at": 1663060311, - "cancel_at_period_end": false, - "canceled_at": 1631524314, - "collection_method": "charge_automatically", - "created": 1631524314, - "current_period_end": 1634116314, - "current_period_start": 1631524314, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBCb2sOmf47Nz9TM4fz9pW", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcROMyFV4MBYX", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524315, - "metadata": { - }, - "plan": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcRXDcJ0ix3MN", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcRXDcJ0ix3MN" - }, - "latest_invoice": "in_1JZBCg2sOmf47Nz9aE9Fiwqy", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524314, - "start_date": 1631524314, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcNdHpPzwgIaW", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524071, - "billing_thresholds": null, - "cancel_at": 1663060069, - "cancel_at_period_end": false, - "canceled_at": 1631524071, - "collection_method": "charge_automatically", - "created": 1631524071, - "current_period_end": 1634116071, - "current_period_start": 1631524071, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZB8g2sOmf47Nz9m3OUFPiE", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcNEhMYWfjQft", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524072, - "metadata": { - }, - "plan": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcNdHpPzwgIaW", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcNdHpPzwgIaW" - }, - "latest_invoice": "in_1JZB8l2sOmf47Nz9EtKwTvUm", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524071, - "start_date": 1631524071, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcKVM2g2bzgZ9", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523883, - "billing_thresholds": null, - "cancel_at": 1663059881, - "cancel_at_period_end": false, - "canceled_at": 1631523883, - "collection_method": "charge_automatically", - "created": 1631523883, - "current_period_end": 1634115883, - "current_period_start": 1631523883, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZB5f2sOmf47Nz9g9tEapIV", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcKUZlGLYXeCS", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523884, - "metadata": { - }, - "plan": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcKVM2g2bzgZ9", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcKVM2g2bzgZ9" - }, - "latest_invoice": "in_1JZB5j2sOmf47Nz9mBKngZRT", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523883, - "start_date": 1631523883, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_JeS63F3gpNRyDK", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1623413431, - "billing_thresholds": null, - "cancel_at": 1652530228, - "cancel_at_period_end": false, - "canceled_at": 1623413431, - "collection_method": "charge_automatically", - "created": 1623413431, - "current_period_end": 1633954231, - "current_period_start": 1631362231, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1J19Bv2sOmf47Nz95pa9Kosw", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_JeS6YPrUZsMh08", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1623413432, - "metadata": { - }, - "plan": { - "id": "price_1J19By2sOmf47Nz9KVhsAQuQ", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1623413430, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1J19By2sOmf47Nz9KVhsAQuQ", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1623413430, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_JeS63F3gpNRyDK", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_JeS63F3gpNRyDK" - }, - "latest_invoice": "in_1JYV2t2sOmf47Nz9Yv2Px1F3", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1J19By2sOmf47Nz9KVhsAQuQ", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1623413430, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1623413431, - "start_date": 1623413431, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - ], - "has_more": true, - "total_count": 63, - "url": "/v1/customers/cus_8E2ys9zDZgetWX/subscriptions" - }, - "tax_exempt": "none", - "tax_ids": { - "object": "list", - "data": [ - - ], - "has_more": false, - "total_count": 0, - "url": "/v1/customers/cus_8E2ys9zDZgetWX/tax_ids" - }, - "tax_info": null, - "tax_info_verification": null - } - recorded_at: Mon, 13 Sep 2021 11:25:49 GMT -- request: - method: post - uri: https://api.stripe.com/v1/prices - body: - encoding: UTF-8 - string: unit_amount=9466¤cy=usd&product=prod_IZQAhb9nLu4jfN&recurring[interval]=month&recurring[interval_count]=1 - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_CWrxgY2wwPpdC6","request_duration_ms":1234}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:50 GMT - Content-Type: - - application/json - Content-Length: - - '607' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_IKV73h3VmsaTEY - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532350, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - } - recorded_at: Mon, 13 Sep 2021 11:25:50 GMT -- request: - method: post - uri: https://api.stripe.com/v1/prices - body: - encoding: UTF-8 - string: unit_amount=8¤cy=usd&product=prod_IZQAhb9nLu4jfN&nickname=Price+adjustment+for+payment+schedule+ - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_IKV73h3VmsaTEY","request_duration_ms":348}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:50 GMT - Content-Type: - - application/json - Content-Length: - - '495' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_n9l5IKR24jQB8L - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "price_1JZDII2sOmf47Nz9mrvLMUVX", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532350, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": "Price adjustment for payment schedule", - "product": "prod_IZQAhb9nLu4jfN", - "recurring": null, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "one_time", - "unit_amount": 8, - "unit_amount_decimal": "8" - } - recorded_at: Mon, 13 Sep 2021 11:25:50 GMT -- request: - method: post - uri: https://api.stripe.com/v1/subscriptions - body: - encoding: UTF-8 - string: customer=cus_8E2ys9zDZgetWX&cancel_at=1663068348&add_invoice_items[0][price]=price_1JZDII2sOmf47Nz9mrvLMUVX&items[0][price]=price_1JZDII2sOmf47Nz9Wb0IfchE&default_payment_method=pm_1JZDIE2sOmf47Nz941MJycRQ&expand[0]=latest_invoice.payment_intent - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_n9l5IKR24jQB8L","request_duration_ms":392}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:52 GMT - Content-Type: - - application/json - Content-Length: - - '10560' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_bI89UuRqOTfwpY - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '4' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: ASCII-8BIT - string: !binary |- - ewogICJpZCI6ICJzdWJfS0RlYmFYU1J0WVU5UHciLAogICJvYmplY3QiOiAic3Vic2NyaXB0aW9uIiwKICAiYXBwbGljYXRpb25fZmVlX3BlcmNlbnQiOiBudWxsLAogICJhdXRvbWF0aWNfdGF4IjogewogICAgImVuYWJsZWQiOiBmYWxzZQogIH0sCiAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICJiaWxsaW5nX2N5Y2xlX2FuY2hvciI6IDE2MzE1MzIzNTAsCiAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgImNhbmNlbF9hdCI6IDE2NjMwNjgzNDgsCiAgImNhbmNlbF9hdF9wZXJpb2RfZW5kIjogZmFsc2UsCiAgImNhbmNlbGVkX2F0IjogMTYzMTUzMjM1MCwKICAiY29sbGVjdGlvbl9tZXRob2QiOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICJjcmVhdGVkIjogMTYzMTUzMjM1MCwKICAiY3VycmVudF9wZXJpb2RfZW5kIjogMTYzNDEyNDM1MCwKICAiY3VycmVudF9wZXJpb2Rfc3RhcnQiOiAxNjMxNTMyMzUwLAogICJjdXN0b21lciI6ICJjdXNfOEUyeXM5ekRaZ2V0V1giLAogICJkYXlzX3VudGlsX2R1ZSI6IG51bGwsCiAgImRlZmF1bHRfcGF5bWVudF9tZXRob2QiOiAicG1fMUpaRElFMnNPbWY0N056OTQxTUp5Y1JRIiwKICAiZGVmYXVsdF9zb3VyY2UiOiBudWxsLAogICJkZWZhdWx0X3RheF9yYXRlcyI6IFsKCiAgXSwKICAiZGlzY291bnQiOiBudWxsLAogICJlbmRlZF9hdCI6IG51bGwsCiAgImludm9pY2VfY3VzdG9tZXJfYmFsYW5jZV9zZXR0aW5ncyI6IHsKICAgICJjb25zdW1lX2FwcGxpZWRfYmFsYW5jZV9vbl92b2lkIjogdHJ1ZQogIH0sCiAgIml0ZW1zIjogewogICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICJkYXRhIjogWwogICAgICB7CiAgICAgICAgImlkIjogInNpX0tEZWJscGRLYWFIMjAxIiwKICAgICAgICAib2JqZWN0IjogInN1YnNjcmlwdGlvbl9pdGVtIiwKICAgICAgICAiYmlsbGluZ190aHJlc2hvbGRzIjogbnVsbCwKICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNTEsCiAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgIH0sCiAgICAgICAgInBsYW4iOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUpaRElJMnNPbWY0N056OVdiMElmY2hFIiwKICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzUwLAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICB9LAogICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICJpZCI6ICJwcmljZV8xSlpESUkyc09tZjQ3Tno5V2IwSWZjaEUiLAogICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNTAsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICJyZWN1cnJpbmciOiB7CiAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgIH0sCiAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgInR5cGUiOiAicmVjdXJyaW5nIiwKICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI5NDY2IgogICAgICAgIH0sCiAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl9LRGViYVhTUnRZVTlQdyIsCiAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgXQogICAgICB9CiAgICBdLAogICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAidG90YWxfY291bnQiOiAxLAogICAgInVybCI6ICIvdjEvc3Vic2NyaXB0aW9uX2l0ZW1zP3N1YnNjcmlwdGlvbj1zdWJfS0RlYmFYU1J0WVU5UHciCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUpaRElKMnNPbWY0N056OUhqZk1rVUFiIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiAwLAogICAgImFtb3VudF9wYWlkIjogMCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogMCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMCwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IGZhbHNlLAogICAgImF1dG9tYXRpY190YXgiOiB7CiAgICAgICJlbmFibGVkIjogZmFsc2UsCiAgICAgICJzdGF0dXMiOiBudWxsCiAgICB9LAogICAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImJpbGxpbmdfcmVhc29uIjogInN1YnNjcmlwdGlvbl9jcmVhdGUiLAogICAgImNoYXJnZSI6IG51bGwsCiAgICAiY29sbGVjdGlvbl9tZXRob2QiOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImNyZWF0ZWQiOiAxNjMxNTMyMzUxLAogICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAiY3VzdG9tX2ZpZWxkcyI6IG51bGwsCiAgICAiY3VzdG9tZXIiOiAiY3VzXzhFMnlzOXpEWmdldFdYIiwKICAgICJjdXN0b21lcl9hZGRyZXNzIjogbnVsbCwKICAgICJjdXN0b21lcl9lbWFpbCI6ICJsdWNpbGUuc2VndWluQGxpdmUuZnIiLAogICAgImN1c3RvbWVyX25hbWUiOiBudWxsLAogICAgImN1c3RvbWVyX3Bob25lIjogbnVsbCwKICAgICJjdXN0b21lcl9zaGlwcGluZyI6IG51bGwsCiAgICAiY3VzdG9tZXJfdGF4X2V4ZW1wdCI6ICJub25lIiwKICAgICJjdXN0b21lcl90YXhfaWRzIjogWwoKICAgIF0sCiAgICAiZGVmYXVsdF9wYXltZW50X21ldGhvZCI6IG51bGwsCiAgICAiZGVmYXVsdF9zb3VyY2UiOiBudWxsLAogICAgImRlZmF1bHRfdGF4X3JhdGVzIjogWwoKICAgIF0sCiAgICAiZGVzY3JpcHRpb24iOiBudWxsLAogICAgImRpc2NvdW50IjogbnVsbCwKICAgICJkaXNjb3VudHMiOiBbCgogICAgXSwKICAgICJkdWVfZGF0ZSI6IG51bGwsCiAgICAiZW5kaW5nX2JhbGFuY2UiOiAwLAogICAgImZvb3RlciI6IG51bGwsCiAgICAiaG9zdGVkX2ludm9pY2VfdXJsIjogImh0dHBzOi8vaW52b2ljZS5zdHJpcGUuY29tL2kvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L2ludnN0X0tEZWJacmZ0a2YxS1N0cVVqcWRJUmY5Q0hqMEI4ejQiLAogICAgImludm9pY2VfcGRmIjogImh0dHBzOi8vcGF5LnN0cmlwZS5jb20vaW52b2ljZS9hY2N0XzEwM3JFNjJzT21mNDdOejkvaW52c3RfS0RlYlpyZnRrZjFLU3RxVWpxZElSZjlDSGowQjh6NC9wZGYiLAogICAgImxhc3RfZmluYWxpemF0aW9uX2Vycm9yIjogbnVsbCwKICAgICJsaW5lcyI6IHsKICAgICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICAgImRhdGEiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogImlpXzFKWkRJSjJzT21mNDdOejliVDJqYW9hcSIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogOCwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFib25uZW1lbnQgbWVuc3VhbGlzYWJsZSAtIHN0YW5kYXJkLCBhc3NvY2lhdGlvbiwgeWVhciIsCiAgICAgICAgICAiZGlzY291bnRfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImRpc2NvdW50YWJsZSI6IHRydWUsCiAgICAgICAgICAiZGlzY291bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAiaW52b2ljZV9pdGVtIjogImlpXzFKWkRJSjJzT21mNDdOejliVDJqYW9hcSIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAicGVyaW9kIjogewogICAgICAgICAgICAiZW5kIjogMTYzNDEyNDM1MCwKICAgICAgICAgICAgInN0YXJ0IjogMTYzMTUzMjM1MAogICAgICAgICAgfSwKICAgICAgICAgICJwbGFuIjogbnVsbCwKICAgICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKWkRJSTJzT21mNDdOejltcnZMTVVWWCIsCiAgICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzUwLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiAiUHJpY2UgYWRqdXN0bWVudCBmb3IgcGF5bWVudCBzY2hlZHVsZSIsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgICAgICAgICAicmVjdXJyaW5nIjogbnVsbCwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogIm9uZV90aW1lIiwKICAgICAgICAgICAgInVuaXRfYW1vdW50IjogOCwKICAgICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOCIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJvcmF0aW9uIjogZmFsc2UsCiAgICAgICAgICAicXVhbnRpdHkiOiAxLAogICAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfS0RlYmFYU1J0WVU5UHciLAogICAgICAgICAgInRheF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidHlwZSI6ICJpbnZvaWNlaXRlbSIsCiAgICAgICAgICAidW5pcXVlX2lkIjogImlsXzFKWkRJSjJzT21mNDdOejljOHp4VVVDRiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJzbGlfMTc2NDU2MnNPbWY0N056OTZkMjYyOWQ2IiwKICAgICAgICAgICJvYmplY3QiOiAibGluZV9pdGVtIiwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiMSDDlyBBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIgKGF0ICQ5NC42NiAvIG1vbnRoKSIsCiAgICAgICAgICAiZGlzY291bnRfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImRpc2NvdW50YWJsZSI6IHRydWUsCiAgICAgICAgICAiZGlzY291bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAicGVyaW9kIjogewogICAgICAgICAgICAiZW5kIjogMTYzNDEyNDM1MCwKICAgICAgICAgICAgInN0YXJ0IjogMTYzMTUzMjM1MAogICAgICAgICAgfSwKICAgICAgICAgICJwbGFuIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpaRElJMnNPbWY0N056OVdiMElmY2hFIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAiYW1vdW50IjogOTQ2NiwKICAgICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNTAsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInRpZXJzIjogbnVsbCwKICAgICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInByaWNlIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpaRElJMnNPbWY0N056OVdiMElmY2hFIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNTAsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICAgInR5cGUiOiAicmVjdXJyaW5nIiwKICAgICAgICAgICAgInVuaXRfYW1vdW50IjogOTQ2NiwKICAgICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJvcmF0aW9uIjogZmFsc2UsCiAgICAgICAgICAicXVhbnRpdHkiOiAxLAogICAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfS0RlYmFYU1J0WVU5UHciLAogICAgICAgICAgInN1YnNjcmlwdGlvbl9pdGVtIjogInNpX0tEZWJscGRLYWFIMjAxIiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAic3Vic2NyaXB0aW9uIiwKICAgICAgICAgICJ1bmlxdWVfaWQiOiAiaWxfMUpaRElKMnNPbWY0N056OUJPSXJRNFR1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICJ0b3RhbF9jb3VudCI6IDIsCiAgICAgICJ1cmwiOiAiL3YxL2ludm9pY2VzL2luXzFKWkRJSjJzT21mNDdOejlIamZNa1VBYi9saW5lcyIKICAgIH0sCiAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICJtZXRhZGF0YSI6IHsKICAgIH0sCiAgICAibmV4dF9wYXltZW50X2F0dGVtcHQiOiBudWxsLAogICAgIm51bWJlciI6ICJCQ0MzMkI4LTA0NDEiLAogICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAicGFpZCI6IHRydWUsCiAgICAicGF5bWVudF9pbnRlbnQiOiBudWxsLAogICAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAgICJwYXltZW50X21ldGhvZF9vcHRpb25zIjogbnVsbCwKICAgICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogbnVsbAogICAgfSwKICAgICJwZXJpb2RfZW5kIjogMTYzMTUzMjM1MCwKICAgICJwZXJpb2Rfc3RhcnQiOiAxNjMxNTMyMzUwLAogICAgInBvc3RfcGF5bWVudF9jcmVkaXRfbm90ZXNfYW1vdW50IjogMCwKICAgICJwcmVfcGF5bWVudF9jcmVkaXRfbm90ZXNfYW1vdW50IjogMCwKICAgICJxdW90ZSI6IG51bGwsCiAgICAicmVjZWlwdF9udW1iZXIiOiBudWxsLAogICAgInN0YXJ0aW5nX2JhbGFuY2UiOiAtOTQ3NCwKICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAic3RhdHVzIjogInBhaWQiLAogICAgInN0YXR1c190cmFuc2l0aW9ucyI6IHsKICAgICAgImZpbmFsaXplZF9hdCI6IDE2MzE1MzIzNTAsCiAgICAgICJtYXJrZWRfdW5jb2xsZWN0aWJsZV9hdCI6IG51bGwsCiAgICAgICJwYWlkX2F0IjogMTYzMTUzMjM1MCwKICAgICAgInZvaWRlZF9hdCI6IG51bGwKICAgIH0sCiAgICAic3Vic2NyaXB0aW9uIjogInN1Yl9LRGViYVhTUnRZVTlQdyIsCiAgICAic3VidG90YWwiOiA5NDc0LAogICAgInRheCI6IG51bGwsCiAgICAidGF4X3BlcmNlbnQiOiBudWxsLAogICAgInRvdGFsIjogOTQ3NCwKICAgICJ0b3RhbF9kaXNjb3VudF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidG90YWxfdGF4X2Ftb3VudHMiOiBbCgogICAgXSwKICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICJ3ZWJob29rc19kZWxpdmVyZWRfYXQiOiAxNjMxNTMyMzUxCiAgfSwKICAibGl2ZW1vZGUiOiBmYWxzZSwKICAibWV0YWRhdGEiOiB7CiAgfSwKICAibmV4dF9wZW5kaW5nX2ludm9pY2VfaXRlbV9pbnZvaWNlIjogbnVsbCwKICAicGF1c2VfY29sbGVjdGlvbiI6IG51bGwsCiAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgfSwKICAicGVuZGluZ19pbnZvaWNlX2l0ZW1faW50ZXJ2YWwiOiBudWxsLAogICJwZW5kaW5nX3NldHVwX2ludGVudCI6IG51bGwsCiAgInBlbmRpbmdfdXBkYXRlIjogbnVsbCwKICAicGxhbiI6IHsKICAgICJpZCI6ICJwcmljZV8xSlpESUkyc09tZjQ3Tno5V2IwSWZjaEUiLAogICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICJhY3RpdmUiOiB0cnVlLAogICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAiYW1vdW50IjogOTQ2NiwKICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNTAsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgInRpZXJzIjogbnVsbCwKICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogIH0sCiAgInF1YW50aXR5IjogMSwKICAic2NoZWR1bGUiOiBudWxsLAogICJzdGFydCI6IDE2MzE1MzIzNTAsCiAgInN0YXJ0X2RhdGUiOiAxNjMxNTMyMzUwLAogICJzdGF0dXMiOiAiYWN0aXZlIiwKICAidGF4X3BlcmNlbnQiOiBudWxsLAogICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAidHJpYWxfZW5kIjogbnVsbCwKICAidHJpYWxfc3RhcnQiOiBudWxsCn0K - recorded_at: Mon, 13 Sep 2021 11:25:52 GMT -- request: - method: get - uri: https://api.stripe.com/v1/subscriptions/sub_KDebaXSRtYU9Pw - body: - encoding: US-ASCII - string: '' - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_bI89UuRqOTfwpY","request_duration_ms":2020}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:52 GMT - Content-Type: - - application/json - Content-Length: - - '3906' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_mOkm3H3LDq2Xjs - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "sub_KDebaXSRtYU9Pw", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631532350, - "billing_thresholds": null, - "cancel_at": 1663068348, - "cancel_at_period_end": false, - "canceled_at": 1631532350, - "collection_method": "charge_automatically", - "created": 1631532350, - "current_period_end": 1634124350, - "current_period_start": 1631532350, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDeblpdKaaH201", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631532351, - "metadata": { - }, - "plan": { - "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532350, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532350, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDebaXSRtYU9Pw", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDebaXSRtYU9Pw" - }, - "latest_invoice": "in_1JZDIJ2sOmf47Nz9HjfMkUAb", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532350, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631532350, - "start_date": 1631532350, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - recorded_at: Mon, 13 Sep 2021 11:25:52 GMT -- request: - method: post - uri: https://api.stripe.com/v1/customers/cus_8E2ys9zDZgetWX - body: - encoding: UTF-8 - string: balance=-10174 - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_mOkm3H3LDq2Xjs","request_duration_ms":313}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:54 GMT - Content-Type: - - application/json - Content-Length: - - '49689' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_EFIvFF9F46IIRj - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "cus_8E2ys9zDZgetWX", - "object": "customer", - "account_balance": -10174, - "address": null, - "balance": -10174, - "created": 1460026822, - "currency": "usd", - "default_source": "card_1Euc902sOmf47Nz9eZvNNyyQ", - "delinquent": false, - "description": "Lucile Seguin", - "discount": null, - "email": "lucile.seguin@live.fr", - "invoice_prefix": "BCC32B8", - "invoice_settings": { - "custom_fields": null, - "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", - "footer": null - }, - "livemode": false, - "metadata": { - }, - "name": null, - "next_invoice_sequence": 442, - "phone": null, - "preferred_locales": [ - - ], - "shipping": null, - "sources": { - "object": "list", - "data": [ - { - "id": "card_1Euc902sOmf47Nz9eZvNNyyQ", - "object": "card", - "address_city": null, - "address_country": null, - "address_line1": null, - "address_line1_check": null, - "address_line2": null, - "address_state": null, - "address_zip": null, - "address_zip_check": null, - "brand": "Visa", - "country": "US", - "customer": "cus_8E2ys9zDZgetWX", - "cvc_check": "unchecked", - "dynamic_last4": null, - "exp_month": 4, - "exp_year": 2020, - "fingerprint": "o52jybR7bnmNn6AT", - "funding": "credit", - "last4": "4242", - "metadata": { - }, - "name": null, - "tokenization_method": null - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/customers/cus_8E2ys9zDZgetWX/sources" - }, - "subscriptions": { - "object": "list", - "data": [ { "id": "sub_KDebaXSRtYU9Pw", "object": "subscription", @@ -4035,8 +964,8 @@ http_interactions: "canceled_at": 1631532350, "collection_method": "charge_automatically", "created": 1631532350, - "current_period_end": 1634124350, - "current_period_start": 1631532350, + "current_period_end": 1636802750, + "current_period_start": 1634124350, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", @@ -4120,7 +1049,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDebaXSRtYU9Pw" }, - "latest_invoice": "in_1JZDIJ2sOmf47Nz9HjfMkUAb", + "latest_invoice": "in_1Jk5cC2sOmf47Nz9TnIGCjbZ", "livemode": false, "metadata": { }, @@ -4181,8 +1110,8 @@ http_interactions: "canceled_at": 1631531544, "collection_method": "charge_automatically", "created": 1631531544, - "current_period_end": 1634123544, - "current_period_start": 1631531544, + "current_period_end": 1636801944, + "current_period_start": 1634123544, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, "default_payment_method": "pm_1JZD5E2sOmf47Nz9spRv1Hzv", @@ -4266,7 +1195,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeOOxKFukSOFq" }, - "latest_invoice": "in_1JZD5I2sOmf47Nz9JNfjxEpM", + "latest_invoice": "in_1Jk5Nv2sOmf47Nz9ovvmvGqC", "livemode": false, "metadata": { }, @@ -4327,8 +1256,8 @@ http_interactions: "canceled_at": 1631531384, "collection_method": "charge_automatically", "created": 1631531384, - "current_period_end": 1634123384, - "current_period_start": 1631531384, + "current_period_end": 1636801784, + "current_period_start": 1634123384, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, "default_payment_method": "pm_1JZD2e2sOmf47Nz9cm1GFlt9", @@ -4412,7 +1341,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeL49sskbLJn5" }, - "latest_invoice": "in_1JZD2j2sOmf47Nz9aSkXbY3K", + "latest_invoice": "in_1Jk5M52sOmf47Nz9dRn4fitQ", "livemode": false, "metadata": { }, @@ -4473,8 +1402,8 @@ http_interactions: "canceled_at": 1631528772, "collection_method": "charge_automatically", "created": 1631528772, - "current_period_end": 1634120772, - "current_period_start": 1631528772, + "current_period_end": 1636799172, + "current_period_start": 1634120772, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, "default_payment_method": "pm_1JZCMW2sOmf47Nz9Av5ineIY", @@ -4558,7 +1487,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDddMFRwup6SeD" }, - "latest_invoice": "in_1JZCMb2sOmf47Nz9ui14Zzyv", + "latest_invoice": "in_1Jk4fL2sOmf47Nz9CBaxQiwW", "livemode": false, "metadata": { }, @@ -4619,8 +1548,8 @@ http_interactions: "canceled_at": 1631525872, "collection_method": "charge_automatically", "created": 1631525872, - "current_period_end": 1634117872, - "current_period_start": 1631525872, + "current_period_end": 1636796272, + "current_period_start": 1634117872, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, "default_payment_method": "pm_1JZBbj2sOmf47Nz9tbdhvlLv", @@ -4704,7 +1633,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDcr7oTexO2Zqj" }, - "latest_invoice": "in_1JZBbo2sOmf47Nz9zIjFCbHt", + "latest_invoice": "in_1Jk3w02sOmf47Nz9fg2j5ghV", "livemode": false, "metadata": { }, @@ -4765,8 +1694,8 @@ http_interactions: "canceled_at": 1631525630, "collection_method": "charge_automatically", "created": 1631525630, - "current_period_end": 1634117630, - "current_period_start": 1631525630, + "current_period_end": 1636796030, + "current_period_start": 1634117630, "customer": "cus_8E2ys9zDZgetWX", "days_until_due": null, "default_payment_method": "pm_1JZBXq2sOmf47Nz9L2oVybfx", @@ -4850,7 +1779,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDcnjixXJ0mBtk" }, - "latest_invoice": "in_1JZBXu2sOmf47Nz9P19l9fy5", + "latest_invoice": "in_1Jk3rT2sOmf47Nz9uKJUrLqv", "livemode": false, "metadata": { }, @@ -4895,594 +1824,10 @@ http_interactions: "transfer_data": null, "trial_end": null, "trial_start": null - }, - { - "id": "sub_KDcYiLLbeDKj9g", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524733, - "billing_thresholds": null, - "cancel_at": 1663060731, - "cancel_at_period_end": false, - "canceled_at": 1631524733, - "collection_method": "charge_automatically", - "created": 1631524733, - "current_period_end": 1634116733, - "current_period_start": 1631524733, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBJN2sOmf47Nz9xyv4Ze7i", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcY9IkGJngPha", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524734, - "metadata": { - }, - "plan": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcYiLLbeDKj9g", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcYiLLbeDKj9g" - }, - "latest_invoice": "in_1JZBJS2sOmf47Nz92oK28Bh9", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBJQ2sOmf47Nz9qqBlVAy2", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524732, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524733, - "start_date": 1631524733, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcRXDcJ0ix3MN", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524314, - "billing_thresholds": null, - "cancel_at": 1663060311, - "cancel_at_period_end": false, - "canceled_at": 1631524314, - "collection_method": "charge_automatically", - "created": 1631524314, - "current_period_end": 1634116314, - "current_period_start": 1631524314, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZBCb2sOmf47Nz9TM4fz9pW", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcROMyFV4MBYX", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524315, - "metadata": { - }, - "plan": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcRXDcJ0ix3MN", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcRXDcJ0ix3MN" - }, - "latest_invoice": "in_1JZBCg2sOmf47Nz9aE9Fiwqy", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBCf2sOmf47Nz9DXn3q8cW", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524313, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524314, - "start_date": 1631524314, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcNdHpPzwgIaW", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524071, - "billing_thresholds": null, - "cancel_at": 1663060069, - "cancel_at_period_end": false, - "canceled_at": 1631524071, - "collection_method": "charge_automatically", - "created": 1631524071, - "current_period_end": 1634116071, - "current_period_start": 1631524071, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZB8g2sOmf47Nz9m3OUFPiE", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcNEhMYWfjQft", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524072, - "metadata": { - }, - "plan": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcNdHpPzwgIaW", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcNdHpPzwgIaW" - }, - "latest_invoice": "in_1JZB8l2sOmf47Nz9EtKwTvUm", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB8k2sOmf47Nz9ptgST04U", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524070, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524071, - "start_date": 1631524071, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcKVM2g2bzgZ9", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523883, - "billing_thresholds": null, - "cancel_at": 1663059881, - "cancel_at_period_end": false, - "canceled_at": 1631523883, - "collection_method": "charge_automatically", - "created": 1631523883, - "current_period_end": 1634115883, - "current_period_start": 1631523883, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZB5f2sOmf47Nz9g9tEapIV", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcKUZlGLYXeCS", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523884, - "metadata": { - }, - "plan": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcKVM2g2bzgZ9", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcKVM2g2bzgZ9" - }, - "latest_invoice": "in_1JZB5j2sOmf47Nz9mBKngZRT", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB5i2sOmf47Nz9YsIzac1c", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523882, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523883, - "start_date": 1631523883, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null } ], "has_more": true, - "total_count": 64, + "total_count": 68, "url": "/v1/customers/cus_8E2ys9zDZgetWX/subscriptions" }, "tax_exempt": "none", @@ -5498,13 +1843,13 @@ http_interactions: "tax_info": null, "tax_info_verification": null } - recorded_at: Mon, 13 Sep 2021 11:25:54 GMT + recorded_at: Mon, 18 Oct 2021 08:44:43 GMT - request: - method: get - uri: https://api.stripe.com/v1/subscriptions/sub_KDebaXSRtYU9Pw + method: post + uri: https://api.stripe.com/v1/customers/cus_8E2ys9zDZgetWX body: - encoding: US-ASCII - string: '' + encoding: UTF-8 + string: balance=-10174 headers: User-Agent: - Stripe/v1 RubyBindings/5.29.0 @@ -5513,13 +1858,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_EFIvFF9F46IIRj","request_duration_ms":1112}}' + - '{"last_request_metrics":{"request_id":"req_ORMShp1iikLzR8","request_duration_ms":918}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -5532,11 +1877,11 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:54 GMT + - Mon, 18 Oct 2021 08:44:44 GMT Content-Type: - application/json Content-Length: - - '3906' + - '49809' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -5551,56 +1896,784 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 98def57f-0c02-4de8-b2de-cb6fe8134d96 + Original-Request: + - req_bFyrd7cFbTUqGK Request-Id: - - req_GD1Z3hXLp0GqJ1 + - req_bFyrd7cFbTUqGK + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "sub_KDebaXSRtYU9Pw", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false + "id": "cus_8E2ys9zDZgetWX", + "object": "customer", + "account_balance": -10174, + "address": null, + "balance": -10174, + "created": 1460026822, + "currency": "usd", + "default_source": "card_1Euc902sOmf47Nz9eZvNNyyQ", + "delinquent": false, + "description": "Lucile Seguin", + "discount": null, + "email": "lucile.seguin@live.fr", + "invoice_prefix": "BCC32B8", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", + "footer": null }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631532350, - "billing_thresholds": null, - "cancel_at": 1663068348, - "cancel_at_period_end": false, - "canceled_at": 1631532350, - "collection_method": "charge_automatically", - "created": 1631532350, - "current_period_end": 1634124350, - "current_period_start": 1631532350, - "customer": "cus_8E2ys9zDZgetWX", - "days_until_due": null, - "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", - "default_source": null, - "default_tax_rates": [ + "livemode": false, + "metadata": { + }, + "name": null, + "next_invoice_sequence": 517, + "phone": null, + "preferred_locales": [ ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { + "shipping": null, + "sources": { "object": "list", "data": [ { - "id": "si_KDeblpdKaaH201", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631532351, + "id": "card_1Euc902sOmf47Nz9eZvNNyyQ", + "object": "card", + "address_city": null, + "address_country": null, + "address_line1": null, + "address_line1_check": null, + "address_line2": null, + "address_state": null, + "address_zip": null, + "address_zip_check": null, + "brand": "Visa", + "country": "US", + "customer": "cus_8E2ys9zDZgetWX", + "cvc_check": "unchecked", + "dynamic_last4": null, + "exp_month": 4, + "exp_year": 2020, + "fingerprint": "o52jybR7bnmNn6AT", + "funding": "credit", + "last4": "4242", "metadata": { }, + "name": null, + "tokenization_method": null + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/customers/cus_8E2ys9zDZgetWX/sources" + }, + "subscriptions": { + "object": "list", + "data": [ + { + "id": "sub_1JkmBg2sOmf47Nz9MGXiiaqr", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634288088, + "billing_thresholds": null, + "cancel_at": 1665824085, + "cancel_at_period_end": false, + "canceled_at": 1634288088, + "collection_method": "charge_automatically", + "created": 1634288088, + "current_period_end": 1636966488, + "current_period_start": 1634288088, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JkmBa2sOmf47Nz9ocFmIyBw", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPbOBUeFMwAvpR", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634288088, + "metadata": { + }, + "plan": { + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634288086, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634288086, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkmBg2sOmf47Nz9MGXiiaqr", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkmBg2sOmf47Nz9MGXiiaqr" + }, + "latest_invoice": "in_1JkmBg2sOmf47Nz9yKTwqM67", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634288086, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634288088, + "start_date": 1634288088, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JklFr2sOmf47Nz9JAPgZ9YT", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634284503, + "billing_thresholds": null, + "cancel_at": 1665820500, + "cancel_at_period_end": false, + "canceled_at": 1634284503, + "collection_method": "charge_automatically", + "created": 1634284503, + "current_period_end": 1636962903, + "current_period_start": 1634284503, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JklFm2sOmf47Nz9zXEuYdNz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPaQHXj6njZcgk", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634284503, + "metadata": { + }, + "plan": { + "id": "price_1JklFp2sOmf47Nz9VscUWcco", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634284501, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JklFp2sOmf47Nz9VscUWcco", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634284501, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JklFr2sOmf47Nz9JAPgZ9YT", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JklFr2sOmf47Nz9JAPgZ9YT" + }, + "latest_invoice": "in_1JklFr2sOmf47Nz9iDXxFP7P", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JklFp2sOmf47Nz9VscUWcco", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634284501, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634284503, + "start_date": 1634284503, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWe12sOmf47Nz937vcnagn", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634228340, + "billing_thresholds": null, + "cancel_at": 1665764338, + "cancel_at_period_end": false, + "canceled_at": 1634228340, + "collection_method": "charge_automatically", + "created": 1634228340, + "current_period_end": 1636906740, + "current_period_start": 1634228340, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JkWdv2sOmf47Nz9cmQRMuk3", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPLKMa1jO2CS4F", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634228341, + "metadata": { + }, + "plan": { + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634228339, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634228339, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWe12sOmf47Nz937vcnagn", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWe12sOmf47Nz937vcnagn" + }, + "latest_invoice": "in_1JkWe12sOmf47Nz9m0Su80Lj", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634228339, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634228340, + "start_date": 1634228340, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWOC2sOmf47Nz9FTXocHRk", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227359, + "billing_thresholds": null, + "cancel_at": 1665763357, + "cancel_at_period_end": false, + "canceled_at": 1634227359, + "collection_method": "charge_automatically", + "created": 1634227359, + "current_period_end": 1636905759, + "current_period_start": 1634227359, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JkWO62sOmf47Nz9wbRCcazs", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPL4QikDwY0073", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227360, + "metadata": { + }, + "plan": { + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227358, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227358, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWOC2sOmf47Nz9FTXocHRk", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWOC2sOmf47Nz9FTXocHRk" + }, + "latest_invoice": "in_1JkWOC2sOmf47Nz9f0lRIjGY", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227358, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227359, + "start_date": 1634227359, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDebaXSRtYU9Pw", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532350, + "billing_thresholds": null, + "cancel_at": 1663068348, + "cancel_at_period_end": false, + "canceled_at": 1631532350, + "collection_method": "charge_automatically", + "created": 1631532350, + "current_period_end": 1636802750, + "current_period_start": 1634124350, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeblpdKaaH201", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532351, + "metadata": { + }, + "plan": { + "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532350, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532350, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDebaXSRtYU9Pw", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDebaXSRtYU9Pw" + }, + "latest_invoice": "in_1Jk5cC2sOmf47Nz9TnIGCjbZ", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, "plan": { "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", "object": "plan", @@ -5624,12 +2697,1236 @@ http_interactions: "trial_period_days": null, "usage_type": "licensed" }, + "quantity": 1, + "schedule": null, + "start": 1631532350, + "start_date": 1631532350, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeOOxKFukSOFq", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631531544, + "billing_thresholds": null, + "cancel_at": 1663067542, + "cancel_at_period_end": false, + "canceled_at": 1631531544, + "collection_method": "charge_automatically", + "created": 1631531544, + "current_period_end": 1636801944, + "current_period_start": 1634123544, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZD5E2sOmf47Nz9spRv1Hzv", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeO7ibOLIHrd2", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631531545, + "metadata": { + }, + "plan": { + "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531543, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631531543, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeOOxKFukSOFq", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeOOxKFukSOFq" + }, + "latest_invoice": "in_1Jk5Nv2sOmf47Nz9ovvmvGqC", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531543, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631531544, + "start_date": 1631531544, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeL49sskbLJn5", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631531384, + "billing_thresholds": null, + "cancel_at": 1663067382, + "cancel_at_period_end": false, + "canceled_at": 1631531384, + "collection_method": "charge_automatically", + "created": 1631531384, + "current_period_end": 1636801784, + "current_period_start": 1634123384, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZD2e2sOmf47Nz9cm1GFlt9", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeLVc4MXPXjat", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631531385, + "metadata": { + }, + "plan": { + "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531384, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631531384, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeL49sskbLJn5", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeL49sskbLJn5" + }, + "latest_invoice": "in_1Jk5M52sOmf47Nz9dRn4fitQ", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531384, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631531384, + "start_date": 1631531384, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDddMFRwup6SeD", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631528772, + "billing_thresholds": null, + "cancel_at": 1663064770, + "cancel_at_period_end": false, + "canceled_at": 1631528772, + "collection_method": "charge_automatically", + "created": 1631528772, + "current_period_end": 1636799172, + "current_period_start": 1634120772, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZCMW2sOmf47Nz9Av5ineIY", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDddHFLKMC8QAW", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631528773, + "metadata": { + }, + "plan": { + "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631528772, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631528772, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDddMFRwup6SeD", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDddMFRwup6SeD" + }, + "latest_invoice": "in_1Jk4fL2sOmf47Nz9CBaxQiwW", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631528772, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631528772, + "start_date": 1631528772, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDcr7oTexO2Zqj", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631525872, + "billing_thresholds": null, + "cancel_at": 1663061870, + "cancel_at_period_end": false, + "canceled_at": 1631525872, + "collection_method": "charge_automatically", + "created": 1631525872, + "current_period_end": 1636796272, + "current_period_start": 1634117872, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZBbj2sOmf47Nz9tbdhvlLv", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDcrMC54ieiESF", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631525873, + "metadata": { + }, + "plan": { + "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525871, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631525871, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDcr7oTexO2Zqj", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDcr7oTexO2Zqj" + }, + "latest_invoice": "in_1Jk3w02sOmf47Nz9fg2j5ghV", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525871, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631525872, + "start_date": 1631525872, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDcnjixXJ0mBtk", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631525630, + "billing_thresholds": null, + "cancel_at": 1663061628, + "cancel_at_period_end": false, + "canceled_at": 1631525630, + "collection_method": "charge_automatically", + "created": 1631525630, + "current_period_end": 1636796030, + "current_period_start": 1634117630, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZBXq2sOmf47Nz9L2oVybfx", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDcn3F2qHgjfmO", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631525631, + "metadata": { + }, + "plan": { + "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525629, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631525629, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDcnjixXJ0mBtk", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDcnjixXJ0mBtk" + }, + "latest_invoice": "in_1Jk3rT2sOmf47Nz9uKJUrLqv", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZBXt2sOmf47Nz9QOhiSYYK", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525629, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631525630, + "start_date": 1631525630, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + } + ], + "has_more": true, + "total_count": 68, + "url": "/v1/customers/cus_8E2ys9zDZgetWX/subscriptions" + }, + "tax_exempt": "none", + "tax_ids": { + "object": "list", + "data": [ + + ], + "has_more": false, + "total_count": 0, + "url": "/v1/customers/cus_8E2ys9zDZgetWX/tax_ids" + }, + "tax_info": null, + "tax_info_verification": null + } + recorded_at: Mon, 18 Oct 2021 08:44:44 GMT +- request: + method: post + uri: https://api.stripe.com/v1/prices + body: + encoding: UTF-8 + string: unit_amount=9466¤cy=usd&product=prod_IZQAhb9nLu4jfN&recurring[interval]=month&recurring[interval_count]=1 + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_bFyrd7cFbTUqGK","request_duration_ms":977}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:45 GMT + Content-Type: + - application/json + Content-Length: + - '607' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Idempotency-Key: + - 26df7b66-f57c-4d60-a248-855135d50dde + Original-Request: + - req_LbSU9EMEk1rYLc + Request-Id: + - req_LbSU9EMEk1rYLc + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634546684, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + } + recorded_at: Mon, 18 Oct 2021 08:44:45 GMT +- request: + method: post + uri: https://api.stripe.com/v1/prices + body: + encoding: UTF-8 + string: unit_amount=8¤cy=usd&product=prod_IZQAhb9nLu4jfN&nickname=Price+adjustment+for+payment+schedule+ + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_LbSU9EMEk1rYLc","request_duration_ms":439}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:45 GMT + Content-Type: + - application/json + Content-Length: + - '495' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Idempotency-Key: + - 964a2694-c613-4e14-88bf-b89fe75a3924 + Original-Request: + - req_cpNb8X9GhXKyNc + Request-Id: + - req_cpNb8X9GhXKyNc + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "price_1JlrSb2sOmf47Nz9jgGVSuT7", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634546685, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": "Price adjustment for payment schedule", + "product": "prod_IZQAhb9nLu4jfN", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8, + "unit_amount_decimal": "8" + } + recorded_at: Mon, 18 Oct 2021 08:44:45 GMT +- request: + method: post + uri: https://api.stripe.com/v1/prices + body: + encoding: UTF-8 + string: unit_amount=1000¤cy=usd&product=prod_IZPyHpMCl38iQl&nickname=Reservations+for+payment+schedule+ + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_cpNb8X9GhXKyNc","request_duration_ms":417}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:45 GMT + Content-Type: + - application/json + Content-Length: + - '497' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Idempotency-Key: + - 5215c542-fc7d-4796-85b0-08382858dde6 + Original-Request: + - req_TpG4aNhV8rTka0 + Request-Id: + - req_TpG4aNhV8rTka0 + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "price_1JlrSb2sOmf47Nz9qCInRHWn", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634546685, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": "Reservations for payment schedule", + "product": "prod_IZPyHpMCl38iQl", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 1000, + "unit_amount_decimal": "1000" + } + recorded_at: Mon, 18 Oct 2021 08:44:46 GMT +- request: + method: post + uri: https://api.stripe.com/v1/subscriptions + body: + encoding: UTF-8 + string: customer=cus_8E2ys9zDZgetWX&cancel_at=1666082683&add_invoice_items[0][price]=price_1JlrSb2sOmf47Nz9jgGVSuT7&add_invoice_items[1][price]=price_1JlrSb2sOmf47Nz9qCInRHWn&coupon=GIME3EUR&items[0][price]=price_1JlrSa2sOmf47Nz9ZK9HcoJE&default_payment_method=pm_1JlrSX2sOmf47Nz9O4x8IvAt&expand[0]=latest_invoice.payment_intent + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_TpG4aNhV8rTka0","request_duration_ms":427}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:48 GMT + Content-Type: + - application/json + Content-Length: + - '13528' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Idempotency-Key: + - f1bf7ec1-ed73-4322-945d-6617fdf38971 + Original-Request: + - req_dV7qFlSzKcFLZu + Request-Id: + - req_dV7qFlSzKcFLZu + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: ASCII-8BIT + string: !binary |- + ewogICJpZCI6ICJzdWJfMUpsclNjMnNPbWY0N056OWlHbzJzdkFCIiwKICAib2JqZWN0IjogInN1YnNjcmlwdGlvbiIsCiAgImFwcGxpY2F0aW9uX2ZlZV9wZXJjZW50IjogbnVsbCwKICAiYXV0b21hdGljX3RheCI6IHsKICAgICJlbmFibGVkIjogZmFsc2UKICB9LAogICJiaWxsaW5nIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiYmlsbGluZ19jeWNsZV9hbmNob3IiOiAxNjM0NTQ2Njg2LAogICJiaWxsaW5nX3RocmVzaG9sZHMiOiBudWxsLAogICJjYW5jZWxfYXQiOiAxNjY2MDgyNjgzLAogICJjYW5jZWxfYXRfcGVyaW9kX2VuZCI6IGZhbHNlLAogICJjYW5jZWxlZF9hdCI6IDE2MzQ1NDY2ODYsCiAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiY3JlYXRlZCI6IDE2MzQ1NDY2ODYsCiAgImN1cnJlbnRfcGVyaW9kX2VuZCI6IDE2MzcyMjUwODYsCiAgImN1cnJlbnRfcGVyaW9kX3N0YXJ0IjogMTYzNDU0NjY4NiwKICAiY3VzdG9tZXIiOiAiY3VzXzhFMnlzOXpEWmdldFdYIiwKICAiZGF5c191bnRpbF9kdWUiOiBudWxsLAogICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogInBtXzFKbHJTWDJzT21mNDdOejlPNHg4SXZBdCIsCiAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogIF0sCiAgImRpc2NvdW50IjogbnVsbCwKICAiZW5kZWRfYXQiOiBudWxsLAogICJpbnZvaWNlX2N1c3RvbWVyX2JhbGFuY2Vfc2V0dGluZ3MiOiB7CiAgICAiY29uc3VtZV9hcHBsaWVkX2JhbGFuY2Vfb25fdm9pZCI6IHRydWUKICB9LAogICJpdGVtcyI6IHsKICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAiZGF0YSI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJzaV9LUWl1QW1CUWRQUUo1cyIsCiAgICAgICAgIm9iamVjdCI6ICJzdWJzY3JpcHRpb25faXRlbSIsCiAgICAgICAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgICAgICAgImNyZWF0ZWQiOiAxNjM0NTQ2Njg2LAogICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICB9LAogICAgICAgICJwbGFuIjogewogICAgICAgICAgImlkIjogInByaWNlXzFKbHJTYTJzT21mNDdOejlaSzlIY29KRSIsCiAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICJjcmVhdGVkIjogMTYzNDU0NjY4NCwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgfSwKICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUpsclNhMnNPbWY0N056OVpLOUhjb0pFIiwKICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjM0NTQ2Njg0LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICB9LAogICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUpsclNjMnNPbWY0N056OWlHbzJzdkFCIiwKICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICBdCiAgICAgIH0KICAgIF0sCiAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAidXJsIjogIi92MS9zdWJzY3JpcHRpb25faXRlbXM/c3Vic2NyaXB0aW9uPXN1Yl8xSmxyU2Myc09tZjQ3Tno5aUdvMnN2QUIiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUpsclNjMnNPbWY0N056OW40bk1yVGdjIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiAwLAogICAgImFtb3VudF9wYWlkIjogMCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogMCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMCwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IGZhbHNlLAogICAgImF1dG9tYXRpY190YXgiOiB7CiAgICAgICJlbmFibGVkIjogZmFsc2UsCiAgICAgICJzdGF0dXMiOiBudWxsCiAgICB9LAogICAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImJpbGxpbmdfcmVhc29uIjogInN1YnNjcmlwdGlvbl9jcmVhdGUiLAogICAgImNoYXJnZSI6IG51bGwsCiAgICAiY29sbGVjdGlvbl9tZXRob2QiOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImNyZWF0ZWQiOiAxNjM0NTQ2Njg2LAogICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAiY3VzdG9tX2ZpZWxkcyI6IG51bGwsCiAgICAiY3VzdG9tZXIiOiAiY3VzXzhFMnlzOXpEWmdldFdYIiwKICAgICJjdXN0b21lcl9hZGRyZXNzIjogbnVsbCwKICAgICJjdXN0b21lcl9lbWFpbCI6ICJsdWNpbGUuc2VndWluQGxpdmUuZnIiLAogICAgImN1c3RvbWVyX25hbWUiOiBudWxsLAogICAgImN1c3RvbWVyX3Bob25lIjogbnVsbCwKICAgICJjdXN0b21lcl9zaGlwcGluZyI6IG51bGwsCiAgICAiY3VzdG9tZXJfdGF4X2V4ZW1wdCI6ICJub25lIiwKICAgICJjdXN0b21lcl90YXhfaWRzIjogWwoKICAgIF0sCiAgICAiZGVmYXVsdF9wYXltZW50X21ldGhvZCI6IG51bGwsCiAgICAiZGVmYXVsdF9zb3VyY2UiOiBudWxsLAogICAgImRlZmF1bHRfdGF4X3JhdGVzIjogWwoKICAgIF0sCiAgICAiZGVzY3JpcHRpb24iOiBudWxsLAogICAgImRpc2NvdW50IjogewogICAgICAiaWQiOiAiZGlfMUpsclNjMnNPbWY0N056OXJ4TlJqOFczIiwKICAgICAgIm9iamVjdCI6ICJkaXNjb3VudCIsCiAgICAgICJjaGVja291dF9zZXNzaW9uIjogbnVsbCwKICAgICAgImNvdXBvbiI6IHsKICAgICAgICAiaWQiOiAiR0lNRTNFVVIiLAogICAgICAgICJvYmplY3QiOiAiY291cG9uIiwKICAgICAgICAiYW1vdW50X29mZiI6IDMwMCwKICAgICAgICAiY3JlYXRlZCI6IDE2MDk3NTc5NjQsCiAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgImR1cmF0aW9uIjogIm9uY2UiLAogICAgICAgICJkdXJhdGlvbl9pbl9tb250aHMiOiBudWxsLAogICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICJtYXhfcmVkZW1wdGlvbnMiOiBudWxsLAogICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICB9LAogICAgICAgICJuYW1lIjogbnVsbCwKICAgICAgICAicGVyY2VudF9vZmYiOiBudWxsLAogICAgICAgICJyZWRlZW1fYnkiOiAxNjQxMjkxOTU5LAogICAgICAgICJ0aW1lc19yZWRlZW1lZCI6IDc5LAogICAgICAgICJ2YWxpZCI6IHRydWUKICAgICAgfSwKICAgICAgImN1c3RvbWVyIjogImN1c184RTJ5czl6RFpnZXRXWCIsCiAgICAgICJlbmQiOiBudWxsLAogICAgICAiaW52b2ljZSI6IG51bGwsCiAgICAgICJpbnZvaWNlX2l0ZW0iOiBudWxsLAogICAgICAicHJvbW90aW9uX2NvZGUiOiBudWxsLAogICAgICAic3RhcnQiOiAxNjM0NTQ2Njg2LAogICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl8xSmxyU2Myc09tZjQ3Tno5aUdvMnN2QUIiCiAgICB9LAogICAgImRpc2NvdW50cyI6IFsKICAgICAgImRpXzFKbHJTYzJzT21mNDdOejlyeE5SajhXMyIKICAgIF0sCiAgICAiZHVlX2RhdGUiOiBudWxsLAogICAgImVuZGluZ19iYWxhbmNlIjogMCwKICAgICJmb290ZXIiOiBudWxsLAogICAgImhvc3RlZF9pbnZvaWNlX3VybCI6ICJodHRwczovL2ludm9pY2Uuc3RyaXBlLmNvbS9pL2FjY3RfMTAzckU2MnNPbWY0N056OS90ZXN0X1lXTmpkRjh4TUROeVJUWXljMDl0WmpRM1RubzVMRjlMVVdsMVRHaHlhVGhtUzNSRVQxWnJkMFZ3TTNaWWJYVnBVVXRsU1VkaDAxMDB6OTM1bWxPViIsCiAgICAiaW52b2ljZV9wZGYiOiAiaHR0cHM6Ly9wYXkuc3RyaXBlLmNvbS9pbnZvaWNlL2FjY3RfMTAzckU2MnNPbWY0N056OS90ZXN0X1lXTmpkRjh4TUROeVJUWXljMDl0WmpRM1RubzVMRjlMVVdsMVRHaHlhVGhtUzNSRVQxWnJkMFZ3TTNaWWJYVnBVVXRsU1VkaDAxMDB6OTM1bWxPVi9wZGYiLAogICAgImxhc3RfZmluYWxpemF0aW9uX2Vycm9yIjogbnVsbCwKICAgICJsaW5lcyI6IHsKICAgICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICAgImRhdGEiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogImlpXzFKbHJTYzJzT21mNDdOejlORjREVzZsciIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogMTAwMCwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkTDqWNvdXBldXNlIGxhc2VyIiwKICAgICAgICAgICJkaXNjb3VudF9hbW91bnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgImFtb3VudCI6IDI4LAogICAgICAgICAgICAgICJkaXNjb3VudCI6ICJkaV8xSmxyU2Myc09tZjQ3Tno5cnhOUmo4VzMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiZGlzY291bnRhYmxlIjogdHJ1ZSwKICAgICAgICAgICJkaXNjb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJpbnZvaWNlX2l0ZW0iOiAiaWlfMUpsclNjMnNPbWY0N056OU5GNERXNmxyIiwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAgICJlbmQiOiAxNjM3MjI1MDg2LAogICAgICAgICAgICAic3RhcnQiOiAxNjM0NTQ2Njg2CiAgICAgICAgICB9LAogICAgICAgICAgInBsYW4iOiBudWxsLAogICAgICAgICAgInByaWNlIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpsclNiMnNPbWY0N056OXFDSW5SSFduIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzQ1NDY2ODUsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6ICJSZXNlcnZhdGlvbnMgZm9yIHBheW1lbnQgc2NoZWR1bGUiLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUHlIcE1DbDM4aVFsIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IG51bGwsCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJvbmVfdGltZSIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDEwMDAsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjEwMDAiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKbHJTYzJzT21mNDdOejlpR28yc3ZBQiIsCiAgICAgICAgICAidGF4X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0YXhfcmF0ZXMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0eXBlIjogImludm9pY2VpdGVtIiwKICAgICAgICAgICJ1bmlxdWVfaWQiOiAiaWxfMUpsclNjMnNPbWY0N056OXBRYkhFajBZIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImlkIjogImlpXzFKbHJTYzJzT21mNDdOejlDZTA5cGpOaiIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogOCwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFib25uZW1lbnQgbWVuc3VhbGlzYWJsZSAtIHN0YW5kYXJkLCBhc3NvY2lhdGlvbiwgeWVhciIsCiAgICAgICAgICAiZGlzY291bnRfYW1vdW50cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJhbW91bnQiOiAwLAogICAgICAgICAgICAgICJkaXNjb3VudCI6ICJkaV8xSmxyU2Myc09tZjQ3Tno5cnhOUmo4VzMiCiAgICAgICAgICAgIH0KICAgICAgICAgIF0sCiAgICAgICAgICAiZGlzY291bnRhYmxlIjogdHJ1ZSwKICAgICAgICAgICJkaXNjb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJpbnZvaWNlX2l0ZW0iOiAiaWlfMUpsclNjMnNPbWY0N056OUNlMDlwak5qIiwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAgICJlbmQiOiAxNjM3MjI1MDg2LAogICAgICAgICAgICAic3RhcnQiOiAxNjM0NTQ2Njg2CiAgICAgICAgICB9LAogICAgICAgICAgInBsYW4iOiBudWxsLAogICAgICAgICAgInByaWNlIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpsclNiMnNPbWY0N056OWpnR1ZTdVQ3IiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzQ1NDY2ODUsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6ICJQcmljZSBhZGp1c3RtZW50IGZvciBwYXltZW50IHNjaGVkdWxlIiwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJyZWN1cnJpbmciOiBudWxsLAogICAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICAgInR5cGUiOiAib25lX3RpbWUiLAogICAgICAgICAgICAidW5pdF9hbW91bnQiOiA4LAogICAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI4IgogICAgICAgICAgfSwKICAgICAgICAgICJwcm9yYXRpb24iOiBmYWxzZSwKICAgICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl8xSmxyU2Myc09tZjQ3Tno5aUdvMnN2QUIiLAogICAgICAgICAgInRheF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidHlwZSI6ICJpbnZvaWNlaXRlbSIsCiAgICAgICAgICAidW5pcXVlX2lkIjogImlsXzFKbHJTYzJzT21mNDdOejlkOURoeHdxUyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJzbGlfMTgyODg1MnNPbWY0N056OTVjYzlmOWFhIiwKICAgICAgICAgICJvYmplY3QiOiAibGluZV9pdGVtIiwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiMSDDlyBBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIgKGF0ICQ5NC42NiAvIG1vbnRoKSIsCiAgICAgICAgICAiZGlzY291bnRfYW1vdW50cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICJhbW91bnQiOiAyNzIsCiAgICAgICAgICAgICAgImRpc2NvdW50IjogImRpXzFKbHJTYzJzT21mNDdOejlyeE5SajhXMyIKICAgICAgICAgICAgfQogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzcyMjUwODYsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzQ1NDY2ODYKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKbHJTYTJzT21mNDdOejlaSzlIY29KRSIsCiAgICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjM0NTQ2Njg0LAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogICAgICAgICAgfSwKICAgICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKbHJTYTJzT21mNDdOejlaSzlIY29KRSIsCiAgICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjM0NTQ2Njg0LAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IHsKICAgICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjk0NjYiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKbHJTYzJzT21mNDdOejlpR28yc3ZBQiIsCiAgICAgICAgICAic3Vic2NyaXB0aW9uX2l0ZW0iOiAic2lfS1FpdUFtQlFkUFFKNXMiLAogICAgICAgICAgInRheF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidHlwZSI6ICJzdWJzY3JpcHRpb24iLAogICAgICAgICAgInVuaXF1ZV9pZCI6ICJpbF8xSmxyU2Myc09tZjQ3Tno5NUVLT21KT1ciCiAgICAgICAgfQogICAgICBdLAogICAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICAgInRvdGFsX2NvdW50IjogMywKICAgICAgInVybCI6ICIvdjEvaW52b2ljZXMvaW5fMUpsclNjMnNPbWY0N056OW40bk1yVGdjL2xpbmVzIgogICAgfSwKICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgIm1ldGFkYXRhIjogewogICAgfSwKICAgICJuZXh0X3BheW1lbnRfYXR0ZW1wdCI6IG51bGwsCiAgICAibnVtYmVyIjogIkJDQzMyQjgtMDUxNyIsCiAgICAib25fYmVoYWxmX29mIjogbnVsbCwKICAgICJwYWlkIjogdHJ1ZSwKICAgICJwYXltZW50X2ludGVudCI6IG51bGwsCiAgICAicGF5bWVudF9zZXR0aW5ncyI6IHsKICAgICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiBudWxsLAogICAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgICB9LAogICAgInBlcmlvZF9lbmQiOiAxNjM0NTQ2Njg2LAogICAgInBlcmlvZF9zdGFydCI6IDE2MzQ1NDY2ODYsCiAgICAicG9zdF9wYXltZW50X2NyZWRpdF9ub3Rlc19hbW91bnQiOiAwLAogICAgInByZV9wYXltZW50X2NyZWRpdF9ub3Rlc19hbW91bnQiOiAwLAogICAgInF1b3RlIjogbnVsbCwKICAgICJyZWNlaXB0X251bWJlciI6IG51bGwsCiAgICAic3RhcnRpbmdfYmFsYW5jZSI6IC0xMDE3NCwKICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAic3RhdHVzIjogInBhaWQiLAogICAgInN0YXR1c190cmFuc2l0aW9ucyI6IHsKICAgICAgImZpbmFsaXplZF9hdCI6IDE2MzQ1NDY2ODYsCiAgICAgICJtYXJrZWRfdW5jb2xsZWN0aWJsZV9hdCI6IG51bGwsCiAgICAgICJwYWlkX2F0IjogMTYzNDU0NjY4NiwKICAgICAgInZvaWRlZF9hdCI6IG51bGwKICAgIH0sCiAgICAic3Vic2NyaXB0aW9uIjogInN1Yl8xSmxyU2Myc09tZjQ3Tno5aUdvMnN2QUIiLAogICAgInN1YnRvdGFsIjogMTA0NzQsCiAgICAidGF4IjogbnVsbCwKICAgICJ0YXhfcGVyY2VudCI6IG51bGwsCiAgICAidG90YWwiOiAxMDE3NCwKICAgICJ0b3RhbF9kaXNjb3VudF9hbW91bnRzIjogWwogICAgICB7CiAgICAgICAgImFtb3VudCI6IDMwMCwKICAgICAgICAiZGlzY291bnQiOiAiZGlfMUpsclNjMnNPbWY0N056OXJ4TlJqOFczIgogICAgICB9CiAgICBdLAogICAgInRvdGFsX3RheF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgICAid2ViaG9va3NfZGVsaXZlcmVkX2F0IjogMTYzNDU0NjY4NgogIH0sCiAgImxpdmVtb2RlIjogZmFsc2UsCiAgIm1ldGFkYXRhIjogewogIH0sCiAgIm5leHRfcGVuZGluZ19pbnZvaWNlX2l0ZW1faW52b2ljZSI6IG51bGwsCiAgInBhdXNlX2NvbGxlY3Rpb24iOiBudWxsLAogICJwYXltZW50X3NldHRpbmdzIjogewogICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiBudWxsLAogICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogbnVsbAogIH0sCiAgInBlbmRpbmdfaW52b2ljZV9pdGVtX2ludGVydmFsIjogbnVsbCwKICAicGVuZGluZ19zZXR1cF9pbnRlbnQiOiBudWxsLAogICJwZW5kaW5nX3VwZGF0ZSI6IG51bGwsCiAgInBsYW4iOiB7CiAgICAiaWQiOiAicHJpY2VfMUpsclNhMnNPbWY0N056OVpLOUhjb0pFIiwKICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgImFtb3VudCI6IDk0NjYsCiAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgImNyZWF0ZWQiOiAxNjM0NTQ2Njg0LAogICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgImludGVydmFsX2NvdW50IjogMSwKICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgIm1ldGFkYXRhIjogewogICAgfSwKICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICJ0aWVycyI6IG51bGwsCiAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICB9LAogICJxdWFudGl0eSI6IDEsCiAgInNjaGVkdWxlIjogbnVsbCwKICAic3RhcnQiOiAxNjM0NTQ2Njg2LAogICJzdGFydF9kYXRlIjogMTYzNDU0NjY4NiwKICAic3RhdHVzIjogImFjdGl2ZSIsCiAgInRheF9wZXJjZW50IjogbnVsbCwKICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgInRyaWFsX2VuZCI6IG51bGwsCiAgInRyaWFsX3N0YXJ0IjogbnVsbAp9Cg== + recorded_at: Mon, 18 Oct 2021 08:44:48 GMT +- request: + method: get + uri: https://api.stripe.com/v1/subscriptions/sub_1JlrSc2sOmf47Nz9iGo2svAB + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_dV7qFlSzKcFLZu","request_duration_ms":2117}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:48 GMT + Content-Type: + - application/json + Content-Length: + - '3936' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_RPx14pHT5PJgSk + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "sub_1JlrSc2sOmf47Nz9iGo2svAB", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634546686, + "billing_thresholds": null, + "cancel_at": 1666082683, + "cancel_at_period_end": false, + "canceled_at": 1634546686, + "collection_method": "charge_automatically", + "created": 1634546686, + "current_period_end": 1637225086, + "current_period_start": 1634546686, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KQiuAmBQdPQJ5s", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634546686, + "metadata": { + }, + "plan": { + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634546684, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, "price": { - "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631532350, + "created": 1634546684, "currency": "usd", "livemode": false, "lookup_key": null, @@ -5652,7 +3949,7 @@ http_interactions: "unit_amount_decimal": "9466" }, "quantity": 1, - "subscription": "sub_KDebaXSRtYU9Pw", + "subscription": "sub_1JlrSc2sOmf47Nz9iGo2svAB", "tax_rates": [ ] @@ -5660,9 +3957,9 @@ http_interactions: ], "has_more": false, "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDebaXSRtYU9Pw" + "url": "/v1/subscription_items?subscription=sub_1JlrSc2sOmf47Nz9iGo2svAB" }, - "latest_invoice": "in_1JZDIJ2sOmf47Nz9HjfMkUAb", + "latest_invoice": "in_1JlrSc2sOmf47Nz9n4nMrTgc", "livemode": false, "metadata": { }, @@ -5676,14 +3973,14 @@ http_interactions: "pending_setup_intent": null, "pending_update": null, "plan": { - "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", "object": "plan", "active": true, "aggregate_usage": null, "amount": 9466, "amount_decimal": "9466", "billing_scheme": "per_unit", - "created": 1631532350, + "created": 1634546684, "currency": "usd", "interval": "month", "interval_count": 1, @@ -5700,13 +3997,1729 @@ http_interactions: }, "quantity": 1, "schedule": null, - "start": 1631532350, - "start_date": 1631532350, + "start": 1634546686, + "start_date": 1634546686, "status": "active", "tax_percent": null, "transfer_data": null, "trial_end": null, "trial_start": null } - recorded_at: Mon, 13 Sep 2021 11:25:54 GMT + recorded_at: Mon, 18 Oct 2021 08:44:48 GMT +- request: + method: get + uri: https://api.stripe.com/v1/customers/cus_8E2ys9zDZgetWX + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_RPx14pHT5PJgSk","request_duration_ms":377}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:49 GMT + Content-Type: + - application/json + Content-Length: + - '49829' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_MBGVAfIALU7GkX + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "cus_8E2ys9zDZgetWX", + "object": "customer", + "account_balance": 0, + "address": null, + "balance": 0, + "created": 1460026822, + "currency": "usd", + "default_source": "card_1Euc902sOmf47Nz9eZvNNyyQ", + "delinquent": false, + "description": "Lucile Seguin", + "discount": null, + "email": "lucile.seguin@live.fr", + "invoice_prefix": "BCC32B8", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", + "footer": null + }, + "livemode": false, + "metadata": { + }, + "name": null, + "next_invoice_sequence": 518, + "phone": null, + "preferred_locales": [ + + ], + "shipping": null, + "sources": { + "object": "list", + "data": [ + { + "id": "card_1Euc902sOmf47Nz9eZvNNyyQ", + "object": "card", + "address_city": null, + "address_country": null, + "address_line1": null, + "address_line1_check": null, + "address_line2": null, + "address_state": null, + "address_zip": null, + "address_zip_check": null, + "brand": "Visa", + "country": "US", + "customer": "cus_8E2ys9zDZgetWX", + "cvc_check": "unchecked", + "dynamic_last4": null, + "exp_month": 4, + "exp_year": 2020, + "fingerprint": "o52jybR7bnmNn6AT", + "funding": "credit", + "last4": "4242", + "metadata": { + }, + "name": null, + "tokenization_method": null + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/customers/cus_8E2ys9zDZgetWX/sources" + }, + "subscriptions": { + "object": "list", + "data": [ + { + "id": "sub_1JlrSc2sOmf47Nz9iGo2svAB", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634546686, + "billing_thresholds": null, + "cancel_at": 1666082683, + "cancel_at_period_end": false, + "canceled_at": 1634546686, + "collection_method": "charge_automatically", + "created": 1634546686, + "current_period_end": 1637225086, + "current_period_start": 1634546686, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KQiuAmBQdPQJ5s", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634546686, + "metadata": { + }, + "plan": { + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634546684, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634546684, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JlrSc2sOmf47Nz9iGo2svAB", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JlrSc2sOmf47Nz9iGo2svAB" + }, + "latest_invoice": "in_1JlrSc2sOmf47Nz9n4nMrTgc", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JlrSa2sOmf47Nz9ZK9HcoJE", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634546684, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634546686, + "start_date": 1634546686, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkmBg2sOmf47Nz9MGXiiaqr", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634288088, + "billing_thresholds": null, + "cancel_at": 1665824085, + "cancel_at_period_end": false, + "canceled_at": 1634288088, + "collection_method": "charge_automatically", + "created": 1634288088, + "current_period_end": 1636966488, + "current_period_start": 1634288088, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JkmBa2sOmf47Nz9ocFmIyBw", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPbOBUeFMwAvpR", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634288088, + "metadata": { + }, + "plan": { + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634288086, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634288086, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkmBg2sOmf47Nz9MGXiiaqr", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkmBg2sOmf47Nz9MGXiiaqr" + }, + "latest_invoice": "in_1JkmBg2sOmf47Nz9yKTwqM67", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkmBe2sOmf47Nz99Wrpiisc", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634288086, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634288088, + "start_date": 1634288088, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JklFr2sOmf47Nz9JAPgZ9YT", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634284503, + "billing_thresholds": null, + "cancel_at": 1665820500, + "cancel_at_period_end": false, + "canceled_at": 1634284503, + "collection_method": "charge_automatically", + "created": 1634284503, + "current_period_end": 1636962903, + "current_period_start": 1634284503, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JklFm2sOmf47Nz9zXEuYdNz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPaQHXj6njZcgk", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634284503, + "metadata": { + }, + "plan": { + "id": "price_1JklFp2sOmf47Nz9VscUWcco", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634284501, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JklFp2sOmf47Nz9VscUWcco", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634284501, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JklFr2sOmf47Nz9JAPgZ9YT", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JklFr2sOmf47Nz9JAPgZ9YT" + }, + "latest_invoice": "in_1JklFr2sOmf47Nz9iDXxFP7P", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JklFp2sOmf47Nz9VscUWcco", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634284501, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634284503, + "start_date": 1634284503, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWe12sOmf47Nz937vcnagn", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634228340, + "billing_thresholds": null, + "cancel_at": 1665764338, + "cancel_at_period_end": false, + "canceled_at": 1634228340, + "collection_method": "charge_automatically", + "created": 1634228340, + "current_period_end": 1636906740, + "current_period_start": 1634228340, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JkWdv2sOmf47Nz9cmQRMuk3", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPLKMa1jO2CS4F", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634228341, + "metadata": { + }, + "plan": { + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634228339, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634228339, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWe12sOmf47Nz937vcnagn", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWe12sOmf47Nz937vcnagn" + }, + "latest_invoice": "in_1JkWe12sOmf47Nz9m0Su80Lj", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWdz2sOmf47Nz9os0MVSDB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634228339, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634228340, + "start_date": 1634228340, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWOC2sOmf47Nz9FTXocHRk", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227359, + "billing_thresholds": null, + "cancel_at": 1665763357, + "cancel_at_period_end": false, + "canceled_at": 1634227359, + "collection_method": "charge_automatically", + "created": 1634227359, + "current_period_end": 1636905759, + "current_period_start": 1634227359, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JkWO62sOmf47Nz9wbRCcazs", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPL4QikDwY0073", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227360, + "metadata": { + }, + "plan": { + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227358, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227358, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWOC2sOmf47Nz9FTXocHRk", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWOC2sOmf47Nz9FTXocHRk" + }, + "latest_invoice": "in_1JkWOC2sOmf47Nz9f0lRIjGY", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWOA2sOmf47Nz979LjCXIX", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227358, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227359, + "start_date": 1634227359, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDebaXSRtYU9Pw", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532350, + "billing_thresholds": null, + "cancel_at": 1663068348, + "cancel_at_period_end": false, + "canceled_at": 1631532350, + "collection_method": "charge_automatically", + "created": 1631532350, + "current_period_end": 1636802750, + "current_period_start": 1634124350, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZDIE2sOmf47Nz941MJycRQ", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeblpdKaaH201", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532351, + "metadata": { + }, + "plan": { + "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532350, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532350, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDebaXSRtYU9Pw", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDebaXSRtYU9Pw" + }, + "latest_invoice": "in_1Jk5cC2sOmf47Nz9TnIGCjbZ", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDII2sOmf47Nz9Wb0IfchE", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532350, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532350, + "start_date": 1631532350, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeOOxKFukSOFq", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631531544, + "billing_thresholds": null, + "cancel_at": 1663067542, + "cancel_at_period_end": false, + "canceled_at": 1631531544, + "collection_method": "charge_automatically", + "created": 1631531544, + "current_period_end": 1636801944, + "current_period_start": 1634123544, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZD5E2sOmf47Nz9spRv1Hzv", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeO7ibOLIHrd2", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631531545, + "metadata": { + }, + "plan": { + "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531543, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631531543, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeOOxKFukSOFq", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeOOxKFukSOFq" + }, + "latest_invoice": "in_1Jk5Nv2sOmf47Nz9ovvmvGqC", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZD5H2sOmf47Nz9RE9xYVzW", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531543, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631531544, + "start_date": 1631531544, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeL49sskbLJn5", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631531384, + "billing_thresholds": null, + "cancel_at": 1663067382, + "cancel_at_period_end": false, + "canceled_at": 1631531384, + "collection_method": "charge_automatically", + "created": 1631531384, + "current_period_end": 1636801784, + "current_period_start": 1634123384, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZD2e2sOmf47Nz9cm1GFlt9", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeLVc4MXPXjat", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631531385, + "metadata": { + }, + "plan": { + "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531384, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631531384, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeL49sskbLJn5", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeL49sskbLJn5" + }, + "latest_invoice": "in_1Jk5M52sOmf47Nz9dRn4fitQ", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZD2i2sOmf47Nz9HgfbKryk", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531384, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631531384, + "start_date": 1631531384, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDddMFRwup6SeD", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631528772, + "billing_thresholds": null, + "cancel_at": 1663064770, + "cancel_at_period_end": false, + "canceled_at": 1631528772, + "collection_method": "charge_automatically", + "created": 1631528772, + "current_period_end": 1636799172, + "current_period_start": 1634120772, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZCMW2sOmf47Nz9Av5ineIY", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDddHFLKMC8QAW", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631528773, + "metadata": { + }, + "plan": { + "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631528772, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631528772, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDddMFRwup6SeD", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDddMFRwup6SeD" + }, + "latest_invoice": "in_1Jk4fL2sOmf47Nz9CBaxQiwW", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZCMa2sOmf47Nz9WZCd7fSB", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631528772, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631528772, + "start_date": 1631528772, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDcr7oTexO2Zqj", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631525872, + "billing_thresholds": null, + "cancel_at": 1663061870, + "cancel_at_period_end": false, + "canceled_at": 1631525872, + "collection_method": "charge_automatically", + "created": 1631525872, + "current_period_end": 1636796272, + "current_period_start": 1634117872, + "customer": "cus_8E2ys9zDZgetWX", + "days_until_due": null, + "default_payment_method": "pm_1JZBbj2sOmf47Nz9tbdhvlLv", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDcrMC54ieiESF", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631525873, + "metadata": { + }, + "plan": { + "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525871, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631525871, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDcr7oTexO2Zqj", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDcr7oTexO2Zqj" + }, + "latest_invoice": "in_1Jk3w02sOmf47Nz9fg2j5ghV", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZBbn2sOmf47Nz9gTKOj3St", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525871, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631525872, + "start_date": 1631525872, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + } + ], + "has_more": true, + "total_count": 69, + "url": "/v1/customers/cus_8E2ys9zDZgetWX/subscriptions" + }, + "tax_exempt": "none", + "tax_ids": { + "object": "list", + "data": [ + + ], + "has_more": false, + "total_count": 0, + "url": "/v1/customers/cus_8E2ys9zDZgetWX/tax_ids" + }, + "tax_info": null, + "tax_info_verification": null + } + recorded_at: Mon, 18 Oct 2021 08:44:49 GMT +- request: + method: get + uri: https://api.stripe.com/v1/payment_methods/pm_1JlrSX2sOmf47Nz9O4x8IvAt + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_MBGVAfIALU7GkX","request_duration_ms":639}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Mon, 18 Oct 2021 08:44:49 GMT + Content-Type: + - application/json + Content-Length: + - '945' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_RmcFNPXaqrPUG5 + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "pm_1JlrSX2sOmf47Nz9O4x8IvAt", + "object": "payment_method", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "US", + "exp_month": 4, + "exp_year": 2022, + "fingerprint": "o52jybR7bnmNn6AT", + "funding": "credit", + "generated_from": null, + "last4": "4242", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1634546681, + "customer": "cus_8E2ys9zDZgetWX", + "livemode": false, + "metadata": { + }, + "type": "card" + } + recorded_at: Mon, 18 Oct 2021 08:44:49 GMT recorded_with: VCR 6.0.0 diff --git a/test/vcr_cassettes/reservations_training_subscription_with_payment_schedule.yml b/test/vcr_cassettes/reservations_training_subscription_with_payment_schedule.yml index 2501735ce..e00a3b0cf 100644 --- a/test/vcr_cassettes/reservations_training_subscription_with_payment_schedule.yml +++ b/test/vcr_cassettes/reservations_training_subscription_with_payment_schedule.yml @@ -13,14 +13,12 @@ http_interactions: - Bearer sk_test_testfaketestfaketestfake Content-Type: - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_rJM7Tj1DPqPulJ","request_duration_ms":555}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -33,7 +31,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:58 GMT + - Fri, 15 Oct 2021 07:30:40 GMT Content-Type: - application/json Content-Length: @@ -52,19 +50,23 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - b391d4b2-6a23-42a8-bdc8-5de28c25f285 + Original-Request: + - req_b94fsZi5USwUuK Request-Id: - - req_5QA3Vs0mjOZJaE + - req_b94fsZi5USwUuK + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '6' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", + "id": "pm_1JkksG2sOmf47Nz9dNTQ60AF", "object": "payment_method", "billing_details": { "address": { @@ -104,17 +106,17 @@ http_interactions: }, "wallet": null }, - "created": 1631532357, + "created": 1634283040, "customer": null, "livemode": false, "metadata": { }, "type": "card" } - recorded_at: Mon, 13 Sep 2021 11:25:58 GMT + recorded_at: Fri, 15 Oct 2021 07:30:40 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1JZDIP2sOmf47Nz9RVtJc1dz/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1JkksG2sOmf47Nz9dNTQ60AF/attach body: encoding: UTF-8 string: customer=cus_8Di1wjdVktv5kt @@ -126,13 +128,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_5QA3Vs0mjOZJaE","request_duration_ms":775}}' + - '{"last_request_metrics":{"request_id":"req_b94fsZi5USwUuK","request_duration_ms":752}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -145,7 +147,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:59 GMT + - Fri, 15 Oct 2021 07:30:41 GMT Content-Type: - application/json Content-Length: @@ -164,19 +166,23 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 8ffc7213-d6ad-40cb-b905-11984920e8a8 + Original-Request: + - req_fO5s0JlIHsdfGM Request-Id: - - req_gtZABiHBPbKflR + - req_fO5s0JlIHsdfGM + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '6' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", + "id": "pm_1JkksG2sOmf47Nz9dNTQ60AF", "object": "payment_method", "billing_details": { "address": { @@ -216,20 +222,20 @@ http_interactions: }, "wallet": null }, - "created": 1631532357, + "created": 1634283040, "customer": "cus_8Di1wjdVktv5kt", "livemode": false, "metadata": { }, "type": "card" } - recorded_at: Mon, 13 Sep 2021 11:25:59 GMT + recorded_at: Fri, 15 Oct 2021 07:30:41 GMT - request: method: post uri: https://api.stripe.com/v1/customers/cus_8Di1wjdVktv5kt body: encoding: UTF-8 - string: invoice_settings[default_payment_method]=pm_1JZDIP2sOmf47Nz9RVtJc1dz + string: invoice_settings[default_payment_method]=pm_1JkksG2sOmf47Nz9dNTQ60AF headers: User-Agent: - Stripe/v1 RubyBindings/5.29.0 @@ -238,13 +244,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_gtZABiHBPbKflR","request_duration_ms":798}}' + - '{"last_request_metrics":{"request_id":"req_fO5s0JlIHsdfGM","request_duration_ms":834}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -257,11 +263,11 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:59 GMT + - Fri, 15 Oct 2021 07:30:42 GMT Content-Type: - application/json Content-Length: - - '49679' + - '49845' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -276,12 +282,16 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 07bdd63c-d82a-4c5b-af20-88042d75419d + Original-Request: + - req_oOeUrytkxbeMDu Request-Id: - - req_KtSIM4xEmlSjVF + - req_oOeUrytkxbeMDu + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: @@ -303,14 +313,14 @@ http_interactions: "invoice_prefix": "C0E661C", "invoice_settings": { "custom_fields": null, - "default_payment_method": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", + "default_payment_method": "pm_1JkksG2sOmf47Nz9dNTQ60AF", "footer": null }, "livemode": false, "metadata": { }, "name": null, - "next_invoice_sequence": 1256, + "next_invoice_sequence": 1457, "phone": null, "preferred_locales": [ @@ -353,6 +363,882 @@ http_interactions: "subscriptions": { "object": "list", "data": [ + { + "id": "sub_1JkWLZ2sOmf47Nz9w2nKfeEK", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227197, + "billing_thresholds": null, + "cancel_at": 1665763195, + "cancel_at_period_end": false, + "canceled_at": 1634227197, + "collection_method": "charge_automatically", + "created": 1634227197, + "current_period_end": 1636905597, + "current_period_start": 1634227197, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkWLV2sOmf47Nz9xRAxhRsO", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPL1MX9RacpolM", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227197, + "metadata": { + }, + "plan": { + "id": "price_1JkWLY2sOmf47Nz9qBznWZ1L", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227196, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWLY2sOmf47Nz9qBznWZ1L", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227196, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWLZ2sOmf47Nz9w2nKfeEK", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWLZ2sOmf47Nz9w2nKfeEK" + }, + "latest_invoice": "in_1JkWLZ2sOmf47Nz9G7pXzBXm", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWLY2sOmf47Nz9qBznWZ1L", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227196, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227197, + "start_date": 1634227197, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWL22sOmf47Nz9QynJVnJq", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227164, + "billing_thresholds": null, + "cancel_at": 1665763162, + "cancel_at_period_end": false, + "canceled_at": 1634227164, + "collection_method": "charge_automatically", + "created": 1634227164, + "current_period_end": 1636905564, + "current_period_start": 1634227164, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkWKy2sOmf47Nz9hyz9oVKt", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPL1rIMIn7Dja5", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227164, + "metadata": { + }, + "plan": { + "id": "price_1JkWL12sOmf47Nz98iad0nyI", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227163, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWL12sOmf47Nz98iad0nyI", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227163, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWL22sOmf47Nz9QynJVnJq", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWL22sOmf47Nz9QynJVnJq" + }, + "latest_invoice": "in_1JkWL22sOmf47Nz9zTqCdG1T", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWL12sOmf47Nz98iad0nyI", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227163, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227164, + "start_date": 1634227164, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWIu2sOmf47Nz9blZ3AdqA", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227031, + "billing_thresholds": null, + "cancel_at": 1665763030, + "cancel_at_period_end": false, + "canceled_at": 1634227031, + "collection_method": "charge_automatically", + "created": 1634227031, + "current_period_end": 1636905431, + "current_period_start": 1634227031, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkWIq2sOmf47Nz9y8vyE7cz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKyNBY7Dth5wf", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227032, + "metadata": { + }, + "plan": { + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227030, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227030, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWIu2sOmf47Nz9blZ3AdqA", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWIu2sOmf47Nz9blZ3AdqA" + }, + "latest_invoice": "in_1JkWIu2sOmf47Nz9obDWtNdH", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227030, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227031, + "start_date": 1634227031, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkW7C2sOmf47Nz9v1DfTXVk", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634226305, + "billing_thresholds": null, + "cancel_at": 1665762304, + "cancel_at_period_end": false, + "canceled_at": 1634226305, + "collection_method": "charge_automatically", + "created": 1634226305, + "current_period_end": 1636904705, + "current_period_start": 1634226305, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkW772sOmf47Nz9IlBfocG1", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKmRh1aVMvlVs", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634226306, + "metadata": { + }, + "plan": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkW7C2sOmf47Nz9v1DfTXVk", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkW7C2sOmf47Nz9v1DfTXVk" + }, + "latest_invoice": "in_1JkW7C2sOmf47Nz9DHI5iyGy", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634226305, + "start_date": 1634226305, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkW4B2sOmf47Nz9H7F8oy4X", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634226119, + "billing_thresholds": null, + "cancel_at": 1665762118, + "cancel_at_period_end": false, + "canceled_at": 1634226119, + "collection_method": "charge_automatically", + "created": 1634226119, + "current_period_end": 1636904519, + "current_period_start": 1634226119, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkW472sOmf47Nz9eDPVcQRR", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKjWzNKMgo5Fm", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634226120, + "metadata": { + }, + "plan": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkW4B2sOmf47Nz9H7F8oy4X", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkW4B2sOmf47Nz9H7F8oy4X" + }, + "latest_invoice": "in_1JkW4B2sOmf47Nz99kAOQNRU", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634226119, + "start_date": 1634226119, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDebRcYreXVUnH", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532361, + "billing_thresholds": null, + "cancel_at": 1663068360, + "cancel_at_period_end": false, + "canceled_at": 1631532361, + "collection_method": "charge_automatically", + "created": 1631532361, + "current_period_end": 1636802761, + "current_period_start": 1634124361, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDebUR1KKDUfV6", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532361, + "metadata": { + }, + "plan": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDebRcYreXVUnH", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDebRcYreXVUnH" + }, + "latest_invoice": "in_1Jk5cF2sOmf47Nz9UrRCYQQP", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532361, + "start_date": 1631532361, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, { "id": "sub_KDeatKq0nLrE5s", "object": "subscription", @@ -368,8 +1254,8 @@ http_interactions: "canceled_at": 1631532298, "collection_method": "charge_automatically", "created": 1631532298, - "current_period_end": 1634124298, - "current_period_start": 1631532298, + "current_period_end": 1636802698, + "current_period_start": 1634124298, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZDHP2sOmf47Nz9SPvppX4K", @@ -453,7 +1339,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeatKq0nLrE5s" }, - "latest_invoice": "in_1JZDHS2sOmf47Nz95wa1736E", + "latest_invoice": "in_1Jk5bN2sOmf47Nz9YtlYT2cW", "livemode": false, "metadata": { }, @@ -514,8 +1400,8 @@ http_interactions: "canceled_at": 1631532268, "collection_method": "charge_automatically", "created": 1631532268, - "current_period_end": 1634124268, - "current_period_start": 1631532268, + "current_period_end": 1636802668, + "current_period_start": 1634124268, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZDGv2sOmf47Nz9SM0WLRa7", @@ -599,7 +1485,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeaVj7yYl0taQ" }, - "latest_invoice": "in_1JZDGy2sOmf47Nz91pY1mWem", + "latest_invoice": "in_1Jk5ab2sOmf47Nz9HGfetsPd", "livemode": false, "metadata": { }, @@ -660,8 +1546,8 @@ http_interactions: "canceled_at": 1631531879, "collection_method": "charge_automatically", "created": 1631531879, - "current_period_end": 1634123879, - "current_period_start": 1631531879, + "current_period_end": 1636802279, + "current_period_start": 1634123879, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZDAe2sOmf47Nz9bsm9wPFI", @@ -745,7 +1631,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeToJCqy8AUki" }, - "latest_invoice": "in_1JZDAi2sOmf47Nz9OTez1qxa", + "latest_invoice": "in_1Jk5Tj2sOmf47Nz94oD4YTbF", "livemode": false, "metadata": { }, @@ -806,8 +1692,8 @@ http_interactions: "canceled_at": 1631531618, "collection_method": "charge_automatically", "created": 1631531618, - "current_period_end": 1634123618, - "current_period_start": 1631531618, + "current_period_end": 1636802018, + "current_period_start": 1634123618, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZD6R2sOmf47Nz9CVbi40LS", @@ -891,7 +1777,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDePb9wwv9HEXL" }, - "latest_invoice": "in_1JZD6U2sOmf47Nz96ByzJABC", + "latest_invoice": "in_1Jk5Q92sOmf47Nz9EPwy8dVf", "livemode": false, "metadata": { }, @@ -936,886 +1822,10 @@ http_interactions: "transfer_data": null, "trial_end": null, "trial_start": null - }, - { - "id": "sub_KDcntUY1yaA3Fc", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631525640, - "billing_thresholds": null, - "cancel_at": 1663061639, - "cancel_at_period_end": false, - "canceled_at": 1631525640, - "collection_method": "charge_automatically", - "created": 1631525640, - "current_period_end": 1634117640, - "current_period_start": 1631525640, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZBY02sOmf47Nz9cujVPxe4", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcn9Ud8rYiNXU", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631525641, - "metadata": { - }, - "plan": { - "id": "price_1JZBY32sOmf47Nz9ifmaJSjX", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525639, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBY32sOmf47Nz9ifmaJSjX", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631525639, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcntUY1yaA3Fc", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcntUY1yaA3Fc" - }, - "latest_invoice": "in_1JZBY42sOmf47Nz9DSvyJRef", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBY32sOmf47Nz9ifmaJSjX", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631525639, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631525640, - "start_date": 1631525640, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcYcFzvKIAfxe", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524709, - "billing_thresholds": null, - "cancel_at": 1663060707, - "cancel_at_period_end": false, - "canceled_at": 1631524709, - "collection_method": "charge_automatically", - "created": 1631524709, - "current_period_end": 1634116709, - "current_period_start": 1631524709, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZBIz2sOmf47Nz9if8isgCk", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcY0GXEJ58GSV", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524709, - "metadata": { - }, - "plan": { - "id": "price_1JZBJ22sOmf47Nz9G6GfGajO", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524708, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBJ22sOmf47Nz9G6GfGajO", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524708, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcYcFzvKIAfxe", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcYcFzvKIAfxe" - }, - "latest_invoice": "in_1JZBJ32sOmf47Nz9cVh8GVlb", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBJ22sOmf47Nz9G6GfGajO", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524708, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524709, - "start_date": 1631524709, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcREVjTNPz3Ew", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524329, - "billing_thresholds": null, - "cancel_at": 1663060328, - "cancel_at_period_end": false, - "canceled_at": 1631524329, - "collection_method": "charge_automatically", - "created": 1631524329, - "current_period_end": 1634116329, - "current_period_start": 1631524329, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZBCs2sOmf47Nz9xLQzqIu9", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcRvQzhZyE5ZE", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524330, - "metadata": { - }, - "plan": { - "id": "price_1JZBCu2sOmf47Nz9EE2mabAJ", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524328, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZBCu2sOmf47Nz9EE2mabAJ", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524328, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcREVjTNPz3Ew", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcREVjTNPz3Ew" - }, - "latest_invoice": "in_1JZBCv2sOmf47Nz91bRTmzcU", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZBCu2sOmf47Nz9EE2mabAJ", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524328, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524329, - "start_date": 1631524329, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcNi59k7NkmxZ", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524094, - "billing_thresholds": null, - "cancel_at": 1663060092, - "cancel_at_period_end": false, - "canceled_at": 1631524094, - "collection_method": "charge_automatically", - "created": 1631524094, - "current_period_end": 1634116094, - "current_period_start": 1631524094, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZB942sOmf47Nz9uaPVuoqr", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcNxc5epuq6Ro", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524094, - "metadata": { - }, - "plan": { - "id": "price_1JZB962sOmf47Nz9nKwhbU5R", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524092, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB962sOmf47Nz9nKwhbU5R", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524092, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcNi59k7NkmxZ", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcNi59k7NkmxZ" - }, - "latest_invoice": "in_1JZB982sOmf47Nz9IFFpw8eB", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB962sOmf47Nz9nKwhbU5R", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524092, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524094, - "start_date": 1631524094, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcKvn4YhcxOlf", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523862, - "billing_thresholds": null, - "cancel_at": 1663059861, - "cancel_at_period_end": false, - "canceled_at": 1631523862, - "collection_method": "charge_automatically", - "created": 1631523862, - "current_period_end": 1634115862, - "current_period_start": 1631523862, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZB5K2sOmf47Nz9SmbgKZJw", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcKCEkpRf7dS3", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523863, - "metadata": { - }, - "plan": { - "id": "price_1JZB5N2sOmf47Nz9jQ012sQE", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523861, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB5N2sOmf47Nz9jQ012sQE", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523861, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcKvn4YhcxOlf", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcKvn4YhcxOlf" - }, - "latest_invoice": "in_1JZB5O2sOmf47Nz9aP9VIGH7", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB5N2sOmf47Nz9jQ012sQE", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523861, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523862, - "start_date": 1631523862, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDc9Jl3OiO42tD", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523255, - "billing_thresholds": null, - "cancel_at": 1663059253, - "cancel_at_period_end": false, - "canceled_at": 1631523255, - "collection_method": "charge_automatically", - "created": 1631523255, - "current_period_end": 1634115255, - "current_period_start": 1631523255, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZAvX2sOmf47Nz9Ogf35p36", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDc9AHcWgXWCOh", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523256, - "metadata": { - }, - "plan": { - "id": "price_1JZAva2sOmf47Nz9Eu5l8VIe", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523254, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZAva2sOmf47Nz9Eu5l8VIe", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523254, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDc9Jl3OiO42tD", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDc9Jl3OiO42tD" - }, - "latest_invoice": "in_1JZAvb2sOmf47Nz9eTVrJkJA", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZAva2sOmf47Nz9Eu5l8VIe", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523254, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523255, - "start_date": 1631523255, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null } ], "has_more": true, - "total_count": 194, + "total_count": 200, "url": "/v1/customers/cus_8Di1wjdVktv5kt/subscriptions" }, "tax_exempt": "none", @@ -1831,7 +1841,7 @@ http_interactions: "tax_info": null, "tax_info_verification": null } - recorded_at: Mon, 13 Sep 2021 11:25:59 GMT + recorded_at: Fri, 15 Oct 2021 07:30:42 GMT - request: method: post uri: https://api.stripe.com/v1/prices @@ -1846,13 +1856,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_KtSIM4xEmlSjVF","request_duration_ms":882}}' + - '{"last_request_metrics":{"request_id":"req_oOeUrytkxbeMDu","request_duration_ms":897}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -1865,7 +1875,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:26:00 GMT + - Fri, 15 Oct 2021 07:30:43 GMT Content-Type: - application/json Content-Length: @@ -1884,23 +1894,27 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 72bd00db-4e9a-427d-ab9f-10cee6c93012 + Original-Request: + - req_vEy97rboXhdrZo Request-Id: - - req_CTdZ26DV6i168a + - req_vEy97rboXhdrZo + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "id": "price_1JkksI2sOmf47Nz938S8shQS", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631532360, + "created": 1634283042, "currency": "usd", "livemode": false, "lookup_key": null, @@ -1922,7 +1936,7 @@ http_interactions: "unit_amount": 9466, "unit_amount_decimal": "9466" } - recorded_at: Mon, 13 Sep 2021 11:26:00 GMT + recorded_at: Fri, 15 Oct 2021 07:30:43 GMT - request: method: post uri: https://api.stripe.com/v1/prices @@ -1937,13 +1951,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_CTdZ26DV6i168a","request_duration_ms":413}}' + - '{"last_request_metrics":{"request_id":"req_vEy97rboXhdrZo","request_duration_ms":424}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -1956,7 +1970,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:26:00 GMT + - Fri, 15 Oct 2021 07:30:43 GMT Content-Type: - application/json Content-Length: @@ -1975,23 +1989,27 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - 1a56909f-ee19-432b-8542-04e129d09030 + Original-Request: + - req_RFRx7oXl0NmV0e Request-Id: - - req_k5JtsidTxaKgry + - req_RFRx7oXl0NmV0e + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "price_1JZDIS2sOmf47Nz970bn4iqE", + "id": "price_1JkksJ2sOmf47Nz9yJl4Az8W", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631532360, + "created": 1634283043, "currency": "usd", "livemode": false, "lookup_key": null, @@ -2007,13 +2025,102 @@ http_interactions: "unit_amount": 8, "unit_amount_decimal": "8" } - recorded_at: Mon, 13 Sep 2021 11:26:00 GMT + recorded_at: Fri, 15 Oct 2021 07:30:43 GMT +- request: + method: post + uri: https://api.stripe.com/v1/prices + body: + encoding: UTF-8 + string: unit_amount=5100¤cy=usd&product=prod_IZPyXw6BDBBFOg&nickname=Reservations+for+payment+schedule+ + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_RFRx7oXl0NmV0e","request_duration_ms":459}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Fri, 15 Oct 2021 07:30:44 GMT + Content-Type: + - application/json + Content-Length: + - '497' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Idempotency-Key: + - 8b655556-e15a-41b6-b03e-09f5930e38e7 + Original-Request: + - req_QRqu2tDrQOTAqV + Request-Id: + - req_QRqu2tDrQOTAqV + Stripe-Should-Retry: + - 'false' + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "price_1JkksJ2sOmf47Nz97FJaIZIL", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634283043, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": "Reservations for payment schedule", + "product": "prod_IZPyXw6BDBBFOg", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 5100, + "unit_amount_decimal": "5100" + } + recorded_at: Fri, 15 Oct 2021 07:30:44 GMT - request: method: post uri: https://api.stripe.com/v1/subscriptions body: encoding: UTF-8 - string: customer=cus_8Di1wjdVktv5kt&cancel_at=1663068360&add_invoice_items[0][price]=price_1JZDIS2sOmf47Nz970bn4iqE&items[0][price]=price_1JZDIS2sOmf47Nz9jK6fXjAN&default_payment_method=pm_1JZDIP2sOmf47Nz9RVtJc1dz&expand[0]=latest_invoice.payment_intent + string: customer=cus_8Di1wjdVktv5kt&cancel_at=1665819042&add_invoice_items[0][price]=price_1JkksJ2sOmf47Nz9yJl4Az8W&add_invoice_items[1][price]=price_1JkksJ2sOmf47Nz97FJaIZIL&items[0][price]=price_1JkksI2sOmf47Nz938S8shQS&default_payment_method=pm_1JkksG2sOmf47Nz9dNTQ60AF&expand[0]=latest_invoice.payment_intent headers: User-Agent: - Stripe/v1 RubyBindings/5.29.0 @@ -2022,13 +2129,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_k5JtsidTxaKgry","request_duration_ms":370}}' + - '{"last_request_metrics":{"request_id":"req_QRqu2tDrQOTAqV","request_duration_ms":446}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -2041,11 +2148,11 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:26:03 GMT + - Fri, 15 Oct 2021 07:30:47 GMT Content-Type: - application/json Content-Length: - - '15537' + - '17275' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -2060,437 +2167,21 @@ http_interactions: - '300' Cache-Control: - no-cache, no-store + Idempotency-Key: + - ed8af7b8-d261-4e61-ada9-c5e82cc564cb + Original-Request: + - req_DAgZGrsTfwyLUQ Request-Id: - - req_a7Mf1FkHvSZmwg + - req_DAgZGrsTfwyLUQ + Stripe-Should-Retry: + - 'false' Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '10' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: ASCII-8BIT string: !binary |- - ewogICJpZCI6ICJzdWJfS0RlYlJjWXJlWFZVbkgiLAogICJvYmplY3QiOiAic3Vic2NyaXB0aW9uIiwKICAiYXBwbGljYXRpb25fZmVlX3BlcmNlbnQiOiBudWxsLAogICJhdXRvbWF0aWNfdGF4IjogewogICAgImVuYWJsZWQiOiBmYWxzZQogIH0sCiAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICJiaWxsaW5nX2N5Y2xlX2FuY2hvciI6IDE2MzE1MzIzNjEsCiAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgImNhbmNlbF9hdCI6IDE2NjMwNjgzNjAsCiAgImNhbmNlbF9hdF9wZXJpb2RfZW5kIjogZmFsc2UsCiAgImNhbmNlbGVkX2F0IjogMTYzMTUzMjM2MSwKICAiY29sbGVjdGlvbl9tZXRob2QiOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICJjcmVhdGVkIjogMTYzMTUzMjM2MSwKICAiY3VycmVudF9wZXJpb2RfZW5kIjogMTYzNDEyNDM2MSwKICAiY3VycmVudF9wZXJpb2Rfc3RhcnQiOiAxNjMxNTMyMzYxLAogICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICJkYXlzX3VudGlsX2R1ZSI6IG51bGwsCiAgImRlZmF1bHRfcGF5bWVudF9tZXRob2QiOiAicG1fMUpaRElQMnNPbWY0N056OVJWdEpjMWR6IiwKICAiZGVmYXVsdF9zb3VyY2UiOiBudWxsLAogICJkZWZhdWx0X3RheF9yYXRlcyI6IFsKCiAgXSwKICAiZGlzY291bnQiOiBudWxsLAogICJlbmRlZF9hdCI6IG51bGwsCiAgImludm9pY2VfY3VzdG9tZXJfYmFsYW5jZV9zZXR0aW5ncyI6IHsKICAgICJjb25zdW1lX2FwcGxpZWRfYmFsYW5jZV9vbl92b2lkIjogdHJ1ZQogIH0sCiAgIml0ZW1zIjogewogICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICJkYXRhIjogWwogICAgICB7CiAgICAgICAgImlkIjogInNpX0tEZWJVUjFLS0RVZlY2IiwKICAgICAgICAib2JqZWN0IjogInN1YnNjcmlwdGlvbl9pdGVtIiwKICAgICAgICAiYmlsbGluZ190aHJlc2hvbGRzIjogbnVsbCwKICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNjEsCiAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgIH0sCiAgICAgICAgInBsYW4iOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUpaRElTMnNPbWY0N056OWpLNmZYakFOIiwKICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzYwLAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICB9LAogICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICJpZCI6ICJwcmljZV8xSlpESVMyc09tZjQ3Tno5aks2ZlhqQU4iLAogICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNjAsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICJyZWN1cnJpbmciOiB7CiAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgIH0sCiAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgInR5cGUiOiAicmVjdXJyaW5nIiwKICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI5NDY2IgogICAgICAgIH0sCiAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl9LRGViUmNZcmVYVlVuSCIsCiAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgXQogICAgICB9CiAgICBdLAogICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAidG90YWxfY291bnQiOiAxLAogICAgInVybCI6ICIvdjEvc3Vic2NyaXB0aW9uX2l0ZW1zP3N1YnNjcmlwdGlvbj1zdWJfS0RlYlJjWXJlWFZVbkgiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUpaRElUMnNPbWY0N056OWdWRGYwMk1UIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiA5NDc0LAogICAgImFtb3VudF9wYWlkIjogOTQ3NCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogMCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMSwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IGZhbHNlLAogICAgImF1dG9tYXRpY190YXgiOiB7CiAgICAgICJlbmFibGVkIjogZmFsc2UsCiAgICAgICJzdGF0dXMiOiBudWxsCiAgICB9LAogICAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImJpbGxpbmdfcmVhc29uIjogInN1YnNjcmlwdGlvbl9jcmVhdGUiLAogICAgImNoYXJnZSI6ICJjaF8zSlpESVQyc09tZjQ3Tno5MVB4MHpSdk0iLAogICAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAgICJjcmVhdGVkIjogMTYzMTUzMjM2MSwKICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgImN1c3RvbV9maWVsZHMiOiBudWxsLAogICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAiY3VzdG9tZXJfYWRkcmVzcyI6IG51bGwsCiAgICAiY3VzdG9tZXJfZW1haWwiOiAiamVhbi5kdXBvbmRAZ21haWwuY29tIiwKICAgICJjdXN0b21lcl9uYW1lIjogbnVsbCwKICAgICJjdXN0b21lcl9waG9uZSI6IG51bGwsCiAgICAiY3VzdG9tZXJfc2hpcHBpbmciOiBudWxsLAogICAgImN1c3RvbWVyX3RheF9leGVtcHQiOiAibm9uZSIsCiAgICAiY3VzdG9tZXJfdGF4X2lkcyI6IFsKCiAgICBdLAogICAgImRlZmF1bHRfcGF5bWVudF9tZXRob2QiOiBudWxsLAogICAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAgICJkZWZhdWx0X3RheF9yYXRlcyI6IFsKCiAgICBdLAogICAgImRlc2NyaXB0aW9uIjogbnVsbCwKICAgICJkaXNjb3VudCI6IG51bGwsCiAgICAiZGlzY291bnRzIjogWwoKICAgIF0sCiAgICAiZHVlX2RhdGUiOiBudWxsLAogICAgImVuZGluZ19iYWxhbmNlIjogMCwKICAgICJmb290ZXIiOiBudWxsLAogICAgImhvc3RlZF9pbnZvaWNlX3VybCI6ICJodHRwczovL2ludm9pY2Uuc3RyaXBlLmNvbS9pL2FjY3RfMTAzckU2MnNPbWY0N056OS9pbnZzdF9LRGViNzNqVEE0TzRidUdqUGRsbjBONG5qY2FYYW93IiwKICAgICJpbnZvaWNlX3BkZiI6ICJodHRwczovL3BheS5zdHJpcGUuY29tL2ludm9pY2UvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L2ludnN0X0tEZWI3M2pUQTRPNGJ1R2pQZGxuME40bmpjYVhhb3cvcGRmIiwKICAgICJsYXN0X2ZpbmFsaXphdGlvbl9lcnJvciI6IG51bGwsCiAgICAibGluZXMiOiB7CiAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICJkYXRhIjogWwogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJpaV8xSlpESVQyc09tZjQ3Tno5U1RXTGR1MUQiLAogICAgICAgICAgIm9iamVjdCI6ICJsaW5lX2l0ZW0iLAogICAgICAgICAgImFtb3VudCI6IDgsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImludm9pY2VfaXRlbSI6ICJpaV8xSlpESVQyc09tZjQ3Tno5U1RXTGR1MUQiLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzQxMjQzNjEsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzE1MzIzNjEKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IG51bGwsCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSlpESVMyc09tZjQ3Tno5NzBibjRpcUUiLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzMTUzMjM2MCwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogIlByaWNlIGFkanVzdG1lbnQgZm9yIHBheW1lbnQgc2NoZWR1bGUiLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IG51bGwsCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJvbmVfdGltZSIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDgsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjgiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViX0tEZWJSY1lyZVhWVW5IIiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAiaW52b2ljZWl0ZW0iLAogICAgICAgICAgInVuaXF1ZV9pZCI6ICJpbF8xSlpESVQyc09tZjQ3Tno5NTZkcGhmcloiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAic2xpXzFlZDU3MzJzT21mNDdOejljZDE2NDQ1MSIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogOTQ2NiwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIjEgw5cgQWJvbm5lbWVudCBtZW5zdWFsaXNhYmxlIC0gc3RhbmRhcmQsIGFzc29jaWF0aW9uLCB5ZWFyIChhdCAkOTQuNjYgLyBtb250aCkiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzQxMjQzNjEsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzE1MzIzNjEKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKWkRJUzJzT21mNDdOejlqSzZmWGpBTiIsCiAgICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzYwLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogICAgICAgICAgfSwKICAgICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKWkRJUzJzT21mNDdOejlqSzZmWGpBTiIsCiAgICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzYwLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IHsKICAgICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjk0NjYiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViX0tEZWJSY1lyZVhWVW5IIiwKICAgICAgICAgICJzdWJzY3JpcHRpb25faXRlbSI6ICJzaV9LRGViVVIxS0tEVWZWNiIsCiAgICAgICAgICAidGF4X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0YXhfcmF0ZXMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0eXBlIjogInN1YnNjcmlwdGlvbiIsCiAgICAgICAgICAidW5pcXVlX2lkIjogImlsXzFKWkRJVDJzT21mNDdOejlaSm56RXZrbSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAidG90YWxfY291bnQiOiAyLAogICAgICAidXJsIjogIi92MS9pbnZvaWNlcy9pbl8xSlpESVQyc09tZjQ3Tno5Z1ZEZjAyTVQvbGluZXMiCiAgICB9LAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5leHRfcGF5bWVudF9hdHRlbXB0IjogbnVsbCwKICAgICJudW1iZXIiOiAiQzBFNjYxQy0xMjU2IiwKICAgICJvbl9iZWhhbGZfb2YiOiBudWxsLAogICAgInBhaWQiOiB0cnVlLAogICAgInBheW1lbnRfaW50ZW50IjogewogICAgICAiaWQiOiAicGlfM0paRElUMnNPbWY0N056OTFTUDJmQlFtIiwKICAgICAgIm9iamVjdCI6ICJwYXltZW50X2ludGVudCIsCiAgICAgICJhbW91bnQiOiA5NDc0LAogICAgICAiYW1vdW50X2NhcHR1cmFibGUiOiAwLAogICAgICAiYW1vdW50X3JlY2VpdmVkIjogOTQ3NCwKICAgICAgImFwcGxpY2F0aW9uIjogbnVsbCwKICAgICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgICAiY2FuY2VsZWRfYXQiOiBudWxsLAogICAgICAiY2FuY2VsbGF0aW9uX3JlYXNvbiI6IG51bGwsCiAgICAgICJjYXB0dXJlX21ldGhvZCI6ICJhdXRvbWF0aWMiLAogICAgICAiY2hhcmdlcyI6IHsKICAgICAgICAib2JqZWN0IjogImxpc3QiLAogICAgICAgICJkYXRhIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiY2hfM0paRElUMnNPbWY0N056OTFQeDB6UnZNIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJjaGFyZ2UiLAogICAgICAgICAgICAiYW1vdW50IjogOTQ3NCwKICAgICAgICAgICAgImFtb3VudF9jYXB0dXJlZCI6IDk0NzQsCiAgICAgICAgICAgICJhbW91bnRfcmVmdW5kZWQiOiAwLAogICAgICAgICAgICAiYXBwbGljYXRpb24iOiBudWxsLAogICAgICAgICAgICAiYXBwbGljYXRpb25fZmVlIjogbnVsbCwKICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgICAgICAgICAiYmFsYW5jZV90cmFuc2FjdGlvbiI6ICJ0eG5fM0paRElUMnNPbWY0N056OTExZDNsT0NJIiwKICAgICAgICAgICAgImJpbGxpbmdfZGV0YWlscyI6IHsKICAgICAgICAgICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAgICAgICAgICJjaXR5IjogbnVsbCwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogbnVsbCwKICAgICAgICAgICAgICAgICJsaW5lMSI6IG51bGwsCiAgICAgICAgICAgICAgICAibGluZTIiOiBudWxsLAogICAgICAgICAgICAgICAgInBvc3RhbF9jb2RlIjogbnVsbCwKICAgICAgICAgICAgICAgICJzdGF0ZSI6IG51bGwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJlbWFpbCI6IG51bGwsCiAgICAgICAgICAgICAgIm5hbWUiOiBudWxsLAogICAgICAgICAgICAgICJwaG9uZSI6IG51bGwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNhbGN1bGF0ZWRfc3RhdGVtZW50X2Rlc2NyaXB0b3IiOiAiU3RyaXBlIiwKICAgICAgICAgICAgImNhcHR1cmVkIjogdHJ1ZSwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzYyLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdWJzY3JpcHRpb24gY3JlYXRpb24iLAogICAgICAgICAgICAiZGVzdGluYXRpb24iOiBudWxsLAogICAgICAgICAgICAiZGlzcHV0ZSI6IG51bGwsCiAgICAgICAgICAgICJkaXNwdXRlZCI6IGZhbHNlLAogICAgICAgICAgICAiZmFpbHVyZV9jb2RlIjogbnVsbCwKICAgICAgICAgICAgImZhaWx1cmVfbWVzc2FnZSI6IG51bGwsCiAgICAgICAgICAgICJmcmF1ZF9kZXRhaWxzIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW52b2ljZSI6ICJpbl8xSlpESVQyc09tZjQ3Tno5Z1ZEZjAyTVQiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAib25fYmVoYWxmX29mIjogbnVsbCwKICAgICAgICAgICAgIm9yZGVyIjogbnVsbCwKICAgICAgICAgICAgIm91dGNvbWUiOiB7CiAgICAgICAgICAgICAgIm5ldHdvcmtfc3RhdHVzIjogImFwcHJvdmVkX2J5X25ldHdvcmsiLAogICAgICAgICAgICAgICJyZWFzb24iOiBudWxsLAogICAgICAgICAgICAgICJyaXNrX2xldmVsIjogIm5vcm1hbCIsCiAgICAgICAgICAgICAgInJpc2tfc2NvcmUiOiAxNywKICAgICAgICAgICAgICAic2VsbGVyX21lc3NhZ2UiOiAiUGF5bWVudCBjb21wbGV0ZS4iLAogICAgICAgICAgICAgICJ0eXBlIjogImF1dGhvcml6ZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwYWlkIjogdHJ1ZSwKICAgICAgICAgICAgInBheW1lbnRfaW50ZW50IjogInBpXzNKWkRJVDJzT21mNDdOejkxU1AyZkJRbSIsCiAgICAgICAgICAgICJwYXltZW50X21ldGhvZCI6ICJwbV8xSlpESVAyc09tZjQ3Tno5UlZ0SmMxZHoiLAogICAgICAgICAgICAicGF5bWVudF9tZXRob2RfZGV0YWlscyI6IHsKICAgICAgICAgICAgICAiY2FyZCI6IHsKICAgICAgICAgICAgICAgICJicmFuZCI6ICJ2aXNhIiwKICAgICAgICAgICAgICAgICJjaGVja3MiOiB7CiAgICAgICAgICAgICAgICAgICJhZGRyZXNzX2xpbmUxX2NoZWNrIjogbnVsbCwKICAgICAgICAgICAgICAgICAgImFkZHJlc3NfcG9zdGFsX2NvZGVfY2hlY2siOiBudWxsLAogICAgICAgICAgICAgICAgICAiY3ZjX2NoZWNrIjogInBhc3MiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAiVVMiLAogICAgICAgICAgICAgICAgImV4cF9tb250aCI6IDQsCiAgICAgICAgICAgICAgICAiZXhwX3llYXIiOiAyMDIyLAogICAgICAgICAgICAgICAgImZpbmdlcnByaW50IjogIm81Mmp5YlI3Ym5tTm42QVQiLAogICAgICAgICAgICAgICAgImZ1bmRpbmciOiAiY3JlZGl0IiwKICAgICAgICAgICAgICAgICJpbnN0YWxsbWVudHMiOiBudWxsLAogICAgICAgICAgICAgICAgImxhc3Q0IjogIjQyNDIiLAogICAgICAgICAgICAgICAgIm5ldHdvcmsiOiAidmlzYSIsCiAgICAgICAgICAgICAgICAidGhyZWVfZF9zZWN1cmUiOiBudWxsLAogICAgICAgICAgICAgICAgIndhbGxldCI6IG51bGwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ0eXBlIjogImNhcmQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWNlaXB0X2VtYWlsIjogbnVsbCwKICAgICAgICAgICAgInJlY2VpcHRfbnVtYmVyIjogbnVsbCwKICAgICAgICAgICAgInJlY2VpcHRfdXJsIjogImh0dHBzOi8vcGF5LnN0cmlwZS5jb20vcmVjZWlwdHMvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L2NoXzNKWkRJVDJzT21mNDdOejkxUHgwelJ2TS9yY3B0X0tEZWIwT3p2QTZaQzBSUFNmWE5JUDA5cXJZdWpKZzUiLAogICAgICAgICAgICAicmVmdW5kZWQiOiBmYWxzZSwKICAgICAgICAgICAgInJlZnVuZHMiOiB7CiAgICAgICAgICAgICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICAgICAgICAgICAiZGF0YSI6IFsKCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICAgICAgICAgICAidG90YWxfY291bnQiOiAwLAogICAgICAgICAgICAgICJ1cmwiOiAiL3YxL2NoYXJnZXMvY2hfM0paRElUMnNPbWY0N056OTFQeDB6UnZNL3JlZnVuZHMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXZpZXciOiBudWxsLAogICAgICAgICAgICAic2hpcHBpbmciOiBudWxsLAogICAgICAgICAgICAic291cmNlIjogbnVsbCwKICAgICAgICAgICAgInNvdXJjZV90cmFuc2ZlciI6IG51bGwsCiAgICAgICAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAgICAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvcl9zdWZmaXgiOiBudWxsLAogICAgICAgICAgICAic3RhdHVzIjogInN1Y2NlZWRlZCIsCiAgICAgICAgICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZmVyX2dyb3VwIjogbnVsbAogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICAgInRvdGFsX2NvdW50IjogMSwKICAgICAgICAidXJsIjogIi92MS9jaGFyZ2VzP3BheW1lbnRfaW50ZW50PXBpXzNKWkRJVDJzT21mNDdOejkxU1AyZkJRbSIKICAgICAgfSwKICAgICAgImNsaWVudF9zZWNyZXQiOiAicGlfM0paRElUMnNPbWY0N056OTFTUDJmQlFtX3NlY3JldF83QTV5TXB6eFN6cExsMEFBSW5RVVd3MjRUIiwKICAgICAgImNvbmZpcm1hdGlvbl9tZXRob2QiOiAiYXV0b21hdGljIiwKICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMzYxLAogICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdWJzY3JpcHRpb24gY3JlYXRpb24iLAogICAgICAiaW52b2ljZSI6ICJpbl8xSlpESVQyc09tZjQ3Tno5Z1ZEZjAyTVQiLAogICAgICAibGFzdF9wYXltZW50X2Vycm9yIjogbnVsbCwKICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgfSwKICAgICAgIm5leHRfYWN0aW9uIjogbnVsbCwKICAgICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAgICJwYXltZW50X21ldGhvZCI6ICJwbV8xSlpESVAyc09tZjQ3Tno5UlZ0SmMxZHoiLAogICAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IHsKICAgICAgICAiY2FyZCI6IHsKICAgICAgICAgICJpbnN0YWxsbWVudHMiOiBudWxsLAogICAgICAgICAgIm5ldHdvcmsiOiBudWxsLAogICAgICAgICAgInJlcXVlc3RfdGhyZWVfZF9zZWN1cmUiOiAiYXV0b21hdGljIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogWwogICAgICAgICJjYXJkIgogICAgICBdLAogICAgICAicmVjZWlwdF9lbWFpbCI6IG51bGwsCiAgICAgICJyZXZpZXciOiBudWxsLAogICAgICAic2V0dXBfZnV0dXJlX3VzYWdlIjogIm9mZl9zZXNzaW9uIiwKICAgICAgInNoaXBwaW5nIjogbnVsbCwKICAgICAgInNvdXJjZSI6IG51bGwsCiAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvcl9zdWZmaXgiOiBudWxsLAogICAgICAic3RhdHVzIjogInN1Y2NlZWRlZCIsCiAgICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICAgInRyYW5zZmVyX2dyb3VwIjogbnVsbAogICAgfSwKICAgICJwYXltZW50X3NldHRpbmdzIjogewogICAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAgICJwYXltZW50X21ldGhvZF90eXBlcyI6IG51bGwKICAgIH0sCiAgICAicGVyaW9kX2VuZCI6IDE2MzE1MzIzNjEsCiAgICAicGVyaW9kX3N0YXJ0IjogMTYzMTUzMjM2MSwKICAgICJwb3N0X3BheW1lbnRfY3JlZGl0X25vdGVzX2Ftb3VudCI6IDAsCiAgICAicHJlX3BheW1lbnRfY3JlZGl0X25vdGVzX2Ftb3VudCI6IDAsCiAgICAicXVvdGUiOiBudWxsLAogICAgInJlY2VpcHRfbnVtYmVyIjogbnVsbCwKICAgICJzdGFydGluZ19iYWxhbmNlIjogMCwKICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAic3RhdHVzIjogInBhaWQiLAogICAgInN0YXR1c190cmFuc2l0aW9ucyI6IHsKICAgICAgImZpbmFsaXplZF9hdCI6IDE2MzE1MzIzNjEsCiAgICAgICJtYXJrZWRfdW5jb2xsZWN0aWJsZV9hdCI6IG51bGwsCiAgICAgICJwYWlkX2F0IjogMTYzMTUzMjM2MSwKICAgICAgInZvaWRlZF9hdCI6IG51bGwKICAgIH0sCiAgICAic3Vic2NyaXB0aW9uIjogInN1Yl9LRGViUmNZcmVYVlVuSCIsCiAgICAic3VidG90YWwiOiA5NDc0LAogICAgInRheCI6IG51bGwsCiAgICAidGF4X3BlcmNlbnQiOiBudWxsLAogICAgInRvdGFsIjogOTQ3NCwKICAgICJ0b3RhbF9kaXNjb3VudF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidG90YWxfdGF4X2Ftb3VudHMiOiBbCgogICAgXSwKICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICJ3ZWJob29rc19kZWxpdmVyZWRfYXQiOiAxNjMxNTMyMzYxCiAgfSwKICAibGl2ZW1vZGUiOiBmYWxzZSwKICAibWV0YWRhdGEiOiB7CiAgfSwKICAibmV4dF9wZW5kaW5nX2ludm9pY2VfaXRlbV9pbnZvaWNlIjogbnVsbCwKICAicGF1c2VfY29sbGVjdGlvbiI6IG51bGwsCiAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgfSwKICAicGVuZGluZ19pbnZvaWNlX2l0ZW1faW50ZXJ2YWwiOiBudWxsLAogICJwZW5kaW5nX3NldHVwX2ludGVudCI6IG51bGwsCiAgInBlbmRpbmdfdXBkYXRlIjogbnVsbCwKICAicGxhbiI6IHsKICAgICJpZCI6ICJwcmljZV8xSlpESVMyc09tZjQ3Tno5aks2ZlhqQU4iLAogICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICJhY3RpdmUiOiB0cnVlLAogICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAiYW1vdW50IjogOTQ2NiwKICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAiY3JlYXRlZCI6IDE2MzE1MzIzNjAsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgInRpZXJzIjogbnVsbCwKICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogIH0sCiAgInF1YW50aXR5IjogMSwKICAic2NoZWR1bGUiOiBudWxsLAogICJzdGFydCI6IDE2MzE1MzIzNjEsCiAgInN0YXJ0X2RhdGUiOiAxNjMxNTMyMzYxLAogICJzdGF0dXMiOiAiYWN0aXZlIiwKICAidGF4X3BlcmNlbnQiOiBudWxsLAogICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAidHJpYWxfZW5kIjogbnVsbCwKICAidHJpYWxfc3RhcnQiOiBudWxsCn0K - recorded_at: Mon, 13 Sep 2021 11:26:03 GMT -- request: - method: get - uri: https://api.stripe.com/v1/subscriptions/sub_KDebRcYreXVUnH - body: - encoding: US-ASCII - string: '' - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_a7Mf1FkHvSZmwg","request_duration_ms":2971}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:26:04 GMT - Content-Type: - - application/json - Content-Length: - - '3906' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_dglssRgWgVS3VT - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "sub_KDebRcYreXVUnH", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631532361, - "billing_thresholds": null, - "cancel_at": 1663068360, - "cancel_at_period_end": false, - "canceled_at": 1631532361, - "collection_method": "charge_automatically", - "created": 1631532361, - "current_period_end": 1634124361, - "current_period_start": 1631532361, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDebUR1KKDUfV6", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631532361, - "metadata": { - }, - "plan": { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532360, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532360, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDebRcYreXVUnH", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDebRcYreXVUnH" - }, - "latest_invoice": "in_1JZDIT2sOmf47Nz9gVDf02MT", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532360, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631532361, - "start_date": 1631532361, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - recorded_at: Mon, 13 Sep 2021 11:26:04 GMT -- request: - method: get - uri: https://api.stripe.com/v1/subscriptions/sub_KDebRcYreXVUnH - body: - encoding: US-ASCII - string: '' - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_dglssRgWgVS3VT","request_duration_ms":341}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:26:04 GMT - Content-Type: - - application/json - Content-Length: - - '3906' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_4eKLSCJepzbceC - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "sub_KDebRcYreXVUnH", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631532361, - "billing_thresholds": null, - "cancel_at": 1663068360, - "cancel_at_period_end": false, - "canceled_at": 1631532361, - "collection_method": "charge_automatically", - "created": 1631532361, - "current_period_end": 1634124361, - "current_period_start": 1631532361, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDebUR1KKDUfV6", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631532361, - "metadata": { - }, - "plan": { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532360, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532360, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDebRcYreXVUnH", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDebRcYreXVUnH" - }, - "latest_invoice": "in_1JZDIT2sOmf47Nz9gVDf02MT", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532360, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631532361, - "start_date": 1631532361, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - recorded_at: Mon, 13 Sep 2021 11:26:04 GMT + ewogICJpZCI6ICJzdWJfMUpra3NLMnNPbWY0N056OUFHN20wUVQ1IiwKICAib2JqZWN0IjogInN1YnNjcmlwdGlvbiIsCiAgImFwcGxpY2F0aW9uX2ZlZV9wZXJjZW50IjogbnVsbCwKICAiYXV0b21hdGljX3RheCI6IHsKICAgICJlbmFibGVkIjogZmFsc2UKICB9LAogICJiaWxsaW5nIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiYmlsbGluZ19jeWNsZV9hbmNob3IiOiAxNjM0MjgzMDQ0LAogICJiaWxsaW5nX3RocmVzaG9sZHMiOiBudWxsLAogICJjYW5jZWxfYXQiOiAxNjY1ODE5MDQyLAogICJjYW5jZWxfYXRfcGVyaW9kX2VuZCI6IGZhbHNlLAogICJjYW5jZWxlZF9hdCI6IDE2MzQyODMwNDQsCiAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiY3JlYXRlZCI6IDE2MzQyODMwNDQsCiAgImN1cnJlbnRfcGVyaW9kX2VuZCI6IDE2MzY5NjE0NDQsCiAgImN1cnJlbnRfcGVyaW9kX3N0YXJ0IjogMTYzNDI4MzA0NCwKICAiY3VzdG9tZXIiOiAiY3VzXzhEaTF3amRWa3R2NWt0IiwKICAiZGF5c191bnRpbF9kdWUiOiBudWxsLAogICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogInBtXzFKa2tzRzJzT21mNDdOejlkTlRRNjBBRiIsCiAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogIF0sCiAgImRpc2NvdW50IjogbnVsbCwKICAiZW5kZWRfYXQiOiBudWxsLAogICJpbnZvaWNlX2N1c3RvbWVyX2JhbGFuY2Vfc2V0dGluZ3MiOiB7CiAgICAiY29uc3VtZV9hcHBsaWVkX2JhbGFuY2Vfb25fdm9pZCI6IHRydWUKICB9LAogICJpdGVtcyI6IHsKICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAiZGF0YSI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJzaV9LUGEyNmxxZlVSRllKZSIsCiAgICAgICAgIm9iamVjdCI6ICJzdWJzY3JpcHRpb25faXRlbSIsCiAgICAgICAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjgzMDQ1LAogICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICB9LAogICAgICAgICJwbGFuIjogewogICAgICAgICAgImlkIjogInByaWNlXzFKa2tzSTJzT21mNDdOejkzOFM4c2hRUyIsCiAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICJjcmVhdGVkIjogMTYzNDI4MzA0MiwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgfSwKICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUpra3NJMnNPbWY0N056OTM4UzhzaFFTIiwKICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjgzMDQyLAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICB9LAogICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUpra3NLMnNPbWY0N056OUFHN20wUVQ1IiwKICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICBdCiAgICAgIH0KICAgIF0sCiAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAidXJsIjogIi92MS9zdWJzY3JpcHRpb25faXRlbXM/c3Vic2NyaXB0aW9uPXN1Yl8xSmtrc0syc09tZjQ3Tno5QUc3bTBRVDUiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUpra3NLMnNPbWY0N056OXZMMVlEODd4IiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiAxNDU3NCwKICAgICJhbW91bnRfcGFpZCI6IDE0NTc0LAogICAgImFtb3VudF9yZW1haW5pbmciOiAwLAogICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgImF0dGVtcHRfY291bnQiOiAxLAogICAgImF0dGVtcHRlZCI6IHRydWUsCiAgICAiYXV0b19hZHZhbmNlIjogZmFsc2UsCiAgICAiYXV0b21hdGljX3RheCI6IHsKICAgICAgImVuYWJsZWQiOiBmYWxzZSwKICAgICAgInN0YXR1cyI6IG51bGwKICAgIH0sCiAgICAiYmlsbGluZyI6ICJjaGFyZ2VfYXV0b21hdGljYWxseSIsCiAgICAiYmlsbGluZ19yZWFzb24iOiAic3Vic2NyaXB0aW9uX2NyZWF0ZSIsCiAgICAiY2hhcmdlIjogImNoXzNKa2tzSzJzT21mNDdOejkwcHR4MHY0MCIsCiAgICAiY29sbGVjdGlvbl9tZXRob2QiOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImNyZWF0ZWQiOiAxNjM0MjgzMDQ0LAogICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAiY3VzdG9tX2ZpZWxkcyI6IG51bGwsCiAgICAiY3VzdG9tZXIiOiAiY3VzXzhEaTF3amRWa3R2NWt0IiwKICAgICJjdXN0b21lcl9hZGRyZXNzIjogbnVsbCwKICAgICJjdXN0b21lcl9lbWFpbCI6ICJqZWFuLmR1cG9uZEBnbWFpbC5jb20iLAogICAgImN1c3RvbWVyX25hbWUiOiBudWxsLAogICAgImN1c3RvbWVyX3Bob25lIjogbnVsbCwKICAgICJjdXN0b21lcl9zaGlwcGluZyI6IG51bGwsCiAgICAiY3VzdG9tZXJfdGF4X2V4ZW1wdCI6ICJub25lIiwKICAgICJjdXN0b21lcl90YXhfaWRzIjogWwoKICAgIF0sCiAgICAiZGVmYXVsdF9wYXltZW50X21ldGhvZCI6IG51bGwsCiAgICAiZGVmYXVsdF9zb3VyY2UiOiBudWxsLAogICAgImRlZmF1bHRfdGF4X3JhdGVzIjogWwoKICAgIF0sCiAgICAiZGVzY3JpcHRpb24iOiBudWxsLAogICAgImRpc2NvdW50IjogbnVsbCwKICAgICJkaXNjb3VudHMiOiBbCgogICAgXSwKICAgICJkdWVfZGF0ZSI6IG51bGwsCiAgICAiZW5kaW5nX2JhbGFuY2UiOiAwLAogICAgImZvb3RlciI6IG51bGwsCiAgICAiaG9zdGVkX2ludm9pY2VfdXJsIjogImh0dHBzOi8vaW52b2ljZS5zdHJpcGUuY29tL2kvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L3Rlc3RfWVdOamRGOHhNRE55UlRZeWMwOXRaalEzVG5vNUxGOUxVR0V5TldaeFQybHdaRWwzYUVOMldWVk9VbU4wZGpBelpITXhVbUp4MDEwMHU4WGdmQklIIiwKICAgICJpbnZvaWNlX3BkZiI6ICJodHRwczovL3BheS5zdHJpcGUuY29tL2ludm9pY2UvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L3Rlc3RfWVdOamRGOHhNRE55UlRZeWMwOXRaalEzVG5vNUxGOUxVR0V5TldaeFQybHdaRWwzYUVOMldWVk9VbU4wZGpBelpITXhVbUp4MDEwMHU4WGdmQklIL3BkZiIsCiAgICAibGFzdF9maW5hbGl6YXRpb25fZXJyb3IiOiBudWxsLAogICAgImxpbmVzIjogewogICAgICAib2JqZWN0IjogImxpc3QiLAogICAgICAiZGF0YSI6IFsKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAiaWlfMUpra3NLMnNPbWY0N056OThHMTF1SGRRIiwKICAgICAgICAgICJvYmplY3QiOiAibGluZV9pdGVtIiwKICAgICAgICAgICJhbW91bnQiOiA1MTAwLAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9ybWF0aW9uIEltcHJpbWFudGUgM0QiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImludm9pY2VfaXRlbSI6ICJpaV8xSmtrc0syc09tZjQ3Tno5OEcxMXVIZFEiLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzY5NjE0NDQsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzQyODMwNDQKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IG51bGwsCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtrc0oyc09tZjQ3Tno5N0ZKYUlaSUwiLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDI4MzA0MywKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogIlJlc2VydmF0aW9ucyBmb3IgcGF5bWVudCBzY2hlZHVsZSIsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpQeVh3NkJEQkJGT2ciLAogICAgICAgICAgICAicmVjdXJyaW5nIjogbnVsbCwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogIm9uZV90aW1lIiwKICAgICAgICAgICAgInVuaXRfYW1vdW50IjogNTEwMCwKICAgICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiNTEwMCIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJvcmF0aW9uIjogZmFsc2UsCiAgICAgICAgICAicXVhbnRpdHkiOiAxLAogICAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUpra3NLMnNPbWY0N056OUFHN20wUVQ1IiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAiaW52b2ljZWl0ZW0iLAogICAgICAgICAgInVuaXF1ZV9pZCI6ICJpbF8xSmtrc0syc09tZjQ3Tno5WXZZMGVSZVMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAiaWlfMUpra3NLMnNPbWY0N056OVhNWGpEZjhEIiwKICAgICAgICAgICJvYmplY3QiOiAibGluZV9pdGVtIiwKICAgICAgICAgICJhbW91bnQiOiA4LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQWJvbm5lbWVudCBtZW5zdWFsaXNhYmxlIC0gc3RhbmRhcmQsIGFzc29jaWF0aW9uLCB5ZWFyIiwKICAgICAgICAgICJkaXNjb3VudF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAiZGlzY291bnRhYmxlIjogdHJ1ZSwKICAgICAgICAgICJkaXNjb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJpbnZvaWNlX2l0ZW0iOiAiaWlfMUpra3NLMnNPbWY0N056OVhNWGpEZjhEIiwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAgICJlbmQiOiAxNjM2OTYxNDQ0LAogICAgICAgICAgICAic3RhcnQiOiAxNjM0MjgzMDQ0CiAgICAgICAgICB9LAogICAgICAgICAgInBsYW4iOiBudWxsLAogICAgICAgICAgInByaWNlIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpra3NKMnNPbWY0N056OXlKbDRBejhXIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzQyODMwNDMsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6ICJQcmljZSBhZGp1c3RtZW50IGZvciBwYXltZW50IHNjaGVkdWxlIiwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJyZWN1cnJpbmciOiBudWxsLAogICAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICAgInR5cGUiOiAib25lX3RpbWUiLAogICAgICAgICAgICAidW5pdF9hbW91bnQiOiA4LAogICAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI4IgogICAgICAgICAgfSwKICAgICAgICAgICJwcm9yYXRpb24iOiBmYWxzZSwKICAgICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl8xSmtrc0syc09tZjQ3Tno5QUc3bTBRVDUiLAogICAgICAgICAgInRheF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidHlwZSI6ICJpbnZvaWNlaXRlbSIsCiAgICAgICAgICAidW5pcXVlX2lkIjogImlsXzFKa2tzSzJzT21mNDdOejlBQUpuRGkxMiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJzbGlfMTk3NjgwMnNPbWY0N056OTc2MmM3ZWQyIiwKICAgICAgICAgICJvYmplY3QiOiAibGluZV9pdGVtIiwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiMSDDlyBBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIgKGF0ICQ5NC42NiAvIG1vbnRoKSIsCiAgICAgICAgICAiZGlzY291bnRfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImRpc2NvdW50YWJsZSI6IHRydWUsCiAgICAgICAgICAiZGlzY291bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAicGVyaW9kIjogewogICAgICAgICAgICAiZW5kIjogMTYzNjk2MTQ0NCwKICAgICAgICAgICAgInN0YXJ0IjogMTYzNDI4MzA0NAogICAgICAgICAgfSwKICAgICAgICAgICJwbGFuIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpra3NJMnNPbWY0N056OTM4UzhzaFFTIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAiYW1vdW50IjogOTQ2NiwKICAgICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzQyODMwNDIsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInRpZXJzIjogbnVsbCwKICAgICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInByaWNlIjogewogICAgICAgICAgICAiaWQiOiAicHJpY2VfMUpra3NJMnNPbWY0N056OTM4UzhzaFFTIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgICAiY3JlYXRlZCI6IDE2MzQyODMwNDIsCiAgICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICAgInR5cGUiOiAicmVjdXJyaW5nIiwKICAgICAgICAgICAgInVuaXRfYW1vdW50IjogOTQ2NiwKICAgICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJvcmF0aW9uIjogZmFsc2UsCiAgICAgICAgICAicXVhbnRpdHkiOiAxLAogICAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUpra3NLMnNPbWY0N056OUFHN20wUVQ1IiwKICAgICAgICAgICJzdWJzY3JpcHRpb25faXRlbSI6ICJzaV9LUGEyNmxxZlVSRllKZSIsCiAgICAgICAgICAidGF4X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0YXhfcmF0ZXMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0eXBlIjogInN1YnNjcmlwdGlvbiIsCiAgICAgICAgICAidW5pcXVlX2lkIjogImlsXzFKa2tzSzJzT21mNDdOejlzTGJ6VEhYcCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAidG90YWxfY291bnQiOiAzLAogICAgICAidXJsIjogIi92MS9pbnZvaWNlcy9pbl8xSmtrc0syc09tZjQ3Tno5dkwxWUQ4N3gvbGluZXMiCiAgICB9LAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5leHRfcGF5bWVudF9hdHRlbXB0IjogbnVsbCwKICAgICJudW1iZXIiOiAiQzBFNjYxQy0xNDU3IiwKICAgICJvbl9iZWhhbGZfb2YiOiBudWxsLAogICAgInBhaWQiOiB0cnVlLAogICAgInBheW1lbnRfaW50ZW50IjogewogICAgICAiaWQiOiAicGlfM0pra3NLMnNPbWY0N056OTBkZzJMN1hlIiwKICAgICAgIm9iamVjdCI6ICJwYXltZW50X2ludGVudCIsCiAgICAgICJhbW91bnQiOiAxNDU3NCwKICAgICAgImFtb3VudF9jYXB0dXJhYmxlIjogMCwKICAgICAgImFtb3VudF9yZWNlaXZlZCI6IDE0NTc0LAogICAgICAiYXBwbGljYXRpb24iOiBudWxsLAogICAgICAiYXBwbGljYXRpb25fZmVlX2Ftb3VudCI6IG51bGwsCiAgICAgICJjYW5jZWxlZF9hdCI6IG51bGwsCiAgICAgICJjYW5jZWxsYXRpb25fcmVhc29uIjogbnVsbCwKICAgICAgImNhcHR1cmVfbWV0aG9kIjogImF1dG9tYXRpYyIsCiAgICAgICJjaGFyZ2VzIjogewogICAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICAgImRhdGEiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJpZCI6ICJjaF8zSmtrc0syc09tZjQ3Tno5MHB0eDB2NDAiLAogICAgICAgICAgICAib2JqZWN0IjogImNoYXJnZSIsCiAgICAgICAgICAgICJhbW91bnQiOiAxNDU3NCwKICAgICAgICAgICAgImFtb3VudF9jYXB0dXJlZCI6IDE0NTc0LAogICAgICAgICAgICAiYW1vdW50X3JlZnVuZGVkIjogMCwKICAgICAgICAgICAgImFwcGxpY2F0aW9uIjogbnVsbCwKICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ZlZSI6IG51bGwsCiAgICAgICAgICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICAgICAgICAgImJhbGFuY2VfdHJhbnNhY3Rpb24iOiAidHhuXzNKa2tzSzJzT21mNDdOejkwNnNyaHRQTCIsCiAgICAgICAgICAgICJiaWxsaW5nX2RldGFpbHMiOiB7CiAgICAgICAgICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgICAgICAgICAiY2l0eSI6IG51bGwsCiAgICAgICAgICAgICAgICAiY291bnRyeSI6IG51bGwsCiAgICAgICAgICAgICAgICAibGluZTEiOiBudWxsLAogICAgICAgICAgICAgICAgImxpbmUyIjogbnVsbCwKICAgICAgICAgICAgICAgICJwb3N0YWxfY29kZSI6IG51bGwsCiAgICAgICAgICAgICAgICAic3RhdGUiOiBudWxsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZW1haWwiOiBudWxsLAogICAgICAgICAgICAgICJuYW1lIjogbnVsbCwKICAgICAgICAgICAgICAicGhvbmUiOiBudWxsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJjYWxjdWxhdGVkX3N0YXRlbWVudF9kZXNjcmlwdG9yIjogIlN0cmlwZSIsCiAgICAgICAgICAgICJjYXB0dXJlZCI6IHRydWUsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDI4MzA0NSwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3Vic2NyaXB0aW9uIGNyZWF0aW9uIiwKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogbnVsbCwKICAgICAgICAgICAgImRpc3B1dGUiOiBudWxsLAogICAgICAgICAgICAiZGlzcHV0ZWQiOiBmYWxzZSwKICAgICAgICAgICAgImZhaWx1cmVfY29kZSI6IG51bGwsCiAgICAgICAgICAgICJmYWlsdXJlX21lc3NhZ2UiOiBudWxsLAogICAgICAgICAgICAiZnJhdWRfZGV0YWlscyI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImludm9pY2UiOiAiaW5fMUpra3NLMnNPbWY0N056OXZMMVlEODd4IiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAgICAgICAgICJvcmRlciI6IG51bGwsCiAgICAgICAgICAgICJvdXRjb21lIjogewogICAgICAgICAgICAgICJuZXR3b3JrX3N0YXR1cyI6ICJhcHByb3ZlZF9ieV9uZXR3b3JrIiwKICAgICAgICAgICAgICAicmVhc29uIjogbnVsbCwKICAgICAgICAgICAgICAicmlza19sZXZlbCI6ICJub3JtYWwiLAogICAgICAgICAgICAgICJyaXNrX3Njb3JlIjogNDQsCiAgICAgICAgICAgICAgInNlbGxlcl9tZXNzYWdlIjogIlBheW1lbnQgY29tcGxldGUuIiwKICAgICAgICAgICAgICAidHlwZSI6ICJhdXRob3JpemVkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicGFpZCI6IHRydWUsCiAgICAgICAgICAgICJwYXltZW50X2ludGVudCI6ICJwaV8zSmtrc0syc09tZjQ3Tno5MGRnMkw3WGUiLAogICAgICAgICAgICAicGF5bWVudF9tZXRob2QiOiAicG1fMUpra3NHMnNPbWY0N056OWROVFE2MEFGIiwKICAgICAgICAgICAgInBheW1lbnRfbWV0aG9kX2RldGFpbHMiOiB7CiAgICAgICAgICAgICAgImNhcmQiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmQiOiAidmlzYSIsCiAgICAgICAgICAgICAgICAiY2hlY2tzIjogewogICAgICAgICAgICAgICAgICAiYWRkcmVzc19saW5lMV9jaGVjayI6IG51bGwsCiAgICAgICAgICAgICAgICAgICJhZGRyZXNzX3Bvc3RhbF9jb2RlX2NoZWNrIjogbnVsbCwKICAgICAgICAgICAgICAgICAgImN2Y19jaGVjayI6ICJwYXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIiwKICAgICAgICAgICAgICAgICJleHBfbW9udGgiOiA0LAogICAgICAgICAgICAgICAgImV4cF95ZWFyIjogMjAyMiwKICAgICAgICAgICAgICAgICJmaW5nZXJwcmludCI6ICJvNTJqeWJSN2JubU5uNkFUIiwKICAgICAgICAgICAgICAgICJmdW5kaW5nIjogImNyZWRpdCIsCiAgICAgICAgICAgICAgICAiaW5zdGFsbG1lbnRzIjogbnVsbCwKICAgICAgICAgICAgICAgICJsYXN0NCI6ICI0MjQyIiwKICAgICAgICAgICAgICAgICJuZXR3b3JrIjogInZpc2EiLAogICAgICAgICAgICAgICAgInRocmVlX2Rfc2VjdXJlIjogbnVsbCwKICAgICAgICAgICAgICAgICJ3YWxsZXQiOiBudWxsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAidHlwZSI6ICJjYXJkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVjZWlwdF9lbWFpbCI6IG51bGwsCiAgICAgICAgICAgICJyZWNlaXB0X251bWJlciI6IG51bGwsCiAgICAgICAgICAgICJyZWNlaXB0X3VybCI6ICJodHRwczovL3BheS5zdHJpcGUuY29tL3JlY2VpcHRzL2FjY3RfMTAzckU2MnNPbWY0N056OS9jaF8zSmtrc0syc09tZjQ3Tno5MHB0eDB2NDAvcmNwdF9LUGEyUlN0YXZOb2FUd3dzSDVPeVV1TTJ5b0dRbHZuIiwKICAgICAgICAgICAgInJlZnVuZGVkIjogZmFsc2UsCiAgICAgICAgICAgICJyZWZ1bmRzIjogewogICAgICAgICAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICAgICAgICAgImRhdGEiOiBbCgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICAgICAgICAgInRvdGFsX2NvdW50IjogMCwKICAgICAgICAgICAgICAidXJsIjogIi92MS9jaGFyZ2VzL2NoXzNKa2tzSzJzT21mNDdOejkwcHR4MHY0MC9yZWZ1bmRzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmV2aWV3IjogbnVsbCwKICAgICAgICAgICAgInNoaXBwaW5nIjogbnVsbCwKICAgICAgICAgICAgInNvdXJjZSI6IG51bGwsCiAgICAgICAgICAgICJzb3VyY2VfdHJhbnNmZXIiOiBudWxsLAogICAgICAgICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3IiOiBudWxsLAogICAgICAgICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3Jfc3VmZml4IjogbnVsbCwKICAgICAgICAgICAgInN0YXR1cyI6ICJzdWNjZWVkZWQiLAogICAgICAgICAgICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zlcl9ncm91cCI6IG51bGwKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAgICAgInVybCI6ICIvdjEvY2hhcmdlcz9wYXltZW50X2ludGVudD1waV8zSmtrc0syc09tZjQ3Tno5MGRnMkw3WGUiCiAgICAgIH0sCiAgICAgICJjbGllbnRfc2VjcmV0IjogInBpXzNKa2tzSzJzT21mNDdOejkwZGcyTDdYZV9zZWNyZXRfMGlTV2g0SHdPR2prRHZuVG9hNm04WVkwWiIsCiAgICAgICJjb25maXJtYXRpb25fbWV0aG9kIjogImF1dG9tYXRpYyIsCiAgICAgICJjcmVhdGVkIjogMTYzNDI4MzA0NCwKICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU3Vic2NyaXB0aW9uIGNyZWF0aW9uIiwKICAgICAgImludm9pY2UiOiAiaW5fMUpra3NLMnNPbWY0N056OXZMMVlEODd4IiwKICAgICAgImxhc3RfcGF5bWVudF9lcnJvciI6IG51bGwsCiAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAibWV0YWRhdGEiOiB7CiAgICAgIH0sCiAgICAgICJuZXh0X2FjdGlvbiI6IG51bGwsCiAgICAgICJvbl9iZWhhbGZfb2YiOiBudWxsLAogICAgICAicGF5bWVudF9tZXRob2QiOiAicG1fMUpra3NHMnNPbWY0N056OWROVFE2MEFGIiwKICAgICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiB7CiAgICAgICAgImNhcmQiOiB7CiAgICAgICAgICAiaW5zdGFsbG1lbnRzIjogbnVsbCwKICAgICAgICAgICJuZXR3b3JrIjogbnVsbCwKICAgICAgICAgICJyZXF1ZXN0X3RocmVlX2Rfc2VjdXJlIjogImF1dG9tYXRpYyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwYXltZW50X21ldGhvZF90eXBlcyI6IFsKICAgICAgICAiY2FyZCIKICAgICAgXSwKICAgICAgInJlY2VpcHRfZW1haWwiOiBudWxsLAogICAgICAicmV2aWV3IjogbnVsbCwKICAgICAgInNldHVwX2Z1dHVyZV91c2FnZSI6ICJvZmZfc2Vzc2lvbiIsCiAgICAgICJzaGlwcGluZyI6IG51bGwsCiAgICAgICJzb3VyY2UiOiBudWxsLAogICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3IiOiBudWxsLAogICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3Jfc3VmZml4IjogbnVsbCwKICAgICAgInN0YXR1cyI6ICJzdWNjZWVkZWQiLAogICAgICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgICAgICJ0cmFuc2Zlcl9ncm91cCI6IG51bGwKICAgIH0sCiAgICAicGF5bWVudF9zZXR0aW5ncyI6IHsKICAgICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiBudWxsLAogICAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgICB9LAogICAgInBlcmlvZF9lbmQiOiAxNjM0MjgzMDQ0LAogICAgInBlcmlvZF9zdGFydCI6IDE2MzQyODMwNDQsCiAgICAicG9zdF9wYXltZW50X2NyZWRpdF9ub3Rlc19hbW91bnQiOiAwLAogICAgInByZV9wYXltZW50X2NyZWRpdF9ub3Rlc19hbW91bnQiOiAwLAogICAgInF1b3RlIjogbnVsbCwKICAgICJyZWNlaXB0X251bWJlciI6IG51bGwsCiAgICAic3RhcnRpbmdfYmFsYW5jZSI6IDAsCiAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3IiOiBudWxsLAogICAgInN0YXR1cyI6ICJwYWlkIiwKICAgICJzdGF0dXNfdHJhbnNpdGlvbnMiOiB7CiAgICAgICJmaW5hbGl6ZWRfYXQiOiAxNjM0MjgzMDQ0LAogICAgICAibWFya2VkX3VuY29sbGVjdGlibGVfYXQiOiBudWxsLAogICAgICAicGFpZF9hdCI6IDE2MzQyODMwNDQsCiAgICAgICJ2b2lkZWRfYXQiOiBudWxsCiAgICB9LAogICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUpra3NLMnNPbWY0N056OUFHN20wUVQ1IiwKICAgICJzdWJ0b3RhbCI6IDE0NTc0LAogICAgInRheCI6IG51bGwsCiAgICAidGF4X3BlcmNlbnQiOiBudWxsLAogICAgInRvdGFsIjogMTQ1NzQsCiAgICAidG90YWxfZGlzY291bnRfYW1vdW50cyI6IFsKCiAgICBdLAogICAgInRvdGFsX3RheF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgICAid2ViaG9va3NfZGVsaXZlcmVkX2F0IjogMTYzNDI4MzA0NAogIH0sCiAgImxpdmVtb2RlIjogZmFsc2UsCiAgIm1ldGFkYXRhIjogewogIH0sCiAgIm5leHRfcGVuZGluZ19pbnZvaWNlX2l0ZW1faW52b2ljZSI6IG51bGwsCiAgInBhdXNlX2NvbGxlY3Rpb24iOiBudWxsLAogICJwYXltZW50X3NldHRpbmdzIjogewogICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiBudWxsLAogICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogbnVsbAogIH0sCiAgInBlbmRpbmdfaW52b2ljZV9pdGVtX2ludGVydmFsIjogbnVsbCwKICAicGVuZGluZ19zZXR1cF9pbnRlbnQiOiBudWxsLAogICJwZW5kaW5nX3VwZGF0ZSI6IG51bGwsCiAgInBsYW4iOiB7CiAgICAiaWQiOiAicHJpY2VfMUpra3NJMnNPbWY0N056OTM4UzhzaFFTIiwKICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgImFtb3VudCI6IDk0NjYsCiAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgImNyZWF0ZWQiOiAxNjM0MjgzMDQyLAogICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgImludGVydmFsX2NvdW50IjogMSwKICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgIm1ldGFkYXRhIjogewogICAgfSwKICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICJ0aWVycyI6IG51bGwsCiAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICB9LAogICJxdWFudGl0eSI6IDEsCiAgInNjaGVkdWxlIjogbnVsbCwKICAic3RhcnQiOiAxNjM0MjgzMDQ0LAogICJzdGFydF9kYXRlIjogMTYzNDI4MzA0NCwKICAic3RhdHVzIjogImFjdGl2ZSIsCiAgInRheF9wZXJjZW50IjogbnVsbCwKICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgInRyaWFsX2VuZCI6IG51bGwsCiAgInRyaWFsX3N0YXJ0IjogbnVsbAp9Cg== + recorded_at: Fri, 15 Oct 2021 07:30:47 GMT recorded_with: VCR 6.0.0 diff --git a/test/vcr_cassettes/subscriptions_user_create_with_payment_schedule.yml b/test/vcr_cassettes/subscriptions_user_create_with_payment_schedule.yml index b9c6e8af8..938920e0b 100644 --- a/test/vcr_cassettes/subscriptions_user_create_with_payment_schedule.yml +++ b/test/vcr_cassettes/subscriptions_user_create_with_payment_schedule.yml @@ -13,14 +13,12 @@ http_interactions: - Bearer sk_test_testfaketestfaketestfake Content-Type: - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_cgnARwO4Ev5LiK","request_duration_ms":473}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -33,7 +31,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:24:55 GMT + - Thu, 14 Oct 2021 15:57:08 GMT Content-Type: - application/json Content-Length: @@ -53,18 +51,16 @@ http_interactions: Cache-Control: - no-cache, no-store Request-Id: - - req_BmLy1x4bEq0d9C + - req_2Si3MYbjIckWp6 Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '6' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "pm_1JZDHP2sOmf47Nz9SPvppX4K", + "id": "pm_1JkWIq2sOmf47Nz9y8vyE7cz", "object": "payment_method", "billing_details": { "address": { @@ -104,17 +100,17 @@ http_interactions: }, "wallet": null }, - "created": 1631532295, + "created": 1634227028, "customer": null, "livemode": false, "metadata": { }, "type": "card" } - recorded_at: Mon, 13 Sep 2021 11:24:55 GMT + recorded_at: Thu, 14 Oct 2021 15:57:08 GMT - request: method: post - uri: https://api.stripe.com/v1/payment_methods/pm_1JZDHP2sOmf47Nz9SPvppX4K/attach + uri: https://api.stripe.com/v1/payment_methods/pm_1JkWIq2sOmf47Nz9y8vyE7cz/attach body: encoding: UTF-8 string: customer=cus_8Di1wjdVktv5kt @@ -126,13 +122,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_BmLy1x4bEq0d9C","request_duration_ms":654}}' + - '{"last_request_metrics":{"request_id":"req_2Si3MYbjIckWp6","request_duration_ms":770}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -145,7 +141,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:24:56 GMT + - Thu, 14 Oct 2021 15:57:09 GMT Content-Type: - application/json Content-Length: @@ -165,18 +161,16 @@ http_interactions: Cache-Control: - no-cache, no-store Request-Id: - - req_TapdvkF3Irgpu7 + - req_yJo2oWFeLPQiKQ Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '6' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "pm_1JZDHP2sOmf47Nz9SPvppX4K", + "id": "pm_1JkWIq2sOmf47Nz9y8vyE7cz", "object": "payment_method", "billing_details": { "address": { @@ -216,20 +210,20 @@ http_interactions: }, "wallet": null }, - "created": 1631532295, + "created": 1634227028, "customer": "cus_8Di1wjdVktv5kt", "livemode": false, "metadata": { }, "type": "card" } - recorded_at: Mon, 13 Sep 2021 11:24:56 GMT + recorded_at: Thu, 14 Oct 2021 15:57:09 GMT - request: method: post uri: https://api.stripe.com/v1/customers/cus_8Di1wjdVktv5kt body: encoding: UTF-8 - string: invoice_settings[default_payment_method]=pm_1JZDHP2sOmf47Nz9SPvppX4K + string: invoice_settings[default_payment_method]=pm_1JkWIq2sOmf47Nz9y8vyE7cz headers: User-Agent: - Stripe/v1 RubyBindings/5.29.0 @@ -238,13 +232,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_TapdvkF3Irgpu7","request_duration_ms":780}}' + - '{"last_request_metrics":{"request_id":"req_yJo2oWFeLPQiKQ","request_duration_ms":937}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -257,11 +251,11 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:24:57 GMT + - Thu, 14 Oct 2021 15:57:10 GMT Content-Type: - application/json Content-Length: - - '49679' + - '49747' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -277,11 +271,9 @@ http_interactions: Cache-Control: - no-cache, no-store Request-Id: - - req_9iMWpoT1nVpoIU + - req_CamqGslInNXwJd Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: @@ -303,14 +295,14 @@ http_interactions: "invoice_prefix": "C0E661C", "invoice_settings": { "custom_fields": null, - "default_payment_method": "pm_1JZDHP2sOmf47Nz9SPvppX4K", + "default_payment_method": "pm_1JkWIq2sOmf47Nz9y8vyE7cz", "footer": null }, "livemode": false, "metadata": { }, "name": null, - "next_invoice_sequence": 1255, + "next_invoice_sequence": 1454, "phone": null, "preferred_locales": [ @@ -353,6 +345,590 @@ http_interactions: "subscriptions": { "object": "list", "data": [ + { + "id": "sub_1JkW7C2sOmf47Nz9v1DfTXVk", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634226305, + "billing_thresholds": null, + "cancel_at": 1665762304, + "cancel_at_period_end": false, + "canceled_at": 1634226305, + "collection_method": "charge_automatically", + "created": 1634226305, + "current_period_end": 1636904705, + "current_period_start": 1634226305, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkW772sOmf47Nz9IlBfocG1", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKmRh1aVMvlVs", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634226306, + "metadata": { + }, + "plan": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkW7C2sOmf47Nz9v1DfTXVk", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkW7C2sOmf47Nz9v1DfTXVk" + }, + "latest_invoice": "in_1JkW7C2sOmf47Nz9DHI5iyGy", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634226305, + "start_date": 1634226305, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkW4B2sOmf47Nz9H7F8oy4X", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634226119, + "billing_thresholds": null, + "cancel_at": 1665762118, + "cancel_at_period_end": false, + "canceled_at": 1634226119, + "collection_method": "charge_automatically", + "created": 1634226119, + "current_period_end": 1636904519, + "current_period_start": 1634226119, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkW472sOmf47Nz9eDPVcQRR", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKjWzNKMgo5Fm", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634226120, + "metadata": { + }, + "plan": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkW4B2sOmf47Nz9H7F8oy4X", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkW4B2sOmf47Nz9H7F8oy4X" + }, + "latest_invoice": "in_1JkW4B2sOmf47Nz99kAOQNRU", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634226119, + "start_date": 1634226119, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDebRcYreXVUnH", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532361, + "billing_thresholds": null, + "cancel_at": 1663068360, + "cancel_at_period_end": false, + "canceled_at": 1631532361, + "collection_method": "charge_automatically", + "created": 1631532361, + "current_period_end": 1636802761, + "current_period_start": 1634124361, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDebUR1KKDUfV6", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532361, + "metadata": { + }, + "plan": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDebRcYreXVUnH", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDebRcYreXVUnH" + }, + "latest_invoice": "in_1Jk5cF2sOmf47Nz9UrRCYQQP", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532361, + "start_date": 1631532361, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeatKq0nLrE5s", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532298, + "billing_thresholds": null, + "cancel_at": 1663068297, + "cancel_at_period_end": false, + "canceled_at": 1631532298, + "collection_method": "charge_automatically", + "created": 1631532298, + "current_period_end": 1636802698, + "current_period_start": 1634124298, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDHP2sOmf47Nz9SPvppX4K", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDea7Zt4pCFPCd", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532299, + "metadata": { + }, + "plan": { + "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532297, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532297, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeatKq0nLrE5s", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeatKq0nLrE5s" + }, + "latest_invoice": "in_1Jk5bN2sOmf47Nz9YtlYT2cW", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532297, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532298, + "start_date": 1631532298, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, { "id": "sub_KDeaVj7yYl0taQ", "object": "subscription", @@ -368,8 +944,8 @@ http_interactions: "canceled_at": 1631532268, "collection_method": "charge_automatically", "created": 1631532268, - "current_period_end": 1634124268, - "current_period_start": 1631532268, + "current_period_end": 1636802668, + "current_period_start": 1634124268, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZDGv2sOmf47Nz9SM0WLRa7", @@ -453,7 +1029,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeaVj7yYl0taQ" }, - "latest_invoice": "in_1JZDGy2sOmf47Nz91pY1mWem", + "latest_invoice": "in_1Jk5ab2sOmf47Nz9HGfetsPd", "livemode": false, "metadata": { }, @@ -514,8 +1090,8 @@ http_interactions: "canceled_at": 1631531879, "collection_method": "charge_automatically", "created": 1631531879, - "current_period_end": 1634123879, - "current_period_start": 1631531879, + "current_period_end": 1636802279, + "current_period_start": 1634123879, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZDAe2sOmf47Nz9bsm9wPFI", @@ -599,7 +1175,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDeToJCqy8AUki" }, - "latest_invoice": "in_1JZDAi2sOmf47Nz9OTez1qxa", + "latest_invoice": "in_1Jk5Tj2sOmf47Nz94oD4YTbF", "livemode": false, "metadata": { }, @@ -660,8 +1236,8 @@ http_interactions: "canceled_at": 1631531618, "collection_method": "charge_automatically", "created": 1631531618, - "current_period_end": 1634123618, - "current_period_start": 1631531618, + "current_period_end": 1636802018, + "current_period_start": 1634123618, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZD6R2sOmf47Nz9CVbi40LS", @@ -745,7 +1321,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDePb9wwv9HEXL" }, - "latest_invoice": "in_1JZD6U2sOmf47Nz96ByzJABC", + "latest_invoice": "in_1Jk5Q92sOmf47Nz9EPwy8dVf", "livemode": false, "metadata": { }, @@ -806,8 +1382,8 @@ http_interactions: "canceled_at": 1631525640, "collection_method": "charge_automatically", "created": 1631525640, - "current_period_end": 1634117640, - "current_period_start": 1631525640, + "current_period_end": 1636796040, + "current_period_start": 1634117640, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZBY02sOmf47Nz9cujVPxe4", @@ -891,7 +1467,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDcntUY1yaA3Fc" }, - "latest_invoice": "in_1JZBY42sOmf47Nz9DSvyJRef", + "latest_invoice": "in_1Jk3rN2sOmf47Nz9RqBSO0Dg", "livemode": false, "metadata": { }, @@ -952,8 +1528,8 @@ http_interactions: "canceled_at": 1631524709, "collection_method": "charge_automatically", "created": 1631524709, - "current_period_end": 1634116709, - "current_period_start": 1631524709, + "current_period_end": 1636795109, + "current_period_start": 1634116709, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZBIz2sOmf47Nz9if8isgCk", @@ -1037,7 +1613,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDcYcFzvKIAfxe" }, - "latest_invoice": "in_1JZBJ32sOmf47Nz9cVh8GVlb", + "latest_invoice": "in_1Jk3cE2sOmf47Nz90M1EaH9U", "livemode": false, "metadata": { }, @@ -1098,8 +1674,8 @@ http_interactions: "canceled_at": 1631524329, "collection_method": "charge_automatically", "created": 1631524329, - "current_period_end": 1634116329, - "current_period_start": 1631524329, + "current_period_end": 1636794729, + "current_period_start": 1634116329, "customer": "cus_8Di1wjdVktv5kt", "days_until_due": null, "default_payment_method": "pm_1JZBCs2sOmf47Nz9xLQzqIu9", @@ -1183,7 +1759,7 @@ http_interactions: "total_count": 1, "url": "/v1/subscription_items?subscription=sub_KDcREVjTNPz3Ew" }, - "latest_invoice": "in_1JZBCv2sOmf47Nz91bRTmzcU", + "latest_invoice": "in_1Jk3Wo2sOmf47Nz9gt9wsAE7", "livemode": false, "metadata": { }, @@ -1228,594 +1804,10 @@ http_interactions: "transfer_data": null, "trial_end": null, "trial_start": null - }, - { - "id": "sub_KDcNi59k7NkmxZ", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631524094, - "billing_thresholds": null, - "cancel_at": 1663060092, - "cancel_at_period_end": false, - "canceled_at": 1631524094, - "collection_method": "charge_automatically", - "created": 1631524094, - "current_period_end": 1634116094, - "current_period_start": 1631524094, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZB942sOmf47Nz9uaPVuoqr", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcNxc5epuq6Ro", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631524094, - "metadata": { - }, - "plan": { - "id": "price_1JZB962sOmf47Nz9nKwhbU5R", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524092, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB962sOmf47Nz9nKwhbU5R", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631524092, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcNi59k7NkmxZ", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcNi59k7NkmxZ" - }, - "latest_invoice": "in_1JZB982sOmf47Nz9IFFpw8eB", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB962sOmf47Nz9nKwhbU5R", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631524092, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631524094, - "start_date": 1631524094, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDcKvn4YhcxOlf", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523862, - "billing_thresholds": null, - "cancel_at": 1663059861, - "cancel_at_period_end": false, - "canceled_at": 1631523862, - "collection_method": "charge_automatically", - "created": 1631523862, - "current_period_end": 1634115862, - "current_period_start": 1631523862, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZB5K2sOmf47Nz9SmbgKZJw", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDcKCEkpRf7dS3", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523863, - "metadata": { - }, - "plan": { - "id": "price_1JZB5N2sOmf47Nz9jQ012sQE", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523861, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZB5N2sOmf47Nz9jQ012sQE", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523861, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDcKvn4YhcxOlf", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDcKvn4YhcxOlf" - }, - "latest_invoice": "in_1JZB5O2sOmf47Nz9aP9VIGH7", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZB5N2sOmf47Nz9jQ012sQE", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523861, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523862, - "start_date": 1631523862, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDc9Jl3OiO42tD", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523255, - "billing_thresholds": null, - "cancel_at": 1663059253, - "cancel_at_period_end": false, - "canceled_at": 1631523255, - "collection_method": "charge_automatically", - "created": 1631523255, - "current_period_end": 1634115255, - "current_period_start": 1631523255, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZAvX2sOmf47Nz9Ogf35p36", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDc9AHcWgXWCOh", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523256, - "metadata": { - }, - "plan": { - "id": "price_1JZAva2sOmf47Nz9Eu5l8VIe", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523254, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZAva2sOmf47Nz9Eu5l8VIe", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523254, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDc9Jl3OiO42tD", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDc9Jl3OiO42tD" - }, - "latest_invoice": "in_1JZAvb2sOmf47Nz9eTVrJkJA", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZAva2sOmf47Nz9Eu5l8VIe", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523254, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523255, - "start_date": 1631523255, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - }, - { - "id": "sub_KDc72MBwZL7Mcx", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631523098, - "billing_thresholds": null, - "cancel_at": 1663059097, - "cancel_at_period_end": false, - "canceled_at": 1631523098, - "collection_method": "charge_automatically", - "created": 1631523098, - "current_period_end": 1634115098, - "current_period_start": 1631523098, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZAt02sOmf47Nz9QOEkCfu2", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDc7A3NMyKHOjq", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631523099, - "metadata": { - }, - "plan": { - "id": "price_1JZAt32sOmf47Nz9gjiMYpfc", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523097, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZAt32sOmf47Nz9gjiMYpfc", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631523097, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDc72MBwZL7Mcx", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDc72MBwZL7Mcx" - }, - "latest_invoice": "in_1JZAt42sOmf47Nz9oLcWgzcU", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZAt32sOmf47Nz9gjiMYpfc", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631523097, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631523098, - "start_date": 1631523098, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null } ], "has_more": true, - "total_count": 193, + "total_count": 197, "url": "/v1/customers/cus_8Di1wjdVktv5kt/subscriptions" }, "tax_exempt": "none", @@ -1831,7 +1823,7 @@ http_interactions: "tax_info": null, "tax_info_verification": null } - recorded_at: Mon, 13 Sep 2021 11:24:57 GMT + recorded_at: Thu, 14 Oct 2021 15:57:10 GMT - request: method: post uri: https://api.stripe.com/v1/prices @@ -1846,13 +1838,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_9iMWpoT1nVpoIU","request_duration_ms":794}}' + - '{"last_request_metrics":{"request_id":"req_CamqGslInNXwJd","request_duration_ms":908}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -1865,7 +1857,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:24:57 GMT + - Thu, 14 Oct 2021 15:57:11 GMT Content-Type: - application/json Content-Length: @@ -1885,22 +1877,20 @@ http_interactions: Cache-Control: - no-cache, no-store Request-Id: - - req_69i7eMK7DjsJ2o + - req_xZyntWng1AmvLZ Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631532297, + "created": 1634227030, "currency": "usd", "livemode": false, "lookup_key": null, @@ -1922,7 +1912,7 @@ http_interactions: "unit_amount": 9466, "unit_amount_decimal": "9466" } - recorded_at: Mon, 13 Sep 2021 11:24:57 GMT + recorded_at: Thu, 14 Oct 2021 15:57:11 GMT - request: method: post uri: https://api.stripe.com/v1/prices @@ -1937,13 +1927,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_69i7eMK7DjsJ2o","request_duration_ms":361}}' + - '{"last_request_metrics":{"request_id":"req_xZyntWng1AmvLZ","request_duration_ms":433}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -1956,7 +1946,7 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:24:58 GMT + - Thu, 14 Oct 2021 15:57:11 GMT Content-Type: - application/json Content-Length: @@ -1976,22 +1966,20 @@ http_interactions: Cache-Control: - no-cache, no-store Request-Id: - - req_HZ6s9sl0rYwzeu + - req_kMBygOXNmHHf7l Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '0' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: UTF-8 string: | { - "id": "price_1JZDHR2sOmf47Nz9YVSVuEB5", + "id": "price_1JkWIt2sOmf47Nz91SkP3q0C", "object": "price", "active": true, "billing_scheme": "per_unit", - "created": 1631532297, + "created": 1634227031, "currency": "usd", "livemode": false, "lookup_key": null, @@ -2007,13 +1995,13 @@ http_interactions: "unit_amount": 8, "unit_amount_decimal": "8" } - recorded_at: Mon, 13 Sep 2021 11:24:58 GMT + recorded_at: Thu, 14 Oct 2021 15:57:11 GMT - request: method: post uri: https://api.stripe.com/v1/subscriptions body: encoding: UTF-8 - string: customer=cus_8Di1wjdVktv5kt&cancel_at=1663068297&add_invoice_items[0][price]=price_1JZDHR2sOmf47Nz9YVSVuEB5&items[0][price]=price_1JZDHR2sOmf47Nz9BWE3ZEvx&default_payment_method=pm_1JZDHP2sOmf47Nz9SPvppX4K&expand[0]=latest_invoice.payment_intent + string: customer=cus_8Di1wjdVktv5kt&cancel_at=1665763030&add_invoice_items[0][price]=price_1JkWIt2sOmf47Nz91SkP3q0C&items[0][price]=price_1JkWIs2sOmf47Nz9eGVZoz2W&default_payment_method=pm_1JkWIq2sOmf47Nz9y8vyE7cz&expand[0]=latest_invoice.payment_intent headers: User-Agent: - Stripe/v1 RubyBindings/5.29.0 @@ -2022,13 +2010,13 @@ http_interactions: Content-Type: - application/x-www-form-urlencoded X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_HZ6s9sl0rYwzeu","request_duration_ms":372}}' + - '{"last_request_metrics":{"request_id":"req_kMBygOXNmHHf7l","request_duration_ms":408}}' Stripe-Version: - '2019-08-14' X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' Accept-Encoding: - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 Accept: @@ -2041,11 +2029,11 @@ http_interactions: Server: - nginx Date: - - Mon, 13 Sep 2021 11:25:00 GMT + - Thu, 14 Oct 2021 15:57:14 GMT Content-Type: - application/json Content-Length: - - '15537' + - '15701' Connection: - keep-alive Access-Control-Allow-Credentials: @@ -2061,436 +2049,14 @@ http_interactions: Cache-Control: - no-cache, no-store Request-Id: - - req_8wNmLSrKYQCC2n + - req_9efis0ktvh6il2 Stripe-Version: - '2019-08-14' - X-Stripe-C-Cost: - - '10' Strict-Transport-Security: - max-age=31556926; includeSubDomains; preload body: encoding: ASCII-8BIT string: !binary |- - ewogICJpZCI6ICJzdWJfS0RlYXRLcTBuTHJFNXMiLAogICJvYmplY3QiOiAic3Vic2NyaXB0aW9uIiwKICAiYXBwbGljYXRpb25fZmVlX3BlcmNlbnQiOiBudWxsLAogICJhdXRvbWF0aWNfdGF4IjogewogICAgImVuYWJsZWQiOiBmYWxzZQogIH0sCiAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICJiaWxsaW5nX2N5Y2xlX2FuY2hvciI6IDE2MzE1MzIyOTgsCiAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgImNhbmNlbF9hdCI6IDE2NjMwNjgyOTcsCiAgImNhbmNlbF9hdF9wZXJpb2RfZW5kIjogZmFsc2UsCiAgImNhbmNlbGVkX2F0IjogMTYzMTUzMjI5OCwKICAiY29sbGVjdGlvbl9tZXRob2QiOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICJjcmVhdGVkIjogMTYzMTUzMjI5OCwKICAiY3VycmVudF9wZXJpb2RfZW5kIjogMTYzNDEyNDI5OCwKICAiY3VycmVudF9wZXJpb2Rfc3RhcnQiOiAxNjMxNTMyMjk4LAogICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICJkYXlzX3VudGlsX2R1ZSI6IG51bGwsCiAgImRlZmF1bHRfcGF5bWVudF9tZXRob2QiOiAicG1fMUpaREhQMnNPbWY0N056OVNQdnBwWDRLIiwKICAiZGVmYXVsdF9zb3VyY2UiOiBudWxsLAogICJkZWZhdWx0X3RheF9yYXRlcyI6IFsKCiAgXSwKICAiZGlzY291bnQiOiBudWxsLAogICJlbmRlZF9hdCI6IG51bGwsCiAgImludm9pY2VfY3VzdG9tZXJfYmFsYW5jZV9zZXR0aW5ncyI6IHsKICAgICJjb25zdW1lX2FwcGxpZWRfYmFsYW5jZV9vbl92b2lkIjogdHJ1ZQogIH0sCiAgIml0ZW1zIjogewogICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICJkYXRhIjogWwogICAgICB7CiAgICAgICAgImlkIjogInNpX0tEZWE3WnQ0cENGUENkIiwKICAgICAgICAib2JqZWN0IjogInN1YnNjcmlwdGlvbl9pdGVtIiwKICAgICAgICAiYmlsbGluZ190aHJlc2hvbGRzIjogbnVsbCwKICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIyOTksCiAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgIH0sCiAgICAgICAgInBsYW4iOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUpaREhSMnNPbWY0N056OUJXRTNaRXZ4IiwKICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMjk3LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICB9LAogICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICJpZCI6ICJwcmljZV8xSlpESFIyc09tZjQ3Tno5QldFM1pFdngiLAogICAgICAgICAgIm9iamVjdCI6ICJwcmljZSIsCiAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAiY3JlYXRlZCI6IDE2MzE1MzIyOTcsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgImxvb2t1cF9rZXkiOiBudWxsLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICJyZWN1cnJpbmciOiB7CiAgICAgICAgICAgICJhZ2dyZWdhdGVfdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgIH0sCiAgICAgICAgICAidGF4X2JlaGF2aW9yIjogInVuc3BlY2lmaWVkIiwKICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgInR5cGUiOiAicmVjdXJyaW5nIiwKICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI5NDY2IgogICAgICAgIH0sCiAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl9LRGVhdEtxMG5MckU1cyIsCiAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgXQogICAgICB9CiAgICBdLAogICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAidG90YWxfY291bnQiOiAxLAogICAgInVybCI6ICIvdjEvc3Vic2NyaXB0aW9uX2l0ZW1zP3N1YnNjcmlwdGlvbj1zdWJfS0RlYXRLcTBuTHJFNXMiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUpaREhTMnNPbWY0N056OTV3YTE3MzZFIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiA5NDc0LAogICAgImFtb3VudF9wYWlkIjogOTQ3NCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogMCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMSwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IGZhbHNlLAogICAgImF1dG9tYXRpY190YXgiOiB7CiAgICAgICJlbmFibGVkIjogZmFsc2UsCiAgICAgICJzdGF0dXMiOiBudWxsCiAgICB9LAogICAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImJpbGxpbmdfcmVhc29uIjogInN1YnNjcmlwdGlvbl9jcmVhdGUiLAogICAgImNoYXJnZSI6ICJjaF8zSlpESFMyc09tZjQ3Tno5MHlGY0ZadGIiLAogICAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAgICJjcmVhdGVkIjogMTYzMTUzMjI5OCwKICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgImN1c3RvbV9maWVsZHMiOiBudWxsLAogICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAiY3VzdG9tZXJfYWRkcmVzcyI6IG51bGwsCiAgICAiY3VzdG9tZXJfZW1haWwiOiAiamVhbi5kdXBvbmRAZ21haWwuY29tIiwKICAgICJjdXN0b21lcl9uYW1lIjogbnVsbCwKICAgICJjdXN0b21lcl9waG9uZSI6IG51bGwsCiAgICAiY3VzdG9tZXJfc2hpcHBpbmciOiBudWxsLAogICAgImN1c3RvbWVyX3RheF9leGVtcHQiOiAibm9uZSIsCiAgICAiY3VzdG9tZXJfdGF4X2lkcyI6IFsKCiAgICBdLAogICAgImRlZmF1bHRfcGF5bWVudF9tZXRob2QiOiBudWxsLAogICAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAgICJkZWZhdWx0X3RheF9yYXRlcyI6IFsKCiAgICBdLAogICAgImRlc2NyaXB0aW9uIjogbnVsbCwKICAgICJkaXNjb3VudCI6IG51bGwsCiAgICAiZGlzY291bnRzIjogWwoKICAgIF0sCiAgICAiZHVlX2RhdGUiOiBudWxsLAogICAgImVuZGluZ19iYWxhbmNlIjogMCwKICAgICJmb290ZXIiOiBudWxsLAogICAgImhvc3RlZF9pbnZvaWNlX3VybCI6ICJodHRwczovL2ludm9pY2Uuc3RyaXBlLmNvbS9pL2FjY3RfMTAzckU2MnNPbWY0N056OS9pbnZzdF9LRGVhclVMdHFxd1Q3TlBjeDF5M1ZZb3RaVE5Tc3Y5IiwKICAgICJpbnZvaWNlX3BkZiI6ICJodHRwczovL3BheS5zdHJpcGUuY29tL2ludm9pY2UvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L2ludnN0X0tEZWFyVUx0cXF3VDdOUGN4MXkzVllvdFpUTlNzdjkvcGRmIiwKICAgICJsYXN0X2ZpbmFsaXphdGlvbl9lcnJvciI6IG51bGwsCiAgICAibGluZXMiOiB7CiAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICJkYXRhIjogWwogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJpaV8xSlpESFMyc09tZjQ3Tno5bUpPS1dwZjIiLAogICAgICAgICAgIm9iamVjdCI6ICJsaW5lX2l0ZW0iLAogICAgICAgICAgImFtb3VudCI6IDgsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImludm9pY2VfaXRlbSI6ICJpaV8xSlpESFMyc09tZjQ3Tno5bUpPS1dwZjIiLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzQxMjQyOTgsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzE1MzIyOTgKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IG51bGwsCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSlpESFIyc09tZjQ3Tno5WVZTVnVFQjUiLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzMTUzMjI5NywKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogIlByaWNlIGFkanVzdG1lbnQgZm9yIHBheW1lbnQgc2NoZWR1bGUiLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IG51bGwsCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJvbmVfdGltZSIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDgsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjgiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViX0tEZWF0S3EwbkxyRTVzIiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAiaW52b2ljZWl0ZW0iLAogICAgICAgICAgInVuaXF1ZV9pZCI6ICJpbF8xSlpESFMyc09tZjQ3Tno5NHQ1Y2JnaDgiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAic2xpXzFjY2VkODJzT21mNDdOejkzYmU0YWY4ZSIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogOTQ2NiwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIjEgw5cgQWJvbm5lbWVudCBtZW5zdWFsaXNhYmxlIC0gc3RhbmRhcmQsIGFzc29jaWF0aW9uLCB5ZWFyIChhdCAkOTQuNjYgLyBtb250aCkiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzQxMjQyOTgsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzE1MzIyOTgKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKWkRIUjJzT21mNDdOejlCV0UzWkV2eCIsCiAgICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMjk3LAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogICAgICAgICAgfSwKICAgICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKWkRIUjJzT21mNDdOejlCV0UzWkV2eCIsCiAgICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMjk3LAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IHsKICAgICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjk0NjYiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViX0tEZWF0S3EwbkxyRTVzIiwKICAgICAgICAgICJzdWJzY3JpcHRpb25faXRlbSI6ICJzaV9LRGVhN1p0NHBDRlBDZCIsCiAgICAgICAgICAidGF4X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0YXhfcmF0ZXMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0eXBlIjogInN1YnNjcmlwdGlvbiIsCiAgICAgICAgICAidW5pcXVlX2lkIjogImlsXzFKWkRIUzJzT21mNDdOejlsTEtENUdYdiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAidG90YWxfY291bnQiOiAyLAogICAgICAidXJsIjogIi92MS9pbnZvaWNlcy9pbl8xSlpESFMyc09tZjQ3Tno5NXdhMTczNkUvbGluZXMiCiAgICB9LAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5leHRfcGF5bWVudF9hdHRlbXB0IjogbnVsbCwKICAgICJudW1iZXIiOiAiQzBFNjYxQy0xMjU1IiwKICAgICJvbl9iZWhhbGZfb2YiOiBudWxsLAogICAgInBhaWQiOiB0cnVlLAogICAgInBheW1lbnRfaW50ZW50IjogewogICAgICAiaWQiOiAicGlfM0paREhTMnNPbWY0N056OTA1SEVqTTRzIiwKICAgICAgIm9iamVjdCI6ICJwYXltZW50X2ludGVudCIsCiAgICAgICJhbW91bnQiOiA5NDc0LAogICAgICAiYW1vdW50X2NhcHR1cmFibGUiOiAwLAogICAgICAiYW1vdW50X3JlY2VpdmVkIjogOTQ3NCwKICAgICAgImFwcGxpY2F0aW9uIjogbnVsbCwKICAgICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgICAiY2FuY2VsZWRfYXQiOiBudWxsLAogICAgICAiY2FuY2VsbGF0aW9uX3JlYXNvbiI6IG51bGwsCiAgICAgICJjYXB0dXJlX21ldGhvZCI6ICJhdXRvbWF0aWMiLAogICAgICAiY2hhcmdlcyI6IHsKICAgICAgICAib2JqZWN0IjogImxpc3QiLAogICAgICAgICJkYXRhIjogWwogICAgICAgICAgewogICAgICAgICAgICAiaWQiOiAiY2hfM0paREhTMnNPbWY0N056OTB5RmNGWnRiIiwKICAgICAgICAgICAgIm9iamVjdCI6ICJjaGFyZ2UiLAogICAgICAgICAgICAiYW1vdW50IjogOTQ3NCwKICAgICAgICAgICAgImFtb3VudF9jYXB0dXJlZCI6IDk0NzQsCiAgICAgICAgICAgICJhbW91bnRfcmVmdW5kZWQiOiAwLAogICAgICAgICAgICAiYXBwbGljYXRpb24iOiBudWxsLAogICAgICAgICAgICAiYXBwbGljYXRpb25fZmVlIjogbnVsbCwKICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgICAgICAgICAiYmFsYW5jZV90cmFuc2FjdGlvbiI6ICJ0eG5fM0paREhTMnNPbWY0N056OTBvYnZGV0NqIiwKICAgICAgICAgICAgImJpbGxpbmdfZGV0YWlscyI6IHsKICAgICAgICAgICAgICAiYWRkcmVzcyI6IHsKICAgICAgICAgICAgICAgICJjaXR5IjogbnVsbCwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogbnVsbCwKICAgICAgICAgICAgICAgICJsaW5lMSI6IG51bGwsCiAgICAgICAgICAgICAgICAibGluZTIiOiBudWxsLAogICAgICAgICAgICAgICAgInBvc3RhbF9jb2RlIjogbnVsbCwKICAgICAgICAgICAgICAgICJzdGF0ZSI6IG51bGwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJlbWFpbCI6IG51bGwsCiAgICAgICAgICAgICAgIm5hbWUiOiBudWxsLAogICAgICAgICAgICAgICJwaG9uZSI6IG51bGwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNhbGN1bGF0ZWRfc3RhdGVtZW50X2Rlc2NyaXB0b3IiOiAiU3RyaXBlIiwKICAgICAgICAgICAgImNhcHR1cmVkIjogdHJ1ZSwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMjk5LAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdWJzY3JpcHRpb24gY3JlYXRpb24iLAogICAgICAgICAgICAiZGVzdGluYXRpb24iOiBudWxsLAogICAgICAgICAgICAiZGlzcHV0ZSI6IG51bGwsCiAgICAgICAgICAgICJkaXNwdXRlZCI6IGZhbHNlLAogICAgICAgICAgICAiZmFpbHVyZV9jb2RlIjogbnVsbCwKICAgICAgICAgICAgImZhaWx1cmVfbWVzc2FnZSI6IG51bGwsCiAgICAgICAgICAgICJmcmF1ZF9kZXRhaWxzIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAiaW52b2ljZSI6ICJpbl8xSlpESFMyc09tZjQ3Tno5NXdhMTczNkUiLAogICAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAib25fYmVoYWxmX29mIjogbnVsbCwKICAgICAgICAgICAgIm9yZGVyIjogbnVsbCwKICAgICAgICAgICAgIm91dGNvbWUiOiB7CiAgICAgICAgICAgICAgIm5ldHdvcmtfc3RhdHVzIjogImFwcHJvdmVkX2J5X25ldHdvcmsiLAogICAgICAgICAgICAgICJyZWFzb24iOiBudWxsLAogICAgICAgICAgICAgICJyaXNrX2xldmVsIjogIm5vcm1hbCIsCiAgICAgICAgICAgICAgInJpc2tfc2NvcmUiOiAyMSwKICAgICAgICAgICAgICAic2VsbGVyX21lc3NhZ2UiOiAiUGF5bWVudCBjb21wbGV0ZS4iLAogICAgICAgICAgICAgICJ0eXBlIjogImF1dGhvcml6ZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwYWlkIjogdHJ1ZSwKICAgICAgICAgICAgInBheW1lbnRfaW50ZW50IjogInBpXzNKWkRIUzJzT21mNDdOejkwNUhFak00cyIsCiAgICAgICAgICAgICJwYXltZW50X21ldGhvZCI6ICJwbV8xSlpESFAyc09tZjQ3Tno5U1B2cHBYNEsiLAogICAgICAgICAgICAicGF5bWVudF9tZXRob2RfZGV0YWlscyI6IHsKICAgICAgICAgICAgICAiY2FyZCI6IHsKICAgICAgICAgICAgICAgICJicmFuZCI6ICJ2aXNhIiwKICAgICAgICAgICAgICAgICJjaGVja3MiOiB7CiAgICAgICAgICAgICAgICAgICJhZGRyZXNzX2xpbmUxX2NoZWNrIjogbnVsbCwKICAgICAgICAgICAgICAgICAgImFkZHJlc3NfcG9zdGFsX2NvZGVfY2hlY2siOiBudWxsLAogICAgICAgICAgICAgICAgICAiY3ZjX2NoZWNrIjogInBhc3MiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNvdW50cnkiOiAiVVMiLAogICAgICAgICAgICAgICAgImV4cF9tb250aCI6IDQsCiAgICAgICAgICAgICAgICAiZXhwX3llYXIiOiAyMDIyLAogICAgICAgICAgICAgICAgImZpbmdlcnByaW50IjogIm81Mmp5YlI3Ym5tTm42QVQiLAogICAgICAgICAgICAgICAgImZ1bmRpbmciOiAiY3JlZGl0IiwKICAgICAgICAgICAgICAgICJpbnN0YWxsbWVudHMiOiBudWxsLAogICAgICAgICAgICAgICAgImxhc3Q0IjogIjQyNDIiLAogICAgICAgICAgICAgICAgIm5ldHdvcmsiOiAidmlzYSIsCiAgICAgICAgICAgICAgICAidGhyZWVfZF9zZWN1cmUiOiBudWxsLAogICAgICAgICAgICAgICAgIndhbGxldCI6IG51bGwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ0eXBlIjogImNhcmQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZWNlaXB0X2VtYWlsIjogbnVsbCwKICAgICAgICAgICAgInJlY2VpcHRfbnVtYmVyIjogbnVsbCwKICAgICAgICAgICAgInJlY2VpcHRfdXJsIjogImh0dHBzOi8vcGF5LnN0cmlwZS5jb20vcmVjZWlwdHMvYWNjdF8xMDNyRTYyc09tZjQ3Tno5L2NoXzNKWkRIUzJzT21mNDdOejkweUZjRlp0Yi9yY3B0X0tEZWFHd3ZldmFtbmM2R2VPUGR6Q3cwNjBobXZKSngiLAogICAgICAgICAgICAicmVmdW5kZWQiOiBmYWxzZSwKICAgICAgICAgICAgInJlZnVuZHMiOiB7CiAgICAgICAgICAgICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICAgICAgICAgICAiZGF0YSI6IFsKCiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICAgICAgICAgICAidG90YWxfY291bnQiOiAwLAogICAgICAgICAgICAgICJ1cmwiOiAiL3YxL2NoYXJnZXMvY2hfM0paREhTMnNPbWY0N056OTB5RmNGWnRiL3JlZnVuZHMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXZpZXciOiBudWxsLAogICAgICAgICAgICAic2hpcHBpbmciOiBudWxsLAogICAgICAgICAgICAic291cmNlIjogbnVsbCwKICAgICAgICAgICAgInNvdXJjZV90cmFuc2ZlciI6IG51bGwsCiAgICAgICAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAgICAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvcl9zdWZmaXgiOiBudWxsLAogICAgICAgICAgICAic3RhdHVzIjogInN1Y2NlZWRlZCIsCiAgICAgICAgICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZmVyX2dyb3VwIjogbnVsbAogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICAgInRvdGFsX2NvdW50IjogMSwKICAgICAgICAidXJsIjogIi92MS9jaGFyZ2VzP3BheW1lbnRfaW50ZW50PXBpXzNKWkRIUzJzT21mNDdOejkwNUhFak00cyIKICAgICAgfSwKICAgICAgImNsaWVudF9zZWNyZXQiOiAicGlfM0paREhTMnNPbWY0N056OTA1SEVqTTRzX3NlY3JldF9QbmFuSW9FU2kzeUV5U3VsOTZWSXdKeGZkIiwKICAgICAgImNvbmZpcm1hdGlvbl9tZXRob2QiOiAiYXV0b21hdGljIiwKICAgICAgImNyZWF0ZWQiOiAxNjMxNTMyMjk4LAogICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAgICJkZXNjcmlwdGlvbiI6ICJTdWJzY3JpcHRpb24gY3JlYXRpb24iLAogICAgICAiaW52b2ljZSI6ICJpbl8xSlpESFMyc09tZjQ3Tno5NXdhMTczNkUiLAogICAgICAibGFzdF9wYXltZW50X2Vycm9yIjogbnVsbCwKICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgfSwKICAgICAgIm5leHRfYWN0aW9uIjogbnVsbCwKICAgICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAgICJwYXltZW50X21ldGhvZCI6ICJwbV8xSlpESFAyc09tZjQ3Tno5U1B2cHBYNEsiLAogICAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IHsKICAgICAgICAiY2FyZCI6IHsKICAgICAgICAgICJpbnN0YWxsbWVudHMiOiBudWxsLAogICAgICAgICAgIm5ldHdvcmsiOiBudWxsLAogICAgICAgICAgInJlcXVlc3RfdGhyZWVfZF9zZWN1cmUiOiAiYXV0b21hdGljIgogICAgICAgIH0KICAgICAgfSwKICAgICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogWwogICAgICAgICJjYXJkIgogICAgICBdLAogICAgICAicmVjZWlwdF9lbWFpbCI6IG51bGwsCiAgICAgICJyZXZpZXciOiBudWxsLAogICAgICAic2V0dXBfZnV0dXJlX3VzYWdlIjogIm9mZl9zZXNzaW9uIiwKICAgICAgInNoaXBwaW5nIjogbnVsbCwKICAgICAgInNvdXJjZSI6IG51bGwsCiAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvcl9zdWZmaXgiOiBudWxsLAogICAgICAic3RhdHVzIjogInN1Y2NlZWRlZCIsCiAgICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICAgInRyYW5zZmVyX2dyb3VwIjogbnVsbAogICAgfSwKICAgICJwYXltZW50X3NldHRpbmdzIjogewogICAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAgICJwYXltZW50X21ldGhvZF90eXBlcyI6IG51bGwKICAgIH0sCiAgICAicGVyaW9kX2VuZCI6IDE2MzE1MzIyOTgsCiAgICAicGVyaW9kX3N0YXJ0IjogMTYzMTUzMjI5OCwKICAgICJwb3N0X3BheW1lbnRfY3JlZGl0X25vdGVzX2Ftb3VudCI6IDAsCiAgICAicHJlX3BheW1lbnRfY3JlZGl0X25vdGVzX2Ftb3VudCI6IDAsCiAgICAicXVvdGUiOiBudWxsLAogICAgInJlY2VpcHRfbnVtYmVyIjogbnVsbCwKICAgICJzdGFydGluZ19iYWxhbmNlIjogMCwKICAgICJzdGF0ZW1lbnRfZGVzY3JpcHRvciI6IG51bGwsCiAgICAic3RhdHVzIjogInBhaWQiLAogICAgInN0YXR1c190cmFuc2l0aW9ucyI6IHsKICAgICAgImZpbmFsaXplZF9hdCI6IDE2MzE1MzIyOTgsCiAgICAgICJtYXJrZWRfdW5jb2xsZWN0aWJsZV9hdCI6IG51bGwsCiAgICAgICJwYWlkX2F0IjogMTYzMTUzMjI5OCwKICAgICAgInZvaWRlZF9hdCI6IG51bGwKICAgIH0sCiAgICAic3Vic2NyaXB0aW9uIjogInN1Yl9LRGVhdEtxMG5MckU1cyIsCiAgICAic3VidG90YWwiOiA5NDc0LAogICAgInRheCI6IG51bGwsCiAgICAidGF4X3BlcmNlbnQiOiBudWxsLAogICAgInRvdGFsIjogOTQ3NCwKICAgICJ0b3RhbF9kaXNjb3VudF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidG90YWxfdGF4X2Ftb3VudHMiOiBbCgogICAgXSwKICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICJ3ZWJob29rc19kZWxpdmVyZWRfYXQiOiAxNjMxNTMyMjk4CiAgfSwKICAibGl2ZW1vZGUiOiBmYWxzZSwKICAibWV0YWRhdGEiOiB7CiAgfSwKICAibmV4dF9wZW5kaW5nX2ludm9pY2VfaXRlbV9pbnZvaWNlIjogbnVsbCwKICAicGF1c2VfY29sbGVjdGlvbiI6IG51bGwsCiAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgfSwKICAicGVuZGluZ19pbnZvaWNlX2l0ZW1faW50ZXJ2YWwiOiBudWxsLAogICJwZW5kaW5nX3NldHVwX2ludGVudCI6IG51bGwsCiAgInBlbmRpbmdfdXBkYXRlIjogbnVsbCwKICAicGxhbiI6IHsKICAgICJpZCI6ICJwcmljZV8xSlpESFIyc09tZjQ3Tno5QldFM1pFdngiLAogICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICJhY3RpdmUiOiB0cnVlLAogICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAiYW1vdW50IjogOTQ2NiwKICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAiY3JlYXRlZCI6IDE2MzE1MzIyOTcsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgInRpZXJzIjogbnVsbCwKICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogIH0sCiAgInF1YW50aXR5IjogMSwKICAic2NoZWR1bGUiOiBudWxsLAogICJzdGFydCI6IDE2MzE1MzIyOTgsCiAgInN0YXJ0X2RhdGUiOiAxNjMxNTMyMjk4LAogICJzdGF0dXMiOiAiYWN0aXZlIiwKICAidGF4X3BlcmNlbnQiOiBudWxsLAogICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAidHJpYWxfZW5kIjogbnVsbCwKICAidHJpYWxfc3RhcnQiOiBudWxsCn0K - recorded_at: Mon, 13 Sep 2021 11:25:01 GMT -- request: - method: get - uri: https://api.stripe.com/v1/subscriptions/sub_KDeatKq0nLrE5s - body: - encoding: US-ASCII - string: '' - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_8wNmLSrKYQCC2n","request_duration_ms":2907}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:01 GMT - Content-Type: - - application/json - Content-Length: - - '3906' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_ROuXk25LiprN4n - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "sub_KDeatKq0nLrE5s", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631532298, - "billing_thresholds": null, - "cancel_at": 1663068297, - "cancel_at_period_end": false, - "canceled_at": 1631532298, - "collection_method": "charge_automatically", - "created": 1631532298, - "current_period_end": 1634124298, - "current_period_start": 1631532298, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZDHP2sOmf47Nz9SPvppX4K", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDea7Zt4pCFPCd", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631532299, - "metadata": { - }, - "plan": { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532297, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532297, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDeatKq0nLrE5s", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDeatKq0nLrE5s" - }, - "latest_invoice": "in_1JZDHS2sOmf47Nz95wa1736E", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532297, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631532298, - "start_date": 1631532298, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - recorded_at: Mon, 13 Sep 2021 11:25:01 GMT -- request: - method: get - uri: https://api.stripe.com/v1/subscriptions/sub_KDeatKq0nLrE5s - body: - encoding: US-ASCII - string: '' - headers: - User-Agent: - - Stripe/v1 RubyBindings/5.29.0 - Authorization: - - Bearer sk_test_testfaketestfaketestfake - Content-Type: - - application/x-www-form-urlencoded - X-Stripe-Client-Telemetry: - - '{"last_request_metrics":{"request_id":"req_ROuXk25LiprN4n","request_duration_ms":337}}' - Stripe-Version: - - '2019-08-14' - X-Stripe-Client-User-Agent: - - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.3 p62 (2019-04-16)","platform":"x86_64-darwin18","engine":"ruby","publisher":"stripe","uname":"Darwin - MacBook-Pro-Sleede-Peng 20.5.0 Darwin Kernel Version 20.5.0: Sat May 8 05:10:33 - PDT 2021; root:xnu-7195.121.3~9/RELEASE_X86_64 x86_64","hostname":"MacBook-Pro-Sleede-Peng"}' - Accept-Encoding: - - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 - Accept: - - "*/*" - response: - status: - code: 200 - message: OK - headers: - Server: - - nginx - Date: - - Mon, 13 Sep 2021 11:25:02 GMT - Content-Type: - - application/json - Content-Length: - - '3906' - Connection: - - keep-alive - Access-Control-Allow-Credentials: - - 'true' - Access-Control-Allow-Methods: - - GET, POST, HEAD, OPTIONS, DELETE - Access-Control-Allow-Origin: - - "*" - Access-Control-Expose-Headers: - - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required - Access-Control-Max-Age: - - '300' - Cache-Control: - - no-cache, no-store - Request-Id: - - req_74fhBmPb5JM90V - Stripe-Version: - - '2019-08-14' - X-Stripe-C-Cost: - - '0' - Strict-Transport-Security: - - max-age=31556926; includeSubDomains; preload - body: - encoding: UTF-8 - string: | - { - "id": "sub_KDeatKq0nLrE5s", - "object": "subscription", - "application_fee_percent": null, - "automatic_tax": { - "enabled": false - }, - "billing": "charge_automatically", - "billing_cycle_anchor": 1631532298, - "billing_thresholds": null, - "cancel_at": 1663068297, - "cancel_at_period_end": false, - "canceled_at": 1631532298, - "collection_method": "charge_automatically", - "created": 1631532298, - "current_period_end": 1634124298, - "current_period_start": 1631532298, - "customer": "cus_8Di1wjdVktv5kt", - "days_until_due": null, - "default_payment_method": "pm_1JZDHP2sOmf47Nz9SPvppX4K", - "default_source": null, - "default_tax_rates": [ - - ], - "discount": null, - "ended_at": null, - "invoice_customer_balance_settings": { - "consume_applied_balance_on_void": true - }, - "items": { - "object": "list", - "data": [ - { - "id": "si_KDea7Zt4pCFPCd", - "object": "subscription_item", - "billing_thresholds": null, - "created": 1631532299, - "metadata": { - }, - "plan": { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532297, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "price": { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", - "object": "price", - "active": true, - "billing_scheme": "per_unit", - "created": 1631532297, - "currency": "usd", - "livemode": false, - "lookup_key": null, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "recurring": { - "aggregate_usage": null, - "interval": "month", - "interval_count": 1, - "trial_period_days": null, - "usage_type": "licensed" - }, - "tax_behavior": "unspecified", - "tiers_mode": null, - "transform_quantity": null, - "type": "recurring", - "unit_amount": 9466, - "unit_amount_decimal": "9466" - }, - "quantity": 1, - "subscription": "sub_KDeatKq0nLrE5s", - "tax_rates": [ - - ] - } - ], - "has_more": false, - "total_count": 1, - "url": "/v1/subscription_items?subscription=sub_KDeatKq0nLrE5s" - }, - "latest_invoice": "in_1JZDHS2sOmf47Nz95wa1736E", - "livemode": false, - "metadata": { - }, - "next_pending_invoice_item_invoice": null, - "pause_collection": null, - "payment_settings": { - "payment_method_options": null, - "payment_method_types": null - }, - "pending_invoice_item_interval": null, - "pending_setup_intent": null, - "pending_update": null, - "plan": { - "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", - "object": "plan", - "active": true, - "aggregate_usage": null, - "amount": 9466, - "amount_decimal": "9466", - "billing_scheme": "per_unit", - "created": 1631532297, - "currency": "usd", - "interval": "month", - "interval_count": 1, - "livemode": false, - "metadata": { - }, - "nickname": null, - "product": "prod_IZQAhb9nLu4jfN", - "tiers": null, - "tiers_mode": null, - "transform_usage": null, - "trial_period_days": null, - "usage_type": "licensed" - }, - "quantity": 1, - "schedule": null, - "start": 1631532298, - "start_date": 1631532298, - "status": "active", - "tax_percent": null, - "transfer_data": null, - "trial_end": null, - "trial_start": null - } - recorded_at: Mon, 13 Sep 2021 11:25:02 GMT + ewogICJpZCI6ICJzdWJfMUprV0l1MnNPbWY0N056OWJsWjNBZHFBIiwKICAib2JqZWN0IjogInN1YnNjcmlwdGlvbiIsCiAgImFwcGxpY2F0aW9uX2ZlZV9wZXJjZW50IjogbnVsbCwKICAiYXV0b21hdGljX3RheCI6IHsKICAgICJlbmFibGVkIjogZmFsc2UKICB9LAogICJiaWxsaW5nIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiYmlsbGluZ19jeWNsZV9hbmNob3IiOiAxNjM0MjI3MDMxLAogICJiaWxsaW5nX3RocmVzaG9sZHMiOiBudWxsLAogICJjYW5jZWxfYXQiOiAxNjY1NzYzMDMwLAogICJjYW5jZWxfYXRfcGVyaW9kX2VuZCI6IGZhbHNlLAogICJjYW5jZWxlZF9hdCI6IDE2MzQyMjcwMzEsCiAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiY3JlYXRlZCI6IDE2MzQyMjcwMzEsCiAgImN1cnJlbnRfcGVyaW9kX2VuZCI6IDE2MzY5MDU0MzEsCiAgImN1cnJlbnRfcGVyaW9kX3N0YXJ0IjogMTYzNDIyNzAzMSwKICAiY3VzdG9tZXIiOiAiY3VzXzhEaTF3amRWa3R2NWt0IiwKICAiZGF5c191bnRpbF9kdWUiOiBudWxsLAogICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogInBtXzFKa1dJcTJzT21mNDdOejl5OHZ5RTdjeiIsCiAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogIF0sCiAgImRpc2NvdW50IjogbnVsbCwKICAiZW5kZWRfYXQiOiBudWxsLAogICJpbnZvaWNlX2N1c3RvbWVyX2JhbGFuY2Vfc2V0dGluZ3MiOiB7CiAgICAiY29uc3VtZV9hcHBsaWVkX2JhbGFuY2Vfb25fdm9pZCI6IHRydWUKICB9LAogICJpdGVtcyI6IHsKICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAiZGF0YSI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJzaV9LUEt5TkJZN0R0aDV3ZiIsCiAgICAgICAgIm9iamVjdCI6ICJzdWJzY3JpcHRpb25faXRlbSIsCiAgICAgICAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MDMyLAogICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICB9LAogICAgICAgICJwbGFuIjogewogICAgICAgICAgImlkIjogInByaWNlXzFKa1dJczJzT21mNDdOejllR1Zab3oyVyIsCiAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzAzMCwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgfSwKICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUprV0lzMnNPbWY0N056OWVHVlpvejJXIiwKICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MDMwLAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICB9LAogICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUprV0l1MnNPbWY0N056OWJsWjNBZHFBIiwKICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICBdCiAgICAgIH0KICAgIF0sCiAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAidXJsIjogIi92MS9zdWJzY3JpcHRpb25faXRlbXM/c3Vic2NyaXB0aW9uPXN1Yl8xSmtXSXUyc09tZjQ3Tno5YmxaM0FkcUEiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUprV0l1MnNPbWY0N056OW9iRFd0TmRIIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiA5NDc0LAogICAgImFtb3VudF9wYWlkIjogOTQ3NCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogMCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMSwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IGZhbHNlLAogICAgImF1dG9tYXRpY190YXgiOiB7CiAgICAgICJlbmFibGVkIjogZmFsc2UsCiAgICAgICJzdGF0dXMiOiBudWxsCiAgICB9LAogICAgImJpbGxpbmciOiAiY2hhcmdlX2F1dG9tYXRpY2FsbHkiLAogICAgImJpbGxpbmdfcmVhc29uIjogInN1YnNjcmlwdGlvbl9jcmVhdGUiLAogICAgImNoYXJnZSI6ICJjaF8zSmtXSXUyc09tZjQ3Tno5MFdDN29LUm8iLAogICAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAgICJjcmVhdGVkIjogMTYzNDIyNzAzMiwKICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgImN1c3RvbV9maWVsZHMiOiBudWxsLAogICAgImN1c3RvbWVyIjogImN1c184RGkxd2pkVmt0djVrdCIsCiAgICAiY3VzdG9tZXJfYWRkcmVzcyI6IG51bGwsCiAgICAiY3VzdG9tZXJfZW1haWwiOiAiamVhbi5kdXBvbmRAZ21haWwuY29tIiwKICAgICJjdXN0b21lcl9uYW1lIjogbnVsbCwKICAgICJjdXN0b21lcl9waG9uZSI6IG51bGwsCiAgICAiY3VzdG9tZXJfc2hpcHBpbmciOiBudWxsLAogICAgImN1c3RvbWVyX3RheF9leGVtcHQiOiAibm9uZSIsCiAgICAiY3VzdG9tZXJfdGF4X2lkcyI6IFsKCiAgICBdLAogICAgImRlZmF1bHRfcGF5bWVudF9tZXRob2QiOiBudWxsLAogICAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAgICJkZWZhdWx0X3RheF9yYXRlcyI6IFsKCiAgICBdLAogICAgImRlc2NyaXB0aW9uIjogbnVsbCwKICAgICJkaXNjb3VudCI6IG51bGwsCiAgICAiZGlzY291bnRzIjogWwoKICAgIF0sCiAgICAiZHVlX2RhdGUiOiBudWxsLAogICAgImVuZGluZ19iYWxhbmNlIjogMCwKICAgICJmb290ZXIiOiBudWxsLAogICAgImhvc3RlZF9pbnZvaWNlX3VybCI6ICJodHRwczovL2ludm9pY2Uuc3RyaXBlLmNvbS9pL2FjY3RfMTAzckU2MnNPbWY0N056OS90ZXN0X1lXTmpkRjh4TUROeVJUWXljMDl0WmpRM1RubzVMRjlMVUV0NWVteFdiek5ZUkdWS1NWSTRPVkpwT1U1V01FaE5NV1UyV1RSVjAxMDAxYzhSb3d4NCIsCiAgICAiaW52b2ljZV9wZGYiOiAiaHR0cHM6Ly9wYXkuc3RyaXBlLmNvbS9pbnZvaWNlL2FjY3RfMTAzckU2MnNPbWY0N056OS90ZXN0X1lXTmpkRjh4TUROeVJUWXljMDl0WmpRM1RubzVMRjlMVUV0NWVteFdiek5ZUkdWS1NWSTRPVkpwT1U1V01FaE5NV1UyV1RSVjAxMDAxYzhSb3d4NC9wZGYiLAogICAgImxhc3RfZmluYWxpemF0aW9uX2Vycm9yIjogbnVsbCwKICAgICJsaW5lcyI6IHsKICAgICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICAgImRhdGEiOiBbCiAgICAgICAgewogICAgICAgICAgImlkIjogImlpXzFKa1dJdTJzT21mNDdOejltZUJOWlIzbiIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogOCwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFib25uZW1lbnQgbWVuc3VhbGlzYWJsZSAtIHN0YW5kYXJkLCBhc3NvY2lhdGlvbiwgeWVhciIsCiAgICAgICAgICAiZGlzY291bnRfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImRpc2NvdW50YWJsZSI6IHRydWUsCiAgICAgICAgICAiZGlzY291bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAiaW52b2ljZV9pdGVtIjogImlpXzFKa1dJdTJzT21mNDdOejltZUJOWlIzbiIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAicGVyaW9kIjogewogICAgICAgICAgICAiZW5kIjogMTYzNjkwNTQzMSwKICAgICAgICAgICAgInN0YXJ0IjogMTYzNDIyNzAzMQogICAgICAgICAgfSwKICAgICAgICAgICJwbGFuIjogbnVsbCwKICAgICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKa1dJdDJzT21mNDdOejkxU2tQM3EwQyIsCiAgICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MDMxLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiAiUHJpY2UgYWRqdXN0bWVudCBmb3IgcGF5bWVudCBzY2hlZHVsZSIsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgICAgICAgICAicmVjdXJyaW5nIjogbnVsbCwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogIm9uZV90aW1lIiwKICAgICAgICAgICAgInVuaXRfYW1vdW50IjogOCwKICAgICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOCIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJvcmF0aW9uIjogZmFsc2UsCiAgICAgICAgICAicXVhbnRpdHkiOiAxLAogICAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUprV0l1MnNPbWY0N056OWJsWjNBZHFBIiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAiaW52b2ljZWl0ZW0iLAogICAgICAgICAgInVuaXF1ZV9pZCI6ICJpbF8xSmtXSXUyc09tZjQ3Tno5RkowMmJrOGciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAiaWQiOiAic2xpXzE1MjZhYjJzT21mNDdOejkyYWIxMTJiNCIsCiAgICAgICAgICAib2JqZWN0IjogImxpbmVfaXRlbSIsCiAgICAgICAgICAiYW1vdW50IjogOTQ2NiwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImRlc2NyaXB0aW9uIjogIjEgw5cgQWJvbm5lbWVudCBtZW5zdWFsaXNhYmxlIC0gc3RhbmRhcmQsIGFzc29jaWF0aW9uLCB5ZWFyIChhdCAkOTQuNjYgLyBtb250aCkiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzY5MDU0MzEsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzQyMjcwMzEKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKa1dJczJzT21mNDdOejllR1Zab3oyVyIsCiAgICAgICAgICAgICJvYmplY3QiOiAicGxhbiIsCiAgICAgICAgICAgICJhY3RpdmUiOiB0cnVlLAogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MDMwLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJ0aWVycyI6IG51bGwsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogICAgICAgICAgfSwKICAgICAgICAgICJwcmljZSI6IHsKICAgICAgICAgICAgImlkIjogInByaWNlXzFKa1dJczJzT21mNDdOejllR1Zab3oyVyIsCiAgICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MDMwLAogICAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgICB9LAogICAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IHsKICAgICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgICAiaW50ZXJ2YWwiOiAibW9udGgiLAogICAgICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICAgICAgICAgInRyYW5zZm9ybV9xdWFudGl0eSI6IG51bGwsCiAgICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDk0NjYsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjk0NjYiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKa1dJdTJzT21mNDdOejlibFozQWRxQSIsCiAgICAgICAgICAic3Vic2NyaXB0aW9uX2l0ZW0iOiAic2lfS1BLeU5CWTdEdGg1d2YiLAogICAgICAgICAgInRheF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAidHlwZSI6ICJzdWJzY3JpcHRpb24iLAogICAgICAgICAgInVuaXF1ZV9pZCI6ICJpbF8xSmtXSXUyc09tZjQ3Tno5Y0h1ZXIxTVQiCiAgICAgICAgfQogICAgICBdLAogICAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICAgInRvdGFsX2NvdW50IjogMiwKICAgICAgInVybCI6ICIvdjEvaW52b2ljZXMvaW5fMUprV0l1MnNPbWY0N056OW9iRFd0TmRIL2xpbmVzIgogICAgfSwKICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgIm1ldGFkYXRhIjogewogICAgfSwKICAgICJuZXh0X3BheW1lbnRfYXR0ZW1wdCI6IG51bGwsCiAgICAibnVtYmVyIjogIkMwRTY2MUMtMTQ1NCIsCiAgICAib25fYmVoYWxmX29mIjogbnVsbCwKICAgICJwYWlkIjogdHJ1ZSwKICAgICJwYXltZW50X2ludGVudCI6IHsKICAgICAgImlkIjogInBpXzNKa1dJdTJzT21mNDdOejkwMnF0UTFrRCIsCiAgICAgICJvYmplY3QiOiAicGF5bWVudF9pbnRlbnQiLAogICAgICAiYW1vdW50IjogOTQ3NCwKICAgICAgImFtb3VudF9jYXB0dXJhYmxlIjogMCwKICAgICAgImFtb3VudF9yZWNlaXZlZCI6IDk0NzQsCiAgICAgICJhcHBsaWNhdGlvbiI6IG51bGwsCiAgICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICAgImNhbmNlbGVkX2F0IjogbnVsbCwKICAgICAgImNhbmNlbGxhdGlvbl9yZWFzb24iOiBudWxsLAogICAgICAiY2FwdHVyZV9tZXRob2QiOiAiYXV0b21hdGljIiwKICAgICAgImNoYXJnZXMiOiB7CiAgICAgICAgIm9iamVjdCI6ICJsaXN0IiwKICAgICAgICAiZGF0YSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImNoXzNKa1dJdTJzT21mNDdOejkwV0M3b0tSbyIsCiAgICAgICAgICAgICJvYmplY3QiOiAiY2hhcmdlIiwKICAgICAgICAgICAgImFtb3VudCI6IDk0NzQsCiAgICAgICAgICAgICJhbW91bnRfY2FwdHVyZWQiOiA5NDc0LAogICAgICAgICAgICAiYW1vdW50X3JlZnVuZGVkIjogMCwKICAgICAgICAgICAgImFwcGxpY2F0aW9uIjogbnVsbCwKICAgICAgICAgICAgImFwcGxpY2F0aW9uX2ZlZSI6IG51bGwsCiAgICAgICAgICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICAgICAgICAgImJhbGFuY2VfdHJhbnNhY3Rpb24iOiAidHhuXzNKa1dJdTJzT21mNDdOejkwSVBBcFByMyIsCiAgICAgICAgICAgICJiaWxsaW5nX2RldGFpbHMiOiB7CiAgICAgICAgICAgICAgImFkZHJlc3MiOiB7CiAgICAgICAgICAgICAgICAiY2l0eSI6IG51bGwsCiAgICAgICAgICAgICAgICAiY291bnRyeSI6IG51bGwsCiAgICAgICAgICAgICAgICAibGluZTEiOiBudWxsLAogICAgICAgICAgICAgICAgImxpbmUyIjogbnVsbCwKICAgICAgICAgICAgICAgICJwb3N0YWxfY29kZSI6IG51bGwsCiAgICAgICAgICAgICAgICAic3RhdGUiOiBudWxsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZW1haWwiOiBudWxsLAogICAgICAgICAgICAgICJuYW1lIjogbnVsbCwKICAgICAgICAgICAgICAicGhvbmUiOiBudWxsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJjYWxjdWxhdGVkX3N0YXRlbWVudF9kZXNjcmlwdG9yIjogIlN0cmlwZSIsCiAgICAgICAgICAgICJjYXB0dXJlZCI6IHRydWUsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzAzMywKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3Vic2NyaXB0aW9uIGNyZWF0aW9uIiwKICAgICAgICAgICAgImRlc3RpbmF0aW9uIjogbnVsbCwKICAgICAgICAgICAgImRpc3B1dGUiOiBudWxsLAogICAgICAgICAgICAiZGlzcHV0ZWQiOiBmYWxzZSwKICAgICAgICAgICAgImZhaWx1cmVfY29kZSI6IG51bGwsCiAgICAgICAgICAgICJmYWlsdXJlX21lc3NhZ2UiOiBudWxsLAogICAgICAgICAgICAiZnJhdWRfZGV0YWlscyI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImludm9pY2UiOiAiaW5fMUprV0l1MnNPbWY0N056OW9iRFd0TmRIIiwKICAgICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAgICAgICAgICJvcmRlciI6IG51bGwsCiAgICAgICAgICAgICJvdXRjb21lIjogewogICAgICAgICAgICAgICJuZXR3b3JrX3N0YXR1cyI6ICJhcHByb3ZlZF9ieV9uZXR3b3JrIiwKICAgICAgICAgICAgICAicmVhc29uIjogbnVsbCwKICAgICAgICAgICAgICAicmlza19sZXZlbCI6ICJub3JtYWwiLAogICAgICAgICAgICAgICJyaXNrX3Njb3JlIjogMzQsCiAgICAgICAgICAgICAgInNlbGxlcl9tZXNzYWdlIjogIlBheW1lbnQgY29tcGxldGUuIiwKICAgICAgICAgICAgICAidHlwZSI6ICJhdXRob3JpemVkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicGFpZCI6IHRydWUsCiAgICAgICAgICAgICJwYXltZW50X2ludGVudCI6ICJwaV8zSmtXSXUyc09tZjQ3Tno5MDJxdFExa0QiLAogICAgICAgICAgICAicGF5bWVudF9tZXRob2QiOiAicG1fMUprV0lxMnNPbWY0N056OXk4dnlFN2N6IiwKICAgICAgICAgICAgInBheW1lbnRfbWV0aG9kX2RldGFpbHMiOiB7CiAgICAgICAgICAgICAgImNhcmQiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmQiOiAidmlzYSIsCiAgICAgICAgICAgICAgICAiY2hlY2tzIjogewogICAgICAgICAgICAgICAgICAiYWRkcmVzc19saW5lMV9jaGVjayI6IG51bGwsCiAgICAgICAgICAgICAgICAgICJhZGRyZXNzX3Bvc3RhbF9jb2RlX2NoZWNrIjogbnVsbCwKICAgICAgICAgICAgICAgICAgImN2Y19jaGVjayI6ICJwYXNzIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjb3VudHJ5IjogIlVTIiwKICAgICAgICAgICAgICAgICJleHBfbW9udGgiOiA0LAogICAgICAgICAgICAgICAgImV4cF95ZWFyIjogMjAyMiwKICAgICAgICAgICAgICAgICJmaW5nZXJwcmludCI6ICJvNTJqeWJSN2JubU5uNkFUIiwKICAgICAgICAgICAgICAgICJmdW5kaW5nIjogImNyZWRpdCIsCiAgICAgICAgICAgICAgICAiaW5zdGFsbG1lbnRzIjogbnVsbCwKICAgICAgICAgICAgICAgICJsYXN0NCI6ICI0MjQyIiwKICAgICAgICAgICAgICAgICJuZXR3b3JrIjogInZpc2EiLAogICAgICAgICAgICAgICAgInRocmVlX2Rfc2VjdXJlIjogbnVsbCwKICAgICAgICAgICAgICAgICJ3YWxsZXQiOiBudWxsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAidHlwZSI6ICJjYXJkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVjZWlwdF9lbWFpbCI6IG51bGwsCiAgICAgICAgICAgICJyZWNlaXB0X251bWJlciI6IG51bGwsCiAgICAgICAgICAgICJyZWNlaXB0X3VybCI6ICJodHRwczovL3BheS5zdHJpcGUuY29tL3JlY2VpcHRzL2FjY3RfMTAzckU2MnNPbWY0N056OS9jaF8zSmtXSXUyc09tZjQ3Tno5MFdDN29LUm8vcmNwdF9LUEt5eVRISDlhM3pDdHhvVWNqV1NHMDJ2d0tLYTEyIiwKICAgICAgICAgICAgInJlZnVuZGVkIjogZmFsc2UsCiAgICAgICAgICAgICJyZWZ1bmRzIjogewogICAgICAgICAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICAgICAgICAgImRhdGEiOiBbCgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICAgICAgICAgInRvdGFsX2NvdW50IjogMCwKICAgICAgICAgICAgICAidXJsIjogIi92MS9jaGFyZ2VzL2NoXzNKa1dJdTJzT21mNDdOejkwV0M3b0tSby9yZWZ1bmRzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmV2aWV3IjogbnVsbCwKICAgICAgICAgICAgInNoaXBwaW5nIjogbnVsbCwKICAgICAgICAgICAgInNvdXJjZSI6IG51bGwsCiAgICAgICAgICAgICJzb3VyY2VfdHJhbnNmZXIiOiBudWxsLAogICAgICAgICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3IiOiBudWxsLAogICAgICAgICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3Jfc3VmZml4IjogbnVsbCwKICAgICAgICAgICAgInN0YXR1cyI6ICJzdWNjZWVkZWQiLAogICAgICAgICAgICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zlcl9ncm91cCI6IG51bGwKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAgICAgInVybCI6ICIvdjEvY2hhcmdlcz9wYXltZW50X2ludGVudD1waV8zSmtXSXUyc09tZjQ3Tno5MDJxdFExa0QiCiAgICAgIH0sCiAgICAgICJjbGllbnRfc2VjcmV0IjogInBpXzNKa1dJdTJzT21mNDdOejkwMnF0UTFrRF9zZWNyZXRfdXZ2OFNYQWNEQ011VFpDNG1Rd25pakxPTyIsCiAgICAgICJjb25maXJtYXRpb25fbWV0aG9kIjogImF1dG9tYXRpYyIsCiAgICAgICJjcmVhdGVkIjogMTYzNDIyNzAzMiwKICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU3Vic2NyaXB0aW9uIGNyZWF0aW9uIiwKICAgICAgImludm9pY2UiOiAiaW5fMUprV0l1MnNPbWY0N056OW9iRFd0TmRIIiwKICAgICAgImxhc3RfcGF5bWVudF9lcnJvciI6IG51bGwsCiAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAibWV0YWRhdGEiOiB7CiAgICAgIH0sCiAgICAgICJuZXh0X2FjdGlvbiI6IG51bGwsCiAgICAgICJvbl9iZWhhbGZfb2YiOiBudWxsLAogICAgICAicGF5bWVudF9tZXRob2QiOiAicG1fMUprV0lxMnNPbWY0N056OXk4dnlFN2N6IiwKICAgICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiB7CiAgICAgICAgImNhcmQiOiB7CiAgICAgICAgICAiaW5zdGFsbG1lbnRzIjogbnVsbCwKICAgICAgICAgICJuZXR3b3JrIjogbnVsbCwKICAgICAgICAgICJyZXF1ZXN0X3RocmVlX2Rfc2VjdXJlIjogImF1dG9tYXRpYyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwYXltZW50X21ldGhvZF90eXBlcyI6IFsKICAgICAgICAiY2FyZCIKICAgICAgXSwKICAgICAgInJlY2VpcHRfZW1haWwiOiBudWxsLAogICAgICAicmV2aWV3IjogbnVsbCwKICAgICAgInNldHVwX2Z1dHVyZV91c2FnZSI6ICJvZmZfc2Vzc2lvbiIsCiAgICAgICJzaGlwcGluZyI6IG51bGwsCiAgICAgICJzb3VyY2UiOiBudWxsLAogICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3IiOiBudWxsLAogICAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3Jfc3VmZml4IjogbnVsbCwKICAgICAgInN0YXR1cyI6ICJzdWNjZWVkZWQiLAogICAgICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgICAgICJ0cmFuc2Zlcl9ncm91cCI6IG51bGwKICAgIH0sCiAgICAicGF5bWVudF9zZXR0aW5ncyI6IHsKICAgICAgInBheW1lbnRfbWV0aG9kX29wdGlvbnMiOiBudWxsLAogICAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgICB9LAogICAgInBlcmlvZF9lbmQiOiAxNjM0MjI3MDMxLAogICAgInBlcmlvZF9zdGFydCI6IDE2MzQyMjcwMzEsCiAgICAicG9zdF9wYXltZW50X2NyZWRpdF9ub3Rlc19hbW91bnQiOiAwLAogICAgInByZV9wYXltZW50X2NyZWRpdF9ub3Rlc19hbW91bnQiOiAwLAogICAgInF1b3RlIjogbnVsbCwKICAgICJyZWNlaXB0X251bWJlciI6IG51bGwsCiAgICAic3RhcnRpbmdfYmFsYW5jZSI6IDAsCiAgICAic3RhdGVtZW50X2Rlc2NyaXB0b3IiOiBudWxsLAogICAgInN0YXR1cyI6ICJwYWlkIiwKICAgICJzdGF0dXNfdHJhbnNpdGlvbnMiOiB7CiAgICAgICJmaW5hbGl6ZWRfYXQiOiAxNjM0MjI3MDMxLAogICAgICAibWFya2VkX3VuY29sbGVjdGlibGVfYXQiOiBudWxsLAogICAgICAicGFpZF9hdCI6IDE2MzQyMjcwMzEsCiAgICAgICJ2b2lkZWRfYXQiOiBudWxsCiAgICB9LAogICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUprV0l1MnNPbWY0N056OWJsWjNBZHFBIiwKICAgICJzdWJ0b3RhbCI6IDk0NzQsCiAgICAidGF4IjogbnVsbCwKICAgICJ0YXhfcGVyY2VudCI6IG51bGwsCiAgICAidG90YWwiOiA5NDc0LAogICAgInRvdGFsX2Rpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgXSwKICAgICJ0b3RhbF90YXhfYW1vdW50cyI6IFsKCiAgICBdLAogICAgInRyYW5zZmVyX2RhdGEiOiBudWxsLAogICAgIndlYmhvb2tzX2RlbGl2ZXJlZF9hdCI6IDE2MzQyMjcwMzIKICB9LAogICJsaXZlbW9kZSI6IGZhbHNlLAogICJtZXRhZGF0YSI6IHsKICB9LAogICJuZXh0X3BlbmRpbmdfaW52b2ljZV9pdGVtX2ludm9pY2UiOiBudWxsLAogICJwYXVzZV9jb2xsZWN0aW9uIjogbnVsbCwKICAicGF5bWVudF9zZXR0aW5ncyI6IHsKICAgICJwYXltZW50X21ldGhvZF9vcHRpb25zIjogbnVsbCwKICAgICJwYXltZW50X21ldGhvZF90eXBlcyI6IG51bGwKICB9LAogICJwZW5kaW5nX2ludm9pY2VfaXRlbV9pbnRlcnZhbCI6IG51bGwsCiAgInBlbmRpbmdfc2V0dXBfaW50ZW50IjogbnVsbCwKICAicGVuZGluZ191cGRhdGUiOiBudWxsLAogICJwbGFuIjogewogICAgImlkIjogInByaWNlXzFKa1dJczJzT21mNDdOejllR1Zab3oyVyIsCiAgICAib2JqZWN0IjogInBsYW4iLAogICAgImFjdGl2ZSI6IHRydWUsCiAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICJhbW91bnQiOiA5NDY2LAogICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICJjcmVhdGVkIjogMTYzNDIyNzAzMCwKICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICJtZXRhZGF0YSI6IHsKICAgIH0sCiAgICAibmlja25hbWUiOiBudWxsLAogICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAidGllcnMiOiBudWxsLAogICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgfSwKICAicXVhbnRpdHkiOiAxLAogICJzY2hlZHVsZSI6IG51bGwsCiAgInN0YXJ0IjogMTYzNDIyNzAzMSwKICAic3RhcnRfZGF0ZSI6IDE2MzQyMjcwMzEsCiAgInN0YXR1cyI6ICJhY3RpdmUiLAogICJ0YXhfcGVyY2VudCI6IG51bGwsCiAgInRyYW5zZmVyX2RhdGEiOiBudWxsLAogICJ0cmlhbF9lbmQiOiBudWxsLAogICJ0cmlhbF9zdGFydCI6IG51bGwKfQo= + recorded_at: Thu, 14 Oct 2021 15:57:14 GMT recorded_with: VCR 6.0.0 diff --git a/test/vcr_cassettes/subscriptions_user_create_without_3ds_confirmation.yml b/test/vcr_cassettes/subscriptions_user_create_without_3ds_confirmation.yml new file mode 100644 index 000000000..9e0744dbf --- /dev/null +++ b/test/vcr_cassettes/subscriptions_user_create_without_3ds_confirmation.yml @@ -0,0 +1,2125 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods + body: + encoding: UTF-8 + string: type=card&card[number]=4000002760003184&card[exp_month]=4&card[exp_year]=2022&card[cvc]=314 + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:53 GMT + Content-Type: + - application/json + Content-Length: + - '934' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_KLWSiHeEtTwdGE + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "pm_1JkWLV2sOmf47Nz9xRAxhRsO", + "object": "payment_method", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "unchecked" + }, + "country": "DE", + "exp_month": 4, + "exp_year": 2022, + "fingerprint": "fve96mejTdIvAPVC", + "funding": "credit", + "generated_from": null, + "last4": "3184", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1634227193, + "customer": null, + "livemode": false, + "metadata": { + }, + "type": "card" + } + recorded_at: Thu, 14 Oct 2021 15:59:53 GMT +- request: + method: post + uri: https://api.stripe.com/v1/payment_methods/pm_1JkWLV2sOmf47Nz9xRAxhRsO/attach + body: + encoding: UTF-8 + string: customer=cus_8Di1wjdVktv5kt + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_KLWSiHeEtTwdGE","request_duration_ms":790}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:54 GMT + Content-Type: + - application/json + Content-Length: + - '945' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_0cIp6IwIYb9772 + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "pm_1JkWLV2sOmf47Nz9xRAxhRsO", + "object": "payment_method", + "billing_details": { + "address": { + "city": null, + "country": null, + "line1": null, + "line2": null, + "postal_code": null, + "state": null + }, + "email": null, + "name": null, + "phone": null + }, + "card": { + "brand": "visa", + "checks": { + "address_line1_check": null, + "address_postal_code_check": null, + "cvc_check": "pass" + }, + "country": "DE", + "exp_month": 4, + "exp_year": 2022, + "fingerprint": "fve96mejTdIvAPVC", + "funding": "credit", + "generated_from": null, + "last4": "3184", + "networks": { + "available": [ + "visa" + ], + "preferred": null + }, + "three_d_secure_usage": { + "supported": true + }, + "wallet": null + }, + "created": 1634227193, + "customer": "cus_8Di1wjdVktv5kt", + "livemode": false, + "metadata": { + }, + "type": "card" + } + recorded_at: Thu, 14 Oct 2021 15:59:55 GMT +- request: + method: post + uri: https://api.stripe.com/v1/customers/cus_8Di1wjdVktv5kt + body: + encoding: UTF-8 + string: invoice_settings[default_payment_method]=pm_1JkWLV2sOmf47Nz9xRAxhRsO + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_0cIp6IwIYb9772","request_duration_ms":957}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:55 GMT + Content-Type: + - application/json + Content-Length: + - '49811' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_97UZMKjbUaevgC + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "cus_8Di1wjdVktv5kt", + "object": "customer", + "account_balance": 0, + "address": null, + "balance": 0, + "created": 1459948888, + "currency": "usd", + "default_source": "card_1Euc972sOmf47Nz9kex4UjRG", + "delinquent": false, + "description": "Jean Dupond", + "discount": null, + "email": "jean.dupond@gmail.com", + "invoice_prefix": "C0E661C", + "invoice_settings": { + "custom_fields": null, + "default_payment_method": "pm_1JkWLV2sOmf47Nz9xRAxhRsO", + "footer": null + }, + "livemode": false, + "metadata": { + }, + "name": null, + "next_invoice_sequence": 1456, + "phone": null, + "preferred_locales": [ + + ], + "shipping": null, + "sources": { + "object": "list", + "data": [ + { + "id": "card_1Euc972sOmf47Nz9kex4UjRG", + "object": "card", + "address_city": null, + "address_country": null, + "address_line1": null, + "address_line1_check": null, + "address_line2": null, + "address_state": null, + "address_zip": null, + "address_zip_check": null, + "brand": "Visa", + "country": "US", + "customer": "cus_8Di1wjdVktv5kt", + "cvc_check": "unchecked", + "dynamic_last4": null, + "exp_month": 4, + "exp_year": 2020, + "fingerprint": "o52jybR7bnmNn6AT", + "funding": "credit", + "last4": "4242", + "metadata": { + }, + "name": null, + "tokenization_method": null + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/customers/cus_8Di1wjdVktv5kt/sources" + }, + "subscriptions": { + "object": "list", + "data": [ + { + "id": "sub_1JkWL22sOmf47Nz9QynJVnJq", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227164, + "billing_thresholds": null, + "cancel_at": 1665763162, + "cancel_at_period_end": false, + "canceled_at": 1634227164, + "collection_method": "charge_automatically", + "created": 1634227164, + "current_period_end": 1636905564, + "current_period_start": 1634227164, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkWKy2sOmf47Nz9hyz9oVKt", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPL1rIMIn7Dja5", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227164, + "metadata": { + }, + "plan": { + "id": "price_1JkWL12sOmf47Nz98iad0nyI", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227163, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWL12sOmf47Nz98iad0nyI", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227163, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWL22sOmf47Nz9QynJVnJq", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWL22sOmf47Nz9QynJVnJq" + }, + "latest_invoice": "in_1JkWL22sOmf47Nz9zTqCdG1T", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWL12sOmf47Nz98iad0nyI", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227163, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227164, + "start_date": 1634227164, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkWIu2sOmf47Nz9blZ3AdqA", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634227031, + "billing_thresholds": null, + "cancel_at": 1665763030, + "cancel_at_period_end": false, + "canceled_at": 1634227031, + "collection_method": "charge_automatically", + "created": 1634227031, + "current_period_end": 1636905431, + "current_period_start": 1634227031, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkWIq2sOmf47Nz9y8vyE7cz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKyNBY7Dth5wf", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634227032, + "metadata": { + }, + "plan": { + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227030, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227030, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkWIu2sOmf47Nz9blZ3AdqA", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkWIu2sOmf47Nz9blZ3AdqA" + }, + "latest_invoice": "in_1JkWIu2sOmf47Nz9obDWtNdH", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkWIs2sOmf47Nz9eGVZoz2W", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634227030, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634227031, + "start_date": 1634227031, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkW7C2sOmf47Nz9v1DfTXVk", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634226305, + "billing_thresholds": null, + "cancel_at": 1665762304, + "cancel_at_period_end": false, + "canceled_at": 1634226305, + "collection_method": "charge_automatically", + "created": 1634226305, + "current_period_end": 1636904705, + "current_period_start": 1634226305, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkW772sOmf47Nz9IlBfocG1", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKmRh1aVMvlVs", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634226306, + "metadata": { + }, + "plan": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkW7C2sOmf47Nz9v1DfTXVk", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkW7C2sOmf47Nz9v1DfTXVk" + }, + "latest_invoice": "in_1JkW7C2sOmf47Nz9DHI5iyGy", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkW7B2sOmf47Nz9bktMHJcG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226305, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634226305, + "start_date": 1634226305, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_1JkW4B2sOmf47Nz9H7F8oy4X", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1634226119, + "billing_thresholds": null, + "cancel_at": 1665762118, + "cancel_at_period_end": false, + "canceled_at": 1634226119, + "collection_method": "charge_automatically", + "created": 1634226119, + "current_period_end": 1636904519, + "current_period_start": 1634226119, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JkW472sOmf47Nz9eDPVcQRR", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KPKjWzNKMgo5Fm", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1634226120, + "metadata": { + }, + "plan": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_1JkW4B2sOmf47Nz9H7F8oy4X", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_1JkW4B2sOmf47Nz9H7F8oy4X" + }, + "latest_invoice": "in_1JkW4B2sOmf47Nz99kAOQNRU", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JkW4A2sOmf47Nz9OWxtnQoG", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1634226118, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1634226119, + "start_date": 1634226119, + "status": "incomplete", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDebRcYreXVUnH", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532361, + "billing_thresholds": null, + "cancel_at": 1663068360, + "cancel_at_period_end": false, + "canceled_at": 1631532361, + "collection_method": "charge_automatically", + "created": 1631532361, + "current_period_end": 1636802761, + "current_period_start": 1634124361, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDIP2sOmf47Nz9RVtJc1dz", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDebUR1KKDUfV6", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532361, + "metadata": { + }, + "plan": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDebRcYreXVUnH", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDebRcYreXVUnH" + }, + "latest_invoice": "in_1Jk5cF2sOmf47Nz9UrRCYQQP", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDIS2sOmf47Nz9jK6fXjAN", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532360, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532361, + "start_date": 1631532361, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeatKq0nLrE5s", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532298, + "billing_thresholds": null, + "cancel_at": 1663068297, + "cancel_at_period_end": false, + "canceled_at": 1631532298, + "collection_method": "charge_automatically", + "created": 1631532298, + "current_period_end": 1636802698, + "current_period_start": 1634124298, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDHP2sOmf47Nz9SPvppX4K", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDea7Zt4pCFPCd", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532299, + "metadata": { + }, + "plan": { + "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532297, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532297, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeatKq0nLrE5s", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeatKq0nLrE5s" + }, + "latest_invoice": "in_1Jk5bN2sOmf47Nz9YtlYT2cW", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDHR2sOmf47Nz9BWE3ZEvx", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532297, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532298, + "start_date": 1631532298, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeaVj7yYl0taQ", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631532268, + "billing_thresholds": null, + "cancel_at": 1663068267, + "cancel_at_period_end": false, + "canceled_at": 1631532268, + "collection_method": "charge_automatically", + "created": 1631532268, + "current_period_end": 1636802668, + "current_period_start": 1634124268, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDGv2sOmf47Nz9SM0WLRa7", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeakx3Jp75roY", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631532269, + "metadata": { + }, + "plan": { + "id": "price_1JZDGx2sOmf47Nz9nUWex1u2", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532267, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDGx2sOmf47Nz9nUWex1u2", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631532267, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeaVj7yYl0taQ", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeaVj7yYl0taQ" + }, + "latest_invoice": "in_1Jk5ab2sOmf47Nz9HGfetsPd", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDGx2sOmf47Nz9nUWex1u2", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631532267, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631532268, + "start_date": 1631532268, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDeToJCqy8AUki", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631531879, + "billing_thresholds": null, + "cancel_at": 1663067878, + "cancel_at_period_end": false, + "canceled_at": 1631531879, + "collection_method": "charge_automatically", + "created": 1631531879, + "current_period_end": 1636802279, + "current_period_start": 1634123879, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZDAe2sOmf47Nz9bsm9wPFI", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDeT8jHdC6UAxx", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631531880, + "metadata": { + }, + "plan": { + "id": "price_1JZDAh2sOmf47Nz9yYZ1jglu", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531879, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZDAh2sOmf47Nz9yYZ1jglu", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631531879, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDeToJCqy8AUki", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDeToJCqy8AUki" + }, + "latest_invoice": "in_1Jk5Tj2sOmf47Nz94oD4YTbF", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZDAh2sOmf47Nz9yYZ1jglu", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531879, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631531879, + "start_date": 1631531879, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDePb9wwv9HEXL", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631531618, + "billing_thresholds": null, + "cancel_at": 1663067617, + "cancel_at_period_end": false, + "canceled_at": 1631531618, + "collection_method": "charge_automatically", + "created": 1631531618, + "current_period_end": 1636802018, + "current_period_start": 1634123618, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZD6R2sOmf47Nz9CVbi40LS", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDePymBNRiUzu7", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631531619, + "metadata": { + }, + "plan": { + "id": "price_1JZD6T2sOmf47Nz9eBszbfr3", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531617, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZD6T2sOmf47Nz9eBszbfr3", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631531617, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDePb9wwv9HEXL", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDePb9wwv9HEXL" + }, + "latest_invoice": "in_1Jk5Q92sOmf47Nz9EPwy8dVf", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZD6T2sOmf47Nz9eBszbfr3", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631531617, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631531618, + "start_date": 1631531618, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + }, + { + "id": "sub_KDcntUY1yaA3Fc", + "object": "subscription", + "application_fee_percent": null, + "automatic_tax": { + "enabled": false + }, + "billing": "charge_automatically", + "billing_cycle_anchor": 1631525640, + "billing_thresholds": null, + "cancel_at": 1663061639, + "cancel_at_period_end": false, + "canceled_at": 1631525640, + "collection_method": "charge_automatically", + "created": 1631525640, + "current_period_end": 1636796040, + "current_period_start": 1634117640, + "customer": "cus_8Di1wjdVktv5kt", + "days_until_due": null, + "default_payment_method": "pm_1JZBY02sOmf47Nz9cujVPxe4", + "default_source": null, + "default_tax_rates": [ + + ], + "discount": null, + "ended_at": null, + "invoice_customer_balance_settings": { + "consume_applied_balance_on_void": true + }, + "items": { + "object": "list", + "data": [ + { + "id": "si_KDcn9Ud8rYiNXU", + "object": "subscription_item", + "billing_thresholds": null, + "created": 1631525641, + "metadata": { + }, + "plan": { + "id": "price_1JZBY32sOmf47Nz9ifmaJSjX", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525639, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "price": { + "id": "price_1JZBY32sOmf47Nz9ifmaJSjX", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1631525639, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + }, + "quantity": 1, + "subscription": "sub_KDcntUY1yaA3Fc", + "tax_rates": [ + + ] + } + ], + "has_more": false, + "total_count": 1, + "url": "/v1/subscription_items?subscription=sub_KDcntUY1yaA3Fc" + }, + "latest_invoice": "in_1Jk3rN2sOmf47Nz9RqBSO0Dg", + "livemode": false, + "metadata": { + }, + "next_pending_invoice_item_invoice": null, + "pause_collection": null, + "payment_settings": { + "payment_method_options": null, + "payment_method_types": null + }, + "pending_invoice_item_interval": null, + "pending_setup_intent": null, + "pending_update": null, + "plan": { + "id": "price_1JZBY32sOmf47Nz9ifmaJSjX", + "object": "plan", + "active": true, + "aggregate_usage": null, + "amount": 9466, + "amount_decimal": "9466", + "billing_scheme": "per_unit", + "created": 1631525639, + "currency": "usd", + "interval": "month", + "interval_count": 1, + "livemode": false, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "tiers": null, + "tiers_mode": null, + "transform_usage": null, + "trial_period_days": null, + "usage_type": "licensed" + }, + "quantity": 1, + "schedule": null, + "start": 1631525640, + "start_date": 1631525640, + "status": "active", + "tax_percent": null, + "transfer_data": null, + "trial_end": null, + "trial_start": null + } + ], + "has_more": true, + "total_count": 199, + "url": "/v1/customers/cus_8Di1wjdVktv5kt/subscriptions" + }, + "tax_exempt": "none", + "tax_ids": { + "object": "list", + "data": [ + + ], + "has_more": false, + "total_count": 0, + "url": "/v1/customers/cus_8Di1wjdVktv5kt/tax_ids" + }, + "tax_info": null, + "tax_info_verification": null + } + recorded_at: Thu, 14 Oct 2021 15:59:55 GMT +- request: + method: post + uri: https://api.stripe.com/v1/prices + body: + encoding: UTF-8 + string: unit_amount=9466¤cy=usd&product=prod_IZQAhb9nLu4jfN&recurring[interval]=month&recurring[interval_count]=1 + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_97UZMKjbUaevgC","request_duration_ms":896}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:56 GMT + Content-Type: + - application/json + Content-Length: + - '607' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_hpvmHqBRhnRALa + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "price_1JkWLY2sOmf47Nz9qBznWZ1L", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227196, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": null, + "product": "prod_IZQAhb9nLu4jfN", + "recurring": { + "aggregate_usage": null, + "interval": "month", + "interval_count": 1, + "trial_period_days": null, + "usage_type": "licensed" + }, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "recurring", + "unit_amount": 9466, + "unit_amount_decimal": "9466" + } + recorded_at: Thu, 14 Oct 2021 15:59:56 GMT +- request: + method: post + uri: https://api.stripe.com/v1/prices + body: + encoding: UTF-8 + string: unit_amount=8¤cy=usd&product=prod_IZQAhb9nLu4jfN&nickname=Price+adjustment+for+payment+schedule+ + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_hpvmHqBRhnRALa","request_duration_ms":457}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:56 GMT + Content-Type: + - application/json + Content-Length: + - '495' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_LbbugttwDGhJwk + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: UTF-8 + string: | + { + "id": "price_1JkWLY2sOmf47Nz9zvSdP7uw", + "object": "price", + "active": true, + "billing_scheme": "per_unit", + "created": 1634227196, + "currency": "usd", + "livemode": false, + "lookup_key": null, + "metadata": { + }, + "nickname": "Price adjustment for payment schedule", + "product": "prod_IZQAhb9nLu4jfN", + "recurring": null, + "tax_behavior": "unspecified", + "tiers_mode": null, + "transform_quantity": null, + "type": "one_time", + "unit_amount": 8, + "unit_amount_decimal": "8" + } + recorded_at: Thu, 14 Oct 2021 15:59:56 GMT +- request: + method: post + uri: https://api.stripe.com/v1/subscriptions + body: + encoding: UTF-8 + string: customer=cus_8Di1wjdVktv5kt&cancel_at=1665763195&add_invoice_items[0][price]=price_1JkWLY2sOmf47Nz9zvSdP7uw&items[0][price]=price_1JkWLY2sOmf47Nz9qBznWZ1L&default_payment_method=pm_1JkWLV2sOmf47Nz9xRAxhRsO&expand[0]=latest_invoice.payment_intent + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_LbbugttwDGhJwk","request_duration_ms":412}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:59 GMT + Content-Type: + - application/json + Content-Length: + - '12766' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_GRcz5UM9Yt2ThF + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: ASCII-8BIT + string: !binary |- + ewogICJpZCI6ICJzdWJfMUprV0xaMnNPbWY0N056OXcybktmZUVLIiwKICAib2JqZWN0IjogInN1YnNjcmlwdGlvbiIsCiAgImFwcGxpY2F0aW9uX2ZlZV9wZXJjZW50IjogbnVsbCwKICAiYXV0b21hdGljX3RheCI6IHsKICAgICJlbmFibGVkIjogZmFsc2UKICB9LAogICJiaWxsaW5nIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiYmlsbGluZ19jeWNsZV9hbmNob3IiOiAxNjM0MjI3MTk3LAogICJiaWxsaW5nX3RocmVzaG9sZHMiOiBudWxsLAogICJjYW5jZWxfYXQiOiAxNjY1NzYzMTk1LAogICJjYW5jZWxfYXRfcGVyaW9kX2VuZCI6IGZhbHNlLAogICJjYW5jZWxlZF9hdCI6IDE2MzQyMjcxOTcsCiAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiY3JlYXRlZCI6IDE2MzQyMjcxOTcsCiAgImN1cnJlbnRfcGVyaW9kX2VuZCI6IDE2MzY5MDU1OTcsCiAgImN1cnJlbnRfcGVyaW9kX3N0YXJ0IjogMTYzNDIyNzE5NywKICAiY3VzdG9tZXIiOiAiY3VzXzhEaTF3amRWa3R2NWt0IiwKICAiZGF5c191bnRpbF9kdWUiOiBudWxsLAogICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogInBtXzFKa1dMVjJzT21mNDdOejl4UkF4aFJzTyIsCiAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogIF0sCiAgImRpc2NvdW50IjogbnVsbCwKICAiZW5kZWRfYXQiOiBudWxsLAogICJpbnZvaWNlX2N1c3RvbWVyX2JhbGFuY2Vfc2V0dGluZ3MiOiB7CiAgICAiY29uc3VtZV9hcHBsaWVkX2JhbGFuY2Vfb25fdm9pZCI6IHRydWUKICB9LAogICJpdGVtcyI6IHsKICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAiZGF0YSI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJzaV9LUEwxTVg5UmFjcG9sTSIsCiAgICAgICAgIm9iamVjdCI6ICJzdWJzY3JpcHRpb25faXRlbSIsCiAgICAgICAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MTk3LAogICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICB9LAogICAgICAgICJwbGFuIjogewogICAgICAgICAgImlkIjogInByaWNlXzFKa1dMWTJzT21mNDdOejlxQnpuV1oxTCIsCiAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgfSwKICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUprV0xZMnNPbWY0N056OXFCem5XWjFMIiwKICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MTk2LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICB9LAogICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUprV0xaMnNPbWY0N056OXcybktmZUVLIiwKICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICBdCiAgICAgIH0KICAgIF0sCiAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAidXJsIjogIi92MS9zdWJzY3JpcHRpb25faXRlbXM/c3Vic2NyaXB0aW9uPXN1Yl8xSmtXTFoyc09tZjQ3Tno5dzJuS2ZlRUsiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUprV0xaMnNPbWY0N056OUc3cFh6QlhtIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiA5NDc0LAogICAgImFtb3VudF9wYWlkIjogMCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogOTQ3NCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMCwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IHRydWUsCiAgICAiYXV0b21hdGljX3RheCI6IHsKICAgICAgImVuYWJsZWQiOiBmYWxzZSwKICAgICAgInN0YXR1cyI6IG51bGwKICAgIH0sCiAgICAiYmlsbGluZyI6ICJjaGFyZ2VfYXV0b21hdGljYWxseSIsCiAgICAiYmlsbGluZ19yZWFzb24iOiAic3Vic2NyaXB0aW9uX2NyZWF0ZSIsCiAgICAiY2hhcmdlIjogbnVsbCwKICAgICJjb2xsZWN0aW9uX21ldGhvZCI6ICJjaGFyZ2VfYXV0b21hdGljYWxseSIsCiAgICAiY3JlYXRlZCI6IDE2MzQyMjcxOTcsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJjdXN0b21fZmllbGRzIjogbnVsbCwKICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgImN1c3RvbWVyX2FkZHJlc3MiOiBudWxsLAogICAgImN1c3RvbWVyX2VtYWlsIjogImplYW4uZHVwb25kQGdtYWlsLmNvbSIsCiAgICAiY3VzdG9tZXJfbmFtZSI6IG51bGwsCiAgICAiY3VzdG9tZXJfcGhvbmUiOiBudWxsLAogICAgImN1c3RvbWVyX3NoaXBwaW5nIjogbnVsbCwKICAgICJjdXN0b21lcl90YXhfZXhlbXB0IjogIm5vbmUiLAogICAgImN1c3RvbWVyX3RheF9pZHMiOiBbCgogICAgXSwKICAgICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogbnVsbCwKICAgICJkZWZhdWx0X3NvdXJjZSI6IG51bGwsCiAgICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogICAgXSwKICAgICJkZXNjcmlwdGlvbiI6IG51bGwsCiAgICAiZGlzY291bnQiOiBudWxsLAogICAgImRpc2NvdW50cyI6IFsKCiAgICBdLAogICAgImR1ZV9kYXRlIjogbnVsbCwKICAgICJlbmRpbmdfYmFsYW5jZSI6IDAsCiAgICAiZm9vdGVyIjogbnVsbCwKICAgICJob3N0ZWRfaW52b2ljZV91cmwiOiAiaHR0cHM6Ly9pbnZvaWNlLnN0cmlwZS5jb20vaS9hY2N0XzEwM3JFNjJzT21mNDdOejkvdGVzdF9ZV05qZEY4eE1ETnlSVFl5YzA5dFpqUTNUbm81TEY5TFVFd3hjRGg2WWtodFUxaG9VVE53TmpNNVNtZFBOVTl1VGtOdFVUTnkwMTAwS0ZCemVyQ3MiLAogICAgImludm9pY2VfcGRmIjogImh0dHBzOi8vcGF5LnN0cmlwZS5jb20vaW52b2ljZS9hY2N0XzEwM3JFNjJzT21mNDdOejkvdGVzdF9ZV05qZEY4eE1ETnlSVFl5YzA5dFpqUTNUbm81TEY5TFVFd3hjRGg2WWtodFUxaG9VVE53TmpNNVNtZFBOVTl1VGtOdFVUTnkwMTAwS0ZCemVyQ3MvcGRmIiwKICAgICJsYXN0X2ZpbmFsaXphdGlvbl9lcnJvciI6IG51bGwsCiAgICAibGluZXMiOiB7CiAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICJkYXRhIjogWwogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJpaV8xSmtXTFoyc09tZjQ3Tno5RGdWMnVGZ3YiLAogICAgICAgICAgIm9iamVjdCI6ICJsaW5lX2l0ZW0iLAogICAgICAgICAgImFtb3VudCI6IDgsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImludm9pY2VfaXRlbSI6ICJpaV8xSmtXTFoyc09tZjQ3Tno5RGdWMnVGZ3YiLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzY5MDU1OTcsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzQyMjcxOTcKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IG51bGwsCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5enZTZFA3dXciLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogIlByaWNlIGFkanVzdG1lbnQgZm9yIHBheW1lbnQgc2NoZWR1bGUiLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IG51bGwsCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJvbmVfdGltZSIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDgsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjgiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKa1dMWjJzT21mNDdOejl3Mm5LZmVFSyIsCiAgICAgICAgICAidGF4X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0YXhfcmF0ZXMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0eXBlIjogImludm9pY2VpdGVtIiwKICAgICAgICAgICJ1bmlxdWVfaWQiOiAiaWxfMUprV0xaMnNPbWY0N056OVNvNDh6SHQ2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImlkIjogInNsaV8xM2M3NDEyc09tZjQ3Tno5ZjRjMzA3MzQiLAogICAgICAgICAgIm9iamVjdCI6ICJsaW5lX2l0ZW0iLAogICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICIxIMOXIEFib25uZW1lbnQgbWVuc3VhbGlzYWJsZSAtIHN0YW5kYXJkLCBhc3NvY2lhdGlvbiwgeWVhciAoYXQgJDk0LjY2IC8gbW9udGgpIiwKICAgICAgICAgICJkaXNjb3VudF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAiZGlzY291bnRhYmxlIjogdHJ1ZSwKICAgICAgICAgICJkaXNjb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAgICJlbmQiOiAxNjM2OTA1NTk3LAogICAgICAgICAgICAic3RhcnQiOiAxNjM0MjI3MTk3CiAgICAgICAgICB9LAogICAgICAgICAgInBsYW4iOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5cUJ6bldaMUwiLAogICAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5cUJ6bldaMUwiLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJyZWN1cnJpbmciOiB7CiAgICAgICAgICAgICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJyZWN1cnJpbmciLAogICAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI5NDY2IgogICAgICAgICAgfSwKICAgICAgICAgICJwcm9yYXRpb24iOiBmYWxzZSwKICAgICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl8xSmtXTFoyc09tZjQ3Tno5dzJuS2ZlRUsiLAogICAgICAgICAgInN1YnNjcmlwdGlvbl9pdGVtIjogInNpX0tQTDFNWDlSYWNwb2xNIiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAic3Vic2NyaXB0aW9uIiwKICAgICAgICAgICJ1bmlxdWVfaWQiOiAiaWxfMUprV0xaMnNPbWY0N056OWttdXpadHdYIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICJ0b3RhbF9jb3VudCI6IDIsCiAgICAgICJ1cmwiOiAiL3YxL2ludm9pY2VzL2luXzFKa1dMWjJzT21mNDdOejlHN3BYekJYbS9saW5lcyIKICAgIH0sCiAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICJtZXRhZGF0YSI6IHsKICAgIH0sCiAgICAibmV4dF9wYXltZW50X2F0dGVtcHQiOiBudWxsLAogICAgIm51bWJlciI6ICJDMEU2NjFDLTE0NTYiLAogICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAicGFpZCI6IGZhbHNlLAogICAgInBheW1lbnRfaW50ZW50IjogewogICAgICAiaWQiOiAicGlfM0prV0xaMnNPbWY0N056OTBoZzZUeXFtIiwKICAgICAgIm9iamVjdCI6ICJwYXltZW50X2ludGVudCIsCiAgICAgICJhbW91bnQiOiA5NDc0LAogICAgICAiYW1vdW50X2NhcHR1cmFibGUiOiAwLAogICAgICAiYW1vdW50X3JlY2VpdmVkIjogMCwKICAgICAgImFwcGxpY2F0aW9uIjogbnVsbCwKICAgICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgICAiY2FuY2VsZWRfYXQiOiBudWxsLAogICAgICAiY2FuY2VsbGF0aW9uX3JlYXNvbiI6IG51bGwsCiAgICAgICJjYXB0dXJlX21ldGhvZCI6ICJhdXRvbWF0aWMiLAogICAgICAiY2hhcmdlcyI6IHsKICAgICAgICAib2JqZWN0IjogImxpc3QiLAogICAgICAgICJkYXRhIjogWwoKICAgICAgICBdLAogICAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAgICJ0b3RhbF9jb3VudCI6IDAsCiAgICAgICAgInVybCI6ICIvdjEvY2hhcmdlcz9wYXltZW50X2ludGVudD1waV8zSmtXTFoyc09tZjQ3Tno5MGhnNlR5cW0iCiAgICAgIH0sCiAgICAgICJjbGllbnRfc2VjcmV0IjogInBpXzNKa1dMWjJzT21mNDdOejkwaGc2VHlxbV9zZWNyZXRfeXFJbFhKVXZ2dWdTaVQ2ek1jeWJQb3NycCIsCiAgICAgICJjb25maXJtYXRpb25fbWV0aG9kIjogImF1dG9tYXRpYyIsCiAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NywKICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU3Vic2NyaXB0aW9uIGNyZWF0aW9uIiwKICAgICAgImludm9pY2UiOiAiaW5fMUprV0xaMnNPbWY0N056OUc3cFh6QlhtIiwKICAgICAgImxhc3RfcGF5bWVudF9lcnJvciI6IG51bGwsCiAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAibWV0YWRhdGEiOiB7CiAgICAgIH0sCiAgICAgICJuZXh0X2FjdGlvbiI6IHsKICAgICAgICAidHlwZSI6ICJ1c2Vfc3RyaXBlX3NkayIsCiAgICAgICAgInVzZV9zdHJpcGVfc2RrIjogewogICAgICAgICAgInR5cGUiOiAidGhyZWVfZF9zZWN1cmVfcmVkaXJlY3QiLAogICAgICAgICAgInN0cmlwZV9qcyI6ICJodHRwczovL2hvb2tzLnN0cmlwZS5jb20vcmVkaXJlY3QvYXV0aGVudGljYXRlL3NyY18xSmtXTGEyc09tZjQ3Tno5c0RuN0Y2WVc/Y2xpZW50X3NlY3JldD1zcmNfY2xpZW50X3NlY3JldF9VR2dWenlMQTRCN0ttRERLOTNJN1BsSk5cdTAwMjZzb3VyY2VfcmVkaXJlY3Rfc2x1Zz10ZXN0X1lXTmpkRjh4TUROeVJUWXljMDl0WmpRM1RubzVMRjlMVUV3eFZIQkZaMkZQU0V0VFdsWkVTa0ZSZEVsMlVVMVBiMXAxVWpCWTAxMDA2NmtXMGx2SCIsCiAgICAgICAgICAic291cmNlIjogInNyY18xSmtXTGEyc09tZjQ3Tno5c0RuN0Y2WVciCiAgICAgICAgfQogICAgICB9LAogICAgICAib25fYmVoYWxmX29mIjogbnVsbCwKICAgICAgInBheW1lbnRfbWV0aG9kIjogInBtXzFKa1dMVjJzT21mNDdOejl4UkF4aFJzTyIsCiAgICAgICJwYXltZW50X21ldGhvZF9vcHRpb25zIjogewogICAgICAgICJjYXJkIjogewogICAgICAgICAgImluc3RhbGxtZW50cyI6IG51bGwsCiAgICAgICAgICAibmV0d29yayI6IG51bGwsCiAgICAgICAgICAicmVxdWVzdF90aHJlZV9kX3NlY3VyZSI6ICJhdXRvbWF0aWMiCiAgICAgICAgfQogICAgICB9LAogICAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBbCiAgICAgICAgImNhcmQiCiAgICAgIF0sCiAgICAgICJyZWNlaXB0X2VtYWlsIjogbnVsbCwKICAgICAgInJldmlldyI6IG51bGwsCiAgICAgICJzZXR1cF9mdXR1cmVfdXNhZ2UiOiAib2ZmX3Nlc3Npb24iLAogICAgICAic2hpcHBpbmciOiBudWxsLAogICAgICAic291cmNlIjogbnVsbCwKICAgICAgInN0YXRlbWVudF9kZXNjcmlwdG9yIjogbnVsbCwKICAgICAgInN0YXRlbWVudF9kZXNjcmlwdG9yX3N1ZmZpeCI6IG51bGwsCiAgICAgICJzdGF0dXMiOiAicmVxdWlyZXNfYWN0aW9uIiwKICAgICAgInRyYW5zZmVyX2RhdGEiOiBudWxsLAogICAgICAidHJhbnNmZXJfZ3JvdXAiOiBudWxsCiAgICB9LAogICAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAgICJwYXltZW50X21ldGhvZF9vcHRpb25zIjogbnVsbCwKICAgICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogbnVsbAogICAgfSwKICAgICJwZXJpb2RfZW5kIjogMTYzNDIyNzE5NywKICAgICJwZXJpb2Rfc3RhcnQiOiAxNjM0MjI3MTk3LAogICAgInBvc3RfcGF5bWVudF9jcmVkaXRfbm90ZXNfYW1vdW50IjogMCwKICAgICJwcmVfcGF5bWVudF9jcmVkaXRfbm90ZXNfYW1vdW50IjogMCwKICAgICJxdW90ZSI6IG51bGwsCiAgICAicmVjZWlwdF9udW1iZXIiOiBudWxsLAogICAgInN0YXJ0aW5nX2JhbGFuY2UiOiAwLAogICAgInN0YXRlbWVudF9kZXNjcmlwdG9yIjogbnVsbCwKICAgICJzdGF0dXMiOiAib3BlbiIsCiAgICAic3RhdHVzX3RyYW5zaXRpb25zIjogewogICAgICAiZmluYWxpemVkX2F0IjogMTYzNDIyNzE5NywKICAgICAgIm1hcmtlZF91bmNvbGxlY3RpYmxlX2F0IjogbnVsbCwKICAgICAgInBhaWRfYXQiOiBudWxsLAogICAgICAidm9pZGVkX2F0IjogbnVsbAogICAgfSwKICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKa1dMWjJzT21mNDdOejl3Mm5LZmVFSyIsCiAgICAic3VidG90YWwiOiA5NDc0LAogICAgInRheCI6IG51bGwsCiAgICAidGF4X3BlcmNlbnQiOiBudWxsLAogICAgInRvdGFsIjogOTQ3NCwKICAgICJ0b3RhbF9kaXNjb3VudF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidG90YWxfdGF4X2Ftb3VudHMiOiBbCgogICAgXSwKICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICJ3ZWJob29rc19kZWxpdmVyZWRfYXQiOiAxNjM0MjI3MTk3CiAgfSwKICAibGl2ZW1vZGUiOiBmYWxzZSwKICAibWV0YWRhdGEiOiB7CiAgfSwKICAibmV4dF9wZW5kaW5nX2ludm9pY2VfaXRlbV9pbnZvaWNlIjogbnVsbCwKICAicGF1c2VfY29sbGVjdGlvbiI6IG51bGwsCiAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgfSwKICAicGVuZGluZ19pbnZvaWNlX2l0ZW1faW50ZXJ2YWwiOiBudWxsLAogICJwZW5kaW5nX3NldHVwX2ludGVudCI6IG51bGwsCiAgInBlbmRpbmdfdXBkYXRlIjogbnVsbCwKICAicGxhbiI6IHsKICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5cUJ6bldaMUwiLAogICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICJhY3RpdmUiOiB0cnVlLAogICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAiYW1vdW50IjogOTQ2NiwKICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAiY3JlYXRlZCI6IDE2MzQyMjcxOTYsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgInRpZXJzIjogbnVsbCwKICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogIH0sCiAgInF1YW50aXR5IjogMSwKICAic2NoZWR1bGUiOiBudWxsLAogICJzdGFydCI6IDE2MzQyMjcxOTcsCiAgInN0YXJ0X2RhdGUiOiAxNjM0MjI3MTk3LAogICJzdGF0dXMiOiAiaW5jb21wbGV0ZSIsCiAgInRheF9wZXJjZW50IjogbnVsbCwKICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgInRyaWFsX2VuZCI6IG51bGwsCiAgInRyaWFsX3N0YXJ0IjogbnVsbAp9Cg== + recorded_at: Thu, 14 Oct 2021 15:59:59 GMT +- request: + method: get + uri: https://api.stripe.com/v1/subscriptions/sub_1JkWLZ2sOmf47Nz9w2nKfeEK?expand%5B%5D=latest_invoice.payment_intent + body: + encoding: US-ASCII + string: '' + headers: + User-Agent: + - Stripe/v1 RubyBindings/5.29.0 + Authorization: + - Bearer sk_test_testfaketestfaketestfake + Content-Type: + - application/x-www-form-urlencoded + X-Stripe-Client-Telemetry: + - '{"last_request_metrics":{"request_id":"req_GRcz5UM9Yt2ThF","request_duration_ms":2510}}' + Stripe-Version: + - '2019-08-14' + X-Stripe-Client-User-Agent: + - '{"bindings_version":"5.29.0","lang":"ruby","lang_version":"2.6.7 p197 (2021-04-05)","platform":"x86_64-linux","engine":"ruby","publisher":"stripe","uname":"Linux + version 5.14.11-arch1-1 (linux@archlinux) (gcc (GCC) 11.1.0, GNU ld (GNU Binutils) + 2.36.1) #1 SMP PREEMPT Sun, 10 Oct 2021 00:48:26 +0000","hostname":"Sylvain-desktop"}' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 200 + message: OK + headers: + Server: + - nginx + Date: + - Thu, 14 Oct 2021 15:59:59 GMT + Content-Type: + - application/json + Content-Length: + - '12766' + Connection: + - keep-alive + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Methods: + - GET, POST, HEAD, OPTIONS, DELETE + Access-Control-Allow-Origin: + - "*" + Access-Control-Expose-Headers: + - Request-Id, Stripe-Manage-Version, X-Stripe-External-Auth-Required, X-Stripe-Privileged-Session-Required + Access-Control-Max-Age: + - '300' + Cache-Control: + - no-cache, no-store + Request-Id: + - req_AW45tHvpsliv0P + Stripe-Version: + - '2019-08-14' + Strict-Transport-Security: + - max-age=31556926; includeSubDomains; preload + body: + encoding: ASCII-8BIT + string: !binary |- + ewogICJpZCI6ICJzdWJfMUprV0xaMnNPbWY0N056OXcybktmZUVLIiwKICAib2JqZWN0IjogInN1YnNjcmlwdGlvbiIsCiAgImFwcGxpY2F0aW9uX2ZlZV9wZXJjZW50IjogbnVsbCwKICAiYXV0b21hdGljX3RheCI6IHsKICAgICJlbmFibGVkIjogZmFsc2UKICB9LAogICJiaWxsaW5nIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiYmlsbGluZ19jeWNsZV9hbmNob3IiOiAxNjM0MjI3MTk3LAogICJiaWxsaW5nX3RocmVzaG9sZHMiOiBudWxsLAogICJjYW5jZWxfYXQiOiAxNjY1NzYzMTk1LAogICJjYW5jZWxfYXRfcGVyaW9kX2VuZCI6IGZhbHNlLAogICJjYW5jZWxlZF9hdCI6IDE2MzQyMjcxOTcsCiAgImNvbGxlY3Rpb25fbWV0aG9kIjogImNoYXJnZV9hdXRvbWF0aWNhbGx5IiwKICAiY3JlYXRlZCI6IDE2MzQyMjcxOTcsCiAgImN1cnJlbnRfcGVyaW9kX2VuZCI6IDE2MzY5MDU1OTcsCiAgImN1cnJlbnRfcGVyaW9kX3N0YXJ0IjogMTYzNDIyNzE5NywKICAiY3VzdG9tZXIiOiAiY3VzXzhEaTF3amRWa3R2NWt0IiwKICAiZGF5c191bnRpbF9kdWUiOiBudWxsLAogICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogInBtXzFKa1dMVjJzT21mNDdOejl4UkF4aFJzTyIsCiAgImRlZmF1bHRfc291cmNlIjogbnVsbCwKICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogIF0sCiAgImRpc2NvdW50IjogbnVsbCwKICAiZW5kZWRfYXQiOiBudWxsLAogICJpbnZvaWNlX2N1c3RvbWVyX2JhbGFuY2Vfc2V0dGluZ3MiOiB7CiAgICAiY29uc3VtZV9hcHBsaWVkX2JhbGFuY2Vfb25fdm9pZCI6IHRydWUKICB9LAogICJpdGVtcyI6IHsKICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAiZGF0YSI6IFsKICAgICAgewogICAgICAgICJpZCI6ICJzaV9LUEwxTVg5UmFjcG9sTSIsCiAgICAgICAgIm9iamVjdCI6ICJzdWJzY3JpcHRpb25faXRlbSIsCiAgICAgICAgImJpbGxpbmdfdGhyZXNob2xkcyI6IG51bGwsCiAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MTk3LAogICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICB9LAogICAgICAgICJwbGFuIjogewogICAgICAgICAgImlkIjogInByaWNlXzFKa1dMWTJzT21mNDdOejlxQnpuV1oxTCIsCiAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgImFtb3VudF9kZWNpbWFsIjogIjk0NjYiLAogICAgICAgICAgImJpbGxpbmdfc2NoZW1lIjogInBlcl91bml0IiwKICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICJjdXJyZW5jeSI6ICJ1c2QiLAogICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgInRpZXJzX21vZGUiOiBudWxsLAogICAgICAgICAgInRyYW5zZm9ybV91c2FnZSI6IG51bGwsCiAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgfSwKICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAiaWQiOiAicHJpY2VfMUprV0xZMnNPbWY0N056OXFCem5XWjFMIiwKICAgICAgICAgICJvYmplY3QiOiAicHJpY2UiLAogICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAiYmlsbGluZ19zY2hlbWUiOiAicGVyX3VuaXQiLAogICAgICAgICAgImNyZWF0ZWQiOiAxNjM0MjI3MTk2LAogICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICAgICAgICJsb29rdXBfa2V5IjogbnVsbCwKICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgIH0sCiAgICAgICAgICAibmlja25hbWUiOiBudWxsLAogICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAicmVjdXJyaW5nIjogewogICAgICAgICAgICAiYWdncmVnYXRlX3VzYWdlIjogbnVsbCwKICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgImludGVydmFsX2NvdW50IjogMSwKICAgICAgICAgICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICB9LAogICAgICAgICAgInRheF9iZWhhdmlvciI6ICJ1bnNwZWNpZmllZCIsCiAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAidHJhbnNmb3JtX3F1YW50aXR5IjogbnVsbCwKICAgICAgICAgICJ0eXBlIjogInJlY3VycmluZyIsCiAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgInVuaXRfYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIKICAgICAgICB9LAogICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgInN1YnNjcmlwdGlvbiI6ICJzdWJfMUprV0xaMnNPbWY0N056OXcybktmZUVLIiwKICAgICAgICAidGF4X3JhdGVzIjogWwoKICAgICAgICBdCiAgICAgIH0KICAgIF0sCiAgICAiaGFzX21vcmUiOiBmYWxzZSwKICAgICJ0b3RhbF9jb3VudCI6IDEsCiAgICAidXJsIjogIi92MS9zdWJzY3JpcHRpb25faXRlbXM/c3Vic2NyaXB0aW9uPXN1Yl8xSmtXTFoyc09tZjQ3Tno5dzJuS2ZlRUsiCiAgfSwKICAibGF0ZXN0X2ludm9pY2UiOiB7CiAgICAiaWQiOiAiaW5fMUprV0xaMnNPbWY0N056OUc3cFh6QlhtIiwKICAgICJvYmplY3QiOiAiaW52b2ljZSIsCiAgICAiYWNjb3VudF9jb3VudHJ5IjogIkZSIiwKICAgICJhY2NvdW50X25hbWUiOiAiU2xlZWRlIiwKICAgICJhY2NvdW50X3RheF9pZHMiOiBudWxsLAogICAgImFtb3VudF9kdWUiOiA5NDc0LAogICAgImFtb3VudF9wYWlkIjogMCwKICAgICJhbW91bnRfcmVtYWluaW5nIjogOTQ3NCwKICAgICJhcHBsaWNhdGlvbl9mZWVfYW1vdW50IjogbnVsbCwKICAgICJhdHRlbXB0X2NvdW50IjogMCwKICAgICJhdHRlbXB0ZWQiOiB0cnVlLAogICAgImF1dG9fYWR2YW5jZSI6IHRydWUsCiAgICAiYXV0b21hdGljX3RheCI6IHsKICAgICAgImVuYWJsZWQiOiBmYWxzZSwKICAgICAgInN0YXR1cyI6IG51bGwKICAgIH0sCiAgICAiYmlsbGluZyI6ICJjaGFyZ2VfYXV0b21hdGljYWxseSIsCiAgICAiYmlsbGluZ19yZWFzb24iOiAic3Vic2NyaXB0aW9uX2NyZWF0ZSIsCiAgICAiY2hhcmdlIjogbnVsbCwKICAgICJjb2xsZWN0aW9uX21ldGhvZCI6ICJjaGFyZ2VfYXV0b21hdGljYWxseSIsCiAgICAiY3JlYXRlZCI6IDE2MzQyMjcxOTcsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJjdXN0b21fZmllbGRzIjogbnVsbCwKICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgImN1c3RvbWVyX2FkZHJlc3MiOiBudWxsLAogICAgImN1c3RvbWVyX2VtYWlsIjogImplYW4uZHVwb25kQGdtYWlsLmNvbSIsCiAgICAiY3VzdG9tZXJfbmFtZSI6IG51bGwsCiAgICAiY3VzdG9tZXJfcGhvbmUiOiBudWxsLAogICAgImN1c3RvbWVyX3NoaXBwaW5nIjogbnVsbCwKICAgICJjdXN0b21lcl90YXhfZXhlbXB0IjogIm5vbmUiLAogICAgImN1c3RvbWVyX3RheF9pZHMiOiBbCgogICAgXSwKICAgICJkZWZhdWx0X3BheW1lbnRfbWV0aG9kIjogbnVsbCwKICAgICJkZWZhdWx0X3NvdXJjZSI6IG51bGwsCiAgICAiZGVmYXVsdF90YXhfcmF0ZXMiOiBbCgogICAgXSwKICAgICJkZXNjcmlwdGlvbiI6IG51bGwsCiAgICAiZGlzY291bnQiOiBudWxsLAogICAgImRpc2NvdW50cyI6IFsKCiAgICBdLAogICAgImR1ZV9kYXRlIjogbnVsbCwKICAgICJlbmRpbmdfYmFsYW5jZSI6IDAsCiAgICAiZm9vdGVyIjogbnVsbCwKICAgICJob3N0ZWRfaW52b2ljZV91cmwiOiAiaHR0cHM6Ly9pbnZvaWNlLnN0cmlwZS5jb20vaS9hY2N0XzEwM3JFNjJzT21mNDdOejkvdGVzdF9ZV05qZEY4eE1ETnlSVFl5YzA5dFpqUTNUbm81TEY5TFVFd3hjRGg2WWtodFUxaG9VVE53TmpNNVNtZFBOVTl1VGtOdFVUTnkwMTAwS0ZCemVyQ3MiLAogICAgImludm9pY2VfcGRmIjogImh0dHBzOi8vcGF5LnN0cmlwZS5jb20vaW52b2ljZS9hY2N0XzEwM3JFNjJzT21mNDdOejkvdGVzdF9ZV05qZEY4eE1ETnlSVFl5YzA5dFpqUTNUbm81TEY5TFVFd3hjRGg2WWtodFUxaG9VVE53TmpNNVNtZFBOVTl1VGtOdFVUTnkwMTAwS0ZCemVyQ3MvcGRmIiwKICAgICJsYXN0X2ZpbmFsaXphdGlvbl9lcnJvciI6IG51bGwsCiAgICAibGluZXMiOiB7CiAgICAgICJvYmplY3QiOiAibGlzdCIsCiAgICAgICJkYXRhIjogWwogICAgICAgIHsKICAgICAgICAgICJpZCI6ICJpaV8xSmtXTFoyc09tZjQ3Tno5RGdWMnVGZ3YiLAogICAgICAgICAgIm9iamVjdCI6ICJsaW5lX2l0ZW0iLAogICAgICAgICAgImFtb3VudCI6IDgsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBYm9ubmVtZW50IG1lbnN1YWxpc2FibGUgLSBzdGFuZGFyZCwgYXNzb2NpYXRpb24sIHllYXIiLAogICAgICAgICAgImRpc2NvdW50X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJkaXNjb3VudGFibGUiOiB0cnVlLAogICAgICAgICAgImRpc2NvdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgImludm9pY2VfaXRlbSI6ICJpaV8xSmtXTFoyc09tZjQ3Tno5RGdWMnVGZ3YiLAogICAgICAgICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICB9LAogICAgICAgICAgInBlcmlvZCI6IHsKICAgICAgICAgICAgImVuZCI6IDE2MzY5MDU1OTcsCiAgICAgICAgICAgICJzdGFydCI6IDE2MzQyMjcxOTcKICAgICAgICAgIH0sCiAgICAgICAgICAicGxhbiI6IG51bGwsCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5enZTZFA3dXciLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogIlByaWNlIGFkanVzdG1lbnQgZm9yIHBheW1lbnQgc2NoZWR1bGUiLAogICAgICAgICAgICAicHJvZHVjdCI6ICJwcm9kX0laUUFoYjluTHU0amZOIiwKICAgICAgICAgICAgInJlY3VycmluZyI6IG51bGwsCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJvbmVfdGltZSIsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudCI6IDgsCiAgICAgICAgICAgICJ1bml0X2Ftb3VudF9kZWNpbWFsIjogIjgiCiAgICAgICAgICB9LAogICAgICAgICAgInByb3JhdGlvbiI6IGZhbHNlLAogICAgICAgICAgInF1YW50aXR5IjogMSwKICAgICAgICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKa1dMWjJzT21mNDdOejl3Mm5LZmVFSyIsCiAgICAgICAgICAidGF4X2Ftb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0YXhfcmF0ZXMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJ0eXBlIjogImludm9pY2VpdGVtIiwKICAgICAgICAgICJ1bmlxdWVfaWQiOiAiaWxfMUprV0xaMnNPbWY0N056OVNvNDh6SHQ2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgImlkIjogInNsaV8xM2M3NDEyc09tZjQ3Tno5ZjRjMzA3MzQiLAogICAgICAgICAgIm9iamVjdCI6ICJsaW5lX2l0ZW0iLAogICAgICAgICAgImFtb3VudCI6IDk0NjYsCiAgICAgICAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICIxIMOXIEFib25uZW1lbnQgbWVuc3VhbGlzYWJsZSAtIHN0YW5kYXJkLCBhc3NvY2lhdGlvbiwgeWVhciAoYXQgJDk0LjY2IC8gbW9udGgpIiwKICAgICAgICAgICJkaXNjb3VudF9hbW91bnRzIjogWwoKICAgICAgICAgIF0sCiAgICAgICAgICAiZGlzY291bnRhYmxlIjogdHJ1ZSwKICAgICAgICAgICJkaXNjb3VudHMiOiBbCgogICAgICAgICAgXSwKICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgIm1ldGFkYXRhIjogewogICAgICAgICAgfSwKICAgICAgICAgICJwZXJpb2QiOiB7CiAgICAgICAgICAgICJlbmQiOiAxNjM2OTA1NTk3LAogICAgICAgICAgICAic3RhcnQiOiAxNjM0MjI3MTk3CiAgICAgICAgICB9LAogICAgICAgICAgInBsYW4iOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5cUJ6bldaMUwiLAogICAgICAgICAgICAib2JqZWN0IjogInBsYW4iLAogICAgICAgICAgICAiYWN0aXZlIjogdHJ1ZSwKICAgICAgICAgICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICJhbW91bnQiOiA5NDY2LAogICAgICAgICAgICAiYW1vdW50X2RlY2ltYWwiOiAiOTQ2NiIsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAgICAgICAgICJpbnRlcnZhbF9jb3VudCI6IDEsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibWV0YWRhdGEiOiB7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJuaWNrbmFtZSI6IG51bGwsCiAgICAgICAgICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgICAgICAgICAidGllcnMiOiBudWxsLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgICAgICAgICAidHJpYWxfcGVyaW9kX2RheXMiOiBudWxsLAogICAgICAgICAgICAidXNhZ2VfdHlwZSI6ICJsaWNlbnNlZCIKICAgICAgICAgIH0sCiAgICAgICAgICAicHJpY2UiOiB7CiAgICAgICAgICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5cUJ6bldaMUwiLAogICAgICAgICAgICAib2JqZWN0IjogInByaWNlIiwKICAgICAgICAgICAgImFjdGl2ZSI6IHRydWUsCiAgICAgICAgICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAgICAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NiwKICAgICAgICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAgICAgICAibG9va3VwX2tleSI6IG51bGwsCiAgICAgICAgICAgICJtZXRhZGF0YSI6IHsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICAgICAgICAgInByb2R1Y3QiOiAicHJvZF9JWlFBaGI5bkx1NGpmTiIsCiAgICAgICAgICAgICJyZWN1cnJpbmciOiB7CiAgICAgICAgICAgICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAgICAgICAgICAgImludGVydmFsIjogIm1vbnRoIiwKICAgICAgICAgICAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgICAgICAgICAgICJ0cmlhbF9wZXJpb2RfZGF5cyI6IG51bGwsCiAgICAgICAgICAgICAgInVzYWdlX3R5cGUiOiAibGljZW5zZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0YXhfYmVoYXZpb3IiOiAidW5zcGVjaWZpZWQiLAogICAgICAgICAgICAidGllcnNfbW9kZSI6IG51bGwsCiAgICAgICAgICAgICJ0cmFuc2Zvcm1fcXVhbnRpdHkiOiBudWxsLAogICAgICAgICAgICAidHlwZSI6ICJyZWN1cnJpbmciLAogICAgICAgICAgICAidW5pdF9hbW91bnQiOiA5NDY2LAogICAgICAgICAgICAidW5pdF9hbW91bnRfZGVjaW1hbCI6ICI5NDY2IgogICAgICAgICAgfSwKICAgICAgICAgICJwcm9yYXRpb24iOiBmYWxzZSwKICAgICAgICAgICJxdWFudGl0eSI6IDEsCiAgICAgICAgICAic3Vic2NyaXB0aW9uIjogInN1Yl8xSmtXTFoyc09tZjQ3Tno5dzJuS2ZlRUsiLAogICAgICAgICAgInN1YnNjcmlwdGlvbl9pdGVtIjogInNpX0tQTDFNWDlSYWNwb2xNIiwKICAgICAgICAgICJ0YXhfYW1vdW50cyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInRheF9yYXRlcyI6IFsKCiAgICAgICAgICBdLAogICAgICAgICAgInR5cGUiOiAic3Vic2NyaXB0aW9uIiwKICAgICAgICAgICJ1bmlxdWVfaWQiOiAiaWxfMUprV0xaMnNPbWY0N056OWttdXpadHdYIgogICAgICAgIH0KICAgICAgXSwKICAgICAgImhhc19tb3JlIjogZmFsc2UsCiAgICAgICJ0b3RhbF9jb3VudCI6IDIsCiAgICAgICJ1cmwiOiAiL3YxL2ludm9pY2VzL2luXzFKa1dMWjJzT21mNDdOejlHN3BYekJYbS9saW5lcyIKICAgIH0sCiAgICAibGl2ZW1vZGUiOiBmYWxzZSwKICAgICJtZXRhZGF0YSI6IHsKICAgIH0sCiAgICAibmV4dF9wYXltZW50X2F0dGVtcHQiOiBudWxsLAogICAgIm51bWJlciI6ICJDMEU2NjFDLTE0NTYiLAogICAgIm9uX2JlaGFsZl9vZiI6IG51bGwsCiAgICAicGFpZCI6IGZhbHNlLAogICAgInBheW1lbnRfaW50ZW50IjogewogICAgICAiaWQiOiAicGlfM0prV0xaMnNPbWY0N056OTBoZzZUeXFtIiwKICAgICAgIm9iamVjdCI6ICJwYXltZW50X2ludGVudCIsCiAgICAgICJhbW91bnQiOiA5NDc0LAogICAgICAiYW1vdW50X2NhcHR1cmFibGUiOiAwLAogICAgICAiYW1vdW50X3JlY2VpdmVkIjogMCwKICAgICAgImFwcGxpY2F0aW9uIjogbnVsbCwKICAgICAgImFwcGxpY2F0aW9uX2ZlZV9hbW91bnQiOiBudWxsLAogICAgICAiY2FuY2VsZWRfYXQiOiBudWxsLAogICAgICAiY2FuY2VsbGF0aW9uX3JlYXNvbiI6IG51bGwsCiAgICAgICJjYXB0dXJlX21ldGhvZCI6ICJhdXRvbWF0aWMiLAogICAgICAiY2hhcmdlcyI6IHsKICAgICAgICAib2JqZWN0IjogImxpc3QiLAogICAgICAgICJkYXRhIjogWwoKICAgICAgICBdLAogICAgICAgICJoYXNfbW9yZSI6IGZhbHNlLAogICAgICAgICJ0b3RhbF9jb3VudCI6IDAsCiAgICAgICAgInVybCI6ICIvdjEvY2hhcmdlcz9wYXltZW50X2ludGVudD1waV8zSmtXTFoyc09tZjQ3Tno5MGhnNlR5cW0iCiAgICAgIH0sCiAgICAgICJjbGllbnRfc2VjcmV0IjogInBpXzNKa1dMWjJzT21mNDdOejkwaGc2VHlxbV9zZWNyZXRfeXFJbFhKVXZ2dWdTaVQ2ek1jeWJQb3NycCIsCiAgICAgICJjb25maXJtYXRpb25fbWV0aG9kIjogImF1dG9tYXRpYyIsCiAgICAgICJjcmVhdGVkIjogMTYzNDIyNzE5NywKICAgICAgImN1cnJlbmN5IjogInVzZCIsCiAgICAgICJjdXN0b21lciI6ICJjdXNfOERpMXdqZFZrdHY1a3QiLAogICAgICAiZGVzY3JpcHRpb24iOiAiU3Vic2NyaXB0aW9uIGNyZWF0aW9uIiwKICAgICAgImludm9pY2UiOiAiaW5fMUprV0xaMnNPbWY0N056OUc3cFh6QlhtIiwKICAgICAgImxhc3RfcGF5bWVudF9lcnJvciI6IG51bGwsCiAgICAgICJsaXZlbW9kZSI6IGZhbHNlLAogICAgICAibWV0YWRhdGEiOiB7CiAgICAgIH0sCiAgICAgICJuZXh0X2FjdGlvbiI6IHsKICAgICAgICAidHlwZSI6ICJ1c2Vfc3RyaXBlX3NkayIsCiAgICAgICAgInVzZV9zdHJpcGVfc2RrIjogewogICAgICAgICAgInR5cGUiOiAidGhyZWVfZF9zZWN1cmVfcmVkaXJlY3QiLAogICAgICAgICAgInN0cmlwZV9qcyI6ICJodHRwczovL2hvb2tzLnN0cmlwZS5jb20vcmVkaXJlY3QvYXV0aGVudGljYXRlL3NyY18xSmtXTGEyc09tZjQ3Tno5c0RuN0Y2WVc/Y2xpZW50X3NlY3JldD1zcmNfY2xpZW50X3NlY3JldF9VR2dWenlMQTRCN0ttRERLOTNJN1BsSk5cdTAwMjZzb3VyY2VfcmVkaXJlY3Rfc2x1Zz10ZXN0X1lXTmpkRjh4TUROeVJUWXljMDl0WmpRM1RubzVMRjlMVUV3eFZIQkZaMkZQU0V0VFdsWkVTa0ZSZEVsMlVVMVBiMXAxVWpCWTAxMDA2NmtXMGx2SCIsCiAgICAgICAgICAic291cmNlIjogInNyY18xSmtXTGEyc09tZjQ3Tno5c0RuN0Y2WVciCiAgICAgICAgfQogICAgICB9LAogICAgICAib25fYmVoYWxmX29mIjogbnVsbCwKICAgICAgInBheW1lbnRfbWV0aG9kIjogInBtXzFKa1dMVjJzT21mNDdOejl4UkF4aFJzTyIsCiAgICAgICJwYXltZW50X21ldGhvZF9vcHRpb25zIjogewogICAgICAgICJjYXJkIjogewogICAgICAgICAgImluc3RhbGxtZW50cyI6IG51bGwsCiAgICAgICAgICAibmV0d29yayI6IG51bGwsCiAgICAgICAgICAicmVxdWVzdF90aHJlZV9kX3NlY3VyZSI6ICJhdXRvbWF0aWMiCiAgICAgICAgfQogICAgICB9LAogICAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBbCiAgICAgICAgImNhcmQiCiAgICAgIF0sCiAgICAgICJyZWNlaXB0X2VtYWlsIjogbnVsbCwKICAgICAgInJldmlldyI6IG51bGwsCiAgICAgICJzZXR1cF9mdXR1cmVfdXNhZ2UiOiAib2ZmX3Nlc3Npb24iLAogICAgICAic2hpcHBpbmciOiBudWxsLAogICAgICAic291cmNlIjogbnVsbCwKICAgICAgInN0YXRlbWVudF9kZXNjcmlwdG9yIjogbnVsbCwKICAgICAgInN0YXRlbWVudF9kZXNjcmlwdG9yX3N1ZmZpeCI6IG51bGwsCiAgICAgICJzdGF0dXMiOiAicmVxdWlyZXNfYWN0aW9uIiwKICAgICAgInRyYW5zZmVyX2RhdGEiOiBudWxsLAogICAgICAidHJhbnNmZXJfZ3JvdXAiOiBudWxsCiAgICB9LAogICAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAgICJwYXltZW50X21ldGhvZF9vcHRpb25zIjogbnVsbCwKICAgICAgInBheW1lbnRfbWV0aG9kX3R5cGVzIjogbnVsbAogICAgfSwKICAgICJwZXJpb2RfZW5kIjogMTYzNDIyNzE5NywKICAgICJwZXJpb2Rfc3RhcnQiOiAxNjM0MjI3MTk3LAogICAgInBvc3RfcGF5bWVudF9jcmVkaXRfbm90ZXNfYW1vdW50IjogMCwKICAgICJwcmVfcGF5bWVudF9jcmVkaXRfbm90ZXNfYW1vdW50IjogMCwKICAgICJxdW90ZSI6IG51bGwsCiAgICAicmVjZWlwdF9udW1iZXIiOiBudWxsLAogICAgInN0YXJ0aW5nX2JhbGFuY2UiOiAwLAogICAgInN0YXRlbWVudF9kZXNjcmlwdG9yIjogbnVsbCwKICAgICJzdGF0dXMiOiAib3BlbiIsCiAgICAic3RhdHVzX3RyYW5zaXRpb25zIjogewogICAgICAiZmluYWxpemVkX2F0IjogMTYzNDIyNzE5NywKICAgICAgIm1hcmtlZF91bmNvbGxlY3RpYmxlX2F0IjogbnVsbCwKICAgICAgInBhaWRfYXQiOiBudWxsLAogICAgICAidm9pZGVkX2F0IjogbnVsbAogICAgfSwKICAgICJzdWJzY3JpcHRpb24iOiAic3ViXzFKa1dMWjJzT21mNDdOejl3Mm5LZmVFSyIsCiAgICAic3VidG90YWwiOiA5NDc0LAogICAgInRheCI6IG51bGwsCiAgICAidGF4X3BlcmNlbnQiOiBudWxsLAogICAgInRvdGFsIjogOTQ3NCwKICAgICJ0b3RhbF9kaXNjb3VudF9hbW91bnRzIjogWwoKICAgIF0sCiAgICAidG90YWxfdGF4X2Ftb3VudHMiOiBbCgogICAgXSwKICAgICJ0cmFuc2Zlcl9kYXRhIjogbnVsbCwKICAgICJ3ZWJob29rc19kZWxpdmVyZWRfYXQiOiAxNjM0MjI3MTk3CiAgfSwKICAibGl2ZW1vZGUiOiBmYWxzZSwKICAibWV0YWRhdGEiOiB7CiAgfSwKICAibmV4dF9wZW5kaW5nX2ludm9pY2VfaXRlbV9pbnZvaWNlIjogbnVsbCwKICAicGF1c2VfY29sbGVjdGlvbiI6IG51bGwsCiAgInBheW1lbnRfc2V0dGluZ3MiOiB7CiAgICAicGF5bWVudF9tZXRob2Rfb3B0aW9ucyI6IG51bGwsCiAgICAicGF5bWVudF9tZXRob2RfdHlwZXMiOiBudWxsCiAgfSwKICAicGVuZGluZ19pbnZvaWNlX2l0ZW1faW50ZXJ2YWwiOiBudWxsLAogICJwZW5kaW5nX3NldHVwX2ludGVudCI6IG51bGwsCiAgInBlbmRpbmdfdXBkYXRlIjogbnVsbCwKICAicGxhbiI6IHsKICAgICJpZCI6ICJwcmljZV8xSmtXTFkyc09tZjQ3Tno5cUJ6bldaMUwiLAogICAgIm9iamVjdCI6ICJwbGFuIiwKICAgICJhY3RpdmUiOiB0cnVlLAogICAgImFnZ3JlZ2F0ZV91c2FnZSI6IG51bGwsCiAgICAiYW1vdW50IjogOTQ2NiwKICAgICJhbW91bnRfZGVjaW1hbCI6ICI5NDY2IiwKICAgICJiaWxsaW5nX3NjaGVtZSI6ICJwZXJfdW5pdCIsCiAgICAiY3JlYXRlZCI6IDE2MzQyMjcxOTYsCiAgICAiY3VycmVuY3kiOiAidXNkIiwKICAgICJpbnRlcnZhbCI6ICJtb250aCIsCiAgICAiaW50ZXJ2YWxfY291bnQiOiAxLAogICAgImxpdmVtb2RlIjogZmFsc2UsCiAgICAibWV0YWRhdGEiOiB7CiAgICB9LAogICAgIm5pY2tuYW1lIjogbnVsbCwKICAgICJwcm9kdWN0IjogInByb2RfSVpRQWhiOW5MdTRqZk4iLAogICAgInRpZXJzIjogbnVsbCwKICAgICJ0aWVyc19tb2RlIjogbnVsbCwKICAgICJ0cmFuc2Zvcm1fdXNhZ2UiOiBudWxsLAogICAgInRyaWFsX3BlcmlvZF9kYXlzIjogbnVsbCwKICAgICJ1c2FnZV90eXBlIjogImxpY2Vuc2VkIgogIH0sCiAgInF1YW50aXR5IjogMSwKICAic2NoZWR1bGUiOiBudWxsLAogICJzdGFydCI6IDE2MzQyMjcxOTcsCiAgInN0YXJ0X2RhdGUiOiAxNjM0MjI3MTk3LAogICJzdGF0dXMiOiAiaW5jb21wbGV0ZSIsCiAgInRheF9wZXJjZW50IjogbnVsbCwKICAidHJhbnNmZXJfZGF0YSI6IG51bGwsCiAgInRyaWFsX2VuZCI6IG51bGwsCiAgInRyaWFsX3N0YXJ0IjogbnVsbAp9Cg== + recorded_at: Thu, 14 Oct 2021 15:59:59 GMT +recorded_with: VCR 6.0.0 diff --git a/yarn.lock b/yarn.lock index d8e831501..ca187b9e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,7 +14,12 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.5.tgz#8ef4c18e58e801c5c95d3c1c0f2874a2680fadea" integrity sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w== -"@babel/core@^7.0.0-0", "@babel/core@^7.14.3": +"@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/core@^7.0.0-0": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== @@ -35,6 +40,27 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.15.0": + version "7.15.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.5.tgz#f8ed9ace730722544609f90c9bb49162dc3bf5b9" + integrity sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helpers" "^7.15.4" + "@babel/parser" "^7.15.5" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/generator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" @@ -44,6 +70,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" + integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== + dependencies: + "@babel/types" "^7.15.4" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" @@ -51,6 +86,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-annotate-as-pure@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" + integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" @@ -69,6 +111,16 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" @@ -81,6 +133,18 @@ "@babel/helper-replace-supers" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" +"@babel/helper-create-class-features-plugin@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" + integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-create-regexp-features-plugin@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" @@ -119,6 +183,15 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== + dependencies: + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" @@ -126,6 +199,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-hoist-variables@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" @@ -133,6 +213,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-member-expression-to-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz#d5c70e4ad13b402c95156c7a53568f504e2fb7b8" @@ -140,6 +227,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" @@ -147,6 +241,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-transforms@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" @@ -161,6 +262,20 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-module-transforms@^7.15.4": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz#7da80c8cbc1f02655d83f8b79d25866afe50d226" + integrity sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-validator-identifier" "^7.15.7" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" + "@babel/helper-optimise-call-expression@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" @@ -168,6 +283,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" @@ -182,6 +304,15 @@ "@babel/helper-wrap-function" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-remap-async-to-generator@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz#2637c0731e4c90fbf58ac58b50b2b5a192fc970f" + integrity sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-wrap-function" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-replace-supers@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" @@ -192,6 +323,16 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-simple-access@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" @@ -199,6 +340,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-skip-transparent-expression-wrappers@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" @@ -206,6 +354,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-skip-transparent-expression-wrappers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz#707dbdba1f4ad0fa34f9114fc8197aec7d5da2eb" + integrity sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-split-export-declaration@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" @@ -213,11 +368,23 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-validator-identifier@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== +"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + "@babel/helper-validator-option@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" @@ -233,6 +400,16 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-wrap-function@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz#6f754b2446cfaf3d612523e6ab8d79c27c3a3de7" + integrity sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw== + dependencies: + "@babel/helper-function-name" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helpers@^7.14.6": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" @@ -242,6 +419,15 @@ "@babel/traverse" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helpers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== + dependencies: + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/highlight@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" @@ -256,25 +442,30 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== +"@babel/parser@^7.15.4", "@babel/parser@^7.15.5": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.7.tgz#0c3ed4a2eb07b165dfa85b3cc45c727334c4edae" + integrity sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" + integrity sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-proposal-optional-chaining" "^7.14.5" -"@babel/plugin-proposal-async-generator-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz#4024990e3dd74181f4f426ea657769ff49a2df39" - integrity sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA== +"@babel/plugin-proposal-async-generator-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz#f82aabe96c135d2ceaa917feb9f5fca31635277e" + integrity sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.14.5": +"@babel/plugin-proposal-class-properties@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== @@ -282,12 +473,12 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== +"@babel/plugin-proposal-class-static-block@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz#3e7ca6128453c089e8b477a99f970c63fc1cb8d7" + integrity sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -339,16 +530,16 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.14.2", "@babel/plugin-proposal-object-rest-spread@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz#e581d5ccdfa187ea6ed73f56c6a21c1580b90fbf" - integrity sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A== +"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz#ef68050c8703d07b25af402cb96cf7f34a68ed11" + integrity sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg== dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.15.4" "@babel/plugin-proposal-optional-catch-binding@^7.14.5": version "7.14.5" @@ -375,13 +566,13 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== +"@babel/plugin-proposal-private-property-in-object@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" + integrity sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-create-class-features-plugin" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" @@ -528,24 +719,24 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== +"@babel/plugin-transform-block-scoping@^7.15.3": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf" + integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-classes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== +"@babel/plugin-transform-classes@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz#50aee17aaf7f332ae44e3bce4c2e10534d5d3bf1" + integrity sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg== dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.14.5": @@ -555,10 +746,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.13.17", "@babel/plugin-transform-destructuring@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz#d32ad19ff1a6da1e861dc62720d80d9776e3bf35" - integrity sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww== +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -585,10 +776,10 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== +"@babel/plugin-transform-for-of@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz#25c62cce2718cfb29715f416e75d5263fb36a8c2" + integrity sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -623,25 +814,25 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== +"@babel/plugin-transform-modules-commonjs@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1" + integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA== dependencies: - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-module-transforms" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-simple-access" "^7.15.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== +"@babel/plugin-transform-modules-systemjs@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz#b42890c7349a78c827719f1d2d0cd38c7d268132" + integrity sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw== dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.9" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-modules-umd@^7.14.5": @@ -652,10 +843,10 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz#d537e8ee083ee6f6aa4f4eef9d2081d555746e4c" - integrity sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2" + integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" @@ -674,10 +865,10 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== +"@babel/plugin-transform-parameters@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" + integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" @@ -721,7 +912,7 @@ "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-regenerator@^7.13.15", "@babel/plugin-transform-regenerator@^7.14.5": +"@babel/plugin-transform-regenerator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== @@ -735,10 +926,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-runtime@^7.14.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523" - integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg== +"@babel/plugin-transform-runtime@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz#d3aa650d11678ca76ce294071fda53d7804183b3" + integrity sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw== dependencies: "@babel/helper-module-imports" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" @@ -754,7 +945,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-spread@^7.14.5": +"@babel/plugin-transform-spread@^7.14.6": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== @@ -807,30 +998,30 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/preset-env@^7.14.2": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997" - integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA== +"@babel/preset-env@^7.15.0", "@babel/preset-env@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.6.tgz#0f3898db9d63d320f21b17380d8462779de57659" + integrity sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw== dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" + "@babel/compat-data" "^7.15.0" + "@babel/helper-compilation-targets" "^7.15.4" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.15.4" + "@babel/plugin-proposal-async-generator-functions" "^7.15.4" "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.15.4" "@babel/plugin-proposal-dynamic-import" "^7.14.5" "@babel/plugin-proposal-export-namespace-from" "^7.14.5" "@babel/plugin-proposal-json-strings" "^7.14.5" "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.15.6" "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.15.4" "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" @@ -849,41 +1040,41 @@ "@babel/plugin-transform-arrow-functions" "^7.14.5" "@babel/plugin-transform-async-to-generator" "^7.14.5" "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.15.3" + "@babel/plugin-transform-classes" "^7.15.4" "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" "@babel/plugin-transform-dotall-regex" "^7.14.5" "@babel/plugin-transform-duplicate-keys" "^7.14.5" "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.15.4" "@babel/plugin-transform-function-name" "^7.14.5" "@babel/plugin-transform-literals" "^7.14.5" "@babel/plugin-transform-member-expression-literals" "^7.14.5" "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.15.4" + "@babel/plugin-transform-modules-systemjs" "^7.15.4" "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9" "@babel/plugin-transform-new-target" "^7.14.5" "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.15.4" "@babel/plugin-transform-property-literals" "^7.14.5" "@babel/plugin-transform-regenerator" "^7.14.5" "@babel/plugin-transform-reserved-words" "^7.14.5" "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" "@babel/plugin-transform-sticky-regex" "^7.14.5" "@babel/plugin-transform-template-literals" "^7.14.5" "@babel/plugin-transform-typeof-symbol" "^7.14.5" "@babel/plugin-transform-unicode-escapes" "^7.14.5" "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" + "@babel/types" "^7.15.6" babel-plugin-polyfill-corejs2 "^0.2.2" babel-plugin-polyfill-corejs3 "^0.2.2" babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.14.0" + core-js-compat "^3.16.0" semver "^6.3.0" "@babel/preset-modules@^0.1.4": @@ -918,13 +1109,20 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-typescript" "^7.14.5" -"@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.0", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.15.3": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" @@ -934,6 +1132,15 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.5.tgz#c111b0f58afab4fea3d3385a406f692748c59870" @@ -949,6 +1156,21 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.14.5", "@babel/types@^7.4.4": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" @@ -957,6 +1179,14 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" +"@babel/types@^7.15.4", "@babel/types@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + "@claviska/jquery-minicolors@^2.3.5": version "2.3.5" resolved "https://registry.yarnpkg.com/@claviska/jquery-minicolors/-/jquery-minicolors-2.3.5.tgz#b802fcf2a7b75f169e68a7321d8a8d03f9fcd17c" @@ -1073,54 +1303,57 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@pmmmwh/react-refresh-webpack-plugin@^0.4.2": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" - integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== +"@pmmmwh/react-refresh-webpack-plugin@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.1.tgz#7e98d6f22c360e1dd00909f5fa9d0f6ecc263292" + integrity sha512-ccap6o7+y5L8cnvkZ9h8UXCGyy2DqtwCD+/N3Yru6lxMvcdkPKtdx13qd7sAC9s5qZktOmWf9lfUjsGOvSdYhg== dependencies: - ansi-html "^0.0.7" + ansi-html-community "^0.0.8" + common-path-prefix "^3.0.0" + core-js-pure "^3.8.1" error-stack-parser "^2.0.6" - html-entities "^1.2.1" - native-url "^0.2.6" - schema-utils "^2.6.5" + find-up "^5.0.0" + html-entities "^2.1.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" source-map "^0.7.3" -"@rails/webpacker@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.0.tgz#2c64a9ea7e85d2a33e50e86319fe6751df0c47e8" - integrity sha512-J973mzTUJbkbBu+sMwKgWRahoSfwdp5uHT80iDWr6hi8YAC7kj47HapQnn2SGPmv/onTT8WC3jFM62Hkh213yQ== +"@rails/webpacker@5.4.3": + version "5.4.3" + resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.4.3.tgz#cfe2d8faffe7db5001bad50a1534408b4f2efb2f" + integrity sha512-tEM8tpUtfx6FxKwcuQ9+v6pzgqM5LeAdhT6IJ4Te3BPKFO1xrGrXugqeRuZ+gE8ASDZRTOK6yuQkapOpuX5JdA== dependencies: - "@babel/core" "^7.14.3" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-object-rest-spread" "^7.14.2" + "@babel/core" "^7.15.0" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.13.17" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-runtime" "^7.14.3" - "@babel/preset-env" "^7.14.2" - "@babel/runtime" "^7.14.0" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-runtime" "^7.15.0" + "@babel/preset-env" "^7.15.0" + "@babel/runtime" "^7.15.3" babel-loader "^8.2.2" babel-plugin-dynamic-import-node "^2.3.3" babel-plugin-macros "^2.8.0" case-sensitive-paths-webpack-plugin "^2.4.0" compression-webpack-plugin "^4.0.1" - core-js "^3.12.1" + core-js "^3.16.2" css-loader "^3.6.0" file-loader "^6.2.0" - flatted "^3.1.1" + flatted "^3.2.2" glob "^7.1.7" js-yaml "^3.14.1" mini-css-extract-plugin "^0.9.0" - optimize-css-assets-webpack-plugin "^5.0.6" + optimize-css-assets-webpack-plugin "^5.0.8" path-complete-extname "^1.0.0" - pnp-webpack-plugin "^1.6.4" + pnp-webpack-plugin "^1.7.0" postcss-flexbugs-fixes "^4.2.1" postcss-import "^12.0.1" postcss-loader "^3.0.0" postcss-preset-env "^6.7.0" postcss-safe-parser "^4.0.2" - regenerator-runtime "^0.13.7" - sass "^1.32.13" + regenerator-runtime "^0.13.9" + sass "^1.38.0" sass-loader "10.1.1" style-loader "^1.3.0" terser-webpack-plugin "^4.2.3" @@ -1711,7 +1944,12 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-html@0.0.7, ansi-html@^0.0.7: +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= @@ -1924,12 +2162,12 @@ autoprefixer@^9.6.1: postcss "^7.0.32" postcss-value-parser "^4.1.0" -axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== +axios@^0.21.2: + version "0.21.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017" + integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.0" babel-loader@^8.2.2: version "8.2.2" @@ -2202,6 +2440,17 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.16.6, browserslist@^4 escalade "^3.1.1" node-releases "^1.1.71" +browserslist@^4.17.1: + version "4.17.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.2.tgz#aa15dbd2fab399a399fe4df601bb09363c5458a6" + integrity sha512-jSDZyqJmkKMEMi7SZAgX5UltFdR5NAO43vY0AwTpu4X3sGH7GLLQ83KiUomgrnvZRCeW0yPPnKqnxPqQOER9zQ== + dependencies: + caniuse-lite "^1.0.30001261" + electron-to-chromium "^1.3.854" + escalade "^3.1.1" + nanocolors "^0.2.12" + node-releases "^1.1.76" + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2360,6 +2609,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, can resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz#66e8669985bb2cb84ccb10f68c25ce6dd3e4d2b8" integrity sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ== +caniuse-lite@^1.0.30001261: + version "1.0.30001264" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001264.tgz#88f625a60efb6724c7c62ac698bc8dbd9757e55b" + integrity sha512-Ftfqqfcs/ePiUmyaySsQ4PUsdcYyXG2rfoBVsk3iY1ahHaJEw65vfb7Suzqm+cEkwwPIv/XWkg27iCpRavH4zA== + case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" @@ -2569,6 +2823,11 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2699,10 +2958,23 @@ core-js-compat@^3.14.0: browserslist "^4.16.6" semver "7.0.0" -core-js@^3.12.1: - version "3.15.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.0.tgz#db9554ebce0b6fd90dc9b1f2465c841d2d055044" - integrity sha512-GUbtPllXMYRzIgHNZ4dTYTcUemls2cni83Q4Q/TrFONHfhcg9oEGOtaGHfb0cpzec60P96UKPvMkjX1jET8rUw== +core-js-compat@^3.16.0: + version "3.18.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.1.tgz#01942a0877caf9c6e5007c027183cf0bdae6a191" + integrity sha512-XJMYx58zo4W0kLPmIingVZA10+7TuKrMLPt83+EzDmxFJQUMcTVVmQ+n5JP4r6Z14qSzhQBRi3NSWoeVyKKXUg== + dependencies: + browserslist "^4.17.1" + semver "7.0.0" + +core-js-pure@^3.8.1: + version "3.18.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.1.tgz#097d34d24484be45cea700a448d1e74622646c80" + integrity sha512-kmW/k8MaSuqpvA1xm2l3TVlBuvW+XBkcaOroFUpO3D4lsTGQWBTb/tBDCf/PNkkPLrwgrkQRIYNPB0CeqGJWGQ== + +core-js@^3.16.2: + version "3.18.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.1.tgz#289d4be2ce0085d40fc1244c0b1a54c00454622f" + integrity sha512-vJlUi/7YdlCZeL6fXvWNaLUPh/id12WXj3MbkMw5uOyF0PfWPBNOCNbs53YqgrvtujLNlt9JQpruyIKkUZ+PKA== core-util-is@~1.0.0: version "1.0.2" @@ -3286,6 +3558,11 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz#0728587f1b9b970ec9ffad932496429aef750d09" integrity sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A== +electron-to-chromium@^1.3.854: + version "1.3.857" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.857.tgz#dcc239ff8a12b6e4b501e6a5ad20fd0d5a3210f9" + integrity sha512-a5kIr2lajm4bJ5E4D3fp8Y/BRB0Dx2VOcCRE5Gtb679mXIME/OFhWler8Gy2ksrf8gFX+EFCSIGA33FB3gqYpg== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -3920,6 +4197,14 @@ find-up@^4.0.0: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" @@ -3944,10 +4229,10 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flatted@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== +flatted@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== flatten@^1.0.2: version "1.0.3" @@ -3962,10 +4247,10 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.10.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.0.0, follow-redirects@^1.14.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" + integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== for-in@^1.0.2: version "1.0.2" @@ -4341,11 +4626,16 @@ hsla-regex@^1.0.0: resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= -html-entities@^1.2.1, html-entities@^1.3.1: +html-entities@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-entities@^2.1.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" + integrity sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ== + html-loader@^1.3.0, html-loader@~1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340" @@ -4507,10 +4797,10 @@ ignore@^5.1.1, ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -immer@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.3.tgz#146e2ba8b84d4b1b15378143c2345559915097f4" - integrity sha512-mONgeNSMuyjIe0lkQPa9YhdmTv8P19IeHV0biYhcXhbd5dhdB9HSK93zBpyKjp6wersSUgT5QyU0skmejUVP2A== +immer@^9.0.6: + version "9.0.6" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" + integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== import-cwd@^2.0.0: version "2.1.0" @@ -5170,6 +5460,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5601,6 +5898,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nanocolors@^0.2.12: + version "0.2.12" + resolved "https://registry.yarnpkg.com/nanocolors/-/nanocolors-0.2.12.tgz#4d05932e70116078673ea4cc6699a1c56cc77777" + integrity sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5618,13 +5920,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -native-url@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" - integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== - dependencies: - querystring "^0.2.0" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5728,6 +6023,11 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== +node-releases@^1.1.76: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -5932,10 +6232,10 @@ opn@^5.5.0: dependencies: is-wsl "^1.1.0" -optimize-css-assets-webpack-plugin@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.6.tgz#abad0c6c11a632201794f75ddba3ce13e32ae80e" - integrity sha512-JAYw7WrIAIuHWoKeSBB3lJ6ZG9PSDK3JJduv/FMpIY060wvbA8Lqn/TCtxNGICNlg0X5AGshLzIhpYrkltdq+A== +optimize-css-assets-webpack-plugin@^5.0.8: + version "5.0.8" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.8.tgz#cbccdcf5a6ef61d4f8cc78cf083a67446e5f402a" + integrity sha512-mgFS1JdOtEGzD8l+EuISqL57cKO+We9GcoiQEmdCWRqqck+FGNmYJtx9qfAPzEz+lRrlThWMuGDaRkI/yWNx/Q== dependencies: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" @@ -6016,6 +6316,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -6254,10 +6561,10 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" -pnp-webpack-plugin@^1.6.4: - version "1.6.4" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" - integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== +pnp-webpack-plugin@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz#65741384f6d8056f36e2255a8d67ffc20866f5c9" + integrity sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg== dependencies: ts-pnp "^1.1.6" @@ -7048,11 +7355,6 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -7145,10 +7447,10 @@ react-modal@^3.11.2: react-lifecycles-compat "^3.0.0" warning "^4.0.3" -react-refresh@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.9.0.tgz#71863337adc3e5c2f8a6bfddd12ae3bfe32aafbf" - integrity sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ== +react-refresh@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.10.0.tgz#2f536c9660c0b9b1d500684d9e52a65e7404f7e3" + integrity sha512-PgidR3wST3dDYKr6b4pJoqQFpPGNKDSCDx4cZoshjXipw3LzO7mG1My2pwEzz2JVkF+inx3xRpDeQLFQGH/hsQ== react-select@^4.3.1: version "4.3.1" @@ -7272,11 +7574,16 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -7557,10 +7864,10 @@ sass-loader@10.1.1: schema-utils "^3.0.0" semver "^7.3.2" -sass@^1.32.13: - version "1.35.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.1.tgz#90ecf774dfe68f07b6193077e3b42fb154b9e1cd" - integrity sha512-oCisuQJstxMcacOPmxLNiLlj4cUyN2+8xJnG7VanRoh2GOLr9RqkvI4AxA4a6LHVg/rsu+PmxXeGhrdSF9jCiQ== +sass@^1.38.0: + version "1.42.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.42.1.tgz#5ab17bebc1cb1881ad2e0c9a932c66ad64e441e2" + integrity sha512-/zvGoN8B7dspKc5mC6HlaygyCBRvnyzzgD5khiaCfglWztY99cYoiTUksVx11NlnemrcfH5CEaCpsUKoW0cQqg== dependencies: chokidar ">=3.0.0 <4.0.0" @@ -8197,9 +8504,9 @@ tapable@^1.0.0, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^6.0.2: - version "6.1.4" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.4.tgz#9f0722b772a5e00dba7d52e1923b37a7ec3799b3" - integrity sha512-kcPWrO8S5ABjuZ/v1xQHP8xCEvj1dQ1d9iAb6Qs4jLYzaAIYWwST2IQpz7Ud8VNYRI+fGhFjrnzRKmRggKWg3g== + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -8530,9 +8837,9 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + version "1.5.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.3.tgz#71c1303d38fb6639ade183c2992c8cc0686df862" + integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0"