@enbox/auth 0.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 (66) hide show
  1. package/dist/esm/auth-manager.js +496 -0
  2. package/dist/esm/auth-manager.js.map +1 -0
  3. package/dist/esm/events.js +65 -0
  4. package/dist/esm/events.js.map +1 -0
  5. package/dist/esm/flows/dwn-discovery.js +281 -0
  6. package/dist/esm/flows/dwn-discovery.js.map +1 -0
  7. package/dist/esm/flows/dwn-registration.js +122 -0
  8. package/dist/esm/flows/dwn-registration.js.map +1 -0
  9. package/dist/esm/flows/import-identity.js +175 -0
  10. package/dist/esm/flows/import-identity.js.map +1 -0
  11. package/dist/esm/flows/local-connect.js +141 -0
  12. package/dist/esm/flows/local-connect.js.map +1 -0
  13. package/dist/esm/flows/session-restore.js +109 -0
  14. package/dist/esm/flows/session-restore.js.map +1 -0
  15. package/dist/esm/flows/wallet-connect.js +199 -0
  16. package/dist/esm/flows/wallet-connect.js.map +1 -0
  17. package/dist/esm/identity-session.js +33 -0
  18. package/dist/esm/identity-session.js.map +1 -0
  19. package/dist/esm/index.js +50 -0
  20. package/dist/esm/index.js.map +1 -0
  21. package/dist/esm/storage/storage.js +152 -0
  22. package/dist/esm/storage/storage.js.map +1 -0
  23. package/dist/esm/types.js +30 -0
  24. package/dist/esm/types.js.map +1 -0
  25. package/dist/esm/vault/vault-manager.js +95 -0
  26. package/dist/esm/vault/vault-manager.js.map +1 -0
  27. package/dist/types/auth-manager.d.ts +176 -0
  28. package/dist/types/auth-manager.d.ts.map +1 -0
  29. package/dist/types/events.d.ts +36 -0
  30. package/dist/types/events.d.ts.map +1 -0
  31. package/dist/types/flows/dwn-discovery.d.ts +157 -0
  32. package/dist/types/flows/dwn-discovery.d.ts.map +1 -0
  33. package/dist/types/flows/dwn-registration.d.ts +39 -0
  34. package/dist/types/flows/dwn-registration.d.ts.map +1 -0
  35. package/dist/types/flows/import-identity.d.ts +35 -0
  36. package/dist/types/flows/import-identity.d.ts.map +1 -0
  37. package/dist/types/flows/local-connect.d.ts +29 -0
  38. package/dist/types/flows/local-connect.d.ts.map +1 -0
  39. package/dist/types/flows/session-restore.d.ts +27 -0
  40. package/dist/types/flows/session-restore.d.ts.map +1 -0
  41. package/dist/types/flows/wallet-connect.d.ts +44 -0
  42. package/dist/types/flows/wallet-connect.d.ts.map +1 -0
  43. package/dist/types/identity-session.d.ts +52 -0
  44. package/dist/types/identity-session.d.ts.map +1 -0
  45. package/dist/types/index.d.ts +45 -0
  46. package/dist/types/index.d.ts.map +1 -0
  47. package/dist/types/storage/storage.d.ts +54 -0
  48. package/dist/types/storage/storage.d.ts.map +1 -0
  49. package/dist/types/types.d.ts +312 -0
  50. package/dist/types/types.d.ts.map +1 -0
  51. package/dist/types/vault/vault-manager.d.ts +57 -0
  52. package/dist/types/vault/vault-manager.d.ts.map +1 -0
  53. package/package.json +71 -0
  54. package/src/auth-manager.ts +569 -0
  55. package/src/events.ts +66 -0
  56. package/src/flows/dwn-discovery.ts +300 -0
  57. package/src/flows/dwn-registration.ts +157 -0
  58. package/src/flows/import-identity.ts +217 -0
  59. package/src/flows/local-connect.ts +171 -0
  60. package/src/flows/session-restore.ts +135 -0
  61. package/src/flows/wallet-connect.ts +225 -0
  62. package/src/identity-session.ts +65 -0
  63. package/src/index.ts +89 -0
  64. package/src/storage/storage.ts +136 -0
  65. package/src/types.ts +388 -0
  66. package/src/vault/vault-manager.ts +89 -0
