@aurabase/auth 0.5.2 → 0.5.3
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/index.cjs +88 -22
- package/dist/index.d.cts +14 -12
- package/dist/index.d.ts +14 -12
- package/dist/index.js +88 -22
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -633,25 +633,49 @@ var AuthService = class extends core.BaseService {
|
|
|
633
633
|
}
|
|
634
634
|
// -- Auth state change ------------------------------------------------------
|
|
635
635
|
onAuthStateChange(callback) {
|
|
636
|
-
|
|
637
|
-
|
|
636
|
+
const unsub = () => {
|
|
637
|
+
this._stateListeners.delete(callback);
|
|
638
|
+
};
|
|
639
|
+
const result = {
|
|
640
|
+
unsubscribe: unsub,
|
|
641
|
+
data: {
|
|
642
|
+
subscription: {
|
|
643
|
+
unsubscribe: unsub
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
};
|
|
647
|
+
if (this._disposed) return result;
|
|
638
648
|
this._stateListeners.add(callback);
|
|
639
649
|
const store = this.client.authStore;
|
|
640
650
|
queueMicrotask(() => {
|
|
641
651
|
if (this._stateListeners.has(callback)) {
|
|
642
|
-
|
|
652
|
+
const session = store.token && store.user ? {
|
|
653
|
+
access_token: store.token,
|
|
654
|
+
refresh_token: store.refreshToken ?? "",
|
|
655
|
+
accessToken: store.token,
|
|
656
|
+
refreshToken: store.refreshToken ?? "",
|
|
657
|
+
token_type: "Bearer",
|
|
658
|
+
expires_in: 900,
|
|
659
|
+
user: store.user
|
|
660
|
+
} : null;
|
|
661
|
+
callback({ event: "INITIAL_SESSION", user: store.user, accessToken: store.token, session });
|
|
643
662
|
}
|
|
644
663
|
});
|
|
645
|
-
return
|
|
646
|
-
unsubscribe: () => {
|
|
647
|
-
this._stateListeners.delete(callback);
|
|
648
|
-
}
|
|
649
|
-
};
|
|
664
|
+
return result;
|
|
650
665
|
}
|
|
651
666
|
_emitEvent(event, user, accessToken, extra) {
|
|
667
|
+
const session = accessToken && user ? {
|
|
668
|
+
access_token: accessToken,
|
|
669
|
+
refresh_token: this.client.authStore.refreshToken ?? "",
|
|
670
|
+
accessToken,
|
|
671
|
+
refreshToken: this.client.authStore.refreshToken ?? "",
|
|
672
|
+
token_type: "Bearer",
|
|
673
|
+
expires_in: 900,
|
|
674
|
+
user
|
|
675
|
+
} : null;
|
|
652
676
|
for (const cb of this._stateListeners) {
|
|
653
677
|
try {
|
|
654
|
-
cb({ event, user, accessToken, ...extra });
|
|
678
|
+
cb({ event, user, accessToken, session, ...extra });
|
|
655
679
|
} catch {
|
|
656
680
|
}
|
|
657
681
|
}
|
|
@@ -661,11 +685,29 @@ var AuthService = class extends core.BaseService {
|
|
|
661
685
|
const res = await this.request("POST", `${this.prefix}/register`, req);
|
|
662
686
|
if (res.data && !isMfaChallenge(res.data)) {
|
|
663
687
|
const tp = res.data;
|
|
688
|
+
tp.accessToken = tp.access_token;
|
|
689
|
+
tp.refreshToken = tp.refresh_token;
|
|
690
|
+
tp.session = {
|
|
691
|
+
access_token: tp.access_token,
|
|
692
|
+
refresh_token: tp.refresh_token,
|
|
693
|
+
accessToken: tp.access_token,
|
|
694
|
+
refreshToken: tp.refresh_token,
|
|
695
|
+
token_type: tp.token_type,
|
|
696
|
+
expires_in: tp.expires_in,
|
|
697
|
+
user: tp.user,
|
|
698
|
+
provider_token: tp.provider_token,
|
|
699
|
+
provider_refresh_token: tp.provider_refresh_token
|
|
700
|
+
};
|
|
664
701
|
this.client.authStore.save(tp.access_token, tp.refresh_token, tp.user);
|
|
665
702
|
this._emitEvent("SIGNED_IN", tp.user, tp.access_token);
|
|
666
703
|
}
|
|
667
704
|
if (res.data && isMfaChallenge(res.data)) {
|
|
668
705
|
const mfa = res.data;
|
|
706
|
+
mfa.mfaChallenge = {
|
|
707
|
+
mfaRequired: mfa.mfa_required,
|
|
708
|
+
mfaToken: mfa.mfa_token,
|
|
709
|
+
mfaSetupRequired: mfa.mfa_setup_required
|
|
710
|
+
};
|
|
669
711
|
this._emitEvent("MFA_CHALLENGE", null, null, {
|
|
670
712
|
mfaToken: mfa.mfa_token,
|
|
671
713
|
mfaSetupRequired: mfa.mfa_setup_required
|
|
@@ -677,11 +719,29 @@ var AuthService = class extends core.BaseService {
|
|
|
677
719
|
const res = await this.request("POST", `${this.prefix}/login`, req);
|
|
678
720
|
if (res.data && !isMfaChallenge(res.data)) {
|
|
679
721
|
const tp = res.data;
|
|
722
|
+
tp.accessToken = tp.access_token;
|
|
723
|
+
tp.refreshToken = tp.refresh_token;
|
|
724
|
+
tp.session = {
|
|
725
|
+
access_token: tp.access_token,
|
|
726
|
+
refresh_token: tp.refresh_token,
|
|
727
|
+
accessToken: tp.access_token,
|
|
728
|
+
refreshToken: tp.refresh_token,
|
|
729
|
+
token_type: tp.token_type,
|
|
730
|
+
expires_in: tp.expires_in,
|
|
731
|
+
user: tp.user,
|
|
732
|
+
provider_token: tp.provider_token,
|
|
733
|
+
provider_refresh_token: tp.provider_refresh_token
|
|
734
|
+
};
|
|
680
735
|
this.client.authStore.save(tp.access_token, tp.refresh_token, tp.user);
|
|
681
736
|
this._emitEvent("SIGNED_IN", tp.user, tp.access_token);
|
|
682
737
|
}
|
|
683
738
|
if (res.data && isMfaChallenge(res.data)) {
|
|
684
739
|
const mfa = res.data;
|
|
740
|
+
mfa.mfaChallenge = {
|
|
741
|
+
mfaRequired: mfa.mfa_required,
|
|
742
|
+
mfaToken: mfa.mfa_token,
|
|
743
|
+
mfaSetupRequired: mfa.mfa_setup_required
|
|
744
|
+
};
|
|
685
745
|
this._emitEvent("MFA_CHALLENGE", null, null, {
|
|
686
746
|
mfaToken: mfa.mfa_token,
|
|
687
747
|
mfaSetupRequired: mfa.mfa_setup_required
|
|
@@ -822,22 +882,28 @@ var AuthService = class extends core.BaseService {
|
|
|
822
882
|
/**
|
|
823
883
|
* Session courante lue depuis le store (synchrone en pratique, pas d'appel réseau).
|
|
824
884
|
*
|
|
825
|
-
*
|
|
826
|
-
*
|
|
827
|
-
*
|
|
828
|
-
* `getSession()` renvoie directement `{accessToken, user}` (pas d'enveloppe
|
|
829
|
-
* `{data, error}`, pas de `refreshToken`/`expiresAt`). Ce choix est délibéré :
|
|
830
|
-
* cette méthode ne fait aucune requête réseau et ne peut donc jamais échouer
|
|
831
|
-
* (`error` serait toujours `null`) — l'envelopper aurait été un contrat menteur.
|
|
832
|
-
* Le `refreshToken` n'est pas exposé pour éviter qu'un consommateur le manipule
|
|
833
|
-
* hors du store (contrairement à `accessToken`, souvent nécessaire pour des appels
|
|
834
|
-
* `fetch` manuels côté app). Pour la session complète, lire `client.authStore`
|
|
835
|
-
* directement (`.token`, `.refreshToken`, `.user`, `.isValid`).
|
|
885
|
+
* DOUBLE COMPATIBILITÉ DX (Parité Supabase & compatibilité existante Aurabase) :
|
|
886
|
+
* - Permet `const { data: { session }, error } = await aura.auth.getSession()` (forme canonique)
|
|
887
|
+
* - Permet `const { accessToken, user } = await aura.auth.getSession()` (forme plate historique)
|
|
836
888
|
*/
|
|
837
889
|
getSession() {
|
|
890
|
+
const token = this.client.authStore.token;
|
|
891
|
+
const user = this.client.authStore.user;
|
|
892
|
+
const session = token && user ? {
|
|
893
|
+
access_token: token,
|
|
894
|
+
refresh_token: this.client.authStore.refreshToken ?? "",
|
|
895
|
+
accessToken: token,
|
|
896
|
+
refreshToken: this.client.authStore.refreshToken ?? "",
|
|
897
|
+
token_type: "Bearer",
|
|
898
|
+
expires_in: 900,
|
|
899
|
+
user
|
|
900
|
+
} : null;
|
|
838
901
|
return Promise.resolve({
|
|
839
|
-
|
|
840
|
-
|
|
902
|
+
data: { session },
|
|
903
|
+
error: null,
|
|
904
|
+
accessToken: token,
|
|
905
|
+
access_token: token,
|
|
906
|
+
user
|
|
841
907
|
});
|
|
842
908
|
}
|
|
843
909
|
async setSession(accessToken, refreshToken) {
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseService, AuraResponse, AdminUser, AdminCreateUserRequest, AdminUpdateUserRequest, GenerateLinkType, GenerateLinkResult, UserStats, IdentityInfo, AdminSessionInfo, AuditLogEntry, AuthSettings, AuthSettingsUpdate, EmailTemplateUpdate, AuraClientLike, AuthChangePayload, SignUpRequest, LoginResponse, SignInRequest, OAuthSignInOptions, MagicLinkRequest, TokenPair, User, SessionInfo, GetClaimsResult, UpdateUserRequest, PasswordResetRequest, MfaEnrollResponse, MfaVerifyRequest, MfaChallenge } from '@aurabase/core';
|
|
1
|
+
import { BaseService, AuraResponse, AdminUser, AdminCreateUserRequest, AdminUpdateUserRequest, GenerateLinkType, GenerateLinkResult, UserStats, IdentityInfo, AdminSessionInfo, AuditLogEntry, AuthSettings, AuthSettingsUpdate, EmailTemplateUpdate, AuraClientLike, AuthChangePayload, SignUpRequest, LoginResponse, SignInRequest, OAuthSignInOptions, MagicLinkRequest, TokenPair, Session, User, SessionInfo, GetClaimsResult, UpdateUserRequest, PasswordResetRequest, MfaEnrollResponse, MfaVerifyRequest, MfaChallenge } from '@aurabase/core';
|
|
2
2
|
|
|
3
3
|
declare class AuthAdminService extends BaseService {
|
|
4
4
|
/**
|
|
@@ -206,6 +206,11 @@ declare class AuthService extends BaseService {
|
|
|
206
206
|
private get _oauthInitiatedKey();
|
|
207
207
|
onAuthStateChange(callback: AuthStateCallback): {
|
|
208
208
|
unsubscribe: () => void;
|
|
209
|
+
data: {
|
|
210
|
+
subscription: {
|
|
211
|
+
unsubscribe: () => void;
|
|
212
|
+
};
|
|
213
|
+
};
|
|
209
214
|
};
|
|
210
215
|
private _emitEvent;
|
|
211
216
|
signUp(req: SignUpRequest): Promise<AuraResponse<LoginResponse>>;
|
|
@@ -252,20 +257,17 @@ declare class AuthService extends BaseService {
|
|
|
252
257
|
/**
|
|
253
258
|
* Session courante lue depuis le store (synchrone en pratique, pas d'appel réseau).
|
|
254
259
|
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
* `getSession()` renvoie directement `{accessToken, user}` (pas d'enveloppe
|
|
259
|
-
* `{data, error}`, pas de `refreshToken`/`expiresAt`). Ce choix est délibéré :
|
|
260
|
-
* cette méthode ne fait aucune requête réseau et ne peut donc jamais échouer
|
|
261
|
-
* (`error` serait toujours `null`) — l'envelopper aurait été un contrat menteur.
|
|
262
|
-
* Le `refreshToken` n'est pas exposé pour éviter qu'un consommateur le manipule
|
|
263
|
-
* hors du store (contrairement à `accessToken`, souvent nécessaire pour des appels
|
|
264
|
-
* `fetch` manuels côté app). Pour la session complète, lire `client.authStore`
|
|
265
|
-
* directement (`.token`, `.refreshToken`, `.user`, `.isValid`).
|
|
260
|
+
* DOUBLE COMPATIBILITÉ DX (Parité Supabase & compatibilité existante Aurabase) :
|
|
261
|
+
* - Permet `const { data: { session }, error } = await aura.auth.getSession()` (forme canonique)
|
|
262
|
+
* - Permet `const { accessToken, user } = await aura.auth.getSession()` (forme plate historique)
|
|
266
263
|
*/
|
|
267
264
|
getSession(): Promise<{
|
|
265
|
+
data: {
|
|
266
|
+
session: Session | null;
|
|
267
|
+
};
|
|
268
|
+
error: null;
|
|
268
269
|
accessToken: string | null;
|
|
270
|
+
access_token: string | null;
|
|
269
271
|
user: User | null;
|
|
270
272
|
}>;
|
|
271
273
|
setSession(accessToken: string, refreshToken: string): Promise<AuraResponse<User>>;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseService, AuraResponse, AdminUser, AdminCreateUserRequest, AdminUpdateUserRequest, GenerateLinkType, GenerateLinkResult, UserStats, IdentityInfo, AdminSessionInfo, AuditLogEntry, AuthSettings, AuthSettingsUpdate, EmailTemplateUpdate, AuraClientLike, AuthChangePayload, SignUpRequest, LoginResponse, SignInRequest, OAuthSignInOptions, MagicLinkRequest, TokenPair, User, SessionInfo, GetClaimsResult, UpdateUserRequest, PasswordResetRequest, MfaEnrollResponse, MfaVerifyRequest, MfaChallenge } from '@aurabase/core';
|
|
1
|
+
import { BaseService, AuraResponse, AdminUser, AdminCreateUserRequest, AdminUpdateUserRequest, GenerateLinkType, GenerateLinkResult, UserStats, IdentityInfo, AdminSessionInfo, AuditLogEntry, AuthSettings, AuthSettingsUpdate, EmailTemplateUpdate, AuraClientLike, AuthChangePayload, SignUpRequest, LoginResponse, SignInRequest, OAuthSignInOptions, MagicLinkRequest, TokenPair, Session, User, SessionInfo, GetClaimsResult, UpdateUserRequest, PasswordResetRequest, MfaEnrollResponse, MfaVerifyRequest, MfaChallenge } from '@aurabase/core';
|
|
2
2
|
|
|
3
3
|
declare class AuthAdminService extends BaseService {
|
|
4
4
|
/**
|
|
@@ -206,6 +206,11 @@ declare class AuthService extends BaseService {
|
|
|
206
206
|
private get _oauthInitiatedKey();
|
|
207
207
|
onAuthStateChange(callback: AuthStateCallback): {
|
|
208
208
|
unsubscribe: () => void;
|
|
209
|
+
data: {
|
|
210
|
+
subscription: {
|
|
211
|
+
unsubscribe: () => void;
|
|
212
|
+
};
|
|
213
|
+
};
|
|
209
214
|
};
|
|
210
215
|
private _emitEvent;
|
|
211
216
|
signUp(req: SignUpRequest): Promise<AuraResponse<LoginResponse>>;
|
|
@@ -252,20 +257,17 @@ declare class AuthService extends BaseService {
|
|
|
252
257
|
/**
|
|
253
258
|
* Session courante lue depuis le store (synchrone en pratique, pas d'appel réseau).
|
|
254
259
|
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
* `getSession()` renvoie directement `{accessToken, user}` (pas d'enveloppe
|
|
259
|
-
* `{data, error}`, pas de `refreshToken`/`expiresAt`). Ce choix est délibéré :
|
|
260
|
-
* cette méthode ne fait aucune requête réseau et ne peut donc jamais échouer
|
|
261
|
-
* (`error` serait toujours `null`) — l'envelopper aurait été un contrat menteur.
|
|
262
|
-
* Le `refreshToken` n'est pas exposé pour éviter qu'un consommateur le manipule
|
|
263
|
-
* hors du store (contrairement à `accessToken`, souvent nécessaire pour des appels
|
|
264
|
-
* `fetch` manuels côté app). Pour la session complète, lire `client.authStore`
|
|
265
|
-
* directement (`.token`, `.refreshToken`, `.user`, `.isValid`).
|
|
260
|
+
* DOUBLE COMPATIBILITÉ DX (Parité Supabase & compatibilité existante Aurabase) :
|
|
261
|
+
* - Permet `const { data: { session }, error } = await aura.auth.getSession()` (forme canonique)
|
|
262
|
+
* - Permet `const { accessToken, user } = await aura.auth.getSession()` (forme plate historique)
|
|
266
263
|
*/
|
|
267
264
|
getSession(): Promise<{
|
|
265
|
+
data: {
|
|
266
|
+
session: Session | null;
|
|
267
|
+
};
|
|
268
|
+
error: null;
|
|
268
269
|
accessToken: string | null;
|
|
270
|
+
access_token: string | null;
|
|
269
271
|
user: User | null;
|
|
270
272
|
}>;
|
|
271
273
|
setSession(accessToken: string, refreshToken: string): Promise<AuraResponse<User>>;
|
package/dist/index.js
CHANGED
|
@@ -631,25 +631,49 @@ var AuthService = class extends BaseService {
|
|
|
631
631
|
}
|
|
632
632
|
// -- Auth state change ------------------------------------------------------
|
|
633
633
|
onAuthStateChange(callback) {
|
|
634
|
-
|
|
635
|
-
|
|
634
|
+
const unsub = () => {
|
|
635
|
+
this._stateListeners.delete(callback);
|
|
636
|
+
};
|
|
637
|
+
const result = {
|
|
638
|
+
unsubscribe: unsub,
|
|
639
|
+
data: {
|
|
640
|
+
subscription: {
|
|
641
|
+
unsubscribe: unsub
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
};
|
|
645
|
+
if (this._disposed) return result;
|
|
636
646
|
this._stateListeners.add(callback);
|
|
637
647
|
const store = this.client.authStore;
|
|
638
648
|
queueMicrotask(() => {
|
|
639
649
|
if (this._stateListeners.has(callback)) {
|
|
640
|
-
|
|
650
|
+
const session = store.token && store.user ? {
|
|
651
|
+
access_token: store.token,
|
|
652
|
+
refresh_token: store.refreshToken ?? "",
|
|
653
|
+
accessToken: store.token,
|
|
654
|
+
refreshToken: store.refreshToken ?? "",
|
|
655
|
+
token_type: "Bearer",
|
|
656
|
+
expires_in: 900,
|
|
657
|
+
user: store.user
|
|
658
|
+
} : null;
|
|
659
|
+
callback({ event: "INITIAL_SESSION", user: store.user, accessToken: store.token, session });
|
|
641
660
|
}
|
|
642
661
|
});
|
|
643
|
-
return
|
|
644
|
-
unsubscribe: () => {
|
|
645
|
-
this._stateListeners.delete(callback);
|
|
646
|
-
}
|
|
647
|
-
};
|
|
662
|
+
return result;
|
|
648
663
|
}
|
|
649
664
|
_emitEvent(event, user, accessToken, extra) {
|
|
665
|
+
const session = accessToken && user ? {
|
|
666
|
+
access_token: accessToken,
|
|
667
|
+
refresh_token: this.client.authStore.refreshToken ?? "",
|
|
668
|
+
accessToken,
|
|
669
|
+
refreshToken: this.client.authStore.refreshToken ?? "",
|
|
670
|
+
token_type: "Bearer",
|
|
671
|
+
expires_in: 900,
|
|
672
|
+
user
|
|
673
|
+
} : null;
|
|
650
674
|
for (const cb of this._stateListeners) {
|
|
651
675
|
try {
|
|
652
|
-
cb({ event, user, accessToken, ...extra });
|
|
676
|
+
cb({ event, user, accessToken, session, ...extra });
|
|
653
677
|
} catch {
|
|
654
678
|
}
|
|
655
679
|
}
|
|
@@ -659,11 +683,29 @@ var AuthService = class extends BaseService {
|
|
|
659
683
|
const res = await this.request("POST", `${this.prefix}/register`, req);
|
|
660
684
|
if (res.data && !isMfaChallenge(res.data)) {
|
|
661
685
|
const tp = res.data;
|
|
686
|
+
tp.accessToken = tp.access_token;
|
|
687
|
+
tp.refreshToken = tp.refresh_token;
|
|
688
|
+
tp.session = {
|
|
689
|
+
access_token: tp.access_token,
|
|
690
|
+
refresh_token: tp.refresh_token,
|
|
691
|
+
accessToken: tp.access_token,
|
|
692
|
+
refreshToken: tp.refresh_token,
|
|
693
|
+
token_type: tp.token_type,
|
|
694
|
+
expires_in: tp.expires_in,
|
|
695
|
+
user: tp.user,
|
|
696
|
+
provider_token: tp.provider_token,
|
|
697
|
+
provider_refresh_token: tp.provider_refresh_token
|
|
698
|
+
};
|
|
662
699
|
this.client.authStore.save(tp.access_token, tp.refresh_token, tp.user);
|
|
663
700
|
this._emitEvent("SIGNED_IN", tp.user, tp.access_token);
|
|
664
701
|
}
|
|
665
702
|
if (res.data && isMfaChallenge(res.data)) {
|
|
666
703
|
const mfa = res.data;
|
|
704
|
+
mfa.mfaChallenge = {
|
|
705
|
+
mfaRequired: mfa.mfa_required,
|
|
706
|
+
mfaToken: mfa.mfa_token,
|
|
707
|
+
mfaSetupRequired: mfa.mfa_setup_required
|
|
708
|
+
};
|
|
667
709
|
this._emitEvent("MFA_CHALLENGE", null, null, {
|
|
668
710
|
mfaToken: mfa.mfa_token,
|
|
669
711
|
mfaSetupRequired: mfa.mfa_setup_required
|
|
@@ -675,11 +717,29 @@ var AuthService = class extends BaseService {
|
|
|
675
717
|
const res = await this.request("POST", `${this.prefix}/login`, req);
|
|
676
718
|
if (res.data && !isMfaChallenge(res.data)) {
|
|
677
719
|
const tp = res.data;
|
|
720
|
+
tp.accessToken = tp.access_token;
|
|
721
|
+
tp.refreshToken = tp.refresh_token;
|
|
722
|
+
tp.session = {
|
|
723
|
+
access_token: tp.access_token,
|
|
724
|
+
refresh_token: tp.refresh_token,
|
|
725
|
+
accessToken: tp.access_token,
|
|
726
|
+
refreshToken: tp.refresh_token,
|
|
727
|
+
token_type: tp.token_type,
|
|
728
|
+
expires_in: tp.expires_in,
|
|
729
|
+
user: tp.user,
|
|
730
|
+
provider_token: tp.provider_token,
|
|
731
|
+
provider_refresh_token: tp.provider_refresh_token
|
|
732
|
+
};
|
|
678
733
|
this.client.authStore.save(tp.access_token, tp.refresh_token, tp.user);
|
|
679
734
|
this._emitEvent("SIGNED_IN", tp.user, tp.access_token);
|
|
680
735
|
}
|
|
681
736
|
if (res.data && isMfaChallenge(res.data)) {
|
|
682
737
|
const mfa = res.data;
|
|
738
|
+
mfa.mfaChallenge = {
|
|
739
|
+
mfaRequired: mfa.mfa_required,
|
|
740
|
+
mfaToken: mfa.mfa_token,
|
|
741
|
+
mfaSetupRequired: mfa.mfa_setup_required
|
|
742
|
+
};
|
|
683
743
|
this._emitEvent("MFA_CHALLENGE", null, null, {
|
|
684
744
|
mfaToken: mfa.mfa_token,
|
|
685
745
|
mfaSetupRequired: mfa.mfa_setup_required
|
|
@@ -820,22 +880,28 @@ var AuthService = class extends BaseService {
|
|
|
820
880
|
/**
|
|
821
881
|
* Session courante lue depuis le store (synchrone en pratique, pas d'appel réseau).
|
|
822
882
|
*
|
|
823
|
-
*
|
|
824
|
-
*
|
|
825
|
-
*
|
|
826
|
-
* `getSession()` renvoie directement `{accessToken, user}` (pas d'enveloppe
|
|
827
|
-
* `{data, error}`, pas de `refreshToken`/`expiresAt`). Ce choix est délibéré :
|
|
828
|
-
* cette méthode ne fait aucune requête réseau et ne peut donc jamais échouer
|
|
829
|
-
* (`error` serait toujours `null`) — l'envelopper aurait été un contrat menteur.
|
|
830
|
-
* Le `refreshToken` n'est pas exposé pour éviter qu'un consommateur le manipule
|
|
831
|
-
* hors du store (contrairement à `accessToken`, souvent nécessaire pour des appels
|
|
832
|
-
* `fetch` manuels côté app). Pour la session complète, lire `client.authStore`
|
|
833
|
-
* directement (`.token`, `.refreshToken`, `.user`, `.isValid`).
|
|
883
|
+
* DOUBLE COMPATIBILITÉ DX (Parité Supabase & compatibilité existante Aurabase) :
|
|
884
|
+
* - Permet `const { data: { session }, error } = await aura.auth.getSession()` (forme canonique)
|
|
885
|
+
* - Permet `const { accessToken, user } = await aura.auth.getSession()` (forme plate historique)
|
|
834
886
|
*/
|
|
835
887
|
getSession() {
|
|
888
|
+
const token = this.client.authStore.token;
|
|
889
|
+
const user = this.client.authStore.user;
|
|
890
|
+
const session = token && user ? {
|
|
891
|
+
access_token: token,
|
|
892
|
+
refresh_token: this.client.authStore.refreshToken ?? "",
|
|
893
|
+
accessToken: token,
|
|
894
|
+
refreshToken: this.client.authStore.refreshToken ?? "",
|
|
895
|
+
token_type: "Bearer",
|
|
896
|
+
expires_in: 900,
|
|
897
|
+
user
|
|
898
|
+
} : null;
|
|
836
899
|
return Promise.resolve({
|
|
837
|
-
|
|
838
|
-
|
|
900
|
+
data: { session },
|
|
901
|
+
error: null,
|
|
902
|
+
accessToken: token,
|
|
903
|
+
access_token: token,
|
|
904
|
+
user
|
|
839
905
|
});
|
|
840
906
|
}
|
|
841
907
|
async setSession(accessToken, refreshToken) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aurabase/auth",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "Service d'authentification du SDK Aurabase (sessions, OAuth/PKCE, MFA, magic link, OTP, admin)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"authentication"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@aurabase/core": "0.5.
|
|
49
|
+
"@aurabase/core": "0.5.3"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "20.14.15",
|