@betterportal/auth-default 10.0.0 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.d.ts.map +1 -1
  2. package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.js +77 -31
  3. package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.js.map +1 -1
  4. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/GET.d.ts +3 -0
  5. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/GET.d.ts.map +1 -0
  6. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/GET.js +3 -0
  7. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/GET.js.map +1 -0
  8. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/POST.d.ts +3 -0
  9. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/POST.d.ts.map +1 -0
  10. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/POST.js +3 -0
  11. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/POST.js.map +1 -0
  12. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/{index.d.ts → GET.d.ts} +2 -2
  13. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/GET.d.ts.map +1 -0
  14. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/{index.js → GET.js} +1 -1
  15. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/GET.js.map +1 -0
  16. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/{_nav.profile.d.ts → _nav.profile.GET.d.ts} +2 -2
  17. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/_nav.profile.GET.d.ts.map +1 -0
  18. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/{_nav.profile.js → _nav.profile.GET.js} +1 -1
  19. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/_nav.profile.GET.js.map +1 -0
  20. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/index.d.ts +1 -88
  21. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/index.d.ts.map +1 -1
  22. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/index.js +1 -185
  23. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/index.js.map +1 -1
  24. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.d.ts +89 -0
  25. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.d.ts.map +1 -0
  26. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.js +186 -0
  27. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/route.impl.js.map +1 -0
  28. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/GET.d.ts +3 -0
  29. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/GET.d.ts.map +1 -0
  30. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/GET.js +3 -0
  31. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/GET.js.map +1 -0
  32. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/POST.d.ts +3 -0
  33. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/POST.d.ts.map +1 -0
  34. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/POST.js +3 -0
  35. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/POST.js.map +1 -0
  36. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/{index.d.ts → GET.d.ts} +2 -2
  37. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/GET.d.ts.map +1 -0
  38. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/{index.js → GET.js} +1 -1
  39. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/GET.js.map +1 -0
  40. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/index.d.ts +1 -24
  41. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/index.d.ts.map +1 -1
  42. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/index.js +1 -37
  43. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/index.js.map +1 -1
  44. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/route.impl.d.ts +25 -0
  45. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/route.impl.d.ts.map +1 -0
  46. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/route.impl.js +38 -0
  47. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/route.impl.js.map +1 -0
  48. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.d.ts +3 -0
  49. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.d.ts.map +1 -0
  50. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.js +3 -0
  51. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.js.map +1 -0
  52. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/index.d.ts +1 -30
  53. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/index.d.ts.map +1 -1
  54. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/index.js +1 -91
  55. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/index.js.map +1 -1
  56. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/route.impl.d.ts +31 -0
  57. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/route.impl.d.ts.map +1 -0
  58. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/route.impl.js +92 -0
  59. package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/route.impl.js.map +1 -0
  60. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/GET.d.ts +3 -0
  61. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/GET.d.ts.map +1 -0
  62. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/GET.js +3 -0
  63. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/GET.js.map +1 -0
  64. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/POST.d.ts +3 -0
  65. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/POST.d.ts.map +1 -0
  66. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/POST.js +3 -0
  67. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/POST.js.map +1 -0
  68. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/{index.400.js → 400.d.ts} +2 -2
  69. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/400.d.ts.map +1 -0
  70. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/{index.400.d.ts → 400.js} +2 -2
  71. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/400.js.map +1 -0
  72. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/{index.d.ts → GET.d.ts} +2 -2
  73. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/GET.d.ts.map +1 -0
  74. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/{index.js → GET.js} +1 -1
  75. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/GET.js.map +1 -0
  76. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/index.d.ts +1 -63
  77. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/index.d.ts.map +1 -1
  78. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/index.js +1 -105
  79. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/index.js.map +1 -1
  80. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/route.impl.d.ts +64 -0
  81. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/route.impl.d.ts.map +1 -0
  82. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/route.impl.js +106 -0
  83. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/route.impl.js.map +1 -0
  84. package/lib/schemas/service-betterportal-auth-default.json +1 -1
  85. package/lib/schemas/service-betterportal-auth-default.plugin.json +1 -1
  86. package/package.json +3 -3
  87. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/_nav.profile.d.ts.map +0 -1
  88. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/_nav.profile.js.map +0 -1
  89. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/index.d.ts.map +0 -1
  90. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/index.js.map +0 -1
  91. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/index.d.ts.map +0 -1
  92. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/index.js.map +0 -1
  93. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.400.d.ts.map +0 -1
  94. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.400.js.map +0 -1
  95. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.d.ts.map +0 -1
  96. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.js.map +0 -1
