@rc-tool/unified-auth-hosted-service 0.2.9 → 0.3.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/README.md +109 -114
- package/dist/cli/config-file.d.ts +7 -0
- package/dist/cli/config-file.d.ts.map +1 -0
- package/dist/cli/config-file.js +77 -0
- package/dist/cli/config-file.js.map +1 -0
- package/dist/cli/config.d.ts +21 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +174 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/database.d.ts +33 -0
- package/dist/cli/database.d.ts.map +1 -0
- package/dist/cli/database.js +346 -0
- package/dist/cli/database.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +44 -79
- package/dist/cli/index.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -0
- package/dist/hosted-service/applications.d.ts +0 -6
- package/dist/hosted-service/applications.d.ts.map +1 -1
- package/dist/hosted-service/applications.js +50 -8
- package/dist/hosted-service/applications.js.map +1 -1
- package/dist/hosted-service/better-auth.d.ts +10 -0
- package/dist/hosted-service/better-auth.d.ts.map +1 -0
- package/dist/hosted-service/better-auth.js +213 -0
- package/dist/hosted-service/better-auth.js.map +1 -0
- package/dist/hosted-service/constants.d.ts +0 -4
- package/dist/hosted-service/constants.d.ts.map +1 -1
- package/dist/hosted-service/constants.js +0 -4
- package/dist/hosted-service/constants.js.map +1 -1
- package/dist/hosted-service/http.d.ts.map +1 -1
- package/dist/hosted-service/http.js +6 -8
- package/dist/hosted-service/http.js.map +1 -1
- package/dist/hosted-service/login-page/components.d.ts +0 -1
- package/dist/hosted-service/login-page/components.d.ts.map +1 -1
- package/dist/hosted-service/login-page/components.js +0 -6
- package/dist/hosted-service/login-page/components.js.map +1 -1
- package/dist/hosted-service/login-page/index.d.ts.map +1 -1
- package/dist/hosted-service/login-page/index.js +2 -18
- package/dist/hosted-service/login-page/index.js.map +1 -1
- package/dist/hosted-service/login-page/links.d.ts.map +1 -1
- package/dist/hosted-service/login-page/links.js +1 -12
- package/dist/hosted-service/login-page/links.js.map +1 -1
- package/dist/hosted-service/login-page/styles.d.ts +1 -1
- package/dist/hosted-service/login-page/styles.d.ts.map +1 -1
- package/dist/hosted-service/login-page/styles.js +0 -2
- package/dist/hosted-service/login-page/styles.js.map +1 -1
- package/dist/hosted-service/login-page/types.d.ts +2 -8
- package/dist/hosted-service/login-page/types.d.ts.map +1 -1
- package/dist/hosted-service/routes.d.ts.map +1 -1
- package/dist/hosted-service/routes.js +3 -12
- package/dist/hosted-service/routes.js.map +1 -1
- package/dist/hosted-service/service.d.ts +5 -8
- package/dist/hosted-service/service.d.ts.map +1 -1
- package/dist/hosted-service/service.js +56 -168
- package/dist/hosted-service/service.js.map +1 -1
- package/dist/hosted-service/types.d.ts +36 -46
- package/dist/hosted-service/types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/package.json +8 -4
- package/dist/cli/env.d.ts +0 -40
- package/dist/cli/env.d.ts.map +0 -1
- package/dist/cli/env.js +0 -353
- package/dist/cli/env.js.map +0 -1
- package/dist/hosted-service/cookies.d.ts +0 -17
- package/dist/hosted-service/cookies.d.ts.map +0 -1
- package/dist/hosted-service/cookies.js +0 -56
- package/dist/hosted-service/cookies.js.map +0 -1
- package/dist/hosted-service/crypto.d.ts +0 -3
- package/dist/hosted-service/crypto.d.ts.map +0 -1
- package/dist/hosted-service/crypto.js +0 -39
- package/dist/hosted-service/crypto.js.map +0 -1
- package/dist/hosted-service/oauth.d.ts +0 -11
- package/dist/hosted-service/oauth.d.ts.map +0 -1
- package/dist/hosted-service/oauth.js +0 -37
- package/dist/hosted-service/oauth.js.map +0 -1
- package/dist/hosted-service/providers/feishu.d.ts +0 -4
- package/dist/hosted-service/providers/feishu.d.ts.map +0 -1
- package/dist/hosted-service/providers/feishu.js +0 -72
- package/dist/hosted-service/providers/feishu.js.map +0 -1
- package/dist/hosted-service/providers/github.d.ts +0 -4
- package/dist/hosted-service/providers/github.d.ts.map +0 -1
- package/dist/hosted-service/providers/github.js +0 -73
- package/dist/hosted-service/providers/github.js.map +0 -1
- package/dist/hosted-service/providers/google.d.ts +0 -4
- package/dist/hosted-service/providers/google.d.ts.map +0 -1
- package/dist/hosted-service/providers/google.js +0 -54
- package/dist/hosted-service/providers/google.js.map +0 -1
- package/dist/hosted-service/session.d.ts +0 -11
- package/dist/hosted-service/session.d.ts.map +0 -1
- package/dist/hosted-service/session.js +0 -54
- package/dist/hosted-service/session.js.map +0 -1
- package/dist/hosted-service/store/file.d.ts +0 -6
- package/dist/hosted-service/store/file.d.ts.map +0 -1
- package/dist/hosted-service/store/file.js +0 -63
- package/dist/hosted-service/store/file.js.map +0 -1
- package/dist/hosted-service/store/index.d.ts +0 -6
- package/dist/hosted-service/store/index.d.ts.map +0 -1
- package/dist/hosted-service/store/index.js +0 -3
- package/dist/hosted-service/store/index.js.map +0 -1
- package/dist/hosted-service/store/memory.d.ts +0 -6
- package/dist/hosted-service/store/memory.d.ts.map +0 -1
- package/dist/hosted-service/store/memory.js +0 -19
- package/dist/hosted-service/store/memory.js.map +0 -1
- package/dist/hosted-service/store/state.d.ts +0 -9
- package/dist/hosted-service/store/state.d.ts.map +0 -1
- package/dist/hosted-service/store/state.js +0 -156
- package/dist/hosted-service/store/state.js.map +0 -1
- package/dist/hosted-service/store/types.d.ts +0 -56
- package/dist/hosted-service/store/types.d.ts.map +0 -1
- package/dist/hosted-service/store/types.js +0 -2
- package/dist/hosted-service/store/types.js.map +0 -1
- package/dist/hosted-service-cli.d.ts +0 -2
- package/dist/hosted-service-cli.d.ts.map +0 -1
- package/dist/hosted-service-cli.js +0 -85
- package/dist/hosted-service-cli.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const loginPageStyles = "\n:root { color-scheme: dark; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n* { box-sizing: border-box; }\nbody { margin: 0; min-height: 100vh; overflow-x: hidden; background: #08131f; color: #f8fafc; }\nbody::before, body::after { content: \"\"; position: fixed; inset: 0; pointer-events: none; }\nbody::before {\n background: var(--auth-background-image, url(\"https://images.unsplash.com/photo-1552664730-d307ca884978?auto=format&fit=crop&w=1800&q=82\")) center / cover no-repeat;\n transform: scale(1.02);\n}\nbody::after {\n background:\n linear-gradient(90deg, rgb(7 18 32 / 92%) 0%, rgb(9 31 45 / 78%) 48%, rgb(14 111 100 / 72%) 100%),\n linear-gradient(180deg, rgb(5 12 22 / 16%) 0%, rgb(5 12 22 / 56%) 100%);\n}\na { min-height: 44px; display: flex; align-items: center; justify-content: center; border-radius: 6px; text-decoration: none; font-weight: 700; }\n.auth-status {\n position: fixed; z-index: 2; top: 24px; right: 24px; min-height: 36px; display: inline-flex; align-items: center;\n padding: 0 14px; border: 1px solid rgb(148 163 184 / 24%); border-radius: 8px; background: rgb(15 23 42 / 74%);\n box-shadow: 0 14px 32px rgb(0 0 0 / 22%); color: #e2e8f0; font-size: 13px;\n}\n.auth-shell {\n position: relative; z-index: 1; min-height: 100vh; width: min(1280px, calc(100vw - 48px)); margin: 0 auto;\n display: grid; grid-template-columns: minmax(0, 1fr) minmax(360px, 440px); align-items: center; gap: 72px; padding: 72px 0;\n}\n.hero-copy { max-width: 760px; }\n.brand-row { display: flex; align-items: center; gap: 12px; margin-bottom: 30px; }\n.mark {\n width: 56px; height: 56px; display: grid; place-items: center; border-radius: 8px;\n background: linear-gradient(135deg, #4f8cff 0%, #22d4b8 100%); color: #fff; box-shadow: 0 16px 32px rgb(34 211 238 / 18%);\n}\n.mark svg { width: 30px; height: 30px; display: block; }\n.mark img { width: 100%; height: 100%; display: block; border-radius: inherit; object-fit: cover; }\n.brand-title {\n display: inline-flex; align-items: center; min-height: 28px; padding: 0 10px; border-radius: 6px;\n background: rgb(15 23 42 / 48%); color: #bfdbfe; font-size: 14px; font-weight: 700;\n}\n.hero-kicker { margin-bottom: 16px; color: #67e8f9; font-size: 14px; font-weight: 800; }\nh1 { max-width: 720px; margin: 0 0 18px; color: #fff; font-size: 40px; line-height: 1.18; font-weight: 800; }\n.hero-copy p { max-width: 680px; margin: 0; color: #e2e8f0; font-size: 16px; line-height: 1.8; font-weight: 600; }\n.login-panel {\n width: 100%; border: 1px solid rgb(148 163 184 / 18%); border-radius: 8px; background: rgb(15 23 42 / 92%);\n box-shadow: 0 26px 70px rgb(0 0 0 / 38%); padding: 34px;\n}\n.login-kicker { margin-bottom: 8px; color: #93c5fd; font-size: 13px; font-weight: 800; }\nh2 { margin: 0 0 14px; color: #f8fafc; font-size: 26px; line-height: 1.25; font-weight: 800; }\n.login-panel p { margin: 0 0 24px; color: #aebccc; font-size: 14px; line-height: 1.7; font-weight: 600; }\n.provider-list { display: grid; gap: 14px; }\n.primary-provider {\n min-height: 52px; gap: 10px; padding: 0 18px; background: #4f7fe5; color: #fff; box-shadow: 0 10px 22px rgb(79 127 229 / 28%);\n transition: transform .16s ease, box-shadow .16s ease, background .16s ease;\n}\n.primary-provider:hover { background: #5d8cf1; box-shadow: 0 16px 30px rgb(79 127 229 / 36%); transform: translateY(-1px); }\n.primary-provider-icon { width: 22px; height: 22px; display: grid; place-items: center; flex: 0 0 auto; color: #fff; background: transparent; border: 0; }\n.primary-provider-icon svg { width: 21px; height: 21px; display: block; }\n.primary-provider .provider-name { margin: 0; font-size: inherit; }\n.provider-divider { display: flex; align-items: center; gap: 12px; color: #7d8da3; font-size: 12px; font-weight: 700; }\n.provider-divider::before, .provider-divider::after { content: \"\"; height: 1px; flex: 1; background: rgb(148 163 184 / 16%); }\n.secondary-provider-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }\n.provider-option {\n min-height: 72px; flex-direction: column; gap: 8px; padding: 12px 10px; border: 1px solid rgb(148 163 184 / 18%);\n color: #e5edf8; background: rgb(30 41 59 / 62%); text-align: center; transition: transform .16s ease, border-color .16s ease, background .16s ease;\n}\n.provider-option:hover { border-color: rgb(147 197 253 / 52%); background: rgb(30 64 94 / 76%); transform: translateY(-1px); }\n.provider-icon { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 6px; flex: 0 0 auto; }\n.provider-icon svg { width: 22px; height: 22px; display: block; }\n.provider-icon-feishu { background: transparent; }\n.provider-icon-google { background: #fff; border: 1px solid rgb(226 232 240 / 86%); }\n.provider-icon-github { background: #0b1120; color: #fff; }\n.provider-name { max-width: 100%; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.provider-empty { border: 1px solid rgb(251 191 36 / 24%); color: #fde68a; background: rgb(120 53 15 / 28%); border-radius: 6px; padding: 12px 14px; line-height: 1.6; font-size: 14px; }\n.
|
|
1
|
+
export declare const loginPageStyles = "\n:root { color-scheme: dark; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; }\n* { box-sizing: border-box; }\nbody { margin: 0; min-height: 100vh; overflow-x: hidden; background: #08131f; color: #f8fafc; }\nbody::before, body::after { content: \"\"; position: fixed; inset: 0; pointer-events: none; }\nbody::before {\n background: var(--auth-background-image, url(\"https://images.unsplash.com/photo-1552664730-d307ca884978?auto=format&fit=crop&w=1800&q=82\")) center / cover no-repeat;\n transform: scale(1.02);\n}\nbody::after {\n background:\n linear-gradient(90deg, rgb(7 18 32 / 92%) 0%, rgb(9 31 45 / 78%) 48%, rgb(14 111 100 / 72%) 100%),\n linear-gradient(180deg, rgb(5 12 22 / 16%) 0%, rgb(5 12 22 / 56%) 100%);\n}\na { min-height: 44px; display: flex; align-items: center; justify-content: center; border-radius: 6px; text-decoration: none; font-weight: 700; }\n.auth-status {\n position: fixed; z-index: 2; top: 24px; right: 24px; min-height: 36px; display: inline-flex; align-items: center;\n padding: 0 14px; border: 1px solid rgb(148 163 184 / 24%); border-radius: 8px; background: rgb(15 23 42 / 74%);\n box-shadow: 0 14px 32px rgb(0 0 0 / 22%); color: #e2e8f0; font-size: 13px;\n}\n.auth-shell {\n position: relative; z-index: 1; min-height: 100vh; width: min(1280px, calc(100vw - 48px)); margin: 0 auto;\n display: grid; grid-template-columns: minmax(0, 1fr) minmax(360px, 440px); align-items: center; gap: 72px; padding: 72px 0;\n}\n.hero-copy { max-width: 760px; }\n.brand-row { display: flex; align-items: center; gap: 12px; margin-bottom: 30px; }\n.mark {\n width: 56px; height: 56px; display: grid; place-items: center; border-radius: 8px;\n background: linear-gradient(135deg, #4f8cff 0%, #22d4b8 100%); color: #fff; box-shadow: 0 16px 32px rgb(34 211 238 / 18%);\n}\n.mark svg { width: 30px; height: 30px; display: block; }\n.mark img { width: 100%; height: 100%; display: block; border-radius: inherit; object-fit: cover; }\n.brand-title {\n display: inline-flex; align-items: center; min-height: 28px; padding: 0 10px; border-radius: 6px;\n background: rgb(15 23 42 / 48%); color: #bfdbfe; font-size: 14px; font-weight: 700;\n}\n.hero-kicker { margin-bottom: 16px; color: #67e8f9; font-size: 14px; font-weight: 800; }\nh1 { max-width: 720px; margin: 0 0 18px; color: #fff; font-size: 40px; line-height: 1.18; font-weight: 800; }\n.hero-copy p { max-width: 680px; margin: 0; color: #e2e8f0; font-size: 16px; line-height: 1.8; font-weight: 600; }\n.login-panel {\n width: 100%; border: 1px solid rgb(148 163 184 / 18%); border-radius: 8px; background: rgb(15 23 42 / 92%);\n box-shadow: 0 26px 70px rgb(0 0 0 / 38%); padding: 34px;\n}\n.login-kicker { margin-bottom: 8px; color: #93c5fd; font-size: 13px; font-weight: 800; }\nh2 { margin: 0 0 14px; color: #f8fafc; font-size: 26px; line-height: 1.25; font-weight: 800; }\n.login-panel p { margin: 0 0 24px; color: #aebccc; font-size: 14px; line-height: 1.7; font-weight: 600; }\n.provider-list { display: grid; gap: 14px; }\n.primary-provider {\n min-height: 52px; gap: 10px; padding: 0 18px; background: #4f7fe5; color: #fff; box-shadow: 0 10px 22px rgb(79 127 229 / 28%);\n transition: transform .16s ease, box-shadow .16s ease, background .16s ease;\n}\n.primary-provider:hover { background: #5d8cf1; box-shadow: 0 16px 30px rgb(79 127 229 / 36%); transform: translateY(-1px); }\n.primary-provider-icon { width: 22px; height: 22px; display: grid; place-items: center; flex: 0 0 auto; color: #fff; background: transparent; border: 0; }\n.primary-provider-icon svg { width: 21px; height: 21px; display: block; }\n.primary-provider .provider-name { margin: 0; font-size: inherit; }\n.provider-divider { display: flex; align-items: center; gap: 12px; color: #7d8da3; font-size: 12px; font-weight: 700; }\n.provider-divider::before, .provider-divider::after { content: \"\"; height: 1px; flex: 1; background: rgb(148 163 184 / 16%); }\n.secondary-provider-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }\n.provider-option {\n min-height: 72px; flex-direction: column; gap: 8px; padding: 12px 10px; border: 1px solid rgb(148 163 184 / 18%);\n color: #e5edf8; background: rgb(30 41 59 / 62%); text-align: center; transition: transform .16s ease, border-color .16s ease, background .16s ease;\n}\n.provider-option:hover { border-color: rgb(147 197 253 / 52%); background: rgb(30 64 94 / 76%); transform: translateY(-1px); }\n.provider-icon { width: 30px; height: 30px; display: grid; place-items: center; border-radius: 6px; flex: 0 0 auto; }\n.provider-icon svg { width: 22px; height: 22px; display: block; }\n.provider-icon-feishu { background: transparent; }\n.provider-icon-google { background: #fff; border: 1px solid rgb(226 232 240 / 86%); }\n.provider-icon-github { background: #0b1120; color: #fff; }\n.provider-name { max-width: 100%; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.provider-empty { border: 1px solid rgb(251 191 36 / 24%); color: #fde68a; background: rgb(120 53 15 / 28%); border-radius: 6px; padding: 12px 14px; line-height: 1.6; font-size: 14px; }\n.error { border: 1px solid rgb(248 113 113 / 36%); color: #fecaca; background: rgb(127 29 29 / 34%); border-radius: 6px; padding: 10px 12px; margin-bottom: 16px; }\n.footer-row { margin-top: 18px; color: #64748b; font-size: 12px; }\n@media (max-width: 780px) {\n .auth-status { top: 16px; right: 16px; }\n .auth-shell { width: min(100% - 32px, 520px); min-height: auto; grid-template-columns: 1fr; gap: 30px; padding: 92px 0 34px; }\n .hero-copy { max-width: none; }\n .brand-row { margin-bottom: 22px; }\n .mark { width: 48px; height: 48px; }\n .mark svg { width: 26px; height: 26px; }\n h1 { font-size: 30px; }\n .hero-copy p { font-size: 15px; }\n .login-panel { padding: 26px; }\n h2 { font-size: 23px; }\n}\n@media (max-width: 420px) {\n .auth-shell { width: min(100% - 24px, 420px); padding-top: 82px; }\n .auth-status { min-height: 32px; padding: 0 11px; font-size: 12px; }\n .brand-title { max-width: 230px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n h1 { font-size: 27px; }\n .login-panel { padding: 22px; }\n .secondary-provider-list { grid-template-columns: 1fr; }\n}\n";
|
|
2
2
|
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/hosted-service/login-page/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/hosted-service/login-page/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,4pMA4F3B,CAAC"}
|
|
@@ -68,8 +68,6 @@ h2 { margin: 0 0 14px; color: #f8fafc; font-size: 26px; line-height: 1.25; font-
|
|
|
68
68
|
.provider-icon-github { background: #0b1120; color: #fff; }
|
|
69
69
|
.provider-name { max-width: 100%; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
70
70
|
.provider-empty { border: 1px solid rgb(251 191 36 / 24%); color: #fde68a; background: rgb(120 53 15 / 28%); border-radius: 6px; padding: 12px 14px; line-height: 1.6; font-size: 14px; }
|
|
71
|
-
.dev-link { min-height: 42px; margin-top: 12px; border: 1px solid rgb(148 163 184 / 16%); background: rgb(15 23 42 / 48%); color: #cbd5e1; font-size: 13px; }
|
|
72
|
-
.dev-link:hover { border-color: rgb(148 163 184 / 34%); background: rgb(30 41 59 / 72%); }
|
|
73
71
|
.error { border: 1px solid rgb(248 113 113 / 36%); color: #fecaca; background: rgb(127 29 29 / 34%); border-radius: 6px; padding: 10px 12px; margin-bottom: 16px; }
|
|
74
72
|
.footer-row { margin-top: 18px; color: #64748b; font-size: 12px; }
|
|
75
73
|
@media (max-width: 780px) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/hosted-service/login-page/styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/hosted-service/login-page/styles.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4F9B,CAAC"}
|
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { HostedAuthApplication, HostedAuthLoginPageComponent, HostedAuthLoginPageModel, HostedAuthLoginPageProps, HostedAuthLoginProviderId, HostedAuthLoginProviderView } from "../types.js";
|
|
2
2
|
export type LoginProviderId = HostedAuthLoginProviderId;
|
|
3
3
|
export type LoginProviderView = HostedAuthLoginProviderView;
|
|
4
4
|
export type LoginPageModel = HostedAuthLoginPageModel;
|
|
5
5
|
export type LoginPageProps = HostedAuthLoginPageProps;
|
|
6
6
|
export type LoginPageComponent = HostedAuthLoginPageComponent;
|
|
7
7
|
export type LoginPageLinks = {
|
|
8
|
-
devLogin: string;
|
|
9
8
|
providers: LoginProviderView[];
|
|
10
9
|
};
|
|
11
10
|
export type RenderLoginPageParams = {
|
|
12
|
-
allowDevLogin: boolean;
|
|
13
|
-
appearance?: HostedAuthAppearance;
|
|
14
11
|
app: HostedAuthApplication;
|
|
15
12
|
authBaseURL: string;
|
|
16
13
|
clientId: string;
|
|
14
|
+
enabledProviders: HostedAuthLoginProviderId[];
|
|
17
15
|
error?: string;
|
|
18
|
-
feishuEnabled: boolean;
|
|
19
|
-
githubEnabled: boolean;
|
|
20
|
-
googleEnabled: boolean;
|
|
21
|
-
loginPage?: HostedAuthLoginPageConfig;
|
|
22
16
|
loginPageComponent?: HostedAuthLoginPageComponent;
|
|
23
17
|
redirectURI: string;
|
|
24
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hosted-service/login-page/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hosted-service/login-page/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,4BAA4B,EAE5B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAExD,MAAM,MAAM,iBAAiB,GAAG,2BAA2B,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,wBAAwB,CAAC;AAEtD,MAAM,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,iBAAiB,EAAE,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,GAAG,EAAE,qBAAqB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,yBAAyB,EAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;IAClD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/hosted-service/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,sBAAsB,CAAC;IAC5B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACrD;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CAkBxG;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,EACnD,OAAO,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/hosted-service/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE7E,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,sBAAsB,CAAC;IAC5B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACrD;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CAkBxG;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,EACnD,OAAO,EAAE,OAAO,qBAiCjB"}
|
|
@@ -29,24 +29,12 @@ export async function handleHostedAuthRequest(service, request) {
|
|
|
29
29
|
if (path === "/api/auth/context") {
|
|
30
30
|
return service.handleContext(request);
|
|
31
31
|
}
|
|
32
|
-
if (path === "/api/auth/dev-login") {
|
|
33
|
-
return service.handleDevLogin(request);
|
|
34
|
-
}
|
|
35
|
-
if (path === "/api/auth/feishu/callback") {
|
|
36
|
-
return service.handleFeishuCallback(request);
|
|
37
|
-
}
|
|
38
32
|
if (path === "/api/auth/feishu/start") {
|
|
39
33
|
return service.handleFeishuStart(request);
|
|
40
34
|
}
|
|
41
|
-
if (path === "/api/auth/google/callback") {
|
|
42
|
-
return service.handleGoogleCallback(request);
|
|
43
|
-
}
|
|
44
35
|
if (path === "/api/auth/google/start") {
|
|
45
36
|
return service.handleGoogleStart(request);
|
|
46
37
|
}
|
|
47
|
-
if (path === "/api/auth/github/callback") {
|
|
48
|
-
return service.handleGitHubCallback(request);
|
|
49
|
-
}
|
|
50
38
|
if (path === "/api/auth/github/start") {
|
|
51
39
|
return service.handleGitHubStart(request);
|
|
52
40
|
}
|
|
@@ -56,6 +44,9 @@ export async function handleHostedAuthRequest(service, request) {
|
|
|
56
44
|
if (path === "/api/auth/session") {
|
|
57
45
|
return service.handleSession(request);
|
|
58
46
|
}
|
|
47
|
+
if (path.startsWith("/api/auth/")) {
|
|
48
|
+
return service.handleAuthRequest(request);
|
|
49
|
+
}
|
|
59
50
|
return new Response("Not found", { status: 404 });
|
|
60
51
|
}
|
|
61
52
|
//# sourceMappingURL=routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/hosted-service/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAYvD,MAAM,UAAU,6BAA6B,CAAC,OAAiC;IAC7E,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,OAAO,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,EAAE;gBACjF,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAmD,EACnD,OAAgB;IAEhB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAE3C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/hosted-service/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAYvD,MAAM,UAAU,6BAA6B,CAAC,OAAiC;IAC7E,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,OAAO,MAAM,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,QAAQ,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,EAAE;gBACjF,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,MAAM;QACZ,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAmD,EACnD,OAAgB;IAEhB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAE3C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import type { HostedAuthServiceOptions } from "./types.js";
|
|
2
2
|
export declare function createHostedAuthService(options: HostedAuthServiceOptions): {
|
|
3
|
+
handleAuthRequest(request: Request): Response | Promise<Response>;
|
|
3
4
|
handleContext(request: Request): Promise<Response>;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
handleGitHubStart(request: Request): Promise<Response>;
|
|
9
|
-
handleGoogleCallback(request: Request): Promise<Response>;
|
|
10
|
-
handleGoogleStart(request: Request): Promise<Response>;
|
|
11
|
-
handleLogin(request: Request): Promise<Response>;
|
|
5
|
+
handleFeishuStart(request: Request): Response | Promise<Response>;
|
|
6
|
+
handleGitHubStart(request: Request): Response | Promise<Response>;
|
|
7
|
+
handleGoogleStart(request: Request): Response | Promise<Response>;
|
|
8
|
+
handleLogin(request: Request): Response;
|
|
12
9
|
handleLogout(request: Request): Promise<Response>;
|
|
13
10
|
handleSession(request: Request): Promise<Response>;
|
|
14
11
|
handleUser(request: Request): Promise<Response>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/hosted-service/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/hosted-service/service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA6B,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAItF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB;+BAK1C,OAAO;2BAGX,OAAO;+BAGH,OAAO;+BAGP,OAAO;+BAGP,OAAO;yBAGb,OAAO;0BAGN,OAAO;2BAGN,OAAO;wBAGV,OAAO;EAqB9B"}
|
|
@@ -1,186 +1,56 @@
|
|
|
1
1
|
import { createProviderStartUrl, getAuthBaseURL, getRedirectURI, isRedirectAllowed, validateRequestClient } from "./applications.js";
|
|
2
|
-
import {
|
|
3
|
-
import { appendCookie, clearCookie, createSessionCookie } from "./cookies.js";
|
|
2
|
+
import { createBetterAuthHostedService } from "./better-auth.js";
|
|
4
3
|
import { html, json, redirect } from "./http.js";
|
|
5
4
|
import { renderLoginPage } from "./login-page/index.js";
|
|
6
|
-
|
|
7
|
-
import { createUserFromFeishuCode } from "./providers/feishu.js";
|
|
8
|
-
import { createUserFromGitHubCode } from "./providers/github.js";
|
|
9
|
-
import { createUserFromGoogleCode } from "./providers/google.js";
|
|
10
|
-
import { createSessionExpiresAt, createSessionPayload, deleteRequestSession, getStoredSession, toAuthContext, toAuthSession, } from "./session.js";
|
|
11
|
-
import { createMemoryAuthStore } from "./store/index.js";
|
|
5
|
+
const hostedProviders = ["feishu", "google", "github"];
|
|
12
6
|
export function createHostedAuthService(options) {
|
|
13
7
|
const authBaseURL = getAuthBaseURL(options);
|
|
14
|
-
const
|
|
15
|
-
const store = options.store ?? createMemoryAuthStore();
|
|
16
|
-
// OAuth 成功后只写认证身份和 session;业务角色、项目、成员关系仍由业务系统自己维护。
|
|
17
|
-
async function setSessionAndRedirect(request, provider, providerUser, clientId, redirectURI) {
|
|
18
|
-
const user = await store.upsertOAuthUser(provider, providerUser);
|
|
19
|
-
const session = await store.createSession({
|
|
20
|
-
clientId,
|
|
21
|
-
expiresAt: createSessionExpiresAt(),
|
|
22
|
-
provider,
|
|
23
|
-
providerAccountId: providerUser.id,
|
|
24
|
-
userId: user.id,
|
|
25
|
-
});
|
|
26
|
-
const headers = new Headers();
|
|
27
|
-
appendCookie(headers, createSessionCookie(request, options, createSessionPayload(session)));
|
|
28
|
-
appendCookie(headers, clearCookie(request, options, AUTH_SERVICE_STATE_COOKIE));
|
|
29
|
-
return redirect(redirectURI, headers);
|
|
30
|
-
}
|
|
31
|
-
async function handleProviderCallback(request, provider, createUser) {
|
|
32
|
-
const stateData = readOAuthCallbackState(request, options);
|
|
33
|
-
if (!stateData) {
|
|
34
|
-
return redirect(`${authBaseURL}/login?error=${encodeURIComponent("登录状态校验失败,请重新发起登录。")}`);
|
|
35
|
-
}
|
|
36
|
-
try {
|
|
37
|
-
const user = await createUser(stateData.code, getCallbackURL(provider));
|
|
38
|
-
return setSessionAndRedirect(request, provider, user, stateData.savedState.clientId, stateData.savedState.redirectURI);
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
return redirect(createCallbackErrorUrl(provider, error, stateData.savedState.clientId, stateData.savedState.redirectURI));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function handleProviderStart(request, provider) {
|
|
45
|
-
const providerClientId = getProviderClientId(provider);
|
|
46
|
-
const { app, clientId, error } = validateRequestClient(request, options);
|
|
47
|
-
const redirectURI = getRedirectURI(request, app);
|
|
48
|
-
if (error) {
|
|
49
|
-
return json({ error }, { status: 400 });
|
|
50
|
-
}
|
|
51
|
-
if (!providerClientId) {
|
|
52
|
-
return redirect(`${authBaseURL}/login?client_id=${encodeURIComponent(clientId)}&error=${encodeURIComponent(getProviderDisabledMessage(provider))}`);
|
|
53
|
-
}
|
|
54
|
-
if (!isRedirectAllowed(redirectURI, app)) {
|
|
55
|
-
return json({ error: "redirect_uri 不在应用白名单中" }, { status: 400 });
|
|
56
|
-
}
|
|
57
|
-
return redirectToProvider(request, app, redirectURI, provider, providerClientId);
|
|
58
|
-
}
|
|
8
|
+
const betterAuthService = createBetterAuthHostedService(options, authBaseURL);
|
|
59
9
|
return {
|
|
60
|
-
|
|
61
|
-
return
|
|
10
|
+
handleAuthRequest(request) {
|
|
11
|
+
return betterAuthService.handleAuthRequest(request);
|
|
62
12
|
},
|
|
63
|
-
|
|
64
|
-
return
|
|
13
|
+
handleContext(request) {
|
|
14
|
+
return betterAuthService.handleContext(request);
|
|
65
15
|
},
|
|
66
|
-
|
|
67
|
-
return handleProviderCallback(request, "feishu", (code) => createUserFromFeishuCode(options, code));
|
|
68
|
-
},
|
|
69
|
-
async handleFeishuStart(request) {
|
|
16
|
+
handleFeishuStart(request) {
|
|
70
17
|
return handleProviderStart(request, "feishu");
|
|
71
18
|
},
|
|
72
|
-
|
|
73
|
-
return handleProviderCallback(request, "github", (code, callbackURL) => createUserFromGitHubCode(options, code, callbackURL));
|
|
74
|
-
},
|
|
75
|
-
async handleGitHubStart(request) {
|
|
19
|
+
handleGitHubStart(request) {
|
|
76
20
|
return handleProviderStart(request, "github");
|
|
77
21
|
},
|
|
78
|
-
|
|
79
|
-
return handleProviderCallback(request, "google", (code, callbackURL) => createUserFromGoogleCode(options, code, callbackURL));
|
|
80
|
-
},
|
|
81
|
-
async handleGoogleStart(request) {
|
|
22
|
+
handleGoogleStart(request) {
|
|
82
23
|
return handleProviderStart(request, "google");
|
|
83
24
|
},
|
|
84
|
-
|
|
85
|
-
return handleLogin(request, options, authBaseURL
|
|
25
|
+
handleLogin(request) {
|
|
26
|
+
return handleLogin(request, options, authBaseURL);
|
|
86
27
|
},
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const headers = new Headers();
|
|
90
|
-
await deleteRequestSession(request, options, store);
|
|
91
|
-
appendCookie(headers, clearCookie(request, options, options.cookieName ?? AUTH_SERVICE_SESSION_COOKIE));
|
|
92
|
-
return redirect(url.searchParams.get("redirect_uri") ?? "/", headers);
|
|
28
|
+
handleLogout(request) {
|
|
29
|
+
return betterAuthService.handleLogout(request);
|
|
93
30
|
},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return json(stored ? toAuthSession(stored.session) : null);
|
|
31
|
+
handleSession(request) {
|
|
32
|
+
return betterAuthService.handleSession(request);
|
|
97
33
|
},
|
|
98
|
-
|
|
99
|
-
return
|
|
34
|
+
handleUser(request) {
|
|
35
|
+
return betterAuthService.handleUser(request);
|
|
100
36
|
},
|
|
101
37
|
};
|
|
102
|
-
function
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return
|
|
115
|
-
}
|
|
116
|
-
function createProviderAuthorizeUrl(provider, clientId, callbackURL, state) {
|
|
117
|
-
if (provider === "feishu")
|
|
118
|
-
return createFeishuAuthorizeUrl(clientId, callbackURL, state);
|
|
119
|
-
if (provider === "google")
|
|
120
|
-
return createGoogleAuthorizeUrl(clientId, callbackURL, state);
|
|
121
|
-
return createGitHubAuthorizeUrl(clientId, callbackURL, state);
|
|
122
|
-
}
|
|
123
|
-
function createCallbackErrorUrl(provider, error, clientId, redirectURI) {
|
|
124
|
-
const message = error instanceof Error ? error.message : `${getProviderLabel(provider)} 登录失败`;
|
|
125
|
-
return `${authBaseURL}/login?client_id=${encodeURIComponent(clientId)}&redirect_uri=${encodeURIComponent(redirectURI)}&error=${encodeURIComponent(message)}`;
|
|
126
|
-
}
|
|
127
|
-
function createGoogleAuthorizeUrl(clientId, callbackURL, state) {
|
|
128
|
-
const authorizeUrl = new URL("https://accounts.google.com/o/oauth2/v2/auth");
|
|
129
|
-
authorizeUrl.searchParams.set("access_type", "offline");
|
|
130
|
-
authorizeUrl.searchParams.set("client_id", clientId);
|
|
131
|
-
authorizeUrl.searchParams.set("prompt", "select_account");
|
|
132
|
-
authorizeUrl.searchParams.set("redirect_uri", callbackURL);
|
|
133
|
-
authorizeUrl.searchParams.set("response_type", "code");
|
|
134
|
-
authorizeUrl.searchParams.set("scope", (options.google?.scopes ?? ["openid", "email", "profile"]).join(" "));
|
|
135
|
-
authorizeUrl.searchParams.set("state", state);
|
|
136
|
-
return authorizeUrl;
|
|
137
|
-
}
|
|
138
|
-
function createGitHubAuthorizeUrl(clientId, callbackURL, state) {
|
|
139
|
-
const authorizeUrl = new URL("https://github.com/login/oauth/authorize");
|
|
140
|
-
authorizeUrl.searchParams.set("client_id", clientId);
|
|
141
|
-
authorizeUrl.searchParams.set("redirect_uri", callbackURL);
|
|
142
|
-
authorizeUrl.searchParams.set("scope", (options.github?.scopes ?? ["read:user", "user:email"]).join(" "));
|
|
143
|
-
authorizeUrl.searchParams.set("state", state);
|
|
144
|
-
return authorizeUrl;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
function createFeishuAuthorizeUrl(appId, callbackURL, state) {
|
|
148
|
-
const authorizeUrl = new URL("https://open.feishu.cn/open-apis/authen/v1/index");
|
|
149
|
-
authorizeUrl.searchParams.set("app_id", appId);
|
|
150
|
-
authorizeUrl.searchParams.set("redirect_uri", callbackURL);
|
|
151
|
-
authorizeUrl.searchParams.set("state", state);
|
|
152
|
-
return authorizeUrl;
|
|
153
|
-
}
|
|
154
|
-
function getProviderDisabledMessage(provider) {
|
|
155
|
-
return `${getProviderLabel(provider)} 登录未配置`;
|
|
156
|
-
}
|
|
157
|
-
function getProviderLabel(provider) {
|
|
158
|
-
if (provider === "feishu")
|
|
159
|
-
return "飞书";
|
|
160
|
-
if (provider === "google")
|
|
161
|
-
return "Google";
|
|
162
|
-
return "GitHub";
|
|
163
|
-
}
|
|
164
|
-
function handleDevLogin(request, options, allowDevLogin, setSessionAndRedirect) {
|
|
165
|
-
if (!allowDevLogin) {
|
|
166
|
-
return json({ error: "开发登录未启用" }, { status: 403 });
|
|
167
|
-
}
|
|
168
|
-
const { app, error } = validateRequestClient(request, options);
|
|
169
|
-
const redirectURI = getRedirectURI(request, app);
|
|
170
|
-
if (error) {
|
|
171
|
-
return json({ error }, { status: 400 });
|
|
172
|
-
}
|
|
173
|
-
if (!isRedirectAllowed(redirectURI, app)) {
|
|
174
|
-
return json({ error: "redirect_uri 不在应用白名单中" }, { status: 400 });
|
|
38
|
+
function handleProviderStart(request, provider) {
|
|
39
|
+
const { app, error } = validateRequestClient(request, options);
|
|
40
|
+
const redirectURI = getRedirectURI(request, app);
|
|
41
|
+
if (error) {
|
|
42
|
+
return json({ error }, { status: 400 });
|
|
43
|
+
}
|
|
44
|
+
if (!isRedirectAllowed(redirectURI, app)) {
|
|
45
|
+
return json({ error: "redirect_uri 不在应用白名单中" }, { status: 400 });
|
|
46
|
+
}
|
|
47
|
+
if (!isProviderEnabled(options, provider)) {
|
|
48
|
+
return redirect(createLoginErrorURL(authBaseURL, app.clientId, redirectURI, `${getProviderLabel(provider)} 登录未启用`));
|
|
49
|
+
}
|
|
50
|
+
return betterAuthService.handleProviderStart(request, provider);
|
|
175
51
|
}
|
|
176
|
-
return setSessionAndRedirect(request, "dev", {
|
|
177
|
-
email: "dev@example.com",
|
|
178
|
-
id: "dev-user",
|
|
179
|
-
metadata: { provider: "dev" },
|
|
180
|
-
name: "开发账号",
|
|
181
|
-
}, app.clientId, redirectURI);
|
|
182
52
|
}
|
|
183
|
-
function handleLogin(request, options, authBaseURL
|
|
53
|
+
function handleLogin(request, options, authBaseURL) {
|
|
184
54
|
const url = new URL(request.url);
|
|
185
55
|
const { app, error: clientError } = validateRequestClient(request, options);
|
|
186
56
|
const redirectURI = getRedirectURI(request, app);
|
|
@@ -196,16 +66,11 @@ function handleLogin(request, options, authBaseURL, allowDevLogin) {
|
|
|
196
66
|
return redirect(createProviderStartUrl(authBaseURL, provider, app.clientId, redirectURI).toString());
|
|
197
67
|
}
|
|
198
68
|
return html(renderLoginPage({
|
|
199
|
-
allowDevLogin,
|
|
200
69
|
app,
|
|
201
|
-
appearance: options.appearance,
|
|
202
70
|
authBaseURL,
|
|
203
71
|
clientId: app.clientId,
|
|
72
|
+
enabledProviders: getEnabledProviders(options),
|
|
204
73
|
error: loginError,
|
|
205
|
-
feishuEnabled: Boolean(options.feishu?.appId && options.feishu?.appSecret),
|
|
206
|
-
githubEnabled: Boolean(options.github?.clientId && options.github?.clientSecret),
|
|
207
|
-
googleEnabled: Boolean(options.google?.clientId && options.google?.clientSecret),
|
|
208
|
-
loginPage: options.loginPage,
|
|
209
74
|
loginPageComponent: options.loginPageComponent,
|
|
210
75
|
redirectURI,
|
|
211
76
|
}));
|
|
@@ -213,4 +78,27 @@ function handleLogin(request, options, authBaseURL, allowDevLogin) {
|
|
|
213
78
|
function isHostedProvider(provider) {
|
|
214
79
|
return provider === "feishu" || provider === "google" || provider === "github";
|
|
215
80
|
}
|
|
81
|
+
function getEnabledProviders(options) {
|
|
82
|
+
return hostedProviders.filter((provider) => isProviderEnabled(options, provider));
|
|
83
|
+
}
|
|
84
|
+
function isProviderEnabled(options, provider) {
|
|
85
|
+
if (options.config?.providers?.length && !options.config.providers.includes(provider)) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
return options.authProviders?.[provider]?.enabled !== false;
|
|
89
|
+
}
|
|
90
|
+
function createLoginErrorURL(authBaseURL, clientId, redirectURI, error) {
|
|
91
|
+
const url = new URL("/login", authBaseURL);
|
|
92
|
+
url.searchParams.set("client_id", clientId);
|
|
93
|
+
url.searchParams.set("redirect_uri", redirectURI);
|
|
94
|
+
url.searchParams.set("error", error);
|
|
95
|
+
return url.toString();
|
|
96
|
+
}
|
|
97
|
+
function getProviderLabel(provider) {
|
|
98
|
+
if (provider === "feishu")
|
|
99
|
+
return "飞书";
|
|
100
|
+
if (provider === "google")
|
|
101
|
+
return "Google";
|
|
102
|
+
return "GitHub";
|
|
103
|
+
}
|
|
216
104
|
//# sourceMappingURL=service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/hosted-service/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/hosted-service/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACrI,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAgD,CAAC;AAEtG,MAAM,UAAU,uBAAuB,CAAC,OAAiC;IACvE,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE9E,OAAO;QACL,iBAAiB,CAAC,OAAgB;YAChC,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;QACD,aAAa,CAAC,OAAgB;YAC5B,OAAO,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,iBAAiB,CAAC,OAAgB;YAChC,OAAO,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,iBAAiB,CAAC,OAAgB;YAChC,OAAO,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,iBAAiB,CAAC,OAAgB;YAChC,OAAO,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,WAAW,CAAC,OAAgB;YAC1B,OAAO,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACpD,CAAC;QACD,YAAY,CAAC,OAAgB;YAC3B,OAAO,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,aAAa,CAAC,OAAgB;YAC5B,OAAO,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,UAAU,CAAC,OAAgB;YACzB,OAAO,iBAAiB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;IAEF,SAAS,mBAAmB,CAAC,OAAgB,EAAE,QAAmC;QAChF,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAEjD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC1C,OAAO,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtH,CAAC;QAED,OAAO,iBAAiB,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,OAAgB,EAChB,OAAiC,EACjC,WAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAE9D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvG,CAAC;IAED,OAAO,IAAI,CAAC,eAAe,CAAC;QAC1B,GAAG;QACH,WAAW;QACX,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,gBAAgB,EAAE,mBAAmB,CAAC,OAAO,CAAC;QAC9C,KAAK,EAAE,UAAU;QACjB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,WAAW;KACZ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAuB;IAC/C,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,CAAC;AACjF,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAiC;IAC5D,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAiC,EAAE,QAAmC;IAC/F,IAAI,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,KAAK,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB,EAAE,QAAgB,EAAE,WAAmB,EAAE,KAAa;IACpG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAmC;IAC3D,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE3C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { UnifiedAuthConfig } from "../config.js";
|
|
2
2
|
export type HostedAuthLoginProviderId = "feishu" | "github" | "google";
|
|
3
|
+
export type HostedBetterAuthProviderId = HostedAuthLoginProviderId | (string & {});
|
|
4
|
+
export interface HostedAuthBetterAuthProviderConfig {
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
providerId?: HostedBetterAuthProviderId;
|
|
7
|
+
scopes?: string[];
|
|
8
|
+
}
|
|
3
9
|
export interface HostedAuthLoginProviderView {
|
|
4
10
|
enabled: boolean;
|
|
5
11
|
href: string;
|
|
@@ -9,10 +15,8 @@ export interface HostedAuthLoginProviderView {
|
|
|
9
15
|
label: string;
|
|
10
16
|
}
|
|
11
17
|
export interface HostedAuthLoginPageModel {
|
|
12
|
-
allowDevLogin: boolean;
|
|
13
18
|
appName: string;
|
|
14
19
|
clientId: string;
|
|
15
|
-
devLoginHref: string;
|
|
16
20
|
error?: string;
|
|
17
21
|
providers: HostedAuthLoginProviderView[];
|
|
18
22
|
redirectURI: string;
|
|
@@ -26,28 +30,29 @@ export type HostedAuthLoginPageComponent = ((props: HostedAuthLoginPageProps) =>
|
|
|
26
30
|
};
|
|
27
31
|
export interface HostedAuthApplication {
|
|
28
32
|
allowedRedirectURIs?: string[];
|
|
29
|
-
appearance?: HostedAuthAppearance;
|
|
30
33
|
clientId: string;
|
|
31
|
-
loginPage?: HostedAuthLoginPageConfig;
|
|
32
34
|
loginPageComponent?: HostedAuthLoginPageComponent;
|
|
33
35
|
name?: string;
|
|
34
36
|
redirectURI?: string;
|
|
35
37
|
}
|
|
38
|
+
export interface HostedAuthRuntimeEnv {
|
|
39
|
+
AUTH_ALLOWED_REDIRECT_URI?: string;
|
|
40
|
+
AUTH_CLIENT_ID?: string;
|
|
41
|
+
AUTH_CLIENT_NAME?: string;
|
|
42
|
+
AUTH_SERVICE_URL?: string;
|
|
43
|
+
BETTER_AUTH_URL?: string;
|
|
44
|
+
}
|
|
36
45
|
export interface HostedAuthSingleApplicationOptions {
|
|
37
46
|
allowedRedirectURIs?: string[];
|
|
38
47
|
appName?: string;
|
|
39
|
-
clientId
|
|
48
|
+
clientId?: string;
|
|
40
49
|
redirectURI?: string;
|
|
41
50
|
siteURL?: string;
|
|
42
51
|
}
|
|
43
|
-
export interface HostedAuthAppearance {
|
|
44
|
-
backgroundImageUrl?: string;
|
|
45
|
-
}
|
|
46
52
|
export interface HostedAuthLoginPageConfig {
|
|
47
53
|
backgroundImageUrl?: string;
|
|
48
54
|
brandLabel?: string;
|
|
49
55
|
brandName?: string;
|
|
50
|
-
devLoginLabel?: string;
|
|
51
56
|
footerText?: string;
|
|
52
57
|
heroDescription?: string;
|
|
53
58
|
heroKicker?: string;
|
|
@@ -60,46 +65,31 @@ export interface HostedAuthLoginPageConfig {
|
|
|
60
65
|
providers?: HostedAuthLoginProviderId[];
|
|
61
66
|
statusText?: string;
|
|
62
67
|
}
|
|
63
|
-
export interface
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
export interface HostedBetterAuthSessionResult {
|
|
69
|
+
session: {
|
|
70
|
+
expiresAt?: Date | string | null;
|
|
71
|
+
id?: string | null;
|
|
72
|
+
token?: string | null;
|
|
73
|
+
userId?: string | null;
|
|
74
|
+
};
|
|
75
|
+
user: {
|
|
76
|
+
email?: string | null;
|
|
77
|
+
emailVerified?: boolean;
|
|
78
|
+
id: string;
|
|
79
|
+
image?: string | null;
|
|
80
|
+
name?: string | null;
|
|
81
|
+
[key: string]: unknown;
|
|
82
|
+
};
|
|
73
83
|
}
|
|
74
|
-
export interface
|
|
75
|
-
|
|
76
|
-
clientSecret?: string;
|
|
77
|
-
redirectURI?: string;
|
|
78
|
-
scopes?: string[];
|
|
84
|
+
export interface HostedBetterAuthServer {
|
|
85
|
+
handler(request: Request): Promise<Response> | Response;
|
|
79
86
|
}
|
|
80
87
|
export interface HostedAuthServiceOptions extends HostedAuthSingleApplicationOptions {
|
|
81
|
-
|
|
82
|
-
appearance?: HostedAuthAppearance;
|
|
88
|
+
auth: HostedBetterAuthServer;
|
|
83
89
|
authBaseURL?: string;
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
github?: HostedGitHubConfig;
|
|
88
|
-
google?: HostedGoogleConfig;
|
|
89
|
-
loginPage?: HostedAuthLoginPageConfig;
|
|
90
|
+
authProviders?: Partial<Record<HostedAuthLoginProviderId, HostedAuthBetterAuthProviderConfig>>;
|
|
91
|
+
config?: UnifiedAuthConfig;
|
|
92
|
+
env?: HostedAuthRuntimeEnv;
|
|
90
93
|
loginPageComponent?: HostedAuthLoginPageComponent;
|
|
91
|
-
sessionSecret: string;
|
|
92
|
-
store?: HostedAuthStore;
|
|
93
94
|
}
|
|
94
|
-
export type SessionPayload = {
|
|
95
|
-
clientId: string;
|
|
96
|
-
exp: number;
|
|
97
|
-
sessionId: string;
|
|
98
|
-
};
|
|
99
|
-
export type StatePayload = {
|
|
100
|
-
clientId: string;
|
|
101
|
-
exp: number;
|
|
102
|
-
redirectURI: string;
|
|
103
|
-
state: string;
|
|
104
|
-
};
|
|
105
95
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hosted-service/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/hosted-service/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACvE,MAAM,MAAM,0BAA0B,GAAG,yBAAyB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEnF,MAAM,WAAW,kCAAkC;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,EAAE,EAAE,yBAAyB,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,2BAA2B,EAAE,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,yBAAyB,CAAC;IAClC,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,EAAE,wBAAwB,KAAK,MAAM,CAAC,GAAG;IACzF,aAAa,CAAC,EAAE,yBAAyB,CAAC;CAC3C,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kCAAkC;IACjD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,yBAAyB,CAAC;IAC5C,SAAS,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE;QACP,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;QACjC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;IACF,IAAI,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;CACzD;AAED,MAAM,WAAW,wBAAyB,SAAQ,kCAAkC;IAClF,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,yBAAyB,EAAE,kCAAkC,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,kBAAkB,CAAC,EAAE,4BAA4B,CAAC;CACnD"}
|