@faststore/api 2.2.80 → 2.2.81

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.
Files changed (31) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/platforms/vtex/clients/commerce/index.d.ts +16 -2
  4. package/dist/cjs/src/platforms/vtex/clients/commerce/index.js +58 -3
  5. package/dist/cjs/src/platforms/vtex/clients/commerce/index.js.map +1 -1
  6. package/dist/cjs/src/platforms/vtex/clients/fetch.d.ts +1 -0
  7. package/dist/cjs/src/platforms/vtex/clients/fetch.js +45 -2
  8. package/dist/cjs/src/platforms/vtex/clients/fetch.js.map +1 -1
  9. package/dist/cjs/src/platforms/vtex/clients/index.d.ts +2 -2
  10. package/dist/cjs/src/platforms/vtex/resolvers/subscribeToNewsletter.js +20 -1
  11. package/dist/cjs/src/platforms/vtex/resolvers/subscribeToNewsletter.js.map +1 -1
  12. package/dist/esm/package.json +1 -1
  13. package/dist/esm/src/platforms/vtex/clients/commerce/index.d.ts +16 -2
  14. package/dist/esm/src/platforms/vtex/clients/commerce/index.js +56 -2
  15. package/dist/esm/src/platforms/vtex/clients/commerce/index.js.map +1 -1
  16. package/dist/esm/src/platforms/vtex/clients/fetch.d.ts +1 -0
  17. package/dist/esm/src/platforms/vtex/clients/fetch.js +43 -1
  18. package/dist/esm/src/platforms/vtex/clients/fetch.js.map +1 -1
  19. package/dist/esm/src/platforms/vtex/clients/index.d.ts +2 -2
  20. package/dist/esm/src/platforms/vtex/resolvers/subscribeToNewsletter.js +20 -1
  21. package/dist/esm/src/platforms/vtex/resolvers/subscribeToNewsletter.js.map +1 -1
  22. package/package.json +3 -2
  23. package/src/platforms/vtex/clients/commerce/index.ts +74 -3
  24. package/src/platforms/vtex/clients/fetch.ts +52 -1
  25. package/src/platforms/vtex/resolvers/subscribeToNewsletter.ts +27 -1
  26. package/dist/cjs/src/platforms/vtex/utils/taxes.d.ts +0 -1
  27. package/dist/cjs/src/platforms/vtex/utils/taxes.js +0 -9
  28. package/dist/cjs/src/platforms/vtex/utils/taxes.js.map +0 -1
  29. package/dist/esm/src/platforms/vtex/utils/taxes.d.ts +0 -1
  30. package/dist/esm/src/platforms/vtex/utils/taxes.js +0 -5
  31. package/dist/esm/src/platforms/vtex/utils/taxes.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 VTEX
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/api",
3
- "version": "2.2.79",
3
+ "version": "2.2.80",
4
4
  "license": "MIT",
5
5
  "main": "dist/cjs/src/index.js",
6
6
  "typings": "dist/esm/src/index.d.ts",
@@ -14,6 +14,8 @@ import { MasterDataResponse } from './types/Newsletter';
14
14
  import type { Address, AddressInput } from './types/Address';
15
15
  import { DeliveryMode, SelectedAddress } from './types/ShippingData';
16
16
  type ValueOf<T> = T extends Record<string, infer K> ? K : never;
