@n8n/stores 2.32.2 → 2.34.0

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 (106) hide show
  1. package/dist/cloudPlan.store.cjs +7 -0
  2. package/dist/cloudPlan.store.d.cts +534 -0
  3. package/dist/cloudPlan.store.d.mts +534 -0
  4. package/dist/cloudPlan.store.mjs +7 -0
  5. package/dist/cloudPlan2.store.cjs +247 -0
  6. package/dist/cloudPlan2.store.cjs.map +1 -0
  7. package/dist/cloudPlan2.store.mjs +242 -0
  8. package/dist/cloudPlan2.store.mjs.map +1 -0
  9. package/dist/composables/useBasePageRedirectionHelper.cjs +87 -0
  10. package/dist/composables/useBasePageRedirectionHelper.cjs.map +1 -0
  11. package/dist/composables/useBasePageRedirectionHelper.d.cts +16 -0
  12. package/dist/composables/useBasePageRedirectionHelper.d.mts +16 -0
  13. package/dist/composables/useBasePageRedirectionHelper.mjs +87 -0
  14. package/dist/composables/useBasePageRedirectionHelper.mjs.map +1 -0
  15. package/dist/constants2.cjs +2 -0
  16. package/dist/constants2.cjs.map +1 -1
  17. package/dist/constants2.d.cts +2 -0
  18. package/dist/constants2.d.mts +2 -0
  19. package/dist/constants2.mjs +2 -0
  20. package/dist/constants2.mjs.map +1 -1
  21. package/dist/invitation.api.cjs +4 -0
  22. package/dist/invitation.api.d.cts +2 -0
  23. package/dist/invitation.api.d.mts +2 -0
  24. package/dist/invitation.api.mjs +3 -0
  25. package/dist/invitation2.api.cjs +26 -0
  26. package/dist/invitation2.api.cjs.map +1 -0
  27. package/dist/invitation2.api.d.cts +30 -0
  28. package/dist/invitation2.api.d.mts +30 -0
  29. package/dist/invitation2.api.mjs +14 -0
  30. package/dist/invitation2.api.mjs.map +1 -0
  31. package/dist/modalOpeners.cjs +0 -0
  32. package/dist/modalOpeners.d.cts +2 -0
  33. package/dist/modalOpeners.d.mts +2 -0
  34. package/dist/modalOpeners.mjs +1 -0
  35. package/dist/modalOpeners2.d.cts +11 -0
  36. package/dist/modalOpeners2.d.mts +11 -0
  37. package/dist/notifications.store.cjs +27 -0
  38. package/dist/notifications.store.cjs.map +1 -0
  39. package/dist/notifications.store.d.cts +15 -0
  40. package/dist/notifications.store.d.mts +15 -0
  41. package/dist/notifications.store.mjs +26 -0
  42. package/dist/notifications.store.mjs.map +1 -0
  43. package/dist/onboarding.api.cjs +3 -0
  44. package/dist/onboarding.api.d.cts +7 -0
  45. package/dist/onboarding.api.d.mts +7 -0
  46. package/dist/onboarding.api.mjs +3 -0
  47. package/dist/onboarding2.api.cjs +24 -0
  48. package/dist/onboarding2.api.cjs.map +1 -0
  49. package/dist/onboarding2.api.mjs +18 -0
  50. package/dist/onboarding2.api.mjs.map +1 -0
  51. package/dist/pageRedirection.d.cts +6 -0
  52. package/dist/pageRedirection.d.mts +6 -0
  53. package/dist/rbac.store.cjs +2 -1
  54. package/dist/rbac.store.cjs.map +1 -1
  55. package/dist/rbac.store.d.cts +123 -123
  56. package/dist/rbac.store.d.mts +124 -124
  57. package/dist/rbac.store.mjs +1 -1
  58. package/dist/roles.store.cjs +88 -0
  59. package/dist/roles.store.cjs.map +1 -0
  60. package/dist/roles.store.d.cts +637 -0
  61. package/dist/roles.store.d.mts +637 -0
  62. package/dist/roles.store.mjs +87 -0
  63. package/dist/roles.store.mjs.map +1 -0
  64. package/dist/settings.store.cjs +6 -0
  65. package/dist/settings.store.d.cts +3801 -0
  66. package/dist/settings.store.d.mts +3801 -0
  67. package/dist/settings.store.mjs +6 -0
  68. package/dist/settings2.store.cjs +387 -0
  69. package/dist/settings2.store.cjs.map +1 -0
  70. package/dist/settings2.store.mjs +348 -0
  71. package/dist/settings2.store.mjs.map +1 -0
  72. package/dist/types/pageRedirection.cjs +0 -0
  73. package/dist/types/pageRedirection.d.cts +2 -0
  74. package/dist/types/pageRedirection.d.mts +2 -0
  75. package/dist/types/pageRedirection.mjs +1 -0
  76. package/dist/useAgentRequestStore.cjs +1 -0
  77. package/dist/useAgentRequestStore.cjs.map +1 -1
  78. package/dist/useAgentRequestStore.d.cts +1 -1
  79. package/dist/useAgentRequestStore.d.mts +6 -6
  80. package/dist/useRootStore.cjs +4 -182
  81. package/dist/useRootStore.d.cts +73 -73
  82. package/dist/useRootStore.d.mts +73 -73
  83. package/dist/useRootStore.mjs +4 -182
  84. package/dist/useRootStore2.cjs +189 -0
  85. package/dist/useRootStore2.cjs.map +1 -0
  86. package/dist/useRootStore2.mjs +183 -0
  87. package/dist/useRootStore2.mjs.map +1 -0
  88. package/dist/users.store.cjs +9 -0
  89. package/dist/users.store.d.cts +552 -0
  90. package/dist/users.store.d.mts +552 -0
  91. package/dist/users.store.mjs +9 -0
  92. package/dist/users2.store.cjs +362 -0
  93. package/dist/users2.store.cjs.map +1 -0
  94. package/dist/users2.store.mjs +353 -0
  95. package/dist/users2.store.mjs.map +1 -0
  96. package/dist/versions.store.cjs +11 -0
  97. package/dist/versions.store.d.cts +384 -0
  98. package/dist/versions.store.d.mts +384 -0
  99. package/dist/versions.store.mjs +10 -0
  100. package/dist/versions2.store.cjs +230 -0
  101. package/dist/versions2.store.cjs.map +1 -0
  102. package/dist/versions2.store.mjs +218 -0
  103. package/dist/versions2.store.mjs.map +1 -0
  104. package/package.json +13 -6
  105. package/dist/useRootStore.cjs.map +0 -1
  106. package/dist/useRootStore.mjs.map +0 -1
