@stackframe/stack 2.6.19 → 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 +10 -0
- 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/stack-handler.js +148 -128
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/generated/quetzal-translations.js +10 -10
- package/dist/esm/generated/quetzal-translations.js.map +1 -1
- package/dist/esm/lib/cookie.js +118 -40
- 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 +1 -1
- package/dist/generated/quetzal-translations.d.ts +1 -1
- package/dist/generated/quetzal-translations.js +10 -10
- 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 -41
- 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,70 +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
|
-
|
|
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
|
+
}
|
|
212
253
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
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);
|
|
217
272
|
}
|
|
218
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
|
+
}
|
|
219
296
|
async function saveVerifierAndState() {
|
|
220
297
|
const codeVerifier = generateRandomCodeVerifier();
|
|
221
298
|
const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
|
222
299
|
const state = generateRandomState();
|
|
223
|
-
setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
300
|
+
await setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
224
301
|
return {
|
|
225
302
|
codeChallenge,
|
|
226
303
|
state
|
|
227
304
|
};
|
|
228
305
|
}
|
|
229
306
|
function consumeVerifierAndStateCookie(state) {
|
|
307
|
+
ensureClient();
|
|
230
308
|
const cookieName = "stack-oauth-outer-" + state;
|
|
231
|
-
const codeVerifier =
|
|
309
|
+
const codeVerifier = getCookieClient(cookieName);
|
|
232
310
|
if (!codeVerifier) {
|
|
233
311
|
return null;
|
|
234
312
|
}
|
|
235
|
-
|
|
313
|
+
deleteCookieClient(cookieName);
|
|
236
314
|
return {
|
|
237
315
|
codeVerifier
|
|
238
316
|
};
|
|
@@ -240,10 +318,16 @@ function consumeVerifierAndStateCookie(state) {
|
|
|
240
318
|
// Annotate the CommonJS export names for ESM import in node:
|
|
241
319
|
0 && (module.exports = {
|
|
242
320
|
consumeVerifierAndStateCookie,
|
|
321
|
+
createBrowserCookieHelper,
|
|
322
|
+
createCookieHelper,
|
|
243
323
|
deleteCookie,
|
|
324
|
+
deleteCookieClient,
|
|
244
325
|
getCookie,
|
|
326
|
+
getCookieClient,
|
|
245
327
|
saveVerifierAndState,
|
|
246
328
|
setCookie,
|
|
247
|
-
|
|
329
|
+
setCookieClient,
|
|
330
|
+
setOrDeleteCookie,
|
|
331
|
+
setOrDeleteCookieClient
|
|
248
332
|
});
|
|
249
333
|
//# sourceMappingURL=cookie.js.map
|