@tern-secure/auth 1.1.0-canary.v20251008165428 → 1.1.0-canary.v20251020032343

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.
Files changed (94) hide show
  1. package/dist/cjs/{resources → auth}/AuthCookieManager.js +12 -1
  2. package/dist/cjs/auth/AuthCookieManager.js.map +1 -0
  3. package/dist/cjs/auth/cookies/session.js +83 -0
  4. package/dist/cjs/auth/cookies/session.js.map +1 -0
  5. package/dist/cjs/auth/request.js +159 -0
  6. package/dist/cjs/auth/request.js.map +1 -0
  7. package/dist/cjs/instance/TernAuth.js +109 -19
  8. package/dist/cjs/instance/TernAuth.js.map +1 -1
  9. package/dist/cjs/instance/events.js +3 -2
  10. package/dist/cjs/instance/events.js.map +1 -1
  11. package/dist/cjs/instance/jwtClient.js +72 -0
  12. package/dist/cjs/instance/jwtClient.js.map +1 -0
  13. package/dist/cjs/resources/Base.js +7 -0
  14. package/dist/cjs/resources/Base.js.map +1 -1
  15. package/dist/cjs/resources/Session.js +105 -0
  16. package/dist/cjs/resources/Session.js.map +1 -0
  17. package/dist/cjs/resources/SignIn.js +25 -27
  18. package/dist/cjs/resources/SignIn.js.map +1 -1
  19. package/dist/cjs/resources/Token.js +32 -0
  20. package/dist/cjs/resources/Token.js.map +1 -0
  21. package/dist/cjs/resources/UserData.js +43 -0
  22. package/dist/cjs/resources/UserData.js.map +1 -0
  23. package/dist/cjs/resources/cookie.js +154 -0
  24. package/dist/cjs/resources/cookie.js.map +1 -0
  25. package/dist/cjs/resources/internal.js +4 -2
  26. package/dist/cjs/resources/internal.js.map +1 -1
  27. package/dist/cjs/utils/jwt.js +46 -0
  28. package/dist/cjs/utils/jwt.js.map +1 -0
  29. package/dist/cjs/utils/mapDecode.js +33 -0
  30. package/dist/cjs/utils/mapDecode.js.map +1 -0
  31. package/dist/esm/{resources → auth}/AuthCookieManager.js +13 -4
  32. package/dist/esm/auth/AuthCookieManager.js.map +1 -0
  33. package/dist/esm/auth/cookies/session.js +58 -0
  34. package/dist/esm/auth/cookies/session.js.map +1 -0
  35. package/dist/esm/auth/request.js +134 -0
  36. package/dist/esm/auth/request.js.map +1 -0
  37. package/dist/esm/instance/TernAuth.js +111 -20
  38. package/dist/esm/instance/TernAuth.js.map +1 -1
  39. package/dist/esm/instance/events.js +3 -2
  40. package/dist/esm/instance/events.js.map +1 -1
  41. package/dist/esm/instance/jwtClient.js +47 -0
  42. package/dist/esm/instance/jwtClient.js.map +1 -0
  43. package/dist/esm/resources/Base.js +7 -0
  44. package/dist/esm/resources/Base.js.map +1 -1
  45. package/dist/esm/resources/Session.js +81 -0
  46. package/dist/esm/resources/Session.js.map +1 -0
  47. package/dist/esm/resources/SignIn.js +25 -27
  48. package/dist/esm/resources/SignIn.js.map +1 -1
  49. package/dist/esm/resources/Token.js +8 -0
  50. package/dist/esm/resources/Token.js.map +1 -0
  51. package/dist/esm/resources/UserData.js +19 -0
  52. package/dist/esm/resources/UserData.js.map +1 -0
  53. package/dist/esm/resources/cookie.js +130 -0
  54. package/dist/esm/resources/cookie.js.map +1 -0
  55. package/dist/esm/resources/internal.js +2 -1
  56. package/dist/esm/resources/internal.js.map +1 -1
  57. package/dist/esm/utils/jwt.js +22 -0
  58. package/dist/esm/utils/jwt.js.map +1 -0
  59. package/dist/esm/utils/mapDecode.js +9 -0
  60. package/dist/esm/utils/mapDecode.js.map +1 -0
  61. package/dist/types/{resources → auth}/AuthCookieManager.d.ts +5 -1
  62. package/dist/types/auth/AuthCookieManager.d.ts.map +1 -0
  63. package/dist/types/auth/cookies/session.d.ts +8 -0
  64. package/dist/types/auth/cookies/session.d.ts.map +1 -0
  65. package/dist/types/auth/request.d.ts +49 -0
  66. package/dist/types/auth/request.d.ts.map +1 -0
  67. package/dist/types/instance/TernAuth.d.ts +17 -1
  68. package/dist/types/instance/TernAuth.d.ts.map +1 -1
  69. package/dist/types/instance/events.d.ts +9 -1
  70. package/dist/types/instance/events.d.ts.map +1 -1
  71. package/dist/types/instance/jwtClient.d.ts +22 -0
  72. package/dist/types/instance/jwtClient.d.ts.map +1 -0
  73. package/dist/types/resources/Base.d.ts +6 -0
  74. package/dist/types/resources/Base.d.ts.map +1 -1
  75. package/dist/types/resources/Session.d.ts +49 -0
  76. package/dist/types/resources/Session.d.ts.map +1 -0
  77. package/dist/types/resources/SignIn.d.ts +3 -1
  78. package/dist/types/resources/SignIn.d.ts.map +1 -1
  79. package/dist/types/resources/Token.d.ts +5 -0
  80. package/dist/types/resources/Token.d.ts.map +1 -0
  81. package/dist/types/resources/UserData.d.ts +8 -0
  82. package/dist/types/resources/UserData.d.ts.map +1 -0
  83. package/dist/types/resources/cookie.d.ts +24 -0
  84. package/dist/types/resources/cookie.d.ts.map +1 -0
  85. package/dist/types/resources/internal.d.ts +2 -1
  86. package/dist/types/resources/internal.d.ts.map +1 -1
  87. package/dist/types/utils/jwt.d.ts +12 -0
  88. package/dist/types/utils/jwt.d.ts.map +1 -0
  89. package/dist/types/utils/mapDecode.d.ts +4 -0
  90. package/dist/types/utils/mapDecode.d.ts.map +1 -0
  91. package/package.json +3 -3
  92. package/dist/cjs/resources/AuthCookieManager.js.map +0 -1
  93. package/dist/esm/resources/AuthCookieManager.js.map +0 -1
  94. package/dist/types/resources/AuthCookieManager.d.ts.map +0 -1
