From aa9752ce5c7c2ac0bd05eb27958f68e464a6e575 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 14 Jun 2024 01:03:38 +0000 Subject: [PATCH 01/85] update providers with Rotess Provider --- config/app.php | 1 + 1 file changed, 1 insertion(+) diff --git a/config/app.php b/config/app.php index ddeb918ec94a..aaf1ada9dd51 100644 --- a/config/app.php +++ b/config/app.php @@ -202,6 +202,7 @@ return [ App\Providers\ClientPortalServiceProvider::class, App\Providers\NinjaTranslationServiceProvider::class, App\Providers\StaticServiceProvider::class, + App\PaymentDrivers\Rotessa\Providers\ServiceProvider::class ], /* From 2b29d4c7b817ae9935f2aa8b8e6269985eb04362 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 14 Jun 2024 01:04:10 +0000 Subject: [PATCH 02/85] add migration to add rotessa gateway --- .../2024_06_11_231143_add_rotessa_gateway.php | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 database/migrations/2024_06_11_231143_add_rotessa_gateway.php diff --git a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php new file mode 100644 index 000000000000..264c8b0ee604 --- /dev/null +++ b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php @@ -0,0 +1,56 @@ +first(); + $count = (int) Gateway::count(); + + $configuration = new \stdClass; + $configuration->api_key = ''; + $configuration->test_mode = true; + + if (!$record) { + $gateway = new Gateway; + } else { + $gateway = $record; + } + + $gateway->id = $count + 4000; + $gateway->name = 'Rotessa'; + $gateway->key = Str::lower(Str::random(32)); + $gateway->provider = 'Rotessa'; + $gateway->is_offsite = true; + $gateway->fields = \json_encode($configuration); + $gateway->visible = 1; + $gateway->site_url = "https://rotessa.com"; + $gateway->default_gateway_type_id = 2; + $gateway->save(); + + Gateway::query()->where('name','=', 'Rotessa')->update(['visible' => 1]); + + \DB::statement('SET FOREIGN_KEY_CHECKS=1;'); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Gateway::where('name', '=', 'Rotessa')->delete(); + } +}; From f3b4bd57059605c798c547f2cdfb1ab0ebb07d58 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 14 Jun 2024 16:06:50 +0000 Subject: [PATCH 03/85] add package --- .../Rotessa/DataProviders/CAProvinces.php | 55 ++ .../Rotessa/DataProviders/Frequencies.php | 19 + .../Rotessa/Events/CacheGateways.php | 11 + .../Rotessa/Helpers/helpers.php | 6 + .../Rotessa/Listeners/CacheGateways.php | 28 + app/PaymentDrivers/Rotessa/Models/Gateway.php | 23 + app/PaymentDrivers/Rotessa/PaymentMethod.php | 261 ++++++++ app/PaymentDrivers/Rotessa/Providers/.gitkeep | 0 .../Providers/EventServiceProvider.php | 21 + .../Rotessa/Providers/ServiceProvider.php | 83 +++ .../Rotessa/Resources/Customer.php | 22 + .../Rotessa/Resources/Transaction.php | 23 + .../Rotessa/View/Components/Components.php | 118 ++++ .../Rotessa/View/Composers/Composer.php | 16 + app/PaymentDrivers/Rotessa/composer.json | 61 ++ app/PaymentDrivers/Rotessa/composer.lock | 44 ++ .../Rotessa/config/gateway_types.php | 16 + .../bank_transfer/CA/details.blade.php | 4 + .../rotessa/bank_transfer/authorize.blade.php | 35 ++ .../rotessa/bank_transfer/pay.blade.php | 91 +++ .../rotessa/components/account.blade.php | 31 + .../rotessa/components/address.blade.php | 59 ++ .../components/banks/CA/bank.blade.php | 17 + .../components/banks/US/bank.blade.php | 28 + .../rotessa/components/contact.blade.php | 69 +++ .../components/dropdowns/country/CA.blade.php | 12 + .../components/dropdowns/country/US.blade.php | 12 + .../Rotessa/vendor/autoload.php | 25 + .../Rotessa/vendor/composer/ClassLoader.php | 579 ++++++++++++++++++ .../vendor/composer/InstalledVersions.php | 359 +++++++++++ .../Rotessa/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 69 +++ .../vendor/composer/autoload_files.php | 10 + .../vendor/composer/autoload_namespaces.php | 9 + .../Rotessa/vendor/composer/autoload_psr4.php | 14 + .../Rotessa/vendor/composer/autoload_real.php | 48 ++ .../vendor/composer/autoload_static.php | 122 ++++ .../Rotessa/vendor/composer/installed.json | 32 + .../Rotessa/vendor/composer/installed.php | 32 + .../Rotessa/vendor/karneaud/omnipay-rotessa | 1 + app/PaymentDrivers/RotessaPaymentDriver.php | 109 ++++ 41 files changed, 2595 insertions(+) create mode 100644 app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php create mode 100644 app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php create mode 100644 app/PaymentDrivers/Rotessa/Events/CacheGateways.php create mode 100644 app/PaymentDrivers/Rotessa/Helpers/helpers.php create mode 100644 app/PaymentDrivers/Rotessa/Listeners/CacheGateways.php create mode 100644 app/PaymentDrivers/Rotessa/Models/Gateway.php create mode 100755 app/PaymentDrivers/Rotessa/PaymentMethod.php create mode 100644 app/PaymentDrivers/Rotessa/Providers/.gitkeep create mode 100644 app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php create mode 100644 app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php create mode 100644 app/PaymentDrivers/Rotessa/Resources/Customer.php create mode 100644 app/PaymentDrivers/Rotessa/Resources/Transaction.php create mode 100644 app/PaymentDrivers/Rotessa/View/Components/Components.php create mode 100644 app/PaymentDrivers/Rotessa/View/Composers/Composer.php create mode 100644 app/PaymentDrivers/Rotessa/composer.json create mode 100644 app/PaymentDrivers/Rotessa/composer.lock create mode 100644 app/PaymentDrivers/Rotessa/config/gateway_types.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php create mode 100755 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php create mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/autoload.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/ClassLoader.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/LICENSE create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_psr4.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/installed.json create mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/installed.php create mode 160000 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa create mode 100644 app/PaymentDrivers/RotessaPaymentDriver.php diff --git a/app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php b/app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php new file mode 100644 index 000000000000..275e79cfad4e --- /dev/null +++ b/app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php @@ -0,0 +1,55 @@ + 'Alberta', + 'BC' => 'British Columbia', + 'MB' => 'Manitoba', + 'NB' => 'New Brunswick', + 'NL' => 'Newfoundland And Labrador', + 'NS' => 'Nova Scotia', + 'ON' => 'Ontario', + 'PE' => 'Prince Edward Island', + 'QC' => 'Quebec', + 'SK' => 'Saskatchewan', + 'NT' => 'Northwest Territories', + 'NU' => 'Nunavut', + 'YT' => 'Yukon' + ]; + + /** + * Get the name of the province or territory for a given abbreviation. + * + * @param string $abbreviation + * @return string + */ + public static function getName($abbreviation) { + return self::$provinces[$abbreviation]; + } + + /** + * Get all provinces and territories. + * + * @return array + */ + public static function get() { + return self::$provinces; + } + + /** + * Get the abbreviation for a given province or territory name. + * + * @param string $name + * @return string + */ + public static function getAbbreviation($name) { + return array_search(ucwords($name), self::$provinces); + } +} diff --git a/app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php b/app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php new file mode 100644 index 000000000000..ca5623c1694b --- /dev/null +++ b/app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php @@ -0,0 +1,19 @@ +where('name', 'Rotessa')->isEmpty()) { + $gateways = Gateway::orderBy('id')->get(); + } + + $gateways = $gateways->map(fn($item) => $item->name == 'Rotessa'? RotessaGateway::find($item->toArray()['id']) : $item ); + + Cache::forever('gateways', $gateways); + } +} + diff --git a/app/PaymentDrivers/Rotessa/Models/Gateway.php b/app/PaymentDrivers/Rotessa/Models/Gateway.php new file mode 100644 index 000000000000..55405dbd7f5f --- /dev/null +++ b/app/PaymentDrivers/Rotessa/Models/Gateway.php @@ -0,0 +1,23 @@ +name == 'Rotessa' && empty($options)) { + $options = $gateway_types; + } + + return $options; + } +} + diff --git a/app/PaymentDrivers/Rotessa/PaymentMethod.php b/app/PaymentDrivers/Rotessa/PaymentMethod.php new file mode 100755 index 000000000000..9d67edfa6fe3 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/PaymentMethod.php @@ -0,0 +1,261 @@ +rotessa = $rotessa; + $this->rotessa->init(); + } + + /** + * Show the authorization page for Rotessa. + * + * @param array $data + * @return \Illuminate\View\View + */ + public function authorizeView(array $data): View + { + $data['contact'] = collect($data['client']->contacts->firstWhere('is_primary', 1)->toArray())->merge([ + 'home_phone' => $data['client']->phone, + 'custom_identifier' => $data['client']->number . substr(uniqid(),0,4), + 'name' => $data['client']->name, + 'id' => null + ] )->all(); + $data['gateway'] = $this->rotessa; + $data['gateway_type_id'] = (int) request('method'); + $data['account'] = [ + 'routing_number' => $data['client']->routing_id, + 'country' => $data['client']->country->iso_3166_2 + ]; + $data['address'] = collect($data['client']->toArray())->merge(['country' => $data['client']->country->iso_3166_2 ])->all(); + + return view('rotessa::bank_transfer.authorize', $data); + } + + protected function findOrCreateCustomer(Request $request) + { + $result = null; $data = []; + $customer = new Customer( + $request->merge(['id' => $request->input('id') ] + + ['address' => $request->only('address_1','address_2','city','postal_code','province_code','country') ])->all() + ); + try { + $existing = ClientGatewayToken::query() + ->where('company_gateway_id', $this->rotessa->company_gateway->id) + ->where('client_id', $this->rotessa->client->id) + ->first(); + $data = array_filter(Arr::except($customer->jsonSerialize(),['custom_identifier'])); + if ($existing && $existing->token == encrypt($data)) return $existing->gateway_customer_reference; + + $result = $this->rotessa->gateway->authorize($customer->resolve())->send(); + if ($result->isSuccessful()) { + $customer = new Customer($result->getData()); + $data = array_filter(Arr::except($customer->jsonSerialize(),['custom_identifier'])); + $this->rotessa->storeGatewayToken( [ + 'payment_meta' => $customer->resolve() + ['brand' => 'Rotessa'], + 'token' => encrypt($data), + 'payment_method_id' => (int) $request->input("gateway_type_id"), + ], ['gateway_customer_reference' => + $result->getParameter('id') + , 'routing_number' => $result->getParameter('routing_number') ?? $result->getParameter('transit_number')]); + + return $result->getParameter('id'); + } + + throw new \Exception($result->getMessage(), (int) $result->getCode()); + + } catch (\Throwable $th) { + $data = [ + 'transaction_reference' => null, + 'transaction_response' => $th->getMessage(), + 'success' => false, + 'description' => $th->getMessage(), + 'code' =>(int) $th->getCode() + ]; + + SystemLogger::dispatch(['server_response' => is_null($result) ? '' : $result->getData(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->rotessa->client, $this->rotessa->client->company); + + throw $th; + } + } + + /** + * Handle the authorization page for Rotessa. + * + * @param Request $request + * @return RedirectResponse + */ + public function authorizeResponse(Request $request): RedirectResponse + { + try { + $request->validate([ + 'gateway_type_id' => ['required','integer'], + 'country' => ['required'], + 'name' => ['required'], + 'address_1' => ['required'], + 'address_2' => ['required'], + 'city' => ['required'], + 'email' => ['required','email:filter'], + 'province_code' => ['required','size:2','alpha'], + 'postal_code' => ['required'], + 'authorization_type' => ['required'], + 'account_number' => ['required'], + 'bank_name' => ['required'], + 'phone' => ['required'], + 'home_phone' => ['required'], + 'bank_account_type'=>['required_if:country,US'], + 'routing_number'=>['required_if:country,US'], + 'institution_number'=>['required_if:country,CA','numeric'], + 'transit_number'=>['required_if:country,CA','numeric'], + 'custom_identifier'=>['required_without:customer_id'], + 'customer_id'=>['required_without:custom_identifier','integer'], + ]); + $this->findOrCreateCustomer($request); + + return redirect()->route('client.payment_methods.index')->withMessage(ctrans('texts.payment_method_added')); + + } catch (\Throwable $e) { + return $this->rotessa->processInternallyFailedPayment($this->rotessa, new ClientPortalAuthorizationException( get_class( $e) . " : {$e->getMessage()}", (int) $e->getCode() )); + } + + return back()->withMessage(ctrans('texts.unable_to_verify_payment_method')); + } + + /** + * Payment view for the Rotessa. + * + * @param array $data + * @return \Illuminate\View\View + */ + public function paymentView(array $data): View + { + $data['gateway'] = $this->rotessa; + $data['amount'] = $data['total']['amount_with_fee']; + $data['due_date'] = date('Y-m-d', min(max(strtotime($data['invoices']->max('due_date')), strtotime('now')), strtotime('+1 day'))); + $data['process_date'] = $data['due_date']; + $data['currency'] = $this->rotessa->client->getCurrencyCode(); + $data['frequency'] = Frequencies::getOnePayment(); + $data['installments'] = 1; + $data['invoice_nums'] = $data['invoices']->pluck('invoice_number')->join(', '); + return view('rotessa::bank_transfer.pay', $data ); + } + + /** + * Handle payments page for Rotessa. + * + * @param PaymentResponseRequest $request + * @return void + */ + public function paymentResponse(PaymentResponseRequest $request) + { + $response= null; + $customer = null; + try { + $request->validate([ + 'source' => ['required','string','exists:client_gateway_tokens,token'], + 'amount' => ['required','numeric'], + 'token_id' => ['required','integer','exists:client_gateway_tokens,id'], + 'process_date'=> ['required','date','after_or_equal:today'], + ]); + $customer = ClientGatewayToken::query() + ->where('company_gateway_id', $this->rotessa->company_gateway->id) + ->where('client_id', $this->rotessa->client->id) + ->where('id', (int) $request->input('token_id')) + ->where('token', $request->input('source')) + ->first(); + if(!$customer) throw new \Exception('Client gateway token not found!', 605); + + $transaction = new Transaction($request->only('frequency' ,'installments','amount','process_date','comment')); + $transaction->additional(['customer_id' => $customer->gateway_customer_reference]); + $transaction = array_filter( $transaction->resolve()); + $response = $this->rotessa->gateway->capture($transaction)->send(); + if(!$response->isSuccessful()) throw new \Exception($response->getMessage(), (int) $response->getCode()); + + return $this->processPendingPayment($response->getParameter('id'), (float) $response->getParameter('amount'), (int) $customer->gateway_type_id , $customer->token); + } catch(\Throwable $e) { + $this->processUnsuccessfulPayment( new InvalidResponseException($e->getMessage(), (int) $e->getCode()) ); + } + } + + public function processPendingPayment($payment_id, float $amount, int $gateway_type_id, $payment_method ) + { + $data = [ + 'payment_method' => $payment_method, + 'payment_type' => $gateway_type_id, + 'amount' => $amount, + 'transaction_reference' =>$payment_id, + 'gateway_type_id' => $gateway_type_id, + ]; + $payment = $this->rotessa->createPayment($data, Payment::STATUS_PENDING); + SystemLogger::dispatch( + [ 'data' => $data ], + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_SUCCESS, + 880, + $this->rotessa->client, + $this->rotessa->client->company, + ); + + return redirect()->route('client.payments.show', [ 'payment' => $this->rotessa->encodePrimaryKey($payment->id) ]); + } + + /** + * Handle unsuccessful payment for Rotessa. + * + * @param Exception $exception + * @throws PaymentFailed + * @return void + */ + public function processUnsuccessfulPayment(\Exception $exception): void + { + $this->rotessa->sendFailureMail($exception->getMessage()); + + SystemLogger::dispatch( + $exception->getMessage(), + SystemLog::CATEGORY_GATEWAY_RESPONSE, + SystemLog::EVENT_GATEWAY_FAILURE, + 880, + $this->rotessa->client, + $this->rotessa->client->company, + ); + + throw new PaymentFailed($exception->getMessage(), $exception->getCode()); + } +} diff --git a/app/PaymentDrivers/Rotessa/Providers/.gitkeep b/app/PaymentDrivers/Rotessa/Providers/.gitkeep new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php b/app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php new file mode 100644 index 000000000000..0d61ecbce482 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php @@ -0,0 +1,21 @@ + [ + Listener::class, + ], + ]; +} diff --git a/app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php b/app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php new file mode 100644 index 000000000000..af11a242f209 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php @@ -0,0 +1,83 @@ +registerConfig(); + $this->registerTranslations(); + $this->registerViews(); + + event(new CacheGateways); + } + + /** + * Register config. + */ + protected function registerConfig(): void + { + $this->mergeConfigFrom(app_path("PaymentDrivers/{$this->moduleName}/config/gateway_types.php"),$this->moduleNameLower); + } + /** + * Register the service provider. + */ + public function register(): void + { + $this->app->register(EventServiceProvider::class); + + } + + /** + * Register translations. + */ + public function registerTranslations(): void + { + $langPath = resource_path('lang/modules/'.$this->moduleNameLower); + + if (is_dir($langPath)) { + $this->loadTranslationsFrom($langPath, $this->moduleNameLower); + $this->loadJsonTranslationsFrom($langPath); + } else { + $this->loadTranslationsFrom(app_path("PaymentDrivers/{$this->moduleName}resources/lang"), $this->moduleNameLower); + $this->loadJsonTranslationsFrom(app_path("PaymentDrivers/{$this->moduleName}resources/lang")); + } + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/portal/ninja2020/gateways/'.$this->moduleNameLower); + $sourcePath = app_path('PaymentDrivers/Rotessa/resources/views/gateways/rotessa'); + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); + Blade::componentNamespace('App\\PaymentDrivers\\Rotessa\\View\\Components', $this->moduleNameLower); + } + + private function getPublishableViewPaths(): array + { + $paths = [app_path('PaymentDrivers/Rotessa/resources/views/gateways/rotessa')]; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/'.$this->moduleNameLower)) { + $paths[] = $path.'/'.$this->moduleNameLower; + } + } + + return $paths; + } +} diff --git a/app/PaymentDrivers/Rotessa/Resources/Customer.php b/app/PaymentDrivers/Rotessa/Resources/Customer.php new file mode 100644 index 000000000000..c2514dfdd8c1 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/Resources/Customer.php @@ -0,0 +1,22 @@ +resource->jsonSerialize(); + } + + function toArray(Request $request) : array { + return $this->additional + parent::toArray($request); + } +} diff --git a/app/PaymentDrivers/Rotessa/Resources/Transaction.php b/app/PaymentDrivers/Rotessa/Resources/Transaction.php new file mode 100644 index 000000000000..84ce332860f8 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/Resources/Transaction.php @@ -0,0 +1,23 @@ +resource->jsonSerialize(); + } + + function toArray(Request $request) : array { + return $this->additional + parent::toArray($request); + } +} diff --git a/app/PaymentDrivers/Rotessa/View/Components/Components.php b/app/PaymentDrivers/Rotessa/View/Components/Components.php new file mode 100644 index 000000000000..b18269f35f54 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/View/Components/Components.php @@ -0,0 +1,118 @@ +contact = $contact; + $this->attributes = $this->newAttributeBag(Arr::only($this->contact, $this->fields) ); + } + + private $fields = [ + 'name', + 'email', + 'home_phone', + 'phone', + 'custom_identifier', + 'customer_type' , + 'id' + ]; + + private $defaults = [ + 'customer_type' => "Business", + 'customer_identifier' => null, + 'id' => null + ]; + + public function render() + { + return $this->view('rotessa::components.contact', $this->attributes->getAttributes(), $this->defaults ); + } +} + +// Address Component +class AddressComponent extends Component +{ + private $fields = [ + 'address_1', + 'address_2', + 'city', + 'postal_code', + 'province_code', + 'country' + ]; + + private $defaults = [ + 'country' => 'US' + ]; + + public array $address; + + public function __construct(array $address) { + $this->address = $address; + if(strlen($this->address['state']) > 2 ) { + $this->address['state'] = $this->address['country'] == 'US' ? array_search($this->address['state'], USStates::$states) : CAProvinces::getAbbreviation($this->address['state']); + } + + $this->attributes = $this->newAttributeBag( + Arr::only(Arr::mapWithKeys($this->address, function ($item, $key) { + return in_array($key, ['address1','address2','state'])?[ (['address1'=>'address_1','address2'=>'address_2','state'=>'province_code'])[$key] => $item ] :[ $key => $item ]; + }), + $this->fields) ); + } + + + public function render() + { + + return $this->view('rotessa::components.address', $this->attributes->getAttributes(), $this->defaults ); + } +} + +// AmericanBankInfo Component +class AccountComponent extends Component +{ + private $fields = [ + 'bank_account_type', + 'routing_number', + 'institution_number', + 'transit_number', + 'bank_name', + 'country', + 'account_number' + ]; + + private $defaults = [ + 'bank_account_type' => null, + 'routing_number' => null, + 'institution_number' => null, + 'transit_number' => null, + 'bank_name' => ' ', + 'account_number' => null, + 'country' => 'US', + "authorization_type" => 'Online' + ]; + + public array $account; + + public function __construct(array $account) { + $this->account = $account; + $this->attributes = $this->newAttributeBag(Arr::only($this->account, $this->fields) ); + } + + public function render() + { + return $this->view('rotessa::components.account', $this->attributes->getAttributes(), $this->defaults ); + } +} diff --git a/app/PaymentDrivers/Rotessa/View/Composers/Composer.php b/app/PaymentDrivers/Rotessa/View/Composers/Composer.php new file mode 100644 index 000000000000..fb3c126a3555 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/View/Composers/Composer.php @@ -0,0 +1,16 @@ +with('states', $states); +}); + +// CAProvinces View Composer +View::composer(['rotessa::components.address','rotessa::components.banks.CA.bank','rotessa::components.dropdowns.country.CA'], function ($view) { + $provinces = CAProvinces::get(); + $view->with('provinces', $provinces); +}); \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/composer.json b/app/PaymentDrivers/Rotessa/composer.json new file mode 100644 index 000000000000..6f9ba511a9b4 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/composer.json @@ -0,0 +1,61 @@ +{ + "name": "karneaud/invoiceninja-rotessa", + "description": "Invoice Ninja with Rotessa gateway", + "type":"laravel-module", + "keywords": [ + "invoice ninja", + "laravel", + "rotessa" + ], + "license": ["Attribution Assurance License","Proprietary License","BSD 3-Clause License"], + "authors": [ + { + "name": "Kendall Arneaud", + "email": "kendall.arneaud@gmail.com" + } + ], + "autoload": { + "classmap": ["./View/Components/Components.php"], + "psr-4": { + "App\\PaymentDrivers\\Rotessa\\":"./", + "App\\PaymentDrivers\\Rotessa\\View\\Components\\":"./View/Components/", + "App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\": "Database/Seeders/" + }, + "files": [ + "./View/Composers/Composer.php" + ] + }, + "config": { + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true + }, + "repositories": [ + { + "type": "package", + "package": { + "name": "karneaud/omnipay-rotessa", + "source": { + "url": "https://github.com/karneaud/omnipay-rotessa.git", + "type": "git", + "reference": "master" + }, + "version": "1.0.0-beta", + "dist": { + "url": "https://github.com/karneaud/omnipay-rotessa/archive/refs/tags/v1.0.0-beta.zip", + "type": "zip" + }, + "autoload": { + "psr-4": { + "Omnipay\\Rotessa\\":"./src/Omnipay/Rotessa/", + "Omnipay\\Rotessa\\Exception\\":"./src/Omnipay/Rotessa/Exception/" + }, + "classmap": ["./src/Omnipay/Rotessa/Exception/Exceptions.php"] + } + } + } + ], + "require": { + "karneaud/omnipay-rotessa": "v1.0.0-beta" + } +} diff --git a/app/PaymentDrivers/Rotessa/composer.lock b/app/PaymentDrivers/Rotessa/composer.lock new file mode 100644 index 000000000000..24dc1719cffb --- /dev/null +++ b/app/PaymentDrivers/Rotessa/composer.lock @@ -0,0 +1,44 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "4c8b93bd9cd92f484502fc665fdbe826", + "packages": [ + { + "name": "karneaud/omnipay-rotessa", + "version": "1.0.0-beta", + "source": { + "type": "git", + "url": "https://github.com/karneaud/omnipay-rotessa.git", + "reference": "master" + }, + "dist": { + "type": "zip", + "url": "https://github.com/karneaud/omnipay-rotessa/archive/refs/tags/v1.0.0-beta.zip" + }, + "type": "library", + "autoload": { + "psr-4": { + "Omnipay\\Rotessa\\": "./src/Omnipay/Rotessa/", + "Omnipay\\Rotessa\\Exception\\": "./src/Omnipay/Rotessa/Exception/" + }, + "classmap": [ + "./src/Omnipay/Rotessa/Exception/Exceptions.php" + ] + } + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "karneaud/omnipay-rotessa": 10 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/app/PaymentDrivers/Rotessa/config/gateway_types.php b/app/PaymentDrivers/Rotessa/config/gateway_types.php new file mode 100644 index 000000000000..6ae509ae8dd0 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/config/gateway_types.php @@ -0,0 +1,16 @@ + [ + GatewayType::BANK_TRANSFER => [ + 'refund' => false, + 'token_billing' => true, + 'webhooks' => [], + ], + GatewayType::BACS => ['refund' => false, 'token_billing' => true, 'webhooks' => []], + GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => true, 'webhooks' => []], + GatewayType::ACSS => ['refund' => false, 'token_billing' => true, 'webhooks' => []] + ] +]; \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php new file mode 100644 index 000000000000..9492f3036fc1 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php @@ -0,0 +1,4 @@ +
Gateway:
+
{{ $brand }}
+
Account Number:
+
{{ $account_number }}
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php new file mode 100755 index 000000000000..70a0cfb7ba59 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php @@ -0,0 +1,35 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => $gateway->company_gateway->label, 'card_title' =>\App\Models\GatewayType::getAlias($gateway_type_id )]) + +@section('gateway_content') + @if(session()->has('ach_error')) +
+

{{ session('ach_error') }}

+
+ @endif + +
+ @csrf + + + + + + + + + + + + @component('portal.ninja2020.gateways.includes.pay_now', ['id' => 'authorize-bank-account', 'type' => 'submit']) + {{ ctrans('texts.add_payment_method') }} + @endcomponent +
+ + + +@endsection + +@section('gateway_footer') + +@endsection \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php new file mode 100644 index 000000000000..4e6e0c2a0b22 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php @@ -0,0 +1,91 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Direct Debit', 'card_title' => 'Direct Debit']) + +@section('gateway_content') + @if (count($tokens) > 0) + + + @include('portal.ninja2020.gateways.includes.payment_details') + +
+ @csrf + + + + + + + + + + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) + @if (count($tokens) > 0) + @foreach ($tokens as $token) +
+ @endforeach + @endisset +
+ Process Date +
+
+ +
+ {{-- +
+ Insallments +
+
+ +
+ +
+ Frequency +
+
+ +
+ +
+ Comments +
+
+ +
--}} + @endcomponent +
+ @else + @component('portal.ninja2020.components.general.card-element-single', ['title' => 'Direct Debit', 'show_title' => false]) + {{ ctrans('texts.bank_account_not_linked') }} + + {{ ctrans('texts.add_payment_method') }} + @endcomponent + @endif + + @if (count($tokens) > 0) + @include('portal.ninja2020.gateways.includes.pay_now') + @endif +@endsection + +@push('footer') + +@endpush \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php new file mode 100644 index 000000000000..c42672255b00 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php @@ -0,0 +1,31 @@ +
+

+ Account Information +

+ +

+ Enter the information for the bank account +

+
+
+
+ Bank Name +
+
+ +
+
+ +
+
+ Account Number +
+
+ +
+
+ + + + +@include("rotessa::components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php new file mode 100644 index 000000000000..9007501874c4 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php @@ -0,0 +1,59 @@ + +
+

+ Address Information +

+ +

+ Enter the address information for the account holder +

+
+
+
+ Address Line 1 +
+
+ +
+
+ +
+
+ Address Line 2 +
+
+ +
+
+ +
+
+ City +
+
+ +
+
+ +
+
+ Postal Code +
+
+ +
+
+ +
+
+ Country +
+
+ +
+ +
+
+
+ + @include("rotessa::components.dropdowns.country.$country",compact('province_code')) \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php new file mode 100644 index 000000000000..3c37b84741c6 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php @@ -0,0 +1,17 @@ +
+
+ Transit Number +
+
+ +
+
+ +
+
+ Institution Number +
+
+ +
+
diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php new file mode 100644 index 000000000000..07f7abee7b9a --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php @@ -0,0 +1,28 @@ + + +
+
+ Routing Number +
+
+ +
+
+ +
+
+ Account Type +
+
+
+
+ + +
+
+ + +
+
+
+
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php new file mode 100644 index 000000000000..827fc587f5ad --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php @@ -0,0 +1,69 @@ + +
+

+ Account Holder Information +

+ +

+ Enter the information for the account holder +

+
+ +
+
+ Full Name +
+
+ +
+
+ + +
+
+ Email Address +
+
+ +
+
+ +
+
+ Home Phone +
+
+ +
+
+ +
+
+ Other Phone +
+
+ +
+
+ +
+
+ Customer Type +
+
+
+
+ + +
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php new file mode 100644 index 000000000000..f2d7a38a5ecb --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php @@ -0,0 +1,12 @@ +
+
+ Province Code +
+
+ +
+
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php new file mode 100644 index 000000000000..7c33af78d31a --- /dev/null +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php @@ -0,0 +1,12 @@ +
+
+ State +
+
+ +
+
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/autoload.php b/app/PaymentDrivers/Rotessa/vendor/autoload.php new file mode 100644 index 000000000000..ff18c070b772 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/autoload.php @@ -0,0 +1,25 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php b/app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php new file mode 100644 index 000000000000..51e734a774b3 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/LICENSE b/app/PaymentDrivers/Rotessa/vendor/composer/LICENSE new file mode 100644 index 000000000000..f27399a042d9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000000..45e77acc6441 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php @@ -0,0 +1,69 @@ + $baseDir . '/DataProviders/CAProvinces.php', + 'App\\PaymentDrivers\\Rotessa\\DataProviders\\Frequencies' => $baseDir . '/DataProviders/Frequencies.php', + 'App\\PaymentDrivers\\Rotessa\\Events\\CacheGateways' => $baseDir . '/Events/CacheGateways.php', + 'App\\PaymentDrivers\\Rotessa\\Listeners\\CacheGateways' => $baseDir . '/Listeners/CacheGateways.php', + 'App\\PaymentDrivers\\Rotessa\\Models\\Gateway' => $baseDir . '/Models/Gateway.php', + 'App\\PaymentDrivers\\Rotessa\\PaymentMethod' => $baseDir . '/PaymentMethod.php', + 'App\\PaymentDrivers\\Rotessa\\Providers\\EventServiceProvider' => $baseDir . '/Providers/EventServiceProvider.php', + 'App\\PaymentDrivers\\Rotessa\\Providers\\ServiceProvider' => $baseDir . '/Providers/ServiceProvider.php', + 'App\\PaymentDrivers\\Rotessa\\Resources\\Customer' => $baseDir . '/Resources/Customer.php', + 'App\\PaymentDrivers\\Rotessa\\Resources\\Transaction' => $baseDir . '/Resources/Transaction.php', + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AccountComponent' => $baseDir . '/View/Components/Components.php', + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AddressComponent' => $baseDir . '/View/Components/Components.php', + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\ContactComponent' => $baseDir . '/View/Components/Components.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'Omnipay\\Rotessa\\AbstractClient' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php', + 'Omnipay\\Rotessa\\ApiTrait' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php', + 'Omnipay\\Rotessa\\ClientInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php', + 'Omnipay\\Rotessa\\Exception\\BadRequestException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\InternalServerErrorException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\NotAcceptableException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\NotFoundException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\ServiceUnavailableException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\UnauthorizedException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\UnprocessableEntityException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\ValidationException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Gateway' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php', + 'Omnipay\\Rotessa\\Http\\Client' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php', + 'Omnipay\\Rotessa\\Http\\Response\\Response' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php', + 'Omnipay\\Rotessa\\IsValidTypeTrait' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php', + 'Omnipay\\Rotessa\\Message\\Request\\AbstractRequest' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php', + 'Omnipay\\Rotessa\\Message\\Request\\BaseRequest' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php', + 'Omnipay\\Rotessa\\Message\\Request\\DeleteTransactionSchedulesId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php', + 'Omnipay\\Rotessa\\Message\\Request\\GetCustomers' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php', + 'Omnipay\\Rotessa\\Message\\Request\\GetCustomersId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php', + 'Omnipay\\Rotessa\\Message\\Request\\GetTransactionSchedulesId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php', + 'Omnipay\\Rotessa\\Message\\Request\\PatchCustomersId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php', + 'Omnipay\\Rotessa\\Message\\Request\\PatchTransactionSchedulesId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostCustomers' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostCustomersShowWithCustomIdentifier' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedules' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesCreateWithCustomIdentifier' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesUpdateViaPost' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php', + 'Omnipay\\Rotessa\\Message\\Request\\RequestInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php', + 'Omnipay\\Rotessa\\Message\\Response\\AbstractResponse' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php', + 'Omnipay\\Rotessa\\Message\\Response\\BaseResponse' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php', + 'Omnipay\\Rotessa\\Message\\Response\\ResponseInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php', + 'Omnipay\\Rotessa\\Model\\AbstractModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php', + 'Omnipay\\Rotessa\\Model\\BaseModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php', + 'Omnipay\\Rotessa\\Model\\CustomerModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php', + 'Omnipay\\Rotessa\\Model\\CustomerPatchModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php', + 'Omnipay\\Rotessa\\Model\\ModelInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php', + 'Omnipay\\Rotessa\\Model\\TransactionScheduleModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php', + 'Omnipay\\Rotessa\\Model\\TransactionSchedulesIdBodyModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php', + 'Omnipay\\Rotessa\\Model\\TransactionSchedulesUpdateViaPostBodyModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php', + 'Omnipay\\Rotessa\\Object\\Address' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php', + 'Omnipay\\Rotessa\\Object\\AuthorizationType' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php', + 'Omnipay\\Rotessa\\Object\\BankAccountType' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php', + 'Omnipay\\Rotessa\\Object\\Country' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php', + 'Omnipay\\Rotessa\\Object\\CustomerType' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php', + 'Omnipay\\Rotessa\\Object\\Frequency' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php', +); diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php new file mode 100644 index 000000000000..1dfada572dbd --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php @@ -0,0 +1,10 @@ + $baseDir . '/View/Composers/Composer.php', +); diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php new file mode 100644 index 000000000000..15a2ff3ad6d8 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception'), + 'Omnipay\\Rotessa\\' => array($vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa'), + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\' => array($baseDir . '/View/Components'), + 'App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\' => array($baseDir . '/Database/Seeders'), + 'App\\PaymentDrivers\\Rotessa\\' => array($baseDir . '/'), +); diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php new file mode 100644 index 000000000000..c792b343f965 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php @@ -0,0 +1,48 @@ +register(true); + + $filesToLoad = \Composer\Autoload\ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$files; + $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } + }, null, null); + foreach ($filesToLoad as $fileIdentifier => $file) { + $requireFile($fileIdentifier, $file); + } + + return $loader; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php new file mode 100644 index 000000000000..4b6356219f6c --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php @@ -0,0 +1,122 @@ + __DIR__ . '/../..' . '/View/Composers/Composer.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'O' => + array ( + 'Omnipay\\Rotessa\\Exception\\' => 26, + 'Omnipay\\Rotessa\\' => 16, + ), + 'A' => + array ( + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\' => 43, + 'App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\' => 44, + 'App\\PaymentDrivers\\Rotessa\\' => 27, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Omnipay\\Rotessa\\Exception\\' => + array ( + 0 => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception', + ), + 'Omnipay\\Rotessa\\' => + array ( + 0 => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa', + ), + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\' => + array ( + 0 => __DIR__ . '/../..' . '/View/Components', + ), + 'App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\' => + array ( + 0 => __DIR__ . '/../..' . '/Database/Seeders', + ), + 'App\\PaymentDrivers\\Rotessa\\' => + array ( + 0 => __DIR__ . '/../..' . '/', + ), + ); + + public static $classMap = array ( + 'App\\PaymentDrivers\\Rotessa\\DataProviders\\CAProvinces' => __DIR__ . '/../..' . '/DataProviders/CAProvinces.php', + 'App\\PaymentDrivers\\Rotessa\\DataProviders\\Frequencies' => __DIR__ . '/../..' . '/DataProviders/Frequencies.php', + 'App\\PaymentDrivers\\Rotessa\\Events\\CacheGateways' => __DIR__ . '/../..' . '/Events/CacheGateways.php', + 'App\\PaymentDrivers\\Rotessa\\Listeners\\CacheGateways' => __DIR__ . '/../..' . '/Listeners/CacheGateways.php', + 'App\\PaymentDrivers\\Rotessa\\Models\\Gateway' => __DIR__ . '/../..' . '/Models/Gateway.php', + 'App\\PaymentDrivers\\Rotessa\\PaymentMethod' => __DIR__ . '/../..' . '/PaymentMethod.php', + 'App\\PaymentDrivers\\Rotessa\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/Providers/EventServiceProvider.php', + 'App\\PaymentDrivers\\Rotessa\\Providers\\ServiceProvider' => __DIR__ . '/../..' . '/Providers/ServiceProvider.php', + 'App\\PaymentDrivers\\Rotessa\\Resources\\Customer' => __DIR__ . '/../..' . '/Resources/Customer.php', + 'App\\PaymentDrivers\\Rotessa\\Resources\\Transaction' => __DIR__ . '/../..' . '/Resources/Transaction.php', + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AccountComponent' => __DIR__ . '/../..' . '/View/Components/Components.php', + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AddressComponent' => __DIR__ . '/../..' . '/View/Components/Components.php', + 'App\\PaymentDrivers\\Rotessa\\View\\Components\\ContactComponent' => __DIR__ . '/../..' . '/View/Components/Components.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'Omnipay\\Rotessa\\AbstractClient' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php', + 'Omnipay\\Rotessa\\ApiTrait' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php', + 'Omnipay\\Rotessa\\ClientInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php', + 'Omnipay\\Rotessa\\Exception\\BadRequestException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\InternalServerErrorException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\NotAcceptableException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\NotFoundException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\ServiceUnavailableException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\UnauthorizedException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\UnprocessableEntityException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Exception\\ValidationException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', + 'Omnipay\\Rotessa\\Gateway' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php', + 'Omnipay\\Rotessa\\Http\\Client' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php', + 'Omnipay\\Rotessa\\Http\\Response\\Response' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php', + 'Omnipay\\Rotessa\\IsValidTypeTrait' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php', + 'Omnipay\\Rotessa\\Message\\Request\\AbstractRequest' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php', + 'Omnipay\\Rotessa\\Message\\Request\\BaseRequest' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php', + 'Omnipay\\Rotessa\\Message\\Request\\DeleteTransactionSchedulesId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php', + 'Omnipay\\Rotessa\\Message\\Request\\GetCustomers' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php', + 'Omnipay\\Rotessa\\Message\\Request\\GetCustomersId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php', + 'Omnipay\\Rotessa\\Message\\Request\\GetTransactionSchedulesId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php', + 'Omnipay\\Rotessa\\Message\\Request\\PatchCustomersId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php', + 'Omnipay\\Rotessa\\Message\\Request\\PatchTransactionSchedulesId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostCustomers' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostCustomersShowWithCustomIdentifier' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedules' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesCreateWithCustomIdentifier' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php', + 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesUpdateViaPost' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php', + 'Omnipay\\Rotessa\\Message\\Request\\RequestInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php', + 'Omnipay\\Rotessa\\Message\\Response\\AbstractResponse' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php', + 'Omnipay\\Rotessa\\Message\\Response\\BaseResponse' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php', + 'Omnipay\\Rotessa\\Message\\Response\\ResponseInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php', + 'Omnipay\\Rotessa\\Model\\AbstractModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php', + 'Omnipay\\Rotessa\\Model\\BaseModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php', + 'Omnipay\\Rotessa\\Model\\CustomerModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php', + 'Omnipay\\Rotessa\\Model\\CustomerPatchModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php', + 'Omnipay\\Rotessa\\Model\\ModelInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php', + 'Omnipay\\Rotessa\\Model\\TransactionScheduleModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php', + 'Omnipay\\Rotessa\\Model\\TransactionSchedulesIdBodyModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php', + 'Omnipay\\Rotessa\\Model\\TransactionSchedulesUpdateViaPostBodyModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php', + 'Omnipay\\Rotessa\\Object\\Address' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php', + 'Omnipay\\Rotessa\\Object\\AuthorizationType' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php', + 'Omnipay\\Rotessa\\Object\\BankAccountType' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php', + 'Omnipay\\Rotessa\\Object\\Country' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php', + 'Omnipay\\Rotessa\\Object\\CustomerType' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php', + 'Omnipay\\Rotessa\\Object\\Frequency' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/installed.json b/app/PaymentDrivers/Rotessa/vendor/composer/installed.json new file mode 100644 index 000000000000..0e82da86c48f --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/installed.json @@ -0,0 +1,32 @@ +{ + "packages": [ + { + "name": "karneaud/omnipay-rotessa", + "version": "1.0.0-beta", + "version_normalized": "1.0.0.0-beta", + "source": { + "type": "git", + "url": "https://github.com/karneaud/omnipay-rotessa.git", + "reference": "master" + }, + "dist": { + "type": "zip", + "url": "https://github.com/karneaud/omnipay-rotessa/archive/refs/tags/v1.0.0-beta.zip" + }, + "type": "library", + "installation-source": "source", + "autoload": { + "psr-4": { + "Omnipay\\Rotessa\\": "./src/Omnipay/Rotessa/", + "Omnipay\\Rotessa\\Exception\\": "./src/Omnipay/Rotessa/Exception/" + }, + "classmap": [ + "./src/Omnipay/Rotessa/Exception/Exceptions.php" + ] + }, + "install-path": "../karneaud/omnipay-rotessa" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/installed.php b/app/PaymentDrivers/Rotessa/vendor/composer/installed.php new file mode 100644 index 000000000000..6a55666ddf6f --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'name' => 'karneaud/invoiceninja-rotessa', + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'reference' => null, + 'type' => 'laravel-module', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + 'karneaud/invoiceninja-rotessa' => array( + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'reference' => null, + 'type' => 'laravel-module', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'karneaud/omnipay-rotessa' => array( + 'pretty_version' => '1.0.0-beta', + 'version' => '1.0.0.0-beta', + 'reference' => 'master', + 'type' => 'library', + 'install_path' => __DIR__ . '/../karneaud/omnipay-rotessa', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa new file mode 160000 index 000000000000..c3107930d3f9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa @@ -0,0 +1 @@ +Subproject commit c3107930d3f9d656ae3287241ebeded9a1daf8a9 diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php new file mode 100644 index 000000000000..de22db09112a --- /dev/null +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -0,0 +1,109 @@ + BankTransfer::class, + GatewayType::BACS => BankTransfer::class, + GatewayType::ACSS => BankTransfer::class, + GatewayType::DIRECT_DEBIT => BankTransfer::class + ]; + + public function init(): self + { + + $this->gateway = Omnipay::create( + $this->company_gateway->gateway->provider + ); + $this->gateway->initialize((array) $this->company_gateway->getConfig()); + return $this; + } + + public function gatewayTypes(): array + { + $types = []; + + if ($this->client + && isset($this->client->country) + && (in_array($this->client->country->iso_3166_2, ['US']) || ($this->client->gateway_tokens()->where('gateway_type_id', GatewayType::BANK_TRANSFER)->exists())) + ) { + $types[] = GatewayType::BANK_TRANSFER; + } + + if ($this->client + && $this->client->currency() + && in_array($this->client->currency()->code, ['CAD', 'USD']) + && isset($this->client->country) + && in_array($this->client->country->iso_3166_2, ['CA', 'US'])) { + $types[] = GatewayType::DIRECT_DEBIT; + $types[] = GatewayType::ACSS; + } + + return $types; + } + + + public function setPaymentMethod($payment_method_id) + { + $class = self::$methods[$payment_method_id]; + $this->payment_method = new $class($this); + + return $this; + } + + public function authorizeView(array $data) + { + return $this->payment_method->authorizeView($data); + } + + public function authorizeResponse($request) + { + return $this->payment_method->authorizeResponse($request); + } + + public function processPaymentView(array $data) + { + return $this->payment_method->paymentView($data); + } + + public function processPaymentResponse($request) + { + return $this->payment_method->paymentResponse($request); + } + + +} From a428196e92b72db24feb5f50065d9f9db4f052db Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 14 Jun 2024 16:12:31 +0000 Subject: [PATCH 04/85] update aliases --- app/PaymentDrivers/Rotessa/Helpers/helpers.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/PaymentDrivers/Rotessa/Helpers/helpers.php b/app/PaymentDrivers/Rotessa/Helpers/helpers.php index 67a240ca307c..2acfd7289cb6 100644 --- a/app/PaymentDrivers/Rotessa/Helpers/helpers.php +++ b/app/PaymentDrivers/Rotessa/Helpers/helpers.php @@ -3,4 +3,6 @@ include app_path("PaymentDrivers/Rotessa/vendor/autoload.php"); class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\BankTransfer"); -class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\ACH"); \ No newline at end of file +class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\DirectDebit"); +class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Acss"); +class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Bacs"); \ No newline at end of file From b31d65440b2cadf43da330319e950637476d34ed Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 14 Jun 2024 16:13:08 +0000 Subject: [PATCH 05/85] add appropriate class --- app/PaymentDrivers/RotessaPaymentDriver.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index de22db09112a..9313918b3b7e 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -20,6 +20,9 @@ use App\Models\GatewayType; use Omnipay\Rotessa\Gateway; use App\Utils\Traits\MakesHash; use App\PaymentDrivers\BaseDriver; +use App\PaymentDrivers\Rotessa\Bacs; +use App\PaymentDrivers\Rotessa\Acss; +use App\PaymentDrivers\Rotessa\DirectDebit; use App\PaymentDrivers\Rotessa\BankTransfer; class RotessaPaymentDriver extends BaseDriver @@ -38,9 +41,9 @@ class RotessaPaymentDriver extends BaseDriver public static $methods = [ GatewayType::BANK_TRANSFER => BankTransfer::class, - GatewayType::BACS => BankTransfer::class, - GatewayType::ACSS => BankTransfer::class, - GatewayType::DIRECT_DEBIT => BankTransfer::class + GatewayType::BACS => Bacs::class, + GatewayType::ACSS => Acss::class, + GatewayType::DIRECT_DEBIT => DirectDebit::class ]; public function init(): self From 94a4605e38d45c0b105787b6dd08dac5008965fc Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Mon, 17 Jun 2024 00:59:40 +0000 Subject: [PATCH 06/85] update gateway types --- app/PaymentDrivers/Rotessa/Helpers/helpers.php | 4 +--- app/PaymentDrivers/Rotessa/config/gateway_types.php | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/PaymentDrivers/Rotessa/Helpers/helpers.php b/app/PaymentDrivers/Rotessa/Helpers/helpers.php index 2acfd7289cb6..353379e5ca37 100644 --- a/app/PaymentDrivers/Rotessa/Helpers/helpers.php +++ b/app/PaymentDrivers/Rotessa/Helpers/helpers.php @@ -3,6 +3,4 @@ include app_path("PaymentDrivers/Rotessa/vendor/autoload.php"); class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\BankTransfer"); -class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\DirectDebit"); -class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Acss"); -class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Bacs"); \ No newline at end of file +class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Acss"); \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/config/gateway_types.php b/app/PaymentDrivers/Rotessa/config/gateway_types.php index 6ae509ae8dd0..9f851e3a3714 100644 --- a/app/PaymentDrivers/Rotessa/config/gateway_types.php +++ b/app/PaymentDrivers/Rotessa/config/gateway_types.php @@ -9,8 +9,8 @@ return [ 'token_billing' => true, 'webhooks' => [], ], - GatewayType::BACS => ['refund' => false, 'token_billing' => true, 'webhooks' => []], - GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => true, 'webhooks' => []], + //GatewayType::BACS => ['refund' => false, 'token_billing' => true, 'webhooks' => []], + //GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => true, 'webhooks' => []], GatewayType::ACSS => ['refund' => false, 'token_billing' => true, 'webhooks' => []] ] ]; \ No newline at end of file From dbfc1046ec9dd988d388d0084075d621ac2e7f26 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Mon, 17 Jun 2024 01:00:41 +0000 Subject: [PATCH 07/85] refactor classes to facilitiate import customers --- app/PaymentDrivers/Rotessa/PaymentMethod.php | 58 ++--------- app/PaymentDrivers/RotessaPaymentDriver.php | 102 +++++++++++++++++-- 2 files changed, 99 insertions(+), 61 deletions(-) diff --git a/app/PaymentDrivers/Rotessa/PaymentMethod.php b/app/PaymentDrivers/Rotessa/PaymentMethod.php index 9d67edfa6fe3..884b59954647 100755 --- a/app/PaymentDrivers/Rotessa/PaymentMethod.php +++ b/app/PaymentDrivers/Rotessa/PaymentMethod.php @@ -54,12 +54,12 @@ class PaymentMethod implements MethodInterface { $data['contact'] = collect($data['client']->contacts->firstWhere('is_primary', 1)->toArray())->merge([ 'home_phone' => $data['client']->phone, - 'custom_identifier' => $data['client']->number . substr(uniqid(),0,4), + 'custom_identifier' => $data['client']->number, 'name' => $data['client']->name, 'id' => null ] )->all(); $data['gateway'] = $this->rotessa; - $data['gateway_type_id'] = (int) request('method'); + $data['gateway_type_id'] = $data['client']->country->iso_3166_2 == 'US' ? GatewayType::BANK_TRANSFER : ( $data['client']->country->iso_3166_2 == 'CA' ? GatewayType::ACSS : (int) request('method')); $data['account'] = [ 'routing_number' => $data['client']->routing_id, 'country' => $data['client']->country->iso_3166_2 @@ -68,54 +68,6 @@ class PaymentMethod implements MethodInterface return view('rotessa::bank_transfer.authorize', $data); } - - protected function findOrCreateCustomer(Request $request) - { - $result = null; $data = []; - $customer = new Customer( - $request->merge(['id' => $request->input('id') ] + - ['address' => $request->only('address_1','address_2','city','postal_code','province_code','country') ])->all() - ); - try { - $existing = ClientGatewayToken::query() - ->where('company_gateway_id', $this->rotessa->company_gateway->id) - ->where('client_id', $this->rotessa->client->id) - ->first(); - $data = array_filter(Arr::except($customer->jsonSerialize(),['custom_identifier'])); - if ($existing && $existing->token == encrypt($data)) return $existing->gateway_customer_reference; - - $result = $this->rotessa->gateway->authorize($customer->resolve())->send(); - if ($result->isSuccessful()) { - $customer = new Customer($result->getData()); - $data = array_filter(Arr::except($customer->jsonSerialize(),['custom_identifier'])); - $this->rotessa->storeGatewayToken( [ - 'payment_meta' => $customer->resolve() + ['brand' => 'Rotessa'], - 'token' => encrypt($data), - 'payment_method_id' => (int) $request->input("gateway_type_id"), - ], ['gateway_customer_reference' => - $result->getParameter('id') - , 'routing_number' => $result->getParameter('routing_number') ?? $result->getParameter('transit_number')]); - - return $result->getParameter('id'); - } - - throw new \Exception($result->getMessage(), (int) $result->getCode()); - - } catch (\Throwable $th) { - $data = [ - 'transaction_reference' => null, - 'transaction_response' => $th->getMessage(), - 'success' => false, - 'description' => $th->getMessage(), - 'code' =>(int) $th->getCode() - ]; - - SystemLogger::dispatch(['server_response' => is_null($result) ? '' : $result->getData(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->rotessa->client, $this->rotessa->client->company); - - throw $th; - } - } - /** * Handle the authorization page for Rotessa. * @@ -147,7 +99,11 @@ class PaymentMethod implements MethodInterface 'custom_identifier'=>['required_without:customer_id'], 'customer_id'=>['required_without:custom_identifier','integer'], ]); - $this->findOrCreateCustomer($request); + $customer = new Customer( + $request->merge(['custom_identifier' => $request->input('id') ] + + ['address' => $request->only('address_1','address_2','city','postal_code','province_code','country') ])->all() + ); + $this->rotessa->findOrCreateCustomer($customer->resolve()); return redirect()->route('client.payment_methods.index')->withMessage(ctrans('texts.payment_method_added')); diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index 9313918b3b7e..0dd482cb2109 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -18,12 +18,14 @@ use App\Models\PaymentHash; use Illuminate\Support\Arr; use App\Models\GatewayType; use Omnipay\Rotessa\Gateway; +use App\Models\ClientContact; use App\Utils\Traits\MakesHash; +use App\Jobs\Util\SystemLogger; use App\PaymentDrivers\BaseDriver; -use App\PaymentDrivers\Rotessa\Bacs; +use App\Models\ClientGatewayToken; use App\PaymentDrivers\Rotessa\Acss; -use App\PaymentDrivers\Rotessa\DirectDebit; use App\PaymentDrivers\Rotessa\BankTransfer; +use App\PaymentDrivers\Rotessa\Resources\Customer; class RotessaPaymentDriver extends BaseDriver { @@ -41,9 +43,9 @@ class RotessaPaymentDriver extends BaseDriver public static $methods = [ GatewayType::BANK_TRANSFER => BankTransfer::class, - GatewayType::BACS => Bacs::class, + //GatewayType::BACS => Bacs::class, GatewayType::ACSS => Acss::class, - GatewayType::DIRECT_DEBIT => DirectDebit::class + // GatewayType::DIRECT_DEBIT => DirectDebit::class ]; public function init(): self @@ -61,18 +63,18 @@ class RotessaPaymentDriver extends BaseDriver $types = []; if ($this->client - && isset($this->client->country) - && (in_array($this->client->country->iso_3166_2, ['US']) || ($this->client->gateway_tokens()->where('gateway_type_id', GatewayType::BANK_TRANSFER)->exists())) - ) { + && $this->client->currency() + && in_array($this->client->currency()->code, ['USD']) + && isset($this->client->country) + && in_array($this->client->country->iso_3166_2, ['US'])) { $types[] = GatewayType::BANK_TRANSFER; } if ($this->client && $this->client->currency() - && in_array($this->client->currency()->code, ['CAD', 'USD']) + && in_array($this->client->currency()->code, ['CAD']) && isset($this->client->country) - && in_array($this->client->country->iso_3166_2, ['CA', 'US'])) { - $types[] = GatewayType::DIRECT_DEBIT; + && in_array($this->client->country->iso_3166_2, ['CA'])) { $types[] = GatewayType::ACSS; } @@ -108,5 +110,85 @@ class RotessaPaymentDriver extends BaseDriver return $this->payment_method->paymentResponse($request); } + public function importCustomers() { + try { + $customers = collect($this->gateway->getCustomers()->getData())->pluck('email','id'); + $client_emails = $customers->pluck('email')->all(); + $company_id = $this->company_gateway->company->id; + $client_contacts = ClientContact::select('email','id','client_id',)->where('company_id', $companY_id)->whereIn('email', $client_emails )->whereNull('deleted_at')->where('is_deleted', false)->get(); + $client_contacts->each( + function($contact) use ($customers) { + $result = $this->gateway->postCustomersShowWithCustomIdentifier(['custom_identifier' => $contact->id ]); + $customer = new Customer($result->getData()); + $this->findOrCreateCustomer(array_filter($customer->toArray())); + } + ); + } catch (\Throwable $th) { + $data = [ + 'transaction_reference' => null, + 'transaction_response' => $th->getMessage(), + 'success' => false, + 'description' => $th->getMessage(), + 'code' =>(int) $th->getCode() + ]; + + SystemLogger::dispatch(['server_response' => $th->getMessage(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client, $this->client->company); + + + throw $th; + } + + return true; + } + protected function findOrCreateCustomer(array $customer) + { + $result = null; $data = []; $id = null; + + try { + + $id = $data['id'] ?? null; + $existing = ClientGatewayToken::query() + ->where('company_gateway_id', $this->company_gateway->id) + ->where('client_id', $this->client->id) + ->orWhere(function (Builder $query) use ($data, $id) { + $uqery->where('token', encrypt($data)) + ->where('gateway_customer_reference', $id); + }) + ->exists(); + if ($existing) return $existing->gateway_customer_reference; + else if(is_null($id)) { + $result = $this->gateway->authorize($data)->send(); + if ($result->isSuccessful()) { + $customer = new Customer($result->getData()); + $data = array_filter($customer->toArray()); + } + } + + $this->storeGatewayToken( [ + 'payment_meta' => $data + ['brand' => 'Rotessa'], + 'token' => encrypt($data), + 'payment_method_id' => (int) $request->input("gateway_type_id"), + ], ['gateway_customer_reference' => + $result->getParameter('id') + , 'routing_number' => $result->getParameter('routing_number') ?? $result->getParameter('transit_number')]); + + return $result->getParameter('id'); + + throw new \Exception($result->getMessage(), (int) $result->getCode()); + + } catch (\Throwable $th) { + $data = [ + 'transaction_reference' => null, + 'transaction_response' => $th->getMessage(), + 'success' => false, + 'description' => $th->getMessage(), + 'code' =>(int) $th->getCode() + ]; + + SystemLogger::dispatch(['server_response' => is_null($result) ? '' : $result->getData(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client, $this->client->company); + + throw $th; + } + } } From 06f764fa95d5d52c32defb36b52a48cea78630fb Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Mon, 17 Jun 2024 01:01:19 +0000 Subject: [PATCH 08/85] set default country instead --- .../gateways/rotessa/components/address.blade.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php index 9007501874c4..2db721cd4e28 100644 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php @@ -49,10 +49,13 @@ Country
- -
- -
+ @if('US' == $country) + +
+ @else + +
+ @endif
From f124dac7b0114517196aef156254d22a94772203 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Wed, 19 Jun 2024 02:00:24 +0000 Subject: [PATCH 09/85] fix the data passed --- app/PaymentDrivers/Rotessa/PaymentMethod.php | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/PaymentDrivers/Rotessa/PaymentMethod.php b/app/PaymentDrivers/Rotessa/PaymentMethod.php index 884b59954647..7d7d2e025dc4 100755 --- a/app/PaymentDrivers/Rotessa/PaymentMethod.php +++ b/app/PaymentDrivers/Rotessa/PaymentMethod.php @@ -13,6 +13,7 @@ namespace App\PaymentDrivers\Rotessa; use Carbon\Carbon; +use App\Models\Client; use App\Models\Payment; use App\Models\SystemLog; use Illuminate\View\View; @@ -24,9 +25,9 @@ use App\Jobs\Util\SystemLogger; use App\Exceptions\PaymentFailed; use App\Models\ClientGatewayToken; use Illuminate\Http\RedirectResponse; -use App\PaymentDrivers\Rotessa\Resources\Customer; use App\PaymentDrivers\RotessaPaymentDriver; use App\PaymentDrivers\Common\MethodInterface; +use App\PaymentDrivers\Rotessa\Resources\Customer; use App\PaymentDrivers\Rotessa\Resources\Transaction; use App\PaymentDrivers\Rotessa\DataProviders\Frequencies; use Omnipay\Common\Exception\InvalidRequestException; @@ -99,10 +100,7 @@ class PaymentMethod implements MethodInterface 'custom_identifier'=>['required_without:customer_id'], 'customer_id'=>['required_without:custom_identifier','integer'], ]); - $customer = new Customer( - $request->merge(['custom_identifier' => $request->input('id') ] + - ['address' => $request->only('address_1','address_2','city','postal_code','province_code','country') ])->all() - ); + $customer = new Customer( ['address' => $request->only('address_1','address_2','city','postal_code','province_code','country'), 'custom_identifier' => $request->input('custom_identifier') ] + $request->all()); $this->rotessa->findOrCreateCustomer($customer->resolve()); return redirect()->route('client.payment_methods.index')->withMessage(ctrans('texts.payment_method_added')); From 25bdc6025df8e8f1f31c0f91644c84a072ee58b7 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Wed, 19 Jun 2024 02:01:37 +0000 Subject: [PATCH 10/85] fix placholder text --- .../views/gateways/rotessa/components/banks/US/bank.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php index 07f7abee7b9a..891fbe421a9a 100644 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php +++ b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php @@ -5,7 +5,7 @@ Routing Number
- +
From dbae00758159d467264f1fef27d1b5cd22ffa358 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Wed, 19 Jun 2024 02:02:40 +0000 Subject: [PATCH 11/85] refactor methods to properly get accounts and set tokens --- app/PaymentDrivers/RotessaPaymentDriver.php | 69 ++++++++++++--------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index 0dd482cb2109..1bdf61c8547d 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -12,6 +12,7 @@ namespace App\PaymentDrivers; use Omnipay\Omnipay; +use App\Models\Client; use App\Models\Payment; use App\Models\SystemLog; use App\Models\PaymentHash; @@ -24,6 +25,7 @@ use App\Jobs\Util\SystemLogger; use App\PaymentDrivers\BaseDriver; use App\Models\ClientGatewayToken; use App\PaymentDrivers\Rotessa\Acss; +use Illuminate\Database\Eloquent\Builder; use App\PaymentDrivers\Rotessa\BankTransfer; use App\PaymentDrivers\Rotessa\Resources\Customer; @@ -77,7 +79,7 @@ class RotessaPaymentDriver extends BaseDriver && in_array($this->client->country->iso_3166_2, ['CA'])) { $types[] = GatewayType::ACSS; } - + return $types; } @@ -111,18 +113,28 @@ class RotessaPaymentDriver extends BaseDriver } public function importCustomers() { + $this->init(); try { - $customers = collect($this->gateway->getCustomers()->getData())->pluck('email','id'); + $result = $this->gateway->getCustomers()->send(); + if(!$result->isSuccessful()) throw new \Exception($result->getMessage(), (int) $result->getCode()); + + $customers = collect($result->getData())->unique('email'); $client_emails = $customers->pluck('email')->all(); $company_id = $this->company_gateway->company->id; - $client_contacts = ClientContact::select('email','id','client_id',)->where('company_id', $companY_id)->whereIn('email', $client_emails )->whereNull('deleted_at')->where('is_deleted', false)->get(); + $client_contacts = ClientContact::where('company_id', $company_id)->whereIn('email', $client_emails )->where('is_primary', 1 )->whereNull('deleted_at')->get(); + $client_contacts = $client_contacts->map(function($item, $key) use ($customers) { + return array_merge([], (array) $customers->firstWhere("email", $item->email) , ['custom_identifier' => $item->client->number, 'identifier' => $item->client->number ]); + } ); $client_contacts->each( function($contact) use ($customers) { - $result = $this->gateway->postCustomersShowWithCustomIdentifier(['custom_identifier' => $contact->id ]); - $customer = new Customer($result->getData()); - $this->findOrCreateCustomer(array_filter($customer->toArray())); + sleep(10); + $result = $this->gateway->getCustomersId(['id' => ($contact = (object) $contact)->id])->send(); + $this->client = Client::find($contact->custom_identifier); + $customer = (new Customer($result->getData()))->additional(['id' => $contact->id, 'custom_identifier' => $contact->custom_identifier ] ); + $this->findOrCreateCustomer($customer->additional + $customer->jsonSerialize()); } ); + } catch (\Throwable $th) { $data = [ 'transaction_reference' => null, @@ -132,7 +144,7 @@ class RotessaPaymentDriver extends BaseDriver 'code' =>(int) $th->getCode() ]; - SystemLogger::dispatch(['server_response' => $th->getMessage(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client, $this->client->company); + SystemLogger::dispatch(['server_response' => $th->getMessage(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client , $this->company_gateway->company); throw $th; @@ -141,39 +153,38 @@ class RotessaPaymentDriver extends BaseDriver return true; } - protected function findOrCreateCustomer(array $customer) + public function findOrCreateCustomer(array $data) { - $result = null; $data = []; $id = null; - + $result = null; try { - $id = $data['id'] ?? null; $existing = ClientGatewayToken::query() ->where('company_gateway_id', $this->company_gateway->id) ->where('client_id', $this->client->id) - ->orWhere(function (Builder $query) use ($data, $id) { - $uqery->where('token', encrypt($data)) - ->where('gateway_customer_reference', $id); + ->orWhere(function (Builder $query) use ($data) { + $query->where('token', encrypt(join(".", Arr::only($data, 'id','custom_identifier'))) ) + ->where('gateway_customer_reference', Arr::only($data,'id')); }) ->exists(); - if ($existing) return $existing->gateway_customer_reference; - else if(is_null($id)) { + if ($existing) return true; + else if(!Arr::has($data,'id')) { $result = $this->gateway->authorize($data)->send(); - if ($result->isSuccessful()) { - $customer = new Customer($result->getData()); - $data = array_filter($customer->toArray()); - } - } + if (!$result->isSuccessful()) throw new \Exception($result->getMessage(), (int) $result->getCode()); - $this->storeGatewayToken( [ - 'payment_meta' => $data + ['brand' => 'Rotessa'], - 'token' => encrypt($data), - 'payment_method_id' => (int) $request->input("gateway_type_id"), - ], ['gateway_customer_reference' => - $result->getParameter('id') - , 'routing_number' => $result->getParameter('routing_number') ?? $result->getParameter('transit_number')]); + $customer = new Customer($result->getData()); + $data = array_filter($customer->resolve()); + } - return $result->getParameter('id'); + $payment_method_id = Arr::has($data,'address.postal_code') && ((int) $data['address']['postal_code'])? GatewayType::BANK_TRANSFER: GatewayType::ACSS; + $gateway_token = $this->storeGatewayToken( [ + 'payment_meta' => $data + ['brand' => 'Rotessa'], + 'token' => encrypt(join(".", Arr::only($data, 'id','custom_identifier'))), + 'payment_method_id' => $payment_method_id , + ], ['gateway_customer_reference' => + $data['id'] + , 'routing_number' => Arr::has($data,'routing_number') ? $data['routing_number'] : $data['transit_number'] ]); + + return $data['id']; throw new \Exception($result->getMessage(), (int) $result->getCode()); From 5704b1303b92b03825d39533f35977f98c0373c4 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Wed, 19 Jun 2024 13:09:04 +0000 Subject: [PATCH 12/85] commit package --- .../Rotessa/vendor/composer/installed.json | 2 +- .../Rotessa/vendor/composer/installed.php | 2 +- .../Rotessa/vendor/karneaud/omnipay-rotessa | 1 - .../karneaud/omnipay-rotessa/composer.json | 41 + .../karneaud/omnipay-rotessa/composer.lock | 3904 +++++++++++++++++ .../karneaud/omnipay-rotessa/phpunit.xml | 22 + .../src/Omnipay/Rotessa/AbstractClient.php | 21 + .../src/Omnipay/Rotessa/ApiTrait.php | 41 + .../src/Omnipay/Rotessa/ClientInterface.php | 11 + .../Omnipay/Rotessa/Exception/Exceptions.php | 43 + .../src/Omnipay/Rotessa/Gateway.php | 74 + .../src/Omnipay/Rotessa/Http/Client.php | 82 + .../Rotessa/Http/Response/Response.php | 32 + .../src/Omnipay/Rotessa/IsValidTypeTrait.php | 12 + .../Message/Request/AbstractRequest.php | 52 + .../Rotessa/Message/Request/BaseRequest.php | 93 + .../Request/DeleteTransactionSchedulesId.php | 18 + .../Rotessa/Message/Request/GetCustomers.php | 14 + .../Message/Request/GetCustomersId.php | 19 + .../Request/GetTransactionSchedulesId.php | 17 + .../Message/Request/PatchCustomersId.php | 65 + .../Request/PatchTransactionSchedulesId.php | 22 + .../Rotessa/Message/Request/PostCustomers.php | 60 + .../PostCustomersShowWithCustomIdentifier.php | 19 + .../Request/PostTransactionSchedules.php | 31 + ...ionSchedulesCreateWithCustomIdentifier.php | 16 + .../PostTransactionSchedulesUpdateViaPost.php | 24 + .../Message/Request/RequestInterface.php | 10 + .../Message/Response/AbstractResponse.php | 16 + .../Rotessa/Message/Response/BaseResponse.php | 44 + .../Message/Response/ResponseInterface.php | 9 + .../Omnipay/Rotessa/Model/AbstractModel.php | 63 + .../src/Omnipay/Rotessa/Model/BaseModel.php | 24 + .../Omnipay/Rotessa/Model/CustomerModel.php | 94 + .../Rotessa/Model/CustomerPatchModel.php | 16 + .../Omnipay/Rotessa/Model/ModelInterface.php | 8 + .../Model/TransactionScheduleModel.php | 84 + .../Model/TransactionSchedulesIdBodyModel.php | 23 + ...sactionSchedulesUpdateViaPostBodyModel.php | 24 + .../src/Omnipay/Rotessa/Object/Address.php | 53 + .../Rotessa/Object/AuthorizationType.php | 28 + .../Rotessa/Object/BankAccountType.php | 28 + .../src/Omnipay/Rotessa/Object/Country.php | 33 + .../Omnipay/Rotessa/Object/CustomerType.php | 28 + .../src/Omnipay/Rotessa/Object/Frequency.php | 64 + 45 files changed, 5384 insertions(+), 3 deletions(-) delete mode 160000 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/installed.json b/app/PaymentDrivers/Rotessa/vendor/composer/installed.json index 0e82da86c48f..bdb7b5f35a23 100644 --- a/app/PaymentDrivers/Rotessa/vendor/composer/installed.json +++ b/app/PaymentDrivers/Rotessa/vendor/composer/installed.json @@ -27,6 +27,6 @@ "install-path": "../karneaud/omnipay-rotessa" } ], - "dev": true, + "dev": false, "dev-package-names": [] } diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/installed.php b/app/PaymentDrivers/Rotessa/vendor/composer/installed.php index 6a55666ddf6f..bca95fce27b5 100644 --- a/app/PaymentDrivers/Rotessa/vendor/composer/installed.php +++ b/app/PaymentDrivers/Rotessa/vendor/composer/installed.php @@ -7,7 +7,7 @@ 'type' => 'laravel-module', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'dev' => true, + 'dev' => false, ), 'versions' => array( 'karneaud/invoiceninja-rotessa' => array( diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa deleted file mode 160000 index c3107930d3f9..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c3107930d3f9d656ae3287241ebeded9a1daf8a9 diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json new file mode 100644 index 000000000000..0c76d0117400 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json @@ -0,0 +1,41 @@ +{ + "require-dev": { + "omnipay/tests":"*", + "oomphinc/composer-installers-extender": "*", + "http-interop/http-factory-guzzle": "dev-master", + "guzzlehttp/guzzle": "7.9.x-dev" + }, + "name":"karneaud/omnipay-rotessa", + "minimum-stability": "dev", + "config": { + "allow-plugins": { + "php-http/discovery": true, + "composer/installers": true, + "oomphinc/composer-installers-extender": true + } + }, + "require": { + "php": ">=8.0", + "php-http/discovery": "*", + "omnipay/common":"*" + }, + "scripts": { + "generate": [ + "generate" + ], + "tests": [ + "phpunit" + ] + }, + "autoload": { + "psr-4": { + "Omnipay\\Rotessa\\": "src/Omnipay/Rotessa/" + }, + "classmap": ["src/Omnipay/Rotessa/Exception/Exceptions.php"] + }, + "autoload-dev": { + "psr-4": { + "Omnipay\\Rotessa\\Test\\": "tests/" + } + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock new file mode 100644 index 000000000000..ffb9a3621047 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock @@ -0,0 +1,3904 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9f938695686f38324b7fd12e52766427", + "packages": [ + { + "name": "clue/stream-filter", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-20T15:40:13+00:00" + }, + { + "name": "moneyphp/money", + "version": "3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/moneyphp/money.git", + "reference": "0dc40e3791c67e8793e3aa13fead8cf4661ec9cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/moneyphp/money/zipball/0dc40e3791c67e8793e3aa13fead8cf4661ec9cd", + "reference": "0dc40e3791c67e8793e3aa13fead8cf4661ec9cd", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.6" + }, + "require-dev": { + "cache/taggable-cache": "^0.4.0", + "doctrine/instantiator": "^1.0.5", + "ext-bcmath": "*", + "ext-gmp": "*", + "ext-intl": "*", + "florianv/exchanger": "^1.0", + "florianv/swap": "^3.0", + "friends-of-phpspec/phpspec-code-coverage": "^3.1.1 || ^4.3", + "moneyphp/iso-currencies": "^3.2.1", + "php-http/message": "^1.4", + "php-http/mock-client": "^1.0.0", + "phpspec/phpspec": "^3.4.3", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5", + "psr/cache": "^1.0", + "symfony/phpunit-bridge": "^4" + }, + "suggest": { + "ext-bcmath": "Calculate without integer limits", + "ext-gmp": "Calculate without integer limits", + "ext-intl": "Format Money objects with intl", + "florianv/exchanger": "Exchange rates library for PHP", + "florianv/swap": "Exchange rates library for PHP", + "psr/cache-implementation": "Used for Currency caching" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Money\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathias Verraes", + "email": "mathias@verraes.net", + "homepage": "http://verraes.net" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + }, + { + "name": "Frederik Bosch", + "email": "f.bosch@genkgo.nl" + } + ], + "description": "PHP implementation of Fowler's Money pattern", + "homepage": "http://moneyphp.org", + "keywords": [ + "Value Object", + "money", + "vo" + ], + "support": { + "issues": "https://github.com/moneyphp/money/issues", + "source": "https://github.com/moneyphp/money/tree/3.x" + }, + "time": "2022-09-21T07:43:36+00:00" + }, + { + "name": "omnipay/common", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/omnipay-common.git", + "reference": "2eca3823e9069e2c36b6007a090577d5584f9518" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/omnipay-common/zipball/2eca3823e9069e2c36b6007a090577d5584f9518", + "reference": "2eca3823e9069e2c36b6007a090577d5584f9518", + "shasum": "" + }, + "require": { + "moneyphp/money": "^3.1|^4.0.3", + "php": "^7.2|^8", + "php-http/client-implementation": "^1", + "php-http/discovery": "^1.14", + "php-http/message": "^1.5", + "php-http/message-factory": "^1.1", + "symfony/http-foundation": "^2.1|^3|^4|^5|^6|^7" + }, + "require-dev": { + "http-interop/http-factory-guzzle": "^1.1", + "omnipay/tests": "^4.1", + "php-http/guzzle7-adapter": "^1", + "php-http/mock-client": "^1.6", + "squizlabs/php_codesniffer": "^3.8.1" + }, + "suggest": { + "league/omnipay": "The default Omnipay package provides a default HTTP Adapter." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Omnipay\\Common\\": "src/Common" + }, + "classmap": [ + "src/Omnipay.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + }, + { + "name": "Jason Judge", + "email": "jason.judge@consil.co.uk" + }, + { + "name": "Del" + }, + { + "name": "Omnipay Contributors", + "homepage": "https://github.com/thephpleague/omnipay-common/contributors" + } + ], + "description": "Common components for Omnipay payment processing library", + "homepage": "https://github.com/thephpleague/omnipay-common", + "keywords": [ + "gateway", + "merchant", + "omnipay", + "pay", + "payment", + "purchase" + ], + "support": { + "issues": "https://github.com/thephpleague/omnipay-common/issues", + "source": "https://github.com/thephpleague/omnipay-common/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2024-03-08T11:56:40+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "ed16f5209c597c564da6efa54f771e8bda743f07" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/ed16f5209c597c564da6efa54f771e8bda743f07", + "reference": "ed16f5209c597c564da6efa54f771e8bda743f07", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "default-branch": true, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.x" + }, + "time": "2024-04-22T09:10:37+00:00" + }, + { + "name": "php-http/message", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "4cb00d6d316783d357a59ec94c234c50aca515f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/4cb00d6d316783d357a59ec94c234c50aca515f5", + "reference": "4cb00d6d316783d357a59ec94c234c50aca515f5", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.x" + }, + "time": "2024-03-16T19:07:08+00:00" + }, + { + "name": "php-http/message-factory", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0 || ^2.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/1.1.0" + }, + "abandoned": "psr/http-factory", + "time": "2023-04-14T14:16:17+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "6.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b4db6b833035477cb70e18d0ae33cb7c2b521759", + "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.3" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/6.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:22:46+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e642fbe7a7b73cdb05460555289a9057bfd6ead6", + "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-19T06:31:17+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7d191eb4022901cd3d91a816ec5464ca3a08a8aa", + "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/1.x" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-19T06:31:17+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "6e804bbb1bf1e2bfd02771d1c34fa8295c1f1af1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/6e804bbb1bf1e2bfd02771d1c34fa8295c1f1af1", + "reference": "6e804bbb1bf1e2bfd02771d1c34fa8295c1f1af1", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "default-branch": true, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/1.x" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-19T06:31:17+00:00" + } + ], + "packages-dev": [ + { + "name": "composer/installers", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "2a9170263fcd9cc4fd0b50917293c21d6c1a5bfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/2a9170263fcd9cc4fd0b50917293c21d6c1a5bfe", + "reference": "2a9170263fcd9cc4fd0b50917293c21d6c1a5bfe", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "composer/composer": "1.6.* || ^2.0", + "composer/semver": "^1 || ^3", + "phpstan/phpstan": "^0.12.55", + "phpstan/phpstan-phpunit": "^0.12.16", + "symfony/phpunit-bridge": "^5.3", + "symfony/process": "^5" + }, + "default-branch": true, + "type": "composer-plugin", + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-main": "2.x-dev" + }, + "plugin-modifies-install-path": true + }, + "autoload": { + "psr-4": { + "Composer\\Installers\\": "src/Composer/Installers" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "https://composer.github.io/installers/", + "keywords": [ + "Dolibarr", + "Eliasis", + "Hurad", + "ImageCMS", + "Kanboard", + "Lan Management System", + "MODX Evo", + "MantisBT", + "Mautic", + "Maya", + "OXID", + "Plentymarkets", + "Porto", + "RadPHP", + "SMF", + "Starbug", + "Thelia", + "Whmcs", + "WolfCMS", + "agl", + "annotatecms", + "attogram", + "bitrix", + "cakephp", + "chef", + "cockpit", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "eZ Platform", + "elgg", + "expressionengine", + "fuelphp", + "grav", + "installer", + "itop", + "known", + "kohana", + "laravel", + "lavalite", + "lithium", + "magento", + "majima", + "mako", + "matomo", + "mediawiki", + "miaoxing", + "modulework", + "modx", + "moodle", + "osclass", + "pantheon", + "phpbb", + "piwik", + "ppi", + "processwire", + "puppet", + "pxcms", + "reindex", + "roundcube", + "shopware", + "silverstripe", + "sydes", + "sylius", + "tastyigniter", + "wordpress", + "yawik", + "zend", + "zikula" + ], + "support": { + "issues": "https://github.com/composer/installers/issues", + "source": "https://github.com/composer/installers/tree/main" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-10-12T12:07:30+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "9955122a490d18ce723cf9014b196c126222c180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/9955122a490d18ce723cf9014b196c126222c180", + "reference": "9955122a490d18ce723cf9014b196c126222c180", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.4" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2024-05-05T15:09:38+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.x-dev", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93", + "reference": "1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.9" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2024-03-31T19:57:34+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "ab801747cbf7d394d4d435c34364704f9bf048e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/ab801747cbf7d394d4d435c34364704f9bf048e6", + "reference": "ab801747cbf7d394d4d435c34364704f9bf048e6", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "default-branch": true, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2024-03-31T10:06:07+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.9.x-dev", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.9" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-04-17T16:00:37+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "696163addf28bb4e01455254e055a9a75e0ba6c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/696163addf28bb4e01455254e055a9a75e0ba6c4", + "reference": "696163addf28bb4e01455254e055a9a75e0ba6c4", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/master" + }, + "time": "2023-12-14T11:00:58+00:00" + }, + { + "name": "http-interop/http-factory-guzzle", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", + "psr/http-factory": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Factory\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "An HTTP Factory using Guzzle PSR7", + "keywords": [ + "factory", + "http", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + }, + "time": "2021-07-21T13:50:14+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.7.x-dev", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "3f8d3ff1ffe4c552d45c5690c6d825e9310769bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/3f8d3ff1ffe4c552d45c5690c6d825e9310769bf", + "reference": "3f8d3ff1ffe4c552d45c5690c6d825e9310769bf", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": ">=9.6.11 <10.4" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2023-10-01T17:31:30+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "2f5294676c802a62b0549f6bc8983f14294ce369" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/2f5294676c802a62b0549f6bc8983f14294ce369", + "reference": "2f5294676c802a62b0549f6bc8983f14294ce369", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "default-branch": true, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.x" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-02-10T11:10:03+00:00" + }, + { + "name": "nikic/php-parser", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c5ee33df86c06b3278c670f64273b1ba768a0744", + "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "default-branch": true, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/master" + }, + "time": "2024-04-19T12:04:10+00:00" + }, + { + "name": "omnipay/tests", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/omnipay-tests.git", + "reference": "4412f542663a3d1ed45449a7d5282ea03cfe7acd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/omnipay-tests/zipball/4412f542663a3d1ed45449a7d5282ea03cfe7acd", + "reference": "4412f542663a3d1ed45449a7d5282ea03cfe7acd", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1", + "mockery/mockery": "^1.3", + "php": "^7.2|^8", + "php-http/discovery": "^1.14", + "php-http/mock-client": "^1.1", + "phpunit/phpunit": "^8.5.14|^9" + }, + "require-dev": { + "omnipay/common": "^3", + "symfony/http-foundation": "^3|^4|^5" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Omnipay\\Tests\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Adrian Macneil", + "email": "adrian@adrianmacneil.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + }, + { + "name": "Omnipay Contributors", + "homepage": "https://github.com/thephpleague/omnipay-tests/contributors" + } + ], + "description": "Testing components for Omnipay payment processing library", + "homepage": "https://github.com/thephpleague/omnipay-tests", + "keywords": [ + "omnipay" + ], + "support": { + "issues": "https://github.com/thephpleague/omnipay-tests/issues", + "source": "https://github.com/thephpleague/omnipay-tests/tree/v4.1.2" + }, + "time": "2022-10-31T14:30:25+00:00" + }, + { + "name": "oomphinc/composer-installers-extender", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/oomphinc/composer-installers-extender.git", + "reference": "cbf4b6f9a24153b785d09eee755b995ba87bd5f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/cbf4b6f9a24153b785d09eee755b995ba87bd5f9", + "reference": "cbf4b6f9a24153b785d09eee755b995ba87bd5f9", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2.0", + "composer/installers": "^1.0 || ^2.0", + "php": ">=7.1" + }, + "require-dev": { + "composer/composer": "^2.0", + "phpunit/phpunit": "^7.2", + "squizlabs/php_codesniffer": "^3.3" + }, + "default-branch": true, + "type": "composer-plugin", + "extra": { + "class": "OomphInc\\ComposerInstallersExtender\\Plugin" + }, + "autoload": { + "psr-4": { + "OomphInc\\ComposerInstallersExtender\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stephen Beemsterboer", + "email": "stephen@oomphinc.com", + "homepage": "https://github.com/balbuf" + }, + { + "name": "Nathan Dentzau", + "email": "nate@oomphinc.com", + "homepage": "http://oomph.is/ndentzau" + } + ], + "description": "Extend the composer/installers plugin to accept any arbitrary package type.", + "homepage": "http://www.oomphinc.com/", + "support": { + "issues": "https://github.com/oomphinc/composer-installers-extender/issues", + "source": "https://github.com/oomphinc/composer-installers-extender/tree/2.0.1" + }, + "time": "2021-12-15T12:32:42+00:00" + }, + { + "name": "phar-io/manifest", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "d930a40e864109bf128431879b11bccfc09dccfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/d930a40e864109bf128431879b11bccfc09dccfc", + "reference": "d930a40e864109bf128431879b11bccfc09dccfc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.x" + }, + "time": "2024-01-29T12:02:44+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "87779285e14780b0a85209bfed8abd9d5fe0322e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/87779285e14780b0a85209bfed8abd9d5fe0322e", + "reference": "87779285e14780b0a85209bfed8abd9d5fe0322e", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.x" + }, + "time": "2024-03-15T16:17:50+00:00" + }, + { + "name": "php-http/mock-client", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-http/mock-client.git", + "reference": "ae5d717334ecd68199667bea6e9db07276e69a2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/mock-client/zipball/ae5d717334ecd68199667bea6e9db07276e69a2b", + "reference": "ae5d717334ecd68199667bea6e9db07276e69a2b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/client-common": "^2.0", + "php-http/discovery": "^1.16", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0", + "psr/http-factory-implementation": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/polyfill-php80": "^1.17" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Mock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Mock HTTP client", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http", + "mock", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/mock-client/issues", + "source": "https://github.com/php-http/mock-client/tree/1.6.0" + }, + "time": "2023-05-21T08:31:38+00:00" + }, + { + "name": "php-http/promise", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "3352293d9e91513d5508c415835014881b420218" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/3352293d9e91513d5508c415835014881b420218", + "reference": "3352293d9e91513d5508c415835014881b420218", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-22T05:16:32+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "38b24367e1b340aa78b96d7cab042942d917bb84" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/38b24367e1b340aa78b96d7cab042942d917bb84", + "reference": "38b24367e1b340aa78b96d7cab042942d917bb84", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-11T16:23:04+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "bbcbb0823b0e06be56e6b180faa0df1f3b3e2733" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bbcbb0823b0e06be56e6b180faa0df1f3b3e2733", + "reference": "bbcbb0823b0e06be56e6b180faa0df1f3b3e2733", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.28", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-04-30T05:22:06+00:00" + }, + { + "name": "psr/http-client", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b247957a1c8dc81a671770f74b479c0a78a818f1", + "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:46:14+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", + "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T18:47:08+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "6.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "9a3c92b490716ba6771f5beced13c6eda7183eed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a3c92b490716ba6771f5beced13c6eda7183eed", + "reference": "9a3c92b490716ba6771f5beced13c6eda7183eed", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/6.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:22:46+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "http-interop/http-factory-guzzle": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml new file mode 100644 index 000000000000..4f04170e17a9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml @@ -0,0 +1,22 @@ + + + + + ./src + + + + + ./tests + + + ./tests/Model + + + ./tests/Message/Request + + + ./tests/Functional + + + diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php new file mode 100644 index 000000000000..c84a97322717 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php @@ -0,0 +1,21 @@ +default_parameters; + } + + public function setDefaultParameters(array $params) { + $this->default_parameters = $params; + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php new file mode 100644 index 000000000000..5fc947713f3a --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php @@ -0,0 +1,41 @@ +createRequest('GetCustomers', [] ); + } + public function postCustomers(array $params) : RequestInterface { + return $this->createRequest('PostCustomers', $params ); + } + public function getCustomersId(array $params) : RequestInterface { + return $this->createRequest('GetCustomersId', $params ); + } + public function patchCustomersId(array $params) : RequestInterface { + return $this->createRequest('PatchCustomersId', $params ); + } + public function postCustomersShowWithCustomIdentifier(array $params) : RequestInterface { + return $this->createRequest('PostCustomersShowWithCustomIdentifier', $params ); + } + public function getTransactionSchedulesId(array $params) : RequestInterface { + return $this->createRequest('GetTransactionSchedulesId', $params ); + } + public function deleteTransactionSchedulesId(array $params) : RequestInterface { + return $this->createRequest('DeleteTransactionSchedulesId', $params ); + } + public function patchTransactionSchedulesId(array $params) : RequestInterface { + return $this->createRequest('PatchTransactionSchedulesId', $params ); + } + public function postTransactionSchedules(array $params) : RequestInterface { + return $this->createRequest('PostTransactionSchedules', $params ); + } + public function postTransactionSchedulesCreateWithCustomIdentifier(array $params) : RequestInterface { + return $this->createRequest('PostTransactionSchedulesCreateWithCustomIdentifier', $params ); + } + public function postTransactionSchedulesUpdateViaPost(array $params) : RequestInterface { + return $this->createRequest('PostTransactionSchedulesUpdateViaPost', $params ); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php new file mode 100644 index 000000000000..4d08fb0441f2 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php @@ -0,0 +1,11 @@ + 1234567890 ]; + + protected $test_mode = true; + + protected $api_key; + + public function getName() + { + return 'Rotessa'; + } + + public function getDefaultParameters() : array + { + return array_merge($this->default_parameters, array('api_key' => $this->api_key, 'test_mode' => $this->test_mode ) ); + } + + public function setTestMode($value) { + $this->test_mode = $value; + } + + public function getTestMode() { + return $this->test_mode; + } + + protected function createRequest($class_name, ?array $parameters = [] ) :RequestInterface { + $class = null; + $class_name = "Omnipay\\Rotessa\\Message\\Request\\$class_name"; + $parameters = $class_name::hasModel() ? (($parameters = ($class_name::getModel($parameters)))->validate() ? $parameters->jsonSerialize() : null ) : $parameters; + try { + $class = new $class_name($this->httpClient, $this->httpRequest, $this->getDefaultParameters() + $parameters ); + } catch (\Throwable $th) { + throw $th; + } + + return $class; + } + + function setApiKey($value) { + $this->api_key = $value; + } + + function getApiKey() { + return $this->api_key; + } + + function authorize(array $options = []) : RequestInterface { + return $this->postCustomers($options); + } + + function capture(array $options = []) : RequestInterface { + return array_key_exists('customer_id', $options)? $this->postTransactionSchedules($options) : $this->postTransactionSchedulesCreateWithCustomIdentifier($options) ; + } + + function updateCustomer(array $options) : RequestInterface { + return $this->patchCustomersId($options); + } + + function fetchTransaction($id = null) : RequestInterface { + return $this->getTransactionSchedulesId(compact('id')); + } + +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php new file mode 100644 index 000000000000..4c8ea0d29075 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php @@ -0,0 +1,82 @@ +httpClient = $httpClient ?: HttpClientDiscovery::find(); + $this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find(); + parent::__construct($httpClient, $requestFactory); + } + + /** + * @param $method + * @param $uri + * @param array $headers + * @param string|array|resource|StreamInterface|null $body + * @param string $protocolVersion + * @return ResponseInterface + * @throws \Http\Client\Exception + */ + public function request( + $method, + $uri, + array $headers = [], + $body = null, + $protocolVersion = '1.1' + ) { + return $this->sendRequest($method, $uri, $headers, $body, $protocolVersion); + + } + + /** + * @param RequestInterface $request + * @return ResponseInterface + * @throws \Http\Client\Exception + */ + private function sendRequest( $method, + $uri, + array $headers = [], + $body = null, + $protocolVersion = '1.1') + { + + $response = null; + + try { + if( method_exists($this->httpClient, 'sendRequest')) + $response = $this->httpClient->sendRequest( $this->requestFactory->createRequest($method, $uri, $headers, $body, $protocolVersion)); + else $response = $this->httpClient->request($method, $uri, compact('body','headers')); + } catch (\Http\Client\Exception\NetworkException $networkException) { + throw new NetworkException($networkException->getMessage(), $request, $networkException); + } catch (\Exception $exception) { + throw new RequestException($exception->getMessage(), $request, $exception); + } + + return $response; + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php new file mode 100644 index 000000000000..8d665ac8546e --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php @@ -0,0 +1,32 @@ +content, true) )) { + $data = $data['errors'][0]; + $this->reason_phrase = $data['error_message'] ; + $this->reason_code = $data['error_message'] ; + } + } + + public function getReasonPhrase() { + return $this->reason_phrase; + } + + public function getReasonCode() { + return $this->reason_code; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php new file mode 100644 index 000000000000..266ba3036d9d --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php @@ -0,0 +1,12 @@ +api_key = $value; + } + + public function getData() { + try { + if(empty($this->api_key)) throw new \Exception('No Api Key Found!'); + $this->validate( ...array_keys($data = $this->getParameters())); + } catch (\Throwable $th) { + throw new \Omnipay\Rotessa\Exception\ValidationException($th->getMessage() , 600, $th); + } + + return (array) $data; + } + + abstract public function sendData($data) : ResponseInterface; + + abstract protected function sendRequest(string $method, string $endpoint, array $headers = [], array $data = [] ); + + abstract protected function createResponse(array $data) : ResponseInterface; + + abstract public function getEndpointUrl(): string; + + public function getEndpoint() : string { + return $this->endpoint; + } + + public function getTestMode() { + return $this->test_mode; + } + + public function setTestMode($mode) { + $this->test_mode = $mode; + } + } \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php new file mode 100644 index 000000000000..4b68cf0aa2ff --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php @@ -0,0 +1,93 @@ +initialize($model); + } + + protected function sendRequest(string $method, string $endpoint, array $headers = [], array $data = []) + { + /** + * @param $method + * @param $uri + * @param array $headers + * @param string|resource|StreamInterface|null $body + * @param string $protocolVersion + * @return ResponseInterface + * @throws \Http\Client\Exception + */ + $response = $this->httpClient->request($method, $endpoint, $headers, json_encode($data) ) ; + $this->response = new Response ($response->getBody()->getContents(), $response->getStatusCode(), $response->getHeaders(), true); + } + + + protected function createResponse(array $data): ResponseInterface { + + return new BaseResponse($this, $data, $this->response->getStatusCode(), $this->response->getReasonPhrase()); + } + + protected function replacePlaceholder($string, $array) { + $pattern = "/\{([^}]+)\}/"; + $replacement = function($matches) use($array) { + $key = $matches[1]; + if (array_key_exists($key, $array)) { + return $array[$key]; + } else { + return $matches[0]; + } + }; + + return preg_replace_callback($pattern, $replacement, $string); + } + + public function sendData($data) :ResponseInterface { + $headers = [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'Authorization' => "Token token={$this->api_key}" + ]; + + $this->sendRequest( + $this->method, + $this->getEndpointUrl(), + $headers, + $data); + + return $this->createResponse(json_decode($this->response->getContent(), true)); + } + + public function getEndpoint() : string { + return $this->replacePlaceholder($this->endpoint, $this->getParameters()); + } + + public function getEndpointUrl() : string { + return sprintf('https://%s.%s/v%d%s',$this->test_mode ? self::ENVIRONMENT_SANDBOX : self::ENVIRONMENT_LIVE ,$this->base_url, $this->api_version, $this->getEndpoint()); + } + + public static function hasModel() : bool { + return (bool) static::$model; + } + + public static function getModel($parameters = []) { + $class_name = static::$model; + $class_name = "Omnipay\\Rotessa\\Model\\{$class_name}Model"; + return new $class_name($parameters); + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php new file mode 100644 index 000000000000..7c03c42b0dc6 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php @@ -0,0 +1,18 @@ +setParameter('id',$value); + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php new file mode 100644 index 000000000000..17ffde5355d9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php @@ -0,0 +1,14 @@ +setParameter('id',$value); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php new file mode 100644 index 000000000000..47578d06eb8b --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php @@ -0,0 +1,17 @@ +setParameter('id',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php new file mode 100644 index 000000000000..092e378b9fd5 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php @@ -0,0 +1,65 @@ +setParameter('id',$value); + } + public function setCustomIdentifier(string $value) { + $this->setParameter('custom_identifier',$value); + } + public function setName(string $value) { + $this->setParameter('name',$value); + } + public function setEmail(string $value) { + $this->setParameter('email',$value); + } + public function setCustomerType(string $value) { + $this->setParameter('customer_type',$value); + } + public function setHomePhone(string $value) { + $this->setParameter('home_phone',$value); + } + public function setPhone(string $value) { + $this->setParameter('phone',$value); + } + public function setBankName(string $value) { + $this->setParameter('bank_name',$value); + } + public function setInstitutionNumber(string $value) { + $this->setParameter('institution_number',$value); + } + public function setTransitNumber(string $value) { + $this->setParameter('transit_number',$value); + } + public function setBankAccountType(string $value) { + $this->setParameter('bank_account_type',$value); + } + public function setAuthorizationType(string $value) { + $this->setParameter('authorization_type',$value); + } + public function setRoutingNumber(string $value) { + $this->setParameter('routing_number',$value); + } + public function setAccountNumber(string $value) { + $this->setParameter('account_number',$value); + } + public function setAddress(array $value) { + $this->setParameter('address',$value); + } + public function setTransactionSchedules(array $value) { + $this->setParameter('transaction_schedules',$value); + } + public function setFinancialTransactions(array $value) { + $this->setParameter('financial_transactions',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php new file mode 100644 index 000000000000..fa04b9f05da6 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php @@ -0,0 +1,22 @@ +setParameter('id',$value); + } + public function setAmount(int $value) { + $this->setParameter('amount',$value); + } + public function setComment(string $value) { + $this->setParameter('comment',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php new file mode 100644 index 000000000000..a0c54fe65ca9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php @@ -0,0 +1,60 @@ +setParameter('id',$value); + } + public function setCustomIdentifier(string $value) { + $this->setParameter('custom_identifier',$value); + } + public function setName(string $value) { + $this->setParameter('name',$value); + } + public function setEmail(string $value) { + $this->setParameter('email',$value); + } + public function setCustomerType(string $value) { + $this->setParameter('customer_type',$value); + } + public function setHomePhone(string $value) { + $this->setParameter('home_phone',$value); + } + public function setPhone(string $value) { + $this->setParameter('phone',$value); + } + public function setBankName(string $value) { + $this->setParameter('bank_name',$value); + } + public function setInstitutionNumber(string $value = '') { + $this->setParameter('institution_number',$value); + } + public function setTransitNumber(string $value = '') { + $this->setParameter('transit_number',$value); + } + public function setBankAccountType(string $value) { + $this->setParameter('bank_account_type',$value); + } + public function setAuthorizationType(string $value = '') { + $this->setParameter('authorization_type',$value); + } + public function setRoutingNumber(string $value = '') { + $this->setParameter('routing_number',$value); + } + public function setAccountNumber(string $value) { + $this->setParameter('account_number',$value); + } + public function setAddress(array $value) { + $this->setParameter('address',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php new file mode 100644 index 000000000000..d590cb618526 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php @@ -0,0 +1,19 @@ +setParameter('custom_identifier',$value); + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php new file mode 100644 index 000000000000..80e28a7f5083 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php @@ -0,0 +1,31 @@ +setParameter('customer_id',$value); + } + public function setProcessDate(string $value) { + $this->setParameter('process_date',$value); + } + public function setFrequency(string $value) { + $this->setParameter('frequency',$value); + } + public function setInstallments(int $value) { + $this->setParameter('installments',$value); + } + public function setComment(string $value) { + $this->setParameter('comment',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php new file mode 100644 index 000000000000..fd5111dc9a74 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php @@ -0,0 +1,16 @@ +setParameter('custom_identifier',$value); + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php new file mode 100644 index 000000000000..e037c5b4d322 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php @@ -0,0 +1,24 @@ +setParameter('id',$value); + } + public function setAmount(int $value) { + $this->setParameter('amount',$value); + } + public function setComment(string $value) { + $this->setParameter('comment',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php new file mode 100644 index 000000000000..cfbcf0095b24 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php @@ -0,0 +1,10 @@ +code = $code; + $this->message = $message; + } + + public function getData() { + return $this->getParameters(); + } + + public function getCode() { + return (int) $this->code; + } + + public function isSuccessful() { + return $this->code < 300; + } + + public function getMessage() { + return $this->message; + } + + protected function getParameters() { + return $this->data; + } + + public function getParameter(string $key) { + return $this->getParameters()[$key]; + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php new file mode 100644 index 000000000000..080eaab504b1 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php @@ -0,0 +1,9 @@ +required), array_filter($this->getParameters()) ); + if(!empty($required)) throw new ValidationException("Could not validate " . implode(",", array_keys($required)) ); + + return true; + } + + public function __get($key) { + return array_key_exists($key, $this->attributes) ? $this->getParameter($key) : null; + } + + public function __set($key, $value) { + if(array_key_exists($key, $this->attributes)) $this->setParameter($key, $value); + } + + public function __toString() : string { + return json_encode($this); + } + + public function toString() : string { + return $this->__toString(); + } + + public function __toArray() : array { + return $this->getParameters(); + } + + + public function toArray() : array { + return $this->__toArray(); + } + + public function initialize(array $params = []) { + $this->parameters = new ParameterBag; + $parameters = array_merge($this->defaults, $params); + if ($parameters) { + foreach ($this->attributes as $param => $type) { + $value = @$parameters[$param]; + if($value){ + settype($value, $type); + $this->setParameter($param, $value); + } + } + } + + return $this; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php new file mode 100644 index 000000000000..8064662068c4 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php @@ -0,0 +1,24 @@ + "string" + ]; + protected $required = ['id']; + protected $defaults = ['id' => 0 ]; + + public function __construct($parameters = array()) { + $this->initialize($parameters); + } + + public function jsonSerialize() : array { + return array_intersect_key($this->toArray(), array_flip($this->required) ); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php new file mode 100644 index 000000000000..0fd67aea9441 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php @@ -0,0 +1,94 @@ + "string", + "custom_identifier" => "string", + "name" => "string", + "email" => "string", + "customer_type" => "string", + "home_phone" => "string", + "phone" => "string", + "bank_name" => "string", + "institution_number" => "string", + "transit_number" => "string", + "bank_account_type" => "string", + "authorization_type" => "string", + "routing_number" => "string", + "account_number" => "string", + "address" => "object", + "transaction_schedules" => "array", + "financial_transactions" => "array", + "active" => "bool" + ]; + + protected $defaults = ["active" => false,"customer_type" =>'Business',"bank_account_type" =>'Savings',"authorization_type" =>'Online',]; + protected $required = ["name","email","customer_type","home_phone","phone","bank_name","institution_number","transit_number","bank_account_type","authorization_type","routing_number","account_number","address",'custom_identifier']; + + public function validate() : bool { + try { + $country = $this->address->country; + if(!self::isValidCountry($country)) throw new \Exception("Invalid country!"); + + $this->required = array_diff($this->required, Country::isAmerican($country) ? ["institution_number", "transit_number"] : ["bank_account_type", "routing_number"]); + parent::validate(); + if(Country::isCanadian($country) ) { + if(!self::isValidTransitNumber($this->getParameter('transit_number'))) throw new \Exception("Invalid transit number!"); + if(!self::isValidInstitutionNumber($this->getParameter('institution_number'))) throw new \Exception("Invalid institution number!"); + } + if(!self::isValidCustomerType($this->getParameter('customer_type'))) throw new \Exception("Invalid customer type!"); + if(!self::isValidBankAccountType($this->getParameter('bank_account_type'))) throw new \Exception("Invalid bank account type!"); + if(!self::isValidAuthorizationType($this->getParameter('authorization_type'))) throw new \Exception("Invalid authorization type!"); + } catch (\Throwable $th) { + throw new ValidationException($th->getMessage()); + } + + return true; + } + + public static function isValidCountry(string $country ) : bool { + return Country::isValidCountryCode($country) || Country::isValidCountryName($country); + } + + public static function isValidTransitNumber(string $value ) : bool { + return strlen($value) == 5; + } + + public static function isValidInstitutionNumber(string $value ) : bool { + return strlen($value) == 3; + } + + public static function isValidCustomerType(string $value ) : bool { + return CustomerType::isValid($value); + } + + public static function isValidBankAccountType(string $value ) : bool { + return BankAccountType::isValid($value); + } + + public static function isValidAuthorizationType(string $value ) : bool { + return AuthorizationType::isValid($value); + } + + public function toArray() : array { + return [ 'address' => (array) $this->getParameter('address') ] + parent::toArray(); + } + + public function jsonSerialize() : array { + $address = (array) $this->getParameter('address'); + unset($address['country']); + + return compact('address') + parent::jsonSerialize(); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php new file mode 100644 index 000000000000..c2e51d50b135 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php @@ -0,0 +1,16 @@ + "string", + "amount" => "float", + "comment" => "string", + "created_at" => "date", + "financial_transactions" => "array", + "frequency" => "string", + "installments" => "integer", + "next_process_date" => "date", + "process_date" => "date", + "updated_at" => "date", + "customer_id" => "string", + "custom_identifier" => "string", + ]; + + public const DATE_FORMAT = 'F j, Y'; + + protected $defaults = ["amount" =>0.00,"comment" =>' ',"financial_transactions" =>0,"frequency" =>'Once',"installments" =>1]; + + protected $required = ["amount","comment","frequency","installments","process_date"]; + + public function validate() : bool { + try { + parent::validate(); + if(!self::isValidDate($this->process_date)) throw new \Exception("Could not validate date "); + if(!self::isValidFrequency($this->frequency)) throw new \Exception("Invalid frequency"); + if(is_null($this->customer_id) && is_null($this->custom_identifier)) throw new \Exception("customer id or custom identifier is invalid"); + } catch (\Throwable $th) { + throw new ValidationException($th->getMessage()); + } + + return true; + } + + public function jsonSerialize() : array { + return ['customer_id' => $this->getParameter('customer_id'), 'custom_identifier' => $this->getParameter('custom_identifier') ] + parent::jsonSerialize() ; + } + + public function __toArray() : array { + return parent::__toArray() ; + } + + public function initialize(array $params = [] ) { + $o_params = array_intersect_key( + $params = array_intersect_key($params, $this->attributes), + ($attr = array_filter($this->attributes, fn($p) => $p != "date")) + ); + parent::initialize($o_params); + $d_params = array_diff_key($params, $attr); + array_walk($d_params, function($v,$k) { + $this->setParameter($k, self::formatDate( $v) ); + }, ); + + return $this; + } + + public static function isValidDate($date) : bool { + $d = DateTime::createFromFormat(self::DATE_FORMAT, $date); + // Check if the date is valid and matches the format + return $d && $d->format(self::DATE_FORMAT) === $date; + } + + public static function isValidFrequency($value) : bool { + return Frequency::isValid($value); + } + + protected static function formatDate($date) : string { + $d = new DateTime($date); + return $d->format(self::DATE_FORMAT); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php new file mode 100644 index 000000000000..119ac03999cb --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php @@ -0,0 +1,23 @@ + "int", + "comment" => "string", + ]; + + public const DATE_FORMAT = 'Y-m-d H:i:s'; + + private $_is_error = false; + + protected $defaults = ["amount" =>0,"comment" =>'0',]; + + protected $required = ["amount","comment",]; +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php new file mode 100644 index 000000000000..749ae2f6b967 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php @@ -0,0 +1,24 @@ + "int", + "amount" => "int", + "comment" => "string", + ]; + + public const DATE_FORMAT = 'Y-m-d H:i:s'; + + private $_is_error = false; + + protected $defaults = ["amount" =>0,"comment" =>'0',]; + + protected $required = ["amount","comment",]; +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php new file mode 100644 index 000000000000..1c5952b112ef --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php @@ -0,0 +1,53 @@ + "string", + "address_2" => "string", + "city" => "string", + "id" => "int", + "postal_code" => "string", + "province_code" => "string", + "country" => "string" + ]; + + protected $required = ["address_1","address_2","city","postal_code","province_code",]; + + public function jsonSerialize() { + return array_intersect_key($this->getParameters(), array_flip($this->required)); + } + + public function getCountry() : string { + return $this->getParameter('country'); + } + + public function initialize(array $parameters) { + foreach($this->attributes as $param => $type) { + $value = @$parameters[$param] ; + settype($value, $type); + $value = $value ?? null; + $this->parameters->set($param, $value); + } + } + + public function __toArray() : array { + return $this->getParameters(); + } + + public function __toString() : string { + return $this->getFullAddress(); + } + + public function getFullAddress() :string { + $full_address = $this->getParameters(); + extract($full_address); + + return "$address_1 $address_2, $city, $postal_code $province_code, $country"; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php new file mode 100644 index 000000000000..39dcebfa342f --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php @@ -0,0 +1,28 @@ + Date: Sun, 23 Jun 2024 22:30:28 -0400 Subject: [PATCH 13/85] remove --- .../Rotessa/DataProviders/CAProvinces.php | 55 -------- .../Rotessa/DataProviders/Frequencies.php | 19 --- .../Rotessa/Events/CacheGateways.php | 11 -- .../Rotessa/Helpers/helpers.php | 6 - .../Rotessa/Listeners/CacheGateways.php | 28 ----- app/PaymentDrivers/Rotessa/Models/Gateway.php | 23 ---- app/PaymentDrivers/Rotessa/Providers/.gitkeep | 0 .../Providers/EventServiceProvider.php | 21 ---- .../Rotessa/Providers/ServiceProvider.php | 83 ------------ .../Rotessa/View/Components/Components.php | 118 ------------------ .../Rotessa/View/Composers/Composer.php | 16 --- app/PaymentDrivers/Rotessa/composer.json | 61 --------- app/PaymentDrivers/Rotessa/composer.lock | 44 ------- .../Rotessa/config/gateway_types.php | 16 --- .../bank_transfer/CA/details.blade.php | 4 - .../rotessa/bank_transfer/authorize.blade.php | 35 ------ .../rotessa/bank_transfer/pay.blade.php | 91 -------------- .../rotessa/components/account.blade.php | 31 ----- .../rotessa/components/address.blade.php | 62 --------- .../components/banks/CA/bank.blade.php | 17 --- .../components/banks/US/bank.blade.php | 28 ----- .../rotessa/components/contact.blade.php | 69 ---------- .../components/dropdowns/country/CA.blade.php | 12 -- .../components/dropdowns/country/US.blade.php | 12 -- 24 files changed, 862 deletions(-) delete mode 100644 app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php delete mode 100644 app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php delete mode 100644 app/PaymentDrivers/Rotessa/Events/CacheGateways.php delete mode 100644 app/PaymentDrivers/Rotessa/Helpers/helpers.php delete mode 100644 app/PaymentDrivers/Rotessa/Listeners/CacheGateways.php delete mode 100644 app/PaymentDrivers/Rotessa/Models/Gateway.php delete mode 100644 app/PaymentDrivers/Rotessa/Providers/.gitkeep delete mode 100644 app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php delete mode 100644 app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php delete mode 100644 app/PaymentDrivers/Rotessa/View/Components/Components.php delete mode 100644 app/PaymentDrivers/Rotessa/View/Composers/Composer.php delete mode 100644 app/PaymentDrivers/Rotessa/composer.json delete mode 100644 app/PaymentDrivers/Rotessa/composer.lock delete mode 100644 app/PaymentDrivers/Rotessa/config/gateway_types.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php delete mode 100755 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php delete mode 100644 app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php diff --git a/app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php b/app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php deleted file mode 100644 index 275e79cfad4e..000000000000 --- a/app/PaymentDrivers/Rotessa/DataProviders/CAProvinces.php +++ /dev/null @@ -1,55 +0,0 @@ - 'Alberta', - 'BC' => 'British Columbia', - 'MB' => 'Manitoba', - 'NB' => 'New Brunswick', - 'NL' => 'Newfoundland And Labrador', - 'NS' => 'Nova Scotia', - 'ON' => 'Ontario', - 'PE' => 'Prince Edward Island', - 'QC' => 'Quebec', - 'SK' => 'Saskatchewan', - 'NT' => 'Northwest Territories', - 'NU' => 'Nunavut', - 'YT' => 'Yukon' - ]; - - /** - * Get the name of the province or territory for a given abbreviation. - * - * @param string $abbreviation - * @return string - */ - public static function getName($abbreviation) { - return self::$provinces[$abbreviation]; - } - - /** - * Get all provinces and territories. - * - * @return array - */ - public static function get() { - return self::$provinces; - } - - /** - * Get the abbreviation for a given province or territory name. - * - * @param string $name - * @return string - */ - public static function getAbbreviation($name) { - return array_search(ucwords($name), self::$provinces); - } -} diff --git a/app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php b/app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php deleted file mode 100644 index ca5623c1694b..000000000000 --- a/app/PaymentDrivers/Rotessa/DataProviders/Frequencies.php +++ /dev/null @@ -1,19 +0,0 @@ -where('name', 'Rotessa')->isEmpty()) { - $gateways = Gateway::orderBy('id')->get(); - } - - $gateways = $gateways->map(fn($item) => $item->name == 'Rotessa'? RotessaGateway::find($item->toArray()['id']) : $item ); - - Cache::forever('gateways', $gateways); - } -} - diff --git a/app/PaymentDrivers/Rotessa/Models/Gateway.php b/app/PaymentDrivers/Rotessa/Models/Gateway.php deleted file mode 100644 index 55405dbd7f5f..000000000000 --- a/app/PaymentDrivers/Rotessa/Models/Gateway.php +++ /dev/null @@ -1,23 +0,0 @@ -name == 'Rotessa' && empty($options)) { - $options = $gateway_types; - } - - return $options; - } -} - diff --git a/app/PaymentDrivers/Rotessa/Providers/.gitkeep b/app/PaymentDrivers/Rotessa/Providers/.gitkeep deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php b/app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php deleted file mode 100644 index 0d61ecbce482..000000000000 --- a/app/PaymentDrivers/Rotessa/Providers/EventServiceProvider.php +++ /dev/null @@ -1,21 +0,0 @@ - [ - Listener::class, - ], - ]; -} diff --git a/app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php b/app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php deleted file mode 100644 index af11a242f209..000000000000 --- a/app/PaymentDrivers/Rotessa/Providers/ServiceProvider.php +++ /dev/null @@ -1,83 +0,0 @@ -registerConfig(); - $this->registerTranslations(); - $this->registerViews(); - - event(new CacheGateways); - } - - /** - * Register config. - */ - protected function registerConfig(): void - { - $this->mergeConfigFrom(app_path("PaymentDrivers/{$this->moduleName}/config/gateway_types.php"),$this->moduleNameLower); - } - /** - * Register the service provider. - */ - public function register(): void - { - $this->app->register(EventServiceProvider::class); - - } - - /** - * Register translations. - */ - public function registerTranslations(): void - { - $langPath = resource_path('lang/modules/'.$this->moduleNameLower); - - if (is_dir($langPath)) { - $this->loadTranslationsFrom($langPath, $this->moduleNameLower); - $this->loadJsonTranslationsFrom($langPath); - } else { - $this->loadTranslationsFrom(app_path("PaymentDrivers/{$this->moduleName}resources/lang"), $this->moduleNameLower); - $this->loadJsonTranslationsFrom(app_path("PaymentDrivers/{$this->moduleName}resources/lang")); - } - } - - /** - * Register views. - */ - public function registerViews(): void - { - $viewPath = resource_path('views/portal/ninja2020/gateways/'.$this->moduleNameLower); - $sourcePath = app_path('PaymentDrivers/Rotessa/resources/views/gateways/rotessa'); - $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower); - Blade::componentNamespace('App\\PaymentDrivers\\Rotessa\\View\\Components', $this->moduleNameLower); - } - - private function getPublishableViewPaths(): array - { - $paths = [app_path('PaymentDrivers/Rotessa/resources/views/gateways/rotessa')]; - foreach (config('view.paths') as $path) { - if (is_dir($path.'/'.$this->moduleNameLower)) { - $paths[] = $path.'/'.$this->moduleNameLower; - } - } - - return $paths; - } -} diff --git a/app/PaymentDrivers/Rotessa/View/Components/Components.php b/app/PaymentDrivers/Rotessa/View/Components/Components.php deleted file mode 100644 index b18269f35f54..000000000000 --- a/app/PaymentDrivers/Rotessa/View/Components/Components.php +++ /dev/null @@ -1,118 +0,0 @@ -contact = $contact; - $this->attributes = $this->newAttributeBag(Arr::only($this->contact, $this->fields) ); - } - - private $fields = [ - 'name', - 'email', - 'home_phone', - 'phone', - 'custom_identifier', - 'customer_type' , - 'id' - ]; - - private $defaults = [ - 'customer_type' => "Business", - 'customer_identifier' => null, - 'id' => null - ]; - - public function render() - { - return $this->view('rotessa::components.contact', $this->attributes->getAttributes(), $this->defaults ); - } -} - -// Address Component -class AddressComponent extends Component -{ - private $fields = [ - 'address_1', - 'address_2', - 'city', - 'postal_code', - 'province_code', - 'country' - ]; - - private $defaults = [ - 'country' => 'US' - ]; - - public array $address; - - public function __construct(array $address) { - $this->address = $address; - if(strlen($this->address['state']) > 2 ) { - $this->address['state'] = $this->address['country'] == 'US' ? array_search($this->address['state'], USStates::$states) : CAProvinces::getAbbreviation($this->address['state']); - } - - $this->attributes = $this->newAttributeBag( - Arr::only(Arr::mapWithKeys($this->address, function ($item, $key) { - return in_array($key, ['address1','address2','state'])?[ (['address1'=>'address_1','address2'=>'address_2','state'=>'province_code'])[$key] => $item ] :[ $key => $item ]; - }), - $this->fields) ); - } - - - public function render() - { - - return $this->view('rotessa::components.address', $this->attributes->getAttributes(), $this->defaults ); - } -} - -// AmericanBankInfo Component -class AccountComponent extends Component -{ - private $fields = [ - 'bank_account_type', - 'routing_number', - 'institution_number', - 'transit_number', - 'bank_name', - 'country', - 'account_number' - ]; - - private $defaults = [ - 'bank_account_type' => null, - 'routing_number' => null, - 'institution_number' => null, - 'transit_number' => null, - 'bank_name' => ' ', - 'account_number' => null, - 'country' => 'US', - "authorization_type" => 'Online' - ]; - - public array $account; - - public function __construct(array $account) { - $this->account = $account; - $this->attributes = $this->newAttributeBag(Arr::only($this->account, $this->fields) ); - } - - public function render() - { - return $this->view('rotessa::components.account', $this->attributes->getAttributes(), $this->defaults ); - } -} diff --git a/app/PaymentDrivers/Rotessa/View/Composers/Composer.php b/app/PaymentDrivers/Rotessa/View/Composers/Composer.php deleted file mode 100644 index fb3c126a3555..000000000000 --- a/app/PaymentDrivers/Rotessa/View/Composers/Composer.php +++ /dev/null @@ -1,16 +0,0 @@ -with('states', $states); -}); - -// CAProvinces View Composer -View::composer(['rotessa::components.address','rotessa::components.banks.CA.bank','rotessa::components.dropdowns.country.CA'], function ($view) { - $provinces = CAProvinces::get(); - $view->with('provinces', $provinces); -}); \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/composer.json b/app/PaymentDrivers/Rotessa/composer.json deleted file mode 100644 index 6f9ba511a9b4..000000000000 --- a/app/PaymentDrivers/Rotessa/composer.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "karneaud/invoiceninja-rotessa", - "description": "Invoice Ninja with Rotessa gateway", - "type":"laravel-module", - "keywords": [ - "invoice ninja", - "laravel", - "rotessa" - ], - "license": ["Attribution Assurance License","Proprietary License","BSD 3-Clause License"], - "authors": [ - { - "name": "Kendall Arneaud", - "email": "kendall.arneaud@gmail.com" - } - ], - "autoload": { - "classmap": ["./View/Components/Components.php"], - "psr-4": { - "App\\PaymentDrivers\\Rotessa\\":"./", - "App\\PaymentDrivers\\Rotessa\\View\\Components\\":"./View/Components/", - "App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\": "Database/Seeders/" - }, - "files": [ - "./View/Composers/Composer.php" - ] - }, - "config": { - "preferred-install": "dist", - "sort-packages": true, - "optimize-autoloader": true - }, - "repositories": [ - { - "type": "package", - "package": { - "name": "karneaud/omnipay-rotessa", - "source": { - "url": "https://github.com/karneaud/omnipay-rotessa.git", - "type": "git", - "reference": "master" - }, - "version": "1.0.0-beta", - "dist": { - "url": "https://github.com/karneaud/omnipay-rotessa/archive/refs/tags/v1.0.0-beta.zip", - "type": "zip" - }, - "autoload": { - "psr-4": { - "Omnipay\\Rotessa\\":"./src/Omnipay/Rotessa/", - "Omnipay\\Rotessa\\Exception\\":"./src/Omnipay/Rotessa/Exception/" - }, - "classmap": ["./src/Omnipay/Rotessa/Exception/Exceptions.php"] - } - } - } - ], - "require": { - "karneaud/omnipay-rotessa": "v1.0.0-beta" - } -} diff --git a/app/PaymentDrivers/Rotessa/composer.lock b/app/PaymentDrivers/Rotessa/composer.lock deleted file mode 100644 index 24dc1719cffb..000000000000 --- a/app/PaymentDrivers/Rotessa/composer.lock +++ /dev/null @@ -1,44 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "4c8b93bd9cd92f484502fc665fdbe826", - "packages": [ - { - "name": "karneaud/omnipay-rotessa", - "version": "1.0.0-beta", - "source": { - "type": "git", - "url": "https://github.com/karneaud/omnipay-rotessa.git", - "reference": "master" - }, - "dist": { - "type": "zip", - "url": "https://github.com/karneaud/omnipay-rotessa/archive/refs/tags/v1.0.0-beta.zip" - }, - "type": "library", - "autoload": { - "psr-4": { - "Omnipay\\Rotessa\\": "./src/Omnipay/Rotessa/", - "Omnipay\\Rotessa\\Exception\\": "./src/Omnipay/Rotessa/Exception/" - }, - "classmap": [ - "./src/Omnipay/Rotessa/Exception/Exceptions.php" - ] - } - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "karneaud/omnipay-rotessa": 10 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.6.0" -} diff --git a/app/PaymentDrivers/Rotessa/config/gateway_types.php b/app/PaymentDrivers/Rotessa/config/gateway_types.php deleted file mode 100644 index 9f851e3a3714..000000000000 --- a/app/PaymentDrivers/Rotessa/config/gateway_types.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - GatewayType::BANK_TRANSFER => [ - 'refund' => false, - 'token_billing' => true, - 'webhooks' => [], - ], - //GatewayType::BACS => ['refund' => false, 'token_billing' => true, 'webhooks' => []], - //GatewayType::DIRECT_DEBIT => ['refund' => false, 'token_billing' => true, 'webhooks' => []], - GatewayType::ACSS => ['refund' => false, 'token_billing' => true, 'webhooks' => []] - ] -]; \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php deleted file mode 100644 index 9492f3036fc1..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/CA/details.blade.php +++ /dev/null @@ -1,4 +0,0 @@ -
Gateway:
-
{{ $brand }}
-
Account Number:
-
{{ $account_number }}
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php deleted file mode 100755 index 70a0cfb7ba59..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/authorize.blade.php +++ /dev/null @@ -1,35 +0,0 @@ -@extends('portal.ninja2020.layout.payments', ['gateway_title' => $gateway->company_gateway->label, 'card_title' =>\App\Models\GatewayType::getAlias($gateway_type_id )]) - -@section('gateway_content') - @if(session()->has('ach_error')) -
-

{{ session('ach_error') }}

-
- @endif - -
- @csrf - - - - - - - - - - - - @component('portal.ninja2020.gateways.includes.pay_now', ['id' => 'authorize-bank-account', 'type' => 'submit']) - {{ ctrans('texts.add_payment_method') }} - @endcomponent -
- - - -@endsection - -@section('gateway_footer') - -@endsection \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php deleted file mode 100644 index 4e6e0c2a0b22..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/bank_transfer/pay.blade.php +++ /dev/null @@ -1,91 +0,0 @@ -@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Direct Debit', 'card_title' => 'Direct Debit']) - -@section('gateway_content') - @if (count($tokens) > 0) - - - @include('portal.ninja2020.gateways.includes.payment_details') - -
- @csrf - - - - - - - - - - - - @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) - @if (count($tokens) > 0) - @foreach ($tokens as $token) -
- @endforeach - @endisset -
- Process Date -
-
- -
- {{-- -
- Insallments -
-
- -
- -
- Frequency -
-
- -
- -
- Comments -
-
- -
--}} - @endcomponent -
- @else - @component('portal.ninja2020.components.general.card-element-single', ['title' => 'Direct Debit', 'show_title' => false]) - {{ ctrans('texts.bank_account_not_linked') }} - - {{ ctrans('texts.add_payment_method') }} - @endcomponent - @endif - - @if (count($tokens) > 0) - @include('portal.ninja2020.gateways.includes.pay_now') - @endif -@endsection - -@push('footer') - -@endpush \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php deleted file mode 100644 index c42672255b00..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/account.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -
-

- Account Information -

- -

- Enter the information for the bank account -

-
-
-
- Bank Name -
-
- -
-
- -
-
- Account Number -
-
- -
-
- - - - -@include("rotessa::components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php deleted file mode 100644 index 2db721cd4e28..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/address.blade.php +++ /dev/null @@ -1,62 +0,0 @@ - -
-

- Address Information -

- -

- Enter the address information for the account holder -

-
-
-
- Address Line 1 -
-
- -
-
- -
-
- Address Line 2 -
-
- -
-
- -
-
- City -
-
- -
-
- -
-
- Postal Code -
-
- -
-
- -
-
- Country -
-
- @if('US' == $country) - -
- @else - -
- @endif -
-
- - @include("rotessa::components.dropdowns.country.$country",compact('province_code')) \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php deleted file mode 100644 index 3c37b84741c6..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/CA/bank.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -
-
- Transit Number -
-
- -
-
- -
-
- Institution Number -
-
- -
-
diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php deleted file mode 100644 index 891fbe421a9a..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/banks/US/bank.blade.php +++ /dev/null @@ -1,28 +0,0 @@ - - -
-
- Routing Number -
-
- -
-
- -
-
- Account Type -
-
-
-
- - -
-
- - -
-
-
-
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php deleted file mode 100644 index 827fc587f5ad..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/contact.blade.php +++ /dev/null @@ -1,69 +0,0 @@ - -
-

- Account Holder Information -

- -

- Enter the information for the account holder -

-
- -
-
- Full Name -
-
- -
-
- - -
-
- Email Address -
-
- -
-
- -
-
- Home Phone -
-
- -
-
- -
-
- Other Phone -
-
- -
-
- -
-
- Customer Type -
-
-
-
- - -
-
- - -
-
-
-
- - - - \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php deleted file mode 100644 index f2d7a38a5ecb..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/CA.blade.php +++ /dev/null @@ -1,12 +0,0 @@ -
-
- Province Code -
-
- -
-
\ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php b/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php deleted file mode 100644 index 7c33af78d31a..000000000000 --- a/app/PaymentDrivers/Rotessa/resources/views/gateways/rotessa/components/dropdowns/country/US.blade.php +++ /dev/null @@ -1,12 +0,0 @@ -
-
- State -
-
- -
-
\ No newline at end of file From e62045e8d4ed36628739b353cab592de4c40d7cf Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:31:03 -0400 Subject: [PATCH 14/85] add data providers for privinces and installment --- app/DataProviders/CAProvinces.php | 55 +++++++++++++++++++++++++++++++ app/DataProviders/Frequencies.php | 19 +++++++++++ 2 files changed, 74 insertions(+) create mode 100644 app/DataProviders/CAProvinces.php create mode 100644 app/DataProviders/Frequencies.php diff --git a/app/DataProviders/CAProvinces.php b/app/DataProviders/CAProvinces.php new file mode 100644 index 000000000000..251f6e7c9262 --- /dev/null +++ b/app/DataProviders/CAProvinces.php @@ -0,0 +1,55 @@ + 'Alberta', + 'BC' => 'British Columbia', + 'MB' => 'Manitoba', + 'NB' => 'New Brunswick', + 'NL' => 'Newfoundland And Labrador', + 'NS' => 'Nova Scotia', + 'ON' => 'Ontario', + 'PE' => 'Prince Edward Island', + 'QC' => 'Quebec', + 'SK' => 'Saskatchewan', + 'NT' => 'Northwest Territories', + 'NU' => 'Nunavut', + 'YT' => 'Yukon' + ]; + + /** + * Get the name of the province or territory for a given abbreviation. + * + * @param string $abbreviation + * @return string + */ + public static function getName($abbreviation) { + return self::$provinces[$abbreviation]; + } + + /** + * Get all provinces and territories. + * + * @return array + */ + public static function get() { + return self::$provinces; + } + + /** + * Get the abbreviation for a given province or territory name. + * + * @param string $name + * @return string + */ + public static function getAbbreviation($name) { + return array_search(ucwords($name), self::$provinces); + } +} diff --git a/app/DataProviders/Frequencies.php b/app/DataProviders/Frequencies.php new file mode 100644 index 000000000000..503d40973dc4 --- /dev/null +++ b/app/DataProviders/Frequencies.php @@ -0,0 +1,19 @@ + Date: Sun, 23 Jun 2024 22:31:36 -0400 Subject: [PATCH 15/85] add default attributes for rotessa gateway views --- app/Http/ViewComposers/RotessaComposer.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 app/Http/ViewComposers/RotessaComposer.php diff --git a/app/Http/ViewComposers/RotessaComposer.php b/app/Http/ViewComposers/RotessaComposer.php new file mode 100644 index 000000000000..5501fac81207 --- /dev/null +++ b/app/Http/ViewComposers/RotessaComposer.php @@ -0,0 +1,16 @@ +with('states', $states); +}); + +// CAProvinces View Composer +View::composer(['rotessa::components.address','rotessa::components.banks.CA.bank','rotessa::components.dropdowns.country.CA'], function ($view) { + $provinces = CAProvinces::get(); + $view->with('provinces', $provinces); +}); \ No newline at end of file From 3db5c34a3810916774d0c01a97772dc08de1c81a Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:31:53 -0400 Subject: [PATCH 16/85] hanlde attributes for rotessa views via components --- .../Components/RotessaComponents.php | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 app/Http/ViewComposers/Components/RotessaComponents.php diff --git a/app/Http/ViewComposers/Components/RotessaComponents.php b/app/Http/ViewComposers/Components/RotessaComponents.php new file mode 100644 index 000000000000..2af96e9f0fd7 --- /dev/null +++ b/app/Http/ViewComposers/Components/RotessaComponents.php @@ -0,0 +1,118 @@ +contact = $contact; + $this->attributes = $this->newAttributeBag(Arr::only($this->contact, $this->fields) ); + } + + private $fields = [ + 'name', + 'email', + 'home_phone', + 'phone', + 'custom_identifier', + 'customer_type' , + 'id' + ]; + + private $defaults = [ + 'customer_type' => "Business", + 'customer_identifier' => null, + 'id' => null + ]; + + public function render() + { + return $this->view('rotessa::components.contact', $this->attributes->getAttributes(), $this->defaults ); + } +} + +// Address Component +class AddressComponent extends Component +{ + private $fields = [ + 'address_1', + 'address_2', + 'city', + 'postal_code', + 'province_code', + 'country' + ]; + + private $defaults = [ + 'country' => 'US' + ]; + + public array $address; + + public function __construct(array $address) { + $this->address = $address; + if(strlen($this->address['state']) > 2 ) { + $this->address['state'] = $this->address['country'] == 'US' ? array_search($this->address['state'], USStates::$states) : CAProvinces::getAbbreviation($this->address['state']); + } + + $this->attributes = $this->newAttributeBag( + Arr::only(Arr::mapWithKeys($this->address, function ($item, $key) { + return in_array($key, ['address1','address2','state'])?[ (['address1'=>'address_1','address2'=>'address_2','state'=>'province_code'])[$key] => $item ] :[ $key => $item ]; + }), + $this->fields) ); + } + + + public function render() + { + + return $this->view('rotessa::components.address', $this->attributes->getAttributes(), $this->defaults ); + } +} + +// AmericanBankInfo Component +class AccountComponent extends Component +{ + private $fields = [ + 'bank_account_type', + 'routing_number', + 'institution_number', + 'transit_number', + 'bank_name', + 'country', + 'account_number' + ]; + + private $defaults = [ + 'bank_account_type' => null, + 'routing_number' => null, + 'institution_number' => null, + 'transit_number' => null, + 'bank_name' => ' ', + 'account_number' => null, + 'country' => 'US', + "authorization_type" => 'Online' + ]; + + public array $account; + + public function __construct(array $account) { + $this->account = $account; + $this->attributes = $this->newAttributeBag(Arr::only($this->account, $this->fields) ); + } + + public function render() + { + return $this->view('rotessa::components.account', $this->attributes->getAttributes(), $this->defaults ); + } +} From cf45e647c3b0782a49dbc8a6118479ac2058c392 Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:32:14 -0400 Subject: [PATCH 17/85] add rotessa gateway payment methods --- app/Models/Gateway.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index e62221d8b02e..455016380079 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -105,7 +105,9 @@ class Gateway extends StaticModel $link = 'https://www.forte.net/'; } elseif ($this->id == 62) { $link = 'https://docs.btcpayserver.org'; - } + } elseif ($this->id == 4002) { + $link = 'https://rotessa.com'; + } return $link; } @@ -224,6 +226,15 @@ class Gateway extends StaticModel return [ GatewayType::CRYPTO => ['refund' => true, 'token_billing' => false, 'webhooks' => ['confirmed', 'paid_out', 'failed', 'fulfilled']], ]; //BTCPay + case 4002: + return [ + GatewayType::BANK_TRANSFER => [ + 'refund' => false, + 'token_billing' => true, + 'webhooks' => [], + ], + GatewayType::ACSS => ['refund' => false, 'token_billing' => true, 'webhooks' => []] + ]; // Rotessa default: return []; } From 71633db6162fcaa6a3f2f459f3a54634427263dc Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:32:28 -0400 Subject: [PATCH 18/85] update --- app/PaymentDrivers/Rotessa/PaymentMethod.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/PaymentDrivers/Rotessa/PaymentMethod.php b/app/PaymentDrivers/Rotessa/PaymentMethod.php index 7d7d2e025dc4..903b681f70fe 100755 --- a/app/PaymentDrivers/Rotessa/PaymentMethod.php +++ b/app/PaymentDrivers/Rotessa/PaymentMethod.php @@ -23,13 +23,13 @@ use Illuminate\Support\Arr; use Illuminate\Http\Request; use App\Jobs\Util\SystemLogger; use App\Exceptions\PaymentFailed; +use App\DataProviders\Frequencies; use App\Models\ClientGatewayToken; use Illuminate\Http\RedirectResponse; use App\PaymentDrivers\RotessaPaymentDriver; use App\PaymentDrivers\Common\MethodInterface; use App\PaymentDrivers\Rotessa\Resources\Customer; use App\PaymentDrivers\Rotessa\Resources\Transaction; -use App\PaymentDrivers\Rotessa\DataProviders\Frequencies; use Omnipay\Common\Exception\InvalidRequestException; use Omnipay\Common\Exception\InvalidResponseException; use App\Exceptions\Ninja\ClientPortalAuthorizationException; From 2c1c095804f47ce8ce48b6ed72aa5c8668dab05c Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:32:54 -0400 Subject: [PATCH 19/85] add service provider for rotessa gateway --- app/Providers/RotessaServiceProvider.php | 49 ++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 app/Providers/RotessaServiceProvider.php diff --git a/app/Providers/RotessaServiceProvider.php b/app/Providers/RotessaServiceProvider.php new file mode 100644 index 000000000000..0497ab0a4cf7 --- /dev/null +++ b/app/Providers/RotessaServiceProvider.php @@ -0,0 +1,49 @@ +registerViews(); + } + + /** + * Register views. + */ + public function registerViews(): void + { + $viewPath = resource_path('views/portal/ninja2020/gateways/'.$this->moduleNameLower); + $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$viewPath]), $this->moduleNameLower); + Blade::componentNamespace('App\\Http\\ViewComposers\\Components', $this->moduleNameLower); + } + + private function getPublishableViewPaths(): array + { + $paths = []; + foreach (config('view.paths') as $path) { + if (is_dir($path.'/'.$this->moduleNameLower)) { + $paths[] = $path.'/'.$this->moduleNameLower; + } + } + + return $paths; + } +} From a626073a740c07d8de82ff76a4663e0ac4bd5a4f Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:33:15 -0400 Subject: [PATCH 20/85] add rotessa service provider to config --- config/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/app.php b/config/app.php index 932e26f23a29..23dddaa63986 100644 --- a/config/app.php +++ b/config/app.php @@ -201,7 +201,7 @@ return [ App\Providers\ClientPortalServiceProvider::class, App\Providers\NinjaTranslationServiceProvider::class, App\Providers\StaticServiceProvider::class, - App\PaymentDrivers\Rotessa\Providers\ServiceProvider::class + App\Providers\RotessaServiceProvider::class ], /* From b101b5829497ddb310e7eca66e3bc3b34286ac80 Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:33:45 -0400 Subject: [PATCH 21/85] add migration to add rotessa payment gateway --- .../migrations/2024_06_11_231143_add_rotessa_gateway.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php index 264c8b0ee604..eaade6bb4357 100644 --- a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php +++ b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php @@ -1,8 +1,8 @@ id = $count + 4000; + $gateway->id = 4002; $gateway->name = 'Rotessa'; $gateway->key = Str::lower(Str::random(32)); $gateway->provider = 'Rotessa'; @@ -41,7 +41,7 @@ return new class extends Migration $gateway->default_gateway_type_id = 2; $gateway->save(); - Gateway::query()->where('name','=', 'Rotessa')->update(['visible' => 1]); + Gateway::query()->where('name','=', 'Rotessa')->update(['visible' => 1]); \DB::statement('SET FOREIGN_KEY_CHECKS=1;'); } From c812717d52ee563434611fb5845f81a1db70a83f Mon Sep 17 00:00:00 2001 From: karneaud Date: Sun, 23 Jun 2024 22:34:38 -0400 Subject: [PATCH 22/85] add views for rotessa payment gateway --- .../bank_transfer/CA/details.blade.php | 4 + .../rotessa/bank_transfer/authorize.blade.php | 35 +++++++ .../rotessa/bank_transfer/pay.blade.php | 91 +++++++++++++++++++ .../rotessa/components/account.blade.php | 31 +++++++ .../rotessa/components/address.blade.php | 62 +++++++++++++ .../components/banks/CA/bank.blade.php | 17 ++++ .../components/banks/US/bank.blade.php | 28 ++++++ .../rotessa/components/contact.blade.php | 69 ++++++++++++++ .../components/dropdowns/country/CA.blade.php | 12 +++ .../components/dropdowns/country/US.blade.php | 12 +++ 10 files changed, 361 insertions(+) create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php create mode 100755 resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/authorize.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php create mode 100644 resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php new file mode 100644 index 000000000000..9492f3036fc1 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php @@ -0,0 +1,4 @@ +
Gateway:
+
{{ $brand }}
+
Account Number:
+
{{ $account_number }}
\ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/authorize.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/authorize.blade.php new file mode 100755 index 000000000000..70a0cfb7ba59 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/authorize.blade.php @@ -0,0 +1,35 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => $gateway->company_gateway->label, 'card_title' =>\App\Models\GatewayType::getAlias($gateway_type_id )]) + +@section('gateway_content') + @if(session()->has('ach_error')) +
+

{{ session('ach_error') }}

+
+ @endif + +
+ @csrf + + + + + + + + + + + + @component('portal.ninja2020.gateways.includes.pay_now', ['id' => 'authorize-bank-account', 'type' => 'submit']) + {{ ctrans('texts.add_payment_method') }} + @endcomponent +
+ + + +@endsection + +@section('gateway_footer') + +@endsection \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php new file mode 100644 index 000000000000..4e6e0c2a0b22 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php @@ -0,0 +1,91 @@ +@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Direct Debit', 'card_title' => 'Direct Debit']) + +@section('gateway_content') + @if (count($tokens) > 0) + + + @include('portal.ninja2020.gateways.includes.payment_details') + +
+ @csrf + + + + + + + + + + + + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) + @if (count($tokens) > 0) + @foreach ($tokens as $token) +
+ @endforeach + @endisset +
+ Process Date +
+
+ +
+ {{-- +
+ Insallments +
+
+ +
+ +
+ Frequency +
+
+ +
+ +
+ Comments +
+
+ +
--}} + @endcomponent +
+ @else + @component('portal.ninja2020.components.general.card-element-single', ['title' => 'Direct Debit', 'show_title' => false]) + {{ ctrans('texts.bank_account_not_linked') }} + + {{ ctrans('texts.add_payment_method') }} + @endcomponent + @endif + + @if (count($tokens) > 0) + @include('portal.ninja2020.gateways.includes.pay_now') + @endif +@endsection + +@push('footer') + +@endpush \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php new file mode 100644 index 000000000000..c42672255b00 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php @@ -0,0 +1,31 @@ +
+

+ Account Information +

+ +

+ Enter the information for the bank account +

+
+
+
+ Bank Name +
+
+ +
+
+ +
+
+ Account Number +
+
+ +
+
+ + + + +@include("rotessa::components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php new file mode 100644 index 000000000000..2db721cd4e28 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php @@ -0,0 +1,62 @@ + +
+

+ Address Information +

+ +

+ Enter the address information for the account holder +

+
+
+
+ Address Line 1 +
+
+ +
+
+ +
+
+ Address Line 2 +
+
+ +
+
+ +
+
+ City +
+
+ +
+
+ +
+
+ Postal Code +
+
+ +
+
+ +
+
+ Country +
+
+ @if('US' == $country) + +
+ @else + +
+ @endif +
+
+ + @include("rotessa::components.dropdowns.country.$country",compact('province_code')) \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php new file mode 100644 index 000000000000..3c37b84741c6 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php @@ -0,0 +1,17 @@ +
+
+ Transit Number +
+
+ +
+
+ +
+
+ Institution Number +
+
+ +
+
diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php new file mode 100644 index 000000000000..891fbe421a9a --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php @@ -0,0 +1,28 @@ + + +
+
+ Routing Number +
+
+ +
+
+ +
+
+ Account Type +
+
+
+
+ + +
+
+ + +
+
+
+
\ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php new file mode 100644 index 000000000000..827fc587f5ad --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php @@ -0,0 +1,69 @@ + +
+

+ Account Holder Information +

+ +

+ Enter the information for the account holder +

+
+ +
+
+ Full Name +
+
+ +
+
+ + +
+
+ Email Address +
+
+ +
+
+ +
+
+ Home Phone +
+
+ +
+
+ +
+
+ Other Phone +
+
+ +
+
+ +
+
+ Customer Type +
+
+
+
+ + +
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php new file mode 100644 index 000000000000..f2d7a38a5ecb --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php @@ -0,0 +1,12 @@ +
+
+ Province Code +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php new file mode 100644 index 000000000000..7c33af78d31a --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php @@ -0,0 +1,12 @@ +
+
+ State +
+
+ +
+
\ No newline at end of file From 33d989578f0f9b8f3aa99556c67dab10e8692f1a Mon Sep 17 00:00:00 2001 From: karneaud Date: Mon, 24 Jun 2024 14:26:15 -0400 Subject: [PATCH 23/85] add rotessa dependency class maps --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 17770ee2e87c..70e9c4ab6032 100644 --- a/composer.json +++ b/composer.json @@ -131,7 +131,8 @@ "app/Helpers/TranslationHelper.php", "app/Helpers/Generic.php", "app/Helpers/ClientPortal.php" - ] + ], + "classmap": ["app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/","app/Http/ViewComposers/Components/RotessaComponents.php"] }, "autoload-dev": { "psr-4": { From 9fec96b513dd69a9de57a017ae79980de45e933a Mon Sep 17 00:00:00 2001 From: karneaud Date: Mon, 24 Jun 2024 14:27:26 -0400 Subject: [PATCH 24/85] fix class name --- app/Providers/RotessaServiceProvider.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/Providers/RotessaServiceProvider.php b/app/Providers/RotessaServiceProvider.php index 0497ab0a4cf7..951789cdaa04 100644 --- a/app/Providers/RotessaServiceProvider.php +++ b/app/Providers/RotessaServiceProvider.php @@ -5,7 +5,7 @@ namespace App\Providers; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider as BaseProvider; -class ServiceProvider extends BaseProvider +class RotessaServiceProvider extends BaseProvider { protected string $moduleName = 'Rotessa'; @@ -16,9 +16,7 @@ class ServiceProvider extends BaseProvider */ public function boot(): void { - - include_once app_path('PaymentDrivers/Rotessa/vendor/autoload.php'); - + include_once app_path('Http/ViewComposers/RotessaComposer.php'); class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\BankTransfer"); class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Acss"); From 7ac79d0e01ddc380dd84bd98b51093bc0f68d4dc Mon Sep 17 00:00:00 2001 From: karneaud Date: Mon, 24 Jun 2024 18:41:45 -0400 Subject: [PATCH 25/85] remove composer package --- .../Rotessa/vendor/autoload.php | 25 - .../Rotessa/vendor/composer/ClassLoader.php | 579 --- .../vendor/composer/InstalledVersions.php | 359 -- .../Rotessa/vendor/composer/LICENSE | 21 - .../vendor/composer/autoload_classmap.php | 69 - .../vendor/composer/autoload_files.php | 10 - .../vendor/composer/autoload_namespaces.php | 9 - .../Rotessa/vendor/composer/autoload_psr4.php | 14 - .../Rotessa/vendor/composer/autoload_real.php | 48 - .../vendor/composer/autoload_static.php | 122 - .../Rotessa/vendor/composer/installed.json | 32 - .../Rotessa/vendor/composer/installed.php | 32 - .../karneaud/omnipay-rotessa/composer.json | 41 - .../karneaud/omnipay-rotessa/composer.lock | 3904 ----------------- .../karneaud/omnipay-rotessa/phpunit.xml | 22 - .../src/Omnipay/Rotessa/AbstractClient.php | 21 - .../src/Omnipay/Rotessa/ApiTrait.php | 41 - .../src/Omnipay/Rotessa/ClientInterface.php | 11 - .../Omnipay/Rotessa/Exception/Exceptions.php | 43 - .../src/Omnipay/Rotessa/Gateway.php | 74 - .../src/Omnipay/Rotessa/Http/Client.php | 82 - .../Rotessa/Http/Response/Response.php | 32 - .../src/Omnipay/Rotessa/IsValidTypeTrait.php | 12 - .../Message/Request/AbstractRequest.php | 52 - .../Rotessa/Message/Request/BaseRequest.php | 93 - .../Request/DeleteTransactionSchedulesId.php | 18 - .../Rotessa/Message/Request/GetCustomers.php | 14 - .../Message/Request/GetCustomersId.php | 19 - .../Request/GetTransactionSchedulesId.php | 17 - .../Message/Request/PatchCustomersId.php | 65 - .../Request/PatchTransactionSchedulesId.php | 22 - .../Rotessa/Message/Request/PostCustomers.php | 60 - .../PostCustomersShowWithCustomIdentifier.php | 19 - .../Request/PostTransactionSchedules.php | 31 - ...ionSchedulesCreateWithCustomIdentifier.php | 16 - .../PostTransactionSchedulesUpdateViaPost.php | 24 - .../Message/Request/RequestInterface.php | 10 - .../Message/Response/AbstractResponse.php | 16 - .../Rotessa/Message/Response/BaseResponse.php | 44 - .../Message/Response/ResponseInterface.php | 9 - .../Omnipay/Rotessa/Model/AbstractModel.php | 63 - .../src/Omnipay/Rotessa/Model/BaseModel.php | 24 - .../Omnipay/Rotessa/Model/CustomerModel.php | 94 - .../Rotessa/Model/CustomerPatchModel.php | 16 - .../Omnipay/Rotessa/Model/ModelInterface.php | 8 - .../Model/TransactionScheduleModel.php | 84 - .../Model/TransactionSchedulesIdBodyModel.php | 23 - ...sactionSchedulesUpdateViaPostBodyModel.php | 24 - .../src/Omnipay/Rotessa/Object/Address.php | 53 - .../Rotessa/Object/AuthorizationType.php | 28 - .../Rotessa/Object/BankAccountType.php | 28 - .../src/Omnipay/Rotessa/Object/Country.php | 33 - .../Omnipay/Rotessa/Object/CustomerType.php | 28 - .../src/Omnipay/Rotessa/Object/Frequency.php | 64 - 54 files changed, 6702 deletions(-) delete mode 100644 app/PaymentDrivers/Rotessa/vendor/autoload.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/ClassLoader.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/LICENSE delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_psr4.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/installed.json delete mode 100644 app/PaymentDrivers/Rotessa/vendor/composer/installed.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php delete mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php diff --git a/app/PaymentDrivers/Rotessa/vendor/autoload.php b/app/PaymentDrivers/Rotessa/vendor/autoload.php deleted file mode 100644 index ff18c070b772..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/autoload.php +++ /dev/null @@ -1,25 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var \Closure(string):void */ - private static $includeFile; - - /** @var string|null */ - private $vendorDir; - - // PSR-4 - /** - * @var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var list - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * List of PSR-0 prefixes - * - * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) - * - * @var array>> - */ - private $prefixesPsr0 = array(); - /** - * @var list - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var array - */ - private $missingClasses = array(); - - /** @var string|null */ - private $apcuPrefix; - - /** - * @var array - */ - private static $registeredLoaders = array(); - - /** - * @param string|null $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return array> - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return list - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return list - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return array Array of classname => path - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - $paths = (array) $paths; - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param list|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param list|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders keyed by their corresponding vendor directories. - * - * @return array - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } - - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php b/app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php deleted file mode 100644 index 51e734a774b3..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,359 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints((string) $constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require $vendorDir.'/composer/installed.php'; - $installed[] = self::$installedByVendor[$vendorDir] = $required; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require __DIR__ . '/installed.php'; - self::$installed = $required; - } else { - self::$installed = array(); - } - } - - if (self::$installed !== array()) { - $installed[] = self::$installed; - } - - return $installed; - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/LICENSE b/app/PaymentDrivers/Rotessa/vendor/composer/LICENSE deleted file mode 100644 index f27399a042d9..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright (c) Nils Adermann, Jordi Boggiano - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php deleted file mode 100644 index 45e77acc6441..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,69 +0,0 @@ - $baseDir . '/DataProviders/CAProvinces.php', - 'App\\PaymentDrivers\\Rotessa\\DataProviders\\Frequencies' => $baseDir . '/DataProviders/Frequencies.php', - 'App\\PaymentDrivers\\Rotessa\\Events\\CacheGateways' => $baseDir . '/Events/CacheGateways.php', - 'App\\PaymentDrivers\\Rotessa\\Listeners\\CacheGateways' => $baseDir . '/Listeners/CacheGateways.php', - 'App\\PaymentDrivers\\Rotessa\\Models\\Gateway' => $baseDir . '/Models/Gateway.php', - 'App\\PaymentDrivers\\Rotessa\\PaymentMethod' => $baseDir . '/PaymentMethod.php', - 'App\\PaymentDrivers\\Rotessa\\Providers\\EventServiceProvider' => $baseDir . '/Providers/EventServiceProvider.php', - 'App\\PaymentDrivers\\Rotessa\\Providers\\ServiceProvider' => $baseDir . '/Providers/ServiceProvider.php', - 'App\\PaymentDrivers\\Rotessa\\Resources\\Customer' => $baseDir . '/Resources/Customer.php', - 'App\\PaymentDrivers\\Rotessa\\Resources\\Transaction' => $baseDir . '/Resources/Transaction.php', - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AccountComponent' => $baseDir . '/View/Components/Components.php', - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AddressComponent' => $baseDir . '/View/Components/Components.php', - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\ContactComponent' => $baseDir . '/View/Components/Components.php', - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'Omnipay\\Rotessa\\AbstractClient' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php', - 'Omnipay\\Rotessa\\ApiTrait' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php', - 'Omnipay\\Rotessa\\ClientInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php', - 'Omnipay\\Rotessa\\Exception\\BadRequestException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\InternalServerErrorException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\NotAcceptableException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\NotFoundException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\ServiceUnavailableException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\UnauthorizedException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\UnprocessableEntityException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\ValidationException' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Gateway' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php', - 'Omnipay\\Rotessa\\Http\\Client' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php', - 'Omnipay\\Rotessa\\Http\\Response\\Response' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php', - 'Omnipay\\Rotessa\\IsValidTypeTrait' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php', - 'Omnipay\\Rotessa\\Message\\Request\\AbstractRequest' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php', - 'Omnipay\\Rotessa\\Message\\Request\\BaseRequest' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php', - 'Omnipay\\Rotessa\\Message\\Request\\DeleteTransactionSchedulesId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php', - 'Omnipay\\Rotessa\\Message\\Request\\GetCustomers' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php', - 'Omnipay\\Rotessa\\Message\\Request\\GetCustomersId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php', - 'Omnipay\\Rotessa\\Message\\Request\\GetTransactionSchedulesId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php', - 'Omnipay\\Rotessa\\Message\\Request\\PatchCustomersId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php', - 'Omnipay\\Rotessa\\Message\\Request\\PatchTransactionSchedulesId' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostCustomers' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostCustomersShowWithCustomIdentifier' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedules' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesCreateWithCustomIdentifier' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesUpdateViaPost' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php', - 'Omnipay\\Rotessa\\Message\\Request\\RequestInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php', - 'Omnipay\\Rotessa\\Message\\Response\\AbstractResponse' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php', - 'Omnipay\\Rotessa\\Message\\Response\\BaseResponse' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php', - 'Omnipay\\Rotessa\\Message\\Response\\ResponseInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php', - 'Omnipay\\Rotessa\\Model\\AbstractModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php', - 'Omnipay\\Rotessa\\Model\\BaseModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php', - 'Omnipay\\Rotessa\\Model\\CustomerModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php', - 'Omnipay\\Rotessa\\Model\\CustomerPatchModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php', - 'Omnipay\\Rotessa\\Model\\ModelInterface' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php', - 'Omnipay\\Rotessa\\Model\\TransactionScheduleModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php', - 'Omnipay\\Rotessa\\Model\\TransactionSchedulesIdBodyModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php', - 'Omnipay\\Rotessa\\Model\\TransactionSchedulesUpdateViaPostBodyModel' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php', - 'Omnipay\\Rotessa\\Object\\Address' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php', - 'Omnipay\\Rotessa\\Object\\AuthorizationType' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php', - 'Omnipay\\Rotessa\\Object\\BankAccountType' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php', - 'Omnipay\\Rotessa\\Object\\Country' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php', - 'Omnipay\\Rotessa\\Object\\CustomerType' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php', - 'Omnipay\\Rotessa\\Object\\Frequency' => $vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php', -); diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php deleted file mode 100644 index 1dfada572dbd..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_files.php +++ /dev/null @@ -1,10 +0,0 @@ - $baseDir . '/View/Composers/Composer.php', -); diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3ad6d8..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception'), - 'Omnipay\\Rotessa\\' => array($vendorDir . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa'), - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\' => array($baseDir . '/View/Components'), - 'App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\' => array($baseDir . '/Database/Seeders'), - 'App\\PaymentDrivers\\Rotessa\\' => array($baseDir . '/'), -); diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php deleted file mode 100644 index c792b343f965..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_real.php +++ /dev/null @@ -1,48 +0,0 @@ -register(true); - - $filesToLoad = \Composer\Autoload\ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$files; - $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } - }, null, null); - foreach ($filesToLoad as $fileIdentifier => $file) { - $requireFile($fileIdentifier, $file); - } - - return $loader; - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php b/app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php deleted file mode 100644 index 4b6356219f6c..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/autoload_static.php +++ /dev/null @@ -1,122 +0,0 @@ - __DIR__ . '/../..' . '/View/Composers/Composer.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'O' => - array ( - 'Omnipay\\Rotessa\\Exception\\' => 26, - 'Omnipay\\Rotessa\\' => 16, - ), - 'A' => - array ( - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\' => 43, - 'App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\' => 44, - 'App\\PaymentDrivers\\Rotessa\\' => 27, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'Omnipay\\Rotessa\\Exception\\' => - array ( - 0 => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception', - ), - 'Omnipay\\Rotessa\\' => - array ( - 0 => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa', - ), - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\' => - array ( - 0 => __DIR__ . '/../..' . '/View/Components', - ), - 'App\\PaymentDrivers\\Rotessa\\Database\\Seeders\\' => - array ( - 0 => __DIR__ . '/../..' . '/Database/Seeders', - ), - 'App\\PaymentDrivers\\Rotessa\\' => - array ( - 0 => __DIR__ . '/../..' . '/', - ), - ); - - public static $classMap = array ( - 'App\\PaymentDrivers\\Rotessa\\DataProviders\\CAProvinces' => __DIR__ . '/../..' . '/DataProviders/CAProvinces.php', - 'App\\PaymentDrivers\\Rotessa\\DataProviders\\Frequencies' => __DIR__ . '/../..' . '/DataProviders/Frequencies.php', - 'App\\PaymentDrivers\\Rotessa\\Events\\CacheGateways' => __DIR__ . '/../..' . '/Events/CacheGateways.php', - 'App\\PaymentDrivers\\Rotessa\\Listeners\\CacheGateways' => __DIR__ . '/../..' . '/Listeners/CacheGateways.php', - 'App\\PaymentDrivers\\Rotessa\\Models\\Gateway' => __DIR__ . '/../..' . '/Models/Gateway.php', - 'App\\PaymentDrivers\\Rotessa\\PaymentMethod' => __DIR__ . '/../..' . '/PaymentMethod.php', - 'App\\PaymentDrivers\\Rotessa\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/Providers/EventServiceProvider.php', - 'App\\PaymentDrivers\\Rotessa\\Providers\\ServiceProvider' => __DIR__ . '/../..' . '/Providers/ServiceProvider.php', - 'App\\PaymentDrivers\\Rotessa\\Resources\\Customer' => __DIR__ . '/../..' . '/Resources/Customer.php', - 'App\\PaymentDrivers\\Rotessa\\Resources\\Transaction' => __DIR__ . '/../..' . '/Resources/Transaction.php', - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AccountComponent' => __DIR__ . '/../..' . '/View/Components/Components.php', - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\AddressComponent' => __DIR__ . '/../..' . '/View/Components/Components.php', - 'App\\PaymentDrivers\\Rotessa\\View\\Components\\ContactComponent' => __DIR__ . '/../..' . '/View/Components/Components.php', - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'Omnipay\\Rotessa\\AbstractClient' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php', - 'Omnipay\\Rotessa\\ApiTrait' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php', - 'Omnipay\\Rotessa\\ClientInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php', - 'Omnipay\\Rotessa\\Exception\\BadRequestException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\InternalServerErrorException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\NotAcceptableException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\NotFoundException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\ServiceUnavailableException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\UnauthorizedException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\UnprocessableEntityException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Exception\\ValidationException' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php', - 'Omnipay\\Rotessa\\Gateway' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php', - 'Omnipay\\Rotessa\\Http\\Client' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php', - 'Omnipay\\Rotessa\\Http\\Response\\Response' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php', - 'Omnipay\\Rotessa\\IsValidTypeTrait' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php', - 'Omnipay\\Rotessa\\Message\\Request\\AbstractRequest' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php', - 'Omnipay\\Rotessa\\Message\\Request\\BaseRequest' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php', - 'Omnipay\\Rotessa\\Message\\Request\\DeleteTransactionSchedulesId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php', - 'Omnipay\\Rotessa\\Message\\Request\\GetCustomers' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php', - 'Omnipay\\Rotessa\\Message\\Request\\GetCustomersId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php', - 'Omnipay\\Rotessa\\Message\\Request\\GetTransactionSchedulesId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php', - 'Omnipay\\Rotessa\\Message\\Request\\PatchCustomersId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php', - 'Omnipay\\Rotessa\\Message\\Request\\PatchTransactionSchedulesId' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostCustomers' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostCustomersShowWithCustomIdentifier' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedules' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesCreateWithCustomIdentifier' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php', - 'Omnipay\\Rotessa\\Message\\Request\\PostTransactionSchedulesUpdateViaPost' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php', - 'Omnipay\\Rotessa\\Message\\Request\\RequestInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php', - 'Omnipay\\Rotessa\\Message\\Response\\AbstractResponse' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php', - 'Omnipay\\Rotessa\\Message\\Response\\BaseResponse' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php', - 'Omnipay\\Rotessa\\Message\\Response\\ResponseInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php', - 'Omnipay\\Rotessa\\Model\\AbstractModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php', - 'Omnipay\\Rotessa\\Model\\BaseModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php', - 'Omnipay\\Rotessa\\Model\\CustomerModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php', - 'Omnipay\\Rotessa\\Model\\CustomerPatchModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php', - 'Omnipay\\Rotessa\\Model\\ModelInterface' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php', - 'Omnipay\\Rotessa\\Model\\TransactionScheduleModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php', - 'Omnipay\\Rotessa\\Model\\TransactionSchedulesIdBodyModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php', - 'Omnipay\\Rotessa\\Model\\TransactionSchedulesUpdateViaPostBodyModel' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php', - 'Omnipay\\Rotessa\\Object\\Address' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php', - 'Omnipay\\Rotessa\\Object\\AuthorizationType' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php', - 'Omnipay\\Rotessa\\Object\\BankAccountType' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php', - 'Omnipay\\Rotessa\\Object\\Country' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php', - 'Omnipay\\Rotessa\\Object\\CustomerType' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php', - 'Omnipay\\Rotessa\\Object\\Frequency' => __DIR__ . '/..' . '/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInita0415998b2208af2a6b954b72fdf7005::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/installed.json b/app/PaymentDrivers/Rotessa/vendor/composer/installed.json deleted file mode 100644 index bdb7b5f35a23..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/installed.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "packages": [ - { - "name": "karneaud/omnipay-rotessa", - "version": "1.0.0-beta", - "version_normalized": "1.0.0.0-beta", - "source": { - "type": "git", - "url": "https://github.com/karneaud/omnipay-rotessa.git", - "reference": "master" - }, - "dist": { - "type": "zip", - "url": "https://github.com/karneaud/omnipay-rotessa/archive/refs/tags/v1.0.0-beta.zip" - }, - "type": "library", - "installation-source": "source", - "autoload": { - "psr-4": { - "Omnipay\\Rotessa\\": "./src/Omnipay/Rotessa/", - "Omnipay\\Rotessa\\Exception\\": "./src/Omnipay/Rotessa/Exception/" - }, - "classmap": [ - "./src/Omnipay/Rotessa/Exception/Exceptions.php" - ] - }, - "install-path": "../karneaud/omnipay-rotessa" - } - ], - "dev": false, - "dev-package-names": [] -} diff --git a/app/PaymentDrivers/Rotessa/vendor/composer/installed.php b/app/PaymentDrivers/Rotessa/vendor/composer/installed.php deleted file mode 100644 index bca95fce27b5..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/composer/installed.php +++ /dev/null @@ -1,32 +0,0 @@ - array( - 'name' => 'karneaud/invoiceninja-rotessa', - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => null, - 'type' => 'laravel-module', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev' => false, - ), - 'versions' => array( - 'karneaud/invoiceninja-rotessa' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => null, - 'type' => 'laravel-module', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'karneaud/omnipay-rotessa' => array( - 'pretty_version' => '1.0.0-beta', - 'version' => '1.0.0.0-beta', - 'reference' => 'master', - 'type' => 'library', - 'install_path' => __DIR__ . '/../karneaud/omnipay-rotessa', - 'aliases' => array(), - 'dev_requirement' => false, - ), - ), -); diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json deleted file mode 100644 index 0c76d0117400..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "require-dev": { - "omnipay/tests":"*", - "oomphinc/composer-installers-extender": "*", - "http-interop/http-factory-guzzle": "dev-master", - "guzzlehttp/guzzle": "7.9.x-dev" - }, - "name":"karneaud/omnipay-rotessa", - "minimum-stability": "dev", - "config": { - "allow-plugins": { - "php-http/discovery": true, - "composer/installers": true, - "oomphinc/composer-installers-extender": true - } - }, - "require": { - "php": ">=8.0", - "php-http/discovery": "*", - "omnipay/common":"*" - }, - "scripts": { - "generate": [ - "generate" - ], - "tests": [ - "phpunit" - ] - }, - "autoload": { - "psr-4": { - "Omnipay\\Rotessa\\": "src/Omnipay/Rotessa/" - }, - "classmap": ["src/Omnipay/Rotessa/Exception/Exceptions.php"] - }, - "autoload-dev": { - "psr-4": { - "Omnipay\\Rotessa\\Test\\": "tests/" - } - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock deleted file mode 100644 index ffb9a3621047..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/composer.lock +++ /dev/null @@ -1,3904 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "9f938695686f38324b7fd12e52766427", - "packages": [ - { - "name": "clue/stream-filter", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/clue/stream-filter.git", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "Clue\\StreamFilter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/stream-filter", - "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" - ], - "support": { - "issues": "https://github.com/clue/stream-filter/issues", - "source": "https://github.com/clue/stream-filter/tree/v1.7.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2023-12-20T15:40:13+00:00" - }, - { - "name": "moneyphp/money", - "version": "3.x-dev", - "source": { - "type": "git", - "url": "https://github.com/moneyphp/money.git", - "reference": "0dc40e3791c67e8793e3aa13fead8cf4661ec9cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/0dc40e3791c67e8793e3aa13fead8cf4661ec9cd", - "reference": "0dc40e3791c67e8793e3aa13fead8cf4661ec9cd", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=5.6" - }, - "require-dev": { - "cache/taggable-cache": "^0.4.0", - "doctrine/instantiator": "^1.0.5", - "ext-bcmath": "*", - "ext-gmp": "*", - "ext-intl": "*", - "florianv/exchanger": "^1.0", - "florianv/swap": "^3.0", - "friends-of-phpspec/phpspec-code-coverage": "^3.1.1 || ^4.3", - "moneyphp/iso-currencies": "^3.2.1", - "php-http/message": "^1.4", - "php-http/mock-client": "^1.0.0", - "phpspec/phpspec": "^3.4.3", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.18 || ^8.5", - "psr/cache": "^1.0", - "symfony/phpunit-bridge": "^4" - }, - "suggest": { - "ext-bcmath": "Calculate without integer limits", - "ext-gmp": "Calculate without integer limits", - "ext-intl": "Format Money objects with intl", - "florianv/exchanger": "Exchange rates library for PHP", - "florianv/swap": "Exchange rates library for PHP", - "psr/cache-implementation": "Used for Currency caching" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Money\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mathias Verraes", - "email": "mathias@verraes.net", - "homepage": "http://verraes.net" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - }, - { - "name": "Frederik Bosch", - "email": "f.bosch@genkgo.nl" - } - ], - "description": "PHP implementation of Fowler's Money pattern", - "homepage": "http://moneyphp.org", - "keywords": [ - "Value Object", - "money", - "vo" - ], - "support": { - "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/3.x" - }, - "time": "2022-09-21T07:43:36+00:00" - }, - { - "name": "omnipay/common", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/omnipay-common.git", - "reference": "2eca3823e9069e2c36b6007a090577d5584f9518" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-common/zipball/2eca3823e9069e2c36b6007a090577d5584f9518", - "reference": "2eca3823e9069e2c36b6007a090577d5584f9518", - "shasum": "" - }, - "require": { - "moneyphp/money": "^3.1|^4.0.3", - "php": "^7.2|^8", - "php-http/client-implementation": "^1", - "php-http/discovery": "^1.14", - "php-http/message": "^1.5", - "php-http/message-factory": "^1.1", - "symfony/http-foundation": "^2.1|^3|^4|^5|^6|^7" - }, - "require-dev": { - "http-interop/http-factory-guzzle": "^1.1", - "omnipay/tests": "^4.1", - "php-http/guzzle7-adapter": "^1", - "php-http/mock-client": "^1.6", - "squizlabs/php_codesniffer": "^3.8.1" - }, - "suggest": { - "league/omnipay": "The default Omnipay package provides a default HTTP Adapter." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Omnipay\\Common\\": "src/Common" - }, - "classmap": [ - "src/Omnipay.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adrian Macneil", - "email": "adrian@adrianmacneil.com" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - }, - { - "name": "Jason Judge", - "email": "jason.judge@consil.co.uk" - }, - { - "name": "Del" - }, - { - "name": "Omnipay Contributors", - "homepage": "https://github.com/thephpleague/omnipay-common/contributors" - } - ], - "description": "Common components for Omnipay payment processing library", - "homepage": "https://github.com/thephpleague/omnipay-common", - "keywords": [ - "gateway", - "merchant", - "omnipay", - "pay", - "payment", - "purchase" - ], - "support": { - "issues": "https://github.com/thephpleague/omnipay-common/issues", - "source": "https://github.com/thephpleague/omnipay-common/tree/v3.3.0" - }, - "funding": [ - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2024-03-08T11:56:40+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "ed16f5209c597c564da6efa54f771e8bda743f07" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/ed16f5209c597c564da6efa54f771e8bda743f07", - "reference": "ed16f5209c597c564da6efa54f771e8bda743f07", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" - }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "sebastian/comparator": "^3.0.5 || ^4.0.8", - "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" - }, - "default-branch": true, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.x" - }, - "time": "2024-04-22T09:10:37+00:00" - }, - { - "name": "php-http/message", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "4cb00d6d316783d357a59ec94c234c50aca515f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/4cb00d6d316783d357a59ec94c234c50aca515f5", - "reference": "4cb00d6d316783d357a59ec94c234c50aca515f5", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.5", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.1 || ^2.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0 || ^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/message-factory": "^1.0.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "slim/slim": "^3.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "laminas/laminas-diactoros": "Used with Diactoros Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "src/filters.php" - ], - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" - ], - "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.x" - }, - "time": "2024-03-16T19:07:08+00:00" - }, - { - "name": "php-http/message-factory", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "psr/http-message": "^1.0 || ^2.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" - ], - "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/1.1.0" - }, - "abandoned": "psr/http-factory", - "time": "2023-04-14T14:16:17+00:00" - }, - { - "name": "psr/http-message", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" - }, - "time": "2023-04-04T09:50:52+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-18T09:32:20+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "6.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b4db6b833035477cb70e18d0ae33cb7c2b521759", - "reference": "b4db6b833035477cb70e18d0ae33cb7c2b521759", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "symfony/cache": "<6.3" - }, - "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/6.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-18T09:22:46+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e642fbe7a7b73cdb05460555289a9057bfd6ead6", - "reference": "e642fbe7a7b73cdb05460555289a9057bfd6ead6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/1.x" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-19T06:31:17+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7d191eb4022901cd3d91a816ec5464ca3a08a8aa", - "reference": "7d191eb4022901cd3d91a816ec5464ca3a08a8aa", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/1.x" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-19T06:31:17+00:00" - }, - { - "name": "symfony/polyfill-php83", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "6e804bbb1bf1e2bfd02771d1c34fa8295c1f1af1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/6e804bbb1bf1e2bfd02771d1c34fa8295c1f1af1", - "reference": "6e804bbb1bf1e2bfd02771d1c34fa8295c1f1af1", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" - }, - "default-branch": true, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/1.x" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-19T06:31:17+00:00" - } - ], - "packages-dev": [ - { - "name": "composer/installers", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/composer/installers.git", - "reference": "2a9170263fcd9cc4fd0b50917293c21d6c1a5bfe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/2a9170263fcd9cc4fd0b50917293c21d6c1a5bfe", - "reference": "2a9170263fcd9cc4fd0b50917293c21d6c1a5bfe", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "composer/composer": "1.6.* || ^2.0", - "composer/semver": "^1 || ^3", - "phpstan/phpstan": "^0.12.55", - "phpstan/phpstan-phpunit": "^0.12.16", - "symfony/phpunit-bridge": "^5.3", - "symfony/process": "^5" - }, - "default-branch": true, - "type": "composer-plugin", - "extra": { - "class": "Composer\\Installers\\Plugin", - "branch-alias": { - "dev-main": "2.x-dev" - }, - "plugin-modifies-install-path": true - }, - "autoload": { - "psr-4": { - "Composer\\Installers\\": "src/Composer/Installers" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kyle Robinson Young", - "email": "kyle@dontkry.com", - "homepage": "https://github.com/shama" - } - ], - "description": "A multi-framework Composer library installer", - "homepage": "https://composer.github.io/installers/", - "keywords": [ - "Dolibarr", - "Eliasis", - "Hurad", - "ImageCMS", - "Kanboard", - "Lan Management System", - "MODX Evo", - "MantisBT", - "Mautic", - "Maya", - "OXID", - "Plentymarkets", - "Porto", - "RadPHP", - "SMF", - "Starbug", - "Thelia", - "Whmcs", - "WolfCMS", - "agl", - "annotatecms", - "attogram", - "bitrix", - "cakephp", - "chef", - "cockpit", - "codeigniter", - "concrete5", - "croogo", - "dokuwiki", - "drupal", - "eZ Platform", - "elgg", - "expressionengine", - "fuelphp", - "grav", - "installer", - "itop", - "known", - "kohana", - "laravel", - "lavalite", - "lithium", - "magento", - "majima", - "mako", - "matomo", - "mediawiki", - "miaoxing", - "modulework", - "modx", - "moodle", - "osclass", - "pantheon", - "phpbb", - "piwik", - "ppi", - "processwire", - "puppet", - "pxcms", - "reindex", - "roundcube", - "shopware", - "silverstripe", - "sydes", - "sylius", - "tastyigniter", - "wordpress", - "yawik", - "zend", - "zikula" - ], - "support": { - "issues": "https://github.com/composer/installers/issues", - "source": "https://github.com/composer/installers/tree/main" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-10-12T12:07:30+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "9955122a490d18ce723cf9014b196c126222c180" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/9955122a490d18ce723cf9014b196c126222c180", - "reference": "9955122a490d18ce723cf9014b196c126222c180", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.4" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2024-05-05T15:09:38+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.9.x-dev", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93", - "reference": "1ee81e5fc8613ba1ad0b095f40e17c119dd4cc93", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2024-03-31T19:57:34+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "ab801747cbf7d394d4d435c34364704f9bf048e6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/ab801747cbf7d394d4d435c34364704f9bf048e6", - "reference": "ab801747cbf7d394d4d435c34364704f9bf048e6", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" - }, - "default-branch": true, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2024-03-31T10:06:07+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.9.x-dev", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", - "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2023-04-17T16:00:37+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "696163addf28bb4e01455254e055a9a75e0ba6c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/696163addf28bb4e01455254e055a9a75e0ba6c4", - "reference": "696163addf28bb4e01455254e055a9a75e0ba6c4", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/master" - }, - "time": "2023-12-14T11:00:58+00:00" - }, - { - "name": "http-interop/http-factory-guzzle", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/http-interop/http-factory-guzzle.git", - "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", - "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.7||^2.0", - "php": ">=7.3", - "psr/http-factory": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "^1.0" - }, - "require-dev": { - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^9.5" - }, - "suggest": { - "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Factory\\Guzzle\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "An HTTP Factory using Guzzle PSR7", - "keywords": [ - "factory", - "http", - "psr-17", - "psr-7" - ], - "support": { - "issues": "https://github.com/http-interop/http-factory-guzzle/issues", - "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" - }, - "time": "2021-07-21T13:50:14+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.7.x-dev", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "3f8d3ff1ffe4c552d45c5690c6d825e9310769bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/3f8d3ff1ffe4c552d45c5690c6d825e9310769bf", - "reference": "3f8d3ff1ffe4c552d45c5690c6d825e9310769bf", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": ">=9.6.11 <10.4" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2023-10-01T17:31:30+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "2f5294676c802a62b0549f6bc8983f14294ce369" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/2f5294676c802a62b0549f6bc8983f14294ce369", - "reference": "2f5294676c802a62b0549f6bc8983f14294ce369", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.x" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2024-02-10T11:10:03+00:00" - }, - { - "name": "nikic/php-parser", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c5ee33df86c06b3278c670f64273b1ba768a0744", - "reference": "c5ee33df86c06b3278c670f64273b1ba768a0744", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "default-branch": true, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/master" - }, - "time": "2024-04-19T12:04:10+00:00" - }, - { - "name": "omnipay/tests", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/omnipay-tests.git", - "reference": "4412f542663a3d1ed45449a7d5282ea03cfe7acd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/omnipay-tests/zipball/4412f542663a3d1ed45449a7d5282ea03cfe7acd", - "reference": "4412f542663a3d1ed45449a7d5282ea03cfe7acd", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1", - "mockery/mockery": "^1.3", - "php": "^7.2|^8", - "php-http/discovery": "^1.14", - "php-http/mock-client": "^1.1", - "phpunit/phpunit": "^8.5.14|^9" - }, - "require-dev": { - "omnipay/common": "^3", - "symfony/http-foundation": "^3|^4|^5" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Omnipay\\Tests\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Adrian Macneil", - "email": "adrian@adrianmacneil.com" - }, - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - }, - { - "name": "Omnipay Contributors", - "homepage": "https://github.com/thephpleague/omnipay-tests/contributors" - } - ], - "description": "Testing components for Omnipay payment processing library", - "homepage": "https://github.com/thephpleague/omnipay-tests", - "keywords": [ - "omnipay" - ], - "support": { - "issues": "https://github.com/thephpleague/omnipay-tests/issues", - "source": "https://github.com/thephpleague/omnipay-tests/tree/v4.1.2" - }, - "time": "2022-10-31T14:30:25+00:00" - }, - { - "name": "oomphinc/composer-installers-extender", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/oomphinc/composer-installers-extender.git", - "reference": "cbf4b6f9a24153b785d09eee755b995ba87bd5f9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/oomphinc/composer-installers-extender/zipball/cbf4b6f9a24153b785d09eee755b995ba87bd5f9", - "reference": "cbf4b6f9a24153b785d09eee755b995ba87bd5f9", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1 || ^2.0", - "composer/installers": "^1.0 || ^2.0", - "php": ">=7.1" - }, - "require-dev": { - "composer/composer": "^2.0", - "phpunit/phpunit": "^7.2", - "squizlabs/php_codesniffer": "^3.3" - }, - "default-branch": true, - "type": "composer-plugin", - "extra": { - "class": "OomphInc\\ComposerInstallersExtender\\Plugin" - }, - "autoload": { - "psr-4": { - "OomphInc\\ComposerInstallersExtender\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Beemsterboer", - "email": "stephen@oomphinc.com", - "homepage": "https://github.com/balbuf" - }, - { - "name": "Nathan Dentzau", - "email": "nate@oomphinc.com", - "homepage": "http://oomph.is/ndentzau" - } - ], - "description": "Extend the composer/installers plugin to accept any arbitrary package type.", - "homepage": "http://www.oomphinc.com/", - "support": { - "issues": "https://github.com/oomphinc/composer-installers-extender/issues", - "source": "https://github.com/oomphinc/composer-installers-extender/tree/2.0.1" - }, - "time": "2021-12-15T12:32:42+00:00" - }, - { - "name": "phar-io/manifest", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "php-http/client-common", - "version": "2.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "d930a40e864109bf128431879b11bccfc09dccfc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/d930a40e864109bf128431879b11bccfc09dccfc", - "reference": "d930a40e864109bf128431879b11bccfc09dccfc", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/httplug": "^2.0", - "php-http/message": "^1.6", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "doctrine/instantiator": "^1.1", - "guzzlehttp/psr7": "^1.4", - "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" - }, - "suggest": { - "ext-json": "To detect JSON responses with the ContentTypePlugin", - "ext-libxml": "To detect XML responses with the ContentTypePlugin", - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], - "support": { - "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.x" - }, - "time": "2024-01-29T12:02:44+00:00" - }, - { - "name": "php-http/httplug", - "version": "2.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "87779285e14780b0a85209bfed8abd9d5fe0322e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/87779285e14780b0a85209bfed8abd9d5fe0322e", - "reference": "87779285e14780b0a85209bfed8abd9d5fe0322e", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.x" - }, - "time": "2024-03-15T16:17:50+00:00" - }, - { - "name": "php-http/mock-client", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-http/mock-client.git", - "reference": "ae5d717334ecd68199667bea6e9db07276e69a2b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/mock-client/zipball/ae5d717334ecd68199667bea6e9db07276e69a2b", - "reference": "ae5d717334ecd68199667bea6e9db07276e69a2b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/client-common": "^2.0", - "php-http/discovery": "^1.16", - "php-http/httplug": "^2.0", - "psr/http-client": "^1.0", - "psr/http-factory-implementation": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "symfony/polyfill-php80": "^1.17" - }, - "provide": { - "php-http/async-client-implementation": "1.0", - "php-http/client-implementation": "1.0", - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Mock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "David de Boer", - "email": "david@ddeboer.nl" - } - ], - "description": "Mock HTTP client", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http", - "mock", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/mock-client/issues", - "source": "https://github.com/php-http/mock-client/tree/1.6.0" - }, - "time": "2023-05-21T08:31:38+00:00" - }, - { - "name": "php-http/promise", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", - "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.1" - }, - "time": "2024-03-15T13:55:21+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "3352293d9e91513d5508c415835014881b420218" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/3352293d9e91513d5508c415835014881b420218", - "reference": "3352293d9e91513d5508c415835014881b420218", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-22T05:16:32+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "38b24367e1b340aa78b96d7cab042942d917bb84" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/38b24367e1b340aa78b96d7cab042942d917bb84", - "reference": "38b24367e1b340aa78b96d7cab042942d917bb84", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-11T16:23:04+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bbcbb0823b0e06be56e6b180faa0df1f3b3e2733" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bbcbb0823b0e06be56e6b180faa0df1f3b3e2733", - "reference": "bbcbb0823b0e06be56e6b180faa0df1f3b3e2733", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-04-30T05:22:06+00:00" - }, - { - "name": "psr/http-client", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:27:43+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b247957a1c8dc81a671770f74b479c0a78a818f1", - "reference": "b247957a1c8dc81a671770f74b479c0a78a818f1", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:46:14+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:19:30+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:30:58+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:33:00+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-02T06:35:11+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T06:20:34+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", - "reference": "ff553e7482dcee39fa4acc2b175d6ddeb0f7bc25", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/main" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-03-14T18:47:08+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "6.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "9a3c92b490716ba6771f5beced13c6eda7183eed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/9a3c92b490716ba6771f5beced13c6eda7183eed", - "reference": "9a3c92b490716ba6771f5beced13c6eda7183eed", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/6.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-18T09:22:46+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:36:25+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "http-interop/http-factory-guzzle": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=8.0" - }, - "platform-dev": [], - "plugin-api-version": "2.6.0" -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml deleted file mode 100644 index 4f04170e17a9..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/phpunit.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - ./src - - - - - ./tests - - - ./tests/Model - - - ./tests/Message/Request - - - ./tests/Functional - - - diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php deleted file mode 100644 index c84a97322717..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php +++ /dev/null @@ -1,21 +0,0 @@ -default_parameters; - } - - public function setDefaultParameters(array $params) { - $this->default_parameters = $params; - } - -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php deleted file mode 100644 index 5fc947713f3a..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php +++ /dev/null @@ -1,41 +0,0 @@ -createRequest('GetCustomers', [] ); - } - public function postCustomers(array $params) : RequestInterface { - return $this->createRequest('PostCustomers', $params ); - } - public function getCustomersId(array $params) : RequestInterface { - return $this->createRequest('GetCustomersId', $params ); - } - public function patchCustomersId(array $params) : RequestInterface { - return $this->createRequest('PatchCustomersId', $params ); - } - public function postCustomersShowWithCustomIdentifier(array $params) : RequestInterface { - return $this->createRequest('PostCustomersShowWithCustomIdentifier', $params ); - } - public function getTransactionSchedulesId(array $params) : RequestInterface { - return $this->createRequest('GetTransactionSchedulesId', $params ); - } - public function deleteTransactionSchedulesId(array $params) : RequestInterface { - return $this->createRequest('DeleteTransactionSchedulesId', $params ); - } - public function patchTransactionSchedulesId(array $params) : RequestInterface { - return $this->createRequest('PatchTransactionSchedulesId', $params ); - } - public function postTransactionSchedules(array $params) : RequestInterface { - return $this->createRequest('PostTransactionSchedules', $params ); - } - public function postTransactionSchedulesCreateWithCustomIdentifier(array $params) : RequestInterface { - return $this->createRequest('PostTransactionSchedulesCreateWithCustomIdentifier', $params ); - } - public function postTransactionSchedulesUpdateViaPost(array $params) : RequestInterface { - return $this->createRequest('PostTransactionSchedulesUpdateViaPost', $params ); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php deleted file mode 100644 index 4d08fb0441f2..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php +++ /dev/null @@ -1,11 +0,0 @@ - 1234567890 ]; - - protected $test_mode = true; - - protected $api_key; - - public function getName() - { - return 'Rotessa'; - } - - public function getDefaultParameters() : array - { - return array_merge($this->default_parameters, array('api_key' => $this->api_key, 'test_mode' => $this->test_mode ) ); - } - - public function setTestMode($value) { - $this->test_mode = $value; - } - - public function getTestMode() { - return $this->test_mode; - } - - protected function createRequest($class_name, ?array $parameters = [] ) :RequestInterface { - $class = null; - $class_name = "Omnipay\\Rotessa\\Message\\Request\\$class_name"; - $parameters = $class_name::hasModel() ? (($parameters = ($class_name::getModel($parameters)))->validate() ? $parameters->jsonSerialize() : null ) : $parameters; - try { - $class = new $class_name($this->httpClient, $this->httpRequest, $this->getDefaultParameters() + $parameters ); - } catch (\Throwable $th) { - throw $th; - } - - return $class; - } - - function setApiKey($value) { - $this->api_key = $value; - } - - function getApiKey() { - return $this->api_key; - } - - function authorize(array $options = []) : RequestInterface { - return $this->postCustomers($options); - } - - function capture(array $options = []) : RequestInterface { - return array_key_exists('customer_id', $options)? $this->postTransactionSchedules($options) : $this->postTransactionSchedulesCreateWithCustomIdentifier($options) ; - } - - function updateCustomer(array $options) : RequestInterface { - return $this->patchCustomersId($options); - } - - function fetchTransaction($id = null) : RequestInterface { - return $this->getTransactionSchedulesId(compact('id')); - } - -} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php deleted file mode 100644 index 4c8ea0d29075..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php +++ /dev/null @@ -1,82 +0,0 @@ -httpClient = $httpClient ?: HttpClientDiscovery::find(); - $this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find(); - parent::__construct($httpClient, $requestFactory); - } - - /** - * @param $method - * @param $uri - * @param array $headers - * @param string|array|resource|StreamInterface|null $body - * @param string $protocolVersion - * @return ResponseInterface - * @throws \Http\Client\Exception - */ - public function request( - $method, - $uri, - array $headers = [], - $body = null, - $protocolVersion = '1.1' - ) { - return $this->sendRequest($method, $uri, $headers, $body, $protocolVersion); - - } - - /** - * @param RequestInterface $request - * @return ResponseInterface - * @throws \Http\Client\Exception - */ - private function sendRequest( $method, - $uri, - array $headers = [], - $body = null, - $protocolVersion = '1.1') - { - - $response = null; - - try { - if( method_exists($this->httpClient, 'sendRequest')) - $response = $this->httpClient->sendRequest( $this->requestFactory->createRequest($method, $uri, $headers, $body, $protocolVersion)); - else $response = $this->httpClient->request($method, $uri, compact('body','headers')); - } catch (\Http\Client\Exception\NetworkException $networkException) { - throw new NetworkException($networkException->getMessage(), $request, $networkException); - } catch (\Exception $exception) { - throw new RequestException($exception->getMessage(), $request, $exception); - } - - return $response; - } -} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php deleted file mode 100644 index 8d665ac8546e..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php +++ /dev/null @@ -1,32 +0,0 @@ -content, true) )) { - $data = $data['errors'][0]; - $this->reason_phrase = $data['error_message'] ; - $this->reason_code = $data['error_message'] ; - } - } - - public function getReasonPhrase() { - return $this->reason_phrase; - } - - public function getReasonCode() { - return $this->reason_code; - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php deleted file mode 100644 index 266ba3036d9d..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php +++ /dev/null @@ -1,12 +0,0 @@ -api_key = $value; - } - - public function getData() { - try { - if(empty($this->api_key)) throw new \Exception('No Api Key Found!'); - $this->validate( ...array_keys($data = $this->getParameters())); - } catch (\Throwable $th) { - throw new \Omnipay\Rotessa\Exception\ValidationException($th->getMessage() , 600, $th); - } - - return (array) $data; - } - - abstract public function sendData($data) : ResponseInterface; - - abstract protected function sendRequest(string $method, string $endpoint, array $headers = [], array $data = [] ); - - abstract protected function createResponse(array $data) : ResponseInterface; - - abstract public function getEndpointUrl(): string; - - public function getEndpoint() : string { - return $this->endpoint; - } - - public function getTestMode() { - return $this->test_mode; - } - - public function setTestMode($mode) { - $this->test_mode = $mode; - } - } \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php deleted file mode 100644 index 4b68cf0aa2ff..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php +++ /dev/null @@ -1,93 +0,0 @@ -initialize($model); - } - - protected function sendRequest(string $method, string $endpoint, array $headers = [], array $data = []) - { - /** - * @param $method - * @param $uri - * @param array $headers - * @param string|resource|StreamInterface|null $body - * @param string $protocolVersion - * @return ResponseInterface - * @throws \Http\Client\Exception - */ - $response = $this->httpClient->request($method, $endpoint, $headers, json_encode($data) ) ; - $this->response = new Response ($response->getBody()->getContents(), $response->getStatusCode(), $response->getHeaders(), true); - } - - - protected function createResponse(array $data): ResponseInterface { - - return new BaseResponse($this, $data, $this->response->getStatusCode(), $this->response->getReasonPhrase()); - } - - protected function replacePlaceholder($string, $array) { - $pattern = "/\{([^}]+)\}/"; - $replacement = function($matches) use($array) { - $key = $matches[1]; - if (array_key_exists($key, $array)) { - return $array[$key]; - } else { - return $matches[0]; - } - }; - - return preg_replace_callback($pattern, $replacement, $string); - } - - public function sendData($data) :ResponseInterface { - $headers = [ - 'Content-Type' => 'application/json', - 'Accept' => 'application/json', - 'Authorization' => "Token token={$this->api_key}" - ]; - - $this->sendRequest( - $this->method, - $this->getEndpointUrl(), - $headers, - $data); - - return $this->createResponse(json_decode($this->response->getContent(), true)); - } - - public function getEndpoint() : string { - return $this->replacePlaceholder($this->endpoint, $this->getParameters()); - } - - public function getEndpointUrl() : string { - return sprintf('https://%s.%s/v%d%s',$this->test_mode ? self::ENVIRONMENT_SANDBOX : self::ENVIRONMENT_LIVE ,$this->base_url, $this->api_version, $this->getEndpoint()); - } - - public static function hasModel() : bool { - return (bool) static::$model; - } - - public static function getModel($parameters = []) { - $class_name = static::$model; - $class_name = "Omnipay\\Rotessa\\Model\\{$class_name}Model"; - return new $class_name($parameters); - } -} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php deleted file mode 100644 index 7c03c42b0dc6..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php +++ /dev/null @@ -1,18 +0,0 @@ -setParameter('id',$value); - } - -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php deleted file mode 100644 index 17ffde5355d9..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php +++ /dev/null @@ -1,14 +0,0 @@ -setParameter('id',$value); - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php deleted file mode 100644 index 47578d06eb8b..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php +++ /dev/null @@ -1,17 +0,0 @@ -setParameter('id',$value); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php deleted file mode 100644 index 092e378b9fd5..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php +++ /dev/null @@ -1,65 +0,0 @@ -setParameter('id',$value); - } - public function setCustomIdentifier(string $value) { - $this->setParameter('custom_identifier',$value); - } - public function setName(string $value) { - $this->setParameter('name',$value); - } - public function setEmail(string $value) { - $this->setParameter('email',$value); - } - public function setCustomerType(string $value) { - $this->setParameter('customer_type',$value); - } - public function setHomePhone(string $value) { - $this->setParameter('home_phone',$value); - } - public function setPhone(string $value) { - $this->setParameter('phone',$value); - } - public function setBankName(string $value) { - $this->setParameter('bank_name',$value); - } - public function setInstitutionNumber(string $value) { - $this->setParameter('institution_number',$value); - } - public function setTransitNumber(string $value) { - $this->setParameter('transit_number',$value); - } - public function setBankAccountType(string $value) { - $this->setParameter('bank_account_type',$value); - } - public function setAuthorizationType(string $value) { - $this->setParameter('authorization_type',$value); - } - public function setRoutingNumber(string $value) { - $this->setParameter('routing_number',$value); - } - public function setAccountNumber(string $value) { - $this->setParameter('account_number',$value); - } - public function setAddress(array $value) { - $this->setParameter('address',$value); - } - public function setTransactionSchedules(array $value) { - $this->setParameter('transaction_schedules',$value); - } - public function setFinancialTransactions(array $value) { - $this->setParameter('financial_transactions',$value); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php deleted file mode 100644 index fa04b9f05da6..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php +++ /dev/null @@ -1,22 +0,0 @@ -setParameter('id',$value); - } - public function setAmount(int $value) { - $this->setParameter('amount',$value); - } - public function setComment(string $value) { - $this->setParameter('comment',$value); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php deleted file mode 100644 index a0c54fe65ca9..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php +++ /dev/null @@ -1,60 +0,0 @@ -setParameter('id',$value); - } - public function setCustomIdentifier(string $value) { - $this->setParameter('custom_identifier',$value); - } - public function setName(string $value) { - $this->setParameter('name',$value); - } - public function setEmail(string $value) { - $this->setParameter('email',$value); - } - public function setCustomerType(string $value) { - $this->setParameter('customer_type',$value); - } - public function setHomePhone(string $value) { - $this->setParameter('home_phone',$value); - } - public function setPhone(string $value) { - $this->setParameter('phone',$value); - } - public function setBankName(string $value) { - $this->setParameter('bank_name',$value); - } - public function setInstitutionNumber(string $value = '') { - $this->setParameter('institution_number',$value); - } - public function setTransitNumber(string $value = '') { - $this->setParameter('transit_number',$value); - } - public function setBankAccountType(string $value) { - $this->setParameter('bank_account_type',$value); - } - public function setAuthorizationType(string $value = '') { - $this->setParameter('authorization_type',$value); - } - public function setRoutingNumber(string $value = '') { - $this->setParameter('routing_number',$value); - } - public function setAccountNumber(string $value) { - $this->setParameter('account_number',$value); - } - public function setAddress(array $value) { - $this->setParameter('address',$value); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php deleted file mode 100644 index d590cb618526..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php +++ /dev/null @@ -1,19 +0,0 @@ -setParameter('custom_identifier',$value); - } - -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php deleted file mode 100644 index 80e28a7f5083..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php +++ /dev/null @@ -1,31 +0,0 @@ -setParameter('customer_id',$value); - } - public function setProcessDate(string $value) { - $this->setParameter('process_date',$value); - } - public function setFrequency(string $value) { - $this->setParameter('frequency',$value); - } - public function setInstallments(int $value) { - $this->setParameter('installments',$value); - } - public function setComment(string $value) { - $this->setParameter('comment',$value); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php deleted file mode 100644 index fd5111dc9a74..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php +++ /dev/null @@ -1,16 +0,0 @@ -setParameter('custom_identifier',$value); - } - -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php deleted file mode 100644 index e037c5b4d322..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php +++ /dev/null @@ -1,24 +0,0 @@ -setParameter('id',$value); - } - public function setAmount(int $value) { - $this->setParameter('amount',$value); - } - public function setComment(string $value) { - $this->setParameter('comment',$value); - } - } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php deleted file mode 100644 index cfbcf0095b24..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -code = $code; - $this->message = $message; - } - - public function getData() { - return $this->getParameters(); - } - - public function getCode() { - return (int) $this->code; - } - - public function isSuccessful() { - return $this->code < 300; - } - - public function getMessage() { - return $this->message; - } - - protected function getParameters() { - return $this->data; - } - - public function getParameter(string $key) { - return $this->getParameters()[$key]; - } -} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php deleted file mode 100644 index 080eaab504b1..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php +++ /dev/null @@ -1,9 +0,0 @@ -required), array_filter($this->getParameters()) ); - if(!empty($required)) throw new ValidationException("Could not validate " . implode(",", array_keys($required)) ); - - return true; - } - - public function __get($key) { - return array_key_exists($key, $this->attributes) ? $this->getParameter($key) : null; - } - - public function __set($key, $value) { - if(array_key_exists($key, $this->attributes)) $this->setParameter($key, $value); - } - - public function __toString() : string { - return json_encode($this); - } - - public function toString() : string { - return $this->__toString(); - } - - public function __toArray() : array { - return $this->getParameters(); - } - - - public function toArray() : array { - return $this->__toArray(); - } - - public function initialize(array $params = []) { - $this->parameters = new ParameterBag; - $parameters = array_merge($this->defaults, $params); - if ($parameters) { - foreach ($this->attributes as $param => $type) { - $value = @$parameters[$param]; - if($value){ - settype($value, $type); - $this->setParameter($param, $value); - } - } - } - - return $this; - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php deleted file mode 100644 index 8064662068c4..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php +++ /dev/null @@ -1,24 +0,0 @@ - "string" - ]; - protected $required = ['id']; - protected $defaults = ['id' => 0 ]; - - public function __construct($parameters = array()) { - $this->initialize($parameters); - } - - public function jsonSerialize() : array { - return array_intersect_key($this->toArray(), array_flip($this->required) ); - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php deleted file mode 100644 index 0fd67aea9441..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php +++ /dev/null @@ -1,94 +0,0 @@ - "string", - "custom_identifier" => "string", - "name" => "string", - "email" => "string", - "customer_type" => "string", - "home_phone" => "string", - "phone" => "string", - "bank_name" => "string", - "institution_number" => "string", - "transit_number" => "string", - "bank_account_type" => "string", - "authorization_type" => "string", - "routing_number" => "string", - "account_number" => "string", - "address" => "object", - "transaction_schedules" => "array", - "financial_transactions" => "array", - "active" => "bool" - ]; - - protected $defaults = ["active" => false,"customer_type" =>'Business',"bank_account_type" =>'Savings',"authorization_type" =>'Online',]; - protected $required = ["name","email","customer_type","home_phone","phone","bank_name","institution_number","transit_number","bank_account_type","authorization_type","routing_number","account_number","address",'custom_identifier']; - - public function validate() : bool { - try { - $country = $this->address->country; - if(!self::isValidCountry($country)) throw new \Exception("Invalid country!"); - - $this->required = array_diff($this->required, Country::isAmerican($country) ? ["institution_number", "transit_number"] : ["bank_account_type", "routing_number"]); - parent::validate(); - if(Country::isCanadian($country) ) { - if(!self::isValidTransitNumber($this->getParameter('transit_number'))) throw new \Exception("Invalid transit number!"); - if(!self::isValidInstitutionNumber($this->getParameter('institution_number'))) throw new \Exception("Invalid institution number!"); - } - if(!self::isValidCustomerType($this->getParameter('customer_type'))) throw new \Exception("Invalid customer type!"); - if(!self::isValidBankAccountType($this->getParameter('bank_account_type'))) throw new \Exception("Invalid bank account type!"); - if(!self::isValidAuthorizationType($this->getParameter('authorization_type'))) throw new \Exception("Invalid authorization type!"); - } catch (\Throwable $th) { - throw new ValidationException($th->getMessage()); - } - - return true; - } - - public static function isValidCountry(string $country ) : bool { - return Country::isValidCountryCode($country) || Country::isValidCountryName($country); - } - - public static function isValidTransitNumber(string $value ) : bool { - return strlen($value) == 5; - } - - public static function isValidInstitutionNumber(string $value ) : bool { - return strlen($value) == 3; - } - - public static function isValidCustomerType(string $value ) : bool { - return CustomerType::isValid($value); - } - - public static function isValidBankAccountType(string $value ) : bool { - return BankAccountType::isValid($value); - } - - public static function isValidAuthorizationType(string $value ) : bool { - return AuthorizationType::isValid($value); - } - - public function toArray() : array { - return [ 'address' => (array) $this->getParameter('address') ] + parent::toArray(); - } - - public function jsonSerialize() : array { - $address = (array) $this->getParameter('address'); - unset($address['country']); - - return compact('address') + parent::jsonSerialize(); - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php deleted file mode 100644 index c2e51d50b135..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php +++ /dev/null @@ -1,16 +0,0 @@ - "string", - "amount" => "float", - "comment" => "string", - "created_at" => "date", - "financial_transactions" => "array", - "frequency" => "string", - "installments" => "integer", - "next_process_date" => "date", - "process_date" => "date", - "updated_at" => "date", - "customer_id" => "string", - "custom_identifier" => "string", - ]; - - public const DATE_FORMAT = 'F j, Y'; - - protected $defaults = ["amount" =>0.00,"comment" =>' ',"financial_transactions" =>0,"frequency" =>'Once',"installments" =>1]; - - protected $required = ["amount","comment","frequency","installments","process_date"]; - - public function validate() : bool { - try { - parent::validate(); - if(!self::isValidDate($this->process_date)) throw new \Exception("Could not validate date "); - if(!self::isValidFrequency($this->frequency)) throw new \Exception("Invalid frequency"); - if(is_null($this->customer_id) && is_null($this->custom_identifier)) throw new \Exception("customer id or custom identifier is invalid"); - } catch (\Throwable $th) { - throw new ValidationException($th->getMessage()); - } - - return true; - } - - public function jsonSerialize() : array { - return ['customer_id' => $this->getParameter('customer_id'), 'custom_identifier' => $this->getParameter('custom_identifier') ] + parent::jsonSerialize() ; - } - - public function __toArray() : array { - return parent::__toArray() ; - } - - public function initialize(array $params = [] ) { - $o_params = array_intersect_key( - $params = array_intersect_key($params, $this->attributes), - ($attr = array_filter($this->attributes, fn($p) => $p != "date")) - ); - parent::initialize($o_params); - $d_params = array_diff_key($params, $attr); - array_walk($d_params, function($v,$k) { - $this->setParameter($k, self::formatDate( $v) ); - }, ); - - return $this; - } - - public static function isValidDate($date) : bool { - $d = DateTime::createFromFormat(self::DATE_FORMAT, $date); - // Check if the date is valid and matches the format - return $d && $d->format(self::DATE_FORMAT) === $date; - } - - public static function isValidFrequency($value) : bool { - return Frequency::isValid($value); - } - - protected static function formatDate($date) : string { - $d = new DateTime($date); - return $d->format(self::DATE_FORMAT); - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php deleted file mode 100644 index 119ac03999cb..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php +++ /dev/null @@ -1,23 +0,0 @@ - "int", - "comment" => "string", - ]; - - public const DATE_FORMAT = 'Y-m-d H:i:s'; - - private $_is_error = false; - - protected $defaults = ["amount" =>0,"comment" =>'0',]; - - protected $required = ["amount","comment",]; -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php deleted file mode 100644 index 749ae2f6b967..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php +++ /dev/null @@ -1,24 +0,0 @@ - "int", - "amount" => "int", - "comment" => "string", - ]; - - public const DATE_FORMAT = 'Y-m-d H:i:s'; - - private $_is_error = false; - - protected $defaults = ["amount" =>0,"comment" =>'0',]; - - protected $required = ["amount","comment",]; -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php deleted file mode 100644 index 1c5952b112ef..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php +++ /dev/null @@ -1,53 +0,0 @@ - "string", - "address_2" => "string", - "city" => "string", - "id" => "int", - "postal_code" => "string", - "province_code" => "string", - "country" => "string" - ]; - - protected $required = ["address_1","address_2","city","postal_code","province_code",]; - - public function jsonSerialize() { - return array_intersect_key($this->getParameters(), array_flip($this->required)); - } - - public function getCountry() : string { - return $this->getParameter('country'); - } - - public function initialize(array $parameters) { - foreach($this->attributes as $param => $type) { - $value = @$parameters[$param] ; - settype($value, $type); - $value = $value ?? null; - $this->parameters->set($param, $value); - } - } - - public function __toArray() : array { - return $this->getParameters(); - } - - public function __toString() : string { - return $this->getFullAddress(); - } - - public function getFullAddress() :string { - $full_address = $this->getParameters(); - extract($full_address); - - return "$address_1 $address_2, $city, $postal_code $province_code, $country"; - } -} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php deleted file mode 100644 index 39dcebfa342f..000000000000 --- a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php +++ /dev/null @@ -1,28 +0,0 @@ - Date: Mon, 24 Jun 2024 18:42:49 -0400 Subject: [PATCH 26/85] add rotessa sdk --- .../src/Omnipay/Rotessa/AbstractClient.php | 21 +++++ .../src/Omnipay/Rotessa/ApiTrait.php | 41 ++++++++ .../src/Omnipay/Rotessa/ClientInterface.php | 11 +++ .../Omnipay/Rotessa/Exception/Exceptions.php | 43 +++++++++ .../src/Omnipay/Rotessa/Gateway.php | 74 +++++++++++++++ .../src/Omnipay/Rotessa/Http/Client.php | 82 ++++++++++++++++ .../Rotessa/Http/Response/Response.php | 32 +++++++ .../src/Omnipay/Rotessa/IsValidTypeTrait.php | 12 +++ .../Message/Request/AbstractRequest.php | 52 ++++++++++ .../Rotessa/Message/Request/BaseRequest.php | 93 ++++++++++++++++++ .../Request/DeleteTransactionSchedulesId.php | 18 ++++ .../Rotessa/Message/Request/GetCustomers.php | 14 +++ .../Message/Request/GetCustomersId.php | 19 ++++ .../Request/GetTransactionSchedulesId.php | 17 ++++ .../Message/Request/PatchCustomersId.php | 65 +++++++++++++ .../Request/PatchTransactionSchedulesId.php | 22 +++++ .../Rotessa/Message/Request/PostCustomers.php | 60 ++++++++++++ .../PostCustomersShowWithCustomIdentifier.php | 19 ++++ .../Request/PostTransactionSchedules.php | 31 ++++++ ...ionSchedulesCreateWithCustomIdentifier.php | 16 ++++ .../PostTransactionSchedulesUpdateViaPost.php | 24 +++++ .../Message/Request/RequestInterface.php | 10 ++ .../Message/Response/AbstractResponse.php | 16 ++++ .../Rotessa/Message/Response/BaseResponse.php | 44 +++++++++ .../Message/Response/ResponseInterface.php | 9 ++ .../Omnipay/Rotessa/Model/AbstractModel.php | 63 +++++++++++++ .../src/Omnipay/Rotessa/Model/BaseModel.php | 24 +++++ .../Omnipay/Rotessa/Model/CustomerModel.php | 94 +++++++++++++++++++ .../Rotessa/Model/CustomerPatchModel.php | 16 ++++ .../Omnipay/Rotessa/Model/ModelInterface.php | 8 ++ .../Model/TransactionScheduleModel.php | 84 +++++++++++++++++ .../Model/TransactionSchedulesIdBodyModel.php | 23 +++++ ...sactionSchedulesUpdateViaPostBodyModel.php | 24 +++++ .../src/Omnipay/Rotessa/Object/Address.php | 53 +++++++++++ .../Rotessa/Object/AuthorizationType.php | 28 ++++++ .../Rotessa/Object/BankAccountType.php | 28 ++++++ .../src/Omnipay/Rotessa/Object/Country.php | 33 +++++++ .../Omnipay/Rotessa/Object/CustomerType.php | 28 ++++++ .../src/Omnipay/Rotessa/Object/Frequency.php | 64 +++++++++++++ 39 files changed, 1415 insertions(+) create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Exception/Exceptions.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Gateway.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/AbstractRequest.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomersId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/AbstractResponse.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/BaseResponse.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/AbstractModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/ModelInterface.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionScheduleModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/BankAccountType.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Country.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/CustomerType.php create mode 100644 app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Frequency.php diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php new file mode 100644 index 000000000000..c84a97322717 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/AbstractClient.php @@ -0,0 +1,21 @@ +default_parameters; + } + + public function setDefaultParameters(array $params) { + $this->default_parameters = $params; + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php new file mode 100644 index 000000000000..5fc947713f3a --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ApiTrait.php @@ -0,0 +1,41 @@ +createRequest('GetCustomers', [] ); + } + public function postCustomers(array $params) : RequestInterface { + return $this->createRequest('PostCustomers', $params ); + } + public function getCustomersId(array $params) : RequestInterface { + return $this->createRequest('GetCustomersId', $params ); + } + public function patchCustomersId(array $params) : RequestInterface { + return $this->createRequest('PatchCustomersId', $params ); + } + public function postCustomersShowWithCustomIdentifier(array $params) : RequestInterface { + return $this->createRequest('PostCustomersShowWithCustomIdentifier', $params ); + } + public function getTransactionSchedulesId(array $params) : RequestInterface { + return $this->createRequest('GetTransactionSchedulesId', $params ); + } + public function deleteTransactionSchedulesId(array $params) : RequestInterface { + return $this->createRequest('DeleteTransactionSchedulesId', $params ); + } + public function patchTransactionSchedulesId(array $params) : RequestInterface { + return $this->createRequest('PatchTransactionSchedulesId', $params ); + } + public function postTransactionSchedules(array $params) : RequestInterface { + return $this->createRequest('PostTransactionSchedules', $params ); + } + public function postTransactionSchedulesCreateWithCustomIdentifier(array $params) : RequestInterface { + return $this->createRequest('PostTransactionSchedulesCreateWithCustomIdentifier', $params ); + } + public function postTransactionSchedulesUpdateViaPost(array $params) : RequestInterface { + return $this->createRequest('PostTransactionSchedulesUpdateViaPost', $params ); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php new file mode 100644 index 000000000000..4d08fb0441f2 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/ClientInterface.php @@ -0,0 +1,11 @@ + 1234567890 ]; + + protected $test_mode = true; + + protected $api_key; + + public function getName() + { + return 'Rotessa'; + } + + public function getDefaultParameters() : array + { + return array_merge($this->default_parameters, array('api_key' => $this->api_key, 'test_mode' => $this->test_mode ) ); + } + + public function setTestMode($value) { + $this->test_mode = $value; + } + + public function getTestMode() { + return $this->test_mode; + } + + protected function createRequest($class_name, ?array $parameters = [] ) :RequestInterface { + $class = null; + $class_name = "Omnipay\\Rotessa\\Message\\Request\\$class_name"; + $parameters = $class_name::hasModel() ? (($parameters = ($class_name::getModel($parameters)))->validate() ? $parameters->jsonSerialize() : null ) : $parameters; + try { + $class = new $class_name($this->httpClient, $this->httpRequest, $this->getDefaultParameters() + $parameters ); + } catch (\Throwable $th) { + throw $th; + } + + return $class; + } + + function setApiKey($value) { + $this->api_key = $value; + } + + function getApiKey() { + return $this->api_key; + } + + function authorize(array $options = []) : RequestInterface { + return $this->postCustomers($options); + } + + function capture(array $options = []) : RequestInterface { + return array_key_exists('customer_id', $options)? $this->postTransactionSchedules($options) : $this->postTransactionSchedulesCreateWithCustomIdentifier($options) ; + } + + function updateCustomer(array $options) : RequestInterface { + return $this->patchCustomersId($options); + } + + function fetchTransaction($id = null) : RequestInterface { + return $this->getTransactionSchedulesId(compact('id')); + } + +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php new file mode 100644 index 000000000000..4c8ea0d29075 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Client.php @@ -0,0 +1,82 @@ +httpClient = $httpClient ?: HttpClientDiscovery::find(); + $this->requestFactory = $requestFactory ?: MessageFactoryDiscovery::find(); + parent::__construct($httpClient, $requestFactory); + } + + /** + * @param $method + * @param $uri + * @param array $headers + * @param string|array|resource|StreamInterface|null $body + * @param string $protocolVersion + * @return ResponseInterface + * @throws \Http\Client\Exception + */ + public function request( + $method, + $uri, + array $headers = [], + $body = null, + $protocolVersion = '1.1' + ) { + return $this->sendRequest($method, $uri, $headers, $body, $protocolVersion); + + } + + /** + * @param RequestInterface $request + * @return ResponseInterface + * @throws \Http\Client\Exception + */ + private function sendRequest( $method, + $uri, + array $headers = [], + $body = null, + $protocolVersion = '1.1') + { + + $response = null; + + try { + if( method_exists($this->httpClient, 'sendRequest')) + $response = $this->httpClient->sendRequest( $this->requestFactory->createRequest($method, $uri, $headers, $body, $protocolVersion)); + else $response = $this->httpClient->request($method, $uri, compact('body','headers')); + } catch (\Http\Client\Exception\NetworkException $networkException) { + throw new NetworkException($networkException->getMessage(), $request, $networkException); + } catch (\Exception $exception) { + throw new RequestException($exception->getMessage(), $request, $exception); + } + + return $response; + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php new file mode 100644 index 000000000000..8d665ac8546e --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Http/Response/Response.php @@ -0,0 +1,32 @@ +content, true) )) { + $data = $data['errors'][0]; + $this->reason_phrase = $data['error_message'] ; + $this->reason_code = $data['error_message'] ; + } + } + + public function getReasonPhrase() { + return $this->reason_phrase; + } + + public function getReasonCode() { + return $this->reason_code; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php new file mode 100644 index 000000000000..266ba3036d9d --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/IsValidTypeTrait.php @@ -0,0 +1,12 @@ +api_key = $value; + } + + public function getData() { + try { + if(empty($this->api_key)) throw new \Exception('No Api Key Found!'); + $this->validate( ...array_keys($data = $this->getParameters())); + } catch (\Throwable $th) { + throw new \Omnipay\Rotessa\Exception\ValidationException($th->getMessage() , 600, $th); + } + + return (array) $data; + } + + abstract public function sendData($data) : ResponseInterface; + + abstract protected function sendRequest(string $method, string $endpoint, array $headers = [], array $data = [] ); + + abstract protected function createResponse(array $data) : ResponseInterface; + + abstract public function getEndpointUrl(): string; + + public function getEndpoint() : string { + return $this->endpoint; + } + + public function getTestMode() { + return $this->test_mode; + } + + public function setTestMode($mode) { + $this->test_mode = $mode; + } + } \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php new file mode 100644 index 000000000000..4b68cf0aa2ff --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/BaseRequest.php @@ -0,0 +1,93 @@ +initialize($model); + } + + protected function sendRequest(string $method, string $endpoint, array $headers = [], array $data = []) + { + /** + * @param $method + * @param $uri + * @param array $headers + * @param string|resource|StreamInterface|null $body + * @param string $protocolVersion + * @return ResponseInterface + * @throws \Http\Client\Exception + */ + $response = $this->httpClient->request($method, $endpoint, $headers, json_encode($data) ) ; + $this->response = new Response ($response->getBody()->getContents(), $response->getStatusCode(), $response->getHeaders(), true); + } + + + protected function createResponse(array $data): ResponseInterface { + + return new BaseResponse($this, $data, $this->response->getStatusCode(), $this->response->getReasonPhrase()); + } + + protected function replacePlaceholder($string, $array) { + $pattern = "/\{([^}]+)\}/"; + $replacement = function($matches) use($array) { + $key = $matches[1]; + if (array_key_exists($key, $array)) { + return $array[$key]; + } else { + return $matches[0]; + } + }; + + return preg_replace_callback($pattern, $replacement, $string); + } + + public function sendData($data) :ResponseInterface { + $headers = [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'Authorization' => "Token token={$this->api_key}" + ]; + + $this->sendRequest( + $this->method, + $this->getEndpointUrl(), + $headers, + $data); + + return $this->createResponse(json_decode($this->response->getContent(), true)); + } + + public function getEndpoint() : string { + return $this->replacePlaceholder($this->endpoint, $this->getParameters()); + } + + public function getEndpointUrl() : string { + return sprintf('https://%s.%s/v%d%s',$this->test_mode ? self::ENVIRONMENT_SANDBOX : self::ENVIRONMENT_LIVE ,$this->base_url, $this->api_version, $this->getEndpoint()); + } + + public static function hasModel() : bool { + return (bool) static::$model; + } + + public static function getModel($parameters = []) { + $class_name = static::$model; + $class_name = "Omnipay\\Rotessa\\Model\\{$class_name}Model"; + return new $class_name($parameters); + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php new file mode 100644 index 000000000000..7c03c42b0dc6 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/DeleteTransactionSchedulesId.php @@ -0,0 +1,18 @@ +setParameter('id',$value); + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php new file mode 100644 index 000000000000..17ffde5355d9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetCustomers.php @@ -0,0 +1,14 @@ +setParameter('id',$value); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php new file mode 100644 index 000000000000..47578d06eb8b --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/GetTransactionSchedulesId.php @@ -0,0 +1,17 @@ +setParameter('id',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php new file mode 100644 index 000000000000..092e378b9fd5 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchCustomersId.php @@ -0,0 +1,65 @@ +setParameter('id',$value); + } + public function setCustomIdentifier(string $value) { + $this->setParameter('custom_identifier',$value); + } + public function setName(string $value) { + $this->setParameter('name',$value); + } + public function setEmail(string $value) { + $this->setParameter('email',$value); + } + public function setCustomerType(string $value) { + $this->setParameter('customer_type',$value); + } + public function setHomePhone(string $value) { + $this->setParameter('home_phone',$value); + } + public function setPhone(string $value) { + $this->setParameter('phone',$value); + } + public function setBankName(string $value) { + $this->setParameter('bank_name',$value); + } + public function setInstitutionNumber(string $value) { + $this->setParameter('institution_number',$value); + } + public function setTransitNumber(string $value) { + $this->setParameter('transit_number',$value); + } + public function setBankAccountType(string $value) { + $this->setParameter('bank_account_type',$value); + } + public function setAuthorizationType(string $value) { + $this->setParameter('authorization_type',$value); + } + public function setRoutingNumber(string $value) { + $this->setParameter('routing_number',$value); + } + public function setAccountNumber(string $value) { + $this->setParameter('account_number',$value); + } + public function setAddress(array $value) { + $this->setParameter('address',$value); + } + public function setTransactionSchedules(array $value) { + $this->setParameter('transaction_schedules',$value); + } + public function setFinancialTransactions(array $value) { + $this->setParameter('financial_transactions',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php new file mode 100644 index 000000000000..fa04b9f05da6 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PatchTransactionSchedulesId.php @@ -0,0 +1,22 @@ +setParameter('id',$value); + } + public function setAmount(int $value) { + $this->setParameter('amount',$value); + } + public function setComment(string $value) { + $this->setParameter('comment',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php new file mode 100644 index 000000000000..a0c54fe65ca9 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomers.php @@ -0,0 +1,60 @@ +setParameter('id',$value); + } + public function setCustomIdentifier(string $value) { + $this->setParameter('custom_identifier',$value); + } + public function setName(string $value) { + $this->setParameter('name',$value); + } + public function setEmail(string $value) { + $this->setParameter('email',$value); + } + public function setCustomerType(string $value) { + $this->setParameter('customer_type',$value); + } + public function setHomePhone(string $value) { + $this->setParameter('home_phone',$value); + } + public function setPhone(string $value) { + $this->setParameter('phone',$value); + } + public function setBankName(string $value) { + $this->setParameter('bank_name',$value); + } + public function setInstitutionNumber(string $value = '') { + $this->setParameter('institution_number',$value); + } + public function setTransitNumber(string $value = '') { + $this->setParameter('transit_number',$value); + } + public function setBankAccountType(string $value) { + $this->setParameter('bank_account_type',$value); + } + public function setAuthorizationType(string $value = '') { + $this->setParameter('authorization_type',$value); + } + public function setRoutingNumber(string $value = '') { + $this->setParameter('routing_number',$value); + } + public function setAccountNumber(string $value) { + $this->setParameter('account_number',$value); + } + public function setAddress(array $value) { + $this->setParameter('address',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php new file mode 100644 index 000000000000..d590cb618526 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostCustomersShowWithCustomIdentifier.php @@ -0,0 +1,19 @@ +setParameter('custom_identifier',$value); + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php new file mode 100644 index 000000000000..80e28a7f5083 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedules.php @@ -0,0 +1,31 @@ +setParameter('customer_id',$value); + } + public function setProcessDate(string $value) { + $this->setParameter('process_date',$value); + } + public function setFrequency(string $value) { + $this->setParameter('frequency',$value); + } + public function setInstallments(int $value) { + $this->setParameter('installments',$value); + } + public function setComment(string $value) { + $this->setParameter('comment',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php new file mode 100644 index 000000000000..fd5111dc9a74 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesCreateWithCustomIdentifier.php @@ -0,0 +1,16 @@ +setParameter('custom_identifier',$value); + } + +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php new file mode 100644 index 000000000000..e037c5b4d322 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/PostTransactionSchedulesUpdateViaPost.php @@ -0,0 +1,24 @@ +setParameter('id',$value); + } + public function setAmount(int $value) { + $this->setParameter('amount',$value); + } + public function setComment(string $value) { + $this->setParameter('comment',$value); + } + } diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php new file mode 100644 index 000000000000..cfbcf0095b24 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Request/RequestInterface.php @@ -0,0 +1,10 @@ +code = $code; + $this->message = $message; + } + + public function getData() { + return $this->getParameters(); + } + + public function getCode() { + return (int) $this->code; + } + + public function isSuccessful() { + return $this->code < 300; + } + + public function getMessage() { + return $this->message; + } + + protected function getParameters() { + return $this->data; + } + + public function getParameter(string $key) { + return $this->getParameters()[$key]; + } +} \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php new file mode 100644 index 000000000000..080eaab504b1 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Message/Response/ResponseInterface.php @@ -0,0 +1,9 @@ +required), array_filter($this->getParameters()) ); + if(!empty($required)) throw new ValidationException("Could not validate " . implode(",", array_keys($required)) ); + + return true; + } + + public function __get($key) { + return array_key_exists($key, $this->attributes) ? $this->getParameter($key) : null; + } + + public function __set($key, $value) { + if(array_key_exists($key, $this->attributes)) $this->setParameter($key, $value); + } + + public function __toString() : string { + return json_encode($this); + } + + public function toString() : string { + return $this->__toString(); + } + + public function __toArray() : array { + return $this->getParameters(); + } + + + public function toArray() : array { + return $this->__toArray(); + } + + public function initialize(array $params = []) { + $this->parameters = new ParameterBag; + $parameters = array_merge($this->defaults, $params); + if ($parameters) { + foreach ($this->attributes as $param => $type) { + $value = @$parameters[$param]; + if($value){ + settype($value, $type); + $this->setParameter($param, $value); + } + } + } + + return $this; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php new file mode 100644 index 000000000000..8064662068c4 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/BaseModel.php @@ -0,0 +1,24 @@ + "string" + ]; + protected $required = ['id']; + protected $defaults = ['id' => 0 ]; + + public function __construct($parameters = array()) { + $this->initialize($parameters); + } + + public function jsonSerialize() : array { + return array_intersect_key($this->toArray(), array_flip($this->required) ); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php new file mode 100644 index 000000000000..0fd67aea9441 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerModel.php @@ -0,0 +1,94 @@ + "string", + "custom_identifier" => "string", + "name" => "string", + "email" => "string", + "customer_type" => "string", + "home_phone" => "string", + "phone" => "string", + "bank_name" => "string", + "institution_number" => "string", + "transit_number" => "string", + "bank_account_type" => "string", + "authorization_type" => "string", + "routing_number" => "string", + "account_number" => "string", + "address" => "object", + "transaction_schedules" => "array", + "financial_transactions" => "array", + "active" => "bool" + ]; + + protected $defaults = ["active" => false,"customer_type" =>'Business',"bank_account_type" =>'Savings',"authorization_type" =>'Online',]; + protected $required = ["name","email","customer_type","home_phone","phone","bank_name","institution_number","transit_number","bank_account_type","authorization_type","routing_number","account_number","address",'custom_identifier']; + + public function validate() : bool { + try { + $country = $this->address->country; + if(!self::isValidCountry($country)) throw new \Exception("Invalid country!"); + + $this->required = array_diff($this->required, Country::isAmerican($country) ? ["institution_number", "transit_number"] : ["bank_account_type", "routing_number"]); + parent::validate(); + if(Country::isCanadian($country) ) { + if(!self::isValidTransitNumber($this->getParameter('transit_number'))) throw new \Exception("Invalid transit number!"); + if(!self::isValidInstitutionNumber($this->getParameter('institution_number'))) throw new \Exception("Invalid institution number!"); + } + if(!self::isValidCustomerType($this->getParameter('customer_type'))) throw new \Exception("Invalid customer type!"); + if(!self::isValidBankAccountType($this->getParameter('bank_account_type'))) throw new \Exception("Invalid bank account type!"); + if(!self::isValidAuthorizationType($this->getParameter('authorization_type'))) throw new \Exception("Invalid authorization type!"); + } catch (\Throwable $th) { + throw new ValidationException($th->getMessage()); + } + + return true; + } + + public static function isValidCountry(string $country ) : bool { + return Country::isValidCountryCode($country) || Country::isValidCountryName($country); + } + + public static function isValidTransitNumber(string $value ) : bool { + return strlen($value) == 5; + } + + public static function isValidInstitutionNumber(string $value ) : bool { + return strlen($value) == 3; + } + + public static function isValidCustomerType(string $value ) : bool { + return CustomerType::isValid($value); + } + + public static function isValidBankAccountType(string $value ) : bool { + return BankAccountType::isValid($value); + } + + public static function isValidAuthorizationType(string $value ) : bool { + return AuthorizationType::isValid($value); + } + + public function toArray() : array { + return [ 'address' => (array) $this->getParameter('address') ] + parent::toArray(); + } + + public function jsonSerialize() : array { + $address = (array) $this->getParameter('address'); + unset($address['country']); + + return compact('address') + parent::jsonSerialize(); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php new file mode 100644 index 000000000000..c2e51d50b135 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/CustomerPatchModel.php @@ -0,0 +1,16 @@ + "string", + "amount" => "float", + "comment" => "string", + "created_at" => "date", + "financial_transactions" => "array", + "frequency" => "string", + "installments" => "integer", + "next_process_date" => "date", + "process_date" => "date", + "updated_at" => "date", + "customer_id" => "string", + "custom_identifier" => "string", + ]; + + public const DATE_FORMAT = 'F j, Y'; + + protected $defaults = ["amount" =>0.00,"comment" =>' ',"financial_transactions" =>0,"frequency" =>'Once',"installments" =>1]; + + protected $required = ["amount","comment","frequency","installments","process_date"]; + + public function validate() : bool { + try { + parent::validate(); + if(!self::isValidDate($this->process_date)) throw new \Exception("Could not validate date "); + if(!self::isValidFrequency($this->frequency)) throw new \Exception("Invalid frequency"); + if(is_null($this->customer_id) && is_null($this->custom_identifier)) throw new \Exception("customer id or custom identifier is invalid"); + } catch (\Throwable $th) { + throw new ValidationException($th->getMessage()); + } + + return true; + } + + public function jsonSerialize() : array { + return ['customer_id' => $this->getParameter('customer_id'), 'custom_identifier' => $this->getParameter('custom_identifier') ] + parent::jsonSerialize() ; + } + + public function __toArray() : array { + return parent::__toArray() ; + } + + public function initialize(array $params = [] ) { + $o_params = array_intersect_key( + $params = array_intersect_key($params, $this->attributes), + ($attr = array_filter($this->attributes, fn($p) => $p != "date")) + ); + parent::initialize($o_params); + $d_params = array_diff_key($params, $attr); + array_walk($d_params, function($v,$k) { + $this->setParameter($k, self::formatDate( $v) ); + }, ); + + return $this; + } + + public static function isValidDate($date) : bool { + $d = DateTime::createFromFormat(self::DATE_FORMAT, $date); + // Check if the date is valid and matches the format + return $d && $d->format(self::DATE_FORMAT) === $date; + } + + public static function isValidFrequency($value) : bool { + return Frequency::isValid($value); + } + + protected static function formatDate($date) : string { + $d = new DateTime($date); + return $d->format(self::DATE_FORMAT); + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php new file mode 100644 index 000000000000..119ac03999cb --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesIdBodyModel.php @@ -0,0 +1,23 @@ + "int", + "comment" => "string", + ]; + + public const DATE_FORMAT = 'Y-m-d H:i:s'; + + private $_is_error = false; + + protected $defaults = ["amount" =>0,"comment" =>'0',]; + + protected $required = ["amount","comment",]; +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php new file mode 100644 index 000000000000..749ae2f6b967 --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Model/TransactionSchedulesUpdateViaPostBodyModel.php @@ -0,0 +1,24 @@ + "int", + "amount" => "int", + "comment" => "string", + ]; + + public const DATE_FORMAT = 'Y-m-d H:i:s'; + + private $_is_error = false; + + protected $defaults = ["amount" =>0,"comment" =>'0',]; + + protected $required = ["amount","comment",]; +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php new file mode 100644 index 000000000000..1c5952b112ef --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/Address.php @@ -0,0 +1,53 @@ + "string", + "address_2" => "string", + "city" => "string", + "id" => "int", + "postal_code" => "string", + "province_code" => "string", + "country" => "string" + ]; + + protected $required = ["address_1","address_2","city","postal_code","province_code",]; + + public function jsonSerialize() { + return array_intersect_key($this->getParameters(), array_flip($this->required)); + } + + public function getCountry() : string { + return $this->getParameter('country'); + } + + public function initialize(array $parameters) { + foreach($this->attributes as $param => $type) { + $value = @$parameters[$param] ; + settype($value, $type); + $value = $value ?? null; + $this->parameters->set($param, $value); + } + } + + public function __toArray() : array { + return $this->getParameters(); + } + + public function __toString() : string { + return $this->getFullAddress(); + } + + public function getFullAddress() :string { + $full_address = $this->getParameters(); + extract($full_address); + + return "$address_1 $address_2, $city, $postal_code $province_code, $country"; + } +} diff --git a/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php new file mode 100644 index 000000000000..39dcebfa342f --- /dev/null +++ b/app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/Object/AuthorizationType.php @@ -0,0 +1,28 @@ + Date: Mon, 24 Jun 2024 20:29:08 -0400 Subject: [PATCH 27/85] allow matching of any client contact --- app/PaymentDrivers/RotessaPaymentDriver.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index 1bdf61c8547d..8764e0ac57b9 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -121,10 +121,11 @@ class RotessaPaymentDriver extends BaseDriver $customers = collect($result->getData())->unique('email'); $client_emails = $customers->pluck('email')->all(); $company_id = $this->company_gateway->company->id; - $client_contacts = ClientContact::where('company_id', $company_id)->whereIn('email', $client_emails )->where('is_primary', 1 )->whereNull('deleted_at')->get(); + $client_contacts = ClientContact::where('company_id', $company_id)->whereIn('email', $client_emails )->whereNull('deleted_at')->get(); $client_contacts = $client_contacts->map(function($item, $key) use ($customers) { return array_merge([], (array) $customers->firstWhere("email", $item->email) , ['custom_identifier' => $item->client->number, 'identifier' => $item->client->number ]); } ); + $client_contacts->each( function($contact) use ($customers) { sleep(10); From f7c689bf3bc7a621c9c481ca5159b5b2bbe076aa Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 26 Jun 2024 21:27:20 -0400 Subject: [PATCH 28/85] move componetn class to composer provider --- app/Providers/ComposerServiceProvider.php | 5 +++++ composer.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/Providers/ComposerServiceProvider.php b/app/Providers/ComposerServiceProvider.php index d548a3d997ce..300d88f87768 100644 --- a/app/Providers/ComposerServiceProvider.php +++ b/app/Providers/ComposerServiceProvider.php @@ -13,6 +13,7 @@ namespace App\Providers; use App\Http\ViewComposers\PortalComposer; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\Blade; class ComposerServiceProvider extends ServiceProvider { @@ -24,6 +25,9 @@ class ComposerServiceProvider extends ServiceProvider public function boot() { view()->composer('portal.*', PortalComposer::class); + include_once app_path('Http/ViewComposers/RotessaComposer.php'); + include_once app_path("Http/ViewComposers/Components/RotessaComponents.php"); + Blade::componentNamespace('App\\Http\\ViewComposers\\Components', 'rotessa'); } /** @@ -34,5 +38,6 @@ class ComposerServiceProvider extends ServiceProvider public function register() { // + } } diff --git a/composer.json b/composer.json index 70e9c4ab6032..73d5cb88a644 100644 --- a/composer.json +++ b/composer.json @@ -132,7 +132,7 @@ "app/Helpers/Generic.php", "app/Helpers/ClientPortal.php" ], - "classmap": ["app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/","app/Http/ViewComposers/Components/RotessaComponents.php"] + "classmap": ["app/PaymentDrivers/Rotessa/vendor/karneaud/omnipay-rotessa/src/Omnipay/Rotessa/"] }, "autoload-dev": { "psr-4": { From eb3968a9ebfb39e3a6cef1ca229522de66c03541 Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 26 Jun 2024 21:27:45 -0400 Subject: [PATCH 29/85] remove rotessa service provider --- app/Providers/RotessaServiceProvider.php | 20 ++------------------ config/app.php | 3 +-- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/app/Providers/RotessaServiceProvider.php b/app/Providers/RotessaServiceProvider.php index 951789cdaa04..4f01a045dbf3 100644 --- a/app/Providers/RotessaServiceProvider.php +++ b/app/Providers/RotessaServiceProvider.php @@ -17,31 +17,15 @@ class RotessaServiceProvider extends BaseProvider public function boot(): void { include_once app_path('Http/ViewComposers/RotessaComposer.php'); - class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\BankTransfer"); - class_alias("App\\PaymentDrivers\\Rotessa\\PaymentMethod","App\\PaymentDrivers\\Rotessa\\Acss"); - $this->registerViews(); + $this->registerComponent(); } /** * Register views. */ - public function registerViews(): void + public function registerComponent(): void { - $viewPath = resource_path('views/portal/ninja2020/gateways/'.$this->moduleNameLower); - $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$viewPath]), $this->moduleNameLower); Blade::componentNamespace('App\\Http\\ViewComposers\\Components', $this->moduleNameLower); } - - private function getPublishableViewPaths(): array - { - $paths = []; - foreach (config('view.paths') as $path) { - if (is_dir($path.'/'.$this->moduleNameLower)) { - $paths[] = $path.'/'.$this->moduleNameLower; - } - } - - return $paths; - } } diff --git a/config/app.php b/config/app.php index 23dddaa63986..59b709d0a9b6 100644 --- a/config/app.php +++ b/config/app.php @@ -200,8 +200,7 @@ return [ App\Providers\MultiDBProvider::class, App\Providers\ClientPortalServiceProvider::class, App\Providers\NinjaTranslationServiceProvider::class, - App\Providers\StaticServiceProvider::class, - App\Providers\RotessaServiceProvider::class + App\Providers\StaticServiceProvider::class ], /* From f03142a8348bdad597af92931413a84c2e0bba46 Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 26 Jun 2024 21:28:53 -0400 Subject: [PATCH 30/85] reference full blade path using render --- .../Components/RotessaComponents.php | 23 +++++++++++-------- app/Http/ViewComposers/RotessaComposer.php | 4 ++-- app/PaymentDrivers/Rotessa/PaymentMethod.php | 4 ++-- .../rotessa/components/account.blade.php | 2 +- .../rotessa/components/address.blade.php | 2 +- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/app/Http/ViewComposers/Components/RotessaComponents.php b/app/Http/ViewComposers/Components/RotessaComponents.php index 2af96e9f0fd7..b984d0bb2339 100644 --- a/app/Http/ViewComposers/Components/RotessaComponents.php +++ b/app/Http/ViewComposers/Components/RotessaComponents.php @@ -5,18 +5,24 @@ namespace App\Http\ViewComposers\Components; use App\DataProviders\CAProvinces; use App\DataProviders\USStates; use Illuminate\View\Component; +use App\Models\ClientContact; use Illuminate\Support\Arr; use Illuminate\View\View; + // Contact Component class ContactComponent extends Component { - public array $contact; - - public function __construct(array $contact) { - $this->contact = $contact; - $this->attributes = $this->newAttributeBag(Arr::only($this->contact, $this->fields) ); + public function __construct(ClientContact $contact) { + $contact = collect($contact->client->contacts->firstWhere('is_primary', 1)->toArray())->merge([ + 'home_phone' =>$contact->client->phone, + 'custom_identifier' => $contact->client->number, + 'name' =>$contact->client->name, + 'id' => null + ] )->all(); + + $this->attributes = $this->newAttributeBag(Arr::only($contact, $this->fields) ); } private $fields = [ @@ -37,7 +43,7 @@ class ContactComponent extends Component public function render() { - return $this->view('rotessa::components.contact', $this->attributes->getAttributes(), $this->defaults ); + return render('gateways.rotessa.components.contact', array_merge($this->defaults, $this->attributes->getAttributes() ) ); } } @@ -75,8 +81,7 @@ class AddressComponent extends Component public function render() { - - return $this->view('rotessa::components.address', $this->attributes->getAttributes(), $this->defaults ); + return render('gateways.rotessa.components.address',array_merge( $this->defaults, $this->attributes->getAttributes() ) ); } } @@ -113,6 +118,6 @@ class AccountComponent extends Component public function render() { - return $this->view('rotessa::components.account', $this->attributes->getAttributes(), $this->defaults ); + return render('gateways.rotessa.components.account', array_merge($this->attributes->getAttributes(), $this->defaults) ); } } diff --git a/app/Http/ViewComposers/RotessaComposer.php b/app/Http/ViewComposers/RotessaComposer.php index 5501fac81207..493d955267b4 100644 --- a/app/Http/ViewComposers/RotessaComposer.php +++ b/app/Http/ViewComposers/RotessaComposer.php @@ -4,13 +4,13 @@ use Illuminate\Support\Facades\View; use App\DataProviders\CAProvinces; use App\DataProviders\USStates; -View::composer(['rotessa::components.address','rotessa::components.banks.US.bank','rotessa::components.dropdowns.country.US'], function ($view) { +View::composer(['*.rotessa.components.address','*.rotessa.components.banks.US.bank','*.rotessa.components.dropdowns.country.US'], function ($view) { $states = USStates::get(); $view->with('states', $states); }); // CAProvinces View Composer -View::composer(['rotessa::components.address','rotessa::components.banks.CA.bank','rotessa::components.dropdowns.country.CA'], function ($view) { +View::composer(['*.rotessa.components.address','*.rotessa.components.banks.CA.bank','*.rotessa.components.dropdowns.country.CA'], function ($view) { $provinces = CAProvinces::get(); $view->with('provinces', $provinces); }); \ No newline at end of file diff --git a/app/PaymentDrivers/Rotessa/PaymentMethod.php b/app/PaymentDrivers/Rotessa/PaymentMethod.php index 903b681f70fe..b52c2423bf7e 100755 --- a/app/PaymentDrivers/Rotessa/PaymentMethod.php +++ b/app/PaymentDrivers/Rotessa/PaymentMethod.php @@ -67,7 +67,7 @@ class PaymentMethod implements MethodInterface ]; $data['address'] = collect($data['client']->toArray())->merge(['country' => $data['client']->country->iso_3166_2 ])->all(); - return view('rotessa::bank_transfer.authorize', $data); + return render('gateways.rotessa.bank_transfer.authorize', $data ); } /** * Handle the authorization page for Rotessa. @@ -128,7 +128,7 @@ class PaymentMethod implements MethodInterface $data['frequency'] = Frequencies::getOnePayment(); $data['installments'] = 1; $data['invoice_nums'] = $data['invoices']->pluck('invoice_number')->join(', '); - return view('rotessa::bank_transfer.pay', $data ); + return render('gateways.rotessa.bank_transfer.pay', $data ); } /** diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php index c42672255b00..d39c2d88544e 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php @@ -28,4 +28,4 @@ -@include("rotessa::components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) \ No newline at end of file +@include("portal.ninja2020.gateways.rotessa.components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) \ No newline at end of file diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php index 2db721cd4e28..68cbb97c6a79 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php @@ -59,4 +59,4 @@ - @include("rotessa::components.dropdowns.country.$country",compact('province_code')) \ No newline at end of file + @include("portal.ninja2020.gateways.rotessa.components.dropdowns.country.$country",compact('province_code')) \ No newline at end of file From 35d713a0b9cb9655d32b8ee82c82bdd7506a983d Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 26 Jun 2024 21:29:08 -0400 Subject: [PATCH 31/85] use alias --- app/PaymentDrivers/RotessaPaymentDriver.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index 8764e0ac57b9..6a40750a5ae4 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -24,10 +24,10 @@ use App\Utils\Traits\MakesHash; use App\Jobs\Util\SystemLogger; use App\PaymentDrivers\BaseDriver; use App\Models\ClientGatewayToken; -use App\PaymentDrivers\Rotessa\Acss; use Illuminate\Database\Eloquent\Builder; -use App\PaymentDrivers\Rotessa\BankTransfer; use App\PaymentDrivers\Rotessa\Resources\Customer; +use App\PaymentDrivers\Rotessa\PaymentMethod as Acss; +use App\PaymentDrivers\Rotessa\PaymentMethod as BankTransfer; class RotessaPaymentDriver extends BaseDriver { From 55e644f214729ece7e6980afd08f3e7a32017639 Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 3 Jul 2024 20:56:58 -0400 Subject: [PATCH 32/85] do not need these files --- app/Http/ViewComposers/RotessaComposer.php | 16 ----------- app/Providers/RotessaServiceProvider.php | 31 ---------------------- 2 files changed, 47 deletions(-) delete mode 100644 app/Http/ViewComposers/RotessaComposer.php delete mode 100644 app/Providers/RotessaServiceProvider.php diff --git a/app/Http/ViewComposers/RotessaComposer.php b/app/Http/ViewComposers/RotessaComposer.php deleted file mode 100644 index 493d955267b4..000000000000 --- a/app/Http/ViewComposers/RotessaComposer.php +++ /dev/null @@ -1,16 +0,0 @@ -with('states', $states); -}); - -// CAProvinces View Composer -View::composer(['*.rotessa.components.address','*.rotessa.components.banks.CA.bank','*.rotessa.components.dropdowns.country.CA'], function ($view) { - $provinces = CAProvinces::get(); - $view->with('provinces', $provinces); -}); \ No newline at end of file diff --git a/app/Providers/RotessaServiceProvider.php b/app/Providers/RotessaServiceProvider.php deleted file mode 100644 index 4f01a045dbf3..000000000000 --- a/app/Providers/RotessaServiceProvider.php +++ /dev/null @@ -1,31 +0,0 @@ -registerComponent(); - } - - /** - * Register views. - */ - public function registerComponent(): void - { - Blade::componentNamespace('App\\Http\\ViewComposers\\Components', $this->moduleNameLower); - } -} From 109e2a46d82434988bd65557c44eddc632cf7287 Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 3 Jul 2024 20:58:20 -0400 Subject: [PATCH 33/85] removed this file --- .../Components/RotessaComponents.php | 123 ------------------ 1 file changed, 123 deletions(-) delete mode 100644 app/Http/ViewComposers/Components/RotessaComponents.php diff --git a/app/Http/ViewComposers/Components/RotessaComponents.php b/app/Http/ViewComposers/Components/RotessaComponents.php deleted file mode 100644 index b984d0bb2339..000000000000 --- a/app/Http/ViewComposers/Components/RotessaComponents.php +++ /dev/null @@ -1,123 +0,0 @@ -client->contacts->firstWhere('is_primary', 1)->toArray())->merge([ - 'home_phone' =>$contact->client->phone, - 'custom_identifier' => $contact->client->number, - 'name' =>$contact->client->name, - 'id' => null - ] )->all(); - - $this->attributes = $this->newAttributeBag(Arr::only($contact, $this->fields) ); - } - - private $fields = [ - 'name', - 'email', - 'home_phone', - 'phone', - 'custom_identifier', - 'customer_type' , - 'id' - ]; - - private $defaults = [ - 'customer_type' => "Business", - 'customer_identifier' => null, - 'id' => null - ]; - - public function render() - { - return render('gateways.rotessa.components.contact', array_merge($this->defaults, $this->attributes->getAttributes() ) ); - } -} - -// Address Component -class AddressComponent extends Component -{ - private $fields = [ - 'address_1', - 'address_2', - 'city', - 'postal_code', - 'province_code', - 'country' - ]; - - private $defaults = [ - 'country' => 'US' - ]; - - public array $address; - - public function __construct(array $address) { - $this->address = $address; - if(strlen($this->address['state']) > 2 ) { - $this->address['state'] = $this->address['country'] == 'US' ? array_search($this->address['state'], USStates::$states) : CAProvinces::getAbbreviation($this->address['state']); - } - - $this->attributes = $this->newAttributeBag( - Arr::only(Arr::mapWithKeys($this->address, function ($item, $key) { - return in_array($key, ['address1','address2','state'])?[ (['address1'=>'address_1','address2'=>'address_2','state'=>'province_code'])[$key] => $item ] :[ $key => $item ]; - }), - $this->fields) ); - } - - - public function render() - { - return render('gateways.rotessa.components.address',array_merge( $this->defaults, $this->attributes->getAttributes() ) ); - } -} - -// AmericanBankInfo Component -class AccountComponent extends Component -{ - private $fields = [ - 'bank_account_type', - 'routing_number', - 'institution_number', - 'transit_number', - 'bank_name', - 'country', - 'account_number' - ]; - - private $defaults = [ - 'bank_account_type' => null, - 'routing_number' => null, - 'institution_number' => null, - 'transit_number' => null, - 'bank_name' => ' ', - 'account_number' => null, - 'country' => 'US', - "authorization_type" => 'Online' - ]; - - public array $account; - - public function __construct(array $account) { - $this->account = $account; - $this->attributes = $this->newAttributeBag(Arr::only($this->account, $this->fields) ); - } - - public function render() - { - return render('gateways.rotessa.components.account', array_merge($this->attributes->getAttributes(), $this->defaults) ); - } -} From 65aafc31f9433b29c2b95248a175ed098a93d01c Mon Sep 17 00:00:00 2001 From: karneaud Date: Wed, 3 Jul 2024 20:58:51 -0400 Subject: [PATCH 34/85] refactor compser components for rotessa --- .../Components/Rotessa/AccountComponent.php | 47 ++++++++++++++++++ .../Components/Rotessa/AddressComponent.php | 48 +++++++++++++++++++ .../Components/Rotessa/ContactComponent.php | 48 +++++++++++++++++++ app/Http/ViewComposers/RotessaComposer.php | 16 +++++++ app/Providers/ComposerServiceProvider.php | 17 +++++-- app/Providers/RotessaServiceProvider.php | 31 ++++++++++++ 6 files changed, 204 insertions(+), 3 deletions(-) create mode 100644 app/Http/ViewComposers/Components/Rotessa/AccountComponent.php create mode 100644 app/Http/ViewComposers/Components/Rotessa/AddressComponent.php create mode 100644 app/Http/ViewComposers/Components/Rotessa/ContactComponent.php create mode 100644 app/Http/ViewComposers/RotessaComposer.php create mode 100644 app/Providers/RotessaServiceProvider.php diff --git a/app/Http/ViewComposers/Components/Rotessa/AccountComponent.php b/app/Http/ViewComposers/Components/Rotessa/AccountComponent.php new file mode 100644 index 000000000000..46e44dc330d1 --- /dev/null +++ b/app/Http/ViewComposers/Components/Rotessa/AccountComponent.php @@ -0,0 +1,47 @@ + null, + 'routing_number' => null, + 'institution_number' => null, + 'transit_number' => null, + 'bank_name' => ' ', + 'account_number' => null, + 'country' => 'US', + "authorization_type" => 'Online' + ]; + + public array $account; + + public function __construct(array $account) { + $this->account = $account; + $this->attributes = $this->newAttributeBag(Arr::only($this->account, $this->fields) ); + } + + public function render() + { + return render('gateways.rotessa.components.account', array_merge($this->attributes->getAttributes(), $this->defaults) ); + } +} diff --git a/app/Http/ViewComposers/Components/Rotessa/AddressComponent.php b/app/Http/ViewComposers/Components/Rotessa/AddressComponent.php new file mode 100644 index 000000000000..5b5afc1599e5 --- /dev/null +++ b/app/Http/ViewComposers/Components/Rotessa/AddressComponent.php @@ -0,0 +1,48 @@ + 'US' + ]; + + public array $address; + + public function __construct(array $address) { + $this->address = $address; + if(strlen($this->address['state']) > 2 ) { + $this->address['state'] = $this->address['country'] == 'US' ? array_search($this->address['state'], USStates::$states) : CAProvinces::getAbbreviation($this->address['state']); + } + + $this->attributes = $this->newAttributeBag( + Arr::only(Arr::mapWithKeys($this->address, function ($item, $key) { + return in_array($key, ['address1','address2','state'])?[ (['address1'=>'address_1','address2'=>'address_2','state'=>'province_code'])[$key] => $item ] :[ $key => $item ]; + }), + $this->fields) ); + } + + + public function render() + { + return render('gateways.rotessa.components.address',array_merge( $this->defaults, $this->attributes->getAttributes() ) ); + } +} diff --git a/app/Http/ViewComposers/Components/Rotessa/ContactComponent.php b/app/Http/ViewComposers/Components/Rotessa/ContactComponent.php new file mode 100644 index 000000000000..b8c001b750e0 --- /dev/null +++ b/app/Http/ViewComposers/Components/Rotessa/ContactComponent.php @@ -0,0 +1,48 @@ +client->contacts->firstWhere('is_primary', 1)->toArray())->merge([ + 'home_phone' =>$contact->client->phone, + 'custom_identifier' => $contact->client->number, + 'name' =>$contact->client->name, + 'id' => null + ] )->all(); + + $this->attributes = $this->newAttributeBag(Arr::only($contact, $this->fields) ); + } + + private $fields = [ + 'name', + 'email', + 'home_phone', + 'phone', + 'custom_identifier', + 'customer_type' , + 'id' + ]; + + private $defaults = [ + 'customer_type' => "Business", + 'customer_identifier' => null, + 'id' => null + ]; + + public function render() + { + return render('gateways.rotessa.components.contact', array_merge($this->defaults, $this->attributes->getAttributes() ) ); + } +} diff --git a/app/Http/ViewComposers/RotessaComposer.php b/app/Http/ViewComposers/RotessaComposer.php new file mode 100644 index 000000000000..493d955267b4 --- /dev/null +++ b/app/Http/ViewComposers/RotessaComposer.php @@ -0,0 +1,16 @@ +with('states', $states); +}); + +// CAProvinces View Composer +View::composer(['*.rotessa.components.address','*.rotessa.components.banks.CA.bank','*.rotessa.components.dropdowns.country.CA'], function ($view) { + $provinces = CAProvinces::get(); + $view->with('provinces', $provinces); +}); \ No newline at end of file diff --git a/app/Providers/ComposerServiceProvider.php b/app/Providers/ComposerServiceProvider.php index 300d88f87768..b567dee2d302 100644 --- a/app/Providers/ComposerServiceProvider.php +++ b/app/Providers/ComposerServiceProvider.php @@ -14,6 +14,8 @@ namespace App\Providers; use App\Http\ViewComposers\PortalComposer; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Blade; +use App\DataProviders\CAProvinces; +use App\DataProviders\USStates; class ComposerServiceProvider extends ServiceProvider { @@ -25,9 +27,18 @@ class ComposerServiceProvider extends ServiceProvider public function boot() { view()->composer('portal.*', PortalComposer::class); - include_once app_path('Http/ViewComposers/RotessaComposer.php'); - include_once app_path("Http/ViewComposers/Components/RotessaComponents.php"); - Blade::componentNamespace('App\\Http\\ViewComposers\\Components', 'rotessa'); + view()->composer(['*.rotessa.components.address','*.rotessa.components.banks.US.bank','*.rotessa.components.dropdowns.country.US'], function ($view) { + $states = USStates::get(); + $view->with('states', $states); + }); + + // CAProvinces View Composer + view()->composer(['*.rotessa.components.address','*.rotessa.components.banks.CA.bank','*.rotessa.components.dropdowns.country.CA'], function ($view) { + $provinces = CAProvinces::get(); + $view->with('provinces', $provinces); + }); + + Blade::componentNamespace('App\\Http\\ViewComposers\\Components\\Rotessa', 'rotessa'); } /** diff --git a/app/Providers/RotessaServiceProvider.php b/app/Providers/RotessaServiceProvider.php new file mode 100644 index 000000000000..284bca9c708f --- /dev/null +++ b/app/Providers/RotessaServiceProvider.php @@ -0,0 +1,31 @@ +registerComponent(); + } + + /** + * Register views. + */ + public function registerComponent(): void + { + Blade::componentNamespace('App\\Http\\ViewComposers\\Components\\Rotessa', $this->moduleNameLower); + } +} From 734b34c33bacbd1ec38c07b5efaa690e8a6d8df0 Mon Sep 17 00:00:00 2001 From: karneaud Date: Mon, 15 Jul 2024 10:15:25 -0400 Subject: [PATCH 35/85] update import process to import/ sync new/existing customers --- app/PaymentDrivers/RotessaPaymentDriver.php | 96 ++++++++++++++++++--- 1 file changed, 83 insertions(+), 13 deletions(-) diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index 6a40750a5ae4..b40dd41d994a 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -24,6 +24,7 @@ use App\Utils\Traits\MakesHash; use App\Jobs\Util\SystemLogger; use App\PaymentDrivers\BaseDriver; use App\Models\ClientGatewayToken; +use Illuminate\Support\Facades\Cache; use Illuminate\Database\Eloquent\Builder; use App\PaymentDrivers\Rotessa\Resources\Customer; use App\PaymentDrivers\Rotessa\PaymentMethod as Acss; @@ -115,39 +116,108 @@ class RotessaPaymentDriver extends BaseDriver public function importCustomers() { $this->init(); try { - $result = $this->gateway->getCustomers()->send(); - if(!$result->isSuccessful()) throw new \Exception($result->getMessage(), (int) $result->getCode()); - - $customers = collect($result->getData())->unique('email'); + if(!$result = Cache::has('rotessa-import_customers')) { + $result = $this->gateway->getCustomers()->send(); + if(!$result->isSuccessful()) throw new \Exception($result->getMessage(), (int) $result->getCode()); + // cache results + Cache::put('rotessa-import_customers', $result->getData(), 60 * 60 * 24); + } + + $result = Cache::get('rotessa-import_customers'); + $customers = collect($result)->unique('email'); $client_emails = $customers->pluck('email')->all(); $company_id = $this->company_gateway->company->id; + // get existing customers $client_contacts = ClientContact::where('company_id', $company_id)->whereIn('email', $client_emails )->whereNull('deleted_at')->get(); $client_contacts = $client_contacts->map(function($item, $key) use ($customers) { - return array_merge([], (array) $customers->firstWhere("email", $item->email) , ['custom_identifier' => $item->client->number, 'identifier' => $item->client->number ]); + return array_merge([], (array) $customers->firstWhere("email", $item->email) , ['custom_identifier' => $item->client->number, 'identifier' => $item->client->number, 'client_id' => $item->client->id ]); } ); - + // create payment methods $client_contacts->each( function($contact) use ($customers) { sleep(10); $result = $this->gateway->getCustomersId(['id' => ($contact = (object) $contact)->id])->send(); - $this->client = Client::find($contact->custom_identifier); + $this->client = Client::find($contact->client_id); $customer = (new Customer($result->getData()))->additional(['id' => $contact->id, 'custom_identifier' => $contact->custom_identifier ] ); $this->findOrCreateCustomer($customer->additional + $customer->jsonSerialize()); } ); - + + // create new clients from rotessa customers + $client_emails = $client_contacts->pluck('email')->all(); + $client_contacts = $customers->filter(function ($value, $key) use ($client_emails) { + return !in_array(((object) $value)->email, $client_emails); + })->each( function($customer) use ($company_id) { + sleep(10); + // create new client contact from rotess customer + $customer = (object) $this->gateway->getCustomersId(['id' => ($customer = (object) $customer)->id])->send()->getData(); + /** + { + "account_number": "11111111" + "active": true, + "address": { + "address_1": "123 Main Street", + "address_2": "Unit 4", + "city": "Birmingham", + "id": 114397, + "postal_code": "36016", + "province_code": "AL" + }, + "authorization_type": "Online", + "bank_account_type": "Checking", + "bank_name": "Scotiabank", + "created_at": "2015-02-10T23:50:45.000-06:00", + "custom_identifier": "Mikey", + "customer_type": "Personal", + "email": "mikesmith@test.com", + "financial_transactions": [], + "home_phone": "(204) 555 5555", + "id": 1, + "identifier": "Mikey", + "institution_number": "", + "name": "Mike Smith", + "phone": "(204) 555 4444", + "routing_number": "111111111", + "transaction_schedules": [], + "transit_number": "", + "updated_at": "2015-02-10T23:50:45.000-06:00" + } + */ + $client = (\App\Factory\ClientFactory::create($this->company_gateway->company_id, $this->company_gateway->user_id))->fill( + [ + 'address1' => $customer->address['address_1'] ?? '', + 'address2' =>$customer->address['address_2'] ?? '', + 'city' => $customer->address['city'] ?? '', + 'postal_code' => $customer->address['postal_code'] ?? '', + 'state' => $customer->address['province_code'] ?? '', + 'country_id' => empty($customer->transit_number) ? 840 : 124, + 'routing_id' => empty(($r = $customer->routing_number))? null : $r, + "number" => str_pad($customer->account_number,3,'0',STR_PAD_LEFT) + ] + ); + $client->saveQuietly(); + $contact = (\App\Factory\ClientContactFactory::create($company_id, $this->company_gateway->user_id))->fill([ + "first_name" => substr($customer->name, 0, stripos($customer->name, " ")), + "last_name" => substr($customer->name, stripos($customer->name, " ")), + "email" => $customer->email, + "phone" => $customer->phone + ]); + $client->contacts()->saveMany([$contact]); + $contact = $client->contacts()->first(); + $this->client = $client; + $customer = (new Customer((array) $customer))->additional(['id' => $customer->id, 'custom_identifier' => $customer->custom_identifier ?? $contact->id ] ); + $this->findOrCreateCustomer($customer->additional + $customer->jsonSerialize()); + }); } catch (\Throwable $th) { - $data = [ + $data = [ 'transaction_reference' => null, 'transaction_response' => $th->getMessage(), 'success' => false, 'description' => $th->getMessage(), 'code' =>(int) $th->getCode() ]; - - SystemLogger::dispatch(['server_response' => $th->getMessage(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client , $this->company_gateway->company); + SystemLogger::dispatch(['server_response' => $th->getMessage(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->company_gateway->client , $this->company_gateway->company); - throw $th; } @@ -198,7 +268,7 @@ class RotessaPaymentDriver extends BaseDriver 'code' =>(int) $th->getCode() ]; - SystemLogger::dispatch(['server_response' => is_null($result) ? '' : $result->getData(), 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client, $this->client->company); + SystemLogger::dispatch(['server_response' => is_null($result) ? '' : (array) $result, 'data' => $data], SystemLog::CATEGORY_GATEWAY_RESPONSE, SystemLog::EVENT_GATEWAY_FAILURE, 880 , $this->client, $this->company_gateway->company); throw $th; } From 4f651ded6fa1534ee6d433919400b6660d14203a Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 12:43:25 -0400 Subject: [PATCH 36/85] Update texts.php Updated french canadian language texts Signed-off-by: Kendall Arneaud --- lang/fr_CA/texts.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php index a01d6cf20ce9..365c5cbaeff1 100644 --- a/lang/fr_CA/texts.php +++ b/lang/fr_CA/texts.php @@ -5299,6 +5299,24 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'auto_expand_product_table_notes' => 'Développer automatiquement les notes du tableau de produits', 'auto_expand_product_table_notes_help' => '  Développe automatiquement la section des notes dans le tableau de produits pour afficher plus de lignes.', + 'transit_number'=>'Numéro de transit', + 'institution_number' => 'Numéro d\'institution', + 'account_type' => 'Type de compte', + 'personal' => 'Personnel', + 'province_code' => 'Code de la province (abréviation)', + 'province_abbreviation' => 'Abréviation de la province', + 'postal_code' => 'Code postal', + 'street_address' => 'Adresse', + 'full_name' => 'Nom complet', + 'address_information' => 'Informations de l\'adresse', + 'enter_the_information_for_the_bank_account' => 'Entrez les informations du compte bancaire', + 'address_line_1' => 'Adresse ligne 1', + 'address_line_2' => 'Adresse ligne 2', + 'account_holder_information' => 'Informations du titulaire du compte', + 'enter_information_for_the_account_holder' => 'Entrez les informations du titulaire du compte', + 'home_phone' => 'Téléphone résidentiel', + 'customer_type' => 'Type de client', + 'process_date' => 'Date de traitement' ); return $lang; From f540b455771a75d79ca9f6fb8fd5a3ea90615f9a Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 12:45:26 -0400 Subject: [PATCH 37/85] Update account.blade.php updated to handle translations Signed-off-by: Kendall Arneaud --- .../gateways/rotessa/components/account.blade.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php index d39c2d88544e..b86dd378a6e3 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php @@ -1,15 +1,15 @@

- Account Information + {{ ctrans('texts.account_information) }}

- Enter the information for the bank account + {{ ctrans('texts.enter_the_information_for_the_bank_account') }}

- Bank Name + {{ ctrans('texts.bank_name') }}
@@ -18,7 +18,7 @@
- Account Number + {{ ctrans('texts.account_number') }}
@@ -28,4 +28,4 @@ -@include("portal.ninja2020.gateways.rotessa.components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) \ No newline at end of file +@include("portal.ninja2020.gateways.rotessa.components.banks.$country.bank", compact('bank_account_type','routing_number','institution_number','transit_number')) From 9a3cfde42dfa41ab3b9522a604364ff9cadb2054 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 12:50:35 -0400 Subject: [PATCH 38/85] Update texts.php update canadian language text Signed-off-by: Kendall Arneaud --- lang/ca/texts.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lang/ca/texts.php b/lang/ca/texts.php index 182be60bc3f3..baf5f83c9e23 100644 --- a/lang/ca/texts.php +++ b/lang/ca/texts.php @@ -5301,6 +5301,22 @@ $lang = array( 'latest_requires_php_version' => 'Note: the latest version requires PHP :version', 'auto_expand_product_table_notes' => 'Automatically expand products table notes', 'auto_expand_product_table_notes_help' => 'Automatically expands the notes section within the products table to display more lines.', + 'institution_number' => 'Institution Number', + 'transit_number' => 'Transit Number', + 'personal' => 'Personal', + 'province_code' => 'Province Code', + 'province_abbreviation' => 'Province Abbreviation', + 'street_address' => 'Street Address', + 'full_name' => 'Full Name', + 'address_information' => 'Address Information', + 'enter_the_information_for_the_bank_account' => 'Enter the Information for the Bank Account', + 'address_line_1' => 'Address Line 1', + 'address_line_2' => 'Address Line 2', + 'account_holder_information' => 'Account Holder Information', + 'enter_information_for_the_account_holder' => 'Enter Information for the Account Holder', + 'home_phone' => 'Home Phone', + 'customer_type' => 'Customer Type', + 'process_date' => 'Process Date' ); return $lang; From f9f20ae0f545db3382bc4b7a514beb6eaf22f52a Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 12:55:51 -0400 Subject: [PATCH 39/85] Update address.blade.php Updated to use language translation features Signed-off-by: Kendall Arneaud --- .../rotessa/components/address.blade.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php index 68cbb97c6a79..57db2d1d29c1 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/address.blade.php @@ -1,16 +1,16 @@

- Address Information + {{ ctrans('texts.address_information') }}

- Enter the address information for the account holder + {{ ctrans('texts.enter_the_address_information_for_the_account_holder') }}

- Address Line 1 + {{ ctrans('texts.address_line_1') }}
@@ -19,7 +19,7 @@
- Address Line 2 + {{ ctrans('texts.address_line_2') }}
@@ -37,7 +37,7 @@
- Postal Code + {{ ctrans('texts.postal_code') }}
@@ -46,17 +46,17 @@
- Country + {{ ctrans('texts.country') }}
@if('US' == $country) -
+
@else -
+
@endif
- @include("portal.ninja2020.gateways.rotessa.components.dropdowns.country.$country",compact('province_code')) \ No newline at end of file + @include("portal.ninja2020.gateways.rotessa.components.dropdowns.country.$country",compact('province_code')) From e1cd7e879c4b89ad889237e287feb70e2eec8621 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:03:39 -0400 Subject: [PATCH 40/85] Update texts.php update text translation for canada Signed-off-by: Kendall Arneaud --- lang/ca/texts.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lang/ca/texts.php b/lang/ca/texts.php index baf5f83c9e23..e51aeff169a4 100644 --- a/lang/ca/texts.php +++ b/lang/ca/texts.php @@ -5316,7 +5316,8 @@ $lang = array( 'enter_information_for_the_account_holder' => 'Enter Information for the Account Holder', 'home_phone' => 'Home Phone', 'customer_type' => 'Customer Type', - 'process_date' => 'Process Date' + 'process_date' => 'Process Date', + 'other_phone' => 'Other Phone' ); return $lang; From dd109760f9d4e24b0f08e4ce0661bddc56a43d2f Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:04:40 -0400 Subject: [PATCH 41/85] Update contact.blade.php update blade template to use language translation features Signed-off-by: Kendall Arneaud --- .../rotessa/components/contact.blade.php | 101 +++++++++--------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php index 827fc587f5ad..a0ba5ada1b05 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php @@ -1,69 +1,66 @@ -
-

- Account Holder Information -

+

+ {{ ctrans('texts.account_holder_information') }} +

-

- Enter the information for the account holder -

-
+

+ {{ ctrans('texts.enter_the_information_for_the_account_holder') }} +

+
-
- Full Name -
-
- -
-
+
+ {{ ctrans('texts.full_name') }} +
+
+ +
+ +
+
+ {{ ctrans('texts.email_address') }} +
+
+ +
+
-
-
- Email Address -
-
- -
-
+
+
+ {{ ctrans('texts.home_phone') }} +
+
+ +
+
-
-
- Home Phone -
-
- -
-
+
+
+ {{ ctrans('texts.other_phone') }} +
+
+ +
+
-
-
- Other Phone -
-
- -
-
- -
-
- Customer Type -
-
+
+
+ {{ ctrans('texts.customer_type') }} +
+
- +
- +
-
-
+ + - - - \ No newline at end of file + + From e082a9a0372edc81d1dd642e704cac9287d8e946 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:09:15 -0400 Subject: [PATCH 42/85] Update US.blade.php Update blade to use the language translation feature Signed-off-by: Kendall Arneaud --- .../rotessa/components/dropdowns/country/US.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php index 7c33af78d31a..b47e8694d339 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/US.blade.php @@ -1,6 +1,6 @@
- State + {{ ctrans('texts.state') }}
-
\ No newline at end of file + From 3a7fa2807f34d4b4d0046275f3bf9ea9c31f81f3 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:10:31 -0400 Subject: [PATCH 43/85] Update CA.blade.php update blade to use the language translation feature Signed-off-by: Kendall Arneaud --- .../rotessa/components/dropdowns/country/CA.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php index f2d7a38a5ecb..84911397c54d 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php @@ -1,6 +1,6 @@
- Province Code + {{ ctrans('texts.province_code') }}
-
\ No newline at end of file + From 89f06fe04d3f727862c657e020052a4e4a696efa Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:15:13 -0400 Subject: [PATCH 44/85] Update bank.blade.php update blade to use language translation feature Signed-off-by: Kendall Arneaud --- .../components/banks/CA/bank.blade.php | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php index 3c37b84741c6..6ad256c3e6a3 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/CA/bank.blade.php @@ -1,17 +1,17 @@
-
- Transit Number -
-
- -
-
+
+ {{ ctrans('texts.transit_number') }} +
+
+ +
+ -
-
- Institution Number -
-
- -
-
+
+
+ {{ ctrans('texts.institution_number') }} +
+
+ +
+
From 42c650fd5a6f7c976d7acb2be1480552dd868034 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:16:58 -0400 Subject: [PATCH 45/85] Update bank.blade.php Update blade to use language translation feature Signed-off-by: Kendall Arneaud --- .../components/banks/US/bank.blade.php | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php index 891fbe421a9a..da8b7f45e6d7 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/banks/US/bank.blade.php @@ -1,28 +1,26 @@ +
+
+ {{ ctrans('texts.routing_number') }} +
+
+ +
+
- -
-
- Routing Number -
-
- -
-
- -
-
- Account Type -
-
+
+
+ {{ ctrans('texts.account_type') }} +
+
- +
- - + +
-
-
\ No newline at end of file + + From 2ea54b0042b247ffdb054f7f707544a2b145ed23 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Fri, 26 Jul 2024 13:19:11 -0400 Subject: [PATCH 46/85] Update details.blade.php Update blade to use language translation feature Signed-off-by: Kendall Arneaud --- .../gateways/rotessa/bank_transfer/CA/details.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php index 9492f3036fc1..9157edc56c8c 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/CA/details.blade.php @@ -1,4 +1,4 @@ -
Gateway:
+
{{ ctrans('texts.gateway') }}:
{{ $brand }}
-
Account Number:
-
{{ $account_number }}
\ No newline at end of file +
{{ ctrans('texts.account_number') }}:
+
{{ $account_number }}
From 1196181a06e380ab18f778d890c18f47f8630f55 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sat, 27 Jul 2024 11:26:52 -0400 Subject: [PATCH 47/85] Update Gateway.php Increment id Signed-off-by: Kendall Arneaud --- app/Models/Gateway.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index b950e07165e7..f5377d88f504 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -105,7 +105,7 @@ class Gateway extends StaticModel $link = 'https://www.forte.net/'; } elseif ($this->id == 62) { $link = 'https://docs.btcpayserver.org/InvoiceNinja/'; - } elseif ($this->id == 4002) { + } elseif ($this->id == 63) { $link = 'https://rotessa.com'; } From 8e1706cd7baaa41ca7d748353eaf0f7a170fa4ba Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sat, 27 Jul 2024 11:39:20 -0400 Subject: [PATCH 48/85] Update pay.blade.php don't use token id integer on front end Signed-off-by: Kendall Arneaud --- .../ninja2020/gateways/rotessa/bank_transfer/pay.blade.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php index 4e6e0c2a0b22..e159e8504cd8 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php @@ -23,7 +23,7 @@ @if (count($tokens) > 0) @foreach ($tokens as $token)
@endforeach @endisset
- Process Date + {{ ctrans('texts.process_date') }}
From fcdeee1a2804a59e42fdbed4d98e0e025ba45ed6 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sat, 27 Jul 2024 12:56:30 -0400 Subject: [PATCH 61/85] Update Gateway.php Updated to correct id Signed-off-by: Kendall Arneaud --- app/Models/Gateway.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index f5377d88f504..b4628cf411b7 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -226,7 +226,7 @@ class Gateway extends StaticModel return [ GatewayType::CRYPTO => ['refund' => true, 'token_billing' => false, 'webhooks' => ['confirmed', 'paid_out', 'failed', 'fulfilled']], ]; //BTCPay - case 4002: + case 63: return [ GatewayType::BANK_TRANSFER => [ 'refund' => false, From 5da3b15f0f70f38e2234ed4677934ac5f9084602 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 28 Jul 2024 08:54:00 +1000 Subject: [PATCH 62/85] Add new Gateway --- composer.lock | 344 +++++++++--------- .../2024_06_11_231143_add_rotessa_gateway.php | 3 +- 2 files changed, 178 insertions(+), 169 deletions(-) diff --git a/composer.lock b/composer.lock index 541f0c04527b..f736181bd8c3 100644 --- a/composer.lock +++ b/composer.lock @@ -740,16 +740,16 @@ }, { "name": "braintree/braintree_php", - "version": "6.18.0", + "version": "6.19.0", "source": { "type": "git", "url": "https://github.com/braintree/braintree_php.git", - "reference": "8ca67004fe2405ef0b6b33a5897594fdcf417e0e" + "reference": "f3178632ca098d1f96a429d665aabc4e95346c03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/braintree/braintree_php/zipball/8ca67004fe2405ef0b6b33a5897594fdcf417e0e", - "reference": "8ca67004fe2405ef0b6b33a5897594fdcf417e0e", + "url": "https://api.github.com/repos/braintree/braintree_php/zipball/f3178632ca098d1f96a429d665aabc4e95346c03", + "reference": "f3178632ca098d1f96a429d665aabc4e95346c03", "shasum": "" }, "require": { @@ -783,9 +783,9 @@ "description": "Braintree PHP Client Library", "support": { "issues": "https://github.com/braintree/braintree_php/issues", - "source": "https://github.com/braintree/braintree_php/tree/6.18.0" + "source": "https://github.com/braintree/braintree_php/tree/6.19.0" }, - "time": "2024-03-26T21:08:13+00:00" + "time": "2024-07-23T20:09:58+00:00" }, { "name": "brick/math", @@ -2804,16 +2804,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.9.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "a629e5b69db96eb4939c1b34114130077dd4c6fc" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a629e5b69db96eb4939c1b34114130077dd4c6fc", - "reference": "a629e5b69db96eb4939c1b34114130077dd4c6fc", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { @@ -2910,7 +2910,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -2926,7 +2926,7 @@ "type": "tidelift" } ], - "time": "2024-07-19T16:19:57+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", @@ -4614,16 +4614,16 @@ }, { "name": "laravel/framework", - "version": "v11.16.0", + "version": "v11.18.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "bd4808aaf103ccb5cb4b00bcee46140c070c0ec4" + "reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/bd4808aaf103ccb5cb4b00bcee46140c070c0ec4", - "reference": "bd4808aaf103ccb5cb4b00bcee46140c070c0ec4", + "url": "https://api.github.com/repos/laravel/framework/zipball/b19ba518c56852567e99fbae9321bc436c2cc5a8", + "reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8", "shasum": "" }, "require": { @@ -4816,20 +4816,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-07-16T14:33:07+00:00" + "time": "2024-07-26T10:39:29+00:00" }, { "name": "laravel/pint", - "version": "v1.16.2", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "51f1ba679a6afe0315621ad143d788bd7ded0eca" + "reference": "4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/51f1ba679a6afe0315621ad143d788bd7ded0eca", - "reference": "51f1ba679a6afe0315621ad143d788bd7ded0eca", + "url": "https://api.github.com/repos/laravel/pint/zipball/4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5", + "reference": "4dba80c1de4b81dc4c4fb10ea6f4781495eb29f5", "shasum": "" }, "require": { @@ -4882,7 +4882,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-07-09T15:58:08+00:00" + "time": "2024-07-23T16:40:20+00:00" }, { "name": "laravel/prompts", @@ -5004,16 +5004,16 @@ }, { "name": "laravel/slack-notification-channel", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "fc8d1873e3db63a480bc57aebb4bf5ec05332d91" + "reference": "8cd988fad1a08ed88dfd852f140477376c60217f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/fc8d1873e3db63a480bc57aebb4bf5ec05332d91", - "reference": "fc8d1873e3db63a480bc57aebb4bf5ec05332d91", + "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/8cd988fad1a08ed88dfd852f140477376c60217f", + "reference": "8cd988fad1a08ed88dfd852f140477376c60217f", "shasum": "" }, "require": { @@ -5063,9 +5063,9 @@ ], "support": { "issues": "https://github.com/laravel/slack-notification-channel/issues", - "source": "https://github.com/laravel/slack-notification-channel/tree/v3.2.0" + "source": "https://github.com/laravel/slack-notification-channel/tree/v3.3.0" }, - "time": "2024-01-15T20:07:45+00:00" + "time": "2024-07-10T19:39:44+00:00" }, { "name": "laravel/socialite", @@ -5407,16 +5407,16 @@ }, { "name": "league/commonmark", - "version": "2.4.2", + "version": "2.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" + "reference": "ac815920de0eff6de947eac0a6a94e5ed0fb147c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/ac815920de0eff6de947eac0a6a94e5ed0fb147c", + "reference": "ac815920de0eff6de947eac0a6a94e5ed0fb147c", "shasum": "" }, "require": { @@ -5429,8 +5429,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.3", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.0", + "commonmark/commonmark.js": "0.31.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -5452,7 +5452,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.6-dev" } }, "autoload": { @@ -5509,7 +5509,7 @@ "type": "tidelift" } ], - "time": "2024-02-02T11:59:32+00:00" + "time": "2024-07-24T12:52:09+00:00" }, { "name": "league/config", @@ -11342,16 +11342,16 @@ }, { "name": "symfony/console", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae", - "reference": "0aa29ca177f432ab68533432db0de059f39c92ae", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { @@ -11415,7 +11415,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.2" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -11431,7 +11431,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T10:03:55+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/css-selector", @@ -11567,16 +11567,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", - "reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { @@ -11622,7 +11622,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.2" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -11638,7 +11638,7 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", @@ -11864,16 +11864,16 @@ }, { "name": "symfony/finder", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6", - "reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { @@ -11908,7 +11908,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.1" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -11924,20 +11924,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "6e9db0025db565bcf8f1d46ed734b549e51e6045" + "reference": "b5e498f763e0bf5eed8dcd946e50a3b3f71d4ded" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/6e9db0025db565bcf8f1d46ed734b549e51e6045", - "reference": "6e9db0025db565bcf8f1d46ed734b549e51e6045", + "url": "https://api.github.com/repos/symfony/http-client/zipball/b5e498f763e0bf5eed8dcd946e50a3b3f71d4ded", + "reference": "b5e498f763e0bf5eed8dcd946e50a3b3f71d4ded", "shasum": "" }, "require": { @@ -12001,7 +12001,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.9" + "source": "https://github.com/symfony/http-client/tree/v6.4.10" }, "funding": [ { @@ -12017,7 +12017,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:59:05+00:00" + "time": "2024-07-15T09:26:24+00:00" }, { "name": "symfony/http-client-contracts", @@ -12099,16 +12099,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa", - "reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { @@ -12156,7 +12156,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.1" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -12172,20 +12172,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", - "reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "shasum": "" }, "require": { @@ -12270,7 +12270,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -12286,7 +12286,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T13:13:31+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/intl", @@ -12456,16 +12456,16 @@ }, { "name": "symfony/mailgun-mailer", - "version": "v6.4.9", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "c4917eb14f31fb5c21442375c6baf7f51bd924e8" + "reference": "3eb7c7b644179a766f5d816620b7b6d4a4e7ec43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/c4917eb14f31fb5c21442375c6baf7f51bd924e8", - "reference": "c4917eb14f31fb5c21442375c6baf7f51bd924e8", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/3eb7c7b644179a766f5d816620b7b6d4a4e7ec43", + "reference": "3eb7c7b644179a766f5d816620b7b6d4a4e7ec43", "shasum": "" }, "require": { @@ -12505,7 +12505,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.9" + "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.10" }, "funding": [ { @@ -12521,7 +12521,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:59:05+00:00" + "time": "2024-07-04T11:16:22+00:00" }, { "name": "symfony/mime", @@ -13540,16 +13540,16 @@ }, { "name": "symfony/process", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028" + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028", - "reference": "febf90124323a093c7ee06fdb30e765ca3c20028", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", "shasum": "" }, "require": { @@ -13581,7 +13581,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.1" + "source": "https://github.com/symfony/process/tree/v7.1.3" }, "funding": [ { @@ -13597,7 +13597,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:44:47+00:00" }, { "name": "symfony/property-access", @@ -13677,16 +13677,16 @@ }, { "name": "symfony/property-info", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16" + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/d7b91e4aa07e822a9b935fc29a7254c12d502f16", - "reference": "d7b91e4aa07e822a9b935fc29a7254c12d502f16", + "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", + "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", "shasum": "" }, "require": { @@ -13741,7 +13741,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.2" + "source": "https://github.com/symfony/property-info/tree/v7.1.3" }, "funding": [ { @@ -13757,20 +13757,20 @@ "type": "tidelift" } ], - "time": "2024-06-26T07:21:35+00:00" + "time": "2024-07-26T07:36:36+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "9a5dbb606da711f5d40a7596ad577856f9402140" + "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9a5dbb606da711f5d40a7596ad577856f9402140", - "reference": "9a5dbb606da711f5d40a7596ad577856f9402140", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1365d10f5476f74a27cf9c2d1eee70c069019db0", + "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0", "shasum": "" }, "require": { @@ -13824,7 +13824,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.1" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.3" }, "funding": [ { @@ -13840,20 +13840,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/routing", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0", - "reference": "60c31bab5c45af7f13091b87deb708830f3c96c0", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { @@ -13905,7 +13905,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.1" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -13921,20 +13921,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/serializer", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d2077674aaaff02a95f290de512aa358947e6bbe" + "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d2077674aaaff02a95f290de512aa358947e6bbe", - "reference": "d2077674aaaff02a95f290de512aa358947e6bbe", + "url": "https://api.github.com/repos/symfony/serializer/zipball/0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09", + "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09", "shasum": "" }, "require": { @@ -14002,7 +14002,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v7.1.2" + "source": "https://github.com/symfony/serializer/tree/v7.1.3" }, "funding": [ { @@ -14018,7 +14018,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T07:42:43+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/service-contracts", @@ -14105,16 +14105,16 @@ }, { "name": "symfony/string", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8", - "reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { @@ -14172,7 +14172,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.2" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -14188,20 +14188,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:27:18+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", - "version": "v7.1.1", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3" + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", - "reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", "shasum": "" }, "require": { @@ -14266,7 +14266,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.1" + "source": "https://github.com/symfony/translation/tree/v7.1.3" }, "funding": [ { @@ -14282,7 +14282,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/translation-contracts", @@ -14520,16 +14520,16 @@ }, { "name": "symfony/validator", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7" + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/bed12b7d5bd4dac452db5fa6203331c876b489e7", - "reference": "bed12b7d5bd4dac452db5fa6203331c876b489e7", + "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237", + "reference": "ba711a6cfc008544dad059abb3c1d997f1472237", "shasum": "" }, "require": { @@ -14597,7 +14597,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.2" + "source": "https://github.com/symfony/validator/tree/v7.1.3" }, "funding": [ { @@ -14613,20 +14613,20 @@ "type": "tidelift" } ], - "time": "2024-06-25T19:55:06+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.2", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d", - "reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { @@ -14680,7 +14680,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.2" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -14696,7 +14696,7 @@ "type": "tidelift" } ], - "time": "2024-06-28T08:00:31+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/yaml", @@ -15856,30 +15856,38 @@ }, { "name": "composer/pcre", - "version": "3.1.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.8" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.8", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -15907,7 +15915,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { @@ -15923,7 +15931,7 @@ "type": "tidelift" } ], - "time": "2024-05-27T13:40:54+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { "name": "composer/semver", @@ -16253,16 +16261,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.59.3", + "version": "v3.60.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29" + "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/30ba9ecc2b0e5205e578fe29973c15653d9bfd29", - "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/e595e4e070d17c5d42ed8c4206f630fcc5f401a4", + "reference": "e595e4e070d17c5d42ed8c4206f630fcc5f401a4", "shasum": "" }, "require": { @@ -16344,7 +16352,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.59.3" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.60.0" }, "funding": [ { @@ -16352,7 +16360,7 @@ "type": "github" } ], - "time": "2024-06-16T14:17:03+00:00" + "time": "2024-07-25T09:26:51+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -17022,16 +17030,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.7", + "version": "1.11.8", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d" + "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52d2bbfdcae7f895915629e4694e9497d0f8e28d", - "reference": "52d2bbfdcae7f895915629e4694e9497d0f8e28d", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", + "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", "shasum": "" }, "require": { @@ -17076,7 +17084,7 @@ "type": "github" } ], - "time": "2024-07-06T11:17:41+00:00" + "time": "2024-07-24T07:01:22+00:00" }, { "name": "phpunit/php-code-coverage", @@ -17874,31 +17882,31 @@ }, { "name": "react/socket", - "version": "v1.15.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", - "react/dns": "^1.11", + "react/dns": "^1.13", "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.6 || ^1.2.1", - "react/stream": "^1.2" + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4 || ^3 || ^2", + "react/async": "^4.3 || ^3.3 || ^2", "react/promise-stream": "^1.4", - "react/promise-timer": "^1.10" + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { @@ -17942,7 +17950,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.15.0" + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, "funding": [ { @@ -17950,7 +17958,7 @@ "type": "open_collective" } ], - "time": "2023-12-15T11:02:10+00:00" + "time": "2024-07-26T10:38:09+00:00" }, { "name": "react/stream", @@ -19011,16 +19019,16 @@ }, { "name": "spatie/error-solutions", - "version": "1.1.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "a014da18f2675ea15af0ba97f7e9aee59e13964f" + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/a014da18f2675ea15af0ba97f7e9aee59e13964f", - "reference": "a014da18f2675ea15af0ba97f7e9aee59e13964f", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", "shasum": "" }, "require": { @@ -19073,7 +19081,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.0" + "source": "https://github.com/spatie/error-solutions/tree/1.1.1" }, "funding": [ { @@ -19081,7 +19089,7 @@ "type": "github" } ], - "time": "2024-07-22T08:18:22+00:00" + "time": "2024-07-25T11:06:04+00:00" }, { "name": "spatie/flare-client-php", diff --git a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php index eb8d013d7fef..a9f6083d021c 100644 --- a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php +++ b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php @@ -20,7 +20,8 @@ return new class extends Migration $configuration = new \stdClass; $configuration->api_key = ''; $configuration->test_mode = true; - + + $gateway = new Gateway(); $gateway->id = 63; $gateway->name = 'Rotessa'; $gateway->key = '91be24c7b792230bced33e930ac61676'; From c92cf481613edd9fab976fb45d3c1fedf3fe5f23 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 28 Jul 2024 08:55:50 +1000 Subject: [PATCH 63/85] Ensure api credentials are camelCase --- database/migrations/2024_06_11_231143_add_rotessa_gateway.php | 4 ++-- database/seeders/PaymentLibrariesSeeder.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php index a9f6083d021c..7aed00572e28 100644 --- a/database/migrations/2024_06_11_231143_add_rotessa_gateway.php +++ b/database/migrations/2024_06_11_231143_add_rotessa_gateway.php @@ -18,8 +18,8 @@ return new class extends Migration if(!Gateway::find(63)) { $configuration = new \stdClass; - $configuration->api_key = ''; - $configuration->test_mode = true; + $configuration->apiKey = ''; + $configuration->testMode = true; $gateway = new Gateway(); $gateway->id = 63; diff --git a/database/seeders/PaymentLibrariesSeeder.php b/database/seeders/PaymentLibrariesSeeder.php index 2a6e0a68d091..d85f47b782b3 100644 --- a/database/seeders/PaymentLibrariesSeeder.php +++ b/database/seeders/PaymentLibrariesSeeder.php @@ -88,7 +88,7 @@ class PaymentLibrariesSeeder extends Seeder ['id' => 60, 'name' => 'PayPal REST', 'provider' => 'PayPal_Rest', 'key' => '80af24a6a691230bbec33e930ab40665', 'fields' => '{"clientId":"","secret":"","signature":"","testMode":false}'], ['id' => 61, 'name' => 'PayPal Platform', 'provider' => 'PayPal_PPCP', 'key' => '80af24a6a691230bbec33e930ab40666', 'fields' => '{"testMode":false}'], ['id' => 62, 'name' => 'BTCPay', 'provider' => 'BTCPay', 'key' => 'vpyfbmdrkqcicpkjqdusgjfluebftuva', 'fields' => '{"btcpayUrl":"", "apiKey":"", "storeId":"", "webhookSecret":""}'], - ['id' => 63, 'name' => 'Rotessa', 'is_offsite' => false, 'sort_order' => 22, 'provider' => 'Rotessa', 'key' => '91be24c7b792230bced33e930ac61676', 'fields' => '{"api_key":"", "test_mode":""}'], + ['id' => 63, 'name' => 'Rotessa', 'is_offsite' => false, 'sort_order' => 22, 'provider' => 'Rotessa', 'key' => '91be24c7b792230bced33e930ac61676', 'fields' => '{"apiKey":"", "testMode":""}'], ]; foreach ($gateways as $gateway) { From 39e641d140347bf916b34f561bafd5345cbe0fdf Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 28 Jul 2024 09:21:01 +1000 Subject: [PATCH 64/85] Fixes for missing ' --- .../ninja2020/gateways/rotessa/components/account.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php index b86dd378a6e3..fdd96a100ff3 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php @@ -1,6 +1,6 @@

- {{ ctrans('texts.account_information) }} + {{ ctrans('texts.account_information') }}

From f55f578de373bfce11f481f16a569ac9a6855aac Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 18:11:47 -0400 Subject: [PATCH 65/85] Update texts.php Moved to en/texts.php Signed-off-by: Kendall Arneaud --- lang/ca/texts.php | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/lang/ca/texts.php b/lang/ca/texts.php index e51aeff169a4..cdfde3357540 100644 --- a/lang/ca/texts.php +++ b/lang/ca/texts.php @@ -5300,24 +5300,7 @@ $lang = array( 'merge_to_pdf' => 'Merge to PDF', 'latest_requires_php_version' => 'Note: the latest version requires PHP :version', 'auto_expand_product_table_notes' => 'Automatically expand products table notes', - 'auto_expand_product_table_notes_help' => 'Automatically expands the notes section within the products table to display more lines.', - 'institution_number' => 'Institution Number', - 'transit_number' => 'Transit Number', - 'personal' => 'Personal', - 'province_code' => 'Province Code', - 'province_abbreviation' => 'Province Abbreviation', - 'street_address' => 'Street Address', - 'full_name' => 'Full Name', - 'address_information' => 'Address Information', - 'enter_the_information_for_the_bank_account' => 'Enter the Information for the Bank Account', - 'address_line_1' => 'Address Line 1', - 'address_line_2' => 'Address Line 2', - 'account_holder_information' => 'Account Holder Information', - 'enter_information_for_the_account_holder' => 'Enter Information for the Account Holder', - 'home_phone' => 'Home Phone', - 'customer_type' => 'Customer Type', - 'process_date' => 'Process Date', - 'other_phone' => 'Other Phone' + 'auto_expand_product_table_notes_help' => 'Automatically expands the notes section within the products table to display more lines.' ); return $lang; From efed61c8fd8601cc39f6aefb0e0ca712b5f01772 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 18:47:43 -0400 Subject: [PATCH 66/85] Update pay.blade.php update text translation Signed-off-by: Kendall Arneaud --- .../ninja2020/gateways/rotessa/bank_transfer/pay.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php index 2049774132ca..c91c9661274d 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php @@ -16,7 +16,7 @@ - + @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) @if (count($tokens) > 0) @@ -40,7 +40,7 @@ @endcomponent @else - @component('portal.ninja2020.components.general.card-element-single', ['title' => 'Direct Debit', 'show_title' => false]) + @component('portal.ninja2020.components.general.card-element-single', ['title' => ctrans('texts.direct_debit'), 'show_title' => false]) {{ ctrans('texts.bank_account_not_linked') }} Date: Sun, 28 Jul 2024 18:51:34 -0400 Subject: [PATCH 67/85] Update CA.blade.php amend translation text ref Signed-off-by: Kendall Arneaud --- .../gateways/rotessa/components/dropdowns/country/CA.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php index 84911397c54d..248ce5b5c316 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/dropdowns/country/CA.blade.php @@ -1,6 +1,6 @@

- {{ ctrans('texts.province_code') }} + {{ ctrans('texts.state') }}
@@ -19,7 +19,7 @@
- {{ ctrans('texts.address_line_2') }} + {{ ctrans('texts.address2') }}
@@ -28,7 +28,7 @@
- City + {{ ctrans('texts.city') }}
From 4a8a52b09d304eeb82e52cc77c38f80d9f024221 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:03:14 -0400 Subject: [PATCH 69/85] Update contact.blade.php Amend translation text. Signed-off-by: Kendall Arneaud --- .../ninja2020/gateways/rotessa/components/contact.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php index a0ba5ada1b05..a2a8e412b6ca 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php @@ -10,7 +10,7 @@
- {{ ctrans('texts.full_name') }} + {{ ctrans('texts.account_holder_name') }}
@@ -28,7 +28,7 @@
- {{ ctrans('texts.home_phone') }} + {{ ctrans('texts.phone') }}
@@ -37,7 +37,7 @@
- {{ ctrans('texts.other_phone') }} + {{ ctrans('texts.work_phone') }}
From 828946fcecbd195f346c8124091ddfd1be5b4851 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:04:28 -0400 Subject: [PATCH 70/85] Update contact.blade.php update amendments Signed-off-by: Kendall Arneaud --- .../ninja2020/gateways/rotessa/components/contact.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php index a2a8e412b6ca..26b1de6eba9b 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/contact.blade.php @@ -13,7 +13,7 @@ {{ ctrans('texts.account_holder_name') }}
- +
@@ -31,7 +31,7 @@ {{ ctrans('texts.phone') }}
- +
@@ -40,7 +40,7 @@ {{ ctrans('texts.work_phone') }}
- +
From 3babc85a8bb43d319a233491cdbf145ac35531bf Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:11:17 -0400 Subject: [PATCH 71/85] Update pay.blade.php Remove in favor of internal method to generate comment Signed-off-by: Kendall Arneaud --- .../ninja2020/gateways/rotessa/bank_transfer/pay.blade.php | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php index c91c9661274d..af0158e0716d 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/bank_transfer/pay.blade.php @@ -16,7 +16,6 @@ - @component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.pay_with')]) @if (count($tokens) > 0) From eb3d029157b7727e2b9b6abc7bd9dc9d99753ea2 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:17:16 -0400 Subject: [PATCH 72/85] Update PaymentMethod.php use default internal description method. Signed-off-by: Kendall Arneaud --- app/PaymentDrivers/Rotessa/PaymentMethod.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/PaymentDrivers/Rotessa/PaymentMethod.php b/app/PaymentDrivers/Rotessa/PaymentMethod.php index ccb5432b0d62..6f0b327371c5 100755 --- a/app/PaymentDrivers/Rotessa/PaymentMethod.php +++ b/app/PaymentDrivers/Rotessa/PaymentMethod.php @@ -154,7 +154,7 @@ class PaymentMethod implements MethodInterface ->first(); if(!$customer) throw new \Exception('Client gateway token not found!', 605); - $transaction = new Transaction($request->only('frequency' ,'installments','amount','process_date','comment')); + $transaction = new Transaction($request->only('frequency' ,'installments','amount','process_date') + ['comment' => $this->rotessa->getDescription(false) ]); $transaction->additional(['customer_id' => $customer->gateway_customer_reference]); $transaction = array_filter( $transaction->resolve()); $response = $this->rotessa->gateway->capture($transaction)->send(); From ddfafc5418dacc323a7e0fc88d4baf08898ddc32 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:19:24 -0400 Subject: [PATCH 73/85] Update texts.php update text translations Signed-off-by: Kendall Arneaud --- lang/en/texts.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lang/en/texts.php b/lang/en/texts.php index e2bad2efdae3..7e8a04578b82 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -5301,6 +5301,15 @@ $lang = array( 'latest_requires_php_version' => 'Note: the latest version requires PHP :version', 'auto_expand_product_table_notes' => 'Automatically expand products table notes', 'auto_expand_product_table_notes_help' => 'Automatically expands the notes section within the products table to display more lines.', + 'institution_number' => 'Institution Number', + 'transit_number' => 'Transit Number', + 'personal' => 'Personal', + 'address_information' => 'Address Information', + 'enter_the_information_for_the_bank_account' => 'Enter the Information for the Bank Account', + 'account_holder_information' => 'Account Holder Information', + 'enter_information_for_the_account_holder' => 'Enter Information for the Account Holder', + 'customer_type' => 'Customer Type', + 'process_date' => 'Process Date' ); return $lang; From 321322401ec0759829ea8ce8b9fd63a3e623dc02 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:33:03 -0400 Subject: [PATCH 74/85] Update RotessaPaymentDriver.php Remove until proper testing can be done. Signed-off-by: Kendall Arneaud --- app/PaymentDrivers/RotessaPaymentDriver.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/PaymentDrivers/RotessaPaymentDriver.php b/app/PaymentDrivers/RotessaPaymentDriver.php index bb014bc9a333..f04412f4e260 100644 --- a/app/PaymentDrivers/RotessaPaymentDriver.php +++ b/app/PaymentDrivers/RotessaPaymentDriver.php @@ -65,13 +65,15 @@ class RotessaPaymentDriver extends BaseDriver { $types = []; - if ($this->client + /* + // TODO: needs to test with US test account + if ($this->client && $this->client->currency() && in_array($this->client->currency()->code, ['USD']) && isset($this->client->country) && in_array($this->client->country->iso_3166_2, ['US'])) { $types[] = GatewayType::BANK_TRANSFER; - } + }*/ if ($this->client && $this->client->currency() From adc05fbe0f249de510bf80747ebc7e057ee1cbe8 Mon Sep 17 00:00:00 2001 From: Kendall Arneaud Date: Sun, 28 Jul 2024 19:41:19 -0400 Subject: [PATCH 75/85] Update account.blade.php Amend text translations Signed-off-by: Kendall Arneaud --- .../ninja2020/gateways/rotessa/components/account.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php index fdd96a100ff3..bec0600e0a26 100644 --- a/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php +++ b/resources/views/portal/ninja2020/gateways/rotessa/components/account.blade.php @@ -12,7 +12,7 @@ {{ ctrans('texts.bank_name') }}
- +
@@ -21,7 +21,7 @@ {{ ctrans('texts.account_number') }}
- +
From 8f64d1bb3334c802ddf12c6fbb629d35bed206e5 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 29 Jul 2024 10:56:38 +1000 Subject: [PATCH 76/85] Updated resources --- .../{app-f3b33400.css => app-02bc3b96.css} | 2 +- public/build/assets/app-234e3402.js | 109 ------------------ public/build/assets/app-e0713224.js | 109 ++++++++++++++++++ public/build/manifest.json | 4 +- 4 files changed, 112 insertions(+), 112 deletions(-) rename public/build/assets/{app-f3b33400.css => app-02bc3b96.css} (87%) delete mode 100644 public/build/assets/app-234e3402.js create mode 100644 public/build/assets/app-e0713224.js diff --git a/public/build/assets/app-f3b33400.css b/public/build/assets/app-02bc3b96.css similarity index 87% rename from public/build/assets/app-f3b33400.css rename to public/build/assets/app-02bc3b96.css index 2c37a323fc86..8c1544d1c4e3 100644 --- a/public/build/assets/app-f3b33400.css +++ b/public/build/assets/app-02bc3b96.css @@ -1 +1 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.form-input,.form-textarea,.form-select,.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}.form-input:focus,.form-textarea:focus,.form-select:focus,.form-multiselect:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}.form-select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}.form-checkbox,.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}.form-checkbox{border-radius:0}.form-radio{border-radius:100%}.form-checkbox:focus,.form-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.form-checkbox:checked,.form-radio:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}.form-checkbox:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-checkbox:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-radio:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-radio:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:checked:hover,.form-checkbox:checked:focus,.form-radio:checked:hover,.form-radio:checked:focus{border-color:transparent;background-color:currentColor}.form-checkbox:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){.form-checkbox:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:indeterminate:hover,.form-checkbox:indeterminate:focus{border-color:transparent;background-color:currentColor}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.button{border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}button:disabled{cursor:not-allowed;opacity:.5}.button-primary{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-primary:hover{font-weight:600}.button-block{display:block;width:100%}.button-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.button-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.button-link{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.button-link:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity));text-decoration-line:underline}.button-link:focus{text-decoration-line:underline;outline:2px solid transparent;outline-offset:2px}.validation{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.25rem .75rem}.validation-fail{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.validation-pass{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.input-label{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.input-slim{padding-top:.5rem;padding-bottom:.5rem}.form-checkbox{cursor:pointer;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.form-select{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.alert{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem}.alert-success{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.alert-failure{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.125rem .625rem;font-size:.75rem;font-weight:500;line-height:1rem}.badge-light{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.badge-primary{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.badge-danger{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.badge-success{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity))}.badge-secondary{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.badge-warning{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity))}.badge-info{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}@media (min-width: 640px){.dataTables_length{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width: 1024px){.dataTables_length{margin-top:1rem!important;margin-bottom:1rem!important}}.dataTables_length select{margin-left:.5rem!important;margin-right:.5rem!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_length select:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.dataTables_filter{margin-bottom:1rem}.dataTables_filter input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_filter input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}@media (min-width: 1024px){.dataTables_filter{margin-top:-3rem!important}}.dataTables_paginate{padding-bottom:1.5rem!important;padding-top:.5rem!important}.dataTables_paginate .paginate_button{margin-right:.25rem!important;cursor:pointer!important;border-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;font-weight:500!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important;border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dataTables_paginate .current{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.dataTables_info{font-size:.875rem!important;line-height:1.25rem!important}.dataTables_empty{padding-top:1rem!important;padding-bottom:1rem!important}.pagination{display:flex!important;align-items:center!important}.pagination .page-link{margin-top:-1px!important;display:inline-flex!important;cursor:pointer!important;align-items:center!important;border-top-width:2px!important;border-color:transparent!important;padding-left:1rem!important;padding-right:1rem!important;padding-top:1rem!important;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem!important;--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-duration:.15s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.pagination .page-link:hover{--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.pagination .page-link:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.pagination .active>span{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.right-0{right:0}.top-0{top:0}.top-1{top:.25rem}.z-0{z-index:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1 / span 1}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-6{grid-column:span 6 / span 6}.col-span-8{grid-column:span 8 / span 8}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-\[22px\]{margin-left:22px;margin-right:22px}.mx-\[40px\]{margin-left:40px;margin-right:40px}.mx-\[auto\],.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.-ml-4{margin-left:-1rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.-mr-14{margin-right:-3.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[10px\]{margin-bottom:10px}.mb-\[11px\]{margin-bottom:11px}.mb-\[20px\]{margin-bottom:20px}.mb-\[25px\]{margin-bottom:25px}.mb-\[26px\]{margin-bottom:26px}.mb-\[36px\]{margin-bottom:36px}.mb-\[40px\]{margin-bottom:40px}.mb-\[5px\]{margin-bottom:5px}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-\[10px\]{margin-left:10px}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[30px\]{margin-top:30px}.mt-\[50px\]{margin-top:50px}.mt-\[auto\]{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0{height:0px}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\[40px\]{height:40px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[450px\]{min-height:450px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\/2{width:50%}.w-1\/6{width:16.666667%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-24{width:6rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-4\/5{width:80%}.w-4\/6{width:66.666667%}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[100\%\]{width:100%}.w-\[87px\]{width:87px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[212px\]{max-width:212px}.max-w-\[450px\]{max-width:450px}.max-w-\[625px\]{max-width:625px}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\/2{flex-basis:50%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.origin-top-right{transform-origin:top right}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-end{place-content:end}.place-items-center{place-items:center}.content-center{align-content:center}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[13px\]{gap:13px}.gap-\[44px\]{gap:44px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-\[20px\]{row-gap:20px}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-t-4{border-top-width:4px}.border-t-\[0px\]{border-top-width:0px}.border-t-\[10px\]{border-top-width:10px}.border-t-\[1px\]{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity: 1;border-color:rgb(192 38 211 / var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-opacity-50{--tw-border-opacity: .5}.bg-\[\#F2F9FE\]{--tw-bg-opacity: 1;background-color:rgb(242 249 254 / var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-100{--tw-bg-opacity: 1}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-8{padding:2rem}.p-\[12px\]{padding:12px}.p-\[20px\]{padding:20px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[20px\]{padding-left:20px;padding-right:20px}.px-\[22px\]{padding-left:22px;padding-right:22px}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[33px\]{padding-top:33px;padding-bottom:33px}.py-\[36px\]{padding-top:36px;padding-bottom:36px}.py-\[9\.5px\]{padding-top:9.5px;padding-bottom:9.5px}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-\[20px\]{padding-bottom:20px}.pb-\[56px\]{padding-bottom:56px}.pb-\[58px\]{padding-bottom:58px}.pl-0{padding-left:0}.pl-1{padding-left:.25rem}.pl-1\.5{padding-left:.375rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-\[18px\]{padding-left:18px}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-\[18px\]{padding-right:18px}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[20px\]{padding-top:20px}.pt-\[29px\]{padding-top:29px}.pt-\[35px\]{padding-top:35px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-\[\'Open_Sans\'\]{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-\[12px\]{font-size:12px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[22px\]{font-size:22px}.text-\[24px\]{font-size:24px}.text-\[35px\]{font-size:35px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[16px\]{font-weight:16px}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-\[1\.2rem\]{line-height:1.2rem}.leading-\[1\.35em\]{line-height:1.35em}.leading-\[1\.36em\]{line-height:1.36em}.leading-\[1\.375em\]{line-height:1.375em}.leading-\[1\.3em\]{line-height:1.3em}.leading-\[1\.5em\]{line-height:1.5em}.leading-\[1\.75em\]{line-height:1.75em}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#212529\]{--tw-text-opacity: 1;color:rgb(33 37 41 / var(--tw-text-opacity))}.text-\[\#6C727F\]{--tw-text-opacity: 1;color:rgb(108 114 127 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity: .05}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[8px\]:after{content:var(--tw-content);left:8px}.after\:top-\[5px\]:after{content:var(--tw-content);top:5px}.after\:h-\[30px\]:after{content:var(--tw-content);height:30px}.after\:w-\[30px\]:after{content:var(--tw-content);width:30px}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.focus-within\:z-10:focus-within{z-index:10}.hover\:list-disc:hover{list-style-type:disc}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.hover\:font-semibold:hover{font-weight:600}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-2xl:hover{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-blue-300:focus{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:border-fuchsia-300:focus{--tw-border-opacity: 1;border-color:rgb(240 171 252 / var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.focus\:font-semibold:focus{font-weight:600}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-600:focus{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.focus\:text-gray-900:focus{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.focus\:underline:focus{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity))}.focus\:ring-indigo-600:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity))}.focus\:ring-red-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity))}.focus\:ring-opacity-50:focus{--tw-ring-opacity: .5}.active\:bg-gray-50:active{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.active\:text-gray-800:active{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.active\:outline-none:active{outline:2px solid transparent;outline-offset:2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-50:disabled{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.group:hover .group-hover\:border-transparent{border-color:transparent}.group:hover .group-hover\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:after\:translate-x-\[140\%\]:after{content:var(--tw-content);--tw-translate-x: 140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:mt-4{margin-top:1rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-screen{height:100vh}.sm\:w-10{width:2.5rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-start-2{grid-column-start:2}.md\:col-start-4{grid-column-start:4}.md\:mx-0,.md\:mx-\[0\]{margin-left:0;margin-right:0}.md\:-mr-1{margin-right:-.25rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-\[46px\]{margin-bottom:46px}.md\:ml-2{margin-left:.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mr-0{margin-right:0}.md\:mr-2{margin-right:.5rem}.md\:mt-0{margin-top:0}.md\:mt-10{margin-top:2.5rem}.md\:mt-5{margin-top:1.25rem}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:min-h-\[411px\]{min-height:411px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:max-w-3xl{max-width:48rem}.md\:max-w-xl{max-width:36rem}.md\:flex-shrink-0{flex-shrink:0}.md\:shrink{flex-shrink:1}.md\:grow-0{flex-grow:0}.md\:basis-1\/2{flex-basis:50%}.md\:basis-\[449px\]{flex-basis:449px}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:gap-x-\[21px\]{-moz-column-gap:21px;column-gap:21px}.md\:gap-y-6{row-gap:1.5rem}.md\:border-r{border-right-width:1px}.md\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.md\:p-24{padding:6rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-\[40px\]{padding-left:40px;padding-right:40px}.md\:pb-\[40px\]{padding-bottom:40px}.md\:pl-4{padding-left:1rem}.md\:pl-\[52px\]{padding-left:52px}.md\:pl-\[61px\]{padding-left:61px}.md\:pr-\[20px\]{padding-right:20px}.md\:pr-\[48px\]{padding-right:48px}.md\:pt-0{padding-top:0}.md\:pt-\[58px\]{padding-top:58px}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-\[30px\]{font-size:30px}.md\:text-\[32px\]{font-size:32px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-screen{height:100vh}.lg\:w-1\/2{width:50%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:gap-4{gap:1rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}}@media (min-width: 1280px){.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-start-4{grid-column-start:4}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-0{margin-top:0}.xl\:mt-32{margin-top:8rem}.xl\:flex{display:flex}.xl\:w-auto{width:auto}.xl\:basis-auto{flex-basis:auto}.xl\:flex-row{flex-direction:row}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:justify-center{justify-content:center}.xl\:border-r{border-right-width:1px}.xl\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:pr-20{padding-right:5rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}} +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.form-input,.form-textarea,.form-select,.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}.form-input:focus,.form-textarea:focus,.form-select:focus,.form-multiselect:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}.form-select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}.form-checkbox,.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}.form-checkbox{border-radius:0}.form-radio{border-radius:100%}.form-checkbox:focus,.form-radio:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.form-checkbox:checked,.form-radio:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}.form-checkbox:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-checkbox:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-radio:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){.form-radio:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:checked:hover,.form-checkbox:checked:focus,.form-radio:checked:hover,.form-radio:checked:focus{border-color:transparent;background-color:currentColor}.form-checkbox:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){.form-checkbox:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}.form-checkbox:indeterminate:hover,.form-checkbox:indeterminate:focus{border-color:transparent;background-color:currentColor}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding:.1875em .375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>*:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>*:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-left:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.button{border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}button:disabled{cursor:not-allowed;opacity:.5}.button-primary{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-primary:hover{font-weight:600}.button-block{display:block;width:100%}.button-danger{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.button-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.button-link{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.button-link:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity));text-decoration-line:underline}.button-link:focus{text-decoration-line:underline;outline:2px solid transparent;outline-offset:2px}.validation{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.25rem .75rem}.validation-fail{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.validation-pass{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity));font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.input-label{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.input-slim{padding-top:.5rem;padding-bottom:.5rem}.form-checkbox{cursor:pointer;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.form-select{border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.alert{margin-top:.5rem;margin-bottom:.25rem;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem}.alert-success{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.alert-failure{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.badge{display:inline-flex;align-items:center;border-radius:9999px;padding:.125rem .625rem;font-size:.75rem;font-weight:500;line-height:1rem}.badge-light{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.badge-primary{--tw-bg-opacity: 1;background-color:rgb(191 219 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.badge-danger{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.badge-success{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity))}.badge-secondary{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.badge-warning{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity))}.badge-info{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}@media (min-width: 640px){.dataTables_length{margin-top:1.25rem!important;margin-bottom:1.25rem!important}}@media (min-width: 1024px){.dataTables_length{margin-top:1rem!important;margin-bottom:1rem!important}}.dataTables_length select{margin-left:.5rem!important;margin-right:.5rem!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_length select:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.dataTables_filter{margin-bottom:1rem}.dataTables_filter input{margin-top:.5rem;align-items:center;border-radius:.25rem;border-width:1px;--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity));padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.dataTables_filter input:focus{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}@media (min-width: 1024px){.dataTables_filter{margin-top:-3rem!important}}.dataTables_paginate{padding-bottom:1.5rem!important;padding-top:.5rem!important}.dataTables_paginate .paginate_button{margin-right:.25rem!important;cursor:pointer!important;border-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important;font-weight:500!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important;border-radius:.25rem;padding:.75rem 1rem;font-size:.875rem;line-height:1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dataTables_paginate .current{--tw-bg-opacity: 1 !important;background-color:rgb(37 99 235 / var(--tw-bg-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.dataTables_info{font-size:.875rem!important;line-height:1.25rem!important}.dataTables_empty{padding-top:1rem!important;padding-bottom:1rem!important}.pagination{display:flex!important;align-items:center!important}.pagination .page-link{margin-top:-1px!important;display:inline-flex!important;cursor:pointer!important;align-items:center!important;border-top-width:2px!important;border-color:transparent!important;padding-left:1rem!important;padding-right:1rem!important;padding-top:1rem!important;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem!important;--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-duration:.15s!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.pagination .page-link:hover{--tw-border-opacity: 1 !important;border-color:rgb(209 213 219 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(55 65 81 / var(--tw-text-opacity))!important}.pagination .page-link:focus{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity));--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.pagination .active>span{--tw-border-opacity: 1 !important;border-color:rgb(37 99 235 / var(--tw-border-opacity))!important;--tw-text-opacity: 1 !important;color:rgb(37 99 235 / var(--tw-text-opacity))!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.right-0{right:0}.top-0{top:0}.top-1{top:.25rem}.z-0{z-index:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-auto{grid-column:auto}.col-span-1{grid-column:span 1 / span 1}.col-span-12{grid-column:span 12 / span 12}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-4{grid-column:span 4 / span 4}.col-span-6{grid-column:span 6 / span 6}.col-span-8{grid-column:span 8 / span 8}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-\[22px\]{margin-left:22px;margin-right:22px}.mx-\[40px\]{margin-left:40px;margin-right:40px}.mx-\[auto\],.mx-auto{margin-left:auto;margin-right:auto}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-ml-1{margin-left:-.25rem}.-ml-4{margin-left:-1rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.-mr-14{margin-right:-3.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-\[10px\]{margin-bottom:10px}.mb-\[11px\]{margin-bottom:11px}.mb-\[20px\]{margin-bottom:20px}.mb-\[25px\]{margin-bottom:25px}.mb-\[26px\]{margin-bottom:26px}.mb-\[36px\]{margin-bottom:36px}.mb-\[40px\]{margin-bottom:40px}.mb-\[5px\]{margin-bottom:5px}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-\[10px\]{margin-left:10px}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-5{margin-right:1.25rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[30px\]{margin-top:30px}.mt-\[50px\]{margin-top:50px}.mt-\[auto\]{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-0{height:0px}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-24{height:6rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\[40px\]{height:40px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.min-h-\[450px\]{min-height:450px}.min-h-screen{min-height:100vh}.w-0{width:0px}.w-1{width:.25rem}.w-1\/2{width:50%}.w-1\/6{width:16.666667%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-24{width:6rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-4\/5{width:80%}.w-4\/6{width:66.666667%}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[100\%\]{width:100%}.w-\[87px\]{width:87px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-\[212px\]{max-width:212px}.max-w-\[450px\]{max-width:450px}.max-w-\[625px\]{max-width:625px}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.flex-grow,.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-1\/2{flex-basis:50%}.basis-full{flex-basis:100%}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.origin-top-right{transform-origin:top right}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-end{place-content:end}.place-items-center{place-items:center}.content-center{align-content:center}.content-start{align-content:flex-start}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-stretch{justify-content:stretch}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[13px\]{gap:13px}.gap-\[44px\]{gap:44px}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-y-\[20px\]{row-gap:20px}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-t-2{border-top-width:2px}.border-t-4{border-top-width:4px}.border-t-\[0px\]{border-top-width:0px}.border-t-\[10px\]{border-top-width:10px}.border-t-\[1px\]{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.border-emerald-500{--tw-border-opacity: 1;border-color:rgb(16 185 129 / var(--tw-border-opacity))}.border-fuchsia-600{--tw-border-opacity: 1;border-color:rgb(192 38 211 / var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity: 1;border-color:rgb(243 244 246 / var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity))}.border-red-400{--tw-border-opacity: 1;border-color:rgb(248 113 113 / var(--tw-border-opacity))}.border-red-900{--tw-border-opacity: 1;border-color:rgb(127 29 29 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-opacity-50{--tw-border-opacity: .5}.bg-\[\#F2F9FE\]{--tw-bg-opacity: 1;background-color:rgb(242 249 254 / var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity))}.bg-emerald-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-100{--tw-bg-opacity: 1}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-8{padding:2rem}.p-\[12px\]{padding:12px}.p-\[20px\]{padding:20px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[20px\]{padding-left:20px;padding-right:20px}.px-\[22px\]{padding-left:22px;padding-right:22px}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[33px\]{padding-top:33px;padding-bottom:33px}.py-\[36px\]{padding-top:36px;padding-bottom:36px}.py-\[9\.5px\]{padding-top:9.5px;padding-bottom:9.5px}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-\[20px\]{padding-bottom:20px}.pb-\[56px\]{padding-bottom:56px}.pb-\[58px\]{padding-bottom:58px}.pl-0{padding-left:0}.pl-1{padding-left:.25rem}.pl-1\.5{padding-left:.375rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-\[18px\]{padding-left:18px}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-\[18px\]{padding-right:18px}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-\[20px\]{padding-top:20px}.pt-\[29px\]{padding-top:29px}.pt-\[35px\]{padding-top:35px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-\[\'Open_Sans\'\]{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-\[12px\]{font-size:12px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[22px\]{font-size:22px}.text-\[24px\]{font-size:24px}.text-\[35px\]{font-size:35px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[16px\]{font-weight:16px}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-\[1\.2rem\]{line-height:1.2rem}.leading-\[1\.35em\]{line-height:1.35em}.leading-\[1\.36em\]{line-height:1.36em}.leading-\[1\.375em\]{line-height:1.375em}.leading-\[1\.3em\]{line-height:1.3em}.leading-\[1\.5em\]{line-height:1.5em}.leading-\[1\.75em\]{line-height:1.75em}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#212529\]{--tw-text-opacity: 1;color:rgb(33 37 41 / var(--tw-text-opacity))}.text-\[\#6C727F\]{--tw-text-opacity: 1;color:rgb(108 114 127 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity: .05}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[8px\]:after{content:var(--tw-content);left:8px}.after\:top-\[5px\]:after{content:var(--tw-content);top:5px}.after\:h-\[30px\]:after{content:var(--tw-content);height:30px}.after\:w-\[30px\]:after{content:var(--tw-content);width:30px}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content: "";content:var(--tw-content)}.focus-within\:z-10:focus-within{z-index:10}.hover\:list-disc:hover{list-style-type:disc}.hover\:border-blue-600:hover{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity))}.hover\:border-transparent:hover{border-color:transparent}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.hover\:bg-red-900:hover{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity))}.hover\:font-semibold:hover{font-weight:600}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity: 1;color:rgb(49 46 129 / var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-2xl:hover{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-lg:hover{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-blue-300:focus{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:border-fuchsia-300:focus{--tw-border-opacity: 1;border-color:rgb(240 171 252 / var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity: 1;border-color:rgb(99 102 241 / var(--tw-border-opacity))}.focus\:border-red-500:focus{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.focus\:font-semibold:focus{font-weight:600}.focus\:text-gray-500:focus{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.focus\:text-gray-600:focus{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.focus\:text-gray-900:focus{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.focus\:underline:focus{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.focus\:ring-gray-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(107 114 128 / var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity))}.focus\:ring-indigo-600:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity))}.focus\:ring-red-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(239 68 68 / var(--tw-ring-opacity))}.focus\:ring-opacity-50:focus{--tw-ring-opacity: .5}.active\:bg-gray-50:active{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.active\:text-gray-800:active{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.active\:outline-none:active{outline:2px solid transparent;outline-offset:2px}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-gray-50:disabled{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.group:hover .group-hover\:border-transparent{border-color:transparent}.group:hover .group-hover\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.peer:checked~.peer-checked\:after\:translate-x-\[140\%\]:after{content:var(--tw-content);--tw-translate-x: 140%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:inset-0{top:0;right:0;bottom:0;left:0}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:col-span-3{grid-column:span 3 / span 3}.sm\:col-span-4{grid-column:span 4 / span 4}.sm\:col-span-6{grid-column:span 6 / span 6}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:my-8{margin-top:2rem;margin-bottom:2rem}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:mt-4{margin-top:1rem}.sm\:mt-6{margin-top:1.5rem}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-screen{height:100vh}.sm\:w-10{width:2.5rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\:col-span-1{grid-column:span 1 / span 1}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-4{grid-column:span 4 / span 4}.md\:col-span-5{grid-column:span 5 / span 5}.md\:col-span-6{grid-column:span 6 / span 6}.md\:col-start-2{grid-column-start:2}.md\:col-start-4{grid-column-start:4}.md\:mx-0,.md\:mx-\[0\]{margin-left:0;margin-right:0}.md\:-mr-1{margin-right:-.25rem}.md\:mb-6{margin-bottom:1.5rem}.md\:mb-\[46px\]{margin-bottom:46px}.md\:ml-2{margin-left:.5rem}.md\:ml-6{margin-left:1.5rem}.md\:mr-0{margin-right:0}.md\:mr-2{margin-right:.5rem}.md\:mt-0{margin-top:0}.md\:mt-10{margin-top:2.5rem}.md\:mt-5{margin-top:1.25rem}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:min-h-\[411px\]{min-height:411px}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:max-w-3xl{max-width:48rem}.md\:max-w-xl{max-width:36rem}.md\:flex-shrink-0{flex-shrink:0}.md\:shrink{flex-shrink:1}.md\:grow-0{flex-grow:0}.md\:basis-1\/2{flex-basis:50%}.md\:basis-\[449px\]{flex-basis:449px}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:gap-x-\[21px\]{-moz-column-gap:21px;column-gap:21px}.md\:gap-y-6{row-gap:1.5rem}.md\:border-r{border-right-width:1px}.md\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.md\:p-24{padding:6rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-\[40px\]{padding-left:40px;padding-right:40px}.md\:pb-\[40px\]{padding-bottom:40px}.md\:pl-4{padding-left:1rem}.md\:pl-\[52px\]{padding-left:52px}.md\:pl-\[61px\]{padding-left:61px}.md\:pr-\[20px\]{padding-right:20px}.md\:pr-\[48px\]{padding-right:48px}.md\:pt-0{padding-top:0}.md\:pt-\[58px\]{padding-top:58px}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-\[30px\]{font-size:30px}.md\:text-\[32px\]{font-size:32px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:col-span-7{grid-column:span 7 / span 7}.lg\:col-span-8{grid-column:span 8 / span 8}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-screen{height:100vh}.lg\:w-1\/2{width:50%}.lg\:w-1\/3{width:33.333333%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:max-w-\[80\%\]{max-width:80%}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:gap-4{gap:1rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:px-2{padding-left:.5rem;padding-right:.5rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-2{padding-top:.5rem;padding-bottom:.5rem}}@media (min-width: 1280px){.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:col-span-6{grid-column:span 6 / span 6}.xl\:col-span-8{grid-column:span 8 / span 8}.xl\:col-span-9{grid-column:span 9 / span 9}.xl\:col-start-4{grid-column-start:4}.xl\:ml-5{margin-left:1.25rem}.xl\:mt-0{margin-top:0}.xl\:mt-32{margin-top:8rem}.xl\:flex{display:flex}.xl\:w-auto{width:auto}.xl\:basis-auto{flex-basis:auto}.xl\:flex-row{flex-direction:row}.xl\:flex-nowrap{flex-wrap:nowrap}.xl\:justify-center{justify-content:center}.xl\:border-r{border-right-width:1px}.xl\:border-\[\#E5E7EB\]{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:px-20{padding-left:5rem;padding-right:5rem}.xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.xl\:pr-20{padding-right:5rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}.dark\:bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.dark\:focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}} diff --git a/public/build/assets/app-234e3402.js b/public/build/assets/app-234e3402.js deleted file mode 100644 index 987442a68737..000000000000 --- a/public/build/assets/app-234e3402.js +++ /dev/null @@ -1,109 +0,0 @@ -import{A as Sl}from"./index-08e160a7.js";import{c as zt,g as El}from"./_commonjsHelpers-725317a4.js";var Ol={visa:{niceType:"Visa",type:"visa",patterns:[4],gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}},mastercard:{niceType:"Mastercard",type:"mastercard",patterns:[[51,55],[2221,2229],[223,229],[23,26],[270,271],2720],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},"american-express":{niceType:"American Express",type:"american-express",patterns:[34,37],gaps:[4,10],lengths:[15],code:{name:"CID",size:4}},"diners-club":{niceType:"Diners Club",type:"diners-club",patterns:[[300,305],36,38,39],gaps:[4,10],lengths:[14,16,19],code:{name:"CVV",size:3}},discover:{niceType:"Discover",type:"discover",patterns:[6011,[644,649],65],gaps:[4,8,12],lengths:[16,19],code:{name:"CID",size:3}},jcb:{niceType:"JCB",type:"jcb",patterns:[2131,1800,[3528,3589]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVV",size:3}},unionpay:{niceType:"UnionPay",type:"unionpay",patterns:[620,[624,626],[62100,62182],[62184,62187],[62185,62197],[62200,62205],[622010,622999],622018,[622019,622999],[62207,62209],[622126,622925],[623,626],6270,6272,6276,[627700,627779],[627781,627799],[6282,6289],6291,6292,810,[8110,8131],[8132,8151],[8152,8163],[8164,8171]],gaps:[4,8,12],lengths:[14,15,16,17,18,19],code:{name:"CVN",size:3}},maestro:{niceType:"Maestro",type:"maestro",patterns:[493698,[5e5,504174],[504176,506698],[506779,508999],[56,59],63,67,6],gaps:[4,8,12],lengths:[12,13,14,15,16,17,18,19],code:{name:"CVC",size:3}},elo:{niceType:"Elo",type:"elo",patterns:[401178,401179,438935,457631,457632,431274,451416,457393,504175,[506699,506778],[509e3,509999],627780,636297,636368,[650031,650033],[650035,650051],[650405,650439],[650485,650538],[650541,650598],[650700,650718],[650720,650727],[650901,650978],[651652,651679],[655e3,655019],[655021,655058]],gaps:[4,8,12],lengths:[16],code:{name:"CVE",size:3}},mir:{niceType:"Mir",type:"mir",patterns:[[2200,2204]],gaps:[4,8,12],lengths:[16,17,18,19],code:{name:"CVP2",size:3}},hiper:{niceType:"Hiper",type:"hiper",patterns:[637095,63737423,63743358,637568,637599,637609,637612],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}},hipercard:{niceType:"Hipercard",type:"hipercard",patterns:[606282],gaps:[4,8,12],lengths:[16],code:{name:"CVC",size:3}}},Cl=Ol,ni={},Sn={};Object.defineProperty(Sn,"__esModule",{value:!0});Sn.clone=void 0;function Al(e){return e?JSON.parse(JSON.stringify(e)):null}Sn.clone=Al;var ii={};Object.defineProperty(ii,"__esModule",{value:!0});ii.matches=void 0;function Tl(e,r,n){var a=String(r).length,s=e.substr(0,a),l=parseInt(s,10);return r=parseInt(String(r).substr(0,s.length),10),n=parseInt(String(n).substr(0,s.length),10),l>=r&&l<=n}function Pl(e,r){return r=String(r),r.substring(0,e.length)===e.substring(0,r.length)}function Rl(e,r){return Array.isArray(r)?Tl(e,r[0],r[1]):Pl(e,r)}ii.matches=Rl;Object.defineProperty(ni,"__esModule",{value:!0});ni.addMatchingCardsToResults=void 0;var Ml=Sn,kl=ii;function Nl(e,r,n){var a,s;for(a=0;a=s&&(v.matchStrength=s),n.push(v);break}}}ni.addMatchingCardsToResults=Nl;var ai={};Object.defineProperty(ai,"__esModule",{value:!0});ai.isValidInputType=void 0;function Ll(e){return typeof e=="string"||e instanceof String}ai.isValidInputType=Ll;var oi={};Object.defineProperty(oi,"__esModule",{value:!0});oi.findBestMatch=void 0;function jl(e){var r=e.filter(function(n){return n.matchStrength}).length;return r>0&&r===e.length}function Il(e){return jl(e)?e.reduce(function(r,n){return!r||Number(r.matchStrength)Hl?vn(!1,!1):Ul.test(e)?vn(!1,!0):vn(!0,!0)}si.cardholderName=ql;var li={};function Vl(e){for(var r=0,n=!1,a=e.length-1,s;a>=0;)s=parseInt(e.charAt(a),10),n&&(s*=2,s>9&&(s=s%10+1)),n=!n,r+=s,a--;return r%10===0}var zl=Vl;Object.defineProperty(li,"__esModule",{value:!0});li.cardNumber=void 0;var Wl=zl,ao=Uo;function wr(e,r,n){return{card:e,isPotentiallyValid:r,isValid:n}}function Kl(e,r){r===void 0&&(r={});var n,a,s;if(typeof e!="string"&&typeof e!="number")return wr(null,!1,!1);var l=String(e).replace(/-|\s/g,"");if(!/^\d*$/.test(l))return wr(null,!1,!1);var v=ao(l);if(v.length===0)return wr(null,!1,!1);if(v.length!==1)return wr(null,!0,!1);var m=v[0];if(r.maxLength&&l.length>r.maxLength)return wr(m,!1,!1);m.type===ao.types.UNIONPAY&&r.luhnValidateUnionPay!==!0?a=!0:a=Wl(l),s=Math.max.apply(null,m.lengths),r.maxLength&&(s=Math.min(r.maxLength,s));for(var P=0;P4)return ir(!1,!1);var m=parseInt(e,10),P=Number(String(s).substr(2,2)),U=!1;if(a===2){if(String(s).substr(0,2)===e)return ir(!1,!0);n=P===m,U=m>=P&&m<=P+r}else a===4&&(n=s===m,U=m>=s&&m<=s+r);return ir(U,U,n)}Xr.expirationYear=Gl;var fi={};Object.defineProperty(fi,"__esModule",{value:!0});fi.isArray=void 0;fi.isArray=Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"};Object.defineProperty(ci,"__esModule",{value:!0});ci.parseDate=void 0;var Yl=Xr,Xl=fi;function Ql(e){var r=Number(e[0]),n;return r===0?2:r>1||r===1&&Number(e[1])>2?1:r===1?(n=e.substr(1),Yl.expirationYear(n).isPotentiallyValid?1:2):e.length===5?1:e.length>5?2:1}function Zl(e){var r;if(/^\d{4}-\d{1,2}$/.test(e)?r=e.split("-").reverse():/\//.test(e)?r=e.split(/\s*\/\s*/g):/\s/.test(e)&&(r=e.split(/ +/g)),Xl.isArray(r))return{month:r[0]||"",year:r.slice(1).join()};var n=Ql(e),a=e.substr(0,n);return{month:a,year:e.substr(a.length)}}ci.parseDate=Zl;var On={};Object.defineProperty(On,"__esModule",{value:!0});On.expirationMonth=void 0;function yn(e,r,n){return{isValid:e,isPotentiallyValid:r,isValidForThisYear:n||!1}}function eu(e){var r=new Date().getMonth()+1;if(typeof e!="string")return yn(!1,!1);if(e.replace(/\s/g,"")===""||e==="0")return yn(!1,!0);if(!/^\d*$/.test(e))return yn(!1,!1);var n=parseInt(e,10);if(isNaN(Number(e)))return yn(!1,!1);var a=n>0&&n<13;return yn(a,a,a&&n>=r)}On.expirationMonth=eu;var ra=zt&&zt.__assign||function(){return ra=Object.assign||function(e){for(var r,n=1,a=arguments.length;nr?e[n]:r;return r}function Hr(e,r){return{isValid:e,isPotentiallyValid:r}}function su(e,r){return r===void 0&&(r=Ho),r=r instanceof Array?r:[r],typeof e!="string"||!/^\d*$/.test(e)?Hr(!1,!1):au(r,e.length)?Hr(!0,!0):e.lengthou(r)?Hr(!1,!1):Hr(!0,!0)}di.cvv=su;var pi={};Object.defineProperty(pi,"__esModule",{value:!0});pi.postalCode=void 0;var lu=3;function Ji(e,r){return{isValid:e,isPotentiallyValid:r}}function uu(e,r){r===void 0&&(r={});var n=r.minLength||lu;return typeof e!="string"?Ji(!1,!1):e.lengthfunction(){return r||(0,e[Vo(e)[0]])((r={exports:{}}).exports,r),r.exports},Tu=(e,r,n,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of Vo(r))!Au.call(e,s)&&s!==n&&qo(e,s,{get:()=>r[s],enumerable:!(a=Ou(r,s))||a.enumerable});return e},tt=(e,r,n)=>(n=e!=null?Eu(Cu(e)):{},Tu(r||!e||!e.__esModule?qo(n,"default",{value:e,enumerable:!0}):n,e)),Ot=Zt({"../alpine/packages/alpinejs/dist/module.cjs.js"(e,r){var n=Object.create,a=Object.defineProperty,s=Object.getOwnPropertyDescriptor,l=Object.getOwnPropertyNames,v=Object.getPrototypeOf,m=Object.prototype.hasOwnProperty,P=(t,i)=>function(){return i||(0,t[l(t)[0]])((i={exports:{}}).exports,i),i.exports},U=(t,i)=>{for(var o in i)a(t,o,{get:i[o],enumerable:!0})},ne=(t,i,o,c)=>{if(i&&typeof i=="object"||typeof i=="function")for(let d of l(i))!m.call(t,d)&&d!==o&&a(t,d,{get:()=>i[d],enumerable:!(c=s(i,d))||c.enumerable});return t},ie=(t,i,o)=>(o=t!=null?n(v(t)):{},ne(i||!t||!t.__esModule?a(o,"default",{value:t,enumerable:!0}):o,t)),K=t=>ne(a({},"__esModule",{value:!0}),t),Y=P({"node_modules/@vue/shared/dist/shared.cjs.js"(t){Object.defineProperty(t,"__esModule",{value:!0});function i(b,W){const ee=Object.create(null),fe=b.split(",");for(let qe=0;qe!!ee[qe.toLowerCase()]:qe=>!!ee[qe]}var o={1:"TEXT",2:"CLASS",4:"STYLE",8:"PROPS",16:"FULL_PROPS",32:"HYDRATE_EVENTS",64:"STABLE_FRAGMENT",128:"KEYED_FRAGMENT",256:"UNKEYED_FRAGMENT",512:"NEED_PATCH",1024:"DYNAMIC_SLOTS",2048:"DEV_ROOT_FRAGMENT",[-1]:"HOISTED",[-2]:"BAIL"},c={1:"STABLE",2:"DYNAMIC",3:"FORWARDED"},d="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt",p=i(d),g=2;function x(b,W=0,ee=b.length){let fe=b.split(/(\r?\n)/);const qe=fe.filter((xt,dt)=>dt%2===1);fe=fe.filter((xt,dt)=>dt%2===0);let et=0;const wt=[];for(let xt=0;xt=W){for(let dt=xt-g;dt<=xt+g||ee>et;dt++){if(dt<0||dt>=fe.length)continue;const gn=dt+1;wt.push(`${gn}${" ".repeat(Math.max(3-String(gn).length,0))}| ${fe[dt]}`);const Br=fe[dt].length,Zn=qe[dt]&&qe[dt].length||0;if(dt===xt){const Ur=W-(et-(Br+Zn)),Wi=Math.max(1,ee>et?Br-Ur:ee-W);wt.push(" | "+" ".repeat(Ur)+"^".repeat(Wi))}else if(dt>xt){if(ee>et){const Ur=Math.max(Math.min(ee-et,Br),1);wt.push(" | "+"^".repeat(Ur))}et+=Br+Zn}}break}return wt.join(` -`)}var M="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",Z=i(M),Me=i(M+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected"),Qe=/[>/="'\u0009\u000a\u000c\u0020]/,De={};function Je(b){if(De.hasOwnProperty(b))return De[b];const W=Qe.test(b);return W&&console.error(`unsafe attribute name: ${b}`),De[b]=!W}var Tt={acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},Ut=i("animation-iteration-count,border-image-outset,border-image-slice,border-image-width,box-flex,box-flex-group,box-ordinal-group,column-count,columns,flex,flex-grow,flex-positive,flex-shrink,flex-negative,flex-order,grid-row,grid-row-end,grid-row-span,grid-row-start,grid-column,grid-column-end,grid-column-span,grid-column-start,font-weight,line-clamp,line-height,opacity,order,orphans,tab-size,widows,z-index,zoom,fill-opacity,flood-opacity,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-miterlimit,stroke-opacity,stroke-width"),we=i("accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap");function Ue(b){if(Dt(b)){const W={};for(let ee=0;ee{if(ee){const fe=ee.split(He);fe.length>1&&(W[fe[0].trim()]=fe[1].trim())}}),W}function It(b){let W="";if(!b)return W;for(const ee in b){const fe=b[ee],qe=ee.startsWith("--")?ee:Xn(ee);(vr(fe)||typeof fe=="number"&&Ut(qe))&&(W+=`${qe}:${fe};`)}return W}function Ht(b){let W="";if(vr(b))W=b;else if(Dt(b))for(let ee=0;ee]/;function Ii(b){const W=""+b,ee=ji.exec(W);if(!ee)return W;let fe="",qe,et,wt=0;for(et=ee.index;et||--!>|Mr(ee,W))}var Bn=b=>b==null?"":qt(b)?JSON.stringify(b,Fi,2):String(b),Fi=(b,W)=>mr(W)?{[`Map(${W.size})`]:[...W.entries()].reduce((ee,[fe,qe])=>(ee[`${fe} =>`]=qe,ee),{})}:$t(W)?{[`Set(${W.size})`]:[...W.values()]}:qt(W)&&!Dt(W)&&!Wn(W)?String(W):W,Bi=["bigInt","optionalChaining","nullishCoalescingOperator"],un=Object.freeze({}),cn=Object.freeze([]),fn=()=>{},kr=()=>!1,Nr=/^on[^a-z]/,Lr=b=>Nr.test(b),jr=b=>b.startsWith("onUpdate:"),Un=Object.assign,Hn=(b,W)=>{const ee=b.indexOf(W);ee>-1&&b.splice(ee,1)},qn=Object.prototype.hasOwnProperty,Vn=(b,W)=>qn.call(b,W),Dt=Array.isArray,mr=b=>yr(b)==="[object Map]",$t=b=>yr(b)==="[object Set]",dn=b=>b instanceof Date,pn=b=>typeof b=="function",vr=b=>typeof b=="string",Ui=b=>typeof b=="symbol",qt=b=>b!==null&&typeof b=="object",Ir=b=>qt(b)&&pn(b.then)&&pn(b.catch),zn=Object.prototype.toString,yr=b=>zn.call(b),Hi=b=>yr(b).slice(8,-1),Wn=b=>yr(b)==="[object Object]",Kn=b=>vr(b)&&b!=="NaN"&&b[0]!=="-"&&""+parseInt(b,10)===b,Jn=i(",key,ref,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),br=b=>{const W=Object.create(null);return ee=>W[ee]||(W[ee]=b(ee))},Gn=/-(\w)/g,Yn=br(b=>b.replace(Gn,(W,ee)=>ee?ee.toUpperCase():"")),qi=/\B([A-Z])/g,Xn=br(b=>b.replace(qi,"-$1").toLowerCase()),_r=br(b=>b.charAt(0).toUpperCase()+b.slice(1)),Vi=br(b=>b?`on${_r(b)}`:""),hn=(b,W)=>b!==W&&(b===b||W===W),zi=(b,W)=>{for(let ee=0;ee{Object.defineProperty(b,W,{configurable:!0,enumerable:!1,value:ee})},$r=b=>{const W=parseFloat(b);return isNaN(W)?b:W},Fr,Qn=()=>Fr||(Fr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});t.EMPTY_ARR=cn,t.EMPTY_OBJ=un,t.NO=kr,t.NOOP=fn,t.PatchFlagNames=o,t.babelParserDefaultPlugins=Bi,t.camelize=Yn,t.capitalize=_r,t.def=Dr,t.escapeHtml=Ii,t.escapeHtmlComment=Di,t.extend=Un,t.generateCodeFrame=x,t.getGlobalThis=Qn,t.hasChanged=hn,t.hasOwn=Vn,t.hyphenate=Xn,t.invokeArrayFns=zi,t.isArray=Dt,t.isBooleanAttr=Me,t.isDate=dn,t.isFunction=pn,t.isGloballyWhitelisted=p,t.isHTMLTag=Pr,t.isIntegerKey=Kn,t.isKnownAttr=we,t.isMap=mr,t.isModelListener=jr,t.isNoUnitNumericStyleProp=Ut,t.isObject=qt,t.isOn=Lr,t.isPlainObject=Wn,t.isPromise=Ir,t.isReservedProp=Jn,t.isSSRSafeAttrName=Je,t.isSVGTag=Li,t.isSet=$t,t.isSpecialBooleanAttr=Z,t.isString=vr,t.isSymbol=Ui,t.isVoidTag=Rr,t.looseEqual=Mr,t.looseIndexOf=Fn,t.makeMap=i,t.normalizeClass=Ht,t.normalizeStyle=Ue,t.objectToString=zn,t.parseStringStyle=_t,t.propsToAttrMap=Tt,t.remove=Hn,t.slotFlagsText=c,t.stringifyStyle=It,t.toDisplayString=Bn,t.toHandlerKey=Vi,t.toNumber=$r,t.toRawType=Hi,t.toTypeString=yr}}),O=P({"node_modules/@vue/shared/index.js"(t,i){i.exports=Y()}}),y=P({"node_modules/@vue/reactivity/dist/reactivity.cjs.js"(t){Object.defineProperty(t,"__esModule",{value:!0});var i=O(),o=new WeakMap,c=[],d,p=Symbol("iterate"),g=Symbol("Map key iterate");function x(u){return u&&u._isEffect===!0}function M(u,A=i.EMPTY_OBJ){x(u)&&(u=u.raw);const N=Qe(u,A);return A.lazy||N(),N}function Z(u){u.active&&(De(u),u.options.onStop&&u.options.onStop(),u.active=!1)}var Me=0;function Qe(u,A){const N=function(){if(!N.active)return u();if(!c.includes(N)){De(N);try{return we(),c.push(N),d=N,u()}finally{c.pop(),Ue(),d=c[c.length-1]}}};return N.id=Me++,N.allowRecurse=!!A.allowRecurse,N._isEffect=!0,N.active=!0,N.raw=u,N.deps=[],N.options=A,N}function De(u){const{deps:A}=u;if(A.length){for(let N=0;N{vt&&vt.forEach(Ft=>{(Ft!==d||Ft.allowRecurse)&&nt.add(Ft)})};if(A==="clear")Le.forEach(St);else if(N==="length"&&i.isArray(u))Le.forEach((vt,Ft)=>{(Ft==="length"||Ft>=oe)&&St(vt)});else switch(N!==void 0&&St(Le.get(N)),A){case"add":i.isArray(u)?i.isIntegerKey(N)&&St(Le.get("length")):(St(Le.get(p)),i.isMap(u)&&St(Le.get(g)));break;case"delete":i.isArray(u)||(St(Le.get(p)),i.isMap(u)&&St(Le.get(g)));break;case"set":i.isMap(u)&&St(Le.get(p));break}const mn=vt=>{vt.options.onTrigger&&vt.options.onTrigger({effect:vt,target:u,key:N,type:A,newValue:oe,oldValue:J,oldTarget:ge}),vt.options.scheduler?vt.options.scheduler(vt):vt()};nt.forEach(mn)}var _t=i.makeMap("__proto__,__v_isRef,__isVue"),It=new Set(Object.getOwnPropertyNames(Symbol).map(u=>Symbol[u]).filter(i.isSymbol)),Ht=Rr(),Tr=Rr(!1,!0),sn=Rr(!0),ln=Rr(!0,!0),Pr=Li();function Li(){const u={};return["includes","indexOf","lastIndexOf"].forEach(A=>{u[A]=function(...N){const oe=b(this);for(let ge=0,Le=this.length;ge{u[A]=function(...N){Ut();const oe=b(this)[A].apply(this,N);return Ue(),oe}}),u}function Rr(u=!1,A=!1){return function(oe,J,ge){if(J==="__v_isReactive")return!u;if(J==="__v_isReadonly")return u;if(J==="__v_raw"&&ge===(u?A?Yn:Gn:A?br:Jn).get(oe))return oe;const Le=i.isArray(oe);if(!u&&Le&&i.hasOwn(Pr,J))return Reflect.get(Pr,J,ge);const nt=Reflect.get(oe,J,ge);return(i.isSymbol(J)?It.has(J):_t(J))||(u||Ne(oe,"get",J),A)?nt:fe(nt)?!Le||!i.isIntegerKey(J)?nt.value:nt:i.isObject(nt)?u?hn(nt):_r(nt):nt}}var ji=$n(),Ii=$n(!0);function $n(u=!1){return function(N,oe,J,ge){let Le=N[oe];if(!u&&(J=b(J),Le=b(Le),!i.isArray(N)&&fe(Le)&&!fe(J)))return Le.value=J,!0;const nt=i.isArray(N)&&i.isIntegerKey(oe)?Number(oe)i.isObject(u)?_r(u):u,cn=u=>i.isObject(u)?hn(u):u,fn=u=>u,kr=u=>Reflect.getPrototypeOf(u);function Nr(u,A,N=!1,oe=!1){u=u.__v_raw;const J=b(u),ge=b(A);A!==ge&&!N&&Ne(J,"get",A),!N&&Ne(J,"get",ge);const{has:Le}=kr(J),nt=oe?fn:N?cn:un;if(Le.call(J,A))return nt(u.get(A));if(Le.call(J,ge))return nt(u.get(ge));u!==J&&u.get(A)}function Lr(u,A=!1){const N=this.__v_raw,oe=b(N),J=b(u);return u!==J&&!A&&Ne(oe,"has",u),!A&&Ne(oe,"has",J),u===J?N.has(u):N.has(u)||N.has(J)}function jr(u,A=!1){return u=u.__v_raw,!A&&Ne(b(u),"iterate",p),Reflect.get(u,"size",u)}function Un(u){u=b(u);const A=b(this);return kr(A).has.call(A,u)||(A.add(u),He(A,"add",u,u)),this}function Hn(u,A){A=b(A);const N=b(this),{has:oe,get:J}=kr(N);let ge=oe.call(N,u);ge?Kn(N,oe,u):(u=b(u),ge=oe.call(N,u));const Le=J.call(N,u);return N.set(u,A),ge?i.hasChanged(A,Le)&&He(N,"set",u,A,Le):He(N,"add",u,A),this}function qn(u){const A=b(this),{has:N,get:oe}=kr(A);let J=N.call(A,u);J?Kn(A,N,u):(u=b(u),J=N.call(A,u));const ge=oe?oe.call(A,u):void 0,Le=A.delete(u);return J&&He(A,"delete",u,void 0,ge),Le}function Vn(){const u=b(this),A=u.size!==0,N=i.isMap(u)?new Map(u):new Set(u),oe=u.clear();return A&&He(u,"clear",void 0,void 0,N),oe}function Dt(u,A){return function(oe,J){const ge=this,Le=ge.__v_raw,nt=b(Le),St=A?fn:u?cn:un;return!u&&Ne(nt,"iterate",p),Le.forEach((mn,vt)=>oe.call(J,St(mn),St(vt),ge))}}function mr(u,A,N){return function(...oe){const J=this.__v_raw,ge=b(J),Le=i.isMap(ge),nt=u==="entries"||u===Symbol.iterator&&Le,St=u==="keys"&&Le,mn=J[u](...oe),vt=N?fn:A?cn:un;return!A&&Ne(ge,"iterate",St?g:p),{next(){const{value:Ft,done:Ki}=mn.next();return Ki?{value:Ft,done:Ki}:{value:nt?[vt(Ft[0]),vt(Ft[1])]:vt(Ft),done:Ki}},[Symbol.iterator](){return this}}}}function $t(u){return function(...A){{const N=A[0]?`on key "${A[0]}" `:"";console.warn(`${i.capitalize(u)} operation ${N}failed: target is readonly.`,b(this))}return u==="delete"?!1:this}}function dn(){const u={get(ge){return Nr(this,ge)},get size(){return jr(this)},has:Lr,add:Un,set:Hn,delete:qn,clear:Vn,forEach:Dt(!1,!1)},A={get(ge){return Nr(this,ge,!1,!0)},get size(){return jr(this)},has:Lr,add:Un,set:Hn,delete:qn,clear:Vn,forEach:Dt(!1,!0)},N={get(ge){return Nr(this,ge,!0)},get size(){return jr(this,!0)},has(ge){return Lr.call(this,ge,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:Dt(!0,!1)},oe={get(ge){return Nr(this,ge,!0,!0)},get size(){return jr(this,!0)},has(ge){return Lr.call(this,ge,!0)},add:$t("add"),set:$t("set"),delete:$t("delete"),clear:$t("clear"),forEach:Dt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(ge=>{u[ge]=mr(ge,!1,!1),N[ge]=mr(ge,!0,!1),A[ge]=mr(ge,!1,!0),oe[ge]=mr(ge,!0,!0)}),[u,N,A,oe]}var[pn,vr,Ui,qt]=dn();function Ir(u,A){const N=A?u?qt:Ui:u?vr:pn;return(oe,J,ge)=>J==="__v_isReactive"?!u:J==="__v_isReadonly"?u:J==="__v_raw"?oe:Reflect.get(i.hasOwn(N,J)&&J in oe?N:oe,J,ge)}var zn={get:Ir(!1,!1)},yr={get:Ir(!1,!0)},Hi={get:Ir(!0,!1)},Wn={get:Ir(!0,!0)};function Kn(u,A,N){const oe=b(N);if(oe!==N&&A.call(u,oe)){const J=i.toRawType(u);console.warn(`Reactive ${J} contains both the raw and reactive versions of the same object${J==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var Jn=new WeakMap,br=new WeakMap,Gn=new WeakMap,Yn=new WeakMap;function qi(u){switch(u){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Xn(u){return u.__v_skip||!Object.isExtensible(u)?0:qi(i.toRawType(u))}function _r(u){return u&&u.__v_isReadonly?u:Dr(u,!1,Fn,zn,Jn)}function Vi(u){return Dr(u,!1,Fi,yr,br)}function hn(u){return Dr(u,!0,Bn,Hi,Gn)}function zi(u){return Dr(u,!0,Bi,Wn,Yn)}function Dr(u,A,N,oe,J){if(!i.isObject(u))return console.warn(`value cannot be made reactive: ${String(u)}`),u;if(u.__v_raw&&!(A&&u.__v_isReactive))return u;const ge=J.get(u);if(ge)return ge;const Le=Xn(u);if(Le===0)return u;const nt=new Proxy(u,Le===2?oe:N);return J.set(u,nt),nt}function $r(u){return Fr(u)?$r(u.__v_raw):!!(u&&u.__v_isReactive)}function Fr(u){return!!(u&&u.__v_isReadonly)}function Qn(u){return $r(u)||Fr(u)}function b(u){return u&&b(u.__v_raw)||u}function W(u){return i.def(u,"__v_skip",!0),u}var ee=u=>i.isObject(u)?_r(u):u;function fe(u){return!!(u&&u.__v_isRef===!0)}function qe(u){return xt(u)}function et(u){return xt(u,!0)}var wt=class{constructor(u,A=!1){this._shallow=A,this.__v_isRef=!0,this._rawValue=A?u:b(u),this._value=A?u:ee(u)}get value(){return Ne(b(this),"get","value"),this._value}set value(u){u=this._shallow?u:b(u),i.hasChanged(u,this._rawValue)&&(this._rawValue=u,this._value=this._shallow?u:ee(u),He(b(this),"set","value",u))}};function xt(u,A=!1){return fe(u)?u:new wt(u,A)}function dt(u){He(b(u),"set","value",u.value)}function gn(u){return fe(u)?u.value:u}var Br={get:(u,A,N)=>gn(Reflect.get(u,A,N)),set:(u,A,N,oe)=>{const J=u[A];return fe(J)&&!fe(N)?(J.value=N,!0):Reflect.set(u,A,N,oe)}};function Zn(u){return $r(u)?u:new Proxy(u,Br)}var Ur=class{constructor(u){this.__v_isRef=!0;const{get:A,set:N}=u(()=>Ne(this,"get","value"),()=>He(this,"set","value"));this._get=A,this._set=N}get value(){return this._get()}set value(u){this._set(u)}};function Wi(u){return new Ur(u)}function bl(u){Qn(u)||console.warn("toRefs() expects a reactive object but received a plain one.");const A=i.isArray(u)?new Array(u.length):{};for(const N in u)A[N]=io(u,N);return A}var _l=class{constructor(u,A){this._object=u,this._key=A,this.__v_isRef=!0}get value(){return this._object[this._key]}set value(u){this._object[this._key]=u}};function io(u,A){return fe(u[A])?u[A]:new _l(u,A)}var wl=class{constructor(u,A,N){this._setter=A,this._dirty=!0,this.__v_isRef=!0,this.effect=M(u,{lazy:!0,scheduler:()=>{this._dirty||(this._dirty=!0,He(b(this),"set","value"))}}),this.__v_isReadonly=N}get value(){const u=b(this);return u._dirty&&(u._value=this.effect(),u._dirty=!1),Ne(u,"get","value"),u._value}set value(u){this._setter(u)}};function xl(u){let A,N;return i.isFunction(u)?(A=u,N=()=>{console.warn("Write operation failed: computed value is readonly")}):(A=u.get,N=u.set),new wl(A,N,i.isFunction(u)||!u.set)}t.ITERATE_KEY=p,t.computed=xl,t.customRef=Wi,t.effect=M,t.enableTracking=we,t.isProxy=Qn,t.isReactive=$r,t.isReadonly=Fr,t.isRef=fe,t.markRaw=W,t.pauseTracking=Ut,t.proxyRefs=Zn,t.reactive=_r,t.readonly=hn,t.ref=qe,t.resetTracking=Ue,t.shallowReactive=Vi,t.shallowReadonly=zi,t.shallowRef=et,t.stop=Z,t.toRaw=b,t.toRef=io,t.toRefs=bl,t.track=Ne,t.trigger=He,t.triggerRef=dt,t.unref=gn}}),_=P({"node_modules/@vue/reactivity/index.js"(t,i){i.exports=y()}}),S={};U(S,{Alpine:()=>no,default:()=>yl}),r.exports=K(S);var T=!1,j=!1,H=[],Ce=-1;function D(t){C(t)}function C(t){H.includes(t)||H.push(t),re()}function L(t){let i=H.indexOf(t);i!==-1&&i>Ce&&H.splice(i,1)}function re(){!j&&!T&&(T=!0,queueMicrotask(ye))}function ye(){T=!1,j=!0;for(let t=0;tt.effect(i,{scheduler:o=>{Ye?D(o):o()}}),Ge=t.raw}function ht(t){X=t}function yt(t){let i=()=>{};return[c=>{let d=X(c);return t._x_effects||(t._x_effects=new Set,t._x_runEffects=()=>{t._x_effects.forEach(p=>p())}),t._x_effects.add(d),i=()=>{d!==void 0&&(t._x_effects.delete(d),Te(d))},d},()=>{i()}]}function Ct(t,i){let o=!0,c,d=X(()=>{let p=t();JSON.stringify(p),o?c=p:queueMicrotask(()=>{i(p,c),c=p}),o=!1});return()=>Te(d)}var Ee=[],be=[],Oe=[];function xe(t){Oe.push(t)}function de(t,i){typeof i=="function"?(t._x_cleanups||(t._x_cleanups=[]),t._x_cleanups.push(i)):(i=t,be.push(i))}function Q(t){Ee.push(t)}function Ve(t,i,o){t._x_attributeCleanups||(t._x_attributeCleanups={}),t._x_attributeCleanups[i]||(t._x_attributeCleanups[i]=[]),t._x_attributeCleanups[i].push(o)}function z(t,i){t._x_attributeCleanups&&Object.entries(t._x_attributeCleanups).forEach(([o,c])=>{(i===void 0||i.includes(o))&&(c.forEach(d=>d()),delete t._x_attributeCleanups[o])})}function ae(t){if(t._x_cleanups)for(;t._x_cleanups.length;)t._x_cleanups.pop()()}var ve=new MutationObserver(We),$e=!1;function me(){ve.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),$e=!0}function ue(){Ze(),ve.disconnect(),$e=!1}var ut=[];function Ze(){let t=ve.takeRecords();ut.push(()=>t.length>0&&We(t));let i=ut.length;queueMicrotask(()=>{if(ut.length===i)for(;ut.length>0;)ut.shift()()})}function te(t){if(!$e)return t();ue();let i=t();return me(),i}var k=!1,I=[];function he(){k=!0}function V(){k=!1,We(I),I=[]}function We(t){if(k){I=I.concat(t);return}let i=new Set,o=new Set,c=new Map,d=new Map;for(let p=0;pg.nodeType===1&&i.add(g)),t[p].removedNodes.forEach(g=>g.nodeType===1&&o.add(g))),t[p].type==="attributes")){let g=t[p].target,x=t[p].attributeName,M=t[p].oldValue,Z=()=>{c.has(g)||c.set(g,[]),c.get(g).push({name:x,value:g.getAttribute(x)})},Me=()=>{d.has(g)||d.set(g,[]),d.get(g).push(x)};g.hasAttribute(x)&&M===null?Z():g.hasAttribute(x)?(Me(),Z()):Me()}d.forEach((p,g)=>{z(g,p)}),c.forEach((p,g)=>{Ee.forEach(x=>x(g,p))});for(let p of o)i.has(p)||be.forEach(g=>g(p));i.forEach(p=>{p._x_ignoreSelf=!0,p._x_ignore=!0});for(let p of i)o.has(p)||p.isConnected&&(delete p._x_ignoreSelf,delete p._x_ignore,Oe.forEach(g=>g(p)),p._x_ignore=!0,p._x_ignoreSelf=!0);i.forEach(p=>{delete p._x_ignoreSelf,delete p._x_ignore}),i=null,o=null,c=null,d=null}function pe(t){return ce(q(t))}function $(t,i,o){return t._x_dataStack=[i,...q(o||t)],()=>{t._x_dataStack=t._x_dataStack.filter(c=>c!==i)}}function q(t){return t._x_dataStack?t._x_dataStack:typeof ShadowRoot=="function"&&t instanceof ShadowRoot?q(t.host):t.parentNode?q(t.parentNode):[]}function ce(t){return new Proxy({objects:t},Be)}var Be={ownKeys({objects:t}){return Array.from(new Set(t.flatMap(i=>Object.keys(i))))},has({objects:t},i){return i==Symbol.unscopables?!1:t.some(o=>Object.prototype.hasOwnProperty.call(o,i)||Reflect.has(o,i))},get({objects:t},i,o){return i=="toJSON"?Ae:Reflect.get(t.find(c=>Reflect.has(c,i))||{},i,o)},set({objects:t},i,o,c){const d=t.find(g=>Object.prototype.hasOwnProperty.call(g,i))||t[t.length-1],p=Object.getOwnPropertyDescriptor(d,i);return p!=null&&p.set&&(p!=null&&p.get)?p.set.call(c,o)||!0:Reflect.set(d,i,o)}};function Ae(){return Reflect.ownKeys(this).reduce((i,o)=>(i[o]=Reflect.get(this,o),i),{})}function ot(t){let i=c=>typeof c=="object"&&!Array.isArray(c)&&c!==null,o=(c,d="")=>{Object.entries(Object.getOwnPropertyDescriptors(c)).forEach(([p,{value:g,enumerable:x}])=>{if(x===!1||g===void 0||typeof g=="object"&&g!==null&&g.__v_skip)return;let M=d===""?p:`${d}.${p}`;typeof g=="object"&&g!==null&&g._x_interceptor?c[p]=g.initialize(t,M,p):i(g)&&g!==c&&!(g instanceof Element)&&o(g,M)})};return o(t)}function it(t,i=()=>{}){let o={initialValue:void 0,_x_interceptor:!0,initialize(c,d,p){return t(this.initialValue,()=>Rt(c,d),g=>Lt(c,d,g),d,p)}};return i(o),c=>{if(typeof c=="object"&&c!==null&&c._x_interceptor){let d=o.initialize.bind(o);o.initialize=(p,g,x)=>{let M=c.initialize(p,g,x);return o.initialValue=M,d(p,g,x)}}else o.initialValue=c;return o}}function Rt(t,i){return i.split(".").reduce((o,c)=>o[c],t)}function Lt(t,i,o){if(typeof i=="string"&&(i=i.split(".")),i.length===1)t[i[0]]=o;else{if(i.length===0)throw error;return t[i[0]]||(t[i[0]]={}),Lt(t[i[0]],i.slice(1),o)}}var lr={};function At(t,i){lr[t]=i}function Wt(t,i){return Object.entries(lr).forEach(([o,c])=>{let d=null;function p(){if(d)return d;{let[g,x]=G(i);return d={interceptor:it,...g},de(i,x),d}}Object.defineProperty(t,`$${o}`,{get(){return c(i,p())},enumerable:!1})}),t}function ur(t,i,o,...c){try{return o(...c)}catch(d){er(d,t,i)}}function er(t,i,o=void 0){t=Object.assign(t??{message:"No error message given."},{el:i,expression:o}),console.warn(`Alpine Expression Error: ${t.message} - -${o?'Expression: "'+o+`" - -`:""}`,i),setTimeout(()=>{throw t},0)}var cr=!0;function An(t){let i=cr;cr=!1;let o=t();return cr=i,o}function Kt(t,i,o={}){let c;return bt(t,i)(d=>c=d,o),c}function bt(...t){return Tn(...t)}var Tn=Qr;function Pn(t){Tn=t}function Qr(t,i){let o={};Wt(o,t);let c=[o,...q(t)],d=typeof i=="function"?yi(c,i):_i(c,i,t);return ur.bind(null,t,i,d)}function yi(t,i){return(o=()=>{},{scope:c={},params:d=[]}={})=>{let p=i.apply(ce([c,...t]),d);Cr(o,p)}}var Zr={};function bi(t,i){if(Zr[t])return Zr[t];let o=Object.getPrototypeOf(async function(){}).constructor,c=/^[\n\s]*if.*\(.*\)/.test(t.trim())||/^(let|const)\s/.test(t.trim())?`(async()=>{ ${t} })()`:t,p=(()=>{try{let g=new o(["__self","scope"],`with (scope) { __self.result = ${c} }; __self.finished = true; return __self.result;`);return Object.defineProperty(g,"name",{value:`[Alpine] ${t}`}),g}catch(g){return er(g,i,t),Promise.resolve()}})();return Zr[t]=p,p}function _i(t,i,o){let c=bi(i,o);return(d=()=>{},{scope:p={},params:g=[]}={})=>{c.result=void 0,c.finished=!1;let x=ce([p,...t]);if(typeof c=="function"){let M=c(c,x).catch(Z=>er(Z,o,i));c.finished?(Cr(d,c.result,x,g,o),c.result=void 0):M.then(Z=>{Cr(d,Z,x,g,o)}).catch(Z=>er(Z,o,i)).finally(()=>c.result=void 0)}}}function Cr(t,i,o,c,d){if(cr&&typeof i=="function"){let p=i.apply(o,c);p instanceof Promise?p.then(g=>Cr(t,g,o,c)).catch(g=>er(g,d,i)):t(p)}else typeof i=="object"&&i instanceof Promise?i.then(p=>t(p)):t(i)}var en="x-";function Jt(t=""){return en+t}function Rn(t){en=t}var fr={};function st(t,i){return fr[t]=i,{before(o){if(!fr[o]){console.warn(String.raw`Cannot find directive \`${o}\`. \`${t}\` will use the default order of execution`);return}const c=Ke.indexOf(o);Ke.splice(c>=0?c:Ke.indexOf("DEFAULT"),0,t)}}}function f(t){return Object.keys(fr).includes(t)}function h(t,i,o){if(i=Array.from(i),t._x_virtualDirectives){let p=Object.entries(t._x_virtualDirectives).map(([x,M])=>({name:x,value:M})),g=w(p);p=p.map(x=>g.find(M=>M.name===x.name)?{name:`x-bind:${x.name}`,value:`"${x.value}"`}:x),i=i.concat(p)}let c={};return i.map(Pe((p,g)=>c[p]=g)).filter(Re).map(rt(c,o)).sort(ct).map(p=>se(t,p))}function w(t){return Array.from(t).map(Pe()).filter(i=>!Re(i))}var E=!1,R=new Map,F=Symbol();function B(t){E=!0;let i=Symbol();F=i,R.set(i,[]);let o=()=>{for(;R.get(i).length;)R.get(i).shift()();R.delete(i)},c=()=>{E=!1,o()};t(o),c()}function G(t){let i=[],o=x=>i.push(x),[c,d]=yt(t);return i.push(d),[{Alpine:on,effect:c,cleanup:o,evaluateLater:bt.bind(bt,t),evaluate:Kt.bind(Kt,t)},()=>i.forEach(x=>x())]}function se(t,i){let o=()=>{},c=fr[i.type]||o,[d,p]=G(t);Ve(t,i.original,p);let g=()=>{t._x_ignore||t._x_ignoreSelf||(c.inline&&c.inline(t,i,d),c=c.bind(c,t,i,d),E?R.get(F).push(c):c())};return g.runCleanups=p,g}var le=(t,i)=>({name:o,value:c})=>(o.startsWith(t)&&(o=o.replace(t,i)),{name:o,value:c}),ke=t=>t;function Pe(t=()=>{}){return({name:i,value:o})=>{let{name:c,value:d}=Fe.reduce((p,g)=>g(p),{name:i,value:o});return c!==i&&t(c,i),{name:c,value:d}}}var Fe=[];function _e(t){Fe.push(t)}function Re({name:t}){return je().test(t)}var je=()=>new RegExp(`^${en}([^:^.]+)\\b`);function rt(t,i){return({name:o,value:c})=>{let d=o.match(je()),p=o.match(/:([a-zA-Z0-9\-_:]+)/),g=o.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],x=i||t[o]||o;return{type:d?d[1]:null,value:p?p[1]:null,modifiers:g.map(M=>M.replace(".","")),expression:c,original:x}}}var Ie="DEFAULT",Ke=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",Ie,"teleport"];function ct(t,i){let o=Ke.indexOf(t.type)===-1?Ie:t.type,c=Ke.indexOf(i.type)===-1?Ie:i.type;return Ke.indexOf(o)-Ke.indexOf(c)}function mt(t,i,o={}){t.dispatchEvent(new CustomEvent(i,{detail:o,bubbles:!0,composed:!0,cancelable:!0}))}function Xe(t,i){if(typeof ShadowRoot=="function"&&t instanceof ShadowRoot){Array.from(t.children).forEach(d=>Xe(d,i));return}let o=!1;if(i(t,()=>o=!0),o)return;let c=t.firstElementChild;for(;c;)Xe(c,i),c=c.nextElementSibling}function ft(t,...i){console.warn(`Alpine Warning: ${t}`,...i)}var dr=!1;function pr(){dr&&ft("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),dr=!0,document.body||ft("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `