@betterportal/auth-default 0.0.1 → 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 (97) 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 +10 -11
  87. package/bsb-tests.json +0 -14
  88. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/_nav.profile.d.ts.map +0 -1
  89. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/_nav.profile.js.map +0 -1
  90. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/index.d.ts.map +0 -1
  91. package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_theme.bootstrap1/index.js.map +0 -1
  92. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/index.d.ts.map +0 -1
  93. package/lib/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/index.js.map +0 -1
  94. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.400.d.ts.map +0 -1
  95. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.400.js.map +0 -1
  96. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.d.ts.map +0 -1
  97. package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_theme.bootstrap1/index.js.map +0 -1
@@ -0,0 +1,89 @@
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
+ action: av.OptionalSchema<av.StringSchema>;
6
+ next: av.OptionalSchema<av.StringSchema>;
7
+ }>;
8
+ export declare const HeadersSchema: av.ObjectSchema<{}>;
9
+ export declare const RequestSchema: av.ObjectSchema<{
10
+ username: av.StringSchema;
11
+ password: av.StringSchema;
12
+ next: 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
+ accessToken: av.OptionalSchema<av.StringSchema>;
18
+ refreshToken: av.OptionalSchema<av.StringSchema>;
19
+ expiresInSeconds: av.OptionalSchema<av.IntSchema>;
20
+ user: av.OptionalSchema<av.ObjectSchema<{
21
+ id: av.StringSchema;
22
+ username: av.StringSchema;
23
+ email: av.OptionalSchema<av.StringSchema>;
24
+ name: av.OptionalSchema<av.StringSchema>;
25
+ }>>;
26
+ requiresFirstAdmin: av.OptionalSchema<av.BoolSchema>;
27
+ firstAdminUrl: av.OptionalSchema<av.StringSchema>;
28
+ alreadyLoggedIn: av.OptionalSchema<av.BoolSchema>;
29
+ loggedOut: av.OptionalSchema<av.BoolSchema>;
30
+ logoutUrl: av.OptionalSchema<av.StringSchema>;
31
+ nextUrl: av.OptionalSchema<av.StringSchema>;
32
+ }>;
33
+ export type ResponseData = Infer<typeof ResponseSchema>;
34
+ export declare const title = "Login";
35
+ export declare const description = "Authenticate with username and password to receive a JWT.";
36
+ export declare const role = "auth.login";
37
+ export declare const dependencies: string[];
38
+ export declare const chrome: BetterPortalRouteChrome;
39
+ export declare const auth: ApiAuthRequirement;
40
+ export declare const cacheHints: CacheHints;
41
+ export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, {
42
+ action?: string | undefined;
43
+ next?: string | undefined;
44
+ }, Record<string, string>, Record<string, unknown>, {
45
+ status: "ok" | "error";
46
+ message?: string | undefined;
47
+ accessToken?: string | undefined;
48
+ refreshToken?: string | undefined;
49
+ expiresInSeconds?: number | undefined;
50
+ user?: {
51
+ id: string;
52
+ username: string;
53
+ email?: string | undefined;
54
+ name?: string | undefined;
55
+ } | undefined;
56
+ requiresFirstAdmin?: boolean | undefined;
57
+ firstAdminUrl?: string | undefined;
58
+ alreadyLoggedIn?: boolean | undefined;
59
+ loggedOut?: boolean | undefined;
60
+ logoutUrl?: string | undefined;
61
+ nextUrl?: string | undefined;
62
+ }, unknown, Record<string, unknown>>;
63
+ export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, {
64
+ action?: string | undefined;
65
+ next?: string | undefined;
66
+ }, Record<string, string>, {
67
+ username: string;
68
+ password: string;
69
+ next?: string | undefined;
70
+ }, {
71
+ status: "ok" | "error";
72
+ message?: string | undefined;
73
+ accessToken?: string | undefined;
74
+ refreshToken?: string | undefined;
75
+ expiresInSeconds?: number | undefined;
76
+ user?: {
77
+ id: string;
78
+ username: string;
79
+ email?: string | undefined;
80
+ name?: string | undefined;
81
+ } | undefined;
82
+ requiresFirstAdmin?: boolean | undefined;
83
+ firstAdminUrl?: string | undefined;
84
+ alreadyLoggedIn?: boolean | undefined;
85
+ loggedOut?: boolean | undefined;
86
+ logoutUrl?: string | undefined;
87
+ nextUrl?: string | undefined;
88
+ }, unknown, Record<string, unknown>>;
89
+ //# 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/login/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;AAIjC,eAAO,MAAM,WAAW;;;EAGI,CAAC;AAE7B,eAAO,MAAM,aAAa,qBAA0C,CAAC;AAErE,eAAO,MAAM,aAAa;;;;EAIE,CAAC;AAE7B,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;EA2BC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,UAAU,CAAC;AAC7B,eAAO,MAAM,WAAW,8DAA8D,CAAC;AACvF,eAAO,MAAM,IAAI,eAAe,CAAC;AACjC,eAAO,MAAM,YAAY,UAAsD,CAAC;AAChF,eAAO,MAAM,MAAM,EAAE,uBAA8C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAeF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;oCAuDrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;oCA6EtB,CAAC"}
@@ -0,0 +1,186 @@
1
+ import * as av from "anyvali";
2
+ import { createHandler } from "@betterportal/framework";
3
+ import { resolveDefaultAuthAppConfig } from "../../index.js";
4
+ export const QuerySchema = av.object({
5
+ action: av.optional(av.string()).describe("Optional login route action, currently supports logout."),
6
+ next: av.optional(av.string()).describe("The view path that redirected to the login page and should be redirected back to after a successful login.")
7
+ }, { unknownKeys: "strip" });
8
+ export const HeadersSchema = av.object({}, { unknownKeys: "strip" });
9
+ export const RequestSchema = av.object({
10
+ username: av.string().minLength(1).describe("Username for the account signing in."),
11
+ password: av.string().minLength(1).describe("Password for the account signing in."),
12
+ next: av.optional(av.string()).describe("The view path to soft-navigate to after a successful login.")
13
+ }, { unknownKeys: "strip" });
14
+ export const ResponseSchema = av.object({
15
+ status: av.enum_(["ok", "error"]).describe("Login request outcome."),
16
+ message: av.optional(av.string()).describe("Human-readable status or error message for the renderer."),
17
+ accessToken: av.optional(av.string()).describe("Signed JWT access token returned on successful login."),
18
+ refreshToken: av.optional(av.string()).describe("Signed JWT refresh token returned on successful login."),
19
+ expiresInSeconds: av.optional(av.int().min(1)).describe("Access token lifetime in seconds."),
20
+ user: av.optional(av.object({
21
+ id: av.string().describe("Stable UUIDv7 user id."),
22
+ username: av.string().describe("Account username."),
23
+ email: av.optional(av.string()).describe("User email address, when set."),
24
+ name: av.optional(av.string()).describe("Display name, when set.")
25
+ }, { unknownKeys: "strip" }).describe("Authenticated user summary.")),
26
+ // True while the auth service has zero users - the theme renderer redirects
27
+ // to the register view (first-admin setup) instead of showing the login form.
28
+ requiresFirstAdmin: av.optional(av.bool()).describe("True while the auth service has zero users; the theme renderer should redirect to first-admin registration instead of showing the login form."),
29
+ // Absolute URL of this auth service's register view (self-origin). Provided so
30
+ // the theme renderer can load it in-shell without knowing the auth origin.
31
+ firstAdminUrl: av.optional(av.string()).describe("Absolute self-origin URL of this auth service's register view so the theme can load it in-shell without knowing the auth origin."),
32
+ // True when the GET request already carried a valid access token - the theme
33
+ // renderer shows a "signed in" state instead of the login form.
34
+ alreadyLoggedIn: av.optional(av.bool()).describe("True when the GET request already carried a valid access token; the theme renderer should show a signed-in state instead of the login form."),
35
+ loggedOut: av.optional(av.bool()).describe("True after the login route handled ?action=logout."),
36
+ // Tenant-app path of the logout view (app config auth.logoutViewId).
37
+ logoutUrl: av.optional(av.string()).describe("Tenant-app path of the logout view from app auth config."),
38
+ // Echo of ?next= when already signed in - the theme renderer redirects there
39
+ // immediately instead of showing the signed-in card.
40
+ nextUrl: av.optional(av.string()).describe("Echo of the next path when already signed in; the theme renderer should redirect there immediately.")
41
+ }, { unknownKeys: "strip" });
42
+ export const title = "Login";
43
+ export const description = "Authenticate with username and password to receive a JWT.";
44
+ export const role = "auth.login";
45
+ export const dependencies = ["logout.index", "refresh.index", "register.index"];
46
+ export const chrome = { fullScreen: true };
47
+ export const auth = {
48
+ required: false,
49
+ permissions: []
50
+ };
51
+ export const cacheHints = {
52
+ ttlSeconds: 0,
53
+ varyBy: []
54
+ };
55
+ function runtimeFrom(ctx) {
56
+ const runtime = ctx.plugin?.runtime;
57
+ if (!runtime)
58
+ throw new Error("Auth runtime not available on handler context");
59
+ return runtime;
60
+ }
61
+ function normalizeRedirect(raw) {
62
+ const redirect = raw?.trim();
63
+ if (!redirect)
64
+ return "/";
65
+ if (redirect.startsWith("http://") || redirect.startsWith("https://"))
66
+ return redirect;
67
+ return redirect.startsWith("/") ? redirect : `/${redirect}`;
68
+ }
69
+ export const handleGet = createHandler({ response: ResponseSchema, query: QuerySchema }, (ctx) => {
70
+ const runtime = runtimeFrom(ctx);
71
+ const requiresFirstAdmin = runtime.userStore.hasNoUsers();
72
+ if (ctx.query.action === "logout") {
73
+ const config = resolveDefaultAuthAppConfig(ctx.config);
74
+ const nextUrl = normalizeRedirect(config.logoutRedirectPath);
75
+ ctx.bpHeaders?.remove("Authorization");
76
+ ctx.bpHeaders?.remove("X-BP-Refresh");
77
+ if (ctx.serviceId)
78
+ ctx.responseHeaders?.set("HX-Trigger", `bp:fragments:${ctx.serviceId}`);
79
+ return {
80
+ status: "ok",
81
+ message: "Signed out.",
82
+ loggedOut: true,
83
+ nextUrl
84
+ };
85
+ }
86
+ // Valid token already on the request - no point rendering a login form.
87
+ // First-admin setup still wins: a token can outlive a wiped user store.
88
+ if (ctx.user && !requiresFirstAdmin) {
89
+ const config = resolveDefaultAuthAppConfig(ctx.config);
90
+ const next = ctx.query.next || config.loginRedirectPath;
91
+ return {
92
+ status: "ok",
93
+ message: "Already signed in.",
94
+ alreadyLoggedIn: true,
95
+ user: {
96
+ id: ctx.user.sub,
97
+ username: ctx.user.name ?? ctx.user.email ?? ctx.user.sub,
98
+ email: ctx.user.email,
99
+ name: ctx.user.name
100
+ },
101
+ logoutUrl: "/login?action=logout",
102
+ ...(next ? { nextUrl: next } : {})
103
+ };
104
+ }
105
+ let firstAdminUrl;
106
+ if (requiresFirstAdmin) {
107
+ const host = ctx.headers.host;
108
+ if (host) {
109
+ const proto = ctx.headers["x-forwarded-proto"] ?? "http";
110
+ const next = ctx.query.next;
111
+ firstAdminUrl = `${proto}://${host}/register${next ? `?next=${encodeURIComponent(next)}` : ""}`;
112
+ }
113
+ }
114
+ return {
115
+ status: "ok",
116
+ message: "Submit username + password via POST to authenticate.",
117
+ requiresFirstAdmin,
118
+ ...(firstAdminUrl ? { firstAdminUrl } : {})
119
+ };
120
+ });
121
+ export const handlePost = createHandler({ response: ResponseSchema, request: RequestSchema, query: QuerySchema }, async (ctx) => {
122
+ const runtime = runtimeFrom(ctx);
123
+ const tenantId = ctx.tenant.id;
124
+ const appId = ctx.app.id;
125
+ const body = ctx.request;
126
+ const user = await runtime.userStore.authenticate(tenantId, appId, body.username, body.password);
127
+ if (!user) {
128
+ // Auth failures are 401, not 200-with-error-body.
129
+ ctx.setStatus?.(401);
130
+ return {
131
+ status: "error",
132
+ message: "Invalid username or password."
133
+ };
134
+ }
135
+ const issued = runtime.tokenIssuer.issueTokenPair({
136
+ sub: user.id,
137
+ tenantId: user.tenantId,
138
+ appId,
139
+ roles: user.roles,
140
+ name: user.name ?? user.username,
141
+ email: user.email,
142
+ picture: user.picture
143
+ });
144
+ if (!issued.refreshToken) {
145
+ throw new Error("Auth token issuer did not return a refresh token");
146
+ }
147
+ // Login is rendered in the theme's auth-only page state. After credentials
148
+ // are stored, navigate the browser back to the tenant route so the normal
149
+ // shell is rendered from a clean page request.
150
+ const config = resolveDefaultAuthAppConfig(ctx.config);
151
+ const next = body.next || ctx.query.next || config.loginRedirectPath || "/";
152
+ ctx.responseHeaders?.set("HX-Redirect", next);
153
+ // Auth state changed - reload this service's fragments (nav profile etc.).
154
+ // Fragments listening on this key re-fetch; absent fragments ignore it.
155
+ if (ctx.serviceId) {
156
+ ctx.responseHeaders?.set("HX-Trigger", `bp:fragments:${ctx.serviceId}`);
157
+ }
158
+ // Expire the stored header with the ACCESS token, not the refresh token -
159
+ // otherwise the client replays a dead JWT for days. The refresh token is
160
+ // stored separately so the profile fragment can renew before expiry.
161
+ ctx.bpHeaders?.set('Authorization', `Bearer ${issued.accessToken}`, {
162
+ expiresInSeconds: issued.accessTokenExpiresInSeconds,
163
+ locked: true,
164
+ refreshPath: "/refresh",
165
+ refreshBeforeSeconds: 60
166
+ });
167
+ ctx.bpHeaders?.set('X-BP-Refresh', issued.refreshToken, {
168
+ expiresInSeconds: issued.refreshTokenExpiresInSeconds ?? runtime.refreshTokenSeconds,
169
+ locked: true,
170
+ scopeToOwner: true
171
+ });
172
+ return {
173
+ status: "ok",
174
+ message: "logged in",
175
+ accessToken: issued.accessToken,
176
+ refreshToken: issued.refreshToken,
177
+ expiresInSeconds: issued.accessTokenExpiresInSeconds,
178
+ user: {
179
+ id: user.id,
180
+ username: user.username,
181
+ email: user.email,
182
+ name: user.name ?? user.username
183
+ }
184
+ };
185
+ });
186
+ //# 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/login/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/logout/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/logout/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/logout/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/logout/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"}
@@ -1,5 +1,5 @@
1
1
  /** @jsxImportSource jsx-htmx */
