@skylabs-digital/react-identity-access 1.0.0

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 (60) hide show
  1. package/README.md +280 -0
  2. package/dist/components/FeatureFlag.d.ts +9 -0
  3. package/dist/components/FeatureFlag.d.ts.map +1 -0
  4. package/dist/components/LoginForm.d.ts +50 -0
  5. package/dist/components/LoginForm.d.ts.map +1 -0
  6. package/dist/components/PasswordRecoveryForm.d.ts +54 -0
  7. package/dist/components/PasswordRecoveryForm.d.ts.map +1 -0
  8. package/dist/components/Protected.d.ts +11 -0
  9. package/dist/components/Protected.d.ts.map +1 -0
  10. package/dist/components/ProtectedRoute.d.ts +12 -0
  11. package/dist/components/ProtectedRoute.d.ts.map +1 -0
  12. package/dist/components/SignupForm.d.ts +54 -0
  13. package/dist/components/SignupForm.d.ts.map +1 -0
  14. package/dist/components/SubscriptionGuard.d.ts +9 -0
  15. package/dist/components/SubscriptionGuard.d.ts.map +1 -0
  16. package/dist/index.d.ts +43 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.es.js +2609 -0
  19. package/dist/index.es.js.map +1 -0
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/providers/AppProvider.d.ts +41 -0
  23. package/dist/providers/AppProvider.d.ts.map +1 -0
  24. package/dist/providers/AuthProvider.d.ts +48 -0
  25. package/dist/providers/AuthProvider.d.ts.map +1 -0
  26. package/dist/providers/FeatureFlagProvider.d.ts +22 -0
  27. package/dist/providers/FeatureFlagProvider.d.ts.map +1 -0
  28. package/dist/providers/SubscriptionProvider.d.ts +24 -0
  29. package/dist/providers/SubscriptionProvider.d.ts.map +1 -0
  30. package/dist/providers/TenantProvider.d.ts +32 -0
  31. package/dist/providers/TenantProvider.d.ts.map +1 -0
  32. package/dist/services/AppApiService.d.ts +20 -0
  33. package/dist/services/AppApiService.d.ts.map +1 -0
  34. package/dist/services/AuthApiService.d.ts +29 -0
  35. package/dist/services/AuthApiService.d.ts.map +1 -0
  36. package/dist/services/FeatureFlagApiService.d.ts +19 -0
  37. package/dist/services/FeatureFlagApiService.d.ts.map +1 -0
  38. package/dist/services/HealthApiService.d.ts +9 -0
  39. package/dist/services/HealthApiService.d.ts.map +1 -0
  40. package/dist/services/HttpService.d.ts +21 -0
  41. package/dist/services/HttpService.d.ts.map +1 -0
  42. package/dist/services/PermissionApiService.d.ts +21 -0
  43. package/dist/services/PermissionApiService.d.ts.map +1 -0
  44. package/dist/services/RoleApiService.d.ts +23 -0
  45. package/dist/services/RoleApiService.d.ts.map +1 -0
  46. package/dist/services/SessionManager.d.ts +45 -0
  47. package/dist/services/SessionManager.d.ts.map +1 -0
  48. package/dist/services/SubscriptionApiService.d.ts +15 -0
  49. package/dist/services/SubscriptionApiService.d.ts.map +1 -0
  50. package/dist/services/SubscriptionPlanApiService.d.ts +19 -0
  51. package/dist/services/SubscriptionPlanApiService.d.ts.map +1 -0
  52. package/dist/services/TenantApiService.d.ts +21 -0
  53. package/dist/services/TenantApiService.d.ts.map +1 -0
  54. package/dist/services/UserApiService.d.ts +17 -0
  55. package/dist/services/UserApiService.d.ts.map +1 -0
  56. package/dist/types/api.d.ts +281 -0
  57. package/dist/types/api.d.ts.map +1 -0
  58. package/dist/utils/mappers.d.ts +29 -0
  59. package/dist/utils/mappers.d.ts.map +1 -0
  60. package/package.json +135 -0
