@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.
Files changed (116) hide show
  1. package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/chunks/chunk-Q3WJINFG.js +48386 -0
  2. package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-page-frame-07c4de56a6-3F24AYCH.css +170 -0
  3. package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-page-frame-07c4de56a6-OCDODDFY.js +440 -0
  4. package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-password-form-3bd63d69e5-CCNUYY62.js +706 -0
  5. package/.hile-rsc/build-mtie8wg2-ca38f847/client-browser/src-plugin-password-form-3bd63d69e5-TRYMJX4F.css +195 -0
  6. package/.hile-rsc/build-mtie8wg2-ca38f847/client-ssr/chunks/chunk-36DACA7C.js +155814 -0
  7. package/.hile-rsc/build-mtie8wg2-ca38f847/client-ssr/src-plugin-page-frame-07c4de56a6-SYE4RRNX.js +441 -0
  8. package/.hile-rsc/build-mtie8wg2-ca38f847/client-ssr/src-plugin-password-form-3bd63d69e5-YVCPJXLL.js +708 -0
  9. package/.hile-rsc/build-mtie8wg2-ca38f847/plugin.json +90 -0
  10. package/.hile-rsc/build-mtie8wg2-ca38f847/server-rsc/index.js +15298 -0
  11. package/.hile-rsc/build-mtie8wg2-ca38f847/styles/4b3193c4f2b317ffed425ccf401342a4bdd6ccfd5f9c42def3315e776f166975.css +385 -0
  12. package/dist/command/index.d.ts +3 -0
  13. package/dist/command/index.d.ts.map +1 -0
  14. package/dist/command/index.js +24 -0
  15. package/dist/command/index.js.map +1 -0
  16. package/dist/config/schema.d.ts +72 -0
  17. package/dist/config/schema.d.ts.map +1 -0
  18. package/dist/config/schema.js +48 -0
  19. package/dist/config/schema.js.map +1 -0
  20. package/dist/email/nodemailer-verification-email-sender.d.ts +11 -0
  21. package/dist/email/nodemailer-verification-email-sender.d.ts.map +1 -0
  22. package/dist/email/nodemailer-verification-email-sender.js +54 -0
  23. package/dist/email/nodemailer-verification-email-sender.js.map +1 -0
  24. package/dist/email/verification-code-rate-limiter.d.ts +14 -0
  25. package/dist/email/verification-code-rate-limiter.d.ts.map +1 -0
  26. package/dist/email/verification-code-rate-limiter.js +27 -0
  27. package/dist/email/verification-code-rate-limiter.js.map +1 -0
  28. package/dist/email/verification-email-sender.d.ts +10 -0
  29. package/dist/email/verification-email-sender.d.ts.map +1 -0
  30. package/dist/email/verification-email-sender.js +2 -0
  31. package/dist/email/verification-email-sender.js.map +1 -0
  32. package/dist/messages/auth-extension/begin.msg.d.ts +3 -0
  33. package/dist/messages/auth-extension/begin.msg.d.ts.map +1 -0
  34. package/dist/messages/auth-extension/begin.msg.js +8 -0
  35. package/dist/messages/auth-extension/begin.msg.js.map +1 -0
  36. package/dist/messages/auth-extension/complete.msg.d.ts +3 -0
  37. package/dist/messages/auth-extension/complete.msg.d.ts.map +1 -0
  38. package/dist/messages/auth-extension/complete.msg.js +8 -0
  39. package/dist/messages/auth-extension/complete.msg.js.map +1 -0
  40. package/dist/migrations/index.d.ts +3 -0
  41. package/dist/migrations/index.d.ts.map +1 -0
  42. package/dist/migrations/index.js +2 -0
  43. package/dist/migrations/index.js.map +1 -0
  44. package/dist/password/attempt-coordinator.d.ts +12 -0
  45. package/dist/password/attempt-coordinator.d.ts.map +1 -0
  46. package/dist/password/attempt-coordinator.js +25 -0
  47. package/dist/password/attempt-coordinator.js.map +1 -0
  48. package/dist/password/credential-lifecycle-outbox.d.ts +42 -0
  49. package/dist/password/credential-lifecycle-outbox.d.ts.map +1 -0
  50. package/dist/password/credential-lifecycle-outbox.js +119 -0
  51. package/dist/password/credential-lifecycle-outbox.js.map +1 -0
  52. package/dist/password/credential-repository.d.ts +41 -0
  53. package/dist/password/credential-repository.d.ts.map +1 -0
  54. package/dist/password/credential-repository.js +64 -0
  55. package/dist/password/credential-repository.js.map +1 -0
  56. package/dist/password/password-authenticator.d.ts +59 -0
  57. package/dist/password/password-authenticator.d.ts.map +1 -0
  58. package/dist/password/password-authenticator.js +184 -0
  59. package/dist/password/password-authenticator.js.map +1 -0
  60. package/dist/password/typeorm-credential-repository.d.ts +15 -0
  61. package/dist/password/typeorm-credential-repository.d.ts.map +1 -0
  62. package/dist/password/typeorm-credential-repository.js +125 -0
  63. package/dist/password/typeorm-credential-repository.js.map +1 -0
  64. package/dist/persistence/entities.d.ts +29 -0
  65. package/dist/persistence/entities.d.ts.map +1 -0
  66. package/dist/persistence/entities.js +49 -0
  67. package/dist/persistence/entities.js.map +1 -0
  68. package/dist/runtime/auth-announcement-publisher.d.ts +18 -0
  69. package/dist/runtime/auth-announcement-publisher.d.ts.map +1 -0
  70. package/dist/runtime/auth-announcement-publisher.js +106 -0
  71. package/dist/runtime/auth-announcement-publisher.js.map +1 -0
  72. package/dist/runtime/password-auth-runtime.d.ts +33 -0
  73. package/dist/runtime/password-auth-runtime.d.ts.map +1 -0
  74. package/dist/runtime/password-auth-runtime.js +218 -0
  75. package/dist/runtime/password-auth-runtime.js.map +1 -0
  76. package/dist/runtime/password-state-store.d.ts +49 -0
  77. package/dist/runtime/password-state-store.d.ts.map +1 -0
  78. package/dist/runtime/password-state-store.js +130 -0
  79. package/dist/runtime/password-state-store.js.map +1 -0
  80. package/dist/service-identity.d.ts +2 -0
  81. package/dist/service-identity.d.ts.map +1 -0
  82. package/dist/service-identity.js +2 -0
  83. package/dist/service-identity.js.map +1 -0
  84. package/dist/services/application.service.d.ts +8 -0
  85. package/dist/services/application.service.d.ts.map +1 -0
  86. package/dist/services/application.service.js +22 -0
  87. package/dist/services/application.service.js.map +1 -0
  88. package/dist/services/config.service.d.ts +63 -0
  89. package/dist/services/config.service.d.ts.map +1 -0
  90. package/dist/services/config.service.js +20 -0
  91. package/dist/services/config.service.js.map +1 -0
  92. package/dist/services/database.service.d.ts +3 -0
  93. package/dist/services/database.service.d.ts.map +1 -0
  94. package/dist/services/database.service.js +23 -0
  95. package/dist/services/database.service.js.map +1 -0
  96. package/dist/services/email.service.d.ts +4 -0
  97. package/dist/services/email.service.d.ts.map +1 -0
  98. package/dist/services/email.service.js +37 -0
  99. package/dist/services/email.service.js.map +1 -0
  100. package/dist/services/logger.service.d.ts +4 -0
  101. package/dist/services/logger.service.d.ts.map +1 -0
  102. package/dist/services/logger.service.js +8 -0
  103. package/dist/services/logger.service.js.map +1 -0
  104. package/dist/services/password-auth.boot.d.ts +3 -0
  105. package/dist/services/password-auth.boot.d.ts.map +1 -0
  106. package/dist/services/password-auth.boot.js +4 -0
  107. package/dist/services/password-auth.boot.js.map +1 -0
  108. package/dist/services/password-runtime.service.d.ts +4 -0
  109. package/dist/services/password-runtime.service.d.ts.map +1 -0
  110. package/dist/services/password-runtime.service.js +135 -0
  111. package/dist/services/password-runtime.service.js.map +1 -0
  112. package/dist/services/redis.service.d.ts +4 -0
  113. package/dist/services/redis.service.d.ts.map +1 -0
  114. package/dist/services/redis.service.js +18 -0
  115. package/dist/services/redis.service.js.map +1 -0
  116. 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,3 @@
