@zlooks.cn/password-auth-server 1.0.0
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/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/chunks/chunk-Q3WJINFG.js +48386 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-page-frame-07c4de56a6-3F24AYCH.css +170 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-page-frame-07c4de56a6-OCDODDFY.js +440 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-password-form-3bd63d69e5-CCNUYY62.js +706 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-password-form-3bd63d69e5-TRYMJX4F.css +195 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-ssr/chunks/chunk-36DACA7C.js +155814 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-ssr/src-plugin-page-frame-07c4de56a6-SYE4RRNX.js +441 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/client-ssr/src-plugin-password-form-3bd63d69e5-YVCPJXLL.js +708 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/plugin.json +90 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/server-rsc/index.js +15298 -0
- package/.hile-rsc/build-mtie8wg2-ca38f847/styles/4b3193c4f2b317ffed425ccf401342a4bdd6ccfd5f9c42def3315e776f166975.css +385 -0
- package/dist/command/index.d.ts +3 -0
- package/dist/command/index.d.ts.map +1 -0
- package/dist/command/index.js +24 -0
- package/dist/command/index.js.map +1 -0
- package/dist/config/schema.d.ts +72 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +48 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/email/nodemailer-verification-email-sender.d.ts +11 -0
- package/dist/email/nodemailer-verification-email-sender.d.ts.map +1 -0
- package/dist/email/nodemailer-verification-email-sender.js +54 -0
- package/dist/email/nodemailer-verification-email-sender.js.map +1 -0
- package/dist/email/verification-code-rate-limiter.d.ts +14 -0
- package/dist/email/verification-code-rate-limiter.d.ts.map +1 -0
- package/dist/email/verification-code-rate-limiter.js +27 -0
- package/dist/email/verification-code-rate-limiter.js.map +1 -0
- package/dist/email/verification-email-sender.d.ts +10 -0
- package/dist/email/verification-email-sender.d.ts.map +1 -0
- package/dist/email/verification-email-sender.js +2 -0
- package/dist/email/verification-email-sender.js.map +1 -0
- package/dist/messages/auth-extension/begin.msg.d.ts +3 -0
- package/dist/messages/auth-extension/begin.msg.d.ts.map +1 -0
- package/dist/messages/auth-extension/begin.msg.js +8 -0
- package/dist/messages/auth-extension/begin.msg.js.map +1 -0
- package/dist/messages/auth-extension/complete.msg.d.ts +3 -0
- package/dist/messages/auth-extension/complete.msg.d.ts.map +1 -0
- package/dist/messages/auth-extension/complete.msg.js +8 -0
- package/dist/messages/auth-extension/complete.msg.js.map +1 -0
- package/dist/migrations/index.d.ts +3 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +2 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/password/attempt-coordinator.d.ts +12 -0
- package/dist/password/attempt-coordinator.d.ts.map +1 -0
- package/dist/password/attempt-coordinator.js +25 -0
- package/dist/password/attempt-coordinator.js.map +1 -0
- package/dist/password/credential-lifecycle-outbox.d.ts +42 -0
- package/dist/password/credential-lifecycle-outbox.d.ts.map +1 -0
- package/dist/password/credential-lifecycle-outbox.js +119 -0
- package/dist/password/credential-lifecycle-outbox.js.map +1 -0
- package/dist/password/credential-repository.d.ts +41 -0
- package/dist/password/credential-repository.d.ts.map +1 -0
- package/dist/password/credential-repository.js +64 -0
- package/dist/password/credential-repository.js.map +1 -0
- package/dist/password/password-authenticator.d.ts +59 -0
- package/dist/password/password-authenticator.d.ts.map +1 -0
- package/dist/password/password-authenticator.js +184 -0
- package/dist/password/password-authenticator.js.map +1 -0
- package/dist/password/typeorm-credential-repository.d.ts +15 -0
- package/dist/password/typeorm-credential-repository.d.ts.map +1 -0
- package/dist/password/typeorm-credential-repository.js +125 -0
- package/dist/password/typeorm-credential-repository.js.map +1 -0
- package/dist/persistence/entities.d.ts +29 -0
- package/dist/persistence/entities.d.ts.map +1 -0
- package/dist/persistence/entities.js +49 -0
- package/dist/persistence/entities.js.map +1 -0
- package/dist/runtime/auth-announcement-publisher.d.ts +18 -0
- package/dist/runtime/auth-announcement-publisher.d.ts.map +1 -0
- package/dist/runtime/auth-announcement-publisher.js +106 -0
- package/dist/runtime/auth-announcement-publisher.js.map +1 -0
- package/dist/runtime/password-auth-runtime.d.ts +33 -0
- package/dist/runtime/password-auth-runtime.d.ts.map +1 -0
- package/dist/runtime/password-auth-runtime.js +218 -0
- package/dist/runtime/password-auth-runtime.js.map +1 -0
- package/dist/runtime/password-state-store.d.ts +49 -0
- package/dist/runtime/password-state-store.d.ts.map +1 -0
- package/dist/runtime/password-state-store.js +130 -0
- package/dist/runtime/password-state-store.js.map +1 -0
- package/dist/service-identity.d.ts +2 -0
- package/dist/service-identity.d.ts.map +1 -0
- package/dist/service-identity.js +2 -0
- package/dist/service-identity.js.map +1 -0
- package/dist/services/application.service.d.ts +8 -0
- package/dist/services/application.service.d.ts.map +1 -0
- package/dist/services/application.service.js +22 -0
- package/dist/services/application.service.js.map +1 -0
- package/dist/services/config.service.d.ts +63 -0
- package/dist/services/config.service.d.ts.map +1 -0
- package/dist/services/config.service.js +20 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/database.service.d.ts +3 -0
- package/dist/services/database.service.d.ts.map +1 -0
- package/dist/services/database.service.js +23 -0
- package/dist/services/database.service.js.map +1 -0
- package/dist/services/email.service.d.ts +4 -0
- package/dist/services/email.service.d.ts.map +1 -0
- package/dist/services/email.service.js +37 -0
- package/dist/services/email.service.js.map +1 -0
- package/dist/services/logger.service.d.ts +4 -0
- package/dist/services/logger.service.d.ts.map +1 -0
- package/dist/services/logger.service.js +8 -0
- package/dist/services/logger.service.js.map +1 -0
- package/dist/services/password-auth.boot.d.ts +3 -0
- package/dist/services/password-auth.boot.d.ts.map +1 -0
- package/dist/services/password-auth.boot.js +4 -0
- package/dist/services/password-auth.boot.js.map +1 -0
- package/dist/services/password-runtime.service.d.ts +4 -0
- package/dist/services/password-runtime.service.d.ts.map +1 -0
- package/dist/services/password-runtime.service.js +135 -0
- package/dist/services/password-runtime.service.js.map +1 -0
- package/dist/services/redis.service.d.ts +4 -0
- package/dist/services/redis.service.d.ts.map +1 -0
- package/dist/services/redis.service.js +18 -0
- package/dist/services/redis.service.js.map +1 -0
- package/package.json +91 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Application } from '@hile/micro';
|
|
2
|
+
declare const _default: import("@hile/core").ServiceRegisterProps<{
|
|
3
|
+
readonly application: Application;
|
|
4
|
+
readonly registry: import("@zlooks.cn/registry-config").RegistryBootstrap;
|
|
5
|
+
readonly advertiseHost: string | undefined;
|
|
6
|
+
}>;
|
|
7
|
+
export default _default;
|
|
8
|
+
//# sourceMappingURL=application.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.service.d.ts","sourceRoot":"","sources":["../../src/services/application.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineService } from '@hile/core';
|
|
2
|
+
import { Application } from '@hile/micro';
|
|
3
|
+
import { parseAdvertiseHost, parseRegistryBootstrap, } from '@zlooks.cn/registry-config';
|
|
4
|
+
import { detect } from 'detect-port';
|
|
5
|
+
import { PASSWORD_AUTH_SERVICE_NAMESPACE } from '../service-identity.js';
|
|
6
|
+
export default defineService('zlooks.password-auth.application', async (shutdown) => {
|
|
7
|
+
const registry = parseRegistryBootstrap({
|
|
8
|
+
REGISTRY_HOST: process.env.REGISTRY_HOST,
|
|
9
|
+
REGISTRY_PORT: process.env.REGISTRY_PORT,
|
|
10
|
+
});
|
|
11
|
+
const advertiseHost = parseAdvertiseHost(process.env.HILE_ADVERTISE_HOST);
|
|
12
|
+
const application = new Application({
|
|
13
|
+
namespace: PASSWORD_AUTH_SERVICE_NAMESPACE,
|
|
14
|
+
registry,
|
|
15
|
+
...(advertiseHost ? { advertiseHost } : {}),
|
|
16
|
+
});
|
|
17
|
+
await application.load(new URL('../messages', import.meta.url).pathname);
|
|
18
|
+
const microPort = await detect();
|
|
19
|
+
shutdown(await application.listen(microPort));
|
|
20
|
+
return { application, registry, advertiseHost };
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=application.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.service.js","sourceRoot":"","sources":["../../src/services/application.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,eAAe,aAAa,CAAC,kCAAkC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAClF,MAAM,QAAQ,GAAG,sBAAsB,CAAC;QACtC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;QACxC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;KACzC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,SAAS,EAAE,+BAA+B;QAC1C,QAAQ;QACR,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5C,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,MAAM,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAW,CAAC;AAC3D,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
declare const _default: import("@hile/core").ServiceRegisterProps<import("@zlooks.cn/registry-config").RegistryConfigSubscription<Readonly<{
|
|
2
|
+
infrastructure: {
|
|
3
|
+
postgres: {
|
|
4
|
+
host: string;
|
|
5
|
+
port: number;
|
|
6
|
+
username: string;
|
|
7
|
+
password: string;
|
|
8
|
+
database: string;
|
|
9
|
+
ssl: boolean;
|
|
10
|
+
poolSize: number;
|
|
11
|
+
};
|
|
12
|
+
redis: {
|
|
13
|
+
host: string;
|
|
14
|
+
port: number;
|
|
15
|
+
username?: string | undefined;
|
|
16
|
+
password?: string | undefined;
|
|
17
|
+
database: number;
|
|
18
|
+
keyPrefix: string;
|
|
19
|
+
tls: boolean;
|
|
20
|
+
};
|
|
21
|
+
email: {
|
|
22
|
+
smtp: {
|
|
23
|
+
host: string;
|
|
24
|
+
port: number;
|
|
25
|
+
secure: boolean;
|
|
26
|
+
username: string;
|
|
27
|
+
password: string;
|
|
28
|
+
};
|
|
29
|
+
from: {
|
|
30
|
+
name: string;
|
|
31
|
+
address: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
discovery: {
|
|
36
|
+
instanceId: "password-auth";
|
|
37
|
+
generation: 2;
|
|
38
|
+
leaseMs: 10000;
|
|
39
|
+
};
|
|
40
|
+
rsc: {
|
|
41
|
+
generation: 2;
|
|
42
|
+
priority: 100;
|
|
43
|
+
};
|
|
44
|
+
password: {
|
|
45
|
+
minLength: 12;
|
|
46
|
+
maxLength: 128;
|
|
47
|
+
memoryCostKiB: 65536;
|
|
48
|
+
timeCost: 3;
|
|
49
|
+
parallelism: 1;
|
|
50
|
+
maxFailedAttempts: 5;
|
|
51
|
+
lockoutMs: 900000;
|
|
52
|
+
};
|
|
53
|
+
verification: {
|
|
54
|
+
hmacKey: string;
|
|
55
|
+
codeTtlMs: 600000;
|
|
56
|
+
resendIntervalMs: 60000;
|
|
57
|
+
maxSendsPerTransaction: 3;
|
|
58
|
+
maxSendsPerEmailPerHour: 5;
|
|
59
|
+
maxVerificationAttempts: 5;
|
|
60
|
+
};
|
|
61
|
+
}>>>;
|
|
62
|
+
export default _default;
|
|
63
|
+
//# sourceMappingURL=config.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../src/services/config.service.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineService, loadService } from '@hile/core';
|
|
2
|
+
import { parseEmailConfig, parsePostgresConfig, parseRedisConfig } from '@zlooks.cn/infrastructure';
|
|
3
|
+
import { registryConfigTopic, subscribeRegistryConfig } from '@zlooks.cn/registry-config';
|
|
4
|
+
import { parsePasswordAuthConfig } from '../config/schema.js';
|
|
5
|
+
import applicationService from './application.service.js';
|
|
6
|
+
export default defineService('zlooks.password-auth.config', async (shutdown) => {
|
|
7
|
+
const { application } = await loadService(applicationService);
|
|
8
|
+
const subscriber = await subscribeRegistryConfig(application, {
|
|
9
|
+
sources: {
|
|
10
|
+
postgres: { topic: registryConfigTopic('postgres'), parse: parsePostgresConfig },
|
|
11
|
+
redis: { topic: registryConfigTopic('redis'), parse: parseRedisConfig },
|
|
12
|
+
email: { topic: registryConfigTopic('email'), parse: parseEmailConfig },
|
|
13
|
+
passwordAuth: { topic: registryConfigTopic('password-auth'), parse: (value) => value },
|
|
14
|
+
},
|
|
15
|
+
compose: parsePasswordAuthConfig,
|
|
16
|
+
});
|
|
17
|
+
shutdown(() => subscriber.close());
|
|
18
|
+
return subscriber;
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=config.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../src/services/config.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAE1D,eAAe,aAAa,CAAC,6BAA6B,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC7E,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE;QAC5D,OAAO,EAAE;YACP,QAAQ,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE;YAChF,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACvE,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE;YACvE,YAAY,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE;SAC9E;QACV,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.service.d.ts","sourceRoot":"","sources":["../../src/services/database.service.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineService, loadService } from '@hile/core';
|
|
2
|
+
import { createDataSource } from '@hile/typeorm';
|
|
3
|
+
import { passwordAuthEntities } from '../persistence/entities.js';
|
|
4
|
+
import configService from './config.service.js';
|
|
5
|
+
export default defineService('zlooks.password-auth.database', async (shutdown) => {
|
|
6
|
+
const config = (await loadService(configService)).snapshot().infrastructure.postgres;
|
|
7
|
+
const dataSource = await createDataSource({
|
|
8
|
+
type: 'postgres',
|
|
9
|
+
host: config.host,
|
|
10
|
+
port: config.port,
|
|
11
|
+
username: config.username,
|
|
12
|
+
password: config.password,
|
|
13
|
+
database: config.database,
|
|
14
|
+
ssl: config.ssl,
|
|
15
|
+
synchronize: false,
|
|
16
|
+
migrationsRun: false,
|
|
17
|
+
poolSize: config.poolSize,
|
|
18
|
+
entities: [...passwordAuthEntities],
|
|
19
|
+
});
|
|
20
|
+
shutdown(() => dataSource.destroy());
|
|
21
|
+
return dataSource;
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=database.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.service.js","sourceRoot":"","sources":["../../src/services/database.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,eAAe,aAAa,CAAC,+BAA+B,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC/E,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;IACrF,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC;QACxC,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,WAAW,EAAE,KAAK;QAClB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,CAAC,GAAG,oBAAoB,CAAC;KACpC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.service.d.ts","sourceRoot":"","sources":["../../src/services/email.service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { defineService, loadService } from '@hile/core';
|
|
2
|
+
import { watchSerialLatest } from '@hile/reactivity';
|
|
3
|
+
import { createRuntimeReloader } from '@hile/reloader';
|
|
4
|
+
import { NodemailerVerificationEmailSender } from '../email/nodemailer-verification-email-sender.js';
|
|
5
|
+
import configService from './config.service.js';
|
|
6
|
+
import loggerService from './logger.service.js';
|
|
7
|
+
export default defineService('zlooks.email', async (shutdown) => {
|
|
8
|
+
const [configs, logger] = await Promise.all([loadService(configService), loadService(loggerService)]);
|
|
9
|
+
const reloader = createRuntimeReloader({
|
|
10
|
+
debounceMs: 100,
|
|
11
|
+
create: async (config) => new NodemailerVerificationEmailSender(config),
|
|
12
|
+
dispose: async (sender) => sender.close(),
|
|
13
|
+
onError: (error, context) => logger.error({
|
|
14
|
+
err: error,
|
|
15
|
+
event: 'email.runtime-reload.failed',
|
|
16
|
+
stage: context.stage,
|
|
17
|
+
}, 'Email runtime reload failed'),
|
|
18
|
+
});
|
|
19
|
+
await reloader.update(configs.snapshot().infrastructure.email);
|
|
20
|
+
const stopConfigUpdates = watchSerialLatest(configs.current, async (config) => {
|
|
21
|
+
if (config)
|
|
22
|
+
await reloader.update(config.infrastructure.email);
|
|
23
|
+
});
|
|
24
|
+
shutdown(async () => {
|
|
25
|
+
stopConfigUpdates();
|
|
26
|
+
await reloader.stop();
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
async send(input) {
|
|
30
|
+
const sender = reloader.current();
|
|
31
|
+
if (!sender)
|
|
32
|
+
throw new Error('Email delivery is unavailable');
|
|
33
|
+
await sender.send(input);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=email.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.service.js","sourceRoot":"","sources":["../../src/services/email.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,iCAAiC,EAAE,MAAM,kDAAkD,CAAC;AAErG,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,eAAe,aAAa,CAA0B,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IACvF,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,QAAQ,GAAG,qBAAqB,CAAiD;QACrF,UAAU,EAAE,GAAG;QACf,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,iCAAiC,CAAC,MAAM,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;QACzC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;YACxC,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,6BAA6B;YACpC,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,EAAE,6BAA6B,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5E,IAAI,MAAM;YAAE,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,iBAAiB,EAAE,CAAC;QACpB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAK;YACd,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC9D,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { defineService } from '@hile/core';
|
|
2
|
+
import { createLogger } from '@hile/logger';
|
|
3
|
+
export default defineService('zlooks.password-auth.logger', async (shutdown) => {
|
|
4
|
+
const { logger, teardown } = createLogger({ level: 'info', pretty: false });
|
|
5
|
+
shutdown(teardown);
|
|
6
|
+
return logger;
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=logger.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAe,MAAM,cAAc,CAAC;AAEzD,eAAe,aAAa,CAAC,6BAA6B,EAAE,KAAK,EAAE,QAAQ,EAAmB,EAAE;IAC9F,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-auth.boot.d.ts","sourceRoot":"","sources":["../../src/services/password-auth.boot.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { defineService, loadService } from '@hile/core';
|
|
2
|
+
import passwordRuntimeService from './password-runtime.service.js';
|
|
3
|
+
export default defineService('zlooks.password-auth.boot', async () => loadService(passwordRuntimeService));
|
|
4
|
+
//# sourceMappingURL=password-auth.boot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-auth.boot.js","sourceRoot":"","sources":["../../src/services/password-auth.boot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,sBAAsB,MAAM,+BAA+B,CAAC;AAEnE,eAAe,aAAa,CAC1B,2BAA2B,EAC3B,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-runtime.service.d.ts","sourceRoot":"","sources":["../../src/services/password-runtime.service.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { defineService, loadService } from '@hile/core';
|
|
4
|
+
import { Application } from '@hile/micro';
|
|
5
|
+
import { HILE_RSC_RUNTIME } from '@hile/rsc/protocol';
|
|
6
|
+
import { RscArtifactServerFunctionRuntime, RscPluginService, createOfficialRscRenderer, } from '@hile/rsc/plugin';
|
|
7
|
+
import { resolveVerifiedRscPluginArtifact } from '@hile/rsc/artifact';
|
|
8
|
+
import { HileRscPluginRuntime, resolveHileRscPluginIdentity, } from '@hile/rsc-discovery-hile';
|
|
9
|
+
import { detect } from 'detect-port';
|
|
10
|
+
import { PasswordAuthenticator } from '../password/password-authenticator.js';
|
|
11
|
+
import { RedisPasswordAttemptCoordinator } from '../password/attempt-coordinator.js';
|
|
12
|
+
import { RedisVerificationCodeRateLimiter } from '../email/verification-code-rate-limiter.js';
|
|
13
|
+
import { TypeOrmPasswordCredentialRepository } from '../password/typeorm-credential-repository.js';
|
|
14
|
+
import { PasswordCredentialLifecyclePublisher, TypeOrmPasswordCredentialLifecycleOutboxStore, } from '../password/credential-lifecycle-outbox.js';
|
|
15
|
+
import { AuthAnnouncementPublisher } from '../runtime/auth-announcement-publisher.js';
|
|
16
|
+
import { PasswordAuthRuntime } from '../runtime/password-auth-runtime.js';
|
|
17
|
+
import { RedisPasswordTransactionStateStore } from '../runtime/password-state-store.js';
|
|
18
|
+
import applicationService from './application.service.js';
|
|
19
|
+
import configService from './config.service.js';
|
|
20
|
+
import databaseService from './database.service.js';
|
|
21
|
+
import emailService from './email.service.js';
|
|
22
|
+
import loggerService from './logger.service.js';
|
|
23
|
+
import redisService from './redis.service.js';
|
|
24
|
+
export default defineService('zlooks.password-auth.runtime', async (shutdown) => {
|
|
25
|
+
const [applicationRuntime, configSubscriber, database, redis, logger, email] = await Promise.all([
|
|
26
|
+
loadService(applicationService),
|
|
27
|
+
loadService(configService),
|
|
28
|
+
loadService(databaseService),
|
|
29
|
+
loadService(redisService),
|
|
30
|
+
loadService(loggerService),
|
|
31
|
+
loadService(emailService),
|
|
32
|
+
]);
|
|
33
|
+
const { application } = applicationRuntime;
|
|
34
|
+
const config = configSubscriber.snapshot();
|
|
35
|
+
const runtimeInstanceId = `${config.discovery.instanceId.slice(0, 110)}-${randomBytes(8).toString('hex')}`;
|
|
36
|
+
const authenticator = await PasswordAuthenticator.create(new TypeOrmPasswordCredentialRepository(database), config.password, () => new Date(), new RedisPasswordAttemptCoordinator(redis, config.verification.hmacKey));
|
|
37
|
+
const authentication = new PasswordAuthRuntime(authenticator, new RedisPasswordTransactionStateStore(redis), () => new Date(), {
|
|
38
|
+
config: config.verification,
|
|
39
|
+
sender: email,
|
|
40
|
+
onDeliveryError: (error, context) => logger.error({
|
|
41
|
+
err: error,
|
|
42
|
+
event: 'password-auth.verification-email.delivery-failed',
|
|
43
|
+
authenticationTransactionId: context.transactionId,
|
|
44
|
+
authenticationIntent: context.intent,
|
|
45
|
+
}, 'Password verification email delivery failed'),
|
|
46
|
+
rateLimiter: new RedisVerificationCodeRateLimiter(redis, config.verification.maxSendsPerEmailPerHour, config.verification.hmacKey),
|
|
47
|
+
});
|
|
48
|
+
const credentialLifecyclePublisher = new PasswordCredentialLifecyclePublisher({
|
|
49
|
+
application,
|
|
50
|
+
redis,
|
|
51
|
+
store: new TypeOrmPasswordCredentialLifecycleOutboxStore(database),
|
|
52
|
+
onError: (error, event) => logger.error({
|
|
53
|
+
err: error,
|
|
54
|
+
event: 'password-auth.credential-lifecycle.publish-failed',
|
|
55
|
+
authenticationTransactionId: event?.transactionId,
|
|
56
|
+
lifecycleKind: event?.kind,
|
|
57
|
+
}, 'Password credential lifecycle publication failed'),
|
|
58
|
+
});
|
|
59
|
+
const artifactBuildRoot = fileURLToPath(new URL('../../.hile-rsc', import.meta.url));
|
|
60
|
+
const { artifactRoot, manifest } = await resolveVerifiedRscPluginArtifact(artifactBuildRoot, HILE_RSC_RUNTIME);
|
|
61
|
+
if (manifest.pluginId !== 'auth.password') {
|
|
62
|
+
throw new Error(`Unexpected password authentication RSC plugin: ${manifest.pluginId}`);
|
|
63
|
+
}
|
|
64
|
+
const announcement = new AuthAnnouncementPublisher({
|
|
65
|
+
application,
|
|
66
|
+
instanceId: runtimeInstanceId,
|
|
67
|
+
generation: config.discovery.generation,
|
|
68
|
+
leaseMs: config.discovery.leaseMs,
|
|
69
|
+
rscBuildId: manifest.buildId,
|
|
70
|
+
onError: (error) => logger.error({
|
|
71
|
+
err: error,
|
|
72
|
+
event: 'password-auth.announcement.refresh-failed',
|
|
73
|
+
}, 'Password auth announcement refresh failed'),
|
|
74
|
+
});
|
|
75
|
+
const baseRscIdentity = resolveHileRscPluginIdentity({
|
|
76
|
+
pluginId: manifest.pluginId,
|
|
77
|
+
buildId: manifest.buildId,
|
|
78
|
+
development: false,
|
|
79
|
+
});
|
|
80
|
+
const rscIdentity = {
|
|
81
|
+
namespace: baseRscIdentity.namespace,
|
|
82
|
+
instanceId: `${baseRscIdentity.instanceId}-${randomBytes(8).toString('hex')}`,
|
|
83
|
+
};
|
|
84
|
+
const rscApplication = new Application({
|
|
85
|
+
namespace: rscIdentity.namespace,
|
|
86
|
+
registry: applicationRuntime.registry,
|
|
87
|
+
...(applicationRuntime.advertiseHost
|
|
88
|
+
? { advertiseHost: applicationRuntime.advertiseHost }
|
|
89
|
+
: {}),
|
|
90
|
+
});
|
|
91
|
+
const rscService = new RscPluginService({
|
|
92
|
+
manifest,
|
|
93
|
+
renderer: createOfficialRscRenderer(artifactRoot),
|
|
94
|
+
serverFunctions: new RscArtifactServerFunctionRuntime(artifactRoot),
|
|
95
|
+
});
|
|
96
|
+
const rscMicroPort = await detect();
|
|
97
|
+
const rsc = new HileRscPluginRuntime({
|
|
98
|
+
application: rscApplication,
|
|
99
|
+
service: rscService,
|
|
100
|
+
port: rscMicroPort,
|
|
101
|
+
discovery: {
|
|
102
|
+
namespace: rscIdentity.namespace,
|
|
103
|
+
instanceId: rscIdentity.instanceId,
|
|
104
|
+
priority: config.rsc.priority,
|
|
105
|
+
generation: config.rsc.generation,
|
|
106
|
+
artifactRoot,
|
|
107
|
+
// Deployment trust boundary: every peer able to publish on the internal Hile Micro
|
|
108
|
+
// network is trusted, so discovery intentionally carries no signing credential.
|
|
109
|
+
authentication: { mode: 'trusted-internal' },
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
try {
|
|
113
|
+
await announcement.start();
|
|
114
|
+
await rsc.start();
|
|
115
|
+
credentialLifecyclePublisher.start();
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
await Promise.allSettled([credentialLifecyclePublisher.close(), announcement.close(), rsc.close()]);
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
shutdown(async () => {
|
|
122
|
+
const results = await Promise.allSettled([
|
|
123
|
+
credentialLifecyclePublisher.close(),
|
|
124
|
+
rsc.close(),
|
|
125
|
+
announcement.close(),
|
|
126
|
+
]);
|
|
127
|
+
const errors = results
|
|
128
|
+
.filter((result) => result.status === 'rejected')
|
|
129
|
+
.map((result) => result.reason);
|
|
130
|
+
if (errors.length)
|
|
131
|
+
throw new AggregateError(errors, 'Password authentication cleanup failed');
|
|
132
|
+
});
|
|
133
|
+
return authentication;
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=password-runtime.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-runtime.service.js","sourceRoot":"","sources":["../../src/services/password-runtime.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,gCAAgC,EAChC,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAC9F,OAAO,EAAE,mCAAmC,EAAE,MAAM,8CAA8C,CAAC;AACnG,OAAO,EACL,oCAAoC,EACpC,6CAA6C,GAC9C,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAChD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAE9C,eAAe,aAAa,CAAC,8BAA8B,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAC9E,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/F,WAAW,CAAC,kBAAkB,CAAC;QAC/B,WAAW,CAAC,aAAa,CAAC;QAC1B,WAAW,CAAC,eAAe,CAAC;QAC5B,WAAW,CAAC,YAAY,CAAC;QACzB,WAAW,CAAC,aAAa,CAAC;QAC1B,WAAW,CAAC,YAAY,CAAC;KAC1B,CAAC,CAAC;IACH,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAAC;IAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;IAC3C,MAAM,iBAAiB,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3G,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,MAAM,CACtD,IAAI,mCAAmC,CAAC,QAAQ,CAAC,EACjD,MAAM,CAAC,QAAQ,EACf,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAChB,IAAI,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CACxE,CAAC;IACF,MAAM,cAAc,GAAG,IAAI,mBAAmB,CAC5C,aAAa,EACb,IAAI,kCAAkC,CAAC,KAAK,CAAC,EAC7C,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAChB;QACE,MAAM,EAAE,MAAM,CAAC,YAAY;QAC3B,MAAM,EAAE,KAAK;QACb,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;YAChD,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,kDAAkD;YACzD,2BAA2B,EAAE,OAAO,CAAC,aAAa;YAClD,oBAAoB,EAAE,OAAO,CAAC,MAAM;SACrC,EAAE,6CAA6C,CAAC;QACjD,WAAW,EAAE,IAAI,gCAAgC,CAC/C,KAAK,EACL,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAC3C,MAAM,CAAC,YAAY,CAAC,OAAO,CAC5B;KACF,CACF,CAAC;IACF,MAAM,4BAA4B,GAAG,IAAI,oCAAoC,CAAC;QAC5E,WAAW;QACX,KAAK;QACL,KAAK,EAAE,IAAI,6CAA6C,CAAC,QAAQ,CAAC;QAClE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;YACtC,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,mDAAmD;YAC1D,2BAA2B,EAAE,KAAK,EAAE,aAAa;YACjD,aAAa,EAAE,KAAK,EAAE,IAAI;SAC3B,EAAE,kDAAkD,CAAC;KACvD,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,gCAAgC,CACvE,iBAAiB,EACjB,gBAAgB,CACjB,CAAC;IACF,IAAI,QAAQ,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,kDAAkD,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,yBAAyB,CAAC;QACjD,WAAW;QACX,UAAU,EAAE,iBAAiB;QAC7B,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU;QACvC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;QACjC,UAAU,EAAE,QAAQ,CAAC,OAAO;QAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,2CAA2C;SACnD,EAAE,2CAA2C,CAAC;KAChD,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,4BAA4B,CAAC;QACnD,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG;QAClB,SAAS,EAAE,eAAe,CAAC,SAAS;QACpC,UAAU,EAAE,GAAG,eAAe,CAAC,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;KAC9E,CAAC;IACF,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC;QACrC,SAAS,EAAE,WAAW,CAAC,SAAS;QAChC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;QACrC,GAAG,CAAC,kBAAkB,CAAC,aAAa;YAClC,CAAC,CAAC,EAAE,aAAa,EAAE,kBAAkB,CAAC,aAAa,EAAE;YACrD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC;QACtC,QAAQ;QACR,QAAQ,EAAE,yBAAyB,CAAC,YAAY,CAAC;QACjD,eAAe,EAAE,IAAI,gCAAgC,CAAC,YAAY,CAAC;KACpE,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,MAAM,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,oBAAoB,CAAC;QACnC,WAAW,EAAE,cAAc;QAC3B,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE;YACT,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ;YAC7B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU;YACjC,YAAY;YACZ,mFAAmF;YACnF,gFAAgF;YAChF,cAAc,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;SAC7C;KACF,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,4BAA4B,CAAC,KAAK,EAAE,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,4BAA4B,CAAC,KAAK,EAAE,EAAE,YAAY,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpG,MAAM,KAAK,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACvC,4BAA4B,CAAC,KAAK,EAAE;YACpC,GAAG,CAAC,KAAK,EAAE;YACX,YAAY,CAAC,KAAK,EAAE;SACrB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,OAAO;aACnB,MAAM,CAAC,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC;aACjF,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAiB,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.service.d.ts","sourceRoot":"","sources":["../../src/services/redis.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineService, loadService } from '@hile/core';
|
|
2
|
+
import { createRedis } from '@hile/ioredis';
|
|
3
|
+
import configService from './config.service.js';
|
|
4
|
+
export default defineService('zlooks.password-auth.redis', async (shutdown) => {
|
|
5
|
+
const config = (await loadService(configService)).snapshot().infrastructure.redis;
|
|
6
|
+
const redis = await createRedis({
|
|
7
|
+
host: config.host,
|
|
8
|
+
port: config.port,
|
|
9
|
+
db: config.database,
|
|
10
|
+
keyPrefix: config.keyPrefix,
|
|
11
|
+
...(config.username ? { username: config.username } : {}),
|
|
12
|
+
...(config.password ? { password: config.password } : {}),
|
|
13
|
+
...(config.tls ? { tls: {} } : {}),
|
|
14
|
+
});
|
|
15
|
+
shutdown(() => redis.quit());
|
|
16
|
+
return redis;
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=redis.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../src/services/redis.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAEhD,eAAe,aAAa,CAAQ,4BAA4B,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IACnF,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;IAClF,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,EAAE,EAAE,MAAM,CAAC,QAAQ;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zlooks.cn/password-auth-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=24.0.0"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"zlooks-password-auth-server": "dist/command/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
".hile-rsc"
|
|
15
|
+
],
|
|
16
|
+
"zlooks": {
|
|
17
|
+
"kind": "service",
|
|
18
|
+
"description": "密码认证扩展服务",
|
|
19
|
+
"dependsOn": [],
|
|
20
|
+
"nodeConditions": [
|
|
21
|
+
"react-server"
|
|
22
|
+
],
|
|
23
|
+
"commands": {
|
|
24
|
+
"db": [
|
|
25
|
+
"sync",
|
|
26
|
+
"migrate"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build:rsc": "pnpm run clean:rsc && hile-rsc build",
|
|
32
|
+
"verify:rsc": "hile-rsc verify",
|
|
33
|
+
"build:runtime": "pnpm run clean:runtime && tsc -p tsconfig.runtime.json && fix-esm-import-path --preserve-import-type ./dist",
|
|
34
|
+
"build": "pnpm run build:rsc && pnpm run build:runtime",
|
|
35
|
+
"clean:runtime": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
36
|
+
"clean:rsc": "node -e \"require('node:fs').rmSync('.hile-rsc', { recursive: true, force: true })\"",
|
|
37
|
+
"dev": "NODE_OPTIONS=--conditions=react-server hile start --dev --env-file ~/.zlooks.cn/.env",
|
|
38
|
+
"start": "NODE_OPTIONS=--conditions=react-server hile start --env-file ~/.zlooks.cn/.env",
|
|
39
|
+
"test": "vitest run",
|
|
40
|
+
"typecheck": "tsc -p tsconfig.runtime.json --noEmit && tsc -p tsconfig.json --noEmit"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@hile/context": "4.0.2",
|
|
44
|
+
"@hile/core": "4.0.1",
|
|
45
|
+
"@hile/ioredis": "4.0.1",
|
|
46
|
+
"@hile/logger": "4.0.1",
|
|
47
|
+
"@hile/message-loader": "4.0.3",
|
|
48
|
+
"@hile/micro": "4.0.3",
|
|
49
|
+
"@hile/reactivity": "3.0.1",
|
|
50
|
+
"@hile/redis-lock": "4.0.1",
|
|
51
|
+
"@hile/redis-rate-limit": "4.0.2",
|
|
52
|
+
"@hile/reloader": "3.0.3",
|
|
53
|
+
"@hile/rsc": "1.0.17",
|
|
54
|
+
"@hile/rsc-discovery-hile": "1.0.14",
|
|
55
|
+
"@hile/schedule": "4.0.2",
|
|
56
|
+
"@hile/typeorm": "4.0.1",
|
|
57
|
+
"@node-rs/argon2": "2.1.0",
|
|
58
|
+
"@zlooks.cn/auth-extension-contract": "1.0.0",
|
|
59
|
+
"@zlooks.cn/database-command": "1.0.0",
|
|
60
|
+
"@zlooks.cn/global-config-shared": "1.0.0",
|
|
61
|
+
"@zlooks.cn/infrastructure": "1.0.0",
|
|
62
|
+
"@zlooks.cn/registry-config": "1.0.0",
|
|
63
|
+
"@zlooks.cn/service-command": "1.0.0",
|
|
64
|
+
"@zlooks.cn/ui": "1.0.0",
|
|
65
|
+
"@zlooks.cn/user-shared": "1.0.0",
|
|
66
|
+
"@zlooks.cn/utils": "1.0.0",
|
|
67
|
+
"antd": "6.6.1",
|
|
68
|
+
"detect-port": "2.1.0",
|
|
69
|
+
"ioredis": "5.11.1",
|
|
70
|
+
"nodemailer": "9.0.5",
|
|
71
|
+
"pg": "8.23.0",
|
|
72
|
+
"react": "19.2.8",
|
|
73
|
+
"react-dom": "19.2.8",
|
|
74
|
+
"react-server-dom-webpack": "19.2.8",
|
|
75
|
+
"typeorm": "1.1.0",
|
|
76
|
+
"zod": "4.4.3"
|
|
77
|
+
},
|
|
78
|
+
"devDependencies": {
|
|
79
|
+
"@hile/cli": "4.0.4",
|
|
80
|
+
"@hile/rsc-build": "1.0.14",
|
|
81
|
+
"@types/node": "26.2.0",
|
|
82
|
+
"@types/nodemailer": "8.0.1",
|
|
83
|
+
"@types/react": "19.2.18",
|
|
84
|
+
"@types/react-dom": "19.2.4",
|
|
85
|
+
"fix-esm-import-path": "1.10.3",
|
|
86
|
+
"pg-mem": "3.0.14",
|
|
87
|
+
"typescript": "7.0.2",
|
|
88
|
+
"vitest": "4.1.11"
|
|
89
|
+
},
|
|
90
|
+
"gitHead": "a3e825c2a62561f73f49a54720e286f08da63429"
|
|
91
|
+
}
|