@esb-market-contracts/admin-backend 1.4.8 → 1.4.10
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/api.d.ts +5 -5
- package/enums.d.ts +3 -3
- package/enums.js +3 -3
- package/index.d.ts +2 -3
- package/index.js +1 -2
- package/package.json +6 -6
- package/{schemas.d.ts → types.d.ts} +1 -2
- package/types.js +1 -0
- package/schemas.js +0 -243
package/api.d.ts
CHANGED
|
@@ -17,28 +17,28 @@ declare const authRouter: import("hono/hono-base").HonoBase<{}, {
|
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
19
|
} & {
|
|
20
|
-
"/iam/authentication/
|
|
20
|
+
"/iam/authentication/logout": {
|
|
21
21
|
$post: {
|
|
22
22
|
input: {};
|
|
23
23
|
output: import("@kalutskii/foundation").APIError | import("@kalutskii/foundation").APISuccess<{
|
|
24
|
-
|
|
24
|
+
[x: string]: never;
|
|
25
25
|
}>;
|
|
26
26
|
outputFormat: "json";
|
|
27
27
|
status: 200;
|
|
28
28
|
};
|
|
29
29
|
};
|
|
30
30
|
} & {
|
|
31
|
-
"/iam/authentication/
|
|
31
|
+
"/iam/authentication/refresh": {
|
|
32
32
|
$post: {
|
|
33
33
|
input: {};
|
|
34
34
|
output: import("@kalutskii/foundation").APIError | import("@kalutskii/foundation").APISuccess<{
|
|
35
|
-
|
|
35
|
+
accessToken: string;
|
|
36
36
|
}>;
|
|
37
37
|
outputFormat: "json";
|
|
38
38
|
status: 200;
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
|
-
}, "/iam/authentication", "/iam/authentication/
|
|
41
|
+
}, "/iam/authentication", "/iam/authentication/refresh">;
|
|
42
42
|
export type AuthRouter = typeof authRouter;
|
|
43
43
|
|
|
44
44
|
export {};
|
package/enums.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// Generated by dts-bundle-generator v9.5.1
|
|
2
2
|
|
|
3
|
-
declare const
|
|
3
|
+
declare const pbacPermissionsArray: readonly [
|
|
4
4
|
"employee.create",
|
|
5
5
|
"employee.read",
|
|
6
6
|
"employee.update"
|
|
7
7
|
];
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const pbacPermissions: {
|
|
9
9
|
"EMPLOYEE.CREATE": "employee.create";
|
|
10
10
|
"EMPLOYEE.READ": "employee.read";
|
|
11
11
|
"EMPLOYEE.UPDATE": "employee.update";
|
|
12
12
|
};
|
|
13
|
-
export type PBACPermission = (typeof
|
|
13
|
+
export type PBACPermission = (typeof pbacPermissionsArray)[number];
|
|
14
14
|
|
|
15
15
|
export {};
|
package/enums.js
CHANGED
|
@@ -4,8 +4,8 @@ function createStringEnumRecord(values) {
|
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
// src/app/domain/(iam)/employees-permissions/employees-permissions.enums.ts
|
|
7
|
-
var
|
|
8
|
-
var
|
|
7
|
+
var pbacPermissionsArray = ["employee.create", "employee.read", "employee.update"];
|
|
8
|
+
var pbacPermissions = createStringEnumRecord(pbacPermissionsArray);
|
|
9
9
|
export {
|
|
10
|
-
|
|
10
|
+
pbacPermissions
|
|
11
11
|
};
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export * from './enums.js';
|
|
2
|
-
export * from './schemas.js';
|
|
1
|
+
export * from './enums.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esb-market-contracts/admin-backend",
|
|
3
3
|
"description": "Shared TypeScript contract definitions for admin-backend.",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.10",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"api.js",
|
|
13
13
|
"enums.d.ts",
|
|
14
14
|
"enums.js",
|
|
15
|
-
"
|
|
16
|
-
"
|
|
15
|
+
"types.d.ts",
|
|
16
|
+
"types.js"
|
|
17
17
|
],
|
|
18
18
|
"exports": {
|
|
19
19
|
".": {
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"types": "./enums.d.ts",
|
|
29
29
|
"default": "./enums.js"
|
|
30
30
|
},
|
|
31
|
-
"./
|
|
32
|
-
"types": "./
|
|
33
|
-
"default": "./
|
|
31
|
+
"./types": {
|
|
32
|
+
"types": "./types.d.ts",
|
|
33
|
+
"default": "./types.js"
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
"types": "./index.d.ts"
|
|
@@ -6,8 +6,7 @@ declare const authorizeRequestSchema: z.ZodObject<{
|
|
|
6
6
|
email: z.ZodEmail;
|
|
7
7
|
password: z.ZodString;
|
|
8
8
|
}, z.core.$strip>;
|
|
9
|
-
|
|
10
|
-
export declare const accessTokenPayloadSchema: z.ZodObject<{
|
|
9
|
+
declare const accessTokenPayloadSchema: z.ZodObject<{
|
|
11
10
|
employee: z.ZodObject<{
|
|
12
11
|
id: z.ZodInt;
|
|
13
12
|
email: z.ZodString;
|
package/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/schemas.js
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
// src/app/flows/authentication/authentication.schemas.ts
|
|
2
|
-
import { z as z5 } from "zod";
|
|
3
|
-
|
|
4
|
-
// src/app/domain/(iam)/employees/employees.audit.ts
|
|
5
|
-
import { z } from "zod";
|
|
6
|
-
var employeesAuditEvents = {
|
|
7
|
-
"employee.created": z.object({ targetEmployeeId: z.number() }),
|
|
8
|
-
"employee.suspended": z.object({ targetEmployeeId: z.number() }),
|
|
9
|
-
"employee.activated": z.object({ targetEmployeeId: z.number() }),
|
|
10
|
-
"employee.passwordReset": z.object({ targetEmployeeId: z.number() })
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
// src/app/domain/(iam)/employees/employees.drizzle.ts
|
|
14
|
-
import { sql } from "drizzle-orm";
|
|
15
|
-
import { check, pgTable, serial, text, timestamp } from "drizzle-orm/pg-core";
|
|
16
|
-
|
|
17
|
-
// src/app/domain/(iam)/employees/employees.enums.ts
|
|
18
|
-
import { pgEnum } from "drizzle-orm/pg-core";
|
|
19
|
-
|
|
20
|
-
// src/utilities/enums.utilities.ts
|
|
21
|
-
function createStringEnumRecord(values) {
|
|
22
|
-
return Object.fromEntries(values.map((value) => [value.toUpperCase(), value]));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// src/app/domain/(iam)/employees/employees.enums.ts
|
|
26
|
-
var employeeStatuses = ["active", "suspended"];
|
|
27
|
-
var employeeStatusesRecord = createStringEnumRecord(employeeStatuses);
|
|
28
|
-
var employeeStatusPGEnum = pgEnum("employee_status", employeeStatuses);
|
|
29
|
-
|
|
30
|
-
// src/app/domain/(iam)/employees/employees.drizzle.ts
|
|
31
|
-
var employeesTable = pgTable("employees", {
|
|
32
|
-
id: serial("id").primaryKey(),
|
|
33
|
-
email: text("email").notNull().unique(),
|
|
34
|
-
fullName: text("full_name").notNull(),
|
|
35
|
-
status: employeeStatusPGEnum("status").notNull().default("active"),
|
|
36
|
-
passwordDigest: text("password_digest").notNull(),
|
|
37
|
-
updatedAt: timestamp("updated_at").$onUpdateFn(() => /* @__PURE__ */ new Date()),
|
|
38
|
-
createdAt: timestamp("created_at").notNull().defaultNow()
|
|
39
|
-
}, (table) => [
|
|
40
|
-
// Database-level email field format validation using a regex pattern.
|
|
41
|
-
check("employees_email_check", sql`${table.email} ~* '^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$'`)
|
|
42
|
-
]);
|
|
43
|
-
|
|
44
|
-
// src/drizzle/drizzle.database.ts
|
|
45
|
-
import { drizzle } from "drizzle-orm/postgres-js";
|
|
46
|
-
|
|
47
|
-
// src/app/domain/(iam)/audit-logs/audit-logs.relations.ts
|
|
48
|
-
import { defineRelationsPart } from "drizzle-orm";
|
|
49
|
-
|
|
50
|
-
// src/app/domain/(iam)/audit-logs/audit-logs.drizzle.ts
|
|
51
|
-
import { sql as sql2 } from "drizzle-orm";
|
|
52
|
-
import { check as check2, index, integer, jsonb, pgTable as pgTable2, serial as serial2, text as text2, timestamp as timestamp2 } from "drizzle-orm/pg-core";
|
|
53
|
-
var auditLogsTable = pgTable2("audit_logs", {
|
|
54
|
-
id: serial2("id").primaryKey(),
|
|
55
|
-
actorEmployeeId: integer("actor_employee_id").references(() => employeesTable.id, {
|
|
56
|
-
onDelete: "set null"
|
|
57
|
-
}),
|
|
58
|
-
event: text2("event").notNull().$type(),
|
|
59
|
-
payload: jsonb("payload"),
|
|
60
|
-
createdAt: timestamp2("created_at").notNull().defaultNow()
|
|
61
|
-
}, (table) => [
|
|
62
|
-
// Ensure event is not empty and payload is a valid JSON object.
|
|
63
|
-
check2("audit_event_check", sql2`${table.event} != ''`),
|
|
64
|
-
check2("audit_payload_check", sql2`jsonb_typeof(${table.payload}) = 'object'`),
|
|
65
|
-
// Indexes for efficient querying by employeeId and event type.
|
|
66
|
-
index("audit_logs_actor_employee_id_idx").on(table.actorEmployeeId),
|
|
67
|
-
index("audit_logs_event_idx").on(table.event),
|
|
68
|
-
index("audit_logs_created_at_idx").on(table.createdAt)
|
|
69
|
-
]);
|
|
70
|
-
|
|
71
|
-
// src/app/domain/(iam)/audit-logs/audit-logs.relations.ts
|
|
72
|
-
var auditLogsRelationsPart = defineRelationsPart({ auditLogsTable, employeesTable }, (r) => ({
|
|
73
|
-
auditLogsTable: {
|
|
74
|
-
employee: r.one.employeesTable({
|
|
75
|
-
from: r.auditLogsTable.actorEmployeeId,
|
|
76
|
-
to: r.employeesTable.id
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
}));
|
|
80
|
-
|
|
81
|
-
// src/app/domain/(iam)/employees-permissions/employees-permissions.relations.ts
|
|
82
|
-
import { defineRelationsPart as defineRelationsPart2 } from "drizzle-orm";
|
|
83
|
-
|
|
84
|
-
// src/app/domain/(iam)/employees-permissions/employees-permissions.drizzle.ts
|
|
85
|
-
import { integer as integer2, pgTable as pgTable3, serial as serial3, text as text3, unique } from "drizzle-orm/pg-core";
|
|
86
|
-
var employeesPermissionsTable = pgTable3("employees_permissions", {
|
|
87
|
-
id: serial3("id").primaryKey(),
|
|
88
|
-
permission: text3("permission").notNull().$type(),
|
|
89
|
-
employeeId: integer2("employee_id").notNull().references(() => employeesTable.id, { onDelete: "cascade" })
|
|
90
|
-
}, (table) => [
|
|
91
|
-
// Unique constraint on (employeeId, permission) to prevent duplicate permissions for the same employee.
|
|
92
|
-
unique("employees_permissions_employee_id_permission_unique").on(table.employeeId, table.permission)
|
|
93
|
-
]);
|
|
94
|
-
|
|
95
|
-
// src/app/domain/(iam)/employees-permissions/employees-permissions.relations.ts
|
|
96
|
-
var employeesPermissionsRelationsPart = defineRelationsPart2({ employeesPermissionsTable, employeesTable }, (r) => ({
|
|
97
|
-
employeesPermissionsTable: {
|
|
98
|
-
employee: r.one.employeesTable({
|
|
99
|
-
from: r.employeesPermissionsTable.employeeId,
|
|
100
|
-
to: r.employeesTable.id
|
|
101
|
-
})
|
|
102
|
-
}
|
|
103
|
-
}));
|
|
104
|
-
|
|
105
|
-
// src/app/domain/(iam)/employees/employees.relations.ts
|
|
106
|
-
import { defineRelationsPart as defineRelationsPart3 } from "drizzle-orm";
|
|
107
|
-
|
|
108
|
-
// src/app/domain/(iam)/employees-permissions/employees-permissions.audit.ts
|
|
109
|
-
import { z as z2 } from "zod";
|
|
110
|
-
|
|
111
|
-
// src/app/domain/(iam)/employees-permissions/employees-permissions.enums.ts
|
|
112
|
-
var PBACPermissionItems = ["employee.create", "employee.read", "employee.update"];
|
|
113
|
-
var PBACPermissions = createStringEnumRecord(PBACPermissionItems);
|
|
114
|
-
|
|
115
|
-
// src/app/domain/(iam)/employees-permissions/employees-permissions.audit.ts
|
|
116
|
-
var employeesPermissionsAuditEvents = {
|
|
117
|
-
"permissions.updated": z2.object({
|
|
118
|
-
targetEmployeeId: z2.number(),
|
|
119
|
-
newPermissions: z2.array(z2.enum(PBACPermissionItems))
|
|
120
|
-
})
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
// src/app/domain/(iam)/sessions/sessions.audit.ts
|
|
124
|
-
import { z as z3 } from "zod";
|
|
125
|
-
var sessionsAuditEvents = {
|
|
126
|
-
"session.created": z3.object({ userAgent: z3.string().optional() }),
|
|
127
|
-
"session.revoked": z3.object({
|
|
128
|
-
targetSessionId: z3.number(),
|
|
129
|
-
actorEmployeeId: z3.number().optional()
|
|
130
|
-
// Required only if the actor is not the owner of the session.
|
|
131
|
-
})
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
// src/app/domain/(iam)/sessions/sessions.drizzle.ts
|
|
135
|
-
import { index as index2, integer as integer3, pgTable as pgTable4, serial as serial4, text as text4, timestamp as timestamp3 } from "drizzle-orm/pg-core";
|
|
136
|
-
var sessionsTable = pgTable4("sessions", {
|
|
137
|
-
id: serial4("id").primaryKey(),
|
|
138
|
-
refreshTokenDigest: text4("refresh_token_digest").notNull().unique(),
|
|
139
|
-
employeeId: integer3("employee_id").notNull().references(() => employeesTable.id, { onDelete: "cascade" }),
|
|
140
|
-
createdAt: timestamp3("created_at").notNull().defaultNow(),
|
|
141
|
-
expiresAt: timestamp3("expires_at").notNull(),
|
|
142
|
-
revokedAt: timestamp3("revoked_at")
|
|
143
|
-
}, (table) => [
|
|
144
|
-
// Indexes for efficient querying by employeeId and expiration time.
|
|
145
|
-
index2("sessions_employee_id_idx").on(table.employeeId),
|
|
146
|
-
index2("sessions_expires_at_idx").on(table.expiresAt)
|
|
147
|
-
]);
|
|
148
|
-
|
|
149
|
-
// src/app/domain/(iam)/sessions/sessions.schemas.ts
|
|
150
|
-
import { createInsertSchema, createSelectSchema } from "drizzle-orm/zod";
|
|
151
|
-
var sessionSchema = createSelectSchema(sessionsTable);
|
|
152
|
-
var sessionInsertSchema = createInsertSchema(sessionsTable);
|
|
153
|
-
|
|
154
|
-
// src/app/domain/(iam)/sessions/sessions.repository.ts
|
|
155
|
-
import { eq } from "drizzle-orm";
|
|
156
|
-
|
|
157
|
-
// src/app/domain/(iam)/audit-logs/audit-logs.registry.ts
|
|
158
|
-
var auditEventsRegistry = {
|
|
159
|
-
...employeesPermissionsAuditEvents,
|
|
160
|
-
...employeesAuditEvents,
|
|
161
|
-
...sessionsAuditEvents
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
// src/app/domain/(iam)/employees/employees.relations.ts
|
|
165
|
-
var employeesRelationsPart = defineRelationsPart3({ employeesTable, employeesPermissionsTable, auditLogsTable, sessionsTable }, (r) => ({
|
|
166
|
-
employeesTable: {
|
|
167
|
-
sessions: r.many.sessionsTable({
|
|
168
|
-
from: r.employeesTable.id,
|
|
169
|
-
to: r.sessionsTable.employeeId
|
|
170
|
-
}),
|
|
171
|
-
auditLogs: r.many.auditLogsTable({
|
|
172
|
-
from: r.employeesTable.id,
|
|
173
|
-
to: r.auditLogsTable.actorEmployeeId
|
|
174
|
-
}),
|
|
175
|
-
permissions: r.many.employeesPermissionsTable({
|
|
176
|
-
from: r.employeesTable.id,
|
|
177
|
-
to: r.employeesPermissionsTable.employeeId
|
|
178
|
-
})
|
|
179
|
-
}
|
|
180
|
-
}));
|
|
181
|
-
|
|
182
|
-
// src/app/domain/(iam)/sessions/sessions.relations.ts
|
|
183
|
-
import { defineRelationsPart as defineRelationsPart4 } from "drizzle-orm";
|
|
184
|
-
var sessionsRelationsPart = defineRelationsPart4({ sessionsTable, employeesTable }, (r) => ({
|
|
185
|
-
sessionsTable: {
|
|
186
|
-
employee: r.one.employeesTable({
|
|
187
|
-
from: r.sessionsTable.employeeId,
|
|
188
|
-
to: r.employeesTable.id
|
|
189
|
-
})
|
|
190
|
-
}
|
|
191
|
-
}));
|
|
192
|
-
|
|
193
|
-
// src/app/domain/domain.registry.ts
|
|
194
|
-
var domainRelationsRegistry = {
|
|
195
|
-
...auditLogsRelationsPart,
|
|
196
|
-
...employeesRelationsPart,
|
|
197
|
-
...employeesPermissionsRelationsPart,
|
|
198
|
-
...sessionsRelationsPart
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
// src/internal/env.config.ts
|
|
202
|
-
import { createEnv } from "@t3-oss/env-core";
|
|
203
|
-
import { z as z4 } from "zod";
|
|
204
|
-
var env = createEnv({
|
|
205
|
-
server: {
|
|
206
|
-
// Database settings for Drizzle ORM
|
|
207
|
-
DRIZZLE_DB_URL: z4.url().min(8).max(256),
|
|
208
|
-
DRIZZLE_MIGRATIONS_FOLDER: z4.string().min(1).max(256),
|
|
209
|
-
// Bun server settings
|
|
210
|
-
BUN_SERVER_PORT: z4.coerce.number().int().positive().min(1).max(65535),
|
|
211
|
-
BUN_SERVER_HOST: z4.string().min(1).max(64).optional().default("0.0.0.0"),
|
|
212
|
-
// Ecosystem variables
|
|
213
|
-
ESB_MARKET_SPACE_JWT_SECRET: z4.string().min(16).max(256),
|
|
214
|
-
// Peripheral settings, usually not required in the environment
|
|
215
|
-
DEFAULT_TIMEZONE: z4.string().min(4).max(256).optional().default("Asia/Tbilisi"),
|
|
216
|
-
NODE_ENV: z4.enum(["development", "production", "test"]).optional().default("development")
|
|
217
|
-
},
|
|
218
|
-
runtimeEnv: process.env,
|
|
219
|
-
emptyStringAsUndefined: true
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
// src/drizzle/drizzle.database.ts
|
|
223
|
-
var db = drizzle(env.DRIZZLE_DB_URL, { relations: domainRelationsRegistry });
|
|
224
|
-
|
|
225
|
-
// src/app/domain/(iam)/employees/employees.schemas.ts
|
|
226
|
-
import { createSelectSchema as createSelectSchema2 } from "drizzle-orm/zod";
|
|
227
|
-
var employeeSchema = createSelectSchema2(employeesTable);
|
|
228
|
-
|
|
229
|
-
// src/app/domain/(iam)/employees/employees.exceptions.ts
|
|
230
|
-
import { HTTPException } from "hono/http-exception";
|
|
231
|
-
|
|
232
|
-
// src/app/flows/authentication/authentication.schemas.ts
|
|
233
|
-
var authorizeRequestSchema = z5.object({
|
|
234
|
-
email: z5.email().min(8).max(128),
|
|
235
|
-
password: z5.string().min(8).max(128)
|
|
236
|
-
});
|
|
237
|
-
var accessTokenPayloadSchema = z5.object({
|
|
238
|
-
employee: employeeSchema.pick({ id: true, email: true, fullName: true }),
|
|
239
|
-
permissions: z5.array(z5.enum(PBACPermissionItems))
|
|
240
|
-
});
|
|
241
|
-
export {
|
|
242
|
-
accessTokenPayloadSchema
|
|
243
|
-
};
|