PlatformWebhooks.mock.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. import type {
  2. PlatformWebhooksMockSeed,
  3. WebhookDelivery,
  4. WebhookScope,
  5. } from './PlatformWebhooks.types'
  6. const createDeliveries = (
  7. endpointId: string,
  8. prefix: string,
  9. deliveries: Array<Pick<WebhookDelivery, 'eventType' | 'status' | 'responseCode' | 'attemptAt'>>
  10. ): WebhookDelivery[] =>
  11. deliveries.map((delivery, index) => ({
  12. id: `${prefix}-${index + 1}`,
  13. endpointId,
  14. ...delivery,
  15. }))
  16. const organizationPrimaryDeliveries = createDeliveries(
  17. '7f2c9d4a-6e31-4d9d-9a1f-2c4b5e6f7081',
  18. 'org-delivery',
  19. [
  20. {
  21. eventType: 'project.created',
  22. status: 'success',
  23. responseCode: 200,
  24. attemptAt: '2026-02-27T08:04:00.000Z',
  25. },
  26. {
  27. eventType: 'project.updated',
  28. status: 'failure',
  29. responseCode: 500,
  30. attemptAt: '2026-02-27T07:56:00.000Z',
  31. },
  32. {
  33. eventType: 'project.deleted',
  34. status: 'pending',
  35. attemptAt: '2026-02-27T07:45:00.000Z',
  36. },
  37. {
  38. eventType: 'organization.member_invited',
  39. status: 'success',
  40. responseCode: 202,
  41. attemptAt: '2026-02-27T07:37:00.000Z',
  42. },
  43. {
  44. eventType: 'project.resumed',
  45. status: 'success',
  46. responseCode: 204,
  47. attemptAt: '2026-02-27T07:18:00.000Z',
  48. },
  49. {
  50. eventType: 'organization.member_removed',
  51. status: 'failure',
  52. responseCode: 400,
  53. attemptAt: '2026-02-27T06:59:00.000Z',
  54. },
  55. {
  56. eventType: 'organization.updated',
  57. status: 'skipped',
  58. attemptAt: '2026-02-27T06:40:00.000Z',
  59. },
  60. {
  61. eventType: 'project.paused',
  62. status: 'success',
  63. responseCode: 200,
  64. attemptAt: '2026-02-27T06:21:00.000Z',
  65. },
  66. {
  67. eventType: 'project.created',
  68. status: 'failure',
  69. responseCode: 503,
  70. attemptAt: '2026-02-27T06:03:00.000Z',
  71. },
  72. {
  73. eventType: 'project.updated',
  74. status: 'success',
  75. responseCode: 200,
  76. attemptAt: '2026-02-27T05:44:00.000Z',
  77. },
  78. {
  79. eventType: 'project.deleted',
  80. status: 'skipped',
  81. attemptAt: '2026-02-27T05:25:00.000Z',
  82. },
  83. {
  84. eventType: 'organization.member_invited',
  85. status: 'success',
  86. responseCode: 201,
  87. attemptAt: '2026-02-27T05:07:00.000Z',
  88. },
  89. ]
  90. )
  91. const organizationSecondaryDeliveries = createDeliveries(
  92. '1a4e8c73-5b29-44af-8c62-9f1d2b3c4d5e',
  93. 'org-secondary-delivery',
  94. [
  95. {
  96. eventType: 'organization.updated',
  97. status: 'skipped',
  98. attemptAt: '2026-02-26T14:12:00.000Z',
  99. },
  100. ]
  101. )
  102. const projectDeliveries = createDeliveries(
  103. '3c9b7e21-8d54-4f63-b2a1-6e7d8c9f0a12',
  104. 'project-delivery',
  105. [
  106. {
  107. eventType: 'project.updated',
  108. status: 'success',
  109. responseCode: 200,
  110. attemptAt: '2026-02-27T09:01:00.000Z',
  111. },
  112. {
  113. eventType: 'project.resource_exhausted',
  114. status: 'failure',
  115. responseCode: 429,
  116. attemptAt: '2026-02-27T08:47:00.000Z',
  117. },
  118. {
  119. eventType: 'project.paused',
  120. status: 'success',
  121. responseCode: 202,
  122. attemptAt: '2026-02-26T21:10:00.000Z',
  123. },
  124. {
  125. eventType: 'project.branch_created',
  126. status: 'success',
  127. responseCode: 200,
  128. attemptAt: '2026-02-26T19:45:00.000Z',
  129. },
  130. {
  131. eventType: 'project.resumed',
  132. status: 'pending',
  133. attemptAt: '2026-02-26T18:30:00.000Z',
  134. },
  135. {
  136. eventType: 'project.branch_deleted',
  137. status: 'success',
  138. responseCode: 204,
  139. attemptAt: '2026-02-26T17:04:00.000Z',
  140. },
  141. {
  142. eventType: 'project.updated',
  143. status: 'failure',
  144. responseCode: 500,
  145. attemptAt: '2026-02-26T15:59:00.000Z',
  146. },
  147. {
  148. eventType: 'project.resource_exhausted',
  149. status: 'skipped',
  150. attemptAt: '2026-02-26T14:12:00.000Z',
  151. },
  152. ]
  153. )
  154. export const PLATFORM_WEBHOOKS_MOCK_DATA: Record<WebhookScope, PlatformWebhooksMockSeed> = {
  155. organization: {
  156. eventTypes: [
  157. 'organization.member_invited',
  158. 'organization.member_removed',
  159. 'organization.updated',
  160. 'project.created',
  161. 'project.updated',
  162. 'project.deleted',
  163. 'project.paused',
  164. 'project.resumed',
  165. ],
  166. endpoints: [
  167. {
  168. id: '7f2c9d4a-6e31-4d9d-9a1f-2c4b5e6f7081',
  169. name: 'Lovable production',
  170. url: 'https://api.lovable.dev/webhooks/briven',
  171. description: 'Primary organization webhook endpoint',
  172. enabled: true,
  173. eventTypes: ['project.created', 'project.updated', 'project.deleted'],
  174. customHeaders: [
  175. { id: 'org-header-1', key: 'X-Lovable-Version', value: 'v2' },
  176. { id: 'org-header-2', key: 'X-Environment', value: 'production' },
  177. ],
  178. createdBy: 'user@supabase.io',
  179. createdAt: '2026-02-15T21:30:00.000Z',
  180. },
  181. {
  182. id: '1a4e8c73-5b29-44af-8c62-9f1d2b3c4d5e',
  183. name: 'Slack notifications',
  184. url: 'https://hooks.slack.com/services/abc1234/def5678/ghi9012',
  185. description: 'Operational alerts for organization-level events',
  186. enabled: false,
  187. eventTypes: ['organization.updated'],
  188. customHeaders: [],
  189. createdBy: 'ops@supabase.io',
  190. createdAt: '2026-02-12T10:14:00.000Z',
  191. },
  192. ],
  193. deliveries: [...organizationPrimaryDeliveries, ...organizationSecondaryDeliveries],
  194. },
  195. project: {
  196. eventTypes: [
  197. 'project.updated',
  198. 'project.paused',
  199. 'project.resumed',
  200. 'project.branch_created',
  201. 'project.branch_deleted',
  202. 'project.resource_exhausted',
  203. ],
  204. endpoints: [
  205. {
  206. id: '3c9b7e21-8d54-4f63-b2a1-6e7d8c9f0a12',
  207. name: 'Project analytics',
  208. url: 'https://analytics.example.com/hooks/briven-project',
  209. description: 'Project-level status updates for analytics pipeline',
  210. enabled: true,
  211. eventTypes: ['project.updated', 'project.resource_exhausted'],
  212. customHeaders: [{ id: 'project-header-1', key: 'X-Project-Type', value: 'platform' }],
  213. createdBy: 'owner@project.dev',
  214. createdAt: '2026-02-18T11:23:00.000Z',
  215. },
  216. ],
  217. deliveries: projectDeliveries,
  218. },
  219. }