Skip to content

Commit aa9e8a9

Browse files
authored
feat: add cookieOptions option to config (#1557)
1 parent add8469 commit aa9e8a9

File tree

5 files changed

+115
-36
lines changed

5 files changed

+115
-36
lines changed

.changeset/ninety-parrots-mate.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
"@vue-storefront/magento-api": minor
3+
---
4+
5+
**[ADDED]** `cookieOptions` config. This option allows you to customize the cookie options which are set for a given cookie name.
6+
7+
Example:
8+
```
9+
{
10+
integrations: {
11+
magento: {
12+
location: "@vue-storefront/magento-api/server",
13+
configuration: {
14+
// ...
15+
cookieOptions: {
16+
"vsf-customer": {
17+
secure: process.env.NODE_ENV === 'production',
18+
sameSite: process.env.NODE_ENV === 'production' ? 'none' : 'strict',
19+
}
20+
}
21+
},
22+
},
23+
},
24+
}
25+
```

packages/api-client/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"@graphql-codegen/typescript-operations": "^2.2.3",
3939
"@graphql-tools/utils": "^8.6.1",
4040
"@rollup/plugin-json": "^6.0.0",
41+
"@types/express": "^4.17.17",
4142
"@types/graphql": "^14.5.0",
4243
"@types/isomorphic-fetch": "^0.0.36",
4344
"cross-fetch": "^3.1.5",

packages/api-client/src/index.server.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
/* istanbul ignore file */
22
import { ApiClientExtension, apiClientFactory } from "@vue-storefront/middleware";
33
import * as api from "./api";
4-
import { ClientInstance, Config } from "./types/setup";
5-
import { createMagentoConnection } from "./helpers/magentoLink";
64
import { defaultSettings } from "./helpers/apiClient/defaultSettings";
5+
import { createMagentoConnection } from "./helpers/magentoLink";
76
import { apolloClientFactory } from "./helpers/magentoLink/graphQl";
7+
import { ClientInstance, Config } from "./types/setup";
88

99
const buildConfig = (settings: Config) =>
1010
({
@@ -65,12 +65,16 @@ const onCreate = (settings: Config): { config: Config; client: ClientInstance }
6565
const tokenExtension: ApiClientExtension = {
6666
name: "tokenExtension",
6767
hooks: (req, res) => ({
68-
beforeCreate: ({ configuration }) => {
68+
beforeCreate: ({ configuration }: { configuration: Config }) => {
6969
const cartCookieName: string = configuration.cookies?.cartCookieName || defaultSettings.cookies.cartCookieName;
7070
const customerCookieName: string = configuration.cookies?.customerCookieName || defaultSettings.cookies.customerCookieName;
7171
const storeCookieName: string = configuration.cookies?.storeCookieName || defaultSettings.cookies.storeCookieName;
7272
const currencyCookieName: string = configuration.cookies?.currencyCookieName || defaultSettings.cookies.currencyCookieName;
7373

74+
function setCookie(name: string, value: string) {
75+
res.cookie(name, value, configuration.cookieOptions?.[name]);
76+
}
77+
7478
return {
7579
...configuration,
7680
state: {
@@ -81,7 +85,7 @@ const tokenExtension: ApiClientExtension = {
8185
delete req.cookies[cartCookieName];
8286
return;
8387
}
84-
res.cookie(cartCookieName, JSON.stringify(id));
88+
setCookie(cartCookieName, JSON.stringify(id));
8589
},
8690
getCustomerToken: () => req.cookies[customerCookieName],
8791
setCustomerToken: (token) => {
@@ -90,16 +94,16 @@ const tokenExtension: ApiClientExtension = {
9094
delete req.cookies[customerCookieName];
9195
return;
9296
}
93-
res.cookie(customerCookieName, JSON.stringify(token));
97+
setCookie(customerCookieName, JSON.stringify(token));
9498
},
95-
getStore: () => configuration?.storeViewCode ?? req.cookies[storeCookieName],
99+
getStore: () => (configuration as any)?.storeViewCode ?? req.cookies[storeCookieName],
96100
setStore: (id) => {
97101
if (!id) {
98102
// eslint-disable-next-line no-param-reassign
99103
delete req.cookies[storeCookieName];
100104
return;
101105
}
102-
res.cookie(storeCookieName, JSON.stringify(id));
106+
setCookie(storeCookieName, JSON.stringify(id));
103107
},
104108
getCurrency: () => req.cookies[currencyCookieName],
105109
setCurrency: (id) => {
@@ -108,7 +112,7 @@ const tokenExtension: ApiClientExtension = {
108112
delete req.cookies[currencyCookieName];
109113
return;
110114
}
111-
res.cookie(currencyCookieName, JSON.stringify(id));
115+
setCookie(currencyCookieName, JSON.stringify(id));
112116
},
113117
},
114118
};

packages/api-client/src/types/setup.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { ApolloClient, ApolloClientOptions } from "@apollo/client/core";
22
import { HttpOptions } from "@apollo/client/link/http/selectHttpOptionsAndBody";
3+
import type { CookieOptions } from "express";
34
import { Endpoints } from "./api";
45

56
export interface Storage {
@@ -100,6 +101,7 @@ export interface Config<T = any> extends ClientConfig {
100101
recaptcha: RecaptchaConfig;
101102
imageProvider: string;
102103
magentoBaseUrl: string;
104+
cookieOptions?: Record<string, CookieOptions>;
103105
}
104106

105107
export type ClientInstance = ApolloClient<any>;

yarn.lock

Lines changed: 75 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1932,6 +1932,21 @@
19321932
dependencies:
19331933
"@babel/types" "^7.20.7"
19341934

1935+
"@types/body-parser@*":
1936+
version "1.19.5"
1937+
resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
1938+
integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==
1939+
dependencies:
1940+
"@types/connect" "*"
1941+
"@types/node" "*"
1942+
1943+
"@types/connect@*":
1944+
version "3.4.38"
1945+
resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858"
1946+
integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==
1947+
dependencies:
1948+
"@types/node" "*"
1949+
19351950
"@types/cookie@^0.4.1":
19361951
version "0.4.1"
19371952
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
@@ -1947,6 +1962,26 @@
19471962
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
19481963
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
19491964

1965+
"@types/express-serve-static-core@^4.17.33":
1966+
version "4.19.6"
1967+
resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267"
1968+
integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==
1969+
dependencies:
1970+
"@types/node" "*"
1971+
"@types/qs" "*"
1972+
"@types/range-parser" "*"
1973+
"@types/send" "*"
1974+
1975+
"@types/express@^4.17.17":
1976+
version "4.17.21"
1977+
resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d"
1978+
integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==
1979+
dependencies:
1980+
"@types/body-parser" "*"
1981+
"@types/express-serve-static-core" "^4.17.33"
1982+
"@types/qs" "*"
1983+
"@types/serve-static" "*"
1984+
19501985
"@types/graceful-fs@^4.1.3":
19511986
version "4.1.6"
19521987
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae"
@@ -1961,6 +1996,11 @@
19611996
dependencies:
19621997
graphql "*"
19631998

1999+
"@types/http-errors@*":
2000+
version "2.0.4"
2001+
resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
2002+
integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
2003+
19642004
"@types/is-ci@^3.0.0":
19652005
version "3.0.0"
19662006
resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.0.tgz#7e8910af6857601315592436f030aaa3ed9783c3"
@@ -2030,6 +2070,11 @@
20302070
resolved "https://registry.yarnpkg.com/@types/k6/-/k6-0.37.1.tgz#e8db6269307ad73d4a6d710a5762818bb6149e85"
20312071
integrity sha512-+FksZAlA+JnDYgOiElQa7+KlUGmzoElRNqRnGB4ICPHbBR6EIqcl81Tdhe1b9dT8M2QVTtQY7++FTHNpIQVFMg==
20322072

2073+
"@types/mime@^1":
2074+
version "1.3.5"
2075+
resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
2076+
integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
2077+
20332078
"@types/minimist@^1.2.0":
20342079
version "1.2.2"
20352080
resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
@@ -2060,6 +2105,16 @@
20602105
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f"
20612106
integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
20622107

2108+
"@types/qs@*":
2109+
version "6.9.17"
2110+
resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a"
2111+
integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==
2112+
2113+
"@types/range-parser@*":
2114+
version "1.2.7"
2115+
resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb"
2116+
integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==
2117+
20632118
20642119
version "1.17.1"
20652120
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
@@ -2072,6 +2127,23 @@
20722127
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
20732128
integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
20742129

2130+
"@types/send@*":
2131+
version "0.17.4"
2132+
resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a"
2133+
integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
2134+
dependencies:
2135+
"@types/mime" "^1"
2136+
"@types/node" "*"
2137+
2138+
"@types/serve-static@*":
2139+
version "1.15.7"
2140+
resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714"
2141+
integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==
2142+
dependencies:
2143+
"@types/http-errors" "*"
2144+
"@types/node" "*"
2145+
"@types/send" "*"
2146+
20752147
"@types/set-cookie-parser@^2.4.0":
20762148
version "2.4.2"
20772149
resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad"
@@ -7164,16 +7236,7 @@ string-length@^4.0.1:
71647236
char-regex "^1.0.2"
71657237
strip-ansi "^6.0.0"
71667238

7167-
"string-width-cjs@npm:string-width@^4.2.0":
7168-
version "4.2.3"
7169-
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
7170-
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
7171-
dependencies:
7172-
emoji-regex "^8.0.0"
7173-
is-fullwidth-code-point "^3.0.0"
7174-
strip-ansi "^6.0.1"
7175-
7176-
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
7239+
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
71777240
version "4.2.3"
71787241
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
71797242
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -7225,14 +7288,7 @@ string_decoder@^1.1.1:
72257288
dependencies:
72267289
safe-buffer "~5.2.0"
72277290

7228-
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
7229-
version "6.0.1"
7230-
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
7231-
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
7232-
dependencies:
7233-
ansi-regex "^5.0.1"
7234-
7235-
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
7291+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
72367292
version "6.0.1"
72377293
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
72387294
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -7835,7 +7891,7 @@ wordwrap@^1.0.0:
78357891
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
78367892
integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
78377893

7838-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
7894+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
78397895
version "7.0.0"
78407896
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
78417897
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -7853,15 +7909,6 @@ wrap-ansi@^6.2.0:
78537909
string-width "^4.1.0"
78547910
strip-ansi "^6.0.0"
78557911

7856-
wrap-ansi@^7.0.0:
7857-
version "7.0.0"
7858-
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
7859-
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
7860-
dependencies:
7861-
ansi-styles "^4.0.0"
7862-
string-width "^4.1.0"
7863-
strip-ansi "^6.0.0"
7864-
78657912
wrap-ansi@^8.1.0:
78667913
version "8.1.0"
78677914
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"

0 commit comments

Comments
 (0)