@appconda/sdk 1.0.410 → 1.0.411

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 (59) hide show
  1. package/package.json +1 -1
  2. package/dist/actions/_authOptions.d.ts +0 -5
  3. package/dist/actions/_authOptions.js +0 -235
  4. package/dist/actions/actionClient.d.ts +0 -10
  5. package/dist/actions/actionClient.js +0 -41
  6. package/dist/actions/auth.d.ts +0 -1
  7. package/dist/actions/auth.js +0 -7
  8. package/dist/actions/authOptions.d.ts +0 -5
  9. package/dist/actions/authOptions.js +0 -133
  10. package/dist/actions/index.d.ts +0 -3
  11. package/dist/actions/index.js +0 -4
  12. package/dist/actions/nextAuthHandler.d.ts +0 -1
  13. package/dist/actions/nextAuthHandler.js +0 -6
  14. package/dist/decorators/Cache.d.ts +0 -1
  15. package/dist/decorators/Cache.js +0 -79
  16. package/dist/decorators/CacheKey.d.ts +0 -1
  17. package/dist/decorators/CacheKey.js +0 -9
  18. package/dist/decorators/Invalidate.d.ts +0 -1
  19. package/dist/decorators/Invalidate.js +0 -47
  20. package/dist/getSDKForCurrentUser.d.ts +0 -59
  21. package/dist/getSDKForCurrentUser.js +0 -100
  22. package/dist/getSDKForTenant.d.ts +0 -20
  23. package/dist/getSDKForTenant.js +0 -44
  24. package/dist/lib/Cache/Adapter.d.ts +0 -10
  25. package/dist/lib/Cache/Adapter.js +0 -2
  26. package/dist/lib/Cache/Adapters/Filesystem.d.ts +0 -16
  27. package/dist/lib/Cache/Adapters/Filesystem.js +0 -103
  28. package/dist/lib/Cache/Adapters/Memory.d.ts +0 -18
  29. package/dist/lib/Cache/Adapters/Memory.js +0 -47
  30. package/dist/lib/Cache/Adapters/None.d.ts +0 -12
  31. package/dist/lib/Cache/Adapters/None.js +0 -28
  32. package/dist/lib/Cache/Adapters/Sharding.d.ts +0 -17
  33. package/dist/lib/Cache/Adapters/Sharding.js +0 -73
  34. package/dist/lib/Cache/Cache.d.ts +0 -16
  35. package/dist/lib/Cache/Cache.js +0 -52
  36. package/dist/lib/Cache/index.d.ts +0 -4
  37. package/dist/lib/Cache/index.js +0 -5
  38. package/dist/lib/Cache/test.d.ts +0 -0
  39. package/dist/lib/Cache/test.js +0 -1
  40. package/dist/lib/Registry/Registry.d.ts +0 -38
  41. package/dist/lib/Registry/Registry.js +0 -56
  42. package/dist/lib/Registry/index.d.ts +0 -1
  43. package/dist/lib/Registry/index.js +0 -2
  44. package/dist/lib/Services.d.ts +0 -6
  45. package/dist/lib/Services.js +0 -14
  46. package/dist/lib/crypto.d.ts +0 -23
  47. package/dist/lib/crypto.js +0 -78
  48. package/dist/lib/env.d.ts +0 -1
  49. package/dist/lib/env.js +0 -137
  50. package/dist/lib/jwt.d.ts +0 -12
  51. package/dist/lib/jwt.js +0 -103
  52. package/dist/modules/account/actions.d.ts +0 -11
  53. package/dist/modules/account/actions.js +0 -49
  54. package/dist/modules/accounv1/action.d.ts +0 -9
  55. package/dist/modules/accounv1/action.js +0 -88
  56. package/dist/modules/bpm/action.d.ts +0 -7
  57. package/dist/modules/bpm/action.js +0 -60
  58. package/dist/schemas/nodes.d.ts +0 -0
  59. package/dist/schemas/nodes.js +0 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@appconda/sdk",
3
3
  "homepage": "https://appconda.io/support",
4
4
  "description": "Appconda is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API",
