order-management 0.0.96 → 0.0.97

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.
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const deleted_records_audit_1 = require("../../../../modules/deleted-records-audit");
5
+ /**
6
+ * GET /admin/deleted-records-audit/:id
7
+ * Single audit entry including the full `old_data` snapshot.
8
+ */
9
+ const GET = async (req, res) => {
10
+ const id = typeof req.params?.id === "string" ? req.params.id.trim() : "";
11
+ if (!id) {
12
+ res.status(400).json({ message: "Audit id is required" });
13
+ return;
14
+ }
15
+ try {
16
+ const service = req.scope.resolve(deleted_records_audit_1.DELETED_RECORDS_AUDIT_MODULE);
17
+ const audit = await service.retrieveAudit(id);
18
+ if (!audit) {
19
+ res.status(404).json({ message: `Deleted record audit ${id} not found` });
20
+ return;
21
+ }
22
+ res.status(200).json({ audit });
23
+ }
24
+ catch (error) {
25
+ const message = error instanceof Error ? error.message : "Failed to load deleted record";
26
+ res.status(500).json({ message });
27
+ }
28
+ };
29
+ exports.GET = GET;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RlbGV0ZWQtcmVjb3Jkcy1hdWRpdC9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFGQUF3RjtBQUl4Rjs7O0dBR0c7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDekUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO1FBQ3pELE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQW1DLG9EQUE0QixDQUFDLENBQUE7UUFDakcsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7WUFDekUsT0FBTTtRQUNSLENBQUM7UUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBNkMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUE7UUFDeEYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7QUFDSCxDQUFDLENBQUE7QUFuQlksUUFBQSxHQUFHLE9BbUJmIn0=
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const deleted_records_audit_1 = require("../../../modules/deleted-records-audit");
5
+ const validators_1 = require("./validators");
6
+ /**
7
+ * GET /admin/deleted-records-audit
8
+ * Paginated hard-delete audit entries, newest first. `old_data` is only returned by the detail route.
9
+ */
10
+ const GET = async (req, res) => {
11
+ const parsed = validators_1.AdminListDeletedRecordAuditsSchema.safeParse(req.query ?? {});
12
+ if (!parsed.success) {
13
+ res.status(400).json({
14
+ message: "Invalid filters",
15
+ errors: parsed.error.issues.map((issue) => ({
16
+ path: issue.path.join("."),
17
+ message: issue.message,
18
+ })),
19
+ });
20
+ return;
21
+ }
22
+ const query = parsed.data;
23
+ try {
24
+ const service = req.scope.resolve(deleted_records_audit_1.DELETED_RECORDS_AUDIT_MODULE);
25
+ const { audits, count } = await service.listAudits({
26
+ limit: query.limit,
27
+ offset: query.offset,
28
+ q: query.q,
29
+ table_names: (0, validators_1.resolveTableNames)(query),
30
+ date_from: query.date_from,
31
+ date_to: query.date_to,
32
+ source: query.source,
33
+ deleted_by: query.deleted_by,
34
+ });
35
+ res.status(200).json({
36
+ audits,
37
+ count,
38
+ limit: query.limit,
39
+ offset: query.offset,
40
+ });
41
+ }
42
+ catch (error) {
43
+ const message = error instanceof Error ? error.message : "Failed to list deleted records";
44
+ res.status(500).json({ message });
45
+ }
46
+ };
47
+ exports.GET = GET;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RlbGV0ZWQtcmVjb3Jkcy1hdWRpdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrRkFBcUY7QUFHckYsNkNBQW9GO0FBU3BGOzs7R0FHRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLE1BQU0sR0FBRywrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ3ZCLENBQUMsQ0FBQztTQUNKLENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQTtJQUN6QixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBbUMsb0RBQTRCLENBQUMsQ0FBQTtRQUNqRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNWLFdBQVcsRUFBRSxJQUFBLDhCQUFpQixFQUFDLEtBQUssQ0FBQztZQUNyQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQyxDQUFBO1FBQ0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbkIsTUFBTTtZQUNOLEtBQUs7WUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1NBQ0UsQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUE7UUFDekYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ25DLENBQUM7QUFDSCxDQUFDLENBQUE7QUFwQ1ksUUFBQSxHQUFHLE9Bb0NmIn0=
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const deleted_records_audit_1 = require("../../../../modules/deleted-records-audit");
5
+ const validators_1 = require("../validators");
6
+ /**
7
+ * GET /admin/deleted-records-audit/stats
8
+ * All-time aggregates for the summary cards plus distinct source / deleted_by values for filters.
9
+ */
10
+ const GET = async (req, res) => {
11
+ const parsed = validators_1.AdminDeletedRecordAuditStatsSchema.safeParse(req.query ?? {});
12
+ if (!parsed.success) {
13
+ res.status(400).json({ message: "Invalid today_start" });
14
+ return;
15
+ }
16
+ try {
17
+ const service = req.scope.resolve(deleted_records_audit_1.DELETED_RECORDS_AUDIT_MODULE);
18
+ const stats = await service.getStats({ today_start: parsed.data.today_start });
19
+ res.status(200).json({ stats });
20
+ }
21
+ catch (error) {
22
+ const message = error instanceof Error ? error.message : "Failed to load deleted records stats";
23
+ res.status(500).json({ message });
24
+ }
25
+ };
26
+ exports.GET = GET;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2RlbGV0ZWQtcmVjb3Jkcy1hdWRpdC9zdGF0cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxRkFBd0Y7QUFHeEYsOENBQWtFO0FBRWxFOzs7R0FHRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNuRSxNQUFNLE1BQU0sR0FBRywrQ0FBa0MsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM1RSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQTtRQUN4RCxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFtQyxvREFBNEIsQ0FBQyxDQUFBO1FBQ2pHLE1BQU0sS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7UUFDOUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQWtELENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFBO1FBQy9GLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBZlksUUFBQSxHQUFHLE9BZWYifQ==
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AdminDeletedRecordAuditStatsSchema = exports.AdminListDeletedRecordAuditsSchema = void 0;
4
+ exports.resolveTableNames = resolveTableNames;
5
+ const zod_1 = require("zod");
6
+ const optionalDate = zod_1.z
7
+ .string()
8
+ .trim()
9
+ .optional()
10
+ .transform((value, ctx) => {
11
+ if (!value)
12
+ return undefined;
13
+ const date = new Date(value);
14
+ if (Number.isNaN(date.getTime())) {
15
+ ctx.addIssue({ code: "custom", message: `Invalid date: ${value}` });
16
+ return zod_1.z.NEVER;
17
+ }
18
+ return date;
19
+ });
20
+ const optionalTrimmed = zod_1.z
21
+ .string()
22
+ .optional()
23
+ .transform((value) => {
24
+ const trimmed = value?.trim();
25
+ return trimmed ? trimmed : undefined;
26
+ });
27
+ const TABLE_NAME_PATTERN = /^[a-z0-9_]+$/;
28
+ exports.AdminListDeletedRecordAuditsSchema = zod_1.z.object({
29
+ limit: zod_1.z.coerce.number().int().positive().max(100).default(50),
30
+ offset: zod_1.z.coerce.number().int().nonnegative().default(0),
31
+ q: optionalTrimmed,
32
+ table_name: optionalTrimmed,
33
+ /** Comma-separated list, used when filtering by a whole category. */
34
+ table_names: optionalTrimmed,
35
+ date_from: optionalDate,
36
+ date_to: optionalDate,
37
+ source: optionalTrimmed,
38
+ deleted_by: optionalTrimmed,
39
+ });
40
+ function resolveTableNames(query) {
41
+ const names = new Set();
42
+ if (query.table_name)
43
+ names.add(query.table_name);
44
+ if (query.table_names) {
45
+ for (const part of query.table_names.split(",")) {
46
+ const name = part.trim();
47
+ if (name)
48
+ names.add(name);
49
+ }
50
+ }
51
+ const valid = [...names].filter((name) => TABLE_NAME_PATTERN.test(name));
52
+ return valid.length ? valid : undefined;
53
+ }
54
+ exports.AdminDeletedRecordAuditStatsSchema = zod_1.z.object({
55
+ today_start: optionalDate,
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvYWRtaW4vZGVsZXRlZC1yZWNvcmRzLWF1ZGl0L3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUNBLDhDQVdDO0FBcERELDZCQUF1QjtBQUV2QixNQUFNLFlBQVksR0FBRyxPQUFDO0tBQ25CLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLFFBQVEsRUFBRTtLQUNWLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUN4QixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLE9BQU8sT0FBQyxDQUFDLEtBQUssQ0FBQTtJQUNoQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUMsQ0FBQTtBQUVKLE1BQU0sZUFBZSxHQUFHLE9BQUM7S0FDdEIsTUFBTSxFQUFFO0tBQ1IsUUFBUSxFQUFFO0tBQ1YsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDbkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQzdCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUN0QyxDQUFDLENBQUMsQ0FBQTtBQUVKLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFBO0FBRTVCLFFBQUEsa0NBQWtDLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUMsRUFBRSxlQUFlO0lBQ2xCLFVBQVUsRUFBRSxlQUFlO0lBQzNCLHFFQUFxRTtJQUNyRSxXQUFXLEVBQUUsZUFBZTtJQUM1QixTQUFTLEVBQUUsWUFBWTtJQUN2QixPQUFPLEVBQUUsWUFBWTtJQUNyQixNQUFNLEVBQUUsZUFBZTtJQUN2QixVQUFVLEVBQUUsZUFBZTtDQUM1QixDQUFDLENBQUE7QUFJRixTQUFnQixpQkFBaUIsQ0FBQyxLQUF3QztJQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0lBQy9CLElBQUksS0FBSyxDQUFDLFVBQVU7UUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNqRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFBO1lBQ3hCLElBQUksSUFBSTtnQkFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUN6QyxDQUFDO0FBRVksUUFBQSxrQ0FBa0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELFdBQVcsRUFBRSxZQUFZO0NBQzFCLENBQUMsQ0FBQSJ9
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AUDIT_TRIGGER_FUNCTION = exports.AUDIT_TABLE_NAME = exports.AUDITED_TABLE_NAMES = void 0;
4
+ exports.auditTriggerName = auditTriggerName;
5
+ exports.buildCreateAuditTriggerSql = buildCreateAuditTriggerSql;
6
+ exports.buildDropAuditTriggerSql = buildDropAuditTriggerSql;
7
+ /**
8
+ * Tables that receive a BEFORE DELETE audit trigger.
9
+ * Tables missing from the database are skipped at migration time.
10
+ * Never add `deleted_records_audit` here (the trigger would recurse).
11
+ */
12
+ exports.AUDITED_TABLE_NAMES = [
13
+ "account_deletion_request",
14
+ "account_holder",
15
+ "api_key",
16
+ "application_method_buy_rules",
17
+ "application_method_target_rules",
18
+ "auth_identity",
19
+ "auth_mfa_factor",
20
+ "auth_mfa_recovery_code",
21
+ "auth_password_reset_token",
22
+ "auth_verification",
23
+ "cancel_order_reason_mapping",
24
+ "capture",
25
+ "cart",
26
+ "cart_address",
27
+ "cart_line_item",
28
+ "cart_line_item_adjustment",
29
+ "cart_line_item_tax_line",
30
+ "cart_payment_collection",
31
+ "cart_promotion",
32
+ "cart_shipping_method",
33
+ "cart_shipping_method_adjustment",
34
+ "cart_shipping_method_tax_line",
35
+ "contact_email_subscription",
36
+ "contact_request",
37
+ "contact_request_comment",
38
+ "credit_line",
39
+ "currency",
40
+ "customer",
41
+ "customer_account_holder",
42
+ "customer_address",
43
+ "customer_group",
44
+ "customer_group_customer",
45
+ "dynamic_config_value",
46
+ "fulfillment",
47
+ "fulfillment_address",
48
+ "fulfillment_item",
49
+ "fulfillment_label",
50
+ "fulfillment_provider",
51
+ "fulfillment_set",
52
+ "geo_zone",
53
+ "image",
54
+ "inventory_count_item",
55
+ "inventory_count_session",
56
+ "inventory_item",
57
+ "inventory_level",
58
+ "inventory_movement",
59
+ "inventory_purchase",
60
+ "inventory_purchase_attachment",
61
+ "inventory_purchase_audit_event",
62
+ "inventory_purchase_batch",
63
+ "inventory_purchase_line_item",
64
+ "invite",
65
+ "invite_rbac_role",
66
+ "invoice",
67
+ "invoice_sequence",
68
+ "layout_configuration",
69
+ "link_module_migrations",
70
+ "location_fulfillment_provider",
71
+ "location_fulfillment_set",
72
+ "loyalty_gift_card",
73
+ "mikro_orm_migrations",
74
+ "notification",
75
+ "notification_provider",
76
+ "notification_tokens",
77
+ "order",
78
+ "order_address",
79
+ "order_cart",
80
+ "order_change",
81
+ "order_change_action",
82
+ "order_claim",
83
+ "order_claim_item",
84
+ "order_claim_item_image",
85
+ "order_credit_line",
86
+ "order_exchange",
87
+ "order_exchange_item",
88
+ "order_fulfillment",
89
+ "order_item",
90
+ "order_line_item",
91
+ "order_line_item_adjustment",
92
+ "order_line_item_tax_line",
93
+ "order_payment_collection",
94
+ "order_promotion",
95
+ "order_shipping",
96
+ "order_shipping_method",
97
+ "order_shipping_method_adjustment",
98
+ "order_shipping_method_tax_line",
99
+ "order_summary",
100
+ "order_transaction",
101
+ "otp_verification",
102
+ "payment",
103
+ "payment_collection",
104
+ "payment_collection_payment_providers",
105
+ "payment_detail",
106
+ "payment_provider",
107
+ "payment_session",
108
+ "payout_request",
109
+ "price",
110
+ "price_list",
111
+ "price_list_rule",
112
+ "price_preference",
113
+ "price_rule",
114
+ "price_set",
115
+ "product",
116
+ "product_category",
117
+ "product_category_product",
118
+ "product_collection",
119
+ "product_display_priority",
120
+ "product_option",
121
+ "product_option_value",
122
+ "product_product_option",
123
+ "product_product_option_value",
124
+ "product_sales_channel",
125
+ "product_shipping_profile",
126
+ "product_tag",
127
+ "product_tags",
128
+ "product_type",
129
+ "product_variant",
130
+ "product_variant_inventory_item",
131
+ "product_variant_option",
132
+ "product_variant_price_set",
133
+ "product_variant_product_image",
134
+ "product_view",
135
+ "promotion",
136
+ "promotion_application_method",
137
+ "promotion_campaign",
138
+ "promotion_campaign_budget",
139
+ "promotion_campaign_budget_usage",
140
+ "promotion_promotion_rule",
141
+ "promotion_rule",
142
+ "promotion_rule_value",
143
+ "property_label",
144
+ "provider_identity",
145
+ "publishable_api_key_sales_channel",
146
+ "purchase_supplier",
147
+ "referral_link",
148
+ "referral_reward",
149
+ "refund",
150
+ "refund_payment_mapping",
151
+ "refund_reason",
152
+ "region",
153
+ "region_country",
154
+ "region_payment_provider",
155
+ "reservation_item",
156
+ "return",
157
+ "return_fulfillment",
158
+ "return_item",
159
+ "return_reason",
160
+ "review",
161
+ "sales_channel",
162
+ "sales_channel_stock_location",
163
+ "script_migrations",
164
+ "search_index",
165
+ "search_index_sync",
166
+ "search_index_version",
167
+ "search_postgres_index",
168
+ "service_zone",
169
+ "shipment_tracking_event",
170
+ "shipping_option",
171
+ "shipping_option_price_set",
172
+ "shipping_option_rule",
173
+ "shipping_option_type",
174
+ "shipping_profile",
175
+ "skip_merge_cart",
176
+ "stock_location",
177
+ "stock_location_address",
178
+ "store",
179
+ "store_credit_account",
180
+ "store_credit_account_transaction",
181
+ "store_currency",
182
+ "store_locale",
183
+ "tax_provider",
184
+ "tax_rate",
185
+ "tax_rate_rule",
186
+ "tax_region",
187
+ "telegram_config",
188
+ "telegram_notification_log",
189
+ "user",
190
+ "user_preference",
191
+ "user_rbac_role",
192
+ "view_configuration",
193
+ "wallet_account",
194
+ "wallet_credit_lot",
195
+ "wallet_gift_card",
196
+ "wallet_hold",
197
+ "wallet_ledger_entry",
198
+ "wallet_rate_limit",
199
+ "wallet_refund_intent",
200
+ "wallet_top_up_request",
201
+ "wishlist",
202
+ "workflow_execution",
203
+ ];
204
+ exports.AUDIT_TABLE_NAME = "deleted_records_audit";
205
+ exports.AUDIT_TRIGGER_FUNCTION = "om_audit_row_delete";
206
+ const TRIGGER_PREFIX = "om_ad_";
207
+ const PG_IDENTIFIER_MAX = 63;
208
+ /** Deterministic trigger name that stays within Postgres' 63-byte identifier limit. */
209
+ function auditTriggerName(tableName) {
210
+ const safe = tableName.replace(/[^a-z0-9_]/gi, "_").toLowerCase();
211
+ const full = `${TRIGGER_PREFIX}${safe}`;
212
+ if (full.length <= PG_IDENTIFIER_MAX)
213
+ return full;
214
+ let hash = 0;
215
+ for (const ch of safe)
216
+ hash = (hash * 31 + ch.charCodeAt(0)) >>> 0;
217
+ const suffix = `_${hash.toString(36)}`;
218
+ return `${full.slice(0, PG_IDENTIFIER_MAX - suffix.length)}${suffix}`;
219
+ }
220
+ function quoteLiteral(value) {
221
+ return `'${value.replace(/'/g, "''")}'`;
222
+ }
223
+ function quoteIdent(value) {
224
+ return `"${value.replace(/"/g, '""')}"`;
225
+ }
226
+ function buildCreateAuditTriggerSql(tableName) {
227
+ const trigger = quoteIdent(auditTriggerName(tableName));
228
+ const table = quoteIdent(tableName);
229
+ return `
230
+ DO $$
231
+ BEGIN
232
+ IF EXISTS (
233
+ SELECT 1 FROM information_schema.tables
234
+ WHERE table_schema = 'public' AND table_name = ${quoteLiteral(tableName)}
235
+ ) THEN
236
+ EXECUTE 'DROP TRIGGER IF EXISTS ' || ${quoteLiteral(trigger)} || ' ON public.' || ${quoteLiteral(table)};
237
+ EXECUTE 'CREATE TRIGGER ' || ${quoteLiteral(trigger)} || ' BEFORE DELETE ON public.' || ${quoteLiteral(table)} || ' FOR EACH ROW EXECUTE FUNCTION ${exports.AUDIT_TRIGGER_FUNCTION}()';
238
+ END IF;
239
+ END
240
+ $$;`;
241
+ }
242
+ function buildDropAuditTriggerSql(tableName) {
243
+ const trigger = quoteIdent(auditTriggerName(tableName));
244
+ const table = quoteIdent(tableName);
245
+ return `
246
+ DO $$
247
+ BEGIN
248
+ IF EXISTS (
249
+ SELECT 1 FROM information_schema.tables
250
+ WHERE table_schema = 'public' AND table_name = ${quoteLiteral(tableName)}
251
+ ) THEN
252
+ EXECUTE 'DROP TRIGGER IF EXISTS ' || ${quoteLiteral(trigger)} || ' ON public.' || ${quoteLiteral(table)};
253
+ END IF;
254
+ END
255
+ $$;`;
256
+ }
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRlZC10YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kZWxldGVkLXJlY29yZHMtYXVkaXQvYXVkaXRlZC10YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK01BLDRDQVFDO0FBVUQsZ0VBZUM7QUFFRCw0REFjQztBQWhRRDs7OztHQUlHO0FBQ1UsUUFBQSxtQkFBbUIsR0FBRztJQUNqQywwQkFBMEI7SUFDMUIsZ0JBQWdCO0lBQ2hCLFNBQVM7SUFDVCw4QkFBOEI7SUFDOUIsaUNBQWlDO0lBQ2pDLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLDJCQUEyQjtJQUMzQixtQkFBbUI7SUFDbkIsNkJBQTZCO0lBQzdCLFNBQVM7SUFDVCxNQUFNO0lBQ04sY0FBYztJQUNkLGdCQUFnQjtJQUNoQiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGlDQUFpQztJQUNqQywrQkFBK0I7SUFDL0IsNEJBQTRCO0lBQzVCLGlCQUFpQjtJQUNqQix5QkFBeUI7SUFDekIsYUFBYTtJQUNiLFVBQVU7SUFDVixVQUFVO0lBQ1YseUJBQXlCO0lBQ3pCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIseUJBQXlCO0lBQ3pCLHNCQUFzQjtJQUN0QixhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQixVQUFVO0lBQ1YsT0FBTztJQUNQLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFDaEMsMEJBQTBCO0lBQzFCLDhCQUE4QjtJQUM5QixRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLFNBQVM7SUFD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
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DeletedRecordsAuditModuleService = exports.DELETED_RECORDS_AUDIT_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.DeletedRecordsAuditModuleService = service_1.default;
10
+ exports.DELETED_RECORDS_AUDIT_MODULE = "deleted_records_audit";
11
+ exports.default = (0, utils_1.Module)(exports.DELETED_RECORDS_AUDIT_MODULE, {
12
+ service: service_1.default,
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kZWxldGVkLXJlY29yZHMtYXVkaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQWtEO0FBQ2xELHdEQUF3RDtBQVEvQywyQ0FSRixpQkFBZ0MsQ0FRRTtBQU41QixRQUFBLDRCQUE0QixHQUFHLHVCQUF1QixDQUFBO0FBRW5FLGtCQUFlLElBQUEsY0FBTSxFQUFDLG9DQUE0QixFQUFFO0lBQ2xELE9BQU8sRUFBRSxpQkFBZ0M7Q0FDMUMsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20261008120000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ const audited_tables_1 = require("../audited-tables");
6
+ class Migration20261008120000 extends migrations_1.Migration {
7
+ async up() {
8
+ this.addSql(`
9
+ CREATE TABLE IF NOT EXISTS "deleted_records_audit" (
10
+ "id" text NOT NULL PRIMARY KEY,
11
+ "table_name" text NOT NULL,
12
+ "record_id" text NULL,
13
+ "operation" text NOT NULL DEFAULT 'DELETE',
14
+ "old_data" jsonb NULL,
15
+ "occurred_at" timestamptz NOT NULL DEFAULT now(),
16
+ "deleted_by" text NULL,
17
+ "source" text NULL,
18
+ "created_at" timestamptz NOT NULL DEFAULT now(),
19
+ "updated_at" timestamptz NOT NULL DEFAULT now(),
20
+ "deleted_at" timestamptz NULL
21
+ );
22
+ `);
23
+ this.addSql(`
24
+ CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_occurred_at"
25
+ ON "deleted_records_audit" ("occurred_at" DESC);
26
+ `);
27
+ this.addSql(`
28
+ CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_table_occurred"
29
+ ON "deleted_records_audit" ("table_name", "occurred_at" DESC);
30
+ `);
31
+ this.addSql(`
32
+ CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_record_id"
33
+ ON "deleted_records_audit" ("record_id");
34
+ `);
35
+ this.addSql(`
36
+ CREATE INDEX IF NOT EXISTS "IDX_deleted_records_audit_source"
37
+ ON "deleted_records_audit" ("source") WHERE "source" IS NOT NULL;
38
+ `);
39
+ this.addSql(`
40
+ CREATE OR REPLACE FUNCTION ${audited_tables_1.AUDIT_TRIGGER_FUNCTION}()
41
+ RETURNS trigger
42
+ LANGUAGE plpgsql
43
+ AS $fn$
44
+ DECLARE
45
+ row_json jsonb := to_jsonb(OLD);
46
+ BEGIN
47
+ INSERT INTO "deleted_records_audit" (
48
+ "id", "table_name", "record_id", "operation", "old_data",
49
+ "occurred_at", "deleted_by", "source"
50
+ ) VALUES (
51
+ 'dra_' || replace(gen_random_uuid()::text, '-', ''),
52
+ TG_TABLE_NAME,
53
+ row_json ->> 'id',
54
+ 'DELETE',
55
+ row_json,
56
+ now(),
57
+ NULLIF(current_setting('app.audit_actor_id', true), ''),
58
+ NULLIF(current_setting('app.audit_source', true), '')
59
+ );
60
+ RETURN OLD;
61
+ END;
62
+ $fn$;
63
+ `);
64
+ for (const table of audited_tables_1.AUDITED_TABLE_NAMES) {
65
+ this.addSql((0, audited_tables_1.buildCreateAuditTriggerSql)(table));
66
+ }
67
+ }
68
+ async down() {
69
+ for (const table of audited_tables_1.AUDITED_TABLE_NAMES) {
70
+ this.addSql((0, audited_tables_1.buildDropAuditTriggerSql)(table));
71
+ }
72
+ this.addSql(`DROP FUNCTION IF EXISTS ${audited_tables_1.AUDIT_TRIGGER_FUNCTION}();`);
73
+ this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_source";`);
74
+ this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_record_id";`);
75
+ this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_table_occurred";`);
76
+ this.addSql(`DROP INDEX IF EXISTS "IDX_deleted_records_audit_occurred_at";`);
77
+ this.addSql(`DROP TABLE IF EXISTS "deleted_records_audit";`);
78
+ }
79
+ }
80
+ exports.Migration20261008120000 = Migration20261008120000;
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMDgxMjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kZWxldGVkLXJlY29yZHMtYXVkaXQvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAwODEyMDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBb0U7QUFDcEUsc0RBSzBCO0FBRTFCLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztLQWNYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7bUNBQ21CLHVDQUFzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F1QnBELENBQUMsQ0FBQTtRQUVGLEtBQUssTUFBTSxLQUFLLElBQUksb0NBQW1CLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUEsMkNBQTBCLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsS0FBSyxNQUFNLEtBQUssSUFBSSxvQ0FBbUIsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBQSx5Q0FBd0IsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLDJCQUEyQix1Q0FBc0IsS0FBSyxDQUFDLENBQUE7UUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQywwREFBMEQsQ0FBQyxDQUFBO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsNkRBQTZELENBQUMsQ0FBQTtRQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLGtFQUFrRSxDQUFDLENBQUE7UUFDL0UsSUFBSSxDQUFDLE1BQU0sQ0FBQywrREFBK0QsQ0FBQyxDQUFBO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0NBQ0Y7QUE3RUQsMERBNkVDIn0=
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const DeletedRecordsAudit = utils_1.model.define("deleted_records_audit", {
5
+ id: utils_1.model.id().primaryKey(),
6
+ table_name: utils_1.model.text().searchable(),
7
+ record_id: utils_1.model.text().searchable().nullable(),
8
+ operation: utils_1.model.text().default("DELETE"),
9
+ old_data: utils_1.model.json().nullable(),
10
+ occurred_at: utils_1.model.dateTime(),
11
+ deleted_by: utils_1.model.text().nullable(),
12
+ source: utils_1.model.text().nullable(),
13
+ });
14
+ exports.default = DeletedRecordsAudit;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlZC1yZWNvcmRzLWF1ZGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZGVsZXRlZC1yZWNvcmRzLWF1ZGl0L21vZGVscy9kZWxldGVkLXJlY29yZHMtYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFFakQsTUFBTSxtQkFBbUIsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFO0lBQ2hFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQ3JDLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9DLFNBQVMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN6QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxXQUFXLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRTtJQUM3QixVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNoQyxDQUFDLENBQUE7QUFFRixrQkFBZSxtQkFBbUIsQ0FBQSJ9