@@ -1,92 +1,2 @@
1
- import * as av from "anyvali";
2
- // Infer used at runtime cast for typed body access.
3
- import { createHandler } from "@betterportal/framework";
4
- export const QuerySchema = av.object({}, { unknownKeys: "strip" });
5
- export const HeadersSchema = av.object({
6
- "x-bp-refresh": av.optional(av.string().minLength(1))
7
- }, { unknownKeys: "strip" });
8
- export const RequestSchema = av.object({
9
- refreshToken: av.optional(av.string().minLength(1).describe("Signed refresh token issued by the auth service."))
10
- }, { unknownKeys: "strip" });
11
- export const ResponseSchema = av.object({
12
- status: av.enum_(["ok", "error"]).describe("Refresh request outcome."),
13
- message: av.optional(av.string()).describe("Human-readable status or error message for the renderer."),
14
- accessToken: av.optional(av.string()).describe("New signed JWT access token returned when refresh succeeds."),
15
- expiresInSeconds: av.optional(av.int().min(1)).describe("New access token lifetime in seconds.")
16
- }, { unknownKeys: "strip" });
17
- export const title = "Refresh Token";
18
- export const description = "Exchange a refresh token for a new access token.";
19
- export const role = "auth.refresh";
20
- export const auth = {
21
- required: false,
22
- permissions: []
23
- };
24
- export const cacheHints = {
25
- ttlSeconds: 0,
26
- varyBy: []
27
- };
28
- function runtimeFrom(ctx) {
29
- const runtime = ctx.plugin?.runtime;
30
- if (!runtime)
31
- throw new Error("Auth runtime not available on handler context");
32
- return runtime;
33
- }
34
- export const handlePost = createHandler({ response: ResponseSchema, request: RequestSchema }, async (ctx) => {
35
- const runtime = runtimeFrom(ctx);
36
- const tenantId = ctx.tenant.id;
37
- const appId = ctx.app.id;
38
- const body = ctx.request;
39
- const headers = ctx.headers;
40
- const refreshToken = body.refreshToken ?? headers["x-bp-refresh"];
41
- if (!refreshToken) {
42
- return {
43
- status: "error",
44
- message: "Refresh token missing."
45
- };
46
- }
47
- let claims;
48
- try {
49
- claims = await runtime.tokenIssuer.verifyRefreshToken({
50
- refreshToken,
51
- tenantId,
52
- appId
53
- });
54
- }
55
- catch {
56
- return {
57
- status: "error",
58
- message: "Refresh token invalid or expired."
59
- };
60
- }
61
- const user = runtime.userStore.findById(claims.sub);
62
- if (!user || !user.enabled) {
63
- return {
64
- status: "error",
65
- message: "User no longer exists or is disabled."
66
- };
67
- }
68
- const roles = user.appRoles[appId] ?? [];
69
- const issued = runtime.tokenIssuer.issueTokenPair({
70
- sub: user.id,
71
- tenantId: user.tenantId,
72
- appId,
73
- roles,
74
- name: user.name ?? user.username,
75
- email: user.email,
76
- picture: user.picture
77
- }, {
78
- includeRefreshToken: false
79
- });
80
- ctx.bpHeaders?.set("Authorization", `Bearer ${issued.accessToken}`, {
81
- expiresInSeconds: issued.accessTokenExpiresInSeconds,
82
- locked: true,
83
- refreshPath: "/refresh",
84
- refreshBeforeSeconds: 60
85
- });
86
- return {
87
- status: "ok",
88
- accessToken: issued.accessToken,
89
- expiresInSeconds: issued.accessTokenExpiresInSeconds
90
- };
91
- });
1
+ export { title, description, auth, role, cacheHints } from "./route.impl.js";
92
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/refresh/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/refresh/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import * as av from "anyvali";
2
+ import type { Infer } from "anyvali";
3
+ import { type ApiAuthRequirement, type CacheHints } from "@betterportal/framework";
4
+ export declare const QuerySchema: av.ObjectSchema<{}>;
5
+ export declare const HeadersSchema: av.ObjectSchema<{
6
+ "x-bp-refresh": av.OptionalSchema<av.StringSchema>;
7
+ }>;
8
+ export declare const RequestSchema: av.ObjectSchema<{
9
+ refreshToken: av.OptionalSchema<av.StringSchema>;
10
+ }>;
11
+ export declare const ResponseSchema: av.ObjectSchema<{
12
+ status: av.EnumSchema<readonly ["ok", "error"]>;
13
+ message: av.OptionalSchema<av.StringSchema>;
14
+ accessToken: av.OptionalSchema<av.StringSchema>;
15
+ expiresInSeconds: av.OptionalSchema<av.IntSchema>;
16
+ }>;
17
+ export type ResponseData = Infer<typeof ResponseSchema>;
18
+ export declare const title = "Refresh Token";
19
+ export declare const description = "Exchange a refresh token for a new access token.";
20
+ export declare const role = "auth.refresh";
21
+ export declare const auth: ApiAuthRequirement;
22
+ export declare const cacheHints: CacheHints;
23
+ export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, {
24
+ refreshToken?: string | undefined;
25
+ }, {
26
+ status: "ok" | "error";
27
+ message?: string | undefined;
28
+ accessToken?: string | undefined;
29
+ expiresInSeconds?: number | undefined;
30
+ }, unknown, Record<string, unknown>>;
31
+ //# sourceMappingURL=route.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.impl.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/refresh/route.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAChB,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,WAAW,qBAA0C,CAAC;AACnE,eAAO,MAAM,aAAa;;EAEE,CAAC;AAE7B,eAAO,MAAM,aAAa;;EAEE,CAAC;AAE7B,eAAO,MAAM,cAAc;;;;;EAKC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,kBAAkB,CAAC;AACrC,eAAO,MAAM,WAAW,qDAAqD,CAAC;AAC9E,eAAO,MAAM,IAAI,iBAAiB,CAAC;AAEnC,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAQF,eAAO,MAAM,UAAU;;;;;;;oCAiEtB,CAAC"}
@@ -0,0 +1,92 @@
1
+ import * as av from "anyvali";
2
+ // Infer used at runtime cast for typed body access.
3
+ import { createHandler } from "@betterportal/framework";
4
+ export const QuerySchema = av.object({}, { unknownKeys: "strip" });
5
+ export const HeadersSchema = av.object({
6
+ "x-bp-refresh": av.optional(av.string().minLength(1))
7
+ }, { unknownKeys: "strip" });
8
+ export const RequestSchema = av.object({
9
+ refreshToken: av.optional(av.string().minLength(1).describe("Signed refresh token issued by the auth service."))
10
+ }, { unknownKeys: "strip" });
11
+ export const ResponseSchema = av.object({
12
+ status: av.enum_(["ok", "error"]).describe("Refresh request outcome."),
13
+ message: av.optional(av.string()).describe("Human-readable status or error message for the renderer."),
14
+ accessToken: av.optional(av.string()).describe("New signed JWT access token returned when refresh succeeds."),
15
+ expiresInSeconds: av.optional(av.int().min(1)).describe("New access token lifetime in seconds.")
16
+ }, { unknownKeys: "strip" });
17
+ export const title = "Refresh Token";
18
+ export const description = "Exchange a refresh token for a new access token.";
19
+ export const role = "auth.refresh";
20
+ export const auth = {
21
+ required: false,
22
+ permissions: []
23
+ };
24
+ export const cacheHints = {
25
+ ttlSeconds: 0,
26
+ varyBy: []
27
+ };
28
+ function runtimeFrom(ctx) {
29
+ const runtime = ctx.plugin?.runtime;
30
+ if (!runtime)
31
+ throw new Error("Auth runtime not available on handler context");
32
+ return runtime;
33
+ }
34
+ export const handlePost = createHandler({ response: ResponseSchema, request: RequestSchema }, async (ctx) => {
35
+ const runtime = runtimeFrom(ctx);
36
+ const tenantId = ctx.tenant.id;
37
+ const appId = ctx.app.id;
38
+ const body = ctx.request;
39
+ const headers = ctx.headers;
40
+ const refreshToken = body.refreshToken ?? headers["x-bp-refresh"];
41
+ if (!refreshToken) {
42
+ return {
43
+ status: "error",
44
+ message: "Refresh token missing."
45
+ };
46
+ }
47
+ let claims;
48
+ try {
49
+ claims = await runtime.tokenIssuer.verifyRefreshToken({
50
+ refreshToken,
51
+ tenantId,
52
+ appId
53
+ });
54
+ }
55
+ catch {
56
+ return {
57
+ status: "error",
58
+ message: "Refresh token invalid or expired."
59
+ };
60
+ }
61
+ const user = runtime.userStore.findById(claims.sub);
62
+ if (!user || !user.enabled) {
63
+ return {
64
+ status: "error",
65
+ message: "User no longer exists or is disabled."
66
+ };
67
+ }
68
+ const roles = user.appRoles[appId] ?? [];
69
+ const issued = runtime.tokenIssuer.issueTokenPair({
70
+ sub: user.id,
71
+ tenantId: user.tenantId,
72
+ appId,
73
+ roles,
74
+ name: user.name ?? user.username,
75
+ email: user.email,
76
+ picture: user.picture
77
+ }, {
78
+ includeRefreshToken: false
79
+ });
80
+ ctx.bpHeaders?.set("Authorization", `Bearer ${issued.accessToken}`, {
81
+ expiresInSeconds: issued.accessTokenExpiresInSeconds,
82
+ locked: true,
83
+ refreshPath: "/refresh",
84
+ refreshBeforeSeconds: 60
85
+ });
86
+ return {
87
+ status: "ok",
88
+ accessToken: issued.accessToken,
89
+ expiresInSeconds: issued.accessTokenExpiresInSeconds
90
+ };
91
+ });
92
+ //# sourceMappingURL=route.impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.impl.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/refresh/route.impl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { ResponseSchema, QuerySchema, HeadersSchema, RequestSchema } from "./route.impl.js";
2
+ export { handleGet as default } from "./route.impl.js";
3
+ //# sourceMappingURL=GET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/GET.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ResponseSchema, QuerySchema, HeadersSchema, RequestSchema } from "./route.impl.js";
2
+ export { handleGet as default } from "./route.impl.js";
3
+ //# sourceMappingURL=GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/GET.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ResponseSchema, QuerySchema, HeadersSchema, RequestSchema } from "./route.impl.js";
2
+ export { handlePost as default } from "./route.impl.js";
3
+ //# sourceMappingURL=POST.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"POST.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/POST.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ResponseSchema, QuerySchema, HeadersSchema, RequestSchema } from "./route.impl.js";
2
+ export { handlePost as default } from "./route.impl.js";
3
+ //# sourceMappingURL=POST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"POST.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/POST.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -3,5 +3,5 @@
3
3
  * context). Same renderer as the main view - it re-renders the form with the
