@pelican-identity/auth-core 1.2.10 → 1.2.11

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,2 @@
1
+ export declare const BASEURL = "http://192.168.1.9:8080";
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const BASEURL = "http://192.168.1.9:8080";
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { PelicanAuthConfig, PelicanAuthEventMap } from "../types/types";
2
+ type Listener<T> = (payload: T) => void;
3
+ export declare class PelicanAuthentication {
4
+ private readonly crypto;
5
+ private readonly stateMachine;
6
+ private transport?;
7
+ private sessionId;
8
+ private sessionKey;
9
+ private visibilityHandler?;
10
+ private backupCheckTimeout?;
11
+ private useWebSocket;
12
+ private listeners;
13
+ private readonly config;
14
+ constructor(config: PelicanAuthConfig);
15
+ on<K extends keyof PelicanAuthEventMap>(event: K, cb: Listener<PelicanAuthEventMap[K]>): () => boolean;
16
+ start(): Promise<void>;
17
+ stop(): void;
18
+ destroy(): void;
19
+ private shouldUseWebSocket;
20
+ private startWebSocketFlow;
21
+ private handleWebSocketMessage;
22
+ private handleAuthSuccess;
23
+ private startDeepLinkFlow;
24
+ private clearBackupCheck;
25
+ private checkSession;
26
+ private emitQRCode;
27
+ private emitDeepLink;
28
+ private attachVisibilityRecovery;
29
+ private detachVisibilityRecovery;
30
+ private fetchRelayUrl;
31
+ private terminate;
32
+ private restartIfContinuous;
33
+ private resetSession;
34
+ private emit;
35
+ private fail;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EAGpB,MAAM,gBAAgB,CAAC;AAWxB,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAQxC,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IAEnD,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAuB;IAEzC,OAAO,CAAC,iBAAiB,CAAC,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,YAAY,CAAQ;IAE5B,OAAO,CAAC,SAAS,CAEV;IAEP,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAEzC,MAAM,EAAE,iBAAiB;IAiBrC,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EACpC,KAAK,EAAE,CAAC,EACR,EAAE,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAOhC,KAAK;IAyBX,IAAI;IAIJ,OAAO;IAUP,OAAO,CAAC,kBAAkB;YAYZ,kBAAkB;IAuBhC,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,iBAAiB;YAqCX,iBAAiB;IAgB/B,OAAO,CAAC,gBAAgB;YAOV,YAAY;YAkDZ,UAAU;YAmBV,YAAY;IAgB1B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,wBAAwB;YASlB,aAAa;IAe3B,OAAO,CAAC,SAAS;IA6BjB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,IAAI;CAIb"}
@@ -0,0 +1,285 @@
1
+ import CryptoService from "../utilities/crypto";
2
+ import QRCode from "qrcode";
3
+ import { storeAuthSession, getAuthSession, clearAuthSession, } from "../utilities/storage";
4
+ import { StateMachine } from "../utilities/stateMachine";
5
+ import { Transport } from "../utilities/transport";
6
+ import { BASEURL } from "../constants";
7
+ export class PelicanAuthentication {
8
+ constructor(config) {
9
+ this.crypto = new CryptoService();
10
+ this.stateMachine = new StateMachine();
11
+ this.sessionId = "";
12
+ this.sessionKey = null;
13
+ this.useWebSocket = true;
14
+ this.listeners = {};
15
+ if (!config.publicKey)
16
+ throw new Error("Missing publicKey");
17
+ if (!config.projectId)
18
+ throw new Error("Missing projectId");
19
+ if (!config.authType)
20
+ throw new Error("Missing authType");
21
+ this.config = {
22
+ continuousMode: false,
23
+ forceQRCode: false,
24
+ ...config,
25
+ };
26
+ this.stateMachine.subscribe((s) => this.emit("state", s));
27
+ this.attachVisibilityRecovery();
28
+ }
29
+ on(event, cb) {
30
+ var _a;
31
+ (_a = this.listeners)[event] ?? (_a[event] = new Set());
32
+ this.listeners[event].add(cb);
33
+ return () => this.listeners[event].delete(cb);
34
+ }
35
+ async start() {
36
+ if (this.stateMachine.current !== "idle")
37
+ return;
38
+ this.resetSession();
39
+ clearAuthSession();
40
+ this.stateMachine.transition("initializing");
41
+ try {
42
+ this.sessionKey = this.crypto.generateSymmetricKey();
43
+ this.sessionId = crypto.randomUUID() + crypto.randomUUID();
44
+ this.useWebSocket = this.shouldUseWebSocket();
45
+ if (this.useWebSocket) {
46
+ await this.startWebSocketFlow();
47
+ }
48
+ else {
49
+ await this.startDeepLinkFlow();
50
+ }
51
+ }
52
+ catch (err) {
53
+ this.fail(err instanceof Error ? err : new Error("Start failed"));
54
+ }
55
+ }
56
+ stop() {
57
+ this.terminate(false);
58
+ }
59
+ destroy() {
60
+ this.detachVisibilityRecovery();
61
+ this.clearBackupCheck();
62
+ this.transport?.close();
63
+ this.transport = undefined;
64
+ this.listeners = {};
65
+ }
66
+ shouldUseWebSocket() {
67
+ return (this.config.forceQRCode ||
68
+ !/Android|iPhone|iPad/i.test(navigator.userAgent));
69
+ }
70
+ async startWebSocketFlow() {
71
+ const relay = await this.fetchRelayUrl();
72
+ this.transport = new Transport({
73
+ onOpen: () => {
74
+ this.transport.send({
75
+ type: "register",
76
+ sessionID: this.sessionId,
77
+ ...this.config,
78
+ });
79
+ this.stateMachine.transition("awaiting-pair");
80
+ },
81
+ onMessage: (msg) => this.handleWebSocketMessage(msg),
82
+ onError: (err) => {
83
+ console.error("WebSocket error:", err);
84
+ this.fail(new Error("WebSocket connection failed"));
85
+ },
86
+ });
87
+ this.transport.connect(relay);
88
+ await this.emitQRCode();
89
+ }
90
+ handleWebSocketMessage(msg) {
91
+ switch (msg.type) {
92
+ case "paired":
93
+ this.stateMachine.transition("paired");
94
+ this.transport.send({
95
+ type: "authenticate",
96
+ sessionID: this.sessionId,
97
+ ...this.config,
98
+ url: window.location.href,
99
+ });
100
+ return;
101
+ case "phone-auth-success":
102
+ this.handleAuthSuccess(msg);
103
+ return;
104
+ case "phone-terminated":
105
+ this.fail(new Error("Authentication cancelled on device"));
106
+ this.restartIfContinuous();
107
+ return;
108
+ case "confirmed":
109
+ this.terminate(true);
110
+ this.restartIfContinuous();
111
+ return;
112
+ }
113
+ }
114
+ handleAuthSuccess(msg) {
115
+ if (!this.sessionKey || !msg.cipher || !msg.nonce) {
116
+ this.fail(new Error("Invalid authentication payload"));
117
+ this.restartIfContinuous();
118
+ return;
119
+ }
120
+ try {
121
+ const decrypted = this.crypto.decryptSymmetric({
122
+ encrypted: { cipher: msg.cipher, nonce: msg.nonce },
123
+ keyString: this.sessionKey,
124
+ });
125
+ if (!decrypted) {
126
+ this.fail(new Error("Invalid authentication data"));
127
+ this.restartIfContinuous();
128
+ return;
129
+ }
130
+ const result = JSON.parse(decrypted);
131
+ this.emit("success", result);
132
+ this.stateMachine.transition("authenticated");
133
+ this.transport?.send({
134
+ type: "confirm",
135
+ sessionID: this.sessionId,
136
+ });
137
+ }
138
+ catch {
139
+ this.fail(new Error("Failed to decrypt authentication data"));
140
+ this.restartIfContinuous();
141
+ }
142
+ }
143
+ async startDeepLinkFlow() {
144
+ await this.fetchRelayUrl();
145
+ if (this.sessionKey) {
146
+ storeAuthSession(this.sessionId, this.sessionKey, 10 * 60000);
147
+ }
148
+ await this.emitDeepLink();
149
+ this.stateMachine.transition("awaiting-pair");
150
+ }
151
+ clearBackupCheck() {
152
+ if (this.backupCheckTimeout) {
153
+ clearTimeout(this.backupCheckTimeout);
154
+ this.backupCheckTimeout = undefined;
155
+ }
156
+ }
157
+ async checkSession() {
158
+ const cached = getAuthSession();
159
+ if (!cached)
160
+ return;
161
+ this.stateMachine.transition("awaiting-auth");
162
+ try {
163
+ const res = await fetch(`${BASEURL}/session?session_id=${cached.sessionId}`);
164
+ if (!res.ok)
165
+ return;
166
+ const data = await res.json();
167
+ const decrypted = this.crypto.decryptSymmetric({
168
+ encrypted: { cipher: data.cipher, nonce: data.nonce },
169
+ keyString: cached.sessionKey,
170
+ });
171
+ if (!decrypted) {
172
+ console.warn("Failed to decrypt session");
173
+ return;
174
+ }
175
+ const result = JSON.parse(decrypted);
176
+ this.clearBackupCheck();
177
+ clearAuthSession();
178
+ this.emit("success", result);
179
+ this.stateMachine.transition("authenticated");
180
+ if (this.config.continuousMode) {
181
+ setTimeout(() => {
182
+ this.stateMachine.transition("confirmed");
183
+ this.start();
184
+ }, 1500);
185
+ }
186
+ else {
187
+ this.stateMachine.transition("confirmed");
188
+ }
189
+ }
190
+ catch (err) {
191
+ console.debug("Session check failed:", err);
192
+ }
193
+ }
194
+ async emitQRCode() {
195
+ const payload = {
196
+ sessionID: this.sessionId,
197
+ sessionKey: this.sessionKey,
198
+ publicKey: this.config.publicKey,
199
+ authType: this.config.authType,
200
+ projectId: this.config.projectId,
201
+ url: window.location.href,
202
+ };
203
+ const qr = await QRCode.toDataURL(JSON.stringify(payload), {
204
+ type: "image/png",
205
+ scale: 3,
206
+ color: { light: "#ffffff", dark: "#424242ff" },
207
+ });
208
+ this.emit("qr", qr);
209
+ }
210
+ async emitDeepLink() {
211
+ const deeplink = `pelicanvault://auth/deep-link?sessionID=${encodeURIComponent(this.sessionId)}&sessionKey=${encodeURIComponent(this.sessionKey)}&publicKey=${encodeURIComponent(this.config.publicKey)}&authType=${this.config.authType}&projectId=${encodeURIComponent(this.config.projectId)}&url=${encodeURIComponent(window.location.href)}`;
212
+ this.emit("deeplink", deeplink);
213
+ }
214
+ attachVisibilityRecovery() {
215
+ this.visibilityHandler = async () => {
216
+ if (document.visibilityState !== "visible")
217
+ return;
218
+ if (this.useWebSocket)
219
+ return;
220
+ await this.checkSession();
221
+ };
222
+ document.addEventListener("visibilitychange", this.visibilityHandler);
223
+ }
224
+ detachVisibilityRecovery() {
225
+ if (this.visibilityHandler) {
226
+ document.removeEventListener("visibilitychange", this.visibilityHandler);
227
+ this.visibilityHandler = undefined;
228
+ }
229
+ }
230
+ async fetchRelayUrl() {
231
+ const { publicKey, projectId, authType } = this.config;
232
+ const res = await fetch(`${BASEURL}/relay?public_key=${publicKey}&auth_type=${authType}&project_id=${projectId}`);
233
+ if (!res.ok) {
234
+ const error = await res.text();
235
+ throw new Error(error);
236
+ }
237
+ const json = await res.json();
238
+ return json.relay_url;
239
+ }
240
+ terminate(success) {
241
+ this.clearBackupCheck();
242
+ if (this.transport) {
243
+ if (!success) {
244
+ this.transport.send({
245
+ type: "client-terminated",
246
+ sessionID: this.sessionId,
247
+ projectId: this.config.projectId,
248
+ publicKey: this.config.publicKey,
249
+ authType: this.config.authType,
250
+ });
251
+ }
252
+ this.transport.close();
253
+ this.transport = undefined;
254
+ }
255
+ clearAuthSession();
256
+ this.resetSession();
257
+ if (!this.config.continuousMode) {
258
+ this.detachVisibilityRecovery();
259
+ }
260
+ this.stateMachine.transition(success ? "confirmed" : "idle");
261
+ }
262
+ restartIfContinuous() {
263
+ if (!this.config.continuousMode)
264
+ return;
265
+ this.clearBackupCheck();
266
+ this.transport?.close();
267
+ this.transport = undefined;
268
+ this.stateMachine.transition("idle");
269
+ setTimeout(() => {
270
+ this.start();
271
+ }, 150);
272
+ }
273
+ resetSession() {
274
+ this.sessionId = "";
275
+ this.sessionKey = null;
276
+ }
277
+ emit(event, payload) {
278
+ this.listeners[event]?.forEach((cb) => cb(payload));
279
+ }
280
+ fail(err) {
281
+ this.emit("error", err);
282
+ this.stateMachine.transition("error");
283
+ }
284
+ }
285
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAUvC,MAAM,OAAO,qBAAqB;IAkBhC,YAAY,MAAyB;QAjBpB,WAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAC7B,iBAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAG3C,cAAS,GAAG,EAAE,CAAC;QACf,eAAU,GAAkB,IAAI,CAAC;QAIjC,iBAAY,GAAG,IAAI,CAAC;QAEpB,cAAS,GAEb,EAAE,CAAC;QAKL,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,GAAG;YACZ,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,KAAK;YAClB,GAAG,MAAM;SACV,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAID,EAAE,CACA,KAAQ,EACR,EAAoC;;QAEpC,MAAA,IAAI,CAAC,SAAS,EAAC,KAAK,SAAL,KAAK,IAAM,IAAI,GAAG,EAAE,EAAC;QACpC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,MAAM;YAAE,OAAO;QAEjD,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,gBAAgB,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAE7C,IAAI,CAAC;YAEH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAG3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE9C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAIO,kBAAkB;QAIxB,OAAO,CACL,IAAI,CAAC,MAAM,CAAC,WAAW;YACvB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAClD,CAAC;IACJ,CAAC;IAIO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAEzC,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;YAC7B,MAAM,EAAE,GAAG,EAAE;gBACX,IAAI,CAAC,SAAU,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,UAAU;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,GAAG,IAAI,CAAC,MAAM;iBACf,CAAC,CAAC;gBACH,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAChD,CAAC;YACD,SAAS,EAAE,CAAC,GAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;YACpE,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACtD,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAEO,sBAAsB,CAAC,GAAmB;QAChD,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,CAAC,SAAU,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,cAAc;oBACpB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,GAAG,IAAI,CAAC,MAAM;oBACd,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;iBAC1B,CAAC,CAAC;gBACH,OAAO;YAET,KAAK,oBAAoB;gBACvB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO;YAET,KAAK,kBAAkB;gBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC3D,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,OAAO;YAET,KAAK,WAAW;gBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,OAAO;QACX,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,GAAmB;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC7C,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE;gBACnD,SAAS,EAAE,IAAI,CAAC,UAAU;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAmB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAErD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAG9C,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;gBACnB,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAIO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,KAAM,CAAC,CAAC;QACjE,CAAC;QAGD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAG1B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAGhD,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACtC,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACtC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,OAAO,uBAAuB,MAAM,CAAC,SAAS,EAAE,CACpD,CAAC;YAGF,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,OAAO;YAEpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC7C,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;gBACrD,SAAS,EAAE,MAAM,CAAC,UAAU;aAC7B,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAmB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAGrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,gBAAgB,EAAE,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAG9C,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC/B,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oBAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YAEb,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAIO,KAAK,CAAC,UAAU;QACtB,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAC9B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;SAC1B,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YACzD,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;SAC/C,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,QAAQ,GAAG,2CAA2C,kBAAkB,CAC5E,IAAI,CAAC,SAAS,CACf,eAAe,kBAAkB,CAChC,IAAI,CAAC,UAAW,CACjB,cAAc,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,aACtD,IAAI,CAAC,MAAM,CAAC,QACd,cAAc,kBAAkB,CAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CACtB,QAAQ,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC;IAIO,wBAAwB;QAC9B,IAAI,CAAC,iBAAiB,GAAG,KAAK,IAAI,EAAE;YAClC,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,OAAO;YAGnD,IAAI,IAAI,CAAC,YAAY;gBAAE,OAAO;YAG9B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxE,CAAC;IAEO,wBAAwB;QAC9B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzE,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACrC,CAAC;IACH,CAAC;IAIO,KAAK,CAAC,aAAa;QACzB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,OAAO,qBAAqB,SAAS,cAAc,QAAQ,eAAe,SAAS,EAAE,CACzF,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,SAAS,CAAC,OAAgB;QAEhC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAGxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,mBAAmB;oBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;oBAChC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;oBAChC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;iBAC/B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;QAED,gBAAgB,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc;YAAE,OAAO;QAExC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAErC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,IAAI,CACV,KAAQ,EACR,OAA+B;QAE/B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACtD,CAAC;IAEO,IAAI,CAAC,GAAU;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
package/dist/index.d.mts CHANGED
@@ -108,23 +108,30 @@ declare class PelicanAuthentication {
108
108
  private sessionId;
109
109
  private sessionKey;
110
110
  private visibilityHandler?;
111
+ private backupCheckTimeout?;
112
+ private useWebSocket;
111
113
  private listeners;
112
114
  private readonly config;
113
115
  constructor(config: PelicanAuthConfig);
114
116
  on<K extends keyof PelicanAuthEventMap>(event: K, cb: Listener<PelicanAuthEventMap[K]>): () => boolean;
115
117
  start(): Promise<void>;
116
118
  stop(): void;
117
- private fetchRelayUrl;
118
- private emitEntryPoint;
119
- private handleMessage;
119
+ destroy(): void;
120
+ private shouldUseWebSocket;
121
+ private startWebSocketFlow;
122
+ private handleWebSocketMessage;
120
123
  private handleAuthSuccess;
121
- private getCachedEntry;
124
+ private startDeepLinkFlow;
125
+ private clearBackupCheck;
126
+ private checkSession;
127
+ private emitQRCode;
128
+ private emitDeepLink;
122
129
  private attachVisibilityRecovery;
123
130
  private detachVisibilityRecovery;
131
+ private fetchRelayUrl;
124
132
  private terminate;
125
133
  private restartIfContinuous;
126
134
  private resetSession;
127
- destroy(): void;
128
135
  private emit;
129
136
  private fail;
130
137
  }
@@ -166,11 +173,15 @@ declare class Transport {
166
173
  private maxReconnectAttempts;
167
174
  private isExplicitlyClosed;
168
175
  private url?;
176
+ private reconnectTimeout?;
177
+ private isReconnecting;
169
178
  constructor(handlers: TransportHandlers);
170
179
  connect(url: string): void;
171
180
  private attemptReconnect;
172
181
  send(payload: ISocketMessage): void;
173
182
  close(): void;
183
+ get readyState(): number | undefined;
184
+ get isOpen(): boolean;
174
185
  }
175
186
 
176
187
  interface AuthSession {
@@ -182,6 +193,6 @@ declare const getAuthSession: () => AuthSession | null;
182
193
  declare const clearAuthSession: () => void;
183
194
  declare const clearAllAuthData: () => void;
184
195
 
185
- declare const BASEURL = "https://identityapi.pelicanidentity.com";
196
+ declare const BASEURL = "http://192.168.1.9:8080";
186
197
 
187
198
  export { type AuthSession, type AuthType, BASEURL, CryptoService, type IEmail, type IKycData, type IPhone, type ISocketMessage, type IUserData, type IdCardTypes, type IdentityResult, type PelicanAuthConfig, type PelicanAuthEventMap, type PelicanAuthState, PelicanAuthentication, type PelicanWebAuthProps, StateMachine, Transport, clearAllAuthData, clearAuthSession, getAuthSession, storeAuthSession };
package/dist/index.d.ts CHANGED
@@ -108,23 +108,30 @@ declare class PelicanAuthentication {
108
108
  private sessionId;
109
109
  private sessionKey;
110
110
  private visibilityHandler?;
111
+ private backupCheckTimeout?;
112
+ private useWebSocket;
111
113
  private listeners;
112
114
  private readonly config;
113
115
  constructor(config: PelicanAuthConfig);
114
116
  on<K extends keyof PelicanAuthEventMap>(event: K, cb: Listener<PelicanAuthEventMap[K]>): () => boolean;
115
117
  start(): Promise<void>;
116
118
  stop(): void;
117
- private fetchRelayUrl;
118
- private emitEntryPoint;
119
- private handleMessage;
119
+ destroy(): void;
120
+ private shouldUseWebSocket;
121
+ private startWebSocketFlow;
122
+ private handleWebSocketMessage;
120
123
  private handleAuthSuccess;
121
- private getCachedEntry;
124
+ private startDeepLinkFlow;
125
+ private clearBackupCheck;
126
+ private checkSession;
127
+ private emitQRCode;
128
+ private emitDeepLink;
122
129
  private attachVisibilityRecovery;
123
130
  private detachVisibilityRecovery;
131
+ private fetchRelayUrl;
124
132
  private terminate;
125
133
  private restartIfContinuous;
126
134
  private resetSession;
127
- destroy(): void;
128
135
  private emit;
129
136
  private fail;
130
137
  }
@@ -166,11 +173,15 @@ declare class Transport {
166
173
  private maxReconnectAttempts;
167
174
  private isExplicitlyClosed;
168
175
  private url?;
176
+ private reconnectTimeout?;
177
+ private isReconnecting;
169
178
  constructor(handlers: TransportHandlers);
170
179
  connect(url: string): void;
171
180
  private attemptReconnect;
172
181
  send(payload: ISocketMessage): void;
173
182
  close(): void;
183
+ get readyState(): number | undefined;
184
+ get isOpen(): boolean;
174
185
  }
175
186
 
176
187
  interface AuthSession {
@@ -182,6 +193,6 @@ declare const getAuthSession: () => AuthSession | null;
182
193
  declare const clearAuthSession: () => void;
183
194
  declare const clearAllAuthData: () => void;
184
195
 
185
- declare const BASEURL = "https://identityapi.pelicanidentity.com";
196
+ declare const BASEURL = "http://192.168.1.9:8080";
186
197
 
187
198
  export { type AuthSession, type AuthType, BASEURL, CryptoService, type IEmail, type IKycData, type IPhone, type ISocketMessage, type IUserData, type IdCardTypes, type IdentityResult, type PelicanAuthConfig, type PelicanAuthEventMap, type PelicanAuthState, PelicanAuthentication, type PelicanWebAuthProps, StateMachine, Transport, clearAllAuthData, clearAuthSession, getAuthSession, storeAuthSession };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}