@blyp/core 0.1.21 → 0.1.23

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 (248) hide show
  1. package/README.md +54 -522
  2. package/STABILITY.md +56 -0
  3. package/dist/ai/anthropic/index.d.ts +3 -0
  4. package/dist/ai/anthropic/normalize.d.ts +9 -0
  5. package/dist/ai/anthropic/stream.d.ts +3 -0
  6. package/dist/ai/anthropic/wrap.d.ts +13 -0
  7. package/dist/ai/anthropic.js +701 -0
  8. package/dist/ai/anthropic.mjs +701 -0
  9. package/dist/ai/better-agent/index.d.ts +3 -0
  10. package/dist/ai/better-agent/normalize.d.ts +18 -0
  11. package/dist/ai/better-agent/plugin.d.ts +3 -0
  12. package/dist/ai/better-agent/tracker.d.ts +35 -0
  13. package/dist/ai/better-agent.js +701 -0
  14. package/dist/ai/better-agent.mjs +701 -0
  15. package/dist/ai/fetch.js +701 -0
  16. package/dist/ai/fetch.mjs +701 -0
  17. package/dist/ai/openai/index.d.ts +3 -0
  18. package/dist/ai/openai/normalize.d.ts +10 -0
  19. package/dist/ai/openai/stream.d.ts +3 -0
  20. package/dist/ai/openai/wrap.d.ts +24 -0
  21. package/dist/ai/openai.js +701 -0
  22. package/dist/ai/openai.mjs +701 -0
  23. package/dist/ai/shared/fetch.d.ts +5 -0
  24. package/dist/ai/shared/index.d.ts +2 -0
  25. package/dist/ai/shared/normalize.d.ts +17 -0
  26. package/dist/ai/shared/redaction.d.ts +6 -0
  27. package/dist/ai/shared/stream.d.ts +7 -0
  28. package/dist/ai/shared/trace.d.ts +119 -0
  29. package/dist/ai/shared/types.d.ts +171 -0
  30. package/dist/ai/shared.js +701 -0
  31. package/dist/ai/shared.mjs +701 -0
  32. package/dist/ai/vercel/index.d.ts +3 -0
  33. package/dist/ai/vercel/middleware.d.ts +3 -0
  34. package/dist/ai/vercel/model.d.ts +3 -0
  35. package/dist/ai/vercel.js +701 -0
  36. package/dist/ai/vercel.mjs +701 -0
  37. package/dist/astro.js +618 -4519
  38. package/dist/astro.mjs +618 -4491
  39. package/dist/client.js +1 -1139
  40. package/dist/client.mjs +1 -1132
  41. package/dist/connectors/betterstack.js +9 -1532
  42. package/dist/connectors/betterstack.mjs +9 -1507
  43. package/dist/connectors/databuddy.js +9 -1456
  44. package/dist/connectors/databuddy.mjs +9 -1451
  45. package/dist/connectors/delivery/backoff.d.ts +2 -0
  46. package/dist/connectors/delivery/manager.d.ts +44 -0
  47. package/dist/connectors/delivery/queue-path.d.ts +1 -0
  48. package/dist/connectors/delivery/sqlite-adapter-bun.d.ts +1 -0
  49. package/dist/connectors/delivery/sqlite-adapter-node.d.ts +1 -0
  50. package/dist/connectors/delivery/sqlite-client.d.ts +37 -0
  51. package/dist/connectors/delivery/sqlite-worker.d.ts +1 -0
  52. package/dist/connectors/delivery/studio-queue.d.ts +12 -0
  53. package/dist/connectors/delivery/types.d.ts +98 -0
  54. package/dist/connectors/otlp/index.d.ts +1 -0
  55. package/dist/connectors/otlp.js +9 -1371
  56. package/dist/connectors/otlp.mjs +9 -1368
  57. package/dist/connectors/posthog/properties.d.ts +4 -0
  58. package/dist/connectors/posthog/sender.d.ts +0 -1
  59. package/dist/connectors/posthog.js +10 -1527
  60. package/dist/connectors/posthog.mjs +10 -1522
  61. package/dist/connectors/sentry.js +9 -1380
  62. package/dist/connectors/sentry.mjs +9 -1357
  63. package/dist/core/config.d.ts +7 -2
  64. package/dist/core/log-record.d.ts +5 -4
  65. package/dist/core/logger.d.ts +2 -0
  66. package/dist/core/optional-module.d.ts +1 -0
  67. package/dist/core/pino-pretty-loader.d.ts +4 -0
  68. package/dist/database.js +1 -24
  69. package/dist/database.mjs +1 -21
  70. package/dist/elysia.js +613 -4517
  71. package/dist/elysia.mjs +615 -4491
  72. package/dist/expo.js +1 -726
  73. package/dist/expo.mjs +1 -724
  74. package/dist/express.js +613 -4507
  75. package/dist/express.mjs +615 -4480
  76. package/dist/fastify.js +615 -4526
  77. package/dist/fastify.mjs +617 -4499
  78. package/dist/frameworks/elysia/index.d.ts +1 -1
  79. package/dist/frameworks/elysia/logger.d.ts +2 -35
  80. package/dist/frameworks/nestjs/helpers.d.ts +2 -0
  81. package/dist/frameworks/shared/http.d.ts +3 -2
  82. package/dist/frameworks/shared/index.d.ts +2 -1
  83. package/dist/frameworks/shared/logger.d.ts +2 -0
  84. package/dist/frameworks/shared/request-context.d.ts +2 -0
  85. package/dist/frameworks/shared/trace.d.ts +6 -0
  86. package/dist/hono.js +616 -4496
  87. package/dist/hono.mjs +618 -4470
  88. package/dist/index.d.ts +49 -19
  89. package/dist/index.js +615 -7557
  90. package/dist/index.mjs +618 -7465
  91. package/dist/nestjs.js +626 -4999
  92. package/dist/nestjs.mjs +621 -4966
  93. package/dist/nextjs.js +618 -4525
  94. package/dist/nextjs.mjs +620 -4499
  95. package/dist/nitro.js +617 -4642
  96. package/dist/nitro.mjs +619 -4616
  97. package/dist/nuxt.js +617 -4649
  98. package/dist/nuxt.mjs +619 -4623
  99. package/dist/react-router.js +616 -4559
  100. package/dist/react-router.mjs +618 -4533
  101. package/dist/shared/redaction.d.ts +17 -0
  102. package/dist/standalone.js +606 -3628
  103. package/dist/standalone.mjs +610 -3603
  104. package/dist/sveltekit.js +617 -4523
  105. package/dist/sveltekit.mjs +619 -4497
  106. package/dist/tanstack-start.js +616 -4522
  107. package/dist/tanstack-start.mjs +618 -4496
  108. package/dist/types/core/config.d.ts +57 -0
  109. package/dist/types/core/logger.d.ts +3 -0
  110. package/dist/types/core/structured-log.d.ts +2 -0
  111. package/dist/types/database.d.ts +1 -0
  112. package/dist/types/frameworks/astro.d.ts +1 -0
  113. package/dist/types/frameworks/client.d.ts +2 -0
  114. package/dist/types/frameworks/elysia.d.ts +2 -0
  115. package/dist/types/frameworks/express.d.ts +1 -0
  116. package/dist/types/frameworks/fastify.d.ts +1 -0
  117. package/dist/types/frameworks/hono.d.ts +1 -0
  118. package/dist/types/frameworks/http.d.ts +1 -0
  119. package/dist/types/frameworks/nestjs.d.ts +2 -0
  120. package/dist/types/frameworks/nextjs.d.ts +1 -0
  121. package/dist/types/frameworks/nitro.d.ts +1 -0
  122. package/dist/types/frameworks/react-router.d.ts +2 -0
  123. package/dist/types/frameworks/request-context.d.ts +1 -0
  124. package/dist/types/frameworks/shared.d.ts +4 -1
  125. package/dist/types/frameworks/standalone.d.ts +3 -2
  126. package/dist/types/frameworks/sveltekit.d.ts +1 -0
  127. package/dist/types/frameworks/tanstack-start.d.ts +9 -3
  128. package/dist/types/frameworks/workers.d.ts +3 -0
  129. package/dist/types/shared/client-log.d.ts +1 -0
  130. package/dist/workers.js +2 -626
  131. package/dist/workers.mjs +2 -623
  132. package/package.json +259 -173
  133. package/dist/astro.js.map +0 -1
  134. package/dist/astro.mjs.map +0 -1
  135. package/dist/client.js.map +0 -1
  136. package/dist/client.mjs.map +0 -1
  137. package/dist/connectors/betterstack.js.map +0 -1
  138. package/dist/connectors/betterstack.mjs.map +0 -1
  139. package/dist/connectors/databuddy.js.map +0 -1
  140. package/dist/connectors/databuddy.mjs.map +0 -1
  141. package/dist/connectors/otlp.js.map +0 -1
  142. package/dist/connectors/otlp.mjs.map +0 -1
  143. package/dist/connectors/posthog.js.map +0 -1
  144. package/dist/connectors/posthog.mjs.map +0 -1
  145. package/dist/connectors/sentry.js.map +0 -1
  146. package/dist/connectors/sentry.mjs.map +0 -1
  147. package/dist/database.js.map +0 -1
  148. package/dist/database.mjs.map +0 -1
  149. package/dist/elysia.js.map +0 -1
  150. package/dist/elysia.mjs.map +0 -1
  151. package/dist/expo.js.map +0 -1
  152. package/dist/expo.mjs.map +0 -1
  153. package/dist/express.js.map +0 -1
  154. package/dist/express.mjs.map +0 -1
  155. package/dist/fastify.js.map +0 -1
  156. package/dist/fastify.mjs.map +0 -1
  157. package/dist/hono.js.map +0 -1
  158. package/dist/hono.mjs.map +0 -1
  159. package/dist/index.js.map +0 -1
  160. package/dist/index.mjs.map +0 -1
  161. package/dist/nestjs.js.map +0 -1
  162. package/dist/nestjs.mjs.map +0 -1
  163. package/dist/nextjs.js.map +0 -1
  164. package/dist/nextjs.mjs.map +0 -1
  165. package/dist/nitro.js.map +0 -1
  166. package/dist/nitro.mjs.map +0 -1
  167. package/dist/nuxt.js.map +0 -1
  168. package/dist/nuxt.mjs.map +0 -1
  169. package/dist/react-router.js.map +0 -1
  170. package/dist/react-router.mjs.map +0 -1
  171. package/dist/standalone.js.map +0 -1
  172. package/dist/standalone.mjs.map +0 -1
  173. package/dist/sveltekit.js.map +0 -1
  174. package/dist/sveltekit.mjs.map +0 -1
  175. package/dist/tanstack-start.js.map +0 -1
  176. package/dist/tanstack-start.mjs.map +0 -1
  177. package/dist/workers.js.map +0 -1
  178. package/dist/workers.mjs.map +0 -1
  179. package/exports/client.js +0 -3
  180. package/exports/client.mjs +0 -3
  181. package/exports/connectors/betterstack.js +0 -1
  182. package/exports/connectors/betterstack.mjs +0 -1
  183. package/exports/connectors/databuddy.js +0 -1
  184. package/exports/connectors/databuddy.mjs +0 -1
  185. package/exports/connectors/otlp.js +0 -1
  186. package/exports/connectors/otlp.mjs +0 -1
  187. package/exports/connectors/posthog.js +0 -1
  188. package/exports/connectors/posthog.mjs +0 -1
  189. package/exports/connectors/sentry.js +0 -1
  190. package/exports/connectors/sentry.mjs +0 -1
  191. package/exports/database.js +0 -1
  192. package/exports/database.mjs +0 -1
  193. package/exports/expo.js +0 -1
  194. package/exports/expo.mjs +0 -1
  195. package/exports/frameworks/astro.js +0 -1
  196. package/exports/frameworks/astro.mjs +0 -1
  197. package/exports/frameworks/elysia.js +0 -1
  198. package/exports/frameworks/elysia.mjs +0 -1
  199. package/exports/frameworks/express.js +0 -1
  200. package/exports/frameworks/express.mjs +0 -1
  201. package/exports/frameworks/fastify.js +0 -1
  202. package/exports/frameworks/fastify.mjs +0 -1
  203. package/exports/frameworks/hono.js +0 -1
  204. package/exports/frameworks/hono.mjs +0 -1
  205. package/exports/frameworks/nestjs.js +0 -1
  206. package/exports/frameworks/nestjs.mjs +0 -1
  207. package/exports/frameworks/nextjs.js +0 -1
  208. package/exports/frameworks/nextjs.mjs +0 -1
  209. package/exports/frameworks/nitro.js +0 -1
  210. package/exports/frameworks/nitro.mjs +0 -1
  211. package/exports/frameworks/nuxt.js +0 -1
  212. package/exports/frameworks/nuxt.mjs +0 -1
  213. package/exports/frameworks/react-router.js +0 -1
  214. package/exports/frameworks/react-router.mjs +0 -1
  215. package/exports/frameworks/standalone.js +0 -1
  216. package/exports/frameworks/standalone.mjs +0 -1
  217. package/exports/frameworks/sveltekit.js +0 -1
  218. package/exports/frameworks/sveltekit.mjs +0 -1
  219. package/exports/frameworks/tanstack-start.js +0 -1
  220. package/exports/frameworks/tanstack-start.mjs +0 -1
  221. package/exports/workers.js +0 -1
  222. package/exports/workers.mjs +0 -1
  223. package/types/client.d.ts +0 -34
  224. package/types/connectors/betterstack.d.ts +0 -1
  225. package/types/connectors/databuddy.d.ts +0 -1
  226. package/types/connectors/otlp.d.ts +0 -1
  227. package/types/connectors/posthog.d.ts +0 -1
  228. package/types/connectors/sentry.d.ts +0 -1
  229. package/types/database.d.ts +0 -1
  230. package/types/expo.d.ts +0 -17
  231. package/types/frameworks/astro.d.ts +0 -1
  232. package/types/frameworks/client.d.ts +0 -160
  233. package/types/frameworks/elysia.d.ts +0 -1
  234. package/types/frameworks/expo.d.ts +0 -50
  235. package/types/frameworks/express.d.ts +0 -1
  236. package/types/frameworks/fastify.d.ts +0 -1
  237. package/types/frameworks/hono.d.ts +0 -1
  238. package/types/frameworks/nestjs.d.ts +0 -1
  239. package/types/frameworks/nextjs.d.ts +0 -1
  240. package/types/frameworks/nitro.d.ts +0 -1
  241. package/types/frameworks/nuxt.d.ts +0 -1
  242. package/types/frameworks/react-router.d.ts +0 -1
  243. package/types/frameworks/standalone.d.ts +0 -1
  244. package/types/frameworks/sveltekit.d.ts +0 -1
  245. package/types/frameworks/tanstack-start.d.ts +0 -1
  246. package/types/frameworks/workers.d.ts +0 -115
  247. package/types/index.d.ts +0 -1
  248. package/types/workers.d.ts +0 -13
