@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/lib/cookie.d.mts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
type SetCookieOptions = {
|
|
2
2
|
maxAge?: number;
|
|
3
|
+
noOpIfServerComponent?: boolean;
|
|
3
4
|
};
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
type DeleteCookieOptions = {
|
|
6
|
+
noOpIfServerComponent?: boolean;
|
|
7
|
+
};
|
|
8
|
+
type CookieHelper = {
|
|
9
|
+
get: (name: string) => string | null;
|
|
10
|
+
set: (name: string, value: string, options: SetCookieOptions) => void;
|
|
11
|
+
setOrDelete: (name: string, value: string | null, options: SetCookieOptions & DeleteCookieOptions) => void;
|
|
12
|
+
delete: (name: string, options: DeleteCookieOptions) => void;
|
|
13
|
+
};
|
|
14
|
+
declare function createCookieHelper(): Promise<CookieHelper>;
|
|
15
|
+
declare function createBrowserCookieHelper(): CookieHelper;
|
|
16
|
+
declare function getCookieClient(name: string): string | null;
|
|
17
|
+
declare function getCookie(name: string): Promise<string | null>;
|
|
18
|
+
declare function setOrDeleteCookieClient(name: string, value: string | null, options?: SetCookieOptions & DeleteCookieOptions): void;
|
|
19
|
+
declare function setOrDeleteCookie(name: string, value: string | null, options?: SetCookieOptions & DeleteCookieOptions): Promise<void>;
|
|
20
|
+
declare function deleteCookieClient(name: string, options?: DeleteCookieOptions): void;
|
|
21
|
+
declare function deleteCookie(name: string, options?: DeleteCookieOptions): Promise<void>;
|
|
22
|
+
declare function setCookieClient(name: string, value: string, options?: SetCookieOptions): void;
|
|
23
|
+
declare function setCookie(name: string, value: string, options?: SetCookieOptions): Promise<void>;
|
|
8
24
|
declare function saveVerifierAndState(): Promise<{
|
|
9
25
|
codeChallenge: string;
|
|
10
26
|
state: string;
|
|
@@ -13,4 +29,4 @@ declare function consumeVerifierAndStateCookie(state: string): {
|
|
|
13
29
|
codeVerifier: string;
|
|
14
30
|
} | null;
|
|
15
31
|
|
|
16
|
-
export { consumeVerifierAndStateCookie, deleteCookie, getCookie, saveVerifierAndState, setCookie, setOrDeleteCookie };
|
|
32
|
+
export { type CookieHelper, consumeVerifierAndStateCookie, createBrowserCookieHelper, createCookieHelper, deleteCookie, deleteCookieClient, getCookie, getCookieClient, saveVerifierAndState, setCookie, setCookieClient, setOrDeleteCookie, setOrDeleteCookieClient };
|
package/dist/lib/cookie.d.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
type SetCookieOptions = {
|
|
2
2
|
maxAge?: number;
|
|
3
|
+
noOpIfServerComponent?: boolean;
|
|
3
4
|
};
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
type DeleteCookieOptions = {
|
|
6
|
+
noOpIfServerComponent?: boolean;
|
|
7
|
+
};
|
|
8
|
+
type CookieHelper = {
|
|
9
|
+
get: (name: string) => string | null;
|
|
10
|
+
set: (name: string, value: string, options: SetCookieOptions) => void;
|
|
11
|
+
setOrDelete: (name: string, value: string | null, options: SetCookieOptions & DeleteCookieOptions) => void;
|
|
12
|
+
delete: (name: string, options: DeleteCookieOptions) => void;
|
|
13
|
+
};
|
|
14
|
+
declare function createCookieHelper(): Promise<CookieHelper>;
|
|
15
|
+
declare function createBrowserCookieHelper(): CookieHelper;
|
|
16
|
+
declare function getCookieClient(name: string): string | null;
|
|
17
|
+
declare function getCookie(name: string): Promise<string | null>;
|
|
18
|
+
declare function setOrDeleteCookieClient(name: string, value: string | null, options?: SetCookieOptions & DeleteCookieOptions): void;
|
|
19
|
+
declare function setOrDeleteCookie(name: string, value: string | null, options?: SetCookieOptions & DeleteCookieOptions): Promise<void>;
|
|
20
|
+
declare function deleteCookieClient(name: string, options?: DeleteCookieOptions): void;
|
|
21
|
+
declare function deleteCookie(name: string, options?: DeleteCookieOptions): Promise<void>;
|
|
22
|
+
declare function setCookieClient(name: string, value: string, options?: SetCookieOptions): void;
|
|
23
|
+
declare function setCookie(name: string, value: string, options?: SetCookieOptions): Promise<void>;
|
|
8
24
|
declare function saveVerifierAndState(): Promise<{
|
|
9
25
|
codeChallenge: string;
|
|
10
26
|
state: string;
|
|
@@ -13,4 +29,4 @@ declare function consumeVerifierAndStateCookie(state: string): {
|
|
|
13
29
|
codeVerifier: string;
|
|
14
30
|
} | null;
|
|
15
31
|
|
|
16
|
-
export { consumeVerifierAndStateCookie, deleteCookie, getCookie, saveVerifierAndState, setCookie, setOrDeleteCookie };
|
|
32
|
+
export { type CookieHelper, consumeVerifierAndStateCookie, createBrowserCookieHelper, createCookieHelper, deleteCookie, deleteCookieClient, getCookie, getCookieClient, saveVerifierAndState, setCookie, setCookieClient, setOrDeleteCookie, setOrDeleteCookieClient };
|
package/dist/lib/cookie.js
CHANGED
|
@@ -31,14 +31,22 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
31
31
|
var cookie_exports = {};
|
|
32
32
|
__export(cookie_exports, {
|
|
33
33
|
consumeVerifierAndStateCookie: () => consumeVerifierAndStateCookie,
|
|
34
|
+
createBrowserCookieHelper: () => createBrowserCookieHelper,
|
|
35
|
+
createCookieHelper: () => createCookieHelper,
|
|
34
36
|
deleteCookie: () => deleteCookie,
|
|
37
|
+
deleteCookieClient: () => deleteCookieClient,
|
|
35
38
|
getCookie: () => getCookie,
|
|
39
|
+
getCookieClient: () => getCookieClient,
|
|
36
40
|
saveVerifierAndState: () => saveVerifierAndState,
|
|
37
41
|
setCookie: () => setCookie,
|
|
38
|
-
|
|
42
|
+
setCookieClient: () => setCookieClient,
|
|
43
|
+
setOrDeleteCookie: () => setOrDeleteCookie,
|
|
44
|
+
setOrDeleteCookieClient: () => setOrDeleteCookieClient
|
|
39
45
|
});
|
|
40
46
|
module.exports = __toCommonJS(cookie_exports);
|
|
41
47
|
var import_force_react_server = require("@stackframe/stack-sc/force-react-server");
|
|
48
|
+
var import_env = require("@stackframe/stack-shared/dist/utils/env");
|
|
49
|
+
var import_errors = require("@stackframe/stack-shared/dist/utils/errors");
|
|
42
50
|
var import_js_cookie = __toESM(require("js-cookie"));
|
|
43
51
|
|
|
44
52
|
// ../../node_modules/.pnpm/oauth4webapi@2.10.4/node_modules/oauth4webapi/build/index.js
|
|
@@ -169,71 +177,140 @@ var skipStateCheck = Symbol();
|
|
|
169
177
|
var expectNoState = Symbol();
|
|
170
178
|
|
|
171
179
|
// src/lib/cookie.ts
|
|
172
|
-
function
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
return import_js_cookie.default.get(name) ?? null;
|
|
176
|
-
} else {
|
|
177
|
-
try {
|
|
178
|
-
(0, import_force_react_server.cookies)().set("stack-is-https", "true", { secure: true });
|
|
179
|
-
} catch (e) {
|
|
180
|
-
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")) {
|
|
181
|
-
} else {
|
|
182
|
-
throw e;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return (0, import_force_react_server.cookies)().get(name)?.value ?? null;
|
|
180
|
+
function ensureClient() {
|
|
181
|
+
if (!(0, import_env.isBrowserLike)()) {
|
|
182
|
+
throw new Error("cookieClient functions can only be called in a browser environment, yet window is undefined");
|
|
186
183
|
}
|
|
187
184
|
}
|
|
188
|
-
function
|
|
189
|
-
if (
|
|
190
|
-
|
|
185
|
+
async function createCookieHelper() {
|
|
186
|
+
if ((0, import_env.isBrowserLike)()) {
|
|
187
|
+
return createBrowserCookieHelper();
|
|
191
188
|
} else {
|
|
192
|
-
|
|
189
|
+
return createNextCookieHelper(
|
|
190
|
+
await (0, import_force_react_server.cookies)(),
|
|
191
|
+
await (0, import_force_react_server.headers)()
|
|
192
|
+
);
|
|
193
193
|
}
|
|
194
194
|
}
|
|
195
|
-
function
|
|
196
|
-
|
|
197
|
-
|
|
195
|
+
function createBrowserCookieHelper() {
|
|
196
|
+
return {
|
|
197
|
+
get: getCookieClient,
|
|
198
|
+
set: setCookieClient,
|
|
199
|
+
setOrDelete: setOrDeleteCookieClient,
|
|
200
|
+
delete: deleteCookieClient
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function handleCookieError(e, options) {
|
|
204
|
+
if (e instanceof Error && e.message.includes("Cookies can only be modified in")) {
|
|
205
|
+
if (options.noOpIfServerComponent) {
|
|
206
|
+
} else {
|
|
207
|
+
throw new import_errors.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");
|
|
208
|
+
}
|
|
198
209
|
} else {
|
|
199
|
-
|
|
210
|
+
throw e;
|
|
200
211
|
}
|
|
201
212
|
}
|
|
202
|
-
function
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
+
function createNextCookieHelper(rscCookiesAwaited, rscHeadersAwaited) {
|
|
214
|
+
const cookieHelper = {
|
|
215
|
+
get: (name) => {
|
|
216
|
+
try {
|
|
217
|
+
rscCookiesAwaited.set("stack-is-https", "true", { secure: true });
|
|
218
|
+
} catch (e) {
|
|
219
|
+
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")) {
|
|
220
|
+
} else {
|
|
221
|
+
throw e;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return rscCookiesAwaited.get(name)?.value ?? null;
|
|
225
|
+
},
|
|
226
|
+
set: (name, value, options) => {
|
|
227
|
+
let isSecureCookie = !!rscCookiesAwaited.get("stack-is-https");
|
|
228
|
+
if (rscHeadersAwaited.get("x-forwarded-proto") === "https") {
|
|
229
|
+
isSecureCookie = true;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
rscCookiesAwaited.set(name, value, {
|
|
233
|
+
secure: isSecureCookie,
|
|
234
|
+
maxAge: options.maxAge
|
|
235
|
+
});
|
|
236
|
+
} catch (e) {
|
|
237
|
+
handleCookieError(e, options);
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
setOrDelete(name, value, options = {}) {
|
|
241
|
+
if (value === null) {
|
|
242
|
+
this.delete(name, options);
|
|
243
|
+
} else {
|
|
244
|
+
this.set(name, value, options);
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
delete(name, options = {}) {
|
|
248
|
+
try {
|
|
249
|
+
rscCookiesAwaited.delete(name);
|
|
250
|
+
} catch (e) {
|
|
251
|
+
handleCookieError(e, options);
|
|
252
|
+
}
|
|
213
253
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
254
|
+
};
|
|
255
|
+
return cookieHelper;
|
|
256
|
+
}
|
|
257
|
+
function getCookieClient(name) {
|
|
258
|
+
ensureClient();
|
|
259
|
+
import_js_cookie.default.set("stack-is-https", "true", { secure: true });
|
|
260
|
+
return import_js_cookie.default.get(name) ?? null;
|
|
261
|
+
}
|
|
262
|
+
async function getCookie(name) {
|
|
263
|
+
const cookieHelper = await createCookieHelper();
|
|
264
|
+
return cookieHelper.get(name);
|
|
265
|
+
}
|
|
266
|
+
function setOrDeleteCookieClient(name, value, options = {}) {
|
|
267
|
+
ensureClient();
|
|
268
|
+
if (value === null) {
|
|
269
|
+
deleteCookieClient(name, options);
|
|
270
|
+
} else {
|
|
271
|
+
setCookieClient(name, value, options);
|
|
218
272
|
}
|
|
219
273
|
}
|
|
274
|
+
async function setOrDeleteCookie(name, value, options = {}) {
|
|
275
|
+
const cookieHelper = await createCookieHelper();
|
|
276
|
+
cookieHelper.setOrDelete(name, value, options);
|
|
277
|
+
}
|
|
278
|
+
function deleteCookieClient(name, options = {}) {
|
|
279
|
+
ensureClient();
|
|
280
|
+
import_js_cookie.default.remove(name);
|
|
281
|
+
}
|
|
282
|
+
async function deleteCookie(name, options = {}) {
|
|
283
|
+
const cookieHelper = await createCookieHelper();
|
|
284
|
+
cookieHelper.delete(name, options);
|
|
285
|
+
}
|
|
286
|
+
function setCookieClient(name, value, options = {}) {
|
|
287
|
+
ensureClient();
|
|
288
|
+
import_js_cookie.default.set(name, value, {
|
|
289
|
+
expires: options.maxAge === void 0 ? void 0 : new Date(Date.now() + options.maxAge * 1e3)
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async function setCookie(name, value, options = {}) {
|
|
293
|
+
const cookieHelper = await createCookieHelper();
|
|
294
|
+
cookieHelper.set(name, value, options);
|
|
295
|
+
}
|
|
220
296
|
async function saveVerifierAndState() {
|
|
221
297
|
const codeVerifier = generateRandomCodeVerifier();
|
|
222
298
|
const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
|
223
299
|
const state = generateRandomState();
|
|
224
|
-
setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
300
|
+
await setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
225
301
|
return {
|
|
226
302
|
codeChallenge,
|
|
227
303
|
state
|
|
228
304
|
};
|
|
229
305
|
}
|
|
230
306
|
function consumeVerifierAndStateCookie(state) {
|
|
307
|
+
ensureClient();
|
|
231
308
|
const cookieName = "stack-oauth-outer-" + state;
|
|
232
|
-
const codeVerifier =
|
|
309
|
+
const codeVerifier = getCookieClient(cookieName);
|
|
233
310
|
if (!codeVerifier) {
|
|
234
311
|
return null;
|
|
235
312
|
}
|
|
236
|
-
|
|
313
|
+
deleteCookieClient(cookieName);
|
|
237
314
|
return {
|
|
238
315
|
codeVerifier
|
|
239
316
|
};
|
|
@@ -241,10 +318,16 @@ function consumeVerifierAndStateCookie(state) {
|
|
|
241
318
|
// Annotate the CommonJS export names for ESM import in node:
|
|
242
319
|
0 && (module.exports = {
|
|
243
320
|
consumeVerifierAndStateCookie,
|
|
321
|
+
createBrowserCookieHelper,
|
|
322
|
+
createCookieHelper,
|
|
244
323
|
deleteCookie,
|
|
324
|
+
deleteCookieClient,
|
|
245
325
|
getCookie,
|
|
326
|
+
getCookieClient,
|
|
246
327
|
saveVerifierAndState,
|
|
247
328
|
setCookie,
|
|
248
|
-
|
|
329
|
+
setCookieClient,
|
|
330
|
+
setOrDeleteCookie,
|
|
331
|
+
setOrDeleteCookieClient
|
|
249
332
|
});
|
|
250
333
|
//# sourceMappingURL=cookie.js.map
|