@explorins/pers-sdk 1.2.6 → 1.3.2

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 (106) hide show
  1. package/README.md +416 -0
  2. package/dist/business/api/business-api.d.ts.map +1 -1
  3. package/dist/business.cjs +6 -8
  4. package/dist/business.cjs.map +1 -1
  5. package/dist/business.js +6 -8
  6. package/dist/business.js.map +1 -1
  7. package/dist/campaign/api/campaign-api.d.ts +19 -65
  8. package/dist/campaign/api/campaign-api.d.ts.map +1 -1
  9. package/dist/campaign.cjs +51 -105
  10. package/dist/campaign.cjs.map +1 -1
  11. package/dist/campaign.js +49 -103
  12. package/dist/campaign.js.map +1 -1
  13. package/dist/chunks/base-token-service-BA81_Ouq.js +532 -0
  14. package/dist/chunks/base-token-service-BA81_Ouq.js.map +1 -0
  15. package/dist/chunks/base-token-service-BQ6uFoki.cjs +537 -0
  16. package/dist/chunks/base-token-service-BQ6uFoki.cjs.map +1 -0
  17. package/dist/chunks/environment-C2AkkLPd.js +46 -0
  18. package/dist/chunks/environment-C2AkkLPd.js.map +1 -0
  19. package/dist/chunks/environment-CRROnwAY.cjs +50 -0
  20. package/dist/chunks/environment-CRROnwAY.cjs.map +1 -0
  21. package/dist/chunks/jwt.function-BYiyl-z_.cjs +25 -0
  22. package/dist/chunks/jwt.function-BYiyl-z_.cjs.map +1 -0
  23. package/dist/chunks/jwt.function-d6jPtBqI.js +23 -0
  24. package/dist/chunks/jwt.function-d6jPtBqI.js.map +1 -0
  25. package/dist/chunks/pers-sdk-Ct_uUMJl.cjs +1424 -0
  26. package/dist/chunks/pers-sdk-Ct_uUMJl.cjs.map +1 -0
  27. package/dist/chunks/pers-sdk-tKHGQr5x.js +1417 -0
  28. package/dist/chunks/pers-sdk-tKHGQr5x.js.map +1 -0
  29. package/dist/core/auth/api/auth-api.d.ts +5 -2
  30. package/dist/core/auth/api/auth-api.d.ts.map +1 -1
  31. package/dist/core/auth/auth-constants.d.ts +33 -0
  32. package/dist/core/auth/auth-constants.d.ts.map +1 -0
  33. package/dist/core/auth/auth-errors.d.ts +8 -0
  34. package/dist/core/auth/auth-errors.d.ts.map +1 -0
  35. package/dist/core/auth/auth-provider.interface.d.ts +49 -3
  36. package/dist/core/auth/auth-provider.interface.d.ts.map +1 -1
  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 +1 -22
  41. package/dist/core/auth/index.d.ts.map +1 -1
  42. package/dist/core/auth/services/auth-service.d.ts +10 -1
  43. package/dist/core/auth/services/auth-service.d.ts.map +1 -1
  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/environment.d.ts +26 -0
  49. package/dist/core/environment.d.ts.map +1 -0
  50. package/dist/core/errors/index.d.ts +80 -0
  51. package/dist/core/errors/index.d.ts.map +1 -0
  52. package/dist/core/index.d.ts +2 -1
  53. package/dist/core/index.d.ts.map +1 -1
  54. package/dist/core/pers-api-client.d.ts +184 -19
  55. package/dist/core/pers-api-client.d.ts.map +1 -1
  56. package/dist/core/pers-config.d.ts +36 -1
  57. package/dist/core/pers-config.d.ts.map +1 -1
  58. package/dist/core/utils/jwt.function.d.ts.map +1 -1
  59. package/dist/core.cjs +12 -814
  60. package/dist/core.cjs.map +1 -1
  61. package/dist/core.js +3 -803
  62. package/dist/core.js.map +1 -1
  63. package/dist/index.cjs +82 -4912
  64. package/dist/index.cjs.map +1 -1
  65. package/dist/index.d.ts +1 -0
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +21 -4857
  68. package/dist/index.js.map +1 -1
  69. package/dist/package.json +147 -129
  70. package/dist/pers-sdk.d.ts +49 -7
  71. package/dist/pers-sdk.d.ts.map +1 -1
  72. package/dist/redemption/api/redemption-api.d.ts +12 -13
  73. package/dist/redemption/api/redemption-api.d.ts.map +1 -1
  74. package/dist/redemption.cjs +24 -24
  75. package/dist/redemption.cjs.map +1 -1
  76. package/dist/redemption.js +24 -24
  77. package/dist/redemption.js.map +1 -1
  78. package/dist/shared/index.d.ts +5 -0
  79. package/dist/shared/index.d.ts.map +1 -0
  80. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +1 -0
  81. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
  82. package/dist/tenant/api/tenant-api.d.ts +28 -10
  83. package/dist/tenant/api/tenant-api.d.ts.map +1 -1
  84. package/dist/tenant/index.d.ts +4 -4
  85. package/dist/tenant.cjs +40 -11
  86. package/dist/tenant.cjs.map +1 -1
  87. package/dist/tenant.js +40 -11
  88. package/dist/tenant.js.map +1 -1
  89. package/dist/token.cjs +7 -534
  90. package/dist/token.cjs.map +1 -1
  91. package/dist/token.js +1 -532
  92. package/dist/token.js.map +1 -1
  93. package/dist/web3/index.d.ts.map +1 -1
  94. package/dist/web3-chain/services/getWeb3FCD.service.d.ts +1 -1
  95. package/dist/web3-chain/services/getWeb3FCD.service.d.ts.map +1 -1
  96. package/dist/web3-chain.cjs +12 -152
  97. package/dist/web3-chain.cjs.map +1 -1
  98. package/dist/web3-chain.js +8 -148
  99. package/dist/web3-chain.js.map +1 -1
  100. package/dist/web3.cjs +12 -538
  101. package/dist/web3.cjs.map +1 -1
  102. package/dist/web3.js +10 -536
  103. package/dist/web3.js.map +1 -1
  104. package/package.json +147 -129
  105. package/dist/core/auth/simple-sdk-auth-provider.d.ts +0 -27
  106. package/dist/core/auth/simple-sdk-auth-provider.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,7 +6,8 @@
