@anarchitects/auth-nest 0.4.2 → 0.5.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.
- package/README.md +110 -37
- package/package.json +25 -12
- package/src/application/application.module-definition.d.ts +4 -21
- package/src/application/application.module-definition.js.map +1 -1
- package/src/application/application.module.d.ts +5 -22
- package/src/application/application.module.js +59 -8
- package/src/application/application.module.js.map +1 -1
- package/src/application/factories/ability.factory.js +3 -3
- package/src/application/factories/ability.factory.js.map +1 -1
- package/src/application/index.d.ts +8 -4
- package/src/application/index.js +7 -4
- package/src/application/index.js.map +1 -1
- package/src/application/resource-authorization.tokens.d.ts +1 -0
- package/src/application/resource-authorization.tokens.js +5 -0
- package/src/application/resource-authorization.tokens.js.map +1 -0
- package/src/application/resource-authorization.types.d.ts +16 -0
- package/src/application/resource-authorization.types.js +3 -0
- package/src/application/resource-authorization.types.js.map +1 -0
- package/src/application/services/auth-engine.port.d.ts +42 -0
- package/src/application/services/auth-engine.port.js +12 -0
- package/src/application/services/auth-engine.port.js.map +1 -0
- package/src/application/services/auth-orchestration.service.d.ts +41 -0
- package/src/application/services/auth-orchestration.service.js +161 -0
- package/src/application/services/auth-orchestration.service.js.map +1 -0
- package/src/application/services/jwt-auth.service.d.ts +6 -36
- package/src/application/services/jwt-auth.service.js +8 -201
- package/src/application/services/jwt-auth.service.js.map +1 -1
- package/src/application/services/persisted-policy-rule.d.ts +2 -0
- package/src/application/services/persisted-policy-rule.js +20 -0
- package/src/application/services/persisted-policy-rule.js.map +1 -0
- package/src/application/services/policies.service.js +7 -10
- package/src/application/services/policies.service.js.map +1 -1
- package/src/application/services/resource-authorization.d.ts +5 -0
- package/src/application/services/resource-authorization.js +18 -0
- package/src/application/services/resource-authorization.js.map +1 -0
- package/src/application/strategies/{jwt/strategy.d.ts → jwt-strategy.d.ts} +2 -1
- package/src/application/strategies/{jwt/strategy.js → jwt-strategy.js} +6 -4
- package/src/application/strategies/jwt-strategy.js.map +1 -0
- package/src/auth.module.d.ts +4 -11
- package/src/auth.module.js +40 -24
- package/src/auth.module.js.map +1 -1
- package/src/config/auth.config.d.ts +64 -0
- package/src/config/auth.config.js +115 -7
- package/src/config/auth.config.js.map +1 -1
- package/src/config/index.d.ts +1 -0
- package/src/config/index.js +1 -0
- package/src/config/index.js.map +1 -1
- package/src/config/module-options.d.ts +108 -0
- package/src/config/module-options.js +111 -0
- package/src/config/module-options.js.map +1 -0
- package/src/infrastructure-engine/better-auth/better-auth-auth-engine.adapter.d.ts +21 -0
- package/src/infrastructure-engine/better-auth/better-auth-auth-engine.adapter.js +180 -0
- package/src/infrastructure-engine/better-auth/better-auth-auth-engine.adapter.js.map +1 -0
- package/src/infrastructure-engine/better-auth/better-auth-spike.harness.d.ts +17 -0
- package/src/infrastructure-engine/better-auth/better-auth-spike.harness.js +32 -0
- package/src/infrastructure-engine/better-auth/better-auth-spike.harness.js.map +1 -0
- package/src/infrastructure-engine/better-auth/better-auth.module-loader.d.ts +7 -0
- package/src/infrastructure-engine/better-auth/better-auth.module-loader.js +15 -0
- package/src/infrastructure-engine/better-auth/better-auth.module-loader.js.map +1 -0
- package/src/infrastructure-engine/better-auth/dynamic-import.d.ts +1 -0
- package/src/infrastructure-engine/better-auth/dynamic-import.js +9 -0
- package/src/infrastructure-engine/better-auth/dynamic-import.js.map +1 -0
- package/src/infrastructure-engine/legacy-jwt-auth-engine.adapter.d.ts +22 -0
- package/src/infrastructure-engine/legacy-jwt-auth-engine.adapter.js +131 -0
- package/src/infrastructure-engine/legacy-jwt-auth-engine.adapter.js.map +1 -0
- package/src/infrastructure-mailer/index.d.ts +1 -0
- package/src/infrastructure-mailer/mailer.module.d.ts +4 -0
- package/src/infrastructure-mailer/mailer.module.js +31 -6
- package/src/infrastructure-mailer/mailer.module.js.map +1 -1
- package/src/infrastructure-persistence/index.d.ts +1 -0
- package/src/infrastructure-persistence/persistence.module-definition.d.ts +4 -9
- package/src/infrastructure-persistence/persistence.module-definition.js.map +1 -1
- package/src/infrastructure-persistence/persistence.module.d.ts +4 -2
- package/src/infrastructure-persistence/persistence.module.js +21 -4
- package/src/infrastructure-persistence/persistence.module.js.map +1 -1
- package/src/presentation/authorized-resource.request.d.ts +7 -0
- package/src/presentation/authorized-resource.request.js +16 -0
- package/src/presentation/authorized-resource.request.js.map +1 -0
- package/src/presentation/decorators/authorize-resource.decorator.d.ts +3 -0
- package/src/presentation/decorators/authorize-resource.decorator.js +9 -0
- package/src/presentation/decorators/authorize-resource.decorator.js.map +1 -0
- package/src/presentation/decorators/authorized-resource.decorator.d.ts +2 -0
- package/src/presentation/decorators/authorized-resource.decorator.js +32 -0
- package/src/presentation/decorators/authorized-resource.decorator.js.map +1 -0
- package/src/presentation/decorators/policies.decorator.d.ts +2 -2
- package/src/presentation/decorators/policies.decorator.js.map +1 -1
- package/src/presentation/guards/policies.guard.js +6 -5
- package/src/presentation/guards/policies.guard.js.map +1 -1
- package/src/presentation/guards/resource-authorization.guard.d.ts +11 -0
- package/src/presentation/guards/resource-authorization.guard.js +55 -0
- package/src/presentation/guards/resource-authorization.guard.js.map +1 -0
- package/src/presentation/guards/route-policy-matcher.d.ts +1 -0
- package/src/presentation/guards/route-policy-matcher.js +6 -0
- package/src/presentation/guards/route-policy-matcher.js.map +1 -0
- package/src/presentation/index.d.ts +5 -0
- package/src/presentation/index.js +4 -0
- package/src/presentation/index.js.map +1 -1
- package/src/presentation/presentation.module.d.ts +4 -0
- package/src/presentation/presentation.module.js +43 -2
- package/src/presentation/presentation.module.js.map +1 -1
- package/src/presentation/route-policy.d.ts +1 -0
- package/src/presentation/route-policy.js +3 -0
- package/src/presentation/route-policy.js.map +1 -0
- package/src/application/strategies/jwt/strategy.js.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { LoginRequestDTO, LoginResponseDTO, LogoutRequestDTO, RefreshTokenRequestDTO } from '@anarchitects/auth-ts/dtos';
|
|
2
|
+
import type { ResolvedAuthApplicationModuleOptions } from '../../config';
|
|
3
|
+
import { AuthEngineCapabilityReport, AuthEnginePort, AuthPasskeySignInInput, AuthSignOutOrRefreshInput, AuthSocialSignInInput } from '../../application/services/auth-engine.port';
|
|
4
|
+
export declare class BetterAuthAuthEngineAdapter implements AuthEnginePort {
|
|
5
|
+
private readonly options;
|
|
6
|
+
private authInstancePromise;
|
|
7
|
+
constructor(options: ResolvedAuthApplicationModuleOptions);
|
|
8
|
+
describeCapabilities(): Promise<AuthEngineCapabilityReport>;
|
|
9
|
+
login(dto: LoginRequestDTO): Promise<LoginResponseDTO>;
|
|
10
|
+
logout(_dto: LogoutRequestDTO): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
refreshTokens(userId: string, dto: RefreshTokenRequestDTO): Promise<LoginResponseDTO>;
|
|
14
|
+
passwordSignIn(dto: LoginRequestDTO): Promise<LoginResponseDTO>;
|
|
15
|
+
passkeySignIn(input: AuthPasskeySignInInput): Promise<unknown>;
|
|
16
|
+
socialSignIn(input: AuthSocialSignInInput): Promise<unknown>;
|
|
17
|
+
signOutOrRefresh(input: AuthSignOutOrRefreshInput): Promise<unknown>;
|
|
18
|
+
private getAuthInstance;
|
|
19
|
+
private createAuthInstance;
|
|
20
|
+
private isLoginResponse;
|
|
21
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BetterAuthAuthEngineAdapter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const application_module_definition_1 = require("../../application/application.module-definition");
|
|
7
|
+
const better_auth_module_loader_1 = require("./better-auth.module-loader");
|
|
8
|
+
const dynamic_import_1 = require("./dynamic-import");
|
|
9
|
+
let BetterAuthAuthEngineAdapter = class BetterAuthAuthEngineAdapter {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.authInstancePromise = null;
|
|
13
|
+
}
|
|
14
|
+
async describeCapabilities() {
|
|
15
|
+
const hasGithubConfig = Boolean(this.options.spike.socialProviders.github?.clientId &&
|
|
16
|
+
this.options.spike.socialProviders.github?.clientSecret);
|
|
17
|
+
return {
|
|
18
|
+
engine: 'better-auth',
|
|
19
|
+
flows: [
|
|
20
|
+
{
|
|
21
|
+
flow: 'password-sign-in',
|
|
22
|
+
status: 'supported',
|
|
23
|
+
notes: 'Spike adapter maps email-password auth through Better Auth internal APIs.',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
flow: 'passkey-sign-in',
|
|
27
|
+
status: this.options.features.passkeys ? 'supported' : 'needs-config',
|
|
28
|
+
notes: this.options.features.passkeys
|
|
29
|
+
? 'Passkey plugin is enabled for proof-harness execution.'
|
|
30
|
+
: 'Enable auth feature flag `passkeys` before running the passkey proof.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
flow: 'social-sign-in',
|
|
34
|
+
status: this.options.features.social && hasGithubConfig
|
|
35
|
+
? 'supported'
|
|
36
|
+
: 'needs-config',
|
|
37
|
+
notes: this.options.features.social && hasGithubConfig
|
|
38
|
+
? 'GitHub social sign-in is configured for the proof harness.'
|
|
39
|
+
: 'Enable social feature flag and provide GitHub client credentials.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
flow: 'sign-out-or-refresh',
|
|
43
|
+
status: 'supported',
|
|
44
|
+
notes: this.options.sessionMode === 'session'
|
|
45
|
+
? 'Better Auth session sign-out is the spike proof path.'
|
|
46
|
+
: 'Better Auth sign-out is available; session-vs-jwt default remains an ADR decision.',
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
login(dto) {
|
|
52
|
+
return this.passwordSignIn(dto);
|
|
53
|
+
}
|
|
54
|
+
logout(_dto) {
|
|
55
|
+
return Promise.reject(new Error('Better Auth logout via the legacy LogoutRequestDTO is unavailable in the spike adapter.'));
|
|
56
|
+
}
|
|
57
|
+
async refreshTokens(userId, dto) {
|
|
58
|
+
const result = await this.signOutOrRefresh({
|
|
59
|
+
mode: 'refresh',
|
|
60
|
+
userId,
|
|
61
|
+
dto,
|
|
62
|
+
});
|
|
63
|
+
if (this.isLoginResponse(result)) {
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
throw new Error('Better Auth refresh-token mapping is unavailable in the spike adapter.');
|
|
67
|
+
}
|
|
68
|
+
async passwordSignIn(dto) {
|
|
69
|
+
const auth = await this.getAuthInstance();
|
|
70
|
+
if (!auth.api?.signInEmail) {
|
|
71
|
+
throw new Error('Better Auth email sign-in API is unavailable.');
|
|
72
|
+
}
|
|
73
|
+
const result = (await auth.api.signInEmail({
|
|
74
|
+
body: {
|
|
75
|
+
email: dto.credential,
|
|
76
|
+
password: dto.password,
|
|
77
|
+
},
|
|
78
|
+
}));
|
|
79
|
+
return {
|
|
80
|
+
accessToken: result.accessToken ??
|
|
81
|
+
result.token ??
|
|
82
|
+
result.session?.token ??
|
|
83
|
+
'better-auth-session',
|
|
84
|
+
refreshToken: result.refreshToken ??
|
|
85
|
+
result.token ??
|
|
86
|
+
result.session?.token ??
|
|
87
|
+
'better-auth-session',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async passkeySignIn(input) {
|
|
91
|
+
const auth = await this.getAuthInstance();
|
|
92
|
+
if (!auth.api?.signInPasskey) {
|
|
93
|
+
throw new Error('Better Auth passkey API is unavailable.');
|
|
94
|
+
}
|
|
95
|
+
return auth.api.signInPasskey({
|
|
96
|
+
body: { autoFill: input.autoFill },
|
|
97
|
+
headers: input.headers,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
async socialSignIn(input) {
|
|
101
|
+
const auth = await this.getAuthInstance();
|
|
102
|
+
if (!auth.api?.signInSocial) {
|
|
103
|
+
throw new Error('Better Auth social sign-in API is unavailable.');
|
|
104
|
+
}
|
|
105
|
+
return auth.api.signInSocial({
|
|
106
|
+
body: {
|
|
107
|
+
provider: input.provider,
|
|
108
|
+
callbackURL: input.callbackURL,
|
|
109
|
+
errorCallbackURL: input.errorCallbackURL,
|
|
110
|
+
newUserCallbackURL: input.newUserCallbackURL,
|
|
111
|
+
disableRedirect: true,
|
|
112
|
+
},
|
|
113
|
+
headers: input.headers,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async signOutOrRefresh(input) {
|
|
117
|
+
if (input.mode === 'refresh') {
|
|
118
|
+
return {
|
|
119
|
+
mode: 'refresh',
|
|
120
|
+
status: 'not-implemented',
|
|
121
|
+
notes: 'Better Auth spike uses sign-out/session semantics; refresh mapping is deferred to ADR.',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const auth = await this.getAuthInstance();
|
|
125
|
+
if (!auth.api?.signOut) {
|
|
126
|
+
throw new Error('Better Auth sign-out API is unavailable.');
|
|
127
|
+
}
|
|
128
|
+
return auth.api.signOut({ headers: input.headers });
|
|
129
|
+
}
|
|
130
|
+
async getAuthInstance() {
|
|
131
|
+
if (!this.authInstancePromise) {
|
|
132
|
+
this.authInstancePromise = this.createAuthInstance();
|
|
133
|
+
}
|
|
134
|
+
return this.authInstancePromise;
|
|
135
|
+
}
|
|
136
|
+
async createAuthInstance() {
|
|
137
|
+
const { betterAuth, betterAuthPasskey } = await (0, better_auth_module_loader_1.loadBetterAuthRuntimeModules)();
|
|
138
|
+
const { DatabaseSync } = await (0, dynamic_import_1.importEsmModule)('node:sqlite');
|
|
139
|
+
return betterAuth.betterAuth({
|
|
140
|
+
secret: this.options.spike.secret,
|
|
141
|
+
baseURL: this.options.spike.baseUrl,
|
|
142
|
+
database: new DatabaseSync(':memory:'),
|
|
143
|
+
emailAndPassword: {
|
|
144
|
+
enabled: true,
|
|
145
|
+
},
|
|
146
|
+
socialProviders: this.options.features.social
|
|
147
|
+
? {
|
|
148
|
+
github: {
|
|
149
|
+
clientId: this.options.spike.socialProviders.github?.clientId ??
|
|
150
|
+
'spike-client-id',
|
|
151
|
+
clientSecret: this.options.spike.socialProviders.github?.clientSecret ??
|
|
152
|
+
'spike-client-secret',
|
|
153
|
+
},
|
|
154
|
+
}
|
|
155
|
+
: {},
|
|
156
|
+
plugins: this.options.features.passkeys
|
|
157
|
+
? [
|
|
158
|
+
betterAuthPasskey.passkey({
|
|
159
|
+
rpID: this.options.spike.passkeys.rpID,
|
|
160
|
+
rpName: this.options.spike.passkeys.rpName,
|
|
161
|
+
origin: this.options.spike.passkeys.origin,
|
|
162
|
+
}),
|
|
163
|
+
]
|
|
164
|
+
: [],
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
isLoginResponse(value) {
|
|
168
|
+
return Boolean(value &&
|
|
169
|
+
typeof value === 'object' &&
|
|
170
|
+
'accessToken' in value &&
|
|
171
|
+
'refreshToken' in value);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
exports.BetterAuthAuthEngineAdapter = BetterAuthAuthEngineAdapter;
|
|
175
|
+
exports.BetterAuthAuthEngineAdapter = BetterAuthAuthEngineAdapter = tslib_1.__decorate([
|
|
176
|
+
(0, common_1.Injectable)(),
|
|
177
|
+
tslib_1.__param(0, (0, common_1.Inject)(application_module_definition_1.AUTH_APPLICATION_MODULE_OPTIONS)),
|
|
178
|
+
tslib_1.__metadata("design:paramtypes", [Object])
|
|
179
|
+
], BetterAuthAuthEngineAdapter);
|
|
180
|
+
//# sourceMappingURL=better-auth-auth-engine.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-auth-auth-engine.adapter.js","sourceRoot":"","sources":["../../../../../../../libs/auth/nest/src/infrastructure-engine/better-auth/better-auth-auth-engine.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ResolvedAuthApplicationModuleOptions } from '../../config';
|
|
2
|
+
import { AuthEngineCapabilityReport, AuthEnginePort } from '../../application/services/auth-engine.port';
|
|
3
|
+
export type BetterAuthSpikeFlowResult = {
|
|
4
|
+
flow: string;
|
|
5
|
+
status: 'ready' | 'blocked';
|
|
6
|
+
notes: string;
|
|
7
|
+
};
|
|
8
|
+
export declare class BetterAuthSpikeHarness {
|
|
9
|
+
private readonly authEnginePort;
|
|
10
|
+
private readonly options;
|
|
11
|
+
constructor(authEnginePort: AuthEnginePort, options: ResolvedAuthApplicationModuleOptions);
|
|
12
|
+
collectProofMatrix(): Promise<{
|
|
13
|
+
engine: AuthEngineCapabilityReport['engine'];
|
|
14
|
+
proofHarnessEnabled: boolean;
|
|
15
|
+
flows: BetterAuthSpikeFlowResult[];
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BetterAuthSpikeHarness = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const application_module_definition_1 = require("../../application/application.module-definition");
|
|
7
|
+
const auth_engine_port_1 = require("../../application/services/auth-engine.port");
|
|
8
|
+
let BetterAuthSpikeHarness = class BetterAuthSpikeHarness {
|
|
9
|
+
constructor(authEnginePort, options) {
|
|
10
|
+
this.authEnginePort = authEnginePort;
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
async collectProofMatrix() {
|
|
14
|
+
const report = await this.authEnginePort.describeCapabilities();
|
|
15
|
+
return {
|
|
16
|
+
engine: report.engine,
|
|
17
|
+
proofHarnessEnabled: this.options.spike.proofHarnessEnabled,
|
|
18
|
+
flows: report.flows.map((flow) => ({
|
|
19
|
+
flow: flow.flow,
|
|
20
|
+
status: flow.status === 'supported' ? 'ready' : 'blocked',
|
|
21
|
+
notes: flow.notes,
|
|
22
|
+
})),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.BetterAuthSpikeHarness = BetterAuthSpikeHarness;
|
|
27
|
+
exports.BetterAuthSpikeHarness = BetterAuthSpikeHarness = tslib_1.__decorate([
|
|
28
|
+
(0, common_1.Injectable)(),
|
|
29
|
+
tslib_1.__param(1, (0, common_1.Inject)(application_module_definition_1.AUTH_APPLICATION_MODULE_OPTIONS)),
|
|
30
|
+
tslib_1.__metadata("design:paramtypes", [auth_engine_port_1.AuthEnginePort, Object])
|
|
31
|
+
], BetterAuthSpikeHarness);
|
|
32
|
+
//# sourceMappingURL=better-auth-spike.harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-auth-spike.harness.js","sourceRoot":"","sources":["../../../../../../../libs/auth/nest/src/infrastructure-engine/better-auth/better-auth-spike.harness.ts"],"names":[],"mappings":";;;;AAAA,2CAAoD;AACpD,mGAAkG;AAElG,kFAGqD;AAS9C,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YACmB,cAA8B,EAE9B,OAA6C;QAF7C,mBAAc,GAAd,cAAc,CAAgB;QAE9B,YAAO,GAAP,OAAO,CAAsC;IAC7D,CAAC;IAEJ,KAAK,CAAC,kBAAkB;QAKtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAEhE,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB;YAC3D,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBACzD,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;CACF,CAAA;AAxBY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAIR,mBAAA,IAAA,eAAM,EAAC,+DAA+B,CAAC,CAAA;6CADP,iCAAc;GAFtC,sBAAsB,CAwBlC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type BetterAuthModule = typeof import('better-auth');
|
|
2
|
+
export type BetterAuthPasskeyModule = typeof import('@better-auth/passkey');
|
|
3
|
+
export type BetterAuthRuntimeModules = {
|
|
4
|
+
betterAuth: BetterAuthModule;
|
|
5
|
+
betterAuthPasskey: BetterAuthPasskeyModule;
|
|
6
|
+
};
|
|
7
|
+
export declare function loadBetterAuthRuntimeModules(): Promise<BetterAuthRuntimeModules>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadBetterAuthRuntimeModules = loadBetterAuthRuntimeModules;
|
|
4
|
+
const dynamic_import_1 = require("./dynamic-import");
|
|
5
|
+
async function loadBetterAuthRuntimeModules() {
|
|
6
|
+
const [betterAuth, betterAuthPasskey] = await Promise.all([
|
|
7
|
+
(0, dynamic_import_1.importEsmModule)('better-auth'),
|
|
8
|
+
(0, dynamic_import_1.importEsmModule)('@better-auth/passkey'),
|
|
9
|
+
]);
|
|
10
|
+
return {
|
|
11
|
+
betterAuth,
|
|
12
|
+
betterAuthPasskey,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=better-auth.module-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-auth.module-loader.js","sourceRoot":"","sources":["../../../../../../../libs/auth/nest/src/infrastructure-engine/better-auth/better-auth.module-loader.ts"],"names":[],"mappings":";;AAUA,oEAUC;AApBD,qDAAmD;AAU5C,KAAK,UAAU,4BAA4B;IAChD,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxD,IAAA,gCAAe,EAAmB,aAAa,CAAC;QAChD,IAAA,gCAAe,EAA0B,sBAAsB,CAAC;KACjE,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function importEsmModule<T>(specifier: string): Promise<T>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.importEsmModule = importEsmModule;
|
|
4
|
+
// Better Auth is ESM-only. Preserve native import() from this CommonJS package.
|
|
5
|
+
const dynamicImporter = new Function('specifier', 'return import(specifier);');
|
|
6
|
+
function importEsmModule(specifier) {
|
|
7
|
+
return dynamicImporter(specifier);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=dynamic-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-import.js","sourceRoot":"","sources":["../../../../../../../libs/auth/nest/src/infrastructure-engine/better-auth/dynamic-import.ts"],"names":[],"mappings":";;AAQA,0CAEC;AARD,gFAAgF;AAChF,MAAM,eAAe,GAAG,IAAI,QAAQ,CAClC,WAAW,EACX,2BAA2B,CACT,CAAC;AAErB,SAAgB,eAAe,CAAI,SAAiB;IAClD,OAAO,eAAe,CAAC,SAAS,CAAe,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { JwtService } from '@nestjs/jwt';
|
|
2
|
+
import { LoginRequestDTO, LoginResponseDTO, LogoutRequestDTO, RefreshTokenRequestDTO } from '@anarchitects/auth-ts/dtos';
|
|
3
|
+
import { AuthEngineCapabilityReport, AuthEnginePort, AuthPasskeySignInInput, AuthSignOutOrRefreshInput, AuthSocialSignInInput } from '../application/services/auth-engine.port';
|
|
4
|
+
import { HashService } from '../application/services/hash.service';
|
|
5
|
+
import { AuthUserRepository } from '../infrastructure-persistence/repositories/auth-user.repository';
|
|
6
|
+
export declare class LegacyJwtAuthEngineAdapter implements AuthEnginePort {
|
|
7
|
+
private readonly hashService;
|
|
8
|
+
private readonly authUserRepository;
|
|
9
|
+
private readonly jwtService;
|
|
10
|
+
constructor(hashService: HashService, authUserRepository: AuthUserRepository, jwtService: JwtService);
|
|
11
|
+
login(dto: LoginRequestDTO): Promise<LoginResponseDTO>;
|
|
12
|
+
logout(dto: LogoutRequestDTO): Promise<{
|
|
13
|
+
success: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
refreshTokens(userId: string, dto: RefreshTokenRequestDTO): Promise<LoginResponseDTO>;
|
|
16
|
+
describeCapabilities(): Promise<AuthEngineCapabilityReport>;
|
|
17
|
+
passwordSignIn(dto: LoginRequestDTO): Promise<LoginResponseDTO>;
|
|
18
|
+
passkeySignIn(_input: AuthPasskeySignInInput): Promise<unknown>;
|
|
19
|
+
socialSignIn(_input: AuthSocialSignInInput): Promise<unknown>;
|
|
20
|
+
signOutOrRefresh(input: AuthSignOutOrRefreshInput): Promise<unknown>;
|
|
21
|
+
private generateTokens;
|
|
22
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LegacyJwtAuthEngineAdapter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
7
|
+
const hash_service_1 = require("../application/services/hash.service");
|
|
8
|
+
const auth_user_repository_1 = require("../infrastructure-persistence/repositories/auth-user.repository");
|
|
9
|
+
let LegacyJwtAuthEngineAdapter = class LegacyJwtAuthEngineAdapter {
|
|
10
|
+
constructor(hashService, authUserRepository, jwtService) {
|
|
11
|
+
this.hashService = hashService;
|
|
12
|
+
this.authUserRepository = authUserRepository;
|
|
13
|
+
this.jwtService = jwtService;
|
|
14
|
+
}
|
|
15
|
+
async login(dto) {
|
|
16
|
+
const { credential, password } = dto;
|
|
17
|
+
const user = await this.authUserRepository.findOne({
|
|
18
|
+
where: [{ email: credential }, { userName: credential }],
|
|
19
|
+
});
|
|
20
|
+
if (!user) {
|
|
21
|
+
throw new common_1.BadRequestException('Invalid credentials');
|
|
22
|
+
}
|
|
23
|
+
const isPasswordValid = await this.hashService.compare(password, user.passwordHash);
|
|
24
|
+
if (!isPasswordValid) {
|
|
25
|
+
throw new common_1.BadRequestException('Invalid credentials');
|
|
26
|
+
}
|
|
27
|
+
return this.generateTokens(user);
|
|
28
|
+
}
|
|
29
|
+
async logout(dto) {
|
|
30
|
+
const { accessToken, refreshToken } = dto;
|
|
31
|
+
if (!refreshToken) {
|
|
32
|
+
throw new common_1.BadRequestException('Refresh token is required');
|
|
33
|
+
}
|
|
34
|
+
const payload = await this.jwtService.verifyAsync(refreshToken).catch(() => {
|
|
35
|
+
throw new common_1.BadRequestException('Invalid refresh token');
|
|
36
|
+
});
|
|
37
|
+
if (!payload?.sub) {
|
|
38
|
+
throw new common_1.BadRequestException('Invalid refresh token');
|
|
39
|
+
}
|
|
40
|
+
const user = await this.authUserRepository.findOne({
|
|
41
|
+
where: { id: payload.sub },
|
|
42
|
+
});
|
|
43
|
+
if (!user?.id) {
|
|
44
|
+
throw new common_1.BadRequestException('Invalid refresh token');
|
|
45
|
+
}
|
|
46
|
+
const tokenHashes = await Promise.all([accessToken, refreshToken]
|
|
47
|
+
.filter((token) => Boolean(token))
|
|
48
|
+
.map((token) => this.hashService.hash(token)));
|
|
49
|
+
await this.authUserRepository.invalidateTokens(tokenHashes, user.id);
|
|
50
|
+
return { success: true };
|
|
51
|
+
}
|
|
52
|
+
async refreshTokens(userId, dto) {
|
|
53
|
+
const { refreshToken } = dto;
|
|
54
|
+
const payload = await this.jwtService.verifyAsync(refreshToken).catch(() => {
|
|
55
|
+
throw new common_1.BadRequestException('Invalid refresh token');
|
|
56
|
+
});
|
|
57
|
+
if (!payload?.sub || payload.sub !== userId) {
|
|
58
|
+
throw new common_1.BadRequestException('Invalid refresh token');
|
|
59
|
+
}
|
|
60
|
+
const user = await this.authUserRepository.findOne({
|
|
61
|
+
where: { id: userId },
|
|
62
|
+
});
|
|
63
|
+
if (!user) {
|
|
64
|
+
throw new common_1.BadRequestException('User not found');
|
|
65
|
+
}
|
|
66
|
+
const isTokenInvalidated = await this.authUserRepository.isTokenInvalidated(await this.hashService.hash(refreshToken));
|
|
67
|
+
if (isTokenInvalidated) {
|
|
68
|
+
throw new common_1.BadRequestException('Refresh token has been invalidated');
|
|
69
|
+
}
|
|
70
|
+
return this.generateTokens(user);
|
|
71
|
+
}
|
|
72
|
+
async describeCapabilities() {
|
|
73
|
+
return {
|
|
74
|
+
engine: 'legacy-jwt',
|
|
75
|
+
flows: [
|
|
76
|
+
{
|
|
77
|
+
flow: 'password-sign-in',
|
|
78
|
+
status: 'supported',
|
|
79
|
+
notes: 'Existing JwtAuthService email-or-username login path.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
flow: 'passkey-sign-in',
|
|
83
|
+
status: 'unsupported',
|
|
84
|
+
notes: 'Legacy JWT engine does not implement WebAuthn.',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
flow: 'social-sign-in',
|
|
88
|
+
status: 'unsupported',
|
|
89
|
+
notes: 'Legacy JWT engine does not implement social provider sign-in.',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
flow: 'sign-out-or-refresh',
|
|
93
|
+
status: 'supported',
|
|
94
|
+
notes: 'Existing refresh-token flow remains available on the legacy engine.',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
passwordSignIn(dto) {
|
|
100
|
+
return this.login(dto);
|
|
101
|
+
}
|
|
102
|
+
passkeySignIn(_input) {
|
|
103
|
+
return Promise.reject(new Error('Passkey sign-in is unavailable on the legacy JWT engine.'));
|
|
104
|
+
}
|
|
105
|
+
socialSignIn(_input) {
|
|
106
|
+
return Promise.reject(new Error('Social sign-in is unavailable on the legacy JWT engine.'));
|
|
107
|
+
}
|
|
108
|
+
signOutOrRefresh(input) {
|
|
109
|
+
if (input.mode === 'refresh') {
|
|
110
|
+
return this.refreshTokens(input.userId, input.dto);
|
|
111
|
+
}
|
|
112
|
+
return Promise.reject(new Error('Legacy JWT proof path only supports refresh for the spike.'));
|
|
113
|
+
}
|
|
114
|
+
async generateTokens(user) {
|
|
115
|
+
const payload = {
|
|
116
|
+
sub: user.id,
|
|
117
|
+
roles: user.roles?.map((role) => role.name),
|
|
118
|
+
};
|
|
119
|
+
const accessToken = await this.jwtService.signAsync(payload);
|
|
120
|
+
const refreshToken = await this.jwtService.signAsync(payload);
|
|
121
|
+
return { accessToken, refreshToken };
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
exports.LegacyJwtAuthEngineAdapter = LegacyJwtAuthEngineAdapter;
|
|
125
|
+
exports.LegacyJwtAuthEngineAdapter = LegacyJwtAuthEngineAdapter = tslib_1.__decorate([
|
|
126
|
+
(0, common_1.Injectable)(),
|
|
127
|
+
tslib_1.__metadata("design:paramtypes", [hash_service_1.HashService,
|
|
128
|
+
auth_user_repository_1.AuthUserRepository,
|
|
129
|
+
jwt_1.JwtService])
|
|
130
|
+
], LegacyJwtAuthEngineAdapter);
|
|
131
|
+
//# sourceMappingURL=legacy-jwt-auth-engine.adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-jwt-auth-engine.adapter.js","sourceRoot":"","sources":["../../../../../../libs/auth/nest/src/infrastructure-engine/legacy-jwt-auth-engine.adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import type { AuthMailerModuleOptions } from '../config';
|
|
1
3
|
export declare class AuthMailerModule {
|
|
4
|
+
static forRoot(options?: AuthMailerModuleOptions): DynamicModule;
|
|
5
|
+
static forRootFromConfig(overrides?: AuthMailerModuleOptions): DynamicModule;
|
|
2
6
|
}
|
|
@@ -1,17 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var AuthMailerModule_1;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.AuthMailerModule = void 0;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
const common_1 = require("@nestjs/common");
|
|
7
|
+
const config_1 = require("@nestjs/config");
|
|
6
8
|
const common_nest_mailer_1 = require("@anarchitects/common-nest-mailer");
|
|
7
|
-
|
|
9
|
+
const config_2 = require("../config");
|
|
10
|
+
let AuthMailerModule = AuthMailerModule_1 = class AuthMailerModule {
|
|
11
|
+
static forRoot(options = {}) {
|
|
12
|
+
const resolvedOptions = (0, config_2.resolveAuthMailerModuleOptions)(options);
|
|
13
|
+
const commonMailerModule = common_nest_mailer_1.CommonMailerModule.forRoot({
|
|
14
|
+
provider: resolvedOptions.provider,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
module: AuthMailerModule_1,
|
|
18
|
+
imports: [commonMailerModule],
|
|
19
|
+
exports: [commonMailerModule],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static forRootFromConfig(overrides = {}) {
|
|
23
|
+
const configOptions = (0, config_2.mapAuthConfigToMailerModuleOptions)((0, config_2.authConfig)());
|
|
24
|
+
const moduleDefinition = this.forRoot({
|
|
25
|
+
...configOptions,
|
|
26
|
+
...overrides,
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
...moduleDefinition,
|
|
30
|
+
imports: [
|
|
31
|
+
config_1.ConfigModule.forFeature(config_2.authConfig),
|
|
32
|
+
...(moduleDefinition.imports ?? []),
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
8
36
|
};
|
|
9
37
|
exports.AuthMailerModule = AuthMailerModule;
|
|
10
|
-
exports.AuthMailerModule = AuthMailerModule = tslib_1.__decorate([
|
|
38
|
+
exports.AuthMailerModule = AuthMailerModule = AuthMailerModule_1 = tslib_1.__decorate([
|
|
11
39
|
(0, common_1.Global)(),
|
|
12
|
-
(0, common_1.Module)({
|
|
13
|
-
imports: [common_nest_mailer_1.CommonNodeMailerModule],
|
|
14
|
-
exports: [common_nest_mailer_1.CommonNodeMailerModule],
|
|
15
|
-
})
|
|
40
|
+
(0, common_1.Module)({})
|
|
16
41
|
], AuthMailerModule);
|
|
17
42
|
//# sourceMappingURL=mailer.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailer.module.js","sourceRoot":"","sources":["../../../../../../libs/auth/nest/src/infrastructure-mailer/mailer.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mailer.module.js","sourceRoot":"","sources":["../../../../../../libs/auth/nest/src/infrastructure-mailer/mailer.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAA+D;AAC/D,2CAA8C;AAC9C,yEAAsE;AACtE,sCAImB;AAKZ,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAC3B,MAAM,CAAC,OAAO,CAAC,UAAmC,EAAE;QAClD,MAAM,eAAe,GAAG,IAAA,uCAA8B,EAAC,OAAO,CAAC,CAAC;QAChE,MAAM,kBAAkB,GAAG,uCAAkB,CAAC,OAAO,CAAC;YACpD,QAAQ,EAAE,eAAe,CAAC,QAAQ;SACnC,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,kBAAgB;YACxB,OAAO,EAAE,CAAC,kBAAkB,CAAC;YAC7B,OAAO,EAAE,CAAC,kBAAkB,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,iBAAiB,CACtB,YAAqC,EAAE;QAEvC,MAAM,aAAa,GAAG,IAAA,2CAAkC,EAAC,IAAA,mBAAU,GAAE,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC;YACpC,GAAG,aAAa;YAChB,GAAG,SAAS;SACb,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,gBAAgB;YACnB,OAAO,EAAE;gBACP,qBAAY,CAAC,UAAU,CAAC,mBAAU,CAAC;gBACnC,GAAG,CAAC,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;aACpC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA/BY,4CAAgB;2BAAhB,gBAAgB;IAF5B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,gBAAgB,CA+B5B"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
}, "forRoot", "create", {
|
|
1
|
+
import type { ResolvedAuthPersistenceModuleOptions } from '../config';
|
|
2
|
+
export declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<ResolvedAuthPersistenceModuleOptions, "forRoot", "create", {
|
|
4
3
|
isGlobal?: boolean;
|
|
5
|
-
}>, AUTH_PERSISTENCE_MODULE_OPTIONS: string | symbol, OPTIONS_TYPE: {
|
|
6
|
-
persistence: string;
|
|
7
|
-
} & Partial<{
|
|
4
|
+
}>, AUTH_PERSISTENCE_MODULE_OPTIONS: string | symbol, OPTIONS_TYPE: ResolvedAuthPersistenceModuleOptions & Partial<{
|
|
8
5
|
isGlobal?: boolean;
|
|
9
|
-
}>, ASYNC_OPTIONS_TYPE: import("@nestjs/common").ConfigurableModuleAsyncOptions<{
|
|
10
|
-
persistence: string;
|
|
11
|
-
}, "create"> & Partial<{
|
|
6
|
+
}>, ASYNC_OPTIONS_TYPE: import("@nestjs/common").ConfigurableModuleAsyncOptions<ResolvedAuthPersistenceModuleOptions, "create"> & Partial<{
|
|
12
7
|
isGlobal?: boolean;
|
|
13
8
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.module-definition.js","sourceRoot":"","sources":["../../../../../../libs/auth/nest/src/infrastructure-persistence/persistence.module-definition.ts"],"names":[],"mappings":";;;;AAAA,2CAA2D;
|
|
1
|
+
{"version":3,"file":"persistence.module-definition.js","sourceRoot":"","sources":["../../../../../../libs/auth/nest/src/infrastructure-persistence/persistence.module-definition.ts"],"names":[],"mappings":";;;;AAAA,2CAA2D;AAG9C,KAKT,IAAI,kCAAyB,EAAwC;KACtE,kBAAkB,CAAC,SAAS,CAAC;KAC7B,SAAS,CACR,EAAE,QAAQ,EAAE,IAAI,EAAE,EAClB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvB,GAAG,UAAU;IACb,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;CACjC,CAAC,CACH;KACA,KAAK,EAAE,EAbR,+BAAuB,+BACD,uCAA+B,4BACrD,oBAAY,oBACZ,0BAAkB,yBAUT"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { DynamicModule } from '@nestjs/common';
|
|
2
|
-
import { ConfigurableModuleClass
|
|
2
|
+
import { ConfigurableModuleClass } from './persistence.module-definition';
|
|
3
|
+
import type { AuthPersistenceModuleOptions } from '../config';
|
|
3
4
|
export declare class AuthPersistenceModule extends ConfigurableModuleClass {
|
|
4
|
-
static forRoot(options
|
|
5
|
+
static forRoot(options?: AuthPersistenceModuleOptions): DynamicModule;
|
|
6
|
+
static forRootFromConfig(overrides?: AuthPersistenceModuleOptions): DynamicModule;
|
|
5
7
|
}
|