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.
Files changed (71) hide show
  1. package/dist/better-auth/adapter/index.d.ts +1 -1
  2. package/dist/better-auth/adapter/index.d.ts.map +1 -1
  3. package/dist/better-auth/adapter/index.js +57 -7
  4. package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
  5. package/dist/better-auth/adapter/transform/index.js +47 -7
  6. package/dist/better-auth/generated-types.d.ts +13 -11
  7. package/dist/better-auth/generated-types.d.ts.map +1 -1
  8. package/dist/better-auth/generated-types.js +1 -1
  9. package/dist/better-auth/plugin/index.d.ts.map +1 -1
  10. package/dist/better-auth/plugin/index.js +3 -2
  11. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -1
  12. package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +3 -2
  13. package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +5 -5
  14. package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
  15. package/dist/better-auth/plugin/lib/build-collections/users/index.js +31 -1
  16. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +3 -1
  17. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
  18. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +17 -8
  19. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.d.ts +14 -0
  20. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.d.ts.map +1 -0
  21. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.js +38 -0
  22. package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.d.ts +4 -0
  23. package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.d.ts.map +1 -0
  24. package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.js +197 -0
  25. package/dist/better-auth/plugin/payload/components/login-form/context.d.ts +49 -0
  26. package/dist/better-auth/plugin/payload/components/login-form/context.d.ts.map +1 -0
  27. package/dist/better-auth/plugin/payload/components/login-form/context.js +94 -0
  28. package/dist/better-auth/plugin/payload/components/login-form/credentials-form.d.ts +4 -0
  29. package/dist/better-auth/plugin/payload/components/login-form/credentials-form.d.ts.map +1 -0
  30. package/dist/better-auth/plugin/payload/components/login-form/credentials-form.js +167 -0
  31. package/dist/better-auth/plugin/payload/components/login-form/index.d.ts +4 -0
  32. package/dist/better-auth/plugin/payload/components/login-form/index.d.ts.map +1 -0
  33. package/dist/better-auth/plugin/payload/components/login-form/index.js +6 -0
  34. package/dist/better-auth/plugin/payload/components/{social-provider-buttons → login-form}/index.scss +17 -12
  35. package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +2 -2
  36. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +1 -0
  37. package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -1
  38. package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -2
  39. package/dist/better-auth/plugin/payload/exports/client.d.ts +3 -2
  40. package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
  41. package/dist/better-auth/plugin/payload/exports/client.js +4 -3
  42. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +11 -7
  43. package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts.map +1 -1
  44. package/dist/better-auth/plugin/payload/views/admin-login/client.js +17 -193
  45. package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts.map +1 -1
  46. package/dist/better-auth/plugin/payload/views/admin-login/index.js +25 -8
  47. package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +6 -0
  48. package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts.map +1 -1
  49. package/dist/better-auth/plugin/payload/views/admin-signup/client.js +12 -10
  50. package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts.map +1 -1
  51. package/dist/better-auth/plugin/payload/views/admin-signup/index.js +22 -3
  52. package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -1
  53. package/dist/better-auth/plugin/payload/views/forgot-password/client.js +17 -5
  54. package/dist/better-auth/plugin/payload/views/reset-password/index.js +2 -2
  55. package/dist/better-auth/plugin/types.d.ts +4 -1
  56. package/dist/better-auth/plugin/types.d.ts.map +1 -1
  57. package/dist/better-auth/plugin/types.js +1 -1
  58. package/dist/better-auth/scripts/generate-types.js +2 -2
  59. package/dist/shared/form/fields/text-field.d.ts +2 -1
  60. package/dist/shared/form/fields/text-field.d.ts.map +1 -1
  61. package/dist/shared/form/fields/text-field.js +6 -3
  62. package/dist/shared/form/validation.d.ts +9 -69
  63. package/dist/shared/form/validation.d.ts.map +1 -1
  64. package/dist/shared/form/validation.js +11 -24
  65. package/package.json +40 -13
  66. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +0 -16
  67. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +0 -1
  68. package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +0 -41
  69. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +0 -16
  70. package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts.map +0 -1
  71. 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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