- Create/Update metered billing plan

This commit is contained in:
Čarodej
2021-12-22 09:05:15 +01:00
parent 6bb7789232
commit b1cb7be678
9 changed files with 353 additions and 115 deletions

View File

@@ -210,8 +210,8 @@ return [
// v2
'bandwidth' => 'Bandwidth',
'storage' => 'Storage',
'flat-fee' => 'Flat Fee',
'feature_usage_desc_flat-fee' => 'Price for the service.',
'flatFee' => 'Flat Fee',
'feature_usage_desc_flatFee' => 'Price for the service.',
'feature_usage_desc_bandwidth' => 'Data amount you transferred to/from your account.',
'feature_usage_desc_storage' => 'Total storage amount you are using.',
'feature_usage_desc_members' => 'Total members you invited to your team folders.',

View File

@@ -3,7 +3,7 @@
"/css/app.css": "/css/app.css",
"/css/tailwind.css": "/css/tailwind.css",
"/chunks/admin.js": "/chunks/admin.js?id=5014620eaa736d4d5cd7",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=46820dda03fee8dc7770",
"/chunks/admin-account.js": "/chunks/admin-account.js?id=4786e0d7ab465da795ab",
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~c7a13fb0.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~c7a13fb0.js?id=b6966627bd253eda63ba",
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~3e4fdd8b.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~3e4fdd8b.js?id=d7a8e5b5b913858da427",
"/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~9b68162c.js": "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~9b68162c.js?id=5841d65172536a8a9bdc",
@@ -16,38 +16,38 @@
"/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/settings~chunks/shared.js?id=946723d9a3185230f2a6",
"/chunks/admin~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/shared.js?id=afeba4ebd13af7e995be",
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=6035ca411b2c4239d964",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.js?id=6261a46f75a495a94fae",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.js?id=75bbb477bf92edb65799",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~fa9d08c1.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~fa9d08c1.js?id=741acf06489eac45774e",
"/chunks/app-billings.js": "/chunks/app-billings.js?id=714f7a9f33e15fe89b4a",
"/chunks/app-email.js": "/chunks/app-email.js?id=324ae41d780105c9a9fb",
"/chunks/app-index.js": "/chunks/app-index.js?id=4f1f607c330b916c0090",
"/chunks/app-language.js": "/chunks/app-language.js?id=a469a2fd68729c3cfac2",
"/chunks/app-language.js": "/chunks/app-language.js?id=8be9be7e3a92f7dc8e72",
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~7dbb6a42.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-items~chunks/page~7dbb6a42.js?id=3cbb19b80e635b3524e5",
"/chunks/app-language~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pages~chunks/plan-creat~1a92dd55.js": "/chunks/app-language~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pages~chunks/plan-creat~1a92dd55.js?id=75317652be9e911b6013",
"/chunks/app-others.js": "/chunks/app-others.js?id=2789aac07c894eeb29ea",
"/chunks/app-payments.js": "/chunks/app-payments.js?id=df48b9f5634db900c0ef",
"/chunks/app-settings.js": "/chunks/app-settings.js?id=2a96295eef59bd6c8921",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=c54b4cf708cc411c1967",
"/chunks/app-setup.js": "/chunks/app-setup.js?id=5b66d3db248299e404d5",
"/chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/database~chunks/email-veri~5d0bfc57.js": "/chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/database~chunks/email-veri~5d0bfc57.js?id=107a78323eef0c1d4c81",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=5dbf157c75ae6fb9bda3",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=fda418b31ad6bb55b223",
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=a676227e4aa8230ee85a",
"/chunks/contact-us.js": "/chunks/contact-us.js?id=df0b573d8f305b91e113",
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=65ee559ca803555be568",
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=a6608519c360dbc8fb79",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=f95d2d00f960c9c47d7c",
"/chunks/dashboard.js": "/chunks/dashboard.js?id=9bd774ab677e324cde19",
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-p~2611ac93.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-p~2611ac93.js?id=c76ae7cb1ecbdedac1cf",
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plans~chunks/subscriptions.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plans~chunks/subscriptions.js?id=95b32230258beb6391ed",
"/chunks/dashboard~chunks/invoices~chunks/plan-subscribers~chunks/users.js": "/chunks/dashboard~chunks/invoices~chunks/plan-subscribers~chunks/users.js?id=f72a1b2efde61b53a755",
"/chunks/database.js": "/chunks/database.js?id=ca2b5a438ca2f0833de7",
"/chunks/database.js": "/chunks/database.js?id=39762f9defd75d4f9eb3",
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=6c86916c6c6f679fa86b",
"/chunks/email-verified.js": "/chunks/email-verified.js?id=253ce639751cc8799458",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=24cc0134af21e141b822",
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=d84df0403fccb10eed81",
"/chunks/files.js": "/chunks/files.js?id=26a322863d9c92183c6f",
"/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~chunks/share~c7960950.js": "/chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~chunks/share~c7960950.js?id=64ac90ff8ae7d3ee3ed1",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~34b5eb22.js?id=2f2e1987e91a74932dcb",
"/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~bf3ddedc.js": "/chunks/files~chunks/my-shared-items~chunks/recent-uploads~chunks/shared-with-me~chunks/shared/files~~bf3ddedc.js?id=44dd372c3414f407ed37",
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=9d10a05edfb3a4a11efe",
"/chunks/homepage.js": "/chunks/homepage.js?id=b89dd81804b8a0bd3f0b",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=380d56f8ccf10c1bf633",
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=6309319acc583ba0859c",
"/chunks/invitation.js": "/chunks/invitation.js?id=c9cd3541ee362ae8d5f7",
"/chunks/invoices.js": "/chunks/invoices.js?id=ce6ca4639d16aa3b53d1",
"/chunks/my-shared-items.js": "/chunks/my-shared-items.js?id=4eb4c11f0e574303af7f",
@@ -56,25 +56,25 @@
"/chunks/pages.js": "/chunks/pages.js?id=7db66df0453135bf4e51",
"/chunks/plan.js": "/chunks/plan.js?id=f62a5bd64fb706b2f0e2",
"/chunks/plan-create.js": "/chunks/plan-create.js?id=995a9a5ae9cc43f35d2c",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=ce206dd1e8141bb53e79",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=58e36ccb0b00623ebe93",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=474c4dc2cebe47ffa506",
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=c87a14fce5ffb4ea0451",
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=d58857bc3d9c578a1538",
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=afa7c5328893c5d16e3b",
"/chunks/plans.js": "/chunks/plans.js?id=3c1f3d5a9cfe4dcf5237",
"/chunks/platform.js": "/chunks/platform.js?id=cb224c18bb25c409345a",
"/chunks/platform.js": "/chunks/platform.js?id=426da7075ef9a88ea088",
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=5734e9333fc67c706853",
"/chunks/platform~chunks/shared~chunks/shared-with-me~chunks/team-folders.js": "/chunks/platform~chunks/shared~chunks/shared-with-me~chunks/team-folders.js?id=7d983dfdc91de607d737",
"/chunks/profile.js": "/chunks/profile.js?id=8688d9c7ff850e6989e6",
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=11a027aca50aa90afb77",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=0ae51c660a215d107f6c",
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=2eeb31ccee322c06b81c",
"/chunks/recent-uploads.js": "/chunks/recent-uploads.js?id=2716127ee2f945a90c0e",
"/chunks/settings.js": "/chunks/settings.js?id=aba3e05e61e0b8e5e878",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=d3443e79b667f5b4b1d2",
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=8beb238f265d1826198b",
"/chunks/settings-password.js": "/chunks/settings-password.js?id=049c3383e310392f966d",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=093cc2fd918ee6a340d3",
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=13d23c92a535d7c9a4ff",
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=76b45c336e8e12b23e81",
"/chunks/settings-storage~chunks/settings-subscription~chunks/user-storage~chunks/user-subscription.js": "/chunks/settings-storage~chunks/settings-subscription~chunks/user-storage~chunks/user-subscription.js?id=cd797256cb819aac4d24",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=4a7dff8eca5417e36c64",
"/chunks/settings~chunks/settings-password.js": "/chunks/settings~chunks/settings-password.js?id=c33cd2341b9b04a732e5",
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=5cbb63c9ce73aed42a38",
"/chunks/settings~chunks/settings-password.js": "/chunks/settings~chunks/settings-password.js?id=743bf9cb1e62af56c04e",
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=651d5accf401908724c5",
"/chunks/shared.js": "/chunks/shared.js?id=6230d050545cd1bd9b87",
"/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=78390f82ed065495d64e",
@@ -84,14 +84,14 @@
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=f2fb680ebf4873ff4436",
"/chunks/sign-in.js": "/chunks/sign-in.js?id=da0a2e8fa83c7384e72d",
"/chunks/sign-up.js": "/chunks/sign-up.js?id=f7a2321e731c85ade564",
"/chunks/status-check.js": "/chunks/status-check.js?id=6d1f3e7295c1b35f58da",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=7766326538fcc45601a8",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=e2d2ac5594fa695e030a",
"/chunks/status-check.js": "/chunks/status-check.js?id=8ede384a4a8e8cb1a640",
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=61bb2111a14f77f8ec82",
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=723a6ee0bf76508a3403",
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=8ac19b3fcfd57d79e5b1",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=73d92ef0a3f78ca3260e",
"/chunks/subscriptions.js": "/chunks/subscriptions.js?id=a08cba0bd5f7dabc19b2",
"/chunks/team-folders.js": "/chunks/team-folders.js?id=c337ec175f9e4b7f33c4",
"/chunks/trash.js": "/chunks/trash.js?id=4f0ee7a430c2790c4213",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=b76762021d29da7cff97",
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=a607445205f629d485ac",
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=8bd237c632018a537d76",
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=7ee9b84ffed9bf544997",
"/chunks/user.js": "/chunks/user.js?id=80d4433e6a0f1a2a940d",
@@ -100,7 +100,7 @@
"/chunks/user-detail.js": "/chunks/user-detail.js?id=fab2eae409831e768b0d",
"/chunks/user-password.js": "/chunks/user-password.js?id=6aeb19839b38f287953d",
"/chunks/user-storage.js": "/chunks/user-storage.js?id=936f120357a4480e1bd5",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=87009bae0d5da0dacaeb",
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=b868c2c3f6dce432c076",
"/chunks/users.js": "/chunks/users.js?id=ab7eeac6e8559dc1eb2b",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~35bc7519.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~35bc7519.js?id=ae06aafc3749254fe4aa",
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~629342a0.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~629342a0.js?id=cdefaa7800d04dafb07b",
@@ -390,8 +390,8 @@
"/chunks/app-language~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pages~chunks/plan-creat~d6690165.js": "/chunks/app-language~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pages~chunks/plan-creat~d6690165.js?id=2f03fbbe27b922063d16",
"/chunks/app-setup.bfb51d46fe9500c09f69.hot-update.js": "/chunks/app-setup.bfb51d46fe9500c09f69.hot-update.js",
"/chunks/plan.bfb51d46fe9500c09f69.hot-update.js": "/chunks/plan.bfb51d46fe9500c09f69.hot-update.js",
"/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=ceca8743be6878e4f970",
"/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=1b619d3ee1a3875819b1",
"/chunks/plan-create/fixed.js": "/chunks/plan-create/fixed.js?id=25ad60a594f9e25d7621",
"/chunks/plan-create/metered.js": "/chunks/plan-create/metered.js?id=e3ccb9876029e03fb932",
"/chunks/settings-storage.bfb51d46fe9500c09f69.hot-update.js": "/chunks/settings-storage.bfb51d46fe9500c09f69.hot-update.js",
"/chunks/settings-subscription.bfb51d46fe9500c09f69.hot-update.js": "/chunks/settings-subscription.bfb51d46fe9500c09f69.hot-update.js",
"/chunks/user-create.bfb51d46fe9500c09f69.hot-update.js": "/chunks/user-create.bfb51d46fe9500c09f69.hot-update.js",
@@ -434,5 +434,182 @@
"/chunks/plan-subscribers.76b5389d993f15c82718.hot-update.js": "/chunks/plan-subscribers.76b5389d993f15c82718.hot-update.js",
"/chunks/admin~chunks/platform~chunks/shared.d81516b0d8910b295242.hot-update.js": "/chunks/admin~chunks/platform~chunks/shared.d81516b0d8910b295242.hot-update.js",
"/chunks/admin~chunks/platform~chunks/settings.c70f3d519363bc62f153.hot-update.js": "/chunks/admin~chunks/platform~chunks/settings.c70f3d519363bc62f153.hot-update.js",
"/chunks/admin~chunks/platform~chunks/shared.90afb72045718354d8a6.hot-update.js": "/chunks/admin~chunks/platform~chunks/shared.90afb72045718354d8a6.hot-update.js"
"/chunks/admin~chunks/platform~chunks/shared.90afb72045718354d8a6.hot-update.js": "/chunks/admin~chunks/platform~chunks/shared.90afb72045718354d8a6.hot-update.js",
"/chunks/plan-create/metered.7bbd7936d3abfa595641.hot-update.js": "/chunks/plan-create/metered.7bbd7936d3abfa595641.hot-update.js",
"/chunks/plan-create/metered.abe6597b89f7c0161574.hot-update.js": "/chunks/plan-create/metered.abe6597b89f7c0161574.hot-update.js",
"/chunks/plan-create/metered.7f32054c81aee4be7c92.hot-update.js": "/chunks/plan-create/metered.7f32054c81aee4be7c92.hot-update.js",
"/chunks/plan-create/metered.a2d9b27e73a345e8f76f.hot-update.js": "/chunks/plan-create/metered.a2d9b27e73a345e8f76f.hot-update.js",
"/chunks/plan-create/metered.21bc55a9ab0474835cb2.hot-update.js": "/chunks/plan-create/metered.21bc55a9ab0474835cb2.hot-update.js",
"/chunks/plan-create/metered.5a4fbc30118df4fd784d.hot-update.js": "/chunks/plan-create/metered.5a4fbc30118df4fd784d.hot-update.js",
"/chunks/plan-create/metered.0ae9d3183a2687a8ebab.hot-update.js": "/chunks/plan-create/metered.0ae9d3183a2687a8ebab.hot-update.js",
"/chunks/plan-create/metered.88916b831e00cb709f2d.hot-update.js": "/chunks/plan-create/metered.88916b831e00cb709f2d.hot-update.js",
"/chunks/plan-create/metered.c19a4996eac585a6b077.hot-update.js": "/chunks/plan-create/metered.c19a4996eac585a6b077.hot-update.js",
"/chunks/plan-create/metered.ecfdfc9101f5445c9c58.hot-update.js": "/chunks/plan-create/metered.ecfdfc9101f5445c9c58.hot-update.js",
"/chunks/plan-create/metered.14a0e4be7b65fa84332a.hot-update.js": "/chunks/plan-create/metered.14a0e4be7b65fa84332a.hot-update.js",
"/chunks/plan-create/metered.6e7a91b15ef7cbc3792b.hot-update.js": "/chunks/plan-create/metered.6e7a91b15ef7cbc3792b.hot-update.js",
"/chunks/plan-create/metered.c604ffd65fc3e1da67bf.hot-update.js": "/chunks/plan-create/metered.c604ffd65fc3e1da67bf.hot-update.js",
"/chunks/plan-create/metered.05fb6cbc030d09956297.hot-update.js": "/chunks/plan-create/metered.05fb6cbc030d09956297.hot-update.js",
"/chunks/plan-create/metered.5b820c3c73f193bb8922.hot-update.js": "/chunks/plan-create/metered.5b820c3c73f193bb8922.hot-update.js",
"/chunks/plan-create/metered.bceb78987b3bbdb8c145.hot-update.js": "/chunks/plan-create/metered.bceb78987b3bbdb8c145.hot-update.js",
"/chunks/plan-create/metered.97350933b1270965ea06.hot-update.js": "/chunks/plan-create/metered.97350933b1270965ea06.hot-update.js",
"/chunks/plan-create/metered.c74ce4fbb3006c815934.hot-update.js": "/chunks/plan-create/metered.c74ce4fbb3006c815934.hot-update.js",
"/chunks/plan-create/metered.8c193d85916a12b859f1.hot-update.js": "/chunks/plan-create/metered.8c193d85916a12b859f1.hot-update.js",
"/chunks/plan-create/metered.37ce4960c483e2679055.hot-update.js": "/chunks/plan-create/metered.37ce4960c483e2679055.hot-update.js",
"/chunks/plan-create/metered.e45fb0af3e9f1392654e.hot-update.js": "/chunks/plan-create/metered.e45fb0af3e9f1392654e.hot-update.js",
"/chunks/plan-create/metered.c0d25df2ce76be5f2980.hot-update.js": "/chunks/plan-create/metered.c0d25df2ce76be5f2980.hot-update.js",
"/chunks/plan-create/metered.46011bfdbe00ba7bdb78.hot-update.js": "/chunks/plan-create/metered.46011bfdbe00ba7bdb78.hot-update.js",
"/chunks/plan-create/metered.eb09a4bcaa5126ab0f11.hot-update.js": "/chunks/plan-create/metered.eb09a4bcaa5126ab0f11.hot-update.js",
"/chunks/plan-create/metered.de83a1188c0dcc5ca722.hot-update.js": "/chunks/plan-create/metered.de83a1188c0dcc5ca722.hot-update.js",
"/chunks/plan-create/metered.8f5956c3c23c322d6d7e.hot-update.js": "/chunks/plan-create/metered.8f5956c3c23c322d6d7e.hot-update.js",
"/chunks/plan-create/metered.d6bd1ca0ab2a515acb49.hot-update.js": "/chunks/plan-create/metered.d6bd1ca0ab2a515acb49.hot-update.js",
"/chunks/plan-create/metered.8b838284f017aab793ba.hot-update.js": "/chunks/plan-create/metered.8b838284f017aab793ba.hot-update.js",
"/chunks/plan-create/metered.fcd25c9c63f6dc76dd58.hot-update.js": "/chunks/plan-create/metered.fcd25c9c63f6dc76dd58.hot-update.js",
"/chunks/plan-create/metered.22231744d42bdf6722a5.hot-update.js": "/chunks/plan-create/metered.22231744d42bdf6722a5.hot-update.js",
"/chunks/plan-create/metered.12f9a99c003cf3ab132d.hot-update.js": "/chunks/plan-create/metered.12f9a99c003cf3ab132d.hot-update.js",
"/chunks/plan-create/metered.c6e1e5478bbf04c0defd.hot-update.js": "/chunks/plan-create/metered.c6e1e5478bbf04c0defd.hot-update.js",
"/chunks/plan-create/metered.7f3c64126c0b94f62a20.hot-update.js": "/chunks/plan-create/metered.7f3c64126c0b94f62a20.hot-update.js",
"/chunks/plan-create/metered.565925a1e6ea9983d578.hot-update.js": "/chunks/plan-create/metered.565925a1e6ea9983d578.hot-update.js",
"/chunks/plan-create/metered.c09e0575e4f4df7d4376.hot-update.js": "/chunks/plan-create/metered.c09e0575e4f4df7d4376.hot-update.js",
"/chunks/plan-create/metered.803ac465d4f8b1f814ae.hot-update.js": "/chunks/plan-create/metered.803ac465d4f8b1f814ae.hot-update.js",
"/chunks/plan-create/metered.0c40de0fccf93a8c36e4.hot-update.js": "/chunks/plan-create/metered.0c40de0fccf93a8c36e4.hot-update.js",
"/chunks/plan-create/metered.c5c3a21ed540f9049ca6.hot-update.js": "/chunks/plan-create/metered.c5c3a21ed540f9049ca6.hot-update.js",
"/chunks/plan-create/metered.fc1cd522bfd9b9fca715.hot-update.js": "/chunks/plan-create/metered.fc1cd522bfd9b9fca715.hot-update.js",
"/chunks/plan-create/metered.de96ef4d4ad457ac3fac.hot-update.js": "/chunks/plan-create/metered.de96ef4d4ad457ac3fac.hot-update.js",
"/chunks/plan-create/metered.8efb5ca8b5321abb8ee5.hot-update.js": "/chunks/plan-create/metered.8efb5ca8b5321abb8ee5.hot-update.js",
"/chunks/plan-create/metered.ed7d2db8a98ed381ed26.hot-update.js": "/chunks/plan-create/metered.ed7d2db8a98ed381ed26.hot-update.js",
"/chunks/plan-create/metered.bef110512c2e2b5a86f7.hot-update.js": "/chunks/plan-create/metered.bef110512c2e2b5a86f7.hot-update.js",
"/chunks/plan-create/metered.24aa9c939cc77d38e73d.hot-update.js": "/chunks/plan-create/metered.24aa9c939cc77d38e73d.hot-update.js",
"/chunks/plan-create/metered.510f30b53c1e6d359934.hot-update.js": "/chunks/plan-create/metered.510f30b53c1e6d359934.hot-update.js",
"/chunks/plan-create/metered.a5fc8ef1ef493231eaf7.hot-update.js": "/chunks/plan-create/metered.a5fc8ef1ef493231eaf7.hot-update.js",
"/chunks/plan-create/metered.18aef51db7de8465f3f1.hot-update.js": "/chunks/plan-create/metered.18aef51db7de8465f3f1.hot-update.js",
"/chunks/plan-create/metered.dfa54429ff6008b4634e.hot-update.js": "/chunks/plan-create/metered.dfa54429ff6008b4634e.hot-update.js",
"/chunks/plan-create/metered.a0781a20fd00ee9f5b72.hot-update.js": "/chunks/plan-create/metered.a0781a20fd00ee9f5b72.hot-update.js",
"/chunks/plan-create/metered.f6662aa3a19f51118192.hot-update.js": "/chunks/plan-create/metered.f6662aa3a19f51118192.hot-update.js",
"/chunks/plan-create/metered.64dd8b7eb5558e269183.hot-update.js": "/chunks/plan-create/metered.64dd8b7eb5558e269183.hot-update.js",
"/chunks/plan-create/metered.7b69d2a74253a27a8b26.hot-update.js": "/chunks/plan-create/metered.7b69d2a74253a27a8b26.hot-update.js",
"/chunks/plan-create/metered.53be7123b2747bfd9baa.hot-update.js": "/chunks/plan-create/metered.53be7123b2747bfd9baa.hot-update.js",
"/chunks/plan-create/metered.b0e1787cfa7bf9d8b660.hot-update.js": "/chunks/plan-create/metered.b0e1787cfa7bf9d8b660.hot-update.js",
"/chunks/plan-create/metered.5c168c0e9ddc2a4d9c19.hot-update.js": "/chunks/plan-create/metered.5c168c0e9ddc2a4d9c19.hot-update.js",
"/chunks/plan-create/metered.ae62e2e4f3ab84e31d3e.hot-update.js": "/chunks/plan-create/metered.ae62e2e4f3ab84e31d3e.hot-update.js",
"/chunks/plan-create/metered.5dc39cfe226a68770414.hot-update.js": "/chunks/plan-create/metered.5dc39cfe226a68770414.hot-update.js",
"/chunks/plan-create/metered.4c14fe7480897861a164.hot-update.js": "/chunks/plan-create/metered.4c14fe7480897861a164.hot-update.js",
"/chunks/plan-create/metered.5d21f0c13383b074db7f.hot-update.js": "/chunks/plan-create/metered.5d21f0c13383b074db7f.hot-update.js",
"/chunks/plan-create/metered.eef858ce1a03cc663091.hot-update.js": "/chunks/plan-create/metered.eef858ce1a03cc663091.hot-update.js",
"/chunks/plan-create/metered.0c868dc3fe15316f6842.hot-update.js": "/chunks/plan-create/metered.0c868dc3fe15316f6842.hot-update.js",
"/chunks/plan-create/metered.e8b945fe40cbf333e4aa.hot-update.js": "/chunks/plan-create/metered.e8b945fe40cbf333e4aa.hot-update.js",
"/chunks/plan-create/metered.7b7724a4c281574e3de3.hot-update.js": "/chunks/plan-create/metered.7b7724a4c281574e3de3.hot-update.js",
"/chunks/plan-create/metered.1821e4ef2a53ba38b933.hot-update.js": "/chunks/plan-create/metered.1821e4ef2a53ba38b933.hot-update.js",
"/chunks/plan-create/metered.3b72effd73d914bf776d.hot-update.js": "/chunks/plan-create/metered.3b72effd73d914bf776d.hot-update.js",
"/chunks/plan-create/metered.a4173bbe27ea1af89ac1.hot-update.js": "/chunks/plan-create/metered.a4173bbe27ea1af89ac1.hot-update.js",
"/chunks/plan-create/metered.3e67e2a887e3e0a0380b.hot-update.js": "/chunks/plan-create/metered.3e67e2a887e3e0a0380b.hot-update.js",
"/chunks/plan-create/metered.0a78a12eae4498cde7fd.hot-update.js": "/chunks/plan-create/metered.0a78a12eae4498cde7fd.hot-update.js",
"/chunks/plan-create/metered.061c4d43edf8b969b9b8.hot-update.js": "/chunks/plan-create/metered.061c4d43edf8b969b9b8.hot-update.js",
"/chunks/plan-create/metered.90beee8e603e8c992108.hot-update.js": "/chunks/plan-create/metered.90beee8e603e8c992108.hot-update.js",
"/chunks/plan-create/metered.bf9a7c73aa927b4ac0ce.hot-update.js": "/chunks/plan-create/metered.bf9a7c73aa927b4ac0ce.hot-update.js",
"/chunks/plan-create/metered.73857e304fb343007dc7.hot-update.js": "/chunks/plan-create/metered.73857e304fb343007dc7.hot-update.js",
"/chunks/plan-create/metered.76ac876f8c3ae18e58b5.hot-update.js": "/chunks/plan-create/metered.76ac876f8c3ae18e58b5.hot-update.js",
"/chunks/plan-create/metered.c299c4119e8df8ca2a96.hot-update.js": "/chunks/plan-create/metered.c299c4119e8df8ca2a96.hot-update.js",
"/chunks/plan-create/metered.cec24a521dc6a484a2b4.hot-update.js": "/chunks/plan-create/metered.cec24a521dc6a484a2b4.hot-update.js",
"/chunks/plan-create/metered.d2e35348fac5ac7e50e6.hot-update.js": "/chunks/plan-create/metered.d2e35348fac5ac7e50e6.hot-update.js",
"/chunks/plan-create/metered.cfe0234e189f2f5a3e5b.hot-update.js": "/chunks/plan-create/metered.cfe0234e189f2f5a3e5b.hot-update.js",
"/chunks/plan-create/metered.6f39ca1fc8cf094469df.hot-update.js": "/chunks/plan-create/metered.6f39ca1fc8cf094469df.hot-update.js",
"/chunks/plan-create/metered.f215abb9ce407a81a0aa.hot-update.js": "/chunks/plan-create/metered.f215abb9ce407a81a0aa.hot-update.js",
"/chunks/plan-create/metered.5d1db84d52ea7dffead4.hot-update.js": "/chunks/plan-create/metered.5d1db84d52ea7dffead4.hot-update.js",
"/chunks/plan-create/metered.d30270e6d0753c4cef22.hot-update.js": "/chunks/plan-create/metered.d30270e6d0753c4cef22.hot-update.js",
"/chunks/plan-create/metered.ae9e576ca1b93a86dcba.hot-update.js": "/chunks/plan-create/metered.ae9e576ca1b93a86dcba.hot-update.js",
"/chunks/plan-create/metered.d44e41d066121b0c3d91.hot-update.js": "/chunks/plan-create/metered.d44e41d066121b0c3d91.hot-update.js",
"/chunks/plan-create/metered.2091539f009bcd7a82b0.hot-update.js": "/chunks/plan-create/metered.2091539f009bcd7a82b0.hot-update.js",
"/chunks/plan-create/metered.8cb0be1a99d57d1984cb.hot-update.js": "/chunks/plan-create/metered.8cb0be1a99d57d1984cb.hot-update.js",
"/chunks/plan-create/metered.06d9ef7e9c3362b509fd.hot-update.js": "/chunks/plan-create/metered.06d9ef7e9c3362b509fd.hot-update.js",
"/chunks/plan-create/metered.5a92ca9b88509ab8a7b7.hot-update.js": "/chunks/plan-create/metered.5a92ca9b88509ab8a7b7.hot-update.js",
"/chunks/plan-create/metered.636e35193099904b9956.hot-update.js": "/chunks/plan-create/metered.636e35193099904b9956.hot-update.js",
"/chunks/plan-settings.ea0f516d3fb6fc8e9bf8.hot-update.js": "/chunks/plan-settings.ea0f516d3fb6fc8e9bf8.hot-update.js",
"/chunks/plan-settings.4d67d10c9e1443a17384.hot-update.js": "/chunks/plan-settings.4d67d10c9e1443a17384.hot-update.js",
"/chunks/plan-settings.f5a6aa766c1f7127bede.hot-update.js": "/chunks/plan-settings.f5a6aa766c1f7127bede.hot-update.js",
"/chunks/plan-settings.6978522affc4fb23c009.hot-update.js": "/chunks/plan-settings.6978522affc4fb23c009.hot-update.js",
"/chunks/plan-settings.4a5a7cc3cf0c8363c936.hot-update.js": "/chunks/plan-settings.4a5a7cc3cf0c8363c936.hot-update.js",
"/chunks/plan-settings.a53fc6e004a0d428c03b.hot-update.js": "/chunks/plan-settings.a53fc6e004a0d428c03b.hot-update.js",
"/chunks/plan-settings.c96d47690d8b30e600f8.hot-update.js": "/chunks/plan-settings.c96d47690d8b30e600f8.hot-update.js",
"/chunks/plan-settings.c36a1fc0638d2450f47a.hot-update.js": "/chunks/plan-settings.c36a1fc0638d2450f47a.hot-update.js",
"/chunks/plan-settings.5142ce1f970284fa2c72.hot-update.js": "/chunks/plan-settings.5142ce1f970284fa2c72.hot-update.js",
"/chunks/plan-settings.8a6a69fcb55a2be60eb9.hot-update.js": "/chunks/plan-settings.8a6a69fcb55a2be60eb9.hot-update.js",
"/chunks/plan-settings.46f80c33f4a6f4945c70.hot-update.js": "/chunks/plan-settings.46f80c33f4a6f4945c70.hot-update.js",
"/chunks/plan-settings.b0952a0be2419eea41a1.hot-update.js": "/chunks/plan-settings.b0952a0be2419eea41a1.hot-update.js",
"/chunks/plan-settings.deeeb5df012ddaa2be36.hot-update.js": "/chunks/plan-settings.deeeb5df012ddaa2be36.hot-update.js",
"/chunks/plan-settings.7116ed20db408a0e10ed.hot-update.js": "/chunks/plan-settings.7116ed20db408a0e10ed.hot-update.js",
"/chunks/plan-settings.ad95e88f08453c430cd0.hot-update.js": "/chunks/plan-settings.ad95e88f08453c430cd0.hot-update.js",
"/chunks/plan-settings.b6078194c6d1c0cc6751.hot-update.js": "/chunks/plan-settings.b6078194c6d1c0cc6751.hot-update.js",
"/chunks/plan-create/metered.72eb8b22e54df2a570dd.hot-update.js": "/chunks/plan-create/metered.72eb8b22e54df2a570dd.hot-update.js",
"/chunks/plan-settings.72eb8b22e54df2a570dd.hot-update.js": "/chunks/plan-settings.72eb8b22e54df2a570dd.hot-update.js",
"/chunks/admin-account.d64c6c9202c616c4179e.hot-update.js": "/chunks/admin-account.d64c6c9202c616c4179e.hot-update.js",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.d64c6c9202c616c4179e.hot-update.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.d64c6c9202c616c4179e.hot-update.js",
"/chunks/app-language.d64c6c9202c616c4179e.hot-update.js": "/chunks/app-language.d64c6c9202c616c4179e.hot-update.js",
"/chunks/app-setup.d64c6c9202c616c4179e.hot-update.js": "/chunks/app-setup.d64c6c9202c616c4179e.hot-update.js",
"/chunks/billings-detail.d64c6c9202c616c4179e.hot-update.js": "/chunks/billings-detail.d64c6c9202c616c4179e.hot-update.js",
"/chunks/contact-us.d64c6c9202c616c4179e.hot-update.js": "/chunks/contact-us.d64c6c9202c616c4179e.hot-update.js",
"/chunks/dashboard.d64c6c9202c616c4179e.hot-update.js": "/chunks/dashboard.d64c6c9202c616c4179e.hot-update.js",
"/chunks/database.d64c6c9202c616c4179e.hot-update.js": "/chunks/database.d64c6c9202c616c4179e.hot-update.js",
"/chunks/environment-setup.d64c6c9202c616c4179e.hot-update.js": "/chunks/environment-setup.d64c6c9202c616c4179e.hot-update.js",
"/chunks/installation-disclaimer.d64c6c9202c616c4179e.hot-update.js": "/chunks/installation-disclaimer.d64c6c9202c616c4179e.hot-update.js",
"/chunks/plan-create/fixed.d64c6c9202c616c4179e.hot-update.js": "/chunks/plan-create/fixed.d64c6c9202c616c4179e.hot-update.js",
"/chunks/plan-create/metered.d64c6c9202c616c4179e.hot-update.js": "/chunks/plan-create/metered.d64c6c9202c616c4179e.hot-update.js",
"/chunks/plan-delete.d64c6c9202c616c4179e.hot-update.js": "/chunks/plan-delete.d64c6c9202c616c4179e.hot-update.js",
"/chunks/plan-settings.d64c6c9202c616c4179e.hot-update.js": "/chunks/plan-settings.d64c6c9202c616c4179e.hot-update.js",
"/chunks/plan-subscribers.d64c6c9202c616c4179e.hot-update.js": "/chunks/plan-subscribers.d64c6c9202c616c4179e.hot-update.js",
"/chunks/platform.d64c6c9202c616c4179e.hot-update.js": "/chunks/platform.d64c6c9202c616c4179e.hot-update.js",
"/chunks/purchase-code.d64c6c9202c616c4179e.hot-update.js": "/chunks/purchase-code.d64c6c9202c616c4179e.hot-update.js",
"/chunks/settings-create-payment-methods.d64c6c9202c616c4179e.hot-update.js": "/chunks/settings-create-payment-methods.d64c6c9202c616c4179e.hot-update.js",
"/chunks/settings-payment-methods.d64c6c9202c616c4179e.hot-update.js": "/chunks/settings-payment-methods.d64c6c9202c616c4179e.hot-update.js",
"/chunks/settings-subscription.d64c6c9202c616c4179e.hot-update.js": "/chunks/settings-subscription.d64c6c9202c616c4179e.hot-update.js",
"/chunks/settings~chunks/settings-password.d64c6c9202c616c4179e.hot-update.js": "/chunks/settings~chunks/settings-password.d64c6c9202c616c4179e.hot-update.js",
"/chunks/status-check.d64c6c9202c616c4179e.hot-update.js": "/chunks/status-check.d64c6c9202c616c4179e.hot-update.js",
"/chunks/stripe-credentials.d64c6c9202c616c4179e.hot-update.js": "/chunks/stripe-credentials.d64c6c9202c616c4179e.hot-update.js",
"/chunks/subscription-plans.d64c6c9202c616c4179e.hot-update.js": "/chunks/subscription-plans.d64c6c9202c616c4179e.hot-update.js",
"/chunks/subscriptions.d64c6c9202c616c4179e.hot-update.js": "/chunks/subscriptions.d64c6c9202c616c4179e.hot-update.js",
"/chunks/upgrade-billing.d64c6c9202c616c4179e.hot-update.js": "/chunks/upgrade-billing.d64c6c9202c616c4179e.hot-update.js",
"/chunks/user-subscription.d64c6c9202c616c4179e.hot-update.js": "/chunks/user-subscription.d64c6c9202c616c4179e.hot-update.js",
"/chunks/plan-settings.f63cb7633108804a1b28.hot-update.js": "/chunks/plan-settings.f63cb7633108804a1b28.hot-update.js",
"/chunks/admin-account.5c188a2374962e517e3a.hot-update.js": "/chunks/admin-account.5c188a2374962e517e3a.hot-update.js",
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.5c188a2374962e517e3a.hot-update.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~5acee76d.5c188a2374962e517e3a.hot-update.js",
"/chunks/app-language.5c188a2374962e517e3a.hot-update.js": "/chunks/app-language.5c188a2374962e517e3a.hot-update.js",
"/chunks/app-setup.5c188a2374962e517e3a.hot-update.js": "/chunks/app-setup.5c188a2374962e517e3a.hot-update.js",
"/chunks/billings-detail.5c188a2374962e517e3a.hot-update.js": "/chunks/billings-detail.5c188a2374962e517e3a.hot-update.js",
"/chunks/contact-us.5c188a2374962e517e3a.hot-update.js": "/chunks/contact-us.5c188a2374962e517e3a.hot-update.js",
"/chunks/dashboard.5c188a2374962e517e3a.hot-update.js": "/chunks/dashboard.5c188a2374962e517e3a.hot-update.js",
"/chunks/database.5c188a2374962e517e3a.hot-update.js": "/chunks/database.5c188a2374962e517e3a.hot-update.js",
"/chunks/environment-setup.5c188a2374962e517e3a.hot-update.js": "/chunks/environment-setup.5c188a2374962e517e3a.hot-update.js",
"/chunks/installation-disclaimer.5c188a2374962e517e3a.hot-update.js": "/chunks/installation-disclaimer.5c188a2374962e517e3a.hot-update.js",
"/chunks/plan-create/fixed.5c188a2374962e517e3a.hot-update.js": "/chunks/plan-create/fixed.5c188a2374962e517e3a.hot-update.js",
"/chunks/plan-create/metered.5c188a2374962e517e3a.hot-update.js": "/chunks/plan-create/metered.5c188a2374962e517e3a.hot-update.js",
"/chunks/plan-delete.5c188a2374962e517e3a.hot-update.js": "/chunks/plan-delete.5c188a2374962e517e3a.hot-update.js",
"/chunks/plan-settings.5c188a2374962e517e3a.hot-update.js": "/chunks/plan-settings.5c188a2374962e517e3a.hot-update.js",
"/chunks/plan-subscribers.5c188a2374962e517e3a.hot-update.js": "/chunks/plan-subscribers.5c188a2374962e517e3a.hot-update.js",
"/chunks/platform.5c188a2374962e517e3a.hot-update.js": "/chunks/platform.5c188a2374962e517e3a.hot-update.js",
"/chunks/purchase-code.5c188a2374962e517e3a.hot-update.js": "/chunks/purchase-code.5c188a2374962e517e3a.hot-update.js",
"/chunks/settings-create-payment-methods.5c188a2374962e517e3a.hot-update.js": "/chunks/settings-create-payment-methods.5c188a2374962e517e3a.hot-update.js",
"/chunks/settings-payment-methods.5c188a2374962e517e3a.hot-update.js": "/chunks/settings-payment-methods.5c188a2374962e517e3a.hot-update.js",
"/chunks/settings-subscription.5c188a2374962e517e3a.hot-update.js": "/chunks/settings-subscription.5c188a2374962e517e3a.hot-update.js",
"/chunks/settings~chunks/settings-password.5c188a2374962e517e3a.hot-update.js": "/chunks/settings~chunks/settings-password.5c188a2374962e517e3a.hot-update.js",
"/chunks/status-check.5c188a2374962e517e3a.hot-update.js": "/chunks/status-check.5c188a2374962e517e3a.hot-update.js",
"/chunks/stripe-credentials.5c188a2374962e517e3a.hot-update.js": "/chunks/stripe-credentials.5c188a2374962e517e3a.hot-update.js",
"/chunks/subscription-plans.5c188a2374962e517e3a.hot-update.js": "/chunks/subscription-plans.5c188a2374962e517e3a.hot-update.js",
"/chunks/subscriptions.5c188a2374962e517e3a.hot-update.js": "/chunks/subscriptions.5c188a2374962e517e3a.hot-update.js",
"/chunks/upgrade-billing.5c188a2374962e517e3a.hot-update.js": "/chunks/upgrade-billing.5c188a2374962e517e3a.hot-update.js",
"/chunks/user-subscription.5c188a2374962e517e3a.hot-update.js": "/chunks/user-subscription.5c188a2374962e517e3a.hot-update.js",
"/chunks/plan-settings.26b58c419acbeaa18d2c.hot-update.js": "/chunks/plan-settings.26b58c419acbeaa18d2c.hot-update.js",
"/chunks/plan-settings.d5d9a3d486033998b1e8.hot-update.js": "/chunks/plan-settings.d5d9a3d486033998b1e8.hot-update.js",
"/chunks/plan-settings.b6231cbfa9d1f24cf975.hot-update.js": "/chunks/plan-settings.b6231cbfa9d1f24cf975.hot-update.js",
"/chunks/plan-settings.80a04ab67e8431e4ec9a.hot-update.js": "/chunks/plan-settings.80a04ab67e8431e4ec9a.hot-update.js",
"/chunks/plan-settings.6383cdda654375f59323.hot-update.js": "/chunks/plan-settings.6383cdda654375f59323.hot-update.js",
"/chunks/plan-settings.722ed4c94aafcb5385a6.hot-update.js": "/chunks/plan-settings.722ed4c94aafcb5385a6.hot-update.js",
"/chunks/plan-settings.a6b5d084becf96f70e30.hot-update.js": "/chunks/plan-settings.a6b5d084becf96f70e30.hot-update.js",
"/chunks/plan-settings.f393f372432e42527b75.hot-update.js": "/chunks/plan-settings.f393f372432e42527b75.hot-update.js",
"/chunks/plan-settings.ea1f8c1903ed7cc1d765.hot-update.js": "/chunks/plan-settings.ea1f8c1903ed7cc1d765.hot-update.js",
"/chunks/plan-settings.87fbca58177c1a753ca0.hot-update.js": "/chunks/plan-settings.87fbca58177c1a753ca0.hot-update.js",
"/chunks/plan-settings.fd687cf0a4985eefc593.hot-update.js": "/chunks/plan-settings.fd687cf0a4985eefc593.hot-update.js",
"/chunks/plan-settings.567f1022f1c2d06d991e.hot-update.js": "/chunks/plan-settings.567f1022f1c2d06d991e.hot-update.js",
"/chunks/plan-settings.3a65ee9da570c90f6297.hot-update.js": "/chunks/plan-settings.3a65ee9da570c90f6297.hot-update.js",
"/chunks/plan-settings.dcff32efc576de996ee2.hot-update.js": "/chunks/plan-settings.dcff32efc576de996ee2.hot-update.js",
"/chunks/plan-create/metered.50f807a0d4bed310eb40.hot-update.js": "/chunks/plan-create/metered.50f807a0d4bed310eb40.hot-update.js",
"/chunks/plan-settings.9a034df6b5ef5adba55b.hot-update.js": "/chunks/plan-settings.9a034df6b5ef5adba55b.hot-update.js"
}

