@zauru-sdk/utils 6.20.0 → 6.22.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.
package/dist/esm/index.js CHANGED
@@ -26,6 +26,7 @@ export * from "./zauru/rejectionPercentageAdjustmentRules.utils.js";
26
26
  export * from "./zauru/weeklyItemPrice.utils.js";
27
27
  export * from "./zauru/templates.utils.js";
28
28
  export * from "./zauru/tiposMuestra.utils.js";
29
+ export * from "./zauru/rbac/index.js";
29
30
  export * from "./zauru/webapp-tables.utils.js";
30
31
  export * from "./zauru/4pinos-po-discount-history.utils.js";
31
32
  export * from "./zauru/programaciones.utils.js";
@@ -41,7 +41,7 @@ export function createLoginAction(extras) {
41
41
  return redirect(authorizeUrl(request));
42
42
  }
43
43
  if (session.has("code")) {
44
- if (isDenied(extras?.requireAccess?.(session))) {
44
+ if (isDenied(await extras?.requireAccess?.(session))) {
45
45
  return redirect("/");
46
46
  }
47
47
  return redirect("/home");
@@ -50,7 +50,7 @@ export function createLoginAction(extras) {
50
50
  if (loginResponse.error || !loginResponse.data) {
51
51
  return Response.json(loginErrorPayload(loginResponse.userMsg?.toString() ?? ""));
52
52
  }
53
- if (isDenied(extras?.requireAccess?.(session))) {
53
+ if (isDenied(await extras?.requireAccess?.(session))) {
54
54
  return Response.json(loginErrorPayload("No tienes permiso para acceder a esta aplicación. Si crees que esto es un error, contacta al administrador.", "Acceso denegado"));
55
55
  }
56
56
  if (extras?.afterLogin) {
@@ -78,7 +78,7 @@ export function createSessionGuardLoader(extras) {
78
78
  if (!session.has("username")) {
79
79
  return redirect("/");
80
80
  }
81
- if (isDenied(extras?.requireAccess?.(session))) {
81
+ if (isDenied(await extras?.requireAccess?.(session))) {
82
82
  return redirect("/");
83
83
  }
84
84
  return Response.json({});
@@ -104,7 +104,7 @@ export function createIndexLoader(extras) {
104
104
  return async ({ request }) => {
105
105
  const session = await getSession(request.headers.get("Cookie"));
106
106
  if (session.has("username")) {
107
- if (isDenied(extras?.requireAccess?.(session))) {
107
+ if (isDenied(await extras?.requireAccess?.(session))) {
108
108
  return Response.json({});
109
109
  }
110
110
  return redirect("/home");
@@ -121,7 +121,7 @@ export function createReloadCatalogsLoader(extras) {
121
121
  if (!session.has("username")) {
122
122
  return redirect("/");
123
123
  }
124
- if (isDenied(extras?.requireAccess?.(session))) {
124
+ if (isDenied(await extras?.requireAccess?.(session))) {
125
125
  return redirect("/");
126
126
  }
127
127
  try {
@@ -0,0 +1,35 @@
1
+ import { DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES } from "./catalog.js";
2
+ export function isSuperAdminEmail(email, suffixes = DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES) {
3
+ if (!email) {
4
+ return false;
5
+ }
6
+ const normalized = email.toLowerCase().trim();
7
+ return suffixes.some((suffix) => normalized.endsWith(suffix.toLowerCase()));
8
+ }
9
+ export function hasPermissionKey(superAdmin, permissionKeys, key) {
10
+ if (superAdmin) {
11
+ return true;
12
+ }
13
+ return (permissionKeys ?? []).includes(key);
14
+ }
15
+ export function hasPermission(context, key) {
16
+ if (!context) {
17
+ return false;
18
+ }
19
+ return hasPermissionKey(context.superAdmin, context.permissionKeys, key);
20
+ }
21
+ export function isActiveWebappRow(row) {
22
+ return Boolean(row?.data) && !row?.data?.fechaEliminacion;
23
+ }
24
+ export function emptyAccessContext(employeeId, email) {
25
+ return {
26
+ employeeId,
27
+ email,
28
+ superAdmin: false,
29
+ roleId: null,
30
+ roleName: null,
31
+ assignmentId: null,
32
+ assignment: null,
33
+ permissionKeys: [],
34
+ };
35
+ }
@@ -0,0 +1,67 @@
1
+ export const DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES = [
2
+ "@zauru.com",
3
+ "@intuitiva.biz",
4
+ ];
5
+ export function flattenPermissionRows(groups) {
6
+ return groups.flatMap((group) => group.actions.map((action) => ({
7
+ groupId: group.id,
8
+ groupLabel: group.label,
9
+ key: action.key,
10
+ label: action.label,
11
+ })));
12
+ }
13
+ export function allPermissionKeysFromGroups(groups) {
14
+ return flattenPermissionRows(groups).map((row) => row.key);
15
+ }
16
+ export function isValidPermissionKey(key, validKeys) {
17
+ if (Array.isArray(validKeys)) {
18
+ return validKeys.includes(key);
19
+ }
20
+ return validKeys.has(key);
21
+ }
22
+ export function normalizePermissionKeys(value) {
23
+ if (Array.isArray(value)) {
24
+ return value.filter((key) => typeof key === "string");
25
+ }
26
+ if (typeof value === "string") {
27
+ const trimmed = value.trim();
28
+ if (!trimmed) {
29
+ return [];
30
+ }
31
+ try {
32
+ const parsed = JSON.parse(trimmed);
33
+ if (Array.isArray(parsed)) {
34
+ return parsed.filter((key) => typeof key === "string");
35
+ }
36
+ }
37
+ catch {
38
+ return [trimmed];
39
+ }
40
+ }
41
+ return [];
42
+ }
43
+ export function normalizeIdList(value) {
44
+ if (!Array.isArray(value)) {
45
+ return [];
46
+ }
47
+ return value
48
+ .map((item) => Number(item))
49
+ .filter((item) => Number.isFinite(item) && item > 0);
50
+ }
51
+ export function togglePermissionKey(keys, key, granted) {
52
+ const next = new Set(keys);
53
+ if (granted) {
54
+ next.add(key);
55
+ }
56
+ else {
57
+ next.delete(key);
58
+ }
59
+ return [...next];
60
+ }
61
+ export function addPermissionKeys(keys, add) {
62
+ return [...new Set([...keys, ...add])];
63
+ }
64
+ export function removePermissionKeys(keys, remove) {
65
+ const drop = new Set(remove);
66
+ return keys.filter((key) => !drop.has(key));
67
+ }
@@ -0,0 +1,248 @@
1
+ import { redirect } from "@remix-run/node";
2
+ import { handlePossibleAxiosErrors } from "@zauru-sdk/common";
3
+ import { createWebAppTableRegister, getVariablesByName, getWebAppRow, getWebAppTableRegisters, updateWebAppTableRegister, } from "@zauru-sdk/services";
4
+ import { hasPermission as hasPermissionInContext, isActiveWebappRow, isSuperAdminEmail, } from "./access.js";
5
+ import { DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES, isValidPermissionKey, normalizePermissionKeys, } from "./catalog.js";
6
+ const deletedAt = () => new Date().toISOString();
7
+ const toNumber = (value) => {
8
+ const parsed = Number(value);
9
+ return Number.isFinite(parsed) ? parsed : 0;
10
+ };
11
+ export function createWebappRbac(config) {
12
+ const suffixes = config.superAdminEmailSuffixes ?? DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES;
13
+ const validKeys = new Set(config.allPermissionKeys);
14
+ const getTableIds = async (headers, session) => {
15
+ const vars = await getVariablesByName(headers, session, [
16
+ config.rolesTableVar,
17
+ config.employeeRolesTableVar,
18
+ ]);
19
+ return {
20
+ rolesTableId: vars[config.rolesTableVar],
21
+ employeeRolesTableId: vars[config.employeeRolesTableVar],
22
+ };
23
+ };
24
+ const sanitizeKeys = (keys) => normalizePermissionKeys(keys).filter((key) => isValidPermissionKey(key, validKeys));
25
+ const listRoles = (headers, session) => handlePossibleAxiosErrors(async () => {
26
+ const { rolesTableId } = await getTableIds(headers, session);
27
+ const response = await getWebAppTableRegisters(session, rolesTableId);
28
+ if (response.error) {
29
+ throw new Error(`Ocurrió un error al consultar los roles: ${response.userMsg}`);
30
+ }
31
+ return (response.data ?? [])
32
+ .filter(isActiveWebappRow)
33
+ .map((row) => ({
34
+ ...row,
35
+ data: {
36
+ ...row.data,
37
+ permission_keys: sanitizeKeys(row.data.permission_keys),
38
+ },
39
+ }));
40
+ });
41
+ const getRoleById = (session, roleId) => handlePossibleAxiosErrors(async () => {
42
+ const response = await getWebAppRow(session, roleId);
43
+ if (response.error) {
44
+ throw new Error(`Ocurrió un error al consultar el rol: ${response.userMsg}`);
45
+ }
46
+ if (!response.data || response.data.fechaEliminacion) {
47
+ return null;
48
+ }
49
+ return {
50
+ ...response.data,
51
+ permission_keys: sanitizeKeys(response.data.permission_keys),
52
+ };
53
+ });
54
+ const listEmployeeRoles = (headers, session, employeeId) => handlePossibleAxiosErrors(async () => {
55
+ const { employeeRolesTableId } = await getTableIds(headers, session);
56
+ const response = await getWebAppTableRegisters(session, employeeRolesTableId, employeeId
57
+ ? { data: { employee_id: employeeId } }
58
+ : undefined);
59
+ if (response.error) {
60
+ throw new Error(`Ocurrió un error al consultar las asignaciones de rol: ${response.userMsg}`);
61
+ }
62
+ const rows = (response.data ?? []).filter(isActiveWebappRow);
63
+ if (employeeId == null) {
64
+ return rows;
65
+ }
66
+ return rows.filter((row) => Number(row.data.employee_id) === Number(employeeId));
67
+ });
68
+ const createRole = (headers, session, body) => handlePossibleAxiosErrors(async () => {
69
+ const name = body.name.trim();
70
+ if (!name) {
71
+ throw new Error("El nombre del rol es requerido.");
72
+ }
73
+ const { rolesTableId } = await getTableIds(headers, session);
74
+ return createWebAppTableRegister(headers, rolesTableId, {
75
+ name,
76
+ description: body.description?.trim() ?? "",
77
+ permission_keys: sanitizeKeys(body.permission_keys),
78
+ fechaEliminacion: "",
79
+ });
80
+ });
81
+ const updateRole = (headers, session, roleId, body) => handlePossibleAxiosErrors(async () => {
82
+ const { rolesTableId } = await getTableIds(headers, session);
83
+ const current = await getWebAppRow(session, roleId);
84
+ if (current.error || !current.data || current.data.fechaEliminacion) {
85
+ throw new Error("El rol no existe o fue eliminado.");
86
+ }
87
+ const next = {
88
+ name: body.name?.trim() || current.data.name,
89
+ description: body.description !== undefined
90
+ ? body.description.trim()
91
+ : (current.data.description ?? ""),
92
+ permission_keys: body.permission_keys !== undefined
93
+ ? sanitizeKeys(body.permission_keys)
94
+ : sanitizeKeys(current.data.permission_keys),
95
+ fechaEliminacion: current.data.fechaEliminacion ?? "",
96
+ };
97
+ return updateWebAppTableRegister(headers, rolesTableId, roleId, next);
98
+ });
99
+ const deleteRole = (headers, session, roleId) => handlePossibleAxiosErrors(async () => {
100
+ const assignments = await listEmployeeRoles(headers, session);
101
+ if (assignments.error) {
102
+ throw new Error(assignments.userMsg ?? "No se pudieron consultar las asignaciones.");
103
+ }
104
+ const inUse = (assignments.data ?? []).some((row) => Number(row.data.role_id) === Number(roleId));
105
+ if (inUse) {
106
+ throw new Error("No se puede eliminar el rol: hay empleados asignados. Reasígnalos primero.");
107
+ }
108
+ const { rolesTableId } = await getTableIds(headers, session);
109
+ const current = await getWebAppRow(session, roleId);
110
+ if (current.error || !current.data) {
111
+ throw new Error("El rol no existe.");
112
+ }
113
+ return updateWebAppTableRegister(headers, rolesTableId, roleId, {
114
+ ...current.data,
115
+ permission_keys: sanitizeKeys(current.data.permission_keys),
116
+ fechaEliminacion: deletedAt(),
117
+ });
118
+ });
119
+ const syncRolePermissionKeys = (headers, session, roleId, keys) => updateRole(headers, session, roleId, { permission_keys: keys });
120
+ const assignEmployeeRole = (headers, session, body) => handlePossibleAxiosErrors(async () => {
121
+ const employeeId = toNumber(body.employee_id);
122
+ if (!employeeId) {
123
+ throw new Error("El empleado es requerido.");
124
+ }
125
+ const existing = await listEmployeeRoles(headers, session, employeeId);
126
+ if (existing.error) {
127
+ throw new Error(existing.userMsg ?? "No se pudieron consultar las asignaciones.");
128
+ }
129
+ const current = existing.data?.[0];
130
+ const { employeeRolesTableId } = await getTableIds(headers, session);
131
+ if (body.role_id == null) {
132
+ if (!current) {
133
+ return {
134
+ id: 0,
135
+ webapp_table_id: Number(employeeRolesTableId),
136
+ data: { Nombre: "" },
137
+ creator_id: 0,
138
+ updater_id: null,
139
+ created_at: "",
140
+ updated_at: "",
141
+ };
142
+ }
143
+ return updateWebAppTableRegister(headers, employeeRolesTableId, current.id, {
144
+ ...current.data,
145
+ fechaEliminacion: deletedAt(),
146
+ });
147
+ }
148
+ const payload = {
149
+ ...current?.data,
150
+ ...(body.extra ?? {}),
151
+ employee_id: employeeId,
152
+ role_id: toNumber(body.role_id),
153
+ fechaEliminacion: "",
154
+ };
155
+ if (current) {
156
+ return updateWebAppTableRegister(headers, employeeRolesTableId, current.id, payload);
157
+ }
158
+ return createWebAppTableRegister(headers, employeeRolesTableId, payload);
159
+ });
160
+ const resolveAccess = async (headers, session) => {
161
+ const email = String(session.get("email") ?? "");
162
+ const employeeId = toNumber(session.get("employee_id"));
163
+ const superAdmin = isSuperAdminEmail(email, suffixes);
164
+ if (superAdmin) {
165
+ return {
166
+ employeeId,
167
+ email,
168
+ superAdmin: true,
169
+ roleId: null,
170
+ roleName: null,
171
+ assignmentId: null,
172
+ assignment: null,
173
+ permissionKeys: [...config.allPermissionKeys],
174
+ };
175
+ }
176
+ if (!employeeId) {
177
+ return null;
178
+ }
179
+ const assignments = await listEmployeeRoles(headers, session, employeeId);
180
+ if (assignments.error) {
181
+ throw new Error(assignments.userMsg ?? "No se pudieron consultar las asignaciones.");
182
+ }
183
+ const assignment = assignments.data?.[0];
184
+ if (!assignment) {
185
+ return null;
186
+ }
187
+ const roleId = Number(assignment.data.role_id);
188
+ const role = await getRoleById(session, roleId);
189
+ if (role.error) {
190
+ throw new Error(role.userMsg ?? "No se pudo consultar el rol.");
191
+ }
192
+ if (!role.data) {
193
+ return null;
194
+ }
195
+ return {
196
+ employeeId,
197
+ email,
198
+ superAdmin: false,
199
+ roleId,
200
+ roleName: role.data.name,
201
+ assignmentId: assignment.id,
202
+ assignment: assignment.data,
203
+ permissionKeys: sanitizeKeys(role.data.permission_keys),
204
+ };
205
+ };
206
+ const hasAppAccess = async (headers, session) => {
207
+ if (isSuperAdminEmail(session.get("email"), suffixes)) {
208
+ return true;
209
+ }
210
+ const context = await resolveAccess(headers, session);
211
+ return context != null;
212
+ };
213
+ const requireAppAccess = async (headers, session) => {
214
+ if (!session.has("username")) {
215
+ throw redirect("/");
216
+ }
217
+ const context = await resolveAccess(headers, session);
218
+ if (!context) {
219
+ throw redirect("/");
220
+ }
221
+ return context;
222
+ };
223
+ const requirePermission = async (headers, session, key) => {
224
+ const context = await requireAppAccess(headers, session);
225
+ if (!hasPermissionInContext(context, key)) {
226
+ throw redirect("/");
227
+ }
228
+ return context;
229
+ };
230
+ return {
231
+ config,
232
+ getTableIds,
233
+ listRoles,
234
+ getRoleById,
235
+ createRole,
236
+ updateRole,
237
+ deleteRole,
238
+ syncRolePermissionKeys,
239
+ listEmployeeRoles,
240
+ assignEmployeeRole,
241
+ resolveAccess,
242
+ hasAppAccess,
243
+ requireAppAccess,
244
+ requirePermission,
245
+ hasPermission: hasPermissionInContext,
246
+ isSuperAdminEmail: (email) => isSuperAdminEmail(email, suffixes),
247
+ };
248
+ }
@@ -0,0 +1,3 @@
1
+ export { addPermissionKeys, allPermissionKeysFromGroups, DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES, flattenPermissionRows, isValidPermissionKey, normalizeIdList, normalizePermissionKeys, removePermissionKeys, togglePermissionKey, } from "./catalog.js";
2
+ export { emptyAccessContext, hasPermission, hasPermissionKey, isActiveWebappRow, isSuperAdminEmail, } from "./access.js";
3
+ export { createWebappRbac, } from "./createWebappRbac.js";
package/dist/index.d.ts CHANGED
@@ -26,6 +26,7 @@ export * from "./zauru/rejectionPercentageAdjustmentRules.utils.js";
26
26
  export * from "./zauru/weeklyItemPrice.utils.js";
27
27
  export * from "./zauru/templates.utils.js";
28
28
  export * from "./zauru/tiposMuestra.utils.js";
29
+ export * from "./zauru/rbac/index.js";
29
30
  export * from "./zauru/webapp-tables.utils.js";
30
31
  export * from "./zauru/4pinos-po-discount-history.utils.js";
31
32
  export * from "./zauru/programaciones.utils.js";
@@ -7,7 +7,7 @@ export type AuthAccessExtras = {
7
7
  * Return `false` to deny. Throw `redirect(...)` to send the user elsewhere.
8
8
  * Any other return (including `void`) allows access.
9
9
  */
10
- requireAccess?: (session: AuthSession) => boolean | void;
10
+ requireAccess?: (session: AuthSession) => boolean | void | Promise<boolean | void>;
11
11
  };
12
12
  export type LoginActionExtras = AuthAccessExtras & {
13
13
  afterLogin?: (ctx: {
@@ -0,0 +1,8 @@
1
+ import type { WebappAccessContext, WebAppRowGraphQL } from "@zauru-sdk/types";
2
+ export declare function isSuperAdminEmail(email: string | null | undefined, suffixes?: readonly string[]): boolean;
3
+ export declare function hasPermissionKey(superAdmin: boolean | undefined, permissionKeys: readonly string[] | undefined, key: string): boolean;
4
+ export declare function hasPermission(context: WebappAccessContext | null | undefined, key: string): boolean;
5
+ export declare function isActiveWebappRow<T extends {
6
+ fechaEliminacion?: string;
7
+ }>(row: WebAppRowGraphQL<T> | null | undefined): row is WebAppRowGraphQL<T>;
8
+ export declare function emptyAccessContext(employeeId: number, email: string): WebappAccessContext;
@@ -0,0 +1,15 @@
1
+ import type { PermissionGroup } from "@zauru-sdk/types";
2
+ export declare const DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES: readonly ["@zauru.com", "@intuitiva.biz"];
3
+ export declare function flattenPermissionRows(groups: PermissionGroup[]): Array<{
4
+ groupId: string;
5
+ groupLabel: string;
6
+ key: string;
7
+ label: string;
8
+ }>;
9
+ export declare function allPermissionKeysFromGroups(groups: PermissionGroup[]): string[];
10
+ export declare function isValidPermissionKey(key: string, validKeys: ReadonlySet<string> | readonly string[]): boolean;
11
+ export declare function normalizePermissionKeys(value: unknown): string[];
12
+ export declare function normalizeIdList(value: unknown): number[];
13
+ export declare function togglePermissionKey(keys: readonly string[], key: string, granted: boolean): string[];
14
+ export declare function addPermissionKeys(keys: readonly string[], add: readonly string[]): string[];
15
+ export declare function removePermissionKeys(keys: readonly string[], remove: readonly string[]): string[];
@@ -0,0 +1,38 @@
1
+ import { type Session } from "@remix-run/node";
2
+ import type { AxiosUtilsResponse, WebappAccessContext, WebappEmployeeRole, WebappRbacConfig, WebappRole, WebAppRowGraphQL, WebAppTableUpdateResponse } from "@zauru-sdk/types";
3
+ import { hasPermission as hasPermissionInContext } from "./access.js";
4
+ type TableIds = {
5
+ rolesTableId: string;
6
+ employeeRolesTableId: string;
7
+ };
8
+ export type CreateRoleInput = {
9
+ name: string;
10
+ description?: string;
11
+ permission_keys?: string[];
12
+ };
13
+ export type UpdateRoleInput = Partial<Pick<WebappRole, "name" | "description" | "permission_keys">>;
14
+ export type AssignEmployeeRoleInput = {
15
+ employee_id: number;
16
+ role_id: number | null;
17
+ extra?: Record<string, unknown>;
18
+ };
19
+ export declare function createWebappRbac(config: WebappRbacConfig): {
20
+ config: WebappRbacConfig;
21
+ getTableIds: (headers: any, session: Session) => Promise<TableIds>;
22
+ listRoles: (headers: any, session: Session) => Promise<AxiosUtilsResponse<WebAppRowGraphQL<WebappRole>[]>>;
23
+ getRoleById: (session: Session, roleId: number) => Promise<AxiosUtilsResponse<WebappRole | null>>;
24
+ createRole: (headers: any, session: Session, body: CreateRoleInput) => Promise<AxiosUtilsResponse<WebAppTableUpdateResponse>>;
25
+ updateRole: (headers: any, session: Session, roleId: number, body: UpdateRoleInput) => Promise<AxiosUtilsResponse<WebAppTableUpdateResponse>>;
26
+ deleteRole: (headers: any, session: Session, roleId: number) => Promise<AxiosUtilsResponse<WebAppTableUpdateResponse>>;
27
+ syncRolePermissionKeys: (headers: any, session: Session, roleId: number, keys: string[]) => Promise<AxiosUtilsResponse<WebAppTableUpdateResponse>>;
28
+ listEmployeeRoles: (headers: any, session: Session, employeeId?: number) => Promise<AxiosUtilsResponse<WebAppRowGraphQL<WebappEmployeeRole>[]>>;
29
+ assignEmployeeRole: (headers: any, session: Session, body: AssignEmployeeRoleInput) => Promise<AxiosUtilsResponse<WebAppTableUpdateResponse>>;
30
+ resolveAccess: (headers: any, session: Session) => Promise<WebappAccessContext | null>;
31
+ hasAppAccess: (headers: any, session: Session) => Promise<boolean>;
32
+ requireAppAccess: (headers: any, session: Session) => Promise<WebappAccessContext>;
33
+ requirePermission: (headers: any, session: Session, key: string) => Promise<WebappAccessContext>;
34
+ hasPermission: typeof hasPermissionInContext;
35
+ isSuperAdminEmail: (email: string | null | undefined) => boolean;
36
+ };
37
+ export type WebappRbac = ReturnType<typeof createWebappRbac>;
38
+ export {};
@@ -0,0 +1,3 @@
1
+ export { addPermissionKeys, allPermissionKeysFromGroups, DEFAULT_SUPER_ADMIN_EMAIL_SUFFIXES, flattenPermissionRows, isValidPermissionKey, normalizeIdList, normalizePermissionKeys, removePermissionKeys, togglePermissionKey, } from "./catalog.js";
2
+ export { emptyAccessContext, hasPermission, hasPermissionKey, isActiveWebappRow, isSuperAdminEmail, } from "./access.js";
3
+ export { createWebappRbac, type AssignEmployeeRoleInput, type CreateRoleInput, type UpdateRoleInput, type WebappRbac, } from "./createWebappRbac.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zauru-sdk/utils",
3
- "version": "6.20.0",
3
+ "version": "6.22.0",
4
4
  "description": "Utilidades, parseo de request y demás para desarrollo de webapps de Zauru",
5
5
  "main": "./dist/esm/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -71,12 +71,12 @@
71
71
  "dependencies": {
72
72
  "@aws-sdk/client-cloudwatch-logs": "^3.1123.0",
73
73
  "@remix-run/node": "^2.8.1",
74
- "@zauru-sdk/common": "^6.8.3",
74
+ "@zauru-sdk/common": "^6.8.5",
75
75
  "@zauru-sdk/config": "^6.0.0",
76
76
  "@zauru-sdk/graphql": "^6.8.0",
77
- "@zauru-sdk/services": "^6.11.6",
78
- "@zauru-sdk/types": "^6.21.0",
77
+ "@zauru-sdk/services": "^6.11.8",
78
+ "@zauru-sdk/types": "^6.23.0",
79
79
  "moment": "^2.30.1"
80
80
  },
81
- "gitHead": "7d373b9f5c25ab0198e72590c661bc9eb17cf80f"
81
+ "gitHead": "a3c1f2af46acb59cf9fcb78ecb18d904e33c61e5"
82
82
  }