@stackframe/stack 2.6.17 → 2.6.20
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/CHANGELOG.md +30 -0
- package/dist/components-page/account-settings.js +4 -4
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/stack-handler.d.mts +13 -7
- package/dist/components-page/stack-handler.d.ts +13 -7
- package/dist/components-page/stack-handler.js +146 -126
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +4 -4
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +148 -128
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/generated/quetzal-translations.js +36 -36
- package/dist/esm/generated/quetzal-translations.js.map +1 -1
- package/dist/esm/lib/cookie.js +118 -41
- package/dist/esm/lib/cookie.js.map +1 -1
- package/dist/esm/lib/stack-app.js +123 -99
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/generated/quetzal-translations.d.mts +2 -2
- package/dist/generated/quetzal-translations.d.ts +2 -2
- package/dist/generated/quetzal-translations.js +36 -36
- package/dist/generated/quetzal-translations.js.map +1 -1
- package/dist/lib/cookie.d.mts +21 -5
- package/dist/lib/cookie.d.ts +21 -5
- package/dist/lib/cookie.js +125 -42
- package/dist/lib/cookie.js.map +1 -1
- package/dist/lib/stack-app.d.mts +3 -4
- package/dist/lib/stack-app.d.ts +3 -4
- package/dist/lib/stack-app.js +122 -98
- package/dist/lib/stack-app.js.map +1 -1
- package/package.json +20 -9
package/dist/esm/lib/cookie.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// src/lib/cookie.ts
|
|
2
2
|
import { cookies as rscCookies, headers as rscHeaders } from "@stackframe/stack-sc/force-react-server";
|
|
3
|
+
import { isBrowserLike } from "@stackframe/stack-shared/dist/utils/env";
|
|
4
|
+
import { StackAssertionError } from "@stackframe/stack-shared/dist/utils/errors";
|
|
3
5
|
import Cookies from "js-cookie";
|
|
4
6
|
|
|
5
7
|
// ../../node_modules/.pnpm/oauth4webapi@2.10.4/node_modules/oauth4webapi/build/index.js
|
|
@@ -130,81 +132,156 @@ var skipStateCheck = Symbol();
|
|
|
130
132
|
var expectNoState = Symbol();
|
|
131
133
|
|
|
132
134
|
// src/lib/cookie.ts
|
|
133
|
-
function
|
|
134
|
-
if (
|
|
135
|
-
|
|
136
|
-
return Cookies.get(name) ?? null;
|
|
137
|
-
} else {
|
|
138
|
-
try {
|
|
139
|
-
rscCookies().set("stack-is-https", "true", { secure: true });
|
|
140
|
-
} catch (e) {
|
|
141
|
-
if (typeof e === "object" && e !== null && "message" in e && typeof e.message === "string" && e.message.includes("Cookies can only be modified in a Server Action or Route Handler")) {
|
|
142
|
-
} else {
|
|
143
|
-
throw e;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return rscCookies().get(name)?.value ?? null;
|
|
135
|
+
function ensureClient() {
|
|
136
|
+
if (!isBrowserLike()) {
|
|
137
|
+
throw new Error("cookieClient functions can only be called in a browser environment, yet window is undefined");
|
|
147
138
|
}
|
|
148
139
|
}
|
|
149
|
-
function
|
|
150
|
-
if (
|
|
151
|
-
|
|
140
|
+
async function createCookieHelper() {
|
|
141
|
+
if (isBrowserLike()) {
|
|
142
|
+
return createBrowserCookieHelper();
|
|
152
143
|
} else {
|
|
153
|
-
|
|
144
|
+
return createNextCookieHelper(
|
|
145
|
+
await rscCookies(),
|
|
146
|
+
await rscHeaders()
|
|
147
|
+
);
|
|
154
148
|
}
|
|
155
149
|
}
|
|
156
|
-
function
|
|
157
|
-
|
|
158
|
-
|
|
150
|
+
function createBrowserCookieHelper() {
|
|
151
|
+
return {
|
|
152
|
+
get: getCookieClient,
|
|
153
|
+
set: setCookieClient,
|
|
154
|
+
setOrDelete: setOrDeleteCookieClient,
|
|
155
|
+
delete: deleteCookieClient
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function handleCookieError(e, options) {
|
|
159
|
+
if (e instanceof Error && e.message.includes("Cookies can only be modified in")) {
|
|
160
|
+
if (options.noOpIfServerComponent) {
|
|
161
|
+
} else {
|
|
162
|
+
throw new StackAssertionError("Attempted to set cookie in server component. Pass { noOpIfServerComponent: true } in the options of Stack's cookie functions if this is intentional and you want to ignore this error. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options");
|
|
163
|
+
}
|
|
159
164
|
} else {
|
|
160
|
-
|
|
165
|
+
throw e;
|
|
161
166
|
}
|
|
162
167
|
}
|
|
163
|
-
function
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
function createNextCookieHelper(rscCookiesAwaited, rscHeadersAwaited) {
|
|
169
|
+
const cookieHelper = {
|
|
170
|
+
get: (name) => {
|
|
171
|
+
try {
|
|
172
|
+
rscCookiesAwaited.set("stack-is-https", "true", { secure: true });
|
|
173
|
+
} catch (e) {
|
|
174
|
+
if (typeof e === "object" && e !== null && "message" in e && typeof e.message === "string" && e.message.includes("Cookies can only be modified in a Server Action or Route Handler")) {
|
|
175
|
+
} else {
|
|
176
|
+
throw e;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return rscCookiesAwaited.get(name)?.value ?? null;
|
|
180
|
+
},
|
|
181
|
+
set: (name, value, options) => {
|
|
182
|
+
let isSecureCookie = !!rscCookiesAwaited.get("stack-is-https");
|
|
183
|
+
if (rscHeadersAwaited.get("x-forwarded-proto") === "https") {
|
|
184
|
+
isSecureCookie = true;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
rscCookiesAwaited.set(name, value, {
|
|
188
|
+
secure: isSecureCookie,
|
|
189
|
+
maxAge: options.maxAge
|
|
190
|
+
});
|
|
191
|
+
} catch (e) {
|
|
192
|
+
handleCookieError(e, options);
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
setOrDelete(name, value, options = {}) {
|
|
196
|
+
if (value === null) {
|
|
197
|
+
this.delete(name, options);
|
|
198
|
+
} else {
|
|
199
|
+
this.set(name, value, options);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
delete(name, options = {}) {
|
|
203
|
+
try {
|
|
204
|
+
rscCookiesAwaited.delete(name);
|
|
205
|
+
} catch (e) {
|
|
206
|
+
handleCookieError(e, options);
|
|
207
|
+
}
|
|
174
208
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
209
|
+
};
|
|
210
|
+
return cookieHelper;
|
|
211
|
+
}
|
|
212
|
+
function getCookieClient(name) {
|
|
213
|
+
ensureClient();
|
|
214
|
+
Cookies.set("stack-is-https", "true", { secure: true });
|
|
215
|
+
return Cookies.get(name) ?? null;
|
|
216
|
+
}
|
|
217
|
+
async function getCookie(name) {
|
|
218
|
+
const cookieHelper = await createCookieHelper();
|
|
219
|
+
return cookieHelper.get(name);
|
|
220
|
+
}
|
|
221
|
+
function setOrDeleteCookieClient(name, value, options = {}) {
|
|
222
|
+
ensureClient();
|
|
223
|
+
if (value === null) {
|
|
224
|
+
deleteCookieClient(name, options);
|
|
225
|
+
} else {
|
|
226
|
+
setCookieClient(name, value, options);
|
|
179
227
|
}
|
|
180
228
|
}
|
|
229
|
+
async function setOrDeleteCookie(name, value, options = {}) {
|
|
230
|
+
const cookieHelper = await createCookieHelper();
|
|
231
|
+
cookieHelper.setOrDelete(name, value, options);
|
|
232
|
+
}
|
|
233
|
+
function deleteCookieClient(name, options = {}) {
|
|
234
|
+
ensureClient();
|
|
235
|
+
Cookies.remove(name);
|
|
236
|
+
}
|
|
237
|
+
async function deleteCookie(name, options = {}) {
|
|
238
|
+
const cookieHelper = await createCookieHelper();
|
|
239
|
+
cookieHelper.delete(name, options);
|
|
240
|
+
}
|
|
241
|
+
function setCookieClient(name, value, options = {}) {
|
|
242
|
+
ensureClient();
|
|
243
|
+
Cookies.set(name, value, {
|
|
244
|
+
expires: options.maxAge === void 0 ? void 0 : new Date(Date.now() + options.maxAge * 1e3)
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
async function setCookie(name, value, options = {}) {
|
|
248
|
+
const cookieHelper = await createCookieHelper();
|
|
249
|
+
cookieHelper.set(name, value, options);
|
|
250
|
+
}
|
|
181
251
|
async function saveVerifierAndState() {
|
|
182
252
|
const codeVerifier = generateRandomCodeVerifier();
|
|
183
253
|
const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
|
184
254
|
const state = generateRandomState();
|
|
185
|
-
setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
255
|
+
await setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
186
256
|
return {
|
|
187
257
|
codeChallenge,
|
|
188
258
|
state
|
|
189
259
|
};
|
|
190
260
|
}
|
|
191
261
|
function consumeVerifierAndStateCookie(state) {
|
|
262
|
+
ensureClient();
|
|
192
263
|
const cookieName = "stack-oauth-outer-" + state;
|
|
193
|
-
const codeVerifier =
|
|
264
|
+
const codeVerifier = getCookieClient(cookieName);
|
|
194
265
|
if (!codeVerifier) {
|
|
195
266
|
return null;
|
|
196
267
|
}
|
|
197
|
-
|
|
268
|
+
deleteCookieClient(cookieName);
|
|
198
269
|
return {
|
|
199
270
|
codeVerifier
|
|
200
271
|
};
|
|
201
272
|
}
|
|
202
273
|
export {
|
|
203
274
|
consumeVerifierAndStateCookie,
|
|
275
|
+
createBrowserCookieHelper,
|
|
276
|
+
createCookieHelper,
|
|
204
277
|
deleteCookie,
|
|
278
|
+
deleteCookieClient,
|
|
205
279
|
getCookie,
|
|
280
|
+
getCookieClient,
|
|
206
281
|
saveVerifierAndState,
|
|
207
282
|
setCookie,
|
|
208
|
-
|
|
283
|
+
setCookieClient,
|
|
284
|
+
setOrDeleteCookie,
|
|
285
|
+
setOrDeleteCookieClient
|
|
209
286
|
};
|
|
210
287
|
//# sourceMappingURL=cookie.js.map
|