@explorins/pers-sdk 1.2.5 → 1.3.1

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 (131) hide show
  1. package/README.md +416 -0
  2. package/dist/analytics.cjs +6 -0
  3. package/dist/analytics.cjs.map +1 -1
  4. package/dist/analytics.js +2 -0
  5. package/dist/analytics.js.map +1 -1
  6. package/dist/business.cjs +6 -0
  7. package/dist/business.cjs.map +1 -1
  8. package/dist/business.js +2 -0
  9. package/dist/business.js.map +1 -1
  10. package/dist/campaign/api/campaign-api.d.ts +19 -65
  11. package/dist/campaign/api/campaign-api.d.ts.map +1 -1
  12. package/dist/campaign.cjs +55 -103
  13. package/dist/campaign.cjs.map +1 -1
  14. package/dist/campaign.js +51 -103
  15. package/dist/campaign.js.map +1 -1
  16. package/dist/chunks/base-token-service-BA81_Ouq.js +532 -0
  17. package/dist/chunks/base-token-service-BA81_Ouq.js.map +1 -0
  18. package/dist/chunks/base-token-service-BQ6uFoki.cjs +537 -0
  19. package/dist/chunks/base-token-service-BQ6uFoki.cjs.map +1 -0
  20. package/dist/chunks/jwt.function-BYiyl-z_.cjs +25 -0
  21. package/dist/chunks/jwt.function-BYiyl-z_.cjs.map +1 -0
  22. package/dist/chunks/jwt.function-d6jPtBqI.js +23 -0
  23. package/dist/chunks/jwt.function-d6jPtBqI.js.map +1 -0
  24. package/dist/chunks/pers-sdk-JC-hSYUd.js +1377 -0
  25. package/dist/chunks/pers-sdk-JC-hSYUd.js.map +1 -0
  26. package/dist/chunks/pers-sdk-_1sTi9x9.cjs +1384 -0
  27. package/dist/chunks/pers-sdk-_1sTi9x9.cjs.map +1 -0
  28. package/dist/core/auth/api/auth-api.d.ts +30 -0
  29. package/dist/core/auth/api/auth-api.d.ts.map +1 -0
  30. package/dist/core/auth/auth-constants.d.ts +33 -0
  31. package/dist/core/auth/auth-constants.d.ts.map +1 -0
  32. package/dist/core/auth/auth-errors.d.ts +8 -0
  33. package/dist/core/auth/auth-errors.d.ts.map +1 -0
  34. package/dist/core/auth/auth-provider.interface.d.ts +72 -2
  35. package/dist/core/auth/auth-provider.interface.d.ts.map +1 -1
  36. package/dist/core/auth/create-auth-provider.d.ts +3 -3
  37. package/dist/core/auth/create-auth-provider.d.ts.map +1 -1
  38. package/dist/core/auth/default-auth-provider.d.ts +71 -0
  39. package/dist/core/auth/default-auth-provider.d.ts.map +1 -0
  40. package/dist/core/auth/index.d.ts +17 -0
  41. package/dist/core/auth/index.d.ts.map +1 -0
  42. package/dist/core/auth/services/auth-service.d.ts +49 -0
  43. package/dist/core/auth/services/auth-service.d.ts.map +1 -0
  44. package/dist/core/auth/token-refresh.d.ts +91 -0
  45. package/dist/core/auth/token-refresh.d.ts.map +1 -0
  46. package/dist/core/auth/token-storage.d.ts +74 -0
  47. package/dist/core/auth/token-storage.d.ts.map +1 -0
  48. package/dist/core/errors/index.d.ts +80 -0
  49. package/dist/core/errors/index.d.ts.map +1 -0
  50. package/dist/core/index.d.ts +1 -2
  51. package/dist/core/index.d.ts.map +1 -1
  52. package/dist/core/pers-api-client.d.ts +172 -12
  53. package/dist/core/pers-api-client.d.ts.map +1 -1
  54. package/dist/core/pers-config.d.ts +36 -1
  55. package/dist/core/pers-config.d.ts.map +1 -1
  56. package/dist/core/utils/jwt.function.d.ts.map +1 -1
  57. package/dist/core.cjs +8 -500
  58. package/dist/core.cjs.map +1 -1
  59. package/dist/core.js +2 -496
  60. package/dist/core.js.map +1 -1
  61. package/dist/donation.cjs +6 -0
  62. package/dist/donation.cjs.map +1 -1
  63. package/dist/donation.js +2 -0
  64. package/dist/donation.js.map +1 -1
  65. package/dist/index.cjs +79 -4751
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.d.ts +0 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +20 -4699
  70. package/dist/index.js.map +1 -1
  71. package/dist/package.json +129 -129
  72. package/dist/payment.cjs +6 -0
  73. package/dist/payment.cjs.map +1 -1
  74. package/dist/payment.js +2 -0
  75. package/dist/payment.js.map +1 -1
  76. package/dist/pers-sdk.d.ts +49 -7
  77. package/dist/pers-sdk.d.ts.map +1 -1
  78. package/dist/redemption/api/redemption-api.d.ts +38 -77
  79. package/dist/redemption/api/redemption-api.d.ts.map +1 -1
  80. package/dist/redemption/services/redemption-service.d.ts +21 -3
  81. package/dist/redemption/services/redemption-service.d.ts.map +1 -1
  82. package/dist/redemption.cjs +84 -117
  83. package/dist/redemption.cjs.map +1 -1
  84. package/dist/redemption.js +80 -117
  85. package/dist/redemption.js.map +1 -1
  86. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +2 -1
  87. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
  88. package/dist/tenant/api/tenant-api.d.ts +28 -10
  89. package/dist/tenant/api/tenant-api.d.ts.map +1 -1
  90. package/dist/tenant/index.d.ts +4 -4
  91. package/dist/tenant.cjs +46 -11
  92. package/dist/tenant.cjs.map +1 -1
  93. package/dist/tenant.js +42 -11
  94. package/dist/tenant.js.map +1 -1
  95. package/dist/token.cjs +10 -531
  96. package/dist/token.cjs.map +1 -1
  97. package/dist/token.js +2 -531
  98. package/dist/token.js.map +1 -1
  99. package/dist/transaction.cjs +4 -0
  100. package/dist/transaction.cjs.map +1 -1
  101. package/dist/transaction.js +1 -0
  102. package/dist/transaction.js.map +1 -1
  103. package/dist/user-status.cjs +6 -0
  104. package/dist/user-status.cjs.map +1 -1
  105. package/dist/user-status.js +2 -0
  106. package/dist/user-status.js.map +1 -1
  107. package/dist/user.cjs +6 -0
  108. package/dist/user.cjs.map +1 -1
  109. package/dist/user.js +2 -0
  110. package/dist/user.js.map +1 -1
  111. package/dist/web3-chain.cjs +12 -148
  112. package/dist/web3-chain.cjs.map +1 -1
  113. package/dist/web3-chain.js +7 -147
  114. package/dist/web3-chain.js.map +1 -1
  115. package/dist/web3.cjs +8 -537
  116. package/dist/web3.cjs.map +1 -1
  117. package/dist/web3.js +6 -535
  118. package/dist/web3.js.map +1 -1
  119. package/package.json +129 -129
  120. package/dist/auth-admin/api/auth-admin-api.d.ts +0 -29
  121. package/dist/auth-admin/api/auth-admin-api.d.ts.map +0 -1
  122. package/dist/auth-admin/index.d.ts +0 -27
  123. package/dist/auth-admin/index.d.ts.map +0 -1
  124. package/dist/auth-admin/services/auth-admin-service.d.ts +0 -27
  125. package/dist/auth-admin/services/auth-admin-service.d.ts.map +0 -1
  126. package/dist/auth-admin.cjs +0 -115
  127. package/dist/auth-admin.cjs.map +0 -1
  128. package/dist/auth-admin.js +0 -111
  129. package/dist/auth-admin.js.map +0 -1
  130. package/dist/core/auth/simple-auth-config.interface.d.ts +0 -15
  131. package/dist/core/auth/simple-auth-config.interface.d.ts.map +0 -1