17
+ /** Test-only: forget which accounts were warned about the anonymous fallback. */
18
+ export declare const resetAnonymousNewsletterWarnings: () => void;
17
19
  export declare const VtexCommerce: ({ account, environment, incrementAddress }: Options, ctx: Context) => {
18
20
  catalog: {
19
21
  salesChannel: (sc: string) => Promise<SalesChannel>;
@@ -67,8 +69,20 @@ export declare const VtexCommerce: ({ account, environment, incrementAddress }:
67
69
  address: ({ postalCode, country, }: AddressInput) => Promise<Address>;
68
70
  };
69
71
  session: (search: string) => Promise<Session>;
70
- subscribeToNewsletter: (data: {
71
- name: string;
72
+ /**
73
+ * Creates a newsletter subscription in the `NL` Master Data entity.
74
+ *
75
+ * With `FS_NEWSLETTER_APP_KEY`/`FS_NEWSLETTER_APP_TOKEN` set, the document is
76
+ * created with a `POST` authenticated by that dedicated key, so `NL` fields
77
+ * can stay private. The request is create-only: the body is built here from
78
+ * the validated fields and never carries a document id, so the caller can't
79
+ * reach an existing record.
80
+ *
81
+ * Without the credentials, it falls back to the legacy anonymous `PATCH`,
82
+ * which only works while `NL` fields are public.
83
+ */
84
+ subscribeToNewsletter: ({ name, email, }: {
85
+ name?: string | undefined;
72
86
  email: string;
73
87
  }) => Promise<MasterDataResponse>;
74
88
  };
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VtexCommerce = void 0;
3
+ exports.VtexCommerce = exports.resetAnonymousNewsletterWarnings = void 0;
4
4
  const fetch_1 = require("../fetch");
5
5
  const cookies_1 = require("../../utils/cookies");
6
6
  const BASE_INIT = {
@@ -9,6 +9,17 @@ const BASE_INIT = {
9
9
  'content-type': 'application/json',
10
10
  },
11
11
  };
12
+ // Accounts already warned that they rely on public `NL` fields. The commerce
13
+ // client is created per request, so the warning is kept once per account
14
+ // instead of per instance, to avoid flooding the logs. The account comes from
15
+ // the store's API options, not from the request, so the set holds at most one
16
+ // entry per account the process is configured for (usually one). It's still
17
+ // capped, so it can't grow without bound if that ever changes.
18
+ const MAX_WARNED_NEWSLETTER_ACCOUNTS = 100;
19
+ const accountsWarnedAboutAnonymousNewsletter = new Set();
20
+ /** Test-only: forget which accounts were warned about the anonymous fallback. */
21
+ const resetAnonymousNewsletterWarnings = () => accountsWarnedAboutAnonymousNewsletter.clear();
22
+ exports.resetAnonymousNewsletterWarnings = resetAnonymousNewsletterWarnings;
12
23
  const VtexCommerce = ({ account, environment, incrementAddress }, ctx) => {
13
24
  const base = `https://${account}.${environment}.com.br`;
14
25
  const storeCookies = (0, cookies_1.getStoreCookie)(ctx);
@@ -177,10 +188,54 @@ const VtexCommerce = ({ account, environment, incrementAddress }, ctx) => {
177
188
  body: '{}',
178
189
  }, { storeCookies });
179
190
  },
180
- subscribeToNewsletter: (data) => {
191
+ /**
192
+ * Creates a newsletter subscription in the `NL` Master Data entity.
193
+ *
194
+ * With `FS_NEWSLETTER_APP_KEY`/`FS_NEWSLETTER_APP_TOKEN` set, the document is
195
+ * created with a `POST` authenticated by that dedicated key, so `NL` fields
196
+ * can stay private. The request is create-only: the body is built here from
197
+ * the validated fields and never carries a document id, so the caller can't
198
+ * reach an existing record.
199
+ *
200
+ * Without the credentials, it falls back to the legacy anonymous `PATCH`,
201
+ * which only works while `NL` fields are public.
202
+ */
203
+ subscribeToNewsletter: ({ name, email, }) => {
204
+ const body = JSON.stringify({
205
+ ...(name ? { name } : {}),
206
+ email,
207
+ isNewsletterOptIn: true,
208
+ });
209
+ const appKey = process.env.FS_NEWSLETTER_APP_KEY;
210
+ const appToken = process.env.FS_NEWSLETTER_APP_TOKEN;
211
+ if (appKey && appToken) {
212
+ return (0, fetch_1.fetchAPI)(`${base}/api/dataentities/NL/documents`, {
213
+ method: 'POST',
214
+ headers: {
215
+ 'content-type': 'application/json',
216
+ accept: 'application/json',
217
+ 'X-VTEX-API-AppKey': appKey,
218
+ 'X-VTEX-API-AppToken': appToken,
219
+ },
220
+ body,
221
+ });
222
+ }
223
+ if (!accountsWarnedAboutAnonymousNewsletter.has(account)) {
224
+ if (accountsWarnedAboutAnonymousNewsletter.size >=
225
+ MAX_WARNED_NEWSLETTER_ACCOUNTS) {
226
+ accountsWarnedAboutAnonymousNewsletter.clear();
227
+ }
228
+ accountsWarnedAboutAnonymousNewsletter.add(account);
229
+ // Name only the missing variables, so a partial setup is easy to spot.
230
+ const missing = [
231
+ !appKey && 'FS_NEWSLETTER_APP_KEY',
232
+ !appToken && 'FS_NEWSLETTER_APP_TOKEN',
233
+ ].filter(Boolean);
234
+ console.warn(`[subscribeToNewsletter] ${missing.join(' and ')} ${missing.length > 1 ? 'are' : 'is'} not set. Falling back to an anonymous Master Data request, which requires public fields in the NL entity. Configure both credentials and make the NL fields private.`);
235
+ }
181
236
  return (0, fetch_1.fetchAPI)(`${base}/api/dataentities/NL/documents/`, {
182
237
  ...BASE_INIT,
183
- body: JSON.stringify({ ...data, isNewsletterOptIn: true }),
238
+ body,
184
239
  method: 'PATCH',
185
240
  }, { storeCookies });
186
241
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/platforms/vtex/clients/commerce/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/platforms/vtex/clients/commerce/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  interface FetchAPIOptions {
2
2
  storeCookies?: (headers: Headers) => void;
3
3
  }
4
+ export declare const redactHeaders: (headers?: HeadersInit) => Record<string, string> | undefined;
4
5
  export declare const fetchAPI: (info: RequestInfo, init?: RequestInit, options?: FetchAPIOptions) => Promise<any>;
5
6
  export {};
@@ -1,10 +1,40 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchAPI = void 0;
3
+ exports.fetchAPI = exports.redactHeaders = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const isomorphic_unfetch_1 = tslib_1.__importDefault(require("isomorphic-unfetch"));
6
6
  const package_json_1 = tslib_1.__importDefault(require("../../../../package.json"));
7
7
  const USER_AGENT = `${package_json_1.default.name}@${package_json_1.default.version}`;
8
+ // Headers that may carry credentials: store API keys (`X-VTEX-API-AppKey`,
9
+ // `X-VTEX-API-AppToken`), shopper cookies (`Cookie`, `Set-Cookie`,
10
+ // `VtexIdclientAutCookie_*`), `Authorization`, and generic token, secret or
11
+ // API key headers. They are replaced before a failed request and its response
12
+ // are logged. Matched by substring so new credential headers are covered too.
13
+ const SENSITIVE_HEADER = /authorization|cookie|token|secret|api-?key|appkey/i;
14
+ const REDACTED = '[redacted]';
15
+ const redactHeaders = (headers) => {
16
+ if (!headers) {
17
+ return undefined;
18
+ }
19
+ const redacted = {};
20
+ const add = (name, value) => {
21
+ redacted[name] = SENSITIVE_HEADER.test(name) ? REDACTED : value;
22
+ };
23
+ if (Array.isArray(headers)) {
24
+ headers.forEach(([name, value]) => add(name, value));
25
+ }
26
+ else if (typeof headers.forEach === 'function') {
27
+ // Matches both the global `Headers` and the polyfill returned by
28
+ // `isomorphic-unfetch` on Node, which isn't an instance of the global one.
29
+ const headerList = headers;
30
+ headerList.forEach((value, name) => add(name, value));
31
+ }
32
+ else {
33
+ Object.entries(headers).forEach(([name, value]) => add(name, value));
34
+ }
35
+ return redacted;
36
+ };
37
+ exports.redactHeaders = redactHeaders;
8
38
  const fetchAPI = async (info, init, options) => {
9
39
  const response = await (0, isomorphic_unfetch_1.default)(info, {
10
40
  ...init,
@@ -19,7 +49,20 @@ const fetchAPI = async (info, init, options) => {
19
49
  }
20
50
  return response.status !== 204 ? response.json() : undefined;
21
51
  }
22
- console.error(info, init, response);
52
+ // Log a summary instead of the raw Response, whose headers may include
53
+ // `Set-Cookie` with shopper credentials. The request body is omitted because
54
+ // it can carry personal data (e.g. the newsletter email and name).
55
+ console.error(
56
+ // Only the URL: a `Request` instance could carry unredacted headers.
57
+ typeof info === 'string' ? info : info.url, init && {
58
+ ...init,
59
+ headers: (0, exports.redactHeaders)(init.headers),
60
+ body: init.body ? REDACTED : undefined,
61
+ }, {
62
+ status: response.status,
63
+ statusText: response.statusText,
64
+ headers: (0, exports.redactHeaders)(response.headers),
65
+ });
23
66
  const text = await response.text();
24
67
  throw new Error(text);
25
68
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/clients/fetch.ts"],"names":[],"mappings":";;;;AAAA,oFAAsC;AACtC,oFAAkD;AAElD,MAAM,UAAU,GAAG,GAAG,sBAAW,CAAC,IAAI,IAAI,sBAAW,CAAC,OAAO,EAAE,CAAA;AAMxD,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAAiB,EACjB,IAAkB,EAClB,OAAyB,EACzB,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAK,EAAC,IAAI,EAAE;QACjC,GAAG,IAAI;QACP,OAAO,EAAE;YACP,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;YACxB,YAAY,EAAE,UAAU;SACzB;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAElC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC,CAAA;AAzBY,QAAA,QAAQ,YAyBpB"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/clients/fetch.ts"],"names":[],"mappings":";;;;AAAA,oFAAsC;AACtC,oFAAkD;AAElD,MAAM,UAAU,GAAG,GAAG,sBAAW,CAAC,IAAI,IAAI,sBAAW,CAAC,OAAO,EAAE,CAAA;AAM/D,2EAA2E;AAC3E,mEAAmE;AACnE,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,gBAAgB,GAAG,oDAAoD,CAAA;AAE7E,MAAM,QAAQ,GAAG,YAAY,CAAA;AAEtB,MAAM,aAAa,GAAG,CAC3B,OAAqB,EACe,EAAE;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;QAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAA;IACjE,CAAC,CAAA;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACtD,CAAC;SAAM,IAAI,OAAQ,OAAmB,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAC9D,iEAAiE;QACjE,2EAA2E;QAC3E,MAAM,UAAU,GAAG,OAAkB,CAAA;QACrC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAxBY,QAAA,aAAa,iBAwBzB;AAEM,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAAiB,EACjB,IAAkB,EAClB,OAAyB,EACzB,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,IAAA,4BAAK,EAAC,IAAI,EAAE;QACjC,GAAG,IAAI;QACP,OAAO,EAAE;YACP,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;YACxB,YAAY,EAAE,UAAU;SACzB;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,CAAC;IAED,uEAAuE;IACvE,6EAA6E;IAC7E,mEAAmE;IACnE,OAAO,CAAC,KAAK;IACX,qEAAqE;IACrE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAC1C,IAAI,IAAI;QACN,GAAG,IAAI;QACP,OAAO,EAAE,IAAA,qBAAa,EAAC,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACvC,EACD;QACE,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,IAAA,qBAAa,EAAC,QAAQ,CAAC,OAAO,CAAC;KACzC,CACF,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAElC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC,CAAA;AAzCY,QAAA,QAAQ,YAyCpB"}
@@ -60,8 +60,8 @@ export declare const getClients: (options: Options, ctx: Context) => {
60
60
  address: ({ postalCode, country, }: import("./commerce/types/Address").AddressInput) => Promise<import("./commerce/types/Address").Address>;
61
61
  };
62
62
  session: (search: string) => Promise<import("./commerce/types/Session").Session>;
63
- subscribeToNewsletter: (data: {
64
- name: string;
63
+ subscribeToNewsletter: ({ name, email, }: {
64
+ name?: string | undefined;
65
65
  email: string;
66
66
  }) => Promise<import("./commerce/types/Newsletter").MasterDataResponse>;
67
67
  };
@@ -1,8 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.subscribeToNewsletter = void 0;
4
+ const errors_1 = require("../../errors");
5
+ const EMAIL_MAX_LENGTH = 254;
6
+ const NAME_MAX_LENGTH = 100;
7
+ // Character classes exclude `.`, so each domain label is matched once and the
8
+ // pattern stays linear on long inputs.
9
+ const EMAIL_PATTERN = /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/;
4
10
  const subscribeToNewsletter = async (_, { data }, { clients: { commerce } }) => {
5
- const response = await commerce.subscribeToNewsletter(data);
11
+ // The subscription is written with a store credential, so only validated
12
+ // values reach Master Data.
13
+ const email = data.email?.trim().toLowerCase() ?? '';
14
+ const name = data.name?.trim() ?? '';
15
+ if (email.length > EMAIL_MAX_LENGTH || !EMAIL_PATTERN.test(email)) {
16
+ throw new errors_1.BadRequestError('Invalid email');
17
+ }
18
+ if (name.length > NAME_MAX_LENGTH) {
19
+ throw new errors_1.BadRequestError(`Invalid name: must have at most ${NAME_MAX_LENGTH} characters`);
20
+ }
21
+ const response = await commerce.subscribeToNewsletter({
22
+ email,
23
+ name: name || undefined,
24
+ });
6
25
  return { id: response?.Id };
7
26
  };
8
27
  exports.subscribeToNewsletter = subscribeToNewsletter;
@@ -1 +1 @@
1
- {"version":3,"file":"subscribeToNewsletter.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/resolvers/subscribeToNewsletter.ts"],"names":[],"mappings":";;;AAMO,MAAM,qBAAqB,GAAG,KAAK,EACxC,CAAM,EACN,EAAE,IAAI,EAAqC,EAC3C,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAW,EACA,EAAE;IACpC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;AAC7B,CAAC,CAAA;AAPY,QAAA,qBAAqB,yBAOjC"}
1
+ {"version":3,"file":"subscribeToNewsletter.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/resolvers/subscribeToNewsletter.ts"],"names":[],"mappings":";;;AAKA,yCAA8C;AAE9C,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAC5B,MAAM,eAAe,GAAG,GAAG,CAAA;AAC3B,8EAA8E;AAC9E,uCAAuC;AACvC,MAAM,aAAa,GAAG,iCAAiC,CAAA;AAEhD,MAAM,qBAAqB,GAAG,KAAK,EACxC,CAAM,EACN,EAAE,IAAI,EAAqC,EAC3C,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAW,EACA,EAAE;IACpC,yEAAyE;IACzE,4BAA4B;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAEpC,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,wBAAe,CAAC,eAAe,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,IAAI,wBAAe,CACvB,mCAAmC,eAAe,aAAa,CAChE,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC;QACpD,KAAK;QACL,IAAI,EAAE,IAAI,IAAI,SAAS;KACxB,CAAC,CAAA;IAEF,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;AAC7B,CAAC,CAAA;AA1BY,QAAA,qBAAqB,yBA0BjC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/api",
3
- "version": "2.2.79",
3
+ "version": "2.2.80",
4
4
  "license": "MIT",
5
5
  "main": "dist/cjs/src/index.js",
6
6
  "typings": "dist/esm/src/index.d.ts",
@@ -14,6 +14,8 @@ import { MasterDataResponse } from './types/Newsletter';
14
14
  import type { Address, AddressInput } from './types/Address';
15
15
  import { DeliveryMode, SelectedAddress } from './types/ShippingData';
16
16
  type ValueOf<T> = T extends Record<string, infer K> ? K : never;
17
+ /** Test-only: forget which accounts were warned about the anonymous fallback. */
18
+ export declare const resetAnonymousNewsletterWarnings: () => void;
17
19
  export declare const VtexCommerce: ({ account, environment, incrementAddress }: Options, ctx: Context) => {
18
20
  catalog: {
19
21
  salesChannel: (sc: string) => Promise<SalesChannel>;
@@ -67,8 +69,20 @@ export declare const VtexCommerce: ({ account, environment, incrementAddress }:
67
69
  address: ({ postalCode, country, }: AddressInput) => Promise<Address>;
68
70
  };
69
71
  session: (search: string) => Promise<Session>;
70
- subscribeToNewsletter: (data: {
71
- name: string;
72
+ /**
73
+ * Creates a newsletter subscription in the `NL` Master Data entity.
74
+ *
75
+ * With `FS_NEWSLETTER_APP_KEY`/`FS_NEWSLETTER_APP_TOKEN` set, the document is
76
+ * created with a `POST` authenticated by that dedicated key, so `NL` fields
77
+ * can stay private. The request is create-only: the body is built here from
78
+ * the validated fields and never carries a document id, so the caller can't
79
+ * reach an existing record.
80
+ *
81
+ * Without the credentials, it falls back to the legacy anonymous `PATCH`,
82
+ * which only works while `NL` fields are public.
83
+ */
84
+ subscribeToNewsletter: ({ name, email, }: {
85
+ name?: string | undefined;
72
86
  email: string;
73
87
  }) => Promise<MasterDataResponse>;
74
88
  };
@@ -6,6 +6,16 @@ const BASE_INIT = {
6
6
  'content-type': 'application/json',
7
7
  },
8
8
  };
9
+ // Accounts already warned that they rely on public `NL` fields. The commerce
10
+ // client is created per request, so the warning is kept once per account
11
+ // instead of per instance, to avoid flooding the logs. The account comes from
12
+ // the store's API options, not from the request, so the set holds at most one
13
+ // entry per account the process is configured for (usually one). It's still
14
+ // capped, so it can't grow without bound if that ever changes.
15
+ const MAX_WARNED_NEWSLETTER_ACCOUNTS = 100;
16
+ const accountsWarnedAboutAnonymousNewsletter = new Set();
17
+ /** Test-only: forget which accounts were warned about the anonymous fallback. */
18
+ export const resetAnonymousNewsletterWarnings = () => accountsWarnedAboutAnonymousNewsletter.clear();
9
19
  export const VtexCommerce = ({ account, environment, incrementAddress }, ctx) => {
10
20
  const base = `https://${account}.${environment}.com.br`;
11
21
  const storeCookies = getStoreCookie(ctx);
@@ -174,10 +184,54 @@ export const VtexCommerce = ({ account, environment, incrementAddress }, ctx) =>
174
184
  body: '{}',
175
185
  }, { storeCookies });
176
186
  },
177
- subscribeToNewsletter: (data) => {
187
+ /**
188
+ * Creates a newsletter subscription in the `NL` Master Data entity.
189
+ *
190
+ * With `FS_NEWSLETTER_APP_KEY`/`FS_NEWSLETTER_APP_TOKEN` set, the document is
191
+ * created with a `POST` authenticated by that dedicated key, so `NL` fields
192
+ * can stay private. The request is create-only: the body is built here from
193
+ * the validated fields and never carries a document id, so the caller can't
194
+ * reach an existing record.
195
+ *
196
+ * Without the credentials, it falls back to the legacy anonymous `PATCH`,
197
+ * which only works while `NL` fields are public.
198
+ */
199
+ subscribeToNewsletter: ({ name, email, }) => {
200
+ const body = JSON.stringify({
201
+ ...(name ? { name } : {}),
202
+ email,
203
+ isNewsletterOptIn: true,
204
+ });
205
+ const appKey = process.env.FS_NEWSLETTER_APP_KEY;
206
+ const appToken = process.env.FS_NEWSLETTER_APP_TOKEN;
207
+ if (appKey && appToken) {
208
+ return fetchAPI(`${base}/api/dataentities/NL/documents`, {
209
+ method: 'POST',
210
+ headers: {
211
+ 'content-type': 'application/json',
212
+ accept: 'application/json',
213
+ 'X-VTEX-API-AppKey': appKey,
214
+ 'X-VTEX-API-AppToken': appToken,
215
+ },
216
+ body,
217
+ });
218
+ }
219
+ if (!accountsWarnedAboutAnonymousNewsletter.has(account)) {
220
+ if (accountsWarnedAboutAnonymousNewsletter.size >=
221
+ MAX_WARNED_NEWSLETTER_ACCOUNTS) {
222
+ accountsWarnedAboutAnonymousNewsletter.clear();
223
+ }
224
+ accountsWarnedAboutAnonymousNewsletter.add(account);
225
+ // Name only the missing variables, so a partial setup is easy to spot.
226
+ const missing = [
227
+ !appKey && 'FS_NEWSLETTER_APP_KEY',
228
+ !appToken && 'FS_NEWSLETTER_APP_TOKEN',
229
+ ].filter(Boolean);
230
+ console.warn(`[subscribeToNewsletter] ${missing.join(' and ')} ${missing.length > 1 ? 'are' : 'is'} not set. Falling back to an anonymous Master Data request, which requires public fields in the NL entity. Configure both credentials and make the NL fields private.`);
231
+ }
178
232
  return fetchAPI(`${base}/api/dataentities/NL/documents/`, {
179
233
  ...BASE_INIT,
180
- body: JSON.stringify({ ...data, isNewsletterOptIn: true }),
234
+ body,
181
235
  method: 'PATCH',
182
236
  }, { storeCookies });
183
237
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/platforms/vtex/clients/commerce/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/platforms/vtex/clients/commerce/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  interface FetchAPIOptions {
2
2
  storeCookies?: (headers: Headers) => void;
3
3
  }
4
+ export declare const redactHeaders: (headers?: HeadersInit) => Record<string, string> | undefined;
4
5
  export declare const fetchAPI: (info: RequestInfo, init?: RequestInit, options?: FetchAPIOptions) => Promise<any>;
5
6
  export {};
@@ -1,6 +1,35 @@
1
1
  import fetch from 'isomorphic-unfetch';
2
2
  import packageJson from '../../../../package.json';
3
3
  const USER_AGENT = `${packageJson.name}@${packageJson.version}`;
4
+ // Headers that may carry credentials: store API keys (`X-VTEX-API-AppKey`,
5
+ // `X-VTEX-API-AppToken`), shopper cookies (`Cookie`, `Set-Cookie`,
6
+ // `VtexIdclientAutCookie_*`), `Authorization`, and generic token, secret or
7
+ // API key headers. They are replaced before a failed request and its response
8
+ // are logged. Matched by substring so new credential headers are covered too.
9
+ const SENSITIVE_HEADER = /authorization|cookie|token|secret|api-?key|appkey/i;
10
+ const REDACTED = '[redacted]';
11
+ export const redactHeaders = (headers) => {
12
+ if (!headers) {
13
+ return undefined;
14
+ }
15
+ const redacted = {};
16
+ const add = (name, value) => {
17
+ redacted[name] = SENSITIVE_HEADER.test(name) ? REDACTED : value;
18
+ };
19
+ if (Array.isArray(headers)) {
20
+ headers.forEach(([name, value]) => add(name, value));
21
+ }
22
+ else if (typeof headers.forEach === 'function') {
23
+ // Matches both the global `Headers` and the polyfill returned by
24
+ // `isomorphic-unfetch` on Node, which isn't an instance of the global one.
25
+ const headerList = headers;
26
+ headerList.forEach((value, name) => add(name, value));
27
+ }
28
+ else {
29
+ Object.entries(headers).forEach(([name, value]) => add(name, value));
30
+ }
31
+ return redacted;
32
+ };
4
33
  export const fetchAPI = async (info, init, options) => {
5
34
  const response = await fetch(info, {
6
35
  ...init,
@@ -15,7 +44,20 @@ export const fetchAPI = async (info, init, options) => {
15
44
  }
16
45
  return response.status !== 204 ? response.json() : undefined;
17
46
  }
18
- console.error(info, init, response);
47
+ // Log a summary instead of the raw Response, whose headers may include
48
+ // `Set-Cookie` with shopper credentials. The request body is omitted because
49
+ // it can carry personal data (e.g. the newsletter email and name).
50
+ console.error(
51
+ // Only the URL: a `Request` instance could carry unredacted headers.
52
+ typeof info === 'string' ? info : info.url, init && {
53
+ ...init,
54
+ headers: redactHeaders(init.headers),
55
+ body: init.body ? REDACTED : undefined,
56
+ }, {
57
+ status: response.status,
58
+ statusText: response.statusText,
59
+ headers: redactHeaders(response.headers),
60
+ });
19
61
  const text = await response.text();
20
62
  throw new Error(text);
21
63
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/clients/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,oBAAoB,CAAA;AACtC,OAAO,WAAW,MAAM,0BAA0B,CAAA;AAElD,MAAM,UAAU,GAAG,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,CAAA;AAM/D,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,IAAiB,EACjB,IAAkB,EAClB,OAAyB,EACzB,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;QACjC,GAAG,IAAI;QACP,OAAO,EAAE;YACP,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;YACxB,YAAY,EAAE,UAAU;SACzB;KACF,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACxC,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAElC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC,CAAA"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/clients/fetch.ts"],"names":[],"mappings":"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"}
@@ -60,8 +60,8 @@ export declare const getClients: (options: Options, ctx: Context) => {
60
60
  address: ({ postalCode, country, }: import("./commerce/types/Address").AddressInput) => Promise<import("./commerce/types/Address").Address>;
61
61
  };
62
62
  session: (search: string) => Promise<import("./commerce/types/Session").Session>;
63
- subscribeToNewsletter: (data: {
64
- name: string;
63
+ subscribeToNewsletter: ({ name, email, }: {
64
+ name?: string | undefined;
65
65
  email: string;
66
66
  }) => Promise<import("./commerce/types/Newsletter").MasterDataResponse>;
67
67
  };
@@ -1,5 +1,24 @@
1
+ import { BadRequestError } from '../../errors';
2
+ const EMAIL_MAX_LENGTH = 254;
3
+ const NAME_MAX_LENGTH = 100;
4
+ // Character classes exclude `.`, so each domain label is matched once and the
5
+ // pattern stays linear on long inputs.
6
+ const EMAIL_PATTERN = /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/;
1
7
  export const subscribeToNewsletter = async (_, { data }, { clients: { commerce } }) => {
2
- const response = await commerce.subscribeToNewsletter(data);
8
+ // The subscription is written with a store credential, so only validated
9
+ // values reach Master Data.
10
+ const email = data.email?.trim().toLowerCase() ?? '';
11
+ const name = data.name?.trim() ?? '';
12
+ if (email.length > EMAIL_MAX_LENGTH || !EMAIL_PATTERN.test(email)) {
13
+ throw new BadRequestError('Invalid email');
14
+ }
15
+ if (name.length > NAME_MAX_LENGTH) {
16
+ throw new BadRequestError(`Invalid name: must have at most ${NAME_MAX_LENGTH} characters`);
17
+ }
18
+ const response = await commerce.subscribeToNewsletter({
19
+ email,
20
+ name: name || undefined,
21
+ });
3
22
  return { id: response?.Id };
4
23
  };
5
24
  //# sourceMappingURL=subscribeToNewsletter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscribeToNewsletter.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/resolvers/subscribeToNewsletter.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,CAAM,EACN,EAAE,IAAI,EAAqC,EAC3C,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAW,EACA,EAAE;IACpC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;AAC7B,CAAC,CAAA"}
1
+ {"version":3,"file":"subscribeToNewsletter.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/resolvers/subscribeToNewsletter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAC5B,MAAM,eAAe,GAAG,GAAG,CAAA;AAC3B,8EAA8E;AAC9E,uCAAuC;AACvC,MAAM,aAAa,GAAG,iCAAiC,CAAA;AAEvD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,CAAM,EACN,EAAE,IAAI,EAAqC,EAC3C,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAW,EACA,EAAE;IACpC,yEAAyE;IACzE,4BAA4B;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAA;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAEpC,IAAI,KAAK,CAAC,MAAM,GAAG,gBAAgB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,eAAe,CAAC,eAAe,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CACvB,mCAAmC,eAAe,aAAa,CAChE,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC;QACpD,KAAK;QACL,IAAI,EAAE,IAAI,IAAI,SAAS;KACxB,CAAC,CAAA;IAEF,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;AAC7B,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/api",
3
- "version": "2.2.80",
3
+ "version": "2.2.81",
4
4
  "license": "MIT",
5
5
  "main": "dist/cjs/src/index.js",
6
6
  "typings": "dist/esm/src/index.d.ts",
@@ -76,5 +76,6 @@
76
76
  },
77
77
  "volta": {
78
78
  "extends": "../../package.json"
79
- }
79
+ },
80
+ "gitHead": "95176e8e91454bbcc717225bab8ec132729da983"
80
81
  }
@@ -30,6 +30,19 @@ const BASE_INIT = {
30
30
  },
31
31
  }
32
32
 
33
+ // Accounts already warned that they rely on public `NL` fields. The commerce
34
+ // client is created per request, so the warning is kept once per account
35
+ // instead of per instance, to avoid flooding the logs. The account comes from
36
+ // the store's API options, not from the request, so the set holds at most one
37
+ // entry per account the process is configured for (usually one). It's still
38
+ // capped, so it can't grow without bound if that ever changes.
39
+ const MAX_WARNED_NEWSLETTER_ACCOUNTS = 100
40
+ const accountsWarnedAboutAnonymousNewsletter = new Set<string>()
41
+
42
+ /** Test-only: forget which accounts were warned about the anonymous fallback. */
43
+ export const resetAnonymousNewsletterWarnings = () =>
44
+ accountsWarnedAboutAnonymousNewsletter.clear()
45
+
33
46
  export const VtexCommerce = (
34
47
  { account, environment, incrementAddress }: Options,
35
48
  ctx: Context
@@ -345,15 +358,73 @@ export const VtexCommerce = (
345
358
  { storeCookies }
346
359
  )
347
360
  },
348
- subscribeToNewsletter: (data: {
349
- name: string
361
+ /**
362
+ * Creates a newsletter subscription in the `NL` Master Data entity.
363
+ *
364
+ * With `FS_NEWSLETTER_APP_KEY`/`FS_NEWSLETTER_APP_TOKEN` set, the document is
365
+ * created with a `POST` authenticated by that dedicated key, so `NL` fields
366
+ * can stay private. The request is create-only: the body is built here from
367
+ * the validated fields and never carries a document id, so the caller can't
368
+ * reach an existing record.
369
+ *
370
+ * Without the credentials, it falls back to the legacy anonymous `PATCH`,
371
+ * which only works while `NL` fields are public.
372
+ */
373
+ subscribeToNewsletter: ({
374
+ name,
375
+ email,
376
+ }: {
377
+ name?: string
350
378
  email: string
351
379
  }): Promise<MasterDataResponse> => {
380
+ const body = JSON.stringify({
381
+ ...(name ? { name } : {}),
382
+ email,
383
+ isNewsletterOptIn: true,
384
+ })
385
+ const appKey = process.env.FS_NEWSLETTER_APP_KEY
386
+ const appToken = process.env.FS_NEWSLETTER_APP_TOKEN
387
+
388
+ if (appKey && appToken) {
389
+ return fetchAPI(`${base}/api/dataentities/NL/documents`, {
390
+ method: 'POST',
391
+ headers: {
392
+ 'content-type': 'application/json',
393
+ accept: 'application/json',
394
+ 'X-VTEX-API-AppKey': appKey,
395
+ 'X-VTEX-API-AppToken': appToken,
396
+ },
397
+ body,
398
+ })
399
+ }
400
+
401
+ if (!accountsWarnedAboutAnonymousNewsletter.has(account)) {
402
+ if (
403
+ accountsWarnedAboutAnonymousNewsletter.size >=
404
+ MAX_WARNED_NEWSLETTER_ACCOUNTS
405
+ ) {
406
+ accountsWarnedAboutAnonymousNewsletter.clear()
407
+ }
408
+ accountsWarnedAboutAnonymousNewsletter.add(account)
409
+
410
+ // Name only the missing variables, so a partial setup is easy to spot.
411
+ const missing = [
412
+ !appKey && 'FS_NEWSLETTER_APP_KEY',
413
+ !appToken && 'FS_NEWSLETTER_APP_TOKEN',
414
+ ].filter(Boolean)
415
+
416
+ console.warn(
417
+ `[subscribeToNewsletter] ${missing.join(' and ')} ${
418
+ missing.length > 1 ? 'are' : 'is'
419
+ } not set. Falling back to an anonymous Master Data request, which requires public fields in the NL entity. Configure both credentials and make the NL fields private.`
420
+ )
421
+ }
422
+
352
423
  return fetchAPI(
353
424
  `${base}/api/dataentities/NL/documents/`,
354
425
  {
355
426
  ...BASE_INIT,
356
- body: JSON.stringify({ ...data, isNewsletterOptIn: true }),
427
+ body,
357
428
  method: 'PATCH',
358
429
  },
359
430
  { storeCookies }
@@ -7,6 +7,41 @@ interface FetchAPIOptions {
7
7
  storeCookies?: (headers: Headers) => void
8
8
  }
9
9
 
10
+ // Headers that may carry credentials: store API keys (`X-VTEX-API-AppKey`,
11
+ // `X-VTEX-API-AppToken`), shopper cookies (`Cookie`, `Set-Cookie`,
12
+ // `VtexIdclientAutCookie_*`), `Authorization`, and generic token, secret or
13
+ // API key headers. They are replaced before a failed request and its response
14
+ // are logged. Matched by substring so new credential headers are covered too.
15
+ const SENSITIVE_HEADER = /authorization|cookie|token|secret|api-?key|appkey/i
16
+
17
+ const REDACTED = '[redacted]'
18
+
19
+ export const redactHeaders = (
20
+ headers?: HeadersInit
21
+ ): Record<string, string> | undefined => {
22
+ if (!headers) {
23
+ return undefined
24
+ }
25
+
26
+ const redacted: Record<string, string> = {}
27
+ const add = (name: string, value: string) => {
28
+ redacted[name] = SENSITIVE_HEADER.test(name) ? REDACTED : value
29
+ }
30
+
31
+ if (Array.isArray(headers)) {
32
+ headers.forEach(([name, value]) => add(name, value))
33
+ } else if (typeof (headers as Headers).forEach === 'function') {
34
+ // Matches both the global `Headers` and the polyfill returned by
35
+ // `isomorphic-unfetch` on Node, which isn't an instance of the global one.
36
+ const headerList = headers as Headers
37
+ headerList.forEach((value, name) => add(name, value))
38
+ } else {
39
+ Object.entries(headers).forEach(([name, value]) => add(name, value))
40
+ }
41
+
42
+ return redacted
43
+ }
44
+
10
45
  export const fetchAPI = async (
11
46
  info: RequestInfo,
12
47
  init?: RequestInit,
@@ -28,7 +63,23 @@ export const fetchAPI = async (
28
63
  return response.status !== 204 ? response.json() : undefined
29
64
  }
30
65
 
31
- console.error(info, init, response)
66
+ // Log a summary instead of the raw Response, whose headers may include
67
+ // `Set-Cookie` with shopper credentials. The request body is omitted because
68
+ // it can carry personal data (e.g. the newsletter email and name).
69
+ console.error(
70
+ // Only the URL: a `Request` instance could carry unredacted headers.
71
+ typeof info === 'string' ? info : info.url,
72
+ init && {
73
+ ...init,
74
+ headers: redactHeaders(init.headers),
75
+ body: init.body ? REDACTED : undefined,
76
+ },
77
+ {
78
+ status: response.status,
79
+ statusText: response.statusText,
80
+ headers: redactHeaders(response.headers),
81
+ }
82
+ )
32
83
  const text = await response.text()
33
84
 
34
85
  throw new Error(text)
@@ -3,12 +3,38 @@ import type {
3
3
  MutationSubscribeToNewsletterArgs,
4
4
  PersonNewsletter,
5
5
  } from '../../../__generated__/schema'
6
+ import { BadRequestError } from '../../errors'
7
+
8
+ const EMAIL_MAX_LENGTH = 254
9
+ const NAME_MAX_LENGTH = 100
10
+ // Character classes exclude `.`, so each domain label is matched once and the
11
+ // pattern stays linear on long inputs.
12
+ const EMAIL_PATTERN = /^[^\s@]+@[^\s@.]+(\.[^\s@.]+)+$/
6
13
 
7
14
  export const subscribeToNewsletter = async (
8
15
  _: any,
9
16
  { data }: MutationSubscribeToNewsletterArgs,
10
17
  { clients: { commerce } }: Context
11
18
  ): Promise<PersonNewsletter | null> => {
12
- const response = await commerce.subscribeToNewsletter(data)
19
+ // The subscription is written with a store credential, so only validated
20
+ // values reach Master Data.
21
+ const email = data.email?.trim().toLowerCase() ?? ''
22
+ const name = data.name?.trim() ?? ''
23
+
24
+ if (email.length > EMAIL_MAX_LENGTH || !EMAIL_PATTERN.test(email)) {
25
+ throw new BadRequestError('Invalid email')
26
+ }
27
+
28
+ if (name.length > NAME_MAX_LENGTH) {
29
+ throw new BadRequestError(
30
+ `Invalid name: must have at most ${NAME_MAX_LENGTH} characters`
31
+ )
32
+ }
33
+
34
+ const response = await commerce.subscribeToNewsletter({
35
+ email,
36
+ name: name || undefined,
37
+ })
38
+
13
39
  return { id: response?.Id }
14
40
  }
@@ -1 +0,0 @@
1
- export declare const withTax: (price: number, tax?: number, unitMultiplier?: number) => number;
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.withTax = void 0;
4
- const withTax = (price, tax = 0, unitMultiplier = 1) => {
5
- const unitTax = tax / unitMultiplier;
6
- return Math.round((price + unitTax) * 100) / 100;
7
- };
8
- exports.withTax = withTax;
9
- //# sourceMappingURL=taxes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taxes.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/utils/taxes.ts"],"names":[],"mappings":";;;AAAO,MAAM,OAAO,GAAG,CACrB,KAAa,EACb,MAAc,CAAC,EACf,iBAAyB,CAAC,EAC1B,EAAE;IACF,MAAM,OAAO,GAAG,GAAG,GAAG,cAAc,CAAA;IAEpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AAClD,CAAC,CAAA;AARY,QAAA,OAAO,WAQnB"}
@@ -1 +0,0 @@
1
- export declare const withTax: (price: number, tax?: number, unitMultiplier?: number) => number;
@@ -1,5 +0,0 @@
1
- export const withTax = (price, tax = 0, unitMultiplier = 1) => {
2
- const unitTax = tax / unitMultiplier;
3
- return Math.round((price + unitTax) * 100) / 100;
4
- };
5
- //# sourceMappingURL=taxes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taxes.js","sourceRoot":"","sources":["../../../../../../src/platforms/vtex/utils/taxes.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,KAAa,EACb,MAAc,CAAC,EACf,iBAAyB,CAAC,EAC1B,EAAE;IACF,MAAM,OAAO,GAAG,GAAG,GAAG,cAAc,CAAA;IAEpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;AAClD,CAAC,CAAA"}