@cedarjs/auth-dbauth-api 7.0.0 → 8.0.0-canary.3263

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.
@@ -1,6 +1,7 @@
1
- import type { AuthenticationResponseJSON, RegistrationResponseJSON } from '@simplewebauthn/types';
1
+ import type { AuthenticationResponseJSON, RegistrationResponseJSON } from '@simplewebauthn/server';
2
2
  import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda';
3
3
  import type { CorsConfig, CorsContext, PartialRequest } from '@cedarjs/api';
4
+ import type { DbAuthCookieConfig } from './session.js';
4
5
  interface SignupFlowOptions<TUserAttributes = Record<string, unknown>> {
5
6
  /**
6
7
  * Allow users to sign up. Defaults to true.
@@ -170,33 +171,7 @@ export interface DbAuthHandlerOptions<TUser = UserType, TUserAttributes = Record
170
171
  /**
171
172
  * Object containing cookie config options
172
173
  */
173
- cookie?: {
174
- /** @deprecated set this option in `cookie.attributes` */
175
- Path?: string;
176
- /** @deprecated set this option in `cookie.attributes` */
177
- HttpOnly?: boolean;
178
- /** @deprecated set this option in `cookie.attributes` */
179
- Secure?: boolean;
180
- /** @deprecated set this option in `cookie.attributes` */
181
- SameSite?: string;
182
- /** @deprecated set this option in `cookie.attributes` */
183
- Domain?: string;
184
- attributes?: {
185
- Path?: string;
186
- HttpOnly?: boolean;
187
- Secure?: boolean;
188
- SameSite?: string;
189
- Domain?: string;
190
- };
191
- /**
192
- * The name of the cookie that dbAuth sets
193
- *
194
- * %port% will be replaced with the port the api server is running on.
195
- * If you have multiple RW apps running on the same host, you'll need to
196
- * make sure they all use unique cookie names
197
- */
198
- name?: string;
199
- };
174
+ cookie?: DbAuthCookieConfig;
200
175
  /**
201
176
  * Object containing forgot password options
202
177
  */
@@ -339,12 +314,12 @@ export declare class DbAuthHandler<TUser extends UserType, TUserAttributes = Rec
339
314
  _validateOptions(): void;
340
315
  _saveChallenge(userId: string | number, value: string | null): Promise<void>;
341
316
  _webAuthnCookie(id: string, expires: string): string;
342
- _sanitizeUser(user: Record<string, unknown>): any;
317
+ _sanitizeUser(user: Record<string, unknown>): Record<string, unknown>;
343
318
  _decodeEvent(): void;
344
319
  _cookieAttributes({ expires, options, }: {
345
320
  expires?: 'now' | string;
346
321
  options?: DbAuthHandlerOptions['cookie'];
347
- }): (string | null)[];
322
+ }): string[];
348
323
  _createAuthProviderCookieString(): string;
349
324
  _createSessionCookieString<TIdType = any>(data: DbAuthSession<TIdType>, csrfToken: string): string;
350
325
  _findUserByToken(token: string): Promise<any>;
@@ -355,9 +330,7 @@ export declare class DbAuthHandler<TUser extends UserType, TUserAttributes = Rec
355
330
  _createUser(): Promise<any>;
356
331
  _getAuthMethod(): Promise<AuthMethodNames>;
357
332
  _validateField(name: string, value: string | undefined): value is string;
