@mission_sciences/provider-sdk 0.2.0 → 0.3.0-dev.31ea3d4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -40
- package/dist/adapters/react/index.d.ts +3 -0
- package/dist/adapters/react/index.d.ts.map +1 -0
- package/dist/adapters/react/index.js +75 -0
- package/dist/adapters/react/index.js.map +1 -0
- package/dist/adapters/react/useMarketplaceSession.d.ts +30 -0
- package/dist/adapters/react/useMarketplaceSession.d.ts.map +1 -0
- package/dist/adapters/vue/index.d.ts +3 -0
- package/dist/adapters/vue/index.d.ts.map +1 -0
- package/dist/adapters/vue/index.js +56 -0
- package/dist/adapters/vue/index.js.map +1 -0
- package/dist/adapters/vue/useMarketplaceSession.d.ts +76 -0
- package/dist/adapters/vue/useMarketplaceSession.d.ts.map +1 -0
- package/dist/core/HeartbeatManager.d.ts +43 -0
- package/dist/core/HeartbeatManager.d.ts.map +1 -0
- package/dist/core/JWKSValidator.d.ts +26 -0
- package/dist/core/JWKSValidator.d.ts.map +1 -0
- package/dist/core/JWTParser.d.ts +46 -0
- package/dist/core/JWTParser.d.ts.map +1 -0
- package/dist/core/MarketplaceSDK.d.ts +111 -0
- package/dist/core/MarketplaceSDK.d.ts.map +1 -0
- package/dist/core/PurchaseStateManager.d.ts +28 -0
- package/dist/core/PurchaseStateManager.d.ts.map +1 -0
- package/dist/core/TabSyncManager.d.ts +49 -0
- package/dist/core/TabSyncManager.d.ts.map +1 -0
- package/dist/core/TimerManager.d.ts +55 -0
- package/dist/core/TimerManager.d.ts.map +1 -0
- package/dist/index.d.ts +21 -769
- package/dist/index.d.ts.map +1 -0
- package/dist/marketplace-sdk.es.js +69 -4
- package/dist/marketplace-sdk.es.js.map +1 -1
- package/dist/marketplace-sdk.umd.js +1 -1
- package/dist/marketplace-sdk.umd.js.map +1 -1
- package/dist/styles/theme.d.ts +89 -0
- package/dist/styles/theme.d.ts.map +1 -0
- package/dist/types/index.d.ts +254 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/ui/SessionHeader.d.ts +46 -0
- package/dist/ui/SessionHeader.d.ts.map +1 -0
- package/dist/ui/WarningModal.d.ts +39 -0
- package/dist/ui/WarningModal.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +25 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/url.d.ts +12 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/package.json +17 -3
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme configuration matching the General Wisdom SPA design system
|
|
3
|
+
* Based on gw-spa/src/styles/globals.css and Tailwind CSS v4
|
|
4
|
+
*/
|
|
5
|
+
export interface ThemeColors {
|
|
6
|
+
background: string;
|
|
7
|
+
foreground: string;
|
|
8
|
+
card: string;
|
|
9
|
+
cardForeground: string;
|
|
10
|
+
popover: string;
|
|
11
|
+
popoverForeground: string;
|
|
12
|
+
primary: string;
|
|
13
|
+
primaryForeground: string;
|
|
14
|
+
secondary: string;
|
|
15
|
+
secondaryForeground: string;
|
|
16
|
+
muted: string;
|
|
17
|
+
mutedForeground: string;
|
|
18
|
+
accent: string;
|
|
19
|
+
accentForeground: string;
|
|
20
|
+
destructive: string;
|
|
21
|
+
destructiveForeground: string;
|
|
22
|
+
success: string;
|
|
23
|
+
successForeground: string;
|
|
24
|
+
border: string;
|
|
25
|
+
input: string;
|
|
26
|
+
ring: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ThemeTypography {
|
|
29
|
+
fontFamily: string;
|
|
30
|
+
fontSize: {
|
|
31
|
+
xs: string;
|
|
32
|
+
sm: string;
|
|
33
|
+
base: string;
|
|
34
|
+
lg: string;
|
|
35
|
+
xl: string;
|
|
36
|
+
'2xl': string;
|
|
37
|
+
};
|
|
38
|
+
fontWeight: {
|
|
39
|
+
normal: string;
|
|
40
|
+
medium: string;
|
|
41
|
+
semibold: string;
|
|
42
|
+
bold: string;
|
|
43
|
+
};
|
|
44
|
+
lineHeight: {
|
|
45
|
+
tight: string;
|
|
46
|
+
normal: string;
|
|
47
|
+
relaxed: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface ThemeSpacing {
|
|
51
|
+
borderRadius: {
|
|
52
|
+
sm: string;
|
|
53
|
+
md: string;
|
|
54
|
+
lg: string;
|
|
55
|
+
};
|
|
56
|
+
padding: {
|
|
57
|
+
sm: string;
|
|
58
|
+
md: string;
|
|
59
|
+
lg: string;
|
|
60
|
+
xl: string;
|
|
61
|
+
};
|
|
62
|
+
gap: {
|
|
63
|
+
sm: string;
|
|
64
|
+
md: string;
|
|
65
|
+
lg: string;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export interface Theme {
|
|
69
|
+
colors: ThemeColors;
|
|
70
|
+
typography: ThemeTypography;
|
|
71
|
+
spacing: ThemeSpacing;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Light theme matching gw-spa design system
|
|
75
|
+
*/
|
|
76
|
+
export declare const lightTheme: Theme;
|
|
77
|
+
/**
|
|
78
|
+
* Dark theme matching gw-spa design system
|
|
79
|
+
*/
|
|
80
|
+
export declare const darkTheme: Theme;
|
|
81
|
+
/**
|
|
82
|
+
* Get theme based on user preference or system setting
|
|
83
|
+
*/
|
|
84
|
+
export declare function getTheme(prefersDark?: boolean): Theme;
|
|
85
|
+
/**
|
|
86
|
+
* Generate CSS string from theme colors for inline styles
|
|
87
|
+
*/
|
|
88
|
+
export declare function generateCSSVariables(theme: Theme): string;
|
|
89
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/styles/theme.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAE1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAGnB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IAGvB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAG5B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IAGxB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IAGzB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAG9B,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,eAAe,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAmFxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KAmFvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,KAAK,CAcrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAsBzD"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Configuration
|
|
3
|
+
*/
|
|
4
|
+
export interface SDKConfig {
|
|
5
|
+
/** JWKS endpoint URL (default: https://api.platform.generalwisdom.com/.well-known/jwks.json) */
|
|
6
|
+
jwksUri?: string;
|
|
7
|
+
/** URL query parameter name containing the JWT (default: 'gwSession') */
|
|
8
|
+
jwtParamName?: string;
|
|
9
|
+
/** API endpoint for backend integration (Phase 2) */
|
|
10
|
+
apiEndpoint?: string;
|
|
11
|
+
/** JWT issuer for validation (default: 'generalwisdom.com') */
|
|
12
|
+
jwtIssuer?: string;
|
|
13
|
+
/** Enable debug logging */
|
|
14
|
+
debug?: boolean;
|
|
15
|
+
/** Auto-start timer after initialization */
|
|
16
|
+
autoStart?: boolean;
|
|
17
|
+
/** Warning threshold in seconds (default: 300 = 5 minutes) */
|
|
18
|
+
warningThresholdSeconds?: number;
|
|
19
|
+
/** Custom styling for warning modal (Legacy - prefer using themeMode) */
|
|
20
|
+
customStyles?: Partial<ModalStyles>;
|
|
21
|
+
/** Theme mode for modal styling (default: 'light') */
|
|
22
|
+
themeMode?: ThemeMode;
|
|
23
|
+
/** Application ID for validation */
|
|
24
|
+
applicationId?: string;
|
|
25
|
+
/** Marketplace URL for redirects (default: https://platform.generalwisdom.com/) */
|
|
26
|
+
marketplaceUrl?: string;
|
|
27
|
+
/** Enable heartbeat system (default: false) */
|
|
28
|
+
enableHeartbeat?: boolean;
|
|
29
|
+
/** Heartbeat interval in seconds (default: 30) */
|
|
30
|
+
heartbeatIntervalSeconds?: number;
|
|
31
|
+
/** Enable multi-tab synchronization (default: false) */
|
|
32
|
+
enableTabSync?: boolean;
|
|
33
|
+
/** Pause timer when tab is hidden (default: false) */
|
|
34
|
+
pauseOnHidden?: boolean;
|
|
35
|
+
/** Use backend validation instead of JWKS (default: false) */
|
|
36
|
+
useBackendValidation?: boolean;
|
|
37
|
+
/** Optional hooks for synchronizing app auth state with marketplace sessions */
|
|
38
|
+
hooks?: SessionLifecycleHooks;
|
|
39
|
+
/** Hook execution timeout in milliseconds (default: 5000) */
|
|
40
|
+
hookTimeoutMs?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Session Data extracted from JWT
|
|
44
|
+
*/
|
|
45
|
+
export interface SessionData {
|
|
46
|
+
/** Unique session UUID */
|
|
47
|
+
sessionId: string;
|
|
48
|
+
/** Application ID */
|
|
49
|
+
applicationId: string;
|
|
50
|
+
/** User ID */
|
|
51
|
+
userId: string;
|
|
52
|
+
/** Organization ID */
|
|
53
|
+
orgId: string;
|
|
54
|
+
/** Session start time (Unix timestamp seconds) */
|
|
55
|
+
startTime: number;
|
|
56
|
+
/** Session duration in minutes */
|
|
57
|
+
durationMinutes: number;
|
|
58
|
+
/** Issued at timestamp (Unix seconds) */
|
|
59
|
+
iat: number;
|
|
60
|
+
/** Expiration timestamp (Unix seconds) */
|
|
61
|
+
exp: number;
|
|
62
|
+
/** Issuer */
|
|
63
|
+
iss: string;
|
|
64
|
+
/** Subject (user ID) */
|
|
65
|
+
sub: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Modal styling options (Legacy - prefer using theme)
|
|
69
|
+
* @deprecated Use theme configuration from src/styles/theme.ts instead
|
|
70
|
+
*/
|
|
71
|
+
export interface ModalStyles {
|
|
72
|
+
backgroundColor: string;
|
|
73
|
+
textColor: string;
|
|
74
|
+
primaryColor: string;
|
|
75
|
+
borderRadius: string;
|
|
76
|
+
fontFamily: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Theme mode for modal styling
|
|
80
|
+
*/
|
|
81
|
+
export type ThemeMode = 'light' | 'dark' | 'auto';
|
|
82
|
+
/**
|
|
83
|
+
* SDK Event Handlers
|
|
84
|
+
*/
|
|
85
|
+
export interface SDKEvents {
|
|
86
|
+
/** Called when session successfully initialized */
|
|
87
|
+
onSessionStart: (data: SessionData) => void;
|
|
88
|
+
/** Called when warning threshold reached */
|
|
89
|
+
onSessionWarning: (data: {
|
|
90
|
+
remainingSeconds: number;
|
|
91
|
+
}) => void;
|
|
92
|
+
/** Called when session expires or is ended */
|
|
93
|
+
onSessionEnd: () => void;
|
|
94
|
+
/** Called on any error */
|
|
95
|
+
onError: (error: Error) => void;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Session Lifecycle Hook Contexts
|
|
99
|
+
*/
|
|
100
|
+
export interface SessionStartContext {
|
|
101
|
+
/** Unique session UUID */
|
|
102
|
+
sessionId: string;
|
|
103
|
+
/** User ID from JWT */
|
|
104
|
+
userId: string;
|
|
105
|
+
/** User email (if available in JWT) */
|
|
106
|
+
email?: string;
|
|
107
|
+
/** Organization ID */
|
|
108
|
+
orgId: string;
|
|
109
|
+
/** Application ID */
|
|
110
|
+
applicationId: string;
|
|
111
|
+
/** Session duration in minutes */
|
|
112
|
+
durationMinutes: number;
|
|
113
|
+
/** Expiration timestamp (Unix seconds) */
|
|
114
|
+
expiresAt: number;
|
|
115
|
+
/** Full JWT token for app use */
|
|
116
|
+
jwt: string;
|
|
117
|
+
}
|
|
118
|
+
export interface SessionEndContext {
|
|
119
|
+
/** Unique session UUID */
|
|
120
|
+
sessionId: string;
|
|
121
|
+
/** User ID */
|
|
122
|
+
userId: string;
|
|
123
|
+
/** Reason for session end */
|
|
124
|
+
reason: 'expired' | 'manual' | 'error';
|
|
125
|
+
/** Actual session duration in minutes (if available) */
|
|
126
|
+
actualDurationMinutes?: number;
|
|
127
|
+
}
|
|
128
|
+
export interface SessionExtendContext {
|
|
129
|
+
/** Unique session UUID */
|
|
130
|
+
sessionId: string;
|
|
131
|
+
/** User ID */
|
|
132
|
+
userId: string;
|
|
133
|
+
/** Additional minutes added to session */
|
|
134
|
+
additionalMinutes: number;
|
|
135
|
+
/** New expiration timestamp (Unix seconds) */
|
|
136
|
+
newExpiresAt: number;
|
|
137
|
+
}
|
|
138
|
+
export interface SessionWarningContext {
|
|
139
|
+
/** Unique session UUID */
|
|
140
|
+
sessionId: string;
|
|
141
|
+
/** User ID */
|
|
142
|
+
userId: string;
|
|
143
|
+
/** Remaining seconds until expiration */
|
|
144
|
+
remainingSeconds: number;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Session Lifecycle Hooks
|
|
148
|
+
* Optional callbacks that allow applications to synchronize their auth state with marketplace sessions
|
|
149
|
+
*/
|
|
150
|
+
export interface SessionLifecycleHooks {
|
|
151
|
+
/**
|
|
152
|
+
* Called after JWT validation succeeds but before session timer starts
|
|
153
|
+
* Use to: Auto-login user to your app's auth system
|
|
154
|
+
* Note: Hook failure will prevent session from starting
|
|
155
|
+
*/
|
|
156
|
+
onSessionStart?: (context: SessionStartContext) => Promise<void> | void;
|
|
157
|
+
/**
|
|
158
|
+
* Called when session expires or is manually ended, before redirect
|
|
159
|
+
* Use to: Force logout user from your app's auth system
|
|
160
|
+
* Note: Hook failure will be logged but won't prevent session end
|
|
161
|
+
*/
|
|
162
|
+
onSessionEnd?: (context: SessionEndContext) => Promise<void> | void;
|
|
163
|
+
/**
|
|
164
|
+
* Called when session extension succeeds
|
|
165
|
+
* Use to: Refresh app auth tokens if needed
|
|
166
|
+
*/
|
|
167
|
+
onSessionExtend?: (context: SessionExtendContext) => Promise<void> | void;
|
|
168
|
+
/**
|
|
169
|
+
* Called before session warning modal is shown
|
|
170
|
+
* Use to: Prepare user for session expiration
|
|
171
|
+
*/
|
|
172
|
+
onSessionWarning?: (context: SessionWarningContext) => Promise<void> | void;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Custom SDK Error
|
|
176
|
+
*/
|
|
177
|
+
export declare class SDKError extends Error {
|
|
178
|
+
code: string;
|
|
179
|
+
statusCode?: number | undefined;
|
|
180
|
+
constructor(message: string, code: string, statusCode?: number | undefined);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* JWT Header
|
|
184
|
+
*/
|
|
185
|
+
export interface JWTHeader {
|
|
186
|
+
alg: string;
|
|
187
|
+
typ: string;
|
|
188
|
+
kid: string;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* JWT Claims (raw payload from token)
|
|
192
|
+
*/
|
|
193
|
+
export interface JWTClaims {
|
|
194
|
+
sessionId: string;
|
|
195
|
+
applicationId: string;
|
|
196
|
+
userId: string;
|
|
197
|
+
orgId: string;
|
|
198
|
+
startTime: number;
|
|
199
|
+
durationMinutes: number;
|
|
200
|
+
iat: number;
|
|
201
|
+
exp: number;
|
|
202
|
+
iss: string;
|
|
203
|
+
sub: string;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* JWKS Key
|
|
207
|
+
*/
|
|
208
|
+
export interface JWKSKey {
|
|
209
|
+
kty: string;
|
|
210
|
+
use: string;
|
|
211
|
+
kid: string;
|
|
212
|
+
alg: string;
|
|
213
|
+
n: string;
|
|
214
|
+
e: string;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* JWKS Response
|
|
218
|
+
*/
|
|
219
|
+
export interface JWKSResponse {
|
|
220
|
+
keys: JWKSKey[];
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Purchase State Constants
|
|
224
|
+
*/
|
|
225
|
+
export declare enum PurchaseState {
|
|
226
|
+
AVAILABLE = "AVAILABLE",
|
|
227
|
+
PRIVY_REQUIRED = "PRIVY_REQUIRED",
|
|
228
|
+
INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS"
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Privy Eligibility Details (internal use - not exposed to apps)
|
|
232
|
+
*/
|
|
233
|
+
export interface PrivyEligibilityDetails {
|
|
234
|
+
requiresUpgrade: boolean;
|
|
235
|
+
currentLevel: number;
|
|
236
|
+
requiredLevel: number;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Raw Privy Eligibility Response (internal use - not exposed to apps)
|
|
240
|
+
*/
|
|
241
|
+
export interface PrivyEligibilityResponse {
|
|
242
|
+
state: PurchaseState;
|
|
243
|
+
privyEligibility?: {
|
|
244
|
+
[levelId: string]: PrivyEligibilityDetails;
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Filtered Purchase State Response (exposed to apps)
|
|
249
|
+
*/
|
|
250
|
+
export interface PurchaseStateResponse {
|
|
251
|
+
state: PurchaseState;
|
|
252
|
+
requiredLevel?: number;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ThemeMode } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Session Header Component
|
|
5
|
+
* Compact header widget showing session timer with extend/end controls
|
|
6
|
+
*/
|
|
7
|
+
export declare class SessionHeader {
|
|
8
|
+
private container;
|
|
9
|
+
private theme;
|
|
10
|
+
private updateInterval;
|
|
11
|
+
private timeDisplay;
|
|
12
|
+
private getTimeCallback;
|
|
13
|
+
private onExtendCallback;
|
|
14
|
+
private onEndCallback;
|
|
15
|
+
private mounted;
|
|
16
|
+
constructor(themeMode?: ThemeMode);
|
|
17
|
+
private detectDarkMode;
|
|
18
|
+
/**
|
|
19
|
+
* Mount the session header to a DOM element
|
|
20
|
+
* @param targetElement - Element to mount to (or selector string)
|
|
21
|
+
* @param options - Configuration options
|
|
22
|
+
*/
|
|
23
|
+
mount(targetElement: HTMLElement | string, options: {
|
|
24
|
+
getTime: () => string;
|
|
25
|
+
onExtend?: () => void;
|
|
26
|
+
onEnd?: () => void;
|
|
27
|
+
position?: 'left' | 'center' | 'right';
|
|
28
|
+
}): void;
|
|
29
|
+
/**
|
|
30
|
+
* Start updating the time display
|
|
31
|
+
*/
|
|
32
|
+
private startUpdating;
|
|
33
|
+
/**
|
|
34
|
+
* Unmount and cleanup the session header
|
|
35
|
+
*/
|
|
36
|
+
unmount(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Check if component is mounted
|
|
39
|
+
*/
|
|
40
|
+
isMounted(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Update the theme
|
|
43
|
+
*/
|
|
44
|
+
updateTheme(themeMode: ThemeMode): void;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=SessionHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionHeader.d.ts","sourceRoot":"","sources":["../../src/ui/SessionHeader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,OAAO,CAAkB;gBAErB,SAAS,GAAE,SAAkB;IAKzC,OAAO,CAAC,cAAc;IAOtB;;;;OAIG;IACH,KAAK,CACH,aAAa,EAAE,WAAW,GAAG,MAAM,EACnC,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;KACxC,GACA,IAAI;IAmJP;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,IAAI,IAAI;IAef;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;CAgBxC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ModalStyles, ThemeMode } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Warning Modal for session expiration alerts
|
|
5
|
+
*/
|
|
6
|
+
export declare class WarningModal {
|
|
7
|
+
private modal;
|
|
8
|
+
private theme;
|
|
9
|
+
private legacyStyles;
|
|
10
|
+
private updateInterval;
|
|
11
|
+
private timeDisplay;
|
|
12
|
+
private startTime;
|
|
13
|
+
private initialSeconds;
|
|
14
|
+
private onEndCallback;
|
|
15
|
+
constructor(themeMode?: ThemeMode, customStyles?: Partial<ModalStyles>);
|
|
16
|
+
private detectDarkMode;
|
|
17
|
+
/**
|
|
18
|
+
* Show warning modal
|
|
19
|
+
*/
|
|
20
|
+
show(options: {
|
|
21
|
+
remainingSeconds: number;
|
|
22
|
+
onExtend?: () => void;
|
|
23
|
+
onEnd?: () => void;
|
|
24
|
+
}): void;
|
|
25
|
+
/**
|
|
26
|
+
* Hide and remove modal
|
|
27
|
+
*/
|
|
28
|
+
hide(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Check if modal is currently shown
|
|
31
|
+
*/
|
|
32
|
+
isShown(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Show "Session Ending" modal before redirect
|
|
35
|
+
* Displays for a fixed duration (3 seconds) then calls callback
|
|
36
|
+
*/
|
|
37
|
+
showEndingMessage(onComplete: () => void, durationMs?: number): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=WarningModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WarningModal.d.ts","sourceRoot":"","sources":["../../src/ui/WarningModal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGlD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,aAAa,CAAuC;gBAEhD,SAAS,GAAE,SAAmB,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC;IAmB/E,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,gBAAgB,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;KACpB,GAAG,IAAI;IAgLR;;OAEG;IACH,IAAI,IAAI,IAAI;IAeZ;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,UAAU,GAAE,MAAa,GAAG,IAAI;CA8F3E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple logger with debug mode support
|
|
3
|
+
*/
|
|
4
|
+
export declare class Logger {
|
|
5
|
+
private debug;
|
|
6
|
+
private prefix;
|
|
7
|
+
constructor(debug?: boolean, prefix?: string);
|
|
8
|
+
/**
|
|
9
|
+
* Log debug message (only if debug enabled)
|
|
10
|
+
*/
|
|
11
|
+
log(...args: any[]): void;
|
|
12
|
+
/**
|
|
13
|
+
* Log info message (only if debug enabled)
|
|
14
|
+
*/
|
|
15
|
+
info(...args: any[]): void;
|
|
16
|
+
/**
|
|
17
|
+
* Log warning message (always shown)
|
|
18
|
+
*/
|
|
19
|
+
warn(...args: any[]): void;
|
|
20
|
+
/**
|
|
21
|
+
* Log error message (always shown)
|
|
22
|
+
*/
|
|
23
|
+
error(...args: any[]): void;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,KAAK,GAAE,OAAe,EAAE,MAAM,GAAE,MAA2B;IAKvE;;OAEG;IACH,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMzB;;OAEG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM1B;;OAEG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI1B;;OAEG;IACH,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAG5B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract JWT token from URL parameter
|
|
3
|
+
* @param paramName - URL parameter name (default: 'gwSession')
|
|
4
|
+
* @param url - URL to extract from (default: window.location.href)
|
|
5
|
+
* @returns JWT token or null if not found
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractTokenFromURL(paramName?: string, url?: string): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Check if code is running in browser environment
|
|
10
|
+
*/
|
|
11
|
+
export declare function isBrowser(): boolean;
|
|
12
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,MAAoB,EAC/B,GAAG,CAAC,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAkBf;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mission_sciences/provider-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-dev.31ea3d4",
|
|
4
4
|
"description": "Provider SDK for JWT-based marketplace session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/marketplace-sdk.umd.js",
|
|
@@ -11,6 +11,14 @@
|
|
|
11
11
|
"import": "./dist/marketplace-sdk.es.js",
|
|
12
12
|
"require": "./dist/marketplace-sdk.umd.js",
|
|
13
13
|
"types": "./dist/index.d.ts"
|
|
14
|
+
},
|
|
15
|
+
"./react": {
|
|
16
|
+
"import": "./dist/adapters/react/index.js",
|
|
17
|
+
"types": "./dist/adapters/react/index.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./vue": {
|
|
20
|
+
"import": "./dist/adapters/vue/index.js",
|
|
21
|
+
"types": "./dist/adapters/vue/index.d.ts"
|
|
14
22
|
}
|
|
15
23
|
},
|
|
16
24
|
"files": [
|
|
@@ -20,7 +28,7 @@
|
|
|
20
28
|
],
|
|
21
29
|
"scripts": {
|
|
22
30
|
"dev": "vite",
|
|
23
|
-
"build": "tsc && vite build",
|
|
31
|
+
"build": "tsc && vite build && vite build --config vite.config.adapters.ts",
|
|
24
32
|
"test": "vitest run",
|
|
25
33
|
"test:watch": "vitest",
|
|
26
34
|
"test:coverage": "vitest run --coverage",
|
|
@@ -55,6 +63,8 @@
|
|
|
55
63
|
"@aws-sdk/client-cognito-identity-provider": "^3.931.0",
|
|
56
64
|
"@aws-sdk/client-ssm": "^3.931.0",
|
|
57
65
|
"@types/node": "^20.10.0",
|
|
66
|
+
"@types/react": "^18.2.0",
|
|
67
|
+
"vue": "^3.3.0",
|
|
58
68
|
"@typescript-eslint/eslint-plugin": "^6.13.0",
|
|
59
69
|
"@typescript-eslint/parser": "^6.13.0",
|
|
60
70
|
"@vitest/coverage-v8": "^1.0.0",
|
|
@@ -72,11 +82,15 @@
|
|
|
72
82
|
"jose": "^6.1.0"
|
|
73
83
|
},
|
|
74
84
|
"peerDependencies": {
|
|
75
|
-
"react": "^18.0.0 || ^19.0.0"
|
|
85
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
86
|
+
"vue": "^3.3.0"
|
|
76
87
|
},
|
|
77
88
|
"peerDependenciesMeta": {
|
|
78
89
|
"react": {
|
|
79
90
|
"optional": true
|
|
91
|
+
},
|
|
92
|
+
"vue": {
|
|
93
|
+
"optional": true
|
|
80
94
|
}
|
|
81
95
|
},
|
|
82
96
|
"publishConfig": {
|