5
- "version": "1.0.410",
5
+ "version": "1.0.411",
6
6
  "license": "BSD-3-Clause",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
@@ -1,5 +0,0 @@
1
- export declare function signIn({ userName, password }: {
2
- userName: string;
3
- password: string;
4
- }): Promise<import("../modules/account/types").Session>;
5
- export declare const authOptions: () => any;
@@ -1,235 +0,0 @@
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 +0,0 @@
1
- export declare const actionClient: import("next-safe-action").SafeActionClient<string, undefined, undefined, undefined, {}, undefined, undefined, undefined, readonly [], {
2
- formErrors: string[];
3
- fieldErrors: {};
4
- } | undefined, readonly []>;
5
- export declare const authenticatedActionClient: import("next-safe-action").SafeActionClient<string, undefined, undefined, undefined, {
6
- user: import("..").Models.User<import("..").Models.Preferences>;
7
- }, undefined, undefined, undefined, readonly [], {
8
- formErrors: string[];
9
- fieldErrors: {};
10
- } | undefined, readonly []>;
@@ -1,41 +0,0 @@
1
- import { getServerSession } from "next-auth";
2
- import { DEFAULT_SERVER_ERROR_MESSAGE, createSafeActionClient } from "next-safe-action";
3
- import { authOptions } from "./authOptions";
4
- import { AuthenticationError, AuthorizationError } from "../lib/errors";
5
- import { getSDKForCurrentUser } from "../getSDKForCurrentUser";
6
- export const actionClient = createSafeActionClient({
7
- handleServerError(e) {
8
- /* if (
9
- e instanceof ResourceNotFoundError ||
10
- e instanceof AuthorizationError ||
11
- e instanceof InvalidInputError ||
12
- e instanceof UnknownError ||
13
- e instanceof AuthenticationError ||
14
- e instanceof OperationNotAllowedError ||
15
- e instanceof AppcondaException
16
- ) {
17
- return e.message;
18
- } */
19
- // eslint-disable-next-line no-console -- This error needs to be logged for debugging server-side errors
20
- console.error("SERVER ERROR: ", e);
21
- return DEFAULT_SERVER_ERROR_MESSAGE;
22
- },
23
- });
24
- export const authenticatedActionClient = actionClient.use(async ({ next }) => {
25
- const options = authOptions();
26
- const session = options ? await getServerSession(options) : null;
27
- //@ts-ignore
28
- if (!session?.user) {
29
- throw new AuthenticationError("Not authenticated");
30
- }
31
- //@ts-ignore
32
- const userId = session.user.id;
33
- // Get the SDK and use users.get method to fetch the user
34
- const { users } = await getSDKForCurrentUser();
35
- const user = await users.get(userId);
36
- if (!user) {
37
- throw new AuthorizationError("User not found");
38
- }
39
- return next({ ctx: { user } });
40
- });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvYWN0aW9uQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7SUFDakQsaUJBQWlCLENBQUMsQ0FBUTtRQUN4Qjs7Ozs7Ozs7OztZQVVJO1FBRUosd0dBQXdHO1FBQ3hHLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsT0FBTyw0QkFBNEIsQ0FBQztJQUN0QyxDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBR0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO0lBQzNFLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pFLFlBQVk7SUFDWixJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxZQUFZO0lBQ1osTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFFL0IseURBQXlEO0lBQ3pELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLG9CQUFvQixFQUFFLENBQUM7SUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgZ2V0U2VydmVyU2Vzc2lvbiB9IGZyb20gXCJuZXh0LWF1dGhcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VSVkVSX0VSUk9SX01FU1NBR0UsIGNyZWF0ZVNhZmVBY3Rpb25DbGllbnQgfSBmcm9tIFwibmV4dC1zYWZlLWFjdGlvblwiO1xuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiLi9hdXRoT3B0aW9uc1wiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciwgQXV0aG9yaXphdGlvbkVycm9yIH0gZnJvbSBcIi4uL2xpYi9lcnJvcnNcIjtcbmltcG9ydCB7IGdldFNES0ZvckN1cnJlbnRVc2VyIH0gZnJvbSBcIi4uL2dldFNES0ZvckN1cnJlbnRVc2VyXCI7XG5cblxuZXhwb3J0IGNvbnN0IGFjdGlvbkNsaWVudCA9IGNyZWF0ZVNhZmVBY3Rpb25DbGllbnQoe1xuICBoYW5kbGVTZXJ2ZXJFcnJvcihlOiBFcnJvcikge1xuICAgIC8qIGlmIChcbiAgICAgIGUgaW5zdGFuY2VvZiBSZXNvdXJjZU5vdEZvdW5kRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBBdXRob3JpemF0aW9uRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBJbnZhbGlkSW5wdXRFcnJvciB8fFxuICAgICAgZSBpbnN0YW5jZW9mIFVua25vd25FcnJvciB8fFxuICAgICAgZSBpbnN0YW5jZW9mIEF1dGhlbnRpY2F0aW9uRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBPcGVyYXRpb25Ob3RBbGxvd2VkRXJyb3IgfHxcbiAgICAgIGUgaW5zdGFuY2VvZiBBcHBjb25kYUV4Y2VwdGlvblxuICAgICkge1xuICAgICAgcmV0dXJuIGUubWVzc2FnZTtcbiAgICB9ICovXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBUaGlzIGVycm9yIG5lZWRzIHRvIGJlIGxvZ2dlZCBmb3IgZGVidWdnaW5nIHNlcnZlci1zaWRlIGVycm9yc1xuICAgIGNvbnNvbGUuZXJyb3IoXCJTRVJWRVIgRVJST1I6IFwiLCBlKTtcbiAgICByZXR1cm4gREVGQVVMVF9TRVJWRVJfRVJST1JfTUVTU0FHRTtcbiAgfSxcbn0pO1xuXG5cbmV4cG9ydCBjb25zdCBhdXRoZW50aWNhdGVkQWN0aW9uQ2xpZW50ID0gYWN0aW9uQ2xpZW50LnVzZShhc3luYyAoeyBuZXh0IH0pID0+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IGF1dGhPcHRpb25zKCk7XG4gIGNvbnN0IHNlc3Npb24gPSBvcHRpb25zID8gYXdhaXQgZ2V0U2VydmVyU2Vzc2lvbihvcHRpb25zKSA6IG51bGw7XG4gIC8vQHRzLWlnbm9yZVxuICBpZiAoIXNlc3Npb24/LnVzZXIpIHtcbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihcIk5vdCBhdXRoZW50aWNhdGVkXCIpO1xuICB9XG5cbiAgLy9AdHMtaWdub3JlXG4gIGNvbnN0IHVzZXJJZCA9IHNlc3Npb24udXNlci5pZDtcblxuICAvLyBHZXQgdGhlIFNESyBhbmQgdXNlIHVzZXJzLmdldCBtZXRob2QgdG8gZmV0Y2ggdGhlIHVzZXJcbiAgY29uc3QgeyB1c2VycyB9ID0gYXdhaXQgZ2V0U0RLRm9yQ3VycmVudFVzZXIoKTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZXJzLmdldCh1c2VySWQpO1xuICBpZiAoIXVzZXIpIHtcbiAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFwiVXNlciBub3QgZm91bmRcIik7XG4gIH1cblxuICByZXR1cm4gbmV4dCh7IGN0eDogeyB1c2VyIH0gfSk7XG59KTtcbiJdfQ==
@@ -1 +0,0 @@
1
- export declare const auth: () => Promise<unknown>;
@@ -1,7 +0,0 @@
1
- import { getServerSession } from "next-auth";
2
- import { authOptions } from "./authOptions";
3
- export const auth = async () => {
4
- const options = authOptions();
5
- return options ? await getServerSession(options) : null;
6
- };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY3Rpb25zL2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBRyxFQUFFO0lBQzFCLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzlCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUQsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U2VydmVyU2Vzc2lvbiB9IGZyb20gXCJuZXh0LWF1dGhcIlxuaW1wb3J0IHsgYXV0aE9wdGlvbnMgfSBmcm9tIFwiLi9hdXRoT3B0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgYXV0aCA9IGFzeW5jICgpPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBhdXRoT3B0aW9ucygpO1xuICAgIHJldHVybiBvcHRpb25zID8gYXdhaXQgZ2V0U2VydmVyU2Vzc2lvbihvcHRpb25zKSA6IG51bGw7XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- export declare function signIn({ userName, password }: {
2
- userName: string;
3
- password: string;
4
- }): Promise<any>;
5
- export declare const authOptions: () => any;
@@ -1,133 +0,0 @@
1
- import CredentialsProvider from "next-auth/providers/credentials";
2
- import { cookies } from "next/headers";
3
- import { getAppcondaClient, getAppcondaClientSync } from "../getAppcondaClient";
4
- import { AccountService } from "../modules";
5
- /* const getEnv = () => {
6
- return {
7
- APPCONDA_ENDPOINT: 'process.env.APPCONDA_ENDPOINT',
8
- APPCONDA_CLIENT_ENDPOINT: 'process.env.APPCONDA_CLIENT_ENDPOINT',
9
- _SERVICE_TOKEN: 'process.env._SERVICE_TOKEN',
10
- ENTERPRISE_LICENSE_KEY: 'process.env.ENTERPRISE_LICENSE_KEY',
11
- };
12
- }; */
13
- const ENCRYPTION_KEY = '51570cb4caa6c1f5f80e6e57a32efb397e9220434532697c94c8f821a7dd1951';
14
- const ENTERPRISE_LICENSE_KEY = '';
15
- const EMAIL_VERIFICATION_DISABLED = false;
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
- const adminClient = getAppcondaClientSync();
59
- const accountService = new AccountService(adminClient);
60
- const session = await accountService.CredentialLogin(credentials);
61
- return session;
62
- },
63
- }),
64
- CredentialsProvider({
65
- id: "token",
66
- // The name to display on the sign in form (e.g. "Sign in with...")
67
- name: "Token",
68
- // The credentials is used to generate a suitable form on the sign in page.
69
- // You can specify whatever fields you are expecting to be submitted.
70
- // e.g. domain, username, password, 2FA token, etc.
71
- // You can pass any HTML attribute to the <input> tag through the object.
72
- credentials: {
73
- token: {
74
- label: "Verification Token",
75
- type: "string",
76
- },
77
- },
78
- async authorize(credentials, _req) {
79
- const adminClient = getAppcondaClientSync();
80
- const accountService = new AccountService(adminClient);
81
- const token = credentials?.token;
82
- const user = await accountService.TokenLogin({ token: token });
83
- return user;
84
- },
85
- }),
86
- // Conditionally add enterprise SSO providers
87
- // ...(ENTERPRISE_LICENSE_KEY ? getSSOProviders() : []),
88
- ],
89
- callbacks: {
90
- async jwt({ token }) {
91
- const adminClient = getAppcondaClientSync();
92
- const accountService = new AccountService(adminClient);
93
- const existingUser = await accountService.GetUserByEmail({ email: token?.email });
94
- if (!existingUser) {
95
- return token;
96
- }
97
- return {
98
- ...token,
99
- profile: { id: existingUser.id },
100
- };
101
- },
102
- async session({ session, token }) {
103
- // @ts-expect-error
104
- session.user.id = token?.id;
105
- // @ts-expect-error
106
- session.user = token.profile;
107
- return session;
108
- },
109
- async signIn({ user, account }) {
110
- if (account?.provider === "credentials" || account?.provider === "token") {
111
- // check if user's email is verified or not
112
- if (!user.emailVerified && !EMAIL_VERIFICATION_DISABLED) {
113
- throw new Error("Email Verification is Pending");
114
- }
115
- return true;
116
- }
117
- /* if (ENTERPRISE_LICENSE_KEY) {
118
- return handleSSOCallback({ user, account });
119
- } */
120
- return true;
121
- },
122
- },
123
- pages: {
124
- signIn: "/auth/login",
125
- signOut: "/auth/logout",
126
- error: "/auth/login", // Error code passed in query string as ?error=
127
- },
128
- };
129
- }
130
- return options;
131
- };
132
- })();
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aE9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy9hdXRoT3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLG1CQUFtQixNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLaEYsT0FBTyxFQUFFLGNBQWMsRUFBUyxNQUFNLFlBQVksQ0FBQztBQUVuRDs7Ozs7OztLQU9LO0FBRUwsTUFBTSxjQUFjLEdBQUMsa0VBQWtFLENBQUM7QUFDeEYsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDbEMsTUFBTSwyQkFBMkIsR0FBRyxLQUFLLENBQUM7QUFFMUMsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUEwQztJQUN6RixNQUFNLFdBQVcsR0FBRyxNQUFNLGlCQUFpQixFQUFFLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsMEJBQTBCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxFQUFFLENBQUM7SUFFMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNqQyxJQUFJLEVBQUUsR0FBRztRQUNULFFBQVEsRUFBRSxJQUFJO1FBQ2QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUVqQixDQUFDO0FBSUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMs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QUUsRUFBRTt5QkFDakMsQ0FBQztvQkFDSixDQUFDO29CQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO3dCQUM5QixtQkFBbUI7d0JBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7d0JBQzVCLG1CQUFtQjt3QkFDbkIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO3dCQUU3QixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQztvQkFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBcUM7d0JBQy9ELElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxhQUFhLElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQzs0QkFDekUsMkNBQTJDOzRCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7Z0NBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQzs0QkFDbkQsQ0FBQzs0QkFDRCxPQUFPLElBQUksQ0FBQzt3QkFDZCxDQUFDO3dCQUNEOzs0QkFFSTt3QkFDSixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO2lCQUNGO2dCQUNELEtBQUssRUFBRTtvQkFDTCxNQUFNLEVBQUUsYUFBYTtvQkFDckIsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLEtBQUssRUFBRSxhQUFhLEVBQUUsK0NBQStDO2lCQUN0RTthQUNGLENBQUE7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWNjb3VudCwgTmV4dEF1dGhPcHRpb25zIH0gZnJvbSBcIm5leHQtYXV0aFwiO1xuaW1wb3J0IENyZWRlbnRpYWxzUHJvdmlkZXIgZnJvbSBcIm5leHQtYXV0aC9wcm92aWRlcnMvY3JlZGVudGlhbHNcIjtcbmltcG9ydCB7IGNvb2tpZXMgfSBmcm9tIFwibmV4dC9oZWFkZXJzXCI7XG5pbXBvcnQgeyBnZXRBcHBjb25kYUNsaWVudCwgZ2V0QXBwY29uZGFDbGllbnRTeW5jIH0gZnJvbSBcIi4uL2dldEFwcGNvbmRhQ2xpZW50XCI7XG5cbmltcG9ydCB7IGdldEVudiB9IGZyb20gXCIuLi9saWIvZW52XCI7XG5pbXBvcnQgeyBnZXRTREtGb3JDdXJyZW50VXNlciB9IGZyb20gXCIuLi9nZXRTREtGb3JDdXJyZW50VXNlclwiO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlLCBUVXNlciB9IGZyb20gXCIuLi9tb2R1bGVzXCI7XG5cbi8qIGNvbnN0IGdldEVudiA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBBUFBDT05EQV9FTkRQT0lOVDogJ3Byb2Nlc3MuZW52LkFQUENPTkRBX0VORFBPSU5UJyxcbiAgICBBUFBDT05EQV9DTElFTlRfRU5EUE9JTlQ6ICdwcm9jZXNzLmVudi5BUFBDT05EQV9DTElFTlRfRU5EUE9JTlQnLFxuICAgIF9TRVJWSUNFX1RPS0VOOiAncHJvY2Vzcy5lbnYuX1NFUlZJQ0VfVE9LRU4nLFxuICAgIEVOVEVSUFJJU0VfTElDRU5TRV9LRVk6ICdwcm9jZXNzLmVudi5FTlRFUlBSSVNFX0xJQ0VOU0VfS0VZJyxcbiAgfTtcbn07ICovXG5cbmNvbnN0IEVOQ1JZUFRJT05fS0VZPSc1MTU3MGNiNGNhYTZjMWY1ZjgwZTZlNTdhMzJlZmIzOTdlOTIyMDQzNDUzMjY5N2M5NGM4ZjgyMWE3ZGQxOTUxJztcbmNvbnN0IEVOVEVSUFJJU0VfTElDRU5TRV9LRVkgPSAnJztcbmNvbnN0IEVNQUlMX1ZFUklGSUNBVElPTl9ESVNBQkxFRCA9IGZhbHNlO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2lnbkluKHsgdXNlck5hbWUsIHBhc3N3b3JkIH06IHsgdXNlck5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyB9KSB7XG4gIGNvbnN0IGFkbWluQ2xpZW50ID0gYXdhaXQgZ2V0QXBwY29uZGFDbGllbnQoKTtcblxuICBjb25zdCBhY2NvdW50ID0gbmV3IEFjY291bnQoYWRtaW5DbGllbnQpO1xuXG4gIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBhY2NvdW50LmNyZWF0ZUVtYWlsUGFzc3dvcmRTZXNzaW9uKHVzZXJOYW1lLCBwYXNzd29yZCk7XG5cbiAgY29uc3QgYyA9IGF3YWl0IGNvb2tpZXMoKTtcblxuICBjLnNldCgnYV9zZXNzaW9uJywgc2Vzc2lvbi5zZWNyZXQsIHtcbiAgICBwYXRoOiBcIi9cIixcbiAgICBodHRwT25seTogdHJ1ZSxcbiAgICBzYW1lU2l0ZTogXCJzdHJpY3RcIixcbiAgICBzZWN1cmU6IHRydWUsXG4gIH0pO1xuXG4gIHJldHVybiBzZXNzaW9uO1xuXG59XG5cblxuXG5leHBvcnQgY29uc3QgYXV0aE9wdGlvbnMgPSAoKCkgPT4ge1xuICBsZXQgb3B0aW9ucyA6IGFueT0gbnVsbDtcblxuXG4gIHJldHVybiAoKSA9PiB7XG4gICBcblxuICAgIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIENyZWRlbnRpYWxzUHJvdmlkZXIoe1xuICAgICAgICAgICAgaWQ6IFwiY3JlZGVudGlhbHNcIixcbiAgICAgICAgICAgIC8vIFRoZSBuYW1lIHRvIGRpc3BsYXkgb24gdGhlIHNpZ24gaW4gZm9ybSAoZS5nLiBcIlNpZ24gaW4gd2l0aC4uLlwiKVxuICAgICAgICAgICAgbmFtZTogXCJDcmVkZW50aWFsc1wiLFxuICAgICAgICAgICAgLy8gVGhlIGNyZWRlbnRpYWxzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzdWl0YWJsZSBmb3JtIG9uIHRoZSBzaWduIGluIHBhZ2UuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHNwZWNpZnkgd2hhdGV2ZXIgZmllbGRzIHlvdSBhcmUgZXhwZWN0aW5nIHRvIGJlIHN1Ym1pdHRlZC5cbiAgICAgICAgICAgIC8vIGUuZy4gZG9tYWluLCB1c2VybmFtZSwgcGFzc3dvcmQsIDJGQSB0b2tlbiwgZXRjLlxuICAgICAgICAgICAgLy8gWW91IGNhbiBwYXNzIGFueSBIVE1MIGF0dHJpYnV0ZSB0byB0aGUgPGlucHV0PiB0YWcgdGhyb3VnaCB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgICAgZW1haWw6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJFbWFpbCBBZGRyZXNzXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJlbWFpbFwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIllvdXIgZW1haWwgYWRkcmVzc1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlBhc3N3b3JkXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIllvdXIgcGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdG90cENvZGU6IHsgbGFiZWw6IFwiVHdvLWZhY3RvciBDb2RlXCIsIHR5cGU6IFwiaW5wdXRcIiwgcGxhY2Vob2xkZXI6IFwiQ29kZSBmcm9tIGF1dGhlbnRpY2F0b3IgYXBwXCIgfSxcbiAgICAgICAgICAgICAgYmFja3VwQ29kZTogeyBsYWJlbDogXCJCYWNrdXAgQ29kZVwiLCB0eXBlOiBcImlucHV0XCIsIHBsYWNlaG9sZGVyOiBcIlR3by1mYWN0b3IgYmFja3VwIGNvZGVcIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGF1dGhvcml6ZShjcmVkZW50aWFscywgX3JlcSkge1xuICAgICAgICAgICAgICBjb25zdCBhZG1pbkNsaWVudCA9ICBnZXRBcHBjb25kYUNsaWVudFN5bmMoKTtcbiAgICAgICAgICAgICAgY29uc3QgYWNjb3VudFNlcnZpY2UgPSBuZXcgQWNjb3VudFNlcnZpY2UoYWRtaW5DbGllbnQpO1xuICAgICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gYXdhaXQgYWNjb3VudFNlcnZpY2UuQ3JlZGVudGlhbExvZ2luKGNyZWRlbnRpYWxzIGFzIGFueSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIENyZWRlbnRpYWxzUHJvdmlkZXIoe1xuICAgICAgICAgICAgaWQ6IFwidG9rZW5cIixcbiAgICAgICAgICAgIC8vIFRoZSBuYW1lIHRvIGRpc3BsYXkgb24gdGhlIHNpZ24gaW4gZm9ybSAoZS5nLiBcIlNpZ24gaW4gd2l0aC4uLlwiKVxuICAgICAgICAgICAgbmFtZTogXCJUb2tlblwiLFxuICAgICAgICAgICAgLy8gVGhlIGNyZWRlbnRpYWxzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzdWl0YWJsZSBmb3JtIG9uIHRoZSBzaWduIGluIHBhZ2UuXG4gICAgICAgICAgICAvLyBZb3UgY2FuIHNwZWNpZnkgd2hhdGV2ZXIgZmllbGRzIHlvdSBhcmUgZXhwZWN0aW5nIHRvIGJlIHN1Ym1pdHRlZC5cbiAgICAgICAgICAgIC8vIGUuZy4gZG9tYWluLCB1c2VybmFtZSwgcGFzc3dvcmQsIDJGQSB0b2tlbiwgZXRjLlxuICAgICAgICAgICAgLy8gWW91IGNhbiBwYXNzIGFueSBIVE1MIGF0dHJpYnV0ZSB0byB0aGUgPGlucHV0PiB0YWcgdGhyb3VnaCB0aGUgb2JqZWN0LlxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICAgICAgdG9rZW46IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJWZXJpZmljYXRpb24gVG9rZW5cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFzeW5jIGF1dGhvcml6ZShjcmVkZW50aWFscywgX3JlcSkge1xuICAgICAgICAgICAgICBjb25zdCBhZG1pbkNsaWVudCA9ICBnZXRBcHBjb25kYUNsaWVudFN5bmMoKTtcbiAgICAgICAgICAgICAgY29uc3QgYWNjb3VudFNlcnZpY2UgPSBuZXcgQWNjb3VudFNlcnZpY2UoYWRtaW5DbGllbnQpO1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IGNyZWRlbnRpYWxzPy50b2tlbjtcbiAgICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGFjY291bnRTZXJ2aWNlLlRva2VuTG9naW4oe3Rva2VuOiB0b2tlbiF9KTtcbiAgICAgIFxuICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gQ29uZGl0aW9uYWxseSBhZGQgZW50ZXJwcmlzZSBTU08gcHJvdmlkZXJzXG4gICAgICAgICAvLyAuLi4oRU5URVJQUklTRV9MSUNFTlNFX0tFWSA/IGdldFNTT1Byb3ZpZGVycygpIDogW10pLFxuICAgICAgICBdLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBhc3luYyBqd3QoeyB0b2tlbiB9KSB7XG4gICAgICAgICAgICBjb25zdCBhZG1pbkNsaWVudCA9ICBnZXRBcHBjb25kYUNsaWVudFN5bmMoKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnRTZXJ2aWNlID0gbmV3IEFjY291bnRTZXJ2aWNlKGFkbWluQ2xpZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGFjY291bnRTZXJ2aWNlLkdldFVzZXJCeUVtYWlsKHtlbWFpbDogdG9rZW4/LmVtYWlsIX0pO1xuICAgICAgXG4gICAgICAgICAgICBpZiAoIWV4aXN0aW5nVXNlcikge1xuICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICBcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnRva2VuLFxuICAgICAgICAgICAgICBwcm9maWxlOiB7IGlkOiBleGlzdGluZ1VzZXIuaWQgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyBzZXNzaW9uKHsgc2Vzc2lvbiwgdG9rZW4gfSkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgc2Vzc2lvbi51c2VyLmlkID0gdG9rZW4/LmlkO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgc2Vzc2lvbi51c2VyID0gdG9rZW4ucHJvZmlsZTtcbiAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb247XG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyBzaWduSW4oeyB1c2VyLCBhY2NvdW50IH06IHsgdXNlcjogVFVzZXI7IGFjY291bnQ6IEFjY291bnQgfSkge1xuICAgICAgICAgICAgaWYgKGFjY291bnQ/LnByb3ZpZGVyID09PSBcImNyZWRlbnRpYWxzXCIgfHwgYWNjb3VudD8ucHJvdmlkZXIgPT09IFwidG9rZW5cIikge1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiB1c2VyJ3MgZW1haWwgaXMgdmVyaWZpZWQgb3Igbm90XG4gICAgICAgICAgICAgIGlmICghdXNlci5lbWFpbFZlcmlmaWVkICYmICFFTUFJTF9WRVJJRklDQVRJT05fRElTQUJMRUQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbWFpbCBWZXJpZmljYXRpb24gaXMgUGVuZGluZ1wiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGlmIChFTlRFUlBSSVNFX0xJQ0VOU0VfS0VZKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTU09DYWxsYmFjayh7IHVzZXIsIGFjY291bnQgfSk7XG4gICAgICAgICAgICB9ICovXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwYWdlczoge1xuICAgICAgICAgIHNpZ25JbjogXCIvYXV0aC9sb2dpblwiLFxuICAgICAgICAgIHNpZ25PdXQ6IFwiL2F1dGgvbG9nb3V0XCIsXG4gICAgICAgICAgZXJyb3I6IFwiL2F1dGgvbG9naW5cIiwgLy8gRXJyb3IgY29kZSBwYXNzZWQgaW4gcXVlcnkgc3RyaW5nIGFzID9lcnJvcj1cbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn0pKCk7XG4iXX0=
@@ -1,3 +0,0 @@
1
- export * from "./actionClient";
2
- export * from "./auth";
3
- export * from "./nextAuthHandler";
@@ -1,4 +0,0 @@
1
- export * from "./actionClient";
2
- export * from "./auth";
3
- export * from "./nextAuthHandler";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWN0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hY3Rpb25DbGllbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2F1dGhcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25leHRBdXRoSGFuZGxlclwiO1xuIl19
@@ -1 +0,0 @@
1
- export declare const getHandler: () => any;
@@ -1,6 +0,0 @@
1
- import NextAuth from "next-auth";
2
- import { authOptions } from "./authOptions";
3
- export const getHandler = () => {
4
- return NextAuth(authOptions());
5
- };
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dEF1dGhIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvbmV4dEF1dGhIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7SUFDM0IsT0FBTyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQTtBQUNsQyxDQUFDLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IE5leHRBdXRoIGZyb20gXCJuZXh0LWF1dGhcIjtcbmltcG9ydCB7IGF1dGhPcHRpb25zIH0gZnJvbSBcIi4vYXV0aE9wdGlvbnNcIjtcblxuZXhwb3J0IGNvbnN0IGdldEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIE5leHRBdXRoKGF1dGhPcHRpb25zKCkpXG59IDtcblxuIl19
@@ -1 +0,0 @@
1
- export declare function Cache(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;