@shipfox/api-triggers 10.2.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +67 -0
  3. package/README.md +12 -12
  4. package/dist/core/config.d.ts.map +1 -1
  5. package/dist/core/config.js +3 -3
  6. package/dist/core/config.js.map +1 -1
  7. package/dist/core/dispatch-integration-event.d.ts.map +1 -1
  8. package/dist/core/dispatch-integration-event.js +2 -0
  9. package/dist/core/dispatch-integration-event.js.map +1 -1
  10. package/dist/core/route-event-to-job-listeners.d.ts +1 -0
  11. package/dist/core/route-event-to-job-listeners.d.ts.map +1 -1
  12. package/dist/core/route-event-to-job-listeners.js +21 -4
  13. package/dist/core/route-event-to-job-listeners.js.map +1 -1
  14. package/dist/core/workflows-client.d.ts +10 -1
  15. package/dist/core/workflows-client.d.ts.map +1 -1
  16. package/dist/presentation/routes/fire-manual.d.ts.map +1 -1
  17. package/dist/presentation/routes/fire-manual.js +11 -3
  18. package/dist/presentation/routes/fire-manual.js.map +1 -1
  19. package/dist/presentation/routes/get-trigger-event.d.ts.map +1 -1
  20. package/dist/presentation/routes/get-trigger-event.js +11 -4
  21. package/dist/presentation/routes/get-trigger-event.js.map +1 -1
  22. package/dist/presentation/routes/list-trigger-event-facets.d.ts.map +1 -1
  23. package/dist/presentation/routes/list-trigger-event-facets.js +6 -8
  24. package/dist/presentation/routes/list-trigger-event-facets.js.map +1 -1
  25. package/dist/presentation/routes/list-trigger-events.d.ts.map +1 -1
  26. package/dist/presentation/routes/list-trigger-events.js +5 -7
  27. package/dist/presentation/routes/list-trigger-events.js.map +1 -1
  28. package/dist/tsconfig.test.tsbuildinfo +1 -1
  29. package/package.json +13 -13
  30. package/src/core/config.test.ts +23 -0
  31. package/src/core/config.ts +3 -2
  32. package/src/core/dispatch-integration-event.history-failure.test.ts +5 -0
  33. package/src/core/dispatch-integration-event.test.ts +8 -1
  34. package/src/core/dispatch-integration-event.ts +2 -0
  35. package/src/core/route-event-to-job-listeners.test.ts +99 -0
  36. package/src/core/route-event-to-job-listeners.ts +29 -2
  37. package/src/core/workflows-client.test.ts +8 -0
  38. package/src/presentation/routes/fire-manual.test.ts +22 -2
  39. package/src/presentation/routes/fire-manual.ts +11 -3
  40. package/src/presentation/routes/get-trigger-event.test.ts +16 -2
  41. package/src/presentation/routes/get-trigger-event.ts +9 -4
  42. package/src/presentation/routes/list-trigger-event-facets.test.ts +18 -2
  43. package/src/presentation/routes/list-trigger-event-facets.ts +3 -6
  44. package/src/presentation/routes/list-trigger-events.test.ts +18 -2
  45. package/src/presentation/routes/list-trigger-events.ts +2 -5
  46. package/tsconfig.build.tsbuildinfo +1 -1
@@ -12,7 +12,11 @@ const eventIds = (res: {json: () => {trigger_events: Array<{id: string}>}}) =>
12
12
  describe('GET /trigger-events', () => {
13
13
  let app: FastifyInstance;
14
14
  let workspaceId: string;
15
- let memberships: Array<{workspaceId: string; role: 'admin'}>;
15
+ let memberships: Array<{
16
+ workspaceId: string;
17
+ role: 'admin';
18
+ workspaceStatus: 'active' | 'suspended' | 'deleted';
19
+ }>;
16
20
 
17
21
  beforeAll(async () => {
18
22
  app = Fastify();
@@ -31,7 +35,7 @@ describe('GET /trigger-events', () => {
31
35
 
32
36
  beforeEach(() => {
33
37
  workspaceId = crypto.randomUUID();
34
- memberships = [{workspaceId, role: 'admin'}];
38
+ memberships = [{workspaceId, role: 'admin', workspaceStatus: 'active'}];
35
39
  });
36
40
 
37
41
  test('returns a workspace events newest first, isolated and payload-free', async () => {
@@ -318,6 +322,18 @@ describe('GET /trigger-events', () => {
318
322
  expect(res.json()).toEqual({trigger_events: [], next_cursor: null});
319
323
  });
320
324
 
325
+ test('returns workspace-suspended for a suspended membership claim', async () => {
326
+ memberships = [{workspaceId, role: 'admin', workspaceStatus: 'suspended'}];
327
+
328
+ const res = await app.inject({
329
+ method: 'GET',
330
+ url: `/trigger-events?workspace_id=${workspaceId}`,
331
+ });
332
+
333
+ expect(res.statusCode).toBe(409);
334
+ expect(res.json().code).toBe('workspace-suspended');
335
+ });
336
+
321
337
  test('denies a workspace the caller does not belong to', async () => {
322
338
  const otherWorkspaceId = crypto.randomUUID();
323
339
 
@@ -1,4 +1,4 @@
1
- import {requireUserContext} from '@shipfox/api-auth-context';
1
+ import {requireWorkspaceAccess} from '@shipfox/api-auth-context';
2
2
  import {
3
3
  triggerEventListQuerySchema,
4
4
  triggerEventListResponseSchema,
@@ -30,10 +30,7 @@ export const listTriggerEventsRoute = defineRoute({
30
30
  cursor,
31
31
  } = request.query;
32
32
 
33
- const userContext = requireUserContext(request);
34
- if (!userContext.canAccess(workspaceId)) {
35
- throw new ClientError('Not a member of this workspace', 'forbidden', {status: 403});
36
- }
33
+ requireWorkspaceAccess({request, workspaceId});
37
34
 
38
35
  const decodedCursor = decodeTimestampIdCursor(cursor);
39
36
  if (cursor && !decodedCursor) {