@tern-secure/nextjs 1.8.2 → 1.8.4
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/jest.setup.d.ts +0 -0
- package/dist/jest.setup.js +8 -0
- package/dist/jest.setup.js.map +1 -0
- package/dist/src/app-router/client/ClientProvider.js +34 -0
- package/dist/src/app-router/client/ClientProvider.js.map +1 -0
- package/dist/src/app-router/client/client-init.js +44 -0
- package/dist/src/app-router/client/client-init.js.map +1 -0
- package/dist/src/app-router/client/config.js +18 -0
- package/dist/src/app-router/client/config.js.map +1 -0
- package/dist/src/app-router/client/index.js +3 -0
- package/dist/src/app-router/client/index.js.map +1 -0
- package/dist/src/app-router/client/providers/ReactTernSecureProvider.js +16 -0
- package/dist/src/app-router/client/providers/ReactTernSecureProvider.js.map +1 -0
- package/dist/src/app-router/client/providers/ternSecureClientProvider.d.ts +8 -0
- package/dist/src/app-router/client/providers/ternSecureClientProvider.js +34 -0
- package/dist/src/app-router/client/providers/ternSecureClientProvider.js.map +1 -0
- package/dist/src/app-router/client/providers/ternSecureContext.js +5 -0
- package/dist/src/app-router/client/providers/ternSecureContext.js.map +1 -0
- package/dist/src/app-router/server/ErrorBoundary.js +22 -0
- package/dist/src/app-router/server/ErrorBoundary.js.map +1 -0
- package/dist/src/app-router/server/index.js +2 -0
- package/dist/src/app-router/server/index.js.map +1 -0
- package/dist/src/app-router/server/providers/TernSecureServerProvider.js +18 -0
- package/dist/src/app-router/server/providers/TernSecureServerProvider.js.map +1 -0
- package/dist/src/components/index.js +2 -0
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/errors/index.js +12 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/hooks/useAuth.js +42 -0
- package/dist/src/hooks/useAuth.js.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/types/ternsecure.js +2 -0
- package/dist/src/types/ternsecure.js.map +1 -0
- package/dist/src/utils/index.js +2 -0
- package/dist/src/utils/index.js.map +1 -0
- package/package.json +2 -2
- package/dist/app-router/client/providers/ternSecureClientProvider.d.ts +0 -9
- package/dist/index.js +0 -172
- package/dist/index.js.map +0 -1
- /package/dist/{app-router → src/app-router}/client/ClientProvider.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/client/client-init.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/client/config.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/client/index.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/client/providers/ReactTernSecureProvider.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/client/providers/ternSecureContext.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/server/ErrorBoundary.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/server/index.d.ts +0 -0
- /package/dist/{app-router → src/app-router}/server/providers/TernSecureServerProvider.d.ts +0 -0
- /package/dist/{components → src/components}/index.d.ts +0 -0
- /package/dist/{errors → src/errors}/index.d.ts +0 -0
- /package/dist/{hooks → src/hooks}/useAuth.d.ts +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{types → src/types}/ternsecure.d.ts +0 -0
- /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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"ternsecure.js","sourceRoot":"","sources":["../../../src/types/ternsecure.ts"],"names":[],"mappings":""}
|
|
@@ -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.
|
|
3
|
+
"version": "1.8.4",
|
|
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": "
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|