@@ -0,0 +1,496 @@
1
+ /**
2
+ * AuthManager — the primary entry point for `@enbox/auth`.
3
+ *
4
+ * Replaces `Enbox.connect()` (formerly `Web5.connect()`) with a composable,
5
+ * multi-identity-aware auth system that works in both browser and CLI environments.
6
+ * @module
7
+ */
8
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
+ return new (P || (P = Promise))(function (resolve, reject) {
11
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
15
+ });
16
+ };
17
+ import { EnboxUserAgent } from '@enbox/agent';
18
+ import { AuthEventEmitter } from './events.js';
19
+ import { AuthSession } from './identity-session.js';
20
+ import { createDefaultStorage } from './storage/storage.js';
21
+ import { localConnect } from './flows/local-connect.js';
22
+ import { restoreSession } from './flows/session-restore.js';
23
+ import { STORAGE_KEYS } from './types.js';
24
+ import { VaultManager } from './vault/vault-manager.js';
25
+ import { walletConnect } from './flows/wallet-connect.js';
26
+ import { importFromPhrase, importFromPortable } from './flows/import-identity.js';
27
+ /**
28
+ * The primary entry point for authentication and identity management.
29
+ *
30
+ * `AuthManager` replaces `Enbox.connect()` (formerly `Web5.connect()`) with a composable, multi-identity-aware
31
+ * system. It manages vault lifecycle, identity CRUD, session persistence,
32
+ * and all connection flows (local DID, wallet connect, import, restore).
33
+ *
34
+ * @example Basic usage
35
+ * ```ts
36
+ * import { AuthManager } from '@enbox/auth';
37
+ *
38
+ * const auth = await AuthManager.create({ sync: '15s' });
39
+ *
40
+ * // First time: creates a new identity
41
+ * // Subsequent times: restores the previous session
42
+ * const session = await auth.restoreSession() ?? await auth.connect();
43
+ *
44
+ * // session.agent — the authenticated Enbox agent
45
+ * // session.did — the connected DID URI
46
+ * // session.identity — metadata about the connected identity
47
+ * ```
48
+ *
49
+ * @example Wallet connect
50
+ * ```ts
51
+ * const session = await auth.walletConnect({
52
+ * displayName: 'My App',
53
+ * connectServerUrl: 'https://enbox-dwn.fly.dev/connect',
54
+ * permissionRequests: [{ protocolDefinition: MyProtocol.definition }],
55
+ * onWalletUriReady: (uri) => showQRCode(uri),
56
+ * validatePin: () => promptUserForPin(),
57
+ * });
58
+ * ```
59
+ */
60
+ export class AuthManager {
61
+ constructor(params) {
62
+ this._state = 'uninitialized';
63
+ this._isConnecting = false;
64
+ this._userAgent = params.userAgent;
65
+ this._emitter = params.emitter;
66
+ this._storage = params.storage;
67
+ this._vault = params.vault;
68
+ this._defaultPassword = params.defaultPassword;
69
+ this._defaultSync = params.defaultSync;
70
+ this._defaultDwnEndpoints = params.defaultDwnEndpoints;
71
+ this._registration = params.registration;
72
+ }
73
+ /**
74
+ * Create a new AuthManager instance.
75
+ *
76
+ * When a pre-built `agent` is provided, it is used as-is and
77
+ * `dataPath`, `agentVault`, and `localDwnStrategy` are ignored.
78
+ * Otherwise, a new `EnboxUserAgent` is created with the given options.
79
+ *
80
+ * @param options - Configuration options for the auth manager.
81
+ * @returns A ready-to-use AuthManager instance.
82
+ */
83
+ static create() {
84
+ return __awaiter(this, arguments, void 0, function* (options = {}) {
85
+ var _a, _b;
86
+ const emitter = new AuthEventEmitter();
87
+ const storage = (_a = options.storage) !== null && _a !== void 0 ? _a : createDefaultStorage();
88
+ // Use a pre-built agent or create one with the given options.
89
+ const userAgent = (_b = options.agent) !== null && _b !== void 0 ? _b : yield EnboxUserAgent.create({
90
+ dataPath: options.dataPath,
91
+ agentVault: options.agentVault,
92
+ localDwnStrategy: options.localDwnStrategy,
93
+ });
94
+ const vault = new VaultManager(userAgent.vault, emitter);
95
+ const manager = new AuthManager({
96
+ userAgent,
97
+ emitter,
98
+ storage,
99
+ vault,
100
+ defaultPassword: options.password,
101
+ defaultSync: options.sync,
102
+ defaultDwnEndpoints: options.dwnEndpoints,
103
+ registration: options.registration,
104
+ });
105
+ // Determine initial state.
106
+ if (yield vault.isInitialized()) {
107
+ manager._setState(vault.isLocked ? 'locked' : 'unlocked');
108
+ }
109
+ else {
110
+ manager._setState('uninitialized');
111
+ }
112
+ return manager;
113
+ });
114
+ }
115
+ // ─── Connection flows ──────────────────────────────────────────
116
+ /**
117
+ * Create or reconnect a local identity.
118
+ *
119
+ * On first use, this creates a new vault, agent DID, and user identity.
120
+ * On subsequent uses, it unlocks the vault and reconnects.
121
+ *
122
+ * @param options - Optional overrides for password, sync, DWN endpoints.
123
+ * @returns An active AuthSession.
124
+ * @throws If a connection attempt is already in progress.
125
+ */
126
+ connect(options) {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ this._guardConcurrency();
129
+ this._isConnecting = true;
130
+ try {
131
+ const session = yield localConnect({
132
+ userAgent: this._userAgent,
133
+ emitter: this._emitter,
134
+ storage: this._storage,
135
+ defaultPassword: this._defaultPassword,
136
+ defaultSync: this._defaultSync,
137
+ defaultDwnEndpoints: this._defaultDwnEndpoints,
138
+ registration: this._registration,
139
+ }, options);
140
+ this._session = session;
141
+ this._setState('connected');
142
+ return session;
143
+ }
144
+ finally {
145
+ this._isConnecting = false;
146
+ }
147
+ });
148
+ }
149
+ /**
150
+ * Connect to an external wallet via the OIDC/QR relay protocol.
151
+ *
152
+ * This runs the full WalletConnect flow: generates a URI for QR display,
153
+ * validates the PIN, imports the delegated DID, and processes grants.
154
+ *
155
+ * @param options - Wallet connect configuration.
156
+ * @returns An active AuthSession with delegated permissions.
157
+ * @throws If sync is disabled (required for wallet connect).
158
+ * @throws If a connection attempt is already in progress.
159
+ */
160
+ walletConnect(options) {
161
+ return __awaiter(this, void 0, void 0, function* () {
162
+ var _a;
163
+ this._guardConcurrency();
164
+ this._isConnecting = true;
165
+ try {
166
+ // Ensure the agent is initialized and started before wallet connect.
167
+ const password = (_a = this._defaultPassword) !== null && _a !== void 0 ? _a : 'insecure-static-phrase';
168
+ if (yield this._userAgent.firstLaunch()) {
169
+ yield this._userAgent.initialize({ password });
170
+ }
171
+ yield this._userAgent.start({ password });
172
+ this._emitter.emit('vault-unlocked', {});
173
+ const session = yield walletConnect({
174
+ userAgent: this._userAgent,
175
+ emitter: this._emitter,
176
+ storage: this._storage,
177
+ defaultSync: this._defaultSync,
178
+ defaultDwnEndpoints: this._defaultDwnEndpoints,
179
+ registration: this._registration,
180
+ }, options);
181
+ this._session = session;
182
+ this._setState('connected');
183
+ return session;
184
+ }
185
+ finally {
186
+ this._isConnecting = false;
187
+ }
188
+ });
189
+ }
190
+ /**
191
+ * Import an identity from a BIP-39 recovery phrase.
192
+ *
193
+ * This re-derives the vault and agent DID from the mnemonic,
194
+ * recovering the identity on this device.
195
+ */
196
+ importFromPhrase(options) {
197
+ return __awaiter(this, void 0, void 0, function* () {
198
+ this._guardConcurrency();
199
+ this._isConnecting = true;
200
+ try {
201
+ const session = yield importFromPhrase({
202
+ userAgent: this._userAgent,
203
+ emitter: this._emitter,
204
+ storage: this._storage,
205
+ defaultSync: this._defaultSync,
206
+ defaultDwnEndpoints: this._defaultDwnEndpoints,
207
+ registration: this._registration,
208
+ }, options);
209
+ this._session = session;
210
+ this._setState('connected');
211
+ return session;
212
+ }
213
+ finally {
214
+ this._isConnecting = false;
215
+ }
216
+ });
217
+ }
218
+ /**
219
+ * Import an identity from a PortableIdentity JSON object.
220
+ *
221
+ * The portable identity contains the DID's private keys and metadata.
222
+ */
223
+ importFromPortable(options) {
224
+ return __awaiter(this, void 0, void 0, function* () {
225
+ this._guardConcurrency();
226
+ this._isConnecting = true;
227
+ try {
228
+ const session = yield importFromPortable({
229
+ userAgent: this._userAgent,
230
+ emitter: this._emitter,
231
+ storage: this._storage,
232
+ defaultSync: this._defaultSync,
233
+ defaultDwnEndpoints: this._defaultDwnEndpoints,
234
+ registration: this._registration,
235
+ }, options);
236
+ this._session = session;
237
+ this._setState('connected');
238
+ return session;
239
+ }
240
+ finally {
241
+ this._isConnecting = false;
242
+ }
243
+ });
244
+ }
245
+ /**
246
+ * Restore a previous session from persisted storage.
247
+ *
248
+ * Returns `undefined` if no previous session exists.
249
+ * This replaces the manual `previouslyConnected` localStorage pattern.
250
+ */
251
+ restoreSession(options) {
252
+ return __awaiter(this, void 0, void 0, function* () {
253
+ this._guardConcurrency();
254
+ this._isConnecting = true;
255
+ try {
256
+ const session = yield restoreSession({
257
+ userAgent: this._userAgent,
258
+ emitter: this._emitter,
259
+ storage: this._storage,
260
+ defaultPassword: this._defaultPassword,
261
+ defaultSync: this._defaultSync,
262
+ }, options);
263
+ if (session) {
264
+ this._session = session;
265
+ this._setState('connected');
266
+ }
267
+ return session;
268
+ }
269
+ finally {
270
+ this._isConnecting = false;
271
+ }
272
+ });
273
+ }
274
+ // ─── Session management ────────────────────────────────────────
275
+ /** The current active session, or `undefined` if not connected. */
276
+ get session() {
277
+ return this._session;
278
+ }
279
+ /**
280
+ * Disconnect the current session.
281
+ *
282
+ * @param options - Disconnect options.
283
+ * @param options.clearStorage - If `true`, performs a nuclear wipe:
284
+ * clears all persisted data (localStorage + IndexedDB). Default: `false`.
285
+ * @param options.timeout - Milliseconds to wait for sync to complete.
286
+ */
287
+ disconnect() {
288
+ return __awaiter(this, arguments, void 0, function* (options = {}) {
289
+ var _a, _b;
290
+ const { clearStorage = false, timeout = 2000 } = options;
291
+ const did = (_a = this._session) === null || _a === void 0 ? void 0 : _a.did;
292
+ // Stop sync.
293
+ if (this._session) {
294
+ if ('sync' in this._userAgent && typeof ((_b = this._userAgent.sync) === null || _b === void 0 ? void 0 : _b.stopSync) === 'function') {
295
+ yield this._userAgent.sync.stopSync(timeout);
296
+ }
297
+ }
298
+ this._session = undefined;
299
+ if (clearStorage) {
300
+ // Nuclear wipe: clear all persisted auth data.
301
+ yield this._storage.clear();
302
+ // Also clear non-prefixed localStorage and IndexedDB (browser).
303
+ if (typeof globalThis.localStorage !== 'undefined') {
304
+ globalThis.localStorage.clear();
305
+ }
306
+ if (typeof globalThis.indexedDB !== 'undefined') {
307
+ try {
308
+ const databases = yield globalThis.indexedDB.databases();
309
+ for (const db of databases) {
310
+ if (db.name) {
311
+ globalThis.indexedDB.deleteDatabase(db.name);
312
+ }
313
+ }
314
+ }
315
+ catch (_c) {
316
+ // indexedDB.databases() not available in all browsers.
317
+ }
318
+ }
319
+ }
320
+ else {
321
+ // Clean disconnect: remove session markers but keep vault/identities.
322
+ yield this._storage.remove(STORAGE_KEYS.PREVIOUSLY_CONNECTED);
323
+ yield this._storage.remove(STORAGE_KEYS.ACTIVE_IDENTITY);
324
+ yield this._storage.remove(STORAGE_KEYS.DELEGATE_DID);
325
+ yield this._storage.remove(STORAGE_KEYS.CONNECTED_DID);
326
+ }
327
+ this._setState('unlocked');
328
+ if (did) {
329
+ this._emitter.emit('session-end', { did });
330
+ }
331
+ });
332
+ }
333
+ // ─── Multi-identity ────────────────────────────────────────────
334
+ /**
335
+ * List all stored identities.
336
+ *
337
+ * Each identity has a DID URI, name, and optional connected DID
338
+ * (for wallet-connected/delegated identities).
339
+ */
340
+ listIdentities() {
341
+ return __awaiter(this, void 0, void 0, function* () {
342
+ const identities = yield this._userAgent.identity.list();
343
+ return identities.map((identity) => ({
344
+ didUri: identity.did.uri,
345
+ name: identity.metadata.name,
346
+ connectedDid: identity.metadata.connectedDid,
347
+ }));
348
+ });
349
+ }
350
+ /**
351
+ * Switch the active identity.
352
+ *
353
+ * Disconnects the current session (if any) and creates a new session
354
+ * for the specified identity.
355
+ */
356
+ switchIdentity(didUri) {
357
+ return __awaiter(this, void 0, void 0, function* () {
358
+ var _a;
359
+ // Disconnect current session cleanly (keep data).
360
+ if (this._session) {
361
+ yield this.disconnect();
362
+ }
363
+ const identity = yield this._userAgent.identity.get({ didUri });
364
+ if (!identity) {
365
+ throw new Error(`[@enbox/auth] Identity not found: ${didUri}`);
366
+ }
367
+ const connectedDid = (_a = identity.metadata.connectedDid) !== null && _a !== void 0 ? _a : identity.did.uri;
368
+ const delegateDid = identity.metadata.connectedDid ? identity.did.uri : undefined;
369
+ // Persist the switch.
370
+ yield this._storage.set(STORAGE_KEYS.PREVIOUSLY_CONNECTED, 'true');
371
+ yield this._storage.set(STORAGE_KEYS.ACTIVE_IDENTITY, connectedDid);
372
+ const identityInfo = {
373
+ didUri: connectedDid,
374
+ name: identity.metadata.name,
375
+ connectedDid: identity.metadata.connectedDid,
376
+ };
377
+ // Restart sync.
378
+ const sync = this._defaultSync;
379
+ if (sync !== 'off') {
380
+ const syncMode = sync === undefined ? 'live' : 'poll';
381
+ const syncInterval = sync !== null && sync !== void 0 ? sync : (syncMode === 'live' ? '5m' : '2m');
382
+ this._userAgent.sync.startSync({ mode: syncMode, interval: syncInterval })
383
+ .catch((err) => console.error('[@enbox/auth] Sync failed:', err));
384
+ }
385
+ this._session = new AuthSession({
386
+ agent: this._userAgent,
387
+ did: connectedDid,
388
+ delegateDid,
389
+ identity: identityInfo,
390
+ });
391
+ this._setState('connected');
392
+ this._emitter.emit('session-start', {
393
+ session: { did: connectedDid, delegateDid, identity: identityInfo },
394
+ });
395
+ return this._session;
396
+ });
397
+ }
398
+ /**
399
+ * Delete a stored identity.
400
+ *
401
+ * If the identity is currently active, it will be disconnected first.
402
+ *
403
+ * @throws If the identity is not found.
404
+ */
405
+ deleteIdentity(didUri) {
406
+ return __awaiter(this, void 0, void 0, function* () {
407
+ var _a;
408
+ // Disconnect if this is the active identity.
409
+ if (((_a = this._session) === null || _a === void 0 ? void 0 : _a.did) === didUri) {
410
+ yield this.disconnect();
411
+ }
412
+ const identity = yield this._userAgent.identity.get({ didUri });
413
+ if (!identity) {
414
+ throw new Error(`[@enbox/auth] Identity not found: ${didUri}`);
415
+ }
416
+ // Delete the DID and keys.
417
+ try {
418
+ yield this._userAgent.did.delete({
419
+ didUri: identity.did.uri,
420
+ tenant: identity.metadata.tenant,
421
+ deleteKey: true,
422
+ });
423
+ }
424
+ catch (err) {
425
+ console.error(`[@enbox/auth] Failed to delete DID ${didUri}:`, err);
426
+ }
427
+ // Delete the identity record.
428
+ yield this._userAgent.identity.delete({ didUri });
429
+ this._emitter.emit('identity-removed', { didUri });
430
+ });
431
+ }
432
+ /**
433
+ * Export an identity as a PortableIdentity JSON object.
434
+ *
435
+ * This can be used for backup or transferring the identity
436
+ * to another device.
437
+ */
438
+ exportIdentity(didUri) {
439
+ return __awaiter(this, void 0, void 0, function* () {
440
+ return this._userAgent.identity.export({ didUri });
441
+ });
442
+ }
443
+ // ─── Vault ─────────────────────────────────────────────────────
444
+ /** Access the vault manager for lock/unlock/backup operations. */
445
+ get vault() {
446
+ return this._vault;
447
+ }
448
+ // ─── Events ────────────────────────────────────────────────────
449
+ /**
450
+ * Subscribe to an auth lifecycle event.
451
+ *
452
+ * @param event - The event name.
453
+ * @param handler - The event handler.
454
+ * @returns An unsubscribe function.
455
+ */
456
+ on(event, handler) {
457
+ return this._emitter.on(event, handler);
458
+ }
459
+ // ─── State ─────────────────────────────────────────────────────
460
+ /** The current auth state. */
461
+ get state() {
462
+ return this._state;
463
+ }
464
+ /** Whether an active session exists. */
465
+ get isConnected() {
466
+ return this._state === 'connected';
467
+ }
468
+ /** Whether the vault is currently locked. */
469
+ get isLocked() {
470
+ return this._vault.isLocked;
471
+ }
472
+ /** Whether a connection attempt is in progress. */
473
+ get isConnecting() {
474
+ return this._isConnecting;
475
+ }
476
+ /** The underlying EnboxUserAgent (for advanced usage). */
477
+ get agent() {
478
+ return this._userAgent;
479
+ }
480
+ // ─── Private helpers ───────────────────────────────────────────
481
+ _setState(state) {
482
+ if (state === this._state) {
483
+ return;
484
+ }
485
+ const previous = this._state;
486
+ this._state = state;
487
+ this._emitter.emit('state-change', { previous, current: state });
488
+ }
489
+ _guardConcurrency() {
490
+ if (this._isConnecting) {
491
+ throw new Error('[@enbox/auth] A connection attempt is already in progress. ' +
492
+ 'Wait for it to complete before starting another.');
493
+ }
494
+ }
495
+ }
496
+ //# sourceMappingURL=auth-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-manager.js","sourceRoot":"","sources":["../../src/auth-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Typed event emitter for auth state changes.
3
+ * @module
4
+ */
5
+ /**
6
+ * A minimal, type-safe event emitter for auth lifecycle events.
7
+ *
8
+ * Usage:
9
+ * ```ts
10
+ * const emitter = new AuthEventEmitter();
11
+ * const unsub = emitter.on('state-change', ({ previous, current }) => {
12
+ * console.log(`State: ${previous} → ${current}`);
13
+ * });
14
+ * emitter.emit('state-change', { previous: 'locked', current: 'unlocked' });
15
+ * unsub(); // stop listening
16
+ * ```
17
+ */
18
+ export class AuthEventEmitter {
19
+ constructor() {
20
+ this._listeners = new Map();
21
+ }
22
+ /**
23
+ * Subscribe to an event. Returns an unsubscribe function.
24
+ */
25
+ on(event, handler) {
26
+ let set = this._listeners.get(event);
27
+ if (!set) {
28
+ set = new Set();
29
+ this._listeners.set(event, set);
30
+ }
31
+ set.add(handler);
32
+ return () => {
33
+ set.delete(handler);
34
+ if (set.size === 0) {
35
+ this._listeners.delete(event);
36
+ }
37
+ };
38
+ }
39
+ /**
40
+ * Emit an event to all registered listeners.
41
+ * @internal
42
+ */
43
+ emit(event, payload) {
44
+ const set = this._listeners.get(event);
45
+ if (!set) {
46
+ return;
47
+ }
48
+ for (const handler of set) {
49
+ try {
50
+ handler(payload);
51
+ }
52
+ catch (err) {
53
+ console.error(`[AuthEventEmitter] Error in '${event}' handler:`, err);
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Remove all listeners for all events.
59
+ * @internal
60
+ */
61
+ removeAllListeners() {
62
+ this._listeners.clear();
63
+ }
64
+ }
65
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,gBAAgB;IAA7B;QACU,eAAU,GAAG,IAAI,GAAG,EAA+C,CAAC;IA4C9E,CAAC;IA1CC;;OAEG;IACH,EAAE,CAAsB,KAAQ,EAAE,OAA4B;QAC5D,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,OAAsC,CAAC,CAAC;QAEhD,OAAO,GAAG,EAAE;YACV,GAAI,CAAC,MAAM,CAAC,OAAsC,CAAC,CAAC;YACpD,IAAI,GAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,IAAI,CAAsB,KAAQ,EAAE,OAAwB;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACrB,KAAK,MAAM,OAAO,IAAI,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,YAAY,EAAE,GAAG,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,kBAAkB;QAChB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}