@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 +30 -0
- package/.gitlab-ci.yml +10 -0
- package/.releaserc +27 -0
- package/.vscode/launch.json +50 -0
- package/CHANGELOG.md +0 -0
- package/README.md +77 -0
- package/__tests__/api.spec.js +155 -0
- package/__tests__/resources/checkoutAdrStrings.json +57 -0
- package/__tests__/resources/checkoutCartStrings.json +40 -0
- package/__tests__/resources/getStringsMergedResult.json +60 -0
- package/__tests__/resources/getStringsResult.json +75 -0
- package/__tests__/resources/singleCheckoutAdrStrings.json +55 -0
- package/__tests__/resources/singleCheckoutAdrStringsCamel.json +55 -0
- package/__tests__/resources/singleCheckoutAdrStringsCommon.json +55 -0
- package/__tests__/resources/singleCheckoutCartStrings.json +36 -0
- package/__tests__/resources/singleCheckoutCartStringsCamel.json +36 -0
- package/config/dev.json +6 -0
- package/config/prod.json +6 -0
- package/config/stage.json +6 -0
- package/config/test.json +6 -0
- package/docs/CHANGELOG.md +1 -0
- package/gl-sbom-npm-yarn.cdx.json +10278 -0
- package/jest.config.js +16 -0
- package/package.json +35 -0
- package/src/api.js +181 -0
- package/src/index.js +13 -0
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
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 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 will be processed</p>\n",
|
|
23
|
+
"process_my_adr_text": "<p>Process my ADR Subscription 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 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 will be processed</p>\n",
|
|
18
|
+
"processMyAdrText": "<p>Process my ADR Subscription 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 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 will be processed</p>\n",
|
|
19
|
+
"processMyAdrText": "<p>Process my ADR Subscription 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 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 will be processed</p>\n",
|
|
23
|
+
"process_my_adr_text": "<p>Process my ADR Subscription 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
|
+
}
|