@pelican-identity/auth-core 1.2.8 → 1.2.9

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,102 @@
1
+ export type AuthType = "login" | "signup" | "id-verification";
2
+ export type PelicanAuthState = "idle" | "initializing" | "awaiting-pair" | "paired" | "awaiting-auth" | "authenticated" | "confirmed" | "error" | "terminated";
3
+ export interface PelicanAuthConfig {
4
+ publicKey: string;
5
+ projectId: string;
6
+ authType: AuthType;
7
+ continuousMode?: boolean;
8
+ forceQRCode?: boolean;
9
+ }
10
+ export type PelicanAuthEventMap = {
11
+ state: PelicanAuthState;
12
+ qr: string;
13
+ deeplink: string;
14
+ success: IdentityResult;
15
+ error: Error;
16
+ };
17
+ export interface ISocketMessage {
18
+ type: "confirmed" | "request-passcode" | "client-terminated" | "phone-terminated" | "pair" | "paired" | "phone-auth-success" | "authenticate" | "confirm" | "register";
19
+ sessionID: string;
20
+ cipher?: string;
21
+ nonce?: string;
22
+ publicKey?: string;
23
+ url?: string;
24
+ authType?: AuthType;
25
+ projectId?: string;
26
+ grantedAttributes?: {
27
+ [key: string]: boolean;
28
+ };
29
+ }
30
+ export interface IPhone {
31
+ id: number;
32
+ country: string;
33
+ callingCode: string;
34
+ number: string;
35
+ verifiedAt: string;
36
+ verificationProvider: string;
37
+ }
38
+ export interface IEmail {
39
+ id: number;
40
+ value: string;
41
+ verifiedAt: string;
42
+ verificationProvider: string;
43
+ }
44
+ export type IdCardTypes = "national id card" | "passport" | "driver's license" | "residence permit";
45
+ export interface IKycData {
46
+ id: number;
47
+ status?: "Approved" | "Declined" | "In Review";
48
+ document_type?: IdCardTypes;
49
+ document_number?: string;
50
+ personal_number?: string;
51
+ date_of_birth?: string | Date;
52
+ age?: number;
53
+ expiration_date?: string | Date;
54
+ date_of_issue?: string | Date;
55
+ issuing_state?: string;
56
+ issuing_state_name?: string;
57
+ first_name?: string;
58
+ last_name?: string;
59
+ full_name?: string;
60
+ gender?: string;
61
+ address?: string;
62
+ formatted_address?: string;
63
+ place_of_birth?: string;
64
+ marital_status?: string;
65
+ nationality?: string;
66
+ liveness_percentage?: number;
67
+ face_match_percentage?: number;
68
+ verified_at?: string | Date;
69
+ }
70
+ export interface IUserData {
71
+ first_name?: string;
72
+ last_name?: string;
73
+ other_names?: string;
74
+ email?: IEmail;
75
+ phone?: IPhone;
76
+ dob?: string | Date;
77
+ gender?: "male" | "female" | "other";
78
+ country?: string;
79
+ state?: string;
80
+ city?: string;
81
+ address?: string;
82
+ occupation?: string;
83
+ company?: string;
84
+ website?: string;
85
+ }
86
+ export interface IdentityResult {
87
+ user_id: string;
88
+ user_data?: IUserData;
89
+ id_verification: IKycData;
90
+ id_downloadurls?: {
91
+ front_of_card?: string;
92
+ back_of_card?: string;
93
+ };
94
+ }
95
+ export interface PelicanWebAuthProps extends PelicanAuthConfig {
96
+ onClose?: () => void;
97
+ onSuccess: (result: IdentityResult) => void;
98
+ onError?: (error: Error) => void;
99
+ buttonComponent?: React.ReactElement;
100
+ buttonText?: string;
101
+ }
102
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ interface EncryptedMessage {
2
+ cipher: string;
3
+ nonce: string;
4
+ }
5
+ export declare class CryptoService {
6
+ generateSymmetricKey(): string;
7
+ encryptSymmetric({ plaintext, keyString, }: {
8
+ plaintext: string;
9
+ keyString: string;
10
+ }): EncryptedMessage;
11
+ decryptSymmetric({ encrypted, keyString, }: {
12
+ encrypted: EncryptedMessage;
13
+ keyString: string;
14
+ }): string | null;
15
+ }
16
+ export default CryptoService;
17
+ export type { EncryptedMessage };
18
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utilities/crypto.ts"],"names":[],"mappings":"AAGA,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IACxB,oBAAoB,IAAI,MAAM;IAY9B,gBAAgB,CAAC,EACf,SAAS,EACT,SAAS,GACV,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,gBAAgB;IAoBpB,gBAAgB,CAAC,EACf,SAAS,EACT,SAAS,GACV,EAAE;QACD,SAAS,EAAE,gBAAgB,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,MAAM,GAAG,IAAI;CAmBlB;AAED,eAAe,aAAa,CAAC;AAC7B,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,37 @@
1
+ import nacl from "tweetnacl";
2
+ import { decodeBase64, encodeBase64 } from "tweetnacl-util";
3
+ export class CryptoService {
4
+ generateSymmetricKey() {
5
+ const key = nacl.randomBytes(32);
6
+ return encodeBase64(key);
7
+ }
8
+ encryptSymmetric({ plaintext, keyString, }) {
9
+ const key = decodeBase64(keyString);
10
+ const nonce = nacl.randomBytes(24);
11
+ const messageBytes = new TextEncoder().encode(plaintext);
12
+ const ciphertext = nacl.secretbox(messageBytes, nonce, key);
13
+ return {
14
+ cipher: encodeBase64(ciphertext),
15
+ nonce: encodeBase64(nonce),
16
+ };
17
+ }
18
+ decryptSymmetric({ encrypted, keyString, }) {
19
+ try {
20
+ const key = decodeBase64(keyString);
21
+ const ciphertextBytes = decodeBase64(encrypted.cipher);
22
+ const nonceBytes = decodeBase64(encrypted.nonce);
23
+ const decrypted = nacl.secretbox.open(ciphertextBytes, nonceBytes, key);
24
+ if (!decrypted) {
25
+ throw new Error("Decryption failed - invalid key or corrupted data");
26
+ }
27
+ const decoded = new TextDecoder().decode(decrypted);
28
+ return decoded;
29
+ }
30
+ catch (error) {
31
+ console.error("Decryption failed", error);
32
+ return null;
33
+ }
34
+ }
35
+ }
36
+ export default CryptoService;
37
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utilities/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO5D,MAAM,OAAO,aAAa;IACxB,oBAAoB;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IASD,gBAAgB,CAAC,EACf,SAAS,EACT,SAAS,GAIV;QACC,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAE5D,OAAO;YACL,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC;YAChC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;SAC3B,CAAC;IACJ,CAAC;IAQD,gBAAgB,CAAC,EACf,SAAS,EACT,SAAS,GAIV;QACC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAExE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpD,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PelicanAuthState } from "../types/types";
2
+ export declare class StateMachine {
3
+ private state;
4
+ private listeners;
5
+ get current(): PelicanAuthState;
6
+ transition(next: PelicanAuthState): void;
7
+ subscribe(fn: (s: PelicanAuthState) => void): () => boolean;
8
+ }
9
+ //# sourceMappingURL=stateMachine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateMachine.d.ts","sourceRoot":"","sources":["../../src/utilities/stateMachine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAA4C;IAE7D,IAAI,OAAO,qBAEV;IAED,UAAU,CAAC,IAAI,EAAE,gBAAgB;IAKjC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI;CAI5C"}
@@ -0,0 +1,18 @@
1
+ export class StateMachine {
2
+ constructor() {
3
+ this.state = "idle";
4
+ this.listeners = new Set();
5
+ }
6
+ get current() {
7
+ return this.state;
8
+ }
9
+ transition(next) {
10
+ this.state = next;
11
+ this.listeners.forEach((l) => l(next));
12
+ }
13
+ subscribe(fn) {
14
+ this.listeners.add(fn);
15
+ return () => this.listeners.delete(fn);
16
+ }
17
+ }
18
+ //# sourceMappingURL=stateMachine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stateMachine.js","sourceRoot":"","sources":["../../src/utilities/stateMachine.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IAAzB;QACU,UAAK,GAAqB,MAAM,CAAC;QACjC,cAAS,GAAG,IAAI,GAAG,EAAiC,CAAC;IAe/D,CAAC;IAbC,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,UAAU,CAAC,IAAsB;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,SAAS,CAAC,EAAiC;QACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ interface StorageOptions {
2
+ ttlMs?: number;
3
+ useSessionStorage?: boolean;
4
+ }
5
+ declare class AuthStorage {
6
+ private readonly prefix;
7
+ private readonly defaultTTL;
8
+ private memoryCache;
9
+ set(key: string, value: any, options?: StorageOptions): void;
10
+ get(key: string): any | null;
11
+ remove(key: string): void;
12
+ clear(): void;
13
+ private setMemory;
14
+ private getMemory;
15
+ }
16
+ declare const storage: AuthStorage;
17
+ export interface AuthSession {
18
+ sessionId: string;
19
+ sessionKey: string;
20
+ }
21
+ export declare const storeAuthSession: (sessionId: string, sessionKey: string, ttlMs?: number) => void;
22
+ export declare const getAuthSession: () => AuthSession | null;
23
+ export declare const clearAuthSession: () => void;
24
+ export declare const clearAllAuthData: () => void;
25
+ export default storage;
26
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/utilities/storage.ts"],"names":[],"mappings":"AAMA,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,cAAM,WAAW;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,WAAW,CACP;IAKZ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAE,cAAmB,GAAG,IAAI;IAsBhE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IA0B5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYzB,KAAK,IAAI,IAAI;IAoBb,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;CAWlB;AAGD,QAAA,MAAM,OAAO,aAAoB,CAAC;AAMlC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,QAAQ,MAAM,KACb,IAEF,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,IAE/C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAEnC,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,IAEnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,92 @@
1
+ class AuthStorage {
2
+ constructor() {
3
+ this.prefix = "pelican_auth_";
4
+ this.defaultTTL = 5 * 60 * 1000;
5
+ this.memoryCache = new Map();
6
+ }
7
+ set(key, value, options = {}) {
8
+ const { ttlMs = this.defaultTTL, useSessionStorage = true } = options;
9
+ const expiresAt = Date.now() + ttlMs;
10
+ const data = { value, expiresAt };
11
+ if (useSessionStorage) {
12
+ try {
13
+ sessionStorage.setItem(`${this.prefix}${key}`, JSON.stringify(data));
14
+ }
15
+ catch (error) {
16
+ console.warn("SessionStorage unavailable, using memory:", error);
17
+ this.setMemory(key, data);
18
+ }
19
+ }
20
+ else {
21
+ this.setMemory(key, data);
22
+ }
23
+ }
24
+ get(key) {
25
+ try {
26
+ const stored = sessionStorage.getItem(`${this.prefix}${key}`);
27
+ if (stored) {
28
+ const data = JSON.parse(stored);
29
+ if (Date.now() > data.expiresAt) {
30
+ this.remove(key);
31
+ return null;
32
+ }
33
+ return data.value;
34
+ }
35
+ }
36
+ catch (error) {
37
+ }
38
+ return this.getMemory(key);
39
+ }
40
+ remove(key) {
41
+ try {
42
+ sessionStorage.removeItem(`${this.prefix}${key}`);
43
+ }
44
+ catch (error) {
45
+ }
46
+ this.memoryCache.delete(key);
47
+ }
48
+ clear() {
49
+ try {
50
+ Object.keys(sessionStorage).forEach((key) => {
51
+ if (key.startsWith(this.prefix)) {
52
+ sessionStorage.removeItem(key);
53
+ }
54
+ });
55
+ }
56
+ catch (error) {
57
+ }
58
+ this.memoryCache.clear();
59
+ }
60
+ setMemory(key, data) {
61
+ this.memoryCache.set(key, data);
62
+ const ttl = data.expiresAt - Date.now();
63
+ setTimeout(() => {
64
+ this.memoryCache.delete(key);
65
+ }, ttl);
66
+ }
67
+ getMemory(key) {
68
+ const data = this.memoryCache.get(key);
69
+ if (!data)
70
+ return null;
71
+ if (Date.now() > data.expiresAt) {
72
+ this.memoryCache.delete(key);
73
+ return null;
74
+ }
75
+ return data.value;
76
+ }
77
+ }
78
+ const storage = new AuthStorage();
79
+ export const storeAuthSession = (sessionId, sessionKey, ttlMs) => {
80
+ storage.set("session", { sessionId, sessionKey }, { ttlMs });
81
+ };
82
+ export const getAuthSession = () => {
83
+ return storage.get("session");
84
+ };
85
+ export const clearAuthSession = () => {
86
+ storage.remove("session");
87
+ };
88
+ export const clearAllAuthData = () => {
89
+ storage.clear();
90
+ };
91
+ export default storage;
92
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/utilities/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { ISocketMessage } from "../types/types";
2
+ type TransportHandlers = {
3
+ onOpen?: () => void;
4
+ onMessage?: (msg: ISocketMessage) => void;
5
+ onError?: (err: Event) => void;
6
+ onClose?: (ev: CloseEvent) => void;
7
+ };
8
+ export declare class Transport {
9
+ private socket?;
10
+ private handlers;
11
+ private reconnectAttempts;
12
+ private maxReconnectAttempts;
13
+ private isExplicitlyClosed;
14
+ private url?;
15
+ constructor(handlers: TransportHandlers);
16
+ connect(url: string): void;
17
+ private attemptReconnect;
18
+ send(payload: ISocketMessage): void;
19
+ close(): void;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/utilities/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,KAAK,iBAAiB,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,GAAG,CAAC,CAAS;gBAET,QAAQ,EAAE,iBAAiB;IAIvC,OAAO,CAAC,GAAG,EAAE,MAAM;IA8BnB,OAAO,CAAC,gBAAgB;IAaxB,IAAI,CAAC,OAAO,EAAE,cAAc;IAM5B,KAAK;CAIN"}
@@ -0,0 +1,57 @@
1
+ export class Transport {
2
+ constructor(handlers) {
3
+ this.reconnectAttempts = 0;
4
+ this.maxReconnectAttempts = 5;
5
+ this.isExplicitlyClosed = false;
6
+ this.handlers = handlers;
7
+ }
8
+ connect(url) {
9
+ this.url = url;
10
+ this.isExplicitlyClosed = false;
11
+ this.socket = new WebSocket(url);
12
+ this.socket.onopen = () => {
13
+ this.reconnectAttempts = 0;
14
+ this.handlers.onOpen?.();
15
+ };
16
+ this.socket.onmessage = (e) => {
17
+ try {
18
+ const data = JSON.parse(e.data);
19
+ this.handlers.onMessage?.(data);
20
+ }
21
+ catch (err) {
22
+ console.error("Failed to parse message", err);
23
+ }
24
+ };
25
+ this.socket.onerror = (e) => {
26
+ this.handlers.onError?.(e);
27
+ };
28
+ this.socket.onclose = (e) => {
29
+ this.handlers.onClose?.(e);
30
+ if (!this.isExplicitlyClosed) {
31
+ this.attemptReconnect();
32
+ }
33
+ };
34
+ }
35
+ attemptReconnect() {
36
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
37
+ console.error("❌ Max reconnect attempts reached");
38
+ return;
39
+ }
40
+ this.reconnectAttempts++;
41
+ const delay = Math.pow(2, this.reconnectAttempts) * 500;
42
+ setTimeout(() => {
43
+ if (this.url)
44
+ this.connect(this.url);
45
+ }, delay);
46
+ }
47
+ send(payload) {
48
+ if (this.socket?.readyState === WebSocket.OPEN) {
49
+ this.socket.send(JSON.stringify(payload));
50
+ }
51
+ }
52
+ close() {
53
+ this.isExplicitlyClosed = true;
54
+ this.socket?.close();
55
+ }
56
+ }
57
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/utilities/transport.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,SAAS;IAQpB,YAAY,QAA2B;QAL/B,sBAAiB,GAAG,CAAC,CAAC;QACtB,yBAAoB,GAAG,CAAC,CAAC;QACzB,uBAAkB,GAAG,KAAK,CAAC;QAIjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACxB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAe,EAAE,EAAE;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAa,EAAE,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAG3B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC;QACxD,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,OAAuB;QAC1B,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pelican-identity/auth-core",
3
- "version": "1.2.8",
3
+ "version": "1.2.9",
4
4
  "description": "Framework-agnostic authentication SDK for Pelican Identity",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",