authvital-sdk 0.1.1-dev.3.cefb119.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.
@@ -0,0 +1,461 @@
1
+ declare const SYNC_EVENT_TYPES: {
2
+ readonly INVITE_CREATED: "invite.created";
3
+ readonly INVITE_ACCEPTED: "invite.accepted";
4
+ readonly INVITE_DELETED: "invite.deleted";
5
+ readonly INVITE_EXPIRED: "invite.expired";
6
+ readonly SUBJECT_CREATED: "subject.created";
7
+ readonly SUBJECT_UPDATED: "subject.updated";
8
+ readonly SUBJECT_DELETED: "subject.deleted";
9
+ readonly SUBJECT_DEACTIVATED: "subject.deactivated";
10
+ readonly MEMBER_JOINED: "member.joined";
11
+ readonly MEMBER_LEFT: "member.left";
12
+ readonly MEMBER_ROLE_CHANGED: "member.role_changed";
13
+ readonly MEMBER_SUSPENDED: "member.suspended";
14
+ readonly MEMBER_ACTIVATED: "member.activated";
15
+ readonly APP_ACCESS_GRANTED: "app_access.granted";
16
+ readonly APP_ACCESS_REVOKED: "app_access.revoked";
17
+ readonly APP_ACCESS_ROLE_CHANGED: "app_access.role_changed";
18
+ readonly LICENSE_ASSIGNED: "license.assigned";
19
+ readonly LICENSE_REVOKED: "license.revoked";
20
+ readonly LICENSE_CHANGED: "license.changed";
21
+ };
22
+ type SyncEventType = (typeof SYNC_EVENT_TYPES)[keyof typeof SYNC_EVENT_TYPES];
23
+ interface BaseEvent<T extends SyncEventType, D> {
24
+ id: string;
25
+ type: T;
26
+ timestamp: string;
27
+ tenant_id: string;
28
+ application_id: string;
29
+ data: D;
30
+ }
31
+ interface InviteData {
32
+ invite_id: string;
33
+ membership_id: string;
34
+ email: string;
35
+ tenant_roles: string[];
36
+ invited_by_sub?: string;
37
+ expires_at?: string;
38
+ }
39
+ type InviteCreatedEvent = BaseEvent<'invite.created', InviteData>;
40
+ type InviteAcceptedEvent = BaseEvent<'invite.accepted', InviteData & {
41
+ sub: string;
42
+ given_name?: string;
43
+ family_name?: string;
44
+ }>;
45
+ type InviteDeletedEvent = BaseEvent<'invite.deleted', Pick<InviteData, 'invite_id' | 'membership_id' | 'email'>>;
46
+ type InviteExpiredEvent = BaseEvent<'invite.expired', Pick<InviteData, 'invite_id' | 'membership_id' | 'email'>>;
47
+ interface SubjectData {
48
+ sub: string;
49
+ email?: string;
50
+ given_name?: string;
51
+ family_name?: string;
52
+ subject_type?: 'user' | 'service_account' | 'machine';
53
+ }
54
+ type SubjectCreatedEvent = BaseEvent<'subject.created', SubjectData>;
55
+ type SubjectUpdatedEvent = BaseEvent<'subject.updated', SubjectData & {
56
+ changed_fields: string[];
57
+ }>;
58
+ type SubjectDeletedEvent = BaseEvent<'subject.deleted', Pick<SubjectData, 'sub' | 'email'>>;
59
+ type SubjectDeactivatedEvent = BaseEvent<'subject.deactivated', Pick<SubjectData, 'sub' | 'email'>>;
60
+ interface MemberData {
61
+ membership_id: string;
62
+ sub: string;
63
+ email?: string;
64
+ tenant_roles: string[];
65
+ }
66
+ type MemberJoinedEvent = BaseEvent<'member.joined', MemberData & {
67
+ given_name?: string;
68
+ family_name?: string;
69
+ }>;
70
+ type MemberLeftEvent = BaseEvent<'member.left', Pick<MemberData, 'membership_id' | 'sub' | 'email'>>;
71
+ type MemberRoleChangedEvent = BaseEvent<'member.role_changed', MemberData & {
72
+ previous_roles: string[];
73
+ }>;
74
+ type MemberSuspendedEvent = BaseEvent<'member.suspended', Pick<MemberData, 'membership_id' | 'sub' | 'email'>>;
75
+ type MemberActivatedEvent = BaseEvent<'member.activated', Pick<MemberData, 'membership_id' | 'sub' | 'email'>>;
76
+ interface AppAccessData {
77
+ membership_id: string;
78
+ sub: string;
79
+ email?: string;
80
+ role_id: string;
81
+ role_name: string;
82
+ role_slug: string;
83
+ }
84
+ type AppAccessGrantedEvent = BaseEvent<'app_access.granted', AppAccessData & {
85
+ given_name?: string;
86
+ family_name?: string;
87
+ }>;
88
+ type AppAccessRevokedEvent = BaseEvent<'app_access.revoked', Pick<AppAccessData, 'membership_id' | 'sub' | 'email'>>;
89
+ /**
90
+ * @deprecated Use AppAccessRevokedEvent instead. This alias exists for backwards compatibility.
91
+ */
92
+ type AppAccessDeactivatedEvent = AppAccessRevokedEvent;
93
+ type AppAccessRoleChangedEvent = BaseEvent<'app_access.role_changed', AppAccessData & {
94
+ previous_role_id: string;
95
+ previous_role_name: string;
96
+ previous_role_slug: string;
97
+ }>;
98
+ interface LicenseData {
99
+ assignment_id: string;
100
+ sub: string;
101
+ email?: string;
102
+ license_type_id: string;
103
+ license_type_name: string;
104
+ }
105
+ type LicenseAssignedEvent = BaseEvent<'license.assigned', LicenseData>;
106
+ type LicenseRevokedEvent = BaseEvent<'license.revoked', Pick<LicenseData, 'assignment_id' | 'sub' | 'email'>>;
107
+ type LicenseChangedEvent = BaseEvent<'license.changed', LicenseData & {
108
+ previous_license_type_id: string;
109
+ previous_license_type_name: string;
110
+ }>;
111
+ type SyncEvent = InviteCreatedEvent | InviteAcceptedEvent | InviteDeletedEvent | InviteExpiredEvent | SubjectCreatedEvent | SubjectUpdatedEvent | SubjectDeletedEvent | SubjectDeactivatedEvent | MemberJoinedEvent | MemberLeftEvent | MemberRoleChangedEvent | MemberSuspendedEvent | MemberActivatedEvent | AppAccessGrantedEvent | AppAccessRevokedEvent | AppAccessRoleChangedEvent | LicenseAssignedEvent | LicenseRevokedEvent | LicenseChangedEvent;
112
+ declare function isInviteEvent(event: SyncEvent): event is InviteCreatedEvent | InviteAcceptedEvent | InviteDeletedEvent | InviteExpiredEvent;
113
+ declare function isSubjectEvent(event: SyncEvent): event is SubjectCreatedEvent | SubjectUpdatedEvent | SubjectDeletedEvent | SubjectDeactivatedEvent;
114
+ declare function isMemberEvent(event: SyncEvent): event is MemberJoinedEvent | MemberLeftEvent | MemberRoleChangedEvent | MemberSuspendedEvent | MemberActivatedEvent;
115
+ declare function isAppAccessEvent(event: SyncEvent): event is AppAccessGrantedEvent | AppAccessRevokedEvent | AppAccessDeactivatedEvent | AppAccessRoleChangedEvent;
116
+ declare function isLicenseEvent(event: SyncEvent): event is LicenseAssignedEvent | LicenseRevokedEvent | LicenseChangedEvent;
117
+
118
+ /**
119
+ * Interface for handling invitation events
120
+ * Implement only the methods you need - all have default no-op implementations
121
+ */
122
+ interface IInviteEventHandler {
123
+ onInviteCreated?(event: InviteCreatedEvent): Promise<void> | void;
124
+ onInviteAccepted?(event: InviteAcceptedEvent): Promise<void> | void;
125
+ onInviteDeleted?(event: InviteDeletedEvent): Promise<void> | void;
126
+ onInviteExpired?(event: InviteExpiredEvent): Promise<void> | void;
127
+ }
128
+ /**
129
+ * Interface for handling subject events (users, service accounts, machines)
130
+ */
131
+ interface ISubjectEventHandler {
132
+ onSubjectCreated?(event: SubjectCreatedEvent): Promise<void> | void;
133
+ onSubjectUpdated?(event: SubjectUpdatedEvent): Promise<void> | void;
134
+ onSubjectDeleted?(event: SubjectDeletedEvent): Promise<void> | void;
135
+ onSubjectDeactivated?(event: SubjectDeactivatedEvent): Promise<void> | void;
136
+ }
137
+ /**
138
+ * Interface for handling membership events
139
+ */
140
+ interface IMemberEventHandler {
141
+ onMemberJoined?(event: MemberJoinedEvent): Promise<void> | void;
142
+ onMemberLeft?(event: MemberLeftEvent): Promise<void> | void;
143
+ onMemberRoleChanged?(event: MemberRoleChangedEvent): Promise<void> | void;
144
+ onMemberSuspended?(event: MemberSuspendedEvent): Promise<void> | void;
145
+ onMemberActivated?(event: MemberActivatedEvent): Promise<void> | void;
146
+ }
147
+ /**
148
+ * Interface for handling app access events
149
+ */
150
+ interface IAppAccessEventHandler {
151
+ onAppAccessGranted?(event: AppAccessGrantedEvent): Promise<void> | void;
152
+ onAppAccessRevoked?(event: AppAccessRevokedEvent): Promise<void> | void;
153
+ /**
154
+ * @deprecated Use onAppAccessRevoked instead. This method exists for backwards compatibility
155
+ * and will delegate to onAppAccessRevoked if implemented.
156
+ */
157
+ onAppAccessDeactivated?(event: AppAccessRevokedEvent): Promise<void> | void;
158
+ onAppAccessRoleChanged?(event: AppAccessRoleChangedEvent): Promise<void> | void;
159
+ }
160
+ /**
161
+ * Interface for handling license events
162
+ */
163
+ interface ILicenseEventHandler {
164
+ onLicenseAssigned?(event: LicenseAssignedEvent): Promise<void> | void;
165
+ onLicenseRevoked?(event: LicenseRevokedEvent): Promise<void> | void;
166
+ onLicenseChanged?(event: LicenseChangedEvent): Promise<void> | void;
167
+ }
168
+ /**
169
+ * Combined interface for all events
170
+ * Extend this if you want to handle everything in one class
171
+ */
172
+ interface IAuthVitalEventHandler extends IInviteEventHandler, ISubjectEventHandler, IMemberEventHandler, IAppAccessEventHandler, ILicenseEventHandler {
173
+ /**
174
+ * Called for any event that doesn't have a specific handler
175
+ */
176
+ onUnhandledEvent?(event: unknown): Promise<void> | void;
177
+ }
178
+ /**
179
+ * Base class for invite event handlers
180
+ * Extend this and override only the methods you need
181
+ *
182
+ * @example
183
+ * ```typescript
184
+ * class MyInviteHandler extends InviteEventHandler {
185
+ * async onInviteAccepted(event: InviteAcceptedEvent) {
186
+ * await sendWelcomeEmail(event.data.email);
187
+ * }
188
+ * }
189
+ * ```
190
+ */
191
+ declare abstract class InviteEventHandler implements IInviteEventHandler {
192
+ onInviteCreated?(_event: InviteCreatedEvent): Promise<void> | void;
193
+ onInviteAccepted?(_event: InviteAcceptedEvent): Promise<void> | void;
194
+ onInviteDeleted?(_event: InviteDeletedEvent): Promise<void> | void;
195
+ onInviteExpired?(_event: InviteExpiredEvent): Promise<void> | void;
196
+ }
197
+ /**
198
+ * Base class for subject event handlers (users, service accounts, machines)
199
+ *
200
+ * @example
201
+ * ```typescript
202
+ * class MySubjectHandler extends SubjectEventHandler {
203
+ * async onSubjectCreated(event: SubjectCreatedEvent) {
204
+ * // event.data.sub is the subject ID (could be user, service account, etc.)
205
+ * await this.db.subjects.create({ id: event.data.sub, email: event.data.email });
206
+ * }
207
+ * }
208
+ * ```
209
+ */
210
+ declare abstract class SubjectEventHandler implements ISubjectEventHandler {
211
+ onSubjectCreated?(_event: SubjectCreatedEvent): Promise<void> | void;
212
+ onSubjectUpdated?(_event: SubjectUpdatedEvent): Promise<void> | void;
213
+ onSubjectDeleted?(_event: SubjectDeletedEvent): Promise<void> | void;
214
+ onSubjectDeactivated?(_event: SubjectDeactivatedEvent): Promise<void> | void;
215
+ }
216
+ /**
217
+ * Base class for member event handlers
218
+ */
219
+ declare abstract class MemberEventHandler implements IMemberEventHandler {
220
+ onMemberJoined?(_event: MemberJoinedEvent): Promise<void> | void;
221
+ onMemberLeft?(_event: MemberLeftEvent): Promise<void> | void;
222
+ onMemberRoleChanged?(_event: MemberRoleChangedEvent): Promise<void> | void;
223
+ onMemberSuspended?(_event: MemberSuspendedEvent): Promise<void> | void;
224
+ onMemberActivated?(_event: MemberActivatedEvent): Promise<void> | void;
225
+ }
226
+ /**
227
+ * Base class for app access event handlers
228
+ */
229
+ declare abstract class AppAccessEventHandler implements IAppAccessEventHandler {
230
+ onAppAccessGranted?(_event: AppAccessGrantedEvent): Promise<void> | void;
231
+ onAppAccessRevoked?(_event: AppAccessRevokedEvent): Promise<void> | void;
232
+ /**
233
+ * @deprecated Use onAppAccessRevoked instead. This method exists for backwards compatibility.
234
+ */
235
+ onAppAccessDeactivated?(event: AppAccessRevokedEvent): Promise<void> | void;
236
+ onAppAccessRoleChanged?(_event: AppAccessRoleChangedEvent): Promise<void> | void;
237
+ }
238
+ /**
239
+ * Base class for license event handlers
240
+ */
241
+ declare abstract class LicenseEventHandler implements ILicenseEventHandler {
242
+ onLicenseAssigned?(_event: LicenseAssignedEvent): Promise<void> | void;
243
+ onLicenseRevoked?(_event: LicenseRevokedEvent): Promise<void> | void;
244
+ onLicenseChanged?(_event: LicenseChangedEvent): Promise<void> | void;
245
+ }
246
+ /**
247
+ * Base class for handling ALL events
248
+ * Extend this and override only the methods you need
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * class MyEventHandler extends AuthVitalEventHandler {
253
+ * async onSubjectCreated(event: SubjectCreatedEvent) {
254
+ * // event.data.sub is the subject ID
255
+ * await this.db.subjects.create({ id: event.data.sub, email: event.data.email });
256
+ * }
257
+ *
258
+ * async onMemberJoined(event: MemberJoinedEvent) {
259
+ * await this.slack.notify(`${event.data.email} joined!`);
260
+ * }
261
+ *
262
+ * onUnhandledEvent(event: unknown) {
263
+ * console.log('Unhandled:', event);
264
+ * }
265
+ * }
266
+ * ```
267
+ */
268
+ declare abstract class AuthVitalEventHandler implements IAuthVitalEventHandler {
269
+ onInviteCreated?(_event: InviteCreatedEvent): Promise<void> | void;
270
+ onInviteAccepted?(_event: InviteAcceptedEvent): Promise<void> | void;
271
+ onInviteDeleted?(_event: InviteDeletedEvent): Promise<void> | void;
272
+ onInviteExpired?(_event: InviteExpiredEvent): Promise<void> | void;
273
+ onSubjectCreated?(_event: SubjectCreatedEvent): Promise<void> | void;
274
+ onSubjectUpdated?(_event: SubjectUpdatedEvent): Promise<void> | void;
275
+ onSubjectDeleted?(_event: SubjectDeletedEvent): Promise<void> | void;
276
+ onSubjectDeactivated?(_event: SubjectDeactivatedEvent): Promise<void> | void;
277
+ onMemberJoined?(_event: MemberJoinedEvent): Promise<void> | void;
278
+ onMemberLeft?(_event: MemberLeftEvent): Promise<void> | void;
279
+ onMemberRoleChanged?(_event: MemberRoleChangedEvent): Promise<void> | void;
280
+ onMemberSuspended?(_event: MemberSuspendedEvent): Promise<void> | void;
281
+ onMemberActivated?(_event: MemberActivatedEvent): Promise<void> | void;
282
+ onAppAccessGranted?(_event: AppAccessGrantedEvent): Promise<void> | void;
283
+ onAppAccessRevoked?(_event: AppAccessRevokedEvent): Promise<void> | void;
284
+ /**
285
+ * @deprecated Use onAppAccessRevoked instead. This method exists for backwards compatibility.
286
+ */
287
+ onAppAccessDeactivated?(event: AppAccessRevokedEvent): Promise<void> | void;
288
+ onAppAccessRoleChanged?(_event: AppAccessRoleChangedEvent): Promise<void> | void;
289
+ onLicenseAssigned?(_event: LicenseAssignedEvent): Promise<void> | void;
290
+ onLicenseRevoked?(_event: LicenseRevokedEvent): Promise<void> | void;
291
+ onLicenseChanged?(_event: LicenseChangedEvent): Promise<void> | void;
292
+ onUnhandledEvent?(_event: unknown): Promise<void> | void;
293
+ }
294
+
295
+ interface WebhookHeaders {
296
+ 'x-authvital-signature'?: string;
297
+ 'x-authvital-key-id'?: string;
298
+ 'x-authvital-timestamp'?: string;
299
+ 'x-authvital-event-id'?: string;
300
+ 'x-authvital-event-type'?: string;
301
+ }
302
+ interface WebhookHandlerOptions {
303
+ /**
304
+ * URL to the AuthVital JWKS endpoint
305
+ * Example: 'https://auth.example.com/.well-known/jwks.json'
306
+ */
307
+ jwksUrl: string;
308
+ /**
309
+ * Maximum age of the timestamp in seconds (default: 300 = 5 minutes)
310
+ * Prevents replay attacks with old signatures
311
+ */
312
+ maxTimestampAge?: number;
313
+ /**
314
+ * Cache TTL for JWKS keys in milliseconds (default: 3600000 = 1 hour)
315
+ */
316
+ keysCacheTtl?: number;
317
+ }
318
+ /**
319
+ * Low-level webhook signature verifier
320
+ *
321
+ * For most use cases, use WebhookRouter + AuthVitalEventHandler instead.
322
+ * This class is useful for advanced scenarios where you need full control
323
+ * over event parsing and routing.
324
+ *
325
+ * @example
326
+ * ```typescript
327
+ * const verifier = new AuthVitalWebhooks({
328
+ * jwksUrl: 'https://auth.example.com/.well-known/jwks.json'
329
+ * });
330
+ *
331
+ * app.post('/webhooks', async (req, res) => {
332
+ * try {
333
+ * const event = await verifier.verifyAndParse(req.body, req.headers);
334
+ * // Handle event manually...
335
+ * res.status(200).send('OK');
336
+ * } catch (err) {
337
+ * res.status(400).send('Invalid webhook');
338
+ * }
339
+ * });
340
+ * ```
341
+ */
342
+ declare class AuthVitalWebhooks {
343
+ private readonly jwksUrl;
344
+ private readonly maxTimestampAge;
345
+ private readonly keysCacheTtl;
346
+ private keysCache;
347
+ private keysCacheExpiry;
348
+ constructor(options: WebhookHandlerOptions);
349
+ /**
350
+ * Verify and parse a webhook payload
351
+ *
352
+ * @param body - The raw request body (string or object)
353
+ * @param headers - The request headers (can pass full headers object)
354
+ * @returns The parsed and verified event
355
+ * @throws Error if verification fails
356
+ */
357
+ verifyAndParse(body: string | object, headers: WebhookHeaders | Record<string, string | string[] | undefined>): Promise<SyncEvent>;
358
+ /**
359
+ * Verify signature only (without parsing)
360
+ * Useful if you want to handle parsing yourself
361
+ */
362
+ verify(body: string | object, signature: string, keyId: string, timestamp: string): Promise<boolean>;
363
+ /**
364
+ * Get a public key from the JWKS endpoint
365
+ */
366
+ private getPublicKey;
367
+ /**
368
+ * Normalize headers to lowercase keys and string values
369
+ */
370
+ private normalizeHeaders;
371
+ /**
372
+ * Clear the key cache (useful for testing or key rotation)
373
+ */
374
+ clearCache(): void;
375
+ }
376
+
377
+ interface WebhookRouterOptions {
378
+ /**
379
+ * AuthVital base URL (from AV_HOST env var)
380
+ * Example: 'https://auth.example.com'
381
+ * JWKS endpoint is automatically derived as: {authVitalHost}/.well-known/jwks.json
382
+ */
383
+ authVitalHost?: string;
384
+ /**
385
+ * Event handler instance - extend AuthVitalEventHandler and implement methods
386
+ */
387
+ handler: IAuthVitalEventHandler;
388
+ /**
389
+ * Maximum age of the timestamp in seconds (default: 300 = 5 minutes)
390
+ * Prevents replay attacks with old signatures
391
+ */
392
+ maxTimestampAge?: number;
393
+ /**
394
+ * Cache TTL for JWKS keys in milliseconds (default: 3600000 = 1 hour)
395
+ */
396
+ keysCacheTtl?: number;
397
+ }
398
+ /**
399
+ * WebhookRouter - Routes verified webhook events to handler methods
400
+ *
401
+ * @example
402
+ * ```typescript
403
+ * // 1. Create your handler by extending the base class
404
+ * class MyHandler extends AuthVitalEventHandler {
405
+ * constructor(private db: Database, private slack: SlackClient) {
406
+ * super();
407
+ * }
408
+ *
409
+ * async onSubjectCreated(event: SubjectCreatedEvent) {
410
+ * // event.data.sub is the subject ID (user, service account, etc.)
411
+ * await this.db.subjects.create({
412
+ * id: event.data.sub,
413
+ * email: event.data.email,
414
+ * type: event.data.subject_type,
415
+ * });
416
+ * }
417
+ *
418
+ * async onMemberJoined(event: MemberJoinedEvent) {
419
+ * await this.slack.send(`Welcome ${event.data.email}!`);
420
+ * }
421
+ * }
422
+ *
423
+ * // 2. Create the router (AV_HOST is read from environment automatically)
424
+ * const router = new WebhookRouter({
425
+ * handler: new MyHandler(db, slack),
426
+ * });
427
+ *
428
+ * // 3. Use in your Express app
429
+ * app.post('/webhooks/authvital', router.expressHandler());
430
+ * ```
431
+ */
432
+ declare class WebhookRouter {
433
+ private readonly verifier;
434
+ private readonly handler;
435
+ constructor(options: WebhookRouterOptions);
436
+ /**
437
+ * Handle a webhook request
438
+ */
439
+ handle(body: string | object, headers: WebhookHeaders | Record<string, string | string[] | undefined>): Promise<{
440
+ status: number;
441
+ body: {
442
+ success: boolean;
443
+ message?: string;
444
+ error?: string;
445
+ };
446
+ }>;
447
+ /**
448
+ * Dispatch event to the appropriate handler method
449
+ */
450
+ private dispatch;
451
+ /**
452
+ * Express middleware handler
453
+ */
454
+ expressHandler(): (req: any, res: any) => Promise<void>;
455
+ /**
456
+ * Get the underlying verifier
457
+ */
458
+ getVerifier(): AuthVitalWebhooks;
459
+ }
460
+
461
+ export { type AppAccessGrantedEvent as A, SubjectEventHandler as B, MemberEventHandler as C, AppAccessEventHandler as D, LicenseEventHandler as E, type IAuthVitalEventHandler as F, type IInviteEventHandler as G, type ISubjectEventHandler as H, type InviteCreatedEvent as I, type IMemberEventHandler as J, type IAppAccessEventHandler as K, type LicenseAssignedEvent as L, type MemberJoinedEvent as M, type ILicenseEventHandler as N, type WebhookRouterOptions as O, AuthVitalWebhooks as P, type WebhookHandlerOptions as Q, type SyncEvent as S, WebhookRouter as W, type SyncEventType as a, type InviteAcceptedEvent as b, type InviteDeletedEvent as c, type InviteExpiredEvent as d, type SubjectData as e, type SubjectCreatedEvent as f, type SubjectUpdatedEvent as g, type SubjectDeletedEvent as h, type SubjectDeactivatedEvent as i, type MemberLeftEvent as j, type MemberRoleChangedEvent as k, type MemberSuspendedEvent as l, type MemberActivatedEvent as m, type AppAccessRevokedEvent as n, type AppAccessDeactivatedEvent as o, type AppAccessRoleChangedEvent as p, type LicenseRevokedEvent as q, type LicenseChangedEvent as r, isInviteEvent as s, isSubjectEvent as t, isMemberEvent as u, isAppAccessEvent as v, isLicenseEvent as w, SYNC_EVENT_TYPES as x, AuthVitalEventHandler as y, InviteEventHandler as z };
package/package.json ADDED
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "authvital-sdk",
3
+ "version": "0.1.1-dev.3.cefb119.0",
4
+ "description": "AuthVital authentication SDK for React and Node.js applications",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ },
14
+ "./server": {
15
+ "types": "./dist/server.d.ts",
16
+ "import": "./dist/server.mjs",
17
+ "require": "./dist/server.js"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsup",
25
+ "dev": "tsup --watch",
26
+ "lint": "eslint src/",
27
+ "typecheck": "tsc --noEmit"
28
+ },
29
+ "peerDependencies": {
30
+ "react": ">=17.0.0",
31
+ "react-dom": ">=17.0.0"
32
+ },
33
+ "peerDependenciesMeta": {
34
+ "react": {
35
+ "optional": true
36
+ },
37
+ "react-dom": {
38
+ "optional": true
39
+ }
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "@types/react": "^18.2.0",
44
+ "@types/react-dom": "^18.2.0",
45
+ "react": "^18.2.0",
46
+ "react-dom": "^18.2.0",
47
+ "tsup": "^8.0.0",
48
+ "typescript": "^5.0.0"
49
+ },
50
+ "keywords": [
51
+ "react",
52
+ "auth",
53
+ "oauth",
54
+ "authentication",
55
+ "authvital",
56
+ "identity",
57
+ "idp",
58
+ "multi-tenant",
59
+ "saas"
60
+ ],
61
+ "license": "MIT",
62
+ "repository": {
63
+ "type": "git",
64
+ "url": "https://github.com/intersparkio/authvital",
65
+ "directory": "backend/sdk"
66
+ },
67
+ "homepage": "https://github.com/intersparkio/authvital#readme",
68
+ "bugs": {
69
+ "url": "https://github.com/intersparkio/authvital/issues"
70
+ }
71
+ }