@@ -0,0 +1,22 @@
1
+ import type { DecodedIdToken, SignedInSession, TernSecureUser } from '@tern-secure/types';
2
+ import type { AuthCookieManager } from '../auth/AuthCookieManager';
3
+ /**
4
+ * Utility functions for loading user from JWT cookie and updating client state
5
+ * This addresses the issue where user is undefined when client loads on page refresh
6
+ */
7
+ export interface ClientUpdateOptions {
8
+ authCookieManager: AuthCookieManager;
9
+ onUserUpdate?: (user: TernSecureUser | null) => void;
10
+ onSessionUpdate?: (session: SignedInSession | null) => void;
11
+ }
12
+ /**
13
+ * Creates Firebase user from stored JWT token (ID token)
14
+ * Since the token is already a Firebase ID token, we validate it and wait for auth state
15
+ */
16
+ declare const createClientFromJwt: (jwtToken: string | null) => DecodedIdToken | null;
17
+ /**
18
+ * Updates client user state and triggers callbacks
19
+ */
20
+ declare const updateClient: (user: TernSecureUser | null, options: Pick<ClientUpdateOptions, "onUserUpdate" | "onSessionUpdate">) => void;
21
+ export { createClientFromJwt, updateClient };
22
+ //# sourceMappingURL=jwtClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtClient.d.ts","sourceRoot":"","sources":["../../../src/instance/jwtClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGnE;;;GAGG;AAEH,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAC;CAC7D;AAED;;;GAGG;AACH,QAAA,MAAM,mBAAmB,GAAI,UAAU,MAAM,GAAG,IAAI,KAAG,cAAc,GAAG,IAUvE,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,YAAY,GAChB,MAAM,cAAc,GAAG,IAAI,EAC3B,SAAS,IAAI,CAAC,mBAAmB,EAAE,cAAc,GAAG,iBAAiB,CAAC,KACrE,IAsCF,CAAC;AAEF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC"}
@@ -6,6 +6,7 @@ export type PostMutateParams = {
6
6
  body?: any;
7
7
  method?: HTTPMethod | undefined;
8
8
  path?: string;
9
+ search?: ConstructorParameters<typeof URLSearchParams>[0];
9
10
  };
