@nuskin/contentstack-lib 1.0.0-pur-1208.2

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/.eslintrc.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "env": {
3
+ "browser": true,
4
+ "commonjs": true,
5
+ "node": true,
6
+ "jest": true,
7
+ "es6": true
8
+ },
9
+ "globals": {
10
+ "Atomics": "readonly",
11
+ "SharedArrayBuffer": "readonly"
12
+ },
13
+ "parserOptions": {
14
+ "ecmaVersion": 2018,
15
+ "sourceType": "module"
16
+ },
17
+ "extends": [
18
+ "eslint:recommended",
19
+ "plugin:json/recommended"
20
+ ],
21
+ "rules": {
22
+ "indent": ["error", 2, {"SwitchCase": 1}],
23
+ "space-in-parens": ["warn", "never"],
24
+ "max-len": ["warn", 120],
25
+ "no-var": "warn",
26
+ "no-console": "off",
27
+ "no-invalid-this": "warn",
28
+ "comma-dangle": ["error", "never"]
29
+ }
30
+ }
package/.gitlab-ci.yml ADDED
@@ -0,0 +1,10 @@
1
+ include:
2
+ # include common pipeline
3
+ - project: 'ns-am/platform/ns-gitlab-ci'
4
+ ref: master
5
+ file: 'npm-module-ci.yml'
6
+
7
+ variables:
8
+ APP_NAME: $CI_PROJECT_NAME
9
+ PRIVATE_NPM: "false"
10
+ CONTENT_TYPE_UID: sdk
package/.releaserc ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "branches": [
3
+ "master", {"name":"PUR-1208", "channel":"prerelease", "prerelease":"pur-1208"}
4
+ ],
5
+ "plugins": [
6
+ "@semantic-release/release-notes-generator",
7
+ "@semantic-release/npm",
8
+ [
9
+ "@semantic-release/gitlab",
10
+ {
11
+ "gitlabUrl": "https://code.tls.nuskin.io"
12
+ }
13
+ ],
14
+ [
15
+ "@semantic-release/commit-analyzer",
16
+ {
17
+ "preset": "eslint"
18
+ }
19
+ ],
20
+ [
21
+ "@semantic-release/changelog",
22
+ {
23
+ "changelogFile": "docs/CHANGELOG.md"
24
+ }
25
+ ]
26
+ ]
27
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "type": "node",
9
+ "request": "launch",
10
+ "name": "Run All Tests",
11
+ "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
12
+ "args": [
13
+ "--verbose",
14
+ "-i",
15
+ "--no-cache"
16
+ ],
17
+ "console": "integratedTerminal",
18
+ "internalConsoleOptions": "neverOpen"
19
+ },
20
+ {
21
+ "type": "node",
22
+ "request": "launch",
23
+ "name": "Watch Tests",
24
+ "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
25
+ "args": [
26
+ "--verbose",
27
+ "-i",
28
+ "--no-cache",
29
+ "--watch"
30
+ ],
31
+ "console": "integratedTerminal",
32
+ "internalConsoleOptions": "neverOpen"
33
+ },
34
+ {
35
+ "type": "node",
36
+ "request": "launch",
37
+ "name": "Watch All Tests",
38
+ "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
39
+ "args": [
40
+ "--verbose",
41
+ "-i",
42
+ "--no-cache",
43
+ "--watchAll"
44
+ ],
45
+ "console": "integratedTerminal",
46
+ "internalConsoleOptions": "neverOpen"
47
+ }
48
+ ]
49
+ }
50
+
package/CHANGELOG.md ADDED
File without changes
package/README.md ADDED
@@ -0,0 +1,77 @@
1
+ # @nuskin/ns-contentstack-lib
2
+
3
+ This project extends the Contentstack delivery sdk, to be shared between the backend (AWS Lambda) and frontend.
4
+ 1. It simplifies initializing the Stack object.
5
+ 2. It extends the stack with a new function getSingletonEntries most commonly used to get translations
6
+ 3. CONTENTSTACK DOES NOT MERGE COMMON ENGLISH WITH US-en STRINGS. FALLBACK IN CONTENTSTACK DOES NOT WORK AS EXPECTED.
7
+ getSingletonEntries TAKES AN OPTION CALLED mergeWithFallback. IF THAT IS SET TO TRUE THEN IT WILL MERGE THE RESULTS
8
+ FOR COMMON SPANISH AND MX-es FOR EXAMPLE.
9
+ 4. getSingletonEntries also allows you to convert the keys from snake case to camel case.
10
+
11
+ ## Installing
12
+
13
+ Update the .npmrc in your project to use the nexus registry @ns:registry=https://nexus3.nuskin.net/repository/npm-internal/
14
+
15
+ Usng npm:
16
+
17
+ ```bash
18
+ npm install @ns/ns-contentstack-lib
19
+ ```
20
+
21
+ Usng yarn:
22
+
23
+ ```bash
24
+ yarn add @ns/ns-contentstack-lib
25
+ ```
26
+
27
+ ## Example usage
28
+
29
+ ```js
30
+ const { getStack } = require('@ns/ns-contentstack-lib')
31
+
32
+ // Pass the environment to getStack (dev, test, stage, prod)
33
+ const Stack = getStack('dev')
34
+
35
+ // get all languages
36
+ const languages = await Stack.ContentType('supported_language').Query().toJSON().find();
37
+
38
+ // get all markets
39
+ const markets = await Stack.ContentType('market').Query().toJSON().find();
40
+
41
+ // Use the extended getStrings function to get translations
42
+ // ==================== Deprecated - Dont use this function ==========================
43
+ const translations = Stack.getStrings({
44
+ contentTypes: ['checkout_adr_strings', 'checkout_cart_strings'], // List of content types you want to get translations for
45
+ language: 'en',
46
+ country: 'US',
47
+ merge: true // Will combine checkout_adr_strings and checkout_cart_strings object with single list of strings
48
+ });
49
+
50
+ // Use this function instead to get your translations
51
+ // The entries are returned in the order they were requested so you can destructure the array accordingly
52
+ // To get the result in camelcase instead of snake case you can pass in the option.camelcase: true
53
+ // Contentstack does not merge common english strings with en_US strings. This function allows you to merge the two with mergeWithFallback: true
54
+ const [
55
+ checkoutAdrStrings,
56
+ checkoutCartStrings
57
+ ] = await Stack.getSingletonEntries({
58
+ contentTypeUIDs: [
59
+ 'checkout_adr_strings',
60
+ 'checkout_cart_strings'
61
+ ],
62
+ country: 'US',
63
+ language: 'en',
64
+ camelcase: true,
65
+ mergeWithFallback: true
66
+ });
67
+
68
+ // We could possibly add functionality to return the list of regions markets and languages in a single object structure
69
+ ```
70
+
71
+ ## Resources
72
+
73
+ - https://code.tls.nuskin.io/ns-am/utility/npm/ns-contentstack-lib
74
+
75
+ ## License
76
+
77
+ [MIT](https://opensource.org/licenses/MIT)
@@ -0,0 +1,155 @@
1
+ /* eslint-disable max-len */
2
+
3
+ require('contentstack');
4
+ const checkoutAdrStrings = require('./resources/checkoutAdrStrings.json');
5
+ const checkoutCartStrings = require('./resources/checkoutCartStrings.json');
6
+ const singleCheckoutAdrStrings = require('./resources/singleCheckoutAdrStrings.json');
7
+ const singleCheckoutAdrStringsCommon = require('./resources/singleCheckoutAdrStringsCommon.json');
8
+ const singleCheckoutCartStrings = require('./resources/singleCheckoutCartStrings.json');
9
+ const singleCheckoutAdrCamelResult = require('./resources/singleCheckoutAdrStringsCamel.json');
10
+ const singleCheckoutCartCamelResult = require('./resources/singleCheckoutCartStringsCamel.json');
11
+ const mockPromiseResult = jest.fn();
12
+ const mockSinglePromiseResult = jest.fn();
13
+ const mockStack = jest.fn();
14
+
15
+ const apiKey = 'testkey';
16
+ const deliveryToken = 'testDeliveryToken';
17
+
18
+ beforeEach(() => {
19
+ mockStack.mockImplementation(() => ({
20
+ ContentType: () => ({
21
+ Query: () => ({
22
+ language: () => ({
23
+ includeFallback: () => ({
24
+ toJSON: () => ({
25
+ find: mockPromiseResult,
26
+ findOne: mockSinglePromiseResult
27
+ })
28
+ })
29
+ })
30
+ })
31
+ })
32
+ }));
33
+
34
+ jest.mock("contentstack", () => ({Stack: mockStack}));
35
+ });
36
+
37
+ afterEach(() => {
38
+ mockSinglePromiseResult.mockReset();
39
+ mockPromiseResult.mockReset();
40
+ //jest.resetAllMocks(); don't reset the mockStack function
41
+ });
42
+
43
+ const mockResults = () => {
44
+ mockPromiseResult.mockResolvedValue(checkoutCartStrings);
45
+ mockPromiseResult.mockResolvedValueOnce(checkoutAdrStrings);
46
+ mockSinglePromiseResult.mockResolvedValueOnce(singleCheckoutAdrStrings);
47
+ mockSinglePromiseResult.mockResolvedValueOnce(singleCheckoutCartStrings);
48
+ }
49
+
50
+ describe("ContentstackApi", () => {
51
+ // test("retries with just the language if can't get strings for country", async () => {
52
+ // mockPromiseResult.mockClear();
53
+ // mockPromiseResult.mockRejectedValueOnce(new Error("Failed"));
54
+ // mockResults();
55
+ // const {getStack} = require('../src/api');
56
+ // const Stack = getStack('dev');
57
+ // await Stack.getStrings({contentTypes: ['checkout_adr_strings', 'checkout_cart_strings'], language: 'en', country: 'US', merge: true});
58
+ // expect(mockPromiseResult).toHaveBeenCalledTimes(4);
59
+ // });
60
+
61
+ // test("getStrings for multiple contentTypes", async () => {
62
+ // mockResults();
63
+ // const {getStack} = require('../src/api');
64
+ // const Stack = getStack('dev');
65
+ // const strings = await Stack.getStrings({contentTypes: ['checkout_adr_strings', 'checkout_cart_strings'], language: 'en', merge: false});
66
+ // expect(strings).toStrictEqual(stringsResult);
67
+ // });
68
+
69
+ // test("getStrings merged", async () => {
70
+ // mockResults();
71
+ // const {getStack} = require('../src/api');
72
+ // const Stack = getStack('dev');
73
+ // const strings = await Stack.getStrings({contentTypes: ['checkout_adr_strings', 'checkout_cart_strings'], language: 'en', merge: true});
74
+ // expect(strings).toStrictEqual(mergedResult);
75
+ // });
76
+
77
+ // test("getStrings throws error", async () => {
78
+ // mockResults();
79
+ // const {getStack} = require('../src/api');
80
+ // const Stack = getStack('dev');
81
+ // try {
82
+ // await Stack.getStrings({});
83
+ // } catch(err) {
84
+ // expect(err).toStrictEqual(new Error('Call to getStrings: options.contentTypes and language are required'));
85
+ // }
86
+ // })
87
+
88
+ test("getSingletonEntries", async () => {
89
+ mockResults();
90
+ const {getStack} = require('../src/api');
91
+ const Stack = getStack('dev');
92
+ const [checkoutAdrStrings, checkoutCartStrings] = await Stack.getSingletonEntries({contentTypeUIDs: ['checkout_adr_strings', 'checkout_cart_strings'], language: 'en'});
93
+ expect(checkoutAdrStrings).toStrictEqual(singleCheckoutAdrStrings);
94
+ expect(checkoutCartStrings).toStrictEqual(singleCheckoutCartStrings);
95
+ });
96
+
97
+ test("getSingletonEntries in camelcase", async () => {
98
+ mockResults();
99
+ const {getStack, init} = require('../src/api');
100
+ init({env: 'dev'})
101
+ const Stack = getStack();
102
+ const [checkoutAdrStrings, checkoutCartStrings] = await Stack.getSingletonEntries({contentTypeUIDs: ['checkout_adr_strings', 'checkout_cart_strings'], language: 'en', camelcase: true});
103
+ expect(checkoutAdrStrings).toStrictEqual(singleCheckoutAdrCamelResult);
104
+ expect(checkoutCartStrings).toStrictEqual(singleCheckoutCartCamelResult);
105
+ });
106
+
107
+ test("getSingletonEntries merges the fallback", async () => {
108
+ // The first api call made is for en
109
+ mockSinglePromiseResult.mockResolvedValueOnce(singleCheckoutAdrStringsCommon);
110
+ // The second api call is for en_US
111
+ mockSinglePromiseResult.mockResolvedValueOnce(singleCheckoutAdrStrings);
112
+ const {getStack, init} = require('../src/api');
113
+ init({})
114
+ const Stack = getStack();
115
+ const [checkoutAdrStrings] = await Stack.getSingletonEntries({contentTypeUIDs: ['checkout_adr_strings'], language: 'en', country: 'US', mergeWithFallback: true});
116
+ expect(checkoutAdrStrings.overridden_value).toEqual("This value overrides the common value");
117
+ expect(checkoutAdrStrings.new_value).toEqual("This value only exists in en_US");
118
+ expect(checkoutAdrStrings.only_in_common).toEqual("This string is in en but not en_US");
119
+ });
120
+
121
+ test("getSingletonEntries throws error", async () => {
122
+ mockResults();
123
+ const {getStack, init} = require('../src/api');
124
+ init({deliveryToken, apiKey});
125
+ const Stack = getStack();
126
+ try {
127
+ await Stack.getSingletonEntries({});
128
+ } catch(err) {
129
+ expect(err).toStrictEqual(new Error('Call to getSingletonEntries: options.contentTypeUIDs and language are required'));
130
+ }
131
+ });
132
+
133
+ test("getStack initialized using sdk", () => {
134
+ mockResults();
135
+ const {getStack, init} = require('../src/api');
136
+ init({apiKey, deliveryToken, env: 'test'});
137
+ getStack();
138
+ expect(mockStack).toHaveBeenCalledWith({api_key: apiKey, delivery_token: deliveryToken, environment: 'test'});
139
+ });
140
+
141
+ test('getStack without environment', () => {
142
+ mockResults();
143
+ const hostnames = ['dev.nuskin.com', 'test.nuskin.com', 'stage.nuskin.com', 'www.nuskin.com'];
144
+ const env = ['dev', 'test', 'stage', 'prod'];
145
+ hostnames.forEach((hostname, index) => {
146
+ delete global.window.location;
147
+ global.window = Object.create(window);
148
+ global.window.location = { hostname };
149
+ const {getStack, init} = require('../src/api');
150
+ init({apiKey, deliveryToken})
151
+ getStack();
152
+ expect(mockStack).toHaveBeenCalledWith({api_key: apiKey, delivery_token: deliveryToken, environment: env[index]});
153
+ })
154
+ })
155
+ });
@@ -0,0 +1,57 @@
1
+ [
2
+ [
3
+ {
4
+ "_version": 2,
5
+ "locale": "en",
6
+ "uid": "blt92180d683ff1356a",
7
+ "ACL": {},
8
+ "_in_progress": false,
9
+ "additions": "Additions",
10
+ "adr_first_message": "<p>ADR Subscription&nbsp;will be processed first then the Order will be processed</p>\n",
11
+ "adr_options": "ADR Subscription Options",
12
+ "adr_update_failed_error_message": "ADR Subscription failed to update.",
13
+ "agree_to_adr_update_changes": "I agree to update ADR Subscription",
14
+ "contract_length_select_label": "Please select the length of your contract term:",
15
+ "created_at": "2023-01-13T19:40:58.406Z",
16
+ "created_by": "blt26d1e7648f0a8efb",
17
+ "current_cartridge_selection": "Selected Cartridge",
18
+ "default_ship_info_message": "This option can not be selected due to the products in your cart.",
19
+ "default_ship_label": "Default Ship",
20
+ "first_order_text": "Your first order will be processed on {shipMonth} {shipDay}.",
21
+ "manage_your_adr_text": "If any changes need to be made to a future ARO, please manage your ARO. ",
22
+ "order_first_message": "<p>Order will be processed first then the ADR Subscription&nbsp;will be processed</p>\n",
23
+ "process_my_adr_text": "<p>Process my ADR Subscription&nbsp;on the following date each month:</p>\n",
24
+ "recurring_order_text_future": "Your ADR Subscription order will process on the {recurDay} of every month.",
25
+ "recurring_order_text_immediate": "Your ADR Subscription order will process on the {recurDay} of every month.",
26
+ "replacement": "Replacement",
27
+ "select_adr_option_text": "Please select when your ADR Subscription order will be processed:",
28
+ "select_contract_length_text": " {months} months",
29
+ "ship_always_label": "Ship Always ",
30
+ "ship_future_label": "Ship Future",
31
+ "ship_immediate_label": "Ship Immediate",
32
+ "small_ship_text_fields": {
33
+ "ship_now_text_small": "Ship ADR Subscription Today",
34
+ "ship_future_text_small": "Ship ADR Subscription Future",
35
+ "first_ship_text_small": "First ship date: {shipMonth} {shipDay}",
36
+ "recurring_ship_day_text_small": "Monthly ship day: {day}",
37
+ "contract_length_text_small": "Contract length: {contractLength}"
38
+ },
39
+ "submit_button_text": "Submit",
40
+ "tags": [],
41
+ "termsncondition": {
42
+ "adr_tnc_text": "<p>Before you may continue with your application, you must agree to the ARO Terms and Conditions. You may print out the Terms and Conditions for future reference by <a onclick=\"window.open('https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html', '_blank', 'location=no')\" class=\"link1\">clicking here. </a></p>\n",
43
+ "adr_tnc_checkbox_text": "I agree to the ADR Subscription Terms and Conditions.",
44
+ "adr_tnc_url": "https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html"
45
+ },
46
+ "title": "Checkout: ADR Strings",
47
+ "updated_at": "2023-01-13T19:41:50.644Z",
48
+ "updated_by": "blt26d1e7648f0a8efb",
49
+ "publish_details": {
50
+ "environment": "blt5e5b15d13800a1d2",
51
+ "locale": "en",
52
+ "time": "2023-02-06T15:57:25.202Z",
53
+ "user": "blt59d6f8b06f78ed2e"
54
+ }
55
+ }
56
+ ]
57
+ ]
@@ -0,0 +1,40 @@
1
+ [
2
+ [
3
+ {
4
+ "_version": 2,
5
+ "locale": "en",
6
+ "uid": "blt6809d71c62ef9fd1",
7
+ "ACL": {},
8
+ "_in_progress": false,
9
+ "back_to_cart_text": "Back to Cart",
10
+ "created_at": "2023-01-13T19:43:16.105Z",
11
+ "created_by": "blt26d1e7648f0a8efb",
12
+ "delete_item_text": "delete item",
13
+ "items_text": "Items",
14
+ "order_details": "Order Details",
15
+ "order_point_total": "Total points",
16
+ "point_price": "Points",
17
+ "point_total_price": "Total points",
18
+ "points": "Points",
19
+ "price_label": "Price:",
20
+ "purchase_qty_with_points": "Purchase {qty} items with points",
21
+ "purchase_with_points": "Purchase this item with points",
22
+ "purchase_with_qty_points": "Purchase with {qty} points",
23
+ "quantity_label": "QTY:",
24
+ "redeem_points_header": "Redeem Points",
25
+ "tags": [],
26
+ "title": "Checkout: Cart Strings",
27
+ "total_label": "Total:",
28
+ "updated_at": "2023-01-13T19:43:48.973Z",
29
+ "updated_by": "blt26d1e7648f0a8efb",
30
+ "user_points_exceeded_error": "Oops! It looks like you're trying to spend more points than you have available. ",
31
+ "zero_psv_error": "Oops! This order cannot have a total PSV of zero. ",
32
+ "publish_details": {
33
+ "environment": "blt5e5b15d13800a1d2",
34
+ "locale": "en",
35
+ "time": "2023-02-06T16:47:44.301Z",
36
+ "user": "blt59d6f8b06f78ed2e"
37
+ }
38
+ }
39
+ ]
40
+ ]
@@ -0,0 +1,60 @@
1
+ {
2
+ "locale": "en",
3
+ "uid": "blt6809d71c62ef9fd1",
4
+ "additions": "Additions",
5
+ "adrFirstMessage": "<p>ADR Subscription&nbsp;will be processed first then the Order will be processed</p>\n",
6
+ "adrOptions": "ADR Subscription Options",
7
+ "adrUpdateFailedErrorMessage": "ADR Subscription failed to update.",
8
+ "agreeToAdrUpdateChanges": "I agree to update ADR Subscription",
9
+ "contractLengthSelectLabel": "Please select the length of your contract term:",
10
+ "createdAt": "2023-01-13T19:43:16.105Z",
11
+ "createdBy": "blt26d1e7648f0a8efb",
12
+ "currentCartridgeSelection": "Selected Cartridge",
13
+ "defaultShipInfoMessage": "This option can not be selected due to the products in your cart.",
14
+ "defaultShipLabel": "Default Ship",
15
+ "firstOrderText": "Your first order will be processed on {shipMonth} {shipDay}.",
16
+ "manageYourAdrText": "If any changes need to be made to a future ARO, please manage your ARO. ",
17
+ "orderFirstMessage": "<p>Order will be processed first then the ADR Subscription&nbsp;will be processed</p>\n",
18
+ "processMyAdrText": "<p>Process my ADR Subscription&nbsp;on the following date each month:</p>\n",
19
+ "recurringOrderTextFuture": "Your ADR Subscription order will process on the {recurDay} of every month.",
20
+ "recurringOrderTextImmediate": "Your ADR Subscription order will process on the {recurDay} of every month.",
21
+ "replacement": "Replacement",
22
+ "selectAdrOptionText": "Please select when your ADR Subscription order will be processed:",
23
+ "selectContractLengthText": " {months} months",
24
+ "shipAlwaysLabel": "Ship Always ",
25
+ "shipFutureLabel": "Ship Future",
26
+ "shipImmediateLabel": "Ship Immediate",
27
+ "shipNowTextSmall": "Ship ADR Subscription Today",
28
+ "shipFutureTextSmall": "Ship ADR Subscription Future",
29
+ "firstShipTextSmall": "First ship date: {shipMonth} {shipDay}",
30
+ "recurringShipDayTextSmall": "Monthly ship day: {day}",
31
+ "contractLengthTextSmall": "Contract length: {contractLength}",
32
+ "submitButtonText": "Submit",
33
+ "adrTncText": "<p>Before you may continue with your application, you must agree to the ARO Terms and Conditions. You may print out the Terms and Conditions for future reference by <a onclick=\"window.open('https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html', '_blank', 'location=no')\" class=\"link1\">clicking here. </a></p>\n",
34
+ "adrTncCheckboxText": "I agree to the ADR Subscription Terms and Conditions.",
35
+ "adrTncUrl": "https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html",
36
+ "title": "Checkout: Cart Strings",
37
+ "updatedAt": "2023-01-13T19:43:48.973Z",
38
+ "updatedBy": "blt26d1e7648f0a8efb",
39
+ "environment": "blt5e5b15d13800a1d2",
40
+ "locale": "en",
41
+ "time": "2023-02-06T16:47:44.301Z",
42
+ "user": "blt59d6f8b06f78ed2e",
43
+ "backToCartText": "Back to Cart",
44
+ "deleteItemText": "delete item",
45
+ "itemsText": "Items",
46
+ "orderDetails": "Order Details",
47
+ "orderPointTotal": "Total points",
48
+ "pointPrice": "Points",
49
+ "pointTotalPrice": "Total points",
50
+ "points": "Points",
51
+ "priceLabel": "Price:",
52
+ "purchaseQtyWithPoints": "Purchase {qty} items with points",
53
+ "purchaseWithPoints": "Purchase this item with points",
54
+ "purchaseWithQtyPoints": "Purchase with {qty} points",
55
+ "quantityLabel": "QTY:",
56
+ "redeemPointsHeader": "Redeem Points",
57
+ "totalLabel": "Total:",
58
+ "userPointsExceededError": "Oops! It looks like you're trying to spend more points than you have available. ",
59
+ "zeroPsvError": "Oops! This order cannot have a total PSV of zero. "
60
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "checkoutAdrStrings": {
3
+ "locale": "en",
4
+ "uid": "blt92180d683ff1356a",
5
+ "additions": "Additions",
6
+ "adrFirstMessage": "<p>ADR Subscription&nbsp;will be processed first then the Order will be processed</p>\n",
7
+ "adrOptions": "ADR Subscription Options",
8
+ "adrUpdateFailedErrorMessage": "ADR Subscription failed to update.",
9
+ "agreeToAdrUpdateChanges": "I agree to update ADR Subscription",
10
+ "contractLengthSelectLabel": "Please select the length of your contract term:",
11
+ "createdAt": "2023-01-13T19:40:58.406Z",
12
+ "createdBy": "blt26d1e7648f0a8efb",
13
+ "currentCartridgeSelection": "Selected Cartridge",
14
+ "defaultShipInfoMessage": "This option can not be selected due to the products in your cart.",
15
+ "defaultShipLabel": "Default Ship",
16
+ "firstOrderText": "Your first order will be processed on {shipMonth} {shipDay}.",
17
+ "manageYourAdrText": "If any changes need to be made to a future ARO, please manage your ARO. ",
18
+ "orderFirstMessage": "<p>Order will be processed first then the ADR Subscription&nbsp;will be processed</p>\n",
19
+ "processMyAdrText": "<p>Process my ADR Subscription&nbsp;on the following date each month:</p>\n",
20
+ "recurringOrderTextFuture": "Your ADR Subscription order will process on the {recurDay} of every month.",
21
+ "recurringOrderTextImmediate": "Your ADR Subscription order will process on the {recurDay} of every month.",
22
+ "replacement": "Replacement",
23
+ "selectAdrOptionText": "Please select when your ADR Subscription order will be processed:",
24
+ "selectContractLengthText": " {months} months",
25
+ "shipAlwaysLabel": "Ship Always ",
26
+ "shipFutureLabel": "Ship Future",
27
+ "shipImmediateLabel": "Ship Immediate",
28
+ "shipNowTextSmall": "Ship ADR Subscription Today",
29
+ "shipFutureTextSmall": "Ship ADR Subscription Future",
30
+ "firstShipTextSmall": "First ship date: {shipMonth} {shipDay}",
31
+ "recurringShipDayTextSmall": "Monthly ship day: {day}",
32
+ "contractLengthTextSmall": "Contract length: {contractLength}",
33
+ "submitButtonText": "Submit",
34
+ "adrTncText": "<p>Before you may continue with your application, you must agree to the ARO Terms and Conditions. You may print out the Terms and Conditions for future reference by <a onclick=\"window.open('https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html', '_blank', 'location=no')\" class=\"link1\">clicking here. </a></p>\n",
35
+ "adrTncCheckboxText": "I agree to the ADR Subscription Terms and Conditions.",
36
+ "adrTncUrl": "https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html",
37
+ "title": "Checkout: ADR Strings",
38
+ "updatedAt": "2023-01-13T19:41:50.644Z",
39
+ "updatedBy": "blt26d1e7648f0a8efb",
40
+ "environment": "blt5e5b15d13800a1d2",
41
+ "locale": "en",
42
+ "time": "2023-02-06T15:57:25.202Z",
43
+ "user": "blt59d6f8b06f78ed2e"
44
+ },
45
+ "checkoutCartStrings": {
46
+ "locale": "en",
47
+ "uid": "blt6809d71c62ef9fd1",
48
+ "backToCartText": "Back to Cart",
49
+ "createdAt": "2023-01-13T19:43:16.105Z",
50
+ "createdBy": "blt26d1e7648f0a8efb",
51
+ "deleteItemText": "delete item",
52
+ "itemsText": "Items",
53
+ "orderDetails": "Order Details",
54
+ "orderPointTotal": "Total points",
55
+ "pointPrice": "Points",
56
+ "pointTotalPrice": "Total points",
57
+ "points": "Points",
58
+ "priceLabel": "Price:",
59
+ "purchaseQtyWithPoints": "Purchase {qty} items with points",
60
+ "purchaseWithPoints": "Purchase this item with points",
61
+ "purchaseWithQtyPoints": "Purchase with {qty} points",
62
+ "quantityLabel": "QTY:",
63
+ "redeemPointsHeader": "Redeem Points",
64
+ "title": "Checkout: Cart Strings",
65
+ "totalLabel": "Total:",
66
+ "updatedAt": "2023-01-13T19:43:48.973Z",
67
+ "updatedBy": "blt26d1e7648f0a8efb",
68
+ "userPointsExceededError": "Oops! It looks like you're trying to spend more points than you have available. ",
69
+ "zeroPsvError": "Oops! This order cannot have a total PSV of zero. ",
70
+ "environment": "blt5e5b15d13800a1d2",
71
+ "locale": "en",
72
+ "time": "2023-02-06T16:47:44.301Z",
73
+ "user": "blt59d6f8b06f78ed2e"
74
+ }
75
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "_version": 2,
3
+ "locale": "en",
4
+ "uid": "blt92180d683ff1356a",
5
+ "ACL": {},
6
+ "_in_progress": false,
7
+ "additions": "Additions",
8
+ "adr_first_message": "<p>ADR Subscription&nbsp;will be processed first then the Order will be processed</p>\n",
9
+ "adr_options": "ADR Subscription Options",
10
+ "adr_update_failed_error_message": "ADR Subscription failed to update.",
11
+ "agree_to_adr_update_changes": "I agree to update ADR Subscription",
12
+ "contract_length_select_label": "Please select the length of your contract term:",
13
+ "created_at": "2023-01-13T19:40:58.406Z",
14
+ "created_by": "blt26d1e7648f0a8efb",
15
+ "current_cartridge_selection": "Selected Cartridge",
16
+ "default_ship_info_message": "This option can not be selected due to the products in your cart.",
17
+ "default_ship_label": "Default Ship",
18
+ "first_order_text": "Your first order will be processed on {shipMonth} {shipDay}.",
19
+ "overridden_value": "This value overrides the common value",
20
+ "new_value": "This value only exists in en_US",
21
+ "manage_your_adr_text": "If any changes need to be made to a future ARO, please manage your ARO. ",
22
+ "order_first_message": "<p>Order will be processed first then the ADR Subscription&nbsp;will be processed</p>\n",
23
+ "process_my_adr_text": "<p>Process my ADR Subscription&nbsp;on the following date each month:</p>\n",
24
+ "recurring_order_text_future": "Your ADR Subscription order will process on the {recurDay} of every month.",
25
+ "recurring_order_text_immediate": "Your ADR Subscription order will process on the {recurDay} of every month.",
26
+ "replacement": "Replacement",
27
+ "select_adr_option_text": "Please select when your ADR Subscription order will be processed:",
28
+ "select_contract_length_text": " {months} months",
29
+ "ship_always_label": "Ship Always ",
30
+ "ship_future_label": "Ship Future",
31
+ "ship_immediate_label": "Ship Immediate",
32
+ "small_ship_text_fields": {
33
+ "ship_now_text_small": "Ship ADR Subscription Today",
34
+ "ship_future_text_small": "Ship ADR Subscription Future",
35
+ "first_ship_text_small": "First ship date: {shipMonth} {shipDay}",
36
+ "recurring_ship_day_text_small": "Monthly ship day: {day}",
37
+ "contract_length_text_small": "Contract length: {contractLength}"
38
+ },
39
+ "submit_button_text": "Submit",
40
+ "tags": [],
41
+ "termsncondition": {
42
+ "adr_tnc_text": "<p>Before you may continue with your application, you must agree to the ARO Terms and Conditions. You may print out the Terms and Conditions for future reference by <a onclick=\"window.open('https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html', '_blank', 'location=no')\" class=\"link1\">clicking here. </a></p>\n",
43
+ "adr_tnc_checkbox_text": "I agree to the ADR Subscription Terms and Conditions.",
44
+ "adr_tnc_url": "https://www.nuskin.com/content/dam/sea/sg/ARO/ARO_Policies_SG_english.html"
45
+ },
46
+ "title": "Checkout: ADR Strings",
47
+ "updated_at": "2023-01-13T19:41:50.644Z",
48
+ "updated_by": "blt26d1e7648f0a8efb",
49
+ "publish_details": {
50
+ "environment": "blt5e5b15d13800a1d2",
51
+ "locale": "en",
52
+ "time": "2023-02-06T15:57:25.202Z",
53
+ "user": "blt59d6f8b06f78ed2e"
54
+ }
55
+ }