@tern-secure/backend 1.2.0-canary.v20250919131424 → 1.2.0-canary.v20250926170202
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/dist/admin/index.js +207 -180
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +152 -105
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/nextSessionTernSecure.d.ts.map +1 -1
- package/dist/admin/sessionTernSecure.d.ts +24 -5
- package/dist/admin/sessionTernSecure.d.ts.map +1 -1
- package/dist/{chunk-ZIO4EKS5.mjs → chunk-ZMDLKXUP.mjs} +6 -29
- package/dist/chunk-ZMDLKXUP.mjs.map +1 -0
- package/dist/constants.d.ts +4 -5
- package/dist/constants.d.ts.map +1 -1
- package/dist/fireRestApi/createFireApi.d.ts +12 -0
- package/dist/fireRestApi/createFireApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpointUrl.d.ts +6 -0
- package/dist/fireRestApi/endpointUrl.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/AbstractApi.d.ts +7 -0
- package/dist/fireRestApi/endpoints/AbstractApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/EmailApi.d.ts +14 -0
- package/dist/fireRestApi/endpoints/EmailApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/PasswordApi.d.ts +20 -0
- package/dist/fireRestApi/endpoints/PasswordApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/SignInTokenApi.d.ts +11 -0
- package/dist/fireRestApi/endpoints/SignInTokenApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/SignUpApi.d.ts +11 -0
- package/dist/fireRestApi/endpoints/SignUpApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/TokenApi.d.ts +15 -0
- package/dist/fireRestApi/endpoints/TokenApi.d.ts.map +1 -0
- package/dist/fireRestApi/endpoints/index.d.ts +6 -0
- package/dist/fireRestApi/endpoints/index.d.ts.map +1 -0
- package/dist/fireRestApi/index.d.ts +2 -0
- package/dist/fireRestApi/index.d.ts.map +1 -0
- package/dist/fireRestApi/request.d.ts +37 -0
- package/dist/fireRestApi/request.d.ts.map +1 -0
- package/dist/fireRestApi/resources/JSON.d.ts +44 -0
- package/dist/fireRestApi/resources/JSON.d.ts.map +1 -0
- package/dist/fireRestApi/resources/Token.d.ts +7 -0
- package/dist/fireRestApi/resources/Token.d.ts.map +1 -0
- package/dist/index.js +178 -66
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +161 -38
- package/dist/index.mjs.map +1 -1
- package/dist/instance/backendFireInstance.d.ts +4 -4
- package/dist/instance/backendFireInstance.d.ts.map +1 -1
- package/dist/instance/backendInstanceEdge.d.ts +2 -2
- package/dist/instance/backendInstanceEdge.d.ts.map +1 -1
- package/dist/tokens/authstate.d.ts +1 -1
- package/dist/tokens/authstate.d.ts.map +1 -1
- package/dist/tokens/request.d.ts +3 -3
- package/dist/tokens/request.d.ts.map +1 -1
- package/dist/tokens/requestFire.d.ts.map +1 -1
- package/dist/tokens/types.d.ts +4 -2
- package/dist/tokens/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/admin/gemini.sessionTernSecure.d.ts +0 -8
- package/dist/admin/gemini.sessionTernSecure.d.ts.map +0 -1
- package/dist/chunk-ZIO4EKS5.mjs.map +0 -1
package/dist/admin/index.js
CHANGED
|
@@ -55,24 +55,65 @@ module.exports = __toCommonJS(admin_exports);
|
|
|
55
55
|
// src/admin/sessionTernSecure.ts
|
|
56
56
|
var import_errors = require("@tern-secure/shared/errors");
|
|
57
57
|
|
|
58
|
-
// src/
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
// src/constants.ts
|
|
59
|
+
var MAX_CACHE_LAST_UPDATED_AT_SECONDS = 5 * 60;
|
|
60
|
+
var DEFAULT_CACHE_DURATION = 3600 * 1e3;
|
|
61
|
+
var Attributes = {
|
|
62
|
+
AuthToken: "__ternsecureAuthToken",
|
|
63
|
+
AuthSignature: "__ternsecureAuthSignature",
|
|
64
|
+
AuthStatus: "__ternsecureAuthStatus",
|
|
65
|
+
AuthReason: "__ternsecureAuthReason",
|
|
66
|
+
AuthMessage: "__ternsecureAuthMessage",
|
|
67
|
+
TernSecureUrl: "__ternsecureUrl"
|
|
67
68
|
};
|
|
68
|
-
var
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
69
|
+
var Cookies = {
|
|
70
|
+
Session: "__session",
|
|
71
|
+
CsrfToken: "__session_terncf",
|
|
72
|
+
IdToken: "FIREBASE_[DEFAULT]",
|
|
73
|
+
Refresh: "FIREBASEID_[DEFAULT]",
|
|
74
|
+
Custom: "__custom",
|
|
75
|
+
Handshake: "__ternsecure_handshake",
|
|
76
|
+
DevBrowser: "__ternsecure_db_jwt",
|
|
77
|
+
RedirectCount: "__ternsecure_redirect_count",
|
|
78
|
+
HandshakeNonce: "__ternsecure_handshake_nonce"
|
|
79
|
+
};
|
|
80
|
+
var Headers2 = {
|
|
81
|
+
Accept: "accept",
|
|
82
|
+
AuthMessage: "x-ternsecure-auth-message",
|
|
83
|
+
Authorization: "authorization",
|
|
84
|
+
AuthReason: "x-ternsecure-auth-reason",
|
|
85
|
+
AuthSignature: "x-ternsecure-auth-signature",
|
|
86
|
+
AuthStatus: "x-ternsecure-auth-status",
|
|
87
|
+
AuthToken: "x-ternsecure-auth-token",
|
|
88
|
+
CacheControl: "cache-control",
|
|
89
|
+
TernSecureRedirectTo: "x-ternsecure-redirect-to",
|
|
90
|
+
TernSecureRequestData: "x-ternsecure-request-data",
|
|
91
|
+
TernSecureUrl: "x-ternsecure-url",
|
|
92
|
+
CloudFrontForwardedProto: "cloudfront-forwarded-proto",
|
|
93
|
+
ContentType: "content-type",
|
|
94
|
+
ContentSecurityPolicy: "content-security-policy",
|
|
95
|
+
ContentSecurityPolicyReportOnly: "content-security-policy-report-only",
|
|
96
|
+
EnableDebug: "x-ternsecure-debug",
|
|
97
|
+
ForwardedHost: "x-forwarded-host",
|
|
98
|
+
ForwardedPort: "x-forwarded-port",
|
|
99
|
+
ForwardedProto: "x-forwarded-proto",
|
|
100
|
+
Host: "host",
|
|
101
|
+
Location: "location",
|
|
102
|
+
Nonce: "x-nonce",
|
|
103
|
+
Origin: "origin",
|
|
104
|
+
Referrer: "referer",
|
|
105
|
+
SecFetchDest: "sec-fetch-dest",
|
|
106
|
+
UserAgent: "user-agent",
|
|
107
|
+
ReportingEndpoints: "reporting-endpoints"
|
|
108
|
+
};
|
|
109
|
+
var ContentTypes = {
|
|
110
|
+
Json: "application/json"
|
|
111
|
+
};
|
|
112
|
+
var constants = {
|
|
113
|
+
Attributes,
|
|
114
|
+
Cookies,
|
|
115
|
+
Headers: Headers2,
|
|
116
|
+
ContentTypes
|
|
76
117
|
};
|
|
77
118
|
|
|
78
119
|
// src/utils/admin-init.ts
|
|
@@ -154,108 +195,137 @@ var COOKIE_OPTIONS = {
|
|
|
154
195
|
sameSite: "strict",
|
|
155
196
|
path: "/"
|
|
156
197
|
};
|
|
198
|
+
var DEFAULT_COOKIE_CONFIG = {
|
|
199
|
+
DEFAULT_EXPIRES_IN_MS: 5 * 60 * 1e3,
|
|
200
|
+
// 5 minutes
|
|
201
|
+
DEFAULT_EXPIRES_IN_SECONDS: 5 * 60,
|
|
202
|
+
REVOKE_REFRESH_TOKENS_ON_SIGNOUT: true
|
|
203
|
+
};
|
|
204
|
+
var DEFAULT_COOKIE_OPTIONS = {
|
|
205
|
+
httpOnly: true,
|
|
206
|
+
secure: process.env.NODE_ENV === "production",
|
|
207
|
+
sameSite: "strict",
|
|
208
|
+
path: "/"
|
|
209
|
+
};
|
|
210
|
+
var getCookieName = (baseName, prefix) => {
|
|
211
|
+
return prefix ? `${prefix}${baseName}` : baseName;
|
|
212
|
+
};
|
|
213
|
+
var createCookieOptions = (maxAge, overrides) => {
|
|
214
|
+
return {
|
|
215
|
+
maxAge,
|
|
216
|
+
httpOnly: overrides?.httpOnly ?? DEFAULT_COOKIE_OPTIONS.httpOnly,
|
|
217
|
+
secure: overrides?.secure ?? DEFAULT_COOKIE_OPTIONS.secure,
|
|
218
|
+
sameSite: overrides?.sameSite ?? DEFAULT_COOKIE_OPTIONS.sameSite,
|
|
219
|
+
path: overrides?.path ?? DEFAULT_COOKIE_OPTIONS.path
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
var getCookiePrefix = () => {
|
|
223
|
+
const isProduction = process.env.NODE_ENV === "production";
|
|
224
|
+
return isProduction ? "__HOST-" : "__dev_";
|
|
225
|
+
};
|
|
157
226
|
async function createSessionCookie(params, cookieStore, options) {
|
|
158
227
|
try {
|
|
159
|
-
const tenantAuth = getAuthForTenant(options?.tenantId);
|
|
160
|
-
const sessionConfig = getSessionConfig(options);
|
|
161
|
-
const cookieOptions = getCookieOptions(options);
|
|
162
|
-
let decodedToken;
|
|
163
|
-
let sessionCookie;
|
|
228
|
+
const tenantAuth = getAuthForTenant(options?.tenantId || "");
|
|
164
229
|
const idToken = typeof params === "string" ? params : params.idToken;
|
|
230
|
+
const refreshToken = typeof params === "string" ? void 0 : params.refreshToken;
|
|
165
231
|
if (!idToken) {
|
|
166
|
-
const error = new Error("ID token is required for session creation");
|
|
167
|
-
console.error("[createSessionCookie] Missing ID token:", error);
|
|
168
232
|
return {
|
|
169
233
|
success: false,
|
|
170
234
|
message: "ID token is required",
|
|
171
|
-
error: "INVALID_TOKEN"
|
|
172
|
-
cookieSet: false
|
|
235
|
+
error: "INVALID_TOKEN"
|
|
173
236
|
};
|
|
174
237
|
}
|
|
238
|
+
let decodedToken;
|
|
175
239
|
try {
|
|
176
|
-
console.log("Verifying ID token for tenant:", options?.tenantId);
|
|
177
240
|
decodedToken = await tenantAuth.verifyIdToken(idToken);
|
|
178
241
|
} catch (verifyError) {
|
|
179
|
-
console.error(
|
|
180
|
-
"[createSessionCookie] ID token verification failed:",
|
|
181
|
-
verifyError
|
|
182
|
-
);
|
|
183
242
|
const authError = (0, import_errors.handleFirebaseAuthError)(verifyError);
|
|
184
243
|
return {
|
|
185
244
|
success: false,
|
|
186
245
|
message: authError.message,
|
|
187
|
-
error: authError.code
|
|
188
|
-
cookieSet: false
|
|
246
|
+
error: authError.code
|
|
189
247
|
};
|
|
190
248
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
249
|
+
const cookiePromises = [];
|
|
250
|
+
const cookiePrefix = getCookiePrefix();
|
|
251
|
+
const idTokenCookieName = getCookieName(
|
|
252
|
+
constants.Cookies.IdToken,
|
|
253
|
+
cookiePrefix
|
|
254
|
+
);
|
|
255
|
+
cookiePromises.push(
|
|
256
|
+
cookieStore.set(
|
|
257
|
+
idTokenCookieName,
|
|
258
|
+
idToken,
|
|
259
|
+
createCookieOptions(DEFAULT_COOKIE_CONFIG.DEFAULT_EXPIRES_IN_SECONDS)
|
|
260
|
+
)
|
|
261
|
+
);
|
|
262
|
+
if (refreshToken) {
|
|
263
|
+
const refreshTokenCookieName = getCookieName(
|
|
264
|
+
constants.Cookies.Refresh,
|
|
265
|
+
cookiePrefix
|
|
196
266
|
);
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
}
|
|
204
|
-
try {
|
|
205
|
-
sessionCookie = await tenantAuth.createSessionCookie(idToken, {
|
|
206
|
-
expiresIn: SESSION_CONSTANTS.DEFAULT_EXPIRES_IN_MS
|
|
207
|
-
});
|
|
208
|
-
} catch (sessionError) {
|
|
209
|
-
console.error(
|
|
210
|
-
"[createSessionCookie] Firebase session cookie creation failed:",
|
|
211
|
-
sessionError
|
|
267
|
+
cookiePromises.push(
|
|
268
|
+
cookieStore.set(
|
|
269
|
+
refreshTokenCookieName,
|
|
270
|
+
refreshToken,
|
|
271
|
+
createCookieOptions(DEFAULT_COOKIE_CONFIG.DEFAULT_EXPIRES_IN_SECONDS)
|
|
272
|
+
)
|
|
212
273
|
);
|
|
213
|
-
const authError = (0, import_errors.handleFirebaseAuthError)(sessionError);
|
|
214
|
-
return {
|
|
215
|
-
success: false,
|
|
216
|
-
message: authError.message,
|
|
217
|
-
error: authError.code,
|
|
218
|
-
cookieSet: false
|
|
219
|
-
};
|
|
220
274
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
275
|
+
if (options?.cookies?.session) {
|
|
276
|
+
const sessionOptions = options.cookies.session;
|
|
277
|
+
const sessionCookieName = getCookieName(constants.Cookies.Session);
|
|
278
|
+
const expiresIn = sessionOptions.maxAge ? sessionOptions.maxAge * 1e3 : DEFAULT_COOKIE_CONFIG.DEFAULT_EXPIRES_IN_MS;
|
|
279
|
+
try {
|
|
280
|
+
const sessionCookie = await tenantAuth.createSessionCookie(idToken, { expiresIn });
|
|
281
|
+
cookiePromises.push(
|
|
282
|
+
cookieStore.set(
|
|
283
|
+
sessionCookieName,
|
|
284
|
+
sessionCookie,
|
|
285
|
+
createCookieOptions(
|
|
286
|
+
sessionOptions.maxAge || DEFAULT_COOKIE_CONFIG.DEFAULT_EXPIRES_IN_SECONDS,
|
|
287
|
+
{
|
|
288
|
+
httpOnly: sessionOptions.httpOnly,
|
|
289
|
+
sameSite: sessionOptions.sameSite,
|
|
290
|
+
path: sessionOptions.path
|
|
291
|
+
}
|
|
292
|
+
)
|
|
293
|
+
)
|
|
294
|
+
);
|
|
295
|
+
} catch (sessionError) {
|
|
233
296
|
console.error(
|
|
234
|
-
"[createSessionCookie]
|
|
235
|
-
|
|
297
|
+
"[createSessionCookie] Firebase session cookie creation failed:",
|
|
298
|
+
sessionError
|
|
236
299
|
);
|
|
237
|
-
|
|
300
|
+
const authError = (0, import_errors.handleFirebaseAuthError)(sessionError);
|
|
301
|
+
return {
|
|
302
|
+
success: false,
|
|
303
|
+
message: authError.message,
|
|
304
|
+
error: authError.code
|
|
305
|
+
};
|
|
238
306
|
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
307
|
+
}
|
|
308
|
+
if (options?.enableCustomToken && decodedToken?.uid) {
|
|
309
|
+
const customTokenCookieName = getCookieName(
|
|
310
|
+
constants.Cookies.Custom,
|
|
311
|
+
cookiePrefix
|
|
243
312
|
);
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
313
|
+
const customToken = await createCustomToken(decodedToken.uid, options);
|
|
314
|
+
if (customToken) {
|
|
315
|
+
cookiePromises.push(
|
|
316
|
+
cookieStore.set(
|
|
317
|
+
customTokenCookieName,
|
|
318
|
+
customToken,
|
|
319
|
+
createCookieOptions(DEFAULT_COOKIE_CONFIG.DEFAULT_EXPIRES_IN_SECONDS)
|
|
320
|
+
)
|
|
321
|
+
);
|
|
322
|
+
}
|
|
250
323
|
}
|
|
251
|
-
|
|
252
|
-
`[createSessionCookie] Session cookie created successfully for user: ${decodedToken.uid}`
|
|
253
|
-
);
|
|
324
|
+
await Promise.all(cookiePromises);
|
|
254
325
|
return {
|
|
255
326
|
success: true,
|
|
256
327
|
message: "Session created successfully",
|
|
257
|
-
expiresIn:
|
|
258
|
-
cookieSet: cookieSetSuccessfully
|
|
328
|
+
expiresIn: DEFAULT_COOKIE_CONFIG.DEFAULT_EXPIRES_IN_SECONDS
|
|
259
329
|
};
|
|
260
330
|
} catch (error) {
|
|
261
331
|
console.error("[createSessionCookie] Unexpected error:", error);
|
|
@@ -263,51 +333,71 @@ async function createSessionCookie(params, cookieStore, options) {
|
|
|
263
333
|
return {
|
|
264
334
|
success: false,
|
|
265
335
|
message: authError.message || "Failed to create session",
|
|
266
|
-
error: authError.code || "INTERNAL_ERROR"
|
|
267
|
-
cookieSet: false
|
|
336
|
+
error: authError.code || "INTERNAL_ERROR"
|
|
268
337
|
};
|
|
269
338
|
}
|
|
270
339
|
}
|
|
271
340
|
async function clearSessionCookie(cookieStore, options) {
|
|
272
341
|
try {
|
|
273
|
-
const adminAuth = getAuthForTenant(options?.tenantId);
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
342
|
+
const adminAuth = getAuthForTenant(options?.tenantId || "");
|
|
343
|
+
const cookiePrefix = getCookiePrefix();
|
|
344
|
+
const sessionCookieName = getCookieName(
|
|
345
|
+
constants.Cookies.Session,
|
|
346
|
+
cookiePrefix
|
|
347
|
+
);
|
|
348
|
+
const sessionCookie = await cookieStore.get(sessionCookieName);
|
|
349
|
+
const deletionPromises = [];
|
|
350
|
+
if (options?.cookies?.session) {
|
|
351
|
+
deletionPromises.push(cookieStore.delete(sessionCookieName));
|
|
352
|
+
}
|
|
353
|
+
const idTokenCookieName = getCookieName(
|
|
354
|
+
constants.Cookies.IdToken,
|
|
355
|
+
cookiePrefix
|
|
356
|
+
);
|
|
357
|
+
deletionPromises.push(cookieStore.delete(idTokenCookieName));
|
|
358
|
+
const refreshTokenCookieName = getCookieName(
|
|
359
|
+
constants.Cookies.Refresh,
|
|
360
|
+
cookiePrefix
|
|
361
|
+
);
|
|
362
|
+
deletionPromises.push(cookieStore.delete(refreshTokenCookieName));
|
|
363
|
+
const customTokenCookieName = getCookieName(
|
|
364
|
+
constants.Cookies.Custom,
|
|
365
|
+
cookiePrefix
|
|
366
|
+
);
|
|
367
|
+
deletionPromises.push(cookieStore.delete(customTokenCookieName));
|
|
368
|
+
deletionPromises.push(cookieStore.delete(constants.Cookies.Session));
|
|
369
|
+
await Promise.all(deletionPromises);
|
|
370
|
+
if (DEFAULT_COOKIE_CONFIG.REVOKE_REFRESH_TOKENS_ON_SIGNOUT && sessionCookie?.value) {
|
|
279
371
|
try {
|
|
280
|
-
const decodedClaims = await adminAuth.verifySessionCookie(
|
|
281
|
-
sessionCookie.value
|
|
282
|
-
);
|
|
372
|
+
const decodedClaims = await adminAuth.verifySessionCookie(sessionCookie.value);
|
|
283
373
|
await adminAuth.revokeRefreshTokens(decodedClaims.sub);
|
|
284
|
-
console.log(
|
|
285
|
-
`[clearSessionCookie] Successfully revoked tokens for user: ${decodedClaims.sub}`
|
|
286
|
-
);
|
|
287
374
|
} catch (revokeError) {
|
|
288
|
-
console.error(
|
|
289
|
-
"[clearSessionCookie] Failed to revoke refresh tokens:",
|
|
290
|
-
revokeError
|
|
291
|
-
);
|
|
375
|
+
console.error("[clearSessionCookie] Failed to revoke refresh tokens:", revokeError);
|
|
292
376
|
}
|
|
293
377
|
}
|
|
294
|
-
console.log("[clearSessionCookie] Session cookies cleared successfully");
|
|
295
378
|
return {
|
|
296
379
|
success: true,
|
|
297
|
-
message: "Session cleared successfully"
|
|
298
|
-
cookieSet: false
|
|
380
|
+
message: "Session cleared successfully"
|
|
299
381
|
};
|
|
300
382
|
} catch (error) {
|
|
301
|
-
console.error("[clearSessionCookie] Unexpected error:", error);
|
|
302
383
|
const authError = (0, import_errors.handleFirebaseAuthError)(error);
|
|
303
384
|
return {
|
|
304
385
|
success: false,
|
|
305
386
|
message: authError.message || "Failed to clear session",
|
|
306
|
-
error: authError.code || "INTERNAL_ERROR"
|
|
307
|
-
cookieSet: false
|
|
387
|
+
error: authError.code || "INTERNAL_ERROR"
|
|
308
388
|
};
|
|
309
389
|
}
|
|
310
390
|
}
|
|
391
|
+
async function createCustomToken(uid, options) {
|
|
392
|
+
const adminAuth = getAuthForTenant(options?.tenantId || "");
|
|
393
|
+
try {
|
|
394
|
+
const customToken = await adminAuth.createCustomToken(uid);
|
|
395
|
+
return customToken;
|
|
396
|
+
} catch (error) {
|
|
397
|
+
console.error("[createCustomToken] Error creating custom token:", error);
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
311
401
|
|
|
312
402
|
// src/admin/tenant.ts
|
|
313
403
|
async function createTenant(displayName, emailSignInConfig, multiFactorConfig) {
|
|
@@ -352,7 +442,7 @@ async function createTenantUser(email, password, tenantId) {
|
|
|
352
442
|
var import_errors2 = require("@tern-secure/shared/errors");
|
|
353
443
|
var import_headers = require("next/headers");
|
|
354
444
|
var SESSION_CONSTANTS2 = {
|
|
355
|
-
COOKIE_NAME:
|
|
445
|
+
COOKIE_NAME: constants.Cookies.Session,
|
|
356
446
|
DEFAULT_EXPIRES_IN_MS: 60 * 60 * 24 * 5 * 1e3,
|
|
357
447
|
// 5 days
|
|
358
448
|
DEFAULT_EXPIRES_IN_SECONDS: 60 * 60 * 24 * 5,
|
|
@@ -365,7 +455,7 @@ async function CreateNextSessionCookie(idToken) {
|
|
|
365
455
|
expiresIn
|
|
366
456
|
});
|
|
367
457
|
const cookieStore = await (0, import_headers.cookies)();
|
|
368
|
-
cookieStore.set(
|
|
458
|
+
cookieStore.set(constants.Cookies.Session, sessionCookie, {
|
|
369
459
|
maxAge: expiresIn,
|
|
370
460
|
httpOnly: true,
|
|
371
461
|
secure: process.env.NODE_ENV === "production",
|
|
@@ -491,8 +581,7 @@ async function ClearNextSessionCookie(tenantId) {
|
|
|
491
581
|
const cookieStore = await (0, import_headers.cookies)();
|
|
492
582
|
const sessionCookie = cookieStore.get(SESSION_CONSTANTS2.COOKIE_NAME);
|
|
493
583
|
cookieStore.delete(SESSION_CONSTANTS2.COOKIE_NAME);
|
|
494
|
-
cookieStore.delete(
|
|
495
|
-
cookieStore.delete("_session");
|
|
584
|
+
cookieStore.delete(constants.Cookies.IdToken);
|
|
496
585
|
if (SESSION_CONSTANTS2.REVOKE_REFRESH_TOKENS_ON_SIGNOUT && sessionCookie?.value) {
|
|
497
586
|
try {
|
|
498
587
|
const decodedClaims = await tenantAuth.verifySessionCookie(
|
|
@@ -519,68 +608,6 @@ async function ClearNextSessionCookie(tenantId) {
|
|
|
519
608
|
// src/tokens/ternSecureRequest.ts
|
|
520
609
|
var import_cookie = require("cookie");
|
|
521
610
|
|
|
522
|
-
// src/constants.ts
|
|
523
|
-
var MAX_CACHE_LAST_UPDATED_AT_SECONDS = 5 * 60;
|
|
524
|
-
var DEFAULT_CACHE_DURATION = 3600 * 1e3;
|
|
525
|
-
var Attributes = {
|
|
526
|
-
AuthToken: "__ternsecureAuthToken",
|
|
527
|
-
AuthSignature: "__ternsecureAuthSignature",
|
|
528
|
-
AuthStatus: "__ternsecureAuthStatus",
|
|
529
|
-
AuthReason: "__ternsecureAuthReason",
|
|
530
|
-
AuthMessage: "__ternsecureAuthMessage",
|
|
531
|
-
TernSecureUrl: "__ternsecureUrl"
|
|
532
|
-
};
|
|
533
|
-
var Cookies = {
|
|
534
|
-
Session: "__session",
|
|
535
|
-
IdToken: "_tern",
|
|
536
|
-
CsrfToken: "_session_terncf",
|
|
537
|
-
SessionCookie: "_session_cookie",
|
|
538
|
-
SessionToken: "_session_token",
|
|
539
|
-
Refresh: "__refresh",
|
|
540
|
-
Handshake: "__ternsecure_handshake",
|
|
541
|
-
DevBrowser: "__ternsecure_db_jwt",
|
|
542
|
-
RedirectCount: "__ternsecure_redirect_count",
|
|
543
|
-
HandshakeNonce: "__ternsecure_handshake_nonce"
|
|
544
|
-
};
|
|
545
|
-
var Headers2 = {
|
|
546
|
-
Accept: "accept",
|
|
547
|
-
AuthMessage: "x-ternsecure-auth-message",
|
|
548
|
-
Authorization: "authorization",
|
|
549
|
-
AuthReason: "x-ternsecure-auth-reason",
|
|
550
|
-
AuthSignature: "x-ternsecure-auth-signature",
|
|
551
|
-
AuthStatus: "x-ternsecure-auth-status",
|
|
552
|
-
AuthToken: "x-ternsecure-auth-token",
|
|
553
|
-
CacheControl: "cache-control",
|
|
554
|
-
TernSecureRedirectTo: "x-ternsecure-redirect-to",
|
|
555
|
-
TernSecureRequestData: "x-ternsecure-request-data",
|
|
556
|
-
TernSecureUrl: "x-ternsecure-url",
|
|
557
|
-
CloudFrontForwardedProto: "cloudfront-forwarded-proto",
|
|
558
|
-
ContentType: "content-type",
|
|
559
|
-
ContentSecurityPolicy: "content-security-policy",
|
|
560
|
-
ContentSecurityPolicyReportOnly: "content-security-policy-report-only",
|
|
561
|
-
EnableDebug: "x-ternsecure-debug",
|
|
562
|
-
ForwardedHost: "x-forwarded-host",
|
|
563
|
-
ForwardedPort: "x-forwarded-port",
|
|
564
|
-
ForwardedProto: "x-forwarded-proto",
|
|
565
|
-
Host: "host",
|
|
566
|
-
Location: "location",
|
|
567
|
-
Nonce: "x-nonce",
|
|
568
|
-
Origin: "origin",
|
|
569
|
-
Referrer: "referer",
|
|
570
|
-
SecFetchDest: "sec-fetch-dest",
|
|
571
|
-
UserAgent: "user-agent",
|
|
572
|
-
ReportingEndpoints: "reporting-endpoints"
|
|
573
|
-
};
|
|
574
|
-
var ContentTypes = {
|
|
575
|
-
Json: "application/json"
|
|
576
|
-
};
|
|
577
|
-
var constants = {
|
|
578
|
-
Attributes,
|
|
579
|
-
Cookies,
|
|
580
|
-
Headers: Headers2,
|
|
581
|
-
ContentTypes
|
|
582
|
-
};
|
|
583
|
-
|
|
584
611
|
// src/tokens/ternUrl.ts
|
|
585
612
|
var TernUrl = class extends URL {
|
|
586
613
|
isCrossOrigin(other) {
|