View File

@@ -17,7 +17,7 @@
.info-box {
padding: 20px;
border-radius: 8px;
border-radius: 10px;
margin-bottom: 32px;
background: $light_background;
text-align: left;

View File

@@ -30,43 +30,49 @@
<div class="card shadow-card">
<FormLabel>
{{ $t('Pricing') }}
{{ $t('Charged Features') }}
</FormLabel>
<div class="flex space-x-4">
<!--Price-->
<ValidationProvider tag="div" mode="passive" name="Price" rules="required" v-slot="{ errors }" class="w-full">
<AppInputText :title="$t('admin_page_plans.form.price')" class="w-full">
<input v-model="plan.amount" :placeholder="$t('admin_page_plans.form.price_plac')" type="number" step="0.01" min="1" max="999999999999" :class="{'border-red-700': errors[0]}" class="focus-border-theme input-dark" />
<!--Bandwidth-->
<div>
<AppInputSwitch :title="$t('Bandwidth Price per 1GB')" :description="$t('Charge your user by the amount of data he upload or download.')">
<SwitchInput v-model="plan.features.bandwidth.active" class="switch" :state="plan.features.bandwidth.active" />
</AppInputSwitch>
<ValidationProvider v-if="plan.features.bandwidth.active" class="-mt-3" tag="div" mode="passive" name="Bandwidth Price" rules="required" v-slot="{ errors }">
<AppInputText class="w-full">
<input v-model="plan.features.bandwidth.per_unit" :placeholder="$t('Type the price per 1GB...')" type="number" step="0.01" min="0.01" max="999999999999" :class="{'border-red-700': errors[0]}" class="focus-border-theme input-dark" />
</AppInputText>
</ValidationProvider>
</div>
<!--Storage-->
<div>
<AppInputSwitch :title="$t('Storage Price per 1GB')" :description="$t('Charge your user by the amount of data he has stored on the disk per 1GB.')">
<SwitchInput v-model="plan.features.storage.active" class="switch" :state="plan.features.storage.active" />
</AppInputSwitch>
</div>
<ValidationProvider v-if="plan.features.storage.active" class="-mt-3" tag="div" mode="passive" name="Storage Price" rules="required" v-slot="{ errors }">
<AppInputText class="w-full">
<input v-model="plan.features.storage.per_unit" :placeholder="$t('Type the price per 1GB...')" type="number" step="0.01" min="0.01" max="999999999999" :class="{'border-red-700': errors[0]}" class="focus-border-theme input-dark" />
</AppInputText>
</ValidationProvider>
<!--Flat Fee-->
<div>
<AppInputSwitch :title="$t('Flat Fee per Cycle')" :description="$t('Charge monthly flat fee.')" :is-last="! plan.features.flatFee.active">
<SwitchInput v-model="plan.features.flatFee.active" class="switch" :state="plan.features.flatFee.active" />
</AppInputSwitch>
<ValidationProvider v-if="plan.features.flatFee.active" class="-mt-3" tag="div" mode="passive" name="FlatFee Price" rules="required" v-slot="{ errors }">
<AppInputText class="w-full" :is-last="true">
<input v-model="plan.features.flatFee.per_unit" :placeholder="$t('Type the price...')" type="number" step="0.01" min="0.01" max="999999999999" :class="{'border-red-700': errors[0]}" class="focus-border-theme input-dark" />
</AppInputText>
</ValidationProvider>
</div>
</div>
<div class="card shadow-card">
<FormLabel>
{{ $t('Features') }}
</FormLabel>
<!--Storage Capacity-->
<ValidationProvider tag="div" mode="passive" name="Max Storage Capacity" rules="required" v-slot="{ errors }">
<AppInputText :title="$t('admin_page_plans.form.storage')" :description="$t('admin_page_plans.form.storage_helper')">
<input v-model="plan.features.max_storage_amount" :placeholder="$t('admin_page_plans.form.storage_plac')" type="number" min="1" max="999999999" :class="{'border-red-700': errors[0]}" class="focus-border-theme input-dark" />
</AppInputText>
</ValidationProvider>
<!--Team Members-->
<ValidationProvider tag="div" mode="passive" name="Max Team Members" rules="required" v-slot="{ errors }">
<AppInputText :title="$t('Team Members')" :description="$t('To set unlimited team members, type -1 into form')" :is-last="true">
<input v-model="plan.features.max_team_members" :placeholder="$t('Add max team members in number')" type="number" min="1" max="999999999" :class="{'border-red-700': errors[0]}" class="focus-border-theme input-dark" />
</AppInputText>
</ValidationProvider>
</div>
<InfoBox v-if="isError" type="error" style="margin-top: 40px">
<p>{{ errorMessage }}</p>
</InfoBox>
<ButtonBase :disabled="isLoading" :loading="isLoading" button-style="theme" type="submit">
{{ $t('admin_page_plans.create_plan_button') }}
</ButtonBase>
@@ -74,7 +80,9 @@
</template>
<script>
import AppInputText from "../../../../components/Admin/AppInputText";
import SwitchInput from "../../../../components/Others/Forms/SwitchInput"
import AppInputSwitch from "../../../../components/Admin/AppInputSwitch"
import AppInputText from "../../../../components/Admin/AppInputText"
import {ValidationProvider, ValidationObserver} from 'vee-validate/dist/vee-validate.full'
import SelectInput from '/resources/js/components/Others/Forms/SelectInput'
import ImageInput from '/resources/js/components/Others/Forms/ImageInput'
@@ -94,6 +102,8 @@
components: {
ValidationProvider,
ValidationObserver,
AppInputSwitch,
SwitchInput,
SectionTitle,
AppInputText,
MobileHeader,
@@ -119,12 +129,25 @@
plan: {
name: undefined,
description: undefined,
interval: undefined,
amount: undefined,
currency: undefined,
features: {
max_storage_amount: undefined,
max_team_members: undefined,
bandwidth: {
active: false,
per_unit: undefined,
first_unit: 1,
aggregate_strategy: 'sum_of_usage',
},
storage: {
active: false,
per_unit: undefined,
first_unit: 1,
aggregate_strategy: 'maximum_usage',
},
flatFee: {
active: false,
per_unit: undefined,
aggregate_strategy: 'maximum_usage',
},
},
}
}
@@ -132,6 +155,25 @@
methods: {
async createPlan() {
let tiers = []
Object.entries(this.plan.features).forEach(([key, feature]) => {
if (feature.active) {
tiers.push({
aggregate_strategy: feature.aggregate_strategy,
key: key,
tiers: [
{
per_unit: feature.per_unit,
first_unit: 1,
flat_fee: null,
last_unit: null,
}
]
})
}
})
// Validate fields
const isValid = await this.$refs.createPlan.validate();
@@ -141,35 +183,28 @@
this.isLoading = true
axios
.post('/api/subscriptions/plans', this.plan)
.post('/api/subscriptions/admin/plans', {
type: 'metered',
name: this.plan.name,
description: this.plan.description,
currency: this.plan.currency,
meters: tiers
})
.then(response => {
// Show toaster
events.$emit('toaster', {
type: 'success',
message: this.$t('toaster.plan_created'),
})
// Go to User page
this.$router.push({name: 'PlanSettings', params: {id: response.data.data.id}})
this.$router.push({name: 'PlanMeteredSettings', params: {id: response.data.data.id}})
})
.catch(error => {
// Validation errors
if (error.response.status === 422) {
if (error.response.data.errors['max_storage_amount']) {
this.$refs.createPlan.setErrors({
'Max Storage Capacity': this.$t('errors.capacity_digit')
});
}
}
if (error.response.status === 500) {
this.isError = true
this.errorMessage = error.response.data.message
}
events.$emit('toaster', {
type: 'error',
message: this.$t('popup_error.title'),
})
})
.finally(() => {
this.isLoading = false

View File

@@ -5,40 +5,40 @@
{{ $t('Details') }}
</FormLabel>
<!--Visible-->
<AppInputSwitch :title="$t('admin_page_plans.form.status')" :description="$t('admin_page_plans.form.status_help')">
<SwitchInput @input="$updateInput('/subscriptions/admin/plans/' + $route.params.id, 'visible', plan.attributes.visible)" v-model="plan.attributes.visible" class="switch" :state="plan.attributes.visible"/>
</AppInputSwitch>
<!--Name-->
<AppInputText :title="$t('admin_page_plans.form.name')">
<input @input="$updateInput('/subscriptions/admin/plans/' + $route.params.id, 'name', plan.attributes.name)" v-model="plan.attributes.name" :placeholder="$t('admin_page_plans.form.name_plac')" type="text" class="focus-border-theme input-dark"/>
</AppInputText>
<!--Description-->
<AppInputText :title="$t('admin_page_plans.form.description')">
<AppInputText :title="$t('admin_page_plans.form.description')" :is-last="true">
<textarea @input="$updateInput('/subscriptions/admin/plans/' + $route.params.id, 'description', plan.attributes.description)" v-model="plan.attributes.description" :placeholder="$t('admin_page_plans.form.description_plac')" class="focus-border-theme input-dark"></textarea>
</AppInputText>
</div>
<div class="card shadow-card">
<FormLabel>
{{ $t('Charged Features') }}
</FormLabel>
<!--Bandwidth-->
<AppInputText v-if="plan.attributes.features.bandwidth" :title="$t('Bandwidth Price per 1GB')" :description="$t('Charge your user by the amount of data he upload or download.')" class="w-full">
<input :value="formatCurrency(plan.attributes.currency, plan.attributes.features.bandwidth.tiers[0].per_unit)" type="text" class="focus-border-theme input-dark" disabled/>
</AppInputText>
<!--Storage-->
<AppInputText v-if="plan.attributes.features.storage" :title="$t('Storage Price per 1GB')" :description="$t('Charge your user by the amount of data he has stored on the disk per 1GB.')" class="w-full">
<input :value="formatCurrency(plan.attributes.currency, plan.attributes.features.storage.tiers[0].per_unit)" type="text" class="focus-border-theme input-dark" disabled/>
</AppInputText>
<!--Flat Fee-->
<AppInputText v-if="plan.attributes.features.flatFee" :title="$t('Flat Fee per Cycle')" :description="$t('Charge monthly flat fee.')" class="w-full">
<input :value="formatCurrency(plan.attributes.currency, plan.attributes.features.flatFee.tiers[0].per_unit)" type="text" class="focus-border-theme input-dark" disabled/>
</AppInputText>
<InfoBox style="margin-bottom: 0">
<p>{{ $t('Price change is not possible. If you would like to change your price or currency, please feel free to create a new plan.') }}</p>
</InfoBox>
</div>
<div class="card shadow-card">
<FormLabel>
{{ $t('Features') }}
</FormLabel>
<!--Storage Capacity-->
<AppInputText :title="$t('admin_page_plans.form.storage')" :description="$t('admin_page_plans.form.storage_helper')">
<input @input="$updateInput(`/subscriptions/plans/${$route.params.id}/features`, 'max_storage_amount', plan.attributes.features.max_storage_amount)" v-model="plan.attributes.features.max_storage_amount" :placeholder="$t('admin_page_plans.form.storage_plac')" type="number" min="1" max="999999999" class="focus-border-theme input-dark"/>
</AppInputText>
<!--Team Members-->
<AppInputText :title="$t('Max Team Members')" is-last="true">
<input @input="$updateInput(`/subscriptions/plans/${$route.params.id}/features`, 'max_team_members', plan.attributes.features.max_team_members)" v-model="plan.attributes.features.max_team_members" :placeholder="$t('Add max team members in number')" type="number" min="1" max="999999999" class="focus-border-theme input-dark"/>
</AppInputText>
</div>
</div>
</template>
@@ -68,6 +68,16 @@
visible: undefined
}
},
methods: {
formatCurrency(currency, amount) {
let formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: currency,
});
return formatter.format(amount);
}
},
created() {
this.visible = this.plan.attributes.visible
}

View File

@@ -14,13 +14,13 @@ class FormatUsageEstimatesAction
$usage = match ($estimate['feature']) {
'bandwidth' => Metric::megabytes($estimate['usage'])->format(),
'storage' => Metric::megabytes($estimate['usage'])->format(),
'flat-fee' => intval($estimate['usage']) . ' ' . __('Pcs.'),
'flatFee' => intval($estimate['usage']) . ' ' . __('Pcs.'),
};
// Normalize units
$amount = match ($estimate['feature']) {
'bandwidth', 'storage' => $estimate['amount'] / 1000,
'flat-fee' => $estimate['amount'],
'flatFee' => $estimate['amount'],
};
return [

View File

@@ -12,12 +12,21 @@ class ReportUsageAction
->where('status', 'active')
->cursor()
->each(function ($subscription) {
$this->recordBandwidth($subscription);
$this->recordStorageCapacity($subscription);
if ($subscription->plan->meteredFeatures()->where('key', 'bandwidth')->exists()) {
$this->recordBandwidth($subscription);
}
if ($subscription->plan->meteredFeatures()->where('key', 'storage')->exists()) {
$this->recordStorageUsage($subscription);
}
if ($subscription->plan->meteredFeatures()->where('key', 'flatFee')->exists()) {
$this->recordFlatFee($subscription);
}
});
}
private function recordStorageCapacity(Subscription $subscription): void
private function recordStorageUsage(Subscription $subscription): void
{
// Sum all file size
$filesize = DB::table('files')
@@ -45,4 +54,10 @@ class ReportUsageAction
// Record storage capacity usage
$subscription->recordUsage('bandwidth', $amount);
}
private function recordFlatFee(Subscription $subscription): void
{
// Record flat fee
$subscription->recordUsage('flatFee', 1);
}
}

View File

@@ -117,7 +117,7 @@ class UserSubscriptionTest extends TestCase
'amount' => 476.28,
'usage' => 3969,
], [
'feature' => 'flat-fee',
'feature' => 'flatFee',
'amount' => 2.49,
'usage' => 1,
],
@@ -140,8 +140,8 @@ class UserSubscriptionTest extends TestCase
'cost' => '$0.48',
'usage' => '3.97GB',
],
'flat-fee' => [
'feature' => 'flat-fee',
'flatFee' => [
'feature' => 'flatFee',
'amount' => 2.49,
'cost' => '$2.49',
'usage' => '1 Pcs.',

View File

@@ -32,10 +32,11 @@ class SchedulerTest extends TestCase
]);
PlanMeteredFeature::factory()
->count(2)
->count(3)
->sequence(
['key' => 'storage'],
['key' => 'bandwidth'],
['key' => 'flatFee'],
)
->create([
'plan_id' => $plan->id,