@@ -0,0 +1,80 @@
1
+ /**
2
+ * PERS SDK Error Handling - Optimized for Performance
3
+ *
4
+ * Consolidated API and auth errors for fast SDK performance
5
+ * Uses @explorins/pers-shared when available, fallback to SDK errors
6
+ */
7
+ import type { BusinessLogicError } from '@explorins/pers-shared';
8
+ export declare class ErrorUtils {
9
+ /**
10
+ * Fast token expiration detection
11
+ */
12
+ static isTokenExpired(error: unknown): boolean;
13
+ /**
14
+ * Fast error message extraction
15
+ */
16
+ static getMessage(error: unknown): string;
17
+ /**
18
+ * Fast status code extraction
19
+ */
20
+ static getStatus(error: unknown): number | null;
21
+ /**
22
+ * Fast retryability check
23
+ */
24
+ static isRetryable(error: unknown): boolean;
25
+ /**
26
+ * Check if error is from PERS API (uses @explorins/pers-shared format)
27
+ */
28
+ static isPersApiError(error: unknown): error is BusinessLogicError;
29
+ }
30
+ export declare class TokenRefreshNeeded extends Error {
31
+ refreshToken: string;
32
+ readonly errorCode = "TOKEN_REFRESH_NEEDED";
33
+ readonly domain = "auth";
34
+ readonly category = "SECURITY";
35
+ readonly retryable = true;
36
+ constructor(refreshToken: string);
37
+ }
38
+ export declare class ProviderTokenRefreshNeeded extends Error {
39
+ providerToken: string;
40
+ readonly errorCode = "PROVIDER_TOKEN_REFRESH_NEEDED";
41
+ readonly domain = "auth";
42
+ readonly category = "SECURITY";
43
+ readonly retryable = true;
44
+ constructor(providerToken: string);
45
+ }
46
+ export declare class LogoutRequired extends Error {
47
+ readonly errorCode = "LOGOUT_REQUIRED";
48
+ readonly domain = "auth";
49
+ readonly category = "SECURITY";
50
+ readonly retryable = false;
51
+ constructor(message: string);
52
+ }
53
+ export declare class PersApiError extends Error {
54
+ endpoint: string;
55
+ method: string;
56
+ status?: number | undefined;
57
+ readonly errorCode = "PERS_API_ERROR";
58
+ readonly domain = "api";
59
+ readonly category = "TECHNICAL";
60
+ readonly retryable: boolean;
61
+ constructor(message: string, endpoint: string, method: string, status?: number | undefined, retryable?: boolean);
62
+ }
63
+ export declare class NetworkError extends Error {
64
+ readonly errorCode = "NETWORK_ERROR";
65
+ readonly domain = "api";
66
+ readonly category = "INFRASTRUCTURE";
67
+ readonly retryable = true;
68
+ constructor(message: string);
69
+ }
70
+ export declare const PlatformErrorUtils: {
71
+ isTokenExpiredError: (error: unknown) => boolean;
72
+ extractErrorMessage: (error: unknown) => string;
73
+ };
74
+ export declare const ApiErrorDetector: {
75
+ getErrorMessage: (error: unknown) => string;
76
+ getStatusCode: (error: unknown) => number | null;
77
+ isRetryable: (error: unknown) => boolean;
78
+ isAuthError: (error: unknown) => boolean;
79
+ };
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,qBAAa,UAAU;IAErB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAW9C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAOzC;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAM/C;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;IAY3C;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB;CAInE;AAGD,qBAAa,kBAAmB,SAAQ,KAAK;IAMxB,YAAY,EAAE,MAAM;IALvC,QAAQ,CAAC,SAAS,0BAA0B;IAC5C,QAAQ,CAAC,MAAM,UAAU;IACzB,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,SAAS,QAAQ;gBAEP,YAAY,EAAE,MAAM;CAIxC;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAMhC,aAAa,EAAE,MAAM;IALxC,QAAQ,CAAC,SAAS,mCAAmC;IACrD,QAAQ,CAAC,MAAM,UAAU;IACzB,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,SAAS,QAAQ;gBAEP,aAAa,EAAE,MAAM;CAIzC;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,SAAS,qBAAqB;IACvC,QAAQ,CAAC,MAAM,UAAU;IACzB,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,SAAS,SAAS;gBAEf,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,YAAa,SAAQ,KAAK;IAQ5B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IACd,MAAM,CAAC,EAAE,MAAM;IATxB,QAAQ,CAAC,SAAS,oBAAoB;IACtC,QAAQ,CAAC,MAAM,SAAS;IACxB,QAAQ,CAAC,QAAQ,eAAe;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAG1B,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,YAAA,EACtB,SAAS,GAAE,OAAe;CAM7B;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,SAAS,mBAAmB;IACrC,QAAQ,CAAC,MAAM,SAAS;IACxB,QAAQ,CAAC,QAAQ,oBAAoB;IACrC,QAAQ,CAAC,SAAS,QAAQ;gBAEd,OAAO,EAAE,MAAM;CAI5B;AAGD,eAAO,MAAM,kBAAkB;iCACA,OAAO;iCACP,OAAO;CACrC,CAAC;AAEF,eAAO,MAAM,gBAAgB;6BACF,OAAO;2BACT,OAAO;yBACT,OAAO;yBACP,OAAO;CAK7B,CAAC"}
@@ -6,8 +6,7 @@
6
6
  export * from './pers-api-client';
