@pisti-paypiller/react 0.0.0-stage → 0.7.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.
- package/LICENSE +21 -0
- package/README.md +159 -2
- package/dist/api-keys.d.ts +8 -0
- package/dist/api-keys.d.ts.map +1 -0
- package/dist/api-keys.js +54 -0
- package/dist/api-keys.js.map +1 -0
- package/dist/async-state.d.ts +14 -0
- package/dist/async-state.d.ts.map +1 -0
- package/dist/async-state.js +81 -0
- package/dist/async-state.js.map +1 -0
- package/dist/auth.d.ts +23 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +297 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +152 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +633 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +94 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +145 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/organizations.d.ts +16 -0
- package/dist/organizations.d.ts.map +1 -0
- package/dist/organizations.js +169 -0
- package/dist/organizations.js.map +1 -0
- package/dist/resources.d.ts +204 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +129 -0
- package/dist/resources.js.map +1 -0
- package/dist/reverification.d.ts +5 -0
- package/dist/reverification.d.ts.map +1 -0
- package/dist/reverification.js +54 -0
- package/dist/reverification.js.map +1 -0
- package/dist/types.d.ts +118 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +72 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +125 -0
- package/dist/ui.js.map +1 -0
- package/dist/user-profile.d.ts +6 -0
- package/dist/user-profile.d.ts.map +1 -0
- package/dist/user-profile.js +219 -0
- package/dist/user-profile.js.map +1 -0
- package/package.json +48 -4
- package/styles.css +517 -0
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cloneElement, isValidElement, useEffect, } from "react";
|
|
3
|
+
import { useAuth, usePisti } from "./context.js";
|
|
4
|
+
import { useAction } from "./async-state.js";
|
|
5
|
+
export { useAction, useResource } from "./async-state.js";
|
|
6
|
+
export function ErrorNotice({ error, retry, }) {
|
|
7
|
+
return error ? (_jsxs("div", { className: "pisti-notice pisti-error", role: "alert", children: [error.message, retry && (_jsx("button", { type: "button", onClick: retry, children: "Try again" }))] })) : null;
|
|
8
|
+
}
|
|
9
|
+
export function ActionNotice({ action, }) {
|
|
10
|
+
return (_jsxs(_Fragment, { children: [_jsx(ErrorNotice, { error: action.error }), action.success && (_jsx("p", { className: "pisti-notice", role: "status", children: action.success }))] }));
|
|
11
|
+
}
|
|
12
|
+
export function Loading() {
|
|
13
|
+
return (_jsx("p", { role: "status", "aria-live": "polite", children: "Loading\u2026" }));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Renders its children when the condition holds, like Clerk's `<Show>`. It only hides UI; check
|
|
17
|
+
* access on your server too.
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Show when="signed-in"><UserButton /></Show>
|
|
21
|
+
* <Show when={{ permission: "invoices:write" }} fallback={<p>No access</p>}>…</Show>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function Show({ when, fallback = null, children }) {
|
|
25
|
+
const auth = useAuth();
|
|
26
|
+
if (!auth.isLoaded)
|
|
27
|
+
return null;
|
|
28
|
+
if (when === "signed-out")
|
|
29
|
+
return !auth.isSignedIn && !auth.error ? children : fallback;
|
|
30
|
+
if (!auth.isSignedIn)
|
|
31
|
+
return fallback;
|
|
32
|
+
if (when === "signed-in")
|
|
33
|
+
return children;
|
|
34
|
+
const allowed = typeof when === "function"
|
|
35
|
+
? when((check) => auth.has(check))
|
|
36
|
+
: auth.has("permission" in when ? { permission: when.permission } : { role: when.role });
|
|
37
|
+
return allowed ? children : fallback;
|
|
38
|
+
}
|
|
39
|
+
/** Renders the child element with the click handler, or a plain button around text. */
|
|
40
|
+
function Trigger({ children, label, onClick, props, }) {
|
|
41
|
+
if (isValidElement(children)) {
|
|
42
|
+
const child = children;
|
|
43
|
+
return cloneElement(child, {
|
|
44
|
+
onClick: (event) => {
|
|
45
|
+
child.props.onClick?.(event);
|
|
46
|
+
if (!event.defaultPrevented)
|
|
47
|
+
onClick();
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return (_jsx("button", { ...props, type: "button", onClick: onClick, children: children ?? label }));
|
|
52
|
+
}
|
|
53
|
+
function redirectsFrom(props) {
|
|
54
|
+
return {
|
|
55
|
+
...(props.forceRedirectUrl ? { forceRedirectUrl: props.forceRedirectUrl } : {}),
|
|
56
|
+
...(props.fallbackRedirectUrl ? { fallbackRedirectUrl: props.fallbackRedirectUrl } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/** Opens sign-in, like Clerk's `<SignInButton>`. Pass your own button as the child to style it. */
|
|
60
|
+
export function SignInButton({ mode, forceRedirectUrl, fallbackRedirectUrl, children, ...props }) {
|
|
61
|
+
const client = usePisti();
|
|
62
|
+
return (_jsx(Trigger, { label: "Sign in", props: props, onClick: () => (mode ?? (client.signInUrl ? "redirect" : "modal")) === "redirect" && client.signInUrl
|
|
63
|
+
? client.redirectToSignIn()
|
|
64
|
+
: client.openSignIn(redirectsFrom({ forceRedirectUrl, fallbackRedirectUrl })), children: children }));
|
|
65
|
+
}
|
|
66
|
+
/** Opens sign-up, like Clerk's `<SignUpButton>`. */
|
|
67
|
+
export function SignUpButton({ mode, forceRedirectUrl, fallbackRedirectUrl, children, ...props }) {
|
|
68
|
+
const client = usePisti();
|
|
69
|
+
return (_jsx(Trigger, { label: "Sign up", props: props, onClick: () => (mode ?? (client.signUpUrl ? "redirect" : "modal")) === "redirect" && client.signUpUrl
|
|
70
|
+
? client.redirectToSignUp()
|
|
71
|
+
: client.openSignUp(redirectsFrom({ forceRedirectUrl, fallbackRedirectUrl })), children: children }));
|
|
72
|
+
}
|
|
73
|
+
/** Sends visitors to sign-in as soon as it renders. Use it inside `<Show when="signed-out">`. */
|
|
74
|
+
export function RedirectToSignIn() {
|
|
75
|
+
const client = usePisti();
|
|
76
|
+
useEffect(() => client.redirectToSignIn(), [client]);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/** Sends visitors to sign-up as soon as it renders. */
|
|
80
|
+
export function RedirectToSignUp() {
|
|
81
|
+
const client = usePisti();
|
|
82
|
+
useEffect(() => client.redirectToSignUp(), [client]);
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
/** Renders its children once Pisti knows whether someone is signed in, like `<ClerkLoaded>`. */
|
|
86
|
+
export function PistiLoaded({ children }) {
|
|
87
|
+
return useAuth().isLoaded ? children : null;
|
|
88
|
+
}
|
|
89
|
+
/** Renders its children until Pisti knows whether someone is signed in, like `<ClerkLoading>`. */
|
|
90
|
+
export function PistiLoading({ children }) {
|
|
91
|
+
return useAuth().isLoaded ? null : children;
|
|
92
|
+
}
|
|
93
|
+
/** Signs out, then goes to `redirectUrl` or the provider's `afterSignOutUrl`, like Clerk's `<SignOutButton>`. */
|
|
94
|
+
export function SignOutButton({ children, redirectUrl, ...props }) {
|
|
95
|
+
const client = usePisti();
|
|
96
|
+
const action = useAction();
|
|
97
|
+
return (_jsxs(_Fragment, { children: [_jsx(Trigger, { label: action.isPending ? "Signing out…" : "Sign out", props: { ...props, disabled: Boolean(props.disabled) || action.isPending }, onClick: () => void action.run(async () => {
|
|
98
|
+
await client.signOut();
|
|
99
|
+
if (redirectUrl)
|
|
100
|
+
client.navigate(redirectUrl);
|
|
101
|
+
else
|
|
102
|
+
client.redirectAfterSignOut();
|
|
103
|
+
}), children: children }), _jsx(ErrorNotice, { error: action.error })] }));
|
|
104
|
+
}
|
|
105
|
+
function initials(user) {
|
|
106
|
+
const letters = (user.firstName[0] ?? "") + (user.lastName[0] ?? "");
|
|
107
|
+
return (letters || user.primaryEmailAddress?.emailAddress[0] || "?").toUpperCase();
|
|
108
|
+
}
|
|
109
|
+
/** An avatar with the account menu, like Clerk's `<UserButton>`. */
|
|
110
|
+
export function UserButton({ userProfileMode, userProfileUrl, showName = false, className = "", }) {
|
|
111
|
+
const client = usePisti();
|
|
112
|
+
const { user, isLoaded, isSignedIn } = useAuth();
|
|
113
|
+
if (!isLoaded || !isSignedIn || !user)
|
|
114
|
+
return null;
|
|
115
|
+
const email = user.primaryEmailAddress?.emailAddress;
|
|
116
|
+
const target = (userProfileMode ?? (userProfileUrl ? "navigation" : "modal")) === "navigation" ? userProfileUrl : undefined;
|
|
117
|
+
return (_jsxs("details", { className: "pisti-ui pisti-user-button " + className, children: [_jsxs("summary", { "aria-label": "Open account menu", children: [_jsx("span", { className: "pisti-avatar", children: user.imageUrl ? _jsx("img", { src: user.imageUrl, alt: "" }) : _jsx("span", { "aria-hidden": "true", children: initials(user) }) }), showName && _jsx("span", { className: "pisti-user-name", children: user.fullName ?? email })] }), _jsxs("div", { className: "pisti-menu", role: "menu", children: [_jsxs("div", { className: "pisti-menu-identity", children: [_jsx("strong", { children: user.fullName || email }), user.fullName && _jsx("span", { className: "pisti-muted", children: email })] }), _jsx("button", { type: "button", role: "menuitem", className: "pisti-menu-item", onClick: (event) => {
|
|
118
|
+
event.currentTarget.closest("details")?.removeAttribute("open");
|
|
119
|
+
if (target)
|
|
120
|
+
client.navigate(target);
|
|
121
|
+
else
|
|
122
|
+
client.openUserProfile();
|
|
123
|
+
}, children: "Manage account" }), _jsx(SignOutButton, { role: "menuitem", className: "pisti-menu-item" })] })] }));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.d.ts","sourceRoot":"","sources":["../src/user-profile.tsx"],"names":[],"mappings":"AA+zBA,wBAAgB,WAAW,CAAC,EACxB,SAAc,EACd,OAAe,GAClB,EAAE;IACC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,+BA8CA"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useId, useState } from "react";
|
|
3
|
+
import { APIKeys } from "./api-keys.js";
|
|
4
|
+
import { useAccount, useAuth } from "./context.js";
|
|
5
|
+
import { ActionNotice, ErrorNotice, Loading, useAction, useResource, } from "./ui.js";
|
|
6
|
+
function value(form, name) {
|
|
7
|
+
return String(new FormData(form).get(name) ?? "");
|
|
8
|
+
}
|
|
9
|
+
function downloadRecoveryCodes(codes) {
|
|
10
|
+
const url = URL.createObjectURL(new Blob([
|
|
11
|
+
"Pisti recovery codes\nKeep this file private. Each code works once.\n\n" +
|
|
12
|
+
codes.join("\n") +
|
|
13
|
+
"\n",
|
|
14
|
+
], { type: "text/plain;charset=utf-8" }));
|
|
15
|
+
const link = document.createElement("a");
|
|
16
|
+
link.href = url;
|
|
17
|
+
link.download = "pisti-recovery-codes.txt";
|
|
18
|
+
document.body.append(link);
|
|
19
|
+
link.click();
|
|
20
|
+
link.remove();
|
|
21
|
+
window.setTimeout(() => URL.revokeObjectURL(url), 1000);
|
|
22
|
+
}
|
|
23
|
+
function ProofForm({ label, onSubmit, message, allowRecent = true, }) {
|
|
24
|
+
const account = useAccount();
|
|
25
|
+
const id = useId();
|
|
26
|
+
const action = useAction();
|
|
27
|
+
const [requestId, setRequestId] = useState(null);
|
|
28
|
+
const submit = (event) => {
|
|
29
|
+
event.preventDefault();
|
|
30
|
+
const form = event.currentTarget;
|
|
31
|
+
void action.run(async () => {
|
|
32
|
+
const code = value(form, "factor");
|
|
33
|
+
await onSubmit({
|
|
34
|
+
...(requestId
|
|
35
|
+
? { requestId, emailCode: value(form, "emailCode") }
|
|
36
|
+
: { password: value(form, "password") }),
|
|
37
|
+
...(code ? { code } : {}),
|
|
38
|
+
});
|
|
39
|
+
form.reset();
|
|
40
|
+
setRequestId(null);
|
|
41
|
+
}, message);
|
|
42
|
+
};
|
|
43
|
+
return (_jsxs("form", { onSubmit: submit, className: "pisti-form", children: [_jsxs("fieldset", { disabled: action.isPending, children: [_jsx("legend", { children: label }), requestId ? (_jsxs("label", { htmlFor: id + "-email", children: ["Email verification code", _jsx("input", { id: id + "-email", name: "emailCode", inputMode: "numeric", pattern: "[0-9]{6}", maxLength: 6, autoComplete: "one-time-code", required: true })] })) : (_jsxs("label", { htmlFor: id + "-password", children: ["Current password", _jsx("input", { id: id + "-password", name: "password", type: "password", maxLength: 128, autoComplete: "current-password", required: true })] })), _jsx("button", { type: "button", className: "pisti-secondary", onClick: () => void action.run(async () => {
|
|
44
|
+
const request = await account.requestReauthentication();
|
|
45
|
+
setRequestId(request.requestId);
|
|
46
|
+
}, "Check your verified email for a code."), children: requestId
|
|
47
|
+
? "Send a new email code"
|
|
48
|
+
: "Use an email code instead" }), _jsxs("label", { htmlFor: id + "-factor", children: ["Authenticator or recovery code", _jsx("input", { id: id + "-factor", name: "factor", maxLength: 64, autoComplete: "one-time-code" })] }), _jsx("p", { className: "pisti-muted", children: "Enter your second factor if an authenticator is already enrolled." }), _jsx("button", { type: "submit", children: action.isPending ? "Verifying…" : label }), allowRecent && (_jsx("button", { type: "button", className: "pisti-secondary", onClick: (event) => {
|
|
49
|
+
const form = event.currentTarget.form;
|
|
50
|
+
void action.run(async () => {
|
|
51
|
+
await onSubmit({});
|
|
52
|
+
form?.reset();
|
|
53
|
+
setRequestId(null);
|
|
54
|
+
}, message);
|
|
55
|
+
}, children: "Use recent verification" }))] }), _jsx(ActionNotice, { action: action })] }));
|
|
56
|
+
}
|
|
57
|
+
function AccountProfile() {
|
|
58
|
+
const account = useAccount();
|
|
59
|
+
const profile = useResource(account.get);
|
|
60
|
+
const action = useAction();
|
|
61
|
+
const { user } = useAuth();
|
|
62
|
+
const id = useId();
|
|
63
|
+
if (profile.isLoading && !profile.data)
|
|
64
|
+
return _jsx(Loading, {});
|
|
65
|
+
if (!profile.data)
|
|
66
|
+
return _jsx(ErrorNotice, { error: profile.error, retry: profile.reload });
|
|
67
|
+
const data = profile.data;
|
|
68
|
+
const submit = (event) => {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
const form = event.currentTarget;
|
|
71
|
+
void action.run(async () => {
|
|
72
|
+
await account.update({
|
|
73
|
+
firstName: value(form, "firstName"),
|
|
74
|
+
lastName: value(form, "lastName"),
|
|
75
|
+
imageUrl: value(form, "imageUrl") || null,
|
|
76
|
+
unsafeMetadata: data.unsafeMetadata,
|
|
77
|
+
expectedUpdatedAt: data.updatedAt,
|
|
78
|
+
});
|
|
79
|
+
profile.reload();
|
|
80
|
+
}, "Your profile has been updated.");
|
|
81
|
+
};
|
|
82
|
+
return (_jsxs("section", { children: [_jsx("h2", { children: "Profile" }), _jsx("p", { className: "pisti-muted", children: user?.primaryEmailAddress?.emailAddress }), _jsxs("form", { className: "pisti-form", onSubmit: submit, children: [_jsxs("fieldset", { disabled: action.isPending, children: [_jsx("legend", { children: "Personal information" }), _jsxs("div", { className: "pisti-grid", children: [_jsxs("label", { htmlFor: id + "-first", children: ["First name", _jsx("input", { id: id + "-first", name: "firstName", defaultValue: data.firstName, maxLength: 100, autoComplete: "given-name" })] }), _jsxs("label", { htmlFor: id + "-last", children: ["Last name", _jsx("input", { id: id + "-last", name: "lastName", defaultValue: data.lastName, maxLength: 100, autoComplete: "family-name" })] })] }), _jsxs("label", { htmlFor: id + "-image", children: ["Profile image URL", _jsx("input", { id: id + "-image", name: "imageUrl", type: "url", defaultValue: data.imageUrl ?? "", maxLength: 2048 })] }), _jsx("button", { type: "submit", children: action.isPending ? "Saving…" : "Save profile" })] }), _jsx(ActionNotice, { action: action }), _jsx(ErrorNotice, { error: profile.error, retry: profile.reload })] }, data.updatedAt)] }));
|
|
83
|
+
}
|
|
84
|
+
function AccountSessions() {
|
|
85
|
+
const account = useAccount();
|
|
86
|
+
const [page, setPage] = useState(1);
|
|
87
|
+
const load = useCallback(() => account.sessions(page, 10), [account, page]);
|
|
88
|
+
const query = useResource(load);
|
|
89
|
+
const action = useAction();
|
|
90
|
+
return (_jsxs("section", { children: [_jsx("h2", { children: "Sessions" }), _jsx("p", { className: "pisti-muted", children: "Revoke sessions you no longer use. Recent identity verification is required." }), query.isLoading && _jsx(Loading, {}), _jsx(ErrorNotice, { error: query.error, retry: query.reload }), _jsx(ActionNotice, { action: action }), query.data && (_jsxs(_Fragment, { children: [_jsx("ul", { className: "pisti-list", children: query.data.items.map((session) => (_jsxs("li", { children: [_jsxs("div", { children: [_jsx("strong", { children: session.current
|
|
91
|
+
? "This session"
|
|
92
|
+
: "Application session" }), _jsxs("p", { className: "pisti-muted", children: [session.device, session.ipAddress
|
|
93
|
+
? ` · ${session.ipAddress}`
|
|
94
|
+
: ""] }), _jsxs("p", { className: "pisti-muted", children: ["Last active", " ", new Date(session.lastSeenAt).toLocaleString(), session.revokedAt ? " · Revoked" : ""] })] }), !session.revokedAt && (_jsxs("button", { type: "button", className: "pisti-secondary", disabled: action.isPending, onClick: () => void action.run(async () => {
|
|
95
|
+
await account.revokeSession(session.id);
|
|
96
|
+
query.reload();
|
|
97
|
+
}, "The session has ended."), children: ["Revoke", session.current ? " this session" : ""] }))] }, session.id))) }), query.data.items.length === 0 && _jsx("p", { children: "No sessions found." }), _jsxs("div", { className: "pisti-actions", children: [_jsx("button", { type: "button", className: "pisti-secondary", disabled: page === 1 || query.isLoading, onClick: () => setPage(page - 1), children: "Previous" }), _jsxs("span", { children: ["Page ", page] }), _jsx("button", { type: "button", className: "pisti-secondary", disabled: page * 10 >= query.data.totalCount ||
|
|
98
|
+
query.isLoading, onClick: () => setPage(page + 1), children: "Next" })] }), _jsx("button", { type: "button", className: "pisti-danger", disabled: action.isPending, onClick: () => void action.run(account.revokeAllSessions), children: "Sign out all sessions" })] }))] }));
|
|
99
|
+
}
|
|
100
|
+
function AccountPasskeys() {
|
|
101
|
+
const account = useAccount();
|
|
102
|
+
const { user } = useAuth();
|
|
103
|
+
const query = useResource(account.passkeys);
|
|
104
|
+
const action = useAction();
|
|
105
|
+
if (!user)
|
|
106
|
+
return null;
|
|
107
|
+
const destination = new URL("/account/passkeys", user.issuer);
|
|
108
|
+
destination.searchParams.set("instanceId", user.instanceId);
|
|
109
|
+
destination.searchParams.set("userId", user.id);
|
|
110
|
+
return (_jsxs("section", { className: "pisti-section", children: [_jsx("h3", { children: "Passkeys" }), _jsx("p", { className: "pisti-muted", children: "Use a fingerprint, face, device PIN or security key. Setup opens your secure authentication account center." }), _jsx("a", { href: destination.href, children: "Open secure passkey setup" }), query.isLoading && _jsx(Loading, {}), _jsx(ErrorNotice, { error: query.error, retry: query.reload }), _jsx(ActionNotice, { action: action }), query.data?.length === 0 && _jsx("p", { children: "No passkeys registered." }), _jsx("ul", { className: "pisti-list", children: query.data?.map((passkey) => (_jsxs("li", { children: [_jsxs("div", { children: [passkey.name, _jsx("p", { className: "pisti-muted", children: passkey.rpId })] }), _jsx("button", { type: "button", className: "pisti-secondary", disabled: action.isPending, onClick: () => void action.run(async () => {
|
|
111
|
+
await account.removePasskey(passkey.id);
|
|
112
|
+
query.reload();
|
|
113
|
+
}, "Passkey removed."), children: "Remove" })] }, passkey.id))) })] }));
|
|
114
|
+
}
|
|
115
|
+
function AccountConnections() {
|
|
116
|
+
const account = useAccount();
|
|
117
|
+
const { user, reload } = useAuth();
|
|
118
|
+
const query = useResource(account.connections);
|
|
119
|
+
const action = useAction();
|
|
120
|
+
if (!user)
|
|
121
|
+
return null;
|
|
122
|
+
const destination = new URL("/account/connections", user.issuer);
|
|
123
|
+
destination.searchParams.set("instanceId", user.instanceId);
|
|
124
|
+
destination.searchParams.set("userId", user.id);
|
|
125
|
+
return (_jsxs("section", { className: "pisti-section", children: [_jsx("h3", { children: "Connected accounts" }), _jsx("p", { className: "pisti-muted", children: "Connect a sign-in provider in your secure account center. Disconnecting requires recent verification and ends all your sessions." }), _jsx("a", { href: destination.href, children: "Manage connected accounts securely" }), query.isLoading && _jsx(Loading, {}), _jsx(ErrorNotice, { error: query.error, retry: query.reload }), _jsx(ActionNotice, { action: action }), query.data?.length === 0 && _jsx("p", { children: "No sign-in providers connected." }), _jsx("ul", { className: "pisti-list", children: query.data?.map((connection) => (_jsxs("li", { children: [_jsxs("div", { children: [_jsx("strong", { children: connection.displayName }), connection.email && (_jsx("p", { className: "pisti-muted", children: connection.email }))] }), _jsx("button", { type: "button", className: "pisti-secondary", disabled: action.isPending, onClick: () => void action.run(async () => {
|
|
126
|
+
await account.disconnect(connection.id);
|
|
127
|
+
await reload();
|
|
128
|
+
query.reload();
|
|
129
|
+
}, "Provider disconnected. Sign in again using another method."), children: "Disconnect and sign out" })] }, connection.id))) })] }));
|
|
130
|
+
}
|
|
131
|
+
function AccountSecurity() {
|
|
132
|
+
const account = useAccount();
|
|
133
|
+
const query = useResource(account.security);
|
|
134
|
+
const action = useAction();
|
|
135
|
+
const [enrollment, setEnrollment] = useState(null);
|
|
136
|
+
const [recoveryCodes, setRecoveryCodes] = useState([]);
|
|
137
|
+
const [emailRequest, setEmailRequest] = useState(null);
|
|
138
|
+
const [deactivationRequest, setDeactivationRequest] = useState(null);
|
|
139
|
+
const id = useId();
|
|
140
|
+
return (_jsxs("section", { children: [_jsx("h2", { children: "Security" }), query.isLoading && _jsx(Loading, {}), _jsx(ErrorNotice, { error: query.error, retry: query.reload }), _jsx(ActionNotice, { action: action }), _jsx(AccountPasskeys, {}), _jsx(AccountConnections, {}), _jsx(ProofForm, { allowRecent: false, label: "Verify identity", message: "Your identity has been verified.", onSubmit: async (proof) => {
|
|
141
|
+
await account.reauthenticate(proof);
|
|
142
|
+
query.reload();
|
|
143
|
+
} }), _jsxs("section", { className: "pisti-section", children: [_jsx("h3", { children: "Two-step verification" }), _jsxs("p", { className: "pisti-muted", children: [query.data?.authenticatorEnabled
|
|
144
|
+
? "Authenticator enabled."
|
|
145
|
+
: "Protect your account with an authenticator app.", query.data?.authenticatorRequired
|
|
146
|
+
? " Your application requires this protection."
|
|
147
|
+
: ""] }), !enrollment && (_jsx(ProofForm, { label: query.data?.authenticatorEnabled
|
|
148
|
+
? "Replace authenticator"
|
|
149
|
+
: "Set up authenticator", message: "Add the setup key to your authenticator app.", onSubmit: async (proof) => {
|
|
150
|
+
setEnrollment(await account.enrollAuthenticator(proof));
|
|
151
|
+
setRecoveryCodes([]);
|
|
152
|
+
} })), enrollment && (_jsx("form", { className: "pisti-form", onSubmit: (event) => {
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
const form = event.currentTarget;
|
|
155
|
+
void action.run(async () => {
|
|
156
|
+
const result = await account.confirmAuthenticator(enrollment.enrollmentId, value(form, "code"));
|
|
157
|
+
setRecoveryCodes(result.recoveryCodes);
|
|
158
|
+
setEnrollment(null);
|
|
159
|
+
form.reset();
|
|
160
|
+
query.reload();
|
|
161
|
+
}, "Authenticator enabled.");
|
|
162
|
+
}, children: _jsxs("fieldset", { disabled: action.isPending, children: [_jsx("legend", { children: "Confirm authenticator" }), _jsxs("label", { htmlFor: id + "-key", children: ["Setup key", _jsx("input", { id: id + "-key", value: enrollment.setupKey, readOnly: true, autoComplete: "off" })] }), _jsx("p", { className: "pisti-muted", children: "Use \u201CEnter a setup key\u201D in your authenticator app. This setup expires shortly." }), _jsxs("label", { htmlFor: id + "-code", children: ["Authenticator code", _jsx("input", { id: id + "-code", name: "code", inputMode: "numeric", pattern: "[0-9]{6}", maxLength: 6, autoComplete: "one-time-code", required: true })] }), _jsxs("div", { className: "pisti-actions", children: [_jsx("button", { type: "submit", children: "Confirm authenticator" }), _jsx("button", { type: "button", className: "pisti-secondary", onClick: () => setEnrollment(null), children: "Cancel setup" })] })] }) })), query.data?.authenticatorEnabled && (_jsxs("details", { children: [_jsx("summary", { children: "Recovery codes and authenticator removal" }), _jsxs("p", { className: "pisti-muted", children: [query.data.recoveryCodesRemaining, " unused recovery codes remain. Each authenticator code is accepted once; wait for a fresh code between operations."] }), _jsx(ProofForm, { label: "Generate new recovery codes", message: "Previous recovery codes have been replaced.", onSubmit: async (proof) => {
|
|
163
|
+
setRecoveryCodes((await account.regenerateRecoveryCodes(proof)).recoveryCodes);
|
|
164
|
+
query.reload();
|
|
165
|
+
} }), !query.data.authenticatorRequired && (_jsx(ProofForm, { label: "Remove authenticator and sign out", message: "Authenticator removed.", onSubmit: async (proof) => {
|
|
166
|
+
await account.removeAuthenticator(proof);
|
|
167
|
+
query.reload();
|
|
168
|
+
} }))] })), recoveryCodes.length > 0 && (_jsxs("div", { className: "pisti-notice", role: "status", children: [_jsx("h4", { children: "Save your recovery codes" }), _jsx("p", { children: "These codes are shown only now. Keep them somewhere safe outside this browser." }), _jsx("pre", { children: recoveryCodes.join("\n") }), _jsx("button", { type: "button", className: "pisti-secondary", onClick: () => downloadRecoveryCodes(recoveryCodes), children: "Download recovery codes" }), _jsx("button", { type: "button", className: "pisti-secondary", onClick: () => setRecoveryCodes([]), children: "I've saved my codes" })] }))] }), query.data?.passwordEnabled && (_jsxs("details", { className: "pisti-section", children: [_jsx("summary", { children: query.data.hasPassword
|
|
169
|
+
? "Change password"
|
|
170
|
+
: "Set a password" }), _jsx("p", { className: "pisti-muted", children: "Changing your password signs out your other devices; this one stays signed in." }), _jsx("form", { className: "pisti-form", onSubmit: (event) => {
|
|
171
|
+
event.preventDefault();
|
|
172
|
+
const form = event.currentTarget;
|
|
173
|
+
void action.run(async () => {
|
|
174
|
+
if (query.data?.hasPassword)
|
|
175
|
+
await account.changePassword(value(form, "currentPassword"), value(form, "password"), value(form, "code") || undefined);
|
|
176
|
+
else
|
|
177
|
+
await account.setPassword(value(form, "password"));
|
|
178
|
+
form.reset();
|
|
179
|
+
});
|
|
180
|
+
}, children: _jsxs("fieldset", { disabled: action.isPending, children: [_jsx("legend", { children: "Change password" }), query.data.hasPassword && (_jsxs("label", { htmlFor: id + "-current", children: ["Current password", _jsx("input", { id: id + "-current", name: "currentPassword", type: "password", maxLength: 128, autoComplete: "current-password", required: true })] })), _jsxs("label", { htmlFor: id + "-new", children: ["New password", _jsx("input", { id: id + "-new", name: "password", type: "password", minLength: 15, maxLength: 128, autoComplete: "new-password", required: true })] }), query.data.hasPassword && (_jsxs("label", { htmlFor: id + "-password-factor", children: ["Authenticator or recovery code", _jsx("input", { id: id + "-password-factor", name: "code", maxLength: 64, autoComplete: "one-time-code" })] })), !query.data.hasPassword && (_jsx("p", { className: "pisti-muted", children: "Verify your identity when prompted to add a password." })), _jsx("button", { type: "submit", children: "Change password and sign out" })] }) })] })), _jsxs("details", { className: "pisti-section", children: [_jsx("summary", { children: "Change email" }), _jsx("p", { className: "pisti-muted", children: "Verify your new address. Your previous address receives a security notification. Your old email will stop working and all sessions will end." }), !emailRequest ? (_jsx("form", { className: "pisti-form", onSubmit: (event) => {
|
|
181
|
+
event.preventDefault();
|
|
182
|
+
const form = event.currentTarget;
|
|
183
|
+
void action.run(async () => {
|
|
184
|
+
setEmailRequest((await account.requestEmailChange(value(form, "email"))).requestId);
|
|
185
|
+
}, "Check your new email for a code.");
|
|
186
|
+
}, children: _jsxs("fieldset", { disabled: action.isPending, children: [_jsxs("label", { htmlFor: id + "-email", children: ["New email", _jsx("input", { id: id + "-email", name: "email", type: "email", maxLength: 254, autoComplete: "email", required: true })] }), _jsx("button", { type: "submit", children: "Send verification code" })] }) })) : (_jsx("form", { className: "pisti-form", onSubmit: (event) => {
|
|
187
|
+
event.preventDefault();
|
|
188
|
+
const form = event.currentTarget;
|
|
189
|
+
void action.run(async () => {
|
|
190
|
+
await account.completeEmailChange(emailRequest, value(form, "code"));
|
|
191
|
+
form.reset();
|
|
192
|
+
});
|
|
193
|
+
}, children: _jsxs("fieldset", { disabled: action.isPending, children: [_jsxs("label", { htmlFor: id + "-email-code", children: ["Email verification code", _jsx("input", { id: id + "-email-code", name: "code", pattern: "[0-9]{6}", maxLength: 6, autoComplete: "one-time-code", required: true })] }), _jsx("button", { type: "submit", children: "Change email and sign out" }), _jsx("button", { type: "button", className: "pisti-secondary", onClick: () => setEmailRequest(null), children: "Start again" })] }) }))] }), _jsxs("details", { className: "pisti-section", children: [_jsx("summary", { children: "Deactivate account" }), _jsx("p", { className: "pisti-muted", children: "Deactivation signs you out everywhere. Your account is permanently deleted after 30 days; until then you can reactivate it from the sign-in page with an email code." }), !deactivationRequest ? (_jsx("button", { type: "button", className: "pisti-danger", disabled: action.isPending, onClick: () => void action.run(async () => {
|
|
194
|
+
setDeactivationRequest((await account.requestDeactivation())
|
|
195
|
+
.requestId);
|
|
196
|
+
}, "A confirmation code will be sent to your email."), children: "Request deactivation code" })) : (_jsx("form", { className: "pisti-form", onSubmit: (event) => {
|
|
197
|
+
event.preventDefault();
|
|
198
|
+
const form = event.currentTarget;
|
|
199
|
+
void action.run(async () => {
|
|
200
|
+
await account.deactivate(deactivationRequest, value(form, "code"));
|
|
201
|
+
form.reset();
|
|
202
|
+
});
|
|
203
|
+
}, children: _jsxs("fieldset", { disabled: action.isPending, children: [_jsxs("label", { htmlFor: id + "-delete-code", children: ["Email confirmation code", _jsx("input", { id: id + "-delete-code", name: "code", pattern: "[0-9]{6}", maxLength: 6, autoComplete: "one-time-code", required: true })] }), _jsxs("label", { children: [_jsx("input", { type: "checkbox", required: true }), " I understand that I will lose access to this account."] }), _jsx("button", { type: "submit", className: "pisti-danger", children: "Deactivate account" })] }) }))] })] }));
|
|
204
|
+
}
|
|
205
|
+
export function UserProfile({ className = "", apiKeys = false, }) {
|
|
206
|
+
const { isLoaded, isSignedIn, error, user, sessionId } = useAuth();
|
|
207
|
+
const [page, setPage] = useState("profile");
|
|
208
|
+
const pages = apiKeys
|
|
209
|
+
? ["profile", "security", "sessions", "api keys"]
|
|
210
|
+
: ["profile", "security", "sessions"];
|
|
211
|
+
if (!isLoaded)
|
|
212
|
+
return _jsx(Loading, {});
|
|
213
|
+
if (error)
|
|
214
|
+
return _jsx(ErrorNotice, { error: error });
|
|
215
|
+
if (!isSignedIn)
|
|
216
|
+
return _jsx("p", { children: "Sign in to manage your account." });
|
|
217
|
+
return (_jsxs("div", { className: "pisti-ui pisti-account " + className, children: [_jsxs("header", { children: [_jsx("h1", { children: "Your account" }), _jsx("p", { className: "pisti-muted", children: "Manage your profile, security and sessions." })] }), _jsx("nav", { className: "pisti-navigation", "aria-label": "Account settings", children: pages.map((item) => (_jsx("button", { type: "button", className: "pisti-secondary", "aria-current": page === item ? "page" : undefined, onClick: () => setPage(item), children: item === "api keys" ? "API keys" : item.charAt(0).toUpperCase() + item.slice(1) }, item))) }), page === "profile" ? (_jsx(AccountProfile, {})) : page === "security" ? (_jsx(AccountSecurity, {})) : page === "api keys" ? (_jsx(APIKeys, {})) : (_jsx(AccountSessions, {}))] }, user?.id + ":" + sessionId));
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=user-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-profile.js","sourceRoot":"","sources":["../src/user-profile.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,50 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pisti-paypiller/react",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.7.1",
|
|
4
|
+
"description": "Pisti for React: provider, hooks, prebuilt sign-in, sign-up, user and organization components.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/pisti-paypiller/pisti-sdks.git",
|
|
10
|
+
"directory": "react"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=22.12.0"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
"./styles.css": "./styles.css",
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./client": {
|
|
25
|
+
"types": "./dist/client.d.ts",
|
|
26
|
+
"import": "./dist/client.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"styles.css",
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md"
|
|
33
|
+
],
|
|
34
|
+
"sideEffects": [
|
|
35
|
+
"./styles.css"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc -p tsconfig.json",
|
|
39
|
+
"check": "tsc -p tsconfig.json --noEmit",
|
|
40
|
+
"prepack": "npm run build"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"react": "^18.3.1 || ^19.0.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/react": "19.3.0",
|
|
47
|
+
"react": "19.3.1",
|
|
48
|
+
"typescript": "7.0.2"
|
|
49
|
+
}
|
|
50
|
+
}
|