@tern-secure/nextjs 1.8.2 → 1.8.3

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 (55) hide show
  1. package/dist/jest.setup.d.ts +0 -0
  2. package/dist/jest.setup.js +8 -0
  3. package/dist/jest.setup.js.map +1 -0
  4. package/dist/src/app-router/client/ClientProvider.js +34 -0
  5. package/dist/src/app-router/client/ClientProvider.js.map +1 -0
  6. package/dist/src/app-router/client/client-init.js +44 -0
  7. package/dist/src/app-router/client/client-init.js.map +1 -0
  8. package/dist/src/app-router/client/config.js +18 -0
  9. package/dist/src/app-router/client/config.js.map +1 -0
  10. package/dist/src/app-router/client/index.js +3 -0
  11. package/dist/src/app-router/client/index.js.map +1 -0
  12. package/dist/src/app-router/client/providers/ReactTernSecureProvider.js +16 -0
  13. package/dist/src/app-router/client/providers/ReactTernSecureProvider.js.map +1 -0
  14. package/dist/src/app-router/client/providers/ternSecureClientProvider.d.ts +8 -0
  15. package/dist/src/app-router/client/providers/ternSecureClientProvider.js +34 -0
  16. package/dist/src/app-router/client/providers/ternSecureClientProvider.js.map +1 -0
  17. package/dist/src/app-router/client/providers/ternSecureContext.js +5 -0
  18. package/dist/src/app-router/client/providers/ternSecureContext.js.map +1 -0
  19. package/dist/src/app-router/server/ErrorBoundary.js +22 -0
  20. package/dist/src/app-router/server/ErrorBoundary.js.map +1 -0
  21. package/dist/src/app-router/server/index.js +2 -0
  22. package/dist/src/app-router/server/index.js.map +1 -0
  23. package/dist/src/app-router/server/providers/TernSecureServerProvider.js +18 -0
  24. package/dist/src/app-router/server/providers/TernSecureServerProvider.js.map +1 -0
  25. package/dist/src/components/index.js +2 -0
  26. package/dist/src/components/index.js.map +1 -0
  27. package/dist/src/errors/index.js +12 -0
  28. package/dist/src/errors/index.js.map +1 -0
  29. package/dist/src/hooks/useAuth.js +42 -0
  30. package/dist/src/hooks/useAuth.js.map +1 -0
  31. package/dist/src/index.js +5 -0
  32. package/dist/src/index.js.map +1 -0
  33. package/dist/src/types/ternsecure.js +2 -0
  34. package/dist/src/types/ternsecure.js.map +1 -0
  35. package/dist/src/utils/index.js +2 -0
  36. package/dist/src/utils/index.js.map +1 -0
  37. package/package.json +2 -2
  38. package/dist/app-router/client/providers/ternSecureClientProvider.d.ts +0 -9
  39. package/dist/index.js +0 -172
  40. package/dist/index.js.map +0 -1
  41. /package/dist/{app-router → src/app-router}/client/ClientProvider.d.ts +0 -0
  42. /package/dist/{app-router → src/app-router}/client/client-init.d.ts +0 -0
  43. /package/dist/{app-router → src/app-router}/client/config.d.ts +0 -0
  44. /package/dist/{app-router → src/app-router}/client/index.d.ts +0 -0
  45. /package/dist/{app-router → src/app-router}/client/providers/ReactTernSecureProvider.d.ts +0 -0
  46. /package/dist/{app-router → src/app-router}/client/providers/ternSecureContext.d.ts +0 -0
  47. /package/dist/{app-router → src/app-router}/server/ErrorBoundary.d.ts +0 -0
  48. /package/dist/{app-router → src/app-router}/server/index.d.ts +0 -0
  49. /package/dist/{app-router → src/app-router}/server/providers/TernSecureServerProvider.d.ts +0 -0
  50. /package/dist/{components → src/components}/index.d.ts +0 -0
  51. /package/dist/{errors → src/errors}/index.d.ts +0 -0
  52. /package/dist/{hooks → src/hooks}/useAuth.d.ts +0 -0
  53. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  54. /package/dist/{types → src/types}/ternsecure.d.ts +0 -0
  55. /package/dist/{utils → src/utils}/index.d.ts +0 -0