7
7
  export * from './pers-config';
8
8
  export type { PersEnvironment, PersApiVersion } from './pers-config';
9
- export { PersAuthProvider, SimpleAuthConfig, createAuthProvider, } from './auth/auth-provider.interface';
10
- export type { PersRequestOptions as AuthRequestOptions } from './auth/auth-provider.interface';
9
+ export type { PersAuthProvider } from './auth/auth-provider.interface';
11
10
  export * from './abstractions/http-client';
12
11
  export { PersSDK, createPersSDK } from '../pers-sdk';
13
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GAGnB,MAAM,gCAAgC,CAAC;AAKxC,YAAY,EAAE,kBAAkB,IAAI,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAG/F,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,mBAAmB,CAAC;AAGlC,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAErE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -1,14 +1,58 @@
1
1
  /**
2
2
  * PERS API Client - Core platform-agnostic client for PERS backend
3
+ *
4
+ * Provides authenticated HTTP client with automatic token management,
5
+ * proactive refresh, and comprehensive error handling.
6
+ *
7
+ * Features:
8
+ * - Automatic token refresh before expiry
9
+ * - Background refresh for optimal performance
10
+ * - Provider token fallback for seamless authentication
11
+ * - Configurable retry and timeout settings
12
+ * - Platform-agnostic design
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const client = new PersApiClient(httpClient, {
17
+ * environment: 'production',
18
+ * apiProjectKey: 'your-project-key',
19
+ * authProvider: createAuthProvider({
20
+ * tokenProvider: () => getFirebaseToken()
21
+ * })
22
+ * });
23
+ *
24
+ * // Make authenticated requests
25
+ * const data = await client.get('/users/me');
26
+ * ```
3
27
  */
