@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
@@ -1,6 +1,6 @@
1
- import { requireUserContext } from '@shipfox/api-auth-context';
1
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
2
2
  import { triggerEventFacetsQuerySchema, triggerEventFacetsResponseSchema } from '@shipfox/api-triggers-dto';
3
- import { ClientError, defineRoute } from '@shipfox/node-fastify';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
4
  import { listTriggerEventFacets } from '#db/index.js';
5
5
  export const listTriggerEventFacetsRoute = defineRoute({
6
6
  method: 'GET',
@@ -14,12 +14,10 @@ export const listTriggerEventFacetsRoute = defineRoute({
14
14
  },
15
15
  handler: async (request)=>{
16
16
  const { workspace_id: workspaceId } = request.query;
17
- const userContext = requireUserContext(request);
18
- if (!userContext.canAccess(workspaceId)) {
19
- throw new ClientError('Not a member of this workspace', 'forbidden', {
20
- status: 403
21
- });
22
- }
17
+ requireWorkspaceAccess({
18
+ request,
19
+ workspaceId
20
+ });
23
21
  return await listTriggerEventFacets({
24
22
  workspaceId
25
23
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/list-trigger-event-facets.ts"],"sourcesContent":["import {requireUserContext} from '@shipfox/api-auth-context';\nimport {\n triggerEventFacetsQuerySchema,\n triggerEventFacetsResponseSchema,\n} from '@shipfox/api-triggers-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {listTriggerEventFacets} from '#db/index.js';\n\nexport const listTriggerEventFacetsRoute = defineRoute({\n method: 'GET',\n path: '/facets',\n description: 'Distinct source and event filter values (with counts) for a workspace.',\n schema: {\n querystring: triggerEventFacetsQuerySchema,\n response: {\n 200: triggerEventFacetsResponseSchema,\n },\n },\n handler: async (request) => {\n const {workspace_id: workspaceId} = request.query;\n\n const userContext = requireUserContext(request);\n if (!userContext.canAccess(workspaceId)) {\n throw new ClientError('Not a member of this workspace', 'forbidden', {status: 403});\n }\n\n return await listTriggerEventFacets({workspaceId});\n },\n});\n"],"names":["requireUserContext","triggerEventFacetsQuerySchema","triggerEventFacetsResponseSchema","ClientError","defineRoute","listTriggerEventFacets","listTriggerEventFacetsRoute","method","path","description","schema","querystring","response","handler","request","workspace_id","workspaceId","query","userContext","canAccess","status"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,4BAA4B;AAC7D,SACEC,6BAA6B,EAC7BC,gCAAgC,QAC3B,4BAA4B;AACnC,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,sBAAsB,QAAO,eAAe;AAEpD,OAAO,MAAMC,8BAA8BF,YAAY;IACrDG,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,aAAaV;QACbW,UAAU;YACR,KAAKV;QACP;IACF;IACAW,SAAS,OAAOC;QACd,MAAM,EAACC,cAAcC,WAAW,EAAC,GAAGF,QAAQG,KAAK;QAEjD,MAAMC,cAAclB,mBAAmBc;QACvC,IAAI,CAACI,YAAYC,SAAS,CAACH,cAAc;YACvC,MAAM,IAAIb,YAAY,kCAAkC,aAAa;gBAACiB,QAAQ;YAAG;QACnF;QAEA,OAAO,MAAMf,uBAAuB;YAACW;QAAW;IAClD;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/list-trigger-event-facets.ts"],"sourcesContent":["import {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {\n triggerEventFacetsQuerySchema,\n triggerEventFacetsResponseSchema,\n} from '@shipfox/api-triggers-dto';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {listTriggerEventFacets} from '#db/index.js';\n\nexport const listTriggerEventFacetsRoute = defineRoute({\n method: 'GET',\n path: '/facets',\n description: 'Distinct source and event filter values (with counts) for a workspace.',\n schema: {\n querystring: triggerEventFacetsQuerySchema,\n response: {\n 200: triggerEventFacetsResponseSchema,\n },\n },\n handler: async (request) => {\n const {workspace_id: workspaceId} = request.query;\n\n requireWorkspaceAccess({request, workspaceId});\n\n return await listTriggerEventFacets({workspaceId});\n },\n});\n"],"names":["requireWorkspaceAccess","triggerEventFacetsQuerySchema","triggerEventFacetsResponseSchema","defineRoute","listTriggerEventFacets","listTriggerEventFacetsRoute","method","path","description","schema","querystring","response","handler","request","workspace_id","workspaceId","query"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,4BAA4B;AACjE,SACEC,6BAA6B,EAC7BC,gCAAgC,QAC3B,4BAA4B;AACnC,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,sBAAsB,QAAO,eAAe;AAEpD,OAAO,MAAMC,8BAA8BF,YAAY;IACrDG,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,aAAaT;QACbU,UAAU;YACR,KAAKT;QACP;IACF;IACAU,SAAS,OAAOC;QACd,MAAM,EAACC,cAAcC,WAAW,EAAC,GAAGF,QAAQG,KAAK;QAEjDhB,uBAAuB;YAACa;YAASE;QAAW;QAE5C,OAAO,MAAMX,uBAAuB;YAACW;QAAW;IAClD;AACF,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-trigger-events.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-trigger-events.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,sBAAsB,iDAyDjC,CAAC"}
1
+ {"version":3,"file":"list-trigger-events.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/list-trigger-events.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,sBAAsB,iDAsDjC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { requireUserContext } from '@shipfox/api-auth-context';
1
+ import { requireWorkspaceAccess } from '@shipfox/api-auth-context';
2
2
  import { triggerEventListQuerySchema, triggerEventListResponseSchema } from '@shipfox/api-triggers-dto';
3
3
  import { decodeTimestampIdCursor, encodeTimestampIdCursor } from '@shipfox/node-drizzle';
4
4
  import { ClientError, defineRoute } from '@shipfox/node-fastify';
@@ -16,12 +16,10 @@ export const listTriggerEventsRoute = defineRoute({
16
16
  },
17
17
  handler: async (request)=>{
18
18
  const { workspace_id: workspaceId, source, event, outcome: outcomes, from, to, limit, cursor } = request.query;
19
- const userContext = requireUserContext(request);
20
- if (!userContext.canAccess(workspaceId)) {
21
- throw new ClientError('Not a member of this workspace', 'forbidden', {
22
- status: 403
23
- });
24
- }
19
+ requireWorkspaceAccess({
20
+ request,
21
+ workspaceId
22
+ });
25
23
  const decodedCursor = decodeTimestampIdCursor(cursor);
26
24
  if (cursor && !decodedCursor) {
27
25
  throw new ClientError('Invalid cursor', 'invalid-cursor', {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/list-trigger-events.ts"],"sourcesContent":["import {requireUserContext} from '@shipfox/api-auth-context';\nimport {\n triggerEventListQuerySchema,\n triggerEventListResponseSchema,\n} from '@shipfox/api-triggers-dto';\nimport {decodeTimestampIdCursor, encodeTimestampIdCursor} from '@shipfox/node-drizzle';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {listTriggerEvents} from '#db/index.js';\nimport {toTriggerEventListItemDto} from '#presentation/dto/trigger-events.js';\n\nexport const listTriggerEventsRoute = defineRoute({\n method: 'GET',\n path: '/',\n description: 'List trigger events for a workspace, newest first.',\n schema: {\n querystring: triggerEventListQuerySchema,\n response: {\n 200: triggerEventListResponseSchema,\n },\n },\n handler: async (request) => {\n const {\n workspace_id: workspaceId,\n source,\n event,\n outcome: outcomes,\n from,\n to,\n limit,\n cursor,\n } = request.query;\n\n const userContext = requireUserContext(request);\n if (!userContext.canAccess(workspaceId)) {\n throw new ClientError('Not a member of this workspace', 'forbidden', {status: 403});\n }\n\n const decodedCursor = decodeTimestampIdCursor(cursor);\n if (cursor && !decodedCursor) {\n throw new ClientError('Invalid cursor', 'invalid-cursor', {status: 400});\n }\n\n const result = await listTriggerEvents({\n workspaceId,\n limit,\n cursor: decodedCursor\n ? {receivedAt: decodedCursor.createdAt, id: decodedCursor.id}\n : undefined,\n filters: {\n source,\n event,\n outcomes,\n from: from ? new Date(from) : undefined,\n to: to ? new Date(to) : undefined,\n },\n });\n\n return {\n trigger_events: result.events.map(toTriggerEventListItemDto),\n next_cursor: result.nextCursor\n ? encodeTimestampIdCursor({\n createdAt: result.nextCursor.receivedAt,\n id: result.nextCursor.id,\n })\n : null,\n };\n },\n});\n"],"names":["requireUserContext","triggerEventListQuerySchema","triggerEventListResponseSchema","decodeTimestampIdCursor","encodeTimestampIdCursor","ClientError","defineRoute","listTriggerEvents","toTriggerEventListItemDto","listTriggerEventsRoute","method","path","description","schema","querystring","response","handler","request","workspace_id","workspaceId","source","event","outcome","outcomes","from","to","limit","cursor","query","userContext","canAccess","status","decodedCursor","result","receivedAt","createdAt","id","undefined","filters","Date","trigger_events","events","map","next_cursor","nextCursor"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,4BAA4B;AAC7D,SACEC,2BAA2B,EAC3BC,8BAA8B,QACzB,4BAA4B;AACnC,SAAQC,uBAAuB,EAAEC,uBAAuB,QAAO,wBAAwB;AACvF,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,iBAAiB,QAAO,eAAe;AAC/C,SAAQC,yBAAyB,QAAO,sCAAsC;AAE9E,OAAO,MAAMC,yBAAyBH,YAAY;IAChDI,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,aAAab;QACbc,UAAU;YACR,KAAKb;QACP;IACF;IACAc,SAAS,OAAOC;QACd,MAAM,EACJC,cAAcC,WAAW,EACzBC,MAAM,EACNC,KAAK,EACLC,SAASC,QAAQ,EACjBC,IAAI,EACJC,EAAE,EACFC,KAAK,EACLC,MAAM,EACP,GAAGV,QAAQW,KAAK;QAEjB,MAAMC,cAAc7B,mBAAmBiB;QACvC,IAAI,CAACY,YAAYC,SAAS,CAACX,cAAc;YACvC,MAAM,IAAId,YAAY,kCAAkC,aAAa;gBAAC0B,QAAQ;YAAG;QACnF;QAEA,MAAMC,gBAAgB7B,wBAAwBwB;QAC9C,IAAIA,UAAU,CAACK,eAAe;YAC5B,MAAM,IAAI3B,YAAY,kBAAkB,kBAAkB;gBAAC0B,QAAQ;YAAG;QACxE;QAEA,MAAME,SAAS,MAAM1B,kBAAkB;YACrCY;YACAO;YACAC,QAAQK,gBACJ;gBAACE,YAAYF,cAAcG,SAAS;gBAAEC,IAAIJ,cAAcI,EAAE;YAAA,IAC1DC;YACJC,SAAS;gBACPlB;gBACAC;gBACAE;gBACAC,MAAMA,OAAO,IAAIe,KAAKf,QAAQa;gBAC9BZ,IAAIA,KAAK,IAAIc,KAAKd,MAAMY;YAC1B;QACF;QAEA,OAAO;YACLG,gBAAgBP,OAAOQ,MAAM,CAACC,GAAG,CAAClC;YAClCmC,aAAaV,OAAOW,UAAU,GAC1BxC,wBAAwB;gBACtB+B,WAAWF,OAAOW,UAAU,CAACV,UAAU;gBACvCE,IAAIH,OAAOW,UAAU,CAACR,EAAE;YAC1B,KACA;QACN;IACF;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/list-trigger-events.ts"],"sourcesContent":["import {requireWorkspaceAccess} from '@shipfox/api-auth-context';\nimport {\n triggerEventListQuerySchema,\n triggerEventListResponseSchema,\n} from '@shipfox/api-triggers-dto';\nimport {decodeTimestampIdCursor, encodeTimestampIdCursor} from '@shipfox/node-drizzle';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {listTriggerEvents} from '#db/index.js';\nimport {toTriggerEventListItemDto} from '#presentation/dto/trigger-events.js';\n\nexport const listTriggerEventsRoute = defineRoute({\n method: 'GET',\n path: '/',\n description: 'List trigger events for a workspace, newest first.',\n schema: {\n querystring: triggerEventListQuerySchema,\n response: {\n 200: triggerEventListResponseSchema,\n },\n },\n handler: async (request) => {\n const {\n workspace_id: workspaceId,\n source,\n event,\n outcome: outcomes,\n from,\n to,\n limit,\n cursor,\n } = request.query;\n\n requireWorkspaceAccess({request, workspaceId});\n\n const decodedCursor = decodeTimestampIdCursor(cursor);\n if (cursor && !decodedCursor) {\n throw new ClientError('Invalid cursor', 'invalid-cursor', {status: 400});\n }\n\n const result = await listTriggerEvents({\n workspaceId,\n limit,\n cursor: decodedCursor\n ? {receivedAt: decodedCursor.createdAt, id: decodedCursor.id}\n : undefined,\n filters: {\n source,\n event,\n outcomes,\n from: from ? new Date(from) : undefined,\n to: to ? new Date(to) : undefined,\n },\n });\n\n return {\n trigger_events: result.events.map(toTriggerEventListItemDto),\n next_cursor: result.nextCursor\n ? encodeTimestampIdCursor({\n createdAt: result.nextCursor.receivedAt,\n id: result.nextCursor.id,\n })\n : null,\n };\n },\n});\n"],"names":["requireWorkspaceAccess","triggerEventListQuerySchema","triggerEventListResponseSchema","decodeTimestampIdCursor","encodeTimestampIdCursor","ClientError","defineRoute","listTriggerEvents","toTriggerEventListItemDto","listTriggerEventsRoute","method","path","description","schema","querystring","response","handler","request","workspace_id","workspaceId","source","event","outcome","outcomes","from","to","limit","cursor","query","decodedCursor","status","result","receivedAt","createdAt","id","undefined","filters","Date","trigger_events","events","map","next_cursor","nextCursor"],"mappings":"AAAA,SAAQA,sBAAsB,QAAO,4BAA4B;AACjE,SACEC,2BAA2B,EAC3BC,8BAA8B,QACzB,4BAA4B;AACnC,SAAQC,uBAAuB,EAAEC,uBAAuB,QAAO,wBAAwB;AACvF,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,iBAAiB,QAAO,eAAe;AAC/C,SAAQC,yBAAyB,QAAO,sCAAsC;AAE9E,OAAO,MAAMC,yBAAyBH,YAAY;IAChDI,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,aAAab;QACbc,UAAU;YACR,KAAKb;QACP;IACF;IACAc,SAAS,OAAOC;QACd,MAAM,EACJC,cAAcC,WAAW,EACzBC,MAAM,EACNC,KAAK,EACLC,SAASC,QAAQ,EACjBC,IAAI,EACJC,EAAE,EACFC,KAAK,EACLC,MAAM,EACP,GAAGV,QAAQW,KAAK;QAEjB5B,uBAAuB;YAACiB;YAASE;QAAW;QAE5C,MAAMU,gBAAgB1B,wBAAwBwB;QAC9C,IAAIA,UAAU,CAACE,eAAe;YAC5B,MAAM,IAAIxB,YAAY,kBAAkB,kBAAkB;gBAACyB,QAAQ;YAAG;QACxE;QAEA,MAAMC,SAAS,MAAMxB,kBAAkB;YACrCY;YACAO;YACAC,QAAQE,gBACJ;gBAACG,YAAYH,cAAcI,SAAS;gBAAEC,IAAIL,cAAcK,EAAE;YAAA,IAC1DC;YACJC,SAAS;gBACPhB;gBACAC;gBACAE;gBACAC,MAAMA,OAAO,IAAIa,KAAKb,QAAQW;gBAC9BV,IAAIA,KAAK,IAAIY,KAAKZ,MAAMU;YAC1B;QACF;QAEA,OAAO;YACLG,gBAAgBP,OAAOQ,MAAM,CAACC,GAAG,CAAChC;YAClCiC,aAAaV,OAAOW,UAAU,GAC1BtC,wBAAwB;gBACtB6B,WAAWF,OAAOW,UAAU,CAACV,UAAU;gBACvCE,IAAIH,OAAOW,UAAU,CAACR,EAAE;YAC1B,KACA;QACN;IACF;AACF,GAAG"}