@betterportal/auth-default 10.6.21 → 10.6.22
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 +140 -10
- package/bsb-plugin.json +1 -1
- package/lib/account.d.ts +16 -0
- package/lib/account.d.ts.map +1 -0
- package/lib/account.js +274 -0
- package/lib/account.js.map +1 -0
- package/lib/accountUI.d.ts +5 -0
- package/lib/accountUI.d.ts.map +1 -0
- package/lib/accountUI.js +68 -0
- package/lib/accountUI.js.map +1 -0
- package/lib/bp-contracts/org.betterportal.auth.default.json +2031 -707
- package/lib/clientAddress.d.ts +10 -0
- package/lib/clientAddress.d.ts.map +1 -0
- package/lib/clientAddress.js +35 -0
- package/lib/clientAddress.js.map +1 -0
- package/lib/config.d.ts +3 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +28 -0
- package/lib/config.js.map +1 -0
- package/lib/defaultAuthManifest.d.ts +7 -0
- package/lib/defaultAuthManifest.d.ts.map +1 -1
- package/lib/factors.d.ts +18 -0
- package/lib/factors.d.ts.map +1 -0
- package/lib/factors.js +95 -0
- package/lib/factors.js.map +1 -0
- package/lib/identity.d.ts +106 -0
- package/lib/identity.d.ts.map +1 -0
- package/lib/identity.js +315 -0
- package/lib/identity.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/mail.d.ts +19 -0
- package/lib/mail.d.ts.map +1 -0
- package/lib/mail.js +102 -0
- package/lib/mail.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.d.ts +435 -11
- package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.js +85 -0
- package/lib/plugins/service-betterportal-auth-default/.bp-generated/registry.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/GET.d.ts +34 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/GET.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/GET.js +25 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/GET.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/POST.d.ts +42 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/POST.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/POST.js +27 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/POST.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/GET.d.ts +2 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/GET.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/GET.js +2 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/GET.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/POST.d.ts +2 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/POST.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/POST.js +2 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/_renderer.bootstrap5/POST.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/index.d.ts +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/index.js +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/account/index.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_renderer.bootstrap5/GET.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_renderer.bootstrap5/GET.js +11 -8
- package/lib/plugins/service-betterportal-auth-default/bp-routes/login/_renderer.bootstrap5/GET.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.d.ts +3 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.js +10 -23
- package/lib/plugins/service-betterportal-auth-default/bp-routes/refresh/POST.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_renderer.bootstrap5/GET.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_renderer.bootstrap5/GET.js +2 -2
- package/lib/plugins/service-betterportal-auth-default/bp-routes/register/_renderer.bootstrap5/GET.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/GET.d.ts +34 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/GET.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/GET.js +26 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/GET.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/POST.d.ts +31 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/POST.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/POST.js +23 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/POST.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/_renderer.bootstrap5/GET.d.ts +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/_renderer.bootstrap5/GET.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/_renderer.bootstrap5/GET.js +36 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/_renderer.bootstrap5/GET.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/index.d.ts +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/index.js +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/social/index.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/GET.d.ts +32 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/GET.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/GET.js +39 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/GET.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/POST.d.ts +41 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/POST.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/POST.js +103 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/POST.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/_renderer.bootstrap5/GET.d.ts +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/_renderer.bootstrap5/GET.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/_renderer.bootstrap5/GET.js +19 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/_renderer.bootstrap5/GET.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/index.d.ts +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/index.js +3 -0
- package/lib/plugins/service-betterportal-auth-default/bp-routes/users/index.js.map +1 -0
- package/lib/plugins/service-betterportal-auth-default/index.d.ts +41 -4
- package/lib/plugins/service-betterportal-auth-default/index.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/index.js +205 -9
- package/lib/plugins/service-betterportal-auth-default/index.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/loginFlow.d.ts +17 -2
- package/lib/plugins/service-betterportal-auth-default/loginFlow.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/loginFlow.js +83 -62
- package/lib/plugins/service-betterportal-auth-default/loginFlow.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/logoutFlow.js +1 -1
- package/lib/plugins/service-betterportal-auth-default/logoutFlow.js.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/registrationFlow.d.ts +4 -2
- package/lib/plugins/service-betterportal-auth-default/registrationFlow.d.ts.map +1 -1
- package/lib/plugins/service-betterportal-auth-default/registrationFlow.js +15 -17
- package/lib/plugins/service-betterportal-auth-default/registrationFlow.js.map +1 -1
- package/lib/schemas/service-betterportal-auth-default.json +26 -2
- package/lib/schemas/service-betterportal-auth-default.plugin.json +27 -3
- package/lib/social.d.ts +40 -0
- package/lib/social.d.ts.map +1 -0
- package/lib/social.js +178 -0
- package/lib/social.js.map +1 -0
- package/lib/storage.d.ts +72 -0
- package/lib/storage.d.ts.map +1 -0
- package/lib/storage.js +427 -0
- package/lib/storage.js.map +1 -0
- package/package.json +13 -6
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as av from "anyvali";
|
|
2
|
-
import { resolveAppAuthRedirect } from "@betterportal/framework";
|
|
2
|
+
import { JsonObjectSchema, resolveAppAuthRedirect } from "@betterportal/framework";
|
|
3
3
|
import { createHandler } from "./.bp-generated/route-runtime.js";
|
|
4
|
+
import { getEventPeerIp } from "@betterportal/framework/lib/runtime/h3.js";
|
|
5
|
+
import { AuthError, normalizeAccountIdentifier } from "../../identity.js";
|
|
4
6
|
import { revokePresentedRefreshToken } from "./logoutFlow.js";
|
|
5
7
|
export const QuerySchema = av.object({
|
|
6
8
|
action: av.optional(av.string()).describe("Optional login route action, currently supports logout."),
|
|
@@ -13,6 +15,9 @@ export const RequestSchema = av.object({
|
|
|
13
15
|
next: av.optional(av.string()).describe("The view path to soft-navigate to after a successful login.")
|
|
14
16
|
});
|
|
15
17
|
export const ResponseSchema = av.object({
|
|
18
|
+
challenge: av.optional(JsonObjectSchema),
|
|
19
|
+
accountUrl: av.optional(av.string()),
|
|
20
|
+
socialUrl: av.optional(av.string()),
|
|
16
21
|
status: av.enum_(["ok", "error"]).describe("Login request outcome."),
|
|
17
22
|
message: av.optional(av.string()).describe("Human-readable status or error message for the renderer."),
|
|
18
23
|
accessToken: av.optional(av.string()).describe("Signed JWT access token returned on successful login."),
|
|
@@ -24,9 +29,9 @@ export const ResponseSchema = av.object({
|
|
|
24
29
|
email: av.optional(av.string()).describe("User email address, when set."),
|
|
25
30
|
name: av.optional(av.string()).describe("Display name, when set.")
|
|
26
31
|
}).describe("Authenticated user summary.")),
|
|
27
|
-
// True while
|
|
32
|
+
// True while management bootstrap is incomplete - the theme renderer redirects
|
|
28
33
|
// to the register view (first-admin setup) instead of showing the login form.
|
|
29
|
-
requiresFirstAdmin: av.optional(av.bool()).describe("True while
|
|
34
|
+
requiresFirstAdmin: av.optional(av.bool()).describe("True while management bootstrap is incomplete; the theme renderer should redirect to first-admin registration instead of showing the login form."),
|
|
30
35
|
// Absolute URL of this auth service's register view (self-origin). Provided so
|
|
31
36
|
// the theme renderer can load it in-shell without knowing the auth origin.
|
|
32
37
|
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."),
|
|
@@ -47,7 +52,9 @@ export const dependencies = [
|
|
|
47
52
|
{ operationId: "auth.login", method: "POST" },
|
|
48
53
|
{ operationId: "auth.logout.view", method: "GET" },
|
|
49
54
|
{ operationId: "auth.refresh", method: "POST" },
|
|
50
|
-
{ operationId: "auth.register.view", method: "GET" }
|
|
55
|
+
{ operationId: "auth.register.view", method: "GET" },
|
|
56
|
+
{ operationId: "auth.account.view", method: "GET" },
|
|
57
|
+
{ operationId: "auth.social.view", method: "GET" }
|
|
51
58
|
];
|
|
52
59
|
export const chrome = { fullScreen: true };
|
|
53
60
|
export const auth = {
|
|
@@ -60,7 +67,7 @@ export const cacheHints = {
|
|
|
60
67
|
};
|
|
61
68
|
export const handleGet = createHandler({ response: ResponseSchema, query: QuerySchema, headers: HeadersSchema }, async (ctx) => {
|
|
62
69
|
const runtime = ctx.plugin.runtime;
|
|
63
|
-
const requiresFirstAdmin = runtime.
|
|
70
|
+
const requiresFirstAdmin = runtime.isManagement({ tenantId: ctx.tenant.id, appId: ctx.app.id }) && await runtime.identity.bootstrapAvailable({ tenantId: ctx.tenant.id, appId: ctx.app.id });
|
|
64
71
|
if (ctx.query.action === "logout") {
|
|
65
72
|
await revokePresentedRefreshToken(runtime, ctx.headers["x-bp-refresh"], ctx.tenant.id, ctx.app.id);
|
|
66
73
|
const nextUrl = resolveAppAuthRedirect(ctx, "afterLogout");
|
|
@@ -76,7 +83,7 @@ export const handleGet = createHandler({ response: ResponseSchema, query: QueryS
|
|
|
76
83
|
};
|
|
77
84
|
}
|
|
78
85
|
// Valid token already on the request - no point rendering a login form.
|
|
79
|
-
//
|
|
86
|
+
// Management bootstrap still wins until its durable completion marker exists.
|
|
80
87
|
if (ctx.user && !requiresFirstAdmin) {
|
|
81
88
|
const next = resolveAppAuthRedirect(ctx, "afterLogin", ctx.query.next);
|
|
82
89
|
return {
|
|
@@ -104,7 +111,9 @@ export const handleGet = createHandler({ response: ResponseSchema, query: QueryS
|
|
|
104
111
|
return {
|
|
105
112
|
status: "ok",
|
|
106
113
|
message: "Submit username + password via POST to authenticate.",
|
|
114
|
+
socialUrl: ctx.routeUrl?.("social.index", { absolute: true }) ?? "/social",
|
|
107
115
|
requiresFirstAdmin,
|
|
116
|
+
accountUrl: ctx.routeUrl?.("account.index", { absolute: true }) ?? "/account",
|
|
108
117
|
...(firstAdminUrl ? { firstAdminUrl } : {})
|
|
109
118
|
};
|
|
110
119
|
});
|
|
@@ -113,65 +122,77 @@ export const handlePost = createHandler({ response: ResponseSchema, request: Req
|
|
|
113
122
|
const tenantId = ctx.tenant.id;
|
|
114
123
|
const appId = ctx.app.id;
|
|
115
124
|
const body = ctx.request;
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
125
|
+
const scope = { tenantId, appId };
|
|
126
|
+
const policy = await runtime.policy(scope);
|
|
127
|
+
try {
|
|
128
|
+
await runtime.identity.rateLimit(scope, "login-peer", runtime.clientAddress?.(ctx.rawEvent) ?? getEventPeerIp(ctx.rawEvent) ?? "unknown", 100, 600);
|
|
129
|
+
const directoryScope = { tenantId, appId: policy.isolation === "tenant" ? "" : appId };
|
|
130
|
+
await runtime.identity.rateLimit(directoryScope, "login", normalizeAccountIdentifier(body.username));
|
|
131
|
+
const user = await runtime.identity.authenticate(scope, policy, body.username, body.password);
|
|
132
|
+
if (!user) {
|
|
133
|
+
ctx.setStatus?.(401);
|
|
134
|
+
return { status: "error", message: "Invalid username or password." };
|
|
135
|
+
}
|
|
136
|
+
const roles = await runtime.identity.storage.transaction(scope, tx => runtime.identity.roles(tx, scope, user, policy));
|
|
137
|
+
const root = runtime.isManagement(scope) && roles.includes("*");
|
|
138
|
+
if (!user.emailVerified && !root && user.legacyUsernameLogin !== true) {
|
|
139
|
+
ctx.setStatus?.(403);
|
|
140
|
+
return { status: "error", message: "Verify your email address before signing in. Use account recovery to resend the verification email." };
|
|
141
|
+
}
|
|
142
|
+
const hasFactors = await runtime.factors.hasFactors(user);
|
|
143
|
+
if (hasFactors || policy.requireMfa || root) {
|
|
144
|
+
const event = ctx.rawEvent;
|
|
145
|
+
const prepared = await runtime.factors.prepare(user, event.req.headers.get("origin") ?? event.url.origin, !hasFactors);
|
|
146
|
+
const ticket = await runtime.identity.challenge(scope, "login", { version: user.refreshVersion, factor: prepared.private }, user.id);
|
|
147
|
+
return { status: "ok", accountUrl: ctx.routeUrl?.("account.index", { absolute: true }) ?? "/account", challenge: { ...ticket, ...prepared.public }, message: hasFactors ? "Verify your identity." : "Set up multi-factor authentication to finish signing in." };
|
|
148
|
+
}
|
|
149
|
+
const issued = await runtime.identity.issueSession(scope, policy, user, runtime.tokenIssuer, runtime.refreshTokenSeconds);
|
|
150
|
+
if (!issued.refreshToken) {
|
|
151
|
+
throw new Error("Auth token issuer did not return a refresh token");
|
|
152
|
+
}
|
|
153
|
+
// Login is rendered in the theme's auth-only page state. After credentials
|
|
154
|
+
// are stored, navigate the browser back to the tenant route so the normal
|
|
155
|
+
// shell is rendered from a clean page request.
|
|
156
|
+
const next = resolveAppAuthRedirect(ctx, "afterLogin", body.next || ctx.query.next);
|
|
157
|
+
ctx.responseHeaders?.set("HX-Redirect", next);
|
|
158
|
+
// Auth state changed - reload this service's fragments (nav profile etc.).
|
|
159
|
+
// Fragments listening on this key re-fetch; absent fragments ignore it.
|
|
160
|
+
if (ctx.serviceId) {
|
|
161
|
+
ctx.responseHeaders?.set("HX-Trigger", `bp:fragments:${ctx.serviceId}`);
|
|
162
|
+
}
|
|
163
|
+
// Expire the stored header with the ACCESS token, not the refresh token -
|
|
164
|
+
// otherwise the client replays a dead JWT for days. The refresh token is
|
|
165
|
+
// stored separately so the profile fragment can renew before expiry.
|
|
166
|
+
ctx.bpHeaders?.set('Authorization', `Bearer ${issued.accessToken}`, {
|
|
167
|
+
expiresInSeconds: issued.accessTokenExpiresInSeconds,
|
|
168
|
+
locked: true,
|
|
169
|
+
refreshPath: "/refresh",
|
|
170
|
+
refreshBeforeSeconds: 60
|
|
171
|
+
});
|
|
172
|
+
ctx.bpHeaders?.set('X-BP-Refresh', issued.refreshToken, {
|
|
173
|
+
expiresInSeconds: issued.refreshTokenExpiresInSeconds ?? runtime.refreshTokenSeconds,
|
|
174
|
+
locked: true,
|
|
175
|
+
scopeToOwner: true
|
|
176
|
+
});
|
|
120
177
|
return {
|
|
121
|
-
status: "
|
|
122
|
-
message: "
|
|
178
|
+
status: "ok",
|
|
179
|
+
message: "logged in",
|
|
180
|
+
accessToken: issued.accessToken,
|
|
181
|
+
refreshToken: issued.refreshToken,
|
|
182
|
+
expiresInSeconds: issued.accessTokenExpiresInSeconds,
|
|
183
|
+
user: {
|
|
184
|
+
id: user.id,
|
|
185
|
+
username: user.username,
|
|
186
|
+
email: user.email,
|
|
187
|
+
name: user.name ?? user.username
|
|
188
|
+
}
|
|
123
189
|
};
|
|
124
190
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
refreshContext: { version: user.refreshVersion },
|
|
131
|
-
roles: user.roles,
|
|
132
|
-
name: user.name ?? user.username,
|
|
133
|
-
email: user.email,
|
|
134
|
-
picture: user.picture
|
|
135
|
-
});
|
|
136
|
-
if (!issued.refreshToken) {
|
|
137
|
-
throw new Error("Auth token issuer did not return a refresh token");
|
|
138
|
-
}
|
|
139
|
-
// Login is rendered in the theme's auth-only page state. After credentials
|
|
140
|
-
// are stored, navigate the browser back to the tenant route so the normal
|
|
141
|
-
// shell is rendered from a clean page request.
|
|
142
|
-
const next = resolveAppAuthRedirect(ctx, "afterLogin", body.next || ctx.query.next);
|
|
143
|
-
ctx.responseHeaders?.set("HX-Redirect", next);
|
|
144
|
-
// Auth state changed - reload this service's fragments (nav profile etc.).
|
|
145
|
-
// Fragments listening on this key re-fetch; absent fragments ignore it.
|
|
146
|
-
if (ctx.serviceId) {
|
|
147
|
-
ctx.responseHeaders?.set("HX-Trigger", `bp:fragments:${ctx.serviceId}`);
|
|
191
|
+
catch (error) {
|
|
192
|
+
if (!(error instanceof AuthError))
|
|
193
|
+
throw error;
|
|
194
|
+
ctx.setStatus?.(error.status);
|
|
195
|
+
return { status: "error", message: error.message };
|
|
148
196
|
}
|
|
149
|
-
// Expire the stored header with the ACCESS token, not the refresh token -
|
|
150
|
-
// otherwise the client replays a dead JWT for days. The refresh token is
|
|
151
|
-
// stored separately so the profile fragment can renew before expiry.
|
|
152
|
-
ctx.bpHeaders?.set('Authorization', `Bearer ${issued.accessToken}`, {
|
|
153
|
-
expiresInSeconds: issued.accessTokenExpiresInSeconds,
|
|
154
|
-
locked: true,
|
|
155
|
-
refreshPath: "/refresh",
|
|
156
|
-
refreshBeforeSeconds: 60
|
|
157
|
-
});
|
|
158
|
-
ctx.bpHeaders?.set('X-BP-Refresh', issued.refreshToken, {
|
|
159
|
-
expiresInSeconds: issued.refreshTokenExpiresInSeconds ?? runtime.refreshTokenSeconds,
|
|
160
|
-
locked: true,
|
|
161
|
-
scopeToOwner: true
|
|
162
|
-
});
|
|
163
|
-
return {
|
|
164
|
-
status: "ok",
|
|
165
|
-
message: "logged in",
|
|
166
|
-
accessToken: issued.accessToken,
|
|
167
|
-
refreshToken: issued.refreshToken,
|
|
168
|
-
expiresInSeconds: issued.accessTokenExpiresInSeconds,
|
|
169
|
-
user: {
|
|
170
|
-
id: user.id,
|
|
171
|
-
username: user.username,
|
|
172
|
-
email: user.email,
|
|
173
|
-
name: user.name ?? user.username
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
197
|
});
|
|
177
198
|
//# sourceMappingURL=loginFlow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/loginFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EACL,sBAAsB,EAIvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;IACpG,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,4GAA4G,CAAC;CACtJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACnF,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACnF,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,6DAA6D,CAAC;CACvG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC;IACtC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,OAAO,CAAU,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC7E,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IACtG,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACvG,YAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;IACzG,gBAAgB,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC5F,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC;QAC1B,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAClD,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACnD,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACzE,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACnE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAC3C
|
|
1
|
+
{"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/loginFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,6 @@ export async function revokePresentedRefreshToken(runtime, token, tenantId, appI
|
|
|
59
59
|
catch {
|
|
60
60
|
return;
|
|
61
61
|
} // Logout still clears invalid or expired credentials.
|
|
62
|
-
runtime.
|
|
62
|
+
await runtime.identity.revokeSession({ tenantId, appId }, claims);
|
|
63
63
|
}
|
|
64
64
|
//# sourceMappingURL=logoutFlow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logoutFlow.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/logoutFlow.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"logoutFlow.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/logoutFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare const QuerySchema: av.ObjectSchema<{
|
|
|
6
6
|
}>;
|
|
7
7
|
export declare const HeadersSchema: av.ObjectSchema<{}>;
|
|
8
8
|
export declare const RequestSchema: av.ObjectSchema<{
|
|
9
|
+
setupToken: av.OptionalSchema<av.StringSchema>;
|
|
9
10
|
username: av.StringSchema;
|
|
10
11
|
password: av.StringSchema;
|
|
11
12
|
email: av.OptionalSchema<av.StringSchema>;
|
|
@@ -39,7 +40,7 @@ export declare const cacheHints: CacheHints;
|
|
|
39
40
|
export declare const handleGet: import("@betterportal/framework").RouteHandler<Record<string, string>, {
|
|
40
41
|
next?: string | undefined;
|
|
41
42
|
}, Record<string, string>, Record<string, unknown>, {
|
|
42
|
-
status: "
|
|
43
|
+
status: "error" | "ok";
|
|
43
44
|
message?: string | undefined;
|
|
44
45
|
user?: {
|
|
45
46
|
id: string;
|
|
@@ -56,10 +57,11 @@ export declare const handlePost: import("@betterportal/framework").RouteHandler<
|
|
|
56
57
|
}, Record<string, string>, {
|
|
57
58
|
username: string;
|
|
58
59
|
password: string;
|
|
60
|
+
setupToken?: string | undefined;
|
|
59
61
|
email?: string | undefined;
|
|
60
62
|
name?: string | undefined;
|
|
61
63
|
}, {
|
|
62
|
-
status: "
|
|
64
|
+
status: "error" | "ok";
|
|
63
65
|
message?: string | undefined;
|
|
64
66
|
user?: {
|
|
65
67
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrationFlow.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/registrationFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,WAAW;;EAEtB,CAAC;AACH,eAAO,MAAM,aAAa,qBAAgB,CAAC;AAE3C,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"registrationFlow.d.ts","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/registrationFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,yBAAyB,CAAC;AAGjC,eAAO,MAAM,WAAW;;EAEtB,CAAC;AACH,eAAO,MAAM,aAAa,qBAAgB,CAAC;AAE3C,eAAO,MAAM,aAAa;;;;;;EAMxB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;EAazB,CAAC;AACH,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;;;;;;EAGf,CAAC;AACX,eAAO,MAAM,MAAM,EAAE,uBAA8C,CAAC;AAEpE,eAAO,MAAM,IAAI,EAAE,kBAGlB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,UAGxB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;EAcrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;EA8CtB,CAAC"}
|
|
@@ -5,8 +5,9 @@ export const QuerySchema = av.object({
|
|
|
5
5
|
});
|
|
6
6
|
export const HeadersSchema = av.object({});
|
|
7
7
|
export const RequestSchema = av.object({
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
setupToken: av.optional(av.string()),
|
|
9
|
+
username: av.string().minLength(1).describe("Username for the account."),
|
|
10
|
+
password: av.string().minLength(12).describe("Password for the first admin account."),
|
|
10
11
|
email: av.optional(av.string()).describe("Email address for the first admin account."),
|
|
11
12
|
name: av.optional(av.string()).describe("Display name for the first admin account.")
|
|
12
13
|
});
|
|
@@ -18,10 +19,10 @@ export const ResponseSchema = av.object({
|
|
|
18
19
|
username: av.string().describe("Created account username."),
|
|
19
20
|
isFirstAdmin: av.bool().describe("True when this account is the deployment's first admin.")
|
|
20
21
|
}).describe("Created first-admin user summary.")),
|
|
21
|
-
// GET state for the theme renderer:
|
|
22
|
-
//
|
|
22
|
+
// GET state for the theme renderer: registration closes after management
|
|
23
|
+
// bootstrap; loginUrl (self-origin, absolute) is where the renderer sends the
|
|
23
24
|
// browser in that case - and after a successful first-admin creation.
|
|
24
|
-
registrationOpen: av.optional(av.bool()).describe("True while
|
|
25
|
+
registrationOpen: av.optional(av.bool()).describe("True while management bootstrap is incomplete; once false, the renderer should send the browser to login."),
|
|
25
26
|
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
27
|
});
|
|
27
28
|
export const title = "Register First Admin";
|
|
@@ -40,13 +41,13 @@ export const cacheHints = {
|
|
|
40
41
|
ttlSeconds: 0,
|
|
41
42
|
varyBy: []
|
|
42
43
|
};
|
|
43
|
-
export const handleGet = createHandler({ response: ResponseSchema, query: QuerySchema }, (ctx) => {
|
|
44
|
+
export const handleGet = createHandler({ response: ResponseSchema, query: QuerySchema }, async (ctx) => {
|
|
44
45
|
const runtime = ctx.plugin.runtime;
|
|
45
46
|
const next = ctx.query.next;
|
|
46
47
|
const query = next ? { next } : undefined;
|
|
47
48
|
return {
|
|
48
49
|
status: "ok",
|
|
49
|
-
registrationOpen: runtime.
|
|
50
|
+
registrationOpen: runtime.isManagement({ tenantId: ctx.tenant.id, appId: ctx.app.id }) && await runtime.identity.bootstrapAvailable({ tenantId: ctx.tenant.id, appId: ctx.app.id }),
|
|
50
51
|
loginUrl: ctx.routeUrl?.("login.index", { absolute: true, query })
|
|
51
52
|
?? ctx.routeUrl?.("login.index", { query })
|
|
52
53
|
?? undefined
|
|
@@ -56,8 +57,9 @@ export const handlePost = createHandler({ response: ResponseSchema, request: Req
|
|
|
56
57
|
const runtime = ctx.plugin.runtime;
|
|
57
58
|
const tenantId = ctx.tenant.id;
|
|
58
59
|
const appId = ctx.app.id;
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
const scope = { tenantId, appId };
|
|
61
|
+
if (!runtime.isManagement(scope) || !await runtime.identity.bootstrapAvailable(scope)) {
|
|
62
|
+
// Registration closes once management bootstrap completes. Respond 404 so the route
|
|
61
63
|
// appears not to exist (no user-enumeration surface).
|
|
62
64
|
ctx.setStatus?.(404);
|
|
63
65
|
return {
|
|
@@ -67,14 +69,10 @@ export const handlePost = createHandler({ response: ResponseSchema, request: Req
|
|
|
67
69
|
}
|
|
68
70
|
const body = ctx.request;
|
|
69
71
|
try {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
name: body.name,
|
|
75
|
-
tenantId,
|
|
76
|
-
appRoles: { [appId]: ["*"] }
|
|
77
|
-
}, true);
|
|
72
|
+
await runtime.identity.rateLimit(scope, "bootstrap", "setup", 10);
|
|
73
|
+
if (!runtime.verifySetup(body.setupToken ?? ""))
|
|
74
|
+
throw new Error("Enter the deployment setup token.");
|
|
75
|
+
const created = await runtime.identity.createUser(scope, await runtime.policy(scope), { username: body.username, password: body.password, email: body.email, name: body.name }, ["*"], true);
|
|
78
76
|
const next = ctx.query.next;
|
|
79
77
|
const query = next ? { next } : undefined;
|
|
80
78
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrationFlow.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/registrationFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAO9B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,wEAAwE,CAAC;CAClH,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"registrationFlow.js","sourceRoot":"","sources":["../../../src/plugins/service-betterportal-auth-default/registrationFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"pluginId": "service-betterportal-auth-default",
|
|
3
3
|
"pluginName": "service-betterportal-auth-default",
|
|
4
4
|
"events": {},
|
|
5
|
-
"version": "10.6.
|
|
5
|
+
"version": "10.6.22",
|
|
6
6
|
"configSchema": {
|
|
7
7
|
"anyvaliVersion": "1.0",
|
|
8
8
|
"schemaVersion": "1.1",
|
|
@@ -48,6 +48,26 @@
|
|
|
48
48
|
"minLength": 1,
|
|
49
49
|
"default": "./.bp-auth-state/users.json"
|
|
50
50
|
},
|
|
51
|
+
"mode": {
|
|
52
|
+
"kind": "enum",
|
|
53
|
+
"values": [
|
|
54
|
+
"simple",
|
|
55
|
+
"advanced"
|
|
56
|
+
],
|
|
57
|
+
"default": "simple"
|
|
58
|
+
},
|
|
59
|
+
"postgresUrl": {
|
|
60
|
+
"kind": "string",
|
|
61
|
+
"default": ""
|
|
62
|
+
},
|
|
63
|
+
"encryptionKey": {
|
|
64
|
+
"kind": "string",
|
|
65
|
+
"default": ""
|
|
66
|
+
},
|
|
67
|
+
"setupToken": {
|
|
68
|
+
"kind": "string",
|
|
69
|
+
"default": ""
|
|
70
|
+
},
|
|
51
71
|
"betterportal": {
|
|
52
72
|
"kind": "optional",
|
|
53
73
|
"inner": {
|
|
@@ -127,7 +147,11 @@
|
|
|
127
147
|
"accessTokenSeconds",
|
|
128
148
|
"refreshTokenSeconds",
|
|
129
149
|
"keyStorePath",
|
|
130
|
-
"userStorePath"
|
|
150
|
+
"userStorePath",
|
|
151
|
+
"mode",
|
|
152
|
+
"postgresUrl",
|
|
153
|
+
"encryptionKey",
|
|
154
|
+
"setupToken"
|
|
131
155
|
],
|
|
132
156
|
"unknownKeys": "strip"
|
|
133
157
|
},
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "service-betterportal-auth-default",
|
|
3
3
|
"name": "service-betterportal-auth-default",
|
|
4
|
-
"version": "10.6.
|
|
5
|
-
"description": "Default BetterPortal
|
|
4
|
+
"version": "10.6.22",
|
|
5
|
+
"description": "Default BetterPortal auth: app-scoped accounts, social sign-in, MFA and JWT sessions",
|
|
6
6
|
"category": "service",
|
|
7
7
|
"tags": [
|
|
8
8
|
"betterportal",
|
|
@@ -65,6 +65,26 @@
|
|
|
65
65
|
"minLength": 1,
|
|
66
66
|
"default": "./.bp-auth-state/users.json"
|
|
67
67
|
},
|
|
68
|
+
"mode": {
|
|
69
|
+
"kind": "enum",
|
|
70
|
+
"values": [
|
|
71
|
+
"simple",
|
|
72
|
+
"advanced"
|
|
73
|
+
],
|
|
74
|
+
"default": "simple"
|
|
75
|
+
},
|
|
76
|
+
"postgresUrl": {
|
|
77
|
+
"kind": "string",
|
|
78
|
+
"default": ""
|
|
79
|
+
},
|
|
80
|
+
"encryptionKey": {
|
|
81
|
+
"kind": "string",
|
|
82
|
+
"default": ""
|
|
83
|
+
},
|
|
84
|
+
"setupToken": {
|
|
85
|
+
"kind": "string",
|
|
86
|
+
"default": ""
|
|
87
|
+
},
|
|
68
88
|
"betterportal": {
|
|
69
89
|
"kind": "optional",
|
|
70
90
|
"inner": {
|
|
@@ -144,7 +164,11 @@
|
|
|
144
164
|
"accessTokenSeconds",
|
|
145
165
|
"refreshTokenSeconds",
|
|
146
166
|
"keyStorePath",
|
|
147
|
-
"userStorePath"
|
|
167
|
+
"userStorePath",
|
|
168
|
+
"mode",
|
|
169
|
+
"postgresUrl",
|
|
170
|
+
"encryptionKey",
|
|
171
|
+
"setupToken"
|
|
148
172
|
],
|
|
149
173
|
"unknownKeys": "strip"
|
|
150
174
|
},
|
package/lib/social.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type RouteHandlerContext, type JsonObject } from "@betterportal/framework";
|
|
2
|
+
import type { AuthRuntime } from "./plugins/service-betterportal-auth-default/index.js";
|
|
3
|
+
type Context = RouteHandlerContext & {
|
|
4
|
+
plugin: {
|
|
5
|
+
runtime: AuthRuntime;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
export interface SocialConnection {
|
|
9
|
+
id: string;
|
|
10
|
+
kind: "google" | "microsoft" | "github";
|
|
11
|
+
clientId: string;
|
|
12
|
+
clientSecret: string;
|
|
13
|
+
tenantId?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ExternalIdentity {
|
|
16
|
+
issuer: string;
|
|
17
|
+
subject: string;
|
|
18
|
+
email?: string;
|
|
19
|
+
emailVerified: boolean;
|
|
20
|
+
name?: string;
|
|
21
|
+
}
|
|
22
|
+
/** Enterprise adapters can implement the same normalized identity boundary later. */
|
|
23
|
+
export interface IdentityProviderAdapter {
|
|
24
|
+
authorize(connection: SocialConnection, parameters: Record<string, string>): Promise<string>;
|
|
25
|
+
exchange(connection: SocialConnection, callback: URL, checks: {
|
|
26
|
+
verifier: string;
|
|
27
|
+
nonce: string;
|
|
28
|
+
state: string;
|
|
29
|
+
redirectUri: string;
|
|
30
|
+
}): Promise<ExternalIdentity>;
|
|
31
|
+
}
|
|
32
|
+
export declare function socialConnections(runtime: AuthRuntime, scope: {
|
|
33
|
+
tenantId: string;
|
|
34
|
+
appId: string;
|
|
35
|
+
}): SocialConnection[];
|
|
36
|
+
export declare function parseSocialConnections(configured: unknown): SocialConnection[];
|
|
37
|
+
export declare const socialAdapter: IdentityProviderAdapter;
|
|
38
|
+
export declare function socialPost(ctx: Context): Promise<JsonObject>;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=social.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../src/social.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAEtG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAIxF,KAAK,OAAO,GAAG,mBAAmB,GAAG;IAAE,MAAM,EAAE;QAAE,OAAO,EAAE,WAAW,CAAA;KAAE,CAAA;CAAE,CAAC;AAC1E,MAAM,WAAW,gBAAgB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAMpJ,MAAM,WAAW,gBAAgB;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5H,qFAAqF;AACrF,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7F,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACnK;AACD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,gBAAgB,EAAE,CAEtH;AACD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,OAAO,GAAG,gBAAgB,EAAE,CAW9E;AAKD,eAAO,MAAM,aAAa,EAAE,uBA0B3B,CAAC;AACF,wBAAsB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAiFlE"}
|