@imtbl/auth 2.11.1-alpha.0 → 2.11.1-alpha.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.
- package/dist/browser/index.js +28 -30
- package/dist/node/index.cjs +30 -34
- package/dist/node/index.js +21 -24
- package/dist/types/index.d.ts +1 -0
- package/dist/types/utils/jwt.d.ts +1 -0
- package/dist/types/utils/typedEventEmitter.d.ts +7 -4
- package/package.json +3 -8
- package/src/Auth.test.ts +9 -7
- package/src/Auth.ts +63 -16
- package/src/errors.ts +28 -3
- package/src/index.ts +2 -0
- package/src/storage/device_credentials_manager.ts +2 -2
- package/src/utils/jwt.ts +78 -0
- package/src/utils/token.ts +2 -2
- package/src/utils/typedEventEmitter.ts +36 -11
|
@@ -1,26 +1,51 @@
|
|
|
1
|
-
|
|
1
|
+
type StringEventKey<T> = Extract<keyof T, string>;
|
|
2
|
+
|
|
3
|
+
type AnyListener = (...args: any[]) => void;
|
|
4
|
+
type EventArgs<TEvents, TEventName extends keyof TEvents> =
|
|
5
|
+
TEvents[TEventName] extends readonly [...infer A]
|
|
6
|
+
? [...A]
|
|
7
|
+
: TEvents[TEventName] extends readonly any[]
|
|
8
|
+
? [...TEvents[TEventName]]
|
|
9
|
+
: [TEvents[TEventName]];
|
|
2
10
|
|
|
3
11
|
export default class TypedEventEmitter<TEvents extends Record<string, any>> {
|
|
4
|
-
private
|
|
12
|
+
private listeners = new Map<StringEventKey<TEvents>, Set<AnyListener>>();
|
|
5
13
|
|
|
6
|
-
emit<TEventName extends
|
|
14
|
+
emit<TEventName extends StringEventKey<TEvents>>(
|
|
7
15
|
eventName: TEventName,
|
|
8
|
-
...eventArg: TEvents
|
|
16
|
+
...eventArg: EventArgs<TEvents, TEventName>
|
|
9
17
|
) {
|
|
10
|
-
this.
|
|
18
|
+
const handlers = this.listeners.get(eventName);
|
|
19
|
+
if (!handlers || handlers.size === 0) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Copy handlers to avoid issues if listeners mutate during emit
|
|
24
|
+
[...handlers].forEach((handler) => {
|
|
25
|
+
handler(...eventArg);
|
|
26
|
+
});
|
|
11
27
|
}
|
|
12
28
|
|
|
13
|
-
on<TEventName extends
|
|
29
|
+
on<TEventName extends StringEventKey<TEvents>>(
|
|
14
30
|
eventName: TEventName,
|
|
15
|
-
handler: (...eventArg: TEvents
|
|
31
|
+
handler: (...eventArg: EventArgs<TEvents, TEventName>) => void,
|
|
16
32
|
) {
|
|
17
|
-
this.
|
|
33
|
+
const handlers = this.listeners.get(eventName) ?? new Set<AnyListener>();
|
|
34
|
+
handlers.add(handler as AnyListener);
|
|
35
|
+
this.listeners.set(eventName, handlers);
|
|
18
36
|
}
|
|
19
37
|
|
|
20
|
-
removeListener<TEventName extends
|
|
38
|
+
removeListener<TEventName extends StringEventKey<TEvents>>(
|
|
21
39
|
eventName: TEventName,
|
|
22
|
-
handler: (...eventArg: TEvents
|
|
40
|
+
handler: (...eventArg: EventArgs<TEvents, TEventName>) => void,
|
|
23
41
|
) {
|
|
24
|
-
this.
|
|
42
|
+
const handlers = this.listeners.get(eventName);
|
|
43
|
+
if (!handlers) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
handlers.delete(handler as AnyListener);
|
|
47
|
+
if (handlers.size === 0) {
|
|
48
|
+
this.listeners.delete(eventName);
|
|
49
|
+
}
|
|
25
50
|
}
|
|
26
51
|
}
|