@dismissible/nestjs-dismissible 0.0.1
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/README.md +490 -0
- package/package.json +68 -0
- package/src/api/dismissible-item-response.dto.d.ts +9 -0
- package/src/api/dismissible-item-response.dto.js +40 -0
- package/src/api/dismissible-item-response.dto.js.map +1 -0
- package/src/api/dismissible-item.mapper.d.ts +12 -0
- package/src/api/dismissible-item.mapper.js +30 -0
- package/src/api/dismissible-item.mapper.js.map +1 -0
- package/src/api/dismissible-item.mapper.spec.d.ts +1 -0
- package/src/api/dismissible-item.mapper.spec.js +43 -0
- package/src/api/dismissible-item.mapper.spec.js.map +1 -0
- package/src/api/index.d.ts +4 -0
- package/src/api/index.js +8 -0
- package/src/api/index.js.map +1 -0
- package/src/api/use-cases/api-tags.constants.d.ts +4 -0
- package/src/api/use-cases/api-tags.constants.js +8 -0
- package/src/api/use-cases/api-tags.constants.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.d.ts +15 -0
- package/src/api/use-cases/dismiss/dismiss.controller.js +74 -0
- package/src/api/use-cases/dismiss/dismiss.controller.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.d.ts +1 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.js +37 -0
- package/src/api/use-cases/dismiss/dismiss.controller.spec.js.map +1 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.d.ts +12 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.js +12 -0
- package/src/api/use-cases/dismiss/dismiss.response.dto.js.map +1 -0
- package/src/api/use-cases/dismiss/index.d.ts +2 -0
- package/src/api/use-cases/dismiss/index.js +6 -0
- package/src/api/use-cases/dismiss/index.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.d.ts +15 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.js +70 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.d.ts +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js +32 -0
- package/src/api/use-cases/get-or-create/get-or-create.controller.spec.js.map +1 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.d.ts +12 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.js +12 -0
- package/src/api/use-cases/get-or-create/get-or-create.response.dto.js.map +1 -0
- package/src/api/use-cases/get-or-create/index.d.ts +2 -0
- package/src/api/use-cases/get-or-create/index.js +6 -0
- package/src/api/use-cases/get-or-create/index.js.map +1 -0
- package/src/api/use-cases/index.d.ts +3 -0
- package/src/api/use-cases/index.js +7 -0
- package/src/api/use-cases/index.js.map +1 -0
- package/src/api/use-cases/restore/index.d.ts +2 -0
- package/src/api/use-cases/restore/index.js +6 -0
- package/src/api/use-cases/restore/index.js.map +1 -0
- package/src/api/use-cases/restore/restore.controller.d.ts +15 -0
- package/src/api/use-cases/restore/restore.controller.js +74 -0
- package/src/api/use-cases/restore/restore.controller.js.map +1 -0
- package/src/api/use-cases/restore/restore.controller.spec.d.ts +1 -0
- package/src/api/use-cases/restore/restore.controller.spec.js +37 -0
- package/src/api/use-cases/restore/restore.controller.spec.js.map +1 -0
- package/src/api/use-cases/restore/restore.response.dto.d.ts +12 -0
- package/src/api/use-cases/restore/restore.response.dto.js +12 -0
- package/src/api/use-cases/restore/restore.response.dto.js.map +1 -0
- package/src/api/validation/index.d.ts +2 -0
- package/src/api/validation/index.js +6 -0
- package/src/api/validation/index.js.map +1 -0
- package/src/api/validation/param-validation.pipe.d.ts +11 -0
- package/src/api/validation/param-validation.pipe.js +36 -0
- package/src/api/validation/param-validation.pipe.js.map +1 -0
- package/src/api/validation/param-validation.pipe.spec.d.ts +1 -0
- package/src/api/validation/param-validation.pipe.spec.js +269 -0
- package/src/api/validation/param-validation.pipe.spec.js.map +1 -0
- package/src/api/validation/param.decorators.d.ts +28 -0
- package/src/api/validation/param.decorators.js +36 -0
- package/src/api/validation/param.decorators.js.map +1 -0
- package/src/core/dismissible-core.service.d.ts +56 -0
- package/src/core/dismissible-core.service.js +147 -0
- package/src/core/dismissible-core.service.js.map +1 -0
- package/src/core/dismissible-core.service.spec.d.ts +1 -0
- package/src/core/dismissible-core.service.spec.js +309 -0
- package/src/core/dismissible-core.service.spec.js.map +1 -0
- package/src/core/dismissible.service.d.ts +45 -0
- package/src/core/dismissible.service.js +127 -0
- package/src/core/dismissible.service.js.map +1 -0
- package/src/core/dismissible.service.spec.d.ts +1 -0
- package/src/core/dismissible.service.spec.js +159 -0
- package/src/core/dismissible.service.spec.js.map +1 -0
- package/src/core/hook-runner.service.d.ts +88 -0
- package/src/core/hook-runner.service.js +226 -0
- package/src/core/hook-runner.service.js.map +1 -0
- package/src/core/hook-runner.service.spec.d.ts +1 -0
- package/src/core/hook-runner.service.spec.js +538 -0
- package/src/core/hook-runner.service.spec.js.map +1 -0
- package/src/core/index.d.ts +5 -0
- package/src/core/index.js +9 -0
- package/src/core/index.js.map +1 -0
- package/src/core/lifecycle-hook.interface.d.ts +1 -0
- package/src/core/lifecycle-hook.interface.js +7 -0
- package/src/core/lifecycle-hook.interface.js.map +1 -0
- package/src/core/service-responses.interface.d.ts +28 -0
- package/src/core/service-responses.interface.js +3 -0
- package/src/core/service-responses.interface.js.map +1 -0
- package/src/dismissible.module.d.ts +13 -0
- package/src/dismissible.module.integration.spec.d.ts +1 -0
- package/src/dismissible.module.integration.spec.js +529 -0
- package/src/dismissible.module.integration.spec.js.map +1 -0
- package/src/dismissible.module.js +77 -0
- package/src/dismissible.module.js.map +1 -0
- package/src/events/dismissible.events.d.ts +45 -0
- package/src/events/dismissible.events.js +53 -0
- package/src/events/dismissible.events.js.map +1 -0
- package/src/events/events.constants.d.ts +17 -0
- package/src/events/events.constants.js +17 -0
- package/src/events/events.constants.js.map +1 -0
- package/src/events/index.d.ts +2 -0
- package/src/events/index.js +6 -0
- package/src/events/index.js.map +1 -0
- package/src/exceptions/dismissible.exceptions.d.ts +26 -0
- package/src/exceptions/dismissible.exceptions.js +49 -0
- package/src/exceptions/dismissible.exceptions.js.map +1 -0
- package/src/exceptions/dismissible.exceptions.spec.d.ts +1 -0
- package/src/exceptions/dismissible.exceptions.spec.js +40 -0
- package/src/exceptions/dismissible.exceptions.spec.js.map +1 -0
- package/src/exceptions/index.d.ts +1 -0
- package/src/exceptions/index.js +5 -0
- package/src/exceptions/index.js.map +1 -0
- package/src/index.d.ts +8 -0
- package/src/index.js +12 -0
- package/src/index.js.map +1 -0
- package/src/response/dtos/base-response.dto.d.ts +6 -0
- package/src/response/dtos/base-response.dto.js +18 -0
- package/src/response/dtos/base-response.dto.js.map +1 -0
- package/src/response/dtos/error-response.dto.d.ts +19 -0
- package/src/response/dtos/error-response.dto.js +39 -0
- package/src/response/dtos/error-response.dto.js.map +1 -0
- package/src/response/dtos/index.d.ts +3 -0
- package/src/response/dtos/index.js +7 -0
- package/src/response/dtos/index.js.map +1 -0
- package/src/response/dtos/success-response.dto.d.ts +28 -0
- package/src/response/dtos/success-response.dto.js +34 -0
- package/src/response/dtos/success-response.dto.js.map +1 -0
- package/src/response/http-exception-filter.d.ts +4 -0
- package/src/response/http-exception-filter.js +24 -0
- package/src/response/http-exception-filter.js.map +1 -0
- package/src/response/http-exception-filter.spec.d.ts +1 -0
- package/src/response/http-exception-filter.spec.js +137 -0
- package/src/response/http-exception-filter.spec.js.map +1 -0
- package/src/response/index.d.ts +4 -0
- package/src/response/index.js +8 -0
- package/src/response/index.js.map +1 -0
- package/src/response/response.module.d.ts +2 -0
- package/src/response/response.module.js +17 -0
- package/src/response/response.module.js.map +1 -0
- package/src/response/response.service.d.ts +6 -0
- package/src/response/response.service.js +25 -0
- package/src/response/response.service.js.map +1 -0
- package/src/response/response.service.spec.d.ts +1 -0
- package/src/response/response.service.spec.js +58 -0
- package/src/response/response.service.spec.js.map +1 -0
- package/src/testing/factories.d.ts +14 -0
- package/src/testing/factories.js +58 -0
- package/src/testing/factories.js.map +1 -0
- package/src/testing/index.d.ts +1 -0
- package/src/testing/index.js +5 -0
- package/src/testing/index.js.map +1 -0
- package/src/utils/date/date.service.d.ts +8 -0
- package/src/utils/date/date.service.js +24 -0
- package/src/utils/date/date.service.js.map +1 -0
- package/src/utils/date/date.service.spec.d.ts +1 -0
- package/src/utils/date/date.service.spec.js +83 -0
- package/src/utils/date/date.service.spec.js.map +1 -0
- package/src/utils/date/index.d.ts +1 -0
- package/src/utils/date/index.js +5 -0
- package/src/utils/date/index.js.map +1 -0
- package/src/utils/dismissible.helper.d.ts +4 -0
- package/src/utils/dismissible.helper.js +15 -0
- package/src/utils/dismissible.helper.js.map +1 -0
- package/src/utils/index.d.ts +3 -0
- package/src/utils/index.js +7 -0
- package/src/utils/index.js.map +1 -0
- package/src/validation/dismissible-input.dto.d.ts +21 -0
- package/src/validation/dismissible-input.dto.js +54 -0
- package/src/validation/dismissible-input.dto.js.map +1 -0
- package/src/validation/index.d.ts +1 -0
- package/src/validation/index.js +5 -0
- package/src/validation/index.js.map +1 -0
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_jest_mocker_1 = require("ts-jest-mocker");
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const hook_runner_service_1 = require("./hook-runner.service");
|
|
6
|
+
const factories_1 = require("../testing/factories");
|
|
7
|
+
describe('HookRunner', () => {
|
|
8
|
+
let hookRunner;
|
|
9
|
+
let mockLogger;
|
|
10
|
+
const testUserId = 'test-user-id';
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
mockLogger = (0, ts_jest_mocker_1.mock)({ failIfMockNotProvided: false });
|
|
13
|
+
});
|
|
14
|
+
describe('with no hooks', () => {
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
hookRunner = new hook_runner_service_1.HookRunner([], mockLogger);
|
|
17
|
+
});
|
|
18
|
+
it('should return proceed: true for pre-request', async () => {
|
|
19
|
+
const context = (0, factories_1.createTestContext)();
|
|
20
|
+
const result = await hookRunner.runPreRequest('test-id', testUserId, context);
|
|
21
|
+
expect(result.proceed).toBe(true);
|
|
22
|
+
expect(result.id).toBe('test-id');
|
|
23
|
+
expect(result.userId).toBe(testUserId);
|
|
24
|
+
expect(result.context).toEqual(context);
|
|
25
|
+
});
|
|
26
|
+
it('should complete post-request without error', async () => {
|
|
27
|
+
const item = (0, factories_1.createTestItem)();
|
|
28
|
+
const context = (0, factories_1.createTestContext)();
|
|
29
|
+
await expect(hookRunner.runPostRequest('test-id', item, testUserId, context)).resolves.not.toThrow();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('with hooks', () => {
|
|
33
|
+
it('should execute hooks in priority order (low to high) for pre-hooks', async () => {
|
|
34
|
+
const executionOrder = [];
|
|
35
|
+
const hook1 = {
|
|
36
|
+
priority: 10,
|
|
37
|
+
onBeforeRequest: jest.fn(async () => {
|
|
38
|
+
executionOrder.push(10);
|
|
39
|
+
return { proceed: true };
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
const hook2 = {
|
|
43
|
+
priority: 5,
|
|
44
|
+
onBeforeRequest: jest.fn(async () => {
|
|
45
|
+
executionOrder.push(5);
|
|
46
|
+
return { proceed: true };
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
const hook3 = {
|
|
50
|
+
priority: 15,
|
|
51
|
+
onBeforeRequest: jest.fn(async () => {
|
|
52
|
+
executionOrder.push(15);
|
|
53
|
+
return { proceed: true };
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2, hook3], mockLogger);
|
|
57
|
+
await hookRunner.runPreRequest('test-id', testUserId, (0, factories_1.createTestContext)());
|
|
58
|
+
expect(executionOrder).toEqual([5, 10, 15]);
|
|
59
|
+
});
|
|
60
|
+
it('should execute hooks in reverse priority order for post-hooks', async () => {
|
|
61
|
+
const executionOrder = [];
|
|
62
|
+
const hook1 = {
|
|
63
|
+
priority: 10,
|
|
64
|
+
onAfterRequest: jest.fn(async () => {
|
|
65
|
+
executionOrder.push(10);
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
const hook2 = {
|
|
69
|
+
priority: 5,
|
|
70
|
+
onAfterRequest: jest.fn(async () => {
|
|
71
|
+
executionOrder.push(5);
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
const hook3 = {
|
|
75
|
+
priority: 15,
|
|
76
|
+
onAfterRequest: jest.fn(async () => {
|
|
77
|
+
executionOrder.push(15);
|
|
78
|
+
}),
|
|
79
|
+
};
|
|
80
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2, hook3], mockLogger);
|
|
81
|
+
await hookRunner.runPostRequest('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)());
|
|
82
|
+
expect(executionOrder).toEqual([15, 10, 5]);
|
|
83
|
+
});
|
|
84
|
+
it('should block operation when pre-hook returns proceed: false', async () => {
|
|
85
|
+
const blockingHook = {
|
|
86
|
+
onBeforeRequest: jest.fn(async () => ({
|
|
87
|
+
proceed: false,
|
|
88
|
+
reason: 'Rate limit exceeded',
|
|
89
|
+
})),
|
|
90
|
+
};
|
|
91
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
92
|
+
const result = await hookRunner.runPreRequest('test-id', testUserId, (0, factories_1.createTestContext)());
|
|
93
|
+
expect(result.proceed).toBe(false);
|
|
94
|
+
expect(result.reason).toBe('Rate limit exceeded');
|
|
95
|
+
});
|
|
96
|
+
it('should apply mutations from pre-hooks', async () => {
|
|
97
|
+
const mutatingHook = {
|
|
98
|
+
onBeforeRequest: jest.fn(async () => ({
|
|
99
|
+
proceed: true,
|
|
100
|
+
mutations: {
|
|
101
|
+
id: 'mutated-id',
|
|
102
|
+
userId: 'mutated-user',
|
|
103
|
+
},
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
107
|
+
const result = await hookRunner.runPreRequest('original-id', testUserId, (0, factories_1.createTestContext)());
|
|
108
|
+
expect(result.id).toBe('mutated-id');
|
|
109
|
+
expect(result.userId).toBe('mutated-user');
|
|
110
|
+
});
|
|
111
|
+
it('should pass mutations through multiple hooks', async () => {
|
|
112
|
+
const hook1 = {
|
|
113
|
+
priority: 1,
|
|
114
|
+
onBeforeRequest: jest.fn(async (itemId) => ({
|
|
115
|
+
proceed: true,
|
|
116
|
+
mutations: { id: `${itemId}-hook1` },
|
|
117
|
+
})),
|
|
118
|
+
};
|
|
119
|
+
const hook2 = {
|
|
120
|
+
priority: 2,
|
|
121
|
+
onBeforeRequest: jest.fn(async (itemId) => ({
|
|
122
|
+
proceed: true,
|
|
123
|
+
mutations: { id: `${itemId}-hook2` },
|
|
124
|
+
})),
|
|
125
|
+
};
|
|
126
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2], mockLogger);
|
|
127
|
+
const result = await hookRunner.runPreRequest('original', testUserId, (0, factories_1.createTestContext)());
|
|
128
|
+
expect(result.id).toBe('original-hook1-hook2');
|
|
129
|
+
});
|
|
130
|
+
it('should apply context mutations from pre-hooks', async () => {
|
|
131
|
+
const context = (0, factories_1.createTestContext)();
|
|
132
|
+
const mutatingHook = {
|
|
133
|
+
onBeforeRequest: jest.fn(async () => ({
|
|
134
|
+
proceed: true,
|
|
135
|
+
mutations: {
|
|
136
|
+
context: { headers: { authorization: 'Bearer mutated-token' } },
|
|
137
|
+
},
|
|
138
|
+
})),
|
|
139
|
+
};
|
|
140
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
141
|
+
const result = await hookRunner.runPreRequest('test-id', testUserId, context);
|
|
142
|
+
expect(result.context).toEqual({
|
|
143
|
+
...context,
|
|
144
|
+
headers: { authorization: 'Bearer mutated-token' },
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
it('should ignore context mutation when no context provided', async () => {
|
|
148
|
+
const mutatingHook = {
|
|
149
|
+
onBeforeRequest: jest.fn(async () => ({
|
|
150
|
+
proceed: true,
|
|
151
|
+
mutations: {
|
|
152
|
+
context: { headers: { authorization: 'Bearer token' } },
|
|
153
|
+
},
|
|
154
|
+
})),
|
|
155
|
+
};
|
|
156
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
157
|
+
const result = await hookRunner.runPreRequest('test-id', testUserId, undefined);
|
|
158
|
+
expect(result.context).toBeUndefined();
|
|
159
|
+
});
|
|
160
|
+
it('should handle hooks with default priority (undefined)', async () => {
|
|
161
|
+
const executionOrder = [];
|
|
162
|
+
const hook1 = {
|
|
163
|
+
priority: 5,
|
|
164
|
+
onBeforeRequest: jest.fn(async () => {
|
|
165
|
+
executionOrder.push('priority-5');
|
|
166
|
+
return { proceed: true };
|
|
167
|
+
}),
|
|
168
|
+
};
|
|
169
|
+
const hook2 = {
|
|
170
|
+
onBeforeRequest: jest.fn(async () => {
|
|
171
|
+
executionOrder.push('priority-default');
|
|
172
|
+
return { proceed: true };
|
|
173
|
+
}),
|
|
174
|
+
};
|
|
175
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2], mockLogger);
|
|
176
|
+
await hookRunner.runPreRequest('test-id', testUserId, (0, factories_1.createTestContext)());
|
|
177
|
+
expect(executionOrder).toEqual(['priority-default', 'priority-5']);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
describe('error handling', () => {
|
|
181
|
+
it('should throw error from pre-hook', async () => {
|
|
182
|
+
const errorHook = {
|
|
183
|
+
onBeforeRequest: jest.fn(async () => {
|
|
184
|
+
throw new Error('Hook error');
|
|
185
|
+
}),
|
|
186
|
+
};
|
|
187
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
188
|
+
await expect(hookRunner.runPreRequest('test-id', testUserId, (0, factories_1.createTestContext)())).rejects.toThrow('Hook error');
|
|
189
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
190
|
+
});
|
|
191
|
+
it('should throw non-Error from pre-hook', async () => {
|
|
192
|
+
const errorHook = {
|
|
193
|
+
onBeforeRequest: jest.fn(async () => {
|
|
194
|
+
throw 'string error';
|
|
195
|
+
}),
|
|
196
|
+
};
|
|
197
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
198
|
+
await expect(hookRunner.runPreRequest('test-id', testUserId, (0, factories_1.createTestContext)())).rejects.toBe('string error');
|
|
199
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
200
|
+
});
|
|
201
|
+
it('should log but not throw errors from post-hooks', async () => {
|
|
202
|
+
const errorHook = {
|
|
203
|
+
onAfterRequest: jest.fn(async () => {
|
|
204
|
+
throw new Error('Post-hook error');
|
|
205
|
+
}),
|
|
206
|
+
};
|
|
207
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
208
|
+
await expect(hookRunner.runPostRequest('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
209
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
210
|
+
});
|
|
211
|
+
it('should log but not throw non-Error from post-hooks', async () => {
|
|
212
|
+
const errorHook = {
|
|
213
|
+
onAfterRequest: jest.fn(async () => {
|
|
214
|
+
throw 'string post-hook error';
|
|
215
|
+
}),
|
|
216
|
+
};
|
|
217
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
218
|
+
await expect(hookRunner.runPostRequest('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
219
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
describe('throwIfBlocked', () => {
|
|
223
|
+
it('should throw ForbiddenException when blocked', () => {
|
|
224
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
225
|
+
proceed: false,
|
|
226
|
+
id: 'test',
|
|
227
|
+
userId: testUserId,
|
|
228
|
+
context: (0, factories_1.createTestContext)(),
|
|
229
|
+
reason: 'Not allowed',
|
|
230
|
+
})).toThrow(common_1.ForbiddenException);
|
|
231
|
+
});
|
|
232
|
+
it('should throw ForbiddenException with default reason when blocked without reason', () => {
|
|
233
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
234
|
+
proceed: false,
|
|
235
|
+
id: 'test',
|
|
236
|
+
userId: testUserId,
|
|
237
|
+
context: (0, factories_1.createTestContext)(),
|
|
238
|
+
})).toThrow('Operation blocked by lifecycle hook');
|
|
239
|
+
});
|
|
240
|
+
it('should not throw when not blocked', () => {
|
|
241
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
242
|
+
proceed: true,
|
|
243
|
+
id: 'test',
|
|
244
|
+
userId: testUserId,
|
|
245
|
+
context: (0, factories_1.createTestContext)(),
|
|
246
|
+
})).not.toThrow();
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
describe('runPreGet and runPostGet', () => {
|
|
250
|
+
it('should pass item to onBeforeGet hook', async () => {
|
|
251
|
+
const item = (0, factories_1.createTestItem)();
|
|
252
|
+
const context = (0, factories_1.createTestContext)();
|
|
253
|
+
const hook = {
|
|
254
|
+
onBeforeGet: jest.fn().mockResolvedValue({ proceed: true }),
|
|
255
|
+
};
|
|
256
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook], mockLogger);
|
|
257
|
+
await hookRunner.runPreGet('test-id', item, testUserId, context);
|
|
258
|
+
expect(hook.onBeforeGet).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
259
|
+
});
|
|
260
|
+
it('should block operation when onBeforeGet returns proceed: false', async () => {
|
|
261
|
+
const item = (0, factories_1.createTestItem)();
|
|
262
|
+
const context = (0, factories_1.createTestContext)();
|
|
263
|
+
const blockingHook = {
|
|
264
|
+
onBeforeGet: jest.fn().mockResolvedValue({
|
|
265
|
+
proceed: false,
|
|
266
|
+
reason: 'Item is in invalid state',
|
|
267
|
+
}),
|
|
268
|
+
};
|
|
269
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
270
|
+
const result = await hookRunner.runPreGet('test-id', item, testUserId, context);
|
|
271
|
+
expect(result.proceed).toBe(false);
|
|
272
|
+
expect(result.reason).toBe('Item is in invalid state');
|
|
273
|
+
});
|
|
274
|
+
it('should run onAfterGet hook', async () => {
|
|
275
|
+
const item = (0, factories_1.createTestItem)();
|
|
276
|
+
const context = (0, factories_1.createTestContext)();
|
|
277
|
+
const hook = {
|
|
278
|
+
onAfterGet: jest.fn(),
|
|
279
|
+
};
|
|
280
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook], mockLogger);
|
|
281
|
+
await hookRunner.runPostGet('test-id', item, testUserId, context);
|
|
282
|
+
expect(hook.onAfterGet).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
283
|
+
});
|
|
284
|
+
it('should apply mutations from onBeforeGet hook', async () => {
|
|
285
|
+
const item = (0, factories_1.createTestItem)();
|
|
286
|
+
const context = (0, factories_1.createTestContext)();
|
|
287
|
+
const mutatingHook = {
|
|
288
|
+
onBeforeGet: jest.fn().mockResolvedValue({
|
|
289
|
+
proceed: true,
|
|
290
|
+
mutations: {
|
|
291
|
+
id: 'mutated-id',
|
|
292
|
+
},
|
|
293
|
+
}),
|
|
294
|
+
};
|
|
295
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
296
|
+
const result = await hookRunner.runPreGet('original-id', item, testUserId, context);
|
|
297
|
+
expect(result.id).toBe('mutated-id');
|
|
298
|
+
});
|
|
299
|
+
it('should apply userId mutation from onBeforeGet hook', async () => {
|
|
300
|
+
const item = (0, factories_1.createTestItem)();
|
|
301
|
+
const context = (0, factories_1.createTestContext)();
|
|
302
|
+
const mutatingHook = {
|
|
303
|
+
onBeforeGet: jest.fn().mockResolvedValue({
|
|
304
|
+
proceed: true,
|
|
305
|
+
mutations: {
|
|
306
|
+
userId: 'mutated-user-id',
|
|
307
|
+
},
|
|
308
|
+
}),
|
|
309
|
+
};
|
|
310
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
311
|
+
const result = await hookRunner.runPreGet('test-id', item, testUserId, context);
|
|
312
|
+
expect(result.userId).toBe('mutated-user-id');
|
|
313
|
+
});
|
|
314
|
+
it('should apply context mutation from onBeforeGet hook', async () => {
|
|
315
|
+
const item = (0, factories_1.createTestItem)();
|
|
316
|
+
const context = (0, factories_1.createTestContext)();
|
|
317
|
+
const mutatingHook = {
|
|
318
|
+
onBeforeGet: jest.fn().mockResolvedValue({
|
|
319
|
+
proceed: true,
|
|
320
|
+
mutations: {
|
|
321
|
+
context: { headers: { authorization: 'Bearer custom-token' } },
|
|
322
|
+
},
|
|
323
|
+
}),
|
|
324
|
+
};
|
|
325
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
326
|
+
const result = await hookRunner.runPreGet('test-id', item, testUserId, context);
|
|
327
|
+
expect(result.context).toEqual({
|
|
328
|
+
...context,
|
|
329
|
+
headers: { authorization: 'Bearer custom-token' },
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
it('should ignore context mutation when no context provided to onBeforeGet', async () => {
|
|
333
|
+
const item = (0, factories_1.createTestItem)();
|
|
334
|
+
const mutatingHook = {
|
|
335
|
+
onBeforeGet: jest.fn().mockResolvedValue({
|
|
336
|
+
proceed: true,
|
|
337
|
+
mutations: {
|
|
338
|
+
context: { headers: { authorization: 'Bearer token' } },
|
|
339
|
+
},
|
|
340
|
+
}),
|
|
341
|
+
};
|
|
342
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
343
|
+
const result = await hookRunner.runPreGet('test-id', item, testUserId, undefined);
|
|
344
|
+
expect(result.context).toBeUndefined();
|
|
345
|
+
});
|
|
346
|
+
it('should throw error from onBeforeGet hook', async () => {
|
|
347
|
+
const item = (0, factories_1.createTestItem)();
|
|
348
|
+
const context = (0, factories_1.createTestContext)();
|
|
349
|
+
const errorHook = {
|
|
350
|
+
onBeforeGet: jest.fn().mockRejectedValue(new Error('Get hook error')),
|
|
351
|
+
};
|
|
352
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
353
|
+
await expect(hookRunner.runPreGet('test-id', item, testUserId, context)).rejects.toThrow('Get hook error');
|
|
354
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
355
|
+
});
|
|
356
|
+
it('should throw non-Error from onBeforeGet hook', async () => {
|
|
357
|
+
const item = (0, factories_1.createTestItem)();
|
|
358
|
+
const context = (0, factories_1.createTestContext)();
|
|
359
|
+
const errorHook = {
|
|
360
|
+
onBeforeGet: jest.fn().mockRejectedValue('string error'),
|
|
361
|
+
};
|
|
362
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
363
|
+
await expect(hookRunner.runPreGet('test-id', item, testUserId, context)).rejects.toBe('string error');
|
|
364
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
describe('runPreCreate, runPreDismiss, runPreRestore mutations', () => {
|
|
368
|
+
it('should apply mutations from onBeforeCreate hook', async () => {
|
|
369
|
+
const context = (0, factories_1.createTestContext)();
|
|
370
|
+
const mutatingHook = {
|
|
371
|
+
onBeforeCreate: jest.fn().mockResolvedValue({
|
|
372
|
+
proceed: true,
|
|
373
|
+
mutations: {
|
|
374
|
+
id: 'mutated-create-id',
|
|
375
|
+
userId: 'mutated-create-user',
|
|
376
|
+
},
|
|
377
|
+
}),
|
|
378
|
+
};
|
|
379
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
380
|
+
const result = await hookRunner.runPreCreate('original-id', testUserId, context);
|
|
381
|
+
expect(result.id).toBe('mutated-create-id');
|
|
382
|
+
expect(result.userId).toBe('mutated-create-user');
|
|
383
|
+
});
|
|
384
|
+
it('should apply context mutation from onBeforeCreate when context is provided', async () => {
|
|
385
|
+
const context = (0, factories_1.createTestContext)();
|
|
386
|
+
const mutatingHook = {
|
|
387
|
+
onBeforeCreate: jest.fn().mockResolvedValue({
|
|
388
|
+
proceed: true,
|
|
389
|
+
mutations: {
|
|
390
|
+
context: { headers: { authorization: 'Bearer create-token' } },
|
|
391
|
+
},
|
|
392
|
+
}),
|
|
393
|
+
};
|
|
394
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
395
|
+
const result = await hookRunner.runPreCreate('test-id', testUserId, context);
|
|
396
|
+
expect(result.context).toEqual({
|
|
397
|
+
...context,
|
|
398
|
+
headers: { authorization: 'Bearer create-token' },
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
it('should block operation when onBeforeDismiss returns proceed: false', async () => {
|
|
402
|
+
const blockingHook = {
|
|
403
|
+
onBeforeDismiss: jest.fn().mockResolvedValue({
|
|
404
|
+
proceed: false,
|
|
405
|
+
reason: 'Cannot dismiss this item',
|
|
406
|
+
}),
|
|
407
|
+
};
|
|
408
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
409
|
+
const result = await hookRunner.runPreDismiss('test-id', testUserId, (0, factories_1.createTestContext)());
|
|
410
|
+
expect(result.proceed).toBe(false);
|
|
411
|
+
expect(result.reason).toBe('Cannot dismiss this item');
|
|
412
|
+
});
|
|
413
|
+
it('should apply mutations from onBeforeRestore hook', async () => {
|
|
414
|
+
const context = (0, factories_1.createTestContext)();
|
|
415
|
+
const mutatingHook = {
|
|
416
|
+
onBeforeRestore: jest.fn().mockResolvedValue({
|
|
417
|
+
proceed: true,
|
|
418
|
+
mutations: {
|
|
419
|
+
id: 'mutated-restore-id',
|
|
420
|
+
},
|
|
421
|
+
}),
|
|
422
|
+
};
|
|
423
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
424
|
+
const result = await hookRunner.runPreRestore('original-id', testUserId, context);
|
|
425
|
+
expect(result.id).toBe('mutated-restore-id');
|
|
426
|
+
});
|
|
427
|
+
it('should throw error from onBeforeCreate hook', async () => {
|
|
428
|
+
const errorHook = {
|
|
429
|
+
onBeforeCreate: jest.fn().mockRejectedValue(new Error('Create hook error')),
|
|
430
|
+
};
|
|
431
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
432
|
+
await expect(hookRunner.runPreCreate('test-id', testUserId, (0, factories_1.createTestContext)())).rejects.toThrow('Create hook error');
|
|
433
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
434
|
+
});
|
|
435
|
+
it('should throw non-Error from onBeforeDismiss hook', async () => {
|
|
436
|
+
const errorHook = {
|
|
437
|
+
onBeforeDismiss: jest.fn().mockRejectedValue('dismiss string error'),
|
|
438
|
+
};
|
|
439
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
440
|
+
await expect(hookRunner.runPreDismiss('test-id', testUserId, (0, factories_1.createTestContext)())).rejects.toBe('dismiss string error');
|
|
441
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
describe('post-hook error handling', () => {
|
|
445
|
+
it('should log but not throw Error from onAfterCreate', async () => {
|
|
446
|
+
const errorHook = {
|
|
447
|
+
onAfterCreate: jest.fn().mockRejectedValue(new Error('After create error')),
|
|
448
|
+
};
|
|
449
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
450
|
+
await expect(hookRunner.runPostCreate('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
451
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
452
|
+
});
|
|
453
|
+
it('should log but not throw non-Error from onAfterDismiss', async () => {
|
|
454
|
+
const errorHook = {
|
|
455
|
+
onAfterDismiss: jest.fn().mockRejectedValue('dismiss post error'),
|
|
456
|
+
};
|
|
457
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
458
|
+
await expect(hookRunner.runPostDismiss('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
459
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
460
|
+
});
|
|
461
|
+
it('should log but not throw Error from onAfterRestore', async () => {
|
|
462
|
+
const errorHook = {
|
|
463
|
+
onAfterRestore: jest.fn().mockRejectedValue(new Error('After restore error')),
|
|
464
|
+
};
|
|
465
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
466
|
+
await expect(hookRunner.runPostRestore('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
467
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
468
|
+
});
|
|
469
|
+
it('should log but not throw non-Error from onAfterGet', async () => {
|
|
470
|
+
const errorHook = {
|
|
471
|
+
onAfterGet: jest.fn().mockRejectedValue('get post error'),
|
|
472
|
+
};
|
|
473
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
474
|
+
await expect(hookRunner.runPostGet('test-id', (0, factories_1.createTestItem)(), testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
475
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
476
|
+
});
|
|
477
|
+
});
|
|
478
|
+
describe('all hook methods', () => {
|
|
479
|
+
let allMethodsHook;
|
|
480
|
+
beforeEach(() => {
|
|
481
|
+
allMethodsHook = {
|
|
482
|
+
priority: 0,
|
|
483
|
+
onBeforeRequest: jest.fn().mockResolvedValue({ proceed: true }),
|
|
484
|
+
onAfterRequest: jest.fn(),
|
|
485
|
+
onBeforeGet: jest.fn().mockResolvedValue({ proceed: true }),
|
|
486
|
+
onAfterGet: jest.fn(),
|
|
487
|
+
onBeforeCreate: jest.fn().mockResolvedValue({ proceed: true }),
|
|
488
|
+
onAfterCreate: jest.fn(),
|
|
489
|
+
onBeforeDismiss: jest.fn().mockResolvedValue({ proceed: true }),
|
|
490
|
+
onAfterDismiss: jest.fn(),
|
|
491
|
+
onBeforeRestore: jest.fn().mockResolvedValue({ proceed: true }),
|
|
492
|
+
onAfterRestore: jest.fn(),
|
|
493
|
+
};
|
|
494
|
+
hookRunner = new hook_runner_service_1.HookRunner([allMethodsHook], mockLogger);
|
|
495
|
+
});
|
|
496
|
+
it('should run pre and post request hooks', async () => {
|
|
497
|
+
const context = (0, factories_1.createTestContext)();
|
|
498
|
+
const item = (0, factories_1.createTestItem)();
|
|
499
|
+
await hookRunner.runPreRequest('test-id', testUserId, context);
|
|
500
|
+
await hookRunner.runPostRequest('test-id', item, testUserId, context);
|
|
501
|
+
expect(allMethodsHook.onBeforeRequest).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
502
|
+
expect(allMethodsHook.onAfterRequest).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
503
|
+
});
|
|
504
|
+
it('should run pre and post get hooks', async () => {
|
|
505
|
+
const context = (0, factories_1.createTestContext)();
|
|
506
|
+
const item = (0, factories_1.createTestItem)();
|
|
507
|
+
await hookRunner.runPreGet('test-id', item, testUserId, context);
|
|
508
|
+
await hookRunner.runPostGet('test-id', item, testUserId, context);
|
|
509
|
+
expect(allMethodsHook.onBeforeGet).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
510
|
+
expect(allMethodsHook.onAfterGet).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
511
|
+
});
|
|
512
|
+
it('should run pre and post create hooks', async () => {
|
|
513
|
+
const context = (0, factories_1.createTestContext)();
|
|
514
|
+
const item = (0, factories_1.createTestItem)();
|
|
515
|
+
await hookRunner.runPreCreate('test-id', testUserId, context);
|
|
516
|
+
await hookRunner.runPostCreate('test-id', item, testUserId, context);
|
|
517
|
+
expect(allMethodsHook.onBeforeCreate).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
518
|
+
expect(allMethodsHook.onAfterCreate).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
519
|
+
});
|
|
520
|
+
it('should run pre and post dismiss hooks', async () => {
|
|
521
|
+
const context = (0, factories_1.createTestContext)();
|
|
522
|
+
const item = (0, factories_1.createTestItem)();
|
|
523
|
+
await hookRunner.runPreDismiss('test-id', testUserId, context);
|
|
524
|
+
await hookRunner.runPostDismiss('test-id', item, testUserId, context);
|
|
525
|
+
expect(allMethodsHook.onBeforeDismiss).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
526
|
+
expect(allMethodsHook.onAfterDismiss).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
527
|
+
});
|
|
528
|
+
it('should run pre and post restore hooks', async () => {
|
|
529
|
+
const context = (0, factories_1.createTestContext)();
|
|
530
|
+
const item = (0, factories_1.createTestItem)();
|
|
531
|
+
await hookRunner.runPreRestore('test-id', testUserId, context);
|
|
532
|
+
await hookRunner.runPostRestore('test-id', item, testUserId, context);
|
|
533
|
+
expect(allMethodsHook.onBeforeRestore).toHaveBeenCalledWith('test-id', testUserId, context);
|
|
534
|
+
expect(allMethodsHook.onAfterRestore).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
535
|
+
});
|
|
536
|
+
});
|
|
537
|
+
});
|
|
538
|
+
//# sourceMappingURL=hook-runner.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-runner.service.spec.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/hook-runner.service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./lifecycle-hook.interface"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./service-responses.interface"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./dismissible-core.service"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./hook-runner.service"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./dismissible.service"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,wEAA8C;AAC9C,qEAA2C;AAC3C,gEAAsC;AACtC,gEAAsC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DISMISSIBLE_HOOKS, IHookMutations, IHookResult, IDismissibleLifecycleHook, } from '@dismissible/nestjs-dismissible-hooks';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DISMISSIBLE_HOOKS = void 0;
|
|
4
|
+
// Re-export from hooks library for backward compatibility
|
|
5
|
+
var nestjs_dismissible_hooks_1 = require("@dismissible/nestjs-dismissible-hooks");
|
|
6
|
+
Object.defineProperty(exports, "DISMISSIBLE_HOOKS", { enumerable: true, get: function () { return nestjs_dismissible_hooks_1.DISMISSIBLE_HOOKS; } });
|
|
7
|
+
//# sourceMappingURL=lifecycle-hook.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-hook.interface.js","sourceRoot":"","sources":["../../../../../libs/dismissible/src/core/lifecycle-hook.interface.ts"],"names":[],"mappings":";;;AAAA,0DAA0D;AAC1D,kFAK+C;AAJ7C,6HAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
|
|
2
|
+
/**
|
|
3
|
+
* Response from getOrCreate operation.
|
|
4
|
+
*/
|
|
5
|
+
export interface IGetOrCreateServiceResponse {
|
|
6
|
+
/** The item (either retrieved or created) */
|
|
7
|
+
item: DismissibleItemDto;
|
|
8
|
+
/** Whether the item was newly created */
|
|
9
|
+
created: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Response from dismiss operation.
|
|
13
|
+
*/
|
|
14
|
+
export interface IDismissServiceResponse {
|
|
15
|
+
/** The dismissed item */
|
|
16
|
+
item: DismissibleItemDto;
|
|
17
|
+
/** The item state before dismissal */
|
|
18
|
+
previousItem: DismissibleItemDto;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Response from restore operation.
|
|
22
|
+
*/
|
|
23
|
+
export interface IRestoreServiceResponse {
|
|
24
|
+
/** The restored item */
|
|
25
|
+
item: DismissibleItemDto;
|
|
26
|
+
/** The item state before restoration */
|
|
27
|
+
previousItem: DismissibleItemDto;
|
|
28
|
+
}
|