{"version":3,"file":"webhook-store.mjs","sources":["../../src/services/webhook-store.ts"],"sourcesContent":["/**\n * Webhook store is the implementation of webhook storage over the core_store\n */\n\nimport { errors } from '@strapi/utils';\nimport type { Model, Database } from '@strapi/database';\nimport type { Modules } from '@strapi/types';\n\nconst { ValidationError } = errors;\n\nconst webhookModel: Model = {\n  uid: 'strapi::webhook',\n  singularName: 'strapi_webhooks',\n  tableName: 'strapi_webhooks',\n  attributes: {\n    id: {\n      type: 'increments',\n    },\n    name: {\n      type: 'string',\n    },\n    url: {\n      type: 'text',\n    },\n    headers: {\n      type: 'json',\n    },\n    events: {\n      type: 'json',\n    },\n    enabled: {\n      type: 'boolean',\n    },\n  },\n};\n\ntype Webhook = Modules.WebhookStore.Webhook;\ntype DBOutput = Omit<Webhook, 'id' | 'isEnabled'> & { id: string | number; enabled: boolean };\ntype DBInput = Omit<DBOutput, 'id'>;\n\nconst toDBObject = (data: Webhook): DBInput => {\n  return {\n    name: data.name,\n    url: data.url,\n    headers: data.headers,\n    events: data.events,\n    enabled: data.isEnabled,\n  };\n};\n\nconst fromDBObject = (row: DBOutput): Webhook => {\n  return {\n    id: typeof row.id === 'number' ? row.id.toString() : row.id,\n    name: row.name,\n    url: row.url,\n    headers: row.headers,\n    events: row.events,\n    isEnabled: row.enabled,\n  };\n};\n\nconst webhookEventValidator = async (allowedEvents: Map<string, string>, events: string[]) => {\n  const allowedValues = Array.from(allowedEvents.values());\n\n  events.forEach((event) => {\n    if (allowedValues.includes(event)) {\n      return;\n    }\n\n    throw new ValidationError(`Webhook event ${event} is not supported`);\n  });\n};\n\nexport interface WebhookStore {\n  allowedEvents: Map<string, string>;\n  addAllowedEvent(key: string, value: string): void;\n  removeAllowedEvent(key: string): void;\n  listAllowedEvents(): string[];\n  getAllowedEvent(key: string): string | undefined;\n  findWebhooks(): Promise<Webhook[]>;\n  findWebhook(id: string): Promise<Webhook | null>;\n  createWebhook(data: Webhook): Promise<Webhook>;\n  updateWebhook(id: string, data: Webhook): Promise<Webhook | null>;\n  deleteWebhook(id: string): Promise<Webhook | null>;\n}\n\nconst createWebhookStore = ({ db }: { db: Database }): WebhookStore => {\n  return {\n    allowedEvents: new Map([\n      ['ENTRY_CREATE', 'entry.create'],\n      ['ENTRY_UPDATE', 'entry.update'],\n      ['ENTRY_DELETE', 'entry.delete'],\n      ['ENTRY_PUBLISH', 'entry.publish'],\n      ['ENTRY_UNPUBLISH', 'entry.unpublish'],\n      ['ENTRY_DRAFT_DISCARD', 'entry.draft-discard'],\n    ]),\n    addAllowedEvent(key, value) {\n      this.allowedEvents.set(key, value);\n    },\n    removeAllowedEvent(key) {\n      this.allowedEvents.delete(key);\n    },\n    listAllowedEvents() {\n      return Array.from(this.allowedEvents.keys());\n    },\n    getAllowedEvent(key) {\n      return this.allowedEvents.get(key);\n    },\n    async findWebhooks() {\n      const results = await db.query('strapi::webhook').findMany();\n\n      return results.map(fromDBObject);\n    },\n    async findWebhook(id) {\n      const result = await db.query('strapi::webhook').findOne({ where: { id } });\n      return result ? fromDBObject(result) : null;\n    },\n    async createWebhook(data) {\n      await webhookEventValidator(this.allowedEvents, data.events);\n\n      return db\n        .query('strapi::webhook')\n        .create({\n          data: toDBObject({ ...data, isEnabled: true }),\n        })\n        .then(fromDBObject);\n    },\n    async updateWebhook(id, data) {\n      await webhookEventValidator(this.allowedEvents, data.events);\n\n      const webhook = await db.query('strapi::webhook').update({\n        where: { id },\n        data: toDBObject(data),\n      });\n\n      return webhook ? fromDBObject(webhook) : null;\n    },\n    async deleteWebhook(id) {\n      const webhook = await db.query('strapi::webhook').delete({ where: { id } });\n      return webhook ? fromDBObject(webhook) : null;\n    },\n  };\n};\n\nexport { webhookModel, createWebhookStore };\n"],"names":["ValidationError","errors","webhookModel","uid","singularName","tableName","attributes","id","type","name","url","headers","events","enabled","toDBObject","data","isEnabled","fromDBObject","row","toString","webhookEventValidator","allowedEvents","allowedValues","Array","from","values","forEach","event","includes","createWebhookStore","db","Map","addAllowedEvent","key","value","set","removeAllowedEvent","delete","listAllowedEvents","keys","getAllowedEvent","get","findWebhooks","results","query","findMany","map","findWebhook","result","findOne","where","createWebhook","create","then","updateWebhook","webhook","update","deleteWebhook"],"mappings":";;AAQA,MAAM,EAAEA,eAAe,EAAE,GAAGC,MAAAA;AAE5B,MAAMC,YAAAA,GAAsB;IAC1BC,GAAAA,EAAK,iBAAA;IACLC,YAAAA,EAAc,iBAAA;IACdC,SAAAA,EAAW,iBAAA;IACXC,UAAAA,EAAY;QACVC,EAAAA,EAAI;YACFC,IAAAA,EAAM;AACR,SAAA;QACAC,IAAAA,EAAM;YACJD,IAAAA,EAAM;AACR,SAAA;QACAE,GAAAA,EAAK;YACHF,IAAAA,EAAM;AACR,SAAA;QACAG,OAAAA,EAAS;YACPH,IAAAA,EAAM;AACR,SAAA;QACAI,MAAAA,EAAQ;YACNJ,IAAAA,EAAM;AACR,SAAA;QACAK,OAAAA,EAAS;YACPL,IAAAA,EAAM;AACR;AACF;AACF;AAMA,MAAMM,aAAa,CAACC,IAAAA,GAAAA;IAClB,OAAO;AACLN,QAAAA,IAAAA,EAAMM,KAAKN,IAAI;AACfC,QAAAA,GAAAA,EAAKK,KAAKL,GAAG;AACbC,QAAAA,OAAAA,EAASI,KAAKJ,OAAO;AACrBC,QAAAA,MAAAA,EAAQG,KAAKH,MAAM;AACnBC,QAAAA,OAAAA,EAASE,KAAKC;AAChB,KAAA;AACF,CAAA;AAEA,MAAMC,eAAe,CAACC,GAAAA,GAAAA;IACpB,OAAO;QACLX,EAAAA,EAAI,OAAOW,GAAAA,CAAIX,EAAE,KAAK,QAAA,GAAWW,GAAAA,CAAIX,EAAE,CAACY,QAAQ,EAAA,GAAKD,GAAAA,CAAIX,EAAE;AAC3DE,QAAAA,IAAAA,EAAMS,IAAIT,IAAI;AACdC,QAAAA,GAAAA,EAAKQ,IAAIR,GAAG;AACZC,QAAAA,OAAAA,EAASO,IAAIP,OAAO;AACpBC,QAAAA,MAAAA,EAAQM,IAAIN,MAAM;AAClBI,QAAAA,SAAAA,EAAWE,IAAIL;AACjB,KAAA;AACF,CAAA;AAEA,MAAMO,qBAAAA,GAAwB,OAAOC,aAAAA,EAAoCT,MAAAA,GAAAA;AACvE,IAAA,MAAMU,aAAAA,GAAgBC,KAAAA,CAAMC,IAAI,CAACH,cAAcI,MAAM,EAAA,CAAA;IAErDb,MAAAA,CAAOc,OAAO,CAAC,CAACC,KAAAA,GAAAA;QACd,IAAIL,aAAAA,CAAcM,QAAQ,CAACD,KAAAA,CAAAA,EAAQ;AACjC,YAAA;AACF,QAAA;AAEA,QAAA,MAAM,IAAI3B,eAAAA,CAAgB,CAAC,cAAc,EAAE2B,KAAAA,CAAM,iBAAiB,CAAC,CAAA;AACrE,IAAA,CAAA,CAAA;AACF,CAAA;AAeA,MAAME,kBAAAA,GAAqB,CAAC,EAAEC,EAAE,EAAoB,GAAA;IAClD,OAAO;AACLT,QAAAA,aAAAA,EAAe,IAAIU,GAAAA,CAAI;AACrB,YAAA;AAAC,gBAAA,cAAA;AAAgB,gBAAA;AAAe,aAAA;AAChC,YAAA;AAAC,gBAAA,cAAA;AAAgB,gBAAA;AAAe,aAAA;AAChC,YAAA;AAAC,gBAAA,cAAA;AAAgB,gBAAA;AAAe,aAAA;AAChC,YAAA;AAAC,gBAAA,eAAA;AAAiB,gBAAA;AAAgB,aAAA;AAClC,YAAA;AAAC,gBAAA,iBAAA;AAAmB,gBAAA;AAAkB,aAAA;AACtC,YAAA;AAAC,gBAAA,qBAAA;AAAuB,gBAAA;AAAsB;AAC/C,SAAA,CAAA;QACDC,eAAAA,CAAAA,CAAgBC,GAAG,EAAEC,KAAK,EAAA;AACxB,YAAA,IAAI,CAACb,aAAa,CAACc,GAAG,CAACF,GAAAA,EAAKC,KAAAA,CAAAA;AAC9B,QAAA,CAAA;AACAE,QAAAA,kBAAAA,CAAAA,CAAmBH,GAAG,EAAA;AACpB,YAAA,IAAI,CAACZ,aAAa,CAACgB,MAAM,CAACJ,GAAAA,CAAAA;AAC5B,QAAA,CAAA;AACAK,QAAAA,iBAAAA,CAAAA,GAAAA;AACE,YAAA,OAAOf,MAAMC,IAAI,CAAC,IAAI,CAACH,aAAa,CAACkB,IAAI,EAAA,CAAA;AAC3C,QAAA,CAAA;AACAC,QAAAA,eAAAA,CAAAA,CAAgBP,GAAG,EAAA;AACjB,YAAA,OAAO,IAAI,CAACZ,aAAa,CAACoB,GAAG,CAACR,GAAAA,CAAAA;AAChC,QAAA,CAAA;QACA,MAAMS,YAAAA,CAAAA,GAAAA;AACJ,YAAA,MAAMC,UAAU,MAAMb,EAAAA,CAAGc,KAAK,CAAC,mBAAmBC,QAAQ,EAAA;YAE1D,OAAOF,OAAAA,CAAQG,GAAG,CAAC7B,YAAAA,CAAAA;AACrB,QAAA,CAAA;AACA,QAAA,MAAM8B,aAAYxC,EAAE,EAAA;AAClB,YAAA,MAAMyC,SAAS,MAAMlB,EAAAA,CAAGc,KAAK,CAAC,iBAAA,CAAA,CAAmBK,OAAO,CAAC;gBAAEC,KAAAA,EAAO;AAAE3C,oBAAAA;AAAG;AAAE,aAAA,CAAA;YACzE,OAAOyC,MAAAA,GAAS/B,aAAa+B,MAAAA,CAAAA,GAAU,IAAA;AACzC,QAAA,CAAA;AACA,QAAA,MAAMG,eAAcpC,IAAI,EAAA;AACtB,YAAA,MAAMK,sBAAsB,IAAI,CAACC,aAAa,EAAEN,KAAKH,MAAM,CAAA;AAE3D,YAAA,OAAOkB,EAAAA,CACJc,KAAK,CAAC,iBAAA,CAAA,CACNQ,MAAM,CAAC;AACNrC,gBAAAA,IAAAA,EAAMD,UAAAA,CAAW;AAAE,oBAAA,GAAGC,IAAI;oBAAEC,SAAAA,EAAW;AAAK,iBAAA;AAC9C,aAAA,CAAA,CACCqC,IAAI,CAACpC,YAAAA,CAAAA;AACV,QAAA,CAAA;QACA,MAAMqC,aAAAA,CAAAA,CAAc/C,EAAE,EAAEQ,IAAI,EAAA;AAC1B,YAAA,MAAMK,sBAAsB,IAAI,CAACC,aAAa,EAAEN,KAAKH,MAAM,CAAA;AAE3D,YAAA,MAAM2C,UAAU,MAAMzB,EAAAA,CAAGc,KAAK,CAAC,iBAAA,CAAA,CAAmBY,MAAM,CAAC;gBACvDN,KAAAA,EAAO;AAAE3C,oBAAAA;AAAG,iBAAA;AACZQ,gBAAAA,IAAAA,EAAMD,UAAAA,CAAWC,IAAAA;AACnB,aAAA,CAAA;YAEA,OAAOwC,OAAAA,GAAUtC,aAAasC,OAAAA,CAAAA,GAAW,IAAA;AAC3C,QAAA,CAAA;AACA,QAAA,MAAME,eAAclD,EAAE,EAAA;AACpB,YAAA,MAAMgD,UAAU,MAAMzB,EAAAA,CAAGc,KAAK,CAAC,iBAAA,CAAA,CAAmBP,MAAM,CAAC;gBAAEa,KAAAA,EAAO;AAAE3C,oBAAAA;AAAG;AAAE,aAAA,CAAA;YACzE,OAAOgD,OAAAA,GAAUtC,aAAasC,OAAAA,CAAAA,GAAW,IAAA;AAC3C,QAAA;AACF,KAAA;AACF;;;;"}