File without changes
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ process.env.NEXT_PUBLIC_FIREBASE_API_KEY = 'test-api-key';
3
+ process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN = 'test-auth-domain';
4
+ process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID = 'test-project-id';
5
+ process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET = 'test-bucket';
6
+ process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID = 'test-sender-id';
7
+ process.env.NEXT_PUBLIC_FIREBASE_APP_ID = 'test-app-id';
8
+ //# sourceMappingURL=jest.setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jest.setup.js","sourceRoot":"","sources":["../jest.setup.ts"],"names":[],"mappings":";AAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,cAAc,CAAC;AAC1D,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,kBAAkB,CAAC;AAClE,OAAO,CAAC,GAAG,CAAC,+BAA+B,GAAG,iBAAiB,CAAC;AAChE,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,aAAa,CAAC;AAChE,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,gBAAgB,CAAC;AACxE,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,aAAa,CAAC"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ import { getTernSecureAuth } from './client-init';
4
+ let globalAuthState = {
5
+ user: null,
6
+ loading: true,
7
+ error: null,
8
+ initialized: false
9
+ };
10
+ let listeners = [];
11
+ function setGlobalAuthState(newState) {
12
+ globalAuthState = { ...globalAuthState, ...newState };
13
+ listeners.forEach(listener => listener(globalAuthState));
14
+ }
15
+ export function subscribeToAuthState(listener) {
16
+ listeners.push(listener);
17
+ listener(globalAuthState);
18
+ return () => {
19
+ listeners = listeners.filter(l => l !== listener);
20
+ };
21
+ }
22
+ export default function ClientProvider() {
23
+ useEffect(() => {
24
+ const auth = getTernSecureAuth();
25
+ const unsubscribe = auth.onAuthStateChanged((user) => {
26
+ setGlobalAuthState({ user, loading: false, error: null, initialized: true });
27
+ }, (error) => {
28
+ setGlobalAuthState({ user: null, loading: false, error, initialized: true });
29
+ });
30
+ return () => unsubscribe();
31
+ }, []);
32
+ return null; // This component doesn't render anything
33
+ }
34
+ //# sourceMappingURL=ClientProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClientProvider.js","sourceRoot":"","sources":["../../../../src/app-router/client/ClientProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,IAAI,eAAe,GAAc;IAC/B,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,KAAK;CACnB,CAAC;AAEF,IAAI,SAAS,GAAsC,EAAE,CAAC;AAEtD,SAAS,kBAAkB,CAAC,QAA4B;IACtD,eAAe,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtD,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAoC;IACvE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1B,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,cAAc;IACpC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CACzC,CAAC,IAAI,EAAE,EAAE;YACP,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC,CACF,CAAC;QAEF,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC,CAAC,yCAAyC;AACxD,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { getApps, initializeApp } from 'firebase/app';
2
+ import { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';
3
+ import { getFirestore } from 'firebase/firestore';
4
+ import { getStorage } from 'firebase/storage';
5
+ import { loadFireConfig, validateConfig } from './config';
6
+ import { ERRORS, TernSecureError } from '../../errors';
7
+ let app = null;
8
+ let auth = null;
9
+ let firestore = null;
10
+ let storage = null;
11
+ const initialize = () => {
12
+ if (typeof window === 'undefined') {
13
+ throw new TernSecureError(ERRORS.SERVER_SIDE_INITIALIZATION);
14
+ }
15
+ if (!app) {
16
+ const config = validateConfig(loadFireConfig());
17
+ app = getApps().length ? getApps()[0] : initializeApp(config);
18
+ auth = getAuth(app);
19
+ // Set persistence after initializing auth
20
+ setPersistence(auth, browserSessionPersistence);
21
+ firestore = getFirestore(app);
22
+ storage = getStorage(app);
23
+ }
24
+ return app;
25
+ };
26
+ export const getTernSecureAuth = () => {
27
+ if (!auth) {
28
+ initialize();
29
+ }
30
+ return auth;
31
+ };
32
+ export const getTernSecureFirestore = () => {
33
+ if (!firestore) {
34
+ initialize();
35
+ }
36
+ return firestore;
37
+ };
38
+ export const getTernSecureStorage = () => {
39
+ if (!storage) {
40
+ initialize();
41
+ }
42
+ return storage;
43
+ };
44
+ //# sourceMappingURL=client-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-init.js","sourceRoot":"","sources":["../../../../src/app-router/client/client-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAe,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,OAAO,EAAQ,cAAc,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,YAAY,EAAa,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEvD,IAAI,GAAG,GAAuB,IAAI,CAAC;AACnC,IAAI,IAAI,GAAgB,IAAI,CAAC;AAC7B,IAAI,SAAS,GAAqB,IAAI,CAAC;AACvC,IAAI,OAAO,GAA2B,IAAI,CAAC;AAE3C,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,eAAe,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC;QAChD,GAAG,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,0CAA0C;QAC1C,cAAc,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;QAChD,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;IACf,CAAC;IACD,OAAO,IAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE;IACzC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;IACf,CAAC;IACD,OAAO,SAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;IACf,CAAC;IACD,OAAO,OAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const loadFireConfig = () => ({
2
+ apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
3
+ authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
4
+ projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
5
+ storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
6
+ messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
7
+ appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
8
+ measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID,
9
+ });
10
+ export const validateConfig = (config) => {
11
+ Object.entries(config).forEach(([key, value]) => {
12
+ if (!value) {
13
+ throw new Error(`Missing environment variable: NEXT_PUBLIC_FIREBASE_${key.toUpperCase()}`);
14
+ }
15
+ });
16
+ return config;
17
+ };
18
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/app-router/client/config.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,GAAqB,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,4BAAsC;IAC1D,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,gCAA0C;IAClE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,+BAAyC;IAChE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mCAA6C;IACxE,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,wCAAkD;IACjF,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,2BAAqC;IACxD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mCAA6C;CACzE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAwB,EAAE,EAAE;IACzD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sDAAsD,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { getTernSecureAuth, getTernSecureFirestore, getTernSecureStorage } from './client-init';
2
+ export { loadFireConfig } from './config';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app-router/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ export function ReactTernSecureProvider({ children, value, onChange }) {
4
+ // Add any core React functionality here
5
+ return (_jsx("div", { "data-tern-secure-provider": true, children: children }));
6
+ }
7
+ // Add hooks for consuming the auth state
8
+ export function useTernSecure() {
9
+ // Implementation here
10
+ return {
11
+ user: null,
12
+ isLoaded: false,
13
+ // ... other auth state
14
+ };
15
+ }
16
+ //# sourceMappingURL=ReactTernSecureProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactTernSecureProvider.js","sourceRoot":"","sources":["../../../../../src/app-router/client/providers/ReactTernSecureProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAWZ,MAAM,UAAU,uBAAuB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAiB;IAClF,wCAAwC;IACxC,OAAO,CACL,2DACG,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,aAAa;IAC3B,sBAAsB;IACtB,OAAO;QACL,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,KAAK;QACf,uBAAuB;KACxB,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { TernSecureContextType } from '../../../types/ternsecure';
3
+ export declare const useTernSecure: () => TernSecureContextType;
4
+ interface TernSecureClientProviderProps {
5
+ children: React.ReactNode;
6
+ }
7
+ export declare function TernSecureClientProvider({ children }: TernSecureClientProviderProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useContext, useEffect, useState } from 'react';
4
+ import { getTernSecureAuth } from '../client-init';
5
+ const TernSecureContext = createContext(null);
6
+ export const useTernSecure = () => {
7
+ const context = useContext(TernSecureContext);
8
+ if (!context) {
9
+ throw new Error('useTernSecure must be used within a TernSecureClientProvider');
10
+ }
11
+ return context;
12
+ };
13
+ export function TernSecureClientProvider({ children }) {
14
+ const [authState, setAuthState] = useState({
15
+ user: null,
16
+ loading: true,
17
+ error: null,
18
+ initialized: false
19
+ });
20
+ useEffect(() => {
21
+ const auth = getTernSecureAuth();
22
+ const unsubscribe = auth.onAuthStateChanged((user) => {
23
+ setAuthState({ user, loading: false, error: null, initialized: true });
24
+ }, (error) => {
25
+ setAuthState({ user: null, loading: false, error, initialized: true });
26
+ });
27
+ return () => unsubscribe();
28
+ }, []);
29
+ const contextValue = {
30
+ authState
31
+ };
32
+ return (_jsx(TernSecureContext.Provider, { value: contextValue, children: children }));
33
+ }
34
+ //# sourceMappingURL=ternSecureClientProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ternSecureClientProvider.js","sourceRoot":"","sources":["../../../../../src/app-router/client/providers/ternSecureClientProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAGlD,MAAM,iBAAiB,GAAG,aAAa,CAA+B,IAAI,CAAC,CAAA;AAE3E,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAMD,MAAM,UAAU,wBAAwB,CAAC,EAAE,QAAQ,EAAiC;IAClF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY;QACpD,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,KAAK;KACnB,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;QAChC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CACzC,CAAC,IAAI,EAAE,EAAE;YACP,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACxE,CAAC,EACD,CAAC,KAAK,EAAE,EAAE;YACR,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;QACxE,CAAC,CACF,CAAA;QAED,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAA;IAKN,MAAM,YAAY,GAA0B;QAC1C,SAAS;KACV,CAAA;IAED,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAC5C,QAAQ,GACkB,CAC9B,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+ import { createContext } from 'react';
3
+ // This needs to be used only in client components
4
+ export const TernSecureContext = createContext(null);
5
+ //# sourceMappingURL=ternSecureContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ternSecureContext.js","sourceRoot":"","sources":["../../../../../src/app-router/client/providers/ternSecureContext.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AASrC,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,aAAa,CAA+B,IAAI,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import React from 'react';
3
+ class ErrorBoundary extends React.Component {
4
+ constructor(props) {
5
+ super(props);
6
+ this.state = { hasError: false };
7
+ }
8
+ static getDerivedStateFromError(_) {
9
+ return { hasError: true };
10
+ }
11
+ componentDidCatch(error, errorInfo) {
12
+ console.error('TernSecureProvider error:', error, errorInfo);
13
+ }
14
+ render() {
15
+ if (this.state.hasError) {
16
+ return this.props.fallback;
17
+ }
18
+ return this.props.children;
19
+ }
20
+ }
21
+ export default ErrorBoundary;
22
+ //# sourceMappingURL=ErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../../../src/app-router/server/ErrorBoundary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,KAA+B,MAAM,OAAO,CAAC;AAWpD,MAAM,aAAc,SAAQ,KAAK,CAAC,SAAiD;IACjF,YAAY,KAAyB;QACnC,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,CAAQ;QACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,SAAoB;QAClD,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC7B,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { TernSecureProvider } from './providers/TernSecureServerProvider';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app-router/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ export function TernSecureProvider({ children }) {
3
+ if (typeof window === 'undefined') {
4
+ // Server-side rendering
5
+ return _jsx(_Fragment, { children: children });
6
+ }
7
+ try {
8
+ // Client-side rendering
9
+ const { TernSecureClientProvider } = require('../../client/providers/ternSecureClientProvider');
10
+ return _jsx(TernSecureClientProvider, { children: children });
11
+ }
12
+ catch (error) {
13
+ console.error('Failed to load TernSecureClientProvider:', error);
14
+ // Fallback to prevent app crash
15
+ return _jsx(_Fragment, { children: children });
16
+ }
17
+ }
18
+ //# sourceMappingURL=TernSecureServerProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TernSecureServerProvider.js","sourceRoot":"","sources":["../../../../../src/app-router/server/providers/TernSecureServerProvider.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,kBAAkB,CAAC,EAAE,QAAQ,EAA2B;IACtE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,wBAAwB;QACxB,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;IAED,IAAI,CAAC;QACH,wBAAwB;QACxB,MAAM,EAAE,wBAAwB,EAAE,GAAG,OAAO,CAAC,iDAAiD,CAAC,CAAA;QAC/F,OAAO,KAAC,wBAAwB,cAAE,QAAQ,GAA4B,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;QACjE,gCAAgC;QAChC,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export const ERRORS = {
2
+ SERVER_SIDE_INITIALIZATION: 'TernSecure must be initialized on the client side',
3
+ NOT_INITIALIZED: 'TernSecure services are not initialized. Call initializeTernSecure() first',
4
+ HOOK_CONTEXT: (hookName) => `${hookName} must be used within TernSecureProvider`,
5
+ };
6
+ export class TernSecureError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'TernSecureError';
10
+ }
11
+ }
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,0BAA0B,EAAE,mDAAmD;IAC/E,eAAe,EAAE,4EAA4E;IAC7F,YAAY,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,QAAQ,yCAAyC;CAChF,CAAC;AAEX,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ 'use client';
2
+ import { useState, useEffect } from 'react';
3
+ import { subscribeToAuthState } from '../app-router/client/ClientProvider';
4
+ import { getTernSecureAuth } from '../app-router/client/client-init';
5
+ import { signInWithEmailAndPassword } from 'firebase/auth';
6
+ export function useAuth() {
7
+ const [authState, setAuthState] = useState({
8
+ user: null,
9
+ loading: true,
10
+ error: null,
11
+ initialized: false
12
+ });
13
+ useEffect(() => {
14
+ return subscribeToAuthState(setAuthState);
15
+ }, []);
16
+ const auth = getTernSecureAuth();
17
+ const signIn = async (email, password) => {
18
+ try {
19
+ const userCredential = await signInWithEmailAndPassword(auth, email, password);
20
+ return userCredential.user;
21
+ }
22
+ catch (error) {
23
+ throw new Error('Failed to sign in: ' + error.message);
24
+ }
25
+ };
26
+ const signOut = async () => {
27
+ try {
28
+ await auth.signOut();
29
+ }
30
+ catch (error) {
31
+ throw new Error('Failed to sign out: ' + error.message);
32
+ }
33
+ };
34
+ return {
35
+ user: authState.user,
36
+ loading: authState.loading,
37
+ error: authState.error,
38
+ signIn,
39
+ signOut,
40
+ };
41
+ }
42
+ //# sourceMappingURL=useAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuth.js","sourceRoot":"","sources":["../../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,UAAU,OAAO;IACrB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAY;QACpD,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,KAAK,EAAE,KAAa,EAAE,QAAgB,EAAE,EAAE;QACvD,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC/E,OAAO,cAAc,CAAC,IAAI,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAI,KAAe,CAAC,OAAO,CAAC,CAAC;QACrE,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { getTernSecureAuth, getTernSecureFirestore, getTernSecureStorage } from "./app-router/client";
2
+ import { TernSecureProvider } from "./app-router/server/providers/TernSecureServerProvider";
3
+ import { useAuth } from "./hooks/useAuth";
4
+ export { TernSecureProvider, useAuth, getTernSecureAuth, getTernSecureFirestore, getTernSecureStorage };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EACH,kBAAkB,EAClB,OAAO,EACP,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ternsecure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ternsecure.js","sourceRoot":"","sources":["../../../src/types/ternsecure.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tern-secure/nextjs",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"
@@ -16,7 +16,7 @@
16
16
  "main": "dist/index.js",