@@ -0,0 +1,353 @@
1
+ import { t as STORES } from "./constants2.mjs";
2
+ import { t as useRootStore } from "./useRootStore2.mjs";
3
+ import { t as useSettingsStore } from "./settings2.store.mjs";
4
+ import { n as inviteUsers, t as acceptInvitation } from "./invitation2.api.mjs";
5
+ import { t as submitEmailOnSignup } from "./onboarding2.api.mjs";
6
+ import * as cloudApi from "@n8n/rest-api-client/api/cloudPlans";
7
+ import { defineStore } from "pinia";
8
+ import { computed, ref } from "vue";
9
+ import { ROLE } from "@n8n/api-types";
10
+ import { useAsyncState } from "@vueuse/core";
11
+ import { BROWSER_ID_STORAGE_KEY } from "@n8n/constants";
12
+ import { PERSONALIZATION_MODAL_KEY } from "@n8n/frontend-constants/users";
13
+ import * as mfaApi from "@n8n/rest-api-client/api/mfa";
14
+ import * as ssoApi from "@n8n/rest-api-client/api/sso";
15
+ import * as usersApi from "@n8n/rest-api-client/api/users";
16
+
17
+ //#region src/users.store.ts
18
+ const _isPendingUser = (user) => !!user?.isPending;
19
+ const _isInstanceOwner = (user) => user?.role === ROLE.Owner;
20
+ const _isDefaultUser = (user) => _isInstanceOwner(user) && _isPendingUser(user);
21
+ const _isAdmin = (user) => user?.role === ROLE.Admin;
22
+ const useUsersStore = defineStore(STORES.USERS, () => {
23
+ const initialized = ref(false);
24
+ const currentUserId = ref(null);
25
+ const usersById = ref({});
26
+ const userQuota = ref(-1);
27
+ const loginHooks = ref([]);
28
+ const logoutHooks = ref([]);
29
+ const warnModalOpenerMissing = (action) => {
30
+ if (import.meta.env.DEV) console.warn(`[users.store] ${action} called before modal openers were registered; ignoring. Call registerModalOpeners() at app bootstrap.`);
31
+ };
32
+ const modalOpeners = ref({
33
+ openModal: (name) => warnModalOpenerMissing(`openModal(${String(name)})`),
34
+ openModalWithData: (payload) => warnModalOpenerMissing(`openModalWithData(${String(payload.name)})`)
35
+ });
36
+ const registerModalOpeners = (openers) => {
37
+ modalOpeners.value = openers;
38
+ };
39
+ const canListUsers = ref(() => false);
40
+ const setPermissionsResolvers = (resolvers) => {
41
+ canListUsers.value = resolvers.listUsers;
42
+ };
43
+ const rootStore = useRootStore();
44
+ const settingsStore = useSettingsStore();
45
+ const allUsers = computed(() => Object.values(usersById.value));
46
+ const currentUser = computed(() => currentUserId.value ? usersById.value[currentUserId.value] : null);
47
+ const userActivated = computed(() => Boolean(currentUser.value?.settings?.userActivated));
48
+ const isDefaultUser = computed(() => _isDefaultUser(currentUser.value));
49
+ const isInstanceOwner = computed(() => _isInstanceOwner(currentUser.value));
50
+ const isAdmin = computed(() => _isAdmin(currentUser.value));
51
+ const isAdminOrOwner = computed(() => isInstanceOwner.value || isAdmin.value);
52
+ const mfaEnabled = computed(() => currentUser.value?.mfaEnabled ?? false);
53
+ const globalRoleName = computed(() => currentUser.value?.role ?? "default");
54
+ const userClaimedAiCredits = computed(() => currentUser.value?.settings?.userClaimedAiCredits);
55
+ const isEasyAIWorkflowOnboardingDone = computed(() => Boolean(currentUser.value?.settings?.easyAIWorkflowOnboarded));
56
+ const canUserUpdateVersion = computed(() => {
57
+ return isInstanceOwner.value;
58
+ });
59
+ const setEasyAIWorkflowOnboardingDone = () => {
60
+ if (currentUser.value?.settings) currentUser.value.settings.easyAIWorkflowOnboarded = true;
61
+ };
62
+ const isCalloutDismissed = (callout) => Boolean(currentUser.value?.settings?.dismissedCallouts?.[callout]);
63
+ const setCalloutDismissed = (callout) => {
64
+ if (currentUser.value?.settings) {
65
+ currentUser.value.settings.dismissedCallouts ??= {};
66
+ currentUser.value.settings.dismissedCallouts[callout] = true;
67
+ }
68
+ };
69
+ const usersLimitNotReached = computed(() => userQuota.value === -1 || userQuota.value > allUsers.value.length);
70
+ const addUsers = (newUsers) => {
71
+ newUsers.forEach((userResponse) => {
72
+ const updatedUser = {
73
+ ...usersById.value[userResponse.id] || {},
74
+ ...userResponse
75
+ };
76
+ const user = {
77
+ ...updatedUser,
78
+ fullName: userResponse.firstName ? `${updatedUser.firstName} ${updatedUser.lastName ?? ""}` : void 0,
79
+ isDefaultUser: _isDefaultUser(updatedUser),
80
+ isPendingUser: _isPendingUser(updatedUser)
81
+ };
82
+ usersById.value = {
83
+ ...usersById.value,
84
+ [user.id]: user
85
+ };
86
+ });
87
+ };
88
+ const setCurrentUser = async (user) => {
89
+ addUsers([user]);
90
+ currentUserId.value = user.id;
91
+ for (const hook of loginHooks.value) try {
92
+ await hook(user);
93
+ } catch (error) {
94
+ console.error("Error executing login hook:", error);
95
+ }
96
+ };
97
+ const loginWithCookie = async () => {
98
+ const user = await usersApi.loginCurrentUser(rootStore.restApiContext);
99
+ if (!user) return;
100
+ await setCurrentUser(user);
101
+ };
102
+ const initialize = async () => {
103
+ if (initialized.value) return;
104
+ try {
105
+ await loginWithCookie();
106
+ initialized.value = true;
107
+ } catch {}
108
+ };
109
+ const unsetCurrentUser = () => {
110
+ currentUserId.value = null;
111
+ };
112
+ const deleteUserById = (userId) => {
113
+ const { [userId]: _, ...rest } = usersById.value;
114
+ usersById.value = rest;
115
+ };
116
+ const setPersonalizationAnswers = (answers) => {
117
+ if (!currentUser.value) return;
118
+ usersById.value = {
119
+ ...usersById.value,
120
+ [currentUser.value.id]: {
121
+ ...currentUser.value,
122
+ personalizationAnswers: answers
123
+ }
124
+ };
125
+ };
126
+ const loginWithCreds = async (params) => {
127
+ const user = await usersApi.login(rootStore.restApiContext, params);
128
+ if (!user) return;
129
+ await setCurrentUser(user);
130
+ };
131
+ const registerLoginHook = (hook) => {
132
+ loginHooks.value.push(hook);
133
+ };
134
+ const registerLogoutHook = (hook) => {
135
+ logoutHooks.value.push(hook);
136
+ };
137
+ const logout = async (options) => {
138
+ let redirectUrl = null;
139
+ if (options?.viaOidc) try {
140
+ ({redirectUrl} = await ssoApi.oidcLogout(rootStore.restApiContext));
141
+ } catch {
142
+ await usersApi.logout(rootStore.restApiContext);
143
+ }
144
+ else await usersApi.logout(rootStore.restApiContext);
145
+ unsetCurrentUser();
146
+ for (const hook of logoutHooks.value) try {
147
+ await hook();
148
+ } catch (error) {
149
+ console.error("Error executing logout hook:", error);
150
+ }
151
+ localStorage.removeItem(BROWSER_ID_STORAGE_KEY);
152
+ return { redirectUrl };
153
+ };
154
+ const createOwner = async (params) => {
155
+ const user = await usersApi.setupOwner(rootStore.restApiContext, params);
156
+ if (user) {
157
+ await setCurrentUser(user);
158
+ settingsStore.stopShowingSetupPage();
159
+ }
160
+ };
161
+ const validateSignupToken = async (params) => {
162
+ return await usersApi.validateSignupToken(rootStore.restApiContext, params);
163
+ };
164
+ const acceptInvitation$1 = async (params) => {
165
+ const user = await acceptInvitation(rootStore.restApiContext, params);
166
+ if (user) await setCurrentUser(user);
167
+ };
168
+ const sendForgotPasswordEmail = async (params) => {
169
+ await usersApi.sendForgotPasswordEmail(rootStore.restApiContext, params);
170
+ };
171
+ const validatePasswordToken = async (params) => {
172
+ await usersApi.validatePasswordToken(rootStore.restApiContext, params);
173
+ };
174
+ const changePassword = async (params) => {
175
+ await usersApi.changePassword(rootStore.restApiContext, params);
176
+ };
177
+ const updateUser = async (params) => {
178
+ const user = await usersApi.updateCurrentUser(rootStore.restApiContext, params);
179
+ addUsers([user]);
180
+ return user;
181
+ };
182
+ const updateUserName = async (params) => {
183
+ if (!currentUser.value) return;
184
+ return await updateUser({
185
+ email: currentUser.value.email,
186
+ ...params
187
+ });
188
+ };
189
+ const updateUserSettings = async (settings) => {
190
+ const updatedSettings = await usersApi.updateCurrentUserSettings(rootStore.restApiContext, settings);
191
+ if (currentUser.value) {
192
+ currentUser.value.settings = updatedSettings;
193
+ addUsers([currentUser.value]);
194
+ }
195
+ };
196
+ const updateOtherUserSettings = async (userId, settings) => {
197
+ await usersApi.updateOtherUserSettings(rootStore.restApiContext, userId, settings);
198
+ };
199
+ const updateCurrentUserPassword = async (params) => {
200
+ await usersApi.updateCurrentUserPassword(rootStore.restApiContext, params);
201
+ };
202
+ const deleteUser = async (params) => {
203
+ await usersApi.deleteUser(rootStore.restApiContext, params);
204
+ deleteUserById(params.id);
205
+ };
206
+ const fetchUsers = async ({ take, skip, filter } = {}) => {
207
+ if (!canListUsers.value()) return;
208
+ const { items } = await usersApi.getUsers(rootStore.restApiContext, {
209
+ take: take ?? 50,
210
+ skip: skip ?? 0,
211
+ filter
212
+ });
213
+ addUsers(items);
214
+ };
215
+ const inviteUsers$1 = async (params) => {
216
+ const invitedUsers = await inviteUsers(rootStore.restApiContext, params);
217
+ addUsers(invitedUsers.map(({ user }) => ({
218
+ isPending: true,
219
+ ...user
220
+ })));
221
+ return invitedUsers;
222
+ };
223
+ const reinviteUser = async ({ email, role }) => {
224
+ const invitationResponse = await inviteUsers(rootStore.restApiContext, [{
225
+ email,
226
+ role
227
+ }]);
228
+ if (!invitationResponse[0].user.emailSent) throw Error(invitationResponse[0].error);
229
+ };
230
+ const getUserPasswordResetLink = async (params) => {
231
+ return await usersApi.getPasswordResetLink(rootStore.restApiContext, params);
232
+ };
233
+ const generateInviteLink = async (params) => {
234
+ return await usersApi.generateInviteLink(rootStore.restApiContext, params);
235
+ };
236
+ const submitPersonalizationSurvey = async (results) => {
237
+ await usersApi.submitPersonalizationSurvey(rootStore.restApiContext, results);
238
+ setPersonalizationAnswers(results);
239
+ };
240
+ const showPersonalizationSurvey = () => {
241
+ if (settingsStore.isPersonalizationSurveyEnabled && currentUser.value && !currentUser.value.personalizationAnswers) modalOpeners.value.openModal(PERSONALIZATION_MODAL_KEY);
242
+ };
243
+ const fetchMfaQR = async () => {
244
+ return await mfaApi.getMfaQR(rootStore.restApiContext);
245
+ };
246
+ const verifyMfaCode = async (data) => {
247
+ return await mfaApi.verifyMfaCode(rootStore.restApiContext, data);
248
+ };
249
+ const canEnableMFA = async () => {
250
+ return await mfaApi.canEnableMFA(rootStore.restApiContext);
251
+ };
252
+ const enableMfa = async (data) => {
253
+ await mfaApi.enableMfa(rootStore.restApiContext, data);
254
+ if (currentUser.value) currentUser.value.mfaEnabled = true;
255
+ };
256
+ const disableMfa = async (data) => {
257
+ await mfaApi.disableMfa(rootStore.restApiContext, data);
258
+ if (currentUser.value) currentUser.value.mfaEnabled = false;
259
+ };
260
+ const updateEnforceMfa = async (enforce) => {
261
+ await mfaApi.updateEnforceMfa(rootStore.restApiContext, enforce);
262
+ settingsStore.isMFAEnforced = enforce;
263
+ };
264
+ const sendConfirmationEmail = async () => {
265
+ await cloudApi.sendConfirmationEmail(rootStore.restApiContext);
266
+ };
267
+ const updateGlobalRole = async ({ id, newRoleName }) => {
268
+ await usersApi.updateGlobalRole(rootStore.restApiContext, {
269
+ id,
270
+ newRoleName
271
+ });
272
+ await fetchUsers({ filter: { ids: [id] } });
273
+ };
274
+ const submitContactEmail = async (email, agree) => {
275
+ if (currentUser.value) return await submitEmailOnSignup(rootStore.instanceId, currentUser.value, email ?? currentUser.value.email, agree);
276
+ return null;
277
+ };
278
+ const usersList = useAsyncState(async (filter) => await usersApi.getUsers(rootStore.restApiContext, filter), {
279
+ count: 0,
280
+ items: []
281
+ }, {
282
+ immediate: false,
283
+ resetOnExecute: false
284
+ });
285
+ const setUserQuota = (quota) => {
286
+ if (typeof quota !== "undefined") userQuota.value = quota;
287
+ };
288
+ return {
289
+ initialized,
290
+ currentUserId,
291
+ usersById,
292
+ allUsers,
293
+ currentUser,
294
+ userActivated,
295
+ isDefaultUser,
296
+ isInstanceOwner,
297
+ isAdmin,
298
+ isAdminOrOwner,
299
+ mfaEnabled,
300
+ globalRoleName,
301
+ userClaimedAiCredits,
302
+ isEasyAIWorkflowOnboardingDone,
303
+ canUserUpdateVersion,
304
+ usersLimitNotReached,
305
+ addUsers,
306
+ loginWithCookie,
307
+ initialize,
308
+ setPersonalizationAnswers,
309
+ loginWithCreds,
310
+ logout,
311
+ registerLoginHook,
312
+ registerLogoutHook,
313
+ registerModalOpeners,
314
+ setPermissionsResolvers,
315
+ createOwner,
316
+ validateSignupToken,
317
+ acceptInvitation: acceptInvitation$1,
318
+ sendForgotPasswordEmail,
319
+ validatePasswordToken,
320
+ changePassword,
321
+ updateUser,
322
+ updateUserName,
323
+ updateUserSettings,
324
+ updateOtherUserSettings,
325
+ updateCurrentUserPassword,
326
+ deleteUser,
327
+ fetchUsers,
328
+ inviteUsers: inviteUsers$1,
329
+ reinviteUser,
330
+ getUserPasswordResetLink,
331
+ generateInviteLink,
332
+ submitPersonalizationSurvey,
333
+ showPersonalizationSurvey,
334
+ fetchMfaQR,
335
+ verifyMfaCode,
336
+ enableMfa,
337
+ disableMfa,
338
+ updateEnforceMfa,
339
+ canEnableMFA,
340
+ sendConfirmationEmail,
341
+ updateGlobalRole,
342
+ setEasyAIWorkflowOnboardingDone,
343
+ isCalloutDismissed,
344
+ setCalloutDismissed,
345
+ submitContactEmail,
346
+ setUserQuota,
347
+ usersList
348
+ };
349
+ });
350
+
351
+ //#endregion
352
+ export { useUsersStore as t };
353
+ //# sourceMappingURL=users2.store.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users2.store.mjs","names":["user: IUser","redirectUrl: string | null","acceptInvitation","invitationsApi.acceptInvitation","inviteUsers","invitationsApi.inviteUsers","onboardingApi.submitEmailOnSignup"],"sources":["../src/users.store.ts"],"sourcesContent":["import {\n\ttype LoginRequestDto,\n\ttype PasswordUpdateRequestDto,\n\ttype SettingsUpdateRequestDto,\n\ttype UserSelfSettingsUpdateRequestDto,\n\ttype UserUpdateRequestDto,\n\ttype User,\n\tROLE,\n\ttype UsersListFilterDto,\n} from '@n8n/api-types';\nimport { BROWSER_ID_STORAGE_KEY } from '@n8n/constants';\nimport { PERSONALIZATION_MODAL_KEY } from '@n8n/frontend-constants/users';\nimport type { AssignableGlobalRole } from '@n8n/permissions';\nimport * as cloudApi from '@n8n/rest-api-client/api/cloudPlans';\nimport * as mfaApi from '@n8n/rest-api-client/api/mfa';\nimport * as ssoApi from '@n8n/rest-api-client/api/sso';\nimport type {\n\tUpdateGlobalRolePayload,\n\tIUserResponse,\n\tIUser,\n\tCurrentUserResponse,\n\tIPersonalizationLatestVersion,\n} from '@n8n/rest-api-client/api/users';\nimport * as usersApi from '@n8n/rest-api-client/api/users';\nimport { useAsyncState } from '@vueuse/core';\nimport { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\n\nimport { STORES } from './constants';\nimport * as invitationsApi from './invitation.api';\nimport type { ModalOpeners } from './modalOpeners';\nimport * as onboardingApi from './onboarding.api';\nimport { useSettingsStore } from './settings.store';\nimport { useRootStore } from './useRootStore';\n\nconst _isPendingUser = (user: IUserResponse | null) => !!user?.isPending;\nconst _isInstanceOwner = (user: IUserResponse | null) => user?.role === ROLE.Owner;\nconst _isDefaultUser = (user: IUserResponse | null) =>\n\t_isInstanceOwner(user) && _isPendingUser(user);\nconst _isAdmin = (user: IUserResponse | null) => user?.role === ROLE.Admin;\n\nexport type LoginHook = (user: CurrentUserResponse) => void | Promise<void>;\ntype LogoutHook = () => void | Promise<void>;\n\nexport const useUsersStore = defineStore(STORES.USERS, () => {\n\tconst initialized = ref(false);\n\tconst currentUserId = ref<string | null>(null);\n\tconst usersById = ref<Record<string, IUser>>({});\n\tconst userQuota = ref<number>(-1);\n\n\tconst loginHooks = ref<LoginHook[]>([]);\n\tconst logoutHooks = ref<LogoutHook[]>([]);\n\n\t// Modal-open actions, registered at app bootstrap (see app/init.ts). Until then\n\t// they no-op — warning in dev — so the store never reaches into `ui.store`. Shares\n\t// the `ModalOpeners` contract with the other decoupled stores; this store currently\n\t// uses only `openModal`.\n\tconst warnModalOpenerMissing = (action: string) => {\n\t\tif (import.meta.env.DEV) {\n\t\t\tconsole.warn(\n\t\t\t\t`[users.store] ${action} called before modal openers were registered; ignoring. Call registerModalOpeners() at app bootstrap.`,\n\t\t\t);\n\t\t}\n\t};\n\tconst modalOpeners = ref<ModalOpeners>({\n\t\topenModal: (name) => warnModalOpenerMissing(`openModal(${String(name)})`),\n\t\topenModalWithData: (payload) =>\n\t\t\twarnModalOpenerMissing(`openModalWithData(${String(payload.name)})`),\n\t});\n\tconst registerModalOpeners = (openers: ModalOpeners) => {\n\t\tmodalOpeners.value = openers;\n\t};\n\n\t// App-provided capabilities, registered at bootstrap (see app/init.ts) so the store\n\t// carries no `@/app` dependency. Both fall back to safe no-ops before registration.\n\n\t// Permission checks, keyed by capability (app RBAC checks; extend the object as\n\t// more permissions need resolving). `listUsers` gates the `user:list` scope.\n\tconst canListUsers = ref<() => boolean>(() => false);\n\tconst setPermissionsResolvers = (resolvers: { listUsers: () => boolean }) => {\n\t\tcanListUsers.value = resolvers.listUsers;\n\t};\n\n\t// Stores\n\n\tconst rootStore = useRootStore();\n\tconst settingsStore = useSettingsStore();\n\n\t// Computed\n\n\tconst allUsers = computed(() => Object.values(usersById.value));\n\n\tconst currentUser = computed(() =>\n\t\tcurrentUserId.value ? usersById.value[currentUserId.value] : null,\n\t);\n\n\tconst userActivated = computed(() => Boolean(currentUser.value?.settings?.userActivated));\n\n\tconst isDefaultUser = computed(() => _isDefaultUser(currentUser.value));\n\n\tconst isInstanceOwner = computed(() => _isInstanceOwner(currentUser.value));\n\n\tconst isAdmin = computed(() => _isAdmin(currentUser.value));\n\n\tconst isAdminOrOwner = computed(() => isInstanceOwner.value || isAdmin.value);\n\n\tconst mfaEnabled = computed(() => currentUser.value?.mfaEnabled ?? false);\n\n\tconst globalRoleName = computed(() => currentUser.value?.role ?? 'default');\n\n\tconst userClaimedAiCredits = computed(() => currentUser.value?.settings?.userClaimedAiCredits);\n\n\tconst isEasyAIWorkflowOnboardingDone = computed(() =>\n\t\tBoolean(currentUser.value?.settings?.easyAIWorkflowOnboarded),\n\t);\n\n\tconst canUserUpdateVersion = computed(() => {\n\t\treturn isInstanceOwner.value;\n\t});\n\n\tconst setEasyAIWorkflowOnboardingDone = () => {\n\t\tif (currentUser.value?.settings) {\n\t\t\tcurrentUser.value.settings.easyAIWorkflowOnboarded = true;\n\t\t}\n\t};\n\n\tconst isCalloutDismissed = (callout: string) =>\n\t\tBoolean(currentUser.value?.settings?.dismissedCallouts?.[callout]);\n\n\tconst setCalloutDismissed = (callout: string) => {\n\t\tif (currentUser.value?.settings) {\n\t\t\tcurrentUser.value.settings.dismissedCallouts ??= {};\n\n\t\t\tcurrentUser.value.settings.dismissedCallouts[callout] = true;\n\t\t}\n\t};\n\n\tconst usersLimitNotReached = computed(\n\t\t(): boolean => userQuota.value === -1 || userQuota.value > allUsers.value.length,\n\t);\n\n\t// Methods\n\n\tconst addUsers = (newUsers: User[]) => {\n\t\tnewUsers.forEach((userResponse) => {\n\t\t\tconst prevUser = usersById.value[userResponse.id] || {};\n\t\t\tconst updatedUser = {\n\t\t\t\t...prevUser,\n\t\t\t\t...userResponse,\n\t\t\t};\n\t\t\tconst user: IUser = {\n\t\t\t\t...updatedUser,\n\t\t\t\tfullName: userResponse.firstName\n\t\t\t\t\t? `${updatedUser.firstName} ${updatedUser.lastName ?? ''}`\n\t\t\t\t\t: undefined,\n\t\t\t\tisDefaultUser: _isDefaultUser(updatedUser),\n\t\t\t\tisPendingUser: _isPendingUser(updatedUser),\n\t\t\t};\n\n\t\t\tusersById.value = {\n\t\t\t\t...usersById.value,\n\t\t\t\t[user.id]: user,\n\t\t\t};\n\t\t});\n\t};\n\n\tconst setCurrentUser = async (user: CurrentUserResponse) => {\n\t\taddUsers([user]);\n\t\tcurrentUserId.value = user.id;\n\n\t\tfor (const hook of loginHooks.value) {\n\t\t\ttry {\n\t\t\t\tawait hook(user);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error executing login hook:', error);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst loginWithCookie = async () => {\n\t\tconst user = await usersApi.loginCurrentUser(rootStore.restApiContext);\n\t\tif (!user) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait setCurrentUser(user);\n\t};\n\n\tconst initialize = async () => {\n\t\tif (initialized.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait loginWithCookie();\n\t\t\tinitialized.value = true;\n\t\t} catch {\n\t\t\t// A missing or expired auth cookie before setup is expected; leave the store\n\t\t\t// uninitialized and let the caller proceed to the login/setup flow.\n\t\t}\n\t};\n\n\tconst unsetCurrentUser = () => {\n\t\tcurrentUserId.value = null;\n\t};\n\n\tconst deleteUserById = (userId: string) => {\n\t\tconst { [userId]: _, ...rest } = usersById.value;\n\t\tusersById.value = rest;\n\t};\n\n\tconst setPersonalizationAnswers = (answers: IPersonalizationLatestVersion) => {\n\t\tif (!currentUser.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tusersById.value = {\n\t\t\t...usersById.value,\n\t\t\t[currentUser.value.id]: {\n\t\t\t\t...currentUser.value,\n\t\t\t\tpersonalizationAnswers: answers,\n\t\t\t},\n\t\t};\n\t};\n\n\tconst loginWithCreds = async (params: LoginRequestDto) => {\n\t\tconst user = await usersApi.login(rootStore.restApiContext, params);\n\t\tif (!user) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait setCurrentUser(user);\n\t};\n\n\tconst registerLoginHook = (hook: LoginHook) => {\n\t\tloginHooks.value.push(hook);\n\t};\n\n\tconst registerLogoutHook = (hook: LogoutHook) => {\n\t\tlogoutHooks.value.push(hook);\n\t};\n\n\tconst logout = async (options?: { viaOidc?: boolean }) => {\n\t\tlet redirectUrl: string | null = null;\n\n\t\tif (options?.viaOidc) {\n\t\t\ttry {\n\t\t\t\t({ redirectUrl } = await ssoApi.oidcLogout(rootStore.restApiContext));\n\t\t\t} catch {\n\t\t\t\t// The OIDC logout endpoint may be unavailable (e.g. the license\n\t\t\t\t// lapsed since login). Fall back to the standard logout so the\n\t\t\t\t// n8n session is terminated in any case.\n\t\t\t\tawait usersApi.logout(rootStore.restApiContext);\n\t\t\t}\n\t\t} else {\n\t\t\tawait usersApi.logout(rootStore.restApiContext);\n\t\t}\n\n\t\tunsetCurrentUser();\n\n\t\tfor (const hook of logoutHooks.value) {\n\t\t\ttry {\n\t\t\t\tawait hook();\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Error executing logout hook:', error);\n\t\t\t}\n\t\t}\n\n\t\tlocalStorage.removeItem(BROWSER_ID_STORAGE_KEY);\n\n\t\treturn { redirectUrl };\n\t};\n\n\tconst createOwner = async (params: {\n\t\tfirstName: string;\n\t\tlastName: string;\n\t\temail: string;\n\t\tpassword: string;\n\t}) => {\n\t\tconst user = await usersApi.setupOwner(rootStore.restApiContext, params);\n\t\tif (user) {\n\t\t\tawait setCurrentUser(user);\n\t\t\tsettingsStore.stopShowingSetupPage();\n\t\t}\n\t};\n\n\tconst validateSignupToken = async (params: { token: string }) => {\n\t\treturn await usersApi.validateSignupToken(rootStore.restApiContext, params);\n\t};\n\n\tconst acceptInvitation = async (params: {\n\t\ttoken: string;\n\t\tfirstName: string;\n\t\tlastName: string;\n\t\tpassword: string;\n\t}) => {\n\t\tconst user = await invitationsApi.acceptInvitation(rootStore.restApiContext, params);\n\t\tif (user) {\n\t\t\tawait setCurrentUser(user);\n\t\t}\n\t};\n\n\tconst sendForgotPasswordEmail = async (params: { email: string }) => {\n\t\tawait usersApi.sendForgotPasswordEmail(rootStore.restApiContext, params);\n\t};\n\n\tconst validatePasswordToken = async (params: { token: string }) => {\n\t\tawait usersApi.validatePasswordToken(rootStore.restApiContext, params);\n\t};\n\n\tconst changePassword = async (params: { token: string; password: string; mfaCode?: string }) => {\n\t\tawait usersApi.changePassword(rootStore.restApiContext, params);\n\t};\n\n\tconst updateUser = async (params: UserUpdateRequestDto) => {\n\t\tconst user = await usersApi.updateCurrentUser(rootStore.restApiContext, params);\n\t\taddUsers([user]);\n\t\treturn user;\n\t};\n\n\tconst updateUserName = async (params: { firstName: string; lastName: string }) => {\n\t\tif (!currentUser.value) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn await updateUser({\n\t\t\temail: currentUser.value.email as string,\n\t\t\t...params,\n\t\t});\n\t};\n\n\tconst updateUserSettings = async (settings: UserSelfSettingsUpdateRequestDto) => {\n\t\tconst updatedSettings = await usersApi.updateCurrentUserSettings(\n\t\t\trootStore.restApiContext,\n\t\t\tsettings,\n\t\t);\n\t\tif (currentUser.value) {\n\t\t\tcurrentUser.value.settings = updatedSettings;\n\t\t\taddUsers([currentUser.value]);\n\t\t}\n\t};\n\n\tconst updateOtherUserSettings = async (userId: string, settings: SettingsUpdateRequestDto) => {\n\t\tawait usersApi.updateOtherUserSettings(rootStore.restApiContext, userId, settings);\n\t};\n\n\tconst updateCurrentUserPassword = async (params: PasswordUpdateRequestDto) => {\n\t\tawait usersApi.updateCurrentUserPassword(rootStore.restApiContext, params);\n\t};\n\n\tconst deleteUser = async (params: { id: string; transferId?: string }) => {\n\t\tawait usersApi.deleteUser(rootStore.restApiContext, params);\n\t\tdeleteUserById(params.id);\n\t};\n\n\tconst fetchUsers = async ({\n\t\ttake,\n\t\tskip,\n\t\tfilter,\n\t}: { take?: number; skip?: number; filter?: UsersListFilterDto['filter'] } = {}) => {\n\t\tif (!canListUsers.value()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { items } = await usersApi.getUsers(rootStore.restApiContext, {\n\t\t\ttake: take ?? 50,\n\t\t\tskip: skip ?? 0,\n\t\t\tfilter,\n\t\t});\n\t\taddUsers(items);\n\t};\n\n\tconst inviteUsers = async (params: Array<{ email: string; role: AssignableGlobalRole }>) => {\n\t\tconst invitedUsers = await invitationsApi.inviteUsers(rootStore.restApiContext, params);\n\t\taddUsers(\n\t\t\tinvitedUsers.map(({ user }) => ({\n\t\t\t\tisPending: true,\n\t\t\t\t...user,\n\t\t\t})),\n\t\t);\n\t\treturn invitedUsers;\n\t};\n\n\tconst reinviteUser = async ({ email, role }: { email: string; role: AssignableGlobalRole }) => {\n\t\tconst invitationResponse = await invitationsApi.inviteUsers(rootStore.restApiContext, [\n\t\t\t{ email, role },\n\t\t]);\n\t\tif (!invitationResponse[0].user.emailSent) {\n\t\t\tthrow Error(invitationResponse[0].error);\n\t\t}\n\t};\n\n\tconst getUserPasswordResetLink = async (params: { id: string }) => {\n\t\treturn await usersApi.getPasswordResetLink(rootStore.restApiContext, params);\n\t};\n\n\tconst generateInviteLink = async (params: { id: string }) => {\n\t\treturn await usersApi.generateInviteLink(rootStore.restApiContext, params);\n\t};\n\n\tconst submitPersonalizationSurvey = async (results: IPersonalizationLatestVersion) => {\n\t\tawait usersApi.submitPersonalizationSurvey(rootStore.restApiContext, results);\n\t\tsetPersonalizationAnswers(results);\n\t};\n\n\t// Synchronous: after the `ui.store` modal decoupling this only fires the injected\n\t// opener. All call sites invoke it fire-and-forget (`void ...`).\n\tconst showPersonalizationSurvey = () => {\n\t\tconst surveyEnabled = settingsStore.isPersonalizationSurveyEnabled;\n\t\tif (surveyEnabled && currentUser.value && !currentUser.value.personalizationAnswers) {\n\t\t\tmodalOpeners.value.openModal(PERSONALIZATION_MODAL_KEY);\n\t\t}\n\t};\n\n\tconst fetchMfaQR = async () => {\n\t\treturn await mfaApi.getMfaQR(rootStore.restApiContext);\n\t};\n\n\tconst verifyMfaCode = async (data: { mfaCode: string }) => {\n\t\treturn await mfaApi.verifyMfaCode(rootStore.restApiContext, data);\n\t};\n\n\tconst canEnableMFA = async () => {\n\t\treturn await mfaApi.canEnableMFA(rootStore.restApiContext);\n\t};\n\n\tconst enableMfa = async (data: { mfaCode: string }) => {\n\t\tawait mfaApi.enableMfa(rootStore.restApiContext, data);\n\t\tif (currentUser.value) {\n\t\t\tcurrentUser.value.mfaEnabled = true;\n\t\t}\n\t};\n\n\tconst disableMfa = async (data: mfaApi.DisableMfaParams) => {\n\t\tawait mfaApi.disableMfa(rootStore.restApiContext, data);\n\n\t\tif (currentUser.value) {\n\t\t\tcurrentUser.value.mfaEnabled = false;\n\t\t}\n\t};\n\n\tconst updateEnforceMfa = async (enforce: boolean) => {\n\t\tawait mfaApi.updateEnforceMfa(rootStore.restApiContext, enforce);\n\t\tsettingsStore.isMFAEnforced = enforce;\n\t};\n\n\tconst sendConfirmationEmail = async () => {\n\t\tawait cloudApi.sendConfirmationEmail(rootStore.restApiContext);\n\t};\n\n\tconst updateGlobalRole = async ({ id, newRoleName }: UpdateGlobalRolePayload) => {\n\t\tawait usersApi.updateGlobalRole(rootStore.restApiContext, { id, newRoleName });\n\t\tawait fetchUsers({ filter: { ids: [id] } });\n\t};\n\n\tconst submitContactEmail = async (email: string, agree: boolean) => {\n\t\tif (currentUser.value) {\n\t\t\treturn await onboardingApi.submitEmailOnSignup(\n\t\t\t\trootStore.instanceId,\n\t\t\t\tcurrentUser.value,\n\t\t\t\temail ?? currentUser.value.email,\n\t\t\t\tagree,\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t};\n\n\tconst usersList = useAsyncState(\n\t\tasync (filter?: UsersListFilterDto) =>\n\t\t\tawait usersApi.getUsers(rootStore.restApiContext, filter),\n\t\t{\n\t\t\tcount: 0,\n\t\t\titems: [],\n\t\t},\n\t\t{ immediate: false, resetOnExecute: false },\n\t);\n\n\tconst setUserQuota = (quota?: number) => {\n\t\tif (typeof quota !== 'undefined') {\n\t\t\tuserQuota.value = quota;\n\t\t}\n\t};\n\n\treturn {\n\t\tinitialized,\n\t\tcurrentUserId,\n\t\tusersById,\n\t\tallUsers,\n\t\tcurrentUser,\n\t\tuserActivated,\n\t\tisDefaultUser,\n\t\tisInstanceOwner,\n\t\tisAdmin,\n\t\tisAdminOrOwner,\n\t\tmfaEnabled,\n\t\tglobalRoleName,\n\t\tuserClaimedAiCredits,\n\t\tisEasyAIWorkflowOnboardingDone,\n\t\tcanUserUpdateVersion,\n\t\tusersLimitNotReached,\n\t\taddUsers,\n\t\tloginWithCookie,\n\t\tinitialize,\n\t\tsetPersonalizationAnswers,\n\t\tloginWithCreds,\n\t\tlogout,\n\t\tregisterLoginHook,\n\t\tregisterLogoutHook,\n\t\tregisterModalOpeners,\n\t\tsetPermissionsResolvers,\n\t\tcreateOwner,\n\t\tvalidateSignupToken,\n\t\tacceptInvitation,\n\t\tsendForgotPasswordEmail,\n\t\tvalidatePasswordToken,\n\t\tchangePassword,\n\t\tupdateUser,\n\t\tupdateUserName,\n\t\tupdateUserSettings,\n\t\tupdateOtherUserSettings,\n\t\tupdateCurrentUserPassword,\n\t\tdeleteUser,\n\t\tfetchUsers,\n\t\tinviteUsers,\n\t\treinviteUser,\n\t\tgetUserPasswordResetLink,\n\t\tgenerateInviteLink,\n\t\tsubmitPersonalizationSurvey,\n\t\tshowPersonalizationSurvey,\n\t\tfetchMfaQR,\n\t\tverifyMfaCode,\n\t\tenableMfa,\n\t\tdisableMfa,\n\t\tupdateEnforceMfa,\n\t\tcanEnableMFA,\n\t\tsendConfirmationEmail,\n\t\tupdateGlobalRole,\n\t\tsetEasyAIWorkflowOnboardingDone,\n\t\tisCalloutDismissed,\n\t\tsetCalloutDismissed,\n\t\tsubmitContactEmail,\n\t\tsetUserQuota,\n\t\tusersList,\n\t};\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAmCA,MAAM,kBAAkB,SAA+B,CAAC,CAAC,MAAM;AAC/D,MAAM,oBAAoB,SAA+B,MAAM,SAAS,KAAK;AAC7E,MAAM,kBAAkB,SACvB,iBAAiB,KAAK,IAAI,eAAe,KAAK;AAC/C,MAAM,YAAY,SAA+B,MAAM,SAAS,KAAK;AAKrE,MAAa,gBAAgB,YAAY,OAAO,aAAa;CAC5D,MAAM,cAAc,IAAI,MAAM;CAC9B,MAAM,gBAAgB,IAAmB,KAAK;CAC9C,MAAM,YAAY,IAA2B,EAAE,CAAC;CAChD,MAAM,YAAY,IAAY,GAAG;CAEjC,MAAM,aAAa,IAAiB,EAAE,CAAC;CACvC,MAAM,cAAc,IAAkB,EAAE,CAAC;CAMzC,MAAM,0BAA0B,WAAmB;AAClD,MAAI,OAAO,KAAK,IAAI,IACnB,SAAQ,KACP,iBAAiB,OAAO,uGACxB;;CAGH,MAAM,eAAe,IAAkB;EACtC,YAAY,SAAS,uBAAuB,aAAa,OAAO,KAAK,CAAC,GAAG;EACzE,oBAAoB,YACnB,uBAAuB,qBAAqB,OAAO,QAAQ,KAAK,CAAC,GAAG;EACrE,CAAC;CACF,MAAM,wBAAwB,YAA0B;AACvD,eAAa,QAAQ;;CAQtB,MAAM,eAAe,UAAyB,MAAM;CACpD,MAAM,2BAA2B,cAA4C;AAC5E,eAAa,QAAQ,UAAU;;CAKhC,MAAM,YAAY,cAAc;CAChC,MAAM,gBAAgB,kBAAkB;CAIxC,MAAM,WAAW,eAAe,OAAO,OAAO,UAAU,MAAM,CAAC;CAE/D,MAAM,cAAc,eACnB,cAAc,QAAQ,UAAU,MAAM,cAAc,SAAS,KAC7D;CAED,MAAM,gBAAgB,eAAe,QAAQ,YAAY,OAAO,UAAU,cAAc,CAAC;CAEzF,MAAM,gBAAgB,eAAe,eAAe,YAAY,MAAM,CAAC;CAEvE,MAAM,kBAAkB,eAAe,iBAAiB,YAAY,MAAM,CAAC;CAE3E,MAAM,UAAU,eAAe,SAAS,YAAY,MAAM,CAAC;CAE3D,MAAM,iBAAiB,eAAe,gBAAgB,SAAS,QAAQ,MAAM;CAE7E,MAAM,aAAa,eAAe,YAAY,OAAO,cAAc,MAAM;CAEzE,MAAM,iBAAiB,eAAe,YAAY,OAAO,QAAQ,UAAU;CAE3E,MAAM,uBAAuB,eAAe,YAAY,OAAO,UAAU,qBAAqB;CAE9F,MAAM,iCAAiC,eACtC,QAAQ,YAAY,OAAO,UAAU,wBAAwB,CAC7D;CAED,MAAM,uBAAuB,eAAe;AAC3C,SAAO,gBAAgB;GACtB;CAEF,MAAM,wCAAwC;AAC7C,MAAI,YAAY,OAAO,SACtB,aAAY,MAAM,SAAS,0BAA0B;;CAIvD,MAAM,sBAAsB,YAC3B,QAAQ,YAAY,OAAO,UAAU,oBAAoB,SAAS;CAEnE,MAAM,uBAAuB,YAAoB;AAChD,MAAI,YAAY,OAAO,UAAU;AAChC,eAAY,MAAM,SAAS,sBAAsB,EAAE;AAEnD,eAAY,MAAM,SAAS,kBAAkB,WAAW;;;CAI1D,MAAM,uBAAuB,eACb,UAAU,UAAU,MAAM,UAAU,QAAQ,SAAS,MAAM,OAC1E;CAID,MAAM,YAAY,aAAqB;AACtC,WAAS,SAAS,iBAAiB;GAElC,MAAM,cAAc;IACnB,GAFgB,UAAU,MAAM,aAAa,OAAO,EAAE;IAGtD,GAAG;IACH;GACD,MAAMA,OAAc;IACnB,GAAG;IACH,UAAU,aAAa,YACpB,GAAG,YAAY,UAAU,GAAG,YAAY,YAAY,OACpD;IACH,eAAe,eAAe,YAAY;IAC1C,eAAe,eAAe,YAAY;IAC1C;AAED,aAAU,QAAQ;IACjB,GAAG,UAAU;KACZ,KAAK,KAAK;IACX;IACA;;CAGH,MAAM,iBAAiB,OAAO,SAA8B;AAC3D,WAAS,CAAC,KAAK,CAAC;AAChB,gBAAc,QAAQ,KAAK;AAE3B,OAAK,MAAM,QAAQ,WAAW,MAC7B,KAAI;AACH,SAAM,KAAK,KAAK;WACR,OAAO;AACf,WAAQ,MAAM,+BAA+B,MAAM;;;CAKtD,MAAM,kBAAkB,YAAY;EACnC,MAAM,OAAO,MAAM,SAAS,iBAAiB,UAAU,eAAe;AACtE,MAAI,CAAC,KACJ;AAGD,QAAM,eAAe,KAAK;;CAG3B,MAAM,aAAa,YAAY;AAC9B,MAAI,YAAY,MACf;AAGD,MAAI;AACH,SAAM,iBAAiB;AACvB,eAAY,QAAQ;UACb;;CAMT,MAAM,yBAAyB;AAC9B,gBAAc,QAAQ;;CAGvB,MAAM,kBAAkB,WAAmB;EAC1C,MAAM,GAAG,SAAS,GAAG,GAAG,SAAS,UAAU;AAC3C,YAAU,QAAQ;;CAGnB,MAAM,6BAA6B,YAA2C;AAC7E,MAAI,CAAC,YAAY,MAChB;AAGD,YAAU,QAAQ;GACjB,GAAG,UAAU;IACZ,YAAY,MAAM,KAAK;IACvB,GAAG,YAAY;IACf,wBAAwB;IACxB;GACD;;CAGF,MAAM,iBAAiB,OAAO,WAA4B;EACzD,MAAM,OAAO,MAAM,SAAS,MAAM,UAAU,gBAAgB,OAAO;AACnE,MAAI,CAAC,KACJ;AAGD,QAAM,eAAe,KAAK;;CAG3B,MAAM,qBAAqB,SAAoB;AAC9C,aAAW,MAAM,KAAK,KAAK;;CAG5B,MAAM,sBAAsB,SAAqB;AAChD,cAAY,MAAM,KAAK,KAAK;;CAG7B,MAAM,SAAS,OAAO,YAAoC;EACzD,IAAIC,cAA6B;AAEjC,MAAI,SAAS,QACZ,KAAI;AACH,IAAC,CAAE,eAAgB,MAAM,OAAO,WAAW,UAAU,eAAe;UAC7D;AAIP,SAAM,SAAS,OAAO,UAAU,eAAe;;MAGhD,OAAM,SAAS,OAAO,UAAU,eAAe;AAGhD,oBAAkB;AAElB,OAAK,MAAM,QAAQ,YAAY,MAC9B,KAAI;AACH,SAAM,MAAM;WACJ,OAAO;AACf,WAAQ,MAAM,gCAAgC,MAAM;;AAItD,eAAa,WAAW,uBAAuB;AAE/C,SAAO,EAAE,aAAa;;CAGvB,MAAM,cAAc,OAAO,WAKrB;EACL,MAAM,OAAO,MAAM,SAAS,WAAW,UAAU,gBAAgB,OAAO;AACxE,MAAI,MAAM;AACT,SAAM,eAAe,KAAK;AAC1B,iBAAc,sBAAsB;;;CAItC,MAAM,sBAAsB,OAAO,WAA8B;AAChE,SAAO,MAAM,SAAS,oBAAoB,UAAU,gBAAgB,OAAO;;CAG5E,MAAMC,qBAAmB,OAAO,WAK1B;EACL,MAAM,OAAO,MAAMC,iBAAgC,UAAU,gBAAgB,OAAO;AACpF,MAAI,KACH,OAAM,eAAe,KAAK;;CAI5B,MAAM,0BAA0B,OAAO,WAA8B;AACpE,QAAM,SAAS,wBAAwB,UAAU,gBAAgB,OAAO;;CAGzE,MAAM,wBAAwB,OAAO,WAA8B;AAClE,QAAM,SAAS,sBAAsB,UAAU,gBAAgB,OAAO;;CAGvE,MAAM,iBAAiB,OAAO,WAAkE;AAC/F,QAAM,SAAS,eAAe,UAAU,gBAAgB,OAAO;;CAGhE,MAAM,aAAa,OAAO,WAAiC;EAC1D,MAAM,OAAO,MAAM,SAAS,kBAAkB,UAAU,gBAAgB,OAAO;AAC/E,WAAS,CAAC,KAAK,CAAC;AAChB,SAAO;;CAGR,MAAM,iBAAiB,OAAO,WAAoD;AACjF,MAAI,CAAC,YAAY,MAChB;AAGD,SAAO,MAAM,WAAW;GACvB,OAAO,YAAY,MAAM;GACzB,GAAG;GACH,CAAC;;CAGH,MAAM,qBAAqB,OAAO,aAA+C;EAChF,MAAM,kBAAkB,MAAM,SAAS,0BACtC,UAAU,gBACV,SACA;AACD,MAAI,YAAY,OAAO;AACtB,eAAY,MAAM,WAAW;AAC7B,YAAS,CAAC,YAAY,MAAM,CAAC;;;CAI/B,MAAM,0BAA0B,OAAO,QAAgB,aAAuC;AAC7F,QAAM,SAAS,wBAAwB,UAAU,gBAAgB,QAAQ,SAAS;;CAGnF,MAAM,4BAA4B,OAAO,WAAqC;AAC7E,QAAM,SAAS,0BAA0B,UAAU,gBAAgB,OAAO;;CAG3E,MAAM,aAAa,OAAO,WAAgD;AACzE,QAAM,SAAS,WAAW,UAAU,gBAAgB,OAAO;AAC3D,iBAAe,OAAO,GAAG;;CAG1B,MAAM,aAAa,OAAO,EACzB,MACA,MACA,WAC4E,EAAE,KAAK;AACnF,MAAI,CAAC,aAAa,OAAO,CACxB;EAGD,MAAM,EAAE,UAAU,MAAM,SAAS,SAAS,UAAU,gBAAgB;GACnE,MAAM,QAAQ;GACd,MAAM,QAAQ;GACd;GACA,CAAC;AACF,WAAS,MAAM;;CAGhB,MAAMC,gBAAc,OAAO,WAAiE;EAC3F,MAAM,eAAe,MAAMC,YAA2B,UAAU,gBAAgB,OAAO;AACvF,WACC,aAAa,KAAK,EAAE,YAAY;GAC/B,WAAW;GACX,GAAG;GACH,EAAE,CACH;AACD,SAAO;;CAGR,MAAM,eAAe,OAAO,EAAE,OAAO,WAA0D;EAC9F,MAAM,qBAAqB,MAAMA,YAA2B,UAAU,gBAAgB,CACrF;GAAE;GAAO;GAAM,CACf,CAAC;AACF,MAAI,CAAC,mBAAmB,GAAG,KAAK,UAC/B,OAAM,MAAM,mBAAmB,GAAG,MAAM;;CAI1C,MAAM,2BAA2B,OAAO,WAA2B;AAClE,SAAO,MAAM,SAAS,qBAAqB,UAAU,gBAAgB,OAAO;;CAG7E,MAAM,qBAAqB,OAAO,WAA2B;AAC5D,SAAO,MAAM,SAAS,mBAAmB,UAAU,gBAAgB,OAAO;;CAG3E,MAAM,8BAA8B,OAAO,YAA2C;AACrF,QAAM,SAAS,4BAA4B,UAAU,gBAAgB,QAAQ;AAC7E,4BAA0B,QAAQ;;CAKnC,MAAM,kCAAkC;AAEvC,MADsB,cAAc,kCACf,YAAY,SAAS,CAAC,YAAY,MAAM,uBAC5D,cAAa,MAAM,UAAU,0BAA0B;;CAIzD,MAAM,aAAa,YAAY;AAC9B,SAAO,MAAM,OAAO,SAAS,UAAU,eAAe;;CAGvD,MAAM,gBAAgB,OAAO,SAA8B;AAC1D,SAAO,MAAM,OAAO,cAAc,UAAU,gBAAgB,KAAK;;CAGlE,MAAM,eAAe,YAAY;AAChC,SAAO,MAAM,OAAO,aAAa,UAAU,eAAe;;CAG3D,MAAM,YAAY,OAAO,SAA8B;AACtD,QAAM,OAAO,UAAU,UAAU,gBAAgB,KAAK;AACtD,MAAI,YAAY,MACf,aAAY,MAAM,aAAa;;CAIjC,MAAM,aAAa,OAAO,SAAkC;AAC3D,QAAM,OAAO,WAAW,UAAU,gBAAgB,KAAK;AAEvD,MAAI,YAAY,MACf,aAAY,MAAM,aAAa;;CAIjC,MAAM,mBAAmB,OAAO,YAAqB;AACpD,QAAM,OAAO,iBAAiB,UAAU,gBAAgB,QAAQ;AAChE,gBAAc,gBAAgB;;CAG/B,MAAM,wBAAwB,YAAY;AACzC,QAAM,SAAS,sBAAsB,UAAU,eAAe;;CAG/D,MAAM,mBAAmB,OAAO,EAAE,IAAI,kBAA2C;AAChF,QAAM,SAAS,iBAAiB,UAAU,gBAAgB;GAAE;GAAI;GAAa,CAAC;AAC9E,QAAM,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;;CAG5C,MAAM,qBAAqB,OAAO,OAAe,UAAmB;AACnE,MAAI,YAAY,MACf,QAAO,MAAMC,oBACZ,UAAU,YACV,YAAY,OACZ,SAAS,YAAY,MAAM,OAC3B,MACA;AAEF,SAAO;;CAGR,MAAM,YAAY,cACjB,OAAO,WACN,MAAM,SAAS,SAAS,UAAU,gBAAgB,OAAO,EAC1D;EACC,OAAO;EACP,OAAO,EAAE;EACT,EACD;EAAE,WAAW;EAAO,gBAAgB;EAAO,CAC3C;CAED,MAAM,gBAAgB,UAAmB;AACxC,MAAI,OAAO,UAAU,YACpB,WAAU,QAAQ;;AAIpB,QAAO;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA"}
@@ -0,0 +1,11 @@
1
+ require('./settings2.store.cjs');
2
+ require('./constants2.cjs');
3
+ require('./metaTagConfig2.cjs');
4
+ require('./useRootStore2.cjs');
5
+ require('./invitation2.api.cjs');
6
+ require('./onboarding2.api.cjs');
7
+ require('./users2.store.cjs');
8
+ const require_versions_store = require('./versions2.store.cjs');
9
+
10
+ exports.SEMVER_REGEX = require_versions_store.SEMVER_REGEX;
11
+ exports.useVersionsStore = require_versions_store.useVersionsStore;