4
4
  * error message so the response swaps into #bp-main like any other view.
5
5
  */
6
- export { render } from "./index.js";
7
- //# sourceMappingURL=index.400.js.map
6
+ export { render } from "./GET.js";
7
+ //# sourceMappingURL=400.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"400.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/400.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -3,5 +3,5 @@
3
3
  * context). Same renderer as the main view - it re-renders the form with the
4
4
  * error message so the response swaps into #bp-main like any other view.
5
5
  */
6
- export { render } from "./index.js";
7
- //# sourceMappingURL=index.400.d.ts.map
6
+ export { render } from "./GET.js";
7
+ //# sourceMappingURL=400.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"400.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/400.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { HtmlRenderable } from "@betterportal/framework";
2
- import type { ResponseData } from "../index.js";
2
+ import type { ResponseData } from "../route.impl.js";
3
3
  export declare function render(data: ResponseData): HtmlRenderable;
4
- //# sourceMappingURL=index.d.ts.map
4
+ //# sourceMappingURL=GET.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.d.ts","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA6FrD,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CAwCzD"}
@@ -60,4 +60,4 @@ export function render(data) {
60
60
  // GET, zero users - the first-admin form.
61
61
  return renderForm(data);
62
62
  }
63
- //# sourceMappingURL=index.js.map
63
+ //# sourceMappingURL=GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAI9B,qFAAqF;AACrF,SAAS,UAAU,CAAC,GAAuB,EAAE,QAAgB;IAC3D,IAAI,CAAC,GAAG;QAAE,OAAO,QAAQ,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAS,cAAc;IACrB,2EAA2E;IAC3E,2DAA2D;IAC3D,OAAO,EAAE,CAAC;;;;;;;;;;;;;;OAcL,CAAC,CAAC;AACT,CAAC;AAED,SAAS,YAAY,CAAC,GAAW,EAAE,OAAe,EAAE,KAAa;IAC/D,OAAO,CACL,wBACU,GAAG,gBACA,mBAAmB,eACpB,UAAU,aACZ,WAAW,iBACN,OAAO,YAEpB,cAAK,KAAK,EAAC,oCAAoC,YAC7C,cAAK,KAAK,EAAC,kCAAkC,EAAC,IAAI,EAAC,QAAQ,YAAC,eAAM,KAAK,EAAC,iBAAiB,YAAE,KAAK,GAAQ,GAAM,GAC1G,GACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAkB;IACpC,OAAO,CACL,eAAK,KAAK,EAAC,gBAAgB,EAAC,KAAK,EAAC,mBAAmB,aACnD,cAAK,KAAK,EAAC,yBAAyB,YAClC,eAAK,KAAK,EAAC,WAAW,aACpB,aAAI,KAAK,EAAC,6BAA6B,mCAAwB,EAC/D,YAAG,KAAK,EAAC,uCAAuC,kHAE5C,EACJ,gBACE,EAAE,EAAC,kBAAkB,aACb,MAAM,eACJ,UAAU,aACZ,WAAW,aAEnB,eAAK,KAAK,EAAC,MAAM,aACf,gBAAO,KAAK,EAAC,YAAY,2BAAmB,EAC5C,gBAAO,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,UAAU,EAAC,YAAY,EAAC,UAAU,EAAC,QAAQ,QAAC,SAAS,SAAG,IACjG,EACN,eAAK,KAAK,EAAC,MAAM,aACf,gBAAO,KAAK,EAAC,YAAY,sBAAc,EACvC,gBAAO,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,OAAO,EAAC,YAAY,EAAC,OAAO,GAAG,IACzE,EACN,eAAK,KAAK,EAAC,MAAM,aACf,iBAAO,KAAK,EAAC,YAAY,4BAAY,eAAM,KAAK,EAAC,sBAAsB,8BAAqB,IAAQ,EACpG,gBAAO,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,cAAc,EAAC,IAAI,EAAC,UAAU,EAAC,YAAY,EAAC,cAAc,EAAC,SAAS,EAAC,GAAG,EAAC,QAAQ,SAAG,IAC7G,EACN,eAAK,KAAK,EAAC,MAAM,aACf,gBAAO,KAAK,EAAC,YAAY,mCAA2B,EACpD,gBAAO,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,cAAc,EAAC,EAAE,EAAC,qBAAqB,EAAC,YAAY,EAAC,cAAc,EAAC,SAAS,EAAC,GAAG,EAAC,QAAQ,SAAG,IACtH,EACN,cAAK,KAAK,EAAE,sBAAsB,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAC,mBAAmB,YAChH,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAChD,EACN,iBAAQ,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAC,uBAAuB,qCAA8B,IAC5E,IACH,GACF,EACN,2BAAS,cAAc,EAAE,GAAU,IAC/B,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAkB;IACvC,mEAAmE;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CACL,cAAK,KAAK,EAAC,gBAAgB,EAAC,KAAK,EAAC,mBAAmB,YACnD,cAAK,KAAK,EAAC,yBAAyB,YAClC,eAAK,KAAK,EAAC,uBAAuB,aAChC,aAAI,KAAK,EAAC,iBAAiB,8BAAmB,EAC9C,eAAK,KAAK,EAAC,0BAA0B,aACnC,2BAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAU,2CACjC,EACN,YAAG,KAAK,EAAC,2BAA2B,yCAA6B,EAChE,IAAI,CAAC,QAAQ;4BACZ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,2BAA2B,CAAC;4BAC/F,CAAC,CAAC,YAAG,KAAK,EAAC,sBAAsB,EAAC,IAAI,EAAC,QAAQ,wBAAY,IACzD,GACF,GACF,CACP,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,8EAA8E;IAC9E,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACvG,CAAC;QACD,OAAO,CACL,cAAK,KAAK,EAAC,gBAAgB,EAAC,KAAK,EAAC,mBAAmB,YACnD,eAAK,KAAK,EAAC,uBAAuB,yCAAyB,YAAG,IAAI,EAAC,QAAQ,wBAAY,iBAAe,GAClG,CACP,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,64 +1,2 @@
1
- import * as av from "anyvali";
2
- import type { Infer } from "anyvali";
3
- import { type ApiAuthRequirement, type CacheHints, type BetterPortalRouteChrome } from "@betterportal/framework";
4
- export declare const QuerySchema: av.ObjectSchema<{
5
- next: av.OptionalSchema<av.StringSchema>;
6
- }>;
7
- export declare const HeadersSchema: av.ObjectSchema<{}>;
8
- export declare const RequestSchema: av.ObjectSchema<{
9
- username: av.StringSchema;
10
- password: av.StringSchema;
11
- email: av.OptionalSchema<av.StringSchema>;
12
- name: av.OptionalSchema<av.StringSchema>;
13
- }>;
14
- export declare const ResponseSchema: av.ObjectSchema<{
15
- status: av.EnumSchema<readonly ["ok", "error"]>;
16
- message: av.OptionalSchema<av.StringSchema>;
17
- user: av.OptionalSchema<av.ObjectSchema<{
18
- id: av.StringSchema;
19
- username: av.StringSchema;
20
- isFirstAdmin: av.BoolSchema;
21
- }>>;
22
- registrationOpen: av.OptionalSchema<av.BoolSchema>;
23
- loginUrl: av.OptionalSchema<av.StringSchema>;
24
- }>;
25
- export type ResponseData = Infer<typeof ResponseSchema>;
26
- export declare const title = "Register First Admin";
27
- export declare const description = "Open registration for the very first user. Once any user exists, this endpoint requires admin auth.";
28
- export declare const role = "auth.register";
29
- export declare const dependencies: string[];
30
- export declare const chrome: BetterPortalRouteChrome;
31
- export declare const auth: ApiAuthRequirement;
32
- export declare const cacheHints: CacheHints;
33
- export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, {
34
- next?: string | undefined;
35
- }, Record<string, string>, Record<string, unknown>, {
36
- status: "ok" | "error";
37
- message?: string | undefined;
38
- user?: {
39
- id: string;
40
- username: string;
41
- isFirstAdmin: boolean;
42
- } | undefined;
43
- registrationOpen?: boolean | undefined;
44
- loginUrl?: string | undefined;
45
- }, unknown, Record<string, unknown>>;
46
- export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, {
47
- next?: string | undefined;
48
- }, Record<string, string>, {
49
- username: string;
50
- password: string;
51
- email?: string | undefined;
52
- name?: string | undefined;
53
- }, {
54
- status: "ok" | "error";
55
- message?: string | undefined;
56
- user?: {
57
- id: string;
58
- username: string;
59
- isFirstAdmin: boolean;
60
- } | undefined;
61
- registrationOpen?: boolean | undefined;
62
- loginUrl?: string | undefined;
63
- }, unknown, Record<string, unknown>>;
1
+ export { title, description, auth, role, dependencies, chrome, cacheHints } from "./route.impl.js";
64
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,WAAW;;EAEI,CAAC;AAC7B,eAAO,MAAM,aAAa,qBAA0C,CAAC;AAErE,eAAO,MAAM,aAAa;;;;;EAKE,CAAC;AAE7B,eAAO,MAAM,cAAc;;;;;;;;;;EAaC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,yBAAyB,CAAC;AAC5C,eAAO,MAAM,WAAW,wGAAwG,CAAC;AAEjI,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,YAAY,UAAkB,CAAC;AAC5C,eAAO,MAAM,MAAM,EAAE,uBAA8C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAgBF,eAAO,MAAM,SAAS;;;;;;;;;;;;oCAWrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;oCA8CtB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,106 +1,2 @@
1
- import * as av from "anyvali";
2
- import { createHandler } from "@betterportal/framework";
3
- export const QuerySchema = av.object({
4
- next: av.optional(av.string()).describe("The view path to pass through to login after first-admin registration.")
5
- }, { unknownKeys: "strip" });
6
- export const HeadersSchema = av.object({}, { unknownKeys: "strip" });
7
- export const RequestSchema = av.object({
8
- username: av.string().minLength(1).describe("Username for the first admin account."),
9
- password: av.string().minLength(8).describe("Password for the first admin account."),
10
- email: av.optional(av.string()).describe("Email address for the first admin account."),
11
- name: av.optional(av.string()).describe("Display name for the first admin account.")
12
- }, { unknownKeys: "strip" });
13
- export const ResponseSchema = av.object({
14
- status: av.enum_(["ok", "error"]).describe("Registration request outcome."),
15
- message: av.optional(av.string()).describe("Human-readable status or error message for the renderer."),
16
- user: av.optional(av.object({
17
- id: av.string().describe("Stable UUIDv7 user id."),
18
- username: av.string().describe("Created account username."),
19
- isFirstAdmin: av.bool().describe("True when this account is the deployment's first admin.")
20
- }, { unknownKeys: "strip" }).describe("Created first-admin user summary.")),
21
- // GET state for the theme renderer: registrations are closed once any user
22
- // exists; loginUrl (self-origin, absolute) is where the renderer sends the
23
- // browser in that case - and after a successful first-admin creation.
24
- registrationOpen: av.optional(av.bool()).describe("True while the auth service has zero users; once false, the renderer should send the browser to login."),
25
- loginUrl: av.optional(av.string()).describe("Absolute self-origin URL of this auth service's login view, used when registration is closed and after successful first-admin creation.")
26
- }, { unknownKeys: "strip" });
27
- export const title = "Register First Admin";
28
- export const description = "Open registration for the very first user. Once any user exists, this endpoint requires admin auth.";
29
- export const role = "auth.register";
30
- export const dependencies = ["login.index"];
31
- export const chrome = { fullScreen: true };
32
- export const auth = {
33
- required: false,
34
- permissions: []
35
- };
36
- export const cacheHints = {
37
- ttlSeconds: 0,
38
- varyBy: []
39
- };
40
- /** Self-origin absolute URL for a path, derived from the request Host header. */
41
- function runtimeFrom(ctx) {
42
- const runtime = ctx.plugin?.runtime;
43
- if (!runtime)
44
- throw new Error("Auth runtime not available on handler context");
45
- return runtime;
46
- }
47
- function selfUrl(ctx, path, next) {
48
- const host = ctx.headers.host;
49
- if (!host)
50
- return undefined;
51
- const proto = ctx.headers["x-forwarded-proto"] ?? "http";
52
- return `${proto}://${host}${path}${next ? `?next=${encodeURIComponent(next)}` : ""}`;
53
- }
54
- export const handleGet = createHandler({ response: ResponseSchema, query: QuerySchema }, (ctx) => {
55
- const runtime = runtimeFrom(ctx);
56
- const next = ctx.query.next;
57
- return {
58
- status: "ok",
59
- registrationOpen: runtime.userStore.hasNoUsers(),
60
- loginUrl: selfUrl(ctx, "/login", next)
61
- };
62
- });
63
- export const handlePost = createHandler({ response: ResponseSchema, request: RequestSchema, query: QuerySchema }, async (ctx) => {
64
- const runtime = runtimeFrom(ctx);
65
- const tenantId = ctx.tenant.id;
66
- const appId = ctx.app.id;
67
- if (!runtime.userStore.hasNoUsers()) {
68
- // Registration is closed once any user exists. Respond 404 so the route
69
- // appears not to exist (no user-enumeration surface).
70
- ctx.setStatus?.(404);
71
- return {
72
- status: "error",
73
- message: ""
74
- };
75
- }
76
- const body = ctx.request;
77
- try {
78
- const created = await runtime.userStore.createUser({
79
- username: body.username,
80
- password: body.password,
81
- email: body.email,
82
- name: body.name,
83
- tenantId,
84
- appRoles: { [appId]: ["admin"] }
85
- });
86
- return {
87
- status: "ok",
88
- message: "First admin created.",
89
- user: {
90
- id: created.id,
91
- username: created.username,
92
- isFirstAdmin: true
93
- },
94
- // For the themed success view: where to send the browser to sign in.
95
- loginUrl: selfUrl(ctx, "/login", ctx.query.next)
96
- };
97
- }
98
- catch (err) {
99
- ctx.setStatus?.(400);
100
- return {
101
- status: "error",
102
- message: err.message
103
- };
104
- }
105
- });
1
+ export { title, description, auth, role, dependencies, chrome, cacheHints } from "./route.impl.js";
106
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import * as av from "anyvali";
2
+ import type { Infer } from "anyvali";
3
+ import { type ApiAuthRequirement, type CacheHints, type BetterPortalRouteChrome } from "@betterportal/framework";
4
+ export declare const QuerySchema: av.ObjectSchema<{
5
+ next: av.OptionalSchema<av.StringSchema>;
6
+ }>;
7
+ export declare const HeadersSchema: av.ObjectSchema<{}>;
8
+ export declare const RequestSchema: av.ObjectSchema<{
9
+ username: av.StringSchema;
10
+ password: av.StringSchema;
11
+ email: av.OptionalSchema<av.StringSchema>;
12
+ name: av.OptionalSchema<av.StringSchema>;
13
+ }>;
14
+ export declare const ResponseSchema: av.ObjectSchema<{
15
+ status: av.EnumSchema<readonly ["ok", "error"]>;
16
+ message: av.OptionalSchema<av.StringSchema>;
17
+ user: av.OptionalSchema<av.ObjectSchema<{
18
+ id: av.StringSchema;
19
+ username: av.StringSchema;
20
+ isFirstAdmin: av.BoolSchema;
21
+ }>>;
22
+ registrationOpen: av.OptionalSchema<av.BoolSchema>;
23
+ loginUrl: av.OptionalSchema<av.StringSchema>;
24
+ }>;
25
+ export type ResponseData = Infer<typeof ResponseSchema>;
26
+ export declare const title = "Register First Admin";
27
+ export declare const description = "Open registration for the very first user. Once any user exists, this endpoint requires admin auth.";
28
+ export declare const role = "auth.register";
29
+ export declare const dependencies: string[];
30
+ export declare const chrome: BetterPortalRouteChrome;
31
+ export declare const auth: ApiAuthRequirement;
32
+ export declare const cacheHints: CacheHints;
33
+ export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, {
34
+ next?: string | undefined;
35
+ }, Record<string, string>, Record<string, unknown>, {
36
+ status: "ok" | "error";
37
+ message?: string | undefined;
38
+ user?: {
39
+ id: string;
40
+ username: string;
41
+ isFirstAdmin: boolean;
42
+ } | undefined;
43
+ registrationOpen?: boolean | undefined;
44
+ loginUrl?: string | undefined;
45
+ }, unknown, Record<string, unknown>>;
46
+ export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, {
47
+ next?: string | undefined;
48
+ }, Record<string, string>, {
49
+ username: string;
50
+ password: string;
51
+ email?: string | undefined;
52
+ name?: string | undefined;
53
+ }, {
54
+ status: "ok" | "error";
55
+ message?: string | undefined;
56
+ user?: {
57
+ id: string;
58
+ username: string;
59
+ isFirstAdmin: boolean;
60
+ } | undefined;
61
+ registrationOpen?: boolean | undefined;
62
+ loginUrl?: string | undefined;
63
+ }, unknown, Record<string, unknown>>;
64
+ //# sourceMappingURL=route.impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.impl.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/register/route.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,WAAW;;EAEI,CAAC;AAC7B,eAAO,MAAM,aAAa,qBAA0C,CAAC;AAErE,eAAO,MAAM,aAAa;;;;;EAKE,CAAC;AAE7B,eAAO,MAAM,cAAc;;;;;;;;;;EAaC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,yBAAyB,CAAC;AAC5C,eAAO,MAAM,WAAW,wGAAwG,CAAC;AAEjI,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,YAAY,UAAkB,CAAC;AAC5C,eAAO,MAAM,MAAM,EAAE,uBAA8C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAgBF,eAAO,MAAM,SAAS;;;;;;;;;;;;oCAWrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;oCA8CtB,CAAC"}