1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[363],{70363:(e,t,a)=>{a.d(t,{dispatchPmWebhooks:()=>u});var n=a(49163),r=a(84967);function s(e){return{id:(0,r.gx)(e,"id"),eventType:(0,r.gx)(e,"event_type"),targetUrl:(0,r.gx)(e,"target_url"),label:(0,r.gx)(e,"label"),active:!0===e.active||"true"===(0,r.gx)(e,"active")}}async function o(e){return(await (0,n.eW)("SELECT * FROM pm_webhook_subscriptions\n WHERE tenant_id = :tenantId AND active = true\n ORDER BY event_type ASC LIMIT 100",[{name:"tenantId",value:e}])).map(s)}async function l(e){try{var t,a,r;await (0,n.eW)("INSERT INTO pm_webhook_delivery_log\n (tenant_id, webhook_id, event_type, target_url, status_code, success, error_message)\n VALUES (:tenantId, :webhookId::uuid, :eventType, :targetUrl, :statusCode, :success, :errorMessage)",[{name:"tenantId",value:e.tenantId},{name:"webhookId",value:null!=(t=e.webhookId)?t:null},{name:"eventType",value:e.eventType},{name:"targetUrl",value:e.targetUrl},{name:"statusCode",value:null!=(a=e.statusCode)?a:null},{name:"success",value:e.success},{name:"errorMessage",value:null!=(r=e.errorMessage)?r:null}])}catch(e){}}async function u(e,t,a){let n=[];try{n=await o(e)}catch(e){return 0}let r=n.filter(e=>e.eventType===t||"*"===e.eventType),s=0;for(let n of r)try{let r=await fetch(n.targetUrl,{method:"POST",headers:{"Content-Type":"application/json","X-PM-Event":t},body:JSON.stringify({type:t,tenantId:e,timestamp:new Date().toISOString(),payload:a})}),o=r.ok;o&&s++,await l({tenantId:e,webhookId:n.id,eventType:t,targetUrl:n.targetUrl,statusCode:r.status,success:o,errorMessage:o?void 0:"HTTP ".concat(r.status)})}catch(a){await l({tenantId:e,webhookId:n.id,eventType:t,targetUrl:n.targetUrl,success:!1,errorMessage:a instanceof Error?a.message:"fetch failed"})}return s}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.