package/README.md ADDED
@@ -0,0 +1,280 @@
1
+ # React Identity Access
2
+
3
+ A powerful, modern authentication and authorization library for React applications. Built with TypeScript, featuring role-based access control, permission management, and seamless integration with React applications.
4
+
5
+ ## 🚀 Features
6
+
7
+ - **🔐 Secure Authentication** - JWT-based authentication with automatic token refresh
8
+ - **👥 Role-Based Access Control** - Granular permission system with role hierarchy
9
+ - **🛡️ Protected Components** - Easy-to-use components for conditional rendering
10
+ - **📱 Multi-Tenant Support** - Built-in support for multi-tenant applications
11
+ - **🎯 TypeScript First** - Full TypeScript support with comprehensive type definitions
12
+ - **⚡ Modern React** - Built with React hooks and context for optimal performance
13
+ - **🔄 Session Management** - Automatic session handling and token refresh
14
+ - **🎨 Feature Flags** - Built-in feature flag management
15
+ - **💳 Subscription Management** - Integrated billing and subscription handling
16
+
17
+ ## 📦 Installation
18
+
19
+ ```bash
20
+ npm install react-identity-access
21
+ # or
22
+ yarn add react-identity-access
23
+ # or
24
+ pnpm add react-identity-access
25
+ ```
26
+
27
+ ## 🏃‍♂️ Quick Start
28
+
29
+ ### 1. Setup Providers
30
+
31
+ Wrap your application with the required providers:
32
+
33
+ ```tsx
34
+ import { AppProvider, AuthProvider } from 'react-identity-access';
35
+
36
+ function App() {
37
+ return (
38
+ <AppProvider
39
+ config={{
40
+ baseUrl: 'https://your-api.com',
41
+ appId: 'your-app-id',
42
+ tenantMode: 'subdomain', // or 'path' or 'header'
43
+ selectorParam: 'tenant',
44
+ }}
45
+ >
46
+ <AuthProvider>
47
+ {/* Your app components */}
48
+ </AuthProvider>
49
+ </AppProvider>
50
+ );
51
+ }
52
+ ```
53
+
54
+ ### 2. Use Authentication
55
+
56
+ ```tsx
57
+ import { useAuth } from 'react-identity-access';
58
+
59
+ function LoginComponent() {
60
+ const { login, logout, sessionManager } = useAuth();
61
+ const user = sessionManager.getUser();
62
+
63
+ const handleLogin = async () => {
64
+ try {
65
+ await login('user@example.com', 'password', 'tenant-id');
66
+ } catch (error) {
67
+ console.error('Login failed:', error);
68
+ }
69
+ };
70
+
71
+ return (
72
+ <div>
73
+ {user ? (
74
+ <div>
75
+ <p>Welcome, {user.name}!</p>
76
+ <button onClick={logout}>Logout</button>
77
+ </div>
78
+ ) : (
79
+ <button onClick={handleLogin}>Login</button>
80
+ )}
81
+ </div>
82
+ );
83
+ }
84
+ ```
85
+
86
+ ### 3. Protect Components
87
+
88
+ ```tsx
89
+ import { Protected } from 'react-identity-access';
90
+
91
+ function AdminPanel() {
92
+ return (
93
+ <Protected
94
+ requiredPermissions={['admin:read', 'users:manage']}
95
+ fallback={<div>Access denied</div>}
96
+ >
97
+ <div>Admin content here</div>
98
+ </Protected>
99
+ );
100
+ }
101
+ ```
102
+
103
+ ## 🏗️ Architecture
104
+
105
+ ### Core Providers
106
+
107
+ - **AppProvider** - Application configuration and context
108
+ - **AuthProvider** - Authentication and session management
109
+ - **FeatureFlagProvider** - Feature flag management
110
+ - **SubscriptionProvider** - Billing and subscription handling
111
+
112
+ ### Permission System
113
+
114
+ The library uses a resource-action permission format:
115
+
116
+ ```
117
+ resource:action
118
+ ```
119
+
120
+ Examples:
121
+ - `users:read` - Read user data
122
+ - `products:write` - Create/update products
123
+ - `admin:*` - All admin permissions
124
+ - `reports:read` - View reports
125
+
126
+ ## 📚 Documentation
127
+
128
+ - [📖 Implementation Guide](./docs/implementation.md)
129
+ - [🔧 Advanced Usage](./docs/advanced-usage.md)
130
+ - [🤝 Contributing](./docs/contributing.md)
131
+ - [📋 API Reference](./docs/api-reference.md)
132
+ - [🎯 Examples](./docs/examples.md)
133
+
134
+ ## 🎮 Demo Application
135
+
136
+ A complete demo application is included in the `template/` directory. To run it:
137
+
138
+ ```bash
139
+ cd template
140
+ pnpm install
141
+ pnpm start
142
+ ```
143
+
144
+ The demo showcases:
145
+ - User authentication flow
146
+ - Role-based dashboard
147
+ - Permission testing
148
+ - Protected routes
149
+ - Feature flag usage
150
+
151
+ ## 🛠️ Development
152
+
153
+ ### Prerequisites
154
+
155
+ - Node.js 16+
156
+ - pnpm (recommended) or npm/yarn
157
+
158
+ ### Setup
159
+
160
+ ```bash
161
+ # Clone the repository
162
+ git clone <repository-url>
163
+ cd react-identity-access
164
+
165
+ # Install dependencies
166
+ pnpm install
167
+
168
+ # Build the library
169
+ pnpm build
170
+
171
+ # Run tests
172
+ pnpm test
173
+
174
+ # Start development
175
+ pnpm dev
176
+ ```
177
+
178
+ ### Project Structure
179
+
180
+ ```
181
+ react-identity-access/
182
+ ├── src/ # Library source code
183
+ │ ├── components/ # React components
184
+ │ ├── providers/ # Context providers
185
+ │ ├── services/ # API services
186
+ │ ├── types/ # TypeScript definitions
187
+ │ └── index.ts # Main export
188
+ ├── template/ # Demo application
189
+ ├── docs/ # Documentation
190
+ ├── dist/ # Built library
191
+ └── package.json
192
+ ```
193
+
194
+ ## 🔧 Configuration
195
+
196
+ ### Environment Variables
197
+
198
+ ```env
199
+ REACT_APP_BASE_URL=https://your-api.com
200
+ REACT_APP_ID=your-app-id
201
+ REACT_APP_TENANT_MODE=subdomain
202
+ ```
203
+
204
+ ### AppProvider Config
205
+
206
+ ```tsx
207
+ interface AppConfig {
208
+ baseUrl: string; // API base URL
209
+ appId: string; // Application identifier
210
+ tenantMode: 'subdomain' | 'path' | 'header';
211
+ selectorParam: string; // Tenant selector parameter
212
+ apiTimeout?: number; // Request timeout (default: 30000)
213
+ retryAttempts?: number; // Retry attempts (default: 3)
214
+ }
215
+ ```
216
+
217
+ ## 🧪 Testing
218
+
219
+ The library includes comprehensive tests:
220
+
221
+ ```bash
222
+ # Run all tests
223
+ pnpm test
224
+
225
+ # Run tests in watch mode
226
+ pnpm test:watch
227
+
228
+ # Run tests with coverage
229
+ pnpm test:coverage
230
+ ```
231
+
232
+ ## 📈 Performance
233
+
234
+ - **Tree-shakable** - Only import what you need
235
+ - **Lazy loading** - Components load on demand
236
+ - **Optimized re-renders** - Minimal React re-renders
237
+ - **Caching** - Intelligent caching of API responses
238
+
239
+ ## 🔒 Security
240
+
241
+ - **JWT tokens** with automatic refresh
242
+ - **Secure storage** of sensitive data
243
+ - **CSRF protection** built-in
244
+ - **Permission validation** on both client and server
245
+ - **Audit logging** for security events
246
+
247
+ ## 🌐 Browser Support
248
+
249
+ - Chrome 90+
250
+ - Firefox 88+
251
+ - Safari 14+
252
+ - Edge 90+
253
+
254
+ ## 📄 License
255
+
256
+ MIT License - see [LICENSE](./LICENSE) file for details.
257
+
258
+ ## 🤝 Contributing
259
+
260
+ We welcome contributions! Please see our [Contributing Guide](./docs/contributing.md) for details.
261
+
262
+ ## 📞 Support
263
+
264
+ - 📧 Email: support@skylabs.com
265
+ - 💬 Discord: [Join our community](https://discord.gg/skylabs)
266
+ - 🐛 Issues: [GitHub Issues](https://github.com/skylabs/react-identity-access/issues)
267
+ - 📖 Docs: [Documentation](./docs/)
268
+
269
+ ## 🎯 Roadmap
270
+
271
+ - [ ] OAuth 2.0 / OpenID Connect support
272
+ - [ ] Multi-factor authentication
273
+ - [ ] Advanced audit logging
274
+ - [ ] GraphQL integration
275
+ - [ ] React Native support
276
+ - [ ] SSR/Next.js optimization
277
+
278
+ ---
279
+
280
+ Made with ❤️ by [Skylabs Digital](https://skylabs.digital)
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ interface FeatureFlagProps {
3
+ name: string;
4
+ children: ReactNode;
5
+ fallback?: ReactNode;
6
+ }
7
+ export declare function FeatureFlag({ name, children, fallback }: FeatureFlagProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=FeatureFlag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureFlag.d.ts","sourceRoot":"","sources":["../../src/components/FeatureFlag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AA0BD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CA6BzE"}
@@ -0,0 +1,50 @@
1
+ import { default as React } from 'react';
2
+ export interface LoginFormCopy {
3
+ title?: string;
4
+ emailLabel?: string;
5
+ emailPlaceholder?: string;
6
+ passwordLabel?: string;
7
+ passwordPlaceholder?: string;
8
+ submitButton?: string;
9
+ forgotPasswordLink?: string;
10
+ signupLink?: string;
11
+ signupText?: string;
12
+ errorMessage?: string;
13
+ loadingText?: string;
14
+ }
15
+ export interface LoginFormStyles {
16
+ container?: React.CSSProperties;
17
+ title?: React.CSSProperties;
18
+ form?: React.CSSProperties;
19
+ fieldGroup?: React.CSSProperties;
20
+ label?: React.CSSProperties;
21
+ input?: React.CSSProperties;
22
+ inputError?: React.CSSProperties;
23
+ inputContainer?: React.CSSProperties;
24
+ passwordToggle?: React.CSSProperties;
25
+ button?: React.CSSProperties;
26
+ buttonDisabled?: React.CSSProperties;
27
+ buttonLoading?: React.CSSProperties;
28
+ errorText?: React.CSSProperties;
29
+ linkContainer?: React.CSSProperties;
30
+ link?: React.CSSProperties;
31
+ divider?: React.CSSProperties;
32
+ }
33
+ export interface LoginFormIcons {
34
+ showPassword?: React.ReactNode;
35
+ hidePassword?: React.ReactNode;
36
+ }
37
+ export interface LoginFormProps {
38
+ copy?: LoginFormCopy;
39
+ styles?: LoginFormStyles;
40
+ icons?: LoginFormIcons;
41
+ onSuccess?: (data: any) => void;
42
+ onError?: (error: string) => void;
43
+ onForgotPassword?: () => void;
44
+ onSignupClick?: () => void;
45
+ showForgotPassword?: boolean;
46
+ showSignupLink?: boolean;
47
+ className?: string;
48
+ }
49
+ export declare function LoginForm({ copy, styles, icons, onSuccess, onError, onForgotPassword, onSignupClick, showForgotPassword, showSignupLink, className, }: LoginFormProps): import("react/jsx-runtime").JSX.Element;
50
+ //# sourceMappingURL=LoginForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoginForm.d.ts","sourceRoot":"","sources":["../../src/components/LoginForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoKD,wBAAgB,SAAS,CAAC,EACxB,IAAS,EACT,MAAW,EACX,KAAU,EACV,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,kBAAyB,EACzB,cAAqB,EACrB,SAAS,GACV,EAAE,cAAc,2CAkJhB"}
@@ -0,0 +1,54 @@
1
+ import { default as React } from 'react';
2
+ export interface PasswordRecoveryFormCopy {
3
+ title?: string;
4
+ subtitle?: string;
5
+ emailLabel?: string;
6
+ emailPlaceholder?: string;
7
+ submitButton?: string;
8
+ backToLoginLink?: string;
9
+ successMessage?: string;
10
+ errorMessage?: string;
11
+ loadingText?: string;
12
+ resetTitle?: string;
13
+ resetSubtitle?: string;
14
+ tokenLabel?: string;
15
+ tokenPlaceholder?: string;
16
+ newPasswordLabel?: string;
17
+ newPasswordPlaceholder?: string;
18
+ confirmPasswordLabel?: string;
19
+ confirmPasswordPlaceholder?: string;
20
+ resetSubmitButton?: string;
21
+ resetLoadingText?: string;
22
+ resetSuccessMessage?: string;
23
+ passwordMismatchError?: string;
24
+ }
25
+ export interface PasswordRecoveryFormStyles {
26
+ container?: React.CSSProperties;
27
+ title?: React.CSSProperties;
28
+ subtitle?: React.CSSProperties;
29
+ form?: React.CSSProperties;
30
+ fieldGroup?: React.CSSProperties;
31
+ label?: React.CSSProperties;
32
+ input?: React.CSSProperties;
33
+ inputError?: React.CSSProperties;
34
+ button?: React.CSSProperties;
35
+ buttonDisabled?: React.CSSProperties;
36
+ buttonLoading?: React.CSSProperties;
37
+ errorText?: React.CSSProperties;
38
+ successText?: React.CSSProperties;
39
+ linkContainer?: React.CSSProperties;
40
+ link?: React.CSSProperties;
41
+ }
42
+ export interface PasswordRecoveryFormProps {
43
+ copy?: PasswordRecoveryFormCopy;
44
+ styles?: PasswordRecoveryFormStyles;
45
+ mode?: 'request' | 'reset';
46
+ token?: string;
47
+ onSuccess?: (data?: any) => void;
48
+ onError?: (error: string) => void;
49
+ onBackToLogin?: () => void;
50
+ onModeChange?: (mode: 'request' | 'reset') => void;
51
+ className?: string;
52
+ }
53
+ export declare function PasswordRecoveryForm({ copy, styles, mode, token: initialToken, onSuccess, onError, onBackToLogin, onModeChange, className, }: PasswordRecoveryFormProps): import("react/jsx-runtime").JSX.Element;
54
+ //# sourceMappingURL=PasswordRecoveryForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordRecoveryForm.d.ts","sourceRoot":"","sources":["../../src/components/PasswordRecoveryForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC/B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAClC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,wBAAwB,CAAC;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuHD,wBAAgB,oBAAoB,CAAC,EACnC,IAAS,EACT,MAAW,EACX,IAAgB,EAChB,KAAK,EAAE,YAAiB,EACxB,SAAS,EACT,OAAO,EACP,aAAa,EACb,YAAY,EACZ,SAAS,GACV,EAAE,yBAAyB,2CA4P3B"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ import { UserType, Permission } from '../types/api';
3
+ export interface ProtectedProps {
4
+ children: ReactNode;
5
+ fallback?: ReactNode;
6
+ minUserType?: UserType;
7
+ requiredPermissions?: (string | Permission)[];
8
+ requireAllPermissions?: boolean;
9
+ }
10
+ export declare function Protected({ children, fallback, minUserType, requiredPermissions, requireAllPermissions, }: ProtectedProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=Protected.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Protected.d.ts","sourceRoot":"","sources":["../../src/components/Protected.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,mBAAmB,CAAC,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAmGD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,qBAA6B,GAC9B,EAAE,cAAc,2CAuChB"}
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ import { UserType, Permission } from '../types/api';
3
+ export interface ProtectedRouteProps {
4
+ children: ReactNode;
5
+ redirectTo?: string;
6
+ minUserType?: UserType;
7
+ requiredPermissions?: (string | Permission)[];
8
+ requireAllPermissions?: boolean;
9
+ fallback?: ReactNode;
10
+ }
11
+ export declare function ProtectedRoute({ children, redirectTo, minUserType, requiredPermissions, requireAllPermissions, fallback, }: ProtectedRouteProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=ProtectedRoute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtectedRoute.d.ts","sourceRoot":"","sources":["../../src/components/ProtectedRoute.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,QAAQ,CAAC;IACvB,mBAAmB,CAAC,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAsGD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,UAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,qBAA6B,EAC7B,QAAQ,GACT,EAAE,mBAAmB,2CAiDrB"}
@@ -0,0 +1,54 @@
1
+ import { default as React } from 'react';
2
+ export interface SignupFormCopy {
3
+ title?: string;
4
+ nameLabel?: string;
5
+ namePlaceholder?: string;
6
+ emailLabel?: string;
7
+ emailPlaceholder?: string;
8
+ passwordLabel?: string;
9
+ passwordPlaceholder?: string;
10
+ confirmPasswordLabel?: string;
11
+ confirmPasswordPlaceholder?: string;
12
+ tenantNameLabel?: string;
13
+ tenantNamePlaceholder?: string;
14
+ submitButton?: string;
15
+ loginLink?: string;
16
+ loginText?: string;
17
+ errorMessage?: string;
18
+ loadingText?: string;
19
+ passwordMismatchError?: string;
20
+ isAdminLabel?: string;
21
+ isAdminDescription?: string;
22
+ }
23
+ export interface SignupFormStyles {
24
+ container?: React.CSSProperties;
25
+ title?: React.CSSProperties;
26
+ form?: React.CSSProperties;
27
+ fieldGroup?: React.CSSProperties;
28
+ label?: React.CSSProperties;
29
+ input?: React.CSSProperties;
30
+ inputError?: React.CSSProperties;
31
+ checkbox?: React.CSSProperties;
32
+ checkboxContainer?: React.CSSProperties;
33
+ checkboxLabel?: React.CSSProperties;
34
+ button?: React.CSSProperties;
35
+ buttonDisabled?: React.CSSProperties;
36
+ buttonLoading?: React.CSSProperties;
37
+ errorText?: React.CSSProperties;
38
+ linkContainer?: React.CSSProperties;
39
+ link?: React.CSSProperties;
40
+ divider?: React.CSSProperties;
41
+ }
42
+ export type SignupType = 'user' | 'tenant';
43
+ export interface SignupFormProps {
44
+ copy?: SignupFormCopy;
45
+ styles?: SignupFormStyles;
46
+ signupType?: SignupType;
47
+ onSuccess?: (data: any) => void;
48
+ onError?: (error: string) => void;
49
+ onLoginClick?: () => void;
50
+ showLoginLink?: boolean;
51
+ className?: string;
52
+ }
53
+ export declare function SignupForm({ copy, styles, signupType, onSuccess, onError, onLoginClick, showLoginLink, className, }: SignupFormProps): import("react/jsx-runtime").JSX.Element;
54
+ //# sourceMappingURL=SignupForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignupForm.d.ts","sourceRoot":"","sources":["../../src/components/SignupForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC/B,iBAAiB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACxC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAChC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4HD,wBAAgB,UAAU,CAAC,EACzB,IAAS,EACT,MAAW,EACX,UAAmB,EACnB,SAAS,EACT,OAAO,EACP,YAAY,EACZ,aAAoB,EACpB,SAAS,GACV,EAAE,eAAe,2CA4NjB"}
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ export interface SubscriptionGuardProps {
3
+ children: ReactNode;
4
+ fallback?: ReactNode;
5
+ allowedPlans?: string[];
6
+ requiredFeature?: string;
7
+ }
8
+ export declare function SubscriptionGuard({ children, fallback, allowedPlans, requiredFeature, }: SubscriptionGuardProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=SubscriptionGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionGuard.d.ts","sourceRoot":"","sources":["../../src/components/SubscriptionGuard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAqBD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,QAA8B,EAC9B,YAAY,EACZ,eAAe,GAChB,EAAE,sBAAsB,2CAwCxB"}
@@ -0,0 +1,43 @@
1
+ export { AppProvider, useApp, useApi, useTenant } from './providers/AppProvider';
2
+ export type { AppConfig } from './providers/AppProvider';
3
+ export { AuthProvider, useAuth } from './providers/AuthProvider';
4
+ export type { AuthConfig, AuthContextValue } from './providers/AuthProvider';
5
+ export { FeatureFlagProvider, useFeatureFlags } from './providers/FeatureFlagProvider';
6
+ export type { FeatureFlagConfig, FeatureFlagContextValue } from './providers/FeatureFlagProvider';
7
+ export type { FeatureFlag as FeatureFlagType } from './types/api';
8
+ export { SubscriptionProvider, useSubscription } from './providers/SubscriptionProvider';
9
+ export type { SubscriptionConfig, SubscriptionContextValue, } from './providers/SubscriptionProvider';
10
+ export { TenantProvider, useTenantSettings, useSettings } from './providers/TenantProvider';
11
+ export { Protected } from './components/Protected';
12
+ export { ProtectedRoute } from './components/ProtectedRoute';
13
+ export { SubscriptionGuard } from './components/SubscriptionGuard';
14
+ export { FeatureFlag } from './components/FeatureFlag';
15
+ export { LoginForm } from './components/LoginForm';
16
+ export { SignupForm } from './components/SignupForm';
17
+ export { PasswordRecoveryForm } from './components/PasswordRecoveryForm';
18
+ export type { ProtectedProps } from './components/Protected';
19
+ export type { ProtectedRouteProps } from './components/ProtectedRoute';
20
+ export type { SubscriptionGuardProps } from './components/SubscriptionGuard';
21
+ export type { LoginFormProps, LoginFormCopy, LoginFormStyles } from './components/LoginForm';
22
+ export type { SignupFormProps, SignupFormCopy, SignupFormStyles } from './components/SignupForm';
23
+ export type { PasswordRecoveryFormProps, PasswordRecoveryFormCopy, PasswordRecoveryFormStyles, } from './components/PasswordRecoveryForm';
24
+ export { UserType } from './types/api';
25
+ export type { User, PlanFeature, TenantSubscriptionFeatures } from './types/api';
26
+ export { HttpService } from './services/HttpService';
27
+ export type { RequestOptions } from './services/HttpService';
28
+ export { SessionManager } from './services/SessionManager';
29
+ export type { TokenData, SessionConfig } from './services/SessionManager';
30
+ export { AuthApiService } from './services/AuthApiService';
31
+ export { UserApiService } from './services/UserApiService';
32
+ export { RoleApiService } from './services/RoleApiService';
33
+ export { PermissionApiService } from './services/PermissionApiService';
34
+ export { AppApiService } from './services/AppApiService';
35
+ export { TenantApiService } from './services/TenantApiService';
36
+ export { SubscriptionApiService } from './services/SubscriptionApiService';
37
+ export { SubscriptionPlanApiService } from './services/SubscriptionPlanApiService';
38
+ export { FeatureFlagApiService } from './services/FeatureFlagApiService';
39
+ export { HealthApiService } from './services/HealthApiService';
40
+ export * from './types/api';
41
+ export type { JSONSchema } from './types/api';
42
+ export { ApiMappers } from './utils/mappers';
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}