17
17
  "module": "dist/index.js",
18
18
  "scripts": {
19
- "build": "rollup -c",
19
+ "build": "tsc",
20
20
  "dev": "rollup -c -w",
21
21
  "test": "jest",
22
22
  "test:watch": "jest --watch",
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { AuthState, TernSecureContextType } from '../../../types/ternsecure';
3
- export declare const useTernSecure: () => TernSecureContextType;
4
- interface TernSecureClientProviderProps {
5
- children: React.ReactNode;
6
- initialState?: AuthState;
7
- }
8
- export declare function TernSecureClientProvider({ children, initialState }: TernSecureClientProviderProps): import("react/jsx-runtime").JSX.Element;
9
- export {};
package/dist/index.js DELETED
@@ -1,172 +0,0 @@
1
- import { jsx, Fragment } from 'react/jsx-runtime';
2
- import dynamic from 'next/dynamic';
3
- import { useState, useEffect, createContext, useContext } from 'react';
4
- import { getApps, initializeApp } from 'firebase/app';
5
- import { getAuth, setPersistence, browserSessionPersistence, signInWithEmailAndPassword } from 'firebase/auth';
6
- import { getFirestore } from 'firebase/firestore';
7
- import { getStorage } from 'firebase/storage';
8
-
9
- const loadFireConfig = () => ({
10
- apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
11
- authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN,
12
- projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
13
- storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
14
- messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
15
- appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
16
- measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID,
17
- });
18
- const validateConfig = (config) => {
19
- Object.entries(config).forEach(([key, value]) => {
20
- if (!value) {
21
- throw new Error(`Missing environment variable: NEXT_PUBLIC_FIREBASE_${key.toUpperCase()}`);
22
- }
23
- });
24
- return config;
25
- };
26
-
27
- const ERRORS = {
28
- SERVER_SIDE_INITIALIZATION: 'TernSecure must be initialized on the client side',
29
- NOT_INITIALIZED: 'TernSecure services are not initialized. Call initializeTernSecure() first',
30
- HOOK_CONTEXT: (hookName) => `${hookName} must be used within TernSecureProvider`,
31
- };
32
- class TernSecureError extends Error {
33
- constructor(message) {
34
- super(message);
35
- this.name = 'TernSecureError';
36
- }
37
- }
38
-
39
- let app = null;
40
- let auth = null;
41
- let firestore = null;
42
- let storage = null;
43
- const initialize = () => {
44
- if (typeof window === 'undefined') {
45
- throw new TernSecureError(ERRORS.SERVER_SIDE_INITIALIZATION);
46
- }
47
- if (!app) {
48
- const config = validateConfig(loadFireConfig());
49
- app = getApps().length ? getApps()[0] : initializeApp(config);
50
- auth = getAuth(app);
51
- // Set persistence after initializing auth
52
- setPersistence(auth, browserSessionPersistence);
53
- firestore = getFirestore(app);
54
- storage = getStorage(app);
55
- }
56
- return app;
57
- };
58
- const getTernSecureAuth = () => {
59
- if (!auth) {
60
- initialize();
61
- }
62
- return auth;
63
- };
64
- const getTernSecureFirestore = () => {
65
- if (!firestore) {
66
- initialize();
67
- }
68
- return firestore;
69
- };
70
- const getTernSecureStorage = () => {
71
- if (!storage) {
72
- initialize();
73
- }
74
- return storage;
75
- };
76
-
77
- const TernSecureClientProvider$1 = dynamic(() => Promise.resolve().then(function () { return ternSecureClientProvider; }).then(mod => mod.TernSecureClientProvider), {
78
- ssr: false,
79
- loading: () => jsx(Fragment, { children: null })
80
- });
81
- function TernSecureProvider({ children }) {
82
- if (typeof window === 'undefined') {
83
- return jsx(Fragment, { children: children });
84
- }
85
- return (jsx(TernSecureClientProvider$1, { children: children }));
86
- }
87
-
88
- let globalAuthState = {
89
- user: null,
90
- loading: true,
91
- error: null,
92
- initialized: false
93
- };
94
- let listeners = [];
95
- function subscribeToAuthState(listener) {
96
- listeners.push(listener);
97
- listener(globalAuthState);
98
- return () => {
99
- listeners = listeners.filter(l => l !== listener);
100
- };
101
- }
102
-
103
- function useAuth() {
104
- const [authState, setAuthState] = useState({
105
- user: null,
106
- loading: true,
107
- error: null,
108
- initialized: false
109
- });
110
- useEffect(() => {
111
- return subscribeToAuthState(setAuthState);
112
- }, []);
113
- const auth = getTernSecureAuth();
114
- const signIn = async (email, password) => {
115
- try {
116
- const userCredential = await signInWithEmailAndPassword(auth, email, password);
117
- return userCredential.user;
118
- }
119
- catch (error) {
120
- throw new Error('Failed to sign in: ' + error.message);
121
- }
122
- };
123
- const signOut = async () => {
124
- try {
125
- await auth.signOut();
126
- }
127
- catch (error) {
128
- throw new Error('Failed to sign out: ' + error.message);
129
- }
130
- };
131
- return {
132
- user: authState.user,
133
- loading: authState.loading,
134
- error: authState.error,
135
- signIn,
136
- signOut,
137
- };
138
- }
139
-
140
- const TernSecureContext = createContext(null);
141
- const useTernSecure = () => {
142
- const context = useContext(TernSecureContext);
143
- if (!context) {
144
- throw new Error('useTernSecure must be used within a TernSecureClientProvider');
145
- }
146
- return context;
147
- };
148
- function TernSecureClientProvider({ children, initialState = { user: null, loading: true, error: null, initialized: false } }) {
149
- const [authState, setAuthState] = useState(initialState);
150
- useEffect(() => {
151
- const auth = getTernSecureAuth();
152
- const unsubscribe = auth.onAuthStateChanged((user) => {
153
- setAuthState({ user, loading: false, error: null, initialized: true });
154
- }, (error) => {
155
- setAuthState({ user: null, loading: false, error, initialized: true });
156
- });
157
- return () => unsubscribe();
158
- }, []);
159
- const contextValue = {
160
- authState
161
- };
162
- return (jsx(TernSecureContext.Provider, { value: contextValue, children: children }));
163
- }
164
-
165
- var ternSecureClientProvider = /*#__PURE__*/Object.freeze({
166
- __proto__: null,
167
- TernSecureClientProvider: TernSecureClientProvider,
168
- useTernSecure: useTernSecure
169
- });
170
-
171
- export { TernSecureProvider, getTernSecureAuth, getTernSecureFirestore, getTernSecureStorage, useAuth };
172
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/app-router/client/config.ts","../src/errors/index.ts","../src/app-router/client/client-init.ts","../src/app-router/server/providers/TernSecureServerProvider.tsx","../src/app-router/client/ClientProvider.tsx","../src/hooks/useAuth.ts","../src/app-router/client/providers/ternSecureClientProvider.tsx"],"sourcesContent":[null,null,null,null,null,null,null],"names":["TernSecureClientProvider","_jsx","_Fragment"],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes