@zlooks.cn/password-auth-server 1.0.4 → 1.0.6

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 (30) hide show
  1. package/.hile-rsc/{build-mtu1gn28-ec03cfb2/client-browser/chunks/chunk-CZF5VGOJ.js → build-mtwz7fk2-a912695b/client-browser/chunks/chunk-XJNPI5IC.js} +22 -70
  2. package/.hile-rsc/{build-mtu1gn28-ec03cfb2/client-browser/src-plugin-page-frame-07c4de56a6-C2WHPDGD.js → build-mtwz7fk2-a912695b/client-browser/src-plugin-page-frame-07c4de56a6-RAI54M3V.js} +1 -1
  3. package/.hile-rsc/{build-mtu1gn28-ec03cfb2/client-browser/src-plugin-password-form-3bd63d69e5-BCAMXKEX.js → build-mtwz7fk2-a912695b/client-browser/src-plugin-password-form-3bd63d69e5-DTURXEQT.js} +236 -115
  4. package/.hile-rsc/{build-mtu1gn28-ec03cfb2/client-ssr/chunks/chunk-RMKQVF3F.js → build-mtwz7fk2-a912695b/client-ssr/chunks/chunk-3ROBWYWF.js} +21 -69
  5. package/.hile-rsc/{build-mtu1gn28-ec03cfb2/client-ssr/src-plugin-page-frame-07c4de56a6-ICZZGKBP.js → build-mtwz7fk2-a912695b/client-ssr/src-plugin-page-frame-07c4de56a6-T2ICVKWU.js} +1 -1
  6. package/.hile-rsc/{build-mtu1gn28-ec03cfb2/client-ssr/src-plugin-password-form-3bd63d69e5-KF6ZLTDT.js → build-mtwz7fk2-a912695b/client-ssr/src-plugin-password-form-3bd63d69e5-7GPQ7P5J.js} +236 -115
  7. package/.hile-rsc/{build-mtu1gn28-ec03cfb2 → build-mtwz7fk2-a912695b}/plugin.json +18 -18
  8. package/.hile-rsc/{build-mtu1gn28-ec03cfb2 → build-mtwz7fk2-a912695b}/server-rsc/index.js +150 -131
  9. package/dist/config/schema.d.ts.map +1 -1
  10. package/dist/config/schema.js +37 -6
  11. package/dist/config/schema.js.map +1 -1
  12. package/dist/messages/auth-extension/begin.msg.js +6 -5
  13. package/dist/messages/auth-extension/begin.msg.js.map +1 -1
  14. package/dist/messages/auth-extension/complete.msg.js +6 -5
  15. package/dist/messages/auth-extension/complete.msg.js.map +1 -1
  16. package/dist/models/begin-authentication.model.d.ts +22 -0
  17. package/dist/models/begin-authentication.model.d.ts.map +1 -0
  18. package/dist/models/begin-authentication.model.js +13 -0
  19. package/dist/models/begin-authentication.model.js.map +1 -0
  20. package/dist/models/complete-authentication.model.d.ts +35 -0
  21. package/dist/models/complete-authentication.model.d.ts.map +1 -0
  22. package/dist/models/complete-authentication.model.js +13 -0
  23. package/dist/models/complete-authentication.model.js.map +1 -0
  24. package/dist/runtime/password-state-store.d.ts.map +1 -1
  25. package/dist/runtime/password-state-store.js +23 -10
  26. package/dist/runtime/password-state-store.js.map +1 -1
  27. package/package.json +26 -25
  28. /package/.hile-rsc/{build-mtu1gn28-ec03cfb2 → build-mtwz7fk2-a912695b}/client-browser/src-plugin-page-frame-07c4de56a6-3F24AYCH.css +0 -0
  29. /package/.hile-rsc/{build-mtu1gn28-ec03cfb2 → build-mtwz7fk2-a912695b}/client-browser/src-plugin-password-form-3bd63d69e5-TRYMJX4F.css +0 -0
  30. /package/.hile-rsc/{build-mtu1gn28-ec03cfb2 → build-mtwz7fk2-a912695b}/styles/4b3193c4f2b317ffed425ccf401342a4bdd6ccfd5f9c42def3315e776f166975.css +0 -0
@@ -27,12 +27,11 @@ import {
27
27
  RscLink,
28
28
  SizeContext_default,
29
29
  TextArea_default,
30
- USER_SESSION_COOKIE,
31
30
  VariantContext,
32
31
  __commonJS,
33
32
  __toESM,
34
33
  _toConsumableArray,
35
- browserApiDispatchResponseSchema,
34
+ browserApiPath,
36
35
  browserApiResponseSchema,
37
36
  cloneElement,
38
37
  clsx,
@@ -121,7 +120,7 @@ import {
121
120
  version,
122
121
  warning_default,
123
122
  zoomIn
124
- } from "./chunks/chunk-CZF5VGOJ.js";
123
+ } from "./chunks/chunk-XJNPI5IC.js";
125
124
 
126
125
  // ../../node_modules/.pnpm/@ant-design+icons-svg@4.5.0/node_modules/@ant-design/icons-svg/lib/asn/SearchOutlined.js
127
126
  var require_SearchOutlined = __commonJS({
@@ -519,54 +518,13 @@ var USER_EVENT_CATALOG = defineEventCatalog({
519
518
  });
520
519
 
521
520
  // ../user-shared/dist/index.js
522
- var USER_BROWSER_API_PUBLIC_ROUTES = Object.freeze([
523
- Object.freeze({
524
- exact: "/api/auth/methods",
525
- methods: Object.freeze(["GET"]),
526
- forwardCookieNames: Object.freeze([])
527
- }),
528
- Object.freeze({
529
- exact: "/api/user/shell",
530
- methods: Object.freeze(["GET"]),
531
- forwardCookieNames: Object.freeze([USER_SESSION_COOKIE])
532
- }),
533
- Object.freeze({
534
- exact: "/api/user",
535
- methods: Object.freeze(["GET", "PATCH"]),
536
- forwardCookieNames: Object.freeze([USER_SESSION_COOKIE])
537
- }),
538
- Object.freeze({
539
- exact: "/api/user/sessions",
540
- methods: Object.freeze(["GET"]),
541
- forwardCookieNames: Object.freeze([USER_SESSION_COOKIE])
542
- }),
543
- Object.freeze({
544
- exact: "/api/auth/transactions",
545
- methods: Object.freeze(["POST"]),
546
- forwardCookieNames: Object.freeze([])
547
- }),
548
- Object.freeze({
549
- prefix: "/api/auth/transactions/",
550
- methods: Object.freeze(["POST"]),
551
- forwardCookieNames: Object.freeze([])
552
- }),
553
- Object.freeze({
554
- exact: "/api/auth/logout",
555
- methods: Object.freeze(["POST"]),
556
- forwardCookieNames: Object.freeze([USER_SESSION_COOKIE])
557
- }),
558
- Object.freeze({
559
- exact: "/api/auth/session/refresh",
560
- methods: Object.freeze(["POST"]),
561
- forwardCookieNames: Object.freeze([USER_SESSION_COOKIE])
562
- }),
563
- Object.freeze({
564
- prefix: "/api/user/sessions/",
565
- methods: Object.freeze(["POST"]),
566
- forwardCookieNames: Object.freeze([USER_SESSION_COOKIE])
567
- })
568
- ]);
569
521
  var USER_ACCOUNT_HREF = "/user.account/account";
522
+ var USER_BROWSER_AUTH_METHODS_PATH = browserApiPath(USER_SERVICE_NAMESPACE, "/api/auth/methods");
523
+ var USER_BROWSER_AUTH_TRANSACTIONS_PATH = browserApiPath(USER_SERVICE_NAMESPACE, "/api/auth/transactions");
524
+ var USER_BROWSER_LOGOUT_PATH = browserApiPath(USER_SERVICE_NAMESPACE, "/api/auth/logout");
525
+ var USER_BROWSER_SESSION_REFRESH_PATH = browserApiPath(USER_SERVICE_NAMESPACE, "/api/auth/session/refresh");
526
+ var USER_BROWSER_USER_PATH = browserApiPath(USER_SERVICE_NAMESPACE, "/api/user");
527
+ var USER_BROWSER_USER_SESSIONS_PATH = browserApiPath(USER_SERVICE_NAMESPACE, "/api/user/sessions");
570
528
  var USER_BROWSER_API_ERROR_CODES = Object.freeze({
571
529
  crossOriginRejected: 1001,
572
530
  requestRejected: 1002,
@@ -612,6 +570,121 @@ var sessionCookieSchema = external_exports.discriminatedUnion("action", [
612
570
  }),
613
571
  external_exports.strictObject({ action: external_exports.literal("clear") })
614
572
  ]);
573
+ var sessionTokenSchema = external_exports.string().min(1).max(4096);
574
+ var authenticationMethodSchema = external_exports.strictObject({
575
+ id: external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/),
576
+ label: external_exports.string().trim().min(1).max(80),
577
+ capabilities: external_exports.strictObject({
578
+ login: external_exports.boolean(),
579
+ registration: external_exports.boolean()
580
+ }),
581
+ rsc: external_exports.strictObject({
582
+ pluginId: external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/),
583
+ slots: external_exports.strictObject({
584
+ login: absolutePath.optional(),
585
+ registration: absolutePath.optional()
586
+ })
587
+ })
588
+ }).readonly();
589
+ var userEmptyRequestSchema = external_exports.strictObject({}).readonly();
590
+ var userAuthenticationCatalogResponseSchema = external_exports.strictObject({
591
+ methods: external_exports.array(authenticationMethodSchema).max(64).readonly()
592
+ }).readonly();
593
+ var userAuthenticationBeginRequestSchema = external_exports.strictObject({
594
+ methodId: external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/),
595
+ intent: external_exports.enum(["login", "registration", "linking", "reauthentication", "recovery"]),
596
+ loginHint: external_exports.string().trim().min(1).max(320).optional(),
597
+ requestContext: external_exports.strictObject({ clientKey: external_exports.string().min(16).max(128) })
598
+ }).readonly();
599
+ var userAuthenticationBeginResponseSchema = external_exports.discriminatedUnion("status", [
600
+ external_exports.strictObject({
601
+ status: external_exports.literal("input-required"),
602
+ transactionId: external_exports.uuid(),
603
+ methodId: external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/)
604
+ }),
605
+ external_exports.strictObject({
606
+ status: external_exports.literal("redirect-required"),
607
+ transactionId: external_exports.uuid(),
608
+ methodId: external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/),
609
+ redirectUrl: external_exports.url().max(4096)
610
+ }),
611
+ external_exports.strictObject({
612
+ status: external_exports.literal("pending"),
613
+ transactionId: external_exports.uuid(),
614
+ methodId: external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/),
615
+ retryAfterMs: external_exports.number().int().min(250).max(6e4)
616
+ })
617
+ ]).readonly();
618
+ var userAuthenticationCompleteRequestSchema = external_exports.strictObject({
619
+ input: external_exports.unknown()
620
+ }).readonly();
621
+ var userAuthenticationCompletionResponseSchema = external_exports.discriminatedUnion("status", [
622
+ external_exports.strictObject({
623
+ status: external_exports.literal("verified"),
624
+ session: external_exports.strictObject({ token: sessionTokenSchema, expiresAt: external_exports.iso.datetime({ offset: true }) }),
625
+ user: external_exports.unknown()
626
+ }),
627
+ external_exports.strictObject({ status: external_exports.literal("denied"), code: external_exports.string().min(1).max(128) }),
628
+ external_exports.strictObject({
629
+ status: external_exports.literal("pending"),
630
+ retryAfterMs: external_exports.number().int().min(250).max(6e4)
631
+ })
632
+ ]).readonly();
633
+ var userAccountSchema = external_exports.strictObject({
634
+ id: external_exports.string().min(1).max(128),
635
+ displayName: external_exports.string().min(1).max(160).optional(),
636
+ avatar: external_exports.url({ protocol: /^https?$/ }).max(2048).optional(),
637
+ homepage: external_exports.url({ protocol: /^https?$/ }).max(2048).optional(),
638
+ bio: external_exports.string().max(500).optional(),
639
+ email: external_exports.email().max(320).optional(),
640
+ emailVerified: external_exports.boolean()
641
+ }).readonly();
642
+ var userAccountReadResponseSchema = external_exports.strictObject({ user: userAccountSchema }).readonly();
643
+ var userAccountUpdateRequestSchema = external_exports.strictObject({ input: external_exports.unknown() }).readonly();
644
+ var userSessionSchema = external_exports.strictObject({
645
+ id: external_exports.string().min(1).max(128),
646
+ createdAt: external_exports.iso.datetime(),
647
+ lastSeenAt: external_exports.iso.datetime(),
648
+ expiresAt: external_exports.iso.datetime(),
649
+ revoked: external_exports.boolean()
650
+ }).readonly();
651
+ var userAccountSessionsResponseSchema = external_exports.strictObject({
652
+ sessions: external_exports.array(userSessionSchema).max(100).readonly()
653
+ }).readonly();
654
+ var userSessionRevokeResponseSchema = external_exports.strictObject({ revoked: external_exports.boolean() }).readonly();
655
+ var userLogoutResponseSchema = external_exports.strictObject({ revoked: external_exports.boolean() }).readonly();
656
+ var userRefreshSessionResponseSchema = external_exports.strictObject({
657
+ session: external_exports.strictObject({
658
+ token: sessionTokenSchema,
659
+ expiresAt: external_exports.iso.datetime({ offset: true }),
660
+ user: userAccountSchema
661
+ })
662
+ }).readonly();
663
+ var userEventCatalogResponseSchema = external_exports.strictObject({
664
+ protocol: external_exports.literal("zlooks.event-catalog"),
665
+ protocolVersion: external_exports.literal(1),
666
+ providerId: external_exports.literal("user"),
667
+ displayName: external_exports.string().min(1).max(160),
668
+ producer: external_exports.literal(USER_SERVICE_NAMESPACE),
669
+ contractPackage: external_exports.literal("@zlooks.cn/user-shared"),
670
+ count: external_exports.literal(5),
671
+ delivery: external_exports.strictObject({
672
+ guarantee: external_exports.literal("at-least-once"),
673
+ deduplicateBy: external_exports.literal("eventId")
674
+ }),
675
+ events: external_exports.array(external_exports.strictObject({
676
+ type: external_exports.string().min(1).max(256),
677
+ title: external_exports.string().min(1).max(160),
678
+ description: external_exports.string().min(1).max(1e3),
679
+ producer: external_exports.literal(USER_SERVICE_NAMESPACE),
680
+ aggregateType: external_exports.string().min(1).max(128),
681
+ consumer: external_exports.strictObject({
682
+ packageName: external_exports.literal("@zlooks.cn/user-shared"),
683
+ exportName: external_exports.string().min(1).max(128)
684
+ }),
685
+ dataSchema: external_exports.record(external_exports.string(), external_exports.unknown())
686
+ })).length(5).readonly()
687
+ }).readonly();
615
688
  var userCurrentUserRequestSchema = external_exports.strictObject({}).readonly();
616
689
  var userPublicProfileSchema = external_exports.strictObject({
617
690
  id: external_exports.uuid(),
@@ -632,7 +705,9 @@ var userPublicProfilesRequestSchema = external_exports.strictObject({
632
705
  userIds: external_exports.array(external_exports.uuid()).min(1).max(100).refine((userIds) => new Set(userIds).size === userIds.length, { message: "User IDs must be unique" }).readonly()
633
706
  }).readonly();
634
707
  var userPublicProfilesResponseSchema = external_exports.strictObject({
635
- users: external_exports.array(userPublicProfileSchema).max(100).refine((users) => new Set(users.map((user) => user.id)).size === users.length, { message: "Public user profiles must be unique" }).readonly()
708
+ users: external_exports.array(userPublicProfileSchema).max(100).refine((users) => new Set(users.map((user) => user.id)).size === users.length, {
709
+ message: "Public user profiles must be unique"
710
+ }).readonly()
636
711
  }).readonly();
637
712
  var userBrowserApiRequestSchema = external_exports.strictObject({
638
713
  method: external_exports.enum(["GET", "POST", "PATCH"]),
@@ -641,24 +716,6 @@ var userBrowserApiRequestSchema = external_exports.strictObject({
641
716
  clientKey: external_exports.string().regex(/^[a-f0-9]{64}$/),
642
717
  body: external_exports.unknown().optional()
643
718
  }).readonly();
644
- var userBrowserApiProviderRequestSchema = external_exports.strictObject({
645
- method: external_exports.enum(["GET", "POST", "PATCH"]),
646
- path: absolutePath,
647
- origin: external_exports.string().max(2048).optional(),
648
- clientKey: external_exports.string().regex(/^[a-f0-9]{64}$/),
649
- body: external_exports.unknown().optional()
650
- }).readonly();
651
- var userBrowserApiProviderResponseSchema = browserApiDispatchResponseSchema.superRefine((response, context) => {
652
- for (const [index, effect] of (response.cookieEffects ?? []).entries()) {
653
- if (effect.name === USER_SESSION_COOKIE)
654
- continue;
655
- context.addIssue({
656
- code: "custom",
657
- message: "User Browser API may only mutate its declared session cookie",
658
- path: ["cookieEffects", index, "name"]
659
- });
660
- }
661
- }).readonly();
662
719
  var userBrowserApiResponseSchema = external_exports.strictObject({
663
720
  status: external_exports.number().int().min(200).max(599).refine((status) => status < 300 || status >= 400),
664
721
  body: browserApiResponseSchema,
@@ -686,6 +743,9 @@ var userCredentialLifecycleEventSchema = external_exports.strictObject({
686
743
  var userCredentialLifecycleResponseSchema = external_exports.strictObject({
687
744
  acknowledged: external_exports.literal(true)
688
745
  }).readonly();
746
+ function userBrowserTransactionCompletePath(transactionId) {
747
+ return `${USER_BROWSER_AUTH_TRANSACTIONS_PATH}/${encodeURIComponent(external_exports.string().trim().min(1).max(128).parse(transactionId))}/complete`;
748
+ }
689
749
 
690
750
  // ../../node_modules/.pnpm/antd@6.6.1_luxon@3.7.2_moment@2.30.1_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/antd/es/_util/getReactMajorVersionCanDelMe.js
691
751
  function getReactMajorVersion() {
@@ -4389,7 +4449,7 @@ function PasswordForm(props) {
4389
4449
  if (countdown <= 0) return;
4390
4450
  const timer = window.setInterval(() => setCountdown((value) => Math.max(0, value - 1)), 1e3);
4391
4451
  return () => window.clearInterval(timer);
4392
- }, [countdown > 0]);
4452
+ }, [countdown]);
4393
4453
  async function ensureTransaction() {
4394
4454
  if (transactionId) return transactionId;
4395
4455
  const created = await beginTransaction(request, props.intent);
@@ -4404,7 +4464,7 @@ function PasswordForm(props) {
4404
4464
  const requestId = pendingSend.current?.email === email ? pendingSend.current.requestId : crypto.randomUUID();
4405
4465
  pendingSend.current = { email, requestId };
4406
4466
  const challenge = await request(
4407
- `/api/auth/transactions/${encodeURIComponent(currentTransactionId)}/complete`,
4467
+ userBrowserTransactionCompletePath(currentTransactionId),
4408
4468
  {
4409
4469
  method: "POST",
4410
4470
  headers: { "content-type": "application/json" },
@@ -4432,12 +4492,16 @@ function PasswordForm(props) {
4432
4492
  code: values.code,
4433
4493
  ...needsPassword ? { password: values.password } : {}
4434
4494
  } : { action: "password-login", email: values.email, password: values.password };
4435
- await request(`/api/auth/transactions/${encodeURIComponent(currentTransactionId)}/complete`, {
4436
- method: "POST",
4437
- headers: { "content-type": "application/json" },
4438
- credentials: "same-origin",
4439
- body: JSON.stringify({ input })
4440
- }, { errorMessage: "\u6CA1\u6709\u5B8C\u6210\uFF0C\u8BF7\u68C0\u67E5\u8F93\u5165\u540E\u91CD\u8BD5", parse: parseAuthenticationCompletion });
4495
+ await request(
4496
+ userBrowserTransactionCompletePath(currentTransactionId),
4497
+ {
4498
+ method: "POST",
4499
+ headers: { "content-type": "application/json" },
4500
+ credentials: "same-origin",
4501
+ body: JSON.stringify({ input })
4502
+ },
4503
+ { errorMessage: "\u6CA1\u6709\u5B8C\u6210\uFF0C\u8BF7\u68C0\u67E5\u8F93\u5165\u540E\u91CD\u8BD5", parse: parseAuthenticationCompletion }
4504
+ );
4441
4505
  if (props.intent === "registration") {
4442
4506
  navigation.replace(USER_ACCOUNT_HREF);
4443
4507
  return;
@@ -4479,7 +4543,10 @@ function PasswordForm(props) {
4479
4543
  {
4480
4544
  "aria-label": "\u9009\u62E9\u767B\u5F55\u65B9\u5F0F",
4481
4545
  block: true,
4482
- options: [{ label: "\u5BC6\u7801\u767B\u5F55", value: "password" }, { label: "\u9A8C\u8BC1\u7801\u767B\u5F55", value: "code" }],
4546
+ options: [
4547
+ { label: "\u5BC6\u7801\u767B\u5F55", value: "password" },
4548
+ { label: "\u9A8C\u8BC1\u7801\u767B\u5F55", value: "code" }
4549
+ ],
4483
4550
  size: "large",
4484
4551
  value: mode,
4485
4552
  onChange: (value) => {
@@ -4492,7 +4559,18 @@ function PasswordForm(props) {
4492
4559
  }
4493
4560
  }
4494
4561
  ) }) : null,
4495
- /* @__PURE__ */ jsx(form_default.Item, { label: "\u90AE\u7BB1", name: "email", rules: emailRules, children: /* @__PURE__ */ jsx(input_default, { autoComplete: "username", disabled: codeSent, inputMode: "email", maxLength: 320, placeholder: "name@example.com", size: "large", type: "email" }) }),
4562
+ /* @__PURE__ */ jsx(form_default.Item, { label: "\u90AE\u7BB1", name: "email", rules: emailRules, children: /* @__PURE__ */ jsx(
4563
+ input_default,
4564
+ {
4565
+ autoComplete: "username",
4566
+ disabled: codeSent,
4567
+ inputMode: "email",
4568
+ maxLength: 320,
4569
+ placeholder: "name@example.com",
4570
+ size: "large",
4571
+ type: "email"
4572
+ }
4573
+ ) }),
4496
4574
  codeSent ? /* @__PURE__ */ jsx(
4497
4575
  button_default,
4498
4576
  {
@@ -4511,7 +4589,29 @@ function PasswordForm(props) {
4511
4589
  }
4512
4590
  ) : null,
4513
4591
  usesCode ? /* @__PURE__ */ jsx(form_default.Item, { label: "\u9A8C\u8BC1\u7801", required: true, children: /* @__PURE__ */ jsxs("div", { className: password_form_default.codeRow, children: [
4514
- /* @__PURE__ */ jsx(form_default.Item, { noStyle: true, name: "code", rules: [{ required: true, message: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801" }, { len: 6, message: "\u9A8C\u8BC1\u7801\u5E94\u4E3A 6 \u4F4D\u6570\u5B57" }, { pattern: /^\d{6}$/, message: "\u9A8C\u8BC1\u7801\u5E94\u4E3A 6 \u4F4D\u6570\u5B57" }], children: /* @__PURE__ */ jsx(input_default, { "aria-label": "\u9A8C\u8BC1\u7801", autoComplete: "one-time-code", inputMode: "numeric", maxLength: 6, placeholder: "6 \u4F4D\u9A8C\u8BC1\u7801", size: "large" }) }),
4592
+ /* @__PURE__ */ jsx(
4593
+ form_default.Item,
4594
+ {
4595
+ noStyle: true,
4596
+ name: "code",
4597
+ rules: [
4598
+ { required: true, message: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801" },
4599
+ { len: 6, message: "\u9A8C\u8BC1\u7801\u5E94\u4E3A 6 \u4F4D\u6570\u5B57" },
4600
+ { pattern: /^\d{6}$/, message: "\u9A8C\u8BC1\u7801\u5E94\u4E3A 6 \u4F4D\u6570\u5B57" }
4601
+ ],
4602
+ children: /* @__PURE__ */ jsx(
4603
+ input_default,
4604
+ {
4605
+ "aria-label": "\u9A8C\u8BC1\u7801",
4606
+ autoComplete: "one-time-code",
4607
+ inputMode: "numeric",
4608
+ maxLength: 6,
4609
+ placeholder: "6 \u4F4D\u9A8C\u8BC1\u7801",
4610
+ size: "large"
4611
+ }
4612
+ )
4613
+ }
4614
+ ),
4515
4615
  /* @__PURE__ */ jsx(button_default, { disabled: countdown > 0 || submitting, loading: sending, onClick: sendCode, size: "large", children: countdown > 0 ? `${countdown} \u79D2\u540E\u91CD\u53D1` : codeSent ? "\u91CD\u65B0\u53D1\u9001" : "\u53D1\u9001\u9A8C\u8BC1\u7801" })
4516
4616
  ] }) }) : null,
4517
4617
  needsPassword ? /* @__PURE__ */ jsx(
@@ -4532,7 +4632,18 @@ function PasswordForm(props) {
4532
4632
  )
4533
4633
  }
4534
4634
  ) : null,
4535
- /* @__PURE__ */ jsx(button_default, { block: true, htmlType: "submit", loading: submitting, size: "large", type: "primary", disabled: sending || usesCode && !codeSent, children: copy.submit })
4635
+ /* @__PURE__ */ jsx(
4636
+ button_default,
4637
+ {
4638
+ block: true,
4639
+ htmlType: "submit",
4640
+ loading: submitting,
4641
+ size: "large",
4642
+ type: "primary",
4643
+ disabled: sending || usesCode && !codeSent,
4644
+ children: copy.submit
4645
+ }
4646
+ )
4536
4647
  ]
4537
4648
  }
4538
4649
  ) }),
@@ -4546,14 +4657,16 @@ function PasswordForm(props) {
4546
4657
  );
4547
4658
  }
4548
4659
  function AlternateLinks({ intent }) {
4549
- if (intent === "registration") return /* @__PURE__ */ jsxs("p", { className: password_form_default.alternate, children: [
4550
- "\u5DF2\u7ECF\u6709\u8D26\u53F7\uFF1F",
4551
- /* @__PURE__ */ jsx(RscLink, { href: "/auth.password/login", children: "\u8FD4\u56DE\u767B\u5F55" })
4552
- ] });
4553
- if (intent === "recovery") return /* @__PURE__ */ jsxs("p", { className: password_form_default.alternate, children: [
4554
- "\u60F3\u8D77\u5BC6\u7801\u4E86\uFF1F",
4555
- /* @__PURE__ */ jsx(RscLink, { href: "/auth.password/login", children: "\u8FD4\u56DE\u767B\u5F55" })
4556
- ] });
4660
+ if (intent === "registration")
4661
+ return /* @__PURE__ */ jsxs("p", { className: password_form_default.alternate, children: [
4662
+ "\u5DF2\u7ECF\u6709\u8D26\u53F7\uFF1F",
4663
+ /* @__PURE__ */ jsx(RscLink, { href: "/auth.password/login", children: "\u8FD4\u56DE\u767B\u5F55" })
4664
+ ] });
4665
+ if (intent === "recovery")
4666
+ return /* @__PURE__ */ jsxs("p", { className: password_form_default.alternate, children: [
4667
+ "\u60F3\u8D77\u5BC6\u7801\u4E86\uFF1F",
4668
+ /* @__PURE__ */ jsx(RscLink, { href: "/auth.password/login", children: "\u8FD4\u56DE\u767B\u5F55" })
4669
+ ] });
4557
4670
  return /* @__PURE__ */ jsxs("div", { className: password_form_default.alternateLinks, children: [
4558
4671
  /* @__PURE__ */ jsxs("p", { children: [
4559
4672
  /* @__PURE__ */ jsx("span", { children: "\u8FD8\u6CA1\u6709\u8D26\u6237\uFF1F" }),
@@ -4566,12 +4679,16 @@ function AlternateLinks({ intent }) {
4566
4679
  ] });
4567
4680
  }
4568
4681
  async function beginTransaction(request, intent) {
4569
- return request("/api/auth/transactions", {
4570
- method: "POST",
4571
- headers: { "content-type": "application/json" },
4572
- credentials: "same-origin",
4573
- body: JSON.stringify({ methodId: "password", intent })
4574
- }, { errorMessage: "\u6682\u65F6\u65E0\u6CD5\u7EE7\u7EED\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5", parse: parseTransactionId });
4682
+ return request(
4683
+ USER_BROWSER_AUTH_TRANSACTIONS_PATH,
4684
+ {
4685
+ method: "POST",
4686
+ headers: { "content-type": "application/json" },
4687
+ credentials: "same-origin",
4688
+ body: JSON.stringify({ methodId: "password", intent })
4689
+ },
4690
+ { errorMessage: "\u6682\u65F6\u65E0\u6CD5\u7EE7\u7EED\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5", parse: parseTransactionId }
4691
+ );
4575
4692
  }
4576
4693
  function parseTransactionId(data) {
4577
4694
  if (data === null || typeof data !== "object" || Array.isArray(data)) throw new Error("Invalid transaction response");
@@ -4589,31 +4706,35 @@ var emailRules = [
4589
4706
  function passwordRules(requireMinimum) {
4590
4707
  return [
4591
4708
  { required: true, message: "\u8BF7\u8F93\u5165\u5BC6\u7801" },
4592
- ...requireMinimum ? [{
4593
- validator: async (_rule, value) => {
4594
- if (!value) return;
4595
- if (Array.from(value).length < 12) throw new Error("\u5BC6\u7801\u81F3\u5C11\u9700\u8981 12 \u4E2A\u5B57\u7B26");
4596
- if (new TextEncoder().encode(value).byteLength > 128) throw new Error("\u5BC6\u7801\u8FC7\u957F\uFF0C\u8BF7\u7F29\u77ED\u540E\u91CD\u8BD5");
4709
+ ...requireMinimum ? [
4710
+ {
4711
+ validator: async (_rule, value) => {
4712
+ if (!value) return;
4713
+ if (Array.from(value).length < 12) throw new Error("\u5BC6\u7801\u81F3\u5C11\u9700\u8981 12 \u4E2A\u5B57\u7B26");
4714
+ if (new TextEncoder().encode(value).byteLength > 128) throw new Error("\u5BC6\u7801\u8FC7\u957F\uFF0C\u8BF7\u7F29\u77ED\u540E\u91CD\u8BD5");
4715
+ }
4597
4716
  }
4598
- }] : [{ max: 128, message: "\u5BC6\u7801\u4E0D\u80FD\u8D85\u8FC7 128 \u4E2A\u5B57\u7B26" }]
4717
+ ] : [{ max: 128, message: "\u5BC6\u7801\u4E0D\u80FD\u8D85\u8FC7 128 \u4E2A\u5B57\u7B26" }]
4599
4718
  ];
4600
4719
  }
4601
4720
  var UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
4602
4721
  function pageCopy(intent) {
4603
- if (intent === "registration") return {
4604
- introduction: "\u9A8C\u8BC1\u90AE\u7BB1\u5E76\u521B\u5EFA\u8D26\u53F7\u540E\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u5B8C\u5584\u8D44\u6599\uFF0C\u6574\u7406\u5C5E\u4E8E\u4F60\u7684\u8BB0\u5F55\u3002",
4605
- step: "ACCOUNT / REGISTER",
4606
- title: "\u521B\u5EFA\u8D26\u6237",
4607
- description: "\u4F7F\u7528\u90AE\u7BB1\u9A8C\u8BC1\u7801\u548C\u5BC6\u7801\u521B\u5EFA\u8D26\u53F7\u3002",
4608
- submit: "\u521B\u5EFA\u8D26\u53F7"
4609
- };
4610
- if (intent === "recovery") return {
4611
- introduction: "\u9A8C\u8BC1\u6CE8\u518C\u90AE\u7BB1\u540E\u8BBE\u7F6E\u65B0\u5BC6\u7801\uFF0C\u65E7\u8BBE\u5907\u4E0A\u7684\u767B\u5F55\u4F1A\u81EA\u52A8\u9000\u51FA\u3002",
4612
- step: "ACCOUNT / RECOVERY",
4613
- title: "\u627E\u56DE\u5BC6\u7801",
4614
- description: "\u9A8C\u8BC1\u7801\u53EA\u4F1A\u53D1\u9001\u5230\u5DF2\u7ECF\u6CE8\u518C\u7684\u90AE\u7BB1\u3002",
4615
- submit: "\u66F4\u65B0\u5BC6\u7801\u5E76\u767B\u5F55"
4616
- };
4722
+ if (intent === "registration")
4723
+ return {
4724
+ introduction: "\u9A8C\u8BC1\u90AE\u7BB1\u5E76\u521B\u5EFA\u8D26\u53F7\u540E\uFF0C\u53EF\u4EE5\u7EE7\u7EED\u5B8C\u5584\u8D44\u6599\uFF0C\u6574\u7406\u5C5E\u4E8E\u4F60\u7684\u8BB0\u5F55\u3002",
4725
+ step: "ACCOUNT / REGISTER",
4726
+ title: "\u521B\u5EFA\u8D26\u6237",
4727
+ description: "\u4F7F\u7528\u90AE\u7BB1\u9A8C\u8BC1\u7801\u548C\u5BC6\u7801\u521B\u5EFA\u8D26\u53F7\u3002",
4728
+ submit: "\u521B\u5EFA\u8D26\u53F7"
4729
+ };
4730
+ if (intent === "recovery")
4731
+ return {
4732
+ introduction: "\u9A8C\u8BC1\u6CE8\u518C\u90AE\u7BB1\u540E\u8BBE\u7F6E\u65B0\u5BC6\u7801\uFF0C\u65E7\u8BBE\u5907\u4E0A\u7684\u767B\u5F55\u4F1A\u81EA\u52A8\u9000\u51FA\u3002",
4733
+ step: "ACCOUNT / RECOVERY",
4734
+ title: "\u627E\u56DE\u5BC6\u7801",
4735
+ description: "\u9A8C\u8BC1\u7801\u53EA\u4F1A\u53D1\u9001\u5230\u5DF2\u7ECF\u6CE8\u518C\u7684\u90AE\u7BB1\u3002",
4736
+ submit: "\u66F4\u65B0\u5BC6\u7801\u5E76\u767B\u5F55"
4737
+ };
4617
4738
  return {
4618
4739
  introduction: "\u767B\u5F55\u540E\u53EF\u4EE5\u7BA1\u7406\u4E2A\u4EBA\u8D44\u6599\u4E0E\u767B\u5F55\u4F1A\u8BDD\u3002",
4619
4740
  step: "ACCOUNT / SIGN IN",
@@ -21286,10 +21286,10 @@ var require_CopyOutlined = __commonJS({
21286
21286
  }
21287
21287
  });
21288
21288
 
21289
- // ../../node_modules/.pnpm/@hile+rsc@1.0.18_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._502f5628b4fa23beb10871f5285e92e2/node_modules/@hile/rsc/dist/client/navigation.js
21289
+ // ../../node_modules/.pnpm/@hile+rsc@1.0.21_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._7756791808b6e225b36e83038d404c27/node_modules/@hile/rsc/dist/client/navigation.js
21290
21290
  init_react();
21291
21291
 
21292
- // ../../node_modules/.pnpm/@hile+rsc@1.0.18_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._502f5628b4fa23beb10871f5285e92e2/node_modules/@hile/rsc/dist/client/navigation-internals.js
21292
+ // ../../node_modules/.pnpm/@hile+rsc@1.0.21_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._7756791808b6e225b36e83038d404c27/node_modules/@hile/rsc/dist/client/navigation-internals.js
21293
21293
  function resolveRscNavigationUrl(href, currentHref) {
21294
21294
  try {
21295
21295
  const destination = new URL(href, currentHref);
@@ -21307,7 +21307,7 @@ function shouldHandleRscNavigationClick(event, anchor, currentHref) {
21307
21307
  return current !== void 0 && destination !== void 0 && destination.origin === current.origin;
21308
21308
  }
21309
21309
 
21310
- // ../../node_modules/.pnpm/@hile+rsc@1.0.18_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._502f5628b4fa23beb10871f5285e92e2/node_modules/@hile/rsc/dist/client/navigation-runtime.js
21310
+ // ../../node_modules/.pnpm/@hile+rsc@1.0.21_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._7756791808b6e225b36e83038d404c27/node_modules/@hile/rsc/dist/client/navigation-runtime.js
21311
21311
  var runtimeStateKey = /* @__PURE__ */ Symbol.for("@hile/rsc/client/navigation/runtime");
21312
21312
  function runtimeState() {
21313
21313
  const scope = globalThis;
@@ -21317,7 +21317,7 @@ function getRscNavigationRuntime() {
21317
21317
  return runtimeState().installations.at(-1)?.navigation;
21318
21318
  }
21319
21319
 
21320
- // ../../node_modules/.pnpm/@hile+rsc@1.0.18_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._502f5628b4fa23beb10871f5285e92e2/node_modules/@hile/rsc/dist/client/navigation.js
21320
+ // ../../node_modules/.pnpm/@hile+rsc@1.0.21_react-dom@19.2.8_react@19.2.8__react@19.2.8_webpack@5.109.2_esbuild@0._7756791808b6e225b36e83038d404c27/node_modules/@hile/rsc/dist/client/navigation.js
21321
21321
  function browserLocation() {
21322
21322
  return typeof window === "undefined" ? void 0 : window.location;
21323
21323
  }
@@ -35927,19 +35927,13 @@ function date4(params) {
35927
35927
  config(en_default());
35928
35928
 
35929
35929
  // ../browser-api/dist/index.js
35930
- var BROWSER_API_PROVIDER_DISPATCH_OPERATION = "/browser/dispatch";
35931
- var identifier = external_exports.string().regex(/^[a-z][a-z0-9._-]{0,127}$/);
35930
+ var BROWSER_API_CONTROLLER_PREFIX = "/-";
35932
35931
  var namespace = external_exports.string().regex(/^[a-z][a-z0-9]*(?:\.[a-z][a-z0-9]*)+$/);
35933
35932
  var absolutePath = external_exports.string().min(1).max(2048).regex(/^\/(?!\/)[^?#\s]*$/);
35934
- var publicApiPath = external_exports.string().min(5).max(2048).regex(/^\/api\/(?!\/)[^?#\s]*$/);
35935
35933
  var instant = external_exports.iso.datetime({ offset: true });
35936
35934
  var cookieName = external_exports.string().regex(/^[A-Za-z][A-Za-z0-9_-]{0,127}$/);
35937
35935
  var httpMethod = external_exports.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]);
35938
- var cookieNames = external_exports.array(cookieName).max(8).refine((names) => new Set(names).size === names.length, "Cookie names must be unique").readonly();
35939
- var publicErrorSchema = external_exports.strictObject({
35940
- code: external_exports.number().int().safe().refine((code) => code !== 0),
35941
- message: external_exports.string().trim().min(1).max(500)
35942
- }).readonly();
35936
+ var httpHeaderValue = external_exports.string().max(8192);
35943
35937
  var successSchema = external_exports.strictObject({
35944
35938
  code: external_exports.literal(0),
35945
35939
  data: external_exports.unknown().refine((data) => data !== void 0)
@@ -35949,45 +35943,15 @@ var failureSchema = external_exports.strictObject({
35949
35943
  error: external_exports.string().trim().min(1).max(500)
35950
35944
  }).readonly();
35951
35945
  var browserApiResponseSchema = external_exports.union([successSchema, failureSchema]);
35952
- var exactRouteSchema = external_exports.strictObject({
35953
- exact: publicApiPath,
35954
- methods: external_exports.array(httpMethod).min(1).max(5).refine((methods) => new Set(methods).size === methods.length, "Methods must be unique").readonly(),
35955
- forwardCookieNames: cookieNames
35956
- }).readonly();
35957
- var prefixRouteSchema = external_exports.strictObject({
35958
- prefix: publicApiPath.refine((path) => path.endsWith("/"), "Route prefix must end with /"),
35959
- methods: external_exports.array(httpMethod).min(1).max(5).refine((methods) => new Set(methods).size === methods.length, "Methods must be unique").readonly(),
35960
- forwardCookieNames: cookieNames
35961
- }).readonly();
35962
- var browserApiPublicRouteSchema = external_exports.union([exactRouteSchema, prefixRouteSchema]);
35963
- var browserApiProviderLeaseSchema = external_exports.strictObject({
35964
- issuedAt: instant,
35965
- expiresAt: instant,
35966
- sequence: external_exports.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)
35967
- }).refine((lease) => Date.parse(lease.expiresAt) > Date.parse(lease.issuedAt), {
35968
- message: "Browser API Provider lease must expire after it is issued"
35969
- }).readonly();
35970
- var browserApiProviderAnnouncementSchema = external_exports.strictObject({
35971
- protocol: external_exports.literal("zlooks.browser-api.provider"),
35972
- providerId: identifier,
35973
- instanceId: identifier,
35974
- namespace,
35975
- operation: external_exports.literal(BROWSER_API_PROVIDER_DISPATCH_OPERATION),
35976
- routes: external_exports.array(browserApiPublicRouteSchema).min(1).max(64).refine((routes) => !routes.some((route, index) => routes.slice(index + 1).some((candidate) => routesOverlap(route, candidate))), "Provider routes must not overlap for the same HTTP method").readonly(),
35977
- writableCookieNames: cookieNames,
35978
- errors: external_exports.strictObject({
35979
- invalidRequest: publicErrorSchema,
35980
- unavailable: publicErrorSchema
35981
- }).readonly(),
35982
- lease: browserApiProviderLeaseSchema
35983
- }).readonly();
35984
- var browserApiProviderSnapshotSchema = external_exports.strictObject({
35985
- topic: external_exports.string().min(1).max(512),
35986
- payload: browserApiProviderAnnouncementSchema,
35987
- publishers: external_exports.array(external_exports.strictObject({
35988
- host: external_exports.string().trim().min(1).max(253),
35989
- port: external_exports.number().int().min(1).max(65535)
35990
- }).readonly()).length(1).readonly()
35946
+ var browserApiHttpRequestHeadersSchema = external_exports.strictObject({
35947
+ accept: httpHeaderValue.optional(),
35948
+ "accept-language": httpHeaderValue.optional(),
35949
+ "content-type": httpHeaderValue.optional(),
35950
+ "if-modified-since": httpHeaderValue.optional(),
35951
+ "if-none-match": httpHeaderValue.optional(),
35952
+ origin: external_exports.string().max(2048).optional(),
35953
+ range: httpHeaderValue.optional(),
35954
+ referer: httpHeaderValue.optional()
35991
35955
  }).readonly();
35992
35956
  var queryValue = external_exports.union([
35993
35957
  external_exports.string().max(512),
@@ -36023,10 +35987,11 @@ var browserApiCookieEffectSchema = external_exports.discriminatedUnion("action",
36023
35987
  name: cookieName
36024
35988
  })
36025
35989
  ]).readonly();
35990
+ var browserApiCookieEffectsSchema = external_exports.array(browserApiCookieEffectSchema).max(8).refine((effects) => new Set(effects.map((effect) => effect.name)).size === effects.length, "Cookie effects must target unique names").readonly();
36026
35991
  var browserApiDispatchResponseSchema = external_exports.strictObject({
36027
35992
  status: external_exports.number().int().min(200).max(599).refine((status) => status < 300 || status >= 400),
36028
35993
  body: browserApiResponseSchema,
36029
- cookieEffects: external_exports.array(browserApiCookieEffectSchema).max(8).refine((effects) => new Set(effects.map((effect) => effect.name)).size === effects.length, "Cookie effects must target unique names").readonly().optional()
35994
+ cookieEffects: browserApiCookieEffectsSchema.optional()
36030
35995
  }).superRefine((response, context) => {
36031
35996
  const httpSucceeded = response.status >= 200 && response.status < 300;
36032
35997
  if (httpSucceeded === !isBrowserApiFailure(response.body))
@@ -36037,26 +36002,15 @@ var browserApiDispatchResponseSchema = external_exports.strictObject({
36037
36002
  path: ["body", "code"]
36038
36003
  });
36039
36004
  }).readonly();
36005
+ function browserApiPath(serviceNamespace, microUrl) {
36006
+ return `${BROWSER_API_CONTROLLER_PREFIX}/${namespace.parse(serviceNamespace)}${absolutePath.parse(microUrl)}`;
36007
+ }
36040
36008
  function parseBrowserApiResponse(input) {
36041
36009
  return browserApiResponseSchema.parse(input);
36042
36010
  }
36043
36011
  function isBrowserApiFailure(response) {
36044
36012
  return response.code !== 0;
36045
36013
  }
36046
- function routesOverlap(left, right) {
36047
- if (!left.methods.some((method) => right.methods.includes(method)))
36048
- return false;
36049
- if ("exact" in left && "exact" in right)
36050
- return left.exact === right.exact;
36051
- if ("prefix" in left && "prefix" in right) {
36052
- return left.prefix.startsWith(right.prefix) || right.prefix.startsWith(left.prefix);
36053
- }
36054
- if ("exact" in left && "prefix" in right)
36055
- return left.exact.startsWith(right.prefix);
36056
- if ("prefix" in left && "exact" in right)
36057
- return right.exact.startsWith(left.prefix);
36058
- return false;
36059
- }
36060
36014
 
36061
36015
  // ../ui/dist/request-runtime.js
36062
36016
  var DEFAULT_ERROR_MESSAGE = "\u8BF7\u6C42\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5";
@@ -36149,7 +36103,6 @@ function useRequest() {
36149
36103
  }
36150
36104
 
36151
36105
  // ../utils/dist/index.js
36152
- var USER_SESSION_COOKIE = "zlooks_session";
36153
36106
  function deepFreeze(value) {
36154
36107
  if (value !== null && typeof value === "object" && !Object.isFrozen(value)) {
36155
36108
  Object.freeze(value);
@@ -36239,7 +36192,6 @@ export {
36239
36192
  require_lib14 as require_lib13,
36240
36193
  AppConfigContext,
36241
36194
  context_default,
36242
- USER_SESSION_COOKIE,
36243
36195
  deepFreeze,
36244
36196
  require_lib8 as require_lib14,
36245
36197
  require_EditOutlined,
@@ -36250,7 +36202,7 @@ export {
36250
36202
  useZlooksApp,
36251
36203
  external_exports,
36252
36204
  browserApiResponseSchema,
36253
- browserApiDispatchResponseSchema,
36205
+ browserApiPath,
36254
36206
  isBrowserApiFailure,
36255
36207
  isRequestError,
36256
36208
  useRequest