@tern-secure/nextjs 3.1.57 → 3.1.59

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 (37) hide show
  1. package/dist/cjs/app-router/client/TernSecureProvider.cjs +23 -70
  2. package/dist/cjs/app-router/client/TernSecureProvider.cjs.map +1 -1
  3. package/dist/cjs/app-router/server/TernSecureServerProvider.cjs +77 -182
  4. package/dist/cjs/app-router/server/TernSecureServerProvider.cjs.map +1 -1
  5. package/dist/cjs/boundary/TernSecureCtx.cjs +5 -32
  6. package/dist/cjs/boundary/TernSecureCtx.cjs.map +1 -1
  7. package/dist/cjs/boundary/hooks/use-auth.cjs +64 -21
  8. package/dist/cjs/boundary/hooks/use-auth.cjs.map +1 -1
  9. package/dist/cjs/index.cjs +104 -220
  10. package/dist/cjs/index.cjs.map +1 -1
  11. package/dist/esm/app-router/client/TernSecureProvider.d.ts +1 -12
  12. package/dist/esm/app-router/client/TernSecureProvider.js +3 -67
  13. package/dist/esm/app-router/client/TernSecureProvider.js.map +1 -1
  14. package/dist/esm/app-router/server/TernSecureServerProvider.d.ts +6 -9
  15. package/dist/esm/app-router/server/TernSecureServerProvider.js +5 -1
  16. package/dist/esm/boundary/TernSecureCtx.d.ts +12 -19
  17. package/dist/esm/boundary/TernSecureCtx.js +1 -1
  18. package/dist/esm/boundary/hooks/use-auth.d.ts +13 -23
  19. package/dist/esm/boundary/hooks/use-auth.js +4 -2
  20. package/dist/esm/chunk-3D5IN6EL.js +11 -0
  21. package/dist/esm/chunk-3D5IN6EL.js.map +1 -0
  22. package/dist/esm/chunk-F7XKLY6Y.js +40 -0
  23. package/dist/esm/chunk-F7XKLY6Y.js.map +1 -0
  24. package/dist/esm/chunk-I2PGODCQ.js +17 -0
  25. package/dist/esm/chunk-I2PGODCQ.js.map +1 -0
  26. package/dist/esm/chunk-KUYDOUCP.js +24 -0
  27. package/dist/esm/chunk-KUYDOUCP.js.map +1 -0
  28. package/dist/esm/index.d.ts +5 -8
  29. package/dist/esm/index.js +4 -8
  30. package/dist/esm/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/esm/chunk-32DZLLHE.js +0 -43
  33. package/dist/esm/chunk-32DZLLHE.js.map +0 -1
  34. package/dist/esm/chunk-FMHBRXHR.js +0 -20
  35. package/dist/esm/chunk-FMHBRXHR.js.map +0 -1
  36. package/dist/esm/chunk-S2ODB3YJ.js +0 -31
  37. package/dist/esm/chunk-S2ODB3YJ.js.map +0 -1
@@ -62,87 +62,40 @@ auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
62
62
  firestore.getFirestore(clientApp);
63
63
  storage.getStorage(clientApp);
64
64
  var TernSecureAuth = () => auth;
65
- var TernSecureError = class extends Error {
66
- constructor(message) {
67
- super(`[TernSecure] ${message}`);
68
- this.name = "TernSecureError";
69
- }
70
- };
71
- var TernSecureContext = React__default.default.createContext(null);
72
- TernSecureContext.displayName = "TernSecureContext";
73
- var TernSecureCtxProvider = ({
74
- children
75
- }) => {
76
- if (typeof window === "undefined") {
77
- throw new TernSecureError(
78
- "TernSecureCtxProvider must be used in client components"
79
- );
80
- }
81
- if (process.env.NODE_ENV !== "production") {
82
- React__default.default.useEffect(() => {
83
- console.log("[TernSecure] Provider initialized in client component");
84
- }, []);
85
- }
86
- return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { dynamic: true }, children });
65
+ var TernSecureContext = React__default.default.createContext(void 0);
66
+ var TernSecureCtxProvider = (props) => {
67
+ const { children, options } = props;
68
+ return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { value: options }, children });
87
69
  };
88
70
  var auth2 = TernSecureAuth();
