@appconda/nextjs 1.0.384 → 1.0.386
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/actions/_authOptions.d.ts +5 -0
- package/dist/actions/_authOptions.js +235 -0
- package/dist/actions/authOptions.d.ts +1 -1
- package/dist/actions/authOptions.js +27 -133
- package/dist/getAppcondaClient.d.ts +1 -0
- package/dist/getAppcondaClient.js +28 -1
- package/dist/modules/accounv1/action.d.ts +3 -1
- package/dist/modules/accounv1/action.js +29 -1
- package/dist/modules/accounv1/schema.d.ts +20 -7
- package/dist/modules/accounv1/schema.js +21 -8
- package/dist/modules/accounv1/service.d.ts +4 -1
- package/dist/modules/accounv1/service.js +10 -1
- package/dist/modules/accounv1/types.d.ts +1 -0
- package/dist/modules/accounv1/types.js +1 -1
- package/package.json +1 -1
- package/src/actions/_authOptions.ts +255 -0
- package/src/actions/authOptions.ts +41 -144
- package/src/getAppcondaClient.ts +29 -0
- package/src/modules/accounv1/action.ts +31 -3
- package/src/modules/accounv1/schema.ts +24 -8
- package/src/modules/accounv1/service.ts +13 -1
- package/src/modules/accounv1/types.ts +1 -0
@@ -0,0 +1,235 @@
|
|
1
|
+
import CredentialsProvider from "next-auth/providers/credentials";
|
2
|
+
import { cookies } from "next/headers";
|
3
|
+
import { getAppcondaClient } from "../getAppcondaClient";
|
4
|
+
import { Account } from "../modules/account/service";
|
5
|
+
import { getEnv } from "../lib/env";
|
6
|
+
import { getSDKForCurrentUser } from "../getSDKForCurrentUser";
|
7
|
+
import { Query } from "../query";
|
8
|
+
/* const getEnv = () => {
|
9
|
+
return {
|
10
|
+
APPCONDA_ENDPOINT: 'process.env.APPCONDA_ENDPOINT',
|
11
|
+
APPCONDA_CLIENT_ENDPOINT: 'process.env.APPCONDA_CLIENT_ENDPOINT',
|
12
|
+
_SERVICE_TOKEN: 'process.env._SERVICE_TOKEN',
|
13
|
+
ENTERPRISE_LICENSE_KEY: 'process.env.ENTERPRISE_LICENSE_KEY',
|
14
|
+
};
|
15
|
+
}; */
|
16
|
+
export async function signIn({ userName, password }) {
|
17
|
+
const adminClient = await getAppcondaClient();
|
18
|
+
const account = new Account(adminClient);
|
19
|
+
const session = await account.createEmailPasswordSession(userName, password);
|
20
|
+
const c = await cookies();
|
21
|
+
c.set('a_session', session.secret, {
|
22
|
+
path: "/",
|
23
|
+
httpOnly: true,
|
24
|
+
sameSite: "strict",
|
25
|
+
secure: true,
|
26
|
+
});
|
27
|
+
return session;
|
28
|
+
}
|
29
|
+
export const authOptions = (() => {
|
30
|
+
let options = null;
|
31
|
+
return () => {
|
32
|
+
if (options == null) {
|
33
|
+
options = {
|
34
|
+
providers: [
|
35
|
+
CredentialsProvider({
|
36
|
+
id: "credentials",
|
37
|
+
// The name to display on the sign in form (e.g. "Sign in with...")
|
38
|
+
name: "Credentials",
|
39
|
+
// The credentials is used to generate a suitable form on the sign in page.
|
40
|
+
// You can specify whatever fields you are expecting to be submitted.
|
41
|
+
// e.g. domain, username, password, 2FA token, etc.
|
42
|
+
// You can pass any HTML attribute to the <input> tag through the object.
|
43
|
+
credentials: {
|
44
|
+
email: {
|
45
|
+
label: "Email Address",
|
46
|
+
type: "email",
|
47
|
+
placeholder: "Your email address",
|
48
|
+
},
|
49
|
+
password: {
|
50
|
+
label: "Password",
|
51
|
+
type: "password",
|
52
|
+
placeholder: "Your password",
|
53
|
+
},
|
54
|
+
totpCode: { label: "Two-factor Code", type: "input", placeholder: "Code from authenticator app" },
|
55
|
+
backupCode: { label: "Backup Code", type: "input", placeholder: "Two-factor backup code" },
|
56
|
+
},
|
57
|
+
async authorize(credentials, _req) {
|
58
|
+
debugger;
|
59
|
+
let user;
|
60
|
+
const appcondaSession = await signIn({ userName: credentials?.email, password: credentials?.password });
|
61
|
+
console.log(credentials);
|
62
|
+
/* try {
|
63
|
+
user = await prisma.user.findUnique({
|
64
|
+
where: {
|
65
|
+
email: credentials?.email,
|
66
|
+
},
|
67
|
+
});
|
68
|
+
} catch (e) {
|
69
|
+
console.error(e);
|
70
|
+
throw Error("Internal server error. Please try again later");
|
71
|
+
}
|
72
|
+
if (!user || !credentials) {
|
73
|
+
throw new Error("Invalid credentials");
|
74
|
+
}
|
75
|
+
if (!user.password) {
|
76
|
+
throw new Error("Invalid credentials");
|
77
|
+
}
|
78
|
+
|
79
|
+
const isValid = await verifyPassword(credentials.password, user.password);
|
80
|
+
|
81
|
+
if (!isValid) {
|
82
|
+
throw new Error("Invalid credentials");
|
83
|
+
}
|
84
|
+
|
85
|
+
if (user.twoFactorEnabled && credentials.backupCode) {
|
86
|
+
if (!ENCRYPTION_KEY) {
|
87
|
+
console.error("Missing encryption key; cannot proceed with backup code login.");
|
88
|
+
throw new Error("Internal Server Error");
|
89
|
+
}
|
90
|
+
|
91
|
+
if (!user.backupCodes) throw new Error("No backup codes found");
|
92
|
+
|
93
|
+
const backupCodes = JSON.parse(symmetricDecrypt(user.backupCodes, ENCRYPTION_KEY));
|
94
|
+
|
95
|
+
// check if user-supplied code matches one
|
96
|
+
const index = backupCodes.indexOf(credentials.backupCode.replaceAll("-", ""));
|
97
|
+
if (index === -1) throw new Error("Invalid backup code");
|
98
|
+
|
99
|
+
// delete verified backup code and re-encrypt remaining
|
100
|
+
backupCodes[index] = null;
|
101
|
+
await prisma.user.update({
|
102
|
+
where: {
|
103
|
+
id: user.id,
|
104
|
+
},
|
105
|
+
data: {
|
106
|
+
backupCodes: symmetricEncrypt(JSON.stringify(backupCodes), ENCRYPTION_KEY),
|
107
|
+
},
|
108
|
+
});
|
109
|
+
} else if (user.twoFactorEnabled) {
|
110
|
+
if (!credentials.totpCode) {
|
111
|
+
throw new Error("second factor required");
|
112
|
+
}
|
113
|
+
|
114
|
+
if (!user.twoFactorSecret) {
|
115
|
+
throw new Error("Internal Server Error");
|
116
|
+
}
|
117
|
+
|
118
|
+
if (!ENCRYPTION_KEY) {
|
119
|
+
throw new Error("Internal Server Error");
|
120
|
+
}
|
121
|
+
|
122
|
+
const secret = symmetricDecrypt(user.twoFactorSecret, ENCRYPTION_KEY);
|
123
|
+
if (secret.length !== 32) {
|
124
|
+
throw new Error("Internal Server Error");
|
125
|
+
}
|
126
|
+
|
127
|
+
const isValidToken = (await import("./totp")).totpAuthenticatorCheck(credentials.totpCode, secret);
|
128
|
+
if (!isValidToken) {
|
129
|
+
throw new Error("Invalid second factor code");
|
130
|
+
}
|
131
|
+
} */
|
132
|
+
console.log("asafdf");
|
133
|
+
return {
|
134
|
+
id: appcondaSession.userId,
|
135
|
+
email: appcondaSession.providerUid,
|
136
|
+
emailVerified: true,
|
137
|
+
imageUrl: "",
|
138
|
+
};
|
139
|
+
},
|
140
|
+
}),
|
141
|
+
CredentialsProvider({
|
142
|
+
id: "token",
|
143
|
+
// The name to display on the sign in form (e.g. "Sign in with...")
|
144
|
+
name: "Token",
|
145
|
+
// The credentials is used to generate a suitable form on the sign in page.
|
146
|
+
// You can specify whatever fields you are expecting to be submitted.
|
147
|
+
// e.g. domain, username, password, 2FA token, etc.
|
148
|
+
// You can pass any HTML attribute to the <input> tag through the object.
|
149
|
+
credentials: {
|
150
|
+
token: {
|
151
|
+
label: "Verification Token",
|
152
|
+
type: "string",
|
153
|
+
},
|
154
|
+
},
|
155
|
+
async authorize(credentials, _req) {
|
156
|
+
let user;
|
157
|
+
/* try {
|
158
|
+
if (!credentials?.token) {
|
159
|
+
throw new Error("Token not found");
|
160
|
+
}
|
161
|
+
const { id } = await verifyToken(credentials?.token);
|
162
|
+
user = await prisma.user.findUnique({
|
163
|
+
where: {
|
164
|
+
id: id,
|
165
|
+
},
|
166
|
+
});
|
167
|
+
} catch (e) {
|
168
|
+
console.error(e);
|
169
|
+
throw new Error("Either a user does not match the provided token or the token is invalid");
|
170
|
+
}
|
171
|
+
|
172
|
+
if (!user) {
|
173
|
+
throw new Error("Either a user does not match the provided token or the token is invalid");
|
174
|
+
}
|
175
|
+
|
176
|
+
if (user.emailVerified) {
|
177
|
+
throw new Error("Email already verified");
|
178
|
+
}
|
179
|
+
|
180
|
+
user = await updateUser(user.id, { emailVerified: new Date() }); */
|
181
|
+
return user || null;
|
182
|
+
},
|
183
|
+
}),
|
184
|
+
// Conditionally add enterprise SSO providers
|
185
|
+
...(getEnv().ENTERPRISE_LICENSE_KEY ? [] : []),
|
186
|
+
],
|
187
|
+
callbacks: {
|
188
|
+
async jwt({ token }) {
|
189
|
+
const { users } = await getSDKForCurrentUser();
|
190
|
+
const userList = await users.list([Query.equal("email", token.email)]);
|
191
|
+
const user = userList.users[0] ?? {};
|
192
|
+
/* const existingUser = await getUserByEmail(token?.email!);
|
193
|
+
|
194
|
+
if (!existingUser) {
|
195
|
+
return token;
|
196
|
+
} */
|
197
|
+
return {
|
198
|
+
...token,
|
199
|
+
//@ts-ignore
|
200
|
+
profile: { id: user.$id, ...user },
|
201
|
+
};
|
202
|
+
},
|
203
|
+
async session({ session, token }) {
|
204
|
+
//@ts-ignore
|
205
|
+
session.user.id = token?.id;
|
206
|
+
//@ts-ignore
|
207
|
+
session.user = token.profile;
|
208
|
+
return session;
|
209
|
+
},
|
210
|
+
//@ts-ignore
|
211
|
+
async signIn({ user, account }) {
|
212
|
+
/* if (account?.provider === "credentials" || account?.provider === "token") {
|
213
|
+
// check if user's email is verified or not
|
214
|
+
if (!user.emailVerified && !EMAIL_VERIFICATION_DISABLED) {
|
215
|
+
throw new Error("Email Verification is Pending");
|
216
|
+
}
|
217
|
+
return true;
|
218
|
+
}
|
219
|
+
if (ENTERPRISE_LICENSE_KEY) {
|
220
|
+
return handleSSOCallback({ user, account });
|
221
|
+
} */
|
222
|
+
return true;
|
223
|
+
},
|
224
|
+
},
|
225
|
+
pages: {
|
226
|
+
signIn: "/auth/login",
|
227
|
+
signOut: "/auth/logout",
|
228
|
+
error: "/auth/login", // Error code passed in query string as ?error=
|
229
|
+
},
|
230
|
+
};
|
231
|
+
}
|
232
|
+
return options;
|
233
|
+
};
|
234
|
+
})();
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2F1dGhPcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvX2F1dGhPcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpDOzs7Ozs7O0tBT0s7QUFFTCxNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQTBDO0lBQ3pGLE1BQU0sV0FBVyxHQUFHLE1BQU0saUJBQWlCLEVBQUUsQ0FBQztJQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUV6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFN0UsTUFBTSxDQUFDLEdBQUcsTUFBTSxPQUFPLEVBQUUsQ0FBQztJQUUxQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ2pDLElBQUksRUFBRSxHQUFHO1FBQ1QsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsUUFBUTtRQUNsQixNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxDQUFDO0FBRWpCLENBQUM7QUFFRCxNQUFNLENBQUMs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S0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTt3QkFFdkUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBRXJDOzs7OzZCQUlLO3dCQUVMLE9BQU87NEJBQ0wsR0FBRyxLQUFLOzRCQUNSLFlBQVk7NEJBQ1osT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUU7eUJBQ25DLENBQUM7b0JBQ0osQ0FBQztvQkFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTt3QkFDOUIsWUFBWTt3QkFDWixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO3dCQUM1QixZQUFZO3dCQUNaLE9BQU8sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQzt3QkFFN0IsT0FBTyxPQUFPLENBQUM7b0JBQ2pCLENBQUM7b0JBQ0QsWUFBWTtvQkFDWixLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBMEM7d0JBQ3BFOzs7Ozs7Ozs7OEJBU007d0JBQ04sT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztpQkFDRjtnQkFDRCxLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLE9BQU8sRUFBRSxjQUFjO29CQUN2QixLQUFLLEVBQUUsYUFBYSxFQUFFLCtDQUErQztpQkFDdEU7YUFDRixDQUFBO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5leHRBdXRoT3B0aW9ucyB9IGZyb20gXCJuZXh0LWF1dGhcIjtcbmltcG9ydCBDcmVkZW50aWFsc1Byb3ZpZGVyIGZyb20gXCJuZXh0LWF1dGgvcHJvdmlkZXJzL2NyZWRlbnRpYWxzXCI7XG5pbXBvcnQgeyBjb29raWVzIH0gZnJvbSBcIm5leHQvaGVhZGVyc1wiO1xuaW1wb3J0IHsgZ2V0QXBwY29uZGFDbGllbnQgfSBmcm9tIFwiLi4vZ2V0QXBwY29uZGFDbGllbnRcIjtcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tIFwiLi4vbW9kdWxlcy9hY2NvdW50L3NlcnZpY2VcIjtcbmltcG9ydCB7IGdldEVudiB9IGZyb20gXCIuLi9saWIvZW52XCI7XG5pbXBvcnQgeyBnZXRTREtGb3JDdXJyZW50VXNlciB9IGZyb20gXCIuLi9nZXRTREtGb3JDdXJyZW50VXNlclwiO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLyogY29uc3QgZ2V0RW52ID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIEFQUENPTkRBX0VORFBPSU5UOiAncHJvY2Vzcy5lbnYuQVBQQ09OREFfRU5EUE9JTlQnLFxuICAgIEFQUENPTkRBX0NMSUVOVF9FTkRQT0lOVDogJ3Byb2Nlc3MuZW52LkFQUENPTkRBX0NMSUVOVF9FTkRQT0lOVCcsXG4gICAgX1NFUlZJQ0VfVE9LRU46ICdwcm9jZXNzLmVudi5fU0VSVklDRV9UT0tFTicsXG4gICAgRU5URVJQUklTRV9MSUNFTlNFX0tFWTogJ3Byb2Nlc3MuZW52LkVOVEVSUFJJU0VfTElDRU5TRV9LRVknLFxuICB9O1xufTsgKi9cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpZ25Jbih7IHVzZXJOYW1lLCBwYXNzd29yZCB9OiB7IHVzZXJOYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcgfSkge1xuICBjb25zdCBhZG1pbkNsaWVudCA9IGF3YWl0IGdldEFwcGNvbmRhQ2xpZW50KCk7XG5cbiAgY29uc3QgYWNjb3VudCA9IG5ldyBBY2NvdW50KGFkbWluQ2xpZW50KTtcblxuICBjb25zdCBzZXNzaW9uID0gYXdhaXQgYWNjb3VudC5jcmVhdGVFbWFpbFBhc3N3b3JkU2Vzc2lvbih1c2VyTmFtZSwgcGFzc3dvcmQpO1xuXG4gIGNvbnN0IGMgPSBhd2FpdCBjb29raWVzKCk7XG5cbiAgYy5zZXQoJ2Ffc2Vzc2lvbicsIHNlc3Npb24uc2VjcmV0LCB7XG4gICAgcGF0aDogXCIvXCIsXG4gICAgaHR0cE9ubHk6IHRydWUsXG4gICAgc2FtZVNpdGU6IFwic3RyaWN0XCIsXG4gICAgc2VjdXJlOiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4gc2Vzc2lvbjtcblxufVxuXG5leHBvcnQgY29uc3QgYXV0aE9wdGlvbnMgPSAoKCkgPT4ge1xuICBsZXQgb3B0aW9ucyA6IGFueT0gbnVsbDtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIENyZWRlbnRpYWxzUHJvdmlkZXIoe1xuICAgICAgICAgICAgaWQ6IFwiY3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgIC8vIFRoZSBuYW1lIHRvIGRpc3BsYXkgb24gdGhlIHNpZ24gaW4gZm9ybSAoZS5nLiBcIlNpZ24gaW4gd2l0aC4uLlwiKVxuICAgICAgICAgICAgbmFtZTogXCJDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgLy8gVGhlIGNyZWRlbnRpYWxzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzdWl0YWJsZSBmb3JtIG9uIHRoZSBzaWduIGluIHBhZ2UuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHNwZWNpZnkgd2hhdGV2ZXIgZmllbGRzIHlvdSBhcmUgZXhwZWN0aW5nIHRvIGJlIHN1Ym1pdHRlZC5cbiAgICAgICAgICAgIC8vIGUuZy4gZG9tYWluLCB1c2VybmFtZSwgcGFzc3dvcmQsIDJGQSB0b2tlbiwgZXRjLlxuICAgICAgICAgICAgLy8gWW91IGNhbiBwYXNzIGFueSBIVE1MIGF0dHJpYnV0ZSB0byB0aGUgPGlucHV0PiB0YWcgdGhyb3VnaCB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJFbWFpbCBBZGRyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIllvdXIgZW1haWwgYWRkcmVzc1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIllvdXIgcGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdG90cENvZGU6IHsgbGFiZWw6IFwiVHdvLWZhY3RvciBDb2RlXCIsIHR5cGU6IFwiaW5wdXRcIiwgcGxhY2Vob2xkZXI6IFwiQ29kZSBmcm9tIGF1dGhlbnRpY2F0b3IgYXBwXCIgfSxcbiAgICAgICAgICAgICAgYmFja3VwQ29kZTogeyBsYWJlbDogXCJCYWNrdXAgQ29kZVwiLCB0eXBlOiBcImlucHV0XCIsIHBsYWNlaG9sZGVyOiBcIlR3by1mYWN0b3IgYmFja3VwIGNvZGVcIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGF1dGhvcml6ZShjcmVkZW50aWFscywgX3JlcSkge1xuICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgICAgbGV0IHVzZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGNvbmRhU2Vzc2lvbiA9IGF3YWl0IHNpZ25Jbih7IHVzZXJOYW1lOiBjcmVkZW50aWFscz8uZW1haWwgYXMgc3RyaW5nLCBwYXNzd29yZDogY3JlZGVudGlhbHM/LnBhc3N3b3JkIGFzIHN0cmluZyB9KTtcblxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjcmVkZW50aWFscyk7XG4gICAgICAgICAgICAgIC8qICB0cnkge1xuICAgICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgcHJpc21hLnVzZXIuZmluZFVuaXF1ZSh7XG4gICAgICAgICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiBjcmVkZW50aWFscz8uZW1haWwsXG4gICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiSW50ZXJuYWwgc2VydmVyIGVycm9yLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgaWYgKCF1c2VyIHx8ICFjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNyZWRlbnRpYWxzXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgaWYgKCF1c2VyLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY3JlZGVudGlhbHNcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgdmVyaWZ5UGFzc3dvcmQoY3JlZGVudGlhbHMucGFzc3dvcmQsIHVzZXIucGFzc3dvcmQpO1xuICAgICAgIFxuICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY3JlZGVudGlhbHNcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBpZiAodXNlci50d29GYWN0b3JFbmFibGVkICYmIGNyZWRlbnRpYWxzLmJhY2t1cENvZGUpIHtcbiAgICAgICAgICAgICAgICAgaWYgKCFFTkNSWVBUSU9OX0tFWSkge1xuICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIGVuY3J5cHRpb24ga2V5OyBjYW5ub3QgcHJvY2VlZCB3aXRoIGJhY2t1cCBjb2RlIGxvZ2luLlwiKTtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgICAgICAgICAgaWYgKCF1c2VyLmJhY2t1cENvZGVzKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBiYWNrdXAgY29kZXMgZm91bmRcIik7XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIGNvbnN0IGJhY2t1cENvZGVzID0gSlNPTi5wYXJzZShzeW1tZXRyaWNEZWNyeXB0KHVzZXIuYmFja3VwQ29kZXMsIEVOQ1JZUFRJT05fS0VZKSk7XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHVzZXItc3VwcGxpZWQgY29kZSBtYXRjaGVzIG9uZVxuICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGJhY2t1cENvZGVzLmluZGV4T2YoY3JlZGVudGlhbHMuYmFja3VwQ29kZS5yZXBsYWNlQWxsKFwiLVwiLCBcIlwiKSk7XG4gICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFja3VwIGNvZGVcIik7XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB2ZXJpZmllZCBiYWNrdXAgY29kZSBhbmQgcmUtZW5jcnlwdCByZW1haW5pbmdcbiAgICAgICAgICAgICAgICAgYmFja3VwQ29kZXNbaW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgYXdhaXQgcHJpc21hLnVzZXIudXBkYXRlKHtcbiAgICAgICAgICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICBiYWNrdXBDb2Rlczogc3ltbWV0cmljRW5jcnlwdChKU09OLnN0cmluZ2lmeShiYWNrdXBDb2RlcyksIEVOQ1JZUFRJT05fS0VZKSxcbiAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlci50d29GYWN0b3JFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgIGlmICghY3JlZGVudGlhbHMudG90cENvZGUpIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgZmFjdG9yIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIGlmICghdXNlci50d29GYWN0b3JTZWNyZXQpIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgICAgICAgICAgaWYgKCFFTkNSWVBUSU9OX0tFWSkge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgICBjb25zdCBzZWNyZXQgPSBzeW1tZXRyaWNEZWNyeXB0KHVzZXIudHdvRmFjdG9yU2VjcmV0LCBFTkNSWVBUSU9OX0tFWSk7XG4gICAgICAgICAgICAgICAgIGlmIChzZWNyZXQubGVuZ3RoICE9PSAzMikge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgICBjb25zdCBpc1ZhbGlkVG9rZW4gPSAoYXdhaXQgaW1wb3J0KFwiLi90b3RwXCIpKS50b3RwQXV0aGVudGljYXRvckNoZWNrKGNyZWRlbnRpYWxzLnRvdHBDb2RlLCBzZWNyZXQpO1xuICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRUb2tlbikge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc2Vjb25kIGZhY3RvciBjb2RlXCIpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICB9ICovXG5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJhc2FmZGZcIilcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBhcHBjb25kYVNlc3Npb24udXNlcklkLFxuICAgICAgICAgICAgICAgIGVtYWlsOiBhcHBjb25kYVNlc3Npb24ucHJvdmlkZXJVaWQsXG4gICAgICAgICAgICAgICAgZW1haWxWZXJpZmllZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbWFnZVVybDogXCJcIixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ3JlZGVudGlhbHNQcm92aWRlcih7XG4gICAgICAgICAgICBpZDogXCJ0b2tlblwiLFxuICAgICAgICAgICAgLy8gVGhlIG5hbWUgdG8gZGlzcGxheSBvbiB0aGUgc2lnbiBpbiBmb3JtIChlLmcuIFwiU2lnbiBpbiB3aXRoLi4uXCIpXG4gICAgICAgICAgICBuYW1lOiBcIlRva2VuXCIsXG4gICAgICAgICAgICAvLyBUaGUgY3JlZGVudGlhbHMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHN1aXRhYmxlIGZvcm0gb24gdGhlIHNpZ24gaW4gcGFnZS5cbiAgICAgICAgICAgIC8vIFlvdSBjYW4gc3BlY2lmeSB3aGF0ZXZlciBmaWVsZHMgeW91IGFyZSBleHBlY3RpbmcgdG8gYmUgc3VibWl0dGVkLlxuICAgICAgICAgICAgLy8gZS5nLiBkb21haW4sIHVzZXJuYW1lLCBwYXNzd29yZCwgMkZBIHRva2VuLCBldGMuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHBhc3MgYW55IEhUTUwgYXR0cmlidXRlIHRvIHRoZSA8aW5wdXQ+IHRhZyB0aHJvdWdoIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlZlcmlmaWNhdGlvbiBUb2tlblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgYXV0aG9yaXplKGNyZWRlbnRpYWxzLCBfcmVxKSB7XG5cbiAgICAgICAgICAgICAgbGV0IHVzZXI7XG4gICAgICAgICAgICAgIC8qICB0cnkge1xuICAgICAgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWxzPy50b2tlbikge1xuICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRva2VuIG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBhd2FpdCB2ZXJpZnlUb2tlbihjcmVkZW50aWFscz8udG9rZW4pO1xuICAgICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgcHJpc21hLnVzZXIuZmluZFVuaXF1ZSh7XG4gICAgICAgICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWl0aGVyIGEgdXNlciBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgdG9rZW4gb3IgdGhlIHRva2VuIGlzIGludmFsaWRcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRWl0aGVyIGEgdXNlciBkb2VzIG5vdCBtYXRjaCB0aGUgcHJvdmlkZWQgdG9rZW4gb3IgdGhlIHRva2VuIGlzIGludmFsaWRcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICBpZiAodXNlci5lbWFpbFZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtYWlsIGFscmVhZHkgdmVyaWZpZWRcIik7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgdXBkYXRlVXNlcih1c2VyLmlkLCB7IGVtYWlsVmVyaWZpZWQ6IG5ldyBEYXRlKCkgfSk7ICovXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVzZXIgfHwgbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gQ29uZGl0aW9uYWxseSBhZGQgZW50ZXJwcmlzZSBTU08gcHJvdmlkZXJzXG4gICAgICAgICAgLi4uKGdldEVudigpLkVOVEVSUFJJU0VfTElDRU5TRV9LRVkgPyBbXSA6IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgYXN5bmMgand0KHsgdG9rZW4gfSkge1xuXG4gICAgICAgICAgICBjb25zdCB7IHVzZXJzIH0gPSBhd2FpdCBnZXRTREtGb3JDdXJyZW50VXNlcigpO1xuICAgICAgICAgICAgY29uc3QgdXNlckxpc3QgPSBhd2FpdCB1c2Vycy5saXN0KFtRdWVyeS5lcXVhbChcImVtYWlsXCIsIHRva2VuLmVtYWlsISldKVxuXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gdXNlckxpc3QudXNlcnNbMF0gPz8ge307XG5cbiAgICAgICAgICAgIC8qICBjb25zdCBleGlzdGluZ1VzZXIgPSBhd2FpdCBnZXRVc2VyQnlFbWFpbCh0b2tlbj8uZW1haWwhKTtcbiAgICAgICBcbiAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nVXNlcikge1xuICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgIH0gKi9cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udG9rZW4sXG4gICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICBwcm9maWxlOiB7IGlkOiB1c2VyLiRpZCwgLi4udXNlciB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jIHNlc3Npb24oeyBzZXNzaW9uLCB0b2tlbiB9KSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHNlc3Npb24udXNlci5pZCA9IHRva2VuPy5pZDtcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgc2Vzc2lvbi51c2VyID0gdG9rZW4ucHJvZmlsZTtcblxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgfSxcbiAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICBhc3luYyBzaWduSW4oeyB1c2VyLCBhY2NvdW50IH06IHsgdXNlcjogYW55OyBhY2NvdW50OiBBY2NvdW50IHwgbnVsbCB9KSB7XG4gICAgICAgICAgICAvKiAgIGlmIChhY2NvdW50Py5wcm92aWRlciA9PT0gXCJjcmVkZW50aWFsc1wiIHx8IGFjY291bnQ/LnByb3ZpZGVyID09PSBcInRva2VuXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB1c2VyJ3MgZW1haWwgaXMgdmVyaWZpZWQgb3Igbm90XG4gICAgICAgICAgICAgICAgaWYgKCF1c2VyLmVtYWlsVmVyaWZpZWQgJiYgIUVNQUlMX1ZFUklGSUNBVElPTl9ESVNBQkxFRCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1haWwgVmVyaWZpY2F0aW9uIGlzIFBlbmRpbmdcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChFTlRFUlBSSVNFX0xJQ0VOU0VfS0VZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVNTT0NhbGxiYWNrKHsgdXNlciwgYWNjb3VudCB9KTtcbiAgICAgICAgICAgICAgfSAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFnZXM6IHtcbiAgICAgICAgICBzaWduSW46IFwiL2F1dGgvbG9naW5cIixcbiAgICAgICAgICBzaWduT3V0OiBcIi9hdXRoL2xvZ291dFwiLFxuICAgICAgICAgIGVycm9yOiBcIi9hdXRoL2xvZ2luXCIsIC8vIEVycm9yIGNvZGUgcGFzc2VkIGluIHF1ZXJ5IHN0cmluZyBhcyA/ZXJyb3I9XG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG59KSgpO1xuIl19
|
@@ -1,10 +1,7 @@
|
|
1
1
|
import CredentialsProvider from "next-auth/providers/credentials";
|
2
2
|
import { cookies } from "next/headers";
|
3
|
-
import { getAppcondaClient } from "../getAppcondaClient";
|
4
|
-
import {
|
5
|
-
import { getEnv } from "../lib/env";
|
6
|
-
import { getSDKForCurrentUser } from "../getSDKForCurrentUser";
|
7
|
-
import { Query } from "../query";
|
3
|
+
import { getAppcondaClient, getAppcondaClientSync } from "../getAppcondaClient";
|
4
|
+
import { AccountService } from "../modules";
|
8
5
|
/* const getEnv = () => {
|
9
6
|
return {
|
10
7
|
APPCONDA_ENDPOINT: 'process.env.APPCONDA_ENDPOINT',
|
@@ -13,6 +10,9 @@ import { Query } from "../query";
|
|
13
10
|
ENTERPRISE_LICENSE_KEY: 'process.env.ENTERPRISE_LICENSE_KEY',
|
14
11
|
};
|
15
12
|
}; */
|
13
|
+
const ENCRYPTION_KEY = '51570cb4caa6c1f5f80e6e57a32efb397e9220434532697c94c8f821a7dd1951';
|
14
|
+
const ENTERPRISE_LICENSE_KEY = '';
|
15
|
+
const EMAIL_VERIFICATION_DISABLED = false;
|
16
16
|
export async function signIn({ userName, password }) {
|
17
17
|
const adminClient = await getAppcondaClient();
|
18
18
|
const account = new Account(adminClient);
|
@@ -28,6 +28,8 @@ export async function signIn({ userName, password }) {
|
|
28
28
|
}
|
29
29
|
export const authOptions = (() => {
|
30
30
|
let options = null;
|
31
|
+
const adminClient = getAppcondaClientSync();
|
32
|
+
const accountService = new AccountService(adminClient);
|
31
33
|
return () => {
|
32
34
|
if (options == null) {
|
33
35
|
options = {
|
@@ -55,87 +57,8 @@ export const authOptions = (() => {
|
|
55
57
|
backupCode: { label: "Backup Code", type: "input", placeholder: "Two-factor backup code" },
|
56
58
|
},
|
57
59
|
async authorize(credentials, _req) {
|
58
|
-
|
59
|
-
|
60
|
-
const appcondaSession = await signIn({ userName: credentials?.email, password: credentials?.password });
|
61
|
-
console.log(credentials);
|
62
|
-
/* try {
|
63
|
-
user = await prisma.user.findUnique({
|
64
|
-
where: {
|
65
|
-
email: credentials?.email,
|
66
|
-
},
|
67
|
-
});
|
68
|
-
} catch (e) {
|
69
|
-
console.error(e);
|
70
|
-
throw Error("Internal server error. Please try again later");
|
71
|
-
}
|
72
|
-
if (!user || !credentials) {
|
73
|
-
throw new Error("Invalid credentials");
|
74
|
-
}
|
75
|
-
if (!user.password) {
|
76
|
-
throw new Error("Invalid credentials");
|
77
|
-
}
|
78
|
-
|
79
|
-
const isValid = await verifyPassword(credentials.password, user.password);
|
80
|
-
|
81
|
-
if (!isValid) {
|
82
|
-
throw new Error("Invalid credentials");
|
83
|
-
}
|
84
|
-
|
85
|
-
if (user.twoFactorEnabled && credentials.backupCode) {
|
86
|
-
if (!ENCRYPTION_KEY) {
|
87
|
-
console.error("Missing encryption key; cannot proceed with backup code login.");
|
88
|
-
throw new Error("Internal Server Error");
|
89
|
-
}
|
90
|
-
|
91
|
-
if (!user.backupCodes) throw new Error("No backup codes found");
|
92
|
-
|
93
|
-
const backupCodes = JSON.parse(symmetricDecrypt(user.backupCodes, ENCRYPTION_KEY));
|
94
|
-
|
95
|
-
// check if user-supplied code matches one
|
96
|
-
const index = backupCodes.indexOf(credentials.backupCode.replaceAll("-", ""));
|
97
|
-
if (index === -1) throw new Error("Invalid backup code");
|
98
|
-
|
99
|
-
// delete verified backup code and re-encrypt remaining
|
100
|
-
backupCodes[index] = null;
|
101
|
-
await prisma.user.update({
|
102
|
-
where: {
|
103
|
-
id: user.id,
|
104
|
-
},
|
105
|
-
data: {
|
106
|
-
backupCodes: symmetricEncrypt(JSON.stringify(backupCodes), ENCRYPTION_KEY),
|
107
|
-
},
|
108
|
-
});
|
109
|
-
} else if (user.twoFactorEnabled) {
|
110
|
-
if (!credentials.totpCode) {
|
111
|
-
throw new Error("second factor required");
|
112
|
-
}
|
113
|
-
|
114
|
-
if (!user.twoFactorSecret) {
|
115
|
-
throw new Error("Internal Server Error");
|
116
|
-
}
|
117
|
-
|
118
|
-
if (!ENCRYPTION_KEY) {
|
119
|
-
throw new Error("Internal Server Error");
|
120
|
-
}
|
121
|
-
|
122
|
-
const secret = symmetricDecrypt(user.twoFactorSecret, ENCRYPTION_KEY);
|
123
|
-
if (secret.length !== 32) {
|
124
|
-
throw new Error("Internal Server Error");
|
125
|
-
}
|
126
|
-
|
127
|
-
const isValidToken = (await import("./totp")).totpAuthenticatorCheck(credentials.totpCode, secret);
|
128
|
-
if (!isValidToken) {
|
129
|
-
throw new Error("Invalid second factor code");
|
130
|
-
}
|
131
|
-
} */
|
132
|
-
console.log("asafdf");
|
133
|
-
return {
|
134
|
-
id: appcondaSession.userId,
|
135
|
-
email: appcondaSession.providerUid,
|
136
|
-
emailVerified: true,
|
137
|
-
imageUrl: "",
|
138
|
-
};
|
60
|
+
const session = await accountService.CredentialLogin(credentials);
|
61
|
+
return session;
|
139
62
|
},
|
140
63
|
}),
|
141
64
|
CredentialsProvider({
|
@@ -153,72 +76,43 @@ export const authOptions = (() => {
|
|
153
76
|
},
|
154
77
|
},
|
155
78
|
async authorize(credentials, _req) {
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
throw new Error("Token not found");
|
160
|
-
}
|
161
|
-
const { id } = await verifyToken(credentials?.token);
|
162
|
-
user = await prisma.user.findUnique({
|
163
|
-
where: {
|
164
|
-
id: id,
|
165
|
-
},
|
166
|
-
});
|
167
|
-
} catch (e) {
|
168
|
-
console.error(e);
|
169
|
-
throw new Error("Either a user does not match the provided token or the token is invalid");
|
170
|
-
}
|
171
|
-
|
172
|
-
if (!user) {
|
173
|
-
throw new Error("Either a user does not match the provided token or the token is invalid");
|
174
|
-
}
|
175
|
-
|
176
|
-
if (user.emailVerified) {
|
177
|
-
throw new Error("Email already verified");
|
178
|
-
}
|
179
|
-
|
180
|
-
user = await updateUser(user.id, { emailVerified: new Date() }); */
|
181
|
-
return user || null;
|
79
|
+
const token = credentials?.token;
|
80
|
+
const user = await accountService.TokenLogin({ token: token });
|
81
|
+
return user;
|
182
82
|
},
|
183
83
|
}),
|
184
84
|
// Conditionally add enterprise SSO providers
|
185
|
-
...(
|
85
|
+
// ...(ENTERPRISE_LICENSE_KEY ? getSSOProviders() : []),
|
186
86
|
],
|
187
87
|
callbacks: {
|
188
88
|
async jwt({ token }) {
|
189
|
-
const
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
if (!existingUser) {
|
195
|
-
return token;
|
196
|
-
} */
|
89
|
+
const existingUser = await accountService.GetUserByEmail({ email: token?.email });
|
90
|
+
if (!existingUser) {
|
91
|
+
return token;
|
92
|
+
}
|
197
93
|
return {
|
198
94
|
...token,
|
199
|
-
|
200
|
-
profile: { id: user.$id, ...user },
|
95
|
+
profile: { id: existingUser.id },
|
201
96
|
};
|
202
97
|
},
|
203
98
|
async session({ session, token }) {
|
204
|
-
|
99
|
+
// @ts-expect-error
|
205
100
|
session.user.id = token?.id;
|
206
|
-
|
101
|
+
// @ts-expect-error
|
207
102
|
session.user = token.profile;
|
208
103
|
return session;
|
209
104
|
},
|
210
|
-
//@ts-ignore
|
211
105
|
async signIn({ user, account }) {
|
212
|
-
|
106
|
+
if (account?.provider === "credentials" || account?.provider === "token") {
|
213
107
|
// check if user's email is verified or not
|
214
108
|
if (!user.emailVerified && !EMAIL_VERIFICATION_DISABLED) {
|
215
|
-
|
109
|
+
throw new Error("Email Verification is Pending");
|
216
110
|
}
|
217
111
|
return true;
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
112
|
+
}
|
113
|
+
/* if (ENTERPRISE_LICENSE_KEY) {
|
114
|
+
return handleSSOCallback({ user, account });
|
115
|
+
} */
|
222
116
|
return true;
|
223
117
|
},
|
224
118
|
},
|
@@ -232,4 +126,4 @@ export const authOptions = (() => {
|
|
232
126
|
return options;
|
233
127
|
};
|
234
128
|
})();
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aE9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy9hdXRoT3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVqQzs7Ozs7OztLQU9LO0FBRUwsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUEwQztJQUN6RixNQUFNLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUM7SUFFMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNqQyxJQUFJLEVBQUUsR0FBRztRQUNULFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUVqQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1B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QUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7d0JBRXZFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUVyQzs7Ozs2QkFJSzt3QkFFTCxPQUFPOzRCQUNMLEdBQUcsS0FBSzs0QkFDUixZQUFZOzRCQUNaLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFO3lCQUNuQyxDQUFDO29CQUNKLENBQUM7b0JBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7d0JBQzlCLFlBQVk7d0JBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQzt3QkFDNUIsWUFBWTt3QkFDWixPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7d0JBRTdCLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDO29CQUNELFlBQVk7b0JBQ1osS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQTBDO3dCQUNwRTs7Ozs7Ozs7OzhCQVNNO3dCQUNOLE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7aUJBQ0Y7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLE1BQU0sRUFBRSxhQUFhO29CQUNyQixPQUFPLEVBQUUsY0FBYztvQkFDdkIsS0FBSyxFQUFFLGFBQWEsRUFBRSwrQ0FBK0M7aUJBQ3RFO2FBQ0YsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZXh0QXV0aE9wdGlvbnMgfSBmcm9tIFwibmV4dC1hdXRoXCI7XG5pbXBvcnQgQ3JlZGVudGlhbHNQcm92aWRlciBmcm9tIFwibmV4dC1hdXRoL3Byb3ZpZGVycy9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgY29va2llcyB9IGZyb20gXCJuZXh0L2hlYWRlcnNcIjtcbmltcG9ydCB7IGdldEFwcGNvbmRhQ2xpZW50IH0gZnJvbSBcIi4uL2dldEFwcGNvbmRhQ2xpZW50XCI7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSBcIi4uL21vZHVsZXMvYWNjb3VudC9zZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZXRFbnYgfSBmcm9tIFwiLi4vbGliL2VudlwiO1xuaW1wb3J0IHsgZ2V0U0RLRm9yQ3VycmVudFVzZXIgfSBmcm9tIFwiLi4vZ2V0U0RLRm9yQ3VycmVudFVzZXJcIjtcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8qIGNvbnN0IGdldEVudiA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBBUFBDT05EQV9FTkRQT0lOVDogJ3Byb2Nlc3MuZW52LkFQUENPTkRBX0VORFBPSU5UJyxcbiAgICBBUFBDT05EQV9DTElFTlRfRU5EUE9JTlQ6ICdwcm9jZXNzLmVudi5BUFBDT05EQV9DTElFTlRfRU5EUE9JTlQnLFxuICAgIF9TRVJWSUNFX1RPS0VOOiAncHJvY2Vzcy5lbnYuX1NFUlZJQ0VfVE9LRU4nLFxuICAgIEVOVEVSUFJJU0VfTElDRU5TRV9LRVk6ICdwcm9jZXNzLmVudi5FTlRFUlBSSVNFX0xJQ0VOU0VfS0VZJyxcbiAgfTtcbn07ICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaWduSW4oeyB1c2VyTmFtZSwgcGFzc3dvcmQgfTogeyB1c2VyTmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0pIHtcbiAgY29uc3QgYWRtaW5DbGllbnQgPSBhd2FpdCBnZXRBcHBjb25kYUNsaWVudCgpO1xuXG4gIGNvbnN0IGFjY291bnQgPSBuZXcgQWNjb3VudChhZG1pbkNsaWVudCk7XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGFjY291bnQuY3JlYXRlRW1haWxQYXNzd29yZFNlc3Npb24odXNlck5hbWUsIHBhc3N3b3JkKTtcblxuICBjb25zdCBjID0gYXdhaXQgY29va2llcygpO1xuXG4gIGMuc2V0KCdhX3Nlc3Npb24nLCBzZXNzaW9uLnNlY3JldCwge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBPbmx5OiB0cnVlLFxuICAgIHNhbWVTaXRlOiBcInN0cmljdFwiLFxuICAgIHNlY3VyZTogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHNlc3Npb247XG5cbn1cblxuZXhwb3J0IGNvbnN0IGF1dGhPcHRpb25zID0gKCgpID0+IHtcbiAgbGV0IG9wdGlvbnMgOiBhbnk9IG51bGw7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICBDcmVkZW50aWFsc1Byb3ZpZGVyKHtcbiAgICAgICAgICAgIGlkOiBcImNyZWRlbnRpYWxzXCIsXG4gICAgICAgICAgICAvLyBUaGUgbmFtZSB0byBkaXNwbGF5IG9uIHRoZSBzaWduIGluIGZvcm0gKGUuZy4gXCJTaWduIGluIHdpdGguLi5cIilcbiAgICAgICAgICAgIG5hbWU6IFwiQ3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgIC8vIFRoZSBjcmVkZW50aWFscyBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgc3VpdGFibGUgZm9ybSBvbiB0aGUgc2lnbiBpbiBwYWdlLlxuICAgICAgICAgICAgLy8gWW91IGNhbiBzcGVjaWZ5IHdoYXRldmVyIGZpZWxkcyB5b3UgYXJlIGV4cGVjdGluZyB0byBiZSBzdWJtaXR0ZWQuXG4gICAgICAgICAgICAvLyBlLmcuIGRvbWFpbiwgdXNlcm5hbWUsIHBhc3N3b3JkLCAyRkEgdG9rZW4sIGV0Yy5cbiAgICAgICAgICAgIC8vIFlvdSBjYW4gcGFzcyBhbnkgSFRNTCBhdHRyaWJ1dGUgdG8gdGhlIDxpbnB1dD4gdGFnIHRocm91Z2ggdGhlIG9iamVjdC5cbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiRW1haWwgQWRkcmVzc1wiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJZb3VyIGVtYWlsIGFkZHJlc3NcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJQYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJZb3VyIHBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRvdHBDb2RlOiB7IGxhYmVsOiBcIlR3by1mYWN0b3IgQ29kZVwiLCB0eXBlOiBcImlucHV0XCIsIHBsYWNlaG9sZGVyOiBcIkNvZGUgZnJvbSBhdXRoZW50aWNhdG9yIGFwcFwiIH0sXG4gICAgICAgICAgICAgIGJhY2t1cENvZGU6IHsgbGFiZWw6IFwiQmFja3VwIENvZGVcIiwgdHlwZTogXCJpbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJUd28tZmFjdG9yIGJhY2t1cCBjb2RlXCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhc3luYyBhdXRob3JpemUoY3JlZGVudGlhbHMsIF9yZXEpIHtcbiAgICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgICAgIGxldCB1c2VyO1xuICAgICAgICAgICAgICBjb25zdCBhcHBjb25kYVNlc3Npb24gPSBhd2FpdCBzaWduSW4oeyB1c2VyTmFtZTogY3JlZGVudGlhbHM/LmVtYWlsIGFzIHN0cmluZywgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzPy5wYXNzd29yZCBhcyBzdHJpbmcgfSk7XG5cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY3JlZGVudGlhbHMpO1xuICAgICAgICAgICAgICAvKiAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgdXNlciA9IGF3YWl0IHByaXNtYS51c2VyLmZpbmRVbmlxdWUoe1xuICAgICAgICAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgICAgICBlbWFpbDogY3JlZGVudGlhbHM/LmVtYWlsLFxuICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcIkludGVybmFsIHNlcnZlciBlcnJvci4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlclwiKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIGlmICghdXNlciB8fCAhY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjcmVkZW50aWFsc1wiKTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIGlmICghdXNlci5wYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNyZWRlbnRpYWxzXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHZlcmlmeVBhc3N3b3JkKGNyZWRlbnRpYWxzLnBhc3N3b3JkLCB1c2VyLnBhc3N3b3JkKTtcbiAgICAgICBcbiAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNyZWRlbnRpYWxzXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgaWYgKHVzZXIudHdvRmFjdG9yRW5hYmxlZCAmJiBjcmVkZW50aWFscy5iYWNrdXBDb2RlKSB7XG4gICAgICAgICAgICAgICAgIGlmICghRU5DUllQVElPTl9LRVkpIHtcbiAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTWlzc2luZyBlbmNyeXB0aW9uIGtleTsgY2Fubm90IHByb2NlZWQgd2l0aCBiYWNrdXAgY29kZSBsb2dpbi5cIik7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIGlmICghdXNlci5iYWNrdXBDb2RlcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gYmFja3VwIGNvZGVzIGZvdW5kXCIpO1xuICAgICAgIFxuICAgICAgICAgICAgICAgICBjb25zdCBiYWNrdXBDb2RlcyA9IEpTT04ucGFyc2Uoc3ltbWV0cmljRGVjcnlwdCh1c2VyLmJhY2t1cENvZGVzLCBFTkNSWVBUSU9OX0tFWSkpO1xuICAgICAgIFxuICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB1c2VyLXN1cHBsaWVkIGNvZGUgbWF0Y2hlcyBvbmVcbiAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBiYWNrdXBDb2Rlcy5pbmRleE9mKGNyZWRlbnRpYWxzLmJhY2t1cENvZGUucmVwbGFjZUFsbChcIi1cIiwgXCJcIikpO1xuICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhY2t1cCBjb2RlXCIpO1xuICAgICAgIFxuICAgICAgICAgICAgICAgICAvLyBkZWxldGUgdmVyaWZpZWQgYmFja3VwIGNvZGUgYW5kIHJlLWVuY3J5cHQgcmVtYWluaW5nXG4gICAgICAgICAgICAgICAgIGJhY2t1cENvZGVzW2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgIGF3YWl0IHByaXNtYS51c2VyLnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgYmFja3VwQ29kZXM6IHN5bW1ldHJpY0VuY3J5cHQoSlNPTi5zdHJpbmdpZnkoYmFja3VwQ29kZXMpLCBFTkNSWVBUSU9OX0tFWSksXG4gICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXIudHdvRmFjdG9yRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICBpZiAoIWNyZWRlbnRpYWxzLnRvdHBDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGZhY3RvciByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgICBpZiAoIXVzZXIudHdvRmFjdG9yU2VjcmV0KSB7XG4gICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgXG4gICAgICAgICAgICAgICAgIGlmICghRU5DUllQVElPTl9LRVkpIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgICAgICAgICAgY29uc3Qgc2VjcmV0ID0gc3ltbWV0cmljRGVjcnlwdCh1c2VyLnR3b0ZhY3RvclNlY3JldCwgRU5DUllQVElPTl9LRVkpO1xuICAgICAgICAgICAgICAgICBpZiAoc2VjcmV0Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgICAgICAgICAgY29uc3QgaXNWYWxpZFRva2VuID0gKGF3YWl0IGltcG9ydChcIi4vdG90cFwiKSkudG90cEF1dGhlbnRpY2F0b3JDaGVjayhjcmVkZW50aWFscy50b3RwQ29kZSwgc2VjcmV0KTtcbiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHNlY29uZCBmYWN0b3IgY29kZVwiKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgfSAqL1xuXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYXNhZmRmXCIpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogYXBwY29uZGFTZXNzaW9uLnVzZXJJZCxcbiAgICAgICAgICAgICAgICBlbWFpbDogYXBwY29uZGFTZXNzaW9uLnByb3ZpZGVyVWlkLFxuICAgICAgICAgICAgICAgIGVtYWlsVmVyaWZpZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaW1hZ2VVcmw6IFwiXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIENyZWRlbnRpYWxzUHJvdmlkZXIoe1xuICAgICAgICAgICAgaWQ6IFwidG9rZW5cIixcbiAgICAgICAgICAgIC8vIFRoZSBuYW1lIHRvIGRpc3BsYXkgb24gdGhlIHNpZ24gaW4gZm9ybSAoZS5nLiBcIlNpZ24gaW4gd2l0aC4uLlwiKVxuICAgICAgICAgICAgbmFtZTogXCJUb2tlblwiLFxuICAgICAgICAgICAgLy8gVGhlIGNyZWRlbnRpYWxzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzdWl0YWJsZSBmb3JtIG9uIHRoZSBzaWduIGluIHBhZ2UuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHNwZWNpZnkgd2hhdGV2ZXIgZmllbGRzIHlvdSBhcmUgZXhwZWN0aW5nIHRvIGJlIHN1Ym1pdHRlZC5cbiAgICAgICAgICAgIC8vIGUuZy4gZG9tYWluLCB1c2VybmFtZSwgcGFzc3dvcmQsIDJGQSB0b2tlbiwgZXRjLlxuICAgICAgICAgICAgLy8gWW91IGNhbiBwYXNzIGFueSBIVE1MIGF0dHJpYnV0ZSB0byB0aGUgPGlucHV0PiB0YWcgdGhyb3VnaCB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgICAgdG9rZW46IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJWZXJpZmljYXRpb24gVG9rZW5cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGF1dGhvcml6ZShjcmVkZW50aWFscywgX3JlcSkge1xuXG4gICAgICAgICAgICAgIGxldCB1c2VyO1xuICAgICAgICAgICAgICAvKiAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgaWYgKCFjcmVkZW50aWFscz8udG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUb2tlbiBub3QgZm91bmRcIik7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gYXdhaXQgdmVyaWZ5VG9rZW4oY3JlZGVudGlhbHM/LnRva2VuKTtcbiAgICAgICAgICAgICAgICAgdXNlciA9IGF3YWl0IHByaXNtYS51c2VyLmZpbmRVbmlxdWUoe1xuICAgICAgICAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBhIHVzZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHByb3ZpZGVkIHRva2VuIG9yIHRoZSB0b2tlbiBpcyBpbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVpdGhlciBhIHVzZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHByb3ZpZGVkIHRva2VuIG9yIHRoZSB0b2tlbiBpcyBpbnZhbGlkXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgaWYgKHVzZXIuZW1haWxWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbWFpbCBhbHJlYWR5IHZlcmlmaWVkXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgIFxuICAgICAgICAgICAgICAgdXNlciA9IGF3YWl0IHVwZGF0ZVVzZXIodXNlci5pZCwgeyBlbWFpbFZlcmlmaWVkOiBuZXcgRGF0ZSgpIH0pOyAqL1xuXG4gICAgICAgICAgICAgIHJldHVybiB1c2VyIHx8IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIENvbmRpdGlvbmFsbHkgYWRkIGVudGVycHJpc2UgU1NPIHByb3ZpZGVyc1xuICAgICAgICAgIC4uLihnZXRFbnYoKS5FTlRFUlBSSVNFX0xJQ0VOU0VfS0VZID8gW10gOiBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgIGFzeW5jIGp3dCh7IHRva2VuIH0pIHtcblxuICAgICAgICAgICAgY29uc3QgeyB1c2VycyB9ID0gYXdhaXQgZ2V0U0RLRm9yQ3VycmVudFVzZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJMaXN0ID0gYXdhaXQgdXNlcnMubGlzdChbUXVlcnkuZXF1YWwoXCJlbWFpbFwiLCB0b2tlbi5lbWFpbCEpXSlcblxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHVzZXJMaXN0LnVzZXJzWzBdID8/IHt9O1xuXG4gICAgICAgICAgICAvKiAgY29uc3QgZXhpc3RpbmdVc2VyID0gYXdhaXQgZ2V0VXNlckJ5RW1haWwodG9rZW4/LmVtYWlsISk7XG4gICAgICAgXG4gICAgICAgICAgICAgaWYgKCFleGlzdGluZ1VzZXIpIHtcbiAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgICB9ICovXG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnRva2VuLFxuICAgICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgICAgcHJvZmlsZTogeyBpZDogdXNlci4kaWQsIC4uLnVzZXIgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBzZXNzaW9uLnVzZXIuaWQgPSB0b2tlbj8uaWQ7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHNlc3Npb24udXNlciA9IHRva2VuLnByb2ZpbGU7XG5cbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgYXN5bmMgc2lnbkluKHsgdXNlciwgYWNjb3VudCB9OiB7IHVzZXI6IGFueTsgYWNjb3VudDogQWNjb3VudCB8IG51bGwgfSkge1xuICAgICAgICAgICAgLyogICBpZiAoYWNjb3VudD8ucHJvdmlkZXIgPT09IFwiY3JlZGVudGlhbHNcIiB8fCBhY2NvdW50Py5wcm92aWRlciA9PT0gXCJ0b2tlblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdXNlcidzIGVtYWlsIGlzIHZlcmlmaWVkIG9yIG5vdFxuICAgICAgICAgICAgICAgIGlmICghdXNlci5lbWFpbFZlcmlmaWVkICYmICFFTUFJTF9WRVJJRklDQVRJT05fRElTQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtYWlsIFZlcmlmaWNhdGlvbiBpcyBQZW5kaW5nXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoRU5URVJQUklTRV9MSUNFTlNFX0tFWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTU09DYWxsYmFjayh7IHVzZXIsIGFjY291bnQgfSk7XG4gICAgICAgICAgICAgIH0gKi9cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2VzOiB7XG4gICAgICAgICAgc2lnbkluOiBcIi9hdXRoL2xvZ2luXCIsXG4gICAgICAgICAgc2lnbk91dDogXCIvYXV0aC9sb2dvdXRcIixcbiAgICAgICAgICBlcnJvcjogXCIvYXV0aC9sb2dpblwiLCAvLyBFcnJvciBjb2RlIHBhc3NlZCBpbiBxdWVyeSBzdHJpbmcgYXMgP2Vycm9yPVxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxufSkoKTtcbiJdfQ==
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aE9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy9hdXRoT3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLaEYsT0FBTyxFQUFFLGNBQWMsRUFBUyxNQUFNLFlBQVksQ0FBQztBQUVuRDs7Ozs7OztLQU9LO0FBRUwsTUFBTSxjQUFjLEdBQUMsa0VBQWtFLENBQUM7QUFDeEYsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFFMUMsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUEwQztJQUN6RixNQUFNLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUM7SUFFMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNqQyxJQUFJLEVBQUUsR0FBRztRQUNULFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUVqQixDQUFDO0FBSUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMs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SUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7d0JBRTdCLE9BQU8sT0FBTyxDQUFDO29CQUNqQixDQUFDO29CQUNELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFxQzt3QkFDL0QsSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLGFBQWEsSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDOzRCQUN6RSwyQ0FBMkM7NEJBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztnQ0FDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDOzRCQUNuRCxDQUFDOzRCQUNELE9BQU8sSUFBSSxDQUFDO3dCQUNkLENBQUM7d0JBQ0Q7OzRCQUVJO3dCQUNKLE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7aUJBQ0Y7Z0JBQ0QsS0FBSyxFQUFFO29CQUNMLE1BQU0sRUFBRSxhQUFhO29CQUNyQixPQUFPLEVBQUUsY0FBYztvQkFDdkIsS0FBSyxFQUFFLGFBQWEsRUFBRSwrQ0FBK0M7aUJBQ3RFO2FBQ0YsQ0FBQTtRQUNILENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUE7QUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY2NvdW50LCBOZXh0QXV0aE9wdGlvbnMgfSBmcm9tIFwibmV4dC1hdXRoXCI7XG5pbXBvcnQgQ3JlZGVudGlhbHNQcm92aWRlciBmcm9tIFwibmV4dC1hdXRoL3Byb3ZpZGVycy9jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHsgY29va2llcyB9IGZyb20gXCJuZXh0L2hlYWRlcnNcIjtcbmltcG9ydCB7IGdldEFwcGNvbmRhQ2xpZW50LCBnZXRBcHBjb25kYUNsaWVudFN5bmMgfSBmcm9tIFwiLi4vZ2V0QXBwY29uZGFDbGllbnRcIjtcblxuaW1wb3J0IHsgZ2V0RW52IH0gZnJvbSBcIi4uL2xpYi9lbnZcIjtcbmltcG9ydCB7IGdldFNES0ZvckN1cnJlbnRVc2VyIH0gZnJvbSBcIi4uL2dldFNES0ZvckN1cnJlbnRVc2VyXCI7XG5pbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UsIFRVc2VyIH0gZnJvbSBcIi4uL21vZHVsZXNcIjtcblxuLyogY29uc3QgZ2V0RW52ID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIEFQUENPTkRBX0VORFBPSU5UOiAncHJvY2Vzcy5lbnYuQVBQQ09OREFfRU5EUE9JTlQnLFxuICAgIEFQUENPTkRBX0NMSUVOVF9FTkRQT0lOVDogJ3Byb2Nlc3MuZW52LkFQUENPTkRBX0NMSUVOVF9FTkRQT0lOVCcsXG4gICAgX1NFUlZJQ0VfVE9LRU46ICdwcm9jZXNzLmVudi5fU0VSVklDRV9UT0tFTicsXG4gICAgRU5URVJQUklTRV9MSUNFTlNFX0tFWTogJ3Byb2Nlc3MuZW52LkVOVEVSUFJJU0VfTElDRU5TRV9LRVknLFxuICB9O1xufTsgKi9cblxuY29uc3QgRU5DUllQVElPTl9LRVk9JzUxNTcwY2I0Y2FhNmMxZjVmODBlNmU1N2EzMmVmYjM5N2U5MjIwNDM0NTMyNjk3Yzk0YzhmODIxYTdkZDE5NTEnO1xuY29uc3QgRU5URVJQUklTRV9MSUNFTlNFX0tFWSA9ICcnO1xuY29uc3QgRU1BSUxfVkVSSUZJQ0FUSU9OX0RJU0FCTEVEID0gZmFsc2U7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaWduSW4oeyB1c2VyTmFtZSwgcGFzc3dvcmQgfTogeyB1c2VyTmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nIH0pIHtcbiAgY29uc3QgYWRtaW5DbGllbnQgPSBhd2FpdCBnZXRBcHBjb25kYUNsaWVudCgpO1xuXG4gIGNvbnN0IGFjY291bnQgPSBuZXcgQWNjb3VudChhZG1pbkNsaWVudCk7XG5cbiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IGFjY291bnQuY3JlYXRlRW1haWxQYXNzd29yZFNlc3Npb24odXNlck5hbWUsIHBhc3N3b3JkKTtcblxuICBjb25zdCBjID0gYXdhaXQgY29va2llcygpO1xuXG4gIGMuc2V0KCdhX3Nlc3Npb24nLCBzZXNzaW9uLnNlY3JldCwge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIGh0dHBPbmx5OiB0cnVlLFxuICAgIHNhbWVTaXRlOiBcInN0cmljdFwiLFxuICAgIHNlY3VyZTogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHNlc3Npb247XG5cbn1cblxuXG5cbmV4cG9ydCBjb25zdCBhdXRoT3B0aW9ucyA9ICgoKSA9PiB7XG4gIGxldCBvcHRpb25zIDogYW55PSBudWxsO1xuICBjb25zdCBhZG1pbkNsaWVudCA9ICBnZXRBcHBjb25kYUNsaWVudFN5bmMoKTtcbiAgY29uc3QgYWNjb3VudFNlcnZpY2UgPSBuZXcgQWNjb3VudFNlcnZpY2UoYWRtaW5DbGllbnQpO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgQ3JlZGVudGlhbHNQcm92aWRlcih7XG4gICAgICAgICAgICBpZDogXCJjcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgLy8gVGhlIG5hbWUgdG8gZGlzcGxheSBvbiB0aGUgc2lnbiBpbiBmb3JtIChlLmcuIFwiU2lnbiBpbiB3aXRoLi4uXCIpXG4gICAgICAgICAgICBuYW1lOiBcIkNyZWRlbnRpYWxzXCIsXG4gICAgICAgICAgICAvLyBUaGUgY3JlZGVudGlhbHMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHN1aXRhYmxlIGZvcm0gb24gdGhlIHNpZ24gaW4gcGFnZS5cbiAgICAgICAgICAgIC8vIFlvdSBjYW4gc3BlY2lmeSB3aGF0ZXZlciBmaWVsZHMgeW91IGFyZSBleHBlY3RpbmcgdG8gYmUgc3VibWl0dGVkLlxuICAgICAgICAgICAgLy8gZS5nLiBkb21haW4sIHVzZXJuYW1lLCBwYXNzd29yZCwgMkZBIHRva2VuLCBldGMuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHBhc3MgYW55IEhUTUwgYXR0cmlidXRlIHRvIHRoZSA8aW5wdXQ+IHRhZyB0aHJvdWdoIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkVtYWlsIEFkZHJlc3NcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVtYWlsXCIsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiWW91ciBlbWFpbCBhZGRyZXNzXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiUGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiWW91ciBwYXNzd29yZFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0b3RwQ29kZTogeyBsYWJlbDogXCJUd28tZmFjdG9yIENvZGVcIiwgdHlwZTogXCJpbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJDb2RlIGZyb20gYXV0aGVudGljYXRvciBhcHBcIiB9LFxuICAgICAgICAgICAgICBiYWNrdXBDb2RlOiB7IGxhYmVsOiBcIkJhY2t1cCBDb2RlXCIsIHR5cGU6IFwiaW5wdXRcIiwgcGxhY2Vob2xkZXI6IFwiVHdvLWZhY3RvciBiYWNrdXAgY29kZVwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgYXV0aG9yaXplKGNyZWRlbnRpYWxzLCBfcmVxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBhY2NvdW50U2VydmljZS5DcmVkZW50aWFsTG9naW4oY3JlZGVudGlhbHMgYXMgYW55KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgQ3JlZGVudGlhbHNQcm92aWRlcih7XG4gICAgICAgICAgICBpZDogXCJ0b2tlblwiLFxuICAgICAgICAgICAgLy8gVGhlIG5hbWUgdG8gZGlzcGxheSBvbiB0aGUgc2lnbiBpbiBmb3JtIChlLmcuIFwiU2lnbiBpbiB3aXRoLi4uXCIpXG4gICAgICAgICAgICBuYW1lOiBcIlRva2VuXCIsXG4gICAgICAgICAgICAvLyBUaGUgY3JlZGVudGlhbHMgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHN1aXRhYmxlIGZvcm0gb24gdGhlIHNpZ24gaW4gcGFnZS5cbiAgICAgICAgICAgIC8vIFlvdSBjYW4gc3BlY2lmeSB3aGF0ZXZlciBmaWVsZHMgeW91IGFyZSBleHBlY3RpbmcgdG8gYmUgc3VibWl0dGVkLlxuICAgICAgICAgICAgLy8gZS5nLiBkb21haW4sIHVzZXJuYW1lLCBwYXNzd29yZCwgMkZBIHRva2VuLCBldGMuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHBhc3MgYW55IEhUTUwgYXR0cmlidXRlIHRvIHRoZSA8aW5wdXQ+IHRhZyB0aHJvdWdoIHRoZSBvYmplY3QuXG4gICAgICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlZlcmlmaWNhdGlvbiBUb2tlblwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXN5bmMgYXV0aG9yaXplKGNyZWRlbnRpYWxzLCBfcmVxKSB7XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gY3JlZGVudGlhbHM/LnRva2VuO1xuICAgICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgYWNjb3VudFNlcnZpY2UuVG9rZW5Mb2dpbih7dG9rZW46IHRva2VuIX0pO1xuICAgICAgXG4gICAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBDb25kaXRpb25hbGx5IGFkZCBlbnRlcnByaXNlIFNTTyBwcm92aWRlcnNcbiAgICAgICAgIC8vIC4uLihFTlRFUlBSSVNFX0xJQ0VOU0VfS0VZID8gZ2V0U1NPUHJvdmlkZXJzKCkgOiBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgIGFzeW5jIGp3dCh7IHRva2VuIH0pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGFjY291bnRTZXJ2aWNlLkdldFVzZXJCeUVtYWlsKHtlbWFpbDogdG9rZW4/LmVtYWlsIX0pO1xuICAgICAgXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nVXNlcikge1xuICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnRva2VuLFxuICAgICAgICAgICAgICBwcm9maWxlOiB7IGlkOiBleGlzdGluZ1VzZXIuaWQgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgc2Vzc2lvbi51c2VyLmlkID0gdG9rZW4/LmlkO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgc2Vzc2lvbi51c2VyID0gdG9rZW4ucHJvZmlsZTtcbiAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyBzaWduSW4oeyB1c2VyLCBhY2NvdW50IH06IHsgdXNlcjogVFVzZXI7IGFjY291bnQ6IEFjY291bnQgfSkge1xuICAgICAgICAgICAgaWYgKGFjY291bnQ/LnByb3ZpZGVyID09PSBcImNyZWRlbnRpYWxzXCIgfHwgYWNjb3VudD8ucHJvdmlkZXIgPT09IFwidG9rZW5cIikge1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiB1c2VyJ3MgZW1haWwgaXMgdmVyaWZpZWQgb3Igbm90XG4gICAgICAgICAgICAgIGlmICghdXNlci5lbWFpbFZlcmlmaWVkICYmICFFTUFJTF9WRVJJRklDQVRJT05fRElTQUJMRUQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbWFpbCBWZXJpZmljYXRpb24gaXMgUGVuZGluZ1wiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlmIChFTlRFUlBSSVNFX0xJQ0VOU0VfS0VZKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTU09DYWxsYmFjayh7IHVzZXIsIGFjY291bnQgfSk7XG4gICAgICAgICAgICB9ICovXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwYWdlczoge1xuICAgICAgICAgIHNpZ25JbjogXCIvYXV0aC9sb2dpblwiLFxuICAgICAgICAgIHNpZ25PdXQ6IFwiL2F1dGgvbG9nb3V0XCIsXG4gICAgICAgICAgZXJyb3I6IFwiL2F1dGgvbG9naW5cIiwgLy8gRXJyb3IgY29kZSBwYXNzZWQgaW4gcXVlcnkgc3RyaW5nIGFzID9lcnJvcj1cbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn0pKCk7XG4iXX0=
|
@@ -41,4 +41,31 @@ export async function getAppcondaClient() {
|
|
41
41
|
.setProject('console');
|
42
42
|
return adminClient;
|
43
43
|
}
|
44
|
-
|
44
|
+
export function getAppcondaClientSync() {
|
45
|
+
let url;
|
46
|
+
if (getEnv().APPCONDA_ENDPOINT) {
|
47
|
+
url = getEnv().APPCONDA_ENDPOINT;
|
48
|
+
}
|
49
|
+
else if (typeof window !== 'undefined') {
|
50
|
+
const hostInfo = getPortAndHostname(window.location.href);
|
51
|
+
if (hostInfo.port) {
|
52
|
+
url = `${hostInfo.protocol}//${hostInfo.hostname}:${hostInfo.port}/v1`;
|
53
|
+
}
|
54
|
+
else {
|
55
|
+
url = `${hostInfo.protocol}//${hostInfo.hostname}/v1`;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
else {
|
59
|
+
url = getEnv().APPCONDA_ENDPOINT || 'http://appconda/v1';
|
60
|
+
}
|
61
|
+
/* if (ApplicationConfig.Port == null) {
|
62
|
+
url = `${ApplicationConfig.Protocol}://${ApplicationConfig.Domain}:${ApplicationConfig.Port}/v1`
|
63
|
+
} else {
|
64
|
+
url = `${ApplicationConfig.Protocol}://${ApplicationConfig.Domain}/v1`
|
65
|
+
} */
|
66
|
+
const adminClient = new Client()
|
67
|
+
.setEndpoint(url) // Your API Endpoint
|
68
|
+
.setProject('console');
|
69
|
+
return adminClient;
|
70
|
+
}
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0QXBwY29uZGFDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0QXBwY29uZGFDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRW5DLFNBQVMsa0JBQWtCLENBQUMsU0FBaUI7SUFDekMsSUFBSSxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0IsT0FBTztZQUNILFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtZQUN0QixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLGlDQUFpQztZQUMvRixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7U0FDekIsQ0FBQztJQUNOLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDcEQsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQjtJQUVuQyxJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksTUFBTSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsaUJBQWlCLENBQUM7SUFDckMsQ0FBQztTQUFNLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxDQUFBO1FBQzFFLENBQUM7YUFBTSxDQUFDO1lBQ0osR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxLQUFLLENBQUE7UUFDekQsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ0osR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixJQUFJLG9CQUFvQixDQUFBO0lBQzVELENBQUM7SUFFRDs7OztVQUlNO0lBQ04sTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLEVBQUU7U0FDM0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQjtTQUNyQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFM0IsT0FBTyxXQUFXLENBQUE7QUFFdEIsQ0FBQztBQUVELE1BQU0sVUFBVyxxQkFBcUI7SUFFbEMsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0IsR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDO0lBQ3JDLENBQUM7U0FBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQTtRQUMxRSxDQUFDO2FBQU0sQ0FBQztZQUNKLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVEsS0FBSyxDQUFBO1FBQ3pELENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNKLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsSUFBSSxvQkFBb0IsQ0FBQTtJQUM1RCxDQUFDO0lBRUQ7Ozs7VUFJTTtJQUNOLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxFQUFFO1NBQzNCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0I7U0FDckMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTNCLE9BQU8sV0FBVyxDQUFBO0FBRXRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIjtcbmltcG9ydCB7IGdldEVudiB9IGZyb20gXCIuL2xpYi9lbnZcIjtcblxuZnVuY3Rpb24gZ2V0UG9ydEFuZEhvc3RuYW1lKHVybFN0cmluZzogc3RyaW5nKTogeyBob3N0bmFtZTogc3RyaW5nOyBwb3J0OiBzdHJpbmc7IHByb3RvY29sOiBzdHJpbmcgfSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh1cmxTdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0IHx8ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gJzQ0MycgOiAnODAnKSwgLy8gRGVmYXVsdCBwb3J0cyBpZiBub3Qgc3BlY2lmaWVkXG4gICAgICAgICAgICBwcm90b2NvbDogdXJsLnByb3RvY29sXG4gICAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBVUkw6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4geyBob3N0bmFtZTogJycsIHBvcnQ6ICcnLCBwcm90b2NvbDogJycgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBcHBjb25kYUNsaWVudCgpIHtcblxuICAgIGxldCB1cmw7XG4gICAgaWYgKGdldEVudigpLkFQUENPTkRBX0VORFBPSU5UKSB7XG4gICAgICAgIHVybCA9IGdldEVudigpLkFQUENPTkRBX0VORFBPSU5UO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc3QgaG9zdEluZm8gPSBnZXRQb3J0QW5kSG9zdG5hbWUod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICBpZiAoaG9zdEluZm8ucG9ydCkge1xuICAgICAgICAgICAgdXJsID0gYCR7aG9zdEluZm8ucHJvdG9jb2x9Ly8ke2hvc3RJbmZvLmhvc3RuYW1lfToke2hvc3RJbmZvLnBvcnR9L3YxYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsID0gYCR7aG9zdEluZm8ucHJvdG9jb2x9Ly8ke2hvc3RJbmZvLmhvc3RuYW1lfS92MWBcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGdldEVudigpLkFQUENPTkRBX0VORFBPSU5UIHx8ICdodHRwOi8vYXBwY29uZGEvdjEnXG4gICAgfVxuXG4gICAgLyogIGlmIChBcHBsaWNhdGlvbkNvbmZpZy5Qb3J0ID09IG51bGwpIHtcbiAgICAgICAgIHVybCA9IGAke0FwcGxpY2F0aW9uQ29uZmlnLlByb3RvY29sfTovLyR7QXBwbGljYXRpb25Db25maWcuRG9tYWlufToke0FwcGxpY2F0aW9uQ29uZmlnLlBvcnR9L3YxYFxuICAgICB9IGVsc2Uge1xuICAgICAgICAgICB1cmwgPSBgJHtBcHBsaWNhdGlvbkNvbmZpZy5Qcm90b2NvbH06Ly8ke0FwcGxpY2F0aW9uQ29uZmlnLkRvbWFpbn0vdjFgXG4gICAgIH0gICovXG4gICAgY29uc3QgYWRtaW5DbGllbnQgPSBuZXcgQ2xpZW50KClcbiAgICAgICAgLnNldEVuZHBvaW50KHVybCkgLy8gWW91ciBBUEkgRW5kcG9pbnRcbiAgICAgICAgLnNldFByb2plY3QoJ2NvbnNvbGUnKTtcblxuICAgIHJldHVybiBhZG1pbkNsaWVudFxuXG59XG5cbmV4cG9ydCAgZnVuY3Rpb24gZ2V0QXBwY29uZGFDbGllbnRTeW5jKCkge1xuXG4gICAgbGV0IHVybDtcbiAgICBpZiAoZ2V0RW52KCkuQVBQQ09OREFfRU5EUE9JTlQpIHtcbiAgICAgICAgdXJsID0gZ2V0RW52KCkuQVBQQ09OREFfRU5EUE9JTlQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCBob3N0SW5mbyA9IGdldFBvcnRBbmRIb3N0bmFtZSh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgIGlmIChob3N0SW5mby5wb3J0KSB7XG4gICAgICAgICAgICB1cmwgPSBgJHtob3N0SW5mby5wcm90b2NvbH0vLyR7aG9zdEluZm8uaG9zdG5hbWV9OiR7aG9zdEluZm8ucG9ydH0vdjFgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwgPSBgJHtob3N0SW5mby5wcm90b2NvbH0vLyR7aG9zdEluZm8uaG9zdG5hbWV9L3YxYFxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gZ2V0RW52KCkuQVBQQ09OREFfRU5EUE9JTlQgfHwgJ2h0dHA6Ly9hcHBjb25kYS92MSdcbiAgICB9XG5cbiAgICAvKiAgaWYgKEFwcGxpY2F0aW9uQ29uZmlnLlBvcnQgPT0gbnVsbCkge1xuICAgICAgICAgdXJsID0gYCR7QXBwbGljYXRpb25Db25maWcuUHJvdG9jb2x9Oi8vJHtBcHBsaWNhdGlvbkNvbmZpZy5Eb21haW59OiR7QXBwbGljYXRpb25Db25maWcuUG9ydH0vdjFgXG4gICAgIH0gZWxzZSB7XG4gICAgICAgICAgIHVybCA9IGAke0FwcGxpY2F0aW9uQ29uZmlnLlByb3RvY29sfTovLyR7QXBwbGljYXRpb25Db25maWcuRG9tYWlufS92MWBcbiAgICAgfSAgKi9cbiAgICBjb25zdCBhZG1pbkNsaWVudCA9IG5ldyBDbGllbnQoKVxuICAgICAgICAuc2V0RW5kcG9pbnQodXJsKSAvLyBZb3VyIEFQSSBFbmRwb2ludFxuICAgICAgICAuc2V0UHJvamVjdCgnY29uc29sZScpO1xuXG4gICAgcmV0dXJuIGFkbWluQ2xpZW50XG5cbn0iXX0=
|
@@ -1,7 +1,9 @@
|
|
1
1
|
import { z } from 'zod';
|
2
|
-
import { _CreateUserSchema, GetUserByIdSchema, RegisterUserSchema, UpdateUserVerifyTokenSchema } from './schema';
|
2
|
+
import { _CreateUserSchema, CredentialLoginSchema, GetUserByIdSchema, RegisterUserSchema, TokenLoginSchema, UpdateUserVerifyTokenSchema } from './schema';
|
3
3
|
import { TUser } from './types';
|
4
4
|
export declare function CreateUser(parsedInput: z.infer<typeof _CreateUserSchema>): Promise<TUser>;
|
5
5
|
export declare function RegisterUser(parsedInput: z.infer<typeof RegisterUserSchema>): Promise<TUser>;
|
6
6
|
export declare function GetUserById(parsedInput: z.infer<typeof GetUserByIdSchema>): Promise<TUser>;
|
7
7
|
export declare function UpdateUserVerifyToken(parsedInput: z.infer<typeof UpdateUserVerifyTokenSchema>): Promise<TUser>;
|
8
|
+
export declare function CredentialLogin(parsedInput: z.infer<typeof CredentialLoginSchema>): Promise<TUser>;
|
9
|
+
export declare function TokenLogin(parsedInput: z.infer<typeof TokenLoginSchema>): Promise<TUser>;
|