4
28
  import { HttpClient } from './abstractions/http-client';
5
29
  import { PersConfig, mergeWithDefaults } from './pers-config';
30
+ import { SessionAuthContextResponseDTO } from '../shared/interfaces/pers-shared-lib.interfaces';
6
31
  export declare class PersApiClient {
7
32
  private httpClient;
8
33
  private config;
9
34
  private readonly apiRoot;
10
35
  private readonly mergedConfig;
36
+ private readonly authApi;
37
+ private readonly authService;
38
+ /**
39
+ * Creates a new PERS API Client instance
40
+ *
41
+ * @param httpClient - Platform-specific HTTP client implementation
42
+ * @param config - Configuration options for the API client
43
+ */
11
44
  constructor(httpClient: HttpClient, config: PersConfig);
45
+ /**
46
+ * Ensures valid authentication token before making requests
47
+ *
48
+ * Implements intelligent refresh strategy:
49
+ * - Tokens with sufficient time remaining: Background refresh (non-blocking)
50
+ * - Tokens expiring soon or expired: Immediate refresh (blocking)
51
+ *
52
+ * @private
53
+ * @returns Promise that resolves when token validation is complete
54
+ */
55
+ private ensureValidToken;
12
56
  /**
13
57
  * Get request headers including auth token and project key
14
58
  */
@@ -18,13 +62,42 @@ export declare class PersApiClient {
18
62
  */
19
63
  private request;
20
64
  /**
21
- * Generic GET request
65
+ * Delegate token refresh to auth provider and handle the results
66
+ */
67
+ private handleTokenRefreshDelegation;
68
+ /**
69
+ * Performs an authenticated GET request
70
+ *
71
+ * @template T - Expected response type
72
+ * @param endpoint - API endpoint path (without base URL)
73
+ * @param responseType - Expected response format
74
+ * @returns Promise resolving to typed response data
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const user = await client.get<User>('/users/123');
79
+ * const csvData = await client.get('/export/data', 'blob');
80
+ * ```
22
81
  */
23
82
  get<T>(endpoint: string, responseType?: 'json' | 'blob' | 'text' | 'arraybuffer'): Promise<T>;
24
83
  /**
25
- * Generic POST request
84
+ * Performs an authenticated POST request
85
+ *
86
+ * @template T - Expected response type
87
+ * @param endpoint - API endpoint path (without base URL)
88
+ * @param body - Request payload data
89
+ * @param options - Request options including auth bypass
90
+ * @returns Promise resolving to typed response data
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * const user = await client.post<User>('/users', userData);
95
+ * const publicData = await client.post('/public/contact', formData, { bypassAuth: true });
96
+ * ```
26
97
  */
27
- post<T>(endpoint: string, body?: unknown): Promise<T>;
98
+ post<T>(endpoint: string, body?: unknown, options?: {
99
+ bypassAuth?: boolean;
100
+ }): Promise<T>;
28
101
  /**
29
102
  * Generic PUT request
30
103
  */
@@ -33,6 +106,102 @@ export declare class PersApiClient {
33
106
  * Generic DELETE request
34
107
  */
35
108
  delete<T>(endpoint: string): Promise<T>;
109
+ /**
110
+ * Get request headers WITHOUT auth token (for auth operations like refresh/login)
111
+ */
112
+ private getHeadersWithoutAuth;
113
+ /**
114
+ * Authenticates an admin user using external JWT token
115
+ *
116
+ * Exchanges external provider token (Firebase, Auth0, etc.) for PERS access tokens.
117
+ * Automatically stores received tokens for subsequent requests.
118
+ *
119
+ * @param externalJwt - JWT token from external authentication provider
120
+ * @returns Promise resolving to session context with admin permissions
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * const firebaseToken = await getIdToken();
125
+ * const session = await client.loginAdmin(firebaseToken);
126
+ * console.log('Admin authenticated:', session.user.email);
127
+ * ```
128
+ */
129
+ loginAdmin(externalJwt: string): Promise<SessionAuthContextResponseDTO>;
130
+ /**
131
+ * Authenticates a regular user using external JWT token
132
+ *
133
+ * Exchanges external provider token for PERS access tokens with user-level permissions.
134
+ * Automatically stores received tokens for subsequent requests.
135
+ *
136
+ * @param externalJwt - JWT token from external authentication provider
137
+ * @returns Promise resolving to session context with user permissions
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * const firebaseToken = await getIdToken();
142
+ * const session = await client.loginUser(firebaseToken);
143
+ * console.log('User authenticated:', session.user.email);
144
+ * ```
145
+ */
146
+ loginUser(externalJwt: string): Promise<SessionAuthContextResponseDTO>;
147
+ /**
148
+ * Refresh access token using stored refresh token
149
+ */
150
+ /**
151
+ * Clear all stored authentication tokens
152
+ */
153
+ /**
154
+ * Checks if current user has a valid authentication token
155
+ *
156
+ * Performs basic token availability check without network requests.
157
+ * For comprehensive validation including expiry, use isTokenExpired().
158
+ *
159
+ * @returns True if valid token exists, false otherwise
160
+ *
161
+ * @example
162
+ * ```typescript
163
+ * if (client.hasValidAuth()) {
164
+ * // User is authenticated, proceed with API calls
165
+ * const data = await client.get('/protected-data');
166
+ * } else {
167
+ * // Redirect to login
168
+ * redirectToLogin();
169
+ * }
170
+ * ```
171
+ */
172
+ hasValidAuth(): boolean;
173
+ /**
174
+ * Checks if current access token is expired or expiring soon
175
+ *
176
+ * @param marginSeconds - Seconds before expiry to consider token as expired (default: 60)
177
+ * @returns Promise resolving to true if token is expired/expiring, false if valid
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * if (await client.isTokenExpired(120)) {
182
+ * console.log('Token expires within 2 minutes');
183
+ * // Optionally trigger manual refresh
184
+ * }
185
+ * ```
186
+ */
187
+ isTokenExpired(marginSeconds?: number): Promise<boolean>;
188
+ /**
189
+ * Checks if both access and refresh tokens are expired
190
+ *
191
+ * Useful for determining if full re-authentication is required.
192
+ *
193
+ * @param marginSeconds - Seconds before expiry to consider tokens as expired (default: 60)
194
+ * @returns Promise resolving to true if both tokens expired, false otherwise
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * if (await client.areAllTokensExpired()) {
199
+ * // Full re-authentication required
200
+ * await redirectToLogin();
201
+ * }
202
+ * ```
203
+ */
204
+ areAllTokensExpired(marginSeconds?: number): Promise<boolean>;
36
205
  /**
37
206
  * Get current configuration (returns merged config)
38
207
  */
@@ -42,13 +211,4 @@ export declare class PersApiClient {
42
211
  */
43
212
  getOriginalConfig(): PersConfig;
44
213
  }
45
- export declare class PersApiError extends Error {
46
- endpoint: string;
47
- method: string;
48
- statusCode?: number | undefined;
49
- constructor(message: string, endpoint: string, method: string, statusCode?: number | undefined);
50
- }
51
- /**
52
- * PERS API Client - Core platform-agnostic client for PERS backend
53
- */
54
214
  //# sourceMappingURL=pers-api-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pers-api-client.d.ts","sourceRoot":"","sources":["../../src/core/pers-api-client.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAkB,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAgB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5E,qBAAa,aAAa;IAKtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IALhB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;gBAG1D,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU;IAS5B;;OAEG;YACW,UAAU;IA2BxB;;OAEG;YACW,OAAO;IAuErB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;IAInG;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3D;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;OAEG;IACH,SAAS,IAAI,UAAU,CAAC,OAAO,iBAAiB,CAAC;IAIjD;;OAEG;IACH,iBAAiB,IAAI,UAAU;CAGhC;AAED,qBAAa,YAAa,SAAQ,KAAK;IAG5B,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,MAAM;IACd,UAAU,CAAC,EAAE,MAAM;gBAH1B,OAAO,EAAE,MAAM,EACR,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B;AACD;;GAEG"}
1
+ {"version":3,"file":"pers-api-client.d.ts","sourceRoot":"","sources":["../../src/core/pers-api-client.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,UAAU,EAAkB,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAgB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG5E,OAAO,EAA0B,6BAA6B,EAAoB,MAAM,iDAAiD,CAAC;AAW1I,qBAAa,aAAa;IAatB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAbhB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuC;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAE1C;;;;;OAKG;gBAEO,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU;IAsB5B;;;;;;;;;OASG;YACW,gBAAgB;IAkB9B;;OAEG;YACW,UAAU;IA2BxB;;OAEG;YACW,OAAO;IAqFrB;;OAEG;YACW,4BAA4B;IA8B1C;;;;;;;;;;;;;OAaG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC;IAInG;;;;;;;;;;;;;;OAcG;IACG,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/F;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D;;OAEG;IACG,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7C;;KAEC;YACW,qBAAqB;IAsBjC;;;;;;;;;;;;;;;OAeG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI7E;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI5E;;OAEG;IASH;;OAEG;IAKH;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,IAAI,OAAO;IAIvB;;;;;;;;;;;;;OAaG;IACG,cAAc,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAYlE;;;;;;;;;;;;;;;OAeG;IACG,mBAAmB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IASvE;;OAEG;IACH,SAAS,IAAI,UAAU,CAAC,OAAO,iBAAiB,CAAC;IAIjD;;OAEG;IACH,iBAAiB,IAAI,UAAU;CAGhC"}
@@ -1,16 +1,49 @@
1
1
  /**
2
- * PERS SDK Configuration interfaces
2
+ * PERS SDK Configuration interfaces and utilities
3
+ *
4
+ * Provides type-safe configuration options for the PERS SDK
5
+ * with sensible defaults for production environments.
3
6
  */
4
7
  import { PersAuthProvider } from './auth/auth-provider.interface';
8
+ /** PERS API environment targets */
5
9
  export type PersEnvironment = 'development' | 'staging' | 'production';
10
+ /** Supported PERS API versions */
6
11
  export type PersApiVersion = 'v1' | 'v1.8' | 'v1.9' | 'v2';
12
+ /**
13
+ * PERS SDK Configuration
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const config: PersConfig = {
18
+ * environment: 'production',
19
+ * apiProjectKey: 'your-project-key',
20
+ * apiVersion: 'v2',
21
+ * authProvider: createAuthProvider({
22
+ * tokenProvider: () => getFirebaseToken()
23
+ * }),
24
+ * tokenRefreshMargin: 120,
25
+ * timeout: 30000
26
+ * };
27
+ * ```
28
+ */
7
29
  export interface PersConfig {
30
+ /** Target environment (default: 'production') */
8
31
  environment?: PersEnvironment;
32
+ /** Project key for API authentication */
9
33
  apiProjectKey?: string;
34
+ /** API version to use (default: 'v2') */
10
35
  apiVersion?: PersApiVersion;
36
+ /** Request timeout in milliseconds (default: 30000) */
11
37
  timeout?: number;
38
+ /** Number of retry attempts (default: 3) */
12
39
  retries?: number;
40
+ /** Authentication provider instance */
13
41
  authProvider?: PersAuthProvider;
42
+ /** Seconds before expiry to refresh token proactively (default: 60) */
43
+ tokenRefreshMargin?: number;
44
+ /** Seconds threshold for background vs blocking refresh (default: 30) */
45
+ backgroundRefreshThreshold?: number;
46
+ /** Internal - API root URL constructed automatically */
14
47
  readonly apiRoot?: string;
15
48
  }
16
49
  export interface PersAuthConfig {
@@ -25,6 +58,8 @@ export declare const DEFAULT_PERS_CONFIG: {
25
58
  readonly apiVersion: PersApiVersion;
26
59
  readonly timeout: 30000;
27
60
  readonly retries: 3;
61
+ readonly tokenRefreshMargin: 60;
62
+ readonly backgroundRefreshThreshold: 30;
28
63
  };
29
64
  /**
30
65
  * Internal function to construct API root from environment
@@ -1 +1 @@
1
- {"version":3,"file":"pers-config.d.ts","sourceRoot":"","sources":["../../src/core/pers-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AACvE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAEhC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;0BACD,eAAe;yBACxB,cAAc;;;CAG1B,CAAC;AAEX;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,WAAW,GAAE,eAA8B,EAC3C,OAAO,GAAE,cAAqB,GAC7B,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CASnJ"}
1
+ {"version":3,"file":"pers-config.d.ts","sourceRoot":"","sources":["../../src/core/pers-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,mCAAmC;AACnC,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvE,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAE3D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,WAAW,CAAC,EAAE,eAAe,CAAC;IAE9B,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,yCAAyC;IACzC,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,uCAAuC;IACvC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAEhC,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,yEAAyE;IACzE,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC,wDAAwD;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;0BACD,eAAe;yBACxB,cAAc;;;;;CAK1B,CAAC;AAEX;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,WAAW,GAAE,eAA8B,EAC3C,OAAO,GAAE,cAAqB,GAC7B,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,CASnJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"jwt.function.d.ts","sourceRoot":"","sources":["../../../src/core/utils/jwt.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAQ,MAAW,KAAG,OAoBnE,CAAC"}
1
+ {"version":3,"file":"jwt.function.d.ts","sourceRoot":"","sources":["../../../src/core/utils/jwt.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAQ,MAAW,KAAG,OAmBnE,CAAC"}