358
- _loginResponse(user: Record<string, any>, statusCode?: number): [{
359
- id: string;
360
- }, Headers, {
333
+ _loginResponse(user: Record<string, any>, statusCode?: number): [Record<string, any>, Headers, {
361
334
  statusCode: number;
362
335
  }];
363
336
  _logoutResponse(response?: Record<string, unknown>): AuthMethodOutput;
@@ -1 +1 @@
1
- {"version":3,"file":"DbAuthHandler.d.ts","sourceRoot":"","sources":["../src/DbAuthHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DbAuthHandler.d.ts","sourceRoot":"","sources":["../src/DbAuthHandler.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,18 @@ import {
13
13
  resolveRequestHost,
14
14
  resolveRequestProtocol
15
15
  } from "./originValidation.js";
16
+ import {
17
+ buildCookieAttributes,
18
+ createAuthProviderCookieString,
19
+ createCsrfToken,
20
+ createExpiresAtDate,
21
+ createLoginResponse,
22
+ createSessionCookieString,
23
+ DEFAULT_ALLOWED_USER_FIELDS,
24
+ sanitizeUser
25
+ } from "./session.js";
16
26
  import {
17
27
  decryptSession,
18
- encryptSession,
19
28
  extractCookie,
20
29
  extractHashingOptions,
21
30
  generateCookieName,
@@ -27,7 +36,6 @@ import {
27
36
  legacyHashPassword,
28
37
  webAuthnSession
29
38
  } from "./shared.js";
30
- const DEFAULT_ALLOWED_USER_FIELDS = ["id", "email"];
31
39
  class DbAuthHandler {
32
40
  event;
33
41
  _normalizedRequest;
@@ -92,7 +100,7 @@ class DbAuthHandler {
92
100
  }
93
101
  // generate a new token (standard UUID)
94
102
  static get CSRF_TOKEN() {
95
- return uuidv4();
103
+ return createCsrfToken();
96
104
  }
97
105
  static get AVAILABLE_WEBAUTHN_TRANSPORTS() {
98
106
  return ["usb", "ble", "nfc", "internal"];
@@ -135,11 +143,9 @@ class DbAuthHandler {
135
143
  this.dbCredentialAccessor = this.options.credentialModelAccessor ? this.db[this.options.credentialModelAccessor] : null;
136
144
  this.hasInvalidSession = false;
137
145
  this.allowedUserFields = this.options.allowedUserFields || DEFAULT_ALLOWED_USER_FIELDS;
138
- const sessionExpiresAt = /* @__PURE__ */ new Date();
139
- sessionExpiresAt.setSeconds(
140
- sessionExpiresAt.getSeconds() + this.options.login.expires
146
+ this.sessionExpiresDate = createExpiresAtDate(
147
+ this.options.login.expires
141
148
  );
142
- this.sessionExpiresDate = sessionExpiresAt.toUTCString();
143
149
  const webAuthnExpiresAt = /* @__PURE__ */ new Date();
144
150
  webAuthnExpiresAt.setSeconds(
145
151
  webAuthnExpiresAt.getSeconds() + (this.options?.webAuthn?.expires || 0)
@@ -442,9 +448,9 @@ class DbAuthHandler {
442
448
  expectedChallenge: user[this.options.authFields.challenge],
443
449
  expectedOrigin: webAuthnOptions.origin,
444
450
  expectedRPID: webAuthnOptions.domain,
445
- authenticator: {
446
- credentialID: credential[webAuthnOptions.credentialFields.id],
447
- credentialPublicKey: credential[webAuthnOptions.credentialFields.publicKey],
451
+ credential: {
452
+ id: credential[webAuthnOptions.credentialFields.id],
453
+ publicKey: credential[webAuthnOptions.credentialFields.publicKey],
448
454
  counter: credential[webAuthnOptions.credentialFields.counter],
449
455
  transports: credential[webAuthnOptions.credentialFields.transports] ? JSON.parse(
450
456
  credential[webAuthnOptions.credentialFields.transports]
@@ -586,7 +592,11 @@ class DbAuthHandler {
586
592
  if (!verified || !registrationInfo) {
587
593
  throw new DbAuthError.WebAuthnError("Registration failed");
588
594
  }
589
- const { credentialPublicKey, credentialID, counter } = registrationInfo;
595
+ const {
596
+ id: credentialID,
597
+ publicKey: credentialPublicKey,
598
+ counter
599
+ } = registrationInfo.credential;
590
600
  const existingDevice = await this.dbCredentialAccessor.findFirst({
591
601
  where: {
592
602
  [this.options.webAuthn.credentialFields.id]: credentialID,
@@ -665,13 +675,7 @@ class DbAuthHandler {
665
675
  // removes any fields not explicitly allowed to be sent to the client before
666
676
  // sending a response over the wire
667
677
  _sanitizeUser(user) {
668
- const sanitized = JSON.parse(JSON.stringify(user));
669
- Object.keys(sanitized).forEach((key) => {
670
- if (!this.allowedUserFields.includes(key)) {
671
- delete sanitized[key];
672
- }
673
- });
674
- return sanitized;
678
+ return sanitizeUser(user, this.allowedUserFields);
675
679
  }
676
680
  // Converts LambdaEvent or FetchRequest to
677
681
  _decodeEvent() {
@@ -684,41 +688,27 @@ class DbAuthHandler {
684
688
  expires = "now",
685
689
  options = {}
686
690
  }) {
687
- const userCookieAttributes = this.options.cookie?.attributes ? { ...this.options.cookie?.attributes } : { ...this.options.cookie };
688
- if (!this.options.cookie?.attributes) {
689
- delete userCookieAttributes.name;
690
- }
691
- const cookieOptions = { ...userCookieAttributes, ...options };
692
- const meta = Object.keys(cookieOptions).map((key) => {
693
- const optionValue = cookieOptions[key];
694
- if (optionValue === true) {
695
- return key;
696
- } else if (optionValue === false) {
697
- return null;
698
- } else {
699
- return `${key}=${optionValue}`;
700
- }
701
- }).filter((v) => v);
702
- const expiresAt = expires === "now" ? DbAuthHandler.PAST_EXPIRES_DATE : expires;
703
- meta.push(`Expires=${expiresAt}`);
704
- return meta;
691
+ return buildCookieAttributes({
692
+ cookieConfig: this.options.cookie,
693
+ expires,
694
+ overrideAttributes: options
695
+ });
705
696
  }
706
697
  _createAuthProviderCookieString() {
707
- return [
708
- `auth-provider=dbAuth`,
709
- ...this._cookieAttributes({ expires: this.sessionExpiresDate })
710
- ].join(";");
698
+ return createAuthProviderCookieString({
699
+ cookieConfig: this.options.cookie,
700
+ expiresAt: this.sessionExpiresDate
701
+ });
711
702
  }
712
703
  // returns the set-cookie header to be returned in the request (effectively
713
704
  // creates the session)
714
705
  _createSessionCookieString(data, csrfToken) {
715
- const session = JSON.stringify(data) + ";" + csrfToken;
716
- const encrypted = encryptSession(session);
717
- const sessionCookieString = [
718
- `${generateCookieName(this.options.cookie?.name)}=${encrypted}`,
719
- ...this._cookieAttributes({ expires: this.sessionExpiresDate })
720
- ].join(";");
721
- return sessionCookieString;
706
+ return createSessionCookieString({
707
+ data,
708
+ csrfToken,
709
+ cookieConfig: this.options.cookie,
710
+ expiresAt: this.sessionExpiresDate
711
+ });
722
712
  }
723
713
  async _findUserByToken(token) {
724
714
  const tokenExpires = /* @__PURE__ */ new Date();
@@ -901,16 +891,12 @@ class DbAuthHandler {
901
891
  }
902
892
  }
903
893
  _loginResponse(user, statusCode = 200) {
904
- const sessionData = this._sanitizeUser(user);
905
- const csrfToken = DbAuthHandler.CSRF_TOKEN;
906
- const headers = new Headers();
907
- headers.append("csrf-token", csrfToken);
908
- headers.append("set-cookie", this._createAuthProviderCookieString());
909
- headers.append(
910
- "set-cookie",
911
- this._createSessionCookieString(sessionData, csrfToken)
912
- );
913
- return [sessionData, headers, { statusCode }];
894
+ return createLoginResponse(user, {
895
+ cookie: this.options.cookie,
896
+ allowedUserFields: this.allowedUserFields,
897
+ expiresAt: this.sessionExpiresDate,
898
+ statusCode
899
+ });
914
900
  }
915
901
  _logoutResponse(response) {
916
902
  return [response ? JSON.stringify(response) : "", this._deleteSessionHeader];
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './DbAuthHandler.js';
2
2
  export { PasswordValidationError } from './errors.js';
3
+ export * from './session.js';
3
4
  export * from './shared.js';
4
5
  export { authDecoder, createAuthDecoder } from './decoder.js';
5
6
  export * from './originValidation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC7D,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC7D,cAAc,uBAAuB,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./DbAuthHandler.js";
2
2
  import { PasswordValidationError } from "./errors.js";
3
+ export * from "./session.js";
3
4
  export * from "./shared.js";
4
5
  import { authDecoder, createAuthDecoder } from "./decoder.js";
5
6
  export * from "./originValidation.js";
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Cookie attributes that can be set on a dbAuth cookie, either as
3
+ * `cookie.attributes` or (deprecated) directly on `cookie`.
4
+ */
5
+ export interface DbAuthCookieAttributes {
6
+ Path?: string;
7
+ HttpOnly?: boolean;
8
+ Secure?: boolean;
9
+ SameSite?: string;
10
+ Domain?: string;
11
+ }
12
+ /**
13
+ * Configuration for the cookies dbAuth sets: the session cookie's name, and
14
+ * the attributes applied to every cookie dbAuth writes (the session cookie
15
+ * and the `auth-provider` cookie).
16
+ */
17
+ export interface DbAuthCookieConfig extends DbAuthCookieAttributes {
18
+ attributes?: DbAuthCookieAttributes;
19
+ /**
20
+ * The name of the cookie that dbAuth sets
21
+ *
22
+ * %port% will be replaced with the port the api server is running on.
23
+ * If you have multiple RW apps running on the same host, you'll need to
24
+ * make sure they all use unique cookie names
25
+ */
26
+ name?: string;
27
+ }
28
+ /**
29
+ * Returns a UTC date string `expiresInSeconds` seconds in the future. Used as
30
+ * the `Expires` cookie attribute for a session that should stay valid for
31
+ * that long from now.
32
+ */
33
+ export declare function createExpiresAtDate(expiresInSeconds: number): string;
34
+ /**
35
+ * Generates a new CSRF token (a standard UUID) to pair with a session.
36
+ */
37
+ export declare function createCsrfToken(): string;
38
+ /**
39
+ * Removes any fields not explicitly allowed to be sent to the client before
40
+ * sending a user record over the wire.
41
+ */
42
+ export declare function sanitizeUser(user: Record<string, unknown>, allowedUserFields: string[]): Record<string, unknown>;
43
+ /**
44
+ * Builds the Set-Cookie attribute strings (`Path`, `HttpOnly`, `SameSite`,
45
+ * `Secure`, `Domain`, `Expires`) for a dbAuth cookie.
46
+ *
47
+ * Pass `expires: 'now'` (the default) to get the attributes needed to expire
48
+ * the cookie, or a UTC date string (e.g. from `createExpiresAtDate`) to set a
49
+ * future expiration.
50
+ */
51
+ export declare function buildCookieAttributes({ cookieConfig, expires, overrideAttributes, }: {
52
+ cookieConfig?: DbAuthCookieConfig;
53
+ expires?: 'now' | string;
54
+ overrideAttributes?: DbAuthCookieAttributes;
55
+ }): string[];
56
+ /**
57
+ * Builds the Set-Cookie header string for the `auth-provider` cookie dbAuth
58
+ * sets alongside the session cookie.
59
+ */
60
+ export declare function createAuthProviderCookieString({ cookieConfig, expiresAt, }: {
61
+ cookieConfig?: DbAuthCookieConfig;
62
+ expiresAt: string;
63
+ }): string;
64
+ /**
65
+ * Builds the Set-Cookie header string for the dbAuth session cookie: the
66
+ * `data;csrfToken` payload, encrypted, under the configured cookie name and
67
+ * attributes.
68
+ */
69
+ export declare function createSessionCookieString<TIdType = unknown>({ data, csrfToken, cookieConfig, expiresAt, }: {
70
+ data: Record<string, TIdType>;
71
+ csrfToken: string;
72
+ cookieConfig?: DbAuthCookieConfig;
73
+ expiresAt: string;
74
+ }): string;
75
+ /** Fields returned from the user record when none are explicitly allowed */
76
+ export declare const DEFAULT_ALLOWED_USER_FIELDS: string[];
77
+ export interface CreateLoginResponseOptions {
78
+ /**
79
+ * Object containing cookie config options: the cookie name (with %port%
80
+ * support) and the attributes applied to it (`Path`, `HttpOnly`,
81
+ * `SameSite`, `Secure`, `Domain`).
82
+ */
83
+ cookie?: DbAuthCookieConfig;
84
+ /**
85
+ * The fields that are allowed to be returned from the user record.
86
+ * Defaults to `id` and `email`.
87
+ */
88
+ allowedUserFields?: string[];
89
+ /**
90
+ * The `Expires` cookie attribute value for the session and `auth-provider`
91
+ * cookies: a UTC date string in the future. Build one with
92
+ * `createExpiresAtDate(expiresInSeconds)`.
93
+ */
94
+ expiresAt: string;
95
+ /**
96
+ * The HTTP status code to return in the response tuple. Defaults to 200.
97
+ */
98
+ statusCode?: number;
99
+ }
100
+ /**
101
+ * Mints a dbAuth session for the given user: a CSRF token, a session cookie
102
+ * (the sanitized user data paired with the CSRF token, encrypted), and the
103
+ * `auth-provider` cookie, in the same `[body, headers, { statusCode }]` shape
104
+ * every dbAuth auth method returns.
105
+ *
106
+ * Callable without a `DbAuthHandler` instance, so any code that has already
107
+ * verified a user's identity — a WebAuthn assertion, an OAuth callback, a
108
+ * magic link — can issue a session the same way the built-in login flow
109
+ * does.
110
+ */
111
+ export declare function createLoginResponse(user: Record<string, unknown>, options: CreateLoginResponseOptions): [Record<string, unknown>, Headers, {
112
+ statusCode: number;
113
+ }];
114
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAmB,SAAQ,sBAAsB;IAChE,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAOD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,iBAAiB,EAAE,MAAM,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,YAAY,EACZ,OAAe,EACf,kBAAuB,GACxB,EAAE;IACD,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,sBAAsB,CAAA;CAC5C,GAAG,MAAM,EAAE,CAiCX;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,YAAY,EACZ,SAAS,GACV,EAAE;IACD,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,CAKT;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAG,OAAO,EAAE,EAC3D,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,SAAS,GACV,EAAE;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,CAQT;AAED,4EAA4E;AAC5E,eAAO,MAAM,2BAA2B,UAAkB,CAAA;AAE1D,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,0BAA0B,GAClC,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B5D"}
@@ -0,0 +1,103 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ import { encryptSession, generateCookieName } from "./shared.js";
3
+ const PAST_EXPIRES_DATE = (/* @__PURE__ */ new Date(
4
+ "1970-01-01T00:00:00.000+00:00"
5
+ )).toUTCString();
6
+ function createExpiresAtDate(expiresInSeconds) {
7
+ const expiresAt = /* @__PURE__ */ new Date();
8
+ expiresAt.setSeconds(expiresAt.getSeconds() + expiresInSeconds);
9
+ return expiresAt.toUTCString();
10
+ }
11
+ function createCsrfToken() {
12
+ return uuidv4();
13
+ }
14
+ function sanitizeUser(user, allowedUserFields) {
15
+ const sanitized = JSON.parse(JSON.stringify(user));
16
+ Object.keys(sanitized).forEach((key) => {
17
+ if (!allowedUserFields.includes(key)) {
18
+ delete sanitized[key];
19
+ }
20
+ });
21
+ return sanitized;
22
+ }
23
+ function buildCookieAttributes({
24
+ cookieConfig,
25
+ expires = "now",
26
+ overrideAttributes = {}
27
+ }) {
28
+ const userCookieAttributes = cookieConfig?.attributes ? { ...cookieConfig.attributes } : { ...cookieConfig };
29
+ if (!cookieConfig?.attributes) {
30
+ delete userCookieAttributes.name;
31
+ }
32
+ const cookieOptions = { ...userCookieAttributes, ...overrideAttributes };
33
+ const meta = Object.keys(cookieOptions).map((key) => {
34
+ const optionValue = cookieOptions[key];
35
+ if (optionValue === true) {
36
+ return key;
37
+ } else if (optionValue === false) {
38
+ return null;
39
+ } else {
40
+ return `${key}=${optionValue}`;
41
+ }
42
+ }).filter((v) => v !== null);
43
+ const expiresAt = expires === "now" ? PAST_EXPIRES_DATE : expires;
44
+ meta.push(`Expires=${expiresAt}`);
45
+ return meta;
46
+ }
47
+ function createAuthProviderCookieString({
48
+ cookieConfig,
49
+ expiresAt
50
+ }) {
51
+ return [
52
+ `auth-provider=dbAuth`,
53
+ ...buildCookieAttributes({ cookieConfig, expires: expiresAt })
54
+ ].join(";");
55
+ }
56
+ function createSessionCookieString({
57
+ data,
58
+ csrfToken,
59
+ cookieConfig,
60
+ expiresAt
61
+ }) {
62
+ const session = JSON.stringify(data) + ";" + csrfToken;
63
+ const encrypted = encryptSession(session);
64
+ return [
65
+ `${generateCookieName(cookieConfig?.name)}=${encrypted}`,
66
+ ...buildCookieAttributes({ cookieConfig, expires: expiresAt })
67
+ ].join(";");
68
+ }
69
+ const DEFAULT_ALLOWED_USER_FIELDS = ["id", "email"];
70
+ function createLoginResponse(user, options) {
71
+ const allowedUserFields = options.allowedUserFields ?? DEFAULT_ALLOWED_USER_FIELDS;
72
+ const sessionData = sanitizeUser(user, allowedUserFields);
73
+ const csrfToken = createCsrfToken();
74
+ const headers = new Headers();
75
+ headers.append("csrf-token", csrfToken);
76
+ headers.append(
77
+ "set-cookie",
78
+ createAuthProviderCookieString({
79
+ cookieConfig: options.cookie,
80
+ expiresAt: options.expiresAt
81
+ })
82
+ );
83
+ headers.append(
84
+ "set-cookie",
85
+ createSessionCookieString({
86
+ data: sessionData,
87
+ csrfToken,
88
+ cookieConfig: options.cookie,
89
+ expiresAt: options.expiresAt
90
+ })
91
+ );
92
+ return [sessionData, headers, { statusCode: options.statusCode ?? 200 }];
93
+ }
94
+ export {
95
+ DEFAULT_ALLOWED_USER_FIELDS,
96
+ buildCookieAttributes,
97
+ createAuthProviderCookieString,
98
+ createCsrfToken,
99
+ createExpiresAtDate,
100
+ createLoginResponse,
101
+ createSessionCookieString,
102
+ sanitizeUser
103
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cedarjs/auth-dbauth-api",
3
- "version": "7.0.0",
3
+ "version": "8.0.0-canary.3263",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/cedarjs/cedar.git",
@@ -57,15 +57,14 @@
57
57
  "test:watch": "vitest watch"
58
58
  },
59
59
  "dependencies": {
60
- "@cedarjs/project-config": "7.0.0",
60
+ "@cedarjs/project-config": "8.0.0-canary.3263",
61
61
  "md5": "2.3.0",
62
62
  "uuid": "11.1.1"
63
63
  },
64
64
  "devDependencies": {
65
- "@cedarjs/api": "7.0.0",
66
- "@cedarjs/framework-tools": "7.0.0",
67
- "@simplewebauthn/server": "10.0.1",
68
- "@simplewebauthn/types": "10.0.0",
65
+ "@cedarjs/api": "8.0.0-canary.3263",
66
+ "@cedarjs/framework-tools": "8.0.0-canary.3263",
67
+ "@simplewebauthn/server": "13.3.3",
69
68
  "@types/aws-lambda": "8.10.163",
70
69
  "@types/md5": "2.3.6",
71
70
  "concurrently": "9.2.4",
@@ -73,6 +72,14 @@
73
72
  "typescript": "5.9.3",
74
73
  "vitest": "4.1.11"
75
74
  },
75
+ "peerDependencies": {
76
+ "@simplewebauthn/server": "^13.0.0"
77
+ },
78
+ "peerDependenciesMeta": {
79
+ "@simplewebauthn/server": {
80
+ "optional": true
81
+ }
82
+ },
76
83
  "engines": {
77
84
  "node": ">=24"
78
85
  },