89
71
  function TernSecureClientProvider({ children }) {
90
- if (typeof window === "undefined") {
91
- throw new TernSecureError("TernSecureClientProvider must be used in client components");
92
- }
93
72
  const [authState, setAuthState] = React.useState({
94
73
  loading: true,
95
74
  isSignedIn: false,
96
75
  userId: null,
97
76
  error: null
98
77
  });
99
- React__default.default.useEffect(() => {
100
- if (process.env.NODE_ENV !== "production") {
101
- console.log("[TernSecure] Initializing auth state listener");
102
- }
103
- try {
104
- const unsubscribe = auth$1.onAuthStateChanged(
105
- auth2,
106
- (user) => {
107
- setAuthState({
108
- loading: false,
109
- isSignedIn: !!user,
110
- userId: user?.uid || null,
111
- error: null
112
- });
113
- },
114
- (error) => {
115
- setAuthState((prev) => ({
116
- ...prev,
117
- loading: false,
118
- error: error.message
119
- }));
120
- if (process.env.NODE_ENV !== "production") {
121
- console.error("[TernSecure] Auth state error:", error);
122
- }
123
- }
124
- );
125
- if (process.env.NODE_ENV !== "production") {
126
- console.log("[TernSecure] Auth listener established");
78
+ React.useEffect(() => {
79
+ const unsubscribe = auth$1.onAuthStateChanged(auth2, (user) => {
80
+ if (user) {
81
+ setAuthState({
82
+ loading: false,
83
+ isSignedIn: true,
84
+ userId: user.uid,
85
+ error: null
86
+ });
87
+ } else {
88
+ setAuthState({
89
+ loading: false,
90
+ isSignedIn: false,
91
+ userId: null,
92
+ error: null
93
+ });
127
94
  }
128
- return () => {
129
- unsubscribe();
130
- if (process.env.NODE_ENV !== "production") {
131
- console.log("[TernSecure] Auth listener cleaned up");
132
- }
133
- };
134
- } catch (error) {
135
- setAuthState((prev) => ({
136
- ...prev,
137
- loading: false,
138
- error: error instanceof Error ? error.message : "Unknown error occurred"
139
- }));
140
- if (process.env.NODE_ENV !== "production") {
141
- console.error("[TernSecure] Setup error:", error);
142
- }
143
- }
95
+ });
96
+ return () => unsubscribe();
144
97
  }, []);
145
- return /* @__PURE__ */ jsxRuntime.jsx(TernSecureCtxProvider, { children });
98
+ return /* @__PURE__ */ jsxRuntime.jsx(TernSecureCtxProvider, { options: authState, children });
146
99
  }
147
100
 
148
101
  exports.TernSecureClientProvider = TernSecureClientProvider;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/config.ts","../../../../src/utils/client-init.ts","../../../../src/boundary/TernSecureCtx.tsx","../../../../src/app-router/client/TernSecureProvider.tsx"],"names":["config","initializeApp","getAuth","setPersistence","browserSessionPersistence","getFirestore","getStorage","React","jsx","auth","useState","onAuthStateChanged"],"mappings":"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","file":"TernSecureProvider.cjs","sourcesContent":["import { TernSecureConfig, ConfigValidationResult } from '../types'\r\n\r\n/**\r\n * Loads Firebase configuration from environment variables\r\n * @returns {TernSecureConfig} Firebase configuration object\r\n */\r\nexport const loadFireConfig = (): TernSecureConfig => ({\r\n apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || '',\r\n authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || '',\r\n projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || '',\r\n storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || '',\r\n messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || '',\r\n appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || '',\r\n measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || undefined,\r\n})\r\n\r\n/**\r\n * Validates Firebase configuration\r\n * @param {TernSecureConfig} config - Firebase configuration object\r\n * @throws {Error} If required configuration values are missing\r\n * @returns {TernSecureConfig} Validated configuration object\r\n */\r\nexport const validateConfig = (config: TernSecureConfig): ConfigValidationResult => {\r\n const requiredFields: (keyof TernSecureConfig)[] = [\r\n 'apiKey',\r\n 'authDomain',\r\n 'projectId',\r\n 'storageBucket',\r\n 'messagingSenderId',\r\n 'appId'\r\n ]\r\n\r\n const errors: string[] = []\r\n \r\n requiredFields.forEach(field => {\r\n if (!config[field]) {\r\n errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`)\r\n }\r\n })\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors,\r\n config\r\n }\r\n}\r\n\r\n/**\r\n * Initializes configuration with validation\r\n * @throws {Error} If configuration is invalid\r\n */\r\nexport const initializeConfig = (): TernSecureConfig => {\r\n const config = loadFireConfig()\r\n const validationResult = validateConfig(config)\r\n\r\n if (!validationResult.isValid) {\r\n throw new Error(\r\n `Firebase configuration validation failed:\\n${validationResult.errors.join('\\n')}`\r\n )\r\n }\r\n\r\n return config\r\n}","import { initializeApp } from 'firebase/app';\r\nimport { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';\r\nimport { getFirestore } from 'firebase/firestore';\r\nimport { getStorage } from 'firebase/storage';\r\nimport { initializeConfig} from './config';\r\n\r\n// Initialize immediately\r\nconst config = initializeConfig();\r\nconst clientApp = initializeApp(config)\r\nconst auth = getAuth(clientApp);\r\nsetPersistence(auth, browserSessionPersistence); //to change later user should be able to choose persistance\r\nconst firestore = getFirestore(clientApp);\r\nconst storage = getStorage(clientApp);\r\n\r\nexport const TernSecureAuth = () => auth;\r\nexport const TernSecureFirestore = () => firestore;\r\nexport const TernSecureStorage = () => storage;","'use client'\r\n\r\nimport React from 'react'\r\n\r\n// Custom error for package\r\nexport class TernSecureError extends Error {\r\n constructor(message: string) {\r\n super(`[TernSecure] ${message}`)\r\n this.name = 'TernSecureError'\r\n }\r\n}\r\n\r\n// Core types\r\nexport type TernSecureCtxValue = {\r\n dynamic: boolean\r\n}\r\n\r\nexport type TernSecureProviderProps = React.PropsWithChildren<{\r\n options?: unknown // Made optional since we're not using it\r\n}>\r\n\r\n// Context with proper null handling\r\nconst TernSecureContext = React.createContext<TernSecureCtxValue | null>(null)\r\n\r\n// Set display name for better debugging\r\nTernSecureContext.displayName = 'TernSecureContext'\r\n\r\n/**\r\n * Internal hook for context consumption\r\n * @throws {TernSecureError} When used outside client components or provider\r\n */\r\nconst useInternalContext = (hookname: string = 'useInternalContext') => {\r\n // Early check for client-side\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError(`${hookname} must be used in client components`)\r\n }\r\n\r\n const context = React.useContext(TernSecureContext)\r\n \r\n if (!context) {\r\n throw new TernSecureError(\r\n `${hookname} must be used within TernSecureClientProvider`\r\n )\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Provider component for TernSecure\r\n * Must be used in client components only\r\n */\r\nconst TernSecureCtxProvider: React.FC<TernSecureProviderProps> = ({ \r\n children \r\n}) => {\r\n // Check for client-side rendering\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError(\r\n 'TernSecureCtxProvider must be used in client components'\r\n )\r\n }\r\n\r\n // Development checks\r\n if (process.env.NODE_ENV !== 'production') {\r\n React.useEffect(() => {\r\n console.log('[TernSecure] Provider initialized in client component')\r\n }, [])\r\n }\r\n\r\n return (\r\n <TernSecureContext.Provider value={{ dynamic: true }}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}","'use client'\r\n\r\nimport React, { useState } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { onAuthStateChanged, User } from \"firebase/auth\"\r\nimport { TernSecureCtxProvider, TernSecureError } from '../../boundary/TernSecureCtx'\r\n\r\n// Types for the provider\r\nexport type TernSecureState = {\r\n loading: boolean\r\n isSignedIn: boolean\r\n userId: string | null\r\n error: string | null\r\n}\r\n\r\ninterface TernSecureClientProps {\r\n children: React.ReactNode\r\n}\r\n\r\nconst auth = TernSecureAuth()\r\n\r\n/**\r\n * Client Provider for TernSecure\r\n * Must be used in client components only\r\n * Manages authentication state and provides it to children\r\n */\r\nexport function TernSecureClientProvider({ children }: TernSecureClientProps) {\r\n // Verify client-side execution\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError('TernSecureClientProvider must be used in client components')\r\n }\r\n\r\n const [authState, setAuthState] = useState<TernSecureState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n\r\n React.useEffect(() => {\r\n // Development checks\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log('[TernSecure] Initializing auth state listener')\r\n }\r\n\r\n try {\r\n const unsubscribe = onAuthStateChanged(auth, \r\n (user: User | null) => {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: !!user,\r\n userId: user?.uid || null,\r\n error: null\r\n })\r\n },\r\n (error) => {\r\n setAuthState(prev => ({\r\n ...prev,\r\n loading: false,\r\n error: error.message\r\n }))\r\n \r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('[TernSecure] Auth state error:', error)\r\n }\r\n }\r\n )\r\n\r\n // Development feedback\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log('[TernSecure] Auth listener established')\r\n }\r\n\r\n return () => {\r\n unsubscribe()\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log('[TernSecure] Auth listener cleaned up')\r\n }\r\n }\r\n } catch (error) {\r\n setAuthState(prev => ({\r\n ...prev,\r\n loading: false,\r\n error: error instanceof Error ? error.message : 'Unknown error occurred'\r\n }))\r\n \r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('[TernSecure] Setup error:', error)\r\n }\r\n }\r\n }, [])\r\n\r\n return (\r\n <TernSecureCtxProvider>\r\n {children}\r\n </TernSecureCtxProvider>\r\n )\r\n}\r\n\r\n// Export types for package users\r\nexport type { TernSecureClientProps }"]}
1
+ {"version":3,"sources":["../../../../src/utils/config.ts","../../../../src/utils/client-init.ts","../../../../src/boundary/TernSecureCtx.tsx","../../../../src/app-router/client/TernSecureProvider.tsx"],"names":["config","initializeApp","getAuth","setPersistence","browserSessionPersistence","getFirestore","getStorage","React","jsx","auth","useState","useEffect","onAuthStateChanged"],"mappings":"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","file":"TernSecureProvider.cjs","sourcesContent":["import { TernSecureConfig, ConfigValidationResult } from '../types'\r\n\r\n/**\r\n * Loads Firebase configuration from environment variables\r\n * @returns {TernSecureConfig} Firebase configuration object\r\n */\r\nexport const loadFireConfig = (): TernSecureConfig => ({\r\n apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || '',\r\n authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || '',\r\n projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || '',\r\n storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || '',\r\n messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || '',\r\n appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || '',\r\n measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || undefined,\r\n})\r\n\r\n/**\r\n * Validates Firebase configuration\r\n * @param {TernSecureConfig} config - Firebase configuration object\r\n * @throws {Error} If required configuration values are missing\r\n * @returns {TernSecureConfig} Validated configuration object\r\n */\r\nexport const validateConfig = (config: TernSecureConfig): ConfigValidationResult => {\r\n const requiredFields: (keyof TernSecureConfig)[] = [\r\n 'apiKey',\r\n 'authDomain',\r\n 'projectId',\r\n 'storageBucket',\r\n 'messagingSenderId',\r\n 'appId'\r\n ]\r\n\r\n const errors: string[] = []\r\n \r\n requiredFields.forEach(field => {\r\n if (!config[field]) {\r\n errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`)\r\n }\r\n })\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors,\r\n config\r\n }\r\n}\r\n\r\n/**\r\n * Initializes configuration with validation\r\n * @throws {Error} If configuration is invalid\r\n */\r\nexport const initializeConfig = (): TernSecureConfig => {\r\n const config = loadFireConfig()\r\n const validationResult = validateConfig(config)\r\n\r\n if (!validationResult.isValid) {\r\n throw new Error(\r\n `Firebase configuration validation failed:\\n${validationResult.errors.join('\\n')}`\r\n )\r\n }\r\n\r\n return config\r\n}","import { initializeApp } from 'firebase/app';\r\nimport { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';\r\nimport { getFirestore } from 'firebase/firestore';\r\nimport { getStorage } from 'firebase/storage';\r\nimport { initializeConfig} from './config';\r\n\r\n// Initialize immediately\r\nconst config = initializeConfig();\r\nconst clientApp = initializeApp(config)\r\nconst auth = getAuth(clientApp);\r\nsetPersistence(auth, browserSessionPersistence); //to change later user should be able to choose persistance\r\nconst firestore = getFirestore(clientApp);\r\nconst storage = getStorage(clientApp);\r\n\r\nexport const TernSecureAuth = () => auth;\r\nexport const TernSecureFirestore = () => firestore;\r\nexport const TernSecureStorage = () => storage;","'use client'\r\n\r\nimport React from 'react'\r\n\r\ntype TernSecureState = {\r\n userId: string | null\r\n loading: boolean\r\n error: string | null\r\n isSignedIn: boolean\r\n}\r\n\r\n\r\n// Create context instance only when imported on client\r\nconst TernSecureContext = React.createContext<{value: TernSecureState} | undefined>(undefined);\r\n\r\nconst useInternalContext = (hookname?: string) => {\r\n const context = React.useContext(TernSecureContext)\r\n return context\r\n}\r\n\r\nconst TernSecureCtxProvider = (\r\n props: React.PropsWithChildren<{ options: TernSecureState }>,\r\n): React.JSX.Element => {\r\n const { children, options } = props;\r\n return <TernSecureContext.Provider value={{ value: options }}>{children}</TernSecureContext.Provider>;\r\n};\r\n\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}","'use client'\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { onAuthStateChanged } from \"firebase/auth\"\r\nimport { useInternalContext, TernSecureCtxProvider } from '../../boundary/TernSecureCtx'\r\n\r\ntype TernSecureState = {\r\n userId: string | null\r\n loading: boolean\r\n error: string | null\r\n isSignedIn: boolean\r\n}\r\n\r\ninterface TernSecureClientProps {\r\n children: React.ReactNode\r\n}\r\n\r\nconst auth = TernSecureAuth()\r\n\r\nexport function TernSecureClientProvider({ children }: TernSecureClientProps) {\r\n const [authState, setAuthState] = useState<TernSecureState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\nuseEffect(() => {\r\n const unsubscribe = onAuthStateChanged(auth, (user) => {\r\n if (user) {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: true,\r\n userId: user.uid,\r\n error: null\r\n })\r\n } else {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n }\r\n })\r\n \r\n return () => unsubscribe()\r\n }, [])\r\n\r\n\r\n return (\r\n <TernSecureCtxProvider options={authState}>\r\n {children}\r\n </TernSecureCtxProvider>\r\n )\r\n}"]}
@@ -1,213 +1,108 @@
1
1
  'use strict';
2
2
 
3
+ var React = require('react');
3
4
  var app = require('firebase/app');
4
5
  var auth$1 = require('firebase/auth');
5
6
  var firestore = require('firebase/firestore');
6
7
  var storage = require('firebase/storage');
7
- var React = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
- var dynamic = require('next/dynamic');
10
9
 
11
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
11
 
13
12
  var React__default = /*#__PURE__*/_interopDefault(React);
14
- var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
15
13
 
16
- var __defProp = Object.defineProperty;
17
- var __getOwnPropNames = Object.getOwnPropertyNames;
18
- var __esm = (fn, res) => function __init() {
19
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
20
- };
21
- var __export = (target, all) => {
22
- for (var name in all)
23
- __defProp(target, name, { get: all[name], enumerable: true });
24
- };
14
+ // src/app-router/server/TernSecureServerProvider.tsx
25
15
 
26
16
  // src/utils/config.ts
27
- var loadFireConfig, validateConfig, initializeConfig;
28
- var init_config = __esm({
29
- "src/utils/config.ts"() {
30
- loadFireConfig = () => ({
31
- apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || "",
32
- authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || "",
33
- projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || "",
34
- storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || "",
35
- messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || "",
36
- appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || "",
37
- measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || void 0
38
- });
39
- validateConfig = (config2) => {
40
- const requiredFields = [
41
- "apiKey",
42
- "authDomain",
43
- "projectId",
44
- "storageBucket",
45
- "messagingSenderId",
46
- "appId"
47
- ];
48
- const errors = [];
49
- requiredFields.forEach((field) => {
50
- if (!config2[field]) {
51
- errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`);
52
- }
53
- });
54
- return {
55
- isValid: errors.length === 0,
56
- errors,
57
- config: config2
58
- };
59
- };
60
- initializeConfig = () => {
61
- const config2 = loadFireConfig();
62
- const validationResult = validateConfig(config2);
63
- if (!validationResult.isValid) {
64
- throw new Error(
65
- `Firebase configuration validation failed:
66
- ${validationResult.errors.join("\n")}`
67
- );
68
- }
69
- return config2;
70
- };
71
- }
17
+ var loadFireConfig = () => ({
18
+ apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || "",
19
+ authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || "",
20
+ projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || "",
21
+ storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || "",
22
+ messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || "",
23
+ appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || "",
24
+ measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || void 0
72
25
  });
73
- var config, clientApp, auth, TernSecureAuth;
74
- var init_client_init = __esm({
75
- "src/utils/client-init.ts"() {
76
- init_config();
77
- config = initializeConfig();
78
- clientApp = app.initializeApp(config);
79
- auth = auth$1.getAuth(clientApp);
80
- auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
81
- firestore.getFirestore(clientApp);
82
- storage.getStorage(clientApp);
83
- TernSecureAuth = () => auth;
84
- }
85
- });
86
- var TernSecureError, TernSecureContext, TernSecureCtxProvider;
87
- var init_TernSecureCtx = __esm({
88
- "src/boundary/TernSecureCtx.tsx"() {
89
- "use client";
90
- TernSecureError = class extends Error {
91
- constructor(message) {
92
- super(`[TernSecure] ${message}`);
93
- this.name = "TernSecureError";
94
- }
95
- };
96
- TernSecureContext = React__default.default.createContext(null);
97
- TernSecureContext.displayName = "TernSecureContext";
98
- TernSecureCtxProvider = ({
99
- children
100
- }) => {
101
- if (typeof window === "undefined") {
102
- throw new TernSecureError(
103
- "TernSecureCtxProvider must be used in client components"
104
- );
105
- }
106
- if (process.env.NODE_ENV !== "production") {
107
- React__default.default.useEffect(() => {
108
- console.log("[TernSecure] Provider initialized in client component");
109
- }, []);
110
- }
111
- return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { dynamic: true }, children });
112
- };
26
+ var validateConfig = (config2) => {
27
+ const requiredFields = [
28
+ "apiKey",
29
+ "authDomain",
30
+ "projectId",
31
+ "storageBucket",
32
+ "messagingSenderId",
33
+ "appId"
34
+ ];
35
+ const errors = [];
36
+ requiredFields.forEach((field) => {
37
+ if (!config2[field]) {
38
+ errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`);
39
+ }
40
+ });
41
+ return {
42
+ isValid: errors.length === 0,
43
+ errors,
44
+ config: config2
45
+ };
46
+ };
47
+ var initializeConfig = () => {
48
+ const config2 = loadFireConfig();
49
+ const validationResult = validateConfig(config2);
50
+ if (!validationResult.isValid) {
51
+ throw new Error(
52
+ `Firebase configuration validation failed:
53
+ ${validationResult.errors.join("\n")}`
54
+ );
113
55
  }
114
- });
56
+ return config2;
57
+ };
115
58
 
116
- // src/app-router/client/TernSecureProvider.tsx
117
- var TernSecureProvider_exports = {};
118
- __export(TernSecureProvider_exports, {
119
- TernSecureClientProvider: () => TernSecureClientProvider
120
- });
59
+ // src/utils/client-init.ts
60
+ var config = initializeConfig();
61
+ var clientApp = app.initializeApp(config);
62
+ var auth = auth$1.getAuth(clientApp);
63
+ auth$1.setPersistence(auth, auth$1.browserSessionPersistence);
64
+ firestore.getFirestore(clientApp);
65
+ storage.getStorage(clientApp);
66
+ var TernSecureAuth = () => auth;
67
+ var TernSecureContext = React__default.default.createContext(void 0);
68
+ var TernSecureCtxProvider = (props) => {
69
+ const { children, options } = props;
70
+ return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { value: options }, children });
71
+ };
72
+ var auth2 = TernSecureAuth();
121
73
  function TernSecureClientProvider({ children }) {
122
- if (typeof window === "undefined") {
123
- throw new TernSecureError("TernSecureClientProvider must be used in client components");
124
- }
125
74
  const [authState, setAuthState] = React.useState({
126
75
  loading: true,
127
76
  isSignedIn: false,
128
77
  userId: null,
129
78
  error: null
130
79
  });
131
- React__default.default.useEffect(() => {
132
- if (process.env.NODE_ENV !== "production") {
133
- console.log("[TernSecure] Initializing auth state listener");
134
- }
135
- try {
136
- const unsubscribe = auth$1.onAuthStateChanged(
137
- auth2,
138
- (user) => {
139
- setAuthState({
140
- loading: false,
141
- isSignedIn: !!user,
142
- userId: user?.uid || null,
143
- error: null
144
- });
145
- },
146
- (error) => {
147
- setAuthState((prev) => ({
148
- ...prev,
149
- loading: false,
150
- error: error.message
151
- }));
152
- if (process.env.NODE_ENV !== "production") {
153
- console.error("[TernSecure] Auth state error:", error);
154
- }
155
- }
156
- );
157
- if (process.env.NODE_ENV !== "production") {
158
- console.log("[TernSecure] Auth listener established");
159
- }
160
- return () => {
161
- unsubscribe();
162
- if (process.env.NODE_ENV !== "production") {
163
- console.log("[TernSecure] Auth listener cleaned up");
164
- }
165
- };
166
- } catch (error) {
167
- setAuthState((prev) => ({
168
- ...prev,
169
- loading: false,
170
- error: error instanceof Error ? error.message : "Unknown error occurred"
171
- }));
172
- if (process.env.NODE_ENV !== "production") {
173
- console.error("[TernSecure] Setup error:", error);
80
+ React.useEffect(() => {
81
+ const unsubscribe = auth$1.onAuthStateChanged(auth2, (user) => {
82
+ if (user) {
83
+ setAuthState({
84
+ loading: false,
85
+ isSignedIn: true,
86
+ userId: user.uid,
87
+ error: null
88
+ });
89
+ } else {
90
+ setAuthState({
91
+ loading: false,
92
+ isSignedIn: false,
93
+ userId: null,
94
+ error: null
95
+ });
174
96
  }
175
- }
97
+ });
98
+ return () => unsubscribe();
176
99
  }, []);
177
- return /* @__PURE__ */ jsxRuntime.jsx(TernSecureCtxProvider, { children });
100
+ return /* @__PURE__ */ jsxRuntime.jsx(TernSecureCtxProvider, { options: authState, children });
178
101
  }
179
- var auth2;
180
- var init_TernSecureProvider = __esm({
181
- "src/app-router/client/TernSecureProvider.tsx"() {
182
- "use client";
183
- init_client_init();
184
- init_TernSecureCtx();
185
- auth2 = TernSecureAuth();
186
- }
187
- });
188
- function TernSecureLoadingFallback() {
189
- return /* @__PURE__ */ jsxRuntime.jsx(
190
- "div",
191
- {
192
- "aria-label": "Loading authentication",
193
- role: "status",
194
- className: "tern-secure-loading",
195
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Loading authentication..." })
196
- }
197
- );
198
- }
199
- var TernSecureClientProvider2 = dynamic__default.default(
200
- () => Promise.resolve().then(() => (init_TernSecureProvider(), TernSecureProvider_exports)).then((mod) => mod.TernSecureClientProvider),
201
- {
202
- loading: TernSecureLoadingFallback
203
- }
204
- );
205
- function TernSecureServerProvider({
206
- children
207
- }) {
208
- return /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx(TernSecureLoadingFallback, {}), children: /* @__PURE__ */ jsxRuntime.jsx(TernSecureClientProvider2, { children }) });
102
+ function TernSecureProvider({ children }) {
103
+ return /* @__PURE__ */ jsxRuntime.jsx(React.Suspense, { fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntime.jsx(TernSecureClientProvider, { children }) });
209
104
  }
210
105
 
211
- exports.TernSecureServerProvider = TernSecureServerProvider;
106
+ exports.TernSecureProvider = TernSecureProvider;
212
107
  //# sourceMappingURL=TernSecureServerProvider.cjs.map
213
108
  //# sourceMappingURL=TernSecureServerProvider.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/config.ts","../../../../src/utils/client-init.ts","../../../../src/boundary/TernSecureCtx.tsx","../../../../src/app-router/client/TernSecureProvider.tsx","../../../../src/app-router/server/TernSecureServerProvider.tsx"],"names":["config","initializeApp","getAuth","setPersistence","browserSessionPersistence","getFirestore","getStorage","React","jsx","useState","onAuthStateChanged","auth","TernSecureClientProvider","dynamic"],"mappings":"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","file":"TernSecureServerProvider.cjs","sourcesContent":["import { TernSecureConfig, ConfigValidationResult } from '../types'\r\n\r\n/**\r\n * Loads Firebase configuration from environment variables\r\n * @returns {TernSecureConfig} Firebase configuration object\r\n */\r\nexport const loadFireConfig = (): TernSecureConfig => ({\r\n apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || '',\r\n authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || '',\r\n projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || '',\r\n storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || '',\r\n messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || '',\r\n appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || '',\r\n measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || undefined,\r\n})\r\n\r\n/**\r\n * Validates Firebase configuration\r\n * @param {TernSecureConfig} config - Firebase configuration object\r\n * @throws {Error} If required configuration values are missing\r\n * @returns {TernSecureConfig} Validated configuration object\r\n */\r\nexport const validateConfig = (config: TernSecureConfig): ConfigValidationResult => {\r\n const requiredFields: (keyof TernSecureConfig)[] = [\r\n 'apiKey',\r\n 'authDomain',\r\n 'projectId',\r\n 'storageBucket',\r\n 'messagingSenderId',\r\n 'appId'\r\n ]\r\n\r\n const errors: string[] = []\r\n \r\n requiredFields.forEach(field => {\r\n if (!config[field]) {\r\n errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`)\r\n }\r\n })\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors,\r\n config\r\n }\r\n}\r\n\r\n/**\r\n * Initializes configuration with validation\r\n * @throws {Error} If configuration is invalid\r\n */\r\nexport const initializeConfig = (): TernSecureConfig => {\r\n const config = loadFireConfig()\r\n const validationResult = validateConfig(config)\r\n\r\n if (!validationResult.isValid) {\r\n throw new Error(\r\n `Firebase configuration validation failed:\\n${validationResult.errors.join('\\n')}`\r\n )\r\n }\r\n\r\n return config\r\n}","import { initializeApp } from 'firebase/app';\r\nimport { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';\r\nimport { getFirestore } from 'firebase/firestore';\r\nimport { getStorage } from 'firebase/storage';\r\nimport { initializeConfig} from './config';\r\n\r\n// Initialize immediately\r\nconst config = initializeConfig();\r\nconst clientApp = initializeApp(config)\r\nconst auth = getAuth(clientApp);\r\nsetPersistence(auth, browserSessionPersistence); //to change later user should be able to choose persistance\r\nconst firestore = getFirestore(clientApp);\r\nconst storage = getStorage(clientApp);\r\n\r\nexport const TernSecureAuth = () => auth;\r\nexport const TernSecureFirestore = () => firestore;\r\nexport const TernSecureStorage = () => storage;","'use client'\r\n\r\nimport React from 'react'\r\n\r\n// Custom error for package\r\nexport class TernSecureError extends Error {\r\n constructor(message: string) {\r\n super(`[TernSecure] ${message}`)\r\n this.name = 'TernSecureError'\r\n }\r\n}\r\n\r\n// Core types\r\nexport type TernSecureCtxValue = {\r\n dynamic: boolean\r\n}\r\n\r\nexport type TernSecureProviderProps = React.PropsWithChildren<{\r\n options?: unknown // Made optional since we're not using it\r\n}>\r\n\r\n// Context with proper null handling\r\nconst TernSecureContext = React.createContext<TernSecureCtxValue | null>(null)\r\n\r\n// Set display name for better debugging\r\nTernSecureContext.displayName = 'TernSecureContext'\r\n\r\n/**\r\n * Internal hook for context consumption\r\n * @throws {TernSecureError} When used outside client components or provider\r\n */\r\nconst useInternalContext = (hookname: string = 'useInternalContext') => {\r\n // Early check for client-side\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError(`${hookname} must be used in client components`)\r\n }\r\n\r\n const context = React.useContext(TernSecureContext)\r\n \r\n if (!context) {\r\n throw new TernSecureError(\r\n `${hookname} must be used within TernSecureClientProvider`\r\n )\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Provider component for TernSecure\r\n * Must be used in client components only\r\n */\r\nconst TernSecureCtxProvider: React.FC<TernSecureProviderProps> = ({ \r\n children \r\n}) => {\r\n // Check for client-side rendering\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError(\r\n 'TernSecureCtxProvider must be used in client components'\r\n )\r\n }\r\n\r\n // Development checks\r\n if (process.env.NODE_ENV !== 'production') {\r\n React.useEffect(() => {\r\n console.log('[TernSecure] Provider initialized in client component')\r\n }, [])\r\n }\r\n\r\n return (\r\n <TernSecureContext.Provider value={{ dynamic: true }}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}","'use client'\r\n\r\nimport React, { useState } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { onAuthStateChanged, User } from \"firebase/auth\"\r\nimport { TernSecureCtxProvider, TernSecureError } from '../../boundary/TernSecureCtx'\r\n\r\n// Types for the provider\r\nexport type TernSecureState = {\r\n loading: boolean\r\n isSignedIn: boolean\r\n userId: string | null\r\n error: string | null\r\n}\r\n\r\ninterface TernSecureClientProps {\r\n children: React.ReactNode\r\n}\r\n\r\nconst auth = TernSecureAuth()\r\n\r\n/**\r\n * Client Provider for TernSecure\r\n * Must be used in client components only\r\n * Manages authentication state and provides it to children\r\n */\r\nexport function TernSecureClientProvider({ children }: TernSecureClientProps) {\r\n // Verify client-side execution\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError('TernSecureClientProvider must be used in client components')\r\n }\r\n\r\n const [authState, setAuthState] = useState<TernSecureState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n\r\n React.useEffect(() => {\r\n // Development checks\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log('[TernSecure] Initializing auth state listener')\r\n }\r\n\r\n try {\r\n const unsubscribe = onAuthStateChanged(auth, \r\n (user: User | null) => {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: !!user,\r\n userId: user?.uid || null,\r\n error: null\r\n })\r\n },\r\n (error) => {\r\n setAuthState(prev => ({\r\n ...prev,\r\n loading: false,\r\n error: error.message\r\n }))\r\n \r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('[TernSecure] Auth state error:', error)\r\n }\r\n }\r\n )\r\n\r\n // Development feedback\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log('[TernSecure] Auth listener established')\r\n }\r\n\r\n return () => {\r\n unsubscribe()\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.log('[TernSecure] Auth listener cleaned up')\r\n }\r\n }\r\n } catch (error) {\r\n setAuthState(prev => ({\r\n ...prev,\r\n loading: false,\r\n error: error instanceof Error ? error.message : 'Unknown error occurred'\r\n }))\r\n \r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('[TernSecure] Setup error:', error)\r\n }\r\n }\r\n }, [])\r\n\r\n return (\r\n <TernSecureCtxProvider>\r\n {children}\r\n </TernSecureCtxProvider>\r\n )\r\n}\r\n\r\n// Export types for package users\r\nexport type { TernSecureClientProps }","import React from \"react\"\r\nimport dynamic from 'next/dynamic'\r\nimport type { TernSecureClientProps } from '../client/TernSecureProvider'\r\n\r\n// Loading fallback component\r\nfunction TernSecureLoadingFallback() {\r\n return (\r\n <div \r\n aria-label=\"Loading authentication\" \r\n role=\"status\"\r\n className=\"tern-secure-loading\"\r\n >\r\n <span className=\"sr-only\">Loading authentication...</span>\r\n </div>\r\n )\r\n}\r\n\r\n// Dynamically import the client provider\r\nconst TernSecureClientProvider = dynamic<TernSecureClientProps>(\r\n () => import('../client/TernSecureProvider').then(mod => mod.TernSecureClientProvider),\r\n { \r\n loading: TernSecureLoadingFallback\r\n }\r\n)\r\n\r\n/**\r\n * Root Provider for TernSecure\r\n * Use this in your Next.js App Router root layout\r\n */\r\nexport function TernSecureServerProvider({ \r\n children \r\n}: { \r\n children: React.ReactNode \r\n}) {\r\n return (\r\n <React.Suspense fallback={<TernSecureLoadingFallback />}>\r\n <TernSecureClientProvider>\r\n {children}\r\n </TernSecureClientProvider>\r\n </React.Suspense>\r\n )\r\n}"]}
1
+ {"version":3,"sources":["../../../../src/utils/config.ts","../../../../src/utils/client-init.ts","../../../../src/boundary/TernSecureCtx.tsx","../../../../src/app-router/client/TernSecureProvider.tsx","../../../../src/app-router/server/TernSecureServerProvider.tsx"],"names":["config","initializeApp","getAuth","setPersistence","browserSessionPersistence","getFirestore","getStorage","React","jsx","auth","useState","useEffect","onAuthStateChanged","Suspense"],"mappings":"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","file":"TernSecureServerProvider.cjs","sourcesContent":["import { TernSecureConfig, ConfigValidationResult } from '../types'\r\n\r\n/**\r\n * Loads Firebase configuration from environment variables\r\n * @returns {TernSecureConfig} Firebase configuration object\r\n */\r\nexport const loadFireConfig = (): TernSecureConfig => ({\r\n apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY || '',\r\n authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN || '',\r\n projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID || '',\r\n storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET || '',\r\n messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID || '',\r\n appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID || '',\r\n measurementId: process.env.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID || undefined,\r\n})\r\n\r\n/**\r\n * Validates Firebase configuration\r\n * @param {TernSecureConfig} config - Firebase configuration object\r\n * @throws {Error} If required configuration values are missing\r\n * @returns {TernSecureConfig} Validated configuration object\r\n */\r\nexport const validateConfig = (config: TernSecureConfig): ConfigValidationResult => {\r\n const requiredFields: (keyof TernSecureConfig)[] = [\r\n 'apiKey',\r\n 'authDomain',\r\n 'projectId',\r\n 'storageBucket',\r\n 'messagingSenderId',\r\n 'appId'\r\n ]\r\n\r\n const errors: string[] = []\r\n \r\n requiredFields.forEach(field => {\r\n if (!config[field]) {\r\n errors.push(`Missing required field: NEXT_PUBLIC_FIREBASE_${String(field).toUpperCase()}`)\r\n }\r\n })\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors,\r\n config\r\n }\r\n}\r\n\r\n/**\r\n * Initializes configuration with validation\r\n * @throws {Error} If configuration is invalid\r\n */\r\nexport const initializeConfig = (): TernSecureConfig => {\r\n const config = loadFireConfig()\r\n const validationResult = validateConfig(config)\r\n\r\n if (!validationResult.isValid) {\r\n throw new Error(\r\n `Firebase configuration validation failed:\\n${validationResult.errors.join('\\n')}`\r\n )\r\n }\r\n\r\n return config\r\n}","import { initializeApp } from 'firebase/app';\r\nimport { getAuth, setPersistence, browserSessionPersistence } from 'firebase/auth';\r\nimport { getFirestore } from 'firebase/firestore';\r\nimport { getStorage } from 'firebase/storage';\r\nimport { initializeConfig} from './config';\r\n\r\n// Initialize immediately\r\nconst config = initializeConfig();\r\nconst clientApp = initializeApp(config)\r\nconst auth = getAuth(clientApp);\r\nsetPersistence(auth, browserSessionPersistence); //to change later user should be able to choose persistance\r\nconst firestore = getFirestore(clientApp);\r\nconst storage = getStorage(clientApp);\r\n\r\nexport const TernSecureAuth = () => auth;\r\nexport const TernSecureFirestore = () => firestore;\r\nexport const TernSecureStorage = () => storage;","'use client'\r\n\r\nimport React from 'react'\r\n\r\ntype TernSecureState = {\r\n userId: string | null\r\n loading: boolean\r\n error: string | null\r\n isSignedIn: boolean\r\n}\r\n\r\n\r\n// Create context instance only when imported on client\r\nconst TernSecureContext = React.createContext<{value: TernSecureState} | undefined>(undefined);\r\n\r\nconst useInternalContext = (hookname?: string) => {\r\n const context = React.useContext(TernSecureContext)\r\n return context\r\n}\r\n\r\nconst TernSecureCtxProvider = (\r\n props: React.PropsWithChildren<{ options: TernSecureState }>,\r\n): React.JSX.Element => {\r\n const { children, options } = props;\r\n return <TernSecureContext.Provider value={{ value: options }}>{children}</TernSecureContext.Provider>;\r\n};\r\n\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}","'use client'\r\n\r\nimport React, { useState, useEffect } from 'react'\r\nimport { TernSecureAuth } from '../../utils/client-init'\r\nimport { onAuthStateChanged } from \"firebase/auth\"\r\nimport { useInternalContext, TernSecureCtxProvider } from '../../boundary/TernSecureCtx'\r\n\r\ntype TernSecureState = {\r\n userId: string | null\r\n loading: boolean\r\n error: string | null\r\n isSignedIn: boolean\r\n}\r\n\r\ninterface TernSecureClientProps {\r\n children: React.ReactNode\r\n}\r\n\r\nconst auth = TernSecureAuth()\r\n\r\nexport function TernSecureClientProvider({ children }: TernSecureClientProps) {\r\n const [authState, setAuthState] = useState<TernSecureState>({\r\n loading: true,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\nuseEffect(() => {\r\n const unsubscribe = onAuthStateChanged(auth, (user) => {\r\n if (user) {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: true,\r\n userId: user.uid,\r\n error: null\r\n })\r\n } else {\r\n setAuthState({\r\n loading: false,\r\n isSignedIn: false,\r\n userId: null,\r\n error: null\r\n })\r\n }\r\n })\r\n \r\n return () => unsubscribe()\r\n }, [])\r\n\r\n\r\n return (\r\n <TernSecureCtxProvider options={authState}>\r\n {children}\r\n </TernSecureCtxProvider>\r\n )\r\n}","import React, { ReactNode, Suspense } from \"react\"\r\nimport { TernSecureClientProvider } from '../client/TernSecureProvider'\r\n\r\ninterface TernSecureProviderProps {\r\n children: ReactNode\r\n}\r\n\r\nexport function TernSecureProvider({ children }: TernSecureProviderProps) {\r\n return (\r\n <Suspense fallback={<div>Loading...</div>}>\r\n <TernSecureClientProvider>\r\n {children}\r\n </TernSecureClientProvider>\r\n </Suspense>\r\n )\r\n}"]}
@@ -7,44 +7,17 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
7
 
8
8
  var React__default = /*#__PURE__*/_interopDefault(React);
9
9
 
10
- var TernSecureError = class extends Error {
11
- constructor(message) {
12
- super(`[TernSecure] ${message}`);
13
- this.name = "TernSecureError";
14
- }
15
- };
16
- var TernSecureContext = React__default.default.createContext(null);
17
- TernSecureContext.displayName = "TernSecureContext";
18
- var useInternalContext = (hookname = "useInternalContext") => {
19
- if (typeof window === "undefined") {
20
- throw new TernSecureError(`${hookname} must be used in client components`);
21
- }
10
+ var TernSecureContext = React__default.default.createContext(void 0);
11
+ var useInternalContext = (hookname) => {
22
12
  const context = React__default.default.useContext(TernSecureContext);
23
- if (!context) {
24
- throw new TernSecureError(
25
- `${hookname} must be used within TernSecureClientProvider`
26
- );
27
- }
28
13
  return context;
29
14
  };
30
- var TernSecureCtxProvider = ({
31
- children
32
- }) => {
33
- if (typeof window === "undefined") {
34
- throw new TernSecureError(
35
- "TernSecureCtxProvider must be used in client components"
36
- );
37
- }
38
- if (process.env.NODE_ENV !== "production") {
39
- React__default.default.useEffect(() => {
40
- console.log("[TernSecure] Provider initialized in client component");
41
- }, []);
42
- }
43
- return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { dynamic: true }, children });
15
+ var TernSecureCtxProvider = (props) => {
16
+ const { children, options } = props;
17
+ return /* @__PURE__ */ jsxRuntime.jsx(TernSecureContext.Provider, { value: { value: options }, children });
44
18
  };
45
19
 
46
20
  exports.TernSecureCtxProvider = TernSecureCtxProvider;
47
- exports.TernSecureError = TernSecureError;
48
21
  exports.useInternalContext = useInternalContext;
49
22
  //# sourceMappingURL=TernSecureCtx.cjs.map
50
23
  //# sourceMappingURL=TernSecureCtx.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/boundary/TernSecureCtx.tsx"],"names":["React","jsx"],"mappings":";;;;;;;;;AAKa,IAAA,eAAA,GAAN,cAA8B,KAAM,CAAA;AAAA,EACzC,YAAY,OAAiB,EAAA;AAC3B,IAAM,KAAA,CAAA,CAAA,aAAA,EAAgB,OAAO,CAAE,CAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAO,GAAA,iBAAA;AAAA;AAEhB;AAYA,IAAM,iBAAA,GAAoBA,sBAAM,CAAA,aAAA,CAAyC,IAAI,CAAA;AAG7E,iBAAA,CAAkB,WAAc,GAAA,mBAAA;AAM1B,IAAA,kBAAA,GAAqB,CAAC,QAAA,GAAmB,oBAAyB,KAAA;AAEtE,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAA,MAAM,IAAI,eAAA,CAAgB,CAAG,EAAA,QAAQ,CAAoC,kCAAA,CAAA,CAAA;AAAA;AAG3E,EAAM,MAAA,OAAA,GAAUA,sBAAM,CAAA,UAAA,CAAW,iBAAiB,CAAA;AAElD,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,eAAA;AAAA,MACR,GAAG,QAAQ,CAAA,6CAAA;AAAA,KACb;AAAA;AAGF,EAAO,OAAA,OAAA;AACT;AAMA,IAAM,wBAA2D,CAAC;AAAA,EAChE;AACF,CAAM,KAAA;AAEJ,EAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,IAAA,MAAM,IAAI,eAAA;AAAA,MACR;AAAA,KACF;AAAA;AAIF,EAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,IAAAA,sBAAA,CAAM,UAAU,MAAM;AACpB,MAAA,OAAA,CAAQ,IAAI,uDAAuD,CAAA;AAAA,KACrE,EAAG,EAAE,CAAA;AAAA;AAGP,EACE,uBAAAC,cAAA,CAAC,kBAAkB,QAAlB,EAAA,EAA2B,OAAO,EAAE,OAAA,EAAS,IAAK,EAAA,EAChD,QACH,EAAA,CAAA;AAEJ","file":"TernSecureCtx.cjs","sourcesContent":["'use client'\r\n\r\nimport React from 'react'\r\n\r\n// Custom error for package\r\nexport class TernSecureError extends Error {\r\n constructor(message: string) {\r\n super(`[TernSecure] ${message}`)\r\n this.name = 'TernSecureError'\r\n }\r\n}\r\n\r\n// Core types\r\nexport type TernSecureCtxValue = {\r\n dynamic: boolean\r\n}\r\n\r\nexport type TernSecureProviderProps = React.PropsWithChildren<{\r\n options?: unknown // Made optional since we're not using it\r\n}>\r\n\r\n// Context with proper null handling\r\nconst TernSecureContext = React.createContext<TernSecureCtxValue | null>(null)\r\n\r\n// Set display name for better debugging\r\nTernSecureContext.displayName = 'TernSecureContext'\r\n\r\n/**\r\n * Internal hook for context consumption\r\n * @throws {TernSecureError} When used outside client components or provider\r\n */\r\nconst useInternalContext = (hookname: string = 'useInternalContext') => {\r\n // Early check for client-side\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError(`${hookname} must be used in client components`)\r\n }\r\n\r\n const context = React.useContext(TernSecureContext)\r\n \r\n if (!context) {\r\n throw new TernSecureError(\r\n `${hookname} must be used within TernSecureClientProvider`\r\n )\r\n }\r\n\r\n return context\r\n}\r\n\r\n/**\r\n * Provider component for TernSecure\r\n * Must be used in client components only\r\n */\r\nconst TernSecureCtxProvider: React.FC<TernSecureProviderProps> = ({ \r\n children \r\n}) => {\r\n // Check for client-side rendering\r\n if (typeof window === 'undefined') {\r\n throw new TernSecureError(\r\n 'TernSecureCtxProvider must be used in client components'\r\n )\r\n }\r\n\r\n // Development checks\r\n if (process.env.NODE_ENV !== 'production') {\r\n React.useEffect(() => {\r\n console.log('[TernSecure] Provider initialized in client component')\r\n }, [])\r\n }\r\n\r\n return (\r\n <TernSecureContext.Provider value={{ dynamic: true }}>\r\n {children}\r\n </TernSecureContext.Provider>\r\n )\r\n}\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}"]}
1
+ {"version":3,"sources":["../../../src/boundary/TernSecureCtx.tsx"],"names":["React","jsx"],"mappings":";;;;;;;;;AAaA,IAAM,iBAAA,GAAoBA,sBAAM,CAAA,aAAA,CAAoD,KAAS,CAAA,CAAA;AAEvF,IAAA,kBAAA,GAAqB,CAAC,QAAsB,KAAA;AAChD,EAAM,MAAA,OAAA,GAAUA,sBAAM,CAAA,UAAA,CAAW,iBAAiB,CAAA;AAClD,EAAO,OAAA,OAAA;AACT;AAEM,IAAA,qBAAA,GAAwB,CAC5B,KACsB,KAAA;AACtB,EAAM,MAAA,EAAE,QAAU,EAAA,OAAA,EAAY,GAAA,KAAA;AAC9B,EAAO,uBAAAC,cAAA,CAAC,kBAAkB,QAAlB,EAAA,EAA2B,OAAO,EAAE,KAAA,EAAO,OAAQ,EAAA,EAAI,QAAS,EAAA,CAAA;AAC1E","file":"TernSecureCtx.cjs","sourcesContent":["'use client'\r\n\r\nimport React from 'react'\r\n\r\ntype TernSecureState = {\r\n userId: string | null\r\n loading: boolean\r\n error: string | null\r\n isSignedIn: boolean\r\n}\r\n\r\n\r\n// Create context instance only when imported on client\r\nconst TernSecureContext = React.createContext<{value: TernSecureState} | undefined>(undefined);\r\n\r\nconst useInternalContext = (hookname?: string) => {\r\n const context = React.useContext(TernSecureContext)\r\n return context\r\n}\r\n\r\nconst TernSecureCtxProvider = (\r\n props: React.PropsWithChildren<{ options: TernSecureState }>,\r\n): React.JSX.Element => {\r\n const { children, options } = props;\r\n return <TernSecureContext.Provider value={{ value: options }}>{children}</TernSecureContext.Provider>;\r\n};\r\n\r\n\r\nexport {\r\n useInternalContext,\r\n TernSecureCtxProvider\r\n}"]}