2
2
  import type { HtmlRenderable } from "@betterportal/framework";
3
- import type { ResponseData } from "../index.js";
3
+ import type { ResponseData } from "../route.impl.js";
4
4
  export declare function render(_data: ResponseData): HtmlRenderable;
5
- //# sourceMappingURL=index.d.ts.map
5
+ //# 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/logout/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,wBAAgB,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAU1D"}
@@ -4,4 +4,4 @@ export function render(_data) {
4
4
  // tokens and HX-Location immediately soft-navigates to the login view.
5
5
  return (_jsx("div", { class: "d-flex justify-content-center py-5", children: _jsx("div", { class: "spinner-border", role: "status", children: _jsx("span", { class: "visually-hidden", children: "Signing out..." }) }) }));
6
6
  }
7
- //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=GET.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GET.js","sourceRoot":"","sources":["../../../../../../src/plugins/service-betterportal-auth-default/bp-routes/logout/_theme.bootstrap1/GET.tsx"],"names":[],"mappings":";AAIA,MAAM,UAAU,MAAM,CAAC,KAAmB;IACxC,6EAA6E;IAC7E,uEAAuE;IACvE,OAAO,CACL,cAAK,KAAK,EAAC,oCAAoC,YAC7C,cAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,QAAQ,YACvC,eAAM,KAAK,EAAC,iBAAiB,+BAAsB,GAC/C,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -1,25 +1,2 @@
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
- export declare const RequestSchema: av.ObjectSchema<{}>;
7
- export declare const ResponseSchema: av.ObjectSchema<{
8
- status: av.EnumSchema<readonly ["ok"]>;
9
- message: av.StringSchema;
10
- }>;
11
- export type ResponseData = Infer<typeof ResponseSchema>;
12
- export declare const title = "Logout";
13
- export declare const description = "Clear the authentication token from the client.";
14
- export declare const role = "auth.logout";
15
- export declare const auth: ApiAuthRequirement;
16
- export declare const cacheHints: CacheHints;
17
- export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
18
- status: "ok";
19
- message: string;
20
- }, unknown, Record<string, unknown>>;
21
- export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
22
- status: "ok";
23
- message: string;
24
- }, unknown, Record<string, unknown>>;
1
+ export { title, description, auth, role, cacheHints } from "./route.impl.js";
25
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/logout/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,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,WAAW,qBAA0C,CAAC;AACnE,eAAO,MAAM,aAAa,qBAA0C,CAAC;AACrE,eAAO,MAAM,aAAa,qBAA0C,CAAC;AAErE,eAAO,MAAM,cAAc;;;EAGC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,WAAW,CAAC;AAC9B,eAAO,MAAM,WAAW,oDAAoD,CAAC;AAC7E,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAEF,eAAO,MAAM,UAAU;;;oCAkBtB,CAAC;AAEF,eAAO,MAAM,SAAS;;;oCAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/logout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,38 +1,2 @@
1
- import * as av from "anyvali";
2
- import { createHandler } from "@betterportal/framework";
3
- export const QuerySchema = av.object({}, { unknownKeys: "strip" });
4
- export const HeadersSchema = av.object({}, { unknownKeys: "strip" });
5
- export const RequestSchema = av.object({}, { unknownKeys: "strip" });
6
- export const ResponseSchema = av.object({
7
- status: av.enum_(["ok"]).describe("Logout request outcome."),
8
- message: av.string().describe("Human-readable logout status for the renderer.")
9
- }, { unknownKeys: "strip" });
10
- export const title = "Logout";
11
- export const description = "Clear the authentication token from the client.";
12
- export const role = "auth.logout";
13
- export const auth = {
14
- required: false,
15
- permissions: []
16
- };
17
- export const cacheHints = {
18
- ttlSeconds: 0,
19
- varyBy: []
20
- };
21
- export const handlePost = createHandler({ response: ResponseSchema }, (ctx) => {
22
- // Always emit BP-RemoveHeader so the client shim drops the stored token -
23
- // logout must clear state even when called with a dead or missing token.
24
- ctx.bpHeaders?.remove("Authorization");
25
- ctx.bpHeaders?.remove("X-BP-Refresh");
26
- // Compatibility shim: current UI uses /login?action=logout.
27
- ctx.responseHeaders?.set("HX-Location", "/login?action=logout");
28
- // Auth state changed - reload this service's fragments (nav profile etc.).
29
- if (ctx.serviceId) {
30
- ctx.responseHeaders?.set("HX-Trigger", `bp:fragments:${ctx.serviceId}`);
31
- }
32
- return {
33
- status: "ok",
34
- message: "Client should clear stored Authorization header."
35
- };
36
- });
37
- export const handleGet = handlePost;
1
+ export { title, description, auth, role, cacheHints } from "./route.impl.js";
38
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/logout/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,aAAa,EAGd,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAU,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrE,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CAChF,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,iDAAiD,CAAC;AAC7E,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CACrC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,CAAC,GAAG,EAAE,EAAE;IACN,0EAA0E;IAC1E,yEAAyE;IACzE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACvC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,4DAA4D;IAC5D,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;IAChE,2EAA2E;IAC3E,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,EAAE,gBAAgB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,MAAM,EAAE,IAAa;QACrB,OAAO,EAAE,kDAAkD;KAC5D,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/service-betterportal-auth-default/bp-routes/logout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,25 @@
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
+ export declare const RequestSchema: av.ObjectSchema<{}>;
7
+ export declare const ResponseSchema: av.ObjectSchema<{
8
+ status: av.EnumSchema<readonly ["ok"]>;
9
+ message: av.StringSchema;
10
+ }>;
11
+ export type ResponseData = Infer<typeof ResponseSchema>;
12
+ export declare const title = "Logout";
13
+ export declare const description = "Clear the authentication token from the client.";
14
+ export declare const role = "auth.logout";
15
+ export declare const auth: ApiAuthRequirement;
16
+ export declare const cacheHints: CacheHints;
17
+ export declare const handlePost: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
18
+ status: "ok";
19
+ message: string;
20
+ }, unknown, Record<string, unknown>>;
21
+ export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, Record<string, unknown>, Record<string, string>, Record<string, unknown>, {
22
+ status: "ok";
23
+ message: string;
24
+ }, unknown, Record<string, unknown>>;
25
+ //# 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/logout/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,EAChB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,WAAW,qBAA0C,CAAC;AACnE,eAAO,MAAM,aAAa,qBAA0C,CAAC;AACrE,eAAO,MAAM,aAAa,qBAA0C,CAAC;AAErE,eAAO,MAAM,cAAc;;;EAGC,CAAC;AAC7B,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK,WAAW,CAAC;AAC9B,eAAO,MAAM,WAAW,oDAAoD,CAAC;AAC7E,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAEF,eAAO,MAAM,UAAU;;;oCAkBtB,CAAC;AAEF,eAAO,MAAM,SAAS;;;oCAAa,CAAC"}
@@ -0,0 +1,38 @@
1
+ import * as av from "anyvali";
2
+ import { createHandler } from "@betterportal/framework";
3
+ export const QuerySchema = av.object({}, { unknownKeys: "strip" });
4
+ export const HeadersSchema = av.object({}, { unknownKeys: "strip" });
5
+ export const RequestSchema = av.object({}, { unknownKeys: "strip" });
6
+ export const ResponseSchema = av.object({
7
+ status: av.enum_(["ok"]).describe("Logout request outcome."),
8
+ message: av.string().describe("Human-readable logout status for the renderer.")
9
+ }, { unknownKeys: "strip" });
10
+ export const title = "Logout";
11
+ export const description = "Clear the authentication token from the client.";
12
+ export const role = "auth.logout";
13
+ export const auth = {
14
+ required: false,
15
+ permissions: []
16
+ };
17
+ export const cacheHints = {
18
+ ttlSeconds: 0,
19
+ varyBy: []
20
+ };
21
+ export const handlePost = createHandler({ response: ResponseSchema }, (ctx) => {
22
+ // Always emit BP-RemoveHeader so the client shim drops the stored token -
23
+ // logout must clear state even when called with a dead or missing token.
24
+ ctx.bpHeaders?.remove("Authorization");
25
+ ctx.bpHeaders?.remove("X-BP-Refresh");
26
+ // Compatibility shim: current UI uses /login?action=logout.
27
+ ctx.responseHeaders?.set("HX-Location", "/login?action=logout");
28
+ // Auth state changed - reload this service's fragments (nav profile etc.).
29
+ if (ctx.serviceId) {
30
+ ctx.responseHeaders?.set("HX-Trigger", `bp:fragments:${ctx.serviceId}`);
31
+ }
32
+ return {
33
+ status: "ok",
34
+ message: "Client should clear stored Authorization header."
35
+ };
36
+ });
37
+ export const handleGet = handlePost;
38
+ //# 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/logout/route.impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,aAAa,EAGd,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAU,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACrE,OAAO,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;CAChF,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAG7B,MAAM,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,iDAAiD,CAAC;AAC7E,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,IAAI,GAAuB;IACtC,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,EAAE;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CACrC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAC5B,CAAC,GAAG,EAAE,EAAE;IACN,0EAA0E;IAC1E,yEAAyE;IACzE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IACvC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,4DAA4D;IAC5D,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;IAChE,2EAA2E;IAC3E,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,EAAE,gBAAgB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,MAAM,EAAE,IAAa;QACrB,OAAO,EAAE,kDAAkD;KAC5D,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,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/refresh/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/refresh/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"}
@@ -1,31 +1,2 @@
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>>;
1
+ export { title, description, auth, role, cacheHints } from "./route.impl.js";
31
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/refresh/index.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"}
1
+ {"version":3,"file":"index.d.ts","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"}