10
11
  export declare abstract class TernSecureBase {
11
12
  static ternsecure: TernSecureAuth;
@@ -29,6 +30,11 @@ export declare abstract class TernSecureBase {
29
30
  * Instance method for making POST requests
30
31
  */
31
32
  protected basePost(params: PostMutateParams): Promise<ApiResponseJSON<any> | null>;
33
+ /**
34
+ * Instance method to make GET requests
35
+ * This is a convenience method that sets the HTTP method to GET
36
+ */
37
+ protected baseGet(params: Omit<PostMutateParams, 'method'>): Promise<ApiResponseJSON<any> | null>;
32
38
  /**
33
39
  * Protected instance method for making POST requests with specific path and body
34
40
  * This is designed to be used by child classes like SignIn
@@ -1 +1 @@
1
- {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../../src/resources/Base.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAe,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,QAAQ,GACR,KAAK,GACL,MAAM,GACN,SAAS,GACT,OAAO,GACP,MAAM,GACN,KAAK,GACL,OAAO,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,8BAAsB,cAAc;IAClC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;IAElC,MAAM,KAAK,SAAS,oDAEnB;IAED,MAAM,KAAK,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAE5D;IACD,SAAS,KAAK,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAE/D;IAED;;;OAGG;qBACoB,gBAAgB,CAAC,CAAC,EACvC,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAoDrC;;OAEG;WACU,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIrF;;OAEG;cACa,gBAAgB,CAC9B,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIvC;;OAEG;cACa,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIxF;;;OAGG;cACa,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;WAOxE,cAAc,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;cAI9E,cAAc,CAC5B,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIvC,OAAO,CAAC,MAAM,CAAC,gCAAgC;CAIhD"}
1
+ {"version":3,"file":"Base.d.ts","sourceRoot":"","sources":["../../../src/resources/Base.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAe,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,QAAQ,GACR,KAAK,GACL,MAAM,GACN,SAAS,GACT,OAAO,GACP,MAAM,GACN,KAAK,GACL,OAAO,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC;AAEF,8BAAsB,cAAc;IAClC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC;IAElC,MAAM,KAAK,SAAS,oDAEnB;IAED,MAAM,KAAK,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAE5D;IACD,SAAS,KAAK,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAE/D;IAED;;;OAGG;qBACoB,gBAAgB,CAAC,CAAC,EACvC,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAoDrC;;OAEG;WACU,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIrF;;OAEG;cACa,gBAAgB,CAC9B,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIvC;;OAEG;cACa,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIxF;;;OAGG;cACa,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIvG;;;OAGG;cACa,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;WAOxE,cAAc,CAAC,WAAW,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;cAI9E,cAAc,CAC5B,WAAW,EAAE,cAAc,GAC1B,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAIvC,OAAO,CAAC,MAAM,CAAC,gCAAgC;CAIhD"}
@@ -0,0 +1,49 @@
1
+ import type { IdTokenResult, SessionJson, SessionResource, SessionStatus, TernSecureUser } from '@tern-secure/types';
2
+ import { TernSecureBase } from './Base';
3
+ /**
4
+ * Enhanced Session class that handles custom token authentication for client-server sync.
5
+ *
6
+ * Key Features:
7
+ * - Manages custom tokens for server-side verification
8
+ * - Uses TernSecureUser object directly (no Firebase Auth instance needed)
9
+ * - Provides seamless client-server session synchronization
10
+ * - Works with in-memory persistence by using custom tokens to restore auth state
11
+ */
12
+ export declare class Session extends TernSecureBase implements SessionResource {
13
+ pathRoot: string;
14
+ status: SessionStatus;
15
+ token: string;
16
+ claims: IdTokenResult['claims'];
17
+ authTime: string;
18
+ expirationTime: string;
19
+ issuedAtTime: string;
20
+ signInProvider: string | null;
21
+ signInSecondFactor: string | null;
22
+ user?: TernSecureUser;
23
+ constructor(sessionData: Partial<SessionResource>);
24
+ /**
25
+ * Initialize session from existing session data
26
+ */
27
+ private initializeFromSessionData;
28
+ /**
29
+ * Create custom token from current session for server-side sync
30
+ * This calls the backend API to create a custom token from the current ID token
31
+ */
32
+ private createSession;
33
+ /**
34
+ * FIXED: Now properly returns the custom token string instead of the full API response
35
+ * This method correctly extracts the token from the API response structure
36
+ */
37
+ getIdAndRefreshToken: (idToken: string, csrfToken: string) => Promise<void>;
38
+ /**
39
+ * NEW: create method that calls API to create session
40
+ * API handles everything, no return value needed
41
+ * This method works with the existing sessionData passed to constructor
42
+ */
43
+ create: (csrfToken: string) => Promise<void>;
44
+ /**
45
+ * Convert session to plain object for serialization
46
+ */
47
+ toJSON(): SessionJson;
48
+ }
49
+ //# sourceMappingURL=Session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../src/resources/Session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC;;;;;;;;GAQG;AACH,qBAAa,OAAQ,SAAQ,cAAe,YAAW,eAAe;IACpE,QAAQ,SAA6B;IAErC,MAAM,EAAG,aAAa,CAAC;IACvB,KAAK,EAAG,MAAM,CAAC;IACf,MAAM,EAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,EAAG,MAAM,CAAC;IAClB,cAAc,EAAG,MAAM,CAAC;IACxB,YAAY,EAAG,MAAM,CAAC;IACtB,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAG,MAAM,GAAG,IAAI,CAAC;IACnC,IAAI,CAAC,EAAE,cAAc,CAAC;gBAEV,WAAW,EAAE,OAAO,CAAC,eAAe,CAAC;IAKjD;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;;OAGG;IACH,OAAO,CAAC,aAAa,CAQnB;IAGF;;;OAGG;IACH,oBAAoB,GAAU,SAAS,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;IAEF;;;;OAIG;IACH,MAAM,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAG/C;IAEF;;OAEG;IACH,MAAM,IAAI,WAAW;CAatB"}
@@ -1,6 +1,7 @@
1
- import type { ResendEmailVerification, SignInFormValues, SignInResource, SignInResponse, SignInStatus } from '@tern-secure/types';
1
+ import type { ResendEmailVerification, SignInFormValues, SignInResource, SignInResponse as SignInResponseFromTypes, SignInStatus } from '@tern-secure/types';
2
2
  import type { Auth, UserCredential } from 'firebase/auth';
3
3
  import { TernSecureBase } from './Base';
4
+ type SignInResponse = SignInResponseFromTypes;
4
5
  export type TernRequestInit = RequestInit;
5
6
  export type SignInParams = {
6
7
  idToken: string;
@@ -29,4 +30,5 @@ export declare class SignIn extends TernSecureBase implements SignInResource {
29
30
  private _signInWithPopUp;
30
31
  checkRedirectResult(): Promise<SignInResponse | null>;
31
32
  }
33
+ export {};
32
34
  //# sourceMappingURL=SignIn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../../src/resources/SignIn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW1D,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAOxC,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AASF,qBAAa,MAAO,SAAQ,cAAe,YAAW,cAAc;IAClE,QAAQ,SAA6B;IAErC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAA+B;gBAEvC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;IAMrD,oBAAoB,GAAU,YAAY,cAAc,uDAWtD;IAEF,oBAAoB,GAAU,QAAQ,gBAAgB,KAAG,OAAO,CAAC,cAAc,CAAC,CAuB9E;IAEF,cAAc,GAAU,QAAQ,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC,CAS9D;IAEF,kBAAkB,GAChB,UAAU,MAAM,EAChB,UAAU;QACR,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;KAC7B,KACA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA6B/B;IAEF,iBAAiB,GAAU,WAAW,MAAM,EAAE,cAAc,GAAG,KAAG,OAAO,CAAC,cAAc,CAAC,CAEvF;IAEF,sBAAsB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;IAEF,uBAAuB,QAAa,OAAO,CAAC,uBAAuB,CAAC,CA2BlE;IAEF,OAAO,CAAC,iBAAiB;YA0BX,kBAAkB;YAuBlB,iBAAiB;YAoBjB,mBAAmB;YAInB,gBAAgB;IAIjB,mBAAmB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAGnE"}
1
+ {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../../src/resources/SignIn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,cAAc,IAAI,uBAAuB,EACzC,YAAY,EAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW1D,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,KAAK,cAAc,GAAG,uBAAuB,CAAC;AAO9C,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC;AAE1C,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AASF,qBAAa,MAAO,SAAQ,cAAe,YAAW,cAAc;IAClE,QAAQ,SAA6B;IAErC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,YAAY,CAA+B;gBAEvC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS;IAMrD,oBAAoB,GAAU,YAAY,cAAc,uDAWtD;IAEF,oBAAoB,GAAU,QAAQ,gBAAgB,KAAG,OAAO,CAAC,cAAc,CAAC,CAwB9E;IAEF,cAAc,GAAU,QAAQ,gBAAgB,KAAG,OAAO,CAAC,IAAI,CAAC,CAS9D;IAEF,kBAAkB,GAChB,UAAU,MAAM,EAChB,UAAU;QACR,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;KAC7B,KACA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4B/B;IAEF,iBAAiB,GAAU,WAAW,MAAM,EAAE,cAAc,GAAG,KAAG,OAAO,CAAC,cAAc,CAAC,CAEvF;IAEF,sBAAsB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;IAEF,uBAAuB,QAAa,OAAO,CAAC,uBAAuB,CAAC,CAuBlE;IAEF,OAAO,CAAC,iBAAiB;YA0BX,kBAAkB;YAwBlB,iBAAiB;YAmBjB,mBAAmB;YAInB,gBAAgB;IAIjB,mBAAmB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAGnE"}
@@ -0,0 +1,5 @@
1
+ import { TernSecureBase } from './Base';
2
+ export declare class Token extends TernSecureBase {
3
+ pathroot: string;
4
+ }
5
+ //# sourceMappingURL=Token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Token.d.ts","sourceRoot":"","sources":["../../../src/resources/Token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,qBAAa,KAAM,SAAQ,cAAc;IACrC,QAAQ,SAAY;CACvB"}
@@ -0,0 +1,8 @@
1
+ import { TernSecureBase } from './Base';
2
+ export declare class UserData extends TernSecureBase {
3
+ pathRoot: string;
4
+ private idToken;
5
+ constructor(idToken?: string);
6
+ get: () => Promise<import("..").ApiResponseJSON<any> | null>;
7
+ }
8
+ //# sourceMappingURL=UserData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserData.d.ts","sourceRoot":"","sources":["../../../src/resources/UserData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,qBAAa,QAAS,SAAQ,cAAc;IAC1C,QAAQ,SAAsB;IAE9B,OAAO,CAAC,OAAO,CAAqB;gBAExB,OAAO,CAAC,EAAE,MAAM;IAK5B,GAAG,0DAKF;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { CookieResource } from '@tern-secure/types';
2
+ import { TernSecureBase } from './Base';
3
+ export type TokenResult = {
4
+ success: boolean;
5
+ token?: string;
6
+ error?: string;
7
+ };
8
+ export declare class Cookie extends TernSecureBase implements CookieResource {
9
+ pathroot: string;
10
+ idToken?: string;
11
+ sessionToken?: string;
12
+ refreshToken?: string;
13
+ customToken?: string;
14
+ constructor();
15
+ private getTokenInCookie;
16
+ private parseTokenResponse;
17
+ getIdToken: () => Promise<TokenResult>;
18
+ getSessionToken: () => Promise<TokenResult>;
19
+ getRefreshToken: () => Promise<TokenResult>;
20
+ getCustomToken: () => Promise<TokenResult>;
21
+ getAllTokens: () => Promise<Record<string, TokenResult>>;
22
+ hasToken: (tokenType: keyof CookieResource) => Promise<boolean>;
23
+ }
24
+ //# sourceMappingURL=cookie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../../src/resources/cookie.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAQF,qBAAa,MAAO,SAAQ,cAAe,YAAW,cAAc;IAClE,QAAQ,SAAa;IAErB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;;IAMrB,OAAO,CAAC,gBAAgB,CAKtB;IAGF,OAAO,CAAC,kBAAkB,CAkBxB;IAEF,UAAU,QAAa,OAAO,CAAC,WAAW,CAAC,CAIzC;IAEF,eAAe,QAAa,OAAO,CAAC,WAAW,CAAC,CAqB9C;IAEF,eAAe,QAAa,OAAO,CAAC,WAAW,CAAC,CAqB9C;IAEF,cAAc,QAAa,OAAO,CAAC,WAAW,CAAC,CAqB7C;IAEF,YAAY,QAAa,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAc3D;IAEF,QAAQ,GAAU,WAAW,MAAM,cAAc,KAAG,OAAO,CAAC,OAAO,CAAC,CAalE;CACH"}
@@ -1,8 +1,9 @@
1
1
  export type { TernSecureAuth } from '../instance/TernAuth';
2
+ export * from './Session';
2
3
  export * from './SignUp';
3
4
  export * from './SignIn';
4
5
  export * from './Base';
5
- export * from './AuthCookieManager';
6
+ export * from '../auth/AuthCookieManager';
6
7
  export * from '../utils';
7
8
  export * from './Error';
8
9
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/resources/internal.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/resources/internal.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { DecodedIdToken, JWTPayload, JWTProtectedHeader } from './mapDecode';
2
+ type JWT = {
3
+ encoded: {
4
+ header: JWTProtectedHeader;
5
+ payload: JWTPayload;
6
+ signature: string;
7
+ };
8
+ decoded: DecodedIdToken;
9
+ };
10
+ export declare function decode(token: string): JWT;
11
+ export {};
12
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/utils/jwt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGlF,KAAK,GAAG,GAAG;IACT,OAAO,EAAE;QAAE,MAAM,EAAE,kBAAkB,CAAC;QAAC,OAAO,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,OAAO,EAAE,cAAc,CAAC;CACzB,CAAC;AAEF,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAmBzC"}
@@ -0,0 +1,4 @@
1
+ import type { DecodedIdToken, JWTPayload, JWTProtectedHeader } from '@tern-secure/types';
2
+ export declare function mapJwtPayloadToDecodedIdToken(payload: JWTPayload): DecodedIdToken;
3
+ export type { DecodedIdToken, JWTPayload, JWTProtectedHeader };
4
+ //# sourceMappingURL=mapDecode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapDecode.d.ts","sourceRoot":"","sources":["../../../src/utils/mapDecode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEzF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,UAAU,kBAIhE;AAED,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tern-secure/auth",
3
- "version": "1.1.0-canary.v20251008165428",
3
+ "version": "1.1.0-canary.v20251020032343",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/TernSecure/auth.git",
@@ -25,8 +25,8 @@
25
25
  "dependencies": {
26
26
  "server-only": "^0.0.1",
27
27
  "tslib": "2.4.1",
28
- "@tern-secure/shared": "1.3.0-canary.v20251008165428",
29
- "@tern-secure/types": "1.1.0-canary.v20251008165428"
28
+ "@tern-secure/shared": "1.3.0-canary.v20251020032343",
29
+ "@tern-secure/types": "1.1.0-canary.v20251020032343"
30
30
  },
31
31
  "devDependencies": {
32
32
  "firebase": "^12.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/resources/AuthCookieManager.ts"],"sourcesContent":["import { \n type CookieAttributes,\n cookieHandler} from '@tern-secure/shared/cookie';\n\nconst CSRF_COOKIE_NAME = '_session_terncf';\n\ntype CSRFToken = {\n token: string | null;\n}\n\ntype CookieOptions = CookieAttributes\n\nconst CSRF_COOKIE_OPTIONS: CookieOptions = {\n secure: true,\n sameSite: 'strict',\n expires: 1 / 24 //1 hour\n};\n\n/**\n * AuthCookieManger class for managing authentication state and cookies\n */\nexport class AuthCookieManager {\n private readonly csrfCookieHandler = cookieHandler(CSRF_COOKIE_NAME);\n\n constructor() {\n this.ensureCSRFToken();\n }\n\n \n private generateCSRFToken(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\n }\n\n private ensureCSRFToken(): string {\n let ctoken = this.getCSRFToken();\n if (!ctoken) {\n ctoken = this.generateCSRFToken();\n this.setCSRFToken({ token: ctoken });\n }\n return ctoken;\n }\n \n\n /**\n * Set CSRFcookie\n */\n\n setCSRFToken(token: CSRFToken): void {\n try {\n if (token.token) {\n this.csrfCookieHandler.set(token.token, CSRF_COOKIE_OPTIONS);\n }\n } catch (error) {\n console.error('Failed to set CSRF token:', error);\n throw new Error('Unable to store CSRF token');\n }\n }\n \n\n /**\n * Get CSRF token from cookies\n */\n getCSRFToken(): string | undefined {\n try {\n return this.csrfCookieHandler.get();\n } catch (error) {\n console.error('Failed to get CSRF token:', error);\n return undefined;\n }\n }\n\n\n /**\n * Clear all authentication cookies\n */\n clearAuth(): void {\n try {\n this.csrfCookieHandler.remove();\n } catch (error) {\n console.error('Failed to clear auth cookies:', error);\n }\n }\n}"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAEsB;AAEtB,MAAM,mBAAmB;AAQzB,MAAM,sBAAqC;AAAA,EACzC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS,IAAI;AAAA;AACf;AAKO,MAAM,kBAAkB;AAAA,EACZ,wBAAoB,6BAAc,gBAAgB;AAAA,EAEnE,cAAc;AACZ,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAGQ,oBAA4B;AAClC,UAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,WAAO,gBAAgB,KAAK;AAC5B,WAAO,MAAM,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA,EAChF;AAAA,EAEQ,kBAA0B;AAChC,QAAI,SAAS,KAAK,aAAa;AAC/B,QAAI,CAAC,QAAQ;AACX,eAAS,KAAK,kBAAkB;AAChC,WAAK,aAAa,EAAE,OAAO,OAAO,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,OAAwB;AACnC,QAAI;AACF,UAAI,MAAM,OAAO;AACf,aAAK,kBAAkB,IAAI,MAAM,OAAO,mBAAmB;AAAA,MAC7D;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAChD,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,eAAmC;AACjC,QAAI;AACF,aAAO,KAAK,kBAAkB,IAAI;AAAA,IACpC,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAChD,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,YAAkB;AAChB,QAAI;AACF,WAAK,kBAAkB,OAAO;AAAA,IAChC,SAAS,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AAAA,IACtD;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/resources/AuthCookieManager.ts"],"sourcesContent":["import { \n type CookieAttributes,\n cookieHandler} from '@tern-secure/shared/cookie';\n\nconst CSRF_COOKIE_NAME = '_session_terncf';\n\ntype CSRFToken = {\n token: string | null;\n}\n\ntype CookieOptions = CookieAttributes\n\nconst CSRF_COOKIE_OPTIONS: CookieOptions = {\n secure: true,\n sameSite: 'strict',\n expires: 1 / 24 //1 hour\n};\n\n/**\n * AuthCookieManger class for managing authentication state and cookies\n */\nexport class AuthCookieManager {\n private readonly csrfCookieHandler = cookieHandler(CSRF_COOKIE_NAME);\n\n constructor() {\n this.ensureCSRFToken();\n }\n\n \n private generateCSRFToken(): string {\n const array = new Uint8Array(32);\n crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join('');\n }\n\n private ensureCSRFToken(): string {\n let ctoken = this.getCSRFToken();\n if (!ctoken) {\n ctoken = this.generateCSRFToken();\n this.setCSRFToken({ token: ctoken });\n }\n return ctoken;\n }\n \n\n /**\n * Set CSRFcookie\n */\n\n setCSRFToken(token: CSRFToken): void {\n try {\n if (token.token) {\n this.csrfCookieHandler.set(token.token, CSRF_COOKIE_OPTIONS);\n }\n } catch (error) {\n console.error('Failed to set CSRF token:', error);\n throw new Error('Unable to store CSRF token');\n }\n }\n \n\n /**\n * Get CSRF token from cookies\n */\n getCSRFToken(): string | undefined {\n try {\n return this.csrfCookieHandler.get();\n } catch (error) {\n console.error('Failed to get CSRF token:', error);\n return undefined;\n }\n }\n\n\n /**\n * Clear all authentication cookies\n */\n clearAuth(): void {\n try {\n this.csrfCookieHandler.remove();\n } catch (error) {\n console.error('Failed to clear auth cookies:', error);\n }\n }\n}"],"mappings":"AAAA;AAAA,EAEE;AAAA,OAAoB;AAEtB,MAAM,mBAAmB;AAQzB,MAAM,sBAAqC;AAAA,EACzC,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS,IAAI;AAAA;AACf;AAKO,MAAM,kBAAkB;AAAA,EACZ,oBAAoB,cAAc,gBAAgB;AAAA,EAEnE,cAAc;AACZ,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAGQ,oBAA4B;AAClC,UAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,WAAO,gBAAgB,KAAK;AAC5B,WAAO,MAAM,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA,EAChF;AAAA,EAEQ,kBAA0B;AAChC,QAAI,SAAS,KAAK,aAAa;AAC/B,QAAI,CAAC,QAAQ;AACX,eAAS,KAAK,kBAAkB;AAChC,WAAK,aAAa,EAAE,OAAO,OAAO,CAAC;AAAA,IACrC;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,OAAwB;AACnC,QAAI;AACF,UAAI,MAAM,OAAO;AACf,aAAK,kBAAkB,IAAI,MAAM,OAAO,mBAAmB;AAAA,MAC7D;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAChD,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,eAAmC;AACjC,QAAI;AACF,aAAO,KAAK,kBAAkB,IAAI;AAAA,IACpC,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAChD,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,YAAkB;AAChB,QAAI;AACF,WAAK,kBAAkB,OAAO;AAAA,IAChC,SAAS,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AAAA,IACtD;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthCookieManager.d.ts","sourceRoot":"","sources":["../../../src/resources/AuthCookieManager.ts"],"names":[],"mappings":"AAMA,KAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAA;AAUD;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;;IAOrE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAUvB;;MAEE;IAEF,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAYpC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAUlC;;OAEG;IACH,SAAS,IAAI,IAAI;CAOlB"}