PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.5
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.5
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
← All changes | app/Http/Routes/api.php +218 -76 1.3.20 → 1.6.5 View file →
@@ -6,17 +6,20 @@
6 6 */
7 7
8 8 use FluentCart\App\Http\Controllers\AddonsController;
9 9 use FluentCart\App\Http\Controllers\AddressInfoController;
10 +use FluentCart\App\Http\Controllers\AttributesController;
10 11 use FluentCart\App\Http\Controllers\AppControllers\AppController;
11 -use FluentCart\App\Http\Controllers\AttributesController;
12 12 use FluentCart\App\Http\Controllers\CheckoutFieldsController;
13 13 use FluentCart\App\Http\Controllers\CustomerController;
14 14 use FluentCart\App\Http\Controllers\DashboardController;
15 +use FluentCart\App\Http\Controllers\DataBackfillController;
15 16 use FluentCart\App\Http\Controllers\EmailNotificationController;
16 17 use FluentCart\App\Http\Controllers\FileUploadController;
17 18 use FluentCart\App\Http\Controllers\IntegrationController;
19 +use FluentCart\App\Http\Controllers\RenewalController;
18 20 use FluentCart\App\Http\Controllers\LabelController;
21 +use FluentCart\App\Http\Controllers\McpSettingsController;
19 22 use FluentCart\App\Http\Controllers\ModuleSettingsController;
20 23 use FluentCart\App\Http\Controllers\NotesController;
21 24 use FluentCart\App\Http\Controllers\OnboardingController;
22 25 use FluentCart\App\Http\Controllers\OrderController;
@@ -26,9 +29,8 @@
26 29 use FluentCart\App\Http\Controllers\ProductVariationController;
27 30 use FluentCart\App\Http\Controllers\StorageController;
28 31 use FluentCart\App\Http\Controllers\SettingsController;
29 32 use FluentCart\App\Http\Controllers\CouponsController;
30 -use FluentCart\App\Http\Controllers\TaxClassController;
31 33 use FluentCart\App\Http\Controllers\TaxConfigurationController;
32 34 use FluentCart\App\Http\Controllers\TaxRateController;
33 35 use FluentCart\App\Http\Controllers\TemplateController;
34 36 use FluentCart\App\Http\Controllers\VariantController;
@@ -49,8 +51,12 @@
49 51 $router->prefix('dashboard')->withPolicy('AdminPolicy')->group(function (Router $router) {
50 52 $router->get('/', [DashboardController::class, 'getOnboardingData']);
51 53 });
52 54
55 +$router->prefix('data-backfills')->withPolicy('AdminPolicy')->group(function (Router $router) {
56 + $router->post('/run', [DataBackfillController::class, 'run']);
57 +});
58 +
53 59 $router->prefix('dashboard')->withPolicy('DashboardPolicy')->group(function (Router $router) {
54 60 $router->get('/stats', [DashboardController::class, 'getDashboardStats'])->meta([
55 61 'permissions' => 'dashboard_stats/view'
56 62 ]);
@@ -165,8 +171,11 @@
165 171 ]);
166 172 $router->post('/{postId}/tax-class/remove', [ProductController::class, 'removeTaxClass'])->meta([
167 173 'permissions' => 'products/edit'
168 174 ]);
175 + $router->post('/{postId}/tax-exempt', [ProductController::class, 'toggleTaxExempt'])->meta([
176 + 'permissions' => 'products/edit'
177 + ]);
169 178
170 179 $router->post('/{postId}/shipping-class', [ProductController::class, 'updateShippingClass'])->meta([
171 180 'permissions' => 'products/edit'
172 181 ]);
@@ -232,11 +241,27 @@
232 241 $router->post('/variants', [ProductVariationController::class, 'create'])->meta([
233 242 'permissions' => 'products/create'
234 243 ]);
235 244
245 + // Advanced Variation — bulk price/stock/status edit for variant combinations.
246 + // Registered BEFORE the /variants/{variantId} routes so the first-match
247 + // router doesn't capture 'bulk-update' as a {variantId}.
248 + $router->post('/variants/bulk-update', [ProductVariationController::class, 'bulkUpdate'])->meta([
249 + 'permissions' => 'products/edit'
250 + ]);
251 +
252 + // Group bulk update — PATCH semantics: only non-null fields are written.
253 + // Registered BEFORE /variants/{variantId} to avoid the param capturing 'group-bulk-update'.
254 + $router->post('/variants/group-bulk-update', [ProductVariationController::class, 'groupBulkUpdate'])->meta([
255 + 'permissions' => 'products/edit'
256 + ]);
257 +
236 258 $router->post('/variants/{variantId}', [ProductVariationController::class, 'update'])->meta([
237 259 'permissions' => 'products/edit'
238 260 ]);
261 + $router->post('/variants/{variantId}/tax-exempt', [ProductVariationController::class, 'updateTaxSettings'])->meta([
262 + 'permissions' => 'products/edit'
263 + ]);
239 264
240 265 $router->delete('/variants/{variantId}', [ProductVariationController::class, 'delete'])->meta([
241 266 'permissions' => 'products/delete'
242 267 ]);
@@ -255,8 +280,54 @@
255 280 $router->get('/', [VariantController::class, 'index'])->meta([
256 281 'permissions' => 'products/view'
257 282 ]);
258 283 });
284 +
285 +// Advanced Variation — attribute library (groups + terms)
286 +$router->prefix('options')->withPolicy('ProductPolicy')->group(function (Router $router) {
287 + // Library endpoint — single payload powering the Advanced Variation library
288 + // picker (full group list with terms + the frequently-used IDs for chips).
289 + // Registered BEFORE 'attr/groups' to ensure the more-specific path wins.
290 + $router->get('attr/groups/library', [AttributesController::class, 'getLibrary'])->meta([
291 + 'permissions' => 'products/view'
292 + ]);
293 + $router->get('attr/groups', [AttributesController::class, 'getGroups'])->meta([
294 + 'permissions' => 'products/view'
295 + ]);
296 + // Plural 'attr/groups/reorder' doesn't collide with the singular
297 + // 'attr/group/{group_id}' routes below; kept here next to its list sibling.
298 + $router->post('attr/groups/reorder', [AttributesController::class, 'reorderGroups'])->meta([
299 + 'permissions' => 'products/edit'
300 + ]);
301 + $router->post('attr/group/', [AttributesController::class, 'createGroup'])->meta([
302 + 'permissions' => 'products/create'
303 + ]);
304 + $router->get('attr/group/{group_id}', [AttributesController::class, 'getGroup'])->meta([
305 + 'permissions' => 'products/view'
306 + ]);
307 + $router->put('attr/group/{group_id}', [AttributesController::class, 'updateGroup'])->meta([
308 + 'permissions' => 'products/edit'
309 + ]);
310 + $router->delete('attr/group/{group_id}', [AttributesController::class, 'deleteGroup'])->meta([
311 + 'permissions' => 'products/delete'
312 + ]);
313 + $router->get('attr/group/{group_id}/terms', [AttributesController::class, 'getTerms'])->meta([
314 + 'permissions' => 'products/view'
315 + ]);
316 + $router->post('attr/group/{group_id}/terms', [AttributesController::class, 'createTerms'])->meta([
317 + 'permissions' => 'products/create'
318 + ]);
319 + $router->post('attr/group/{group_id}/term/{term_id}', [AttributesController::class, 'updateTerm'])->meta([
320 + 'permissions' => 'products/edit'
321 + ]);
322 + $router->delete('attr/group/{group_id}/term/{term_id}', [AttributesController::class, 'deleteTerm'])->meta([
323 + 'permissions' => 'products/delete'
324 + ]);
325 + $router->post('attr/group/{group_id}/terms/reorder', [AttributesController::class, 'reorderTerms'])->meta([
326 + 'permissions' => 'products/edit'
327 + ]);
328 +});
329 +
259 330 //Integration route declaration
260 331 $router->prefix('integration')->withPolicy('IntegrationPolicy')->group(function (Router $router) {
261 332
262 333 $router->get('addons', [AddonsController::class, 'getAddons'])->meta([
@@ -406,9 +477,23 @@
406 477 $router->post('modules', [ModuleSettingsController::class, 'saveSettings'])->meta([
407 478 'permissions' => 'is_super_admin'
408 479 ]);
409 480
481 + // MCP (Features & addon → MCP card): status, on/off toggle, connection snippet.
482 + $router->get('mcp', [McpSettingsController::class, 'status'])->meta([
483 + 'permissions' => 'is_super_admin'
484 + ]);
485 + $router->post('mcp/toggle', [McpSettingsController::class, 'toggle'])->meta([
486 + 'permissions' => 'is_super_admin'
487 + ]);
488 + $router->post('mcp/install-adapter', [McpSettingsController::class, 'installAdapter'])->meta([
489 + 'permissions' => 'is_super_admin'
490 + ]);
491 + $router->get('mcp/config-snippets', [McpSettingsController::class, 'getConfigSnippets'])->meta([
492 + 'permissions' => 'is_super_admin'
493 + ]);
410 494
495 +
411 496 $router->post('confirmation', [SettingsController::class, 'saveConfirmation'])->meta([
412 497 'permissions' => 'is_super_admin'
413 498 ]);
414 499 //shortcode get
@@ -431,8 +516,20 @@
431 516 ]);
432 517 $router->post('storage-drivers/verify-info', [StorageController::class, 'verifyConnectInfo'])->meta([
433 518 'permissions' => 'is_super_admin'
434 519 ]);
520 + $router->post('storage-drivers/create-bucket', [StorageController::class, 'createBucket'])->meta([
521 + 'permissions' => 'is_super_admin'
522 + ]);
523 + $router->post('storage-drivers/bucket-list', [StorageController::class, 'listBuckets'])->meta([
524 + 'permissions' => 'is_super_admin'
525 + ]);
526 + $router->post('storage-drivers/reset', [StorageController::class, 'resetSettings'])->meta([
527 + 'permissions' => 'is_super_admin'
528 + ]);
529 + $router->post('storage-drivers/change-status', [StorageController::class, 'changeStatus'])->meta([
530 + 'permissions' => 'is_super_admin'
531 + ]);
435 532
436 533
437 534 });
438 535
@@ -444,14 +541,21 @@
444 541 $router->post('/calculate-shipping', [OrderController::class, 'updateShipping'])->meta([
445 542 'permissions' => ['orders/create', 'orders/manage']
446 543 ]);
447 544
545 + // Public utility: pure tax calculation, no DB writes. No longer called by the admin Vue
546 + // (tax is now auto-applied server-side on save). Available for third-party integrations.
547 + $router->post('/calculate-tax', [OrderController::class, 'calculateTax'])->meta([
548 + 'permissions' => ['orders/create', 'orders/manage'],
549 + 'permissions_type' => 'any',
550 + ]);
551 +
448 552 $router->post('/', [OrderController::class, 'store'])->meta([
449 553 'permissions' => 'orders/create'
450 554 ]);
451 555
452 556 $router->post('/do-bulk-action', [OrderController::class, 'handleBulkActions'])->meta([
453 - 'permissions' => 'orders/manage'
557 + 'permissions' => 'orders/delete' // every accepted action deletes orders — same gate as DELETE /{order_id}
454 558 ]);
455 559
456 560 $router->post('/{order}/mark-as-paid', [OrderController::class, 'markAsPaid'])->meta([
457 561 'permissions' => 'orders/manage'
@@ -506,11 +610,13 @@
506 610 $router->post('/{order}/transactions/{transaction_id}/accept-dispute/', [OrderController::class, 'acceptDispute'])->meta([
507 611 'permissions' => 'orders/manage'
508 612 ]);
509 613
510 - $router->get('/{id}/transactions/{transaction_id}', [OrderController::class, 'getDetails'])->meta([
511 - 'permissions' => 'orders/view'
512 - ]);
614 + $router->get('/{id}/transactions/{transaction_id}', [OrderController::class, 'getTransactionDetails'])
615 + ->int('id', 'transaction_id')
616 + ->meta([
617 + 'permissions' => 'orders/view'
618 + ]);
513 619
514 620 $router->put('/{order}/address/{id}', [OrderController::class, 'updateOrderAddress'])->meta([
515 621 'permissions' => 'orders/manage'
516 622 ]);
@@ -518,8 +624,12 @@
518 624 $router->put('/{order}/transactions/{transaction}/status', [OrderController::class, 'updateTransactionStatus'])->meta([
519 625 'permissions' => 'orders/manage'
520 626 ]);
521 627
628 + $router->post('/{order}/transactions/{transaction}/sync', [OrderController::class, 'syncPendingTransaction'])->meta([
629 + 'permissions' => 'orders/manage'
630 + ]);
631 +
522 632 $router->post('/{order}/create-custom', [OrderController::class, 'createCustom'])->int('id')->meta([
523 633 'permissions' => 'orders/create'
524 634 ]);
525 635
@@ -532,9 +642,26 @@
532 642 ]);
533 643
534 644 });
535 645
646 +$router->prefix('renewals')->withPolicy('OrderPolicy')->group(function (Router $router) {
647 + $router->get('/', [RenewalController::class, 'index'])->meta([
648 + 'permissions' => 'orders/view'
649 + ]);
536 650
651 + $router->get('/{id}', [RenewalController::class, 'show'])->int('id')->meta([
652 + 'permissions' => 'orders/view'
653 + ]);
654 +
655 + $router->post('/{order}/void', [RenewalController::class, 'void'])->meta([
656 + 'permissions' => 'orders/manage'
657 + ]);
658 +
659 + $router->post('/{order}/resend', [RenewalController::class, 'resend'])->meta([
660 + 'permissions' => 'orders/manage'
661 + ]);
662 +});
663 +
537 664 $router->prefix('labels')->withPolicy('LabelPolicy')->group(function (Router $router) {
538 665 $router->get('/', [LabelController::class, 'index'])->meta([
539 666 'permissions' => 'labels/view'
540 667 ]);
@@ -621,56 +748,15 @@
621 748
622 749 });
623 750
624 751
625 -$router->prefix('options')->withPolicy('ProductPolicy')->group(function (Router $router) {
626 - $router->get('attr/groups', [AttributesController::class, 'getGroups'])->meta([
627 - 'permissions' => 'products/view'
628 - ]);
629 752
630 - $router->post('attr/group/', [AttributesController::class, 'createGroup'])->meta([
631 - 'permissions' => 'products/create'
632 - ]);
633 -
634 - $router->get('attr/group/{group_id}', [AttributesController::class, 'getGroup'])->meta([
635 - 'permissions' => 'products/view'
636 - ]);
637 -
638 - $router->put('attr/group/{group_id}', [AttributesController::class, 'updateGroup'])->meta([
639 - 'permissions' => 'products/edit'
640 - ]);
641 -
642 - $router->delete('attr/group/{group_id}', [AttributesController::class, 'deleteGroup'])->meta([
643 - 'permissions' => 'products/delete'
644 - ]);
645 -
646 - $router->get('attr/group/{group_id}/terms', [AttributesController::class, 'getTerms'])->meta([
647 - 'permissions' => 'products/view'
648 - ]);
649 -
650 - $router->post('attr/group/{group_id}/term', [AttributesController::class, 'createTerm'])->meta([
651 - 'permissions' => 'products/create'
652 - ]);
653 -
654 - $router->post('attr/group/{group_id}/term/{term_id}', [AttributesController::class, 'updateTerm'])->meta([
655 - 'permissions' => 'products/edit'
656 - ]);
657 -
658 - $router->delete('attr/group/{group_id}/term/{term_id}', [AttributesController::class, 'deleteTerm'])->meta([
659 - 'permissions' => 'products/delete'
660 - ]);
661 -
662 - $router->post('attr/group/{group_id}/term/{term_id}/serial', [AttributesController::class, 'changeTermSerial'])->meta([
663 - 'permissions' => 'products/edit'
664 - ]);
665 -});
666 -
667 -
668 753 $router->prefix('onboarding')->withPolicy('AdminPolicy')->group(function (Router $router) {
669 754 $router->get('/', [OnboardingController::class, 'index']);
670 755 $router->post('/', [OnboardingController::class, 'saveSettings']);
671 756 $router->post('/create-pages', [OnboardingController::class, 'createPages']);
672 757 $router->post('/create-page', [OnboardingController::class, 'createPage']);
758 + $router->post('/save-tax', [OnboardingController::class, 'saveTaxSettings']);
673 759 });
674 760 $router->prefix('email-notification')->withPolicy('StoreSensitivePolicy')->group(function (Router $router) {
675 761 $router->get('/', [EmailNotificationController::class, 'index']);
676 762 $router->get('/get-short-codes', [EmailNotificationController::class, 'getShortCodes']);
@@ -677,8 +763,11 @@
677 763 $router->get('/get-settings', [EmailNotificationController::class, 'getSettings']);
678 764 $router->post('/save-settings', [EmailNotificationController::class, 'saveSettings']);
679 765 $router->get('/reminders', [EmailNotificationController::class, 'getSchedulingSettings']);
680 766 $router->post('/reminders', [EmailNotificationController::class, 'saveSchedulingSettings']);
767 + $router->get('/digest-settings', [EmailNotificationController::class, 'getDigestSettings']);
768 + $router->post('/digest-settings', [EmailNotificationController::class, 'saveDigestSettings']);
769 + $router->post('/digest-settings/send-test', [EmailNotificationController::class, 'sendDigestTest']);
681 770 $router->post('/enable-notification/{name}', [EmailNotificationController::class, 'enableNotification']);
682 771 $router->post('/send-manual-reminder', [EmailNotificationController::class, 'sendManualReminder']);
683 772 $router->post('/preview-default-template', [EmailNotificationController::class, 'previewDefaultTemplate']);
684 773 $router->get('/{notification}', [EmailNotificationController::class, 'find']);
@@ -744,10 +833,10 @@
744 833 });
745 834
746 835 $router->post('/upload-editor-file', [FileUploadController::class, 'uploadEditorFile'])->withPolicy('AdminPolicy');
747 836
748 -$router->prefix('notes')->withPolicy('AdminPolicy')->group(function (Router $router) {
749 - $router->post('/attach', [NotesController::class, 'attach']);
837 +$router->prefix('notes')->withPolicy('OrderPolicy')->group(function (Router $router) {
838 + $router->post('/attach', [NotesController::class, 'attach'])->meta(['permissions' => 'orders/manage']);
750 839 });
751 840
752 841 $router->prefix('app')->withPolicy('AdminPolicy')->group(function (Router $router) {
753 842 $router->get('init', [AppController::class, 'init']);
@@ -797,40 +886,93 @@
797 886 });
798 887
799 888
800 889 // Tax Routes
801 -$router->prefix('tax')->withPolicy('StoreSensitivePolicy')->group(function (Router $router) {
802 - // TaxClasses routes
803 - $router->get('classes', [TaxClassController::class, 'index']);
804 - $router->post('classes', [TaxClassController::class, 'store']);
805 - $router->put('classes/{id}', [TaxClassController::class, 'update'])->int('id');
806 - $router->delete('classes/{id}', [TaxClassController::class, 'delete'])->int('id');
890 +$router->prefix('tax')->withPolicy('StoreSettingsPolicy')->group(function (Router $router) {
891 + // TaxClass routes
892 + $router->get('classes', [TaxRateController::class, 'getClasses'])->meta([
893 + 'permissions' => 'store/settings'
894 + ]);
895 + $router->post('classes', [TaxRateController::class, 'createClass'])->meta([
896 + 'permissions' => 'store/sensitive'
897 + ]);
898 + $router->delete('classes/{id}', [TaxRateController::class, 'deleteClass'])->int('id')->meta([
899 + 'permissions' => 'store/sensitive'
900 + ]);
807 901
808 902 // TaxRates routes
809 - $router->get('rates', [TaxRateController::class, 'index']);
810 - $router->get('rates/country/rates/{country_code}', [TaxRateController::class, 'show']);
811 - $router->post('rates/country/override', [TaxRateController::class, 'saveShippingOverride']);
812 - $router->delete('rates/country/override/{id}', [TaxRateController::class, 'deleteShippingOverride'])->int('id');
813 - $router->put('country/rate/{id}', [TaxRateController::class, 'update'])->int('id');
814 - $router->post('country/rate', [TaxRateController::class, 'store']);
815 - $router->delete('country/rate/{id}', [TaxRateController::class, 'delete'])->int('id');
816 - $router->delete('country/{country_code}', [TaxRateController::class, 'deleteCountry']);
817 - $router->get('country-tax-id/{country_code}', [TaxRateController::class, 'getCountryTaxId']);
818 - $router->post('country-tax-id/{country_code}', [TaxRateController::class, 'saveCountryTaxId']);
903 + $router->get('rates', [TaxRateController::class, 'index'])->meta([
904 + 'permissions' => 'store/settings'
905 + ]);
906 + $router->get('rates/country/rates/{country_code}', [TaxRateController::class, 'show'])->meta([
907 + 'permissions' => 'store/settings'
908 + ]);
909 + $router->post('rates/country/override', [TaxRateController::class, 'saveShippingOverride'])->meta([
910 + 'permissions' => 'store/sensitive'
911 + ]);
912 + $router->delete('rates/country/override/{id}', [TaxRateController::class, 'deleteShippingOverride'])->int('id')->meta([
913 + 'permissions' => 'store/sensitive'
914 + ]);
915 + $router->put('country/rate/{id}', [TaxRateController::class, 'update'])->int('id')->meta([
916 + 'permissions' => 'store/sensitive'
917 + ]);
918 + $router->post('country/rate', [TaxRateController::class, 'store'])->meta([
919 + 'permissions' => 'store/sensitive'
920 + ]);
921 + $router->delete('country/rate/{id}', [TaxRateController::class, 'delete'])->int('id')->meta([
922 + 'permissions' => 'store/sensitive'
923 + ]);
924 + $router->post('country-status/{country_code}', [TaxRateController::class, 'updateCountryStatus'])->meta([
925 + 'permissions' => 'store/sensitive'
926 + ]);
927 + $router->get('country-tax-id/{country_code}', [TaxRateController::class, 'getCountryTaxId'])->meta([
928 + 'permissions' => 'store/settings'
929 + ]);
930 + $router->post('country-tax-id/{country_code}', [TaxRateController::class, 'saveCountryTaxId'])->meta([
931 + 'permissions' => 'store/sensitive'
932 + ]);
819 933
934 + // Product category tax overrides
935 + $router->get('product-overrides/{country_code}', [TaxRateController::class, 'getProductOverrides'])->meta([
936 + 'permissions' => 'store/settings'
937 + ]);
938 + $router->post('product-overrides', [TaxRateController::class, 'saveProductOverride'])->meta([
939 + 'permissions' => 'store/sensitive'
940 + ]);
941 + $router->delete('product-overrides/{id}', [TaxRateController::class, 'deleteProductOverride'])->int('id')->meta([
942 + 'permissions' => 'store/sensitive'
943 + ]);
944 +
820 945 // $router->post('rates/country', [TaxRateController::class, 'addCountry']);
821 946
822 947 // TaxConfiguration routes
823 - $router->get('configuration/rates', [TaxConfigurationController::class, 'getTaxRates']);
824 - $router->post('configuration/countries', [TaxConfigurationController::class, 'saveConfiguredCountries']);
825 - $router->get('configuration/settings', [TaxConfigurationController::class, 'getSettings']);
826 - $router->post('configuration/settings', [TaxConfigurationController::class, 'saveSettings']);
827 - $router->post('configuration/settings/eu-vat', [TaxEUController::class, 'saveEuVatSettings']);
828 - $router->get('configuration/settings/eu-vat/rates', [TaxEUController::class, 'getEuTaxRates']);
829 - $router->post('configuration/settings/eu-vat/oss/override', [TaxEUController::class, 'saveOssTaxOverride']);
830 - $router->post('configuration/settings/eu-vat/oss/shipping-override', [TaxEUController::class, 'saveOssShippingOverride']);
831 - $router->delete('configuration/settings/eu-vat/oss/override', [TaxEUController::class, 'deleteOssTaxOverride'])->int('id');
832 - $router->delete('configuration/settings/eu-vat/oss/shipping-override', [TaxEUController::class, 'deleteOssShippingOverride'])->int('id');
948 + $router->get('configuration/rates', [TaxConfigurationController::class, 'getTaxRates'])->meta([
949 + 'permissions' => 'store/settings'
950 + ]);
951 + $router->post('configuration/countries', [TaxConfigurationController::class, 'saveConfiguredCountries'])->meta([
952 + 'permissions' => 'store/sensitive'
953 + ]);
954 + $router->get('configuration/settings', [TaxConfigurationController::class, 'getSettings'])->meta([
955 + 'permissions' => 'store/settings'
956 + ]);
957 + $router->post('configuration/settings', [TaxConfigurationController::class, 'saveSettings'])->meta([
958 + 'permissions' => 'store/sensitive'
959 + ]);
960 + $router->post('configuration/settings/eu-vat', [TaxEUController::class, 'saveEuVatSettings'])->meta([
961 + 'permissions' => 'store/sensitive'
962 + ]);
963 + $router->post('configuration/settings/eu-vat/reset-rates', [TaxEUController::class, 'resetEuRatesToDefaults'])->meta([
964 + 'permissions' => 'store/sensitive'
965 + ]);
966 + $router->get('configuration/settings/eu-vat/product-overrides', [TaxEUController::class, 'getEuProductOverrides'])->meta([
967 + 'permissions' => 'store/settings'
968 + ]);
969 + $router->get('configuration/settings/eu-vat/oss-rates', [TaxEUController::class, 'getOssCountryRates'])->meta([
970 + 'permissions' => 'store/settings'
971 + ]);
972 + $router->post('configuration/settings/eu-vat/oss-rates', [TaxEUController::class, 'saveOssCountryRates'])->meta([
973 + 'permissions' => 'store/sensitive'
974 + ]);
833 975 });
834 976
835 977 $router->prefix('checkout-fields')->withPolicy('StoreSensitivePolicy')->group(function (Router $router) {
836 978 $router->get('get-fields', [CheckoutFieldsController::class, 'getFields']);