payload-auth 1.7.0 → 1.8.0-canary.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/dist/better-auth/adapter/index.d.ts +1 -1
- package/dist/better-auth/adapter/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/index.js +57 -7
- package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/transform/index.js +47 -7
- package/dist/better-auth/generated-types.d.ts +13 -11
- package/dist/better-auth/generated-types.d.ts.map +1 -1
- package/dist/better-auth/generated-types.js +1 -1
- package/dist/better-auth/plugin/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/index.js +3 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +3 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +5 -5
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +31 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +3 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +17 -8
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.d.ts +14 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.js +38 -0
- package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.js +197 -0
- package/dist/better-auth/plugin/payload/components/login-form/context.d.ts +49 -0
- package/dist/better-auth/plugin/payload/components/login-form/context.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/context.js +94 -0
- package/dist/better-auth/plugin/payload/components/login-form/credentials-form.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/login-form/credentials-form.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/credentials-form.js +167 -0
- package/dist/better-auth/plugin/payload/components/login-form/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/login-form/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/index.js +6 -0
- package/dist/better-auth/plugin/payload/components/{social-provider-buttons → login-form}/index.scss +17 -12
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +2 -2
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +1 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -2
- package/dist/better-auth/plugin/payload/exports/client.d.ts +3 -2
- package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/exports/client.js +4 -3
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +11 -7
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +17 -193
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +25 -8
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +6 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js +12 -10
- package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js +22 -3
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js +17 -5
- package/dist/better-auth/plugin/payload/views/reset-password/index.js +2 -2
- package/dist/better-auth/plugin/types.d.ts +4 -1
- package/dist/better-auth/plugin/types.d.ts.map +1 -1
- package/dist/better-auth/plugin/types.js +1 -1
- package/dist/better-auth/scripts/generate-types.js +2 -2
- package/dist/shared/form/fields/text-field.d.ts +2 -1
- package/dist/shared/form/fields/text-field.d.ts.map +1 -1
- package/dist/shared/form/fields/text-field.js +6 -3
- package/dist/shared/form/validation.d.ts +9 -69
- package/dist/shared/form/validation.d.ts.map +1 -1
- package/dist/shared/form/validation.js +11 -24
- package/package.json +40 -13
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +0 -16
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +0 -41
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +0 -16
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts.map +0 -1
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +0 -144
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { socialProviders } from "../../../constants";
|
|
4
|
-
import { Icons } from "../../../../../shared/components/icons";
|
|
5
|
-
import { Button, toast } from "@payloadcms/ui";
|
|
6
|
-
import { passkeyClient } from "better-auth/client/plugins";
|
|
7
|
-
import { createAuthClient } from "better-auth/react";
|
|
8
|
-
import { Key } from "lucide-react";
|
|
9
|
-
import { useRouter } from "next/navigation";
|
|
10
|
-
import React, { useMemo } from "react";
|
|
11
|
-
import "./index.scss";
|
|
12
|
-
const baseClass = 'admin-social-provider-buttons';
|
|
13
|
-
export const AdminSocialProviderButtons = ({ isSignup, loginMethods, setLoading, redirectUrl, newUserCallbackURL, adminInviteToken, baseURL, basePath })=>{
|
|
14
|
-
const router = useRouter();
|
|
15
|
-
const authClient = useMemo(()=>createAuthClient({
|
|
16
|
-
baseURL,
|
|
17
|
-
basePath,
|
|
18
|
-
plugins: [
|
|
19
|
-
passkeyClient()
|
|
20
|
-
]
|
|
21
|
-
}), []);
|
|
22
|
-
const loginMethodCount = loginMethods.filter((method)=>method !== 'emailPassword', 'passkey').length;
|
|
23
|
-
if (loginMethodCount === 0) return null;
|
|
24
|
-
const showIconOnly = loginMethodCount >= 3;
|
|
25
|
-
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
26
|
-
children: [
|
|
27
|
-
loginMethods.includes('emailPassword') && /*#__PURE__*/ _jsx("div", {
|
|
28
|
-
style: {
|
|
29
|
-
textAlign: 'center',
|
|
30
|
-
fontSize: '0.875rem',
|
|
31
|
-
textTransform: 'uppercase',
|
|
32
|
-
marginTop: '-.5rem',
|
|
33
|
-
color: 'var(--theme-elevation-450)',
|
|
34
|
-
marginBottom: '1.5rem'
|
|
35
|
-
},
|
|
36
|
-
children: /*#__PURE__*/ _jsxs("span", {
|
|
37
|
-
children: [
|
|
38
|
-
"Or ",
|
|
39
|
-
isSignup ? 'sign up' : 'login',
|
|
40
|
-
" with"
|
|
41
|
-
]
|
|
42
|
-
})
|
|
43
|
-
}),
|
|
44
|
-
/*#__PURE__*/ _jsx("div", {
|
|
45
|
-
className: `${baseClass} ${baseClass}--count-${showIconOnly ? 'many' : loginMethodCount}`,
|
|
46
|
-
children: loginMethods.map((loginMethod)=>{
|
|
47
|
-
const providerName = loginMethod.charAt(0).toUpperCase() + loginMethod.slice(1);
|
|
48
|
-
const isSocialProvider = socialProviders.includes(loginMethod);
|
|
49
|
-
// ---- Passkey ----
|
|
50
|
-
if (loginMethod === 'passkey') {
|
|
51
|
-
if (isSignup) return null;
|
|
52
|
-
const handlePasskeyClick = async ()=>{
|
|
53
|
-
setLoading(true);
|
|
54
|
-
try {
|
|
55
|
-
await authClient.signIn.passkey({
|
|
56
|
-
fetchOptions: {
|
|
57
|
-
onSuccess () {
|
|
58
|
-
if (router && redirectUrl) router.push(redirectUrl);
|
|
59
|
-
},
|
|
60
|
-
onError (context) {
|
|
61
|
-
toast.error(context.error.message || 'Failed to sign in with passkey');
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
} catch (error) {
|
|
66
|
-
toast.error(error?.message || 'Failed to sign in with passkey');
|
|
67
|
-
} finally{
|
|
68
|
-
setLoading(false);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
return /*#__PURE__*/ _jsxs(Button, {
|
|
72
|
-
type: "button",
|
|
73
|
-
size: "large",
|
|
74
|
-
className: `${baseClass}__button provider--passkey`,
|
|
75
|
-
onClick: handlePasskeyClick,
|
|
76
|
-
icon: showIconOnly ? /*#__PURE__*/ _jsx(Key, {
|
|
77
|
-
className: `${baseClass}__icon`
|
|
78
|
-
}) : undefined,
|
|
79
|
-
tooltip: showIconOnly ? `Sign in with ${providerName}` : undefined,
|
|
80
|
-
children: [
|
|
81
|
-
!showIconOnly && /*#__PURE__*/ _jsx(Key, {
|
|
82
|
-
className: `${baseClass}__icon`
|
|
83
|
-
}),
|
|
84
|
-
!showIconOnly && /*#__PURE__*/ _jsx("span", {
|
|
85
|
-
children: providerName
|
|
86
|
-
})
|
|
87
|
-
]
|
|
88
|
-
}, loginMethod);
|
|
89
|
-
}
|
|
90
|
-
// ---- Social providers ----
|
|
91
|
-
if (isSocialProvider) {
|
|
92
|
-
const Icon = Icons[loginMethod] ?? null;
|
|
93
|
-
const handleSocialClick = async ()=>{
|
|
94
|
-
setLoading(true);
|
|
95
|
-
try {
|
|
96
|
-
const { error } = await authClient.signIn.social({
|
|
97
|
-
provider: loginMethod,
|
|
98
|
-
fetchOptions: {
|
|
99
|
-
query: {
|
|
100
|
-
...isSignup && {
|
|
101
|
-
adminInviteToken
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
errorCallbackURL: window.location.href,
|
|
106
|
-
callbackURL: redirectUrl,
|
|
107
|
-
newUserCallbackURL,
|
|
108
|
-
...isSignup && {
|
|
109
|
-
requestSignUp: true
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
if (error) {
|
|
113
|
-
toast.error(error.message);
|
|
114
|
-
}
|
|
115
|
-
} catch (error) {
|
|
116
|
-
toast.error(`Failed to sign in with ${providerName}`);
|
|
117
|
-
} finally{
|
|
118
|
-
setLoading(false);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
return /*#__PURE__*/ _jsx(Button, {
|
|
122
|
-
type: "button",
|
|
123
|
-
size: "large",
|
|
124
|
-
className: `${baseClass}__button provider--${loginMethod}`,
|
|
125
|
-
onClick: handleSocialClick,
|
|
126
|
-
iconPosition: "left",
|
|
127
|
-
icon: /*#__PURE__*/ _jsx(Icon, {
|
|
128
|
-
className: `${baseClass}__icon`
|
|
129
|
-
}),
|
|
130
|
-
tooltip: showIconOnly ? `Sign in with ${providerName}` : undefined,
|
|
131
|
-
children: !showIconOnly && /*#__PURE__*/ _jsx("span", {
|
|
132
|
-
children: providerName
|
|
133
|
-
})
|
|
134
|
-
}, loginMethod);
|
|
135
|
-
}
|
|
136
|
-
// Unknown provider — render nothing
|
|
137
|
-
return null;
|
|
138
|
-
})
|
|
139
|
-
})
|
|
140
|
-
]
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9jb21wb25lbnRzL3NvY2lhbC1wcm92aWRlci1idXR0b25zL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IHsgc29jaWFsUHJvdmlkZXJzIH0gZnJvbSAnQC9iZXR0ZXItYXV0aC9wbHVnaW4vY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgeyBCZXR0ZXJBdXRoUGx1Z2luT3B0aW9ucywgTG9naW5NZXRob2QsIFNvY2lhbFByb3ZpZGVyIH0gZnJvbSAnQC9iZXR0ZXItYXV0aC9wbHVnaW4vdHlwZXMnXG5pbXBvcnQgeyBJY29ucyB9IGZyb20gJ0Avc2hhcmVkL2NvbXBvbmVudHMvaWNvbnMnXG5pbXBvcnQgeyBCdXR0b24sIHRvYXN0IH0gZnJvbSAnQHBheWxvYWRjbXMvdWknXG5pbXBvcnQgeyBwYXNza2V5Q2xpZW50IH0gZnJvbSAnYmV0dGVyLWF1dGgvY2xpZW50L3BsdWdpbnMnXG5pbXBvcnQgeyBjcmVhdGVBdXRoQ2xpZW50IH0gZnJvbSAnYmV0dGVyLWF1dGgvcmVhY3QnXG5pbXBvcnQgeyBLZXkgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbnR5cGUgQWRtaW5Tb2NpYWxQcm92aWRlckJ1dHRvbnNQcm9wcyA9IHtcbiAgaXNTaWdudXA6IGJvb2xlYW5cbiAgbG9naW5NZXRob2RzOiBMb2dpbk1ldGhvZFtdXG4gIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkXG4gIHJlZGlyZWN0VXJsPzogc3RyaW5nXG4gIG5ld1VzZXJDYWxsYmFja1VSTD86IHN0cmluZ1xuICBhZG1pbkludml0ZVRva2VuPzogc3RyaW5nXG4gIGJhc2VVUkw/OiBzdHJpbmdcbiAgYmFzZVBhdGg/OiBzdHJpbmdcbn1cblxuY29uc3QgYmFzZUNsYXNzID0gJ2FkbWluLXNvY2lhbC1wcm92aWRlci1idXR0b25zJ1xuXG5leHBvcnQgY29uc3QgQWRtaW5Tb2NpYWxQcm92aWRlckJ1dHRvbnM6IFJlYWN0LkZDPEFkbWluU29jaWFsUHJvdmlkZXJCdXR0b25zUHJvcHM+ID0gKHtcbiAgaXNTaWdudXAsXG4gIGxvZ2luTWV0aG9kcyxcbiAgc2V0TG9hZGluZyxcbiAgcmVkaXJlY3RVcmwsXG4gIG5ld1VzZXJDYWxsYmFja1VSTCxcbiAgYWRtaW5JbnZpdGVUb2tlbixcbiAgYmFzZVVSTCxcbiAgYmFzZVBhdGhcbn0pID0+IHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgYXV0aENsaWVudCA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGNyZWF0ZUF1dGhDbGllbnQoe1xuICAgICAgICBiYXNlVVJMLFxuICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgcGx1Z2luczogW3Bhc3NrZXlDbGllbnQoKV1cbiAgICAgIH0pLFxuICAgIFtdXG4gIClcblxuICBjb25zdCBsb2dpbk1ldGhvZENvdW50ID0gbG9naW5NZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBtZXRob2QgIT09ICdlbWFpbFBhc3N3b3JkJywgJ3Bhc3NrZXknKS5sZW5ndGhcbiAgaWYgKGxvZ2luTWV0aG9kQ291bnQgPT09IDApIHJldHVybiBudWxsXG5cbiAgY29uc3Qgc2hvd0ljb25Pbmx5ID0gbG9naW5NZXRob2RDb3VudCA+PSAzXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2xvZ2luTWV0aG9kcy5pbmNsdWRlcygnZW1haWxQYXNzd29yZCcpICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgZm9udFNpemU6ICcwLjg3NXJlbScsXG4gICAgICAgICAgICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyxcbiAgICAgICAgICAgIG1hcmdpblRvcDogJy0uNXJlbScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLXRoZW1lLWVsZXZhdGlvbi00NTApJyxcbiAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogJzEuNXJlbSdcbiAgICAgICAgICB9fT5cbiAgICAgICAgICA8c3Bhbj5PciB7aXNTaWdudXAgPyAnc2lnbiB1cCcgOiAnbG9naW4nfSB3aXRoPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfSAke2Jhc2VDbGFzc30tLWNvdW50LSR7c2hvd0ljb25Pbmx5ID8gJ21hbnknIDogbG9naW5NZXRob2RDb3VudH1gfT5cbiAgICAgICAge2xvZ2luTWV0aG9kcy5tYXAoKGxvZ2luTWV0aG9kKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvdmlkZXJOYW1lID0gbG9naW5NZXRob2QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBsb2dpbk1ldGhvZC5zbGljZSgxKVxuICAgICAgICAgIGNvbnN0IGlzU29jaWFsUHJvdmlkZXIgPSBzb2NpYWxQcm92aWRlcnMuaW5jbHVkZXMobG9naW5NZXRob2QgYXMgU29jaWFsUHJvdmlkZXIpXG5cbiAgICAgICAgICAvLyAtLS0tIFBhc3NrZXkgLS0tLVxuICAgICAgICAgIGlmIChsb2dpbk1ldGhvZCA9PT0gJ3Bhc3NrZXknKSB7XG4gICAgICAgICAgICBpZiAoaXNTaWdudXApIHJldHVybiBudWxsXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVQYXNza2V5Q2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBhdXRoQ2xpZW50LnNpZ25Jbi5wYXNza2V5KHtcbiAgICAgICAgICAgICAgICAgIGZldGNoT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBvblN1Y2Nlc3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlciAmJiByZWRpcmVjdFVybCkgcm91dGVyLnB1c2gocmVkaXJlY3RVcmwpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoY29udGV4dDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoY29udGV4dC5lcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2lnbiBpbiB3aXRoIHBhc3NrZXknKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIHRvYXN0LmVycm9yKGVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2lnbiBpbiB3aXRoIHBhc3NrZXknKVxuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGtleT17bG9naW5NZXRob2R9XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2J1dHRvbiBwcm92aWRlci0tcGFzc2tleWB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGFzc2tleUNsaWNrfVxuICAgICAgICAgICAgICAgIGljb249e3Nob3dJY29uT25seSA/IDxLZXkgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pY29uYH0gLz4gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgdG9vbHRpcD17c2hvd0ljb25Pbmx5ID8gYFNpZ24gaW4gd2l0aCAke3Byb3ZpZGVyTmFtZX1gIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAgICB7IXNob3dJY29uT25seSAmJiA8S2V5IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faWNvbmB9IC8+fVxuICAgICAgICAgICAgICAgIHshc2hvd0ljb25Pbmx5ICYmIDxzcGFuPntwcm92aWRlck5hbWV9PC9zcGFuPn1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gLS0tLSBTb2NpYWwgcHJvdmlkZXJzIC0tLS1cbiAgICAgICAgICBpZiAoaXNTb2NpYWxQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgSWNvbiA9IEljb25zW2xvZ2luTWV0aG9kIGFzIGtleW9mIHR5cGVvZiBJY29uc10gPz8gbnVsbFxuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVTb2NpYWxDbGljayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IGF1dGhDbGllbnQuc2lnbkluLnNvY2lhbCh7XG4gICAgICAgICAgICAgICAgICBwcm92aWRlcjogbG9naW5NZXRob2QgYXMgU29jaWFsUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICBmZXRjaE9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi4oaXNTaWdudXAgJiYgeyBhZG1pbkludml0ZVRva2VuIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrVVJMOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrVVJMOiByZWRpcmVjdFVybCxcbiAgICAgICAgICAgICAgICAgIG5ld1VzZXJDYWxsYmFja1VSTCxcbiAgICAgICAgICAgICAgICAgIC4uLihpc1NpZ251cCAmJiB7IHJlcXVlc3RTaWduVXA6IHRydWUgfSlcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICB0b2FzdC5lcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAgIHRvYXN0LmVycm9yKGBGYWlsZWQgdG8gc2lnbiBpbiB3aXRoICR7cHJvdmlkZXJOYW1lfWApXG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtsb2dpbk1ldGhvZH1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uIHByb3ZpZGVyLS0ke2xvZ2luTWV0aG9kfWB9XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU29jaWFsQ2xpY2t9XG4gICAgICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgaWNvbj17PEljb24gY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19pY29uYH0gLz59XG4gICAgICAgICAgICAgICAgdG9vbHRpcD17c2hvd0ljb25Pbmx5ID8gYFNpZ24gaW4gd2l0aCAke3Byb3ZpZGVyTmFtZX1gIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAgICB7IXNob3dJY29uT25seSAmJiA8c3Bhbj57cHJvdmlkZXJOYW1lfTwvc3Bhbj59XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVua25vd24gcHJvdmlkZXIg4oCUIHJlbmRlciBub3RoaW5nXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm5hbWVzIjpbInNvY2lhbFByb3ZpZGVycyIsIkljb25zIiwiQnV0dG9uIiwidG9hc3QiLCJwYXNza2V5Q2xpZW50IiwiY3JlYXRlQXV0aENsaWVudCIsIktleSIsInVzZVJvdXRlciIsIlJlYWN0IiwidXNlTWVtbyIsImJhc2VDbGFzcyIsIkFkbWluU29jaWFsUHJvdmlkZXJCdXR0b25zIiwiaXNTaWdudXAiLCJsb2dpbk1ldGhvZHMiLCJzZXRMb2FkaW5nIiwicmVkaXJlY3RVcmwiLCJuZXdVc2VyQ2FsbGJhY2tVUkwiLCJhZG1pbkludml0ZVRva2VuIiwiYmFzZVVSTCIsImJhc2VQYXRoIiwicm91dGVyIiwiYXV0aENsaWVudCIsInBsdWdpbnMiLCJsb2dpbk1ldGhvZENvdW50IiwiZmlsdGVyIiwibWV0aG9kIiwibGVuZ3RoIiwic2hvd0ljb25Pbmx5IiwiaW5jbHVkZXMiLCJkaXYiLCJzdHlsZSIsInRleHRBbGlnbiIsImZvbnRTaXplIiwidGV4dFRyYW5zZm9ybSIsIm1hcmdpblRvcCIsImNvbG9yIiwibWFyZ2luQm90dG9tIiwic3BhbiIsImNsYXNzTmFtZSIsIm1hcCIsImxvZ2luTWV0aG9kIiwicHJvdmlkZXJOYW1lIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImlzU29jaWFsUHJvdmlkZXIiLCJoYW5kbGVQYXNza2V5Q2xpY2siLCJzaWduSW4iLCJwYXNza2V5IiwiZmV0Y2hPcHRpb25zIiwib25TdWNjZXNzIiwicHVzaCIsIm9uRXJyb3IiLCJjb250ZXh0IiwiZXJyb3IiLCJtZXNzYWdlIiwidHlwZSIsInNpemUiLCJvbkNsaWNrIiwiaWNvbiIsInVuZGVmaW5lZCIsInRvb2x0aXAiLCJJY29uIiwiaGFuZGxlU29jaWFsQ2xpY2siLCJzb2NpYWwiLCJwcm92aWRlciIsInF1ZXJ5IiwiZXJyb3JDYWxsYmFja1VSTCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImNhbGxiYWNrVVJMIiwicmVxdWVzdFNpZ25VcCIsImljb25Qb3NpdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0EsZUFBZSxRQUFRLHFCQUFnQztBQUVoRSxTQUFTQyxLQUFLLFFBQVEseUNBQTJCO0FBQ2pELFNBQVNDLE1BQU0sRUFBRUMsS0FBSyxRQUFRLGlCQUFnQjtBQUM5QyxTQUFTQyxhQUFhLFFBQVEsNkJBQTRCO0FBQzFELFNBQVNDLGdCQUFnQixRQUFRLG9CQUFtQjtBQUNwRCxTQUFTQyxHQUFHLFFBQVEsZUFBYztBQUNsQyxTQUFTQyxTQUFTLFFBQVEsa0JBQWlCO0FBQzNDLE9BQU9DLFNBQVNDLE9BQU8sUUFBUSxRQUFPO0FBQ3RDLE9BQU8sZUFBYztBQWFyQixNQUFNQyxZQUFZO0FBRWxCLE9BQU8sTUFBTUMsNkJBQXdFLENBQUMsRUFDcEZDLFFBQVEsRUFDUkMsWUFBWSxFQUNaQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLE9BQU8sRUFDUEMsUUFBUSxFQUNUO0lBQ0MsTUFBTUMsU0FBU2I7SUFDZixNQUFNYyxhQUFhWixRQUNqQixJQUNFSixpQkFBaUI7WUFDZmE7WUFDQUM7WUFDQUcsU0FBUztnQkFBQ2xCO2FBQWdCO1FBQzVCLElBQ0YsRUFBRTtJQUdKLE1BQU1tQixtQkFBbUJWLGFBQWFXLE1BQU0sQ0FBQyxDQUFDQyxTQUFXQSxXQUFXLGlCQUFpQixXQUFXQyxNQUFNO0lBQ3RHLElBQUlILHFCQUFxQixHQUFHLE9BQU87SUFF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
|