1
+ declare const _default: import("@hile/core").ServiceRegisterProps<import("typeorm").DataSource>;
2
+ export default _default;
3
+ //# sourceMappingURL=database.service.d.ts.map
@@ -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,4 @@
1
+ import type { VerificationEmailSender } from '../email/verification-email-sender.js';
2
+ declare const _default: import("@hile/core").ServiceRegisterProps<VerificationEmailSender>;
3
+ export default _default;
4
+ //# sourceMappingURL=email.service.d.ts.map
@@ -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,4 @@
1
+ import { type Logger } from '@hile/logger';
2
+ declare const _default: import("@hile/core").ServiceRegisterProps<Logger>;
3
+ export default _default;
4
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -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,3 @@
1
+ declare const _default: import("@hile/core").ServiceRegisterProps<import("../runtime/password-auth-runtime.js").PasswordAuthRuntime>;
2
+ export default _default;
3
+ //# sourceMappingURL=password-auth.boot.d.ts.map
@@ -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,4 @@
1
+ import { PasswordAuthRuntime } from '../runtime/password-auth-runtime.js';
2
+ declare const _default: import("@hile/core").ServiceRegisterProps<PasswordAuthRuntime>;
3
+ export default _default;
4
+ //# sourceMappingURL=password-runtime.service.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Redis } from 'ioredis';
2
+ declare const _default: import("@hile/core").ServiceRegisterProps<Redis>;
3
+ export default _default;
4
+ //# sourceMappingURL=redis.service.d.ts.map
@@ -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
+ }