@@ -0,0 +1,701 @@
1
+ 'use strict';var core=require('@better-agent/core'),Kt=require('pino'),jiti=require('jiti'),module$1=require('module'),async_hooks=require('async_hooks'),w=require('fs'),z=require('path'),Fn=require('os'),zod=require('zod'),fflate=require('fflate'),crypto$1=require('crypto'),worker_threads=require('worker_threads');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var Kt__default=/*#__PURE__*/_interopDefault(Kt);var w__default=/*#__PURE__*/_interopDefault(w);var z__default=/*#__PURE__*/_interopDefault(z);var Fn__default=/*#__PURE__*/_interopDefault(Fn);var hn=Object.defineProperty;var bn=(e,t,n)=>t in e?hn(e,t,{enumerable:true,configurable:true,writable:true,value:n}):e[t]=n;var l=(e,t,n)=>bn(e,typeof t!="symbol"?t+"":t,n);var wn=jiti.createJiti(typeof __filename=="string"?__filename:(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('better-agent.js', document.baseURI).href)),{interopDefault:false,moduleCache:true,fsCache:false}),Ye=new Map;function Tn(e){if(!e||typeof e!="object")return false;let t="code"in e?e.code:void 0,n="message"in e?e.message:void 0;return t==="MODULE_NOT_FOUND"||t==="ERR_MODULE_NOT_FOUND"||typeof n=="string"&&(n.includes("Cannot find module")||n.includes("Cannot find package"))}function O(e,t,n=`@blyp/core/${e}`){let o=`@blyp/core/${e}`,r=`${o}::${n}`,i=Ye.get(r);if(i)return i;try{let s=wn(n);return Ye.set(r,s),s}catch(s){if(!Tn(s))throw s;let a=t.map(u=>`"${u}"`).join(", "),d=t.join(" ");throw new Error(`[Blyp] Optional connector dependencies missing for "${o}". Install ${a} to use this API. Example: bun add ${d}. You can also import directly from "${o}".`,{cause:s instanceof Error?s:void 0})}}var Sn=module$1.createRequire(typeof __filename=="string"?__filename:(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('better-agent.js', document.baseURI).href))),ye=null;function kn(e){if(!e||typeof e!="object")return false;let t="code"in e?e.code:void 0,n="message"in e?e.message:void 0;return t==="MODULE_NOT_FOUND"||t==="ERR_MODULE_NOT_FOUND"||typeof n=="string"&&(n.includes("Cannot find module")||n.includes("Cannot find package"))}function Ln(e){if(typeof e=="function")return e;if(!e||typeof e!="object")return null;let t="default"in e?e.default:void 0;return typeof t=="function"?t:null}function Ze(){if(ye)return ye;let e;try{e=Sn("pino-pretty");}catch(n){throw kn(n)?new Error('[Blyp] Failed to initialize the pretty logger transport because pretty: true requires "pino-pretty" to be installed.',{cause:n instanceof Error?n:void 0}):new Error('[Blyp] Failed to initialize the pretty logger transport with "pino-pretty".',{cause:n instanceof Error?n:void 0})}let t=Ln(e);if(!t)throw new Error('[Blyp] Failed to initialize the pretty logger transport because "pino-pretty" did not expose a callable factory.');return ye=t,t}var Dn=new async_hooks.AsyncLocalStorage;function he(){return Dn.getStore()}function et(){return he()?.activeLogger}function be(){return he()?.traceId}function Ce(){let e=he();return !e||!e.requestScopedLoggerActive||!e.structuredCollectorActive?false:(e.mixedLoggerWarningShown||(e.mixedLoggerWarningShown=true,console.warn("[Blyp] Warning: Mixed logger usage detected for this request. The root logger call was ignored because a request-scoped structured logger is active.")),true)}function X(e){let t={name:e.name,message:e.message};e.stack&&(t.stack=e.stack);let n=e;return n.cause!==void 0&&(t.cause=D(n.cause)),t}function D(e,t=new WeakSet){if(e instanceof Error)return X(e);if(typeof e=="function")return `[Function: ${e.name||"anonymous"}]`;if(typeof e=="symbol")return e.toString();if(e==null)return e;if(Array.isArray(e))return e.map(n=>D(n,t));if(typeof e=="object"){if(t.has(e))return "[Circular]";t.add(e);let n={};for(let[o,r]of Object.entries(e))n[o]=D(r,t);return t.delete(e),n}return e}function we(e){if(typeof e=="string")return e;if(e instanceof Error)return e.message||e.name;let t=D(e);if(typeof t=="string")return t;try{return JSON.stringify(t,null,2)??String(t)}catch{return String(t)}}var xn="[REDACTED]",En=["password","passwd","pwd","secret","token","api_key","apikey","api_secret","authorization","auth","x-api-key","private_key","privatekey","access_token","refresh_token","client_secret","session","cookie","set-cookie","ssn","credit_card","card_number","cvv","cvc","otp","pin"];var An=[{type:"bearer",pattern:/\bBearer\s+(?:sk-[A-Za-z0-9]{20,}|pk_(?:live|test)_[A-Za-z0-9]{16,}|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+|[A-Za-z0-9._~+/-]{20,})\b/g},{type:"jwt",pattern:/\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g},{type:"api_key",pattern:/\b(?:sk-[A-Za-z0-9]{20,}|pk_(?:live|test)_[A-Za-z0-9]{16,})\b/g}],Pn=/\b(?:\d[ -]*?){16}\b/g;function tt(e){let t=new Set,n=[];for(let o of e)typeof o!="string"||o.length===0||t.has(o)||(t.add(o),n.push(o));return n}function _n(e){let t=e.flags.includes("g")?e.flags:`${e.flags}g`;return new RegExp(e.source,t)}function Bn(e){if(!e||typeof e!="object"||Array.isArray(e))return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Mn(e){return new Set(e.keys.map(t=>t.toLowerCase()))}function On(e){return e.split(".").filter(Boolean)}function Te(e,t,n=0,o=0){if(n===e.length)return o===t.length;let r=e[n];if(r==="**"){if(n===e.length-1)return true;for(let i=o;i<=t.length;i+=1)if(Te(e,t,n+1,i))return true;return false}return o>=t.length||r!=="*"&&r!==t[o]?false:Te(e,t,n+1,o+1)}function In(e,t){return e.length===0||t.paths.length===0?false:t.paths.some(n=>Te(On(n),e))}function Nn(e){let t=e.replace(/\D/g,"");if(t.length!==16)return false;let n=0,o=false;for(let r=t.length-1;r>=0;r-=1){let i=Number(t[r]);o&&(i*=2,i>9&&(i-=9)),n+=i,o=!o;}return n%10===0}function nt(e,t,n){if(n||t.disablePatternScanning)return e;let o=e;for(let{type:r,pattern:i}of An)o=o.replace(i,`[REDACTED:${r}]`);o=o.replace(Pn,r=>Nn(r)?"[REDACTED:card]":r);for(let r of t.patterns)o=o.replace(_n(r),"[REDACTED:pattern]");return o}function Y(e,t,n,o){if(typeof e=="string")return nt(e,t,!!o.skipPatternScanning);if(e==null||typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map((i,s)=>Y(i,t,n,{path:[...o.path,String(s)],skipPatternScanning:o.skipPatternScanning}));if(!Bn(e))return e;let r={};for(let[i,s]of Object.entries(e)){let a=[...o.path,i];if(n.has(i.toLowerCase())||In(a,t)){if(s==null||typeof s=="string"||typeof s=="number"||typeof s=="boolean"){r[i]=xn;continue}r[i]=Y(s,t,n,{path:a,skipPatternScanning:o.skipPatternScanning});continue}r[i]=Y(s,t,n,{path:a,skipPatternScanning:o.skipPatternScanning});}return r}function x(e,t){return {keys:tt([...En,...e?.keys??[],...t?.keys??[]]),paths:tt([...e?.paths??[],...t?.paths??[]]),patterns:[...e?.patterns??[],...t?.patterns??[]].filter(n=>n instanceof RegExp),disablePatternScanning:t?.disablePatternScanning??e?.disablePatternScanning??false}}function b(e,t,n={path:[]}){let o=D(e);return Y(o,t,Mn(t),n)}function $(e,t){return typeof e=="string"?nt(e,t,false):we(b(e,t))}function rt(){return z__default.default.join(Fn__default.default.homedir(),".blyp","queue.db")}var Un=zod.z.string().url().refine(e=>{try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return false}},{message:"Expected an absolute http(s) URL"}),ot=zod.z.custom(e=>e!==null&&typeof e=="object"&&!Array.isArray(e),{message:"Expected a plain object"}),Se=zod.z.string().trim().min(1);function ke(e){return Un.safeParse(e).success}function Le(e){return ot.safeParse(e).success}function B(e){return Se.safeParse(e).success}var ve="/inngest";zod.z.union([zod.z.literal("betterstack"),zod.z.literal("databuddy"),zod.z.literal("posthog"),zod.z.literal("sentry"),zod.z.undefined(),zod.z.object({type:zod.z.literal("otlp"),name:Se})]);function jn(e){try{return e()}catch{return}}function qn(){return Math.random().toString(36).slice(2,10)}function it(){let e=jn(()=>globalThis.crypto),t=e&&typeof e.randomUUID=="function"?e.randomUUID.bind(e):void 0;return t?t():`${Date.now().toString(36)}-${qn()}`}function $n(e,t=new Set){return (n,o,r)=>{if(t.has(n)||typeof console>"u")return;let i=console[e];if(typeof i=="function"){if(t.add(n),r===void 0){i.call(console,o);return}i.call(console,o,r);}}}function A(e){return $n("warn",e)}var Qn="@blyp/core",Gn=".gitignore",ut=["blyp.config.ts","blyp.config.mts","blyp.config.cts","blyp.config.js","blyp.config.mjs","blyp.config.cjs","blyp.config.json"],Jn="blyp.config.json",Vn="https://us.i.posthog.com",Xn="blyp-app",Yn=Xn,Zn=new Set,P=A(Zn),dt={enabled:true,maxSizeBytes:10*1024*1024,maxArchives:5,compress:true},lt={enabled:true,dir:"",archiveDir:"",format:"ndjson",rotation:dt},De={enabled:true,path:ve},pt=x(),I={maxAttempts:8,initialBackoffMs:500,maxBackoffMs:3e4,multiplier:2,jitter:true},S={enabled:false,memoryBufferSize:500,durableQueuePath:rt(),durableSpillStrategy:"after-first-failure",memoryBatchSize:25,sqliteWriteBatchSize:100,sqliteReadBatchSize:50,dispatchConcurrency:4,pollIntervalMs:1e3,overflowStrategy:"drop-oldest",retry:I},gt={maxRetries:1,backoffMs:100},er={strategy:"immediate",batchSize:1,flushIntervalMs:250,maxQueueSize:1e3,overflowStrategy:"drop-oldest",flushTimeoutMs:5e3,retry:gt},at={pretty:true,level:"info",destination:"file",file:lt,clientLogging:De,redact:pt,connectors:{delivery:S}},K=null;function tr(e){let t=e;for(;;){let n=z.resolve(t,"package.json");if(w.existsSync(n))try{let r=JSON.parse(w.readFileSync(n,"utf-8"));if(B(r.name))return r.name}catch{}let o=z.dirname(t);if(o===t)return;t=o;}}function Ee(e=process.cwd()){return tr(e)??Yn}function nr(){return {pretty:true,level:"info",destination:"file",file:{enabled:true,format:"ndjson",rotation:{enabled:true,maxSizeBytes:10*1024*1024,maxArchives:5,compress:true}},clientLogging:{enabled:true,path:ve},redact:pt,connectors:{delivery:S}}}function rr(e){let t=z.resolve(e,"package.json");if(!w.existsSync(t))return true;try{return JSON.parse(w.readFileSync(t,"utf-8")).name!==Qn}catch{return true}}function or(e){if(ut.some(n=>w.existsSync(z.resolve(e,n))))return;let t=z.resolve(e,Jn);if(!w.existsSync(t))try{w.writeFileSync(t,`${JSON.stringify(nr(),null,2)}
2
+ `);}catch(n){console.error("[Blyp] Warning: Failed to create blyp.config.json:",n);}}function ir(e){let t=z.resolve(e,Gn);if(!w.existsSync(t)){try{w.writeFileSync(t,`logs
3
+ .blyp
4
+ `);}catch(n){console.error("[Blyp] Warning: Failed to create .gitignore:",n);}return}try{let n=w.readFileSync(t,"utf-8"),o=["logs",".blyp"].filter(i=>{let s=i.replace(".","\\.");return !new RegExp(`^(?:/?${s}/?)\\s*$`,"m").test(n)});if(o.length===0)return;let r=n.endsWith(`
5
+ `)?"":`
6
+ `;w.appendFileSync(t,`${r}${o.join(`
7
+ `)}
8
+ `);}catch(n){console.error("[Blyp] Warning: Failed to update .gitignore:",n);}}function ar(){let e=process.cwd();rr(e)&&(or(e),ir(e));}function sr(){let e=process.cwd(),t=ut.map(o=>z.resolve(e,o)).filter(o=>w.existsSync(o));if(t.length===0)return null;if(t.length>1){let o=t[0];P(`config-multiple:${o}`,`[Blyp] Warning: Multiple config files found. Using ${o} and ignoring ${t.slice(1).join(", ")}.`);}let n=t[0];return {path:n,type:n.endsWith(".json")?"json":"jiti"}}function ft(e,t){let n=e&&typeof e=="object"&&"default"in e&&e.default!==void 0?e.default:e;return !n||typeof n!="object"||Array.isArray(n)?(P(`config-invalid:${t}`,`[Blyp] Warning: Config file ${t} did not export an object. Falling back to defaults.`),{}):n}function cr(e){try{let t=w.readFileSync(e,"utf-8");return ft(JSON.parse(t),e)}catch(t){return console.error("[Blyp] Warning: Failed to parse blyp.config.json:",t),{}}}function ur(e){try{let t=jiti.createJiti(process.cwd(),{interopDefault:!0,moduleCache:!1,fsCache:!1});return ft(t(e),e)}catch(t){return console.error(`[Blyp] Warning: Failed to load ${e}:`,t),{}}}function dr(e){return e.type==="json"?cr(e.path):ur(e.path)}function st(e){return !!e&&typeof e=="object"&&e.type==="prisma"}function lr(e){return !!e&&typeof e=="object"&&e.type==="drizzle"}function pr(e,t){return {...gt,...e,...t}}function gr(e,t){return {...er,...e,...t,retry:pr(e?.retry,t?.retry)}}function fr(e){let t=e.model??"blypLog",o=e.client?.[t];return !!o&&typeof o.create=="function"}function mr(e){let t=e.db;return !!t&&typeof t.insert=="function"&&e.table!==void 0}function yr(e,t){if(!e)return;let n=e.adapter,o=false;t==="json"?P("database-json-config","[Blyp] Warning: Database logging requires an executable blyp config file. Database destination remains disabled until you move this config to blyp.config.ts/js."):e.dialect!=="postgres"&&e.dialect!=="mysql"?P(`database-dialect:${String(e.dialect)}`,`[Blyp] Warning: Unsupported database dialect "${String(e.dialect)}". Database logging is disabled.`):n?st(n)?(o=fr({...n,model:n.model??"blypLog"}),o||P("database-prisma-missing",`[Blyp] Warning: Prisma database adapter is missing the "${n.model??"blypLog"}" delegate or its create method. Database logging is disabled.`)):lr(n)&&(o=mr(n),o||P("database-drizzle-missing","[Blyp] Warning: Drizzle database adapter is missing a db.insert function or table reference. Database logging is disabled.")):P("database-adapter-missing","[Blyp] Warning: Database logging is enabled without an adapter. Database logging is disabled.");let r=st(n)?{...n,model:n.model??"blypLog"}:n;return {dialect:e.dialect,adapter:r,delivery:gr(void 0,e.delivery),ready:o,status:o?"enabled":"missing"}}function hr(e,t){return {...dt,...e,...t}}function br(e,t){return {...lt,...e,...t,rotation:hr(e?.rotation,t?.rotation)}}function Cr(e,t){return {...De,...e,...t,path:t?.path??e?.path??De.path}}function wr(e,t){return x(e,t)}function Tr(e,t){return {maxAttempts:Math.max(1,Math.floor(t?.maxAttempts??e?.maxAttempts??I.maxAttempts)),initialBackoffMs:Math.max(0,Math.floor(t?.initialBackoffMs??e?.initialBackoffMs??I.initialBackoffMs)),maxBackoffMs:Math.max(0,Math.floor(t?.maxBackoffMs??e?.maxBackoffMs??I.maxBackoffMs)),multiplier:Math.max(1,t?.multiplier??e?.multiplier??I.multiplier),jitter:t?.jitter??e?.jitter??I.jitter}}function Rr(e,t){let n=t?.durableQueuePath??e?.durableQueuePath??S.durableQueuePath;return {enabled:t?.enabled??e?.enabled??S.enabled,memoryBufferSize:Math.max(1,Math.floor(t?.memoryBufferSize??e?.memoryBufferSize??S.memoryBufferSize)),durableQueuePath:B(n)?n:S.durableQueuePath,durableSpillStrategy:t?.durableSpillStrategy??e?.durableSpillStrategy??S.durableSpillStrategy,memoryBatchSize:Math.max(1,Math.floor(t?.memoryBatchSize??e?.memoryBatchSize??S.memoryBatchSize)),sqliteWriteBatchSize:Math.max(1,Math.floor(t?.sqliteWriteBatchSize??e?.sqliteWriteBatchSize??S.sqliteWriteBatchSize)),sqliteReadBatchSize:Math.max(1,Math.floor(t?.sqliteReadBatchSize??e?.sqliteReadBatchSize??S.sqliteReadBatchSize)),dispatchConcurrency:Math.max(1,Math.floor(t?.dispatchConcurrency??e?.dispatchConcurrency??S.dispatchConcurrency)),pollIntervalMs:Math.max(50,Math.floor(t?.pollIntervalMs??e?.pollIntervalMs??S.pollIntervalMs)),overflowStrategy:t?.overflowStrategy??e?.overflowStrategy??S.overflowStrategy,retry:Tr(e?.retry,t?.retry),durableReady:false}}function Sr(e,t,n){if(!(!e&&!t))return yr({dialect:t?.dialect??e?.dialect,adapter:t?.adapter??e?.adapter,delivery:{...e?.delivery??{},...t?.delivery??{},retry:{...e?.delivery?.retry??{},...t?.delivery?.retry??{}}}},n)}function kr(e,t){let n=t?.enabled??e?.enabled??false,o=t?.projectKey??e?.projectKey,r=e?.enabled===true?e?.errorTracking:void 0,i=t?.errorTracking?.mode??r?.mode??"auto",s=t?.errorTracking?.enabled??r?.enabled??n,a=n&&s&&typeof o=="string"&&o.trim().length>0;return {enabled:n,mode:t?.mode??e?.mode??"auto",projectKey:o,host:t?.host??e?.host??Vn,serviceName:t?.serviceName??e?.serviceName??Ee(),errorTracking:{enabled:s,mode:i,enableExceptionAutocapture:t?.errorTracking?.enableExceptionAutocapture??r?.enableExceptionAutocapture??i==="auto",ready:a,status:a?"enabled":"missing"}}}function Lr(e,t){let n=t?.enabled??e?.enabled??false,o=t?.apiKey??e?.apiKey,r=t?.websiteId??e?.websiteId,i=n&&B(o)&&B(r);return {enabled:n,mode:t?.mode??e?.mode??"auto",apiKey:o,websiteId:r,namespace:t?.namespace??e?.namespace,source:t?.source??e?.source,apiUrl:t?.apiUrl??e?.apiUrl,debug:t?.debug??e?.debug??false,enableBatching:t?.enableBatching??e?.enableBatching??true,batchSize:t?.batchSize??e?.batchSize,batchTimeout:t?.batchTimeout??e?.batchTimeout,maxQueueSize:t?.maxQueueSize??e?.maxQueueSize,ready:i,status:i?"enabled":"missing"}}function vr(e,t){let n=t?.sourceToken??e?.sourceToken,o=t?.ingestingHost??e?.ingestingHost,r=t?.enabled??e?.enabled??false,i=e?.enabled===true?e?.errorTracking:void 0,s=Dr(r,i,t?.errorTracking),a=r&&B(n)&&ke(o);return {enabled:r,mode:t?.mode??e?.mode??"auto",sourceToken:n,ingestingHost:o,serviceName:t?.serviceName??e?.serviceName??Ee(),errorTracking:s,ready:a,status:a?"enabled":"missing"}}function Dr(e,t,n){let o=n?.dsn??t?.dsn,r=n?.enabled??t?.enabled??e,i=r&&B(o);return {enabled:r,dsn:o,tracesSampleRate:n?.tracesSampleRate??t?.tracesSampleRate??1,environment:n?.environment??t?.environment,release:n?.release??t?.release,ready:i,status:i?"enabled":"missing"}}function xr(e,t){let n=t?.dsn??e?.dsn,o=t?.enabled??e?.enabled??false,r=o&&typeof n=="string"&&n.trim().length>0;return {enabled:o,mode:t?.mode??e?.mode??"auto",dsn:n,environment:t?.environment??e?.environment,release:t?.release??e?.release,ready:r,status:r?"enabled":"missing"}}function Er(e,t){let n=t?.endpoint??e?.endpoint,o=t?.enabled??e?.enabled??false,r={...{},...t?.headers??{}},i=o&&ke(n);return {name:t?.name??e?.name??"",enabled:o,mode:t?.mode??e?.mode??"auto",endpoint:n,headers:r,auth:t?.auth??e?.auth,serviceName:t?.serviceName??e?.serviceName??Ee(),ready:i,status:i?"enabled":"missing"}}function Ar(e,t){let n=t??e??[],o=new Map;for(let r of n)!r||typeof r.name!="string"||r.name.length===0||(o.has(r.name)&&P(`otlp-duplicate:${r.name}`,`[Blyp] Warning: Duplicate OTLP connector name "${r.name}" found. Using the last definition.`),o.set(r.name,Er(void 0,r)));return Array.from(o.values())}function Pr(e,t){return {betterstack:vr(e?.betterstack,t?.betterstack),databuddy:Lr(e?.databuddy,t?.databuddy),posthog:kr(e?.posthog,t?.posthog),sentry:xr(e?.sentry,t?.sentry),otlp:Ar(e?.otlp,t?.otlp),delivery:Rr(e?.delivery,t?.delivery)}}function xe(e,t={},n={}){return {...e,...t,destination:t.destination??e.destination??"file",file:br(e.file,t.file),database:Sr(e.database,t.database,n.configFileType),clientLogging:Cr(e.clientLogging,t.clientLogging),redact:wr(e.redact,t.redact),connectors:Pr(e.connectors,t.connectors)}}function _r(){if(K!==null)return K;ar();let e=sr();if(e){let t=dr(e);K=xe(at,t,{configFileType:e.type});}else K=xe(at);return K}function mt(e={}){return xe(_r(),e)}var yt={success:"success",critical:"critical",warning:"warning",info:"info",debug:"debug",error:"error",warn:"warning",table:"table"};function ee(e){return e.replace(/\\/g,"/")}function Br(e){let t=ee(e);return t.startsWith("node:")||t.includes("/node_modules/pino")||t.includes("/node_modules/pino-pretty")||t.includes("/node_modules/@blyp/core/")||t.includes("/blyp/src/core/")||t.includes("/blyp/src/frameworks/")||t.includes("/blyp/src/posthog/")||t.includes("/blyp/dist/")}function Mr(e){let t=ee(e),n=ee(process.cwd());return t.startsWith(`${n}/`)?t.slice(n.length+1):t}function ht(){try{let e=new Error().stack;if(!e)return {file:null,line:null};let t=e.split(`
9
+ `),n=null;for(let o=2;o<t.length;o+=1){let r=t[o];if(!r)continue;let i=r.match(/\((.*):(\d+):\d+\)/)||r.match(/at\s+(.*):(\d+):(\d+)/);if(!i)continue;let s=i[1]||"",a=parseInt(i[2]||"0",10)||null;if(s&&!s.includes("node_modules")&&!Br(s)){let d=Mr(s);if(!ee(d).startsWith("dist/"))return {file:d,line:a};n??(n={file:d,line:a});}}if(n)return n}catch{return {file:null,line:null}}return {file:null,line:null}}var bt=$;function Ct(e){return e.replace(/\u001b\[[0-9;]*m/g,"")}function wt(e,t,n,o,r=x()){let{file:i,line:s}=ht(),a=bt(t,r),d={timestamp:new Date().toISOString(),level:yt[e],message:Ct(a)},u=be();return t instanceof Error&&(d.error=b(X(t),r)),i&&(d.caller=s!==null?`${i}:${s}`:i),n.length===1?d.data=b(n[0],r):n.length>1&&(d.data=b(n,r)),Object.keys(o).length>0&&(d.bindings=b(o,r)),u&&(d.traceId=u),d}function Tt(e,t,n,o,r=x()){let{file:i,line:s}=ht(),a=b(n,r),d=be(),u={message:Ct(bt(t,r)),...a};return i&&(u.caller=s!==null?`${i}:${s}`:i),Object.keys(o).length>0&&(u.bindings=b(o,r)),d&&u.traceId===void 0&&(u.traceId=d),u.level=typeof a.level=="string"&&a.level.length>0?a.level:yt[e],u.timestamp=typeof a.timestamp=="string"&&a.timestamp.length>0?a.timestamp:new Date().toISOString(),u}function Rt(e){switch(e){case "debug":return "debug";case "warning":return "warning";case "warn":return "warn";case "error":return "error";case "success":return "success";case "critical":return "critical";case "table":return "table";default:return "info"}}function Ir(e){return Buffer.from(fflate.gzipSync(e))}function Nr(e,t){console.warn(`[Blyp] Warning: ${e}`,t);}function te(e){w__default.default.mkdirSync(e,{recursive:true});}function Fr(e){try{return w__default.default.statSync(e).size}catch{return 0}}function zr(e){let t=e.getUTCFullYear(),n=String(e.getUTCMonth()+1).padStart(2,"0"),o=String(e.getUTCDate()).padStart(2,"0"),r=String(e.getUTCHours()).padStart(2,"0"),i=String(e.getUTCMinutes()).padStart(2,"0"),s=String(e.getUTCSeconds()).padStart(2,"0");return `${t}${n}${o}T${r}${i}${s}Z`}function Ur(e,t){let n=`${e}${t}`,o=1;for(;w__default.default.existsSync(n);)n=`${e}-${o}${t}`,o+=1;return n}function jr(e,t,n,o){let r=`${t}.`;try{let i=w__default.default.readdirSync(e).filter(a=>a.startsWith(r)&&(a.endsWith(".ndjson")||a.endsWith(".ndjson.gz"))).map(a=>z__default.default.join(e,a)).sort((a,d)=>w__default.default.statSync(a).mtimeMs-w__default.default.statSync(d).mtimeMs),s=Math.max(i.length-n,0);for(let a=0;a<s;a+=1)w__default.default.rmSync(i[a]);}catch(i){o(`Failed to prune archives for ${t}`,i);}}function qr(){let e=new WeakSet;return (t,n)=>{if(typeof n=="function")return `[Function: ${n.name||"anonymous"}]`;if(n===void 0)return "[undefined]";if(typeof n=="symbol")return n.toString();if(n!==null&&typeof n=="object"){if(e.has(n))return "[Circular]";e.add(n);}return n}}function $r(e){return JSON.stringify(e,qr())}function Kr(e){let t=e.file,n=t?.dir||e.logDir||z__default.default.join(process.cwd(),"logs"),o=t?.archiveDir||z__default.default.join(n,"archive"),r=t?.rotation;return {enabled:t?.enabled??true,dir:n,archiveDir:o,rotationEnabled:r?.enabled??true,maxSizeBytes:r?.maxSizeBytes??10*1024*1024,maxArchives:r?.maxArchives??5,compress:r?.compress??true}}var Ae=class{constructor(t,n={}){l(this,"config");l(this,"gzip");l(this,"warn");l(this,"combined");l(this,"error");this.config=Kr(t),this.gzip=n.gzip??Ir,this.warn=n.warn??Nr,this.combined={activePath:z__default.default.join(this.config.dir,"log.ndjson"),archivePrefix:"log",bytes:0,queue:[],processing:false},this.error={activePath:z__default.default.join(this.config.dir,"log.error.ndjson"),archivePrefix:"log.error",bytes:0,queue:[],processing:false},this.config.enabled&&(te(this.config.dir),te(this.config.archiveDir),this.seedStream(this.combined),this.seedStream(this.error));}write(t){if(!this.config.enabled)return;let n=`${$r(t)}
10
+ `;this.enqueue(this.combined,n),(t.level==="error"||t.level==="critical")&&this.enqueue(this.error,n);}enqueue(t,n){t.queue.push(n),this.processQueue(t);}processQueue(t){if(!t.processing){t.processing=true;try{for(;t.queue.length>0;){let n=t.queue.shift();if(n!==void 0)try{this.append(t,n);}catch(o){this.warn(`Failed writing log line for ${t.archivePrefix}`,o);}}}finally{t.processing=false;}}}seedStream(t){t.bytes=Fr(t.activePath),this.config.rotationEnabled&&t.bytes>this.config.maxSizeBytes&&t.bytes>0&&(this.rotate(t),w__default.default.closeSync(w__default.default.openSync(t.activePath,"a")),t.bytes=0);}append(t,n){te(this.config.dir);let o=Buffer.byteLength(n,"utf8");this.config.rotationEnabled&&t.bytes>0&&t.bytes+o>this.config.maxSizeBytes&&this.rotate(t),w__default.default.appendFileSync(t.activePath,n,"utf8"),t.bytes+=o;}rotate(t){if(te(this.config.archiveDir),!w__default.default.existsSync(t.activePath)||t.bytes===0){t.bytes=0;return}let n=zr(new Date),o=z__default.default.join(this.config.archiveDir,`${t.archivePrefix}.${n}`),r=Ur(o,".ndjson");if(w__default.default.renameSync(t.activePath,r),this.config.compress)try{let i=`${r}.gz`,s=this.gzip(w__default.default.readFileSync(r));w__default.default.writeFileSync(i,s),w__default.default.rmSync(r);}catch(i){this.warn(`Failed to gzip archive ${r}`,i);}t.bytes=0,jr(this.config.archiveDir,t.archivePrefix,this.config.maxArchives,this.warn);}};function St(e){return new Ae(e)}var Pe=class{constructor(t){this.logger=t;l(this,"isAsync",false);l(this,"isReady",true);}write(t){this.logger.write(t);}async flush(){}async shutdown(){}};function kt(e){return new Pe(St(e))}function Lt(e){let t=e.db;if(typeof t?.insert!="function"||e.table===void 0)throw new Error("[Blyp] Drizzle database adapter is missing a db.insert function or table reference.");return {async insert(n){n.length!==0&&await t.insert(e.table).values(n);}}}function Wr(e){let t=String(e??"");return t.includes("createMany")||t.includes("Unknown argument")||t.includes("not supported")||t.includes("is not a function")}function vt(e){let t=e.client,n=e.model??"blypLog",o=t[n];if(!o||typeof o.create!="function")throw new Error(`[Blyp] Prisma database adapter is missing the "${n}" delegate or its create method.`);let r=o,i=typeof r.createMany=="function";async function s(a){if(typeof t.$transaction=="function"){await t.$transaction(a.map(d=>r.create({data:d})));return}for(let d of a)await r.create({data:d});}return {async insert(a){if(a.length!==0){if(a.length===1){await r.create({data:a[0]});return}if(!i||typeof r.createMany!="function"){await s(a);return}try{await r.createMany({data:a});}catch(d){if(!Wr(d))throw d;i=false,await s(a);}}}}}function Dt(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function U(e){return typeof e=="string"&&e.length>0?e:null}function Qr(e){if(typeof e=="string"){let t=new Date(e);if(!Number.isNaN(t.getTime()))return t}return new Date}function xt(e){let t=D(e);return {id:crypto$1.randomUUID(),timestamp:Qr(e.timestamp),level:e.level,message:e.message,caller:U(e.caller),type:U(e.type),traceId:U(e.traceId),groupId:U(e.groupId),method:U(e.method),path:U(e.path),status:Dt(e.status),duration:Dt(e.duration),hasError:t.error!=null,data:t.data??null,bindings:t.bindings??null,error:t.error??null,events:t.events??null,record:t,createdAt:new Date}}function Gr(e){return !!e&&e.type==="prisma"}function Jr(e){return !!e&&e.type==="drizzle"}function Et(e){if(Gr(e.adapter))return vt(e.adapter);if(Jr(e.adapter))return Lt(e.adapter);throw new Error("[Blyp] Unsupported database adapter configuration.")}function Vr(e){return new Promise(t=>{setTimeout(t,e);})}var ne=class{constructor(t){this.config=t;l(this,"isAsync",true);l(this,"isReady",true);l(this,"warnOnce",A(new Set));l(this,"queue",[]);l(this,"writer");l(this,"timer",null);l(this,"processing",false);l(this,"closed",false);l(this,"terminalError",null);l(this,"activeDispatch",null);this.writer=Et(t);}write(t){this.closed||(this.enqueue(xt(t)),this.scheduleDispatch());}async flush(){this.timer&&(clearTimeout(this.timer),this.timer=null);let t=(async()=>{if(await this.drain(),this.terminalError)throw this.terminalError})(),n=null;try{await Promise.race([t,new Promise((o,r)=>{n=setTimeout(()=>{this.warnOnce("database-flush-timeout",`[Blyp] Warning: Timed out flushing database logs after ${this.config.delivery.flushTimeoutMs}ms.`),r(new Error("[Blyp] Timed out flushing database logs."));},this.config.delivery.flushTimeoutMs);})]);}finally{n&&clearTimeout(n);}}async shutdown(){this.closed=true,await this.flush();}enqueue(t){this.queue.push(t);let n=this.queue.length-this.config.delivery.maxQueueSize;if(!(n<=0)){if(this.warnOnce("database-overflow",`[Blyp] Warning: Database log queue exceeded ${this.config.delivery.maxQueueSize} entries. Applying ${this.config.delivery.overflowStrategy} overflow handling.`),this.config.delivery.overflowStrategy==="drop-new"){this.queue.splice(this.config.delivery.maxQueueSize);return}this.queue.splice(0,n);}}scheduleDispatch(){if(!this.processing){if(this.config.delivery.strategy==="immediate"){this.drain();return}if(this.queue.length>=this.config.delivery.batchSize){this.drain();return}this.timer||(this.timer=setTimeout(()=>{this.timer=null,this.drain();},this.config.delivery.flushIntervalMs));}}async drain(){if(this.processing){this.activeDispatch&&await this.activeDispatch;return}this.processing=true,this.activeDispatch=this.processQueue();try{await this.activeDispatch;}finally{this.processing=false,this.activeDispatch=null;}}async processQueue(){for(;this.queue.length>0;){let t=this.config.delivery.strategy==="batch"?Math.max(1,this.config.delivery.batchSize):1,n=this.queue.splice(0,t);try{await this.insertWithRetry(n);}catch(o){let r=o instanceof Error?o:new Error(String(o??"Unknown database logging failure"));throw this.terminalError=r,this.warnOnce("database-insert-failure",`[Blyp] Warning: Failed to persist logs to the ${this.config.dialect??"database"} database.`,r),r}}}async insertWithRetry(t){let n=Math.max(1,this.config.delivery.retry.maxRetries+1),o=0;for(;o<n;){o+=1;try{await this.writer.insert(t);return}catch(r){if(o>=n)throw r;await Vr(this.config.delivery.retry.backoffMs);}}}};var _e=class{constructor(){l(this,"isAsync",false);l(this,"isReady",false);}write(t){}async flush(){}async shutdown(){}},Xr=A(new Set);function At(e){if(e.destination!=="database")return kt(e);let t=e.database;return t?.ready?new ne(t):(Xr("database-sink-disabled","[Blyp] Warning: Database destination is configured but not ready. Falling back to a no-op primary sink."),new _e)}function Yr(e){return Le(e.data)?e.data:e}function Zr(e,t){if(t in e){let r=e[t];if(typeof r=="string"||typeof r=="number")return r}let o=Yr(e)[t];if(typeof o=="string"||typeof o=="number")return o}function Pt(e){return Zr(e,"type")}function _t(e,t){let n=Math.max(1,Math.floor(e)),o=Math.pow(t.multiplier,n-1),r=Math.min(Math.max(0,Math.floor(t.initialBackoffMs*o)),Math.max(0,t.maxBackoffMs));return t.jitter?Math.floor(Math.random()*(r+1)):r}var Bt="bun:sqlite";var Mt="node:sqlite";function Ot(){return `
11
+ const { parentPort } = require('node:worker_threads');
12
+ const fs = require('node:fs');
13
+ const path = require('node:path');
14
+
15
+ const NODE_SQLITE_MODULE = ${JSON.stringify(Mt)};
16
+ const BUN_SQLITE_MODULE = ${JSON.stringify(Bt)};
17
+ const CLAIM_LEASE_MS = 30000;
18
+
19
+ let db;
20
+ let runtime = 'unsupported';
21
+
22
+ async function loadDatabase() {
23
+ try {
24
+ const mod = await import(BUN_SQLITE_MODULE);
25
+ const Database = mod.default;
26
+ runtime = 'bun';
27
+ return {
28
+ create(filePath) {
29
+ return new Database(filePath);
30
+ },
31
+ exec(instance, sql) {
32
+ instance.exec(sql);
33
+ },
34
+ prepare(instance, sql) {
35
+ return instance.prepare(sql);
36
+ },
37
+ close(instance) {
38
+ instance.close();
39
+ },
40
+ run(statement, params) {
41
+ statement.run(...params);
42
+ },
43
+ all(statement, params) {
44
+ return statement.all(...params);
45
+ },
46
+ };
47
+ } catch {}
48
+
49
+ try {
50
+ const mod = await import(NODE_SQLITE_MODULE);
51
+ runtime = 'node';
52
+ return {
53
+ create(filePath) {
54
+ return new mod.DatabaseSync(filePath);
55
+ },
56
+ exec(instance, sql) {
57
+ instance.exec(sql);
58
+ },
59
+ prepare(instance, sql) {
60
+ return instance.prepare(sql);
61
+ },
62
+ close(instance) {
63
+ instance.close();
64
+ },
65
+ run(statement, params) {
66
+ statement.run(...params);
67
+ },
68
+ all(statement, params) {
69
+ return statement.all(...params);
70
+ },
71
+ };
72
+ } catch {}
73
+
74
+ throw new Error('No built-in SQLite runtime is available in this worker.');
75
+ }
76
+
77
+ let adapter;
78
+
79
+ function ensureReady() {
80
+ if (!db || !adapter) {
81
+ throw new Error('SQLite durable queue is not initialized.');
82
+ }
83
+ }
84
+
85
+ function normalizeConnectorTarget(value) {
86
+ return typeof value === 'string' && value.length > 0 ? value : null;
87
+ }
88
+
89
+ function createConnectorCondition() {
90
+ return '(connector_type = ? AND ((connector_target IS NULL AND ? IS NULL) OR connector_target = ?))';
91
+ }
92
+
93
+ function updateConnectorDeliveryStatus(item, success) {
94
+ const connectorTarget = normalizeConnectorTarget(item.connectorTarget);
95
+ const select = adapter.prepare(
96
+ db,
97
+ 'SELECT rowid FROM connector_delivery_status WHERE ' + createConnectorCondition() + ' LIMIT 1'
98
+ );
99
+ const existing = adapter.all(select, [item.connectorType, connectorTarget, connectorTarget])[0];
100
+
101
+ if (existing) {
102
+ const update = adapter.prepare(
103
+ db,
104
+ success
105
+ ? 'UPDATE connector_delivery_status SET last_success_at = ?, last_error = NULL, updated_at = ? WHERE rowid = ?'
106
+ : 'UPDATE connector_delivery_status SET last_failure_at = ?, last_error = ?, updated_at = ? WHERE rowid = ?'
107
+ );
108
+
109
+ adapter.run(
110
+ update,
111
+ success
112
+ ? [item.timestamp, item.timestamp, existing.rowid]
113
+ : [item.timestamp, item.lastError ?? null, item.timestamp, existing.rowid]
114
+ );
115
+ return;
116
+ }
117
+
118
+ const insert = adapter.prepare(
119
+ db,
120
+ 'INSERT INTO connector_delivery_status (connector_type, connector_target, last_success_at, last_failure_at, last_error, updated_at) VALUES (?, ?, ?, ?, ?, ?)'
121
+ );
122
+
123
+ adapter.run(insert, [
124
+ item.connectorType,
125
+ connectorTarget,
126
+ success ? item.timestamp : null,
127
+ success ? null : item.timestamp,
128
+ success ? null : item.lastError ?? null,
129
+ item.timestamp,
130
+ ]);
131
+ }
132
+
133
+ function initializeSchema() {
134
+ ensureReady();
135
+ adapter.exec(db, [
136
+ 'PRAGMA journal_mode = WAL;',
137
+ 'PRAGMA busy_timeout = 5000;',
138
+ 'CREATE TABLE IF NOT EXISTS connector_queue_meta (schema_version INTEGER NOT NULL);',
139
+ 'DELETE FROM connector_queue_meta;',
140
+ 'INSERT INTO connector_queue_meta (schema_version) VALUES (2);',
141
+ 'CREATE TABLE IF NOT EXISTS connector_jobs (',
142
+ ' id TEXT PRIMARY KEY,',
143
+ ' connector_type TEXT NOT NULL,',
144
+ ' connector_target TEXT NULL,',
145
+ ' operation TEXT NOT NULL,',
146
+ ' payload_json TEXT NOT NULL,',
147
+ ' attempt_count INTEGER NOT NULL,',
148
+ ' max_attempts INTEGER NOT NULL,',
149
+ ' next_attempt_at INTEGER NOT NULL,',
150
+ ' state TEXT NOT NULL,',
151
+ ' last_error TEXT NULL,',
152
+ ' created_at INTEGER NOT NULL,',
153
+ ' updated_at INTEGER NOT NULL,',
154
+ ' claimed_at INTEGER NULL',
155
+ ');',
156
+ 'CREATE TABLE IF NOT EXISTS connector_dead_letters (',
157
+ ' id TEXT PRIMARY KEY,',
158
+ ' connector_type TEXT NOT NULL,',
159
+ ' connector_target TEXT NULL,',
160
+ ' operation TEXT NOT NULL,',
161
+ ' payload_json TEXT NOT NULL,',
162
+ ' attempt_count INTEGER NOT NULL,',
163
+ ' max_attempts INTEGER NOT NULL,',
164
+ ' last_error TEXT NULL,',
165
+ ' first_enqueued_at INTEGER NOT NULL,',
166
+ ' dead_lettered_at INTEGER NOT NULL,',
167
+ ' last_attempt_at INTEGER NOT NULL',
168
+ ');',
169
+ 'CREATE TABLE IF NOT EXISTS connector_delivery_status (',
170
+ ' connector_type TEXT NOT NULL,',
171
+ ' connector_target TEXT NULL,',
172
+ ' last_success_at INTEGER NULL,',
173
+ ' last_failure_at INTEGER NULL,',
174
+ ' last_error TEXT NULL,',
175
+ ' updated_at INTEGER NOT NULL',
176
+ ');',
177
+ 'CREATE INDEX IF NOT EXISTS idx_connector_jobs_state_due ON connector_jobs(state, next_attempt_at);',
178
+ 'CREATE INDEX IF NOT EXISTS idx_connector_jobs_connector_state_due ON connector_jobs(connector_type, connector_target, state, next_attempt_at);',
179
+ 'CREATE INDEX IF NOT EXISTS idx_connector_dead_letters_connector_dead_lettered ON connector_dead_letters(connector_type, connector_target, dead_lettered_at);',
180
+ 'CREATE INDEX IF NOT EXISTS idx_connector_delivery_status_connector ON connector_delivery_status(connector_type, connector_target);'
181
+ ].join('\\n'));
182
+ }
183
+
184
+ function reclaimExpired(now) {
185
+ ensureReady();
186
+ const statement = adapter.prepare(
187
+ db,
188
+ 'UPDATE connector_jobs SET state = ?, claimed_at = NULL, updated_at = ? WHERE state = ? AND claimed_at IS NOT NULL AND claimed_at <= ?'
189
+ );
190
+ adapter.run(statement, ['pending', now, 'claimed', now - CLAIM_LEASE_MS]);
191
+ }
192
+
193
+ function insertJobs(jobs) {
194
+ ensureReady();
195
+ if (!Array.isArray(jobs) || jobs.length === 0) {
196
+ return;
197
+ }
198
+
199
+ adapter.exec(db, 'BEGIN');
200
+ try {
201
+ const statement = adapter.prepare(
202
+ db,
203
+ 'INSERT OR REPLACE INTO connector_jobs (id, connector_type, connector_target, operation, payload_json, attempt_count, max_attempts, next_attempt_at, state, last_error, created_at, updated_at, claimed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
204
+ );
205
+
206
+ for (const job of jobs) {
207
+ adapter.run(statement, [
208
+ job.id,
209
+ job.connectorType,
210
+ normalizeConnectorTarget(job.connectorTarget),
211
+ job.operation,
212
+ job.payloadJson,
213
+ job.attemptCount,
214
+ job.maxAttempts,
215
+ job.nextAttemptAt,
216
+ job.state,
217
+ job.lastError ?? null,
218
+ job.createdAt,
219
+ job.updatedAt,
220
+ job.claimedAt ?? null,
221
+ ]);
222
+ }
223
+
224
+ adapter.exec(db, 'COMMIT');
225
+ } catch (error) {
226
+ adapter.exec(db, 'ROLLBACK');
227
+ throw error;
228
+ }
229
+ }
230
+
231
+ function claimDue(limit, now) {
232
+ ensureReady();
233
+ reclaimExpired(now);
234
+
235
+ const select = adapter.prepare(
236
+ db,
237
+ 'SELECT * FROM connector_jobs WHERE state = ? AND next_attempt_at <= ? ORDER BY next_attempt_at ASC LIMIT ?'
238
+ );
239
+ const rows = adapter.all(select, ['pending', now, limit]);
240
+
241
+ if (!Array.isArray(rows) || rows.length === 0) {
242
+ return [];
243
+ }
244
+
245
+ adapter.exec(db, 'BEGIN');
246
+ try {
247
+ const update = adapter.prepare(
248
+ db,
249
+ 'UPDATE connector_jobs SET state = ?, claimed_at = ?, updated_at = ? WHERE id = ?'
250
+ );
251
+ for (const row of rows) {
252
+ adapter.run(update, ['claimed', now, now, row.id]);
253
+ row.state = 'claimed';
254
+ row.claimed_at = now;
255
+ row.updated_at = now;
256
+ }
257
+ adapter.exec(db, 'COMMIT');
258
+ } catch (error) {
259
+ adapter.exec(db, 'ROLLBACK');
260
+ throw error;
261
+ }
262
+
263
+ return rows.map((row) => ({
264
+ id: row.id,
265
+ connectorType: row.connector_type,
266
+ connectorTarget: row.connector_target ?? undefined,
267
+ operation: row.operation,
268
+ payloadJson: row.payload_json,
269
+ attemptCount: row.attempt_count,
270
+ maxAttempts: row.max_attempts,
271
+ nextAttemptAt: row.next_attempt_at,
272
+ state: row.state,
273
+ lastError: row.last_error ?? undefined,
274
+ createdAt: row.created_at,
275
+ updatedAt: row.updated_at,
276
+ claimedAt: row.claimed_at ?? undefined,
277
+ }));
278
+ }
279
+
280
+ function ack(ids) {
281
+ ensureReady();
282
+ if (!Array.isArray(ids) || ids.length === 0) {
283
+ return;
284
+ }
285
+
286
+ adapter.exec(db, 'BEGIN');
287
+ try {
288
+ const statement = adapter.prepare(db, 'DELETE FROM connector_jobs WHERE id = ?');
289
+ for (const id of ids) {
290
+ adapter.run(statement, [id]);
291
+ }
292
+ adapter.exec(db, 'COMMIT');
293
+ } catch (error) {
294
+ adapter.exec(db, 'ROLLBACK');
295
+ throw error;
296
+ }
297
+ }
298
+
299
+ function reschedule(items, now) {
300
+ ensureReady();
301
+ if (!Array.isArray(items) || items.length === 0) {
302
+ return;
303
+ }
304
+
305
+ adapter.exec(db, 'BEGIN');
306
+ try {
307
+ const statement = adapter.prepare(
308
+ db,
309
+ 'UPDATE connector_jobs SET state = ?, attempt_count = ?, next_attempt_at = ?, last_error = ?, claimed_at = NULL, updated_at = ? WHERE id = ?'
310
+ );
311
+ for (const item of items) {
312
+ adapter.run(statement, [
313
+ 'pending',
314
+ item.attemptCount,
315
+ item.nextAttemptAt,
316
+ item.lastError ?? null,
317
+ now,
318
+ item.id,
319
+ ]);
320
+ }
321
+ adapter.exec(db, 'COMMIT');
322
+ } catch (error) {
323
+ adapter.exec(db, 'ROLLBACK');
324
+ throw error;
325
+ }
326
+ }
327
+
328
+ function deadLetter(items) {
329
+ ensureReady();
330
+ if (!Array.isArray(items) || items.length === 0) {
331
+ return;
332
+ }
333
+
334
+ adapter.exec(db, 'BEGIN');
335
+ try {
336
+ const insert = adapter.prepare(
337
+ db,
338
+ 'INSERT OR REPLACE INTO connector_dead_letters (id, connector_type, connector_target, operation, payload_json, attempt_count, max_attempts, last_error, first_enqueued_at, dead_lettered_at, last_attempt_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
339
+ );
340
+ const remove = adapter.prepare(db, 'DELETE FROM connector_jobs WHERE id = ?');
341
+
342
+ for (const item of items) {
343
+ adapter.run(insert, [
344
+ item.id,
345
+ item.connectorType,
346
+ normalizeConnectorTarget(item.connectorTarget),
347
+ item.operation,
348
+ item.payloadJson,
349
+ item.attemptCount,
350
+ item.maxAttempts,
351
+ item.lastError ?? null,
352
+ item.firstEnqueuedAt,
353
+ item.deadLetteredAt,
354
+ item.lastAttemptAt,
355
+ ]);
356
+ adapter.run(remove, [item.id]);
357
+ }
358
+
359
+ adapter.exec(db, 'COMMIT');
360
+ } catch (error) {
361
+ adapter.exec(db, 'ROLLBACK');
362
+ throw error;
363
+ }
364
+ }
365
+
366
+ function markSuccess(items) {
367
+ ensureReady();
368
+ if (!Array.isArray(items) || items.length === 0) {
369
+ return;
370
+ }
371
+
372
+ adapter.exec(db, 'BEGIN');
373
+ try {
374
+ for (const item of items) {
375
+ updateConnectorDeliveryStatus(item, true);
376
+ }
377
+ adapter.exec(db, 'COMMIT');
378
+ } catch (error) {
379
+ adapter.exec(db, 'ROLLBACK');
380
+ throw error;
381
+ }
382
+ }
383
+
384
+ function markFailure(items) {
385
+ ensureReady();
386
+ if (!Array.isArray(items) || items.length === 0) {
387
+ return;
388
+ }
389
+
390
+ adapter.exec(db, 'BEGIN');
391
+ try {
392
+ for (const item of items) {
393
+ updateConnectorDeliveryStatus(item, false);
394
+ }
395
+ adapter.exec(db, 'COMMIT');
396
+ } catch (error) {
397
+ adapter.exec(db, 'ROLLBACK');
398
+ throw error;
399
+ }
400
+ }
401
+
402
+ function getStatusSummary() {
403
+ ensureReady();
404
+ const rows = [];
405
+ const byKey = new Map();
406
+
407
+ const statusRows = adapter.all(
408
+ adapter.prepare(
409
+ db,
410
+ 'SELECT connector_type, connector_target, last_success_at, last_failure_at, last_error, updated_at FROM connector_delivery_status'
411
+ ),
412
+ []
413
+ );
414
+
415
+ for (const row of statusRows) {
416
+ const key = row.connector_type + ':' + (row.connector_target ?? '');
417
+ const item = {
418
+ connectorType: row.connector_type,
419
+ connectorTarget: row.connector_target ?? undefined,
420
+ pendingCount: 0,
421
+ deadLetterCount: 0,
422
+ lastSuccessAt: row.last_success_at ?? undefined,
423
+ lastFailureAt: row.last_failure_at ?? undefined,
424
+ lastError: row.last_error ?? undefined,
425
+ updatedAt: row.updated_at ?? undefined,
426
+ };
427
+ byKey.set(key, item);
428
+ rows.push(item);
429
+ }
430
+
431
+ const pendingRows = adapter.all(
432
+ adapter.prepare(
433
+ db,
434
+ 'SELECT connector_type, connector_target, COUNT(*) AS count FROM connector_jobs WHERE state = ? GROUP BY connector_type, connector_target'
435
+ ),
436
+ ['pending']
437
+ );
438
+
439
+ for (const row of pendingRows) {
440
+ const key = row.connector_type + ':' + (row.connector_target ?? '');
441
+ const item = byKey.get(key) ?? {
442
+ connectorType: row.connector_type,
443
+ connectorTarget: row.connector_target ?? undefined,
444
+ pendingCount: 0,
445
+ deadLetterCount: 0,
446
+ };
447
+ item.pendingCount = Number(row.count ?? 0);
448
+ if (!byKey.has(key)) {
449
+ byKey.set(key, item);
450
+ rows.push(item);
451
+ }
452
+ }
453
+
454
+ const deadLetterRows = adapter.all(
455
+ adapter.prepare(
456
+ db,
457
+ 'SELECT connector_type, connector_target, COUNT(*) AS count FROM connector_dead_letters GROUP BY connector_type, connector_target'
458
+ ),
459
+ []
460
+ );
461
+
462
+ for (const row of deadLetterRows) {
463
+ const key = row.connector_type + ':' + (row.connector_target ?? '');
464
+ const item = byKey.get(key) ?? {
465
+ connectorType: row.connector_type,
466
+ connectorTarget: row.connector_target ?? undefined,
467
+ pendingCount: 0,
468
+ deadLetterCount: 0,
469
+ };
470
+ item.deadLetterCount = Number(row.count ?? 0);
471
+ if (!byKey.has(key)) {
472
+ byKey.set(key, item);
473
+ rows.push(item);
474
+ }
475
+ }
476
+
477
+ return rows.sort((left, right) => {
478
+ const leftKey = left.connectorType + ':' + (left.connectorTarget ?? '');
479
+ const rightKey = right.connectorType + ':' + (right.connectorTarget ?? '');
480
+ return leftKey.localeCompare(rightKey);
481
+ });
482
+ }
483
+
484
+ function listDeadLetters(limit, offset, connectorType, connectorTarget) {
485
+ ensureReady();
486
+ const clauses = [];
487
+ const params = [];
488
+
489
+ if (typeof connectorType === 'string' && connectorType.length > 0) {
490
+ clauses.push('connector_type = ?');
491
+ params.push(connectorType);
492
+ }
493
+
494
+ if (connectorTarget !== undefined) {
495
+ if (connectorTarget === null || connectorTarget === '') {
496
+ clauses.push('connector_target IS NULL');
497
+ } else {
498
+ clauses.push('connector_target = ?');
499
+ params.push(connectorTarget);
500
+ }
501
+ }
502
+
503
+ const whereSql = clauses.length > 0 ? ' WHERE ' + clauses.join(' AND ') : '';
504
+ const countRow = adapter.all(
505
+ adapter.prepare(db, 'SELECT COUNT(*) AS count FROM connector_dead_letters' + whereSql),
506
+ params
507
+ )[0];
508
+ const rows = adapter.all(
509
+ adapter.prepare(
510
+ db,
511
+ 'SELECT * FROM connector_dead_letters' + whereSql + ' ORDER BY dead_lettered_at DESC LIMIT ? OFFSET ?'
512
+ ),
513
+ [...params, limit, offset]
514
+ );
515
+
516
+ return {
517
+ items: rows.map((row) => ({
518
+ id: row.id,
519
+ connectorType: row.connector_type,
520
+ connectorTarget: row.connector_target ?? undefined,
521
+ operation: row.operation,
522
+ payloadJson: row.payload_json,
523
+ attemptCount: row.attempt_count,
524
+ maxAttempts: row.max_attempts,
525
+ lastError: row.last_error ?? undefined,
526
+ firstEnqueuedAt: row.first_enqueued_at,
527
+ deadLetteredAt: row.dead_lettered_at,
528
+ lastAttemptAt: row.last_attempt_at,
529
+ })),
530
+ total: Number(countRow?.count ?? 0),
531
+ };
532
+ }
533
+
534
+ function retryDeadLetters(ids, now) {
535
+ ensureReady();
536
+ if (!Array.isArray(ids) || ids.length === 0) {
537
+ return 0;
538
+ }
539
+
540
+ adapter.exec(db, 'BEGIN');
541
+ try {
542
+ const select = adapter.prepare(db, 'SELECT * FROM connector_dead_letters WHERE id = ?');
543
+ const insert = adapter.prepare(
544
+ db,
545
+ 'INSERT OR REPLACE INTO connector_jobs (id, connector_type, connector_target, operation, payload_json, attempt_count, max_attempts, next_attempt_at, state, last_error, created_at, updated_at, claimed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
546
+ );
547
+ const remove = adapter.prepare(db, 'DELETE FROM connector_dead_letters WHERE id = ?');
548
+ let count = 0;
549
+
550
+ for (const id of ids) {
551
+ const row = adapter.all(select, [id])[0];
552
+ if (!row) {
553
+ continue;
554
+ }
555
+
556
+ adapter.run(insert, [
557
+ row.id,
558
+ row.connector_type,
559
+ row.connector_target ?? null,
560
+ row.operation,
561
+ row.payload_json,
562
+ 0,
563
+ row.max_attempts,
564
+ now,
565
+ 'pending',
566
+ null,
567
+ row.first_enqueued_at,
568
+ now,
569
+ null,
570
+ ]);
571
+ adapter.run(remove, [id]);
572
+ count += 1;
573
+ }
574
+
575
+ adapter.exec(db, 'COMMIT');
576
+ return count;
577
+ } catch (error) {
578
+ adapter.exec(db, 'ROLLBACK');
579
+ throw error;
580
+ }
581
+ }
582
+
583
+ function clearDeadLetters(ids) {
584
+ ensureReady();
585
+ if (!Array.isArray(ids) || ids.length === 0) {
586
+ return 0;
587
+ }
588
+
589
+ adapter.exec(db, 'BEGIN');
590
+ try {
591
+ const select = adapter.prepare(db, 'SELECT id FROM connector_dead_letters WHERE id = ?');
592
+ const remove = adapter.prepare(db, 'DELETE FROM connector_dead_letters WHERE id = ?');
593
+ let count = 0;
594
+ for (const id of ids) {
595
+ const row = adapter.all(select, [id])[0];
596
+ if (!row) {
597
+ continue;
598
+ }
599
+ adapter.run(remove, [id]);
600
+ count += 1;
601
+ }
602
+ adapter.exec(db, 'COMMIT');
603
+ return count;
604
+ } catch (error) {
605
+ adapter.exec(db, 'ROLLBACK');
606
+ throw error;
607
+ }
608
+ }
609
+
610
+ function count() {
611
+ ensureReady();
612
+ const statement = adapter.prepare(db, 'SELECT COUNT(*) as count FROM connector_jobs');
613
+ const rows = adapter.all(statement, []);
614
+ return Number(rows[0]?.count ?? 0);
615
+ }
616
+
617
+ parentPort.on('message', async (message) => {
618
+ const { id, type, payload } = message;
619
+ try {
620
+ switch (type) {
621
+ case 'init': {
622
+ adapter = await loadDatabase();
623
+ const filePath = payload.path;
624
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
625
+ db = adapter.create(filePath);
626
+ initializeSchema();
627
+ reclaimExpired(Date.now());
628
+ parentPort.postMessage({ id, ok: true, result: { runtime } });
629
+ return;
630
+ }
631
+ case 'insert':
632
+ insertJobs(payload.jobs);
633
+ parentPort.postMessage({ id, ok: true, result: true });
634
+ return;
635
+ case 'claimDue':
636
+ parentPort.postMessage({ id, ok: true, result: claimDue(payload.limit, payload.now) });
637
+ return;
638
+ case 'ack':
639
+ ack(payload.ids);
640
+ parentPort.postMessage({ id, ok: true, result: true });
641
+ return;
642
+ case 'reschedule':
643
+ reschedule(payload.items, payload.now);
644
+ parentPort.postMessage({ id, ok: true, result: true });
645
+ return;
646
+ case 'deadLetter':
647
+ deadLetter(payload.items);
648
+ parentPort.postMessage({ id, ok: true, result: true });
649
+ return;
650
+ case 'markSuccess':
651
+ markSuccess(payload.items);
652
+ parentPort.postMessage({ id, ok: true, result: true });
653
+ return;
654
+ case 'markFailure':
655
+ markFailure(payload.items);
656
+ parentPort.postMessage({ id, ok: true, result: true });
657
+ return;
658
+ case 'getStatusSummary':
659
+ parentPort.postMessage({ id, ok: true, result: getStatusSummary() });
660
+ return;
661
+ case 'listDeadLetters':
662
+ parentPort.postMessage({
663
+ id,
664
+ ok: true,
665
+ result: listDeadLetters(
666
+ payload.limit,
667
+ payload.offset,
668
+ payload.connectorType,
669
+ payload.connectorTarget
670
+ ),
671
+ });
672
+ return;
673
+ case 'retryDeadLetters':
674
+ parentPort.postMessage({ id, ok: true, result: retryDeadLetters(payload.ids, payload.now) });
675
+ return;
676
+ case 'clearDeadLetters':
677
+ parentPort.postMessage({ id, ok: true, result: clearDeadLetters(payload.ids) });
678
+ return;
679
+ case 'count':
680
+ parentPort.postMessage({ id, ok: true, result: count() });
681
+ return;
682
+ case 'shutdown':
683
+ if (db && adapter) {
684
+ adapter.close(db);
685
+ db = undefined;
686
+ }
687
+ parentPort.postMessage({ id, ok: true, result: true });
688
+ return;
689
+ default:
690
+ throw new Error('Unknown SQLite worker command: ' + type);
691
+ }
692
+ } catch (error) {
693
+ parentPort.postMessage({
694
+ id,
695
+ ok: false,
696
+ error: error instanceof Error ? error.message : String(error),
697
+ });
698
+ }
699
+ });
700
+ `}var re=class{constructor(t){this.path=t;l(this,"worker");l(this,"pending",new Map);l(this,"nextId",1);this.worker=new worker_threads.Worker(Ot(),{eval:true}),this.worker.on("message",n=>{let o=this.pending.get(n.id);if(o){if(this.pending.delete(n.id),n.ok){o.resolve(n.result);return}o.reject(new Error(n.error??"SQLite worker request failed."));}}),this.worker.on("error",n=>{for(let o of this.pending.values())o.reject(n instanceof Error?n:new Error(String(n)));this.pending.clear();});}request(t,n={}){let o=this.nextId++;return new Promise((r,i)=>{this.pending.set(o,{resolve:r,reject:i}),this.worker.postMessage({id:o,type:t,payload:n});})}async init(){await this.request("init",{path:this.path});}async insert(t){await this.request("insert",{jobs:t});}async claimDue(t,n){return this.request("claimDue",{limit:t,now:n})}async ack(t){await this.request("ack",{ids:t});}async reschedule(t,n){await this.request("reschedule",{items:t,now:n});}async deadLetter(t){await this.request("deadLetter",{items:t});}async markSuccess(t){await this.request("markSuccess",{items:t});}async markFailure(t){await this.request("markFailure",{items:t});}async getStatusSummary(){return this.request("getStatusSummary")}async listDeadLetters(t){return this.request("listDeadLetters",t)}async retryDeadLetters(t,n){return this.request("retryDeadLetters",{ids:t,now:n})}async clearDeadLetters(t){return this.request("clearDeadLetters",{ids:t})}async count(){return this.request("count")}async shutdown(){try{await this.request("shutdown");}finally{await this.worker.terminate();}}};var It=Symbol("blyp.connector.batch-dispatch"),W=Symbol("blyp.connector.delivery-binder");function H(e){return new Promise(t=>{setTimeout(t,e);})}function to(e){return e.data===void 0||typeof e.data!="object"||e.data===null||e.data.type!=="client_log"}function Nt(e){return JSON.stringify(e)}function no(e){try{let t=JSON.parse(e);return !t||typeof t!="object"||typeof t.jobId!="string"?null:t}catch{return null}}function Ft(e){let t=new Map;for(let n of e){let o=`${n.connectorType}:${n.connectorTarget??""}`;t.has(o)||t.set(o,{connectorType:n.connectorType,connectorTarget:n.connectorTarget});}return [...t.values()]}var oe=class{constructor(t){this.config=t;l(this,"warnOnce",A(new Set));l(this,"memoryQueue",[]);l(this,"durableStaging",[]);l(this,"dispatchers",new Map);l(this,"activeDispatches",0);l(this,"flushPromise",null);l(this,"durableFlushPromise",null);l(this,"pollTimer",null);l(this,"durablePollRunning",false);l(this,"closed",false);l(this,"durableClient",null);l(this,"durableReady",false);l(this,"durableInitPromise",null);t.enabled&&(this.durableInitPromise=this.initializeDurableQueue());}bindTarget(t){typeof t[W]=="function"&&t[W](this);let n=t[It];n&&this.dispatchers.set(n.dispatchKey,n);}unbindTarget(t){typeof t[W]=="function"&&t[W](null);}enqueue(t,n,o,r){this.closed||!to(n)||(this.dispatchers.set(o.dispatchKey,o),this.memoryQueue.push({id:it(),connectorType:t,connectorTarget:r,source:"server",record:n,attemptCount:0,maxAttempts:this.config.retry.maxAttempts,nextAttemptAt:Date.now(),createdAt:Date.now(),dispatchKey:o.dispatchKey,dispatcher:o}),this.enforceMemoryCapacity(),this.scheduleDispatch());}async flush(){await this.durableInitPromise?.catch(()=>{}),await this.processUntilIdle(),await this.flushDurableStaging(),await this.drainDurableQueueForFlush(),await this.flushDurableStaging(),await this.processUntilIdle();}async shutdown(){if(this.closed=true,this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),await this.durableInitPromise?.catch(()=>{}),this.durableReady){let t=this.memoryQueue.splice(0,this.memoryQueue.length);for(let n of t)this.stageDurableJob(n,n.attemptCount,Math.max(n.nextAttemptAt,Date.now()));await this.flushDurableStaging();}await this.processUntilIdle(),this.durableClient&&(await this.durableClient.shutdown().catch(()=>{}),this.durableClient=null);}async getDurableCountForTests(){return await this.durableInitPromise?.catch(()=>{}),!this.durableReady||!this.durableClient?0:this.durableClient.count()}async getStatusSummaryForTests(){return await this.durableInitPromise?.catch(()=>{}),!this.durableReady||!this.durableClient?[]:this.durableClient.getStatusSummary()}async listDeadLettersForTests(){return await this.durableInitPromise?.catch(()=>{}),!this.durableReady||!this.durableClient?[]:(await this.durableClient.listDeadLetters({limit:1e3,offset:0})).items}async initializeDurableQueue(){try{let t=new re(this.config.durableQueuePath);await t.init(),this.durableClient=t,this.durableReady=!0,this.scheduleDurablePoll();}catch(t){this.durableReady=false,this.durableClient=null,this.warnOnce("connector-durable-disabled",`[Blyp] Warning: Failed to initialize the connector SQLite queue at ${this.config.durableQueuePath}. Falling back to in-memory retries.`,t);}}scheduleDispatch(){this.flushPromise||(this.flushPromise=(async()=>{try{await this.pumpMemoryQueue();}finally{this.flushPromise=null,!this.closed&&this.hasReadyMemoryJobs()&&this.scheduleDispatch();}})());}async pumpMemoryQueue(){for(;!this.closed;){for(;this.activeDispatches<this.config.dispatchConcurrency;){let t=this.takeNextMemoryBatch();if(t.length===0)break;this.activeDispatches+=1,this.dispatchMemoryBatch(t).finally(()=>{this.activeDispatches-=1,this.closed||this.scheduleDispatch();});}if(this.activeDispatches===0||!this.hasReadyMemoryJobs())break;await H(10);}}takeNextMemoryBatch(){let t=Date.now(),n=this.memoryQueue.findIndex(i=>i.nextAttemptAt<=t);if(n===-1)return [];let o=this.memoryQueue[n],r=[o];this.memoryQueue.splice(n,1);for(let i=this.memoryQueue.length-1;i>=0;i-=1){let s=this.memoryQueue[i];s.dispatchKey===o.dispatchKey&&s.connectorTarget===o.connectorTarget&&s.nextAttemptAt<=t&&r.length<this.config.memoryBatchSize&&(r.push(s),this.memoryQueue.splice(i,1));}return r}async dispatchMemoryBatch(t){let n=t[0].dispatcher,o=Date.now(),r=await n.dispatch(t.map(i=>i.record),{source:"server",target:t[0].connectorTarget}).catch(i=>({ok:false,retryable:true,error:i instanceof Error?i.message:String(i)}));if(r.ok){await this.recordSuccessfulDispatch(t,o);return}await this.handleRetryableFailure(t,r,false,o);}async handleRetryableFailure(t,n,o,r){o||await this.durableInitPromise?.catch(()=>{});let i=[],s=[];await this.recordFailedDispatch(t,n,r);for(let a of t){let d=a.attemptCount+1;if(!n.retryable||d>=a.maxAttempts){s.push({id:a.id,connectorType:a.connectorType,connectorTarget:a.connectorTarget,operation:"send",payloadJson:Nt({jobId:a.id,connectorType:a.connectorType,connectorTarget:a.connectorTarget,source:a.source,record:a.record,createdAt:a.createdAt}),attemptCount:d,maxAttempts:a.maxAttempts,lastError:n.error,firstEnqueuedAt:a.createdAt,deadLetteredAt:r,lastAttemptAt:r}),this.warnOnce(`connector-drop:${a.connectorType}:${a.connectorTarget??"default"}:${a.id}`,o&&this.durableReady?`[Blyp] Warning: Dead-lettered ${a.connectorType} connector job after ${d} failed attempt(s). ${n.error??"Connector delivery failed."}`:`[Blyp] Warning: Dropped ${a.connectorType} connector job after ${d} failed attempt(s). ${n.error??"Connector delivery failed."}`);continue}let u=r+_t(d,this.config.retry);if(o){i.push({id:a.id,attemptCount:d,nextAttemptAt:u,lastError:n.error});continue}if(this.durableReady&&this.config.durableSpillStrategy==="after-first-failure"){this.stageDurableJob(a,d,u,n.error);continue}this.memoryQueue.push({...a,attemptCount:d,nextAttemptAt:u});}s.length>0&&await this.durableClient?.deadLetter(s).catch(a=>{this.warnOnce("connector-dead-letter-failure","[Blyp] Warning: Failed to persist dead-lettered connector queue jobs.",a);}),i.length>0&&await this.durableClient?.reschedule(i,r).catch(a=>{this.warnOnce("connector-reschedule-failure","[Blyp] Warning: Failed to reschedule durable connector queue jobs.",a);});}async recordSuccessfulDispatch(t,n){if(!this.durableReady||!this.durableClient||t.length===0)return;let o=Ft(t).map(r=>({connectorType:r.connectorType,connectorTarget:r.connectorTarget,timestamp:n}));await this.durableClient.markSuccess(o).catch(r=>{this.warnOnce("connector-status-success-failure","[Blyp] Warning: Failed to record connector delivery success state.",r);});}async recordFailedDispatch(t,n,o){if(!this.durableReady||!this.durableClient||t.length===0)return;let r=Ft(t).map(i=>({connectorType:i.connectorType,connectorTarget:i.connectorTarget,timestamp:o,lastError:n.error}));await this.durableClient.markFailure(r).catch(i=>{this.warnOnce("connector-status-failure-failure","[Blyp] Warning: Failed to record connector delivery failure state.",i);});}stageDurableJob(t,n,o,r){let i=Nt({jobId:t.id,connectorType:t.connectorType,connectorTarget:t.connectorTarget,source:t.source,record:t.record,createdAt:t.createdAt});this.durableStaging.push({id:t.id,connectorType:t.connectorType,connectorTarget:t.connectorTarget,operation:"send",payloadJson:i,attemptCount:n,maxAttempts:t.maxAttempts,nextAttemptAt:o,state:"pending",lastError:r,createdAt:t.createdAt,updatedAt:Date.now()}),this.flushDurableStaging();}async flushDurableStaging(){if(!(!this.durableReady||!this.durableClient||this.durableStaging.length===0)){if(this.durableFlushPromise){await this.durableFlushPromise;return}this.durableFlushPromise=(async()=>{for(;this.durableStaging.length>0;){let t=this.durableStaging.splice(0,this.config.sqliteWriteBatchSize);try{await this.durableClient.insert(t);}catch(n){this.warnOnce("connector-durable-insert-failure","[Blyp] Warning: Failed to persist connector jobs into the durable SQLite queue.",n),this.durableStaging.unshift(...t);break}}})();try{await this.durableFlushPromise;}finally{this.durableFlushPromise=null;}}}async processDurableQueueOnce(){if(!(!this.durableReady||!this.durableClient||this.durablePollRunning)){this.durablePollRunning=true;try{for(;!this.closed;){let t=await this.durableClient.claimDue(this.config.sqliteReadBatchSize,Date.now());if(t.length===0)break;let n=new Map,o=[];for(let r of t){let i=no(r.payloadJson);if(!i){o.push(r.id);continue}let s=r.connectorType==="otlp"?`otlp:${r.connectorTarget??""}`:r.connectorType,a=this.dispatchers.get(s);if(!a){o.push(r.id);continue}let d={id:r.id,connectorType:r.connectorType,connectorTarget:r.connectorTarget,source:i.source,record:i.record,attemptCount:r.attemptCount,maxAttempts:r.maxAttempts,nextAttemptAt:r.nextAttemptAt,createdAt:r.createdAt,dispatchKey:s,dispatcher:a},u=n.get(s)??[];u.push(d),n.set(s,u);}o.length>0&&await this.durableClient.ack(o);for(let r of n.values()){let s=await r[0].dispatcher.dispatch(r.map(a=>a.record),{source:"server",target:r[0].connectorTarget}).catch(a=>({ok:!1,retryable:!0,error:a instanceof Error?a.message:String(a)}));if(s.ok){await this.recordSuccessfulDispatch(r,Date.now()),await this.durableClient.ack(r.map(a=>a.id));continue}await this.handleRetryableFailure(r,s,!0,Date.now());}}}finally{this.durablePollRunning=false;}}}async drainDurableQueueForFlush(){if(!(!this.durableReady||!this.durableClient)){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null);try{for(;!this.closed;){for(;this.durablePollRunning;)await H(10);if(await this.processDurableQueueOnce(),await this.flushDurableStaging(),await this.durableClient.count().catch(()=>0)===0&&!this.durablePollRunning&&this.durableStaging.length===0)break;await H(10);}}finally{this.closed||this.scheduleDurablePoll();}}}scheduleDurablePoll(){this.closed||!this.durableReady||this.pollTimer||(this.pollTimer=setTimeout(async()=>{this.pollTimer=null,await this.flushDurableStaging(),await this.processDurableQueueOnce(),this.scheduleDurablePoll();},this.config.pollIntervalMs));}enforceMemoryCapacity(){for(;this.memoryQueue.length>this.config.memoryBufferSize;){let t=this.config.overflowStrategy==="drop-new"?this.memoryQueue.length-1:0,[n]=this.memoryQueue.splice(t,1);if(!n)break;if(this.durableReady){this.stageDurableJob(n,n.attemptCount,Math.max(Date.now(),n.nextAttemptAt),"spilled from in-memory buffer");continue}this.warnOnce(`connector-overflow:${n.connectorType}:${n.connectorTarget??"default"}:${t}`,`[Blyp] Warning: Connector queue overflow reached ${this.config.memoryBufferSize}. Dropping queued ${n.connectorType} job.`);}}hasReadyMemoryJobs(){let t=Date.now();return this.memoryQueue.some(n=>n.nextAttemptAt<=t)}async processUntilIdle(){for(;this.activeDispatches>0||this.memoryQueue.length>0||this.durableStaging.length>0||this.flushPromise!==null||this.durableFlushPromise!==null;){if(this.scheduleDispatch(),await this.flushPromise?.catch(()=>{}),await this.flushDurableStaging(),this.memoryQueue.some(t=>t.nextAttemptAt>Date.now())||await this.processDurableQueueOnce(),this.activeDispatches===0&&this.memoryQueue.length>0&&!this.hasReadyMemoryJobs()){let t=Math.min(...this.memoryQueue.map(n=>n.nextAttemptAt));await H(Math.max(t-Date.now(),0));}else await H(10);if(this.activeDispatches===0&&this.memoryQueue.length===0&&this.durableStaging.length===0)break}}};var M=class M{constructor(){l(this,"_type",null);}static getInstance(){return M.instance||(M.instance=new M),M.instance}get type(){return this._type===null&&(this._type=this.detectRuntime()),this._type}get isBun(){return this.type==="bun"}get isNode(){return this.type==="node"}detectRuntime(){return typeof Bun<"u"&&typeof Bun.file=="function"?"bun":"node"}};l(M,"instance");var Be=M,Me=class{constructor(){l(this,"type","bun");l(this,"isBun",true);l(this,"isNode",false);l(this,"file",{existsSync:t=>{try{let n=Bun.file(t);return n.size>0||n.name!==""}catch{return false}},mkdirSync:(t,n)=>{try{w__default.default.mkdirSync(t,n);}catch{}},writeFileSync:(t,n)=>{Bun.write(t,n);}});l(this,"path",{join:(...t)=>z__default.default.join(...t)});l(this,"env",{get:t=>Bun.env[t]});l(this,"cwd",()=>process.cwd());}},Oe=class{constructor(){l(this,"type","node");l(this,"isBun",false);l(this,"isNode",true);l(this,"file",{existsSync:t=>w__default.default.existsSync(t),mkdirSync:(t,n)=>{w__default.default.mkdirSync(t,n);},writeFileSync:(t,n)=>{w__default.default.writeFileSync(t,n);}});l(this,"path",{join:(...t)=>z__default.default.join(...t)});l(this,"env",{get:t=>process.env[t]});l(this,"cwd",()=>process.cwd());}};function ro(){return Be.getInstance().isBun?new Me:new Oe}var Ut=ro();function jt(e,t){if(typeof e=="string")return t.length===0?void 0:t.length===1?t[0]:t;let n=[e,...t];return n.length===1?n[0]:n}function qt(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function oo(e,t){if(e==null)return t===void 0||t<400?void 0:{message:`HTTP ${t}`,code:t,type:"HttpError"};if(e instanceof Error){let n=e;return {message:e.message,code:n.code,type:n.type??e.name??e.constructor?.name,stack:e.stack,why:n.why,fix:n.fix,link:n.link,details:qt(n.details),cause:n.cause}}if(typeof e=="object"){let n=e,o=typeof n.statusCode=="number"?n.statusCode:typeof n.status=="number"?n.status:t;return {message:typeof n.message=="string"?n.message:`HTTP ${o??500}`,code:typeof n.code=="string"||typeof n.code=="number"?n.code:o,type:typeof n.type=="string"?n.type:typeof n.name=="string"?n.name:"Error",stack:typeof n.stack=="string"?n.stack:void 0,why:typeof n.why=="string"?n.why:void 0,fix:typeof n.fix=="string"?n.fix:void 0,link:typeof n.link=="string"?n.link:void 0,details:qt(n.details),cause:n.cause}}return {message:String(e),code:t,type:typeof e}}function io(e){return e.response&&typeof e.response.status=="number"?e.response.status:typeof e.status=="number"?e.status:e.error&&typeof e.error=="object"&&e.error!==null&&typeof e.error.statusCode=="number"?e.error.statusCode:e.error&&typeof e.error=="object"&&e.error!==null&&typeof e.error.status=="number"?e.error.status:e.error?500:void 0}function $t(e,t){let n=t.redact??x(),o=performance.now(),r=b(t.initialFields??{},n),i=[],s;t.onCreate?.();let a=(u,g,C)=>(i.push({level:u,message:$(g,n),timestamp:new Date().toISOString(),...jt(g,C)===void 0?{}:{data:b(jt(g,C),n)}}),d),d={set(u){return Object.assign(r,b(u,n)),d},debug(u,...g){return a("debug",u,g)},info(u,...g){return a("info",u,g)},warn(u,...g){return a("warn",u,g)},warning(u,...g){return a("warning",u,g)},error(u,...g){return a("error",u,g)},success(u,...g){return a("success",u,g)},critical(u,...g){return a("critical",u,g)},table(u,g){return a("table",u,g===void 0?[]:[g])},emit(u={}){if(s)return s;let g=b(t.resolveDefaultFields?.()??{},n),C=io(u),T=b(oo(u.error,C),n),q=u.level??(T?"error":"info"),v=b({...g,...r,groupId:e,timestamp:new Date().toISOString(),level:q,duration:Math.round(performance.now()-o),...typeof C=="number"?{status:C}:{},...i.length>0?{events:[...i]}:{},...T?{error:T}:{}},n);return t.write(v,$(u.message??"structured_log",n)),s=v,t.onEmit?.(v),v}};return d}var Yt=Symbol("blyp.logger.factory"),Wt={success:25,info:30,debug:35,table:37,warning:40,error:50,critical:60},Ht={success:"success",critical:"critical",warning:"warning",info:"info",debug:"debug",error:"error",warn:"warn",table:"debug"},ao="\x1B[35m",so="\x1B[0m";function Q(e){return Pt(e)==="client_log"}function co(){return {enabled:false,ready:false,mode:"auto",serviceName:"blyp-app",ingestingHost:void 0,status:"missing",errorTracking:{enabled:false,ready:false,status:"missing",dsn:void 0,tracesSampleRate:1,environment:void 0,release:void 0},shouldAutoForwardServerLogs:()=>false,shouldAutoCaptureExceptions:()=>false,send:()=>{},captureException:()=>{},flush:async()=>{}}}function uo(){return {enabled:false,ready:false,mode:"auto",status:"missing",shouldAutoForwardServerLogs:()=>false,shouldAutoCaptureExceptions:()=>false,send:()=>{},captureException:()=>{},flush:async()=>{}}}function lo(){return {enabled:false,ready:false,mode:"auto",serviceName:"blyp-app",host:"https://us.i.posthog.com",status:"missing",errorTracking:{enabled:false,ready:false,mode:"auto",status:"missing",enableExceptionAutocapture:false},shouldAutoForwardServerLogs:()=>false,shouldAutoCaptureExceptions:()=>false,send:()=>{},captureException:()=>{},flush:async()=>{}}}function po(){return {enabled:false,ready:false,mode:"auto",status:"missing",shouldAutoForwardServerLogs:()=>false,send:()=>{},flush:async()=>{}}}function go(e){return {name:e,enabled:false,ready:false,mode:"auto",serviceName:"blyp-app",endpoint:void 0,status:"missing",send:()=>{},flush:async()=>{}}}function fo(){return {get:e=>go(e),getAutoForwardTargets:()=>[],send:()=>{},flush:async()=>{}}}function mo(e){return e.connectors?.betterstack?.enabled?O("betterstack",["@logtail/node","@sentry/node"],"../connectors/betterstack/sender").createBetterStackSender(e):co()}function yo(e){return e.connectors?.databuddy?.enabled?O("databuddy",["@databuddy/sdk"],"../connectors/databuddy/sender").createDatabuddySender(e):uo()}function ho(e){return e.connectors?.posthog?.enabled?O("posthog",["posthog-node","@opentelemetry/api-logs","@opentelemetry/exporter-logs-otlp-http","@opentelemetry/resources","@opentelemetry/sdk-logs"],"../connectors/posthog/sender").createPostHogSender(e):lo()}function bo(e){return e.connectors?.sentry?.enabled?O("sentry",["@sentry/node"],"../connectors/sentry/sender").createSentrySender(e):po()}function Co(e){return e.connectors?.otlp?.some(t=>t.enabled)?O("otlp",["@opentelemetry/api-logs","@opentelemetry/exporter-logs-otlp-http","@opentelemetry/resources","@opentelemetry/sdk-logs"],"../connectors/otlp/sender").createOTLPRegistry(e):fo()}function wo(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,n={};t.data!==void 0&&(n.data=t.data);let o=typeof t.page?.pathname=="string"?t.page.pathname:void 0,r=typeof t.page?.url=="string"?t.page.url:void 0;return (o||r)&&(n.page=o??r),t.metadata!==void 0&&(n.metadata=t.metadata),Object.keys(n).length>0?n:null}function To(e){if(!e||typeof e!="object"||Array.isArray(e))return {hidden:false,value:e};let t=e;if(t.type==="http_request"||t.type==="http_error")return {hidden:true};if(t.type==="client_log"){let n=wo(e);return n?{hidden:false,value:n}:{hidden:true}}return {hidden:false,value:e}}function Ro(e){if(e.pretty){let n=Ze()({colorize:true,translateTime:"SYS:HH:MM:ss",ignore:"pid,hostname,caller",customColors:{success:"green",critical:"red bold",info:"blue",warning:"yellow",error:"red",debug:"cyan",table:"cyan"},messageFormat:(o,r)=>{let i=String(o[r]??""),s=typeof o.caller=="string"?o.caller.trim():"";return s?`${i} ${ao}${s}${so}`:i}});return Kt__default.default({level:e.level,customLevels:Wt},n)}return Kt__default.default({level:e.level,customLevels:Wt})}function So(e){let t=e[Yt];if(!t)throw new Error("Unsupported Blyp logger instance");return t}function ko(e,t,n={}){let o=So(e);return $t(t,{initialFields:n.initialFields,resolveDefaultFields:()=>({...o.bindings,...n.resolveDefaultFields?.()??{}}),write:(r,i)=>{o.writeStructured(r,i,"structured-flush");},onCreate:n.onCreate,onEmit:n.onEmit,redact:n.redact??o.redact})}function Qt(e,t){if(!Q(t)){if(!e.shouldAutoForwardServerLogs()){e.enabled&&!e.ready&&e.send(t,{source:"server",warnIfUnavailable:true});return}e.send(t,{source:"server",warnIfUnavailable:true});}}function Gt(e,t){if(!Q(t)){if(!e.shouldAutoForwardServerLogs()){e.enabled&&!e.ready&&e.send(t,{source:"server",warnIfUnavailable:true});return}e.send(t,{source:"server",warnIfUnavailable:true});}}function Jt(e,t){if(!Q(t)){if(!e.shouldAutoForwardServerLogs()){e.enabled&&!e.ready&&e.send(t,{source:"server",warnIfUnavailable:true});return}e.send(t,{source:"server",warnIfUnavailable:true});}}function Vt(e,t){if(!Q(t)){if(!e.shouldAutoForwardServerLogs()){e.enabled&&!e.ready&&e.send(t,{source:"server",warnIfUnavailable:true});return}e.send(t,{source:"server",warnIfUnavailable:true});}}function Xt(e,t){if(!Q(t))for(let n of e.getAutoForwardTargets())n.send(t,{source:"server",warnIfUnavailable:true});}function Ne(e,t,n,o,r,i,s,a,d,u={},g="root"){let C=Object.keys(u).length>0?e.child(u):e,T=(m,p,c,y=g)=>{if(y==="root"&&Ce())return;let f=wt(m,p,c,u,d),R=f.message,h={caller:f.caller},L=To(f.data);!L.hidden&&L.value!==void 0&&(h.data=L.value);let fe=Ht[m],me=C;(me[fe]??me.info??((Oo,Io)=>{})).call(C,h,R),t.write(f),Gt(o,f),Jt(r,f),Qt(i,f),Vt(s,f),Xt(a,f);},q=(m,p,c="structured-flush")=>{let y=Rt(m.level),f=Tt(y,p,m,u,d),R=Ht[y],h=C;(h[R]??h.info??((fe,me)=>{})).call(C,{caller:f.caller,...f},f.message),(c!=="root"||!Ce())&&t.write(f),Gt(o,f),Jt(r,f),Qt(i,f),Vt(s,f),Xt(a,f);},v={success:(m,...p)=>{T("success",m,p);},critical:(m,...p)=>{T("critical",m,p);},warning:(m,...p)=>{T("warning",m,p);},info:(m,...p)=>{T("info",m,p);},debug:(m,...p)=>{T("debug",m,p);},error:(m,...p)=>{T("error",m,p);},warn:(m,...p)=>{T("warn",m,p);},table:(m,p)=>{p&&typeof p=="object"&&Ut.env.get("NODE_ENV")!=="production"&&(console.log("TABLE:",m),console.table(b(p,d))),T("table",m,p===void 0?[]:[p]);},flush:async()=>{await t.flush(),n&&await n.flush(),await Promise.allSettled([o.flush(),r.flush(),i.flush(),s.flush(),a.flush()]);},shutdown:async()=>{await t.shutdown(),n&&await n.shutdown(),await Promise.allSettled([o.flush(),r.flush(),i.flush(),s.flush(),a.flush()]);},createStructuredLog:(m,p)=>ko(v,m,{initialFields:p}),child:m=>{let p={...u,...m};return Ne(e,t,n,o,r,i,s,a,d,p,g)},[Yt]:{bindings:u,betterstack:o,databuddy:r,posthog:i,sentry:s,otlp:a,redact:d,sink:t,create:(m,p=u)=>Ne(e,t,n,o,r,i,s,a,d,p,m),writeStructured:(m,p,c="structured-flush")=>{q(m,p,c);}}};return v}var Ie=null;function Lo(e){if(Ie)return Ie;let t=mt(e),n=Ro(t),o=At(t),r=mo(t),i=yo(t),s=ho(t),a=bo(t),d=Co(t),u=t.connectors.delivery.enabled?new oe(t.connectors.delivery):null;if(u){u.bindTarget(r),u.bindTarget(i),u.bindTarget(s),u.bindTarget(a);for(let C of d.getAutoForwardTargets())u.bindTarget(C);}let g=Ne(n,o,u,r,i,s,a,d,t.redact);return (Ie=g),g}var Zt=Lo();var vo=new TextEncoder;function ae(e){return vo.encode(e).length}function Do(e){if(!e||typeof e!="object")return false;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function k(e,t=new WeakSet){if(e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean")return e;if(typeof e=="bigint"||typeof e=="symbol")return e.toString();if(typeof e=="function")return `[Function: ${e.name||"anonymous"}]`;if(e instanceof Date)return e.toISOString();if(e instanceof Error)return {name:e.name,message:e.message,stack:e.stack};if(Array.isArray(e))return e.map(n=>k(n,t));if(typeof e=="object"){if(t.has(e))return "[Circular]";if(t.add(e),!Do(e)){let n=e.constructor?.name;return n?`[${n}]`:"[Object]"}return Object.fromEntries(Object.entries(e).map(([n,o])=>[n,k(o,t)]))}return String(e)}function se(e,t){if(t.length===0)return e;let n=k(e);for(let o of t){let r=o.split(".").filter(Boolean);if(r.length===0)continue;let i=n;for(let s=0;s<r.length-1;s+=1){if(!i||typeof i!="object"){i=void 0;break}i=i[r[s]];}i&&typeof i=="object"&&delete i[r[r.length-1]];}return n}function en(e,t){let n=k(e);if(t<=0)return {value:"[Truncated]",truncated:true};if(typeof n=="string"){if(ae(n)<=t)return {value:n,truncated:false};let i=n;for(;i.length>0&&ae(`${i}\u2026[truncated]`)>t;)i=i.slice(0,Math.max(1,Math.floor(i.length*.8)));return {value:`${i}\u2026[truncated]`,truncated:true}}let o=JSON.stringify(n);if(o===void 0||ae(o)<=t)return {value:n,truncated:false};let r=o;for(;r.length>0&&ae(`${r}\u2026[truncated]`)>t;)r=r.slice(0,Math.max(1,Math.floor(r.length*.8)));return {value:{truncated:true,preview:`${r}\u2026[truncated]`},truncated:true}}function G(e){if(!e)return;let t={inputTokens:typeof e.inputTokens=="number"?e.inputTokens:void 0,outputTokens:typeof e.outputTokens=="number"?e.outputTokens:void 0,totalTokens:typeof e.totalTokens=="number"?e.totalTokens:void 0,reasoningTokens:typeof e.reasoningTokens=="number"?e.reasoningTokens:void 0,cachedInputTokens:typeof e.cachedInputTokens=="number"?e.cachedInputTokens:void 0};if(t.totalTokens===void 0&&(t.inputTokens!==void 0||t.outputTokens!==void 0)&&(t.totalTokens=(t.inputTokens??0)+(t.outputTokens??0)),!Object.values(t).every(n=>n===void 0))return t}function ce(e){if(typeof e=="string"&&e.length>0)return e;if(e&&typeof e=="object"){let t=e;for(let n of ["type","reason","stop_reason","finish_reason","raw","unified"]){let o=t[n];if(typeof o=="string"&&o.length>0)return o}}}function tn(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function Fe(e){return {toolName:e.name,toolCallId:e.id,status:e.status}}function nn(e){if(!e)return {};if(e instanceof Error){let t=e;return {errorType:e.name,errorCode:t.code}}if(typeof e=="object"){let t=e;return {errorType:typeof t.type=="string"?t.type:typeof t.name=="string"?t.name:"Error",errorCode:typeof t.code=="string"||typeof t.code=="number"?t.code:void 0}}return {errorType:typeof e}}function rn(e){return k(e)}var ze={input:false,output:false,toolInputs:false,toolOutputs:false,reasoning:false,streamEvents:false,streamChunks:false,rawProviderPayload:false},J={providerOptions:false,requestPaths:[],responsePaths:[],metadataPaths:[],toolNames:[]},Ue={maxContentBytes:16384,maxEvents:200,maxToolCalls:50};function xo(){return `ai_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}function Eo(){return new Date().toISOString()}function on(e){return k(e)}function je(){return new Date().toISOString()}function Ao(e={}){return {logger:e.logger,provider:e.provider,operation:e.operation,metadata:{...e.metadata??{}},capture:{...ze,...e.capture??{},streamEvents:e.capture?.streamEvents??e.capture?.streamChunks??ze.streamEvents,streamChunks:e.capture?.streamChunks??e.capture?.streamEvents??ze.streamChunks},exclude:{providerOptions:e.exclude?.providerOptions??J.providerOptions,requestPaths:[...e.exclude?.requestPaths??J.requestPaths],responsePaths:[...e.exclude?.responsePaths??J.responsePaths],metadataPaths:[...e.exclude?.metadataPaths??J.metadataPaths],toolNames:[...e.exclude?.toolNames??J.toolNames]},limits:{maxContentBytes:e.limits?.maxContentBytes??Ue.maxContentBytes,maxEvents:e.limits?.maxEvents??Ue.maxEvents,maxToolCalls:e.limits?.maxToolCalls??Ue.maxToolCalls},hooks:e.hooks??{}}}function an(e={}){return Ao(e)}function sn(e){let t=e.config.logger??et()??Zt,n=xo(),o=je(),r={traceId:n,provider:e.provider,sdk:e.sdk,operation:e.operation??e.config.operation??e.method,method:e.method,model:e.model,logger:t,metadata:{...e.config.metadata},request:e.request,toolCalls:[],events:[],startedAt:o,startedAtMs:performance.now(),options:e.config,capture:{...e.config.capture},streamed:e.streamed,truncated:false},i={traceId:n,provider:r.provider,sdk:r.sdk,operation:r.operation,method:r.method,logger:t,metadata:r.metadata,request:r.request,get response(){return r.response},get usage(){return r.usage},get finishReason(){return r.finishReason},get input(){return r.input},get output(){return r.output},get reasoning(){return r.reasoning},get toolCalls(){return r.toolCalls.length>0?r.toolCalls:void 0},get startedAt(){return r.startedAt},get firstChunkAt(){return r.firstChunkAt},get endedAt(){return r.endedAt},get error(){return r.error},setMetadata(s){Object.assign(r.metadata,s);},disableCapture(s){r.capture[s]=false;}};return {state:r,context:i}}function qe(e,t){e.usage=G(t);}function ue(e,t){e.finishReason=ce(t);}function $e(e,t){e.response=t;}function cn(e,t){e.input=t;}function de(e,t){e.output=t;}function le(e,t){e.reasoning=t;}function un(e,t){e.rawProviderPayload=rn(t);}function dn(e,t){e.streamed=t;}async function ln(e,t){e.firstChunkAt||(e.firstChunkAt=je(),e.firstChunkAtMs=performance.now(),await _(e,t,{type:"ai.first_chunk",timestamp:e.firstChunkAt}));}async function pe(e,t,n){e.capture.streamEvents&&await _(e,t,{type:"ai.chunk",data:n});}function ge(e,t){let n=t.id??`${t.name}:${e.toolCalls.length}`,o=e.toolCalls.findIndex((r,i)=>(r.id??`${r.name}:${i}`)===n);if(o===-1&&e.toolCalls.length>=e.options.limits.maxToolCalls){e.truncated=true;return}if(o===-1){e.toolCalls.push(t);return}e.toolCalls[o]={...e.toolCalls[o],...t};}async function pn(e,t,n){ge(e,n),await _(e,t,{type:"ai.tool_call.start",data:Fe(n)});}async function gn(e,t,n){ge(e,n),await _(e,t,{type:"ai.tool_call.result",data:Fe(n)});}function Po(e){let t=e.toolCalls.filter(n=>!e.options.exclude.toolNames.includes(n.name)).map(n=>{let o={id:n.id,name:n.name,status:n.status};if(e.capture.toolInputs&&n.input!==void 0){let r=j(n.input,e.options.limits.maxContentBytes);o.input=r.value,e.truncated||(e.truncated=r.truncated);}if(e.capture.toolOutputs&&n.output!==void 0){let r=j(n.output,e.options.limits.maxContentBytes);o.output=r.value,e.truncated||(e.truncated=r.truncated);}return n.providerFormat!==void 0&&(o.providerFormat=k(n.providerFormat)),o});return t.length>0?t:void 0}async function fn(e,t,n){if(e.emitted)return;e.emitted=true,n?.error!==void 0&&(e.error=n.error,await _(e,t,{type:"ai.error",data:{error:k(n.error)}}),await V(e.options.hooks.onError,[t])),e.endedAt=je(),await _(e,t,{type:"ai.finish",timestamp:e.endedAt}),e.error||await V(e.options.hooks.onFinish,[t]);let o={startedAt:e.startedAt,endedAt:e.endedAt,durationMs:Math.max(0,Math.round(performance.now()-e.startedAtMs))};e.firstChunkAt&&e.firstChunkAtMs!==void 0&&(o.firstChunkAt=e.firstChunkAt,o.msToFirstChunk=Math.max(0,Math.round(e.firstChunkAtMs-e.startedAtMs)));let r={provider:e.provider,sdk:e.sdk,model:e.model,operation:e.operation,method:e.method,streamed:e.streamed,timing:o,metadata:se(e.metadata,e.options.exclude.metadataPaths)};if(e.usage&&(r.usage=e.usage),e.finishReason&&(r.finishReason=e.finishReason),e.capture.input&&e.input!==void 0){let a=j(se(k(e.input),e.options.exclude.requestPaths),e.options.limits.maxContentBytes);r.input=a.value,e.truncated||(e.truncated=a.truncated);}if(e.capture.output&&e.output!==void 0){let a=k(e.output),d=j(typeof a=="object"&&a!==null&&!Array.isArray(a)?se(a,e.options.exclude.responsePaths):a,e.options.limits.maxContentBytes);r.output=d.value,e.truncated||(e.truncated=d.truncated);}if(e.capture.reasoning&&e.reasoning!==void 0){let a=k(e.reasoning),d=j(a,e.options.limits.maxContentBytes);r.reasoning=d.value,e.truncated||(e.truncated=d.truncated);}let i=Po(e);if(i&&(r.tools=i,r.toolCalls=i),e.capture.rawProviderPayload&&e.rawProviderPayload!==void 0){let a=j(e.rawProviderPayload,e.options.limits.maxContentBytes);r.rawProviderPayload=a.value,e.truncated||(e.truncated=a.truncated);}e.truncated&&r.metadata&&(r.metadata={...r.metadata,truncated:true});let s={...r};if(e.error!==void 0){let{errorType:a,errorCode:d}=nn(e.error);a&&(s.errorType=a),d!==void 0&&(s.errorCode=d);}try{e.logger.createStructuredLog(e.traceId,{type:"ai_trace",ai:s,events:e.events}).emit({message:"ai_trace",level:e.error===void 0?"info":"error",...e.error===void 0?{}:{error:e.error}});}catch(a){console.warn("[Blyp] Failed to emit AI trace.",on(a));}}async function V(e,t){if(e)try{await e(...t);}catch(n){console.warn("[Blyp] AI middleware hook failed.",on(n));}}async function _(e,t,n){e.events.length<e.options.limits.maxEvents?e.events.push({...n,timestamp:n.timestamp??Eo()}):e.truncated=true,await V(e.options.hooks.onEvent,[e.events[e.events.length-1],t]);}function j(e,t){return en(e,t)}function Ke(e,t){return G({inputTokens:(e?.inputTokens??0)+(t?.inputTokens??0),outputTokens:(e?.outputTokens??0)+(t?.outputTokens??0),totalTokens:(e?.totalTokens??0)+(t?.totalTokens??0),reasoningTokens:(e?.reasoningTokens??0)+(t?.reasoningTokens??0),cachedInputTokens:(e?.cachedInputTokens??0)+(t?.cachedInputTokens??0)})}function We(e){return G(e.usage)}function He(e){return ce(e.finishReason)}function Qe(e){let t=[],n=[];for(let o of e.output??[]){if(!o||typeof o!="object"||o.type!=="message")continue;let r=o.content;if(typeof r=="string"){t.push(r);continue}if(Array.isArray(r)){for(let i of r)if(!(!i||typeof i!="object"||typeof i.type!="string")){if(i.type==="text"||i.type==="transcript"){typeof i.text=="string"&&t.push(i.text);continue}i.type==="reasoning"&&typeof i.text=="string"&&n.push(i.text);}}}return {output:t.length>0?t.join(""):void 0,reasoning:n.length>0?n.join(""):void 0}}function Ge(e){let t={};return e.request?.body!==void 0&&(t.request=e.request.body),e.response?.body!==void 0&&(t.response=e.response.body),t.request!==void 0||t.response!==void 0?t:void 0}function mn(e){return e.type==="RUN_FINISHED"||e.type==="RUN_ERROR"||e.type==="RUN_ABORTED"}function Je(e){return e.type==="TEXT_MESSAGE_CONTENT"||e.type==="REASONING_MESSAGE_CONTENT"||e.type==="TOOL_CALL_START"||e.type==="TOOL_CALL_ARGS"||e.type==="TOOL_CALL_RESULT"||e.type==="DATA_PART"}function Ve(e){return tn(e)}function yn(e){return typeof e=="number"?new Date(e).toISOString():void 0}function Xe(e={}){let t,n=false,o=0,r,i,s=false,a="",d="",u=[],g=new Map;function C(c){typeof c=="number"&&(o=Math.max(o,c+1));}async function T(c){if(t)return;let y=await e.resolveRun?.({runId:c.runId,agentName:c.agentName,conversationId:c.conversationId}),f=y?.provider??e.provider??"better-agent",R=y?.operation??e.operation??c.agentName,h=y?.model??c.agentName,L=an({...e,provider:f,operation:R,metadata:{...e.metadata??{},...y?.metadata??{}}});t={...sn({provider:f,sdk:"better-agent-sdk",operation:R,method:y?.method??"agent.run",model:h,request:c.runInput,streamed:y?.streamed===true,config:L}),config:L},cn(t.state,c.runInput),t.context.setMetadata({agentName:c.agentName,runId:c.runId,...c.conversationId?{conversationId:c.conversationId}:{}}),await _(t.state,t.context,{type:"ai.start"}),await V(t.config.hooks.onStart,[t.context]);}async function q(c){!t||!Je(c)||(dn(t.state,true),await ln(t.state,t.context));}function v(c){return g.set(c.id,c),c}function m(c,y){let f=g.get(c);return {id:c,name:y,input:f?.inputText?Ve(f.inputText):void 0,startedAt:f?.startedAt,status:"started"}}async function p(c){if(!(!t||n)){if(n=true,t.context.setMetadata({stepCount:o}),r){$e(t.state,r);let y=Qe(r),f=y.output??(a||void 0),R=y.reasoning??(d||void 0);if(f!==void 0&&de(t.state,f),R!==void 0&&le(t.state,R),!s){let h=We(r);h&&(i=Ke(i,h),qe(t.state,i));}if(t.state.finishReason===void 0){let h=He(r);h&&ue(t.state,h);}if(u.length===0){let h=Ge(r);h&&(u=[h]);}}else a&&de(t.state,a),d&&le(t.state,d);u.length>0&&un(t.state,u),await fn(t.state,t.context,{...c!==void 0?{error:c}:{}});}}return {async onEvent(c){if(!n){if(c.type==="RUN_STARTED"){await T(c);return}if(t)switch("stepIndex"in c&&typeof c.stepIndex=="number"&&C(c.stepIndex),Je(c)&&await q(c),c.type){case "TEXT_MESSAGE_CONTENT":a+=c.delta,await pe(t.state,t.context,{kind:"text",delta:c.delta});break;case "REASONING_MESSAGE_CONTENT":d+=c.delta,await pe(t.state,t.context,{kind:"reasoning",delta:c.delta});break;case "DATA_PART":await pe(t.state,t.context,{kind:"data",data:c.data,...c.id?{id:c.id}:{}});break;case "TOOL_CALL_START":{let y=yn(c.timestamp);v({id:c.toolCallId,name:c.toolCallName,startedAt:y,startedAtMs:typeof c.timestamp=="number"?c.timestamp:void 0}),await pn(t.state,t.context,{id:c.toolCallId,name:c.toolCallName,startedAt:y,status:"started"});break}case "TOOL_CALL_ARGS":{let y=v({...g.get(c.toolCallId)??{id:c.toolCallId,name:c.toolCallName},inputText:`${g.get(c.toolCallId)?.inputText??""}${c.delta}`});ge(t.state,{id:y.id,name:y.name,input:Ve(y.inputText),startedAt:y.startedAt,status:"started"});break}case "TOOL_CALL_RESULT":{let y=g.get(c.toolCallId),f=yn(c.timestamp),R=typeof c.timestamp=="number"&&typeof y?.startedAtMs=="number"?Math.max(0,Math.round(c.timestamp-y.startedAtMs)):void 0;await gn(t.state,t.context,{...m(c.toolCallId,c.toolCallName),output:c.result,finishedAt:f,durationMs:R,status:c.isError?"failed":"completed",error:c.isError?c.result:void 0});break}case "RUN_FINISHED":r=c.result.response,await p();break;case "RUN_ERROR":await p(c.error);break;case "RUN_ABORTED":ue(t.state,"abort"),await p();break;}}},async onAfterModelCall(c,y){if(!t||n)return;s=true,r=c,C(y?.stepIndex),$e(t.state,c);let f=We(c);f&&(i=Ke(i,f),qe(t.state,i));let R=He(c);R&&ue(t.state,R);let h=Ge(c);h&&u.push({...typeof y?.stepIndex=="number"?{stepIndex:y.stepIndex}:{},...h});let L=Qe(c);L.output!==void 0&&de(t.state,L.output),L.reasoning!==void 0&&le(t.state,L.reasoning);}}}function Bo(e={}){let t=new Map;return core.definePlugin({id:"blyp-better-agent",onEvent:async(n,o)=>{let r=t.get(o.runId);!r&&n.type==="RUN_STARTED"&&(r=Xe(e),t.set(o.runId,r)),r&&(await r.onEvent(n),mn(n)&&t.delete(o.runId));},onAfterModelCall:async n=>{let o=t.get(n.runId);o&&await o.onAfterModelCall(n.response,{stepIndex:n.stepIndex});}})}
701
+ exports.blypPlugin=Bo;exports.createBetterAgentTracker=Xe;