6
6
  export * from './pers-api-client';
7
7
  export * from './pers-config';
8
8
  export type { PersEnvironment, PersApiVersion } from './pers-config';
9
- export * from './auth';
9
+ export type { PersAuthProvider } from './auth/auth-provider.interface';
10
+ export * from './environment';
10
11
  export * from './abstractions/http-client';
11
12
  export { PersSDK, createPersSDK } from '../pers-sdk';
12
13
  //# 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,cAAc,QAAQ,CAAC;AAGvB,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;AAGvE,cAAc,eAAe,CAAC;AAM9B,cAAc,4BAA4B,CAAC;AAG3C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -1,5 +1,29 @@
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';
@@ -11,7 +35,24 @@ export declare class PersApiClient {
11
35
  private readonly mergedConfig;
12
36
  private readonly authApi;
13
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
+ */
14
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;
15
56
  /**
16
57
  * Get request headers including auth token and project key
17
58
  */
@@ -21,13 +62,42 @@ export declare class PersApiClient {
21
62
  */
22
63
  private request;
23
64
  /**
24
- * 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
+ * ```
25
81
  */
26
82
  get<T>(endpoint: string, responseType?: 'json' | 'blob' | 'text' | 'arraybuffer'): Promise<T>;
27
83
  /**
28
- * 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
+ * ```
29
97
  */
30
- post<T>(endpoint: string, body?: unknown): Promise<T>;
98
+ post<T>(endpoint: string, body?: unknown, options?: {
99
+ bypassAuth?: boolean;
100
+ }): Promise<T>;
31
101
  /**
32
102
  * Generic PUT request
33
103
  */
@@ -37,27 +107,128 @@ export declare class PersApiClient {
37
107
  */
38
108
  delete<T>(endpoint: string): Promise<T>;
39
109
  /**
40
- * Login admin user with external JWT (e.g., Firebase)
41
- * Automatically stores tokens in auth provider if available
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
+ * ```
42
128
  */
43
129
  loginAdmin(externalJwt: string): Promise<SessionAuthContextResponseDTO>;
44
130
  /**
45
- * Login regular user with external JWT
46
- * Automatically stores tokens in auth provider if available
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
+ * ```
47
145
  */
48
146
  loginUser(externalJwt: string): Promise<SessionAuthContextResponseDTO>;
49
147
  /**
50
- * Refresh access token using stored refresh token
148
+ * Authenticates a user using raw login data (no external JWT)
149
+ *
150
+ * Useful for custom authentication flows where user data is provided directly.
151
+ * Automatically stores received tokens for subsequent requests.
152
+ *
153
+ * @param rawLoginData - Object containing user login data (email, name, etc.)
154
+ * @return Promise resolving to session context with user permissions
51
155
  */
52
- refreshToken(): Promise<SessionAuthResponseDTO>;
156
+ loginUserWithRawData(rawLoginData: {
157
+ externalId?: string | undefined;
158
+ email?: string | undefined;
159
+ firstName?: string | undefined;
160
+ lastName?: string | undefined;
161
+ customData?: Record<string, any> | undefined;
162
+ }): Promise<SessionAuthContextResponseDTO>;
53
163
  /**
54
- * Clear all stored authentication tokens
164
+ * Checks if current user has a valid authentication token
165
+ *
166
+ * Performs basic token availability check without network requests.
167
+ * For comprehensive validation including expiry, use isTokenExpired().
168
+ *
169
+ * @returns True if valid token exists, false otherwise
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * if (client.hasValidAuth()) {
174
+ * // User is authenticated, proceed with API calls
175
+ * const data = await client.get('/protected-data');
176
+ * } else {
177
+ * // Redirect to login
178
+ * redirectToLogin();
179
+ * }
180
+ * ```
55
181
  */
56
- clearAuth(): Promise<void>;
182
+ hasValidAuth(): boolean;
57
183
  /**
58
- * Check if user has valid authentication token
184
+ * Checks if current access token is expired or expiring soon
185
+ *
186
+ * @param marginSeconds - Seconds before expiry to consider token as expired (default: 60)
187
+ * @returns Promise resolving to true if token is expired/expiring, false if valid
188
+ *
189
+ * @example
190
+ * ```typescript
191
+ * if (await client.isTokenExpired(120)) {
192
+ * console.log('Token expires within 2 minutes');
193
+ * // Optionally trigger manual refresh
194
+ * }
195
+ * ```
59
196
  */
60
- hasValidAuth(): boolean;
197
+ isTokenExpired(marginSeconds?: number): Promise<boolean>;
198
+ /**
199
+ * Checks if both access and refresh tokens are expired
200
+ *
201
+ * Useful for determining if full re-authentication is required.
202
+ *
203
+ * @param marginSeconds - Seconds before expiry to consider tokens as expired (default: 60)
204
+ * @returns Promise resolving to true if both tokens expired, false otherwise
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * if (await client.areAllTokensExpired()) {
209
+ * // Full re-authentication required
210
+ * await redirectToLogin();
211
+ * }
212
+ * ```
213
+ */
214
+ areAllTokensExpired(marginSeconds?: number): Promise<boolean>;
215
+ /**
216
+ * Refresh access token using stored refresh token
217
+ *
218
+ * @param refreshToken - Optional refresh token, uses stored token if not provided
219
+ * @returns Promise resolving to new auth tokens
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * try {
224
+ * const tokens = await client.refreshTokens();
225
+ * console.log('Tokens refreshed successfully');
226
+ * } catch (error) {
227
+ * console.error('Token refresh failed:', error);
228
+ * }
229
+ * ```
230
+ */
231
+ refreshTokens(refreshToken?: string): Promise<SessionAuthResponseDTO>;
61
232
  /**
62
233
  * Get current configuration (returns merged config)
63
234
  */
@@ -67,10 +238,4 @@ export declare class PersApiClient {
67
238
  */
68
239
  getOriginalConfig(): PersConfig;
69
240
  }
70
- export declare class PersApiError extends Error {
71
- endpoint: string;
72
- method: string;
73
- statusCode?: number | undefined;
74
- constructor(message: string, endpoint: string, method: string, statusCode?: number | undefined);
75
- }
76
241
  //# 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;AAG5E,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAoB,MAAM,iDAAiD,CAAC;AAG1I,qBAAa,aAAa;IAOtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAPhB,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;gBAGhC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,UAAU;IAkB5B;;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;IAQ7C;;;OAGG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI7E;;;OAGG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAI5E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAQrD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;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"}
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,EAAE,sBAAsB,EAAE,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;;;;;;;;OAQG;IACG,oBAAoB,CAAC,YAAY,EAAE;QACvC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;KAC9C,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAK1C;;;;;;;;;;;;;;;;;;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;IACG,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI3E;;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"}