@magemetrics/core 0.4.3 → 0.5.1

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../shared/src/api/client/middleware.ts","../../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@8.1.0_zod@4.1.12/node_modules/@asteasolutions/zod-to-openapi/dist/index.mjs","../../../node_modules/.pnpm/hono@4.9.9/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/@hono+zod-openapi@1.1.4_hono@4.9.9_zod@4.1.12/node_modules/@hono/zod-openapi/dist/index.js","../../shared/src/endpoints/admin-console/sqlPreview.routes.ts","../../shared/src/endpoints/utils.ts","../../shared/src/endpoints/companion/auth.ts","../../shared/src/schemas/feedback.ts","../../shared/src/companion/types.ts","../../shared/src/schemas/flows.ts","../../shared/src/utils/daysjs.ts","../../shared/src/data/FormattedData.ts","../../shared/src/schemas/visualizations.ts","../../shared/src/endpoints/companion/flows.routes.ts","../../shared/src/endpoints/admin-console/contextualInsights.routes.ts","../../shared/src/endpoints/auth.routes.ts","../../shared/src/endpoints/end2end/run.routes.ts","../../shared/src/endpoints/companion/triggers.routes.ts","../src/utils/platform.ts","../src/adapters/storage/browser.ts","../src/adapters/storage/memory.ts","../src/adapters/storage/factory.ts","../src/utils/hash.ts","../../shared/src/schemas/canvas.ts","../../shared/src/endpoints/companion/canvas.routes.ts","../../shared/src/schemas/chat/quickActions.ts","../../shared/src/schemas/timeline.ts","../../shared/src/endpoints/companion/chat.routes.ts","../../shared/src/endpoints/visualizations.routes.ts","../../shared/src/schemas/data-table.ts","../package.json","../src/core/MageMetricsChatTransport.ts","../src/core/MageMetricsEventEmitter.ts","../src/core/resolvable.ts","../src/core/types.ts","../src/core/MageMetricsClient.ts"],"names":["currentMetadata","args","_a","_internal","result","z","Node","date","dateResult","sha256"],"mappings":";;;;;;;;;;;;AAEO,IAAM,qBAAA,GAAwB,kBAAA;AAC9B,IAAM,cAAA,GAAiB,WAAA;AAExB,IAAO,QAAA,GAAP,cAAwB,KAAA,CAAK;AACjC,EAAA,KAAA;AACA,EAAA,QAAA;EACA,WAAA,CAAY,OAAA,EAAiB,UAAoB,KAAA,EAAc;AAC7D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACf,EAAA;;AAGK,IAAM,YAAA,GAA2B;AACtC,EAAA,MAAM,UAAA,CAAW,EAAE,QAAA,EAAU,OAAA,EAAO,EAAE;AACpC,IAAA,IAAI,QAAA,CAAS,UAAU,GAAA,EAAK;AAC1B,MAAA,MAAM,OAAO,QAAA,CAAS,OAAA,CAAQ,IAAI,cAAc,CAAA,EAAG,SAAS,MAAM,CAAA,GAC5D,MAAM,QAAA,CAAS,KAAA,GAAQ,IAAA,EAAI,GAC7B,MAAM,QAAA,CAAS,KAAA,GAAQ,IAAA,EAAI;AAC/B,MAAA,MAAM,IAAI,QAAA,CACR,CAAA,CAAA,EAAI,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAA,EACrD,QAAA,EACA;AACE,QAAA,IAAA;AACA,QAAA,MAAA,EAAQ,QAAA,CAAS,MAAA;AACjB,QAAA,UAAA,EAAY,QAAA,CAAS,UAAA;AACrB,QAAA,GAAA,EAAK,OAAA,CAAQ,GAAA;AACb,QAAA,MAAA,EAAQ,OAAA,CAAQ;AACjB,OAAA,CAAA;AAEL,IAAA;AACA,IAAA,OAAO,MAAA;AACT,EAAA;;AAGK,IAAM,gBAAA,GAA0D,CACrE,aAAA,KACE;AACF,EAAA,OAAO;IACL,SAAA,CAAU,EAAE,SAAO,EAAE;AACnB,MAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAuB,aAAa,CAAA;AACxD,MAAA,OAAO,OAAA;AACT,IAAA;;AAEJ,CAAA;AAEO,IAAM,eAAA,GAAkD,CAC7D,MAAA,KACE;AACF,EAAA,OAAO;IACL,SAAA,CAAU,EAAE,SAAO,EAAE;AACnB,MAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,MAAM,CAAA;AAC1C,MAAA,OAAO,OAAA;AACT,IAAA;;AAEJ,CAAA;;;ACzCA,SAAS,MAAA,CAAO,GAAG,CAAA,EAAG;AAClB,EAAA,IAAI,IAAI,EAAC;AACT,EAAA,KAAA,IAAS,CAAA,IAAK,CAAA,EAAG,IAAI,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA;AAC9E,IAAA,CAAA,CAAE,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AACd,EAAA,IAAI,CAAA,IAAK,IAAA,IAAQ,OAAO,MAAA,CAAO,qBAAA,KAA0B,UAAA;AACrD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,qBAAA,CAAsB,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAA,EAAK;AACpE,MAAA,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,SAAA,CAAU,oBAAA,CAAqB,IAAA,CAAK,CAAA,EAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AACzE,QAAA,CAAA,CAAE,EAAE,CAAC,CAAC,IAAI,CAAA,CAAE,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,IACxB;AACJ,EAAA,OAAO,CAAA;AACX;AAOA,IAAM,WAAA,GAAc;AAAA,EAChB,MAAA,EAAQ,KAAA;AAAA,EACR,QAAA,EAAU,OAAA;AAAA,EACV,SAAA,EAAW,QAAA;AAAA,EACX,UAAA,EAAY,SAAA;AAAA,EACZ,UAAA,EAAY,SAAA;AAAA,EACZ,YAAA,EAAc,WAAA;AAAA,EACd,OAAA,EAAS,MAAA;AAAA,EACT,eAAA,EAAiB,cAAA;AAAA,EACjB,UAAA,EAAY,SAAA;AAAA,EACZ,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,WAAA,EAAa,UAAA;AAAA,EACb,SAAA,EAAW,QAAA;AAAA,EACX,cAAA,EAAgB,aAAA;AAAA,EAChB,SAAA,EAAW,QAAA;AAAA,EACX,WAAA,EAAa,UAAA;AAAA,EACb,OAAA,EAAS,MAAA;AAAA,EACT,WAAA,EAAa,UAAA;AAAA,EACb,SAAA,EAAW,QAAA;AAAA,EACX,SAAA,EAAW,QAAA;AAAA,EACX,QAAA,EAAU,OAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,QAAA,EAAU,OAAA;AAAA,EACV,qBAAA,EAAuB,OAAA;AAAA,EACvB,UAAA,EAAY,SAAA;AAAA,EACZ,OAAA,EAAS,MAAA;AAAA,EACT,OAAA,EAAS;AACb,CAAA;AACA,SAAS,SAAA,CAAU,QAAQ,SAAA,EAAW;AAClC,EAAA,MAAM,iBAAiB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,CAAC,SAAS,CAAA;AACxE,EAAA,OAAO,cAAA,CAAe,KAAK,CAAA,QAAA,KAAY;AACnC,IAAA,IAAI,EAAA;AACJ,IAAA,MAAM,kBAAkB,EAAA,GAAK,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,SAAS,MAAA,GAAS,MAAA,CAAO,GAAA,MAAS,IAAA,IAAQ,OAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,IAAA,MAAU,YAAY,QAAQ,CAAA;AAC/J,IAAA,IAAI,aAAa,uBAAA,EAAyB;AACtC,MAAA,OAAQ,aAAA,IACJ,mBAAmB,MAAA,CAAO,GAAA;AAAA,IAClC;AACA,IAAA,OAAO,aAAA;AAAA,EACX,CAAC,CAAA;AACL;AACA,SAAS,aAAa,MAAA,EAAQ;AAC1B,EAAA,OAAO,KAAA,IAAS,MAAA;AACpB;AAgBA,IAAM,eAAN,MAAmB;AAAA,EACf,WAAA,GAAc;AACV,IAAA,IAAA,CAAK,IAAA,uBAAW,GAAA,EAAI;AACpB,IAAA,IAAA,CAAK,MAAA,uBAAa,GAAA,EAAI;AAAA,EAC1B;AAAA,EACA,GAAA,CAAI,WAAW,KAAA,EAAO;AAClB,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAC1B,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,QAAQ,IAAA,EAAM;AAClD,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAE,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,GAAA,EAAM,IAAA,CAAK,EAAE,CAAA,+BAAA,CAAiC,CAAA;AAAA,MAClE;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,MAAM,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,KAAA,GAAQ;AACJ,IAAA,IAAA,CAAK,IAAA,uBAAW,GAAA,EAAI;AACpB,IAAA,IAAA,CAAK,MAAA,uBAAa,GAAA,EAAI;AACtB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAO,MAAA,EAAQ;AACX,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AACjC,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,QAAQ,IAAA,EAAM;AAClD,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,EAAE,CAAA;AAAA,IAC9B;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,OAAO,MAAM,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,IAAI,MAAA,EAAQ;AAGR,IAAA,MAAM,CAAA,GAAI,OAAO,IAAA,CAAK,MAAA;AACtB,IAAA,IAAI,CAAA,EAAG;AACH,MAAA,MAAM,EAAA,GAAK,EAAE,GAAI,IAAA,CAAK,IAAI,CAAC,CAAA,IAAK,EAAC,EAAG;AACpC,MAAA,OAAO,EAAA,CAAG,EAAA;AACV,MAAA,OAAO,EAAE,GAAG,EAAA,EAAI,GAAG,KAAK,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAE;AAAA,IAC7C;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA,EAC/B;AAAA,EACA,IAAI,MAAA,EAAQ;AACR,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAAA,EAC/B;AACJ,CAAA;AAEA,SAAS,QAAA,GAAW;AAChB,EAAA,OAAO,IAAI,YAAA,EAAa;AAC5B;AA6FA,SAAS,YAAY,KAAA,EAAO;AACxB,EAAA,OAAO,KAAA,KAAU,MAAA;AACrB;AAQA,SAAS,IAAA,CAAK,QAAQ,IAAA,EAAM;AACxB,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,CAAA,SAAA,KAAa,SAAA,KAAc,GAAG,CAAA,EAAG;AAC5C,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAClB;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACX;AACA,SAAS,MAAA,CAAO,QAAQ,SAAA,EAAW;AAC/B,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAC7C,IAAA,IAAI,CAAC,SAAA,CAAU,KAAA,EAAO,GAAG,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,IAClB;AAAA,EACJ,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACX;AAqBA,IAAM,uBAAuB,QAAA,EAAS;AACtC,IAAM,WAAN,MAAe;AAAA,EACX,OAAO,eAAA,CAAgB,MAAA,EAAQ,QAAA,EAAU;AACrC,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,uBAAA,CAAwB,MAAM,CAAA;AAC3D,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,oBAAoB,IAAA,IAAQ,eAAA,KAAoB,SAAS,MAAA,GAAS,eAAA,CAAgB,SAAS,CAAA,EAAG,QAAA,KAAa,QAAQ,QAAA,KAAa,MAAA,GAAS,MAAA,GAAS,QAAA,CAAS,SAAS,CAAA;AACtN,IAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,oBAAoB,IAAA,IAAQ,eAAA,KAAoB,SAAS,MAAA,GAAS,eAAA,CAAgB,KAAK,CAAA,EAAG,QAAA,KAAa,QAAQ,QAAA,KAAa,MAAA,GAAS,MAAA,GAAS,QAAA,CAAS,KAAK,CAAA;AAC1M,IAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,IAAK,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,SAAS,CAAA,GAAI,EAAE,SAAA,EAAU,GAAI,EAAG,CAAA,EAAG,eAAe,CAAA,EAAG,QAAQ,CAAA,EAAI,MAAA,CAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,CAAA,GAAI,EAAE,KAAA,EAAM,GAAI,EAAG,CAAA;AAC1N,IAAA,IAAI,UAAU,MAAA,EAAQ;AAAA,MAClB,aAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACH,CAAA,IACG,YAAA,CAAa,OAAO,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACzC,MAAA,OAAO,KAAK,eAAA,CAAgB,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,WAAW,aAAa,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,EAAA;AACjC,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAA;AAElC,MAAA,IAAI,UAAU,QAAA,EAAU,cAAc,CAAA,IAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AAChE,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,aAAa,CAAA;AAAA,MACxD;AACA,MAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,EAAG;AAExB,QAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,QAAA,EAAU,aAAa,CAAA;AAAA,MACvD;AAAA,IACJ;AACA,IAAA,OAAO,aAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,YAAY,SAAA,EAAW;AAC1B,IAAA,OAAO,IAAA,CAAK,gBAAgB,SAAS,CAAA;AAAA,EACzC;AAAA,EACA,OAAO,mBAAmB,SAAA,EAAW;AACjC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA;AAC/C,IAAA,MAAM,EAAA,GAAK,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,GAAS,QAAA,GAAW,EAAC,EAAG,IAAA,GAAO,MAAA,CAAO,EAAA,EAAI,CAAC,WAAW,CAAC,CAAA;AACpG,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EACA,OAAO,oBAAoB,SAAA,EAAW;AAClC,IAAA,IAAI,EAAA;AACJ,IAAA,OAAA,CAAQ,EAAA,GAAK,KAAK,eAAA,CAAgB,SAAS,OAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,SAAA;AAAA,EAC1F;AAAA,EACA,OAAO,iBAAiB,SAAA,EAAW;AAC/B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,SAAS,CAAA;AAC/C,IAAA,OAAO,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,QAAQ,CAAA,EAAG;AAAA;AAAA,MAE9C,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAA,CAAK,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,GAAS,MAAA,GAAS,QAAA,CAAS,WAAA,IAAe,EAAE,WAAA,EAAa,QAAA,CAAS,WAAA,EAAY,GAAI,EAAG,CAAA,EAAG,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,GAAS,MAAA,GAAS,QAAA,CAAS,KAAK;AAAA,KAAG,CAAA;AAAA,EAChP;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAoB,QAAA,EAAU;AACjC,IAAA,OAAO,MAAA,CAAO,KAAK,QAAA,EAAU,CAAC,SAAS,WAAW,CAAC,GAAG,WAAW,CAAA;AAAA,EACrE;AAAA,EACA,OAAO,uBAAuB,QAAA,EAAU;AACpC,IAAA,OAAO,MAAA,CAAO,UAAU,WAAW,CAAA;AAAA,EACvC;AAAA,EACA,OAAO,mBAAA,CAAoB,WAAA,EAAa,QAAA,EAAU;AAC9C,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,WAAW,CAAA,EAAG,IAAA,CAAK,mBAAA,CAAoB,QAAQ,CAAC,GAAG,WAAW,CAAA;AAAA,EAChH;AAAA,EACA,OAAO,SAAS,SAAA,EAAW;AACvB,IAAA,IAAI,EAAA;AACJ,IAAA,OAAA,CAAQ,EAAA,GAAK,KAAK,mBAAA,CAAoB,SAAS,OAAO,IAAA,IAAQ,EAAA,KAAO,MAAA,GAAS,MAAA,GAAS,EAAA,CAAG,KAAA;AAAA,EAC9F;AAAA,EACA,OAAO,cAAc,MAAA,EAAQ;AACzB,IAAA,OAAO,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC;AAAA,EACA,OAAO,gBAAgB,SAAA,EAAW;AAC9B,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,WAAA,CAAY,SAAA,EAAW,YAAY,CAAA;AAC1D,IAAA,OAAO,cAAc,IAAA,IAAQ,SAAA,KAAc,SAAS,MAAA,GAAS,SAAA,CAAU,KAAK,GAAA,CAAI,YAAA;AAAA,EACpF;AAAA,EACA,OAAO,WAAA,CAAY,MAAA,EAAQ,QAAA,EAAU;AACjC,IAAA,IAAI,QAAA,IAAY,SAAA,CAAU,MAAA,EAAQ,QAAQ,CAAA,EAAG;AACzC,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,IAAI,UAAU,MAAA,EAAQ;AAAA,MAClB,aAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACH,CAAA,IACG,YAAA,CAAa,OAAO,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,EAAG;AACzC,MAAA,OAAO,KAAK,WAAA,CAAY,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,IAC/D;AACA,IAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,EAAA;AACjC,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAA;AAElC,MAAA,IAAI,UAAU,QAAA,EAAU,cAAc,CAAA,IAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AAChE,QAAA,OAAO,IAAA,CAAK,WAAA,CAAY,SAAA,EAAW,QAAQ,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,EAAG;AACxB,QAAA,OAAO,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACJ;AACA,IAAA,OAAO,WAAW,MAAA,GAAY,MAAA;AAAA,EAClC;AAAA,EACA,OAAO,gCAAgC,SAAA,EAAW;AAC9C,IAAA,OAAO,oBAAA,CAAqB,IAAI,SAAS,CAAA;AAAA,EAC7C;AAAA,EACA,OAAO,wBAAwB,SAAA,EAAW;AACtC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,+BAAA,CAAgC,SAAS,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,IAAA,IAAI,CAAC,QAAA,EAAU;AACX,MAAA,OAAO,OAAA;AAAA,IACX;AACA,IAAA,MAAM,EAAE,WAAU,GAAI,QAAA,EAAU,OAAO,MAAA,CAAO,QAAA,EAAU,CAAC,WAAW,CAAC,CAAA;AACrE,IAAA,MAAM,KAAK,OAAA,KAAY,IAAA,IAAQ,YAAY,MAAA,GAAS,OAAA,GAAU,EAAC,EAAG,EAAE,IAAI,KAAA,EAAM,GAAI,IAAI,WAAA,GAAc,MAAA,CAAO,IAAI,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAC9H,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,EAAE,SAAA,EAAW,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAI,KAAK,EAAE,KAAA,EAAO,EAAA,EAAG,GAAI,EAAG,CAAA,EAAG,SAAS,CAAA,IAAK,IAAI,CAAA,EAAI,KAAA,GAAQ,EAAE,aAAa,KAAA,EAAM,GAAI,EAAG,GAAG,WAAW,CAAA;AAAA,EACtM;AAAA,EACA,OAAO,qBAAA,CAAsB,SAAA,EAAW,QAAA,EAAU;AAC9C,IAAA,oBAAA,CAAqB,GAAA,CAAI,WAAW,QAAQ,CAAA;AAAA,EAChD;AACJ,CAAA;AAEA,SAAS,4BAAA,CAA6B,WAAW,QAAA,EAAU;AACvD,EAAA,MAAM,WAAA,GAAc,UAAU,QAAQ,CAAA;AACtC,EAAA,IAAI,OAAO,gBAAgB,UAAA,EAAY;AACnC,IAAA;AAAA,EACJ;AACA,EAAA,SAAA,CAAU,QAAQ,CAAA,GAAI,SAAA,GAAa,IAAA,EAAM;AACrC,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAC3C,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,uBAAA,CAAwB,IAAI,CAAA;AAClD,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,QAAA,CAAS,qBAAA,CAAsB,QAAQ,IAAI,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;AACA,SAAS,qBAAqB,GAAA,EAAK;AAC/B,EAAA,IAAI,OAAO,GAAA,CAAI,OAAA,CAAQ,SAAA,CAAU,YAAY,WAAA,EAAa;AAItD,IAAA;AAAA,EACJ;AACA,EAAA,GAAA,CAAI,OAAA,CAAQ,SAAA,CAAU,OAAA,GAAU,SAAA,GAAa,IAAA,EAAM;AAC/C,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,SAAQ,GAAI,uBAAA,CAAwB,GAAG,IAAI,CAAA;AACpE,IAAA,MAAM,KAAK,QAAA,KAAa,IAAA,IAAQ,QAAA,KAAa,MAAA,GAAS,WAAW,EAAC,EAAG,EAAE,KAAA,KAAU,EAAA,EAAI,aAAA,GAAgB,OAAO,EAAA,EAAI,CAAC,OAAO,CAAC,CAAA;AACzH,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,uBAAA,CAAwB,IAAI,CAAA;AACzD,IAAA,MAAM,KAAK,WAAA,KAAgB,IAAA,IAAQ,gBAAgB,MAAA,GAAS,WAAA,GAAc,EAAC,EAAG,EAAE,SAAA,EAAW,gBAAA,KAAqB,EAAA,EAAI,eAAA,GAAkB,OAAO,EAAA,EAAI,CAAC,WAAW,CAAC,CAAA;AAC9J,IAAA,MAAM,YAAY,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,EAAC,EAAG,gBAAgB,GAAG,OAAO,CAAA,EAAI,QAAQ,EAAE,KAAA,KAAU,MAAU,CAAA;AAC5H,IAAA,MAAM,cAAA,GAAiB,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,eAAe,GAAG,aAAa,CAAA,EAAA,CAAK,oBAAoB,IAAA,IAAQ,eAAA,KAAoB,SAAS,MAAA,GAAS,eAAA,CAAgB,UAAU,KAAA,GAC/L;AAAA,MACE,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,OAAO,EAAC,EAAG,eAAA,KAAoB,IAAA,IAAQ,oBAAoB,MAAA,GAAS,MAAA,GAAS,eAAA,CAAgB,KAAK,GAAG,KAAK;AAAA,QAExI,MAAU,CAAA;AAIhB,IAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,WAAA,CAAY,KAAK,IAAI,CAAA;AAC7C,IAAA,QAAA,CAAS,qBAAA,CAAsB,QAAQ,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,IAAK,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,GAAS,IAAI,EAAE,SAAA,KAAc,MAAU,CAAA,EAAG,cAAc,CAAC,CAAA;AACxJ,IAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,WAAW,CAAA,EAAG;AAChC,MAAA,MAAMA,gBAAAA,GAAkB,QAAA,CAAS,uBAAA,CAAwB,MAAM,CAAA;AAC/D,MAAA,MAAM,iBAAiB,MAAA,CAAO,MAAA;AAC9B,MAAA,MAAA,CAAO,MAAA,GAAS,YAAaC,KAAAA,EAAM;AAC/B,QAAA,MAAM,cAAA,GAAiB,cAAA,CAAe,KAAA,CAAM,MAAA,EAAQA,KAAI,CAAA;AACxD,QAAA,MAAMC,MAAKF,gBAAAA,KAAoB,IAAA,IAAQA,qBAAoB,MAAA,GAASA,gBAAAA,GAAkB,EAAC,EAAG,EAAE,SAAA,EAAAG,UAAAA,KAAcD,GAAAA,EAAI,IAAA,GAAO,OAAOA,GAAAA,EAAI,CAAC,WAAW,CAAC,CAAA;AAC7I,QAAA,QAAA,CAAS,sBAAsB,cAAA,EAAgB;AAAA,UAC3C,SAAA,EAAW;AAAA,YACP,YAAA,EAAA,CAAeC,eAAc,IAAA,IAAQA,UAAAA,KAAc,SAAS,MAAA,GAASA,UAAAA,CAAU,SACzE,EAAE,KAAA,EAAOA,WAAU,KAAA,EAAO,MAAA,EAAQ,QAAO,GACzCA,UAAAA,KAAc,QAAQA,UAAAA,KAAc,MAAA,GAAS,SAASA,UAAAA,CAAU;AAAA;AAC1E,SACH,CAAA;AAKD,QAAA,OAAO,cAAA,CAAe,QAAQ,IAAI,CAAA;AAAA,MACtC,CAAA;AACA,MAAA,4BAAA,CAA6B,QAAQ,UAAU,CAAA;AAAA,IACnD;AACA,IAAA,4BAAA,CAA6B,QAAQ,UAAU,CAAA;AAC/C,IAAA,4BAAA,CAA6B,QAAQ,UAAU,CAAA;AAC/C,IAAA,4BAAA,CAA6B,QAAQ,SAAS,CAAA;AAC9C,IAAA,4BAAA,CAA6B,QAAQ,WAAW,CAAA;AAChD,IAAA,4BAAA,CAA6B,QAAQ,QAAQ,CAAA;AAC7C,IAAA,4BAAA,CAA6B,QAAQ,QAAQ,CAAA;AAC7C,IAAA,4BAAA,CAA6B,QAAQ,KAAK,CAAA;AAC1C,IAAA,4BAAA,CAA6B,QAAQ,KAAK,CAAA;AAC1C,IAAA,MAAM,eAAe,MAAA,CAAO,IAAA;AAC5B,IAAA,MAAA,CAAO,IAAA,GAAO,YAAaF,KAAAA,EAAM;AAC7B,MAAA,MAAMG,OAAAA,GAAS,YAAA,CAAa,KAAA,CAAM,IAAA,EAAMH,KAAI,CAAA;AAC5C,MAAA,IAAIA,KAAAA,CAAK,CAAC,CAAA,EAAG;AACT,QAAA,MAAM,IAAA,GAAO,QAAA,CAAS,+BAAA,CAAgC,IAAI,CAAA;AAC1D,QAAA,IAAI,IAAA,EAAM;AACN,UAAA,QAAA,CAAS,qBAAA,CAAsBG,OAAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,IAAI,CAAA,EAAGH,KAAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAAA,QAC1F;AAAA,MACJ;AACA,MAAA,OAAOG,OAAAA;AAAA,IACX,CAAA;AACA,IAAA,OAAO,MAAA;AAAA,EACX,CAAA;AACJ;AACA,SAAS,uBAAA,CAAwB,YAAA,EAAc,iBAAA,EAAmB,OAAA,EAAS;AACvE,EAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AAClC,IAAA,OAAO;AAAA,MACH,KAAA,EAAO,YAAA;AAAA,MACP,QAAA,EAAU,iBAAA;AAAA,MACV;AAAA,KACJ;AAAA,EACJ;AACA,EAAA,OAAO;AAAA,IACH,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACb;AACJ;AC3esB,IAAI,GAAA,CAAI,aAAa;ACiO3C,IAAI,WAAA,GAAc,CAAC,WAAA,KAAgB;AACjC,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAG,WAAA;AAAA,IACH,cAAA,GAAiB;AACf,MAAA,OAAO,WAAA,CAAY,IAAA,CAAK,UAAA,CAAW,YAAA,EAAc,MAAM,CAAA;AAAA,IACzD;AAAA,GACF;AACA,EAAA,OAAO,OAAO,cAAA,CAAe,KAAA,EAAO,kBAAkB,EAAE,UAAA,EAAY,OAAO,CAAA;AAC7E,CAAA;AACA,oBAAA,CAAqB,CAAC,CAAA;;;AC5OtB,IAAM,oBAAA,GAAuB,EAAE,MAAA,CAAO;AACpC,EAAA,EAAA,EAAI,EAAE,MAAA,EAAM;AACZ,EAAA,WAAA,EAAa,EAAE,MAAA,EAAM;AACrB,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;EAChB,IAAA,EAAM,CAAA,CAAE,GAAA,EAAG,CAAG,QAAA,EAAQ;EACtB,IAAA,EAAM,CAAA,CAAE,OAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,GAAA,EAAK,CAAA,CAAE,QAAA;AACrC,CAAA,CAAA;AAEM,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;EAC/C,OAAA,EAAS,CAAA,CAAE,MAAM,oBAAoB,CAAA;EACrC,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAM,EAAI,CAAA,CAAE,GAAA,EAAK,CAAC,CAAA;AAC3C,EAAA,QAAA,EAAU,EACP,MAAA,CAAO;AACN,IAAA,UAAA,EAAY,EAAE,OAAA,EAAO;AACrB,IAAA,aAAA,EAAe,EAAE,MAAA,EAAM;AACvB,IAAA,YAAA,EAAc,EAAE,MAAA;AACjB,GAAA,CAAA,CACA,QAAA;AACJ,CAAA,CAAA;AAMM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAC5C,EAAA,KAAA,EAAO,EAAE,MAAA;AACV,CAAA,CAAA;AAEyB,WAAA,CAAY;EACpC,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,mCAAA;EACN,WAAA,EAAa,YAAA;EACb,OAAA,EAAS;IACP,IAAA,EAAM;MACJ,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,GAAA,EAAK,CAAA,CAAE,MAAA,EAAM,CAAG,GAAA,CAAI,GAAG,uBAAuB;AAC/C,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,iCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,WAAA,EAAa,8BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,WAAA,EAAa,uBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;;AAKjB,CAAA;;;ACtEM,IAAM,gBAAA,GAAmB,CAAA,CAC7B,MAAA,EAAM,CACN,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,CAAA,CACtB,QAAA,EAAQ,CACR,OAAA,CAAQ;EACP,KAAA,EAAO;IACL,QAAA,EAAU;;EAEZ,IAAA,EAAM;AACP,CAAA,CAAA;AAEI,IAAM,mBAAmB,CAAA,CAC7B,MAAA,EAAM,CACN,SAAA,CAAU,CAAC,GAAA,KAAO;AACjB,EAAA,IAAI,CAAC,GAAA;AAAK,IAAA,OAAO,EAAA;AACjB,EAAA,OAAO,IAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAQ;AACjC,IAAA,MAAM,CAAC,MAAA,EAAQ,SAAA,GAAY,KAAK,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAClD,IAAA,OAAO;AACL,MAAA,MAAA;AACA,MAAA,SAAA,EAAW,UAAU,WAAA;;EAEzB,CAAC,CAAA;AACH,CAAC,CAAA,CACA,IAAA,CACC,CAAA,CAAE,KAAA,CACA,EAAE,MAAA,CAAO;AACP,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;AAChB,EAAA,SAAA,EAAW,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC;AAClC,CAAA,CAAC,CACH,CAAA,CAEF,QAAA,EAAQ,CACR,OAAA,CAAQ;EACP,KAAA,EAAO;IACL,QAAA,EAAU,KAAA;IACV,OAAA,EAAS;;EAEX,IAAA,EAAM;AACP,CAAA,CAAA;AAEI,IAAM,YAAA,GAAe,CAAA,CACzB,MAAA,EAAM,CACN,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,CAAA,CACtB,QAAA,EAAQ,CACR,OAAA,CAAQ;EACP,KAAA,EAAO;IACL,QAAA,EAAU;;EAEZ,IAAA,EAAM;AACP,CAAA,CAAA;AAEI,IAAM,oBAAoB,CAAA,CAC9B,MAAA,EAAM,CACN,SAAA,CAAU,CAAC,GAAA,KAAO;AACjB,EAAA,IAAI,CAAC,GAAA;AAAK,IAAA,OAAO,EAAA;AACjB,EAAA,OAAO,IAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAQ;AACjC,IAAA,MAAM,CAAC,MAAA,EAAQ,KAAA,GAAQ,EAAE,CAAA,GAAI,KAAK,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,kBAAkB,CAAA;AACnE,IAAA,OAAO,EAAE,QAAQ,KAAA,EAAK;EACxB,CAAC,CAAA;AACH,CAAC,CAAA,CACA,IAAA,CACC,CAAA,CAAE,KAAA,CACA,EAAE,MAAA,CAAO;AACP,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;AAChB,EAAA,KAAA,EAAO,EAAE,MAAA;AACV,CAAA,CAAC,CACH,CAAA,CAEF,QAAA,EAAQ,CACR,OAAA,CAAQ;EACP,KAAA,EAAO;IACL,QAAA,EAAU,KAAA;IACV,OAAA,EAAS;;EAEX,IAAA,EAAM;AACP,CAAA,CAAA;AAEI,IAAM,qBAAqB,CAAA,CAC/B,MAAA,EAAM,CACN,SAAA,CAAU,CAAC,GAAA,KAAO;AACjB,EAAA,IAAI,CAAC,GAAA;AAAK,IAAA,OAAO,EAAA;AACjB,EAAA,OAAO,GAAA,CAAI,MAAM,GAAG,CAAA;AACtB,CAAC,CAAA,CACA,QAAA,EAAQ,CACR,OAAA,CAAQ;EACP,KAAA,EAAO;IACL,QAAA,EAAU,KAAA;IACV,OAAA,EAAS;;EAEX,IAAA,EAAM;AACP,CAAA,CAAA;AC1FI,IAAM,wBAAA,GAA2BC,EAAE,MAAA,CAAO;AAC/C,EAAA,iBAAA,EAAmBA,EAAE,MAAA;AACtB,CAAA,CAAA;AAEM,IAAM,oBAAA,GAAuB,wBAAA;ACJ7B,IAAM,gBAAA,GAAmB;EAC9B,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAS;EACpC,EAAE,KAAA,EAAO,mBAAA,EAAqB,KAAA,EAAO,mBAAA,EAAmB;EACxD,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAa;EAC5C,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA;;AAKxB,IAAM,cAAA,GAAiBA,EAAE,MAAA,CAAO;AACrC,EAAA,UAAA,EAAYA,EAAE,MAAA,EAAM;AACpB,EAAA,YAAA,EAAcA,EAAE,MAAA,EAAM;EACtB,WAAA,EAAaA,CAAAA,CAAE,KACb,gBAAA,CAAiB,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,KAAK,CAG5C,CAAA;AAEH,EAAA,EAAA,EAAIA,EAAE,MAAA;AACP,CAAA,CAAA;ACnBD,IAAMC,KAAAA,GAAOD,EAAE,MAAA,CAAO;AACpB,EAAA,EAAA,EAAIA,EAAE,MAAA,EAAM;AACZ,EAAA,IAAA,EAAMA,EAAE,IAAA,CAAK;AACX,IAAA,QAAA;AACA,IAAA,WAAA;AACA,IAAA,QAAA;AACA,IAAA,SAAA;AACA,IAAA,SAAA;AACA,IAAA;AACD,GAAA,CAAA;AACD,EAAA,WAAA,EAAaA,EAAE,MAAA;AAChB,CAAA,CAAA;AAED,IAAM,IAAA,GAAOA,EAAE,MAAA,CAAO;AACpB,EAAA,MAAA,EAAQA,EAAE,MAAA,EAAM;AAChB,EAAA,MAAA,EAAQA,EAAE,MAAA;AACX,CAAA,CAAA;AAEM,IAAM,4BAA4BA,CAAAA,CAAE,MAAA,CACzCA,EAAE,MAAA,EAAM,EACRA,EAAE,MAAA,CAAO;EACP,KAAA,EAAOA,CAAAA,CAAE,MAAMC,KAAI,CAAA;EACnB,KAAA,EAAOD,CAAAA,CAAE,MAAM,IAAI;CACpB,CAAC,CAAA;AAOG,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAC7C,EAAA,WAAA,EAAaA,EAAE,MAAA,EAAM;AACrB,EAAA,iBAAA,EAAmBA,EAAE,MAAA,EAAM;EAC3B,KAAA,EAAOA,CAAAA,CAAE,KAAA,CACPA,CAAAA,CAAE,MAAA,CAAO;AACP,IAAA,GAAA,EAAKA,EAAE,MAAA,EAAM;AACb,IAAA,WAAA,EAAaA,EAAE,MAAA;GAChB,CAAC;AAEL,CAAA,CAAA;AAEM,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAChD,EAAA,OAAA,EAASA,EAAE,MAAA,EAAM;AACjB,EAAA,cAAA,EAAgBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA;EAClC,WAAA,EAAaA,CAAAA,CAAE,KAAA,CACbA,CAAAA,CAAE,MAAA,CAAO;AACP,IAAA,IAAA,EAAMA,EAAE,IAAA,CAAK;AACX,MAAA,OAAA;AACA,MAAA,cAAA;AACA,MAAA,gBAAA;AACA,MAAA,cAAA;AACA,MAAA;AACD,KAAA,CAAA;AACD,IAAA,OAAA,EAASA,EAAE,MAAA,EAAM;AACjB,IAAA,WAAA,EAAaA,EAAE,MAAA;GAChB,CAAC;AAEL,CAAA,CAAA;;;ACpDD,IAAM,cAAA,GAAiB,EAAE,MAAA,CAAO;AAC9B,EAAA,IAAA,EAAM,EAAE,MAAA,EAAM;AACd,EAAA,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,WAAW,WAAA,EAAa,QAAA,EAAU,gBAAgB,CAAC,CAAA;AACnE,EAAA,MAAA,EAAQ,CAAA,CAAE,WAAA,CAAY,EAAE,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,OAAA,EAAO,CAAG,KAAA,EAAO,CAAA,CAAE,QAAA;AACnD,CAAA,CAAA;AAEM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AACzC,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,EAAA,EAAA,EAAI,EAAE,MAAA,EAAM;AACZ,EAAA,OAAA,EAAS,EAAE,MAAA,EAAM;EACjB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAC1B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAC5B,EAAA,cAAA,EAAgB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,GAAW,QAAA,EAAQ;EAC9C,UAAA,EAAY,CAAA,CAAE,MAAM,cAAc,CAAA;EAClC,kBAAA,EAAoB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,EAAM,EAAI,CAAC;AAC5D,CAAA,CAAA;AAI2C,EAAE,MAAA,CAAO;AACnD,EAAA,KAAA,EAAO,EAAE,MAAA,EAAM;AACf,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;AAChB,EAAA,QAAA,EAAU,EAAE,MAAA;AACb,CAAA;AAEM,IAAM,kBAAA,GAAqB,mBAAmB,IAAA,CAAK;EACxD,kBAAA,EAAoB,IAAA;EACpB,UAAA,EAAY;AACb,CAAA,CAAA,CAAE,MAAA,CAAO;EACR,kBAAA,EAAoB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AACvC,EAAA,iBAAA,EAAmB,EAAE,OAAA;AACtB,CAAA,CAAA;AAGM,IAAM,yBAAA,GAA4B,mBAAmB,IAAA,CAAK;EAC/D,UAAA,EAAY,IAAA;EACZ,kBAAA,EAAoB;AACrB,CAAA,CAAA;AAIM,IAAM,kBAAA,GAAqB,EAAE,WAAA,CAAY;AAC9C,EAAA,QAAA,EAAU,CAAA,CAAE,MAAA,EAAM,CAAG,WAAA,GAAc,QAAA,EAAQ;AAC3C,EAAA,SAAA,EAAW,EAAE,MAAA,EAAM;EACnB,UAAA,EAAY,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAC/B,YAAA,EAAc,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EACjC,iBAAA,EAAmB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAC/B,CAAA,CAAA;AAEM,IAAM,YAAA,GAAe,EAAE,MAAA,CAAO;AACnC,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,EAAA,OAAA,EAAS,EAAE,MAAA,EAAM;AACjB,EAAA,EAAA,EAAI,EAAE,MAAA,EAAM;AACZ,EAAA,SAAA,EAAW,EAAE,OAAA,EAAO;AACpB,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;AAChB,EAAA,GAAA,EAAK,EAAE,MAAA,EAAM;AACb,EAAA,KAAA,EAAO,EAAE,MAAA,EAAM;AACf,EAAA,KAAA,EAAO,EAAE,MAAA,EAAM;EACf,OAAA,EAAS,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAC5B,WAAA,EAAa,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAM,EAAI,CAAA,CAAE,OAAA,EAAS,CAAC,CAAA;AACtD,EAAA,YAAA,EAAc,EAAE,WAAA,CAAY;AAC1B,IAAA,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,kBAAkB;AACjD,GAAA,CAAA;AACD,EAAA,UAAA,EAAY,EAAE,OAAA,EAAO;EACrB,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAC3B,EAAA,UAAA,EAAY,EAAE,OAAA;AACf,CAAA,CAAA;AAGM,IAAM,oBAAA,GAAuB,aAAa,IAAA,CAAK;EACpD,GAAA,EAAK,IAAA;EACL,KAAA,EAAO,IAAA;EACP,WAAA,EAAa,IAAA;EACb,SAAA,EAAW,IAAA;EACX,MAAA,EAAQ;AACT,CAAA,CAAA;AAIM,IAAM,gBAAA,GAAmB,EAAE,WAAA,CAAY,EAAE,CAAA,CAAE,KAAA,EAAK,CAAG,OAAA,CAAQ,YAAY,CAAA;AAIvE,IAAM,mBAAA,GAAsB,EAChC,MAAA,CAAO;AACN,EAAA,IAAA,EAAM,EAAE,MAAA,EAAM;AACd,EAAA,SAAA,EAAW,EAAE,MAAA;AACd,CAAA,CAAA,CACA,KAAA,EAAK;AAK4B,EAAE,MAAA,CAAO;EAC3C,WAAA,EAAa,CAAA,CAAE,MAAA,EAAM,CAAG,OAAA,EAAO;EAC/B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAM,CAAG,OAAA;AAClB,CAAA;AAEM,IAAM,2BAAA,GAA8B,EACxC,MAAA,CAAO;AACN,EAAA,GAAG,oBAAoB,OAAA,CAAQ,KAAA;AAC/B,EAAA,QAAA,EAAU,EAAE,MAAA,EAAM;EAClB,UAAA,EAAY,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAC/B,IAAA,EAAM,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;CAClB,CAAA,CACA,KAAA,EAAK,CACL,OAAA,CAAQ,eAAe,CAAA;AAMU,EAAE,MAAA,CAAO;AAC3C,EAAA,IAAA,EAAM,EAAE,MAAA,EAAM;EACd,kBAAA,EAAoB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAChC,CAAA;AAEM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AACjD,EAAA,eAAA,EAAiB,CAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA,CAAE,OAAA,EAAO;AACxD,EAAA,oBAAA,EAAsB,0BAA0B,OAAA,EAAO;AACvD,EAAA,eAAA,EAAiB,0BAA0B,OAAA,EAAO;AAClD,EAAA,gBAAA,EAAkB,EAAE,MAAA,EAAM;AAC1B,EAAA,uBAAA,EAAyB,EAAE,MAAA,EAAM;EACjC,iBAAA,EAAmB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EACtC,wBAAA,EAA0B,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAC7C,kBAAA,EAAoB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EACvC,yBAAA,EAA2B,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAC9C,EAAA,EAAA,EAAI,EAAE,MAAA,EAAM;AACZ,EAAA,YAAA,EAAc,EAAE,MAAA,EAAM;AACtB,EAAA,UAAA,EAAY,EAAE,MAAA;AACf,CAAA,CAAA;AAIM,IAAM,kCAAA,GACX,2BAA2B,IAAA,CAAK;EAC9B,EAAA,EAAI,IAAA;EACJ,UAAA,EAAY;AACb,CAAA,CAAA;AC3IH,KAAA,CAAM,OAAO,YAAY,CAAA;AACzB,KAAA,CAAM,OAAO,iBAAiB,CAAA;AAC9B,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,KAAA,CAAM,OAAO,QAAQ,CAAA;AAErB,IAAA,cAAA,GAAe,KAAA;;;ACIR,IAAM,uBAAA,GAA0B,CACrC,KAAA,EACA,OAAA,GAKI,EAAA,KACM;AAEV,EAAA,MAAM,EACJ,eAAe,CAAA,EACf,YAAA,GAAe,GACf,SAAA,GAAY,IAAA,EACZ,WAAA,GAAc,IAAA,EAAI,GAChB,OAAA;AAGJ,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,KAAK,CAAA,EAAG;AAC7C,IAAA,OAAO,OAAO,KAAK,CAAA;AACrB,EAAA;AAGA,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,GAAA;AACT,EAAA;AAGA,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA;AAG/B,EAAA,IAAI,qBAAA;AACJ,EAAA,IAAI,YAAY,GAAA,EAAM;AACpB,IAAA,qBAAA,GAAwB,CAAA;AAC1B,EAAA,CAAA,MAAA,IAAW,YAAY,GAAA,EAAK;AAC1B,IAAA,qBAAA,GAAwB,CAAA;AAC1B,EAAA,CAAA,MAAA,IAAW,YAAY,EAAA,EAAI;AACzB,IAAA,qBAAA,GAAwB,CAAA;AAC1B,EAAA,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,IAAA,qBAAA,GAAwB,CAAA;AAC1B,EAAA,CAAA,MAAA,IAAW,YAAY,GAAA,EAAK;AAC1B,IAAA,qBAAA,GAAwB,CAAA;AAC1B,EAAA,CAAA,MAAA,IAAW,YAAY,IAAA,EAAM;AAC3B,IAAA,qBAAA,GAAwB,CAAA;EAC1B,CAAA,MAAO;AAEL,IAAA,qBAAA,GAAwB,YAAA;AACxB,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAC,CAAA;AAChD,MAAA,IAAI,WAAW,CAAA,EAAG;AAChB,QAAA,qBAAA,GAAwB,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,QAAQ,CAAA,GAAI,GAAG,YAAY,CAAA;AACvE,MAAA;AACF,IAAA;AACF,EAAA;AAGA,EAAA,qBAAA,GAAwB,IAAA,CAAK,GAAA,CAAI,qBAAA,EAAuB,YAAY,CAAA;AAGpE,EAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,EAAW;AACjD,IAAA,qBAAA,EAAuB,YAAY,CAAA,GAAI,qBAAA;AACvC,IAAA,qBAAA;AACA,IAAA;AACD,GAAA,CAAA;AAED,EAAA,OAAO,SAAA,CAAU,OAAO,KAAK,CAAA;AAC/B,CAAA;AAkCA,IAAM,cAAA,GAAiB,IAAA;AACvB,IAAM,cAAA,GAAiB,IAAA;AAEvB,IAAM,YAAA,GAAe,CACnB,MAAA,EACA,IAAA,MAKI,EAAE,MAAA,EAAQ,IAAA,EAAM,gBAAgB,IAAA,EAAI,CAAA;AAE1C,IAAM,WAAW,CACf,MAAA,MAEC,EAAE,MAAA,EAAQ,MAAM,UAAA,EAAU,CAAA;AAE7B,IAAM,OAAO,CACX,MAAA,MAEC,EAAE,MAAA,EAAQ,MAAM,MAAA,EAAM,CAAA;AAEzB,IAAM,YAAA,GAAe;;AAEnB,EAAA,YAAA,CAAa,4BAA4B,KAAK,CAAA;AAC9C,EAAA,YAAA,CAAa,wBAAwB,KAAK,CAAA;AAC1C,EAAA,YAAA,CAAa,qBAAqB,KAAK,CAAA;AACvC,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,EAAA,IAAA,CAAK,aAAa,CAAA;;AAElB,EAAA,IAAA,CAAK,YAAY,CAAA;AACjB,EAAA,IAAA,CAAK,YAAY,CAAA;AACjB,EAAA,IAAA,CAAK,YAAY,CAAA;AACjB,EAAA,IAAA,CAAK,YAAY,CAAA;AACjB,EAAA,IAAA,CAAK,YAAY,CAAA;AACjB,EAAA,IAAA,CAAK,YAAY,CAAA;;AAEjB,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB,CAAA;AAC3B,EAAA,QAAA,CAAS,qBAAqB,CAAA;AAC9B,EAAA,QAAA,CAAS,kBAAkB;;AAWtB,IAAM,YAAA,GAAe,CAAC,KAAA,KAAoC;AAC/D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA;AAAU,IAAA,OAAO,EAAE,SAAS,KAAA,EAAK;AAGtD,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAC9C,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AAG1B,IAAA,IAAI,SAAS,MAAA,GAAS,CAAA;AAAG,MAAA,OAAO,EAAE,SAAS,KAAA,EAAK;AAChD,IAAA,IAAI,KAAA,CAAM,WAAW,QAAA,CAAS,MAAA;AAAQ,MAAA,OAAO,EAAE,SAAS,KAAA,EAAK;AAC/D,EAAA;AAGA,EAAA,IAAI,QAAA,CAAS,MAAA,GAAS,+BAAA,CAAgC,MAAA,EAAQ;AAC5D,IAAA,OAAO,EAAE,SAAS,KAAA,EAAK;AACzB,EAAA;AAGA,EAAA,KAAA,MAAW,UAAU,YAAA,EAAc;AACjC,IAAA,IAAIE,KAAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAI,MAAA,CAAO,SAAS,cAAA,EAAgB;AAClC,QAAAA,QAAO,cAAA,CAAM,EAAA,CAAG,OAAO,MAAA,CAAO,MAAA,EAAQ,OAAO,IAAI,CAAA;MACnD,CAAA,MAAO;AACL,QAAAA,KAAAA,GAAO,cAAA,CAAM,KAAA,EAAO,MAAA,CAAO,QAAQ,IAAI,CAAA;AACzC,MAAA;IACF,CAAA,CAAA,MAAQ;AACN,MAAA;AACF,IAAA;AAEA,IAAA,IAAIA,KAAAA,CAAK,SAAO,EAAI;AAElB,MAAA,MAAM,IAAA,GAAOA,MAAK,IAAA,EAAI;AACtB,MAAA,IAAI,IAAA,GAAO,kBAAkB,IAAA,GAAO,cAAA;AAAgB,QAAA;AAGpD,MAAA,MAAM,UAAA,GACJ,MAAA,CAAO,IAAA,KAAS,cAAA,IAAkB,OAAO,IAAA,IAAQ,UAAA;AAEnD,MAAA,OAAO;QACL,OAAA,EAAS,IAAA;QACT,UAAA,EAAYA,KAAAA;AACZ,QAAA;;AAEJ,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,EAAE,SAAS,KAAA,EAAK;AACzB,CAAA;AASO,IAAM,eAAA,GAAkB,CAC7B,KAAA,EACA,EAAE,kBAAgB,GAAoC;EACpD,gBAAA,EAAkB;AAEH,CAAA,KAAA;AACjB,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO;AACL,MAAA,OAAA,EAAS,mBAAmB,OAAA,GAAU,IAAA;MACtC,SAAA,EAAW;;AAEf,EAAA;AAEA,EAAA,IAAI,cAAA,GAA0B,KAAA;AAQ9B,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,cAAc,CAAA;AASxC,MAAA,cAAA,GAAiB,MAAA;IACnB,CAAA,CAAA,MAAQ;AAER,IAAA;AACF,EAAA;AAMA,EAAA,IACE,cAAA,IACA,OAAO,cAAA,KAAmB,QAAA,IAC1B,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,CAAE,MAAA,KAAW,CAAA,IACvC,OAAA,IAAW,cAAA,EACX;AACA,IAAA,MAAM,iBAAiB,cAAA,CAAe,KAAA;AAEtC,IAAA,MAAMC,WAAAA,GAAa,aAAa,cAAc,CAAA;AAC9C,IAAA,IAAIA,YAAW,OAAA,EAAS;AACtB,MAAA,OAAO;QACL,OAAA,EAASA,WAAAA,CAAW,UAAA,GAChBA,WAAAA,CAAW,UAAA,CAAW,MAAA,CAAO,qBAAqB,CAAA,GAClDA,WAAAA,CAAW,UAAA,CAAW,MAAA,CAAO,YAAY,CAAA;QAC7C,SAAA,EAAWA,WAAAA,CAAW,WAAW,OAAA;;AAErC,IAAA;AAEA,IAAA,OAAO;AACL,MAAA,OAAA,EAAS,OAAO,cAAc,CAAA;MAC9B,SAAA,EAAW;;AAEf,EAAA;AAMA,EAAA,MAAM,UAAA,GAAa,aAAa,cAAc,CAAA;AAC9C,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,OAAO;MACL,OAAA,EAAS,UAAA,CAAW,UAAA,GAChB,UAAA,CAAW,UAAA,CAAW,MAAA,CAAO,qBAAqB,CAAA,GAClD,UAAA,CAAW,UAAA,CAAW,MAAA,CAAO,YAAY,CAAA;MAC7C,SAAA,EAAW,UAAA,CAAW,WAAW,OAAA;;AAErC,EAAA;AAQA,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACtC,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,cAAA,EAAgB,MAAM,CAAC,CAAA;AAC1D,IAAA,OAAO;MACL,OAAA,EAAS,WAAA;MACT,SAAA,EAAW;;AAEf,EAAA;AAEA,EAAA,IAAI,OAAO,mBAAmB,SAAA,EAAW;AACvC,IAAA,OAAO;AACL,MAAA,OAAA,EAAS,OAAO,cAAc,CAAA;AAC9B,MAAA,SAAA,EAAW,iBAAiB,CAAA,GAAI;;AAEpC,EAAA;AAEA,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AAEtC,IAAA,OAAO;AACL,MAAA,OAAA,EACE,cAAA,IAAkB,cAAA,IAClB,cAAA,IAAkB,cAAA,IAClB,MAAA,CAAO,SAAA,CAAU,cAAc,CAAA,GAC3B,MAAA,CAAO,cAAc,CAAA,GACrB,uBAAA,CAAwB,cAAc,CAAA;MAC5C,SAAA,EAAW;;AAEf,EAAA;AAGA,EAAA,OAAO;;AAEL,IAAA,OAAA,EAAS,OAAO,cAAc,CAAA;IAC9B,SAAA,EAAW;;AAEf,CAAA;;;AC3VA,IAAM,sBAAA,GAAyB;AAC7B,EAAA,KAAA,EAAO,EAAE,MAAA;;AAIX,IAAM,yBAAA,GAA4B;AAChC,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;EACpB,YAAA,EAAc,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EACjC,YAAA,EAAc,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EACjC,gBAAA,EAAkB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AACrC,EAAA,YAAA,EAAc,EAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,EAAE,QAAA;;AAG7B,IAAM,kCAAA,GAAqC,CAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;;AAE7E,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;IACrB,GAAG,sBAAA;IACH,GAAG;AACJ,GAAA,CAAA;;AAGD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,WAAW,CAAA;IAC3B,GAAG,sBAAA;IACH,GAAG;AACJ,GAAA,CAAA;;AAGD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,SAAS,CAAA;IACzB,GAAG,sBAAA;IACH,GAAG;AACJ,GAAA,CAAA;;AAGD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;IACrB,GAAG,sBAAA;AACH,IAAA,OAAA,EAAS,EAAE,MAAA,EAAM;AACjB,IAAA,OAAA,EAAS,EAAE,MAAA;AACZ,GAAA;AACF,CAAA,CAAA;AAGM,IAAM,gCAAA,GAAmC,CAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AAC3E,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;IACrB,GAAG,sBAAA;IACH,cAAA,EAAgB,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC3B,IAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,IAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,IAAA,cAAA,EAAgB,EAAE,MAAA,EAAM;IACxB,uBAAA,EAAyB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAC5C,IAAA,WAAA,EAAa,EAAE,MAAA;AAChB,GAAA,CAAA;;AAGD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,WAAW,CAAA;IAC3B,cAAA,EAAgB,CAAA,CAAE,QAAQ,CAAC,CAAA;IAC3B,GAAG,sBAAA;AACH,IAAA,WAAA,EAAa,EAAE,MAAA,EAAM;AACrB,IAAA,YAAA,EAAc,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA;AAChC,IAAA,WAAA,EAAa,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ;AAChC,GAAA,CAAA;;AAGD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,uBAAuB,CAAA;IACvC,GAAG,sBAAA;IACH,cAAA,EAAgB,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC3B,IAAA,WAAA,EAAa,EAAE,MAAA,EAAM;AACrB,IAAA,WAAA,EAAa,EAAE,MAAA,EAAM;AACrB,IAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,IAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,IAAA,cAAA,EAAgB,EAAE,MAAA;AACnB,GAAA,CAAA;;AAGD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,SAAS,CAAA;IACzB,GAAG,sBAAA;IACH,cAAA,EAAgB,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC3B,IAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,IAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,IAAA,gBAAA,EAAkB,EAAE,MAAA,EAAM;AAC1B,IAAA,gBAAA,EAAkB,EAAE,MAAA;AACrB,GAAA,CAAA;;AAED,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAM,CAAA,CAAE,QAAQ,KAAK,CAAA;IACrB,GAAG,sBAAA;IACH,cAAA,EAAgB,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC3B,IAAA,cAAA,EAAgB,EAAE,MAAA,EAAM;AACxB,IAAA,WAAA,EAAa,EAAE,MAAA;AAChB,GAAA;AACF,CAAA,CAAA;AAED,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AACvC,EAAA,EAAA,EAAI,EAAE,MAAA,EAAM;AACZ,EAAA,YAAA,EAAc,EAAE,MAAA,EAAM;AACtB,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,EAAA,GAAA,EAAK,EAAE,MAAA,EAAM;AACb,EAAA,UAAA,EAAY,EAAE,OAAA,EAAO;EACrB,WAAA,EAAa,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,QAAM,EAAI,CAAA,CAAE,OAAA,EAAS,CAAC,CAAA;AACtD,EAAA,SAAA,EAAW,EAAE,OAAA,EAAO;AACpB,EAAA,YAAA,EAAc,EAAE,MAAA,CAAO,CAAA,CAAE,QAAM,EAAI,CAAA,CAAE,SAAS;AAC/C,CAAA,CAAA;AAEM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAC5C,EAAA,GAAG,uBAAA,CAAwB,KAAA;EAC3B,aAAA,EAAe;AAChB,CAAA,CAAA;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAC1C,EAAA,GAAG,uBAAA,CAAwB,KAAA;EAC3B,aAAA,EAAe;AAChB,CAAA,CAAA;AAKM,IAAM,uBAAA,GAA0B,CAAA,CACpC,KAAA,CACC,CAAA,CAAE,MAAA;AACA,EAAA,CAAA,CAAE,MAAA,EAAM;;AACR,EAAA,CAAA,CAAE,KAAA,CAAM;;AAEN,IAAA,CAAA,CAAE,IAAA,EAAI;AACN,IAAA,CAAA,CAAE,OAAO,MAAA,EAAM;;IAEf,CAAA,CAAE,OAAA,GAAU,SAAA,CAAU,CAAC,QAAQ,eAAA,CAAgB,GAAG,EAAE,OAAO;AAC5D,GAAA;AAAC,CACH,CAAA,CAEF,QAAQ,mBAAmB,CAAA;AAIvB,IAAM,6BAAA,GAAgC,sBAAsB,IAAA,CAAK;EACtE,GAAA,EAAK,IAAA;EACL,WAAA,EAAa,IAAA;EACb,SAAA,EAAW,IAAA;EACX,YAAA,EAAc;AACf,CAAA,CAAA;AAEM,IAAM,2BAAA,GAA8B,oBAAoB,IAAA,CAAK;EAClE,GAAA,EAAK,IAAA;EACL,WAAA,EAAa,IAAA;EACb,SAAA,EAAW,IAAA;EACX,YAAA,EAAc;AACf,CAAA,CAAA;AAwCM,IAAM,2BAAA,GAA8B,EACxC,MAAA,CAAO;AACN,EAAA,UAAA,EAAY,EAAE,OAAA,EAAO;AACrB,EAAA,aAAA,EAAe,EAAE,MAAA,EAAM;AACvB,EAAA,YAAA,EAAc,EAAE,MAAA;AACjB,CAAA,CAAA,CACA,QAAA,EAAQ;AAEJ,IAAM,qCAAA,GACX,8BAA8B,MAAA,CAAO;EACnC,IAAA,EAAM,uBAAA;EACN,SAAA,EAAW;AACZ,CAAA,CAAA;AAEI,IAAM,mCAAA,GACX,4BAA4B,MAAA,CAAO;EACjC,IAAA,EAAM,uBAAA;EACN,SAAA,EAAW;AACZ,CAAA,CAAA;;;ACjMI,IAAM,cAAc,CAAA,CACxB,MAAA,CAAO,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAM,CAAG,IAAA,EAAI,EAAI,CAAA,CACpC,OAAA,CAAQ,UAAU,EAAE,IAAA,EAAM,UAAU,CAAA;AAEhC,IAAM,eAAA,GAAkB,EAC5B,MAAA,CAAO,EAAE,YAAY,CAAA,CAAE,MAAA,GAAS,IAAA,CAAK,CAAA,CAAE,OAAO,MAAA,EAAQ,GAAG,CAAA,CACzD,QAAQ,YAAA,EAAc,EAAE,IAAA,EAAM,SAAA,EAAW,CAAA;AAErC,IAAM,QAAA,GAAW,EAAE,MAAA,EAAM,CAAG,KAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA;AAElD,IAAM,aAAA,GAAgB,CAAA,CAC1B,MAAA,CAAO,EAAE,SAAA,EAAW,QAAA,EAAU,CAAA,CAC9B,OAAA,CAAQ,UAAA,EAAY,EAAE,IAAA,EAAM,WAAW,CAAA;AAEnC,IAAM,0BAA0B,WAAA,CAAY;EACjD,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,qCAAA;EACN,WAAA,EAAa,yBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,2CAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,qBAAqB,KAAA;;;;IAInC,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAE6C,WAAA,CAAY;EACxD,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,iDAAA;EACN,WAAA,EAAa,gCAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,qDAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ,CAAA,CAAE,OAAO,EAAE,MAAA,EAAQ,EAAE,MAAA,EAAM,CAAG,QAAA,EAAQ,EAAI;;;;IAIxD,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EACE;;IAEJ,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAE+B,WAAA,CAAY;;EAE1C,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,iCAAA;EACN,WAAA,EAAa,kBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,WAAA;AACR,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,UAAA,EAAY,CAAA,CACT,MAAA,EAAM,CACN,IAAA,CAAK,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,CAAA,CACtB,QAAA,EAAQ,CACR,OAAA,CAAQ;QACP,KAAA,EAAO;UACL,QAAA,EAAU;;QAEZ,IAAA,EAAM;AACP,OAAA;AACJ,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,yBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,WAAA,EAAa,qBAAqB,KAAA,EAAK;AACvC,YAAA,cAAA,EAAgB,8BAA8B,KAAA;AAC/C,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEkC,WAAA,CAAY;;EAE7C,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,gCAAA;EACN,WAAA,EAAa,qBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,WAAA;IACR,KAAA,EAAO;;EAET,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,2CAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAE2B,WAAA,CAAY;EACtC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,wBAAA;EACN,WAAA,EAAa,cAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,yBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,sBAAsB,WAAA,CAAY;EAC7C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,sBAAA;EACN,WAAA,EAAa,qBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;AACT,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,KAAA,EAAO;AACR,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,wBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,0BAA0B,KAAA;;;;IAIxC,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAGM,IAAM,mBAAmB,WAAA,CAAY;EAC1C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,0CAAA;EACN,WAAA,EAAa,sBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,6CAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEM,IAAM,mBAAmB,WAAA,CAAY;EAC1C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,yCAAA;EACN,WAAA,EAAa,kBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,wCAAA;MACb,OAAA,EAAS;QACP,UAAA,EAAY;AACV,UAAA,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,CAAS,qCAAqC;;;;IAIvE,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAE+B,WAAA,CAAY;;EAE1C,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,6BAAA;EACN,WAAA,EAAa,kBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,WAAA;AACR,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,KAAA,EAAO,gBAAA;MACP,KAAA,EAAO,gBAAA;MACP,MAAA,EAAQ,YAAA;MACR,MAAA,EAAQ,iBAAA;MACR,UAAA,EAAY,eAAA,CAAgB,KAAA,CAAM,UAAA,CAAW,OAAA,CAAQ;QACnD,IAAA,EAAM,SAAA;QACN,KAAA,EAAO,EAAE,UAAU,IAAA;AACpB,OAAA;AACF,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,yBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,gBAAgB,WAAA,CAAY;EACvC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,uCAAA;EACN,WAAA,EAAa,mBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,aAAA;AACR,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,OAAA,EAAS,kBAAA;MACT,KAAA,EAAO,gBAAA;MACP,KAAA,EAAO,gBAAA;MACP,MAAA,EAAQ,YAAA;MACR,MAAA,EAAQ;AACT,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,2BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEoC,WAAA,CAAY;;EAE/C,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,8BAAA;EACN,WAAA,EAAa,uBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,WAAA;AACR,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,UAAA,EAAY,CAAA,CACT,QAAM,CACN,IAAA,CAAK,EAAE,MAAA,CAAO,MAAA,EAAQ,CAAA,CACtB,OAAA,CAAQ;QACP,KAAA,EAAO;UACL,QAAA,EAAU;;QAEZ,IAAA,EAAM;AACP,OAAA;AACJ,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,qCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;YACf,KAAA,EAAO,CAAA,CACJ,QAAM,CACN,GAAA,GACA,WAAA,EAAW,CACX,SAAS,kCAAkC;AAC/C,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,oBAAoB,WAAA,CAAY;EAC3C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,wCAAA;EACN,WAAA,EAAa,uBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,uCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;YACf,KAAA,EAAO,CAAA,CACJ,QAAM,CACN,GAAA,GACA,WAAA,EAAW,CACX,SAAS,oCAAoC;AACjD,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAE+B,WAAA,CAAY;;EAE1C,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,yCAAA;EACN,WAAA,EAAa,kBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,gCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,eAAe,QAAA;;;;IAI7B,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEgC,WAAA,CAAY;EAC3C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,2CAAA;EACN,WAAA,EAAa,uBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,6BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,eAAe,QAAA;;;;IAI7B,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAE6B,WAAA,CAAY;;EAExC,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,yCAAA;EACN,WAAA,EAAa,gBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,eAAA;IACR,IAAA,EAAM;MACJ,WAAA,EAAa,gCAAA;MACb,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,WAAA,EAAa,eAAe,KAAA,CAAM;AACnC,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEmC,WAAA,CAAY;EAC9C,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,2CAAA;EACN,WAAA,EAAa,sBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,aAAA;IACR,IAAA,EAAM;MACJ,WAAA,EAAa,gCAAA;MACb,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,WAAA,EAAa,eAAe,KAAA,CAAM;AACnC,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAE6B,WAAA,CAAY;;EAExC,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,QAAA;EACR,IAAA,EAAM,yCAAA;EACN,WAAA,EAAa,gBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEmC,WAAA,CAAY;EAC9C,MAAA,EAAQ,QAAA;EACR,IAAA,EAAM,2CAAA;EACN,WAAA,EAAa,sBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAE6C,WAAA,CAAY;;EAExD,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,+CAAA;EACN,WAAA,EAAa,gCAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,qCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEsC,WAAA,CAAY;EACjD,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,iDAAA;EACN,WAAA,EAAa,6BAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,kCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEwB,WAAA,CAAY;EACnC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,kCAAA;EACN,WAAA,EAAa,eAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,mCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEsC,WAAA,CAAY;EACjD,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,iDAAA;EACN,WAAA,EAAa,6BAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,mCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,GAAG,oBAAA,CAAqB,KAAA;AACxB,YAAA,cAAA,EAAgB,EACb,KAAA,CAAM;AACL,cAAA,6BAAA;AACA,cAAA;AACD,aAAA,CAAA,CACA,KAAA;AACJ,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,aAAa,WAAA,CAAY;EACpC,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,eAAA;EACN,WAAA,EAAa,YAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,IAAA,EAAM;MACJ,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,SAAA,EAAW,EAAE,MAAA,EAAM;YACnB,eAAA,EAAiB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAC7B,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,mBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;YACf,MAAA,EAAQ,CAAA,CAAE,QAAQ,SAAS,CAAA;AAC3B,YAAA,MAAA,EAAQ,EAAE,MAAA;AACX,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,uBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;;;ACj9BD,IAAM,4BAAA,GAA+B,EAClC,MAAA,CAAO;EACN,IAAA,EAAM,CAAA,CAAE,QAAQ,MAAM,CAAA;AACtB,EAAA,OAAA,EAAS,EAAE,MAAA;CACZ,CAAA,CACA,EAAA,CACC,EAAE,MAAA,CAAO;EACP,IAAA,EAAM,CAAA,CAAE,QAAQ,SAAS;CAC1B,CAAC,CAAA;AAMiC,WAAA,CAAY;EACjD,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,6DAAA;EACN,WAAA,EAAa,yBAAA;EACb,OAAA,EAAS;IACP,IAAA,EAAM;MACJ,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,OAAA,EAAS,EAAE,MAAA,EAAM;AACjB,YAAA,YAAA,EAAc,EAAE,MAAA,EAAM;YACtB,kBAAA,EAAoB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAChC,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,yCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,gBAAA,EAAkB,EAAE,MAAA;AACrB,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAE8C,WAAA,CAAY;EACzD,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,oEAAA;EACN,WAAA,EAAa,iCAAA;EACb,OAAA,EAAS;IACP,MAAA,EAAQ,aAAA;AACR,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,KAAA,EAAO,gBAAA;MACP,KAAA,EAAO,gBAAA;MACP,MAAA,EAAQ,YAAA;MACR,MAAA,EAAQ;AACT,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,6CAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEqD,WAAA,CAAY;EAChE,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,6EAAA;EACN,WAAA,EAAa,wCAAA;EACb,OAAA,EAAS;IACP,MAAA,EAAQ,aAAA;AACR,IAAA,KAAA,EAAO,EAAE,MAAA,CAAO;MACd,WAAA,EAAa,CAAA,CAAE,MAAA,EAAM,CAAG,OAAA,CAAQ;QAC9B,KAAA,EAAO;UACL,QAAA,EAAU;;QAEZ,IAAA,EAAM,QAAA;QACN,WAAA,EAAa;AACd,OAAA;AACF,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,wCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS;AAC7B,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,kBAAkB,WAAA,CAAY;EACzC,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,8CAAA;EACN,WAAA,EAAa,iBAAA;EACb,OAAA,EAAS;IACP,IAAA,EAAM;MACJ,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,qBAAA,EAAuB,EAAE,MAAA,EAAM;AAC/B,YAAA,SAAA,EAAW,EAAE,MAAA;AACd,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,gCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,WAAA,EAAa,mBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,iBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAE6B,WAAA,CAAY;EACxC,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,2DAAA;EACN,WAAA,EAAa,gBAAA;EACb,OAAA,EAAS;IACP,IAAA,EAAM;MACJ,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,OAAA,EAAS,EAAE,MAAA,EAAM;AACjB,YAAA,SAAA,EAAW,EAAE,MAAA,EAAM;AACnB,YAAA,KAAA,EAAO,EAAE,MAAA,EAAM;AACf,YAAA,gBAAA,EAAkB,EAAE,MAAA,EAAM;AAC1B,YAAA,YAAA,EAAc,EAAE,MAAA,EAAM;AACtB,YAAA,eAAA,EAAiB,EAAE,MAAA,EAAM;AACzB,YAAA,qBAAA,EAAuB,EAAE,MAAA,EAAM;YAC/B,kBAAA,EAAoB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAChC,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,gCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEkC,WAAA,CAAY;EAC7C,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,iEAAA;EACN,WAAA,EAAa,qBAAA;EACb,OAAA,EAAS;IACP,IAAA,EAAM;MACJ,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,SAAA,EAAW,EAAE,MAAA,EAAM;AACnB,YAAA,OAAA,EAAS,EAAE,MAAA,EAAM;AACjB,YAAA,YAAA,EAAc,EAAE,MAAA,EAAM;YACtB,kBAAA,EAAoB,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAChC,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,iDAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,kBAAA,EAAoB,EAAE,MAAA,EAAM;AAC5B,YAAA,SAAA,EAAW,EAAE,MAAA;AACd,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,kBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;IAIP,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;;;ACnTD,IAAM,4BAAA,GAA+B,EAAE,MAAA,CAAO;AAC5C,EAAA,MAAA,EAAQ,EAAE,MAAA;AACX,CAAA,CAAA;AAED,IAAM,6BAAA,GAAgC,EAAE,MAAA,CAAO;AAC7C,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;AAChB,EAAA,OAAA,EAAS,EAAE,MAAA;AACZ,CAAA,CAAA;AAMM,IAAM,oBAAoB,WAAA,CAAY;EAC3C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,6BAAA;EACN,WAAA,EAAa,mBAAA;EACb,OAAA,EAAS;IACP,KAAA,EAAO;;EAET,SAAA,EAAW;IACT,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;MAGZ,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;MAGL,WAAA,EAAa;;;AAGlB,CAAA,CAAA;AAEsC,WAAA,CAAY;EACjD,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,0BAAA;EACN,WAAA,EAAa,mBAAA;EACb,OAAA,EAAS;IACP,KAAA,EAAO;;EAET,SAAA,EAAW;IACT,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;MAGZ,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;MAGL,WAAA,EAAa;;;AAGlB,CAAA;AAED,IAAM,gCAAA,GAAmC,EAAE,MAAA,CAAO;AAChD,EAAA,MAAA,EAAQ,EAAE,MAAA,EAAM;AAChB,EAAA,WAAA,EAAa,EAAE,MAAA;AAChB,CAAA,CAAA;AAED,IAAM,iCAAA,GAAoC,EAAE,MAAA,CAAO;AACjD,EAAA,WAAA,EAAa,EAAE,MAAA,EAAM;AACrB,EAAA,YAAA,EAAc,EAAE,MAAA;AACjB,CAAA,CAAA;AAMM,IAAM,wBAAwB,WAAA,CAAY;EAC/C,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,oCAAA;EACN,WAAA,EAAa,uBAAA;EACb,OAAA,EAAS;IACP,IAAA,EAAM;MACJ,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;;EAKhB,SAAA,EAAW;IACT,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;MAGZ,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;MAGL,WAAA,EAAa;;;AAGlB,CAAA,CAAA;;;AC/IM,IAAM,wBAAA,GAA2B,CAAA,CAAE,kBAAA,CAAmB,QAAA,EAAU;AACrE,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,MAAA,EAAQ,CAAA,CAAE,QAAQ,OAAO,CAAA;AACzB,IAAA,KAAA,EAAO,EAAE,MAAA;AACV,GAAA,CAAA;AACD,EAAA,CAAA,CAAE,MAAA,CAAO;IACP,MAAA,EAAQ,CAAA,CAAE,QAAQ,SAAS,CAAA;AAC3B,IAAA,MAAA,EAAQ,EAAE,MAAA;AACX,GAAA;AACF,CAAA,CAAA;AAIkC,WAAA,CAAY;EAC7C,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,iBAAA;EACN,WAAA,EAAa,gBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,IAAA,EAAM;MACJ,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,SAAA,EAAW,EAAE,MAAA,EAAM;AACnB,YAAA,iBAAA,EAAmB,CAAA,CAAE,OAAA,EAAO,CAAG,OAAA,CAAQ,IAAI,CAAA;YAC3C,eAAA,EAAiB,CAAA,CACd,KAAK,CAAC,QAAA,EAAU,YAAY,SAAS,CAAC,CAAA,CACtC,OAAA,CAAQ,SAAS;AACrB,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,sBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;;AAKjB,CAAA;;;AC1CD,IAAM,eAAA,GAAkBH,GAAE,MAAA,CAAO;AAC/B,EAAA,SAAA,EAAWA,GAAE,MAAA,EAAM;AACnB,EAAA,SAAA,EAAWA,GAAE,MAAA,CAAOA,EAAAA,CAAE,QAAM,EAAIA,EAAAA,CAAE,QAAQ;AAC3C,CAAA,CAAA;AAEM,IAAM,cAAc,WAAA,CAAY;EACrC,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,uBAAA;EACN,WAAA,EAAa,aAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,IAAA,EAAM;MACJ,QAAA,EAAU,IAAA;MACV,WAAA,EAAa,2BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;;EAKhB,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,SAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,GAAE,MAAA,CAAO,EAAE,OAAOA,EAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,GAAE,MAAA,CAAO,EAAE,OAAOA,EAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,GAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,GAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;;;ACzDM,IAAM,YAAY,MAAe;AACtC,EAAA,OAAO,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,QAAA,KAAa,WAAA;AAC9D,CAAA;AAEO,IAAM,SAAS,MAAe;AACnC,EAAA,OACE,OAAO,YAAY,WAAA,IACnB,OAAO,QAAQ,QAAA,KAAa,QAAA,IAC5B,UAAU,OAAA,CAAQ,QAAA;AAEtB,CAAA;AAEO,IAAM,gBAAgB,MAAe;AAC1C,EAAA,OACE,OAAO,SAAA,KAAc,WAAA,IAAe,SAAA,CAAU,OAAA,KAAY,aAAA;AAE9D,CAAA;AAIO,IAAM,cAAc,MAAoB;AAC7C,EAAA,IAAI,aAAA,IAAiB,OAAO,cAAA;AAC5B,EAAA,IAAI,SAAA,IAAa,OAAO,SAAA;AACxB,EAAA,IAAI,MAAA,IAAU,OAAO,MAAA;AACrB,EAAA,OAAO,SAAA;AACT,CAAA;;;ACxBO,IAAM,wBAAN,MAAoD;AAAA;AAAA,EAEzD,MAAM,QAAQ,GAAA,EAAqC;AACjD,IAAA,IAAI;AACF,MAAA,OAAO,YAAA,CAAa,QAAQ,GAAG,CAAA;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,6DAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,GAAA,EAAa,KAAA,EAA8B;AACvD,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,KAAK,KAAK,CAAA;AAAA,IACjC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,2DAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,WAAW,GAAA,EAA4B;AAC3C,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,gEAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AACF;;;ACxCO,IAAM,uBAAN,MAAmD;AAAA,EAChD,OAAA,uBAAc,GAAA,EAAoB;AAAA;AAAA,EAG1C,MAAM,QAAQ,GAAA,EAAqC;AACjD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,OAAO,KAAA,KAAU,SAAY,KAAA,GAAQ,IAAA;AAAA,EACvC;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,GAAA,EAAa,KAAA,EAA8B;AACvD,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,WAAW,GAAA,EAA4B;AAC3C,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,EACzB;AACF;;;ACbO,IAAM,uBAAuB,MAAoB;AACtD,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,SAAA;AACH,MAAA,OAAO,IAAI,qBAAA,EAAsB;AAAA,IACnC,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,oBAAA,EAAqB;AAAA,IAClC,KAAK,cAAA;AACH,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAChE,KAAK,SAAA;AAAA,IACL;AACE,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,8BAA8B,QAAQ,CAAA,kCAAA;AAAA,OACxC;AACA,MAAA,OAAO,IAAI,oBAAA,EAAqB;AAAA;AAEtC,CAAA;ACnBO,IAAM,UAAA,GAAa,CAAC,KAAA,KAA0B;AACnD,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACjC,EAAA,MAAM,IAAA,GAAOI,OAAO,IAAI,CAAA;AACxB,EAAA,OAAO,MAAM,IAAA,CAAK,IAAI,CAAA,CACnB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACZ,CAAA;;;ACTO,IAAM,YAAA,GAAe,EAAE,MAAA,CAAO;AACnC,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;EACpB,EAAA,EAAI,CAAA,CAAE,MAAA,EAAM,CAAG,IAAA,EAAI;EACnB,KAAA,EAAO,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAC1B,EAAA,UAAA,EAAY,EAAE,MAAA,EAAM;AACpB,EAAA,UAAA,EAAY,EAAE,OAAA,EAAO;AACrB,EAAA,SAAA,EAAW,EAAE,OAAA,EAAO;AACpB,EAAA,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,GAAA,EAAK,CAAA;AACtB,EAAA,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,GAAA,EAAK;AACvB,CAAA,CAAA;AAIM,IAAM,oBAAA,GAAuB,aAAa,IAAA,CAAK;EACpD,UAAA,EAAY,IAAA;EACZ,UAAA,EAAY,IAAA;EACZ,UAAA,EAAY,IAAA;EACZ,UAAA,EAAY;AACb,CAAA,CAAA;AAIM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AACzC,EAAA,EAAA,EAAI,aAAa,KAAA,CAAM,EAAA;EACvB,KAAA,EAAO,YAAA,CAAa,KAAA,CAAM,KAAA,CAAM,QAAA,EAAQ;EACxC,KAAA,EAAO,YAAA,CAAa,KAAA,CAAM,KAAA,CAAM,QAAA,EAAQ;EACxC,KAAA,EAAO,YAAA,CAAa,KAAA,CAAM,KAAA,CAAM,QAAA,EAAQ;EACxC,SAAA,EAAW,YAAA,CAAa,KAAA,CAAM,SAAA,CAAU,QAAA;AACzC,CAAA,CAAA;AAEM,IAAM,kBAAA,GAAqB,aAAa,IAAA,CAAK;EAClD,EAAA,EAAI,IAAA;EACJ,UAAA,EAAY,IAAA;EACZ,UAAA,EAAY,IAAA;EACZ,UAAA,EAAY,IAAA;EACZ,UAAA,EAAY;AACb,CAAA,CAAA,CAAE,MAAA,CAAO;EACR,OAAA,EAAS,CAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AACrB,CAAA,CAAA;AAIM,IAAM,aAAA,GAAgB,YAAA,CAAa,KAAA,CAAM,EAAA,CAAG,QAAQ,UAAA,EAAY;EACrE,IAAA,EAAM,QAAA;EACN,MAAA,EAAQ;AACT,CAAA,CAAA;;;AC1CM,IAAM,eAAe,WAAA,CAAY;EACtC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,kBAAA;EACN,WAAA,EAAa,cAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;AACT,IAAA,KAAA,EAAOJ,EAAE,MAAA,CAAO;MACd,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AACpB,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,oBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQA,CAAAA,CAAE,KAAA,CACR,oBAAA,CAAqB,MAAA,CAAO;AAC1B,YAAA,YAAA,EAAcA,EACX,MAAA,CAAO;AACN,cAAA,OAAA,EAASA,EAAE,MAAA;AACZ,aAAA,CAAA,CACA,KAAA;WACJ,CAAC;;;;IAKV,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEM,IAAM,iBAAiB,WAAA,CAAY;EACxC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,4BAAA;EACN,WAAA,EAAa,gBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;AACT,IAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;MACf,SAAA,EAAW;AACZ,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,8BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,OAAOA,CAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEM,IAAM,eAAe,WAAA,CAAY;EACtC,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,iBAAA;EACN,WAAA,EAAa,cAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,IAAA,EAAM;MACJ,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;;EAKhB,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,oBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,EAAA,EAAIA,EAAE,MAAA;AACP,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,OAAOA,CAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEM,IAAM,eAAe,WAAA,CAAY;EACtC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,4BAAA;EACN,WAAA,EAAa,cAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;AACT,IAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;MACf,SAAA,EAAW;AACZ,KAAA,CAAA;IACD,IAAA,EAAM;MACJ,QAAA,EAAU,IAAA;MACV,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,kBAAA,CAAmB,IAAA,CAAK,EAAE,EAAA,EAAI,MAAM;;;;;EAKpD,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,oBAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;YACf,OAAA,EAASA,CAAAA,CAAE,QAAQ,IAAI;AACxB,WAAA;;;;IAIP,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,OAAOA,CAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEM,IAAM,eAAe,WAAA,CAAY;EACtC,MAAA,EAAQ,QAAA;EACR,IAAA,EAAM,4BAAA;EACN,WAAA,EAAa,cAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;AACT,IAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;MACf,SAAA,EAAW;AACZ,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,OAAOA,CAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAEM,IAAM,mBAAmB,WAAA,CAAY;EAC1C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,+BAAA;EACN,WAAA,EAAa,kBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;AACT,IAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;MACf,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAM,CAAG,IAAA;AACrB,KAAA;;EAEH,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,+BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO,EAAE,OAAOA,CAAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQA,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAOA,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AClQM,IAAM,iBAAA,GAAoBA,EAAE,MAAA,CAAO;AACxC,EAAA,KAAA,EAAOA,EAAE,MAAA,EAAM;AACf,EAAA,WAAA,EAAaA,EAAE,MAAA;AAChB,CAAA,CAAA;AAEM,IAAM,kBAAA,GAAqB,kBAAkB,KAAA,EAAK;ACNlD,IAAM,0BAAA,GAA6BA,CAAAA,CAAE,kBAAA,CAAmB,MAAA,EAAQ;AACrEA,EAAAA,CAAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAMA,CAAAA,CAAE,QAAQ,YAAY,CAAA;AAC5B,IAAA,UAAA,EAAYA,EAAE,MAAA,EAAM;AACpB,IAAA,MAAA,EAAQA,EAAE,MAAA,EAAM;AAChB,IAAA,KAAA,EAAOA,EAAE,MAAA,EAAM;AACf,IAAA,UAAA,EAAYA,EAAE,OAAA,EAAO;IACrB,MAAA,EAAQA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AACpB,GAAA,CAAA;AACDA,EAAAA,CAAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAMA,CAAAA,CAAE,QAAQ,eAAe,CAAA;AAC/B,IAAA,MAAA,EAAQA,EAAE,MAAA,EAAM;AAChB,IAAA,UAAA,EAAYA,EAAE,MAAA,EAAM;AACpB,IAAA,uBAAA,EAAyBA,EAAE,MAAA,EAAM;AACjC,IAAA,KAAA,EAAOA,EAAE,MAAA,EAAM;AACf,IAAA,UAAA,EAAYA,EAAE,OAAA;AACf,GAAA,CAAA;AACDA,EAAAA,CAAAA,CAAE,MAAA,CAAO;IACP,IAAA,EAAMA,CAAAA,CAAE,QAAQ,SAAS;AAC1B,GAAA;AACF,CAAA,CAAA;;;ACf2B,WAAA,CAAY;EACtC,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,gCAAA;EACN,WAAA,EAAa,sBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,iDAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,2BAA2B,KAAA;;;;IAIzC,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,eAAe,WAAA,CAAY;EACtC,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,gCAAA;EACN,WAAA,EAAa,sBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ;;EAEV,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,kCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;;UAElB,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,EAAE,QAAA,EAAU,CAAA,CAAE,WAAA,CAAY,EAAE,CAAA,CAAE,KAAA,EAAK,EAAI;;;;IAI9D,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AAE2B,WAAA,CAAY;EACtC,IAAA,EAAM,IAAA;EACN,MAAA,EAAQ,MAAA;EACR,IAAA,EAAM,qCAAA;EACN,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,WAAA;IACR,IAAA,EAAM;MACJ,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,OAAA,EAAS,EAAE,MAAA;AACZ,WAAA;;;;;EAKT,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,yCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;;;AChIM,IAAM,6BAAA,GAAgC,EAC1C,KAAA,CAAM;AACL,EAAA,mCAAA;AACA,EAAA;AACD,CAAA,CAAA,CACA,QAAQ,uBAAuB,CAAA;AAEA,WAAA,CAAY;EAC5C,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,2CAAA;EACN,WAAA,EAAa,oBAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,CAAA,CACL,OAAO,EAAE,gBAAA,EAAkB,EAAE,MAAA,EAAM,CAAG,KAAK,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,EAAG,CAAA,CAC/D,OAAA,CAAQ,mBAAmB,EAAE,IAAA,EAAM,UAAU;;EAElD,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EAAa,kCAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;UAClB,MAAA,EAAQ;;;;IAId,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA;AAEM,IAAM,4BAA4B,WAAA,CAAY;EACnD,MAAA,EAAQ,KAAA;EACR,IAAA,EAAM,uCAAA;EACN,WAAA,EAAa,2BAAA;EACb,OAAA,EAAS;IACP,OAAA,EAAS,oBAAA;IACT,MAAA,EAAQ,WAAA;AACR,IAAA,KAAA,EAAO,gBAAgB,OAAA;;EAEzB,SAAA,EAAW;IACT,GAAA,EAAK;MACH,WAAA,EACE,+EAAA;MACF,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,4BAA4B,KAAA;;;;IAI1C,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO,EAAE,OAAO,CAAA,CAAE,MAAA,IAAU;;;MAG1C,WAAA,EAAa;;IAEf,GAAA,EAAK;MACH,WAAA,EAAa,0BAAA;MACb,OAAA,EAAS;QACP,kBAAA,EAAoB;AAClB,UAAA,MAAA,EAAQ,EAAE,MAAA,CAAO;AACf,YAAA,KAAA,EAAO,EAAE,MAAA;AACV,WAAA;;;;;AAKV,CAAA,CAAA;AC5GM,IAAM,eAAA,GAAkBA,EAAE,MAAA,CAAO;AACtC,EAAA,EAAA,EAAIA,EAAE,MAAA,EAAM;AACZ,EAAA,OAAA,EAASA,EAAE,MAAA,EAAM;AACjB,EAAA,UAAA,EAAYA,EAAE,MAAA,EAAM;EACpB,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAChC,iBAAA,EAAmBA,CAAAA,CAAE,MAAA,EAAM,CAAG,KAAA,EAAK;EACnC,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAC9B,EAAA,UAAA,EAAYA,EAAE,MAAA,EAAM;AACpB,EAAA,UAAA,EAAYA,EAAE,MAAA,EAAM;AACpB,EAAA,SAAA,EAAWA,EAAE,MAAA,EAAM;EACnB,eAAA,EAAiBA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA;AAC7B,CAAA,CAAA;AAIM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAC5C,EAAA,EAAA,EAAIA,EAAE,MAAA,EAAM;AACZ,EAAA,IAAA,EAAMA,EAAE,MAAA,EAAM;EACd,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAC9B,WAAA,EAAaA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EAChC,eAAA,EAAiBA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;EACpC,aAAA,EAAeA,CAAAA,CAAE,MAAA,EAAM,CAAG,QAAA,EAAQ;AAClC,EAAA,aAAA,EAAeA,EAAE,KAAA,CAAMA,CAAAA,CAAE,OAAA,EAAS,EAAE,QAAA;AACrC,CAAA,CAAA;AAEyC,gBAAgB,MAAA,CAAO;EAC/D,OAAA,EAASA,CAAAA,CAAE,MAAM,qBAAqB;AACvC,CAAA;AAoBM,IAAM,iBAAiB,CAAC,EAC7B,QACA,OAAA,EACA,OAAA,EACA,OAAK,KAMF;AACH,EAAA,MAAM,SAKF,EAAA;AAEJ,EAAA,IAAI,UAAU,MAAA,EAAW;AACvB,IAAA,MAAA,CAAO,KAAA,GAAQ,KAAA;AACjB,EAAA;AAEA,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAClB,EAAA;AAEA,EAAA,MAAM,gBAAgB,OAAA,EAClB,GAAA,CAAI,CAAC,CAAA,KAAM,GAAG,CAAA,CAAE,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,MAAA,GAAS,KAAK,CAAA,CAAE,CAAA,CAChD,KAAK,GAAG,CAAA;AAEX,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAA,CAAO,KAAA,GAAQ,aAAA;AACjB,EAAA;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CACxC,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAK;AACxB,MAAA,IACE,EACE,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,KAAA,KAAU,SAAA,IACjB,OAAO,KAAA,KAAU,QAAA,CAAA;AAGnB,QAAA,OAAO,EAAA;AACT,MAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;IAC5C,CAAC,CAAA,CACA,KAAK,GAAG,CAAA;AAEX,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,MAAA,CAAO,MAAA,GAAS,YAAA;AAClB,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;;;ACxGA,IAAA,eAAA,GAAA;AAAA,EAGE,OAAA,EAAW,OA6Db,CAAA;ACxDO,IAAM,wBAAA,GAAN,cAAuC,oBAAA,CAAsC;AAAA,EAClF,WAAA,CACE,MAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,IAAA,KAAA,CAAM;AAAA,MACJ,GAAG,OAAA;AAAA,MACH,GAAA,EAAK,CAAA,EAAG,MAAM,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAA;AAAA,MACpC,0BAAA,CAA2B,EAAE,QAAA,EAAU,EAAA,EAAI,QAAO,EAAG;AAEnD,QAAA,OAAO,EAAE,IAAA,EAAM,EAAE,OAAA,EAAS,QAAA,CAAS,GAAG,EAAE,CAAA,EAAG,EAAA,EAAI,MAAA,EAAO,EAAE;AAAA,MAC1D;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;ACIO,IAAM,0BAAN,MAA8B;AAAA,EAC3B,SAAA,uBAA4D,GAAA,EAAI;AAAA,EAExE,gBAAA,CACE,IAAA,EACA,QAAA,EACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AAC7B,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,kBAAM,IAAI,KAAK,CAAA;AAAA,IACpC;AAGA,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,IAAI,OAAA,CAAQ,OAAO,OAAA,EAAS;AAC1B,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,eAAe,MAAM;AACzB,QAAA,IAAA,CAAK,mBAAA,CAAoB,MAAM,QAAQ,CAAA;AAAA,MACzC,CAAA;AAEA,MAAA,OAAA,CAAQ,OAAO,gBAAA,CAAiB,OAAA,EAAS,cAAc,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IACvE;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,CAAG,IAAI,QAAoC,CAAA;AAAA,EACpE;AAAA,EAEA,mBAAA,CACE,MACA,QAAA,EACM;AACN,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc,OAAO,QAAoC,CAAA;AACzD,MAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,QAAA,IAAA,CAAK,SAAA,CAAU,OAAO,IAAI,CAAA;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAA,CACE,MACA,MAAA,EACM;AACN,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC7C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,KAAA,GAAQ,EAAE,IAAA,EAAM,MAAA,EAAO;AAE7B,MAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,QAAA,KAAa;AAClC,QAAA,IAAI;AACF,UAAA,QAAA,CAAS,KAAK,CAAA;AAAA,QAChB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,6BAAA,EAAgC,IAAI,CAAA,EAAA,CAAA,EAAM,KAAK,CAAA;AAAA,QAC/D;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACF;;;ACpFO,IAAM,OAAA,GAAU,CAAI,KAAA,KAAqC;AAC9D,EAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAE/B,IAAA,OAAO,OAAA,CAAQ,OAAA,CAAS,KAAA,EAAoB,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,OAAA,CAAQ,QAAQ,KAAU,CAAA;AACnC,CAAA;;;AC4BO,IAAM,iBAAA,GAAoB;AAC1B,IAAM,SAAA,GAAY;;;ACwCzB,IAAM,oBAAoB,eAAA,CAAY,OAAA;AAE/B,IAAM,kBAAA,GAAqB,CAChC,MAAA,EACA,MAAA,KACwB;AACxB,EAAA,MAAM,MAAA,GAAS,eAAA,CAA6B,EAAE,OAAA,EAAS,QAAQ,CAAA;AAC/D,EAAA,MAAA,CAAO,IAAI,YAAY,CAAA;AACvB,EAAA,MAAA,CAAO,GAAA,CAAI,gBAAA,CAAiB,iBAAiB,CAAC,CAAA;AAC9C,EAAA,MAAA,CAAO,GAAA,CAAI,eAAA,CAAgB,MAAM,CAAC,CAAA;AAClC,EAAA,OAAO,MAAA;AACT;AASO,IAAM,oBAAN,MAAwB;AAAA,EACrB,MAAA;AAAA,EACA,SAAA,GAAuB,cAAA;AAAA,EACvB,cAAA,GAAsC,IAAA;AAAA,EACtC,iBAAA;AAAA,EACA,eAAA,GAEG,IAAA;AAAA,EACH,eAAA,GAAkD,IAAA;AAAA,EAClD,WAAA,GAAoC,IAAA;AAAA,EACpC,YAAA,GAAgC,OAAO,SAAS,CAAA;AAAA,EAChD,MAAA,GAAwB,IAAA;AAAA,EACxB,cAAA;AAAA,EACA,MAAA,GAAS,IAAI,uBAAA,EAAwB;AAAA,EACrC,WAAA;AAAA,EAER,WAAA,CACE,QACA,IAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAGd,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,oBAAA,EAAqB;AAEpE,IAAA,IAAA,CAAK,oBAAoB,eAAA,CAAgB;AAAA,MACvC,OAAA,EAAS,KAAK,MAAA,CAAO;AAAA,KACtB,CAAA;AACD,IAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,YAAY,CAAA;AACvC,IAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,8BAAA,EAAgC,CAAA;AAEhE,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,EAAC;AAAA,EAC9B;AAAA,EAEA,MAAA,GAAS;AACP,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,KAAK,cAAA,CAAe,IAAA,CAAK,OAAO,MAAA,EAAQ,IAAA,CAAK,OAAO,MAAM;AAAA,KACpE;AAAA,EACF;AAAA,EAEA,IAAI,SAAA,GAAY;AACd,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,MACpB,MAAA,EAAQ,KAAK,MAAA,CAAO;AAAA,KACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBAAA,CACE,IAAA,EACA,QAAA,EACA,OAAA,EACM;AACN,IAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAA,CACE,MACA,QAAA,EACM;AACN,IAAA,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,IAAA,EAAM,QAAQ,CAAA;AAAA,EAChD;AAAA,EAEA,MAAa,WAAA,GAA6B;AACxC,IAAA,IAAI,IAAA,CAAK,cAAc,OAAA,EAAS;AAC9B,MAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,IACzB;AAEA,IAAA,IAAI,IAAA,CAAK,cAAc,OAAA,EAAS;AAC9B,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAGA,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,WAAA,GAAc,KAAK,eAAA,EAAgB;AAAA,IAC1C;AAEA,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAa,kBAAkB,GAAA,EAA4B;AACzD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,WAAA,KAAgB,GAAA,EAAK;AAErC,IAAA,IAAA,CAAK,OAAO,WAAA,GAAc,GAAA;AAC1B,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,UAAU,CAAA;AACrC,IAAA,MAAM,KAAK,eAAA,EAAgB;AAAA,EAC7B;AAAA,EAEA,IAAW,KAAA,GAAmB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA,EAEA,MAAa,UAAA,GAA8C;AACzD,IAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,UAAA,EAAW;AACrD,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,OAAA,CAAQ,IAAA,CAAK,OAAA;AAEtC,IAAA,OAAO;AAAA,MACL,CAAC,qBAAqB,GAAG,iBAAA;AAAA,MACzB,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAc,YAAA,GAA8B;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,iBAAiB,CAAA;AACtD,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,SAAS,CAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEA,MAAa,MAAA,GAAwB;AACnC,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAM,KAAK,cAAA,CAAe,OAAA,CAAQ,EAAE,KAAA,EAAO,SAAS,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,KAAK,YAAA,EAAa;AAAA,EAC1B;AAAA,EAEO,IAAA,GAAO;AAAA,IACZ,gBAAA,EAAkB,MAAM,IAAA,CAAK,cAAA,EAAgB,gBAAA,EAAiB;AAAA,IAC9D,eAAA,EAAiB,MAAM,IAAA,CAAK,cAAA,EAAgB,gBAAA;AAAiB,GAC/D;AAAA;AAAA;AAAA;AAAA,EAKO,GAAA,GAAM;AAAA,IACX,qBAAA,EAAuB,OAAO,MAAA,KAAmB;AAC/C,MAAA,MAAM,KAAK,WAAA,EAAY;AACvB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC7D,yBAAA,CAA0B,IAAA;AAAA,QAC1B,EAAE,MAAA,EAAQ,EAAE,MAAM,EAAE,MAAA,IAAS;AAAE,OACjC;AACA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,UACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,kBAAA,EAAoB,OAAO,MAAA,KAAmB;AAC5C,MAAA,MAAM,KAAK,WAAA,EAAY;AACvB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC7D,uBAAA,CAAwB,IAAA;AAAA,QACxB,EAAE,MAAA,EAAQ,EAAE,MAAM,EAAE,MAAA,IAAS;AAAE,OACjC;AACA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,UACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IACA,cAAA,EAAgB,OACd,MAAA,GAA6B,EAAC,KACK;AACnC,MAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC7D,mBAAA,CAAoB,IAAA;AAAA,QACpB;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,OAAO,KAAA,IAAS;AAAA;AACzB;AACF;AACF,OACF;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,UACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,UAAA,EAAY,OACV,OAAA,KACgC;AAChC,MAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,IAAA;AAAA,UAC7D,UAAA,CAAW,IAAA;AAAA,UACX;AAAA,YACE,IAAA,EAAM;AAAA,cACJ,WAAW,OAAA,CAAQ,KAAA;AAAA,cACnB,eAAA,EAAiB,KAAK,MAAA,CAAO;AAAA;AAC/B;AACF,SACF;AAEA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO;AAAA,MAC/B,CAAA,MAAO;AACL,QAAA,MAAM,EAAE,SAAA,EAAW,SAAA,EAAU,GAAI,OAAA;AACjC,QAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,IAAA;AAAA,UACtD,WAAA,CAAY,IAAA;AAAA,UACZ;AAAA,YACE,IAAA,EAAM;AAAA,cACJ,SAAA;AAAA,cACA;AAAA;AACF;AACF,SACF;AAEA,QAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,OAAA,EAAS;AACpC,UAAA,MAAM,IAAI,QAAA;AAAA,YACR,MAAM,KAAA,IAAS,wBAAA;AAAA,YACf,QAAA;AAAA,YACA;AAAA,cACE,QAAQ,QAAA,CAAS,MAAA;AAAA,cACjB,YAAY,QAAA,CAAS,UAAA;AAAA,cACrB,KAAK,QAAA,CAAS,GAAA;AAAA,cACd,MAAA,EAAQ;AAAA;AACV,WACF;AAAA,QACF;AAEA,QAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO;AAAA,MAC/B;AAAA,IACF,CAAA;AAAA,IAEA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,OAAO,KAAA,KAAmB;AAC9B,QAAA,MAAM,KAAK,WAAA,EAAY;AACvB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,UAC7D,YAAA,CAAa,IAAA;AAAA,UACb;AAAA,YACE,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,MAAA,EAAQ;AAAA;AACV;AACF;AACF,SACF;AAEA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,qBAAqB,MAAA,CAAO;AAAA,UACjC,YAAA,EAAcA,EACX,MAAA,CAAO;AAAA,YACN,OAAA,EAASA,EAAE,MAAA;AAAO,WACnB,EACA,KAAA;AAAM,SACV,CAAA,CACE,KAAA,EAAM,CACN,MAAM,IAAI,CAAA;AAAA,MACf,CAAA;AAAA,MACA,GAAA,EAAK,OAAO,QAAA,KAAqB;AAC/B,QAAA,MAAM,KAAK,WAAA,EAAY;AACvB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,UAC7D,cAAA,CAAe,IAAA;AAAA,UACf;AAAA,YACE,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM;AAAA,gBACJ,SAAA,EAAW;AAAA;AACb;AACF;AACF,SACF;AAEA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,oBAAA,CAAqB,MAAM,IAAI,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,MAAA,EAAQ,OAAO,IAAA,KAA2B;AACxC,QAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,IAAA;AAAA,UAC7D,YAAA,CAAa,IAAA;AAAA,UACb;AAAA,YACE;AAAA;AACF,SACF;AAEA,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MACA,MAAA,EAAQ,OAAO,IAAA,KAA6C;AAC1D,QAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,UAC7D,YAAA,CAAa,IAAA;AAAA,UACb;AAAA,YACE,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM;AAAA,gBACJ,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,EAAE;AAAA;AAC3B,aACF;AAAA,YACA;AAAA;AACF,SACF;AAEA,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA;AAAA,MAEA,MAAA,EAAQ,OAAO,QAAA,KAAqB;AAClC,QAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,QAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,MAAA;AAAA,UACvD,YAAA,CAAa,IAAA;AAAA,UACb;AAAA,YACE,QAAQ,EAAE,IAAA,EAAM,EAAE,SAAA,EAAW,UAAS;AAAE;AAC1C,SACF;AAEA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAAA,MACF,CAAA;AAAA,MAEA,UAAA,EAAY,OAAO,MAAA,KAAmB;AACpC,QAAA,MAAM,KAAK,WAAA,EAAY;AACvB,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,UAC7D,gBAAA,CAAiB,IAAA;AAAA,UACjB;AAAA,YACE,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM;AAAA,gBACJ,OAAA,EAAS;AAAA;AACX;AACF;AACF,SACF;AAEA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,YACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,YAAY,QAAA,CAAS,UAAA;AAAA,YACrB,KAAK,QAAA,CAAS,GAAA;AAAA,YACd,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,oBAAA,CAAqB,MAAM,IAAI,CAAA;AAAA,MACxC;AAAA,KACF;AAAA,IAEA,gBAAA,EAAkB,OAChB,QAAA,EACA,MAAA,GAA0B,MAAA,KAC6B;AACvD,MAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC7D,gBAAA,CAAiB,IAAA;AAAA,QACjB;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM;AAAA,cACJ,SAAA,EAAW,OAAO,QAAQ;AAAA;AAC5B,WACF;AAAA,UACA,OAAA,EAAS;AAAA;AACX,OACF;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,UACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,kBAAA,GAAqB,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,qBAAqB,CAAA;AACrE,MAAA,MAAM,WAAW,kBAAA,GACb,kBAAA,CAAmB,KAAA,CAAM,WAAW,EAAE,CAAC,CAAA,EAAG,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,IAC1D,CAAA,UAAA,EAAa,QAAQ,CAAA,IAAA,CAAA,GACrB,aAAa,QAAQ,CAAA,IAAA,CAAA;AAEzB,MAAA,OAAO,EAAE,UAAoB,IAAA,EAAW;AAAA,IAC1C,CAAA;AAAA,IAEA,yBAAA,EAA2B,OACzB,OAAA,KACoC;AACpC,MAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,IAAA;AAAA,QAC7D,eAAA,CAAgB,IAAA;AAAA,QAChB;AAAA,UACE,IAAA,EAAM;AAAA,YACJ,uBAAuB,OAAA,CAAQ,mBAAA;AAAA,YAC/B,WAAW,OAAA,CAAQ;AAAA;AACrB;AACF,OACF;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,UACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,gBAAA,EAAkB,CAChB,MAAA,EACA,OAAA,KACG;AACH,MAAA,OAAO,IAAI,wBAAA,CAAyB,IAAA,CAAK,MAAA,CAAO,QAAQ,MAAA,EAAQ;AAAA,QAC9D,GAAG,OAAA;AAAA,QACH,SAAS,YAAY;AACnB,UAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,UAAA,EAAW;AAC1C,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA;AAE9C,UAAA,OAAO;AAAA,YACL,GAAG,OAAA;AAAA,YACH,GAAG;AAAA,WACL;AAAA,QACF;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,eAAA,EAAiB,OAAO,MAAA,KAAmB;AACzC,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,UAAS,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC7D,YAAA,CAAa,IAAA;AAAA,QACb;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM;AAAA,cACJ;AAAA;AACF;AACF;AACF,OACF;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,IAAI,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,QAAA,EAAU;AAAA,UACxC,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,KAAK,QAAA,CAAS,GAAA;AAAA,UACd,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd,CAAA;AAAA,IAEA,eAAA,EAAiB,OACf,QAAA,EACA,EAAE,OAAA,EAAS,OAAO,OAAA,EAAS,OAAA,EAAS,MAAA,EAAO,EAC3C,MAAA,KACG;AACH,MAAA,MAAM,SAAS,cAAA,CAAe,EAAE,OAAO,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAA;AAEjE,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,KAAK,iBAAA,CAAkB,GAAA;AAAA,QACnD,aAAA,CAAc,IAAA;AAAA,QACd;AAAA,UACE,MAAA,EAAQ;AAAA,YACN,IAAA,EAAM;AAAA,cACJ,SAAA,EAAW,SAAS,QAAA;AAAS,aAC/B;AAAA,YACA,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAAA,cAC1B,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,QAAQ,MAAA,CAAO,MAAA;AAAA,cACf,QAAQ,MAAA,CAAO;AAAA;AACjB,WACF;AAAA,UACA;AAAA;AACF,OACF;AAEA,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,CAAA,gCAAA,EAAmC,QAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA;AAAA,SAC7D;AACA,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,QAAQ,CAAA,CAAE,CAAA;AAAA,MAClE;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAA;AAAA,IAEA,SAAA,EAAW,OAAO,QAAA,KAAqB;AACrC,MAAA,MAAM,MAAA,GAAS,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,EAAE,SAAA,EAAW,MAAA,CAAO,QAAQ,CAAA,EAAE,EAAE,EAAE;AACnE,MAAA,MAAM,cAAA,GAAiB,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC5C,gBAAA,CAAiB,IAAA;AAAA,QACjB;AAAA,OACF;AAEA,MAAA,MAAM,eAAA,GAAkB,KAAK,iBAAA,CAAkB,GAAA;AAAA,QAC7C,iBAAA,CAAkB,IAAA;AAAA,QAClB;AAAA,OACF;AAEA,MAAA,MAAM;AAAA,QACJ,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,YAAA,EAAc,UAAU,eAAA,EAAgB;AAAA,QAChE,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,aAAA,EAAe,UAAU,gBAAA;AAAiB,UACjE,MAAM,OAAA,CAAQ,IAAI,CAAC,cAAA,EAAgB,eAAe,CAAC,CAAA;AAEvD,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,IAAI,QAAA,CAAS,YAAA,CAAa,KAAA,EAAO,eAAA,EAAiB;AAAA,UACtD,QAAQ,eAAA,CAAgB,MAAA;AAAA,UACxB,YAAY,eAAA,CAAgB,UAAA;AAAA,UAC5B,KAAK,eAAA,CAAgB,GAAA;AAAA,UACrB,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAM,IAAI,QAAA,CAAS,aAAA,CAAc,KAAA,EAAO,gBAAA,EAAkB;AAAA,UACxD,QAAQ,gBAAA,CAAiB,MAAA;AAAA,UACzB,YAAY,gBAAA,CAAiB,UAAA;AAAA,UAC7B,KAAK,gBAAA,CAAiB,GAAA;AAAA,UACtB,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,QAAA;AAAA,QACA,IAAA,EAAM,KAAK,GAAA,CAAI;AAAA,OACjB;AAAA,IACF;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,GAAiC;AAC7C,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAG5B,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAG7C,MAAA,IAAA,CAAK,wBAAA,CAAyB,OAAA,CAAQ,OAAA,EAAS,OAAA,CAAQ,MAAM,CAAA;AAG7D,MAAA,MAAM,KAAK,oBAAA,EAAqB;AAGhC,MAAA,IAAI,IAAA,CAAK,OAAO,WAAA,EAAa;AAC3B,QAAA,MAAM,KAAK,YAAA,CAAa,IAAA,CAAK,OAAO,WAAA,EAAa,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,MACrE;AAEA,MAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,KAAK,CAAA;AAClD,MAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AACrB,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,iBAAA,GAAoB;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,eAAA,IAAmB,CAAC,KAAK,eAAA,EAAiB;AAClD,MAAA,IAAA,CAAK,eAAA,GAAkB,kBAAA;AAAA,QACrB,KAAK,MAAA,CAAO,MAAA;AAAA,QACZ,KAAK,MAAA,CAAO;AAAA,OACd;AAEA,MAAA,MAAM,EAAE,MAAK,GAAI,MAAM,KAAK,eAAA,CAAgB,GAAA,CAAI,kBAAkB,IAAA,EAAM;AAAA,QACtE,MAAA,EAAQ;AAAA,UACN,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,KAAK,MAAA,CAAO;AAAA;AACtB;AACF,OACD,CAAA;AAED,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,MACnD;AACA,MAAA,IAAA,CAAK,eAAA,GAAkB,IAAA;AAAA,IACzB;AAEA,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA,EAEQ,wBAAA,CAAyB,SAAiB,MAAA,EAAsB;AACtE,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,YAAA,CAAa;AAAA,QACrC,GAAA,EAAK,GAAG,MAAM,CAAA,QAAA,CAAA;AAAA,QACd,UAAA,EAAY,iBAAA;AAAA,QACZ,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAS,IAAA,CAAK,cAAA;AAAA,QACd,GAAG,IAAA,CAAK;AAAA,OACT,CAAA;AAGD,MAAA,IAAA,CAAK,cAAA,CAAe,iBAAA,CAAkB,CAAC,KAAA,EAAO,OAAA,KAAY;AACxD,QAAA,OAAA,CAAQ,KAAA,CAAM,6BAAA,EAA+B,KAAA,EAAO,CAAC,CAAC,OAAO,CAAA;AAE7D,QAAA,IAAI,KAAA,KAAU,WAAA,IAAe,OAAA,EAAS,IAAA,EAAM;AAC1C,UAAA,IAAI,KAAK,MAAA,KAAW,OAAA,CAAQ,KAAK,EAAA,IAAM,IAAA,CAAK,WAAW,IAAA,EAAM;AAC3D,YAAA,IAAA,CAAK,MAAA,CAAO,SAAS,YAAA,EAAc,EAAE,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,UAC5D;AACA,UAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,IAAA,CAAK,EAAA;AAAA,QAC7B;AAGA,QAAA,IAAI,KAAA,KAAU,qBAAqB,OAAA,EAAS;AAC1C,UAAA,OAAA,CAAQ,MAAM,8BAA8B,CAAA;AAC5C,UAAA,IAAA,CAAK,SAAS,OAAO,CAAA;AAAA,QACvB,CAAA,MAAA,IAAW,UAAU,YAAA,EAAc;AACjC,UAAA,OAAA,CAAQ,MAAM,iBAAiB,CAAA;AAC/B,UAAA,KAAK,KAAK,YAAA,EAAa;AACvB,UAAA,IAAA,CAAK,SAAS,cAAc,CAAA;AAAA,QAC9B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEO,MAAA,GAA4B;AACjC,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAA,GAAsC;AAClD,IAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAGA,IAAA,IAAI,IAAA,CAAK,YAAA,KAAiB,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,KAAU,MAAM,IAAA,CAAK,eAAe,UAAA,EAAW;AAE7D,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,WAAA,IAAe,EAAA;AAC/C,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,eAAA;AAAA,QAC9B,IAAA,CAAK,OAAO,WAAA,IAAe,EAAA;AAAA,QAC3B,KAAK,MAAA,CAAO;AAAA,OACd;AAEA,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,MAAA,CAAO,eAAe,YAAA,EAAc;AAC3D,QAAA,OAAA,CAAQ,MAAM,qCAAqC,CAAA;AACnD,QAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,WAAA,IAAe,EAAA;AAAA,MACjD,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,WAAA,EAAa;AAClC,QAAA,OAAA,CAAQ,MAAM,2CAA2C,CAAA;AACzD,QAAA,MAAM,KAAK,aAAA,EAAc;AACzB,QAAA,MAAM,KAAK,qBAAA,EAAsB;AACjC,QAAA,IAAA,CAAK,YAAA,GAAe,KAAK,MAAA,CAAO,WAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,yCAAyC,CAAA;AACvD,QAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,WAAA,IAAe,EAAA;AAAA,MACjD;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,0CAA0C,KAAK,CAAA;AAC7D,MAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,WAAA,IAAe,EAAA;AAC/C,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAA,GAAuC;AACnD,IAAA,IACE,CAAC,KAAK,eAAA,IACN,CAAC,KAAK,cAAA,IACN,CAAC,IAAA,CAAK,MAAA,CAAO,WAAA,EACb;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,KAAK,eAAA,CAAgB,IAAA;AAAA,MAC1C,qBAAA,CAAsB,IAAA;AAAA,MACtB;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,UACpB,WAAA,EAAa,KAAK,MAAA,CAAO;AAAA,SAC3B;AAAA,QACA,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,iBAAA,IAAqB;AAAC;AAC7C,KACF;AAEA,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,IAAA,CAAK,eAAe,UAAA,CAAW;AAAA,MACnC,cAAc,IAAA,CAAK,WAAA;AAAA,MACnB,eAAe,IAAA,CAAK;AAAA,KACrB,CAAA;AAED,IAAA,OAAA,CAAQ,MAAM,wCAAwC,CAAA;AAAA,EACxD;AAAA,EAEQ,8BAAA,GAA6C;AACnD,IAAA,OAAO;AAAA,MACL,SAAA,EAAW,OAAO,EAAE,OAAA,EAAQ,KAAM;AAEhC,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,UAAA,EAAW;AAEtC,QAAA,IAAI,CAAC,KAAK,cAAA,EAAgB;AACxB,UAAA,OAAO,OAAA;AAAA,QACT;AAEA,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,cAAA,CAAe,UAAA,EAAW;AACrD,QAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS;AACzB,UAAA,OAAO,OAAA;AAAA,QACT;AAEA,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,UAAA,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,QAChC;AAEA,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF;AAAA,EAEQ,SAAS,KAAA,EAAwB;AACvC,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,iBAAA,EAAmB,KAAK,CAAA;AAAA,EAC/C;AAAA,EAEQ,cAAA,CAAe,aAAqB,MAAA,EAAwB;AAClE,IAAA,OAAO,UAAA;AAAA,MACL,KAAK,SAAA,CAAU;AAAA,QACb,WAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CAAa,WAAA,EAAqB,MAAA,EAA+B;AACrE,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,MAAM,CAAA;AAC1D,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,SAAA,EAAW,UAAU,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,eAAA,CAAgB,WAAA,EAAqB,MAAA,EAAkC;AAC3E,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,cAAA,CAAe,QAAQ,SAAS,CAAA;AAC7D,IAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AAEvB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,MAAM,CAAA;AACxD,IAAA,OAAO,SAAA,KAAc,QAAA;AAAA,EACvB;AAAA,EAEA,MAAM,aAAA,GAA+B;AACnC,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,SAAS,CAAA;AAAA,EAChD;AACF","file":"index.js","sourcesContent":["import type { Middleware } from \"openapi-fetch\";\n\nexport const HEADER_CLIENT_VERSION = \"X-Client-Version\";\nexport const HEADER_API_KEY = \"X-Api-Key\";\n\nexport class ApiError extends Error {\n extra: unknown;\n response: Response;\n constructor(message: string, response: Response, extra: unknown) {\n super(message);\n this.name = \"ApiError\";\n this.response = response;\n this.extra = extra;\n }\n}\n\nexport const throwOnError: Middleware = {\n async onResponse({ response, request }) {\n if (response.status >= 400) {\n const body = response.headers.get(\"content-type\")?.includes(\"json\")\n ? ((await response.clone().json()) as unknown)\n : await response.clone().text();\n throw new ApiError(\n `[${response.status}] ${request.method} ${request.url}`,\n response,\n {\n body,\n status: response.status,\n statusText: response.statusText,\n url: request.url,\n method: request.method,\n },\n );\n }\n return undefined;\n },\n};\n\nexport const addVersionHeader: (clientVersion: string) => Middleware = (\n clientVersion: string,\n) => {\n return {\n onRequest({ request }) {\n request.headers.set(HEADER_CLIENT_VERSION, clientVersion);\n return request;\n },\n };\n};\n\nexport const addApiKeyHeader: (apiKey: string) => Middleware = (\n apiKey: string,\n) => {\n return {\n onRequest({ request }) {\n request.headers.set(HEADER_API_KEY, apiKey);\n return request;\n },\n };\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nconst ZodTypeKeys = {\n ZodAny: 'any',\n ZodArray: 'array',\n ZodBigInt: 'bigint',\n ZodBoolean: 'boolean',\n ZodDefault: 'default',\n ZodTransform: 'transform',\n ZodEnum: 'enum',\n ZodIntersection: 'intersection',\n ZodLiteral: 'literal',\n ZodNever: 'never',\n ZodNull: 'null',\n ZodNullable: 'nullable',\n ZodNumber: 'number',\n ZodNonOptional: 'nonoptional',\n ZodObject: 'object',\n ZodOptional: 'optional',\n ZodPipe: 'pipe',\n ZodReadonly: 'readonly',\n ZodRecord: 'record',\n ZodString: 'string',\n ZodTuple: 'tuple',\n ZodType: 'type',\n ZodUnion: 'union',\n ZodDiscriminatedUnion: 'union',\n ZodUnknown: 'unknown',\n ZodVoid: 'void',\n ZodDate: 'date',\n};\nfunction isZodType(schema, typeNames) {\n const typeNamesArray = Array.isArray(typeNames) ? typeNames : [typeNames];\n return typeNamesArray.some(typeName => {\n var _a;\n const typeNameMatch = ((_a = schema === null || schema === void 0 ? void 0 : schema.def) === null || _a === void 0 ? void 0 : _a.type) === ZodTypeKeys[typeName];\n if (typeName === 'ZodDiscriminatedUnion') {\n return (typeNameMatch &&\n 'discriminator' in schema.def);\n }\n return typeNameMatch;\n });\n}\nfunction isAnyZodType(schema) {\n return 'def' in schema;\n}\n/**\n * The schema.isNullable() is deprecated. This is the suggested replacement\n * as this was how isNullable operated beforehand.\n */\nfunction isNullableSchema(schema) {\n return schema.safeParse(null).success;\n}\n/**\n * The schema.isOptional() is deprecated. This is the suggested replacement\n * as this was how isOptional operated beforehand.\n */\nfunction isOptionalSchema(schema) {\n return schema.safeParse(undefined).success;\n}\n\nclass $ZodRegistry {\n constructor() {\n this._map = new Map();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n if (this._idmap.has(meta.id)) {\n throw new Error(`ID ${meta.id} already exists in the registry`);\n }\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new Map();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n return { ...pm, ...this._map.get(schema) };\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nfunction registry() {\n return new $ZodRegistry();\n}\n\nfunction isEqual(x, y) {\n if (x === null || x === undefined || y === null || y === undefined) {\n return x === y;\n }\n if (x === y || x.valueOf() === y.valueOf()) {\n return true;\n }\n if (Array.isArray(x)) {\n if (!Array.isArray(y)) {\n return false;\n }\n if (x.length !== y.length) {\n return false;\n }\n }\n // if they are strictly equal, they both need to be object at least\n if (!(x instanceof Object) || !(y instanceof Object)) {\n return false;\n }\n // recursive object equality check\n const keysX = Object.keys(x);\n return (Object.keys(y).every(keyY => keysX.indexOf(keyY) !== -1) &&\n keysX.every(key => isEqual(x[key], y[key])));\n}\nclass ObjectSet {\n constructor() {\n this.buckets = new Map();\n }\n put(value) {\n const hashCode = this.hashCodeOf(value);\n const itemsByCode = this.buckets.get(hashCode);\n if (!itemsByCode) {\n this.buckets.set(hashCode, [value]);\n return;\n }\n const alreadyHasItem = itemsByCode.some(_ => isEqual(_, value));\n if (!alreadyHasItem) {\n itemsByCode.push(value);\n }\n }\n contains(value) {\n const hashCode = this.hashCodeOf(value);\n const itemsByCode = this.buckets.get(hashCode);\n if (!itemsByCode) {\n return false;\n }\n return itemsByCode.some(_ => isEqual(_, value));\n }\n values() {\n return [...this.buckets.values()].flat();\n }\n stats() {\n let totalBuckets = 0;\n let totalValues = 0;\n let collisions = 0;\n for (const bucket of this.buckets.values()) {\n totalBuckets += 1;\n totalValues += bucket.length;\n if (bucket.length > 1) {\n collisions += 1;\n }\n }\n const hashEffectiveness = totalBuckets / totalValues;\n return { totalBuckets, collisions, totalValues, hashEffectiveness };\n }\n hashCodeOf(object) {\n let hashCode = 0;\n if (Array.isArray(object)) {\n for (let i = 0; i < object.length; i++) {\n hashCode ^= this.hashCodeOf(object[i]) * i;\n }\n return hashCode;\n }\n if (typeof object === 'string') {\n for (let i = 0; i < object.length; i++) {\n hashCode ^= object.charCodeAt(i) * i;\n }\n return hashCode;\n }\n if (typeof object === 'number') {\n return object;\n }\n if (typeof object === 'object') {\n for (const [key, value] of Object.entries(object)) {\n hashCode ^= this.hashCodeOf(key) + this.hashCodeOf(value !== null && value !== void 0 ? value : '');\n }\n }\n return hashCode;\n }\n}\n\nfunction isUndefined(value) {\n return value === undefined;\n}\nfunction mapValues(object, mapper) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n result[key] = mapper(value);\n });\n return result;\n}\nfunction omit(object, keys) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n if (!keys.some(keyToOmit => keyToOmit === key)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction omitBy(object, predicate) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n if (!predicate(value, key)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction compact(arr) {\n return arr.filter((elem) => !isUndefined(elem));\n}\nconst objectEquals = isEqual;\nfunction uniq(values) {\n const set = new ObjectSet();\n values.forEach(value => set.put(value));\n return [...set.values()];\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\nfunction sortObjectByKeys(obj) {\n return Object.fromEntries(Object.entries(obj).sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey)));\n}\n\n/**\n * @deprecated This is not really deprecated but this should always be used with\n * caution. Using it may alter the behavior of the library and the generated schemas.\n */\nconst zodToOpenAPIRegistry = registry();\nclass Metadata {\n static collectMetadata(schema, metadata) {\n const currentMetadata = this.getMetadataFromRegistry(schema);\n const _internal = Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata._internal), metadata === null || metadata === void 0 ? void 0 : metadata._internal);\n const param = Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), metadata === null || metadata === void 0 ? void 0 : metadata.param);\n const totalMetadata = Object.assign(Object.assign(Object.assign(Object.assign({}, (Object.keys(_internal).length > 0 ? { _internal } : {})), currentMetadata), metadata), (Object.keys(param).length > 0 ? { param } : {}));\n if (isZodType(schema, [\n 'ZodOptional',\n 'ZodNullable',\n 'ZodDefault',\n 'ZodReadonly',\n 'ZodNonOptional',\n ]) &&\n isAnyZodType(schema._zod.def.innerType)) {\n return this.collectMetadata(schema._zod.def.innerType, totalMetadata);\n }\n if (isZodType(schema, 'ZodPipe')) {\n const inSchema = schema._zod.def.in;\n const outSchema = schema._zod.def.out;\n // meaning preprocess\n if (isZodType(inSchema, 'ZodTransform') && isAnyZodType(outSchema)) {\n return this.collectMetadata(outSchema, totalMetadata);\n }\n if (isAnyZodType(inSchema)) {\n // meaning transform\n return this.collectMetadata(inSchema, totalMetadata);\n }\n }\n return totalMetadata;\n }\n /**\n * @deprecated Use one of `getOpenApiMetadata` or `getInternalMetadata` instead\n */\n static getMetadata(zodSchema) {\n return this.collectMetadata(zodSchema);\n }\n static getOpenApiMetadata(zodSchema) {\n const metadata = this.collectMetadata(zodSchema);\n const _a = metadata !== null && metadata !== void 0 ? metadata : {}, rest = __rest(_a, [\"_internal\"]);\n return rest;\n }\n static getInternalMetadata(zodSchema) {\n var _a;\n return (_a = this.collectMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a._internal;\n }\n static getParamMetadata(zodSchema) {\n const metadata = this.collectMetadata(zodSchema);\n return Object.assign(Object.assign({}, metadata), { \n // A description provided from .openapi() should be taken with higher precedence\n param: Object.assign(Object.assign({}, ((metadata === null || metadata === void 0 ? void 0 : metadata.description) ? { description: metadata.description } : {})), metadata === null || metadata === void 0 ? void 0 : metadata.param) });\n }\n /**\n * A method that omits all custom keys added to the regular OpenAPI\n * metadata properties\n */\n static buildSchemaMetadata(metadata) {\n return omitBy(omit(metadata, ['param', '_internal']), isUndefined);\n }\n static buildParameterMetadata(metadata) {\n return omitBy(metadata, isUndefined);\n }\n static applySchemaMetadata(initialData, metadata) {\n return omitBy(Object.assign(Object.assign({}, initialData), this.buildSchemaMetadata(metadata)), isUndefined);\n }\n static getRefId(zodSchema) {\n var _a;\n return (_a = this.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.refId;\n }\n static unwrapChained(schema) {\n return this.unwrapUntil(schema);\n }\n static getDefaultValue(zodSchema) {\n const unwrapped = this.unwrapUntil(zodSchema, 'ZodDefault');\n return unwrapped === null || unwrapped === void 0 ? void 0 : unwrapped._zod.def.defaultValue;\n }\n static unwrapUntil(schema, typeName) {\n if (typeName && isZodType(schema, typeName)) {\n return schema;\n }\n if (isZodType(schema, [\n 'ZodOptional',\n 'ZodNullable',\n 'ZodDefault',\n 'ZodReadonly',\n 'ZodNonOptional',\n ]) &&\n isAnyZodType(schema._zod.def.innerType)) {\n return this.unwrapUntil(schema._zod.def.innerType, typeName);\n }\n if (isZodType(schema, 'ZodPipe')) {\n const inSchema = schema._zod.def.in;\n const outSchema = schema._zod.def.out;\n // meaning preprocess\n if (isZodType(inSchema, 'ZodTransform') && isAnyZodType(outSchema)) {\n return this.unwrapUntil(outSchema, typeName);\n }\n // meaning transform\n if (isAnyZodType(inSchema)) {\n return this.unwrapUntil(inSchema, typeName);\n }\n }\n return typeName ? undefined : schema;\n }\n static getMetadataFromInternalRegistry(zodSchema) {\n return zodToOpenAPIRegistry.get(zodSchema);\n }\n static getMetadataFromRegistry(zodSchema) {\n const internal = this.getMetadataFromInternalRegistry(zodSchema);\n const general = zodSchema.meta();\n if (!internal) {\n return general;\n }\n const { _internal } = internal, rest = __rest(internal, [\"_internal\"]);\n const _a = general !== null && general !== void 0 ? general : {}, { id, title } = _a, restGeneral = __rest(_a, [\"id\", \"title\"]);\n return Object.assign(Object.assign(Object.assign({ _internal: Object.assign(Object.assign({}, (id ? { refId: id } : {})), _internal) }, rest), (title ? { description: title } : {})), restGeneral);\n }\n static setMetadataInRegistry(zodSchema, metadata) {\n zodToOpenAPIRegistry.add(zodSchema, metadata);\n }\n}\n\nfunction preserveMetadataFromModifier(zodSchema, modifier) {\n const zodModifier = zodSchema[modifier];\n if (typeof zodModifier !== 'function') {\n return;\n }\n zodSchema[modifier] = function (...args) {\n const result = zodModifier.apply(this, args);\n const meta = Metadata.getMetadataFromRegistry(this);\n if (meta) {\n Metadata.setMetadataInRegistry(result, meta);\n }\n return result;\n };\n}\nfunction extendZodWithOpenApi(zod) {\n if (typeof zod.ZodType.prototype.openapi !== 'undefined') {\n // This zod instance is already extended with the required methods,\n // doing it again will just result in multiple wrapper methods for\n // `optional` and `nullable`\n return;\n }\n zod.ZodType.prototype.openapi = function (...args) {\n const { refId, metadata, options } = getOpenApiConfiguration(...args);\n const _a = metadata !== null && metadata !== void 0 ? metadata : {}, { param } = _a, restOfOpenApi = __rest(_a, [\"param\"]);\n const allMetadata = Metadata.getMetadataFromRegistry(this);\n const _b = allMetadata !== null && allMetadata !== void 0 ? allMetadata : {}, { _internal: internalMetadata } = _b, currentMetadata = __rest(_b, [\"_internal\"]);\n const _internal = Object.assign(Object.assign(Object.assign({}, internalMetadata), options), (refId ? { refId } : undefined));\n const resultMetadata = Object.assign(Object.assign(Object.assign({}, currentMetadata), restOfOpenApi), ((currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param) || param\n ? {\n param: Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), param),\n }\n : undefined));\n // We need to create a new instance of the schema so that sequential\n // calls to .openapi from keys do not override each other\n // See the test in metadata-overrides.spec.ts (only adds overrides for new metadata properties)\n const result = new this.constructor(this._def);\n Metadata.setMetadataInRegistry(result, Object.assign(Object.assign({}, (Object.keys(_internal).length > 0 ? { _internal } : undefined)), resultMetadata));\n if (isZodType(result, 'ZodObject')) {\n const currentMetadata = Metadata.getMetadataFromRegistry(result);\n const originalExtend = result.extend;\n result.extend = function (...args) {\n const extendedResult = originalExtend.apply(result, args);\n const _a = currentMetadata !== null && currentMetadata !== void 0 ? currentMetadata : {}, { _internal } = _a, rest = __rest(_a, [\"_internal\"]);\n Metadata.setMetadataInRegistry(extendedResult, {\n _internal: {\n extendedFrom: (_internal === null || _internal === void 0 ? void 0 : _internal.refId)\n ? { refId: _internal.refId, schema: result }\n : _internal === null || _internal === void 0 ? void 0 : _internal.extendedFrom,\n },\n });\n // This is hacky. Yes we can do that directly in the meta call above,\n // but that would not override future calls to .extend. That's why\n // we call openapi explicitly here. And in that case might as well add the metadata\n // here instead of through the meta call\n return extendedResult.openapi(rest);\n };\n preserveMetadataFromModifier(result, 'catchall');\n }\n preserveMetadataFromModifier(result, 'optional');\n preserveMetadataFromModifier(result, 'nullable');\n preserveMetadataFromModifier(result, 'default');\n preserveMetadataFromModifier(result, 'transform');\n preserveMetadataFromModifier(result, 'refine');\n preserveMetadataFromModifier(result, 'length');\n preserveMetadataFromModifier(result, 'min');\n preserveMetadataFromModifier(result, 'max');\n const originalMeta = result.meta;\n result.meta = function (...args) {\n const result = originalMeta.apply(this, args);\n if (args[0]) {\n const meta = Metadata.getMetadataFromInternalRegistry(this);\n if (meta) {\n Metadata.setMetadataInRegistry(result, Object.assign(Object.assign({}, meta), args[0]));\n }\n }\n return result;\n };\n return result;\n };\n}\nfunction getOpenApiConfiguration(refOrOpenapi, metadataOrOptions, options) {\n if (typeof refOrOpenapi === 'string') {\n return {\n refId: refOrOpenapi,\n metadata: metadataOrOptions,\n options,\n };\n }\n return {\n refId: undefined,\n metadata: refOrOpenapi,\n options: metadataOrOptions,\n };\n}\n\nfunction getOpenApiMetadata(zodSchema) {\n var _a;\n return omitBy((_a = Metadata.getOpenApiMetadata(zodSchema)) !== null && _a !== void 0 ? _a : {}, isUndefined);\n}\nfunction getRefId(zodSchema) {\n return Metadata.getRefId(zodSchema);\n}\n\nclass OpenAPIRegistry {\n constructor(parents) {\n this.parents = parents;\n this._definitions = [];\n }\n get definitions() {\n var _a, _b;\n const parentDefinitions = (_b = (_a = this.parents) === null || _a === void 0 ? void 0 : _a.flatMap(par => par._definitions)) !== null && _b !== void 0 ? _b : [];\n return [...parentDefinitions, ...this._definitions];\n }\n /**\n * Registers a new component schema under /components/schemas/${name}\n */\n register(refId, zodSchema) {\n const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n this._definitions.push({ type: 'schema', schema: schemaWithRefId });\n return schemaWithRefId;\n }\n /**\n * Registers a new parameter schema under /components/parameters/${name}\n */\n registerParameter(refId, zodSchema) {\n var _a, _b, _c;\n const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n const currentMetadata = (_a = Metadata.getOpenApiMetadata(schemaWithRefId)) !== null && _a !== void 0 ? _a : {};\n const schemaWithMetadata = schemaWithRefId.openapi(Object.assign(Object.assign({}, currentMetadata), { param: Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), { name: (_c = (_b = currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : refId }) }));\n this._definitions.push({\n type: 'parameter',\n schema: schemaWithMetadata,\n });\n return schemaWithMetadata;\n }\n /**\n * Registers a new path that would be generated under paths:\n */\n registerPath(route) {\n this._definitions.push({\n type: 'route',\n route,\n });\n }\n /**\n * Registers a new webhook that would be generated under webhooks:\n */\n registerWebhook(webhook) {\n this._definitions.push({\n type: 'webhook',\n webhook,\n });\n }\n /**\n * Registers a raw OpenAPI component. Use this if you have a simple object instead of a Zod schema.\n *\n * @param type The component type, e.g. `schemas`, `responses`, `securitySchemes`, etc.\n * @param name The name of the object, it is the key under the component\n * type in the resulting OpenAPI document\n * @param component The actual object to put there\n */\n registerComponent(type, name, component) {\n this._definitions.push({\n type: 'component',\n componentType: type,\n name,\n component,\n });\n return {\n name,\n ref: { $ref: `#/components/${type}/${name}` },\n };\n }\n schemaWithRefId(refId, zodSchema) {\n return zodSchema.openapi(refId);\n }\n}\n\nclass ZodToOpenAPIError {\n constructor(message) {\n this.message = message;\n }\n}\nclass ConflictError extends ZodToOpenAPIError {\n constructor(message, data) {\n super(message);\n this.data = data;\n }\n}\nclass MissingParameterDataError extends ZodToOpenAPIError {\n constructor(data) {\n super(`Missing parameter data, please specify \\`${data.missingField}\\` and other OpenAPI parameter props using the \\`param\\` field of \\`schema.openapi\\``);\n this.data = data;\n }\n}\nfunction enhanceMissingParametersError(action, paramsToAdd) {\n try {\n return action();\n }\n catch (error) {\n if (error instanceof MissingParameterDataError) {\n throw new MissingParameterDataError(Object.assign(Object.assign({}, error.data), paramsToAdd));\n }\n throw error;\n }\n}\nclass UnknownZodTypeError extends ZodToOpenAPIError {\n constructor(data) {\n super(`Unknown zod object type, please specify \\`type\\` and other OpenAPI props using \\`schema.openapi\\`.`);\n this.data = data;\n }\n}\n\nclass ArrayTransformer {\n transform(zodSchema, mapNullableType, mapItems) {\n var _a, _b, _c, _d;\n const itemType = zodSchema.def.element;\n const minItems = (_b = (_a = zodSchema.def.checks) === null || _a === void 0 ? void 0 : _a.find((check) => check._zod.def.check === 'min_length')) === null || _b === void 0 ? void 0 : _b._zod.def.minimum;\n const maxItems = (_d = (_c = zodSchema.def.checks) === null || _c === void 0 ? void 0 : _c.find((check) => check._zod.def.check === 'max_length')) === null || _d === void 0 ? void 0 : _d._zod.def.maximum;\n return Object.assign(Object.assign({}, mapNullableType('array')), { items: isAnyZodType(itemType) ? mapItems(itemType) : {}, minItems,\n maxItems });\n }\n}\n\nclass BigIntTransformer {\n transform(mapNullableType) {\n return Object.assign(Object.assign({}, mapNullableType('string')), { pattern: `^\\d+$` });\n }\n}\n\nclass DiscriminatedUnionTransformer {\n transform(zodSchema, isNullable, mapNullableOfArray, mapItem, generateSchemaRef) {\n const options = [...zodSchema.def.options];\n const optionSchema = options.map(mapItem);\n if (isNullable) {\n return {\n oneOf: mapNullableOfArray(optionSchema, isNullable),\n };\n }\n const discriminator = zodSchema._zod.def.discriminator;\n if (!discriminator) {\n console.error('No discriminator found for discriminated union', zodSchema);\n return {\n oneOf: optionSchema,\n };\n }\n return {\n oneOf: optionSchema,\n discriminator: this.mapDiscriminator(options, discriminator, generateSchemaRef),\n };\n }\n mapDiscriminator(zodObjects, discriminator, generateSchemaRef) {\n // All schemas must be registered to use a discriminator\n if (zodObjects.some(obj => Metadata.getRefId(obj) === undefined)) {\n return undefined;\n }\n const mapping = {};\n zodObjects.forEach(obj => {\n var _a;\n const refId = Metadata.getRefId(obj); // type-checked earlier\n const value = (_a = obj.def.shape) === null || _a === void 0 ? void 0 : _a[discriminator];\n if (isZodType(value, 'ZodEnum')) {\n // Native enums have their keys as both number and strings however the number is an\n // internal representation and the string is the access point for a documentation\n const keys = Object.values(value._zod.def.entries).filter(isString);\n keys.forEach((enumValue) => {\n mapping[enumValue] = generateSchemaRef(refId);\n });\n return;\n }\n const literalValue = value === null || value === void 0 ? void 0 : value.def.values[0];\n // This should never happen because Zod checks the disciminator type but to keep the types happy\n if (typeof literalValue !== 'string') {\n throw new Error(`Discriminator ${discriminator} could not be found in one of the values of a discriminated union`);\n }\n mapping[literalValue] = generateSchemaRef(refId);\n });\n return {\n propertyName: discriminator,\n mapping,\n };\n }\n}\n\n/**\n * Numeric enums have a reverse mapping https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n * whereas string ones don't.\n *\n * This function checks if an enum is fully numeric - i.e all values are numbers or not.\n * And filters out only the actual enum values when a reverse mapping is apparent.\n */\nfunction enumInfo(enumObject) {\n const keysExceptReverseMappings = Object.keys(enumObject).filter(key => typeof enumObject[enumObject[key]] !== 'number');\n const values = keysExceptReverseMappings.map(key => enumObject[key]);\n const numericCount = values.filter(_ => typeof _ === 'number').length;\n const type = numericCount === 0\n ? 'string'\n : numericCount === values.length\n ? 'numeric'\n : 'mixed';\n return { values, type };\n}\n\nclass EnumTransformer {\n transform(zodSchema, mapNullableType) {\n const { type, values } = enumInfo(zodSchema._zod.def.entries);\n if (type === 'mixed') {\n // enum Test {\n // A = 42,\n // B = 'test',\n // }\n //\n // const result = z.nativeEnum(Test).parse('42');\n //\n // This is an error, so we can't just say it's a 'string'\n throw new ZodToOpenAPIError('Enum has mixed string and number values, please specify the OpenAPI type manually');\n }\n return Object.assign(Object.assign({}, mapNullableType(type === 'numeric' ? 'integer' : 'string')), { enum: values });\n }\n}\n\nclass IntersectionTransformer {\n transform(zodSchema, isNullable, mapNullableOfArray, mapItem) {\n const subtypes = this.flattenIntersectionTypes(zodSchema);\n const allOfSchema = {\n allOf: subtypes.map(mapItem),\n };\n if (isNullable) {\n return {\n anyOf: mapNullableOfArray([allOfSchema], isNullable),\n };\n }\n return allOfSchema;\n }\n flattenIntersectionTypes(schema) {\n if (!isZodType(schema, 'ZodIntersection')) {\n return [schema];\n }\n const leftSubTypes = isAnyZodType(schema._zod.def.left)\n ? this.flattenIntersectionTypes(schema._zod.def.left)\n : [];\n const rightSubTypes = isAnyZodType(schema._zod.def.right)\n ? this.flattenIntersectionTypes(schema._zod.def.right)\n : [];\n return [...leftSubTypes, ...rightSubTypes];\n }\n}\n\nclass LiteralTransformer {\n constructor() {\n this.bigIntTransformer = new BigIntTransformer();\n }\n transform(zodSchema, mapNullableType) {\n const type = typeof zodSchema.def.values[0];\n if (type === 'boolean' ||\n type === 'number' ||\n type === 'string' ||\n type === 'object') {\n return Object.assign(Object.assign({}, mapNullableType(type)), { enum: [zodSchema.def.values[0]] });\n }\n if (type === 'bigint') {\n return this.bigIntTransformer.transform(mapNullableType);\n }\n // Zod doesn't really support anything else anyways\n return mapNullableType('null');\n }\n}\n\nclass NumberTransformer {\n transform(zodSchema, mapNullableType, getNumberChecks) {\n var _a;\n return Object.assign(Object.assign(Object.assign({}, mapNullableType('number')), mapNullableType(zodSchema.format === 'safeint' ? 'integer' : 'number')), getNumberChecks((_a = zodSchema.def.checks) !== null && _a !== void 0 ? _a : []));\n }\n}\n\nclass ObjectTransformer {\n transform(zodSchema, defaultValue, mapNullableType, mapItem) {\n var _a;\n const extendedFrom = (_a = Metadata.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.extendedFrom;\n const required = this.requiredKeysOf(zodSchema);\n const properties = mapValues(zodSchema.def.shape, mapItem);\n if (!extendedFrom) {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, mapNullableType('object')), { properties, default: defaultValue }), (required.length > 0 ? { required } : {})), this.generateAdditionalProperties(zodSchema, mapItem));\n }\n const parent = extendedFrom.schema;\n // We want to generate the parent schema so that it can be referenced down the line\n mapItem(parent);\n const keysRequiredByParent = this.requiredKeysOf(parent);\n const propsOfParent = mapValues(parent === null || parent === void 0 ? void 0 : parent.def.shape, mapItem);\n const propertiesToAdd = Object.fromEntries(Object.entries(properties).filter(([key, type]) => {\n return !objectEquals(propsOfParent[key], type);\n }));\n const additionallyRequired = required.filter(prop => !keysRequiredByParent.includes(prop));\n const objectData = Object.assign(Object.assign(Object.assign(Object.assign({}, mapNullableType('object')), { default: defaultValue, properties: propertiesToAdd }), (additionallyRequired.length > 0\n ? { required: additionallyRequired }\n : {})), this.generateAdditionalProperties(zodSchema, mapItem));\n return {\n allOf: [\n { $ref: `#/components/schemas/${extendedFrom.refId}` },\n objectData,\n ],\n };\n }\n generateAdditionalProperties(zodSchema, mapItem) {\n const catchallSchema = zodSchema.def.catchall;\n if (!catchallSchema) {\n return {};\n }\n if (isZodType(catchallSchema, 'ZodNever')) {\n return { additionalProperties: false };\n }\n if (isAnyZodType(catchallSchema)) {\n return { additionalProperties: mapItem(catchallSchema) };\n }\n return {};\n }\n requiredKeysOf(objectSchema) {\n return Object.entries(objectSchema.def.shape)\n .filter(([_key, type]) => !isOptionalSchema(type))\n .map(([key, _type]) => key);\n }\n}\n\nclass RecordTransformer {\n transform(zodSchema, mapNullableType, mapItem) {\n const propertiesType = zodSchema.valueType;\n const keyType = zodSchema.keyType;\n const propertiesSchema = isAnyZodType(propertiesType)\n ? mapItem(propertiesType)\n : {};\n if (isZodType(keyType, 'ZodEnum')) {\n // Native enums have their keys as both number and strings however the number is an\n // internal representation and the string is the access point for a documentation\n const keys = Object.values(keyType._zod.def.entries).filter(isString);\n const properties = keys.reduce((acc, curr) => (Object.assign(Object.assign({}, acc), { [curr]: propertiesSchema })), {});\n return Object.assign(Object.assign({}, mapNullableType('object')), { properties });\n }\n return Object.assign(Object.assign({}, mapNullableType('object')), { additionalProperties: propertiesSchema });\n }\n}\n\nfunction isZodCheckLengthEquals(check) {\n return check._zod.def.check === 'length_equals';\n}\nfunction isZodCheckRegex(check) {\n return (check._zod.def.check === 'string_format' &&\n check._zod.def.format === 'regex');\n}\nclass StringTransformer {\n transform(zodSchema, mapNullableType) {\n var _a, _b, _c, _d;\n const regexCheck = (_a = zodSchema.def.checks) === null || _a === void 0 ? void 0 : _a.find(isZodCheckRegex);\n // toString generates an additional / at the beginning and end of the pattern\n const pattern = regexCheck === null || regexCheck === void 0 ? void 0 : regexCheck._zod.def.pattern.toString().replace(/^\\/|\\/$/g, '');\n const check = (_b = zodSchema.def.checks) === null || _b === void 0 ? void 0 : _b.find(isZodCheckLengthEquals);\n const length = check === null || check === void 0 ? void 0 : check._zod.def.length;\n const maxLength = Number.isFinite(zodSchema.minLength)\n ? (_c = zodSchema.minLength) !== null && _c !== void 0 ? _c : undefined\n : undefined;\n const minLength = Number.isFinite(zodSchema.maxLength)\n ? (_d = zodSchema.maxLength) !== null && _d !== void 0 ? _d : undefined\n : undefined;\n return Object.assign(Object.assign({}, mapNullableType('string')), { \n // FIXME: https://github.com/colinhacks/zod/commit/d78047e9f44596a96d637abb0ce209cd2732d88c\n minLength: length !== null && length !== void 0 ? length : maxLength, maxLength: length !== null && length !== void 0 ? length : minLength, format: this.mapStringFormat(zodSchema), pattern });\n }\n /**\n * Attempts to map Zod strings to known formats\n * https://json-schema.org/understanding-json-schema/reference/string.html#built-in-formats\n */\n mapStringFormat(zodString) {\n if (zodString.format === 'uuid')\n return 'uuid';\n if (zodString.format === 'email')\n return 'email';\n if (zodString.format === 'url')\n return 'uri';\n if (zodString.format === 'date')\n return 'date';\n if (zodString.format === 'datetime')\n return 'date-time';\n if (zodString.format === 'cuid')\n return 'cuid';\n if (zodString.format === 'cuid2')\n return 'cuid2';\n if (zodString.format === 'ulid')\n return 'ulid';\n if (zodString.format === 'ipv4')\n return 'ip';\n if (zodString.format === 'ipv6')\n return 'ip';\n if (zodString.format === 'emoji')\n return 'emoji';\n return undefined;\n }\n}\n\nclass TupleTransformer {\n constructor(versionSpecifics) {\n this.versionSpecifics = versionSpecifics;\n }\n transform(zodSchema, mapNullableType, mapItem) {\n const items = zodSchema._zod.def.items;\n const schemas = items.map(item => isAnyZodType(item) ? mapItem(item) : {});\n return Object.assign(Object.assign({}, mapNullableType('array')), this.versionSpecifics.mapTupleItems(schemas));\n }\n}\n\nclass UnionTransformer {\n constructor(options) {\n this.options = options;\n }\n transform(zodSchema, mapNullableOfArray, mapItem) {\n var _a, _b, _c;\n const internalMetadata = Metadata.getInternalMetadata(zodSchema);\n const preferredType = (_c = (_a = internalMetadata === null || internalMetadata === void 0 ? void 0 : internalMetadata.unionPreferredType) !== null && _a !== void 0 ? _a : (_b = this.options) === null || _b === void 0 ? void 0 : _b.unionPreferredType) !== null && _c !== void 0 ? _c : 'anyOf';\n const options = this.flattenUnionTypes(zodSchema);\n const schemas = options.map(schema => {\n // If any of the underlying schemas of a union is .nullable then the whole union\n // would be nullable. `mapNullableOfArray` would place it where it belongs.\n // Therefor we are stripping the additional nullables from the inner schemas\n // See https://github.com/asteasolutions/zod-to-openapi/issues/149\n const optionToGenerate = this.unwrapNullable(schema);\n return mapItem(optionToGenerate);\n });\n return {\n [preferredType]: mapNullableOfArray(schemas),\n };\n }\n flattenUnionTypes(schema) {\n if (!isZodType(schema, 'ZodUnion')) {\n return [schema];\n }\n const options = schema.def.options;\n return options.flatMap(option => isAnyZodType(option) ? this.flattenUnionTypes(option) : []);\n }\n unwrapNullable(schema) {\n if (isZodType(schema, 'ZodNullable')) {\n const unwrapped = schema.unwrap();\n if (isAnyZodType(unwrapped)) {\n return this.unwrapNullable(unwrapped);\n }\n }\n return schema;\n }\n}\n\nclass DateTransformer {\n transform(mapNullableType) {\n return Object.assign(Object.assign({}, mapNullableType('string')), { format: 'date' });\n }\n}\n\nclass OpenApiTransformer {\n constructor(versionSpecifics, options) {\n this.versionSpecifics = versionSpecifics;\n this.objectTransformer = new ObjectTransformer();\n this.stringTransformer = new StringTransformer();\n this.numberTransformer = new NumberTransformer();\n this.bigIntTransformer = new BigIntTransformer();\n this.dateTransformer = new DateTransformer();\n this.literalTransformer = new LiteralTransformer();\n this.enumTransformer = new EnumTransformer();\n this.arrayTransformer = new ArrayTransformer();\n this.discriminatedUnionTransformer = new DiscriminatedUnionTransformer();\n this.intersectionTransformer = new IntersectionTransformer();\n this.recordTransformer = new RecordTransformer();\n this.tupleTransformer = new TupleTransformer(versionSpecifics);\n this.unionTransformer = new UnionTransformer(options);\n }\n transform(zodSchema, isNullable, mapItem, generateSchemaRef, defaultValue) {\n if (isZodType(zodSchema, 'ZodNull')) {\n return this.versionSpecifics.nullType;\n }\n if (isZodType(zodSchema, 'ZodUnknown') || isZodType(zodSchema, 'ZodAny')) {\n return this.versionSpecifics.mapNullableType(undefined, isNullable);\n }\n if (isZodType(zodSchema, 'ZodObject')) {\n return this.objectTransformer.transform(zodSchema, defaultValue, // verified on TS level from input\n // verified on TS level from input\n _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n const schema = this.transformSchemaWithoutDefault(zodSchema, isNullable, mapItem, generateSchemaRef);\n return Object.assign(Object.assign({}, schema), { default: defaultValue });\n }\n transformSchemaWithoutDefault(zodSchema, isNullable, mapItem, generateSchemaRef) {\n if (isZodType(zodSchema, 'ZodUnknown') || isZodType(zodSchema, 'ZodAny')) {\n return this.versionSpecifics.mapNullableType(undefined, isNullable);\n }\n if (isZodType(zodSchema, 'ZodString')) {\n return this.stringTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodNumber')) {\n return this.numberTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable), _ => this.versionSpecifics.getNumberChecks(_));\n }\n if (isZodType(zodSchema, 'ZodBigInt')) {\n return this.bigIntTransformer.transform(schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodBoolean')) {\n return this.versionSpecifics.mapNullableType('boolean', isNullable);\n }\n if (isZodType(zodSchema, 'ZodLiteral')) {\n return this.literalTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodEnum')) {\n return this.enumTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodArray')) {\n return this.arrayTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodTuple')) {\n return this.tupleTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n // Note: It is important that this goes above the union transformer\n // because the discriminated union is still a union\n if (isZodType(zodSchema, 'ZodDiscriminatedUnion')) {\n return this.discriminatedUnionTransformer.transform(zodSchema, isNullable, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem, generateSchemaRef);\n }\n if (isZodType(zodSchema, 'ZodUnion')) {\n return this.unionTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodIntersection')) {\n return this.intersectionTransformer.transform(zodSchema, isNullable, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodRecord')) {\n return this.recordTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodDate')) {\n return this.dateTransformer.transform(_ => this.versionSpecifics.mapNullableType(_, isNullable));\n }\n const refId = Metadata.getRefId(zodSchema);\n throw new UnknownZodTypeError({\n currentSchema: zodSchema.def,\n schemaName: refId,\n });\n }\n}\n\nclass OpenAPIGenerator {\n constructor(definitions, versionSpecifics, options) {\n this.definitions = definitions;\n this.versionSpecifics = versionSpecifics;\n this.options = options;\n this.schemaRefs = {};\n this.paramRefs = {};\n this.pathRefs = {};\n this.rawComponents = [];\n this.openApiTransformer = new OpenApiTransformer(versionSpecifics, options);\n this.sortDefinitions();\n }\n generateDocumentData() {\n this.definitions.forEach(definition => this.generateSingle(definition));\n return {\n components: this.buildComponents(),\n paths: this.pathRefs,\n };\n }\n generateComponents() {\n this.definitions.forEach(definition => this.generateSingle(definition));\n return {\n components: this.buildComponents(),\n };\n }\n buildComponents() {\n var _a, _b, _c, _d;\n const rawComponents = {};\n this.rawComponents.forEach(({ componentType, name, component }) => {\n var _a;\n (_a = rawComponents[componentType]) !== null && _a !== void 0 ? _a : (rawComponents[componentType] = {});\n rawComponents[componentType][name] = component;\n });\n const allSchemas = Object.assign(Object.assign({}, ((_a = rawComponents.schemas) !== null && _a !== void 0 ? _a : {})), this.schemaRefs);\n const schemas = ((_b = this.options) === null || _b === void 0 ? void 0 : _b.sortComponents) === 'alphabetically'\n ? sortObjectByKeys(allSchemas)\n : allSchemas;\n const allParameters = Object.assign(Object.assign({}, ((_c = rawComponents.parameters) !== null && _c !== void 0 ? _c : {})), this.paramRefs);\n const parameters = ((_d = this.options) === null || _d === void 0 ? void 0 : _d.sortComponents) === 'alphabetically'\n ? sortObjectByKeys(allParameters)\n : allParameters;\n return Object.assign(Object.assign({}, rawComponents), { schemas, parameters });\n }\n sortObjectKeys(object) { }\n sortDefinitions() {\n const generationOrder = [\n 'schema',\n 'parameter',\n 'component',\n 'route',\n ];\n this.definitions.sort((left, right) => {\n // No type means \"plain zod schema\" => it comes as highest priority based on the array above\n if (!('type' in left)) {\n if (!('type' in right)) {\n return 0;\n }\n return -1;\n }\n if (!('type' in right)) {\n return 1;\n }\n const leftIndex = generationOrder.findIndex(type => type === left.type);\n const rightIndex = generationOrder.findIndex(type => type === right.type);\n return leftIndex - rightIndex;\n });\n }\n generateSingle(definition) {\n if (!('type' in definition)) {\n this.generateSchemaWithRef(definition);\n return;\n }\n switch (definition.type) {\n case 'parameter':\n this.generateParameterDefinition(definition.schema);\n return;\n case 'schema':\n this.generateSchemaWithRef(definition.schema);\n return;\n case 'route':\n this.generateSingleRoute(definition.route);\n return;\n case 'component':\n this.rawComponents.push(definition);\n return;\n }\n }\n generateParameterDefinition(zodSchema) {\n const refId = Metadata.getRefId(zodSchema);\n const result = this.generateParameter(zodSchema);\n if (refId) {\n this.paramRefs[refId] = result;\n }\n return result;\n }\n getParameterRef(schema, external) {\n const metadata = Metadata.getOpenApiMetadata(schema);\n const internalMetadata = Metadata.getInternalMetadata(schema);\n const parameterMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n const existingRef = (internalMetadata === null || internalMetadata === void 0 ? void 0 : internalMetadata.refId)\n ? this.paramRefs[internalMetadata.refId]\n : undefined;\n if (!(internalMetadata === null || internalMetadata === void 0 ? void 0 : internalMetadata.refId) || !existingRef) {\n return undefined;\n }\n if ((parameterMetadata && existingRef.in !== parameterMetadata.in) ||\n ((external === null || external === void 0 ? void 0 : external.in) && existingRef.in !== external.in)) {\n throw new ConflictError(`Conflicting location for parameter ${existingRef.name}`, {\n key: 'in',\n values: compact([\n existingRef.in,\n external === null || external === void 0 ? void 0 : external.in,\n parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in,\n ]),\n });\n }\n if ((parameterMetadata && existingRef.name !== parameterMetadata.name) ||\n ((external === null || external === void 0 ? void 0 : external.name) && existingRef.name !== (external === null || external === void 0 ? void 0 : external.name))) {\n throw new ConflictError(`Conflicting names for parameter`, {\n key: 'name',\n values: compact([\n existingRef.name,\n external === null || external === void 0 ? void 0 : external.name,\n parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.name,\n ]),\n });\n }\n return {\n $ref: `#/components/parameters/${internalMetadata.refId}`,\n };\n }\n generateInlineParameters(zodSchema, location) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const parameterMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n const referencedSchema = this.getParameterRef(zodSchema, { in: location });\n if (referencedSchema) {\n return [referencedSchema];\n }\n if (isZodType(zodSchema, 'ZodObject')) {\n const propTypes = zodSchema.def.shape;\n const parameters = Object.entries(propTypes).map(([key, schema]) => {\n var _a;\n const innerMetadata = Metadata.getOpenApiMetadata(schema);\n const referencedSchema = this.getParameterRef(schema, {\n in: location,\n name: key,\n });\n if (referencedSchema) {\n return referencedSchema;\n }\n const innerParameterMetadata = innerMetadata === null || innerMetadata === void 0 ? void 0 : innerMetadata.param;\n if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.name) &&\n innerParameterMetadata.name !== key) {\n throw new ConflictError(`Conflicting names for parameter`, {\n key: 'name',\n values: [key, innerParameterMetadata.name],\n });\n }\n if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.in) &&\n innerParameterMetadata.in !== location) {\n throw new ConflictError(`Conflicting location for parameter ${(_a = innerParameterMetadata.name) !== null && _a !== void 0 ? _a : key}`, {\n key: 'in',\n values: [location, innerParameterMetadata.in],\n });\n }\n return this.generateParameter(schema.openapi({ param: { name: key, in: location } }));\n });\n return parameters;\n }\n if ((parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in) && parameterMetadata.in !== location) {\n throw new ConflictError(`Conflicting location for parameter ${parameterMetadata.name}`, {\n key: 'in',\n values: [location, parameterMetadata.in],\n });\n }\n return [\n this.generateParameter(zodSchema.openapi({ param: { in: location } })),\n ];\n }\n generateSimpleParameter(zodSchema) {\n const metadata = Metadata.getParamMetadata(zodSchema);\n const paramMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n // TODO: Why are we not unwrapping here for isNullable as well?\n const required = !isOptionalSchema(zodSchema) && !isNullableSchema(zodSchema);\n const schema = this.generateSchemaWithRef(zodSchema);\n return Object.assign({ schema,\n required }, (paramMetadata ? Metadata.buildParameterMetadata(paramMetadata) : {}));\n }\n generateParameter(zodSchema) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const paramMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n const paramName = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.name;\n const paramLocation = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.in;\n if (!paramName) {\n throw new MissingParameterDataError({ missingField: 'name' });\n }\n if (!paramLocation) {\n throw new MissingParameterDataError({\n missingField: 'in',\n paramName,\n });\n }\n const baseParameter = this.generateSimpleParameter(zodSchema);\n return Object.assign(Object.assign({}, baseParameter), { in: paramLocation, name: paramName });\n }\n generateSchemaWithMetadata(zodSchema) {\n const innerSchema = Metadata.unwrapChained(zodSchema);\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const defaultValue = Metadata.getDefaultValue(zodSchema);\n const result = (metadata === null || metadata === void 0 ? void 0 : metadata.type)\n ? { type: metadata.type }\n : this.toOpenAPISchema(innerSchema, isNullableSchema(zodSchema), defaultValue);\n return metadata\n ? Metadata.applySchemaMetadata(result, metadata)\n : omitBy(result, isUndefined);\n }\n /**\n * Same as above but applies nullable\n */\n constructReferencedOpenAPISchema(zodSchema) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const innerSchema = Metadata.unwrapChained(zodSchema);\n const defaultValue = Metadata.getDefaultValue(zodSchema);\n const isNullable = isNullableSchema(zodSchema);\n if (metadata === null || metadata === void 0 ? void 0 : metadata.type) {\n return this.versionSpecifics.mapNullableType(metadata.type, isNullable);\n }\n return this.toOpenAPISchema(innerSchema, isNullable, defaultValue);\n }\n /**\n * Generates an OpenAPI SchemaObject or a ReferenceObject with all the provided metadata applied\n */\n generateSimpleSchema(zodSchema) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const refId = Metadata.getRefId(zodSchema);\n if (!refId || !this.schemaRefs[refId]) {\n return this.generateSchemaWithMetadata(zodSchema);\n }\n const schemaRef = this.schemaRefs[refId];\n const referenceObject = {\n $ref: this.generateSchemaRef(refId),\n };\n // Metadata provided from .openapi() that is new to what we had already registered\n const newMetadata = omitBy(Metadata.buildSchemaMetadata(metadata !== null && metadata !== void 0 ? metadata : {}), (value, key) => value === undefined || objectEquals(value, schemaRef[key]));\n // Do not calculate schema metadata overrides if type is provided in .openapi\n // https://github.com/asteasolutions/zod-to-openapi/pull/52/files/8ff707fe06e222bc573ed46cf654af8ee0b0786d#r996430801\n if (newMetadata.type) {\n return {\n allOf: [referenceObject, newMetadata],\n };\n }\n // New metadata from zodSchema properties.\n const newSchemaMetadata = omitBy(this.constructReferencedOpenAPISchema(zodSchema), (value, key) => value === undefined || objectEquals(value, schemaRef[key]));\n const appliedMetadata = Metadata.applySchemaMetadata(newSchemaMetadata, newMetadata);\n if (Object.keys(appliedMetadata).length > 0) {\n return {\n allOf: [referenceObject, appliedMetadata],\n };\n }\n return referenceObject;\n }\n /**\n * Same as `generateSchema` but if the new schema is added into the\n * referenced schemas, it would return a ReferenceObject and not the\n * whole result.\n *\n * Should be used for nested objects, arrays, etc.\n */\n generateSchemaWithRef(zodSchema) {\n const refId = Metadata.getRefId(zodSchema);\n const result = this.generateSimpleSchema(zodSchema);\n if (refId && this.schemaRefs[refId] === undefined) {\n this.schemaRefs[refId] = result;\n return { $ref: this.generateSchemaRef(refId) };\n }\n return result;\n }\n generateSchemaRef(refId) {\n return `#/components/schemas/${refId}`;\n }\n getRequestBody(requestBody) {\n if (!requestBody) {\n return;\n }\n const { content } = requestBody, rest = __rest(requestBody, [\"content\"]);\n const requestBodyContent = this.getBodyContent(content);\n return Object.assign(Object.assign({}, rest), { content: requestBodyContent });\n }\n getParameters(request) {\n if (!request) {\n return [];\n }\n const { headers } = request;\n const query = this.cleanParameter(request.query);\n const params = this.cleanParameter(request.params);\n const cookies = this.cleanParameter(request.cookies);\n const queryParameters = enhanceMissingParametersError(() => (query ? this.generateInlineParameters(query, 'query') : []), { location: 'query' });\n const pathParameters = enhanceMissingParametersError(() => (params ? this.generateInlineParameters(params, 'path') : []), { location: 'path' });\n const cookieParameters = enhanceMissingParametersError(() => (cookies ? this.generateInlineParameters(cookies, 'cookie') : []), { location: 'cookie' });\n const headerParameters = enhanceMissingParametersError(() => {\n if (Array.isArray(headers)) {\n return headers.flatMap(header => this.generateInlineParameters(header, 'header'));\n }\n const cleanHeaders = this.cleanParameter(headers);\n return cleanHeaders\n ? this.generateInlineParameters(cleanHeaders, 'header')\n : [];\n }, { location: 'header' });\n return [\n ...pathParameters,\n ...queryParameters,\n ...headerParameters,\n ...cookieParameters,\n ];\n }\n cleanParameter(schema) {\n if (!schema) {\n return undefined;\n }\n if (isZodType(schema, 'ZodPipe')) {\n const inSchema = schema._zod.def.in;\n const outSchema = schema._zod.def.out;\n // meaning transform\n if (isZodType(inSchema, 'ZodObject')) {\n return this.cleanParameter(inSchema);\n }\n // meaning preprocess\n if (isZodType(outSchema, 'ZodObject')) {\n return this.cleanParameter(outSchema);\n }\n return undefined;\n }\n return schema;\n }\n generatePath(route) {\n const { method, path, request, responses } = route, pathItemConfig = __rest(route, [\"method\", \"path\", \"request\", \"responses\"]);\n const generatedResponses = mapValues(responses, response => {\n return this.getResponse(response);\n });\n const parameters = enhanceMissingParametersError(() => this.getParameters(request), { route: `${method} ${path}` });\n const requestBody = this.getRequestBody(request === null || request === void 0 ? void 0 : request.body);\n const routeDoc = {\n [method]: Object.assign(Object.assign(Object.assign(Object.assign({}, pathItemConfig), (parameters.length > 0\n ? {\n parameters: [...(pathItemConfig.parameters || []), ...parameters],\n }\n : {})), (requestBody ? { requestBody } : {})), { responses: generatedResponses }),\n };\n return routeDoc;\n }\n generateSingleRoute(route) {\n const routeDoc = this.generatePath(route);\n this.pathRefs[route.path] = Object.assign(Object.assign({}, this.pathRefs[route.path]), routeDoc);\n return routeDoc;\n }\n getResponse(response) {\n if (this.isReferenceObject(response)) {\n return response;\n }\n const { content, headers } = response, rest = __rest(response, [\"content\", \"headers\"]);\n const responseContent = content\n ? { content: this.getBodyContent(content) }\n : {};\n if (!headers) {\n return Object.assign(Object.assign({}, rest), responseContent);\n }\n const responseHeaders = isZodType(headers, 'ZodObject')\n ? this.getResponseHeaders(headers)\n : // This is input data so it is okay to cast in the common generator\n // since this is the user's responsibility to keep it correct\n headers;\n return Object.assign(Object.assign(Object.assign({}, rest), { headers: responseHeaders }), responseContent);\n }\n isReferenceObject(schema) {\n return '$ref' in schema;\n }\n getResponseHeaders(headers) {\n const schemaShape = headers.def.shape;\n const responseHeaders = mapValues(schemaShape, _ => this.generateSimpleParameter(_));\n return responseHeaders;\n }\n getBodyContent(content) {\n return mapValues(content, config => {\n if (!config || !isAnyZodType(config.schema)) {\n return config;\n }\n const { schema: configSchema } = config, rest = __rest(config, [\"schema\"]);\n const schema = this.generateSchemaWithRef(configSchema);\n return Object.assign({ schema }, rest);\n });\n }\n toOpenAPISchema(zodSchema, isNullable, defaultValue) {\n const result = this.openApiTransformer.transform(zodSchema, isNullable, _ => this.generateSchemaWithRef(_), _ => this.generateSchemaRef(_), defaultValue);\n return result;\n }\n}\n\nclass OpenApiGeneratorV30Specifics {\n get nullType() {\n return { nullable: true };\n }\n mapNullableOfArray(objects, isNullable) {\n if (isNullable) {\n return [...objects, this.nullType];\n }\n return objects;\n }\n mapNullableType(type, isNullable) {\n return Object.assign(Object.assign({}, (type ? { type } : undefined)), (isNullable ? this.nullType : undefined));\n }\n mapTupleItems(schemas) {\n const uniqueSchemas = uniq(schemas);\n return {\n items: uniqueSchemas.length === 1\n ? uniqueSchemas[0]\n : { anyOf: uniqueSchemas },\n minItems: schemas.length,\n maxItems: schemas.length,\n };\n }\n getNumberChecks(checks) {\n return Object.assign({}, ...checks.map(check => {\n switch (check._zod.def.check) {\n case 'greater_than': {\n const greaterThanCheck = check;\n return greaterThanCheck._zod.def.inclusive\n ? { minimum: Number(greaterThanCheck._zod.def.value) }\n : {\n minimum: Number(greaterThanCheck._zod.def.value),\n exclusiveMinimum: true,\n };\n }\n case 'less_than': {\n const lessThanCheck = check;\n return lessThanCheck._zod.def.inclusive\n ? { maximum: Number(lessThanCheck._zod.def.value) }\n : {\n maximum: Number(lessThanCheck._zod.def.value),\n exclusiveMaximum: !lessThanCheck._zod.def.inclusive,\n };\n }\n default:\n return {};\n }\n }));\n }\n}\n\nclass OpenApiGeneratorV3 {\n constructor(definitions, options) {\n const specifics = new OpenApiGeneratorV30Specifics();\n this.generator = new OpenAPIGenerator(definitions, specifics, options);\n }\n generateDocument(config) {\n const baseData = this.generator.generateDocumentData();\n return Object.assign(Object.assign({}, config), baseData);\n }\n generateComponents() {\n return this.generator.generateComponents();\n }\n}\n\nclass OpenApiGeneratorV31Specifics {\n get nullType() {\n return { type: 'null' };\n }\n mapNullableOfArray(objects, isNullable) {\n if (isNullable) {\n return [...objects, this.nullType];\n }\n return objects;\n }\n mapNullableType(type, isNullable) {\n if (!type) {\n // 'null' is considered a type in Open API 3.1.0 => not providing a type includes null\n return {};\n }\n // Open API 3.1.0 made the `nullable` key invalid and instead you use type arrays\n if (isNullable) {\n return {\n type: Array.isArray(type) ? [...type, 'null'] : [type, 'null'],\n };\n }\n return {\n type,\n };\n }\n mapTupleItems(schemas) {\n return {\n prefixItems: schemas,\n };\n }\n getNumberChecks(checks) {\n return Object.assign({}, ...checks.map(check => {\n switch (check._zod.def.check) {\n case 'greater_than': {\n const greaterThanCheck = check;\n return greaterThanCheck._zod.def.inclusive\n ? { minimum: Number(greaterThanCheck._zod.def.value) }\n : { exclusiveMinimum: Number(greaterThanCheck._zod.def.value) };\n }\n case 'less_than': {\n const lessThanCheck = check;\n return lessThanCheck._zod.def.inclusive\n ? { maximum: Number(lessThanCheck._zod.def.value) }\n : { exclusiveMaximum: Number(lessThanCheck._zod.def.value) };\n }\n default:\n return {};\n }\n }));\n }\n}\n\nfunction isWebhookDefinition(definition) {\n return 'type' in definition && definition.type === 'webhook';\n}\nclass OpenApiGeneratorV31 {\n constructor(definitions, options) {\n this.definitions = definitions;\n this.webhookRefs = {};\n const specifics = new OpenApiGeneratorV31Specifics();\n this.generator = new OpenAPIGenerator(this.definitions, specifics, options);\n }\n generateDocument(config) {\n const baseDocument = this.generator.generateDocumentData();\n this.definitions\n .filter(isWebhookDefinition)\n .forEach(definition => this.generateSingleWebhook(definition.webhook));\n return Object.assign(Object.assign(Object.assign({}, config), baseDocument), { webhooks: this.webhookRefs });\n }\n generateComponents() {\n return this.generator.generateComponents();\n }\n generateSingleWebhook(route) {\n const routeDoc = this.generator.generatePath(route);\n this.webhookRefs[route.path] = Object.assign(Object.assign({}, this.webhookRefs[route.path]), routeDoc);\n return routeDoc;\n }\n}\n\nexport { OpenAPIRegistry, OpenApiGeneratorV3, OpenApiGeneratorV31, extendZodWithOpenApi, getOpenApiMetadata, getRefId, zodToOpenAPIRegistry };\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/index.ts\nimport {\n OpenAPIRegistry,\n OpenApiGeneratorV3,\n OpenApiGeneratorV31,\n extendZodWithOpenApi,\n getOpenApiMetadata\n} from \"@asteasolutions/zod-to-openapi\";\nimport { zValidator } from \"@hono/zod-validator\";\nimport { Hono } from \"hono\";\nimport { mergePath } from \"hono/utils/url\";\nimport { z } from \"zod\";\n\n// src/zod-typeguard.ts\nfunction isObject(x) {\n return typeof x === \"object\" && x !== null;\n}\nfunction isZod(x) {\n if (!x) return false;\n if (!isObject(x)) return false;\n return typeof x.parse === \"function\" && typeof x.safeParse === \"function\" && typeof x.parseAsync === \"function\" && typeof x.safeParseAsync === \"function\";\n}\n\n// src/index.ts\nvar OpenAPIHono = class _OpenAPIHono extends Hono {\n openAPIRegistry;\n defaultHook;\n constructor(init) {\n super(init);\n this.openAPIRegistry = new OpenAPIRegistry();\n this.defaultHook = init?.defaultHook;\n }\n /**\n *\n * @param {RouteConfig} route - The route definition which you create with `createRoute()`.\n * @param {Handler} handler - The handler. If you want to return a JSON object, you should specify the status code with `c.json()`.\n * @param {Hook} hook - Optional. The hook method defines what it should do after validation.\n * @example\n * app.openapi(\n * route,\n * (c) => {\n * // ...\n * return c.json(\n * {\n * age: 20,\n * name: 'Young man',\n * },\n * 200 // You should specify the status code even if it's 200.\n * )\n * },\n * (result, c) => {\n * if (!result.success) {\n * return c.json(\n * {\n * code: 400,\n * message: 'Custom Message',\n * },\n * 400\n * )\n * }\n * }\n *)\n */\n openapi = ({ middleware: routeMiddleware, hide, ...route }, handler, hook = this.defaultHook) => {\n if (!hide) {\n this.openAPIRegistry.registerPath(route);\n }\n const validators = [];\n if (route.request?.query) {\n const validator = zValidator(\"query\", route.request.query, hook);\n validators.push(validator);\n }\n if (route.request?.params) {\n const validator = zValidator(\"param\", route.request.params, hook);\n validators.push(validator);\n }\n if (route.request?.headers) {\n const validator = zValidator(\"header\", route.request.headers, hook);\n validators.push(validator);\n }\n if (route.request?.cookies) {\n const validator = zValidator(\"cookie\", route.request.cookies, hook);\n validators.push(validator);\n }\n const bodyContent = route.request?.body?.content;\n if (bodyContent) {\n for (const mediaType of Object.keys(bodyContent)) {\n if (!bodyContent[mediaType]) {\n continue;\n }\n const schema = bodyContent[mediaType][\"schema\"];\n if (!isZod(schema)) {\n continue;\n }\n if (isJSONContentType(mediaType)) {\n const validator = zValidator(\"json\", schema, hook);\n if (route.request?.body?.required) {\n validators.push(validator);\n } else {\n const mw = async (c, next) => {\n if (c.req.header(\"content-type\")) {\n if (isJSONContentType(c.req.header(\"content-type\"))) {\n return await validator(c, next);\n }\n }\n c.req.addValidatedData(\"json\", {});\n await next();\n };\n validators.push(mw);\n }\n }\n if (isFormContentType(mediaType)) {\n const validator = zValidator(\"form\", schema, hook);\n if (route.request?.body?.required) {\n validators.push(validator);\n } else {\n const mw = async (c, next) => {\n if (c.req.header(\"content-type\")) {\n if (isFormContentType(c.req.header(\"content-type\"))) {\n return await validator(c, next);\n }\n }\n c.req.addValidatedData(\"form\", {});\n await next();\n };\n validators.push(mw);\n }\n }\n }\n }\n const middleware = routeMiddleware ? Array.isArray(routeMiddleware) ? routeMiddleware : [routeMiddleware] : [];\n this.on(\n [route.method],\n route.path.replaceAll(/\\/{(.+?)}/g, \"/:$1\"),\n ...middleware,\n ...validators,\n handler\n );\n return this;\n };\n getOpenAPIDocument = (objectConfig, generatorConfig) => {\n const generator = new OpenApiGeneratorV3(this.openAPIRegistry.definitions, generatorConfig);\n const document = generator.generateDocument(objectConfig);\n return this._basePath ? addBasePathToDocument(document, this._basePath) : document;\n };\n getOpenAPI31Document = (objectConfig, generatorConfig) => {\n const generator = new OpenApiGeneratorV31(this.openAPIRegistry.definitions, generatorConfig);\n const document = generator.generateDocument(objectConfig);\n return this._basePath ? addBasePathToDocument(document, this._basePath) : document;\n };\n doc = (path, configureObject, configureGenerator) => {\n return this.get(path, (c) => {\n const objectConfig = typeof configureObject === \"function\" ? configureObject(c) : configureObject;\n const generatorConfig = typeof configureGenerator === \"function\" ? configureGenerator(c) : configureGenerator;\n try {\n const document = this.getOpenAPIDocument(objectConfig, generatorConfig);\n return c.json(document);\n } catch (e) {\n return c.json(e, 500);\n }\n });\n };\n doc31 = (path, configureObject, configureGenerator) => {\n return this.get(path, (c) => {\n const objectConfig = typeof configureObject === \"function\" ? configureObject(c) : configureObject;\n const generatorConfig = typeof configureGenerator === \"function\" ? configureGenerator(c) : configureGenerator;\n try {\n const document = this.getOpenAPI31Document(objectConfig, generatorConfig);\n return c.json(document);\n } catch (e) {\n return c.json(e, 500);\n }\n });\n };\n route(path, app) {\n const pathForOpenAPI = path.replaceAll(/:([^\\/]+)/g, \"{$1}\");\n super.route(path, app);\n if (!(app instanceof _OpenAPIHono)) {\n return this;\n }\n app.openAPIRegistry.definitions.forEach((def) => {\n switch (def.type) {\n case \"component\":\n return this.openAPIRegistry.registerComponent(def.componentType, def.name, def.component);\n case \"route\": {\n this.openAPIRegistry.registerPath({\n ...def.route,\n path: mergePath(\n pathForOpenAPI,\n // @ts-expect-error _basePath is private\n app._basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"),\n def.route.path\n )\n });\n return;\n }\n case \"webhook\": {\n this.openAPIRegistry.registerWebhook({\n ...def.webhook,\n path: mergePath(\n pathForOpenAPI,\n // @ts-expect-error _basePath is private\n app._basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"),\n def.webhook.path\n )\n });\n return;\n }\n case \"schema\":\n return this.openAPIRegistry.register(\n getOpenApiMetadata(def.schema)._internal?.refId,\n def.schema\n );\n case \"parameter\":\n return this.openAPIRegistry.registerParameter(\n getOpenApiMetadata(def.schema)._internal?.refId,\n def.schema\n );\n default: {\n const errorIfNotExhaustive = def;\n throw new Error(`Unknown registry type: ${errorIfNotExhaustive}`);\n }\n }\n });\n return this;\n }\n basePath(path) {\n return new _OpenAPIHono({ ...super.basePath(path), defaultHook: this.defaultHook });\n }\n};\nvar createRoute = (routeConfig) => {\n const route = {\n ...routeConfig,\n getRoutingPath() {\n return routeConfig.path.replaceAll(/\\/{(.+?)}/g, \"/:$1\");\n }\n };\n return Object.defineProperty(route, \"getRoutingPath\", { enumerable: false });\n};\nextendZodWithOpenApi(z);\nfunction addBasePathToDocument(document, basePath) {\n const updatedPaths = {};\n Object.keys(document.paths).forEach((path) => {\n updatedPaths[mergePath(basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"), path)] = document.paths[path];\n });\n return {\n ...document,\n paths: updatedPaths\n };\n}\nfunction isJSONContentType(contentType) {\n return /^application\\/([a-z-\\.]+\\+)?json/.test(contentType);\n}\nfunction isFormContentType(contentType) {\n return contentType.startsWith(\"multipart/form-data\") || contentType.startsWith(\"application/x-www-form-urlencoded\");\n}\nexport {\n OpenAPIHono,\n createRoute,\n extendZodWithOpenApi,\n z\n};\n","import { createRoute, z } from \"@hono/zod-openapi\";\n\n// TanStack table column definition schema\nconst TanStackColumnSchema = z.object({\n id: z.string(),\n accessorKey: z.string(),\n header: z.string(),\n cell: z.any().optional(),\n meta: z.record(z.string(), z.any()).optional(),\n});\n\nexport const SqlPreviewResponseSchema = z.object({\n columns: z.array(TanStackColumnSchema),\n data: z.array(z.record(z.string(), z.any())),\n metadata: z\n .object({\n wasSampled: z.boolean(),\n originalCount: z.number(),\n sampledCount: z.number(),\n })\n .optional(),\n});\n\nexport type SqlPreviewResponse = z.infer<typeof SqlPreviewResponseSchema>;\nexport type SqlPreviewColumn = SqlPreviewResponse[\"columns\"][number];\nexport type SqlPreviewMetadata = SqlPreviewResponse[\"metadata\"];\n\nexport const SqlPreviewErrorSchema = z.object({\n error: z.string(),\n});\n\nexport const SqlPreview = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/sql/preview\",\n operationId: \"sqlPreview\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n sql: z.string().min(1, \"SQL query is required\"),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"SQL query executed successfully\",\n content: {\n \"application/json\": {\n schema: SqlPreviewResponseSchema,\n },\n },\n },\n 400: {\n description: \"Invalid SQL query or request\",\n content: {\n \"application/json\": {\n schema: SqlPreviewErrorSchema,\n },\n },\n },\n 500: {\n description: \"Internal server error\",\n content: {\n \"application/json\": {\n schema: SqlPreviewErrorSchema,\n },\n },\n },\n },\n});\n","import { z } from \"@hono/zod-openapi\";\n\nexport const limitQueryParams = z\n .string()\n .pipe(z.coerce.number())\n .optional()\n .openapi({\n param: {\n required: false,\n },\n type: \"integer\",\n });\n\nexport const orderQueryParams = z\n .string()\n .transform((str) => {\n if (!str) return [];\n return str.split(\",\").map((part) => {\n const [column, direction = \"ASC\"] = part.split(\":\");\n return {\n column,\n direction: direction.toUpperCase() as \"ASC\" | \"DESC\",\n };\n });\n })\n .pipe(\n z.array(\n z.object({\n column: z.string(),\n direction: z.enum([\"ASC\", \"DESC\"]),\n }),\n ),\n )\n .optional()\n .openapi({\n param: {\n required: false,\n example: \"name:asc,date:desc\",\n },\n type: \"string\",\n });\n\nexport const cursorParams = z\n .string()\n .pipe(z.coerce.number())\n .optional()\n .openapi({\n param: {\n required: false,\n },\n type: \"number\",\n });\n\nexport const filterQueryParams = z\n .string()\n .transform((str) => {\n if (!str) return [];\n return str.split(\",\").map((part) => {\n const [column, value = \"\"] = part.split(\":\").map(decodeURIComponent);\n return { column, value };\n });\n })\n .pipe(\n z.array(\n z.object({\n column: z.string(),\n value: z.string(),\n }),\n ),\n )\n .optional()\n .openapi({\n param: {\n required: false,\n example: \"status:active,name:John%20Doe\",\n },\n type: \"string\",\n });\n\nexport const columnsQueryParams = z\n .string()\n .transform((str) => {\n if (!str) return [];\n return str.split(\",\");\n })\n .optional()\n .openapi({\n param: {\n required: false,\n example: \"name,date\",\n },\n type: \"string\",\n });\n","import { z } from \"zod\";\n\nexport const SupabaseUserHeaderSchema = z.object({\n \"sp-access-token\": z.string(),\n});\n\nexport const SupabaseHeaderSchema = SupabaseUserHeaderSchema;\n","import { z } from \"zod\";\n\nexport const FEEDBACK_OPTIONS = [\n { label: \"Helpful\", value: \"helpful\" },\n { label: \"Partially helpful\", value: \"partially helpful\" },\n { label: \"Not helpful\", value: \"not helpful\" },\n { label: \"Incorrect\", value: \"incorrect\" },\n] as const;\n\nexport type FeedbackType = (typeof FEEDBACK_OPTIONS)[number][\"value\"];\n\nexport const FeedbackSchema = z.object({\n created_at: z.string(),\n flow_data_id: z.number(),\n helpfulness: z.enum(\n FEEDBACK_OPTIONS.map((option) => option.value) as [\n FeedbackType,\n ...FeedbackType[],\n ],\n ),\n id: z.number(),\n});\n\nexport type Feedback = z.infer<typeof FeedbackSchema>;\n","import { z } from \"zod\";\n\nconst Node = z.object({\n id: z.string(),\n type: z.enum([\n \"entity\",\n \"attribute\",\n \"filter\",\n \"process\",\n \"combine\",\n \"result\",\n ]),\n explanation: z.string(),\n});\n\nconst Edge = z.object({\n source: z.string(),\n target: z.string(),\n});\n\nexport const LLMColumnsLineageResponse = z.record(\n z.string(),\n z.object({\n nodes: z.array(Node),\n edges: z.array(Edge),\n }),\n);\n\nexport type LLMColumnsLineageResponseType = z.infer<\n typeof LLMColumnsLineageResponse\n>;\n\nexport const SqlAnalysisChunkSchema = z.object({\n chunk_title: z.string(),\n chunk_explanation: z.string(),\n lines: z.array(\n z.object({\n sql: z.string(),\n explanation: z.string(),\n }),\n ),\n});\n\nexport const BusinessExplanationSchema = z.object({\n summary: z.string(),\n implementation: z.array(z.string()),\n assumptions: z.array(\n z.object({\n type: z.enum([\n \"grain\",\n \"completeness\",\n \"transformation\",\n \"relationship\",\n \"other\",\n ]),\n details: z.string(),\n explanation: z.string(),\n }),\n ),\n});\n","import { z } from \"@hono/zod-openapi\";\nimport {\n BusinessExplanationSchema,\n LLMColumnsLineageResponse,\n SqlAnalysisChunkSchema,\n} from \"../companion/types\";\n\nconst FlowStepSchema = z.object({\n name: z.string(),\n status: z.enum([\"running\", \"completed\", \"failed\", \"awaiting_input\"]),\n output: z.looseObject({}).or(z.unknown().array()).nullable(),\n});\n\nexport const DatabaseFlowSchema = z.object({\n created_at: z.string(),\n id: z.string(),\n request: z.string(),\n title: z.string().nullable(),\n user_id: z.string().nullable(),\n application_id: z.number().nullable().optional(),\n flow_steps: z.array(FlowStepSchema),\n flow_chat_messages: z.array(z.object({ count: z.number() })),\n});\n\nexport type DatabaseFlow = z.infer<typeof DatabaseFlowSchema>;\n\nexport const ExecuteProcedureOutputSchema = z.object({\n table: z.string(),\n schema: z.string(),\n database: z.string(),\n});\n\nexport const FrontendFlowSchema = DatabaseFlowSchema.omit({\n flow_chat_messages: true,\n flow_steps: true,\n}).extend({\n user_friendly_goal: z.string().optional(),\n has_chat_messages: z.boolean(),\n});\nexport type FrontendFlow = z.infer<typeof FrontendFlowSchema>;\n\nexport const FrontendRecentFlowsSchema = DatabaseFlowSchema.omit({\n flow_steps: true,\n flow_chat_messages: true,\n});\n\nexport type FrontendRecentFlows = z.infer<typeof FrontendRecentFlowsSchema>;\n\nexport const ReportColumnSchema = z.looseObject({\n position: z.number().nonnegative().optional(),\n data_type: z.string(),\n null_count: z.number().nullable(),\n unique_count: z.number().nullable(),\n unique_percentage: z.number().nullable(),\n});\n\nexport const ReportSchema = z.object({\n created_at: z.string(),\n flow_id: z.string(),\n id: z.number(),\n is_sample: z.boolean(),\n schema: z.string(),\n sql: z.string(),\n table: z.string(),\n title: z.string(),\n request: z.string().nullable(),\n data_sample: z.array(z.record(z.string(), z.unknown())),\n data_summary: z.looseObject({\n columns: z.record(z.string(), ReportColumnSchema),\n }),\n bookmarked: z.boolean(),\n status: z.string().nullable(),\n is_removed: z.boolean(),\n});\nexport type Report = z.infer<typeof ReportSchema>;\n\nexport const FrontendReportSchema = ReportSchema.omit({\n sql: true,\n table: true,\n data_sample: true,\n is_sample: true,\n schema: true,\n});\n\nexport type FrontendReport = z.infer<typeof FrontendReportSchema>;\n\nexport const ReportDataSchema = z.looseObject({}).array().openapi(\"ReportData\");\n\nexport type ReportData = z.infer<typeof ReportDataSchema>;\n\nexport const ReportColumnsSchema = z\n .object({\n name: z.string(),\n data_type: z.string(),\n })\n .array();\nexport type ReportColumns = z.infer<typeof ReportColumnsSchema>;\n\n/* this is used to extract some metadata fields from the `data_summary`\n * field of flow data */\nexport const ColumnMetadataSchema = z.object({\n render_type: z.string().nullish(),\n unit: z.string().nullish(),\n});\n\nexport const FrontendReportColumnsSchema = z\n .object({\n ...ReportColumnsSchema.element.shape,\n dataType: z.string(),\n renderType: z.string().optional(),\n unit: z.string().optional(),\n })\n .array()\n .openapi(\"ReportColumns\");\n\nexport type FrontendReportColumns = z.infer<typeof FrontendReportColumnsSchema>;\n\n// Flow step output schemas:\n//\nexport const AnalyzeRequestSchema = z.object({\n goal: z.string(),\n user_friendly_goal: z.string().optional(),\n});\n\nexport const ReportExplainabilitySchema = z.object({\n sql_explanation: z.array(SqlAnalysisChunkSchema).nullish(),\n business_explanation: BusinessExplanationSchema.nullish(),\n columns_lineage: LLMColumnsLineageResponse.nullish(),\n confidence_score: z.number(),\n confidence_score_reason: z.string(),\n assumptions_score: z.number().optional(),\n assumptions_score_reason: z.string().optional(),\n friendliness_score: z.number().optional(),\n friendliness_score_reason: z.string().optional(),\n id: z.number(),\n flow_data_id: z.number(),\n created_at: z.string(),\n});\n\nexport type ReportExplainability = z.infer<typeof ReportExplainabilitySchema>;\n\nexport const FrontendReportExplainabilitySchema =\n ReportExplainabilitySchema.omit({\n id: true,\n created_at: true,\n });\n\nexport type FrontendReportExplainability = z.infer<\n typeof FrontendReportExplainabilitySchema\n>;\n\nexport const FlowSteps = {\n analyzeRequest: \"analyze_request\",\n} as const;\n\n/**\n * Sorts column entries by position property\n * Columns with defined positions come first, sorted in ascending order\n * Columns with undefined positions come after, maintaining their original order\n * @param entries the entries to sort\n * @returns the sorted entries\n */\nexport const sortReportColumns = <T extends { position?: number }>(\n entries: T[],\n): T[] => {\n return [...entries].sort((a, b) => {\n const posA = a.position;\n const posB = b.position;\n\n if (posA !== undefined && posB !== undefined) {\n return posA - posB;\n }\n\n if (posA === undefined) {\n return 1;\n }\n\n if (posB === undefined) {\n return -1;\n }\n\n return 0;\n });\n};\n\n/**\n * Sorts column entries by position property and applies metadata transformation\n * Columns with defined positions come first, sorted in ascending order\n * Columns with undefined positions come after, maintaining their original order\n * @param columnsRecord - Record of column names to column metadata from data_summary.columns\n * @returns Array of sorted columns with metadata applied\n */\nexport const transformReportColumns = (\n columnsRecord: Record<string, z.infer<typeof ReportColumnSchema>>,\n) => {\n const columns = sortReportColumns(\n Object.entries(columnsRecord).map(([name, { position, data_type }]) => ({\n name,\n position,\n data_type,\n dataType: data_type,\n })),\n );\n\n return columns.map((column) => {\n const columnName = column.name;\n const metadata = ColumnMetadataSchema.safeParse(\n columnsRecord[columnName],\n ).data;\n\n const result = {\n ...column,\n ...(metadata?.render_type\n ? { renderType: metadata.render_type }\n : undefined),\n ...(metadata?.unit ? { unit: metadata.unit } : undefined),\n };\n\n return result;\n });\n};\n","import dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport relativeTime from \"dayjs/plugin/relativeTime.js\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\nexport default dayjs;\n","import dayjs from \"@mm/shared/utils/daysjs\";\n\n/**\n * Formats a number with automatically adjusted precision using Intl.NumberFormat\n * - For large numbers: rounds to whole number\n * - For medium numbers: shows a few decimal places\n * - For small numbers: shows enough precision to be meaningful\n * @param value - The number to format\n * @param options - Optional configuration with properties:\n * @param options.minPrecision Minimum number of decimal places (default: 0)\n * @param options.maxPrecision Maximum number of decimal places (default: 6)\n * @param options.trimZeros Whether to trim trailing zeros (default: true)\n * @param options.useGrouping Whether to group thousands (default: true)\n * @returns Formatted number as string\n */\nexport const formatWithAutoPrecision = (\n value: number | string,\n options: {\n minPrecision?: number;\n maxPrecision?: number;\n trimZeros?: boolean;\n useGrouping?: boolean;\n } = {},\n): string => {\n // Default options\n const {\n minPrecision = 0,\n maxPrecision = 6,\n trimZeros = true,\n useGrouping = true,\n } = options;\n\n // Handle non-numeric values\n if (typeof value !== \"number\" || isNaN(value)) {\n return String(value);\n }\n\n // Handle zero\n if (value === 0) {\n return \"0\";\n }\n\n // Take absolute value for precision calculation\n const absValue = Math.abs(value);\n\n // Determine appropriate precision based on magnitude\n let maximumFractionDigits: number;\n if (absValue >= 1000) {\n maximumFractionDigits = 0;\n } else if (absValue >= 100) {\n maximumFractionDigits = 1;\n } else if (absValue >= 10) {\n maximumFractionDigits = 2;\n } else if (absValue >= 1) {\n maximumFractionDigits = 3;\n } else if (absValue >= 0.1) {\n maximumFractionDigits = 4;\n } else if (absValue >= 0.01) {\n maximumFractionDigits = 5;\n } else {\n // For very small numbers, calculate significant digits\n maximumFractionDigits = maxPrecision;\n if (absValue > 0) {\n const exponent = Math.floor(Math.log10(absValue));\n if (exponent < 0) {\n maximumFractionDigits = Math.min(Math.abs(exponent) + 2, maxPrecision);\n }\n }\n }\n\n // Apply minimum precision constraint\n maximumFractionDigits = Math.max(maximumFractionDigits, minPrecision);\n\n // Use Intl.NumberFormat with system default locale\n const formatter = new Intl.NumberFormat(undefined, {\n minimumFractionDigits: trimZeros ? 0 : maximumFractionDigits,\n maximumFractionDigits: maximumFractionDigits,\n useGrouping: useGrouping,\n });\n\n return formatter.format(value);\n};\n\n/**\n * This module handles the formatting and normalization of table cell values for display and sorting.\n *\n * Problem:\n * When displaying data in tables, we often receive values in various formats (strings, dates,\n * JSON objects, etc.). We need to:\n * 1. Display these values in a consistent, human-readable format\n * 2. Enable proper sorting of these values regardless of their original format\n *\n * Solution:\n * The FormattedData type and formatCellValue function transform any input value into a\n * standardized format with two properties:\n * - display: A string representation suitable for rendering\n * - sortValue: A normalized value (string/number/date) suitable for consistent sorting\n *\n * The module handles various special cases:\n * - JSON strings (parsing them to extract actual values)\n * - Date/time values (converting to consistent format)\n * - BigQuery-style objects with 'value' property\n * - Nested objects (pretty-printing them)\n * - Null/undefined values\n */\n\nexport type FormattedData = {\n display: (string & {}) | \"empty\" | null;\n sortValue: string | number | Date | null;\n};\n\nexport const isFormattedData = (x: unknown): x is FormattedData => {\n return typeof x == \"object\" && !!x && \"display\" in x && \"sortValue\" in x;\n};\n\nconst MIN_VALID_YEAR = 1900;\nconst MAX_VALID_YEAR = 2200;\n\nconst zonedatetime = <T extends string>(\n format: T,\n zone: string,\n): {\n readonly format: T;\n readonly type: \"zonedatetime\";\n readonly zone: string;\n} => ({ format, type: \"zonedatetime\", zone }) as const;\n\nconst datetime = <T extends string>(\n format: T,\n): { readonly format: T; readonly type: \"datetime\" } =>\n ({ format, type: \"datetime\" }) as const;\n\nconst date = <T extends string>(\n format: T,\n): { readonly format: T; readonly type: \"date\" } =>\n ({ format, type: \"date\" }) as const;\n\nconst DATE_FORMATS = [\n // ISO 8601 formats\n zonedatetime(\"YYYY-MM-DDTHH:mm:ss.SSSZ\", \"UTC\"),\n zonedatetime(\"YYYY-MM-DDTHH:mm:ssZ\", \"UTC\"),\n zonedatetime(\"YYYY-MM-DDTHH:mmZ\", \"UTC\"),\n datetime(\"YYYY-MM-DDTHH:mm:ss\"),\n datetime(\"YYYY-MM-DDTHH:mm\"),\n date(\"YYYY-MM-DDT\"),\n // Standard date formats\n date(\"YYYY-MM-DD\"),\n date(\"YYYY/MM/DD\"),\n date(\"DD-MM-YYYY\"),\n date(\"DD/MM/YYYY\"),\n date(\"MM-DD-YYYY\"),\n date(\"MM/DD/YYYY\"),\n // Date time formats\n datetime(\"YYYY-MM-DD HH:mm:ss\"),\n datetime(\"YYYY-MM-DD HH:mm\"),\n datetime(\"YYYY/MM/DD HH:mm:ss\"),\n datetime(\"YYYY/MM/DD HH:mm\"),\n datetime(\"DD-MM-YYYY HH:mm:ss\"),\n datetime(\"DD-MM-YYYY HH:mm\"),\n datetime(\"DD/MM/YYYY HH:mm:ss\"),\n datetime(\"DD/MM/YYYY HH:mm\"),\n datetime(\"MM-DD-YYYY HH:mm:ss\"),\n datetime(\"MM-DD-YYYY HH:mm\"),\n datetime(\"MM/DD/YYYY HH:mm:ss\"),\n datetime(\"MM/DD/YYYY HH:mm\"),\n] as const;\n\ntype DateStringResult =\n | {\n isValid: true;\n parsedDate: dayjs.Dayjs;\n isDateTime: boolean;\n }\n | { isValid: false };\n\nexport const isDateString = (value: unknown): DateStringResult => {\n if (typeof value !== \"string\") return { isValid: false };\n\n // Remove common date separators to check if it's just numbers\n const stripped = value.replace(/[-/.:\\s]/g, \"\");\n if (/^\\d+$/.test(stripped)) {\n // If it's all numbers, ensure it matches common date patterns\n // Prevent pure numbers from being interpreted as timestamps\n if (stripped.length < 6) return { isValid: false }; // Too short to be a date\n if (value.length === stripped.length) return { isValid: false }; // No separators = probably not a date\n }\n\n /* This should be the longest date string we can have */\n if (stripped.length > \"YYYY-MM-DDTHH:mm:ss.SSS+00:00\".length) {\n return { isValid: false };\n }\n\n // Then try other formats\n for (const format of DATE_FORMATS) {\n let date: dayjs.Dayjs | undefined;\n try {\n if (format.type === \"zonedatetime\") {\n date = dayjs.tz(value, format.format, format.zone);\n } else {\n date = dayjs(value, format.format, true); // Strict parsing\n }\n } catch {\n continue;\n }\n\n if (date.isValid()) {\n // Additional validation for reasonable dates\n const year = date.year();\n if (year < MIN_VALID_YEAR || year > MAX_VALID_YEAR) continue;\n\n // Check if it's a datetime by looking for time components\n const isDateTime =\n format.type === \"zonedatetime\" || format.type == \"datetime\";\n\n return {\n isValid: true,\n parsedDate: date,\n isDateTime,\n };\n }\n }\n\n return { isValid: false };\n};\n\n/*\n * For each cell of our table, we need to be able to:\n * - show its value (properly formatted)\n * - compare it to other values of the value column (for sorting)\n *\n * This function return this information for any given cell\n */\nexport const formatDataValue = (\n value: unknown,\n { replaceNullValue }: { replaceNullValue: boolean } = {\n replaceNullValue: true,\n },\n): FormattedData => {\n if (value === null || value === undefined) {\n return {\n display: replaceNullValue ? \"empty\" : null,\n sortValue: null,\n };\n }\n\n let processedValue: unknown = value;\n\n /*\n * We sometimes receives data as serialized JSON object from BigQuery.\n * This is for instance the case of all date object, but not only.\n * Here we try to parse the data as JSON. In case of error we return\n * the value as a plain string\n */\n if (typeof processedValue === \"string\") {\n try {\n const parsed = JSON.parse(processedValue) as unknown;\n /*\n * This part is very important and might become an issue in the future:\n * As we are parsing the input as JSON, if we had the string value \"1234\"\n * it would become the number 1234.\n *\n * This might not be an issue but it's something to keep in mind.\n * Tests are covering this\n */\n processedValue = parsed;\n } catch {\n /* */\n }\n }\n\n /* Now that our JSON object have been parsed, we can check if they match a specific\n * format we want to deal with. This could contains formatting for a specific lib (i.e BigQuery)\n * or more generic formatting for object\n */\n if (\n processedValue &&\n typeof processedValue === \"object\" &&\n Object.keys(processedValue).length === 1 &&\n \"value\" in processedValue\n ) {\n const extractedValue = processedValue.value;\n\n const dateResult = isDateString(extractedValue);\n if (dateResult.isValid) {\n return {\n display: dateResult.isDateTime\n ? dateResult.parsedDate.format(\"YYYY-MM-DD HH:mm:ss\")\n : dateResult.parsedDate.format(\"YYYY-MM-DD\"),\n sortValue: dateResult.parsedDate.valueOf(),\n };\n }\n\n return {\n display: String(extractedValue),\n sortValue: extractedValue as string | number,\n };\n }\n\n /* The object we extracted did not match any format of data we expected\n * so we continue with the initial data were we can also applied library specific\n * and/or generic formatting on the value\n */\n const dateResult = isDateString(processedValue);\n if (dateResult.isValid) {\n return {\n display: dateResult.isDateTime\n ? dateResult.parsedDate.format(\"YYYY-MM-DD HH:mm:ss\")\n : dateResult.parsedDate.format(\"YYYY-MM-DD\"),\n sortValue: dateResult.parsedDate.valueOf(),\n };\n }\n\n /*\n * Sometimes the value we want to show can be a JSON and we want to avoid the cursed\n * [Object object] so we stringify the result.\n * It does not really make any sense to sort those kind of object, but we default to\n * string comparison\n */\n if (typeof processedValue === \"object\") {\n const stringified = JSON.stringify(processedValue, null, 2);\n return {\n display: stringified,\n sortValue: stringified,\n };\n }\n\n if (typeof processedValue === \"boolean\") {\n return {\n display: String(processedValue),\n sortValue: processedValue ? 1 : 0,\n };\n }\n\n if (typeof processedValue === \"number\") {\n /* Do not format numbers that could be a year */\n return {\n display:\n processedValue >= MIN_VALID_YEAR &&\n processedValue <= MAX_VALID_YEAR &&\n Number.isInteger(processedValue)\n ? String(processedValue)\n : formatWithAutoPrecision(processedValue),\n sortValue: processedValue,\n };\n }\n\n // we don't really know what we are getting, default to string\n return {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n display: String(processedValue),\n sortValue: processedValue as string | number,\n };\n};\n","import { z } from \"@hono/zod-openapi\";\nimport { formatDataValue } from \"@mm/shared/data/FormattedData\";\nimport type { Simplify } from \"type-fest\";\n\n// Common properties shared across all chart types\nconst commonConfigProperties = {\n title: z.string(),\n};\n\n// Properties shared by all cartesian charts (bar, line/area, scatter)\nconst cartesianConfigProperties = {\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n xAxisDataKey: z.string().optional(),\n yAxisDataKey: z.string().optional(),\n dimensionDataKey: z.string().optional(),\n valueColumns: z.array(z.string()).optional(),\n};\n\nexport const V1VisualizationConfigurationSchema = z.discriminatedUnion(\"type\", [\n // Bar chart\n z.object({\n type: z.literal(\"bar\"),\n ...commonConfigProperties,\n ...cartesianConfigProperties,\n }),\n\n // Line/Area chart\n z.object({\n type: z.literal(\"line/area\"),\n ...commonConfigProperties,\n ...cartesianConfigProperties,\n }),\n\n // Scatter chart\n z.object({\n type: z.literal(\"scatter\"),\n ...commonConfigProperties,\n ...cartesianConfigProperties,\n }),\n\n // Pie chart\n z.object({\n type: z.literal(\"pie\"),\n ...commonConfigProperties,\n nameKey: z.string(),\n dataKey: z.string(),\n }),\n]);\n\n// Define each chart type schema using direct object literals\nexport const VisualizationConfigurationSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"bar\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n categoryColumn: z.string(),\n secondaryCategoryColumn: z.string().optional(),\n valueColumn: z.string(),\n }),\n\n // Line/Area chart - version 2: New format\n z.object({\n type: z.literal(\"line/area\"),\n config_version: z.literal(2),\n ...commonConfigProperties,\n xAxisColumn: z.string(),\n valueColumns: z.array(z.string()),\n yAxisLabels: z.array(z.string()),\n }),\n\n // Line/Area chart - categorical format (requires pivoting)\n z.object({\n type: z.literal(\"line/area-categorical\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n valueColumn: z.string(),\n xAxisColumn: z.string(),\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n categoryColumn: z.string(),\n }),\n\n // Scatter chart - new format (v2)\n z.object({\n type: z.literal(\"scatter\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n xAxisValueColumn: z.string(),\n yAxisValueColumn: z.string(),\n }),\n // Pie chart - new format (v2)\n z.object({\n type: z.literal(\"pie\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n categoryColumn: z.string(),\n valueColumn: z.string(),\n }),\n]);\n\nconst BaseVisualizationSchema = z.object({\n id: z.number(),\n flow_data_id: z.number(),\n created_at: z.string(),\n sql: z.string(),\n bookmarked: z.boolean(),\n data_sample: z.array(z.record(z.string(), z.unknown())),\n is_sample: z.boolean(),\n data_summary: z.record(z.string(), z.unknown()),\n});\n\nexport const V1VisualizationSchema = z.object({\n ...BaseVisualizationSchema.shape,\n configuration: V1VisualizationConfigurationSchema,\n});\n\nexport const VisualizationSchema = z.object({\n ...BaseVisualizationSchema.shape,\n configuration: VisualizationConfigurationSchema,\n});\n\nexport type V1Visualization = z.output<typeof V1VisualizationSchema>;\nexport type Visualization = z.output<typeof VisualizationSchema>;\n\nexport const VisualizationDataSchema = z\n .array(\n z.record(\n z.string(), // any key\n z.union([\n // Date objects FIRST\n z.date(),\n z.coerce.number(),\n // Handle various data types including BigQueryDate\n z.unknown().transform((val) => formatDataValue(val).display),\n ]), // value types\n ),\n )\n .openapi(\"VisualizationData\");\n\nexport type VisualizationData = z.infer<typeof VisualizationDataSchema>;\n\nexport const V1FrontendVisualizationSchema = V1VisualizationSchema.omit({\n sql: true,\n data_sample: true,\n is_sample: true,\n data_summary: true,\n});\n\nexport const FrontendVisualizationSchema = VisualizationSchema.omit({\n sql: true,\n data_sample: true,\n is_sample: true,\n data_summary: true,\n});\n\nexport type V1FrontendVisualization = z.output<\n typeof V1FrontendVisualizationSchema\n>;\n\nexport type FrontendVisualization = z.output<\n typeof FrontendVisualizationSchema\n>;\nexport const isV2Visualization = (\n visualization: Visualization | V1Visualization,\n): visualization is Visualization => {\n return (\n \"config_version\" in visualization.configuration &&\n // we currently have only 2 versions\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n visualization.configuration.config_version === 2\n );\n};\n\nexport const isFrontendV1Visualization = (\n visualization: FrontendVisualization | V1FrontendVisualization,\n): visualization is V1FrontendVisualization => {\n return !(\"config_version\" in visualization.configuration);\n};\n\nexport const isFrontendV2Visualization = (\n visualization: FrontendVisualization | V1FrontendVisualization,\n): visualization is FrontendVisualization => {\n return (\n \"config_version\" in visualization.configuration &&\n // we currently have only 2 versions\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n visualization.configuration.config_version === 2\n );\n};\n\n/* Define metadata schema for data sampling information\n * those fields are coming from the data service at query time\n * not from our own database */\nexport const VisualizationMetadataSchema = z\n .object({\n wasSampled: z.boolean(),\n originalCount: z.number(),\n sampledCount: z.number(),\n })\n .optional();\n\nexport const V1FrontendVisualizationWithDataSchema =\n V1FrontendVisualizationSchema.extend({\n data: VisualizationDataSchema,\n _metadata: VisualizationMetadataSchema,\n });\n\nexport const FrontendVisualizationWithDataSchema =\n FrontendVisualizationSchema.extend({\n data: VisualizationDataSchema,\n _metadata: VisualizationMetadataSchema,\n });\n\nexport type V1FrontendVisualizationWithData = z.output<\n typeof V1FrontendVisualizationWithDataSchema\n>;\n\nexport type FrontendVisualizationWithData = z.output<\n typeof FrontendVisualizationWithDataSchema\n>;\n\nexport const isFrontendV1VisualizationWithData = (\n visualization:\n | FrontendVisualizationWithData\n | V1FrontendVisualizationWithData,\n): visualization is V1FrontendVisualizationWithData => {\n return !(\"config_version\" in visualization.configuration);\n};\n\nexport const isFrontendV2VisualizationWithData = (\n visualization:\n | FrontendVisualizationWithData\n | V1FrontendVisualizationWithData,\n): visualization is FrontendVisualizationWithData => {\n return (\n \"config_version\" in visualization.configuration &&\n // we currently have only 2 versions\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n visualization.configuration.config_version === 2\n );\n};\n\nexport const getVisualizationParser = (data: { configuration: unknown }) => {\n if (\n data.configuration &&\n typeof data.configuration === \"object\" &&\n \"config_version\" in data.configuration\n ) {\n if (data.configuration.config_version === 2) {\n return VisualizationSchema;\n } else {\n return undefined;\n }\n } else {\n return V1VisualizationSchema;\n }\n};\n\nexport type ConvertedVisualization<T> = T extends Visualization\n ? FrontendVisualization\n : T extends V1Visualization\n ? V1FrontendVisualization\n : never;\n\nexport const convertToFrontendVisualization = <\n T extends Visualization | V1Visualization,\n>(\n visualization: T,\n): ConvertedVisualization<T> => {\n if (isV2Visualization(visualization)) {\n return FrontendVisualizationSchema.parse(\n visualization,\n ) as ConvertedVisualization<T>;\n } else {\n return V1FrontendVisualizationSchema.parse(\n visualization,\n ) as ConvertedVisualization<T>;\n }\n};\n\nexport type V1BarVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"bar\";\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisDataKey?: string;\n yAxisDataKey?: string;\n dimensionDataKey?: string;\n valueColumns?: string[];\n };\n }\n>;\n\nexport type BarVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"bar\";\n title: string;\n config_version: 2;\n xAxisLabel: string;\n yAxisLabel: string;\n categoryColumn: string;\n secondaryCategoryColumn?: string;\n valueColumn: string;\n };\n }\n>;\n\nexport type V1LineAreaVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"line/area\";\n config_version?: 1;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisDataKey?: string;\n yAxisDataKey?: string;\n dimensionDataKey?: string;\n valueColumns: string[];\n };\n }\n>;\n\nexport type LineAreaVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"line/area\";\n config_version: 2;\n title: string;\n xAxisColumn: string;\n valueColumns: string[];\n yAxisLabels: string[];\n };\n }\n>;\n\nexport type CategoricalLineAreaVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"line/area-categorical\";\n title: string;\n config_version: 2;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisColumn: string;\n valueColumn: string;\n categoryColumn: string;\n };\n }\n>;\n\nexport type V1ScatterVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"scatter\";\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisDataKey?: string;\n yAxisDataKey?: string;\n dimensionDataKey?: string;\n valueColumns?: string[];\n };\n }\n>;\n\nexport type ScatterVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"scatter\";\n title: string;\n config_version: 2;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisValueColumn: string;\n yAxisValueColumn: string;\n };\n }\n>;\n\nexport type V1PieVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"pie\";\n title: string;\n nameKey: string;\n dataKey: string;\n };\n }\n>;\n\nexport type PieVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"pie\";\n title: string;\n config_version: 2;\n categoryColumn: string;\n valueColumn: string;\n };\n }\n>;\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"@mm/shared/endpoints/companion/auth\";\nimport { FeedbackSchema } from \"@mm/shared/schemas/feedback\";\nimport {\n FrontendFlowSchema,\n FrontendRecentFlowsSchema,\n FrontendReportColumnsSchema,\n FrontendReportExplainabilitySchema,\n FrontendReportSchema,\n ReportDataSchema,\n} from \"@mm/shared/schemas/flows\";\nimport {\n FrontendVisualizationSchema,\n V1FrontendVisualizationSchema,\n} from \"@mm/shared/schemas/visualizations\";\nimport {\n columnsQueryParams,\n cursorParams,\n filterQueryParams,\n limitQueryParams,\n orderQueryParams,\n} from \"../utils\";\n\nexport const FlowIdParam = z\n .object({ flowId: z.string().uuid() })\n .openapi(\"FlowId\", { type: \"string\" });\n\nexport const FlowDataIdParam = z\n .object({ flowDataId: z.string().pipe(z.coerce.number()) })\n .openapi(\"FlowDataId\", { type: \"integer\" });\n\nexport const ReportId = z.string().pipe(z.coerce.number());\n\nexport const ReportIdParam = z\n .object({ report_id: ReportId })\n .openapi(\"ReportId\", { type: \"integer\" });\n\nexport const RetrieveFlowDataReports = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/data-reports\",\n operationId: \"retrieveFlowDataReports\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The data reports associated with the flow\",\n content: {\n \"application/json\": {\n schema: FrontendReportSchema.array(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveLatestDataReportStatus = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/data-reports/last/status\",\n operationId: \"retrieveLatestDataReportStatus\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The status of the latest flow data for a given flow\",\n content: {\n \"application/json\": {\n schema: z.object({ status: z.string().nullable() }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description:\n \"Unable to retrieve status for latest flow data of flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveInsights = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/insights\",\n operationId: \"retrieveInsights\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: z.object({\n flowDataId: z\n .string()\n .pipe(z.coerce.number())\n .optional()\n .openapi({\n param: {\n required: false,\n },\n type: \"integer\",\n }),\n }),\n },\n responses: {\n 200: {\n description: \"The content of the flow\",\n content: {\n \"application/json\": {\n schema: z.object({\n dataReports: FrontendReportSchema.array(),\n visualizations: V1FrontendVisualizationSchema.array(),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowColumns = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/columns\",\n operationId: \"retrieveFlowColumns\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"A list containing the columns of the flow\",\n content: {\n \"application/json\": {\n schema: FrontendReportColumnsSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlow = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}\",\n operationId: \"retrieveFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The flow with its steps\",\n content: {\n \"application/json\": {\n schema: FrontendFlowSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveRecentFlows = createRoute({\n method: \"get\",\n path: \"/api/v1/recent-flows\",\n operationId: \"retrieveRecentFlows\",\n request: {\n headers: SupabaseHeaderSchema,\n query: z.object({\n limit: limitQueryParams,\n }),\n },\n responses: {\n 200: {\n description: \"A list of recent flows\",\n content: {\n \"application/json\": {\n schema: FrontendRecentFlowsSchema.array(),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\n// Below: data reports\nexport const GetReportColumns = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/columns\",\n operationId: \"getDataReportColumns\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"A list containing the columns of the report\",\n content: {\n \"application/json\": {\n schema: FrontendReportColumnsSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ExportReportData = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/export\",\n operationId: \"exportReportData\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The report data exported in CSV format\",\n content: {\n \"text/csv\": {\n schema: z.string().describe(\"CSV formatted string of report data\"),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowData = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/data\",\n operationId: \"retrieveFlowData\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: z.object({\n limit: limitQueryParams,\n order: orderQueryParams,\n cursor: cursorParams,\n filter: filterQueryParams,\n flowDataId: FlowDataIdParam.shape.flowDataId.openapi({\n type: \"integer\",\n param: { required: true },\n }),\n }),\n },\n responses: {\n 200: {\n description: \"The content of the flow\",\n content: {\n \"application/json\": {\n schema: ReportDataSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportData = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/data\",\n operationId: \"getDataReportData\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n query: z.object({\n columns: columnsQueryParams,\n limit: limitQueryParams,\n order: orderQueryParams,\n cursor: cursorParams,\n filter: filterQueryParams,\n }),\n },\n responses: {\n 200: {\n description: \"The content of the report\",\n content: {\n \"application/json\": {\n schema: ReportDataSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowDataCount = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/count\",\n operationId: \"retrieveFlowDataCount\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: z.object({\n flowDataId: z\n .string()\n .pipe(z.coerce.number())\n .openapi({\n param: {\n required: false,\n },\n type: \"integer\",\n }),\n }),\n },\n responses: {\n 200: {\n description: \"The total count of rows in the flow\",\n content: {\n \"application/json\": {\n schema: z.object({\n count: z\n .number()\n .int()\n .nonnegative()\n .describe(\"Total number of rows in the flow\"),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportRowCount = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/count\",\n operationId: \"getDataReportRowCount\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The total count of rows in the report\",\n content: {\n \"application/json\": {\n schema: z.object({\n count: z\n .number()\n .int()\n .nonnegative()\n .describe(\"Total number of rows in the report\"),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFeedback = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flow-data/{flowDataId}/feedback\",\n operationId: \"retrieveFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"The feedback for the flow data\",\n content: {\n \"application/json\": {\n schema: FeedbackSchema.nullable(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportFeedback = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/feedback\",\n operationId: \"getDataReportFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The feedback for the report\",\n content: {\n \"application/json\": {\n schema: FeedbackSchema.nullable(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const UpsertFeedback = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"post\",\n path: \"/api/v1/flow-data/{flowDataId}/feedback\",\n operationId: \"upsertFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n body: {\n description: \"The feedback for the flow data\",\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n helpfulness: FeedbackSchema.shape.helpfulness,\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Successfully upserted feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const UpsertReportFeedback = createRoute({\n method: \"post\",\n path: \"/api/v1/data-reports/{report_id}/feedback\",\n operationId: \"upsertReportFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n body: {\n description: \"The feedback for the flow data\",\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n helpfulness: FeedbackSchema.shape.helpfulness,\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Successfully upserted feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const DeleteFeedback = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"delete\",\n path: \"/api/v1/flow-data/{flowDataId}/feedback\",\n operationId: \"deleteFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"Successfully deleted feedback\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const DeleteReportFeedback = createRoute({\n method: \"delete\",\n path: \"/api/v1/data-reports/{report_id}/feedback\",\n operationId: \"deleteReportFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"Successfully deleted feedback\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowDataExplainability = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flow-data/{flowDataId}/explainability\",\n operationId: \"retrieveFlowDataExplainability\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"The explainability of the flow data\",\n content: {\n \"application/json\": {\n schema: FrontendReportExplainabilitySchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportExplainability = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/explainability\",\n operationId: \"getDataReportExplainability\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The explainability of the report\",\n content: {\n \"application/json\": {\n schema: FrontendReportExplainabilitySchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReport = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}\",\n operationId: \"getDataReport\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The visualizations for the report\",\n content: {\n \"application/json\": {\n schema: FrontendReportSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportVisualizations = createRoute({\n hide: true,\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/visualizations\",\n operationId: \"getDataReportVisualizations\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The visualizations for the report\",\n content: {\n \"application/json\": {\n schema: z.object({\n ...FrontendReportSchema.shape,\n visualizations: z\n .union([\n V1FrontendVisualizationSchema,\n FrontendVisualizationSchema,\n ])\n .array(),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const CreateFlow = createRoute({\n method: \"post\",\n path: \"/api/v1/flows\",\n operationId: \"createFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n userQuery: z.string(),\n applicationName: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Create a new flow\",\n content: {\n \"application/json\": {\n schema: z.object({\n status: z.literal(\"success\"),\n flowId: z.string(),\n }),\n },\n },\n },\n 400: {\n description: \"Application not found\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SqlPreviewResponseSchema } from \"@mm/shared/endpoints/admin-console/sqlPreview.routes\";\nimport {\n cursorParams,\n filterQueryParams,\n limitQueryParams,\n orderQueryParams,\n} from \"@mm/shared/endpoints/utils\";\nimport { ReportIdParam } from \"../companion/flows.routes\";\n\nconst ExtractInsightResponseSchema = z\n .object({\n type: z.literal(\"text\"),\n insight: z.string(),\n })\n .or(\n z.object({\n type: z.literal(\"missing\"),\n }),\n );\n\nexport type ExtractInsightResponse = z.infer<\n typeof ExtractInsightResponseSchema\n>;\nexport const GenerateInsightTemplate = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/contextual-insights/generate-template\",\n operationId: \"generateInsightTemplate\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n request: z.string(),\n insight_type: z.string(),\n additional_context: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Insight template generated successfully\",\n content: {\n \"application/json\": {\n schema: z.object({\n expanded_request: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetContextualInsightPreviewData = createRoute({\n method: \"get\",\n path: \"/api/v1/admin-console/contextual-insights/preview/{report_id}/data\",\n operationId: \"getContextualInsightPreviewData\",\n request: {\n params: ReportIdParam,\n query: z.object({\n limit: limitQueryParams,\n order: orderQueryParams,\n cursor: cursorParams,\n filter: filterQueryParams,\n }),\n },\n responses: {\n 200: {\n description: \"The preview data for the contextual insight\",\n content: {\n \"application/json\": {\n schema: SqlPreviewResponseSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow data with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetContextualInsightColumnSampleValues = createRoute({\n method: \"get\",\n path: \"/api/v1/admin-console/contextual-insights/preview/{report_id}/sample-values\",\n operationId: \"getContextualInsightColumnSampleValues\",\n request: {\n params: ReportIdParam,\n query: z.object({\n column_name: z.string().openapi({\n param: {\n required: true,\n },\n type: \"string\",\n description: \"The column name to get sample values for\",\n }),\n }),\n },\n responses: {\n 200: {\n description: \"Sample values for the specified column\",\n content: {\n \"application/json\": {\n schema: z.object({\n options: z.array(z.unknown()),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow data with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GenerateInsight = createRoute({\n method: \"post\",\n path: \"/api/v1/contextual-insights/generate-insight\",\n operationId: \"generateInsight\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n selected_filter_value: z.string(),\n custom_id: z.string(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Insight generated successfully\",\n content: {\n \"application/json\": {\n schema: ExtractInsightResponseSchema,\n },\n },\n },\n 404: {\n description: \"Insight not found\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 400: {\n description: \"Invalid request\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ExtractInsight = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/contextual-insights/extract-insight\",\n operationId: \"extractInsight\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n flow_id: z.string(),\n report_id: z.number(),\n topic: z.string(),\n expanded_request: z.string(),\n insight_type: z.string(),\n selected_filter: z.string(),\n selected_filter_value: z.string(),\n additional_context: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Insight extracted successfully\",\n content: {\n \"application/json\": {\n schema: ExtractInsightResponseSchema,\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const SuggestFilterColumn = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/contextual-insights/suggest-filter-column\",\n operationId: \"suggestFilterColumn\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n report_id: z.number(),\n request: z.string(),\n insight_type: z.string(),\n additional_context: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Filter column suggestion generated successfully\",\n content: {\n \"application/json\": {\n schema: z.object({\n recommended_column: z.string(),\n reasoning: z.string(),\n }),\n },\n },\n },\n 404: {\n description: \"Report not found\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\n\nconst GetApiInformationInputSchema = z.object({\n apiKey: z.string(),\n});\n\nconst GetApiInformationOutputSchema = z.object({\n apiUrl: z.string(),\n anonKey: z.string(),\n});\n\nexport type GetApiInformationOutput = z.infer<\n typeof GetApiInformationOutputSchema\n>;\n\nexport const GetApiInformation = createRoute({\n method: \"get\",\n path: \"/api/v1/auth/apiInformation\",\n operationId: \"getApiInformation\",\n request: {\n query: GetApiInformationInputSchema,\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: GetApiInformationOutputSchema,\n },\n },\n description: \"Retrieve the API URL and anon key\",\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid input\",\n },\n 500: {\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: \"Unable to retrieve the API URL and anon key\",\n },\n },\n});\n\nexport const GetApiInformationLegacy = createRoute({\n hide: true,\n method: \"get\",\n path: \"/api/auth/apiInformation\",\n operationId: \"getApiInformation\",\n request: {\n query: GetApiInformationInputSchema,\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: GetApiInformationOutputSchema,\n },\n },\n description: \"Retrieve the API URL and anon key\",\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid input\",\n },\n 500: {\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: \"Unable to retrieve the API URL and anon key\",\n },\n },\n});\n\nconst ExchangeExternalTokenInputSchema = z.object({\n apiKey: z.string(),\n externalJWT: z.string(),\n});\n\nconst ExchangeExternalTokenOutputSchema = z.object({\n accessToken: z.string(),\n refreshToken: z.string(),\n});\n\nexport type ExchangeExternalTokenOutput = z.infer<\n typeof ExchangeExternalTokenOutputSchema\n>;\n\nexport const ExchangeExternalToken = createRoute({\n method: \"post\",\n path: \"/api/v1/auth/exchangeExternalToken\",\n operationId: \"exchangeExternalToken\",\n request: {\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: ExchangeExternalTokenInputSchema,\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: ExchangeExternalTokenOutputSchema,\n },\n },\n description: \"Retrieve a JWT for an external user\",\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid input\",\n },\n 500: {\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: \"Unable to retrieve a JWT for an external user\",\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"@mm/shared/endpoints/companion/auth\";\n\nexport const End2EndApiResponseSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"error\"),\n error: z.string(),\n }),\n z.object({\n status: z.literal(\"success\"),\n flowId: z.string(),\n }),\n]);\n\nexport type End2EndApiResponse = z.infer<typeof End2EndApiResponseSchema>;\n\nexport const RunEnd2EndFlowRoute = createRoute({\n method: \"post\",\n path: \"/api/v1/end2end\",\n operationId: \"runEnd2EndFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n userQuery: z.string(),\n isNewAnalysisGoal: z.boolean().default(true),\n difficultyLevel: z\n .enum([\"simple\", \"moderate\", \"complex\"])\n .default(\"complex\"),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Run the end2end flow\",\n content: {\n \"application/json\": {\n schema: End2EndApiResponseSchema,\n },\n },\n },\n },\n});\n","import { createRoute } from \"@hono/zod-openapi\";\nimport z from \"zod\";\nimport { End2EndApiResponseSchema } from \"../end2end/run.routes\";\nimport { SupabaseHeaderSchema } from \"./auth\";\n\nconst TriggerFlowBody = z.object({\n triggerId: z.string(),\n variables: z.record(z.string(), z.string()),\n});\n\nexport const TriggerFlow = createRoute({\n method: \"post\",\n path: \"/api/v1/trigger-flow/\",\n operationId: \"triggerFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n description: \"Trigger flow request body\",\n content: {\n \"application/json\": {\n schema: TriggerFlowBody,\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Flow id\",\n content: {\n \"application/json\": {\n schema: End2EndApiResponseSchema,\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid template or variable values\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve trigger with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","/**\n * Runtime platform detection utilities for cross-platform compatibility.\n * These functions detect the current environment to enable automatic adapter selection.\n */\n\nexport const isBrowser = (): boolean => {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n};\n\nexport const isNode = (): boolean => {\n return (\n typeof process !== \"undefined\" &&\n typeof process.versions === \"object\" &&\n \"node\" in process.versions\n );\n};\n\nexport const isReactNative = (): boolean => {\n return (\n typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\"\n );\n};\n\nexport type PlatformType = \"browser\" | \"node\" | \"react-native\" | \"unknown\";\n\nexport const getPlatform = (): PlatformType => {\n if (isReactNative()) return \"react-native\";\n if (isBrowser()) return \"browser\";\n if (isNode()) return \"node\";\n return \"unknown\";\n};\n","import type { AsyncStorage } from \"./interface\";\n\n/**\n * Browser localStorage adapter with async interface.\n * Wraps the synchronous localStorage API with async methods for consistency.\n */\nexport class BrowserStorageAdapter implements AsyncStorage {\n // eslint-disable-next-line @typescript-eslint/require-await\n async getItem(key: string): Promise<string | null> {\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.warn(\n \"BrowserStorageAdapter: Failed to get item from localStorage\",\n error,\n );\n return null;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async setItem(key: string, value: string): Promise<void> {\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n console.warn(\n \"BrowserStorageAdapter: Failed to set item in localStorage\",\n error,\n );\n throw error;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async removeItem(key: string): Promise<void> {\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(\n \"BrowserStorageAdapter: Failed to remove item from localStorage\",\n error,\n );\n throw error;\n }\n }\n}\n","import type { AsyncStorage } from \"./interface\";\n\n/**\n * in-memory storage adapter.\n */\nexport class MemoryStorageAdapter implements AsyncStorage {\n private storage = new Map<string, string>();\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getItem(key: string): Promise<string | null> {\n const value = this.storage.get(key);\n return value !== undefined ? value : null;\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async setItem(key: string, value: string): Promise<void> {\n this.storage.set(key, value);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async removeItem(key: string): Promise<void> {\n this.storage.delete(key);\n }\n}\n","import { getPlatform } from \"#utils/platform\";\nimport { BrowserStorageAdapter } from \"./browser\";\nimport type { AsyncStorage } from \"./interface\";\nimport { MemoryStorageAdapter } from \"./memory\";\n\n/**\n * Create the appropriate storage adapter based on the current platform.\n * For React Native, you must provide the AsyncStorage instance.\n * @returns The appropriate storage adapter for the current platform\n */\nexport const createStorageAdapter = (): AsyncStorage => {\n const platform = getPlatform();\n\n switch (platform) {\n case \"browser\":\n return new BrowserStorageAdapter();\n case \"node\":\n return new MemoryStorageAdapter();\n case \"react-native\":\n throw new Error(\"Please provide AsyncStorage for React Native\");\n case \"unknown\":\n default:\n console.warn(\n `Unknown platform detected: ${platform}. Defaulting to in memory storage.`,\n );\n return new MemoryStorageAdapter();\n }\n};\n","import { sha256 } from \"@noble/hashes/sha2.js\";\n\n/**\n * Universal SHA-256 hashing function that works across all platforms.\n * Uses \\@noble/hashes for cross-platform compatibility.\n * @param value - The string value to hash\n * @returns Promise resolving to the hex-encoded hash string\n */\nexport const hashString = (value: string): string => {\n const encoder = new TextEncoder();\n const data = encoder.encode(value);\n const hash = sha256(data);\n return Array.from(hash)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n};\n","import { z } from \"@hono/zod-openapi\";\n\n/**\n * @description Zod schema for a canvas.\n * Represents the structure of a canvas, including its tiles and metadata.\n */\nexport const CanvasSchema = z.object({\n company_id: z.number(),\n created_at: z.string(),\n id: z.string().uuid(),\n title: z.string().nullable(),\n updated_at: z.string(),\n is_removed: z.boolean(),\n is_public: z.boolean(),\n nodes: z.array(z.any()),\n edges: z.array(z.any()),\n});\n\nexport type Canvas = z.infer<typeof CanvasSchema>;\n\nexport const FrontendCanvasSchema = CanvasSchema.omit({\n company_id: true,\n created_at: true,\n updated_at: true,\n is_removed: true,\n});\n\nexport type FrontendCanvas = z.infer<typeof FrontendCanvasSchema>;\n\nexport const UpdateCanvasSchema = z.object({\n id: CanvasSchema.shape.id,\n title: CanvasSchema.shape.title.optional(),\n nodes: CanvasSchema.shape.nodes.optional(),\n edges: CanvasSchema.shape.edges.optional(),\n is_public: CanvasSchema.shape.is_public.optional(),\n});\n\nexport const CreateCanvasSchema = CanvasSchema.omit({\n id: true,\n created_at: true,\n updated_at: true,\n company_id: true,\n is_removed: true,\n}).extend({\n flow_id: z.string().optional(),\n});\n\nexport type CreateCanvas = z.infer<typeof CreateCanvasSchema>;\n\nexport const CanvasIdParam = CanvasSchema.shape.id.openapi(\"CanvasId\", {\n type: \"string\",\n format: \"uuid\",\n});\n\nexport const belongsToCanvas = (\n canvas: FrontendCanvas,\n element: { type: \"dataReport\" | \"visualization\"; id: number },\n) => {\n return canvas.nodes.some((node) => {\n // Type guard: check if node is an object with type and id properties\n if (!node || typeof node !== \"object\") {\n return false;\n }\n\n // Check if node has the required properties with correct types\n if (!(\"type\" in node)) {\n return false;\n }\n\n const nodeRecord = node as Record<string, unknown>;\n\n if (element.type === \"dataReport\") {\n if (\n nodeRecord.type === \"dataReport\" &&\n nodeRecord.data &&\n typeof nodeRecord.data === \"object\" &&\n \"reportId\" in nodeRecord.data\n ) {\n // TypeScript type guard for node.data\n const data = nodeRecord.data as { reportId?: number };\n return data.reportId === element.id;\n }\n return false;\n }\n\n return (\n nodeRecord.type === \"visualization\" &&\n nodeRecord.data &&\n typeof nodeRecord.data === \"object\" &&\n \"visualizationId\" in nodeRecord.data &&\n nodeRecord.data.visualizationId === element.id\n );\n });\n};\n","import { createRoute } from \"@hono/zod-openapi\";\nimport { z } from \"zod\";\nimport {\n CanvasIdParam,\n CreateCanvasSchema,\n FrontendCanvasSchema,\n UpdateCanvasSchema,\n} from \"../../schemas/canvas\";\nimport { SupabaseHeaderSchema } from \"./auth\";\n\nexport const ListCanvases = createRoute({\n method: \"get\",\n path: \"/api/v1/canvases\",\n operationId: \"listCanvases\",\n request: {\n headers: SupabaseHeaderSchema,\n query: z.object({\n search: z.string().optional(),\n }),\n },\n responses: {\n 200: {\n description: \"A list of canvases\",\n content: {\n \"application/json\": {\n schema: z.array(\n FrontendCanvasSchema.extend({\n canvas_flows: z\n .object({\n flow_id: z.string(),\n })\n .array(),\n }),\n ),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveCanvas = createRoute({\n method: \"get\",\n path: \"/api/v1/canvas/{canvas_id}\",\n operationId: \"retrieveCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n canvas_id: CanvasIdParam,\n }),\n },\n responses: {\n 200: {\n description: \"The canvas with the given id\",\n content: {\n \"application/json\": {\n schema: FrontendCanvasSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve canvas with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const CreateCanvas = createRoute({\n method: \"post\",\n path: \"/api/v1/canvas/\",\n operationId: \"createCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: CreateCanvasSchema,\n },\n },\n },\n },\n responses: {\n 201: {\n description: \"The created canvas\",\n content: {\n \"application/json\": {\n schema: z.object({\n id: z.string(),\n }),\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid request\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const UpdateCanvas = createRoute({\n method: \"put\",\n path: \"/api/v1/canvas/{canvas_id}\",\n operationId: \"updateCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n canvas_id: CanvasIdParam,\n }),\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: UpdateCanvasSchema.omit({ id: true }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"The updated canvas\",\n content: {\n \"application/json\": {\n schema: z.object({\n success: z.literal(true),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve canvas with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const DeleteCanvas = createRoute({\n method: \"delete\",\n path: \"/api/v1/canvas/{canvas_id}\",\n operationId: \"deleteCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n canvas_id: CanvasIdParam,\n }),\n },\n responses: {\n 204: {\n description: \"Canvas deleted successfully\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to delete canvas with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetCanvasForFlow = createRoute({\n method: \"get\",\n path: \"/api/v1/canvas/flow/{flow_id}\",\n operationId: \"getCanvasForFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n flow_id: z.string().uuid(),\n }),\n },\n responses: {\n 200: {\n description: \"The canvas for the given flow\",\n content: {\n \"application/json\": {\n schema: FrontendCanvasSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve canvas for this flow\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { z } from \"zod\";\n\nexport const QuickActionSchema = z.object({\n label: z.string(),\n explanation: z.string(),\n});\n\nexport const QuickActionsSchema = QuickActionSchema.array();\n\nexport type QuickActions = z.infer<typeof QuickActionsSchema>;\nexport type QuickAction = QuickActions[number];\n","import { z } from \"zod\";\nexport const FrontendTimelineItemSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"dataReport\"),\n flowDataId: z.number(),\n flowId: z.string(),\n title: z.string(),\n bookmarked: z.boolean(),\n answer: z.string().nullable(),\n }),\n z.object({\n type: z.literal(\"visualization\"),\n flowId: z.string(),\n flowDataId: z.number(),\n flowDataVisualizationId: z.number(),\n title: z.string(),\n bookmarked: z.boolean(),\n }),\n z.object({\n type: z.literal(\"message\"),\n }),\n]);\n\nexport type FrontendTimelineItem = z.infer<typeof FrontendTimelineItemSchema>;\n\nexport type DataReportTimelineItem = FrontendTimelineItem & {\n type: \"dataReport\";\n};\n\nexport type VisualizationTimelineItem = FrontendTimelineItem & {\n type: \"visualization\";\n};\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { QuickActionsSchema } from \"@mm/shared/schemas/chat/quickActions\";\nimport { FrontendTimelineItemSchema } from \"@mm/shared/schemas/timeline\";\nimport { SupabaseHeaderSchema } from \"./auth\";\nimport { FlowIdParam } from \"./flows.routes\";\n\nexport const ChatTimeline = createRoute({\n hide: true,\n method: \"get\",\n path: \"/api/v1/chat/{flowId}/timeline\",\n operationId: \"retrieveChatTimeline\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The timeline of generated insights for the flow\",\n content: {\n \"application/json\": {\n schema: FrontendTimelineItemSchema.array(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ChatMessages = createRoute({\n method: \"get\",\n path: \"/api/v1/chat/{flowId}/messages\",\n operationId: \"retrieveChatMessages\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The messages from the given flow\",\n content: {\n \"application/json\": {\n // we don't want to have to write a parser for Vercel AI messages\n schema: z.object({ messages: z.looseObject({}).array() }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const QuickActions = createRoute({\n hide: true,\n method: \"post\",\n path: \"/api/v1/chat/{flowId}/quick-actions\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n content: z.string(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"The quick actions for the given message\",\n content: {\n \"application/json\": {\n schema: QuickActionsSchema,\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"The provided content is invalid\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"@mm/shared/endpoints/companion/auth\";\nimport {\n FrontendVisualizationSchema,\n FrontendVisualizationWithDataSchema,\n V1FrontendVisualizationWithDataSchema,\n} from \"@mm/shared/schemas/visualizations\";\nimport { FlowDataIdParam, FlowIdParam } from \"./companion/flows.routes\";\n\nexport const VisualizationWithDataResponse = z\n .union([\n FrontendVisualizationWithDataSchema,\n V1FrontendVisualizationWithDataSchema,\n ])\n .openapi(\"VisualizationWithData\");\n\nexport const FetchVisualization = createRoute({\n method: \"get\",\n path: \"/api/v1/visualizations/{visualization_id}\",\n operationId: \"fetchVisualization\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z\n .object({ visualization_id: z.string().pipe(z.coerce.number()) })\n .openapi(\"VisualizationId\", { type: \"number\" }),\n },\n responses: {\n 200: {\n description: \"The content of the visualization\",\n content: {\n \"application/json\": {\n schema: VisualizationWithDataResponse,\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid arguments to fetch visualization\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to fetch visualization with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ListVisualizationsForFlow = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/visualizations\",\n operationId: \"listVisualizationsForFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: FlowDataIdParam.partial(),\n },\n responses: {\n 200: {\n description:\n \"List visualizations for a given flow. Can be filtered by flow data id as well\",\n content: {\n \"application/json\": {\n schema: FrontendVisualizationSchema.array(),\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid arguments to fetch visualization\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to list visualizations\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { z } from \"zod\";\n\nexport const DataTableSchema = z.object({\n id: z.number(),\n dataset: z.string(),\n table_name: z.string(),\n description: z.string().nullable(),\n primary_key_names: z.string().array(),\n row_count: z.number().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n source_id: z.number(),\n parent_table_id: z.number().nullable(),\n});\n\nexport type DataTable = z.infer<typeof DataTableSchema>;\n\nexport const DataTableColumnSchema = z.object({\n id: z.number(),\n name: z.string(),\n data_type: z.string().nullable(),\n description: z.string().nullable(),\n null_percentage: z.number().nullable(),\n unique_values: z.number().nullable(),\n sample_values: z.array(z.unknown()).nullable(),\n});\n\nexport const DataTableWithColumnsSchema = DataTableSchema.extend({\n columns: z.array(DataTableColumnSchema),\n});\n\nexport type DataTableWithColumns = z.infer<typeof DataTableWithColumnsSchema>;\n\nexport type ReportDataFilters = {\n columns?: string[];\n limit: number;\n sorting: SortingState;\n filters: TableFilters;\n cursor?: number;\n};\n\nexport type TableFilters = Record<string, string | number>;\n\nexport interface ColumnSort {\n desc: boolean;\n id: string;\n}\nexport type SortingState = ColumnSort[];\n\nexport const toSearchParams = ({\n cursor,\n filters,\n sorting,\n limit,\n}: {\n cursor?: number;\n filters?: TableFilters;\n sorting?: SortingState;\n limit?: number;\n}) => {\n const params: {\n limit?: number;\n cursor?: number;\n order?: string;\n filter?: string;\n } = {};\n\n if (limit !== undefined) {\n params.limit = limit;\n }\n\n if (cursor !== undefined) {\n params.cursor = cursor;\n }\n\n const sortingParams = sorting\n ?.map((c) => `${c.id}:${c.desc ? \"DESC\" : \"ASC\"}`)\n .join(\",\");\n\n if (sortingParams) {\n params.order = sortingParams;\n }\n\n if (filters) {\n const filterParams = Object.entries(filters)\n .flatMap(([key, value]) => {\n if (\n !(\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n )\n )\n return [];\n return `${key}:${encodeURIComponent(value)}`;\n })\n .join(\",\");\n\n if (filterParams.length > 0) {\n params.filter = filterParams;\n }\n }\n\n return params;\n};\n","{\n \"name\": \"@magemetrics/core\",\n \"type\": \"module\",\n \"version\": \"0.4.3\",\n \"description\": \"MageMetrics client library\",\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && rolldown -c rolldown.config.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist\",\n \"lint\": \"sh -c 'cd ../../ && pnpm exec eslint --report-unused-disable-directives packages/core'\",\n \"lint:fix\": \"sh -c 'cd ../../ && pnpm exec eslint packages/core --fix'\",\n \"format\": \"prettier --check .\",\n \"format:fix\": \"prettier --write .\"\n },\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"imports\": {\n \"#*\": {\n \"types\": [\n \"./src/*.ts\",\n \"./src/*\"\n ],\n \"default\": [\n \"./src/*\"\n ]\n }\n },\n \"exports\": {\n \".\": {\n \"@magemetrics/source\": \"./src/index.ts\",\n \"types\": \"./dist/index.d.ts\",\n \"react-native\": \"./dist/index.js\",\n \"browser\": \"./dist/index.js\",\n \"node\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\"\n },\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/\"\n ],\n \"dependencies\": {\n \"@mm/shared\": \"workspace:*\",\n \"@noble/hashes\": \"^2.0.1\",\n \"@supabase/auth-js\": \"^2.81.1\",\n \"ai\": \"5.0.93\",\n \"dayjs\": \"^1.11.19\",\n \"openapi-fetch\": \"^0.15.0\",\n \"zod\": \"^4.1.12\",\n \"type-fest\": \"^5.2.0\",\n \"@types/json-schema\": \"7.0.15\"\n },\n \"devDependencies\": {\n \"@microsoft/api-extractor\": \"^7.55.0\",\n \"@mm/tsconfig\": \"workspace:*\",\n \"@types/node\": \"^22.18.8\",\n \"rolldown\": \"1.0.0-beta.50\",\n \"tsup\": \"^8.5.1\",\n \"unplugin-dts\": \"1.0.0-beta.6\",\n \"vitest\": \"^4.0.9\"\n }\n}\n","import type { MMChatUIMessage } from \"@mm/shared/ai/schema/index\";\nimport { DefaultChatTransport, type HttpChatTransportInitOptions } from \"ai\";\n\nexport type MageMetricsChatTransportOptions = Omit<\n HttpChatTransportInitOptions<MMChatUIMessage>,\n \"api\" | \"prepareSendMessagesRequest\"\n>;\n\nexport class MageMetricsChatTransport extends DefaultChatTransport<MMChatUIMessage> {\n constructor(\n apiUrl: string,\n flowId: string,\n options: MageMetricsChatTransportOptions,\n ) {\n super({\n ...options,\n api: `${apiUrl}/api/v1/chat/${flowId}`,\n prepareSendMessagesRequest({ messages, id: chatId }) {\n // make it clear we only send one message, not an array made of one message\n return { body: { message: messages.at(-1), id: chatId } };\n },\n });\n }\n}\n","import type { AuthState } from \"./types\";\n\n/**\n * Event types using discriminated union for type safety and extensibility\n */\nexport type MageMetricsEvent =\n | {\n type: \"authStateChange\";\n detail: AuthState;\n }\n | {\n type: \"userChange\";\n detail: { id: string };\n };\n// Future event types can be added here as union members\n\n/**\n * Event listener function type\n */\nexport type MageMetricsEventListener<\n T extends MageMetricsEvent = MageMetricsEvent,\n> = (event: T) => void;\n\n/**\n * Simple event emitter for MageMetrics client.\n * Uses discriminated unions for type-safe events.\n */\nexport class MageMetricsEventEmitter {\n private listeners: Map<string, Set<MageMetricsEventListener>> = new Map();\n\n addEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n options?: { signal?: AbortSignal },\n ): void {\n if (!this.listeners.has(type)) {\n this.listeners.set(type, new Set());\n }\n\n // Handle AbortSignal for compatibility\n if (options?.signal) {\n if (options.signal.aborted) {\n return; // Don't add if already aborted\n }\n\n // Set up abort handler\n const abortHandler = () => {\n this.removeEventListener(type, listener);\n };\n\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n this.listeners.get(type)!.add(listener as MageMetricsEventListener);\n }\n\n removeEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n ): void {\n const typeListeners = this.listeners.get(type);\n if (typeListeners) {\n typeListeners.delete(listener as MageMetricsEventListener);\n if (typeListeners.size === 0) {\n this.listeners.delete(type);\n }\n }\n }\n\n dispatch<T extends MageMetricsEvent>(\n type: T[\"type\"],\n detail: T[\"detail\"],\n ): void {\n const typeListeners = this.listeners.get(type);\n if (typeListeners) {\n const event = { type, detail } as T;\n\n typeListeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n console.error(`Error in event listener for \"${type}\":`, error);\n }\n });\n }\n }\n}\n","export type Resolvable<T> = T | Promise<T> | (() => T) | (() => Promise<T>);\n\nexport const resolve = <T>(value: Resolvable<T>): Promise<T> => {\n if (typeof value === \"function\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-function-type\n return Promise.resolve((value as Function)());\n }\n\n return Promise.resolve(value as T);\n};\n","import type { AsyncStorage } from \"#adapters/storage/interface\";\n\n/**\n * Configuration options for the MageMetricsClient\n */\nexport interface MageMetricsClientConfig {\n apiUrl: string;\n apiKey: string;\n externalJwt?: string;\n additionalHeaders?: Record<string, string>;\n storageAdapter?: AsyncStorage;\n applicationName?: string;\n}\n\n/**\n * Authentication states\n */\nexport type AuthState = \"initializing\" | \"ready\" | \"error\";\n\n/**\n * Parameters for starting a flow\n */\nexport type CreateFlowParam =\n | { query: string }\n | { triggerId: string; variables: Record<string, string> };\n\n/**\n * Parameters for generating contextual insights\n */\nexport type GenerateInsightParam = {\n selectedFilterValue: string;\n customId: string;\n};\n\n/**\n * Token storage keys\n */\nexport const TOKEN_STORAGE_KEY = \"mm-ai-sp-token\";\nexport const CHECK_KEY = \"mm-ai-check-key\";\n","import {\n addApiKeyHeader,\n addVersionHeader,\n ApiError,\n HEADER_CLIENT_VERSION,\n throwOnError,\n} from \"@mm/shared/api/client/middleware\";\nimport {\n GenerateInsight,\n type ExtractInsightResponse,\n} from \"@mm/shared/endpoints/admin-console/contextualInsights.routes\";\nimport {\n ExchangeExternalToken,\n GetApiInformation,\n type GetApiInformationOutput,\n} from \"@mm/shared/endpoints/auth.routes\";\nimport {\n CreateFlow,\n ExportReportData,\n GetReportColumns,\n GetReportData,\n GetReportRowCount,\n RetrieveFlowDataReports,\n RetrieveRecentFlows,\n} from \"@mm/shared/endpoints/companion/flows.routes\";\nimport { TriggerFlow } from \"@mm/shared/endpoints/companion/triggers.routes\";\nimport type {\n InternalApiClient,\n NoAuthPaths,\n} from \"@mm/shared/types/api-types\";\nimport { GoTrueClient, type GoTrueClientOptions } from \"@supabase/auth-js\";\nimport createApiClient, { type Client, type Middleware } from \"openapi-fetch\";\n\nimport { createStorageAdapter } from \"#adapters/storage/factory\";\nimport type { AsyncStorage } from \"#adapters/storage/interface\";\nimport { hashString } from \"#utils/hash\";\nimport type { MMChatUIMessage } from \"@mm/shared/ai/schema/index\";\nimport {\n CreateCanvas,\n DeleteCanvas,\n GetCanvasForFlow,\n ListCanvases,\n RetrieveCanvas,\n UpdateCanvas,\n} from \"@mm/shared/endpoints/companion/canvas.routes\";\nimport { ChatMessages } from \"@mm/shared/endpoints/companion/chat.routes\";\nimport { ListVisualizationsForFlow } from \"@mm/shared/endpoints/visualizations.routes\";\nimport {\n FrontendCanvasSchema,\n type CreateCanvas as CreateCanvasBody,\n type UpdateCanvasSchema,\n} from \"@mm/shared/schemas/canvas\";\nimport {\n toSearchParams,\n type ReportDataFilters,\n} from \"@mm/shared/schemas/data-table\";\nimport type { FrontendRecentFlows } from \"@mm/shared/schemas/flows\";\nimport { z } from \"zod\";\nimport packageJson from \"../../package.json\";\nimport {\n MageMetricsChatTransport,\n type MageMetricsChatTransportOptions,\n} from \"./MageMetricsChatTransport\";\nimport {\n MageMetricsEventEmitter,\n type MageMetricsEvent,\n type MageMetricsEventListener,\n} from \"./MageMetricsEventEmitter\";\nimport { resolve } from \"./resolvable\";\nimport {\n CHECK_KEY,\n TOKEN_STORAGE_KEY,\n type AuthState,\n type CreateFlowParam,\n type GenerateInsightParam,\n type MageMetricsClientConfig,\n} from \"./types\";\n\nconst MM_CLIENT_VERSION = packageJson.version;\n\nexport const getPublicApiClient = (\n apiUrl: string,\n apiKey: string,\n): Client<NoAuthPaths> => {\n const client = createApiClient<NoAuthPaths>({ baseUrl: apiUrl });\n client.use(throwOnError);\n client.use(addVersionHeader(MM_CLIENT_VERSION));\n client.use(addApiKeyHeader(apiKey));\n return client;\n};\n\n/**\n * Core MageMetrics client that handles authentication lifecycle and provides\n * a promise-based API that automatically waits for authentication to complete.\n *\n * This version uses composition instead of inheritance and pluggable storage adapters\n * for cross-platform compatibility.\n */\nexport class MageMetricsClient {\n private config: MageMetricsClientConfig;\n private authState: AuthState = \"initializing\";\n private supabaseClient: GoTrueClient | null = null;\n private internalApiClient: InternalApiClient;\n private noAuthApiClient: ReturnType<\n typeof createApiClient<NoAuthPaths>\n > | null = null;\n private authApiResponse: GetApiInformationOutput | null = null;\n private authPromise: Promise<void> | null = null;\n private processedJwt: string | symbol = Symbol(\"initial\");\n private userId: string | null = null;\n private storageAdapter: AsyncStorage;\n private events = new MageMetricsEventEmitter();\n private authOptions: GoTrueClientOptions;\n\n constructor(\n config: MageMetricsClientConfig,\n auth?: Pick<GoTrueClientOptions, \"fetch\">,\n ) {\n this.config = config;\n\n // Initialize storage adapter - either provided or auto-detected\n this.storageAdapter = config.storageAdapter || createStorageAdapter();\n\n this.internalApiClient = createApiClient({\n baseUrl: this.config.apiUrl,\n });\n this.internalApiClient.use(throwOnError);\n this.internalApiClient.use(this.createSupabaseHeaderMiddleware());\n\n this.authOptions = auth || {};\n }\n\n toJSON() {\n return {\n config: this.encodeCheckKey(this.config.apiKey, this.config.apiUrl),\n };\n }\n\n get apiConfig() {\n return {\n apiUrl: this.config.apiUrl,\n apiKey: this.config.apiKey,\n };\n }\n\n /**\n * Add an event listener for authentication state changes\n * @param type the type of the event\n * @param listener the listener to add\n * @param options options for the event listener\n * @param options.signal an optional AbortSignal to abort the event listener\n */\n addEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n options?: { signal?: AbortSignal },\n ): void {\n this.events.addEventListener(type, listener, options);\n }\n\n /**\n * Remove an event listener\n * @param type the type of the event\n * @param listener the listener to remove\n */\n removeEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n ): void {\n this.events.removeEventListener(type, listener);\n }\n\n public async waitForAuth(): Promise<void> {\n if (this.authState === \"ready\") {\n return Promise.resolve();\n }\n\n if (this.authState === \"error\") {\n throw new Error(\"Authentication failed\");\n }\n\n // Wait for the current auth promise to resolve\n if (!this.authPromise) {\n this.authPromise = this.performAuthFlow();\n }\n\n return this.authPromise;\n }\n\n public async updateExternalJwt(jwt: string): Promise<void> {\n if (this.config.externalJwt === jwt) return;\n\n this.config.externalJwt = jwt;\n this.processedJwt = Symbol(\"updating\");\n await this.performAuthFlow();\n }\n\n public get state(): AuthState {\n return this.authState;\n }\n\n public async getHeaders(): Promise<Record<string, string>> {\n await this.waitForAuth();\n\n if (!this.supabaseClient) {\n return {};\n }\n\n const session = await this.supabaseClient.getSession();\n if (!session.data.session) {\n return {};\n }\n const { access_token } = session.data.session;\n\n return {\n [HEADER_CLIENT_VERSION]: MM_CLIENT_VERSION,\n \"sp-access-token\": access_token,\n };\n }\n\n private async clearStorage(): Promise<void> {\n try {\n await this.storageAdapter.removeItem(TOKEN_STORAGE_KEY);\n await this.storageAdapter.removeItem(CHECK_KEY);\n } catch {\n // Ignore storage errors\n }\n }\n\n public async logout(): Promise<void> {\n if (this.supabaseClient) {\n await this.supabaseClient.signOut({ scope: \"local\" });\n }\n\n await this.clearStorage();\n }\n\n public auth = {\n startAutoRefresh: () => this.supabaseClient?.startAutoRefresh(),\n stopAuthRefresh: () => this.supabaseClient?.startAutoRefresh(),\n };\n\n /**\n * Public API methods that automatically wait for authentication\n */\n public api = {\n getFlowVisualizations: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n ListVisualizationsForFlow.path,\n { params: { path: { flowId } } },\n );\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n return data;\n },\n getFlowDataReports: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveFlowDataReports.path,\n { params: { path: { flowId } } },\n );\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n return data;\n },\n getRecentFlows: async (\n params: { limit?: number } = {},\n ): Promise<FrontendRecentFlows[]> => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveRecentFlows.path,\n {\n params: {\n query: {\n limit: params.limit ?? 10,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return data;\n },\n\n createFlow: async (\n request: CreateFlowParam,\n ): Promise<{ flowId: string }> => {\n await this.waitForAuth();\n\n if (\"query\" in request) {\n const { data, error, response } = await this.internalApiClient.POST(\n CreateFlow.path,\n {\n body: {\n userQuery: request.query,\n applicationName: this.config.applicationName,\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return { flowId: data.flowId };\n } else {\n const { triggerId, variables } = request;\n const { data, response } = await this.internalApiClient.POST(\n TriggerFlow.path,\n {\n body: {\n triggerId,\n variables,\n },\n },\n );\n\n if (!data || data.status === \"error\") {\n throw new ApiError(\n data?.error ?? \"Failed to trigger flow\",\n response,\n {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n },\n );\n }\n\n return { flowId: data.flowId };\n }\n },\n\n canvas: {\n list: async (query?: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n ListCanvases.path,\n {\n params: {\n query: {\n search: query,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return FrontendCanvasSchema.extend({\n canvas_flows: z\n .object({\n flow_id: z.string(),\n })\n .array(),\n })\n .array()\n .parse(data);\n },\n get: async (canvasId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveCanvas.path,\n {\n params: {\n path: {\n canvas_id: canvasId,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return FrontendCanvasSchema.parse(data);\n },\n create: async (body: CreateCanvasBody) => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.POST(\n CreateCanvas.path,\n {\n body,\n },\n );\n\n if (!data) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return data;\n },\n update: async (body: z.infer<typeof UpdateCanvasSchema>) => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.PUT(\n UpdateCanvas.path,\n {\n params: {\n path: {\n canvas_id: String(body.id),\n },\n },\n body,\n },\n );\n\n if (!data) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"PUT\",\n });\n }\n\n return data;\n },\n\n delete: async (canvasId: string) => {\n await this.waitForAuth();\n\n const { error, response } = await this.internalApiClient.DELETE(\n DeleteCanvas.path,\n {\n params: { path: { canvas_id: canvasId } },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"DELETE\",\n });\n }\n },\n\n getForFlow: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n GetCanvasForFlow.path,\n {\n params: {\n path: {\n flow_id: flowId,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return FrontendCanvasSchema.parse(data);\n },\n },\n\n exportReportData: async (\n reportId: number,\n format: \"text\" | \"blob\" = \"blob\",\n ): Promise<{ filename: string; data: Blob | string }> => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.GET(\n ExportReportData.path,\n {\n params: {\n path: {\n report_id: String(reportId),\n },\n },\n parseAs: format,\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n const contentDisposition = response.headers.get(\"content-disposition\");\n const filename = contentDisposition\n ? contentDisposition.split(\"filename=\")[1]?.replace(/\"/g, \"\") ||\n `mm-export-${reportId}.csv`\n : `mm-export-${reportId}.csv`;\n\n return { filename: filename, data: data };\n },\n\n generateContextualInsight: async (\n payload: GenerateInsightParam,\n ): Promise<ExtractInsightResponse> => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.POST(\n GenerateInsight.path,\n {\n body: {\n selected_filter_value: payload.selectedFilterValue,\n custom_id: payload.customId,\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return data;\n },\n\n getChatTransport: (\n flowId: string,\n options?: MageMetricsChatTransportOptions,\n ) => {\n return new MageMetricsChatTransport(this.config.apiUrl, flowId, {\n ...options,\n headers: async () => {\n const authHeaders = await this.getHeaders();\n const headers = await resolve(options?.headers);\n\n return {\n ...headers,\n ...authHeaders,\n };\n },\n });\n },\n\n getChatMessages: async (flowId: string) => {\n const { data, error, response } = await this.internalApiClient.GET(\n ChatMessages.path,\n {\n params: {\n path: {\n flowId,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return data.messages as unknown as MMChatUIMessage[];\n },\n\n fetchReportData: async (\n reportId: number,\n { columns, limit, sorting, filters, cursor }: ReportDataFilters,\n signal?: AbortSignal,\n ) => {\n const params = toSearchParams({ limit, sorting, filters, cursor });\n\n const { data, error } = await this.internalApiClient.GET(\n GetReportData.path,\n {\n params: {\n path: {\n report_id: reportId.toString(),\n },\n query: {\n columns: columns?.join(\",\"),\n limit: params.limit,\n order: params.order,\n cursor: params.cursor,\n filter: params.filter,\n },\n },\n signal,\n },\n );\n\n if (error) {\n console.error(\n `Failed to fetch data for report ${reportId}: ${error.error}`,\n );\n throw new Error(`Failed to fetch data for flow data ${reportId}`);\n }\n\n return data;\n },\n\n getReport: async (reportId: number) => {\n const params = { params: { path: { report_id: String(reportId) } } };\n const columnsPromise = this.internalApiClient.GET(\n GetReportColumns.path,\n params,\n );\n\n const rowCountPromise = this.internalApiClient.GET(\n GetReportRowCount.path,\n params,\n );\n\n const [\n { data: columns, error: columnsError, response: columnsResponse },\n { data: rowCount, error: rowCountError, response: rowCountResponse },\n ] = await Promise.all([columnsPromise, rowCountPromise]);\n\n if (columnsError) {\n throw new ApiError(columnsError.error, columnsResponse, {\n status: columnsResponse.status,\n statusText: columnsResponse.statusText,\n url: columnsResponse.url,\n method: \"GET\",\n });\n }\n\n if (rowCountError) {\n throw new ApiError(rowCountError.error, rowCountResponse, {\n status: rowCountResponse.status,\n statusText: rowCountResponse.statusText,\n url: rowCountResponse.url,\n method: \"GET\",\n });\n }\n\n return {\n columns: columns,\n rowCount: rowCount,\n data: this.api.fetchReportData,\n };\n },\n };\n\n /**\n * Perform the complete authentication flow\n */\n private async performAuthFlow(): Promise<void> {\n try {\n this.setState(\"initializing\");\n\n // 1. Get API information first (this can probably be cached, the client is already cached)\n const apiInfo = await this.getApiInformation();\n\n // 2. Initialize Supabase client (this is cached already)\n this.initializeSupabaseClient(apiInfo.anonKey, apiInfo.apiUrl);\n\n // 4. Check for existing session or exchange token\n await this.handleAuthentication();\n\n // 5. Update local storage with the new JWT\n if (this.config.externalJwt) {\n await this.saveCheckKey(this.config.externalJwt, this.config.apiKey);\n }\n\n this.setState(\"ready\");\n } catch (error) {\n console.error(\"Authentication flow failed:\", error);\n this.setState(\"error\");\n throw error;\n }\n }\n\n private async getApiInformation() {\n if (!this.noAuthApiClient || !this.authApiResponse) {\n this.noAuthApiClient = getPublicApiClient(\n this.config.apiUrl,\n this.config.apiKey,\n );\n\n const { data } = await this.noAuthApiClient.GET(GetApiInformation.path, {\n params: {\n query: {\n apiKey: this.config.apiKey,\n },\n },\n });\n\n if (!data) {\n throw new Error(\"Failed to fetch API information\");\n }\n this.authApiResponse = data;\n }\n\n return this.authApiResponse;\n }\n\n private initializeSupabaseClient(anonKey: string, apiUrl: string): void {\n if (!this.supabaseClient) {\n this.supabaseClient = new GoTrueClient({\n url: `${apiUrl}/auth/v1`,\n storageKey: TOKEN_STORAGE_KEY,\n headers: {\n apiKey: anonKey,\n },\n storage: this.storageAdapter,\n ...this.authOptions,\n });\n\n // Set up auth state change listener with token refresh handling\n this.supabaseClient.onAuthStateChange((event, session) => {\n console.debug(\"Supabase auth state change:\", event, !!session);\n\n if (event === \"SIGNED_IN\" && session?.user) {\n if (this.userId !== session.user.id && this.userId !== null) {\n this.events.dispatch(\"userChange\", { id: session.user.id });\n }\n this.userId = session.user.id;\n }\n\n // Handle token refresh\n if (event === \"TOKEN_REFRESHED\" && session) {\n console.debug(\"Token refreshed successfully\");\n this.setState(\"ready\");\n } else if (event === \"SIGNED_OUT\") {\n console.debug(\"User signed out\");\n void this.clearStorage();\n this.setState(\"initializing\");\n }\n });\n }\n }\n\n public client(): InternalApiClient {\n return this.internalApiClient;\n }\n\n /**\n * Handle the authentication logic (check session or exchange token)\n */\n private async handleAuthentication(): Promise<void> {\n if (!this.supabaseClient) {\n throw new Error(\"Supabase client not initialized\");\n }\n\n // Skip if we've already processed this JWT\n if (this.processedJwt === this.config.externalJwt) {\n return;\n }\n\n try {\n const { data, error } = await this.supabaseClient.getSession();\n\n if (error) {\n console.error(\"Error getting session:\", error);\n this.processedJwt = this.config.externalJwt || \"\";\n return;\n }\n\n const isCheckValid = await this.compareCheckKey(\n this.config.externalJwt ?? \"\",\n this.config.apiKey,\n );\n\n if (data.session && this.config.externalJwt && isCheckValid) {\n console.debug(\"Session found, authentication ready\");\n this.processedJwt = this.config.externalJwt || \"\";\n } else if (this.config.externalJwt) {\n console.debug(\"No session found, exchanging external JWT\");\n await this.clearCheckKey();\n await this.exchangeExternalToken();\n this.processedJwt = this.config.externalJwt;\n } else {\n console.debug(\"No session and no external JWT provided\");\n this.processedJwt = this.config.externalJwt || \"\";\n }\n } catch (error) {\n console.error(\"Unhandled error during authentication:\", error);\n this.processedJwt = this.config.externalJwt || \"\";\n throw error;\n }\n }\n\n /**\n * Exchange external JWT for Supabase tokens\n */\n private async exchangeExternalToken(): Promise<void> {\n if (\n !this.noAuthApiClient ||\n !this.supabaseClient ||\n !this.config.externalJwt\n ) {\n throw new Error(\n \"Required clients or JWT not available for token exchange\",\n );\n }\n\n const { data } = await this.noAuthApiClient.POST(\n ExchangeExternalToken.path,\n {\n body: {\n apiKey: this.config.apiKey,\n externalJWT: this.config.externalJwt,\n },\n headers: this.config.additionalHeaders || {},\n },\n );\n\n if (!data) {\n throw new Error(\"Failed to exchange tokens\");\n }\n\n // Set the session in Supabase\n await this.supabaseClient.setSession({\n access_token: data.accessToken,\n refresh_token: data.refreshToken,\n });\n\n console.debug(\"Token exchange successful, session set\");\n }\n\n private createSupabaseHeaderMiddleware(): Middleware {\n return {\n onRequest: async ({ request }) => {\n /* this will wait for auth to be ready before proceeding with the request */\n const headers = await this.getHeaders();\n\n if (!this.supabaseClient) {\n return request;\n }\n\n const session = await this.supabaseClient.getSession();\n if (!session.data.session) {\n return request;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n request.headers.set(key, value);\n }\n\n return request;\n },\n };\n }\n\n private setState(state: AuthState): void {\n this.authState = state;\n this.events.dispatch(\"authStateChange\", state);\n }\n\n private encodeCheckKey(externalJwt: string, apiKey: string): string {\n return hashString(\n JSON.stringify({\n externalJwt,\n apiKey,\n }),\n );\n }\n\n async saveCheckKey(externalJwt: string, apiKey: string): Promise<void> {\n const encodedKey = this.encodeCheckKey(externalJwt, apiKey);\n await this.storageAdapter.setItem(CHECK_KEY, encodedKey);\n }\n\n async compareCheckKey(externalJwt: string, apiKey: string): Promise<boolean> {\n const storedKey = await this.storageAdapter.getItem(CHECK_KEY);\n if (!storedKey) return false;\n\n const newValue = this.encodeCheckKey(externalJwt, apiKey);\n return storedKey === newValue;\n }\n\n async clearCheckKey(): Promise<void> {\n await this.storageAdapter.removeItem(CHECK_KEY);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../shared/src/api/client/middleware.ts","../../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@8.1.0_zod@4.1.12/node_modules/@asteasolutions/zod-to-openapi/dist/index.mjs","../../../node_modules/.pnpm/hono@4.9.9/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/@hono+zod-openapi@1.1.5_hono@4.9.9_zod@4.1.12/node_modules/@hono/zod-openapi/dist/index.js","../../shared/src/endpoints/admin-console/sqlPreview.routes.ts","../../shared/src/endpoints/utils.ts","../../shared/src/endpoints/companion/auth.ts","../../shared/src/schemas/feedback.ts","../../shared/src/companion/types.ts","../../shared/src/schemas/flows.ts","../../shared/src/utils/daysjs.ts","../../shared/src/data/FormattedData.ts","../../shared/src/schemas/visualizations.ts","../../shared/src/endpoints/companion/flows.routes.ts","../../shared/src/endpoints/admin-console/contextualInsights.routes.ts","../../shared/src/endpoints/auth.routes.ts","../../shared/src/endpoints/companion/speech.routes.ts","../../shared/src/endpoints/end2end/run.routes.ts","../../shared/src/endpoints/companion/triggers.routes.ts","../src/utils/platform.ts","../src/adapters/storage/browser.ts","../src/adapters/storage/memory.ts","../src/adapters/storage/factory.ts","../src/utils/hash.ts","../../shared/src/schemas/canvas.ts","../../shared/src/endpoints/companion/canvas.routes.ts","../../shared/src/schemas/chat/quickActions.ts","../../shared/src/schemas/timeline.ts","../../shared/src/endpoints/companion/chat.routes.ts","../../shared/src/endpoints/visualizations.routes.ts","../../shared/src/schemas/data-table.ts","../package.json","../src/core/MageMetricsChatTransport.ts","../src/core/MageMetricsEventEmitter.ts","../src/core/resolvable.ts","../src/core/types.ts","../src/core/MageMetricsClient.ts"],"names":["currentMetadata","args","_a","_internal","result","z","Node","date","dateResult","sha256"],"mappings":"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","file":"index.js","sourcesContent":["import type { Middleware } from \"openapi-fetch\";\n\nexport const HEADER_CLIENT_VERSION = \"X-Client-Version\";\nexport const HEADER_API_KEY = \"X-Api-Key\";\n\nexport class ApiError extends Error {\n extra: unknown;\n response: Response;\n constructor(message: string, response: Response, extra: unknown) {\n super(message);\n this.name = \"ApiError\";\n this.response = response;\n this.extra = extra;\n }\n}\n\nexport const throwOnError: Middleware = {\n async onResponse({ response, request }) {\n if (response.status >= 400) {\n const body = response.headers.get(\"content-type\")?.includes(\"json\")\n ? ((await response.clone().json()) as unknown)\n : await response.clone().text();\n throw new ApiError(\n `[${response.status}] ${request.method} ${request.url}`,\n response,\n {\n body,\n status: response.status,\n statusText: response.statusText,\n url: request.url,\n method: request.method,\n },\n );\n }\n return undefined;\n },\n};\n\nexport const addVersionHeader: (clientVersion: string) => Middleware = (\n clientVersion: string,\n) => {\n return {\n onRequest({ request }) {\n request.headers.set(HEADER_CLIENT_VERSION, clientVersion);\n return request;\n },\n };\n};\n\nexport const addApiKeyHeader: (apiKey: string) => Middleware = (\n apiKey: string,\n) => {\n return {\n onRequest({ request }) {\n request.headers.set(HEADER_API_KEY, apiKey);\n return request;\n },\n };\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nconst ZodTypeKeys = {\n ZodAny: 'any',\n ZodArray: 'array',\n ZodBigInt: 'bigint',\n ZodBoolean: 'boolean',\n ZodDefault: 'default',\n ZodTransform: 'transform',\n ZodEnum: 'enum',\n ZodIntersection: 'intersection',\n ZodLiteral: 'literal',\n ZodNever: 'never',\n ZodNull: 'null',\n ZodNullable: 'nullable',\n ZodNumber: 'number',\n ZodNonOptional: 'nonoptional',\n ZodObject: 'object',\n ZodOptional: 'optional',\n ZodPipe: 'pipe',\n ZodReadonly: 'readonly',\n ZodRecord: 'record',\n ZodString: 'string',\n ZodTuple: 'tuple',\n ZodType: 'type',\n ZodUnion: 'union',\n ZodDiscriminatedUnion: 'union',\n ZodUnknown: 'unknown',\n ZodVoid: 'void',\n ZodDate: 'date',\n};\nfunction isZodType(schema, typeNames) {\n const typeNamesArray = Array.isArray(typeNames) ? typeNames : [typeNames];\n return typeNamesArray.some(typeName => {\n var _a;\n const typeNameMatch = ((_a = schema === null || schema === void 0 ? void 0 : schema.def) === null || _a === void 0 ? void 0 : _a.type) === ZodTypeKeys[typeName];\n if (typeName === 'ZodDiscriminatedUnion') {\n return (typeNameMatch &&\n 'discriminator' in schema.def);\n }\n return typeNameMatch;\n });\n}\nfunction isAnyZodType(schema) {\n return 'def' in schema;\n}\n/**\n * The schema.isNullable() is deprecated. This is the suggested replacement\n * as this was how isNullable operated beforehand.\n */\nfunction isNullableSchema(schema) {\n return schema.safeParse(null).success;\n}\n/**\n * The schema.isOptional() is deprecated. This is the suggested replacement\n * as this was how isOptional operated beforehand.\n */\nfunction isOptionalSchema(schema) {\n return schema.safeParse(undefined).success;\n}\n\nclass $ZodRegistry {\n constructor() {\n this._map = new Map();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n if (this._idmap.has(meta.id)) {\n throw new Error(`ID ${meta.id} already exists in the registry`);\n }\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new Map();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n return { ...pm, ...this._map.get(schema) };\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nfunction registry() {\n return new $ZodRegistry();\n}\n\nfunction isEqual(x, y) {\n if (x === null || x === undefined || y === null || y === undefined) {\n return x === y;\n }\n if (x === y || x.valueOf() === y.valueOf()) {\n return true;\n }\n if (Array.isArray(x)) {\n if (!Array.isArray(y)) {\n return false;\n }\n if (x.length !== y.length) {\n return false;\n }\n }\n // if they are strictly equal, they both need to be object at least\n if (!(x instanceof Object) || !(y instanceof Object)) {\n return false;\n }\n // recursive object equality check\n const keysX = Object.keys(x);\n return (Object.keys(y).every(keyY => keysX.indexOf(keyY) !== -1) &&\n keysX.every(key => isEqual(x[key], y[key])));\n}\nclass ObjectSet {\n constructor() {\n this.buckets = new Map();\n }\n put(value) {\n const hashCode = this.hashCodeOf(value);\n const itemsByCode = this.buckets.get(hashCode);\n if (!itemsByCode) {\n this.buckets.set(hashCode, [value]);\n return;\n }\n const alreadyHasItem = itemsByCode.some(_ => isEqual(_, value));\n if (!alreadyHasItem) {\n itemsByCode.push(value);\n }\n }\n contains(value) {\n const hashCode = this.hashCodeOf(value);\n const itemsByCode = this.buckets.get(hashCode);\n if (!itemsByCode) {\n return false;\n }\n return itemsByCode.some(_ => isEqual(_, value));\n }\n values() {\n return [...this.buckets.values()].flat();\n }\n stats() {\n let totalBuckets = 0;\n let totalValues = 0;\n let collisions = 0;\n for (const bucket of this.buckets.values()) {\n totalBuckets += 1;\n totalValues += bucket.length;\n if (bucket.length > 1) {\n collisions += 1;\n }\n }\n const hashEffectiveness = totalBuckets / totalValues;\n return { totalBuckets, collisions, totalValues, hashEffectiveness };\n }\n hashCodeOf(object) {\n let hashCode = 0;\n if (Array.isArray(object)) {\n for (let i = 0; i < object.length; i++) {\n hashCode ^= this.hashCodeOf(object[i]) * i;\n }\n return hashCode;\n }\n if (typeof object === 'string') {\n for (let i = 0; i < object.length; i++) {\n hashCode ^= object.charCodeAt(i) * i;\n }\n return hashCode;\n }\n if (typeof object === 'number') {\n return object;\n }\n if (typeof object === 'object') {\n for (const [key, value] of Object.entries(object)) {\n hashCode ^= this.hashCodeOf(key) + this.hashCodeOf(value !== null && value !== void 0 ? value : '');\n }\n }\n return hashCode;\n }\n}\n\nfunction isUndefined(value) {\n return value === undefined;\n}\nfunction mapValues(object, mapper) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n result[key] = mapper(value);\n });\n return result;\n}\nfunction omit(object, keys) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n if (!keys.some(keyToOmit => keyToOmit === key)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction omitBy(object, predicate) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n if (!predicate(value, key)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction compact(arr) {\n return arr.filter((elem) => !isUndefined(elem));\n}\nconst objectEquals = isEqual;\nfunction uniq(values) {\n const set = new ObjectSet();\n values.forEach(value => set.put(value));\n return [...set.values()];\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\nfunction sortObjectByKeys(obj) {\n return Object.fromEntries(Object.entries(obj).sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey)));\n}\n\n/**\n * @deprecated This is not really deprecated but this should always be used with\n * caution. Using it may alter the behavior of the library and the generated schemas.\n */\nconst zodToOpenAPIRegistry = registry();\nclass Metadata {\n static collectMetadata(schema, metadata) {\n const currentMetadata = this.getMetadataFromRegistry(schema);\n const _internal = Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata._internal), metadata === null || metadata === void 0 ? void 0 : metadata._internal);\n const param = Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), metadata === null || metadata === void 0 ? void 0 : metadata.param);\n const totalMetadata = Object.assign(Object.assign(Object.assign(Object.assign({}, (Object.keys(_internal).length > 0 ? { _internal } : {})), currentMetadata), metadata), (Object.keys(param).length > 0 ? { param } : {}));\n if (isZodType(schema, [\n 'ZodOptional',\n 'ZodNullable',\n 'ZodDefault',\n 'ZodReadonly',\n 'ZodNonOptional',\n ]) &&\n isAnyZodType(schema._zod.def.innerType)) {\n return this.collectMetadata(schema._zod.def.innerType, totalMetadata);\n }\n if (isZodType(schema, 'ZodPipe')) {\n const inSchema = schema._zod.def.in;\n const outSchema = schema._zod.def.out;\n // meaning preprocess\n if (isZodType(inSchema, 'ZodTransform') && isAnyZodType(outSchema)) {\n return this.collectMetadata(outSchema, totalMetadata);\n }\n if (isAnyZodType(inSchema)) {\n // meaning transform\n return this.collectMetadata(inSchema, totalMetadata);\n }\n }\n return totalMetadata;\n }\n /**\n * @deprecated Use one of `getOpenApiMetadata` or `getInternalMetadata` instead\n */\n static getMetadata(zodSchema) {\n return this.collectMetadata(zodSchema);\n }\n static getOpenApiMetadata(zodSchema) {\n const metadata = this.collectMetadata(zodSchema);\n const _a = metadata !== null && metadata !== void 0 ? metadata : {}, rest = __rest(_a, [\"_internal\"]);\n return rest;\n }\n static getInternalMetadata(zodSchema) {\n var _a;\n return (_a = this.collectMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a._internal;\n }\n static getParamMetadata(zodSchema) {\n const metadata = this.collectMetadata(zodSchema);\n return Object.assign(Object.assign({}, metadata), { \n // A description provided from .openapi() should be taken with higher precedence\n param: Object.assign(Object.assign({}, ((metadata === null || metadata === void 0 ? void 0 : metadata.description) ? { description: metadata.description } : {})), metadata === null || metadata === void 0 ? void 0 : metadata.param) });\n }\n /**\n * A method that omits all custom keys added to the regular OpenAPI\n * metadata properties\n */\n static buildSchemaMetadata(metadata) {\n return omitBy(omit(metadata, ['param', '_internal']), isUndefined);\n }\n static buildParameterMetadata(metadata) {\n return omitBy(metadata, isUndefined);\n }\n static applySchemaMetadata(initialData, metadata) {\n return omitBy(Object.assign(Object.assign({}, initialData), this.buildSchemaMetadata(metadata)), isUndefined);\n }\n static getRefId(zodSchema) {\n var _a;\n return (_a = this.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.refId;\n }\n static unwrapChained(schema) {\n return this.unwrapUntil(schema);\n }\n static getDefaultValue(zodSchema) {\n const unwrapped = this.unwrapUntil(zodSchema, 'ZodDefault');\n return unwrapped === null || unwrapped === void 0 ? void 0 : unwrapped._zod.def.defaultValue;\n }\n static unwrapUntil(schema, typeName) {\n if (typeName && isZodType(schema, typeName)) {\n return schema;\n }\n if (isZodType(schema, [\n 'ZodOptional',\n 'ZodNullable',\n 'ZodDefault',\n 'ZodReadonly',\n 'ZodNonOptional',\n ]) &&\n isAnyZodType(schema._zod.def.innerType)) {\n return this.unwrapUntil(schema._zod.def.innerType, typeName);\n }\n if (isZodType(schema, 'ZodPipe')) {\n const inSchema = schema._zod.def.in;\n const outSchema = schema._zod.def.out;\n // meaning preprocess\n if (isZodType(inSchema, 'ZodTransform') && isAnyZodType(outSchema)) {\n return this.unwrapUntil(outSchema, typeName);\n }\n // meaning transform\n if (isAnyZodType(inSchema)) {\n return this.unwrapUntil(inSchema, typeName);\n }\n }\n return typeName ? undefined : schema;\n }\n static getMetadataFromInternalRegistry(zodSchema) {\n return zodToOpenAPIRegistry.get(zodSchema);\n }\n static getMetadataFromRegistry(zodSchema) {\n const internal = this.getMetadataFromInternalRegistry(zodSchema);\n const general = zodSchema.meta();\n if (!internal) {\n return general;\n }\n const { _internal } = internal, rest = __rest(internal, [\"_internal\"]);\n const _a = general !== null && general !== void 0 ? general : {}, { id, title } = _a, restGeneral = __rest(_a, [\"id\", \"title\"]);\n return Object.assign(Object.assign(Object.assign({ _internal: Object.assign(Object.assign({}, (id ? { refId: id } : {})), _internal) }, rest), (title ? { description: title } : {})), restGeneral);\n }\n static setMetadataInRegistry(zodSchema, metadata) {\n zodToOpenAPIRegistry.add(zodSchema, metadata);\n }\n}\n\nfunction preserveMetadataFromModifier(zodSchema, modifier) {\n const zodModifier = zodSchema[modifier];\n if (typeof zodModifier !== 'function') {\n return;\n }\n zodSchema[modifier] = function (...args) {\n const result = zodModifier.apply(this, args);\n const meta = Metadata.getMetadataFromRegistry(this);\n if (meta) {\n Metadata.setMetadataInRegistry(result, meta);\n }\n return result;\n };\n}\nfunction extendZodWithOpenApi(zod) {\n if (typeof zod.ZodType.prototype.openapi !== 'undefined') {\n // This zod instance is already extended with the required methods,\n // doing it again will just result in multiple wrapper methods for\n // `optional` and `nullable`\n return;\n }\n zod.ZodType.prototype.openapi = function (...args) {\n const { refId, metadata, options } = getOpenApiConfiguration(...args);\n const _a = metadata !== null && metadata !== void 0 ? metadata : {}, { param } = _a, restOfOpenApi = __rest(_a, [\"param\"]);\n const allMetadata = Metadata.getMetadataFromRegistry(this);\n const _b = allMetadata !== null && allMetadata !== void 0 ? allMetadata : {}, { _internal: internalMetadata } = _b, currentMetadata = __rest(_b, [\"_internal\"]);\n const _internal = Object.assign(Object.assign(Object.assign({}, internalMetadata), options), (refId ? { refId } : undefined));\n const resultMetadata = Object.assign(Object.assign(Object.assign({}, currentMetadata), restOfOpenApi), ((currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param) || param\n ? {\n param: Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), param),\n }\n : undefined));\n // We need to create a new instance of the schema so that sequential\n // calls to .openapi from keys do not override each other\n // See the test in metadata-overrides.spec.ts (only adds overrides for new metadata properties)\n const result = new this.constructor(this._def);\n Metadata.setMetadataInRegistry(result, Object.assign(Object.assign({}, (Object.keys(_internal).length > 0 ? { _internal } : undefined)), resultMetadata));\n if (isZodType(result, 'ZodObject')) {\n const currentMetadata = Metadata.getMetadataFromRegistry(result);\n const originalExtend = result.extend;\n result.extend = function (...args) {\n const extendedResult = originalExtend.apply(result, args);\n const _a = currentMetadata !== null && currentMetadata !== void 0 ? currentMetadata : {}, { _internal } = _a, rest = __rest(_a, [\"_internal\"]);\n Metadata.setMetadataInRegistry(extendedResult, {\n _internal: {\n extendedFrom: (_internal === null || _internal === void 0 ? void 0 : _internal.refId)\n ? { refId: _internal.refId, schema: result }\n : _internal === null || _internal === void 0 ? void 0 : _internal.extendedFrom,\n },\n });\n // This is hacky. Yes we can do that directly in the meta call above,\n // but that would not override future calls to .extend. That's why\n // we call openapi explicitly here. And in that case might as well add the metadata\n // here instead of through the meta call\n return extendedResult.openapi(rest);\n };\n preserveMetadataFromModifier(result, 'catchall');\n }\n preserveMetadataFromModifier(result, 'optional');\n preserveMetadataFromModifier(result, 'nullable');\n preserveMetadataFromModifier(result, 'default');\n preserveMetadataFromModifier(result, 'transform');\n preserveMetadataFromModifier(result, 'refine');\n preserveMetadataFromModifier(result, 'length');\n preserveMetadataFromModifier(result, 'min');\n preserveMetadataFromModifier(result, 'max');\n const originalMeta = result.meta;\n result.meta = function (...args) {\n const result = originalMeta.apply(this, args);\n if (args[0]) {\n const meta = Metadata.getMetadataFromInternalRegistry(this);\n if (meta) {\n Metadata.setMetadataInRegistry(result, Object.assign(Object.assign({}, meta), args[0]));\n }\n }\n return result;\n };\n return result;\n };\n}\nfunction getOpenApiConfiguration(refOrOpenapi, metadataOrOptions, options) {\n if (typeof refOrOpenapi === 'string') {\n return {\n refId: refOrOpenapi,\n metadata: metadataOrOptions,\n options,\n };\n }\n return {\n refId: undefined,\n metadata: refOrOpenapi,\n options: metadataOrOptions,\n };\n}\n\nfunction getOpenApiMetadata(zodSchema) {\n var _a;\n return omitBy((_a = Metadata.getOpenApiMetadata(zodSchema)) !== null && _a !== void 0 ? _a : {}, isUndefined);\n}\nfunction getRefId(zodSchema) {\n return Metadata.getRefId(zodSchema);\n}\n\nclass OpenAPIRegistry {\n constructor(parents) {\n this.parents = parents;\n this._definitions = [];\n }\n get definitions() {\n var _a, _b;\n const parentDefinitions = (_b = (_a = this.parents) === null || _a === void 0 ? void 0 : _a.flatMap(par => par._definitions)) !== null && _b !== void 0 ? _b : [];\n return [...parentDefinitions, ...this._definitions];\n }\n /**\n * Registers a new component schema under /components/schemas/${name}\n */\n register(refId, zodSchema) {\n const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n this._definitions.push({ type: 'schema', schema: schemaWithRefId });\n return schemaWithRefId;\n }\n /**\n * Registers a new parameter schema under /components/parameters/${name}\n */\n registerParameter(refId, zodSchema) {\n var _a, _b, _c;\n const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n const currentMetadata = (_a = Metadata.getOpenApiMetadata(schemaWithRefId)) !== null && _a !== void 0 ? _a : {};\n const schemaWithMetadata = schemaWithRefId.openapi(Object.assign(Object.assign({}, currentMetadata), { param: Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), { name: (_c = (_b = currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : refId }) }));\n this._definitions.push({\n type: 'parameter',\n schema: schemaWithMetadata,\n });\n return schemaWithMetadata;\n }\n /**\n * Registers a new path that would be generated under paths:\n */\n registerPath(route) {\n this._definitions.push({\n type: 'route',\n route,\n });\n }\n /**\n * Registers a new webhook that would be generated under webhooks:\n */\n registerWebhook(webhook) {\n this._definitions.push({\n type: 'webhook',\n webhook,\n });\n }\n /**\n * Registers a raw OpenAPI component. Use this if you have a simple object instead of a Zod schema.\n *\n * @param type The component type, e.g. `schemas`, `responses`, `securitySchemes`, etc.\n * @param name The name of the object, it is the key under the component\n * type in the resulting OpenAPI document\n * @param component The actual object to put there\n */\n registerComponent(type, name, component) {\n this._definitions.push({\n type: 'component',\n componentType: type,\n name,\n component,\n });\n return {\n name,\n ref: { $ref: `#/components/${type}/${name}` },\n };\n }\n schemaWithRefId(refId, zodSchema) {\n return zodSchema.openapi(refId);\n }\n}\n\nclass ZodToOpenAPIError {\n constructor(message) {\n this.message = message;\n }\n}\nclass ConflictError extends ZodToOpenAPIError {\n constructor(message, data) {\n super(message);\n this.data = data;\n }\n}\nclass MissingParameterDataError extends ZodToOpenAPIError {\n constructor(data) {\n super(`Missing parameter data, please specify \\`${data.missingField}\\` and other OpenAPI parameter props using the \\`param\\` field of \\`schema.openapi\\``);\n this.data = data;\n }\n}\nfunction enhanceMissingParametersError(action, paramsToAdd) {\n try {\n return action();\n }\n catch (error) {\n if (error instanceof MissingParameterDataError) {\n throw new MissingParameterDataError(Object.assign(Object.assign({}, error.data), paramsToAdd));\n }\n throw error;\n }\n}\nclass UnknownZodTypeError extends ZodToOpenAPIError {\n constructor(data) {\n super(`Unknown zod object type, please specify \\`type\\` and other OpenAPI props using \\`schema.openapi\\`.`);\n this.data = data;\n }\n}\n\nclass ArrayTransformer {\n transform(zodSchema, mapNullableType, mapItems) {\n var _a, _b, _c, _d;\n const itemType = zodSchema.def.element;\n const minItems = (_b = (_a = zodSchema.def.checks) === null || _a === void 0 ? void 0 : _a.find((check) => check._zod.def.check === 'min_length')) === null || _b === void 0 ? void 0 : _b._zod.def.minimum;\n const maxItems = (_d = (_c = zodSchema.def.checks) === null || _c === void 0 ? void 0 : _c.find((check) => check._zod.def.check === 'max_length')) === null || _d === void 0 ? void 0 : _d._zod.def.maximum;\n return Object.assign(Object.assign({}, mapNullableType('array')), { items: isAnyZodType(itemType) ? mapItems(itemType) : {}, minItems,\n maxItems });\n }\n}\n\nclass BigIntTransformer {\n transform(mapNullableType) {\n return Object.assign(Object.assign({}, mapNullableType('string')), { pattern: `^\\d+$` });\n }\n}\n\nclass DiscriminatedUnionTransformer {\n transform(zodSchema, isNullable, mapNullableOfArray, mapItem, generateSchemaRef) {\n const options = [...zodSchema.def.options];\n const optionSchema = options.map(mapItem);\n if (isNullable) {\n return {\n oneOf: mapNullableOfArray(optionSchema, isNullable),\n };\n }\n const discriminator = zodSchema._zod.def.discriminator;\n if (!discriminator) {\n console.error('No discriminator found for discriminated union', zodSchema);\n return {\n oneOf: optionSchema,\n };\n }\n return {\n oneOf: optionSchema,\n discriminator: this.mapDiscriminator(options, discriminator, generateSchemaRef),\n };\n }\n mapDiscriminator(zodObjects, discriminator, generateSchemaRef) {\n // All schemas must be registered to use a discriminator\n if (zodObjects.some(obj => Metadata.getRefId(obj) === undefined)) {\n return undefined;\n }\n const mapping = {};\n zodObjects.forEach(obj => {\n var _a;\n const refId = Metadata.getRefId(obj); // type-checked earlier\n const value = (_a = obj.def.shape) === null || _a === void 0 ? void 0 : _a[discriminator];\n if (isZodType(value, 'ZodEnum')) {\n // Native enums have their keys as both number and strings however the number is an\n // internal representation and the string is the access point for a documentation\n const keys = Object.values(value._zod.def.entries).filter(isString);\n keys.forEach((enumValue) => {\n mapping[enumValue] = generateSchemaRef(refId);\n });\n return;\n }\n const literalValue = value === null || value === void 0 ? void 0 : value.def.values[0];\n // This should never happen because Zod checks the disciminator type but to keep the types happy\n if (typeof literalValue !== 'string') {\n throw new Error(`Discriminator ${discriminator} could not be found in one of the values of a discriminated union`);\n }\n mapping[literalValue] = generateSchemaRef(refId);\n });\n return {\n propertyName: discriminator,\n mapping,\n };\n }\n}\n\n/**\n * Numeric enums have a reverse mapping https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n * whereas string ones don't.\n *\n * This function checks if an enum is fully numeric - i.e all values are numbers or not.\n * And filters out only the actual enum values when a reverse mapping is apparent.\n */\nfunction enumInfo(enumObject) {\n const keysExceptReverseMappings = Object.keys(enumObject).filter(key => typeof enumObject[enumObject[key]] !== 'number');\n const values = keysExceptReverseMappings.map(key => enumObject[key]);\n const numericCount = values.filter(_ => typeof _ === 'number').length;\n const type = numericCount === 0\n ? 'string'\n : numericCount === values.length\n ? 'numeric'\n : 'mixed';\n return { values, type };\n}\n\nclass EnumTransformer {\n transform(zodSchema, mapNullableType) {\n const { type, values } = enumInfo(zodSchema._zod.def.entries);\n if (type === 'mixed') {\n // enum Test {\n // A = 42,\n // B = 'test',\n // }\n //\n // const result = z.nativeEnum(Test).parse('42');\n //\n // This is an error, so we can't just say it's a 'string'\n throw new ZodToOpenAPIError('Enum has mixed string and number values, please specify the OpenAPI type manually');\n }\n return Object.assign(Object.assign({}, mapNullableType(type === 'numeric' ? 'integer' : 'string')), { enum: values });\n }\n}\n\nclass IntersectionTransformer {\n transform(zodSchema, isNullable, mapNullableOfArray, mapItem) {\n const subtypes = this.flattenIntersectionTypes(zodSchema);\n const allOfSchema = {\n allOf: subtypes.map(mapItem),\n };\n if (isNullable) {\n return {\n anyOf: mapNullableOfArray([allOfSchema], isNullable),\n };\n }\n return allOfSchema;\n }\n flattenIntersectionTypes(schema) {\n if (!isZodType(schema, 'ZodIntersection')) {\n return [schema];\n }\n const leftSubTypes = isAnyZodType(schema._zod.def.left)\n ? this.flattenIntersectionTypes(schema._zod.def.left)\n : [];\n const rightSubTypes = isAnyZodType(schema._zod.def.right)\n ? this.flattenIntersectionTypes(schema._zod.def.right)\n : [];\n return [...leftSubTypes, ...rightSubTypes];\n }\n}\n\nclass LiteralTransformer {\n constructor() {\n this.bigIntTransformer = new BigIntTransformer();\n }\n transform(zodSchema, mapNullableType) {\n const type = typeof zodSchema.def.values[0];\n if (type === 'boolean' ||\n type === 'number' ||\n type === 'string' ||\n type === 'object') {\n return Object.assign(Object.assign({}, mapNullableType(type)), { enum: [zodSchema.def.values[0]] });\n }\n if (type === 'bigint') {\n return this.bigIntTransformer.transform(mapNullableType);\n }\n // Zod doesn't really support anything else anyways\n return mapNullableType('null');\n }\n}\n\nclass NumberTransformer {\n transform(zodSchema, mapNullableType, getNumberChecks) {\n var _a;\n return Object.assign(Object.assign(Object.assign({}, mapNullableType('number')), mapNullableType(zodSchema.format === 'safeint' ? 'integer' : 'number')), getNumberChecks((_a = zodSchema.def.checks) !== null && _a !== void 0 ? _a : []));\n }\n}\n\nclass ObjectTransformer {\n transform(zodSchema, defaultValue, mapNullableType, mapItem) {\n var _a;\n const extendedFrom = (_a = Metadata.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.extendedFrom;\n const required = this.requiredKeysOf(zodSchema);\n const properties = mapValues(zodSchema.def.shape, mapItem);\n if (!extendedFrom) {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, mapNullableType('object')), { properties, default: defaultValue }), (required.length > 0 ? { required } : {})), this.generateAdditionalProperties(zodSchema, mapItem));\n }\n const parent = extendedFrom.schema;\n // We want to generate the parent schema so that it can be referenced down the line\n mapItem(parent);\n const keysRequiredByParent = this.requiredKeysOf(parent);\n const propsOfParent = mapValues(parent === null || parent === void 0 ? void 0 : parent.def.shape, mapItem);\n const propertiesToAdd = Object.fromEntries(Object.entries(properties).filter(([key, type]) => {\n return !objectEquals(propsOfParent[key], type);\n }));\n const additionallyRequired = required.filter(prop => !keysRequiredByParent.includes(prop));\n const objectData = Object.assign(Object.assign(Object.assign(Object.assign({}, mapNullableType('object')), { default: defaultValue, properties: propertiesToAdd }), (additionallyRequired.length > 0\n ? { required: additionallyRequired }\n : {})), this.generateAdditionalProperties(zodSchema, mapItem));\n return {\n allOf: [\n { $ref: `#/components/schemas/${extendedFrom.refId}` },\n objectData,\n ],\n };\n }\n generateAdditionalProperties(zodSchema, mapItem) {\n const catchallSchema = zodSchema.def.catchall;\n if (!catchallSchema) {\n return {};\n }\n if (isZodType(catchallSchema, 'ZodNever')) {\n return { additionalProperties: false };\n }\n if (isAnyZodType(catchallSchema)) {\n return { additionalProperties: mapItem(catchallSchema) };\n }\n return {};\n }\n requiredKeysOf(objectSchema) {\n return Object.entries(objectSchema.def.shape)\n .filter(([_key, type]) => !isOptionalSchema(type))\n .map(([key, _type]) => key);\n }\n}\n\nclass RecordTransformer {\n transform(zodSchema, mapNullableType, mapItem) {\n const propertiesType = zodSchema.valueType;\n const keyType = zodSchema.keyType;\n const propertiesSchema = isAnyZodType(propertiesType)\n ? mapItem(propertiesType)\n : {};\n if (isZodType(keyType, 'ZodEnum')) {\n // Native enums have their keys as both number and strings however the number is an\n // internal representation and the string is the access point for a documentation\n const keys = Object.values(keyType._zod.def.entries).filter(isString);\n const properties = keys.reduce((acc, curr) => (Object.assign(Object.assign({}, acc), { [curr]: propertiesSchema })), {});\n return Object.assign(Object.assign({}, mapNullableType('object')), { properties });\n }\n return Object.assign(Object.assign({}, mapNullableType('object')), { additionalProperties: propertiesSchema });\n }\n}\n\nfunction isZodCheckLengthEquals(check) {\n return check._zod.def.check === 'length_equals';\n}\nfunction isZodCheckRegex(check) {\n return (check._zod.def.check === 'string_format' &&\n check._zod.def.format === 'regex');\n}\nclass StringTransformer {\n transform(zodSchema, mapNullableType) {\n var _a, _b, _c, _d;\n const regexCheck = (_a = zodSchema.def.checks) === null || _a === void 0 ? void 0 : _a.find(isZodCheckRegex);\n // toString generates an additional / at the beginning and end of the pattern\n const pattern = regexCheck === null || regexCheck === void 0 ? void 0 : regexCheck._zod.def.pattern.toString().replace(/^\\/|\\/$/g, '');\n const check = (_b = zodSchema.def.checks) === null || _b === void 0 ? void 0 : _b.find(isZodCheckLengthEquals);\n const length = check === null || check === void 0 ? void 0 : check._zod.def.length;\n const maxLength = Number.isFinite(zodSchema.minLength)\n ? (_c = zodSchema.minLength) !== null && _c !== void 0 ? _c : undefined\n : undefined;\n const minLength = Number.isFinite(zodSchema.maxLength)\n ? (_d = zodSchema.maxLength) !== null && _d !== void 0 ? _d : undefined\n : undefined;\n return Object.assign(Object.assign({}, mapNullableType('string')), { \n // FIXME: https://github.com/colinhacks/zod/commit/d78047e9f44596a96d637abb0ce209cd2732d88c\n minLength: length !== null && length !== void 0 ? length : maxLength, maxLength: length !== null && length !== void 0 ? length : minLength, format: this.mapStringFormat(zodSchema), pattern });\n }\n /**\n * Attempts to map Zod strings to known formats\n * https://json-schema.org/understanding-json-schema/reference/string.html#built-in-formats\n */\n mapStringFormat(zodString) {\n if (zodString.format === 'uuid')\n return 'uuid';\n if (zodString.format === 'email')\n return 'email';\n if (zodString.format === 'url')\n return 'uri';\n if (zodString.format === 'date')\n return 'date';\n if (zodString.format === 'datetime')\n return 'date-time';\n if (zodString.format === 'cuid')\n return 'cuid';\n if (zodString.format === 'cuid2')\n return 'cuid2';\n if (zodString.format === 'ulid')\n return 'ulid';\n if (zodString.format === 'ipv4')\n return 'ip';\n if (zodString.format === 'ipv6')\n return 'ip';\n if (zodString.format === 'emoji')\n return 'emoji';\n return undefined;\n }\n}\n\nclass TupleTransformer {\n constructor(versionSpecifics) {\n this.versionSpecifics = versionSpecifics;\n }\n transform(zodSchema, mapNullableType, mapItem) {\n const items = zodSchema._zod.def.items;\n const schemas = items.map(item => isAnyZodType(item) ? mapItem(item) : {});\n return Object.assign(Object.assign({}, mapNullableType('array')), this.versionSpecifics.mapTupleItems(schemas));\n }\n}\n\nclass UnionTransformer {\n constructor(options) {\n this.options = options;\n }\n transform(zodSchema, mapNullableOfArray, mapItem) {\n var _a, _b, _c;\n const internalMetadata = Metadata.getInternalMetadata(zodSchema);\n const preferredType = (_c = (_a = internalMetadata === null || internalMetadata === void 0 ? void 0 : internalMetadata.unionPreferredType) !== null && _a !== void 0 ? _a : (_b = this.options) === null || _b === void 0 ? void 0 : _b.unionPreferredType) !== null && _c !== void 0 ? _c : 'anyOf';\n const options = this.flattenUnionTypes(zodSchema);\n const schemas = options.map(schema => {\n // If any of the underlying schemas of a union is .nullable then the whole union\n // would be nullable. `mapNullableOfArray` would place it where it belongs.\n // Therefor we are stripping the additional nullables from the inner schemas\n // See https://github.com/asteasolutions/zod-to-openapi/issues/149\n const optionToGenerate = this.unwrapNullable(schema);\n return mapItem(optionToGenerate);\n });\n return {\n [preferredType]: mapNullableOfArray(schemas),\n };\n }\n flattenUnionTypes(schema) {\n if (!isZodType(schema, 'ZodUnion')) {\n return [schema];\n }\n const options = schema.def.options;\n return options.flatMap(option => isAnyZodType(option) ? this.flattenUnionTypes(option) : []);\n }\n unwrapNullable(schema) {\n if (isZodType(schema, 'ZodNullable')) {\n const unwrapped = schema.unwrap();\n if (isAnyZodType(unwrapped)) {\n return this.unwrapNullable(unwrapped);\n }\n }\n return schema;\n }\n}\n\nclass DateTransformer {\n transform(mapNullableType) {\n return Object.assign(Object.assign({}, mapNullableType('string')), { format: 'date' });\n }\n}\n\nclass OpenApiTransformer {\n constructor(versionSpecifics, options) {\n this.versionSpecifics = versionSpecifics;\n this.objectTransformer = new ObjectTransformer();\n this.stringTransformer = new StringTransformer();\n this.numberTransformer = new NumberTransformer();\n this.bigIntTransformer = new BigIntTransformer();\n this.dateTransformer = new DateTransformer();\n this.literalTransformer = new LiteralTransformer();\n this.enumTransformer = new EnumTransformer();\n this.arrayTransformer = new ArrayTransformer();\n this.discriminatedUnionTransformer = new DiscriminatedUnionTransformer();\n this.intersectionTransformer = new IntersectionTransformer();\n this.recordTransformer = new RecordTransformer();\n this.tupleTransformer = new TupleTransformer(versionSpecifics);\n this.unionTransformer = new UnionTransformer(options);\n }\n transform(zodSchema, isNullable, mapItem, generateSchemaRef, defaultValue) {\n if (isZodType(zodSchema, 'ZodNull')) {\n return this.versionSpecifics.nullType;\n }\n if (isZodType(zodSchema, 'ZodUnknown') || isZodType(zodSchema, 'ZodAny')) {\n return this.versionSpecifics.mapNullableType(undefined, isNullable);\n }\n if (isZodType(zodSchema, 'ZodObject')) {\n return this.objectTransformer.transform(zodSchema, defaultValue, // verified on TS level from input\n // verified on TS level from input\n _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n const schema = this.transformSchemaWithoutDefault(zodSchema, isNullable, mapItem, generateSchemaRef);\n return Object.assign(Object.assign({}, schema), { default: defaultValue });\n }\n transformSchemaWithoutDefault(zodSchema, isNullable, mapItem, generateSchemaRef) {\n if (isZodType(zodSchema, 'ZodUnknown') || isZodType(zodSchema, 'ZodAny')) {\n return this.versionSpecifics.mapNullableType(undefined, isNullable);\n }\n if (isZodType(zodSchema, 'ZodString')) {\n return this.stringTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodNumber')) {\n return this.numberTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable), _ => this.versionSpecifics.getNumberChecks(_));\n }\n if (isZodType(zodSchema, 'ZodBigInt')) {\n return this.bigIntTransformer.transform(schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodBoolean')) {\n return this.versionSpecifics.mapNullableType('boolean', isNullable);\n }\n if (isZodType(zodSchema, 'ZodLiteral')) {\n return this.literalTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodEnum')) {\n return this.enumTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodArray')) {\n return this.arrayTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodTuple')) {\n return this.tupleTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n // Note: It is important that this goes above the union transformer\n // because the discriminated union is still a union\n if (isZodType(zodSchema, 'ZodDiscriminatedUnion')) {\n return this.discriminatedUnionTransformer.transform(zodSchema, isNullable, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem, generateSchemaRef);\n }\n if (isZodType(zodSchema, 'ZodUnion')) {\n return this.unionTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodIntersection')) {\n return this.intersectionTransformer.transform(zodSchema, isNullable, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodRecord')) {\n return this.recordTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodDate')) {\n return this.dateTransformer.transform(_ => this.versionSpecifics.mapNullableType(_, isNullable));\n }\n const refId = Metadata.getRefId(zodSchema);\n throw new UnknownZodTypeError({\n currentSchema: zodSchema.def,\n schemaName: refId,\n });\n }\n}\n\nclass OpenAPIGenerator {\n constructor(definitions, versionSpecifics, options) {\n this.definitions = definitions;\n this.versionSpecifics = versionSpecifics;\n this.options = options;\n this.schemaRefs = {};\n this.paramRefs = {};\n this.pathRefs = {};\n this.rawComponents = [];\n this.openApiTransformer = new OpenApiTransformer(versionSpecifics, options);\n this.sortDefinitions();\n }\n generateDocumentData() {\n this.definitions.forEach(definition => this.generateSingle(definition));\n return {\n components: this.buildComponents(),\n paths: this.pathRefs,\n };\n }\n generateComponents() {\n this.definitions.forEach(definition => this.generateSingle(definition));\n return {\n components: this.buildComponents(),\n };\n }\n buildComponents() {\n var _a, _b, _c, _d;\n const rawComponents = {};\n this.rawComponents.forEach(({ componentType, name, component }) => {\n var _a;\n (_a = rawComponents[componentType]) !== null && _a !== void 0 ? _a : (rawComponents[componentType] = {});\n rawComponents[componentType][name] = component;\n });\n const allSchemas = Object.assign(Object.assign({}, ((_a = rawComponents.schemas) !== null && _a !== void 0 ? _a : {})), this.schemaRefs);\n const schemas = ((_b = this.options) === null || _b === void 0 ? void 0 : _b.sortComponents) === 'alphabetically'\n ? sortObjectByKeys(allSchemas)\n : allSchemas;\n const allParameters = Object.assign(Object.assign({}, ((_c = rawComponents.parameters) !== null && _c !== void 0 ? _c : {})), this.paramRefs);\n const parameters = ((_d = this.options) === null || _d === void 0 ? void 0 : _d.sortComponents) === 'alphabetically'\n ? sortObjectByKeys(allParameters)\n : allParameters;\n return Object.assign(Object.assign({}, rawComponents), { schemas, parameters });\n }\n sortObjectKeys(object) { }\n sortDefinitions() {\n const generationOrder = [\n 'schema',\n 'parameter',\n 'component',\n 'route',\n ];\n this.definitions.sort((left, right) => {\n // No type means \"plain zod schema\" => it comes as highest priority based on the array above\n if (!('type' in left)) {\n if (!('type' in right)) {\n return 0;\n }\n return -1;\n }\n if (!('type' in right)) {\n return 1;\n }\n const leftIndex = generationOrder.findIndex(type => type === left.type);\n const rightIndex = generationOrder.findIndex(type => type === right.type);\n return leftIndex - rightIndex;\n });\n }\n generateSingle(definition) {\n if (!('type' in definition)) {\n this.generateSchemaWithRef(definition);\n return;\n }\n switch (definition.type) {\n case 'parameter':\n this.generateParameterDefinition(definition.schema);\n return;\n case 'schema':\n this.generateSchemaWithRef(definition.schema);\n return;\n case 'route':\n this.generateSingleRoute(definition.route);\n return;\n case 'component':\n this.rawComponents.push(definition);\n return;\n }\n }\n generateParameterDefinition(zodSchema) {\n const refId = Metadata.getRefId(zodSchema);\n const result = this.generateParameter(zodSchema);\n if (refId) {\n this.paramRefs[refId] = result;\n }\n return result;\n }\n getParameterRef(schema, external) {\n const metadata = Metadata.getOpenApiMetadata(schema);\n const internalMetadata = Metadata.getInternalMetadata(schema);\n const parameterMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n const existingRef = (internalMetadata === null || internalMetadata === void 0 ? void 0 : internalMetadata.refId)\n ? this.paramRefs[internalMetadata.refId]\n : undefined;\n if (!(internalMetadata === null || internalMetadata === void 0 ? void 0 : internalMetadata.refId) || !existingRef) {\n return undefined;\n }\n if ((parameterMetadata && existingRef.in !== parameterMetadata.in) ||\n ((external === null || external === void 0 ? void 0 : external.in) && existingRef.in !== external.in)) {\n throw new ConflictError(`Conflicting location for parameter ${existingRef.name}`, {\n key: 'in',\n values: compact([\n existingRef.in,\n external === null || external === void 0 ? void 0 : external.in,\n parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in,\n ]),\n });\n }\n if ((parameterMetadata && existingRef.name !== parameterMetadata.name) ||\n ((external === null || external === void 0 ? void 0 : external.name) && existingRef.name !== (external === null || external === void 0 ? void 0 : external.name))) {\n throw new ConflictError(`Conflicting names for parameter`, {\n key: 'name',\n values: compact([\n existingRef.name,\n external === null || external === void 0 ? void 0 : external.name,\n parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.name,\n ]),\n });\n }\n return {\n $ref: `#/components/parameters/${internalMetadata.refId}`,\n };\n }\n generateInlineParameters(zodSchema, location) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const parameterMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n const referencedSchema = this.getParameterRef(zodSchema, { in: location });\n if (referencedSchema) {\n return [referencedSchema];\n }\n if (isZodType(zodSchema, 'ZodObject')) {\n const propTypes = zodSchema.def.shape;\n const parameters = Object.entries(propTypes).map(([key, schema]) => {\n var _a;\n const innerMetadata = Metadata.getOpenApiMetadata(schema);\n const referencedSchema = this.getParameterRef(schema, {\n in: location,\n name: key,\n });\n if (referencedSchema) {\n return referencedSchema;\n }\n const innerParameterMetadata = innerMetadata === null || innerMetadata === void 0 ? void 0 : innerMetadata.param;\n if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.name) &&\n innerParameterMetadata.name !== key) {\n throw new ConflictError(`Conflicting names for parameter`, {\n key: 'name',\n values: [key, innerParameterMetadata.name],\n });\n }\n if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.in) &&\n innerParameterMetadata.in !== location) {\n throw new ConflictError(`Conflicting location for parameter ${(_a = innerParameterMetadata.name) !== null && _a !== void 0 ? _a : key}`, {\n key: 'in',\n values: [location, innerParameterMetadata.in],\n });\n }\n return this.generateParameter(schema.openapi({ param: { name: key, in: location } }));\n });\n return parameters;\n }\n if ((parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in) && parameterMetadata.in !== location) {\n throw new ConflictError(`Conflicting location for parameter ${parameterMetadata.name}`, {\n key: 'in',\n values: [location, parameterMetadata.in],\n });\n }\n return [\n this.generateParameter(zodSchema.openapi({ param: { in: location } })),\n ];\n }\n generateSimpleParameter(zodSchema) {\n const metadata = Metadata.getParamMetadata(zodSchema);\n const paramMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n // TODO: Why are we not unwrapping here for isNullable as well?\n const required = !isOptionalSchema(zodSchema) && !isNullableSchema(zodSchema);\n const schema = this.generateSchemaWithRef(zodSchema);\n return Object.assign({ schema,\n required }, (paramMetadata ? Metadata.buildParameterMetadata(paramMetadata) : {}));\n }\n generateParameter(zodSchema) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const paramMetadata = metadata === null || metadata === void 0 ? void 0 : metadata.param;\n const paramName = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.name;\n const paramLocation = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.in;\n if (!paramName) {\n throw new MissingParameterDataError({ missingField: 'name' });\n }\n if (!paramLocation) {\n throw new MissingParameterDataError({\n missingField: 'in',\n paramName,\n });\n }\n const baseParameter = this.generateSimpleParameter(zodSchema);\n return Object.assign(Object.assign({}, baseParameter), { in: paramLocation, name: paramName });\n }\n generateSchemaWithMetadata(zodSchema) {\n const innerSchema = Metadata.unwrapChained(zodSchema);\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const defaultValue = Metadata.getDefaultValue(zodSchema);\n const result = (metadata === null || metadata === void 0 ? void 0 : metadata.type)\n ? { type: metadata.type }\n : this.toOpenAPISchema(innerSchema, isNullableSchema(zodSchema), defaultValue);\n return metadata\n ? Metadata.applySchemaMetadata(result, metadata)\n : omitBy(result, isUndefined);\n }\n /**\n * Same as above but applies nullable\n */\n constructReferencedOpenAPISchema(zodSchema) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const innerSchema = Metadata.unwrapChained(zodSchema);\n const defaultValue = Metadata.getDefaultValue(zodSchema);\n const isNullable = isNullableSchema(zodSchema);\n if (metadata === null || metadata === void 0 ? void 0 : metadata.type) {\n return this.versionSpecifics.mapNullableType(metadata.type, isNullable);\n }\n return this.toOpenAPISchema(innerSchema, isNullable, defaultValue);\n }\n /**\n * Generates an OpenAPI SchemaObject or a ReferenceObject with all the provided metadata applied\n */\n generateSimpleSchema(zodSchema) {\n const metadata = Metadata.getOpenApiMetadata(zodSchema);\n const refId = Metadata.getRefId(zodSchema);\n if (!refId || !this.schemaRefs[refId]) {\n return this.generateSchemaWithMetadata(zodSchema);\n }\n const schemaRef = this.schemaRefs[refId];\n const referenceObject = {\n $ref: this.generateSchemaRef(refId),\n };\n // Metadata provided from .openapi() that is new to what we had already registered\n const newMetadata = omitBy(Metadata.buildSchemaMetadata(metadata !== null && metadata !== void 0 ? metadata : {}), (value, key) => value === undefined || objectEquals(value, schemaRef[key]));\n // Do not calculate schema metadata overrides if type is provided in .openapi\n // https://github.com/asteasolutions/zod-to-openapi/pull/52/files/8ff707fe06e222bc573ed46cf654af8ee0b0786d#r996430801\n if (newMetadata.type) {\n return {\n allOf: [referenceObject, newMetadata],\n };\n }\n // New metadata from zodSchema properties.\n const newSchemaMetadata = omitBy(this.constructReferencedOpenAPISchema(zodSchema), (value, key) => value === undefined || objectEquals(value, schemaRef[key]));\n const appliedMetadata = Metadata.applySchemaMetadata(newSchemaMetadata, newMetadata);\n if (Object.keys(appliedMetadata).length > 0) {\n return {\n allOf: [referenceObject, appliedMetadata],\n };\n }\n return referenceObject;\n }\n /**\n * Same as `generateSchema` but if the new schema is added into the\n * referenced schemas, it would return a ReferenceObject and not the\n * whole result.\n *\n * Should be used for nested objects, arrays, etc.\n */\n generateSchemaWithRef(zodSchema) {\n const refId = Metadata.getRefId(zodSchema);\n const result = this.generateSimpleSchema(zodSchema);\n if (refId && this.schemaRefs[refId] === undefined) {\n this.schemaRefs[refId] = result;\n return { $ref: this.generateSchemaRef(refId) };\n }\n return result;\n }\n generateSchemaRef(refId) {\n return `#/components/schemas/${refId}`;\n }\n getRequestBody(requestBody) {\n if (!requestBody) {\n return;\n }\n const { content } = requestBody, rest = __rest(requestBody, [\"content\"]);\n const requestBodyContent = this.getBodyContent(content);\n return Object.assign(Object.assign({}, rest), { content: requestBodyContent });\n }\n getParameters(request) {\n if (!request) {\n return [];\n }\n const { headers } = request;\n const query = this.cleanParameter(request.query);\n const params = this.cleanParameter(request.params);\n const cookies = this.cleanParameter(request.cookies);\n const queryParameters = enhanceMissingParametersError(() => (query ? this.generateInlineParameters(query, 'query') : []), { location: 'query' });\n const pathParameters = enhanceMissingParametersError(() => (params ? this.generateInlineParameters(params, 'path') : []), { location: 'path' });\n const cookieParameters = enhanceMissingParametersError(() => (cookies ? this.generateInlineParameters(cookies, 'cookie') : []), { location: 'cookie' });\n const headerParameters = enhanceMissingParametersError(() => {\n if (Array.isArray(headers)) {\n return headers.flatMap(header => this.generateInlineParameters(header, 'header'));\n }\n const cleanHeaders = this.cleanParameter(headers);\n return cleanHeaders\n ? this.generateInlineParameters(cleanHeaders, 'header')\n : [];\n }, { location: 'header' });\n return [\n ...pathParameters,\n ...queryParameters,\n ...headerParameters,\n ...cookieParameters,\n ];\n }\n cleanParameter(schema) {\n if (!schema) {\n return undefined;\n }\n if (isZodType(schema, 'ZodPipe')) {\n const inSchema = schema._zod.def.in;\n const outSchema = schema._zod.def.out;\n // meaning transform\n if (isZodType(inSchema, 'ZodObject')) {\n return this.cleanParameter(inSchema);\n }\n // meaning preprocess\n if (isZodType(outSchema, 'ZodObject')) {\n return this.cleanParameter(outSchema);\n }\n return undefined;\n }\n return schema;\n }\n generatePath(route) {\n const { method, path, request, responses } = route, pathItemConfig = __rest(route, [\"method\", \"path\", \"request\", \"responses\"]);\n const generatedResponses = mapValues(responses, response => {\n return this.getResponse(response);\n });\n const parameters = enhanceMissingParametersError(() => this.getParameters(request), { route: `${method} ${path}` });\n const requestBody = this.getRequestBody(request === null || request === void 0 ? void 0 : request.body);\n const routeDoc = {\n [method]: Object.assign(Object.assign(Object.assign(Object.assign({}, pathItemConfig), (parameters.length > 0\n ? {\n parameters: [...(pathItemConfig.parameters || []), ...parameters],\n }\n : {})), (requestBody ? { requestBody } : {})), { responses: generatedResponses }),\n };\n return routeDoc;\n }\n generateSingleRoute(route) {\n const routeDoc = this.generatePath(route);\n this.pathRefs[route.path] = Object.assign(Object.assign({}, this.pathRefs[route.path]), routeDoc);\n return routeDoc;\n }\n getResponse(response) {\n if (this.isReferenceObject(response)) {\n return response;\n }\n const { content, headers } = response, rest = __rest(response, [\"content\", \"headers\"]);\n const responseContent = content\n ? { content: this.getBodyContent(content) }\n : {};\n if (!headers) {\n return Object.assign(Object.assign({}, rest), responseContent);\n }\n const responseHeaders = isZodType(headers, 'ZodObject')\n ? this.getResponseHeaders(headers)\n : // This is input data so it is okay to cast in the common generator\n // since this is the user's responsibility to keep it correct\n headers;\n return Object.assign(Object.assign(Object.assign({}, rest), { headers: responseHeaders }), responseContent);\n }\n isReferenceObject(schema) {\n return '$ref' in schema;\n }\n getResponseHeaders(headers) {\n const schemaShape = headers.def.shape;\n const responseHeaders = mapValues(schemaShape, _ => this.generateSimpleParameter(_));\n return responseHeaders;\n }\n getBodyContent(content) {\n return mapValues(content, config => {\n if (!config || !isAnyZodType(config.schema)) {\n return config;\n }\n const { schema: configSchema } = config, rest = __rest(config, [\"schema\"]);\n const schema = this.generateSchemaWithRef(configSchema);\n return Object.assign({ schema }, rest);\n });\n }\n toOpenAPISchema(zodSchema, isNullable, defaultValue) {\n const result = this.openApiTransformer.transform(zodSchema, isNullable, _ => this.generateSchemaWithRef(_), _ => this.generateSchemaRef(_), defaultValue);\n return result;\n }\n}\n\nclass OpenApiGeneratorV30Specifics {\n get nullType() {\n return { nullable: true };\n }\n mapNullableOfArray(objects, isNullable) {\n if (isNullable) {\n return [...objects, this.nullType];\n }\n return objects;\n }\n mapNullableType(type, isNullable) {\n return Object.assign(Object.assign({}, (type ? { type } : undefined)), (isNullable ? this.nullType : undefined));\n }\n mapTupleItems(schemas) {\n const uniqueSchemas = uniq(schemas);\n return {\n items: uniqueSchemas.length === 1\n ? uniqueSchemas[0]\n : { anyOf: uniqueSchemas },\n minItems: schemas.length,\n maxItems: schemas.length,\n };\n }\n getNumberChecks(checks) {\n return Object.assign({}, ...checks.map(check => {\n switch (check._zod.def.check) {\n case 'greater_than': {\n const greaterThanCheck = check;\n return greaterThanCheck._zod.def.inclusive\n ? { minimum: Number(greaterThanCheck._zod.def.value) }\n : {\n minimum: Number(greaterThanCheck._zod.def.value),\n exclusiveMinimum: true,\n };\n }\n case 'less_than': {\n const lessThanCheck = check;\n return lessThanCheck._zod.def.inclusive\n ? { maximum: Number(lessThanCheck._zod.def.value) }\n : {\n maximum: Number(lessThanCheck._zod.def.value),\n exclusiveMaximum: !lessThanCheck._zod.def.inclusive,\n };\n }\n default:\n return {};\n }\n }));\n }\n}\n\nclass OpenApiGeneratorV3 {\n constructor(definitions, options) {\n const specifics = new OpenApiGeneratorV30Specifics();\n this.generator = new OpenAPIGenerator(definitions, specifics, options);\n }\n generateDocument(config) {\n const baseData = this.generator.generateDocumentData();\n return Object.assign(Object.assign({}, config), baseData);\n }\n generateComponents() {\n return this.generator.generateComponents();\n }\n}\n\nclass OpenApiGeneratorV31Specifics {\n get nullType() {\n return { type: 'null' };\n }\n mapNullableOfArray(objects, isNullable) {\n if (isNullable) {\n return [...objects, this.nullType];\n }\n return objects;\n }\n mapNullableType(type, isNullable) {\n if (!type) {\n // 'null' is considered a type in Open API 3.1.0 => not providing a type includes null\n return {};\n }\n // Open API 3.1.0 made the `nullable` key invalid and instead you use type arrays\n if (isNullable) {\n return {\n type: Array.isArray(type) ? [...type, 'null'] : [type, 'null'],\n };\n }\n return {\n type,\n };\n }\n mapTupleItems(schemas) {\n return {\n prefixItems: schemas,\n };\n }\n getNumberChecks(checks) {\n return Object.assign({}, ...checks.map(check => {\n switch (check._zod.def.check) {\n case 'greater_than': {\n const greaterThanCheck = check;\n return greaterThanCheck._zod.def.inclusive\n ? { minimum: Number(greaterThanCheck._zod.def.value) }\n : { exclusiveMinimum: Number(greaterThanCheck._zod.def.value) };\n }\n case 'less_than': {\n const lessThanCheck = check;\n return lessThanCheck._zod.def.inclusive\n ? { maximum: Number(lessThanCheck._zod.def.value) }\n : { exclusiveMaximum: Number(lessThanCheck._zod.def.value) };\n }\n default:\n return {};\n }\n }));\n }\n}\n\nfunction isWebhookDefinition(definition) {\n return 'type' in definition && definition.type === 'webhook';\n}\nclass OpenApiGeneratorV31 {\n constructor(definitions, options) {\n this.definitions = definitions;\n this.webhookRefs = {};\n const specifics = new OpenApiGeneratorV31Specifics();\n this.generator = new OpenAPIGenerator(this.definitions, specifics, options);\n }\n generateDocument(config) {\n const baseDocument = this.generator.generateDocumentData();\n this.definitions\n .filter(isWebhookDefinition)\n .forEach(definition => this.generateSingleWebhook(definition.webhook));\n return Object.assign(Object.assign(Object.assign({}, config), baseDocument), { webhooks: this.webhookRefs });\n }\n generateComponents() {\n return this.generator.generateComponents();\n }\n generateSingleWebhook(route) {\n const routeDoc = this.generator.generatePath(route);\n this.webhookRefs[route.path] = Object.assign(Object.assign({}, this.webhookRefs[route.path]), routeDoc);\n return routeDoc;\n }\n}\n\nexport { OpenAPIRegistry, OpenApiGeneratorV3, OpenApiGeneratorV31, extendZodWithOpenApi, getOpenApiMetadata, getRefId, zodToOpenAPIRegistry };\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/index.ts\nimport {\n OpenAPIRegistry,\n OpenApiGeneratorV3,\n OpenApiGeneratorV31,\n extendZodWithOpenApi,\n getOpenApiMetadata\n} from \"@asteasolutions/zod-to-openapi\";\nimport { zValidator } from \"@hono/zod-validator\";\nimport { Hono } from \"hono\";\nimport { mergePath } from \"hono/utils/url\";\nimport { z } from \"zod\";\n\n// src/zod-typeguard.ts\nfunction isObject(x) {\n return typeof x === \"object\" && x !== null;\n}\nfunction isZod(x) {\n if (!x) return false;\n if (!isObject(x)) return false;\n return typeof x.parse === \"function\" && typeof x.safeParse === \"function\" && typeof x.parseAsync === \"function\" && typeof x.safeParseAsync === \"function\";\n}\n\n// src/index.ts\nvar OpenAPIHono = class _OpenAPIHono extends Hono {\n openAPIRegistry;\n defaultHook;\n constructor(init) {\n super(init);\n this.openAPIRegistry = new OpenAPIRegistry();\n this.defaultHook = init?.defaultHook;\n }\n /**\n *\n * @param {RouteConfig} route - The route definition which you create with `createRoute()`.\n * @param {Handler} handler - The handler. If you want to return a JSON object, you should specify the status code with `c.json()`.\n * @param {Hook} hook - Optional. The hook method defines what it should do after validation.\n * @example\n * app.openapi(\n * route,\n * (c) => {\n * // ...\n * return c.json(\n * {\n * age: 20,\n * name: 'Young man',\n * },\n * 200 // You should specify the status code even if it's 200.\n * )\n * },\n * (result, c) => {\n * if (!result.success) {\n * return c.json(\n * {\n * code: 400,\n * message: 'Custom Message',\n * },\n * 400\n * )\n * }\n * }\n *)\n */\n openapi = ({ middleware: routeMiddleware, hide, ...route }, handler, hook = this.defaultHook) => {\n if (!hide) {\n this.openAPIRegistry.registerPath(route);\n }\n const validators = [];\n if (route.request?.query) {\n const validator = zValidator(\"query\", route.request.query, hook);\n validators.push(validator);\n }\n if (route.request?.params) {\n const validator = zValidator(\"param\", route.request.params, hook);\n validators.push(validator);\n }\n if (route.request?.headers) {\n const validator = zValidator(\"header\", route.request.headers, hook);\n validators.push(validator);\n }\n if (route.request?.cookies) {\n const validator = zValidator(\"cookie\", route.request.cookies, hook);\n validators.push(validator);\n }\n const bodyContent = route.request?.body?.content;\n if (bodyContent) {\n for (const mediaType of Object.keys(bodyContent)) {\n if (!bodyContent[mediaType]) {\n continue;\n }\n const schema = bodyContent[mediaType][\"schema\"];\n if (!isZod(schema)) {\n continue;\n }\n if (isJSONContentType(mediaType)) {\n const validator = zValidator(\"json\", schema, hook);\n if (route.request?.body?.required) {\n validators.push(validator);\n } else {\n const mw = async (c, next) => {\n if (c.req.header(\"content-type\")) {\n if (isJSONContentType(c.req.header(\"content-type\"))) {\n return await validator(c, next);\n }\n }\n c.req.addValidatedData(\"json\", {});\n await next();\n };\n validators.push(mw);\n }\n }\n if (isFormContentType(mediaType)) {\n const validator = zValidator(\"form\", schema, hook);\n if (route.request?.body?.required) {\n validators.push(validator);\n } else {\n const mw = async (c, next) => {\n if (c.req.header(\"content-type\")) {\n if (isFormContentType(c.req.header(\"content-type\"))) {\n return await validator(c, next);\n }\n }\n c.req.addValidatedData(\"form\", {});\n await next();\n };\n validators.push(mw);\n }\n }\n }\n }\n const middleware = routeMiddleware ? Array.isArray(routeMiddleware) ? routeMiddleware : [routeMiddleware] : [];\n this.on(\n [route.method],\n route.path.replaceAll(/\\/{(.+?)}/g, \"/:$1\"),\n ...middleware,\n ...validators,\n handler\n );\n return this;\n };\n getOpenAPIDocument = (objectConfig, generatorConfig) => {\n const generator = new OpenApiGeneratorV3(this.openAPIRegistry.definitions, generatorConfig);\n const document = generator.generateDocument(objectConfig);\n return this._basePath ? addBasePathToDocument(document, this._basePath) : document;\n };\n getOpenAPI31Document = (objectConfig, generatorConfig) => {\n const generator = new OpenApiGeneratorV31(this.openAPIRegistry.definitions, generatorConfig);\n const document = generator.generateDocument(objectConfig);\n return this._basePath ? addBasePathToDocument(document, this._basePath) : document;\n };\n doc = (path, configureObject, configureGenerator) => {\n return this.get(path, (c) => {\n const objectConfig = typeof configureObject === \"function\" ? configureObject(c) : configureObject;\n const generatorConfig = typeof configureGenerator === \"function\" ? configureGenerator(c) : configureGenerator;\n try {\n const document = this.getOpenAPIDocument(objectConfig, generatorConfig);\n return c.json(document);\n } catch (e) {\n return c.json(e, 500);\n }\n });\n };\n doc31 = (path, configureObject, configureGenerator) => {\n return this.get(path, (c) => {\n const objectConfig = typeof configureObject === \"function\" ? configureObject(c) : configureObject;\n const generatorConfig = typeof configureGenerator === \"function\" ? configureGenerator(c) : configureGenerator;\n try {\n const document = this.getOpenAPI31Document(objectConfig, generatorConfig);\n return c.json(document);\n } catch (e) {\n return c.json(e, 500);\n }\n });\n };\n route(path, app) {\n const pathForOpenAPI = path.replaceAll(/:([^\\/]+)/g, \"{$1}\");\n super.route(path, app);\n if (!(app instanceof _OpenAPIHono)) {\n return this;\n }\n app.openAPIRegistry.definitions.forEach((def) => {\n switch (def.type) {\n case \"component\":\n return this.openAPIRegistry.registerComponent(def.componentType, def.name, def.component);\n case \"route\": {\n this.openAPIRegistry.registerPath({\n ...def.route,\n path: mergePath(\n pathForOpenAPI,\n // @ts-expect-error _basePath is private\n app._basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"),\n def.route.path\n )\n });\n return;\n }\n case \"webhook\": {\n this.openAPIRegistry.registerWebhook({\n ...def.webhook,\n path: mergePath(\n pathForOpenAPI,\n // @ts-expect-error _basePath is private\n app._basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"),\n def.webhook.path\n )\n });\n return;\n }\n case \"schema\":\n return this.openAPIRegistry.register(\n getOpenApiMetadata(def.schema)._internal?.refId,\n def.schema\n );\n case \"parameter\":\n return this.openAPIRegistry.registerParameter(\n getOpenApiMetadata(def.schema)._internal?.refId,\n def.schema\n );\n default: {\n const errorIfNotExhaustive = def;\n throw new Error(`Unknown registry type: ${errorIfNotExhaustive}`);\n }\n }\n });\n return this;\n }\n basePath(path) {\n return new _OpenAPIHono({ ...super.basePath(path), defaultHook: this.defaultHook });\n }\n};\nvar createRoute = (routeConfig) => {\n const route = {\n ...routeConfig,\n getRoutingPath() {\n return routeConfig.path.replaceAll(/\\/{(.+?)}/g, \"/:$1\");\n }\n };\n return Object.defineProperty(route, \"getRoutingPath\", { enumerable: false });\n};\nextendZodWithOpenApi(z);\nfunction addBasePathToDocument(document, basePath) {\n const updatedPaths = {};\n Object.keys(document.paths).forEach((path) => {\n updatedPaths[mergePath(basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"), path)] = document.paths[path];\n });\n return {\n ...document,\n paths: updatedPaths\n };\n}\nfunction isJSONContentType(contentType) {\n return /^application\\/([a-z-\\.]+\\+)?json/.test(contentType);\n}\nfunction isFormContentType(contentType) {\n return contentType.startsWith(\"multipart/form-data\") || contentType.startsWith(\"application/x-www-form-urlencoded\");\n}\nexport {\n OpenAPIHono,\n createRoute,\n extendZodWithOpenApi,\n z\n};\n","import { createRoute, z } from \"@hono/zod-openapi\";\n\n// TanStack table column definition schema\nconst TanStackColumnSchema = z.object({\n id: z.string(),\n accessorKey: z.string(),\n header: z.string(),\n cell: z.any().optional(),\n meta: z.record(z.string(), z.any()).optional(),\n});\n\nexport const SqlPreviewResponseSchema = z.object({\n columns: z.array(TanStackColumnSchema),\n data: z.array(z.record(z.string(), z.any())),\n metadata: z\n .object({\n wasSampled: z.boolean(),\n originalCount: z.number(),\n sampledCount: z.number(),\n })\n .optional(),\n});\n\nexport type SqlPreviewResponse = z.infer<typeof SqlPreviewResponseSchema>;\nexport type SqlPreviewColumn = SqlPreviewResponse[\"columns\"][number];\nexport type SqlPreviewMetadata = SqlPreviewResponse[\"metadata\"];\n\nexport const SqlPreviewErrorSchema = z.object({\n error: z.string(),\n});\n\nexport const SqlPreview = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/sql/preview\",\n operationId: \"sqlPreview\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n sql: z.string().min(1, \"SQL query is required\"),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"SQL query executed successfully\",\n content: {\n \"application/json\": {\n schema: SqlPreviewResponseSchema,\n },\n },\n },\n 400: {\n description: \"Invalid SQL query or request\",\n content: {\n \"application/json\": {\n schema: SqlPreviewErrorSchema,\n },\n },\n },\n 500: {\n description: \"Internal server error\",\n content: {\n \"application/json\": {\n schema: SqlPreviewErrorSchema,\n },\n },\n },\n },\n});\n","import { z } from \"@hono/zod-openapi\";\n\nexport const limitQueryParams = z\n .string()\n .pipe(z.coerce.number())\n .optional()\n .openapi({\n param: {\n required: false,\n },\n type: \"integer\",\n });\n\nexport const orderQueryParams = z\n .string()\n .transform((str) => {\n if (!str) return [];\n return str.split(\",\").map((part) => {\n const [column, direction = \"ASC\"] = part.split(\":\");\n return {\n column,\n direction: direction.toUpperCase() as \"ASC\" | \"DESC\",\n };\n });\n })\n .pipe(\n z.array(\n z.object({\n column: z.string(),\n direction: z.enum([\"ASC\", \"DESC\"]),\n }),\n ),\n )\n .optional()\n .openapi({\n param: {\n required: false,\n example: \"name:asc,date:desc\",\n },\n type: \"string\",\n });\n\nexport const cursorParams = z\n .string()\n .pipe(z.coerce.number())\n .optional()\n .openapi({\n param: {\n required: false,\n },\n type: \"number\",\n });\n\nexport const filterQueryParams = z\n .string()\n .transform((str) => {\n if (!str) return [];\n return str.split(\",\").map((part) => {\n const [column, value = \"\"] = part.split(\":\").map(decodeURIComponent);\n return { column, value };\n });\n })\n .pipe(\n z.array(\n z.object({\n column: z.string(),\n value: z.string(),\n }),\n ),\n )\n .optional()\n .openapi({\n param: {\n required: false,\n example: \"status:active,name:John%20Doe\",\n },\n type: \"string\",\n });\n\nexport const columnsQueryParams = z\n .string()\n .transform((str) => {\n if (!str) return [];\n return str.split(\",\");\n })\n .optional()\n .openapi({\n param: {\n required: false,\n example: \"name,date\",\n },\n type: \"string\",\n });\n","import { z } from \"zod\";\n\nexport const SupabaseUserHeaderSchema = z.object({\n \"sp-access-token\": z.string(),\n});\n\nexport const SupabaseHeaderSchema = SupabaseUserHeaderSchema;\n","import { z } from \"zod\";\n\nexport const FEEDBACK_OPTIONS = [\n { label: \"Helpful\", value: \"helpful\" },\n { label: \"Partially helpful\", value: \"partially helpful\" },\n { label: \"Not helpful\", value: \"not helpful\" },\n { label: \"Incorrect\", value: \"incorrect\" },\n] as const;\n\nexport type FeedbackType = (typeof FEEDBACK_OPTIONS)[number][\"value\"];\n\nexport const FeedbackSchema = z.object({\n created_at: z.string(),\n flow_data_id: z.number(),\n helpfulness: z.enum(\n FEEDBACK_OPTIONS.map((option) => option.value) as [\n FeedbackType,\n ...FeedbackType[],\n ],\n ),\n id: z.number(),\n});\n\nexport type Feedback = z.infer<typeof FeedbackSchema>;\n","import { z } from \"zod\";\n\nconst Node = z.object({\n id: z.string(),\n type: z.enum([\n \"entity\",\n \"attribute\",\n \"filter\",\n \"process\",\n \"combine\",\n \"result\",\n ]),\n explanation: z.string(),\n});\n\nconst Edge = z.object({\n source: z.string(),\n target: z.string(),\n});\n\nexport const LLMColumnsLineageResponse = z.record(\n z.string(),\n z.object({\n nodes: z.array(Node),\n edges: z.array(Edge),\n }),\n);\n\nexport type LLMColumnsLineageResponseType = z.infer<\n typeof LLMColumnsLineageResponse\n>;\n\nexport const SqlAnalysisChunkSchema = z.object({\n chunk_title: z.string(),\n chunk_explanation: z.string(),\n lines: z.array(\n z.object({\n sql: z.string(),\n explanation: z.string(),\n }),\n ),\n});\n\nexport const BusinessExplanationSchema = z.object({\n summary: z.string(),\n implementation: z.array(z.string()),\n assumptions: z.array(\n z.object({\n type: z.enum([\n \"grain\",\n \"completeness\",\n \"transformation\",\n \"relationship\",\n \"other\",\n ]),\n details: z.string(),\n explanation: z.string(),\n }),\n ),\n});\n","import { z } from \"@hono/zod-openapi\";\nimport {\n BusinessExplanationSchema,\n LLMColumnsLineageResponse,\n SqlAnalysisChunkSchema,\n} from \"../companion/types\";\n\nconst FlowStepSchema = z.object({\n name: z.string(),\n status: z.enum([\"running\", \"completed\", \"failed\", \"awaiting_input\"]),\n output: z.looseObject({}).or(z.unknown().array()).nullable(),\n});\n\nexport const DatabaseFlowSchema = z.object({\n created_at: z.string(),\n id: z.string(),\n request: z.string(),\n title: z.string().nullable(),\n user_id: z.string().nullable(),\n application_id: z.number().nullable().optional(),\n flow_steps: z.array(FlowStepSchema),\n flow_chat_messages: z.array(z.object({ count: z.number() })),\n});\n\nexport type DatabaseFlow = z.infer<typeof DatabaseFlowSchema>;\n\nexport const ExecuteProcedureOutputSchema = z.object({\n table: z.string(),\n schema: z.string(),\n database: z.string(),\n});\n\nexport const FrontendFlowSchema = DatabaseFlowSchema.omit({\n flow_chat_messages: true,\n flow_steps: true,\n});\nexport type FrontendFlow = z.infer<typeof FrontendFlowSchema>;\n\nexport const FrontendRecentFlowsSchema = DatabaseFlowSchema.omit({\n flow_steps: true,\n flow_chat_messages: true,\n});\n\nexport type FrontendRecentFlows = z.infer<typeof FrontendRecentFlowsSchema>;\n\nexport const ReportColumnSchema = z.looseObject({\n position: z.number().nonnegative().optional(),\n data_type: z.string(),\n null_count: z.number().nullable(),\n unique_count: z.number().nullable(),\n unique_percentage: z.number().nullable(),\n});\n\nexport const ReportSchema = z.object({\n created_at: z.string(),\n flow_id: z.string(),\n id: z.number(),\n is_sample: z.boolean(),\n schema: z.string(),\n sql: z.string(),\n table: z.string(),\n title: z.string(),\n request: z.string().nullable(),\n data_sample: z.array(z.record(z.string(), z.unknown())),\n data_summary: z.looseObject({\n columns: z.record(z.string(), ReportColumnSchema),\n }),\n bookmarked: z.boolean(),\n status: z.string().nullable(),\n is_removed: z.boolean(),\n});\nexport type Report = z.infer<typeof ReportSchema>;\n\nexport const FrontendReportSchema = ReportSchema.omit({\n sql: true,\n table: true,\n data_sample: true,\n is_sample: true,\n schema: true,\n});\n\nexport type FrontendReport = z.infer<typeof FrontendReportSchema>;\n\nexport const ReportDataSchema = z.looseObject({}).array().openapi(\"ReportData\");\n\nexport type ReportData = z.infer<typeof ReportDataSchema>;\n\nexport const ReportColumnsSchema = z\n .object({\n name: z.string(),\n data_type: z.string(),\n })\n .array();\nexport type ReportColumns = z.infer<typeof ReportColumnsSchema>;\n\n/* this is used to extract some metadata fields from the `data_summary`\n * field of flow data */\nexport const ColumnMetadataSchema = z.object({\n render_type: z.string().nullish(),\n unit: z.string().nullish(),\n});\n\nexport const FrontendReportColumnsSchema = z\n .object({\n ...ReportColumnsSchema.element.shape,\n dataType: z.string(),\n renderType: z.string().optional(),\n unit: z.string().optional(),\n })\n .array()\n .openapi(\"ReportColumns\");\n\nexport type FrontendReportColumns = z.infer<typeof FrontendReportColumnsSchema>;\n\n// Flow step output schemas:\n//\nexport const AnalyzeRequestSchema = z.object({\n goal: z.string(),\n user_friendly_goal: z.string().optional(),\n});\n\nexport const ReportExplainabilitySchema = z.object({\n sql_explanation: z.array(SqlAnalysisChunkSchema).nullish(),\n business_explanation: BusinessExplanationSchema.nullish(),\n columns_lineage: LLMColumnsLineageResponse.nullish(),\n confidence_score: z.number(),\n confidence_score_reason: z.string(),\n assumptions_score: z.number().optional(),\n assumptions_score_reason: z.string().optional(),\n friendliness_score: z.number().optional(),\n friendliness_score_reason: z.string().optional(),\n id: z.number(),\n flow_data_id: z.number(),\n created_at: z.string(),\n});\n\nexport type ReportExplainability = z.infer<typeof ReportExplainabilitySchema>;\n\nexport const FrontendReportExplainabilitySchema =\n ReportExplainabilitySchema.omit({\n id: true,\n created_at: true,\n });\n\nexport type FrontendReportExplainability = z.infer<\n typeof FrontendReportExplainabilitySchema\n>;\n\nexport const FlowSteps = {\n analyzeRequest: \"analyze_request\",\n} as const;\n\n/**\n * Sorts column entries by position property\n * Columns with defined positions come first, sorted in ascending order\n * Columns with undefined positions come after, maintaining their original order\n * @param entries the entries to sort\n * @returns the sorted entries\n */\nexport const sortReportColumns = <T extends { position?: number }>(\n entries: T[],\n): T[] => {\n return [...entries].sort((a, b) => {\n const posA = a.position;\n const posB = b.position;\n\n if (posA !== undefined && posB !== undefined) {\n return posA - posB;\n }\n\n if (posA === undefined) {\n return 1;\n }\n\n if (posB === undefined) {\n return -1;\n }\n\n return 0;\n });\n};\n\n/**\n * Sorts column entries by position property and applies metadata transformation\n * Columns with defined positions come first, sorted in ascending order\n * Columns with undefined positions come after, maintaining their original order\n * @param columnsRecord - Record of column names to column metadata from data_summary.columns\n * @returns Array of sorted columns with metadata applied\n */\nexport const transformReportColumns = (\n columnsRecord: Record<string, z.infer<typeof ReportColumnSchema>>,\n) => {\n const columns = sortReportColumns(\n Object.entries(columnsRecord).map(([name, { position, data_type }]) => ({\n name,\n position,\n data_type,\n dataType: data_type,\n })),\n );\n\n return columns.map((column) => {\n const columnName = column.name;\n const metadata = ColumnMetadataSchema.safeParse(\n columnsRecord[columnName],\n ).data;\n\n const result = {\n ...column,\n ...(metadata?.render_type\n ? { renderType: metadata.render_type }\n : undefined),\n ...(metadata?.unit ? { unit: metadata.unit } : undefined),\n };\n\n return result;\n });\n};\n","import dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat.js\";\nimport relativeTime from \"dayjs/plugin/relativeTime.js\";\nimport timezone from \"dayjs/plugin/timezone.js\";\nimport utc from \"dayjs/plugin/utc.js\";\n\ndayjs.extend(relativeTime);\ndayjs.extend(customParseFormat);\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\nexport default dayjs;\n","import dayjs from \"@mm/shared/utils/daysjs\";\n\n/**\n * Formats a number with automatically adjusted precision using Intl.NumberFormat\n * - For large numbers: rounds to whole number\n * - For medium numbers: shows a few decimal places\n * - For small numbers: shows enough precision to be meaningful\n * @param value - The number to format\n * @param options - Optional configuration with properties:\n * @param options.minPrecision Minimum number of decimal places (default: 0)\n * @param options.maxPrecision Maximum number of decimal places (default: 6)\n * @param options.trimZeros Whether to trim trailing zeros (default: true)\n * @param options.useGrouping Whether to group thousands (default: true)\n * @returns Formatted number as string\n */\nexport const formatWithAutoPrecision = (\n value: number | string,\n options: {\n minPrecision?: number;\n maxPrecision?: number;\n trimZeros?: boolean;\n useGrouping?: boolean;\n } = {},\n): string => {\n // Default options\n const {\n minPrecision = 0,\n maxPrecision = 6,\n trimZeros = true,\n useGrouping = true,\n } = options;\n\n // Handle non-numeric values\n if (typeof value !== \"number\" || isNaN(value)) {\n return String(value);\n }\n\n // Handle zero\n if (value === 0) {\n return \"0\";\n }\n\n // Take absolute value for precision calculation\n const absValue = Math.abs(value);\n\n // Determine appropriate precision based on magnitude\n let maximumFractionDigits: number;\n if (absValue >= 1000) {\n maximumFractionDigits = 0;\n } else if (absValue >= 100) {\n maximumFractionDigits = 1;\n } else if (absValue >= 10) {\n maximumFractionDigits = 2;\n } else if (absValue >= 1) {\n maximumFractionDigits = 3;\n } else if (absValue >= 0.1) {\n maximumFractionDigits = 4;\n } else if (absValue >= 0.01) {\n maximumFractionDigits = 5;\n } else {\n // For very small numbers, calculate significant digits\n maximumFractionDigits = maxPrecision;\n if (absValue > 0) {\n const exponent = Math.floor(Math.log10(absValue));\n if (exponent < 0) {\n maximumFractionDigits = Math.min(Math.abs(exponent) + 2, maxPrecision);\n }\n }\n }\n\n // Apply minimum precision constraint\n maximumFractionDigits = Math.max(maximumFractionDigits, minPrecision);\n\n // Use Intl.NumberFormat with system default locale\n const formatter = new Intl.NumberFormat(undefined, {\n minimumFractionDigits: trimZeros ? 0 : maximumFractionDigits,\n maximumFractionDigits: maximumFractionDigits,\n useGrouping: useGrouping,\n });\n\n return formatter.format(value);\n};\n\n/**\n * This module handles the formatting and normalization of table cell values for display and sorting.\n *\n * Problem:\n * When displaying data in tables, we often receive values in various formats (strings, dates,\n * JSON objects, etc.). We need to:\n * 1. Display these values in a consistent, human-readable format\n * 2. Enable proper sorting of these values regardless of their original format\n *\n * Solution:\n * The FormattedData type and formatCellValue function transform any input value into a\n * standardized format with two properties:\n * - display: A string representation suitable for rendering\n * - sortValue: A normalized value (string/number/date) suitable for consistent sorting\n *\n * The module handles various special cases:\n * - JSON strings (parsing them to extract actual values)\n * - Date/time values (converting to consistent format)\n * - BigQuery-style objects with 'value' property\n * - Nested objects (pretty-printing them)\n * - Null/undefined values\n */\n\nexport type FormattedData = {\n display: (string & {}) | \"empty\" | null;\n sortValue: string | number | Date | null;\n};\n\nexport const isFormattedData = (x: unknown): x is FormattedData => {\n return typeof x == \"object\" && !!x && \"display\" in x && \"sortValue\" in x;\n};\n\nconst MIN_VALID_YEAR = 1900;\nconst MAX_VALID_YEAR = 2200;\n\nconst zonedatetime = <T extends string>(\n format: T,\n zone: string,\n): {\n readonly format: T;\n readonly type: \"zonedatetime\";\n readonly zone: string;\n} => ({ format, type: \"zonedatetime\", zone }) as const;\n\nconst datetime = <T extends string>(\n format: T,\n): { readonly format: T; readonly type: \"datetime\" } =>\n ({ format, type: \"datetime\" }) as const;\n\nconst date = <T extends string>(\n format: T,\n): { readonly format: T; readonly type: \"date\" } =>\n ({ format, type: \"date\" }) as const;\n\nconst DATE_FORMATS = [\n // ISO 8601 formats\n zonedatetime(\"YYYY-MM-DDTHH:mm:ss.SSSZ\", \"UTC\"),\n zonedatetime(\"YYYY-MM-DDTHH:mm:ssZ\", \"UTC\"),\n zonedatetime(\"YYYY-MM-DDTHH:mmZ\", \"UTC\"),\n datetime(\"YYYY-MM-DDTHH:mm:ss\"),\n datetime(\"YYYY-MM-DDTHH:mm\"),\n date(\"YYYY-MM-DDT\"),\n // Standard date formats\n date(\"YYYY-MM-DD\"),\n date(\"YYYY/MM/DD\"),\n date(\"DD-MM-YYYY\"),\n date(\"DD/MM/YYYY\"),\n date(\"MM-DD-YYYY\"),\n date(\"MM/DD/YYYY\"),\n // Date time formats\n datetime(\"YYYY-MM-DD HH:mm:ss\"),\n datetime(\"YYYY-MM-DD HH:mm\"),\n datetime(\"YYYY/MM/DD HH:mm:ss\"),\n datetime(\"YYYY/MM/DD HH:mm\"),\n datetime(\"DD-MM-YYYY HH:mm:ss\"),\n datetime(\"DD-MM-YYYY HH:mm\"),\n datetime(\"DD/MM/YYYY HH:mm:ss\"),\n datetime(\"DD/MM/YYYY HH:mm\"),\n datetime(\"MM-DD-YYYY HH:mm:ss\"),\n datetime(\"MM-DD-YYYY HH:mm\"),\n datetime(\"MM/DD/YYYY HH:mm:ss\"),\n datetime(\"MM/DD/YYYY HH:mm\"),\n] as const;\n\ntype DateStringResult =\n | {\n isValid: true;\n parsedDate: dayjs.Dayjs;\n isDateTime: boolean;\n }\n | { isValid: false };\n\nexport const isDateString = (value: unknown): DateStringResult => {\n if (typeof value !== \"string\") return { isValid: false };\n\n // Remove common date separators to check if it's just numbers\n const stripped = value.replace(/[-/.:\\s]/g, \"\");\n if (/^\\d+$/.test(stripped)) {\n // If it's all numbers, ensure it matches common date patterns\n // Prevent pure numbers from being interpreted as timestamps\n if (stripped.length < 6) return { isValid: false }; // Too short to be a date\n if (value.length === stripped.length) return { isValid: false }; // No separators = probably not a date\n }\n\n /* This should be the longest date string we can have */\n if (stripped.length > \"YYYY-MM-DDTHH:mm:ss.SSS+00:00\".length) {\n return { isValid: false };\n }\n\n // Then try other formats\n for (const format of DATE_FORMATS) {\n let date: dayjs.Dayjs | undefined;\n try {\n if (format.type === \"zonedatetime\") {\n date = dayjs.tz(value, format.format, format.zone);\n } else {\n date = dayjs(value, format.format, true); // Strict parsing\n }\n } catch {\n continue;\n }\n\n if (date.isValid()) {\n // Additional validation for reasonable dates\n const year = date.year();\n if (year < MIN_VALID_YEAR || year > MAX_VALID_YEAR) continue;\n\n // Check if it's a datetime by looking for time components\n const isDateTime =\n format.type === \"zonedatetime\" || format.type == \"datetime\";\n\n return {\n isValid: true,\n parsedDate: date,\n isDateTime,\n };\n }\n }\n\n return { isValid: false };\n};\n\n/*\n * For each cell of our table, we need to be able to:\n * - show its value (properly formatted)\n * - compare it to other values of the value column (for sorting)\n *\n * This function return this information for any given cell\n */\nexport const formatDataValue = (\n value: unknown,\n { replaceNullValue }: { replaceNullValue: boolean } = {\n replaceNullValue: true,\n },\n): FormattedData => {\n if (value === null || value === undefined) {\n return {\n display: replaceNullValue ? \"empty\" : null,\n sortValue: null,\n };\n }\n\n let processedValue: unknown = value;\n\n /*\n * We sometimes receives data as serialized JSON object from BigQuery.\n * This is for instance the case of all date object, but not only.\n * Here we try to parse the data as JSON. In case of error we return\n * the value as a plain string\n */\n if (typeof processedValue === \"string\") {\n try {\n const parsed = JSON.parse(processedValue) as unknown;\n /*\n * This part is very important and might become an issue in the future:\n * As we are parsing the input as JSON, if we had the string value \"1234\"\n * it would become the number 1234.\n *\n * This might not be an issue but it's something to keep in mind.\n * Tests are covering this\n */\n processedValue = parsed;\n } catch {\n /* */\n }\n }\n\n /* Now that our JSON object have been parsed, we can check if they match a specific\n * format we want to deal with. This could contains formatting for a specific lib (i.e BigQuery)\n * or more generic formatting for object\n */\n if (\n processedValue &&\n typeof processedValue === \"object\" &&\n Object.keys(processedValue).length === 1 &&\n \"value\" in processedValue\n ) {\n const extractedValue = processedValue.value;\n\n const dateResult = isDateString(extractedValue);\n if (dateResult.isValid) {\n return {\n display: dateResult.isDateTime\n ? dateResult.parsedDate.format(\"YYYY-MM-DD HH:mm:ss\")\n : dateResult.parsedDate.format(\"YYYY-MM-DD\"),\n sortValue: dateResult.parsedDate.valueOf(),\n };\n }\n\n return {\n display: String(extractedValue),\n sortValue: extractedValue as string | number,\n };\n }\n\n /* The object we extracted did not match any format of data we expected\n * so we continue with the initial data were we can also applied library specific\n * and/or generic formatting on the value\n */\n const dateResult = isDateString(processedValue);\n if (dateResult.isValid) {\n return {\n display: dateResult.isDateTime\n ? dateResult.parsedDate.format(\"YYYY-MM-DD HH:mm:ss\")\n : dateResult.parsedDate.format(\"YYYY-MM-DD\"),\n sortValue: dateResult.parsedDate.valueOf(),\n };\n }\n\n /*\n * Sometimes the value we want to show can be a JSON and we want to avoid the cursed\n * [Object object] so we stringify the result.\n * It does not really make any sense to sort those kind of object, but we default to\n * string comparison\n */\n if (typeof processedValue === \"object\") {\n const stringified = JSON.stringify(processedValue, null, 2);\n return {\n display: stringified,\n sortValue: stringified,\n };\n }\n\n if (typeof processedValue === \"boolean\") {\n return {\n display: String(processedValue),\n sortValue: processedValue ? 1 : 0,\n };\n }\n\n if (typeof processedValue === \"number\") {\n /* Do not format numbers that could be a year */\n return {\n display:\n processedValue >= MIN_VALID_YEAR &&\n processedValue <= MAX_VALID_YEAR &&\n Number.isInteger(processedValue)\n ? String(processedValue)\n : formatWithAutoPrecision(processedValue),\n sortValue: processedValue,\n };\n }\n\n // we don't really know what we are getting, default to string\n return {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n display: String(processedValue),\n sortValue: processedValue as string | number,\n };\n};\n","import { z } from \"@hono/zod-openapi\";\nimport { formatDataValue } from \"@mm/shared/data/FormattedData\";\nimport type { Simplify } from \"type-fest\";\n\n// Common properties shared across all chart types\nconst commonConfigProperties = {\n title: z.string(),\n};\n\n// Properties shared by all cartesian charts (bar, line/area, scatter)\nconst cartesianConfigProperties = {\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n xAxisDataKey: z.string().optional(),\n yAxisDataKey: z.string().optional(),\n dimensionDataKey: z.string().optional(),\n valueColumns: z.array(z.string()).optional(),\n};\n\nexport const V1VisualizationConfigurationSchema = z.discriminatedUnion(\"type\", [\n // Bar chart\n z.object({\n type: z.literal(\"bar\"),\n ...commonConfigProperties,\n ...cartesianConfigProperties,\n }),\n\n // Line/Area chart\n z.object({\n type: z.literal(\"line/area\"),\n ...commonConfigProperties,\n ...cartesianConfigProperties,\n }),\n\n // Scatter chart\n z.object({\n type: z.literal(\"scatter\"),\n ...commonConfigProperties,\n ...cartesianConfigProperties,\n }),\n\n // Pie chart\n z.object({\n type: z.literal(\"pie\"),\n ...commonConfigProperties,\n nameKey: z.string(),\n dataKey: z.string(),\n }),\n]);\n\n// Define each chart type schema using direct object literals\nexport const VisualizationConfigurationSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"bar\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n categoryColumn: z.string(),\n secondaryCategoryColumn: z.string().optional(),\n valueColumn: z.string(),\n }),\n\n // Line/Area chart - version 2: New format\n z.object({\n type: z.literal(\"line/area\"),\n config_version: z.literal(2),\n ...commonConfigProperties,\n xAxisColumn: z.string(),\n valueColumns: z.array(z.string()),\n yAxisLabels: z.array(z.string()),\n }),\n\n // Line/Area chart - categorical format (requires pivoting)\n z.object({\n type: z.literal(\"line/area-categorical\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n valueColumn: z.string(),\n xAxisColumn: z.string(),\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n categoryColumn: z.string(),\n }),\n\n // Scatter chart - new format (v2)\n z.object({\n type: z.literal(\"scatter\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n xAxisLabel: z.string(),\n yAxisLabel: z.string(),\n xAxisValueColumn: z.string(),\n yAxisValueColumn: z.string(),\n }),\n // Pie chart - new format (v2)\n z.object({\n type: z.literal(\"pie\"),\n ...commonConfigProperties,\n config_version: z.literal(2),\n categoryColumn: z.string(),\n valueColumn: z.string(),\n }),\n]);\n\nconst BaseVisualizationSchema = z.object({\n id: z.number(),\n flow_data_id: z.number(),\n created_at: z.string(),\n sql: z.string(),\n bookmarked: z.boolean(),\n data_sample: z.array(z.record(z.string(), z.unknown())),\n is_sample: z.boolean(),\n data_summary: z.record(z.string(), z.unknown()),\n});\n\nexport const V1VisualizationSchema = z.object({\n ...BaseVisualizationSchema.shape,\n configuration: V1VisualizationConfigurationSchema,\n});\n\nexport const VisualizationSchema = z.object({\n ...BaseVisualizationSchema.shape,\n configuration: VisualizationConfigurationSchema,\n});\n\nexport type V1Visualization = z.output<typeof V1VisualizationSchema>;\nexport type Visualization = z.output<typeof VisualizationSchema>;\n\nexport const VisualizationDataSchema = z\n .array(\n z.record(\n z.string(), // any key\n z.union([\n // Date objects FIRST\n z.date(),\n z.coerce.number(),\n // Handle various data types including BigQueryDate\n z.unknown().transform((val) => formatDataValue(val).display),\n ]), // value types\n ),\n )\n .openapi(\"VisualizationData\");\n\nexport type VisualizationData = z.infer<typeof VisualizationDataSchema>;\n\nexport const V1FrontendVisualizationSchema = V1VisualizationSchema.omit({\n sql: true,\n data_sample: true,\n is_sample: true,\n data_summary: true,\n});\n\nexport const FrontendVisualizationSchema = VisualizationSchema.omit({\n sql: true,\n data_sample: true,\n is_sample: true,\n data_summary: true,\n});\n\nexport type V1FrontendVisualization = z.output<\n typeof V1FrontendVisualizationSchema\n>;\n\nexport type FrontendVisualization = z.output<\n typeof FrontendVisualizationSchema\n>;\nexport const isV2Visualization = (\n visualization: Visualization | V1Visualization,\n): visualization is Visualization => {\n return (\n \"config_version\" in visualization.configuration &&\n // we currently have only 2 versions\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n visualization.configuration.config_version === 2\n );\n};\n\nexport const isFrontendV1Visualization = (\n visualization: FrontendVisualization | V1FrontendVisualization,\n): visualization is V1FrontendVisualization => {\n return !(\"config_version\" in visualization.configuration);\n};\n\nexport const isFrontendV2Visualization = (\n visualization: FrontendVisualization | V1FrontendVisualization,\n): visualization is FrontendVisualization => {\n return (\n \"config_version\" in visualization.configuration &&\n // we currently have only 2 versions\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n visualization.configuration.config_version === 2\n );\n};\n\n/* Define metadata schema for data sampling information\n * those fields are coming from the data service at query time\n * not from our own database */\nexport const VisualizationMetadataSchema = z\n .object({\n wasSampled: z.boolean(),\n originalCount: z.number(),\n sampledCount: z.number(),\n })\n .optional();\n\nexport const V1FrontendVisualizationWithDataSchema =\n V1FrontendVisualizationSchema.extend({\n data: VisualizationDataSchema,\n _metadata: VisualizationMetadataSchema,\n });\n\nexport const FrontendVisualizationWithDataSchema =\n FrontendVisualizationSchema.extend({\n data: VisualizationDataSchema,\n _metadata: VisualizationMetadataSchema,\n });\n\nexport type V1FrontendVisualizationWithData = z.output<\n typeof V1FrontendVisualizationWithDataSchema\n>;\n\nexport type FrontendVisualizationWithData = z.output<\n typeof FrontendVisualizationWithDataSchema\n>;\n\nexport const isFrontendV1VisualizationWithData = (\n visualization:\n | FrontendVisualizationWithData\n | V1FrontendVisualizationWithData,\n): visualization is V1FrontendVisualizationWithData => {\n return !(\"config_version\" in visualization.configuration);\n};\n\nexport const isFrontendV2VisualizationWithData = (\n visualization:\n | FrontendVisualizationWithData\n | V1FrontendVisualizationWithData,\n): visualization is FrontendVisualizationWithData => {\n return (\n \"config_version\" in visualization.configuration &&\n // we currently have only 2 versions\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n visualization.configuration.config_version === 2\n );\n};\n\nexport const getVisualizationParser = (data: { configuration: unknown }) => {\n if (\n data.configuration &&\n typeof data.configuration === \"object\" &&\n \"config_version\" in data.configuration\n ) {\n if (data.configuration.config_version === 2) {\n return VisualizationSchema;\n } else {\n return undefined;\n }\n } else {\n return V1VisualizationSchema;\n }\n};\n\nexport type ConvertedVisualization<T> = T extends Visualization\n ? FrontendVisualization\n : T extends V1Visualization\n ? V1FrontendVisualization\n : never;\n\nexport const convertToFrontendVisualization = <\n T extends Visualization | V1Visualization,\n>(\n visualization: T,\n): ConvertedVisualization<T> => {\n if (isV2Visualization(visualization)) {\n return FrontendVisualizationSchema.parse(\n visualization,\n ) as ConvertedVisualization<T>;\n } else {\n return V1FrontendVisualizationSchema.parse(\n visualization,\n ) as ConvertedVisualization<T>;\n }\n};\n\nexport type V1BarVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"bar\";\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisDataKey?: string;\n yAxisDataKey?: string;\n dimensionDataKey?: string;\n valueColumns?: string[];\n };\n }\n>;\n\nexport type BarVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"bar\";\n title: string;\n config_version: 2;\n xAxisLabel: string;\n yAxisLabel: string;\n categoryColumn: string;\n secondaryCategoryColumn?: string;\n valueColumn: string;\n };\n }\n>;\n\nexport type V1LineAreaVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"line/area\";\n config_version?: 1;\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisDataKey?: string;\n yAxisDataKey?: string;\n dimensionDataKey?: string;\n valueColumns: string[];\n };\n }\n>;\n\nexport type LineAreaVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"line/area\";\n config_version: 2;\n title: string;\n xAxisColumn: string;\n valueColumns: string[];\n yAxisLabels: string[];\n };\n }\n>;\n\nexport type CategoricalLineAreaVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"line/area-categorical\";\n title: string;\n config_version: 2;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisColumn: string;\n valueColumn: string;\n categoryColumn: string;\n };\n }\n>;\n\nexport type V1ScatterVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"scatter\";\n title: string;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisDataKey?: string;\n yAxisDataKey?: string;\n dimensionDataKey?: string;\n valueColumns?: string[];\n };\n }\n>;\n\nexport type ScatterVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"scatter\";\n title: string;\n config_version: 2;\n xAxisLabel: string;\n yAxisLabel: string;\n xAxisValueColumn: string;\n yAxisValueColumn: string;\n };\n }\n>;\n\nexport type V1PieVisualization = Simplify<\n V1FrontendVisualizationWithData & {\n configuration: {\n type: \"pie\";\n title: string;\n nameKey: string;\n dataKey: string;\n };\n }\n>;\n\nexport type PieVisualization = Simplify<\n FrontendVisualizationWithData & {\n configuration: {\n type: \"pie\";\n title: string;\n config_version: 2;\n categoryColumn: string;\n valueColumn: string;\n };\n }\n>;\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"@mm/shared/endpoints/companion/auth\";\nimport { FeedbackSchema } from \"@mm/shared/schemas/feedback\";\nimport {\n FrontendFlowSchema,\n FrontendRecentFlowsSchema,\n FrontendReportColumnsSchema,\n FrontendReportExplainabilitySchema,\n FrontendReportSchema,\n ReportDataSchema,\n} from \"@mm/shared/schemas/flows\";\nimport {\n FrontendVisualizationSchema,\n V1FrontendVisualizationSchema,\n} from \"@mm/shared/schemas/visualizations\";\nimport {\n columnsQueryParams,\n cursorParams,\n filterQueryParams,\n limitQueryParams,\n orderQueryParams,\n} from \"../utils\";\n\nexport const FlowIdParam = z\n .object({ flowId: z.string().uuid() })\n .openapi(\"FlowId\", { type: \"string\" });\n\nexport const FlowDataIdParam = z\n .object({ flowDataId: z.string().pipe(z.coerce.number()) })\n .openapi(\"FlowDataId\", { type: \"integer\" });\n\nexport const ReportId = z.string().pipe(z.coerce.number());\n\nexport const ReportIdParam = z\n .object({ report_id: ReportId })\n .openapi(\"ReportId\", { type: \"integer\" });\n\nexport const RetrieveFlowDataReports = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/data-reports\",\n operationId: \"retrieveFlowDataReports\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The data reports associated with the flow\",\n content: {\n \"application/json\": {\n schema: FrontendReportSchema.array(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveLatestDataReportStatus = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/data-reports/last/status\",\n operationId: \"retrieveLatestDataReportStatus\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The status of the latest flow data for a given flow\",\n content: {\n \"application/json\": {\n schema: z.object({ status: z.string().nullable() }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description:\n \"Unable to retrieve status for latest flow data of flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveInsights = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/insights\",\n operationId: \"retrieveInsights\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: z.object({\n flowDataId: z\n .string()\n .pipe(z.coerce.number())\n .optional()\n .openapi({\n param: {\n required: false,\n },\n type: \"integer\",\n }),\n }),\n },\n responses: {\n 200: {\n description: \"The content of the flow\",\n content: {\n \"application/json\": {\n schema: z.object({\n dataReports: FrontendReportSchema.array(),\n visualizations: V1FrontendVisualizationSchema.array(),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowColumns = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/columns\",\n operationId: \"retrieveFlowColumns\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"A list containing the columns of the flow\",\n content: {\n \"application/json\": {\n schema: FrontendReportColumnsSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlow = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}\",\n operationId: \"retrieveFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The flow with its steps\",\n content: {\n \"application/json\": {\n schema: FrontendFlowSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveRecentFlows = createRoute({\n method: \"get\",\n path: \"/api/v1/recent-flows\",\n operationId: \"retrieveRecentFlows\",\n request: {\n headers: SupabaseHeaderSchema,\n query: z.object({\n limit: limitQueryParams,\n }),\n },\n responses: {\n 200: {\n description: \"A list of recent flows\",\n content: {\n \"application/json\": {\n schema: FrontendRecentFlowsSchema.array(),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\n// Below: data reports\nexport const GetReportColumns = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/columns\",\n operationId: \"getDataReportColumns\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"A list containing the columns of the report\",\n content: {\n \"application/json\": {\n schema: FrontendReportColumnsSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ExportReportData = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/export\",\n operationId: \"exportReportData\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The report data exported in CSV format\",\n content: {\n \"text/csv\": {\n schema: z.string().describe(\"CSV formatted string of report data\"),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowData = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/data\",\n operationId: \"retrieveFlowData\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: z.object({\n limit: limitQueryParams,\n order: orderQueryParams,\n cursor: cursorParams,\n filter: filterQueryParams,\n flowDataId: FlowDataIdParam.shape.flowDataId.openapi({\n type: \"integer\",\n param: { required: true },\n }),\n }),\n },\n responses: {\n 200: {\n description: \"The content of the flow\",\n content: {\n \"application/json\": {\n schema: ReportDataSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportData = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/data\",\n operationId: \"getDataReportData\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n query: z.object({\n columns: columnsQueryParams,\n limit: limitQueryParams,\n order: orderQueryParams,\n cursor: cursorParams,\n filter: filterQueryParams,\n }),\n },\n responses: {\n 200: {\n description: \"The content of the report\",\n content: {\n \"application/json\": {\n schema: ReportDataSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowDataCount = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/count\",\n operationId: \"retrieveFlowDataCount\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: z.object({\n flowDataId: z\n .string()\n .pipe(z.coerce.number())\n .openapi({\n param: {\n required: false,\n },\n type: \"integer\",\n }),\n }),\n },\n responses: {\n 200: {\n description: \"The total count of rows in the flow\",\n content: {\n \"application/json\": {\n schema: z.object({\n count: z\n .number()\n .int()\n .nonnegative()\n .describe(\"Total number of rows in the flow\"),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportRowCount = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/count\",\n operationId: \"getDataReportRowCount\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The total count of rows in the report\",\n content: {\n \"application/json\": {\n schema: z.object({\n count: z\n .number()\n .int()\n .nonnegative()\n .describe(\"Total number of rows in the report\"),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFeedback = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flow-data/{flowDataId}/feedback\",\n operationId: \"retrieveFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"The feedback for the flow data\",\n content: {\n \"application/json\": {\n schema: FeedbackSchema.nullable(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportFeedback = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/feedback\",\n operationId: \"getDataReportFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The feedback for the report\",\n content: {\n \"application/json\": {\n schema: FeedbackSchema.nullable(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const UpsertFeedback = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"post\",\n path: \"/api/v1/flow-data/{flowDataId}/feedback\",\n operationId: \"upsertFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n body: {\n description: \"The feedback for the flow data\",\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n helpfulness: FeedbackSchema.shape.helpfulness,\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Successfully upserted feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const UpsertReportFeedback = createRoute({\n method: \"post\",\n path: \"/api/v1/data-reports/{report_id}/feedback\",\n operationId: \"upsertReportFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n body: {\n description: \"The feedback for the flow data\",\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n helpfulness: FeedbackSchema.shape.helpfulness,\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Successfully upserted feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const DeleteFeedback = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"delete\",\n path: \"/api/v1/flow-data/{flowDataId}/feedback\",\n operationId: \"deleteFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"Successfully deleted feedback\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const DeleteReportFeedback = createRoute({\n method: \"delete\",\n path: \"/api/v1/data-reports/{report_id}/feedback\",\n operationId: \"deleteReportFeedback\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"Successfully deleted feedback\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve feedback\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveFlowDataExplainability = createRoute({\n // this endpoint is deprecated and will be removed in the future\n hide: true,\n method: \"get\",\n path: \"/api/v1/flow-data/{flowDataId}/explainability\",\n operationId: \"retrieveFlowDataExplainability\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowDataIdParam,\n },\n responses: {\n 200: {\n description: \"The explainability of the flow data\",\n content: {\n \"application/json\": {\n schema: FrontendReportExplainabilitySchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportExplainability = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/explainability\",\n operationId: \"getDataReportExplainability\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The explainability of the report\",\n content: {\n \"application/json\": {\n schema: FrontendReportExplainabilitySchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReport = createRoute({\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}\",\n operationId: \"getDataReport\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The visualizations for the report\",\n content: {\n \"application/json\": {\n schema: FrontendReportSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetReportVisualizations = createRoute({\n hide: true,\n method: \"get\",\n path: \"/api/v1/data-reports/{report_id}/visualizations\",\n operationId: \"getDataReportVisualizations\",\n request: {\n headers: SupabaseHeaderSchema,\n params: ReportIdParam,\n },\n responses: {\n 200: {\n description: \"The visualizations for the report\",\n content: {\n \"application/json\": {\n schema: z.object({\n ...FrontendReportSchema.shape,\n visualizations: z\n .union([\n V1FrontendVisualizationSchema,\n FrontendVisualizationSchema,\n ])\n .array(),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve report with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const CreateFlow = createRoute({\n method: \"post\",\n path: \"/api/v1/flows\",\n operationId: \"createFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n userQuery: z.string(),\n applicationName: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Create a new flow\",\n content: {\n \"application/json\": {\n schema: z.object({\n status: z.literal(\"success\"),\n flowId: z.string(),\n }),\n },\n },\n },\n 400: {\n description: \"Application not found\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SqlPreviewResponseSchema } from \"@mm/shared/endpoints/admin-console/sqlPreview.routes\";\nimport {\n cursorParams,\n filterQueryParams,\n limitQueryParams,\n orderQueryParams,\n} from \"@mm/shared/endpoints/utils\";\nimport { ReportIdParam } from \"../companion/flows.routes\";\n\nconst ExtractInsightResponseSchema = z\n .object({\n type: z.literal(\"text\"),\n insight: z.string(),\n })\n .or(\n z.object({\n type: z.literal(\"missing\"),\n }),\n );\n\nexport type ExtractInsightResponse = z.infer<\n typeof ExtractInsightResponseSchema\n>;\nexport const GenerateInsightTemplate = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/contextual-insights/generate-template\",\n operationId: \"generateInsightTemplate\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n request: z.string(),\n insight_type: z.string(),\n additional_context: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Insight template generated successfully\",\n content: {\n \"application/json\": {\n schema: z.object({\n expanded_request: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetContextualInsightPreviewData = createRoute({\n method: \"get\",\n path: \"/api/v1/admin-console/contextual-insights/preview/{report_id}/data\",\n operationId: \"getContextualInsightPreviewData\",\n request: {\n params: ReportIdParam,\n query: z.object({\n limit: limitQueryParams,\n order: orderQueryParams,\n cursor: cursorParams,\n filter: filterQueryParams,\n }),\n },\n responses: {\n 200: {\n description: \"The preview data for the contextual insight\",\n content: {\n \"application/json\": {\n schema: SqlPreviewResponseSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow data with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetContextualInsightColumnSampleValues = createRoute({\n method: \"get\",\n path: \"/api/v1/admin-console/contextual-insights/preview/{report_id}/sample-values\",\n operationId: \"getContextualInsightColumnSampleValues\",\n request: {\n params: ReportIdParam,\n query: z.object({\n column_name: z.string().openapi({\n param: {\n required: true,\n },\n type: \"string\",\n description: \"The column name to get sample values for\",\n }),\n }),\n },\n responses: {\n 200: {\n description: \"Sample values for the specified column\",\n content: {\n \"application/json\": {\n schema: z.object({\n options: z.array(z.unknown()),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow data with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GenerateInsight = createRoute({\n method: \"post\",\n path: \"/api/v1/contextual-insights/generate-insight\",\n operationId: \"generateInsight\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n selected_filter_value: z.string(),\n custom_id: z.string(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Insight generated successfully\",\n content: {\n \"application/json\": {\n schema: ExtractInsightResponseSchema,\n },\n },\n },\n 404: {\n description: \"Insight not found\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 400: {\n description: \"Invalid request\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ExtractInsight = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/contextual-insights/extract-insight\",\n operationId: \"extractInsight\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n flow_id: z.string(),\n report_id: z.number(),\n topic: z.string(),\n expanded_request: z.string(),\n insight_type: z.string(),\n selected_filter: z.string(),\n selected_filter_value: z.string(),\n additional_context: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Insight extracted successfully\",\n content: {\n \"application/json\": {\n schema: ExtractInsightResponseSchema,\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const SuggestFilterColumn = createRoute({\n method: \"post\",\n path: \"/api/v1/admin-console/contextual-insights/suggest-filter-column\",\n operationId: \"suggestFilterColumn\",\n request: {\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n report_id: z.number(),\n request: z.string(),\n insight_type: z.string(),\n additional_context: z.string().optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Filter column suggestion generated successfully\",\n content: {\n \"application/json\": {\n schema: z.object({\n recommended_column: z.string(),\n reasoning: z.string(),\n }),\n },\n },\n },\n 404: {\n description: \"Report not found\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\n\nconst GetApiInformationInputSchema = z.object({\n apiKey: z.string(),\n});\n\nconst GetApiInformationOutputSchema = z.object({\n apiUrl: z.string(),\n anonKey: z.string(),\n});\n\nexport type GetApiInformationOutput = z.infer<\n typeof GetApiInformationOutputSchema\n>;\n\nexport const GetApiInformation = createRoute({\n method: \"get\",\n path: \"/api/v1/auth/apiInformation\",\n operationId: \"getApiInformation\",\n request: {\n query: GetApiInformationInputSchema,\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: GetApiInformationOutputSchema,\n },\n },\n description: \"Retrieve the API URL and anon key\",\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid input\",\n },\n 500: {\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: \"Unable to retrieve the API URL and anon key\",\n },\n },\n});\n\nexport const GetApiInformationLegacy = createRoute({\n hide: true,\n method: \"get\",\n path: \"/api/auth/apiInformation\",\n operationId: \"getApiInformation\",\n request: {\n query: GetApiInformationInputSchema,\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: GetApiInformationOutputSchema,\n },\n },\n description: \"Retrieve the API URL and anon key\",\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid input\",\n },\n 500: {\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: \"Unable to retrieve the API URL and anon key\",\n },\n },\n});\n\nconst ExchangeExternalTokenInputSchema = z.object({\n apiKey: z.string(),\n externalJWT: z.string(),\n});\n\nconst ExchangeExternalTokenOutputSchema = z.object({\n accessToken: z.string(),\n refreshToken: z.string(),\n});\n\nexport type ExchangeExternalTokenOutput = z.infer<\n typeof ExchangeExternalTokenOutputSchema\n>;\n\nexport const ExchangeExternalToken = createRoute({\n method: \"post\",\n path: \"/api/v1/auth/exchangeExternalToken\",\n operationId: \"exchangeExternalToken\",\n request: {\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: ExchangeExternalTokenInputSchema,\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n \"application/json\": {\n schema: ExchangeExternalTokenOutputSchema,\n },\n },\n description: \"Retrieve a JWT for an external user\",\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid input\",\n },\n 500: {\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: \"Unable to retrieve a JWT for an external user\",\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"./auth\";\n\nconst SpeechTokenResponseSchema = z.object({\n token: z.string().describe(\"Temporary AssemblyAI streaming token\"),\n expiresAt: z\n .string()\n .datetime()\n .describe(\"ISO timestamp describing when the token expires.\"),\n});\n\nexport const CreateSpeechToken = createRoute({\n method: \"post\",\n path: \"/api/v1/speech/token\",\n operationId: \"createSpeechToken\",\n request: {\n headers: SupabaseHeaderSchema,\n },\n responses: {\n 200: {\n description: \"A short-lived token that can be used to stream audio.\",\n content: {\n \"application/json\": {\n schema: SpeechTokenResponseSchema,\n },\n },\n },\n 500: {\n description: \"Failed to create a speech token\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"@mm/shared/endpoints/companion/auth\";\n\nexport const End2EndApiResponseSchema = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"error\"),\n error: z.string(),\n }),\n z.object({\n status: z.literal(\"success\"),\n flowId: z.string(),\n }),\n]);\n\nexport type End2EndApiResponse = z.infer<typeof End2EndApiResponseSchema>;\n\nexport const RunEnd2EndFlowRoute = createRoute({\n method: \"post\",\n path: \"/api/v1/end2end\",\n operationId: \"runEnd2EndFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: z.object({\n userQuery: z.string(),\n isNewAnalysisGoal: z.boolean().default(true),\n difficultyLevel: z\n .enum([\"simple\", \"moderate\", \"complex\"])\n .default(\"complex\"),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Run the end2end flow\",\n content: {\n \"application/json\": {\n schema: End2EndApiResponseSchema,\n },\n },\n },\n },\n});\n","import { createRoute } from \"@hono/zod-openapi\";\nimport z from \"zod\";\nimport { End2EndApiResponseSchema } from \"../end2end/run.routes\";\nimport { SupabaseHeaderSchema } from \"./auth\";\n\nconst TriggerFlowBody = z.object({\n triggerId: z.string(),\n variables: z.record(z.string(), z.string()),\n});\n\nexport const TriggerFlow = createRoute({\n method: \"post\",\n path: \"/api/v1/trigger-flow/\",\n operationId: \"triggerFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n description: \"Trigger flow request body\",\n content: {\n \"application/json\": {\n schema: TriggerFlowBody,\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"Flow id\",\n content: {\n \"application/json\": {\n schema: End2EndApiResponseSchema,\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid template or variable values\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve trigger with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","/**\n * Runtime platform detection utilities for cross-platform compatibility.\n * These functions detect the current environment to enable automatic adapter selection.\n */\n\nexport const isBrowser = (): boolean => {\n return typeof window !== \"undefined\" && typeof document !== \"undefined\";\n};\n\nexport const isNode = (): boolean => {\n return (\n typeof process !== \"undefined\" &&\n typeof process.versions === \"object\" &&\n \"node\" in process.versions\n );\n};\n\nexport const isReactNative = (): boolean => {\n return (\n typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\"\n );\n};\n\nexport type PlatformType = \"browser\" | \"node\" | \"react-native\" | \"unknown\";\n\nexport const getPlatform = (): PlatformType => {\n if (isReactNative()) return \"react-native\";\n if (isBrowser()) return \"browser\";\n if (isNode()) return \"node\";\n return \"unknown\";\n};\n","import type { AsyncStorage } from \"./interface\";\n\n/**\n * Browser localStorage adapter with async interface.\n * Wraps the synchronous localStorage API with async methods for consistency.\n */\nexport class BrowserStorageAdapter implements AsyncStorage {\n // eslint-disable-next-line @typescript-eslint/require-await\n async getItem(key: string): Promise<string | null> {\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.warn(\n \"BrowserStorageAdapter: Failed to get item from localStorage\",\n error,\n );\n return null;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async setItem(key: string, value: string): Promise<void> {\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n console.warn(\n \"BrowserStorageAdapter: Failed to set item in localStorage\",\n error,\n );\n throw error;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async removeItem(key: string): Promise<void> {\n try {\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(\n \"BrowserStorageAdapter: Failed to remove item from localStorage\",\n error,\n );\n throw error;\n }\n }\n}\n","import type { AsyncStorage } from \"./interface\";\n\n/**\n * in-memory storage adapter.\n */\nexport class MemoryStorageAdapter implements AsyncStorage {\n private storage = new Map<string, string>();\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getItem(key: string): Promise<string | null> {\n const value = this.storage.get(key);\n return value !== undefined ? value : null;\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async setItem(key: string, value: string): Promise<void> {\n this.storage.set(key, value);\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async removeItem(key: string): Promise<void> {\n this.storage.delete(key);\n }\n}\n","import { getPlatform } from \"#utils/platform\";\nimport { BrowserStorageAdapter } from \"./browser\";\nimport type { AsyncStorage } from \"./interface\";\nimport { MemoryStorageAdapter } from \"./memory\";\n\n/**\n * Create the appropriate storage adapter based on the current platform.\n * For React Native, you must provide the AsyncStorage instance.\n * @returns The appropriate storage adapter for the current platform\n */\nexport const createStorageAdapter = (): AsyncStorage => {\n const platform = getPlatform();\n\n switch (platform) {\n case \"browser\":\n return new BrowserStorageAdapter();\n case \"node\":\n return new MemoryStorageAdapter();\n case \"react-native\":\n throw new Error(\"Please provide AsyncStorage for React Native\");\n case \"unknown\":\n default:\n console.warn(\n `Unknown platform detected: ${platform}. Defaulting to in memory storage.`,\n );\n return new MemoryStorageAdapter();\n }\n};\n","import { sha256 } from \"@noble/hashes/sha2.js\";\n\n/**\n * Universal SHA-256 hashing function that works across all platforms.\n * Uses \\@noble/hashes for cross-platform compatibility.\n * @param value - The string value to hash\n * @returns Promise resolving to the hex-encoded hash string\n */\nexport const hashString = (value: string): string => {\n const encoder = new TextEncoder();\n const data = encoder.encode(value);\n const hash = sha256(data);\n return Array.from(hash)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n};\n","import { z } from \"@hono/zod-openapi\";\n\n/**\n * @description Zod schema for a canvas.\n * Represents the structure of a canvas, including its tiles and metadata.\n */\nexport const CanvasSchema = z.object({\n company_id: z.number(),\n created_at: z.string(),\n id: z.string().uuid(),\n title: z.string().nullable(),\n updated_at: z.string(),\n is_removed: z.boolean(),\n is_public: z.boolean(),\n nodes: z.array(z.any()),\n edges: z.array(z.any()),\n});\n\nexport type Canvas = z.infer<typeof CanvasSchema>;\n\nexport const FrontendCanvasSchema = CanvasSchema.omit({\n company_id: true,\n created_at: true,\n updated_at: true,\n is_removed: true,\n});\n\nexport type FrontendCanvas = z.infer<typeof FrontendCanvasSchema>;\n\nexport const UpdateCanvasSchema = z.object({\n id: CanvasSchema.shape.id,\n title: CanvasSchema.shape.title.optional(),\n nodes: CanvasSchema.shape.nodes.optional(),\n edges: CanvasSchema.shape.edges.optional(),\n is_public: CanvasSchema.shape.is_public.optional(),\n});\n\nexport const CreateCanvasSchema = CanvasSchema.omit({\n id: true,\n created_at: true,\n updated_at: true,\n company_id: true,\n is_removed: true,\n}).extend({\n flow_id: z.string().optional(),\n});\n\nexport type CreateCanvas = z.infer<typeof CreateCanvasSchema>;\n\nexport const CanvasIdParam = CanvasSchema.shape.id.openapi(\"CanvasId\", {\n type: \"string\",\n format: \"uuid\",\n});\n\nexport const belongsToCanvas = (\n canvas: FrontendCanvas,\n element: { type: \"dataReport\" | \"visualization\"; id: number },\n) => {\n return canvas.nodes.some((node) => {\n // Type guard: check if node is an object with type and id properties\n if (!node || typeof node !== \"object\") {\n return false;\n }\n\n // Check if node has the required properties with correct types\n if (!(\"type\" in node)) {\n return false;\n }\n\n const nodeRecord = node as Record<string, unknown>;\n\n if (element.type === \"dataReport\") {\n if (\n nodeRecord.type === \"dataReport\" &&\n nodeRecord.data &&\n typeof nodeRecord.data === \"object\" &&\n \"reportId\" in nodeRecord.data\n ) {\n // TypeScript type guard for node.data\n const data = nodeRecord.data as { reportId?: number };\n return data.reportId === element.id;\n }\n return false;\n }\n\n return (\n nodeRecord.type === \"visualization\" &&\n nodeRecord.data &&\n typeof nodeRecord.data === \"object\" &&\n \"visualizationId\" in nodeRecord.data &&\n nodeRecord.data.visualizationId === element.id\n );\n });\n};\n","import { createRoute } from \"@hono/zod-openapi\";\nimport { z } from \"zod\";\nimport {\n CanvasIdParam,\n CreateCanvasSchema,\n FrontendCanvasSchema,\n UpdateCanvasSchema,\n} from \"../../schemas/canvas\";\nimport { FrontendFlowSchema } from \"../../schemas/flows\";\nimport { SupabaseHeaderSchema } from \"./auth\";\n\nexport const ListCanvases = createRoute({\n method: \"get\",\n path: \"/api/v1/canvases\",\n operationId: \"listCanvases\",\n request: {\n headers: SupabaseHeaderSchema,\n query: z.object({\n search: z.string().optional(),\n }),\n },\n responses: {\n 200: {\n description: \"A list of canvases\",\n content: {\n \"application/json\": {\n schema: z.array(\n FrontendCanvasSchema.extend({\n flows: FrontendFlowSchema.array(),\n }),\n ),\n },\n },\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const RetrieveCanvas = createRoute({\n method: \"get\",\n path: \"/api/v1/canvas/{canvas_id}\",\n operationId: \"retrieveCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n canvas_id: CanvasIdParam,\n }),\n },\n responses: {\n 200: {\n description: \"The canvas with the given id\",\n content: {\n \"application/json\": {\n schema: FrontendCanvasSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve canvas with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const CreateCanvas = createRoute({\n method: \"post\",\n path: \"/api/v1/canvas/\",\n operationId: \"createCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: CreateCanvasSchema,\n },\n },\n },\n },\n responses: {\n 201: {\n description: \"The created canvas\",\n content: {\n \"application/json\": {\n schema: z.object({\n id: z.string(),\n }),\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid request\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const UpdateCanvas = createRoute({\n method: \"put\",\n path: \"/api/v1/canvas/{canvas_id}\",\n operationId: \"updateCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n canvas_id: CanvasIdParam,\n }),\n body: {\n required: true,\n content: {\n \"application/json\": {\n schema: UpdateCanvasSchema.omit({ id: true }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"The updated canvas\",\n content: {\n \"application/json\": {\n schema: z.object({\n success: z.literal(true),\n }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve canvas with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const DeleteCanvas = createRoute({\n method: \"delete\",\n path: \"/api/v1/canvas/{canvas_id}\",\n operationId: \"deleteCanvas\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n canvas_id: CanvasIdParam,\n }),\n },\n responses: {\n 204: {\n description: \"Canvas deleted successfully\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to delete canvas with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const GetCanvasForFlow = createRoute({\n method: \"get\",\n path: \"/api/v1/canvas/flow/{flow_id}\",\n operationId: \"getCanvasForFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z.object({\n flow_id: z.string().uuid(),\n }),\n },\n responses: {\n 200: {\n description: \"The canvas for the given flow\",\n content: {\n \"application/json\": {\n schema: FrontendCanvasSchema,\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve canvas for this flow\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { z } from \"zod\";\n\nexport const QuickActionSchema = z.object({\n label: z.string(),\n explanation: z.string(),\n});\n\nexport const QuickActionsSchema = QuickActionSchema.array();\n\nexport type QuickActions = z.infer<typeof QuickActionsSchema>;\nexport type QuickAction = QuickActions[number];\n","import { z } from \"zod\";\nexport const FrontendTimelineItemSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"dataReport\"),\n flowDataId: z.number(),\n flowId: z.string(),\n title: z.string(),\n bookmarked: z.boolean(),\n answer: z.string().nullable(),\n }),\n z.object({\n type: z.literal(\"visualization\"),\n flowId: z.string(),\n flowDataId: z.number(),\n flowDataVisualizationId: z.number(),\n title: z.string(),\n bookmarked: z.boolean(),\n }),\n z.object({\n type: z.literal(\"message\"),\n }),\n]);\n\nexport type FrontendTimelineItem = z.infer<typeof FrontendTimelineItemSchema>;\n\nexport type DataReportTimelineItem = FrontendTimelineItem & {\n type: \"dataReport\";\n};\n\nexport type VisualizationTimelineItem = FrontendTimelineItem & {\n type: \"visualization\";\n};\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { QuickActionsSchema } from \"@mm/shared/schemas/chat/quickActions\";\nimport { FrontendTimelineItemSchema } from \"@mm/shared/schemas/timeline\";\nimport { SupabaseHeaderSchema } from \"./auth\";\nimport { FlowIdParam } from \"./flows.routes\";\n\nexport const ChatTimeline = createRoute({\n hide: true,\n method: \"get\",\n path: \"/api/v1/chat/{flowId}/timeline\",\n operationId: \"retrieveChatTimeline\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The timeline of generated insights for the flow\",\n content: {\n \"application/json\": {\n schema: FrontendTimelineItemSchema.array(),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ChatMessages = createRoute({\n method: \"get\",\n path: \"/api/v1/chat/{flowId}/messages\",\n operationId: \"retrieveChatMessages\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n },\n responses: {\n 200: {\n description: \"The messages from the given flow\",\n content: {\n \"application/json\": {\n // we don't want to have to write a parser for Vercel AI messages\n schema: z.object({ messages: z.looseObject({}).array() }),\n },\n },\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const QuickActions = createRoute({\n hide: true,\n method: \"post\",\n path: \"/api/v1/chat/{flowId}/quick-actions\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n body: {\n content: {\n \"application/json\": {\n schema: z.object({\n content: z.string(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n description: \"The quick actions for the given message\",\n content: {\n \"application/json\": {\n schema: QuickActionsSchema,\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"The provided content is invalid\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to retrieve flow with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { createRoute, z } from \"@hono/zod-openapi\";\nimport { SupabaseHeaderSchema } from \"@mm/shared/endpoints/companion/auth\";\nimport {\n FrontendVisualizationSchema,\n FrontendVisualizationWithDataSchema,\n V1FrontendVisualizationWithDataSchema,\n} from \"@mm/shared/schemas/visualizations\";\nimport { FlowDataIdParam, FlowIdParam } from \"./companion/flows.routes\";\n\nexport const VisualizationWithDataResponse = z\n .union([\n FrontendVisualizationWithDataSchema,\n V1FrontendVisualizationWithDataSchema,\n ])\n .openapi(\"VisualizationWithData\");\n\nexport const FetchVisualization = createRoute({\n method: \"get\",\n path: \"/api/v1/visualizations/{visualization_id}\",\n operationId: \"fetchVisualization\",\n request: {\n headers: SupabaseHeaderSchema,\n params: z\n .object({ visualization_id: z.string().pipe(z.coerce.number()) })\n .openapi(\"VisualizationId\", { type: \"number\" }),\n },\n responses: {\n 200: {\n description: \"The content of the visualization\",\n content: {\n \"application/json\": {\n schema: VisualizationWithDataResponse,\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid arguments to fetch visualization\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to fetch visualization with this id\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n\nexport const ListVisualizationsForFlow = createRoute({\n method: \"get\",\n path: \"/api/v1/flows/{flowId}/visualizations\",\n operationId: \"listVisualizationsForFlow\",\n request: {\n headers: SupabaseHeaderSchema,\n params: FlowIdParam,\n query: FlowDataIdParam.partial(),\n },\n responses: {\n 200: {\n description:\n \"List visualizations for a given flow. Can be filtered by flow data id as well\",\n content: {\n \"application/json\": {\n schema: FrontendVisualizationSchema.array(),\n },\n },\n },\n 400: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Invalid arguments to fetch visualization\",\n },\n 404: {\n content: {\n \"application/json\": {\n schema: z.object({ error: z.string() }),\n },\n },\n description: \"Unable to list visualizations\",\n },\n 500: {\n description: \"Something wrong happened\",\n content: {\n \"application/json\": {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n },\n },\n});\n","import { z } from \"zod\";\n\nexport const DataTableSchema = z.object({\n id: z.number(),\n dataset: z.string(),\n table_name: z.string(),\n description: z.string().nullable(),\n primary_key_names: z.string().array(),\n row_count: z.number().nullable(),\n created_at: z.string(),\n updated_at: z.string(),\n source_id: z.number(),\n parent_table_id: z.number().nullable(),\n});\n\nexport type DataTable = z.infer<typeof DataTableSchema>;\n\nexport const DataTableColumnSchema = z.object({\n id: z.number(),\n name: z.string(),\n data_type: z.string().nullable(),\n description: z.string().nullable(),\n null_percentage: z.number().nullable(),\n unique_values: z.number().nullable(),\n sample_values: z.array(z.unknown()).nullable(),\n});\n\nexport const DataTableWithColumnsSchema = DataTableSchema.extend({\n columns: z.array(DataTableColumnSchema),\n});\n\nexport type DataTableWithColumns = z.infer<typeof DataTableWithColumnsSchema>;\n\nexport type ReportDataFilters = {\n columns?: string[];\n limit: number;\n sorting: SortingState;\n filters: TableFilters;\n cursor?: number;\n};\n\nexport type TableFilters = Record<string, string | number>;\n\nexport interface ColumnSort {\n desc: boolean;\n id: string;\n}\nexport type SortingState = ColumnSort[];\n\nexport const toSearchParams = ({\n cursor,\n filters,\n sorting,\n limit,\n}: {\n cursor?: number;\n filters?: TableFilters;\n sorting?: SortingState;\n limit?: number;\n}) => {\n const params: {\n limit?: number;\n cursor?: number;\n order?: string;\n filter?: string;\n } = {};\n\n if (limit !== undefined) {\n params.limit = limit;\n }\n\n if (cursor !== undefined) {\n params.cursor = cursor;\n }\n\n const sortingParams = sorting\n ?.map((c) => `${c.id}:${c.desc ? \"DESC\" : \"ASC\"}`)\n .join(\",\");\n\n if (sortingParams) {\n params.order = sortingParams;\n }\n\n if (filters) {\n const filterParams = Object.entries(filters)\n .flatMap(([key, value]) => {\n if (\n !(\n typeof value === \"string\" ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n )\n )\n return [];\n return `${key}:${encodeURIComponent(value)}`;\n })\n .join(\",\");\n\n if (filterParams.length > 0) {\n params.filter = filterParams;\n }\n }\n\n return params;\n};\n","{\n \"name\": \"@magemetrics/core\",\n \"type\": \"module\",\n \"version\": \"0.5.1\",\n \"description\": \"MageMetrics client library\",\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup && rolldown -c rolldown.config.ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist\",\n \"lint\": \"sh -c 'cd ../../ && pnpm exec eslint --report-unused-disable-directives packages/core'\",\n \"lint:fix\": \"sh -c 'cd ../../ && pnpm exec eslint packages/core --fix'\",\n \"format\": \"prettier --check .\",\n \"format:fix\": \"prettier --write .\"\n },\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"imports\": {\n \"#*\": {\n \"types\": [\n \"./src/*.ts\",\n \"./src/*\"\n ],\n \"default\": [\n \"./src/*\"\n ]\n }\n },\n \"exports\": {\n \".\": {\n \"@magemetrics/source\": \"./src/index.ts\",\n \"types\": \"./dist/index.d.ts\",\n \"react-native\": \"./dist/index.js\",\n \"browser\": \"./dist/index.js\",\n \"node\": {\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.js\"\n },\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist/\"\n ],\n \"dependencies\": {\n \"@mm/shared\": \"workspace:*\",\n \"@noble/hashes\": \"^2.0.1\",\n \"@supabase/auth-js\": \"^2.84.0\",\n \"@types/json-schema\": \"7.0.15\",\n \"@xyflow/system\": \"^0.0.73\",\n \"ai\": \"5.0.99\",\n \"dayjs\": \"^1.11.19\",\n \"openapi-fetch\": \"^0.15.0\",\n \"type-fest\": \"^5.2.0\",\n \"zod\": \"^4.1.12\"\n },\n \"devDependencies\": {\n \"@microsoft/api-extractor\": \"^7.55.1\",\n \"@mm/tsconfig\": \"workspace:*\",\n \"@types/node\": \"^24.10.1\",\n \"rolldown\": \"1.0.0-beta.51\",\n \"tsup\": \"^8.5.1\",\n \"unplugin-dts\": \"1.0.0-beta.6\",\n \"vitest\": \"^4.0.13\"\n }\n}\n","import type { MMChatUIMessage } from \"@mm/shared/ai/schema/index\";\nimport { DefaultChatTransport, type HttpChatTransportInitOptions } from \"ai\";\n\nexport type MageMetricsChatTransportOptions = Omit<\n HttpChatTransportInitOptions<MMChatUIMessage>,\n \"api\" | \"prepareSendMessagesRequest\"\n>;\n\nexport class MageMetricsChatTransport extends DefaultChatTransport<MMChatUIMessage> {\n constructor(\n apiUrl: string,\n flowId: string,\n options: MageMetricsChatTransportOptions,\n ) {\n super({\n ...options,\n api: `${apiUrl}/api/v1/chat/${flowId}`,\n prepareSendMessagesRequest({ messages, id: chatId }) {\n // make it clear we only send one message, not an array made of one message\n return { body: { message: messages.at(-1), id: chatId } };\n },\n });\n }\n}\n","import type { AuthState } from \"./types\";\n\n/**\n * Event types using discriminated union for type safety and extensibility\n */\nexport type MageMetricsEvent =\n | {\n type: \"authStateChange\";\n detail: AuthState;\n }\n | {\n type: \"userChange\";\n detail: { id: string };\n };\n// Future event types can be added here as union members\n\n/**\n * Event listener function type\n */\nexport type MageMetricsEventListener<\n T extends MageMetricsEvent = MageMetricsEvent,\n> = (event: T) => void;\n\n/**\n * Simple event emitter for MageMetrics client.\n * Uses discriminated unions for type-safe events.\n */\nexport class MageMetricsEventEmitter {\n private listeners: Map<string, Set<MageMetricsEventListener>> = new Map();\n\n addEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n options?: { signal?: AbortSignal },\n ): void {\n if (!this.listeners.has(type)) {\n this.listeners.set(type, new Set());\n }\n\n // Handle AbortSignal for compatibility\n if (options?.signal) {\n if (options.signal.aborted) {\n return; // Don't add if already aborted\n }\n\n // Set up abort handler\n const abortHandler = () => {\n this.removeEventListener(type, listener);\n };\n\n options.signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n\n this.listeners.get(type)!.add(listener as MageMetricsEventListener);\n }\n\n removeEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n ): void {\n const typeListeners = this.listeners.get(type);\n if (typeListeners) {\n typeListeners.delete(listener as MageMetricsEventListener);\n if (typeListeners.size === 0) {\n this.listeners.delete(type);\n }\n }\n }\n\n dispatch<T extends MageMetricsEvent>(\n type: T[\"type\"],\n detail: T[\"detail\"],\n ): void {\n const typeListeners = this.listeners.get(type);\n if (typeListeners) {\n const event = { type, detail } as T;\n\n typeListeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n console.error(`Error in event listener for \"${type}\":`, error);\n }\n });\n }\n }\n}\n","export type Resolvable<T> = T | Promise<T> | (() => T) | (() => Promise<T>);\n\nexport const resolve = <T>(value: Resolvable<T>): Promise<T> => {\n if (typeof value === \"function\") {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-function-type\n return Promise.resolve((value as Function)());\n }\n\n return Promise.resolve(value as T);\n};\n","import type { AsyncStorage } from \"#adapters/storage/interface\";\n\n/**\n * Configuration options for the MageMetricsClient\n */\nexport interface MageMetricsClientConfig {\n apiUrl: string;\n apiKey: string;\n externalJwt?: string;\n additionalHeaders?: Record<string, string>;\n storageAdapter?: AsyncStorage;\n applicationName?: string;\n}\n\n/**\n * Authentication states\n */\nexport type AuthState = \"initializing\" | \"ready\" | \"error\";\n\n/**\n * Parameters for starting a flow\n */\nexport type CreateFlowParam =\n | { query: string }\n | { triggerId: string; variables: Record<string, string> };\n\n/**\n * Parameters for generating contextual insights\n */\nexport type GenerateInsightParam = {\n selectedFilterValue: string;\n customId: string;\n};\n\n/**\n * Token storage keys\n */\nexport const TOKEN_STORAGE_KEY = \"mm-ai-sp-token\";\nexport const CHECK_KEY = \"mm-ai-check-key\";\n","import {\n addApiKeyHeader,\n addVersionHeader,\n ApiError,\n HEADER_CLIENT_VERSION,\n throwOnError,\n} from \"@mm/shared/api/client/middleware\";\nimport {\n GenerateInsight,\n type ExtractInsightResponse,\n} from \"@mm/shared/endpoints/admin-console/contextualInsights.routes\";\nimport {\n ExchangeExternalToken,\n GetApiInformation,\n type GetApiInformationOutput,\n} from \"@mm/shared/endpoints/auth.routes\";\nimport {\n CreateFlow,\n ExportReportData,\n GetReportColumns,\n GetReportData,\n GetReportRowCount,\n RetrieveFlow,\n RetrieveFlowDataReports,\n RetrieveRecentFlows,\n} from \"@mm/shared/endpoints/companion/flows.routes\";\nimport { CreateSpeechToken } from \"@mm/shared/endpoints/companion/speech.routes\";\nimport { TriggerFlow } from \"@mm/shared/endpoints/companion/triggers.routes\";\nimport type {\n InternalApiClient,\n NoAuthPaths,\n} from \"@mm/shared/types/api-types\";\nimport { GoTrueClient, type GoTrueClientOptions } from \"@supabase/auth-js\";\nimport createApiClient, { type Client, type Middleware } from \"openapi-fetch\";\n\nimport { createStorageAdapter } from \"#adapters/storage/factory\";\nimport type { AsyncStorage } from \"#adapters/storage/interface\";\nimport { hashString } from \"#utils/hash\";\nimport type { MMChatUIMessage } from \"@mm/shared/ai/schema/index\";\nimport {\n CreateCanvas,\n DeleteCanvas,\n GetCanvasForFlow,\n ListCanvases,\n RetrieveCanvas,\n UpdateCanvas,\n} from \"@mm/shared/endpoints/companion/canvas.routes\";\nimport { ChatMessages } from \"@mm/shared/endpoints/companion/chat.routes\";\nimport { ListVisualizationsForFlow } from \"@mm/shared/endpoints/visualizations.routes\";\nimport {\n FrontendCanvasSchema,\n type CreateCanvas as CreateCanvasBody,\n type UpdateCanvasSchema,\n} from \"@mm/shared/schemas/canvas\";\nimport {\n toSearchParams,\n type ReportDataFilters,\n} from \"@mm/shared/schemas/data-table\";\nimport type { FrontendRecentFlows } from \"@mm/shared/schemas/flows\";\nimport type { z } from \"zod\";\nimport packageJson from \"../../package.json\";\nimport {\n MageMetricsChatTransport,\n type MageMetricsChatTransportOptions,\n} from \"./MageMetricsChatTransport\";\nimport {\n MageMetricsEventEmitter,\n type MageMetricsEvent,\n type MageMetricsEventListener,\n} from \"./MageMetricsEventEmitter\";\nimport { resolve } from \"./resolvable\";\nimport {\n CHECK_KEY,\n TOKEN_STORAGE_KEY,\n type AuthState,\n type CreateFlowParam,\n type GenerateInsightParam,\n type MageMetricsClientConfig,\n} from \"./types\";\n\nconst MM_CLIENT_VERSION = packageJson.version;\n\nexport const getPublicApiClient = (\n apiUrl: string,\n apiKey: string,\n): Client<NoAuthPaths> => {\n const client = createApiClient<NoAuthPaths>({ baseUrl: apiUrl });\n client.use(throwOnError);\n client.use(addVersionHeader(MM_CLIENT_VERSION));\n client.use(addApiKeyHeader(apiKey));\n return client;\n};\n\n/**\n * Core MageMetrics client that handles authentication lifecycle and provides\n * a promise-based API that automatically waits for authentication to complete.\n *\n * This version uses composition instead of inheritance and pluggable storage adapters\n * for cross-platform compatibility.\n */\nexport class MageMetricsClient {\n private config: MageMetricsClientConfig;\n private authState: AuthState = \"initializing\";\n private supabaseClient: GoTrueClient | null = null;\n private internalApiClient: InternalApiClient;\n private noAuthApiClient: ReturnType<\n typeof createApiClient<NoAuthPaths>\n > | null = null;\n private authApiResponse: GetApiInformationOutput | null = null;\n private authPromise: Promise<void> | null = null;\n private processedJwt: string | symbol = Symbol(\"initial\");\n private userId: string | null = null;\n private storageAdapter: AsyncStorage;\n private events = new MageMetricsEventEmitter();\n private authOptions: GoTrueClientOptions;\n\n constructor(\n config: MageMetricsClientConfig,\n auth?: Pick<GoTrueClientOptions, \"fetch\">,\n ) {\n this.config = config;\n\n // Initialize storage adapter - either provided or auto-detected\n this.storageAdapter = config.storageAdapter || createStorageAdapter();\n\n this.internalApiClient = createApiClient({\n baseUrl: this.config.apiUrl,\n });\n this.internalApiClient.use(throwOnError);\n this.internalApiClient.use(this.createSupabaseHeaderMiddleware());\n\n this.authOptions = auth || {};\n }\n\n toJSON() {\n return {\n config: this.encodeCheckKey(this.config.apiKey, this.config.apiUrl),\n };\n }\n\n get apiConfig() {\n return {\n apiUrl: this.config.apiUrl,\n apiKey: this.config.apiKey,\n };\n }\n\n /**\n * Add an event listener for authentication state changes\n * @param type the type of the event\n * @param listener the listener to add\n * @param options options for the event listener\n * @param options.signal an optional AbortSignal to abort the event listener\n */\n addEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n options?: { signal?: AbortSignal },\n ): void {\n this.events.addEventListener(type, listener, options);\n }\n\n /**\n * Remove an event listener\n * @param type the type of the event\n * @param listener the listener to remove\n */\n removeEventListener<T extends MageMetricsEvent>(\n type: T[\"type\"],\n listener: MageMetricsEventListener<T>,\n ): void {\n this.events.removeEventListener(type, listener);\n }\n\n public async waitForAuth(): Promise<void> {\n if (this.authState === \"ready\") {\n return Promise.resolve();\n }\n\n if (this.authState === \"error\") {\n throw new Error(\"Authentication failed\");\n }\n\n // Wait for the current auth promise to resolve\n if (!this.authPromise) {\n this.authPromise = this.performAuthFlow();\n }\n\n return this.authPromise;\n }\n\n public async updateExternalJwt(jwt: string): Promise<void> {\n if (this.config.externalJwt === jwt) return;\n\n this.config.externalJwt = jwt;\n this.processedJwt = Symbol(\"updating\");\n await this.performAuthFlow();\n }\n\n public get state(): AuthState {\n return this.authState;\n }\n\n public async getHeaders(): Promise<Record<string, string>> {\n await this.waitForAuth();\n\n if (!this.supabaseClient) {\n return {};\n }\n\n const session = await this.supabaseClient.getSession();\n if (!session.data.session) {\n return {};\n }\n const { access_token } = session.data.session;\n\n return {\n [HEADER_CLIENT_VERSION]: MM_CLIENT_VERSION,\n \"sp-access-token\": access_token,\n };\n }\n\n private async clearStorage(): Promise<void> {\n try {\n await this.storageAdapter.removeItem(TOKEN_STORAGE_KEY);\n await this.storageAdapter.removeItem(CHECK_KEY);\n } catch {\n // Ignore storage errors\n }\n }\n\n public async logout(): Promise<void> {\n if (this.supabaseClient) {\n await this.supabaseClient.signOut({ scope: \"local\" });\n }\n\n await this.clearStorage();\n }\n\n public auth = {\n startAutoRefresh: () => this.supabaseClient?.startAutoRefresh(),\n stopAuthRefresh: () => this.supabaseClient?.startAutoRefresh(),\n };\n\n /**\n * Public API methods that automatically wait for authentication\n */\n public api = {\n getFlowVisualizations: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n ListVisualizationsForFlow.path,\n { params: { path: { flowId } } },\n );\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n return data;\n },\n getFlowDataReports: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveFlowDataReports.path,\n { params: { path: { flowId } } },\n );\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n return data;\n },\n getFlow: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveFlow.path,\n { params: { path: { flowId } } },\n );\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n return data;\n },\n getRecentFlows: async (\n params: { limit?: number } = {},\n ): Promise<FrontendRecentFlows[]> => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveRecentFlows.path,\n {\n params: {\n query: {\n limit: params.limit ?? 10,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return data;\n },\n\n createFlow: async (\n request: CreateFlowParam,\n ): Promise<{ flowId: string }> => {\n await this.waitForAuth();\n\n if (\"query\" in request) {\n const { data, error, response } = await this.internalApiClient.POST(\n CreateFlow.path,\n {\n body: {\n userQuery: request.query,\n applicationName: this.config.applicationName,\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return { flowId: data.flowId };\n } else {\n const { triggerId, variables } = request;\n const { data, response } = await this.internalApiClient.POST(\n TriggerFlow.path,\n {\n body: {\n triggerId,\n variables,\n },\n },\n );\n\n if (!data || data.status === \"error\") {\n throw new ApiError(\n data?.error ?? \"Failed to trigger flow\",\n response,\n {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n },\n );\n }\n\n return { flowId: data.flowId };\n }\n },\n\n canvas: {\n list: async (query?: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n ListCanvases.path,\n {\n params: {\n query: {\n search: query,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return data;\n },\n get: async (canvasId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n RetrieveCanvas.path,\n {\n params: {\n path: {\n canvas_id: canvasId,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return data;\n },\n create: async (body: CreateCanvasBody) => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.POST(\n CreateCanvas.path,\n {\n body,\n },\n );\n\n if (!data) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return data;\n },\n update: async (body: z.infer<typeof UpdateCanvasSchema>) => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.PUT(\n UpdateCanvas.path,\n {\n params: {\n path: {\n canvas_id: String(body.id),\n },\n },\n body,\n },\n );\n\n if (!data) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"PUT\",\n });\n }\n\n return data;\n },\n\n delete: async (canvasId: string) => {\n await this.waitForAuth();\n\n const { error, response } = await this.internalApiClient.DELETE(\n DeleteCanvas.path,\n {\n params: { path: { canvas_id: canvasId } },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"DELETE\",\n });\n }\n },\n\n getForFlow: async (flowId: string) => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.GET(\n GetCanvasForFlow.path,\n {\n params: {\n path: {\n flow_id: flowId,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return FrontendCanvasSchema.parse(data);\n },\n },\n\n exportReportData: async (\n reportId: number,\n format: \"text\" | \"blob\" = \"blob\",\n ): Promise<{ filename: string; data: Blob | string }> => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.GET(\n ExportReportData.path,\n {\n params: {\n path: {\n report_id: String(reportId),\n },\n },\n parseAs: format,\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n const contentDisposition = response.headers.get(\"content-disposition\");\n const filename = contentDisposition\n ? contentDisposition.split(\"filename=\")[1]?.replace(/\"/g, \"\") ||\n `mm-export-${reportId}.csv`\n : `mm-export-${reportId}.csv`;\n\n return { filename: filename, data: data };\n },\n\n generateContextualInsight: async (\n payload: GenerateInsightParam,\n ): Promise<ExtractInsightResponse> => {\n await this.waitForAuth();\n\n const { data, error, response } = await this.internalApiClient.POST(\n GenerateInsight.path,\n {\n body: {\n selected_filter_value: payload.selectedFilterValue,\n custom_id: payload.customId,\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return data;\n },\n\n getChatTransport: (\n flowId: string,\n options?: MageMetricsChatTransportOptions,\n ) => {\n return new MageMetricsChatTransport(this.config.apiUrl, flowId, {\n ...options,\n headers: async () => {\n const authHeaders = await this.getHeaders();\n const headers = await resolve(options?.headers);\n\n return {\n ...headers,\n ...authHeaders,\n };\n },\n });\n },\n\n getChatMessages: async (flowId: string) => {\n const { data, error, response } = await this.internalApiClient.GET(\n ChatMessages.path,\n {\n params: {\n path: {\n flowId,\n },\n },\n },\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"GET\",\n });\n }\n\n return data.messages as unknown as MMChatUIMessage[];\n },\n\n fetchReportData: async (\n reportId: number,\n { columns, limit, sorting, filters, cursor }: ReportDataFilters,\n signal?: AbortSignal,\n ) => {\n const params = toSearchParams({ limit, sorting, filters, cursor });\n\n const { data, error } = await this.internalApiClient.GET(\n GetReportData.path,\n {\n params: {\n path: {\n report_id: reportId.toString(),\n },\n query: {\n columns: columns?.join(\",\"),\n limit: params.limit,\n order: params.order,\n cursor: params.cursor,\n filter: params.filter,\n },\n },\n signal,\n },\n );\n\n if (error) {\n console.error(\n `Failed to fetch data for report ${reportId}: ${error.error}`,\n );\n throw new Error(`Failed to fetch data for flow data ${reportId}`);\n }\n\n return data;\n },\n createSpeechToken: async () => {\n await this.waitForAuth();\n const { data, error, response } = await this.internalApiClient.POST(\n CreateSpeechToken.path,\n {},\n );\n\n if (error) {\n throw new ApiError(error.error, response, {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n method: \"POST\",\n });\n }\n\n return data;\n },\n getReport: async (reportId: number) => {\n const params = { params: { path: { report_id: String(reportId) } } };\n const columnsPromise = this.internalApiClient.GET(\n GetReportColumns.path,\n params,\n );\n\n const rowCountPromise = this.internalApiClient.GET(\n GetReportRowCount.path,\n params,\n );\n\n const [\n { data: columns, error: columnsError, response: columnsResponse },\n { data: rowCount, error: rowCountError, response: rowCountResponse },\n ] = await Promise.all([columnsPromise, rowCountPromise]);\n\n if (columnsError) {\n throw new ApiError(columnsError.error, columnsResponse, {\n status: columnsResponse.status,\n statusText: columnsResponse.statusText,\n url: columnsResponse.url,\n method: \"GET\",\n });\n }\n\n if (rowCountError) {\n throw new ApiError(rowCountError.error, rowCountResponse, {\n status: rowCountResponse.status,\n statusText: rowCountResponse.statusText,\n url: rowCountResponse.url,\n method: \"GET\",\n });\n }\n\n return {\n columns: columns,\n rowCount: rowCount,\n data: this.api.fetchReportData,\n };\n },\n };\n\n /**\n * Perform the complete authentication flow\n */\n private async performAuthFlow(): Promise<void> {\n try {\n this.setState(\"initializing\");\n\n // 1. Get API information first (this can probably be cached, the client is already cached)\n const apiInfo = await this.getApiInformation();\n\n // 2. Initialize Supabase client (this is cached already)\n this.initializeSupabaseClient(apiInfo.anonKey, apiInfo.apiUrl);\n\n // 4. Check for existing session or exchange token\n await this.handleAuthentication();\n\n // 5. Update local storage with the new JWT\n if (this.config.externalJwt) {\n await this.saveCheckKey(this.config.externalJwt, this.config.apiKey);\n }\n\n this.setState(\"ready\");\n } catch (error) {\n console.error(\"Authentication flow failed:\", error);\n this.setState(\"error\");\n throw error;\n }\n }\n\n private async getApiInformation() {\n if (!this.noAuthApiClient || !this.authApiResponse) {\n this.noAuthApiClient = getPublicApiClient(\n this.config.apiUrl,\n this.config.apiKey,\n );\n\n const { data } = await this.noAuthApiClient.GET(GetApiInformation.path, {\n params: {\n query: {\n apiKey: this.config.apiKey,\n },\n },\n });\n\n if (!data) {\n throw new Error(\"Failed to fetch API information\");\n }\n this.authApiResponse = data;\n }\n\n return this.authApiResponse;\n }\n\n private initializeSupabaseClient(anonKey: string, apiUrl: string): void {\n if (!this.supabaseClient) {\n this.supabaseClient = new GoTrueClient({\n url: `${apiUrl}/auth/v1`,\n storageKey: TOKEN_STORAGE_KEY,\n headers: {\n apiKey: anonKey,\n },\n storage: this.storageAdapter,\n ...this.authOptions,\n });\n\n // Set up auth state change listener with token refresh handling\n this.supabaseClient.onAuthStateChange((event, session) => {\n console.debug(\"Supabase auth state change:\", event, !!session);\n\n if (event === \"SIGNED_IN\" && session?.user) {\n if (this.userId !== session.user.id && this.userId !== null) {\n this.events.dispatch(\"userChange\", { id: session.user.id });\n }\n this.userId = session.user.id;\n }\n\n // Handle token refresh\n if (event === \"TOKEN_REFRESHED\" && session) {\n console.debug(\"Token refreshed successfully\");\n this.setState(\"ready\");\n } else if (event === \"SIGNED_OUT\") {\n console.debug(\"User signed out\");\n void this.clearStorage();\n this.setState(\"initializing\");\n }\n });\n }\n }\n\n public client(): InternalApiClient {\n return this.internalApiClient;\n }\n\n /**\n * Handle the authentication logic (check session or exchange token)\n */\n private async handleAuthentication(): Promise<void> {\n if (!this.supabaseClient) {\n throw new Error(\"Supabase client not initialized\");\n }\n\n // Skip if we've already processed this JWT\n if (this.processedJwt === this.config.externalJwt) {\n return;\n }\n\n try {\n const { data, error } = await this.supabaseClient.getSession();\n\n if (error) {\n console.error(\"Error getting session:\", error);\n this.processedJwt = this.config.externalJwt || \"\";\n return;\n }\n\n const isCheckValid = await this.compareCheckKey(\n this.config.externalJwt ?? \"\",\n this.config.apiKey,\n );\n\n if (data.session && this.config.externalJwt && isCheckValid) {\n console.debug(\"Session found, authentication ready\");\n this.processedJwt = this.config.externalJwt || \"\";\n } else if (this.config.externalJwt) {\n console.debug(\"No session found, exchanging external JWT\");\n await this.clearCheckKey();\n await this.exchangeExternalToken();\n this.processedJwt = this.config.externalJwt;\n } else {\n console.debug(\"No session and no external JWT provided\");\n this.processedJwt = this.config.externalJwt || \"\";\n }\n } catch (error) {\n console.error(\"Unhandled error during authentication:\", error);\n this.processedJwt = this.config.externalJwt || \"\";\n throw error;\n }\n }\n\n /**\n * Exchange external JWT for Supabase tokens\n */\n private async exchangeExternalToken(): Promise<void> {\n if (\n !this.noAuthApiClient ||\n !this.supabaseClient ||\n !this.config.externalJwt\n ) {\n throw new Error(\n \"Required clients or JWT not available for token exchange\",\n );\n }\n\n const { data } = await this.noAuthApiClient.POST(\n ExchangeExternalToken.path,\n {\n body: {\n apiKey: this.config.apiKey,\n externalJWT: this.config.externalJwt,\n },\n headers: this.config.additionalHeaders || {},\n },\n );\n\n if (!data) {\n throw new Error(\"Failed to exchange tokens\");\n }\n\n // Set the session in Supabase\n await this.supabaseClient.setSession({\n access_token: data.accessToken,\n refresh_token: data.refreshToken,\n });\n\n console.debug(\"Token exchange successful, session set\");\n }\n\n private createSupabaseHeaderMiddleware(): Middleware {\n return {\n onRequest: async ({ request }) => {\n /* this will wait for auth to be ready before proceeding with the request */\n const headers = await this.getHeaders();\n\n if (!this.supabaseClient) {\n return request;\n }\n\n const session = await this.supabaseClient.getSession();\n if (!session.data.session) {\n return request;\n }\n\n for (const [key, value] of Object.entries(headers)) {\n request.headers.set(key, value);\n }\n\n return request;\n },\n };\n }\n\n private setState(state: AuthState): void {\n this.authState = state;\n this.events.dispatch(\"authStateChange\", state);\n }\n\n private encodeCheckKey(externalJwt: string, apiKey: string): string {\n return hashString(\n JSON.stringify({\n externalJwt,\n apiKey,\n }),\n );\n }\n\n async saveCheckKey(externalJwt: string, apiKey: string): Promise<void> {\n const encodedKey = this.encodeCheckKey(externalJwt, apiKey);\n await this.storageAdapter.setItem(CHECK_KEY, encodedKey);\n }\n\n async compareCheckKey(externalJwt: string, apiKey: string): Promise<boolean> {\n const storedKey = await this.storageAdapter.getItem(CHECK_KEY);\n if (!storedKey) return false;\n\n const newValue = this.encodeCheckKey(externalJwt, apiKey);\n return storedKey === newValue;\n }\n\n async clearCheckKey(): Promise<void> {\n await this.storageAdapter.removeItem(CHECK_KEY);\n }\n}\n"]}