payment-kit 1.20.10 → 1.20.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -24
- package/api/src/index.ts +2 -0
- package/api/src/integrations/stripe/handlers/invoice.ts +63 -5
- package/api/src/integrations/stripe/handlers/payment-intent.ts +1 -0
- package/api/src/integrations/stripe/resource.ts +253 -2
- package/api/src/libs/currency.ts +31 -0
- package/api/src/libs/discount/coupon.ts +1061 -0
- package/api/src/libs/discount/discount.ts +349 -0
- package/api/src/libs/discount/nft.ts +239 -0
- package/api/src/libs/discount/redemption.ts +636 -0
- package/api/src/libs/discount/vc.ts +73 -0
- package/api/src/libs/invoice.ts +50 -16
- package/api/src/libs/math-utils.ts +6 -0
- package/api/src/libs/price.ts +43 -0
- package/api/src/libs/session.ts +242 -57
- package/api/src/libs/subscription.ts +2 -6
- package/api/src/locales/en.ts +38 -38
- package/api/src/queues/auto-recharge.ts +1 -1
- package/api/src/queues/discount-status.ts +200 -0
- package/api/src/queues/subscription.ts +98 -5
- package/api/src/queues/usage-record.ts +1 -1
- package/api/src/routes/auto-recharge-configs.ts +5 -3
- package/api/src/routes/checkout-sessions.ts +755 -64
- package/api/src/routes/connect/change-payment.ts +6 -1
- package/api/src/routes/connect/change-plan.ts +6 -1
- package/api/src/routes/connect/setup.ts +6 -1
- package/api/src/routes/connect/shared.ts +80 -9
- package/api/src/routes/connect/subscribe.ts +12 -2
- package/api/src/routes/coupons.ts +518 -0
- package/api/src/routes/index.ts +4 -0
- package/api/src/routes/invoices.ts +44 -3
- package/api/src/routes/meter-events.ts +2 -1
- package/api/src/routes/payment-currencies.ts +1 -0
- package/api/src/routes/promotion-codes.ts +482 -0
- package/api/src/routes/subscriptions.ts +23 -2
- package/api/src/store/migrations/20250904-discount.ts +136 -0
- package/api/src/store/migrations/20250910-timestamp-fields.ts +116 -0
- package/api/src/store/migrations/20250916-add-description-fields.ts +30 -0
- package/api/src/store/models/checkout-session.ts +12 -0
- package/api/src/store/models/coupon.ts +144 -4
- package/api/src/store/models/discount.ts +23 -10
- package/api/src/store/models/index.ts +13 -2
- package/api/src/store/models/promotion-code.ts +295 -18
- package/api/src/store/models/types.ts +30 -1
- package/api/tests/libs/session.spec.ts +48 -27
- package/blocklet.yml +1 -1
- package/doc/vendor_fulfillment_system.md +38 -38
- package/package.json +20 -20
- package/src/app.tsx +2 -0
- package/src/components/customer/link.tsx +1 -1
- package/src/components/discount/discount-info.tsx +178 -0
- package/src/components/invoice/table.tsx +140 -48
- package/src/components/invoice-pdf/styles.ts +6 -0
- package/src/components/invoice-pdf/template.tsx +59 -33
- package/src/components/metadata/form.tsx +14 -5
- package/src/components/payment-link/actions.tsx +42 -0
- package/src/components/price/form.tsx +91 -65
- package/src/components/product/vendor-config.tsx +5 -3
- package/src/components/promotion/active-redemptions.tsx +534 -0
- package/src/components/promotion/currency-multi-select.tsx +350 -0
- package/src/components/promotion/currency-restrictions.tsx +117 -0
- package/src/components/promotion/product-select.tsx +292 -0
- package/src/components/promotion/promotion-code-form.tsx +534 -0
- package/src/components/subscription/portal/list.tsx +6 -1
- package/src/components/subscription/vendor-service-list.tsx +13 -2
- package/src/locales/en.tsx +253 -26
- package/src/locales/zh.tsx +222 -1
- package/src/pages/admin/billing/subscriptions/detail.tsx +5 -0
- package/src/pages/admin/products/coupons/applicable-products.tsx +166 -0
- package/src/pages/admin/products/coupons/create.tsx +612 -0
- package/src/pages/admin/products/coupons/detail.tsx +538 -0
- package/src/pages/admin/products/coupons/edit.tsx +127 -0
- package/src/pages/admin/products/coupons/index.tsx +210 -3
- package/src/pages/admin/products/index.tsx +22 -3
- package/src/pages/admin/products/products/detail.tsx +12 -2
- package/src/pages/admin/products/promotion-codes/actions.tsx +103 -0
- package/src/pages/admin/products/promotion-codes/create.tsx +235 -0
- package/src/pages/admin/products/promotion-codes/detail.tsx +416 -0
- package/src/pages/admin/products/promotion-codes/list.tsx +247 -0
- package/src/pages/admin/products/promotion-codes/verification-config.tsx +327 -0
- package/src/pages/admin/products/vendors/index.tsx +17 -5
- package/src/pages/customer/subscription/detail.tsx +5 -0
- package/vite.config.ts +4 -3
package/src/locales/en.tsx
CHANGED
|
@@ -5,17 +5,19 @@ export default flat({
|
|
|
5
5
|
redirecting: 'Redirecting...',
|
|
6
6
|
title: 'Name',
|
|
7
7
|
estimated: 'Estimated',
|
|
8
|
+
active: 'Active',
|
|
9
|
+
inactive: 'Inactive',
|
|
8
10
|
metadata: {
|
|
9
11
|
label: 'Metadata',
|
|
10
12
|
description: 'Add custom key-value pairs to store additional information about this meter.',
|
|
11
13
|
add: 'Add more metadata',
|
|
12
14
|
edit: 'Edit metadata',
|
|
13
15
|
empty: 'No metadata',
|
|
14
|
-
emptyTip: "You haven't added any metadata yet
|
|
16
|
+
emptyTip: "You haven't added any metadata yet. You can add it now",
|
|
15
17
|
formMode: 'Switch to form mode',
|
|
16
18
|
jsonMode: 'Switch to JSON mode',
|
|
17
19
|
jsonPlaceholder: 'Enter JSON data...',
|
|
18
|
-
invalidJson: 'Invalid JSON format
|
|
20
|
+
invalidJson: 'Invalid JSON format. Please check your input',
|
|
19
21
|
formatJson: 'Format JSON',
|
|
20
22
|
},
|
|
21
23
|
price: 'Price',
|
|
@@ -26,7 +28,7 @@ export default flat({
|
|
|
26
28
|
minLength: 'Min {len} characters',
|
|
27
29
|
invalidCharacters: 'Invalid characters',
|
|
28
30
|
latinOnly:
|
|
29
|
-
'
|
|
31
|
+
'Must contain at least one letter and cannot include Chinese characters or special characters such as <, >, ", \' or \\',
|
|
30
32
|
loading: 'Loading...',
|
|
31
33
|
rechargeTime: 'Recharge Time',
|
|
32
34
|
submit: 'Submit',
|
|
@@ -41,13 +43,26 @@ export default flat({
|
|
|
41
43
|
quickStarts: 'Quick Starts',
|
|
42
44
|
copy: 'Copy',
|
|
43
45
|
copied: 'Copied',
|
|
44
|
-
copySuccess: '
|
|
45
|
-
copyFailed: 'Copy
|
|
46
|
+
copySuccess: 'Copied successfully',
|
|
47
|
+
copyFailed: 'Copy failed',
|
|
46
48
|
copyTip: 'Please copy manually',
|
|
47
49
|
save: 'Save',
|
|
48
50
|
cancel: 'Cancel',
|
|
49
51
|
know: 'I Know',
|
|
50
52
|
confirm: 'Confirm',
|
|
53
|
+
edit: 'Edit',
|
|
54
|
+
delete: 'Delete',
|
|
55
|
+
deleting: 'Deleting...',
|
|
56
|
+
yes: 'Yes',
|
|
57
|
+
no: 'No',
|
|
58
|
+
never: 'Never',
|
|
59
|
+
created: 'Created',
|
|
60
|
+
updated: 'Updated',
|
|
61
|
+
valid: 'Valid',
|
|
62
|
+
events: 'Events',
|
|
63
|
+
details: 'Details',
|
|
64
|
+
discount: 'Discount',
|
|
65
|
+
deleted: 'Deleted',
|
|
51
66
|
maxAmount: 'Max amount is {max}',
|
|
52
67
|
days: {
|
|
53
68
|
sunday: 'Sunday',
|
|
@@ -254,7 +269,7 @@ export default flat({
|
|
|
254
269
|
'Credit products are used to provide consumable credits to users, supporting both one-time purchase and package pricing models.',
|
|
255
270
|
creditAmount: {
|
|
256
271
|
label: 'Credit Amount',
|
|
257
|
-
placeholder: 'Amount of credits users
|
|
272
|
+
placeholder: 'Amount of credits users receive when purchasing this price',
|
|
258
273
|
help: 'Leave empty for pay-per-unit pricing, enter a number for fixed package deals',
|
|
259
274
|
description: 'Purchase quantity determines the amount of Credits received',
|
|
260
275
|
},
|
|
@@ -367,14 +382,14 @@ export default flat({
|
|
|
367
382
|
archiveTip: 'Archiving will hide this product from new purchases. Are you sure you want to archive this product?',
|
|
368
383
|
unarchive: 'Unarchive product',
|
|
369
384
|
unarchiveTip:
|
|
370
|
-
'Unarchiving will enable this product
|
|
385
|
+
'Unarchiving will enable this product for new purchases. Are you sure you want to unarchive this product?',
|
|
371
386
|
remove: 'Remove product',
|
|
372
387
|
removeTip: 'Removing will hide this product from new purchases. Are you sure you want to remove this product?',
|
|
373
388
|
archived: 'This product has been archived',
|
|
374
389
|
archivedTip:
|
|
375
390
|
"This product can't be added to new invoices, subscriptions, payment links, or pricing tables. Any existing subscriptions with this product remain active until canceled and any existing payment links or pricing tables are deactivated.",
|
|
376
391
|
locked: 'This product is locked because at least one of its prices is used by a subscription or a payment.',
|
|
377
|
-
currencyNotAligned: '
|
|
392
|
+
currencyNotAligned: 'All prices must have the same currency settings',
|
|
378
393
|
image: {
|
|
379
394
|
label: 'Image',
|
|
380
395
|
add: 'Add image',
|
|
@@ -431,7 +446,7 @@ export default flat({
|
|
|
431
446
|
vendorConfig: {
|
|
432
447
|
title: 'Vendor Configuration',
|
|
433
448
|
add: 'Add Vendor',
|
|
434
|
-
empty: 'No vendors configured. Click "Add Vendor" to configure vendor services
|
|
449
|
+
empty: 'No vendors configured. Click "Add Vendor" to configure vendor services',
|
|
435
450
|
vendor: 'Vendor',
|
|
436
451
|
vendorRequired: 'Vendor is required',
|
|
437
452
|
productCode: 'Product Code',
|
|
@@ -508,7 +523,7 @@ export default flat({
|
|
|
508
523
|
packageDesc: 'Price by number of units',
|
|
509
524
|
graduated: 'Graduated Pricing',
|
|
510
525
|
volume: 'Volume pricing',
|
|
511
|
-
custom: 'Customer
|
|
526
|
+
custom: 'Customer chooses price',
|
|
512
527
|
usageBased: 'Usage-based',
|
|
513
528
|
creditMetered: 'Credit metered',
|
|
514
529
|
},
|
|
@@ -520,7 +535,7 @@ export default flat({
|
|
|
520
535
|
selectMeter: 'Select meter',
|
|
521
536
|
pricingNote: 'For metered products, pricing is automatically based on usage tracked by the selected meter.',
|
|
522
537
|
description:
|
|
523
|
-
'Credit metered billing requires
|
|
538
|
+
'Credit metered billing requires corresponding credit consumption. If credits are consumed, the corresponding service will stop.',
|
|
524
539
|
},
|
|
525
540
|
credit: {
|
|
526
541
|
saveAsBasePrice: 'Set as Top-up Package',
|
|
@@ -557,7 +572,7 @@ export default flat({
|
|
|
557
572
|
tip: '',
|
|
558
573
|
},
|
|
559
574
|
quantity: {
|
|
560
|
-
tip: 'Quantity must be equal or greater than 0',
|
|
575
|
+
tip: 'Quantity must be equal to or greater than 0',
|
|
561
576
|
},
|
|
562
577
|
quantityAvailable: {
|
|
563
578
|
label: 'Available quantity',
|
|
@@ -583,6 +598,210 @@ export default flat({
|
|
|
583
598
|
coupon: {
|
|
584
599
|
create: 'Create Coupon',
|
|
585
600
|
view: 'View coupon',
|
|
601
|
+
description: 'Coupons can be used to discount invoices, subscriptions, or entire customer accounts.',
|
|
602
|
+
listTitle: 'Coupon',
|
|
603
|
+
terms: 'Terms',
|
|
604
|
+
tab: 'Coupons',
|
|
605
|
+
redemptions: 'Redemptions',
|
|
606
|
+
expires: 'Expires',
|
|
607
|
+
noDiscount: 'No discount',
|
|
608
|
+
name: 'Name',
|
|
609
|
+
nameHelp: "This will appear on customers' receipts and invoices.",
|
|
610
|
+
desc: 'Description',
|
|
611
|
+
descriptionInternal: 'This description is for internal use only and will not be shown to customers.',
|
|
612
|
+
id: 'ID',
|
|
613
|
+
idOptional: 'ID (Optional)',
|
|
614
|
+
idHelp:
|
|
615
|
+
'This will identify this coupon in the API. We recommend leaving this blank so we can generate an ID for you.',
|
|
616
|
+
type: 'Type',
|
|
617
|
+
percentageOff: 'Percentage off',
|
|
618
|
+
fixedAmountOff: 'Fixed amount off',
|
|
619
|
+
percentageDiscount: 'Percentage discount',
|
|
620
|
+
fixedAmount: 'Discount amount',
|
|
621
|
+
currency: 'Currency',
|
|
622
|
+
applyToProducts: 'Apply to specific products',
|
|
623
|
+
duration: 'Duration',
|
|
624
|
+
once: 'Once',
|
|
625
|
+
forever: 'Forever',
|
|
626
|
+
repeating: 'Repeating',
|
|
627
|
+
durationHelp:
|
|
628
|
+
'For subscriptions and customers, this determines how long this coupon will apply once redeemed. One-time invoices accept both "once" and "forever" coupons.',
|
|
629
|
+
durationInMonths: 'Duration in months',
|
|
630
|
+
redemptionLimits: 'Redemption limits',
|
|
631
|
+
limitDateRange: 'Limit the date range when customers can redeem this coupon',
|
|
632
|
+
limitTotalNumber: 'Limit the total number of times this coupon can be redeemed',
|
|
633
|
+
codes: 'Codes',
|
|
634
|
+
useCustomerFacingCodes: 'Use customer-facing coupon codes',
|
|
635
|
+
promotionCodes: 'Promotion Codes',
|
|
636
|
+
promotionCodesHelp: 'Promotion codes will be created after the coupon is saved.',
|
|
637
|
+
addPromotionCode: 'Add promotion code',
|
|
638
|
+
eligibleFirstTime: 'Eligible for first-time order only(each user can only enjoy one coupon discount)',
|
|
639
|
+
limitNumberRedemptions: 'Limit the number of times this code can be redeemed',
|
|
640
|
+
addExpirationDate: 'Add an expiration date',
|
|
641
|
+
requireMinimumOrder: 'Require minimum order value',
|
|
642
|
+
addAnotherCode: 'Add another code',
|
|
643
|
+
saved: 'Coupon saved successfully',
|
|
644
|
+
// Promotion Code Form
|
|
645
|
+
codeOptional: 'Code (Optional)',
|
|
646
|
+
codeHelp: 'Leave blank to auto-generate upon creation',
|
|
647
|
+
generate: 'Generate',
|
|
648
|
+
verificationType: 'Verification Type',
|
|
649
|
+
codeOnly: 'Code Only',
|
|
650
|
+
nftVerification: 'NFT Verification',
|
|
651
|
+
vcVerification: 'Passport Verification',
|
|
652
|
+
userWhitelist: 'Specific Users',
|
|
653
|
+
nftSettings: 'NFT Verification Settings',
|
|
654
|
+
vcSettings: 'Passport Verification Settings',
|
|
655
|
+
userWhitelistSettings: 'Specific Users Settings',
|
|
656
|
+
nftAddresses: 'NFT Addresses',
|
|
657
|
+
nftAddressesPlaceholder: 'Enter NFT contract addresses',
|
|
658
|
+
nftTags: 'NFT Tags',
|
|
659
|
+
nftTagsPlaceholder: 'Enter NFT tags',
|
|
660
|
+
trustedIssuers: 'Trusted Issuers',
|
|
661
|
+
trustedIssuersPlaceholder: 'Enter trusted issuers',
|
|
662
|
+
trustedParents: 'Trusted Parents',
|
|
663
|
+
trustedParentsPlaceholder: 'Enter trusted parents',
|
|
664
|
+
minBalance: 'NFT Required Quantity',
|
|
665
|
+
requiredRoles: 'Required Roles',
|
|
666
|
+
requiredRolesPlaceholder: 'Enter required roles',
|
|
667
|
+
trustedVcIssuers: 'Trusted VC Issuers',
|
|
668
|
+
trustedVcIssuersPlaceholder: 'Enter trusted VC issuer DIDs',
|
|
669
|
+
customerDids: 'Customer DIDs',
|
|
670
|
+
customerDidsPlaceholder: 'Enter customer DIDs',
|
|
671
|
+
customerDidsHelp: 'You can select existing customers or enter DID manually',
|
|
672
|
+
maxRedemptions: 'Max Redemptions',
|
|
673
|
+
expiresAt: 'Expires At',
|
|
674
|
+
pressEnterToAdd: 'Press Enter to add',
|
|
675
|
+
// Updated section names
|
|
676
|
+
couponConfiguration: 'Coupon Configuration',
|
|
677
|
+
selectProducts: 'Select Products',
|
|
678
|
+
noProductsSelected: 'No products selected',
|
|
679
|
+
newCode: 'New Code',
|
|
680
|
+
createPromotionCode: 'Create Promotion Code',
|
|
681
|
+
promotionCodeDescription: 'Create a promotion code for this coupon to allow customers to redeem the discount.',
|
|
682
|
+
minimumAmount: 'Minimum Amount',
|
|
683
|
+
minimumAmountHelp: 'Set minimum order amounts for different currencies',
|
|
684
|
+
discountAmount: 'Discount Amount',
|
|
685
|
+
currencies: 'Currencies',
|
|
686
|
+
times: 'times',
|
|
687
|
+
months: 'months',
|
|
688
|
+
addProduct: 'Add another product',
|
|
689
|
+
unlimited: 'Unlimited',
|
|
690
|
+
inactive: 'Coupon is inactive',
|
|
691
|
+
inactiveTip: 'This coupon is currently inactive and cannot be used.',
|
|
692
|
+
discount: 'Discount',
|
|
693
|
+
updated: 'Updated',
|
|
694
|
+
timesRedeemed: 'Times Redeemed',
|
|
695
|
+
deletedSuccessfully: 'Coupon deleted successfully',
|
|
696
|
+
deleteConfirmTitle: 'Delete Coupon',
|
|
697
|
+
deleteConfirmMessage: 'Are you sure you want to delete this coupon? This action cannot be undone.',
|
|
698
|
+
cannotDeleteWithPromotionCodes: 'Cannot delete coupon with existing promotion codes',
|
|
699
|
+
couponTermsPercentage: '{percent}% off',
|
|
700
|
+
couponTermsFixedAmount: '{amount} {symbol} off',
|
|
701
|
+
couponTerms: {
|
|
702
|
+
forever: '{couponOff} forever',
|
|
703
|
+
once: '{couponOff} once',
|
|
704
|
+
repeating: '{couponOff} for {months} months',
|
|
705
|
+
},
|
|
706
|
+
couponTermsDuration: {
|
|
707
|
+
forever: 'Forever',
|
|
708
|
+
once: 'Once',
|
|
709
|
+
repeating: 'For {months} months',
|
|
710
|
+
},
|
|
711
|
+
applicableProducts: 'Applicable Products',
|
|
712
|
+
noApplicableProducts: 'This coupon applies to all products',
|
|
713
|
+
activeRedemptions: 'Active redemptions',
|
|
714
|
+
customers: 'Customers',
|
|
715
|
+
subscriptions: 'Subscriptions',
|
|
716
|
+
noCustomersFound: 'No customers found',
|
|
717
|
+
noCustomersRedeem: 'No customers currently redeem this coupon',
|
|
718
|
+
noSubscriptionsFound: 'No subscriptions found',
|
|
719
|
+
noSubscriptionsRedeem: 'No subscriptions currently redeem this coupon',
|
|
720
|
+
rename: 'Rename',
|
|
721
|
+
renameCoupon: 'Rename coupon',
|
|
722
|
+
updateCouponDetails: 'Update coupon details',
|
|
723
|
+
nameWillAppear: "This will appear on customers' receipts and invoices.",
|
|
724
|
+
updateCouponButton: 'Update coupon',
|
|
725
|
+
discountStart: 'Discount Start',
|
|
726
|
+
// Additional fields for active-redemptions
|
|
727
|
+
usageStats: 'Usage Statistics',
|
|
728
|
+
totalDiscounts: 'Total Discounts',
|
|
729
|
+
uniqueSessions: 'Unique Sessions',
|
|
730
|
+
uniqueSubscriptions: 'Unique Subscriptions',
|
|
731
|
+
promotionCodesUsed: 'Promotion Codes Used',
|
|
732
|
+
noExpiration: 'No Expiration',
|
|
733
|
+
usagePeriod: 'Usage Period',
|
|
734
|
+
firstUsed: 'First Used',
|
|
735
|
+
lastUsed: 'Last Used',
|
|
736
|
+
promotionCodeInfo: 'Promotion Code Info',
|
|
737
|
+
directCouponUsage: 'Direct Coupon Usage',
|
|
738
|
+
usageLimit: 'Usage Limit',
|
|
739
|
+
discountInfo: 'Discount Info',
|
|
740
|
+
discountPeriod: 'Discount Period',
|
|
741
|
+
couponExpires: 'Coupon Expires',
|
|
742
|
+
totalSavings: 'Total Discounts',
|
|
743
|
+
viewPromotionCode: 'View Promotion Code',
|
|
744
|
+
},
|
|
745
|
+
discount: {
|
|
746
|
+
totalSaved: 'Total Saved',
|
|
747
|
+
timesUsed: 'Times Used',
|
|
748
|
+
appliedDiscounts: 'Applied Discounts',
|
|
749
|
+
},
|
|
750
|
+
promotionCode: {
|
|
751
|
+
code: 'Code',
|
|
752
|
+
status: 'Status',
|
|
753
|
+
redemptions: 'Redemptions',
|
|
754
|
+
expires: 'Expires',
|
|
755
|
+
created: 'Created',
|
|
756
|
+
actions: 'Actions',
|
|
757
|
+
active: 'Active',
|
|
758
|
+
inactive: 'Inactive',
|
|
759
|
+
expired: 'Expired',
|
|
760
|
+
maxedOut: 'Maxed Out',
|
|
761
|
+
viewDetails: 'View Details',
|
|
762
|
+
edit: 'Edit Promotion Code',
|
|
763
|
+
delete: 'Delete Promotion Code',
|
|
764
|
+
archive: 'Archive Promotion Code',
|
|
765
|
+
archiveTip:
|
|
766
|
+
'Archiving will prevent this promotion code from being used. Are you sure you want to archive this promotion code?',
|
|
767
|
+
deleteTip:
|
|
768
|
+
'Deleting will permanently delete this promotion code. Are you sure you want to delete this promotion code?',
|
|
769
|
+
title: 'Promotion Code',
|
|
770
|
+
id: 'ID',
|
|
771
|
+
type: 'Type',
|
|
772
|
+
couponId: 'Coupon ID',
|
|
773
|
+
maxRedemptions: 'Max Redemptions',
|
|
774
|
+
timesRedeemed: 'Times Redeemed',
|
|
775
|
+
verificationType: 'Verification Type',
|
|
776
|
+
updated: 'Updated',
|
|
777
|
+
activate: 'Activate',
|
|
778
|
+
deactivate: 'Deactivate',
|
|
779
|
+
inactiveTitle: 'Promotion code is inactive',
|
|
780
|
+
inactiveTip: 'This promotion code is currently inactive and cannot be used.',
|
|
781
|
+
deleteSuccess: 'Promotion code deleted successfully',
|
|
782
|
+
activateSuccess: 'Promotion code activated successfully',
|
|
783
|
+
deactivateSuccess: 'Promotion code deactivated successfully',
|
|
784
|
+
verificationConfig: 'Verification Configuration',
|
|
785
|
+
nftAddresses: 'NFT Addresses',
|
|
786
|
+
nftTags: 'NFT Tags',
|
|
787
|
+
minBalance: 'Min Balance',
|
|
788
|
+
requiredRoles: 'Required Roles',
|
|
789
|
+
trustedIssuers: 'Trusted Issuers',
|
|
790
|
+
allowedUsers: 'Allowed Users',
|
|
791
|
+
noNftConfig: 'No NFT configuration',
|
|
792
|
+
noVcConfig: 'No VC configuration',
|
|
793
|
+
noUsersSpecified: 'No users specified',
|
|
794
|
+
codeVerificationOnly: 'Code verification only',
|
|
795
|
+
unlimited: 'Unlimited',
|
|
796
|
+
never: 'Never',
|
|
797
|
+
yes: 'Yes',
|
|
798
|
+
no: 'No',
|
|
799
|
+
verificationTypeMap: {
|
|
800
|
+
code: 'Code Only',
|
|
801
|
+
nft: 'NFT Verification',
|
|
802
|
+
vc: 'Passport Verification',
|
|
803
|
+
user_restricted: 'User Whitelist',
|
|
804
|
+
},
|
|
586
805
|
},
|
|
587
806
|
paymentLink: {
|
|
588
807
|
view: 'View payment link',
|
|
@@ -597,10 +816,16 @@ export default flat({
|
|
|
597
816
|
afterPay: 'After payment',
|
|
598
817
|
products: 'Products',
|
|
599
818
|
addProduct: 'Add another product',
|
|
600
|
-
requireBillingAddress: 'Collect
|
|
601
|
-
requirePhoneNumber: 'Collect
|
|
819
|
+
requireBillingAddress: 'Collect customer billing addresses',
|
|
820
|
+
requirePhoneNumber: 'Collect customer phone numbers',
|
|
602
821
|
allowPromotionCodes: 'Allow promotion codes',
|
|
603
|
-
|
|
822
|
+
enablePromotionCodes: 'Enable promotion codes',
|
|
823
|
+
disablePromotionCodes: 'Disable promotion codes',
|
|
824
|
+
enablePromotionCodesTip:
|
|
825
|
+
'Enable promotion codes for this payment link. Customers will be able to apply discount codes during checkout.',
|
|
826
|
+
disablePromotionCodesTip:
|
|
827
|
+
'Disable promotion codes for this payment link. Customers will not be able to apply discount codes during checkout.',
|
|
828
|
+
requireCrossSell: 'Require cross-sell products to be selected if eligible',
|
|
604
829
|
includeFreeTrial: 'Include a free trial',
|
|
605
830
|
noStakeRequired: 'No stake required',
|
|
606
831
|
showProductFeatures: 'Show product features',
|
|
@@ -684,7 +909,7 @@ export default flat({
|
|
|
684
909
|
expiredUncapturedCharge: 'Expired uncaptured charge',
|
|
685
910
|
amountRange: 'Refund amount must be between {min} and {max} {symbol}',
|
|
686
911
|
amountHelper: 'Refund amount must be less than or equal to {max} {symbol}',
|
|
687
|
-
required: '
|
|
912
|
+
required: 'Please fill in the refund information',
|
|
688
913
|
empty: 'The current order has been fully refunded',
|
|
689
914
|
},
|
|
690
915
|
},
|
|
@@ -718,11 +943,11 @@ export default flat({
|
|
|
718
943
|
},
|
|
719
944
|
name: {
|
|
720
945
|
label: 'Name',
|
|
721
|
-
tip: '
|
|
946
|
+
tip: 'Customer-facing',
|
|
722
947
|
},
|
|
723
948
|
description: {
|
|
724
949
|
label: 'Description',
|
|
725
|
-
tip: 'Not
|
|
950
|
+
tip: 'Not customer-facing',
|
|
726
951
|
},
|
|
727
952
|
stripe: {
|
|
728
953
|
dashboard: {
|
|
@@ -749,11 +974,11 @@ export default flat({
|
|
|
749
974
|
},
|
|
750
975
|
api_host: {
|
|
751
976
|
label: 'API Host',
|
|
752
|
-
tip: 'The
|
|
977
|
+
tip: 'The GraphQL endpoint to send transactions to',
|
|
753
978
|
},
|
|
754
979
|
explorer_host: {
|
|
755
980
|
label: 'Explorer Host',
|
|
756
|
-
tip: 'The
|
|
981
|
+
tip: 'The web app endpoint to view transaction details',
|
|
757
982
|
},
|
|
758
983
|
},
|
|
759
984
|
ethereum: {
|
|
@@ -763,11 +988,11 @@ export default flat({
|
|
|
763
988
|
},
|
|
764
989
|
api_host: {
|
|
765
990
|
label: 'RPC Endpoint',
|
|
766
|
-
tip: 'The RPC endpoint to send
|
|
991
|
+
tip: 'The RPC endpoint to send transactions to',
|
|
767
992
|
},
|
|
768
993
|
explorer_host: {
|
|
769
994
|
label: 'Explorer Host',
|
|
770
|
-
tip: 'The
|
|
995
|
+
tip: 'The web app endpoint to view transaction details',
|
|
771
996
|
},
|
|
772
997
|
native_symbol: {
|
|
773
998
|
label: 'Native Symbol',
|
|
@@ -775,7 +1000,7 @@ export default flat({
|
|
|
775
1000
|
},
|
|
776
1001
|
confirmation: {
|
|
777
1002
|
label: 'Confirmation Count',
|
|
778
|
-
tip: '
|
|
1003
|
+
tip: 'Number of blocks required since transaction execution',
|
|
779
1004
|
},
|
|
780
1005
|
},
|
|
781
1006
|
evm: {
|
|
@@ -792,11 +1017,11 @@ export default flat({
|
|
|
792
1017
|
},
|
|
793
1018
|
api_host: {
|
|
794
1019
|
label: 'RPC Endpoint',
|
|
795
|
-
tip: 'The RPC endpoint to send
|
|
1020
|
+
tip: 'The RPC endpoint to send transactions to',
|
|
796
1021
|
},
|
|
797
1022
|
explorer_host: {
|
|
798
1023
|
label: 'Explorer Host',
|
|
799
|
-
tip: 'The
|
|
1024
|
+
tip: 'The web app endpoint to view transaction details',
|
|
800
1025
|
},
|
|
801
1026
|
native_symbol: {
|
|
802
1027
|
label: 'Native Symbol',
|
|
@@ -804,7 +1029,7 @@ export default flat({
|
|
|
804
1029
|
},
|
|
805
1030
|
confirmation: {
|
|
806
1031
|
label: 'Confirmation Count',
|
|
807
|
-
tip: '
|
|
1032
|
+
tip: 'Number of blocks required since transaction execution',
|
|
808
1033
|
},
|
|
809
1034
|
},
|
|
810
1035
|
},
|
|
@@ -953,6 +1178,7 @@ export default flat({
|
|
|
953
1178
|
ended: 'Ended {prefix} {date}',
|
|
954
1179
|
renew: 'Renew {prefix} {date}',
|
|
955
1180
|
discount: 'Discount',
|
|
1181
|
+
activeDiscount: 'Active Discount',
|
|
956
1182
|
startedAt: 'Started',
|
|
957
1183
|
nextInvoice: 'Next Invoice',
|
|
958
1184
|
nextInvoiceAmount: 'Next Invoice Amount',
|
|
@@ -1408,6 +1634,7 @@ export default flat({
|
|
|
1408
1634
|
relatedInvoice: 'Related Invoice',
|
|
1409
1635
|
donation: 'Donation',
|
|
1410
1636
|
creditsInfo: 'Total {amount} {currency} included',
|
|
1637
|
+
appliedDiscounts: 'Applied Discounts',
|
|
1411
1638
|
},
|
|
1412
1639
|
payout: {
|
|
1413
1640
|
empty: 'No Revenues',
|