@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/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,80 +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
|
-
|
|
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
|
+
}
|
|
173
208
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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);
|
|
178
227
|
}
|
|
179
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
|
+
}
|
|
180
251
|
async function saveVerifierAndState() {
|
|
181
252
|
const codeVerifier = generateRandomCodeVerifier();
|
|
182
253
|
const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
|
183
254
|
const state = generateRandomState();
|
|
184
|
-
setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
255
|
+
await setCookie("stack-oauth-outer-" + state, codeVerifier, { maxAge: 60 * 60 });
|
|
185
256
|
return {
|
|
186
257
|
codeChallenge,
|
|
187
258
|
state
|
|
188
259
|
};
|
|
189
260
|
}
|
|
190
261
|
function consumeVerifierAndStateCookie(state) {
|
|
262
|
+
ensureClient();
|
|
191
263
|
const cookieName = "stack-oauth-outer-" + state;
|
|
192
|
-
const codeVerifier =
|
|
264
|
+
const codeVerifier = getCookieClient(cookieName);
|
|
193
265
|
if (!codeVerifier) {
|
|
194
266
|
return null;
|
|
195
267
|
}
|
|
196
|
-
|
|
268
|
+
deleteCookieClient(cookieName);
|
|
197
269
|
return {
|
|
198
270
|
codeVerifier
|
|
199
271
|
};
|
|
200
272
|
}
|
|
201
273
|
export {
|
|
202
274
|
consumeVerifierAndStateCookie,
|
|
275
|
+
createBrowserCookieHelper,
|
|
276
|
+
createCookieHelper,
|
|
203
277
|
deleteCookie,
|
|
278
|
+
deleteCookieClient,
|
|
204
279
|
getCookie,
|
|
280
|
+
getCookieClient,
|
|
205
281
|
saveVerifierAndState,
|
|
206
282
|
setCookie,
|
|
207
|
-
|
|
283
|
+
setCookieClient,
|
|
284
|
+
setOrDeleteCookie,
|
|
285
|
+
setOrDeleteCookieClient
|
|
208
286
|
};
|
|
209
287
|
//# sourceMappingURL=cookie.js.map
|