@mastra/convex 1.2.0 → 1.2.1-alpha.0

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":["../src/cache/client.ts","../src/cache/index.ts","../src/storage/client.ts","../src/storage/db/index.ts","../src/storage/domains/background-tasks/index.ts","../src/storage/domains/channels/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/schedules/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts","../src/vector/index.ts","../src/vector/native.ts"],"names":["TABLE_SCHEDULES","TABLE_SCHEDULE_TRIGGERS","TABLE_WORKFLOW_SNAPSHOT","parseJson","TABLE_BACKGROUND_TASKS","TABLE_CHANNEL_INSTALLATIONS","TABLE_CHANNEL_CONFIG","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","messages","serializeJson","crypto","TABLE_SCORERS","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","normalizePerPage","isClientConfig","existing","updated","MastraVector","createVectorErrorId","value"],"mappings":";;;;;;;;;;;AAcA,IAAM,sBAAA,GAAyB,qBAAA;AAC/B,IAAM,0BAAA,GAA6B,GAAA;AAEnC,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAA0B;AACrD,EAAA,IAAI,MAAM,KAAA,CAAM,MAAA;AAChB,EAAA,OAAO,MAAM,CAAA,IAAK,KAAA,CAAM,WAAW,GAAA,GAAM,CAAC,MAAM,EAAA,EAAI;AAClD,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAC3B,CAAA;AAEO,IAAM,oBAAN,MAAwB;AAAA,EACZ,aAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EAEjB,YAAY,EAAE,aAAA,EAAe,cAAA,EAAgB,aAAA,EAAe,kBAAiB,EAA4B;AACvG,IAAA,MAAM,uBAAA,GAA0B,cAAc,IAAA,EAAK;AACnD,IAAA,MAAM,wBAAA,GAA2B,eAAe,IAAA,EAAK;AACrD,IAAA,MAAM,uBAAA,GAA0B,eAAe,IAAA,EAAK;AAEpD,IAAA,IAAI,CAAC,uBAAA,EAAyB;AAC5B,MAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI,CAAC,wBAAA,EAA0B;AAC7B,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AAEA,IAAA,IAAI,gBAAA,KAAqB,MAAA,IAAa,gBAAA,GAAmB,CAAA,EAAG;AAC1D,MAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAAA,IAC3F;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,oBAAoB,uBAAuB,CAAA;AAChE,IAAA,IAAA,CAAK,cAAA,GAAiB,wBAAA;AACtB,IAAA,IAAA,CAAK,gBAAgB,uBAAA,IAA2B,sBAAA;AAChD,IAAA,IAAA,CAAK,mBAAmB,gBAAA,IAAoB,0BAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,aAA0B,OAAA,EAAmD;AACjF,IAAA,MAAM,aAAa,IAAA,CAAK,gBAAA,GAAmB,CAAA,GAAI,IAAI,iBAAgB,GAAI,MAAA;AACvE,IAAA,MAAM,SAAA,GAAY,aAAa,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,IAAA,CAAK,gBAAgB,CAAA,GAAI,MAAA;AAC7F,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,aAAa,CAAA,aAAA,CAAA,EAAiB;AAAA,QAC3D,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AAAA,SAC9C;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,MAAM,IAAA,CAAK,aAAA;AAAA,UACX,IAAA,EAAM,OAAA;AAAA,UACN,MAAA,EAAQ;AAAA,SACT,CAAA;AAAA,QACD,QAAQ,UAAA,EAAY;AAAA,OACrB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,UAAA,EAAY,OAAO,OAAA,EAAS;AAC9B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,IAAA,CAAK,gBAAgB,CAAA,IAAA,CAAM,CAAA;AAAA,MACrF;AACA,MAAA,MAAM,KAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,IAAI,SAAA,eAAwB,SAAS,CAAA;AAAA,IACvC;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AASpC,IAAA,IAAI,MAAA,CAAO,WAAW,OAAA,EAAS;AAC7B,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,gBAAgB,sBAAsB,CAAA;AACrE,MAAC,KAAA,CAAc,IAAA,GAAO,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,IAAA;AACjD,MAAC,KAAA,CAAc,UAAU,MAAA,CAAO,OAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,MAAM,gBAAgB,MAAA,CAAO,KAAA;AAC7B,IAAA,IAAI,CAAC,eAAe,EAAA,EAAI;AACtB,MAAA,MAAM,WAAA,GAAc,aAAA;AACpB,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,WAAA,EAAa,SAAS,4BAA4B,CAAA;AAC1E,MAAC,KAAA,CAAc,OAAO,WAAA,EAAa,IAAA;AACnC,MAAC,KAAA,CAAc,UAAU,WAAA,EAAa,OAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,aAAA,CAAc,MAAA;AAAA,MACtB,SAAS,aAAA,CAAc;AAAA,KACzB;AAAA,EACF;AAAA,EAEA,MAAM,UAAuB,OAAA,EAAmC;AAC9D,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,aAAgB,OAAO,CAAA;AACrD,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;ACzGA,IAAM,kBAAA,GAAqB,eAAA;AAC3B,IAAM,cAAA,GAAiB,GAAA;AACvB,IAAM,2BAAA,GAA8B,GAAA;AAEpC,IAAM,cAAA,GAAiB,CACrB,MAAA,KACsE,QAAA,IAAY,MAAA;AAE7E,IAAM,iBAAA,GAAN,cAAgC,iBAAA,CAAkB;AAAA,EACtC,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EAEjB,YAAY,MAAA,EAAiC;AAC3C,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,mBAAA,EAAqB,CAAA;AAEnC,IAAA,IAAA,CAAK,MAAA,GAAS,eAAe,MAAM,CAAA,GAAI,OAAO,MAAA,GAAS,IAAI,kBAAkB,MAAM,CAAA;AACnF,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,SAAA,IAAa,kBAAA;AACrC,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAO,KAAA,IAAS,cAAA;AAAA,EAC/B;AAAA,EAEQ,OAAO,GAAA,EAAqB;AAClC,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,EAAG,GAAG,CAAA,CAAA;AAAA,EAChC;AAAA,EAEQ,aAAa,KAAA,EAA+B;AAClD,IAAA,MAAM,cAAA,GAAiB,SAAS,IAAA,CAAK,KAAA;AACrC,IAAA,OAAO,cAAA,GAAiB,CAAA,GAAI,IAAA,CAAK,GAAA,KAAQ,cAAA,GAAiB,IAAA;AAAA,EAC5D;AAAA,EAEA,MAAc,iBAAoB,OAAA,EAA6E;AAC7G,IAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,2BAAA,EAA6B,SAAS,CAAA,EAAG;AACnE,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa;AAAA,QAC9C,GAAG,OAAA;AAAQ,OACZ,CAAA;AACD,MAAA,IAAI,CAAC,QAAA,CAAS,OAAA,EAAS,OAAO,QAAA,CAAS,MAAA;AAAA,IACzC;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,2BAA2B,CAAA,SAAA,CAAW,CAAA;AAAA,EAChG;AAAA,EAEA,MAAM,IAAI,GAAA,EAA+B;AACvC,IAAA,OAAO,IAAA,CAAK,iBAAiB,OAAO;AAAA,MAClC,EAAA,EAAI,KAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG;AAAA,KACtB,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,GAAA,CAAI,GAAA,EAAa,KAAA,EAAgB,KAAA,EAA+B;AACpE,IAAA,MAAM,IAAA,CAAK,iBAAiB,OAAO;AAAA,MACjC,EAAA,EAAI,KAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,MACpB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA;AAAA,MACA,SAAA,EAAW,IAAA,CAAK,YAAA,CAAa,KAAK;AAAA,KACpC,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,GAAA,EAA8B;AAC7C,IAAA,OAAO,IAAA,CAAK,iBAAiB,OAAO;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG;AAAA,KACtB,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,QAAA,CAAS,GAAA,EAAa,KAAA,EAA+B;AACzD,IAAA,MAAM,IAAA,CAAK,iBAAiB,OAAO;AAAA,MACjC,EAAA,EAAI,UAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,MACpB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA;AAAA,MACA,SAAA,EAAW,KAAK,YAAA;AAAa,KAC/B,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,UAAA,CAAW,GAAA,EAAa,IAAA,EAAc,KAAa,EAAA,EAAwB;AAC/E,IAAA,OAAO,IAAA,CAAK,iBAAiB,OAAO;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,MACpB,IAAA;AAAA,MACA;AAAA,KACF,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,OAAO,GAAA,EAA4B;AACvC,IAAA,MAAM,IAAA,CAAK,iBAAiB,OAAO;AAAA,MACjC,EAAA,EAAI,QAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG;AAAA,KACtB,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,CAAK,iBAAiB,OAAO;AAAA,MACjC,EAAA,EAAI,OAAA;AAAA,MACJ,WAAW,IAAA,CAAK;AAAA,KAClB,CAAE,CAAA;AAAA,EACJ;AAAA,EAEA,MAAM,UAAU,GAAA,EAA8B;AAC5C,IAAA,OAAO,IAAA,CAAK,iBAAiB,OAAO;AAAA,MAClC,EAAA,EAAI,WAAA;AAAA,MACJ,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,MACpB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAA,EAAW,KAAK,YAAA;AAAa,KAC/B,CAAE,CAAA;AAAA,EACJ;AACF;;;AC7GA,IAAM,wBAAA,GAA2B,uBAAA;AAuB1B,IAAM,oBAAN,MAAwB;AAAA,EACZ,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EAEjB,WAAA,CAAY,EAAE,aAAA,EAAe,cAAA,EAAgB,iBAAgB,EAA4B;AACvF,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AAEA,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA,CAAc,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACpD,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,kBAAkB,eAAA,IAAmB,wBAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAwB,OAAA,EAAuD;AACnF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,mBAAoC,UAAA,EAAY,IAAA,CAAK,iBAAiB,OAAO,CAAA;AAEvG,IAAA,MAAM,kBAAkB,MAAA,CAAO,KAAA;AAC/B,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,MAAM,WAAA,GAAc,eAAA;AACpB,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,WAAA,EAAa,SAAS,8BAA8B,CAAA;AAC5E,MAAC,KAAA,CAAc,OAAO,WAAA,EAAa,IAAA;AACnC,MAAC,KAAA,CAAc,UAAU,WAAA,EAAa,OAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO;AAAA,MACL,QAAQ,eAAA,CAAgB,MAAA;AAAA,MACxB,SAAS,eAAA,CAAgB;AAAA,KAC3B;AAAA,EACF;AAAA,EAEA,MAAM,YAAqB,OAAA,EAAqC;AAC9D,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,eAAkB,OAAO,CAAA;AACvD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,UAAA,CAAoB,IAAA,EAAc,IAAA,EAAuC;AAC7E,IAAA,OAAO,IAAA,CAAK,YAAA,CAAgB,QAAA,EAAU,IAAA,EAAM,IAAI,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,YAAA,CAAsB,IAAA,EAAc,IAAA,EAAuC;AAC/E,IAAA,OAAO,IAAA,CAAK,YAAA,CAAgB,UAAA,EAAY,IAAA,EAAM,IAAI,CAAA;AAAA,EACpD;AAAA,EAEA,MAAM,SAAA,CAAmB,IAAA,EAAc,IAAA,EAAuC;AAC5E,IAAA,OAAO,IAAA,CAAK,YAAA,CAAgB,OAAA,EAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACjD;AAAA,EAEA,MAAc,YAAA,CAAgB,IAAA,EAA0B,IAAA,EAAc,IAAA,EAAuC;AAC3G,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,kBAAA,CAAsB,IAAA,EAAM,MAAM,IAAI,CAAA;AAChE,IAAA,OAAO,MAAA,CAAO,KAAA;AAAA,EAChB;AAAA,EAEA,MAAc,kBAAA,CACZ,IAAA,EACA,IAAA,EACA,IAAA,EAC+B;AAC/B,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,aAAa,QAAQ,IAAI,CAAA,CAAA;AAE7C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,cAAA,EAAgB,kBAAA;AAAA,QAChB,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,cAAc,CAAA;AAAA,OAC9C;AAAA,MACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACnB,IAAA;AAAA,QACA,IAAA;AAAA,QACA,MAAA,EAAQ;AAAA,OACT;AAAA,KACF,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,SAAS,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,MAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AAEpC,IAAA,IAAI,MAAA,CAAO,WAAW,OAAA,EAAS;AAC7B,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,gBAAgB,sBAAsB,CAAA;AACrE,MAAC,KAAA,CAAc,UAAU,MAAA,CAAO,SAAA;AAChC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,SAAA,EAAW;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,6BAAA,CAA+B,CAAA;AAAA,IACvE;AAEA,IAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;AC1GO,SAAS,oBAAoB,MAAA,EAA+C;AAEjF,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,OAAO,MAAA,CAAO,MAAA;AAAA,EAChB;AAGA,EAAA,OAAO,IAAI,kBAAkB,MAAM,CAAA;AACrC;AAEO,IAAM,QAAA,GAAN,cAAuB,UAAA,CAAW;AAAA,EACvC,YAA6B,MAAA,EAA2B;AACtD,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,WAAA,EAAa,CAAA;AADA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAE7B;AAAA,EAF6B,MAAA;AAAA,EAI7B,MAAM,SAAA,CAAU,MAAA,EAAgB,OAAA,EAAmC;AACjE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,WAAA,CAAY;AAAA,IAChB,SAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACV,EAGkB;AAEhB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,iCAAA,EAAoC,SAAS,CAAA,6BAAA,CAA+B,CAAA;AAAA,EAChG;AAAA,EAEA,MAAM,UAAA,CAAW;AAAA,IACf,SAAA;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf,EAIkB;AAEhB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,SAAS,CAAA,6BAAA,CAA+B,CAAA;AAAA,EAC/F;AAAA,EAEA,MAAM,UAAA,CAAW,EAAE,SAAA,EAAU,EAA8C;AAGzE,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,OAAA,EAAS;AACd,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe;AAAA,QAChD,EAAA,EAAI,YAAA;AAAA,QACJ;AAAA,OACD,CAAA;AACD,MAAA,OAAA,GAAU,SAAS,OAAA,IAAW,KAAA;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,SAAA,CAAU,EAAE,SAAA,EAAU,EAA8C;AAGxE,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,OAAA,EAAS;AACd,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe;AAAA,QAChD,EAAA,EAAI,WAAA;AAAA,QACJ;AAAA,OACD,CAAA;AACD,MAAA,OAAA,GAAU,SAAS,OAAA,IAAW,KAAA;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,EAAE,SAAA,EAAW,QAAO,EAA2E;AAC1G,IAAA,MAAM,IAAA,CAAK,OAAO,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,QAAA;AAAA,MACJ,SAAA;AAAA,MACA,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,SAAA,EAAW,MAAM;AAAA,KAC/C,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,SAAA,EAAW,SAAQ,EAA8E;AACnH,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAE1B,IAAA,MAAM,IAAA,CAAK,OAAO,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,aAAA;AAAA,MACJ,SAAA;AAAA,MACA,OAAA,EAAS,QAAQ,GAAA,CAAI,CAAA,MAAA,KAAU,KAAK,eAAA,CAAgB,SAAA,EAAW,MAAM,CAAC;AAAA,KACvE,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,KAAA,CAAM;AAAA,IACV,SAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF,EAIqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,CAAqB;AAAA,MACtC,EAAA,EAAI,OAAA;AAAA,MACJ,SAAA;AAAA,MACA,EAAA;AAAA,MACA,MAAA,EAAQ,IAAA,CAAK,cAAA,CAAe,MAAM;AAAA,KACnC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,IAAA,CAAQ,EAAE,SAAA,EAAW,MAAK,EAA6E;AAC3G,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA,CAAsB;AAAA,MACrD,EAAA,EAAI,MAAA;AAAA,MACJ,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,UAAA,CACX,SAAA,EACA,OAAA,EACA,WACA,KAAA,EACc;AACd,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,CAAiB;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,UAAA,CAAW,SAAA,EAAwB,GAAA,EAA8B;AAC5E,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAA,CAAK,OAAO,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,eAAe,MAAA,EAA4C;AACtE,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,yBAAA,CAA2B,CAAA;AAAA,IAC7C;AAEA,IAAA,MAAM,IAAA,CAAK,OAAO,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,gBAAA;AAAA,MACJ,SAAA,EAAWA,eAAAA;AAAA,MACX,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgBA,eAAAA,EAAiB,MAAM;AAAA,KACrD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,sBAAsB,MAAA,EAA4C;AAC7E,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,iCAAA,CAAmC,CAAA;AAAA,IACrD;AAEA,IAAA,MAAM,IAAA,CAAK,OAAO,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,uBAAA;AAAA,MACJ,SAAA,EAAWC,uBAAAA;AAAA,MACX,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgBA,uBAAAA,EAAyB,MAAM;AAAA,KAC7D,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,gBAAA,CAAoB,GAAA,EAAa,KAAA,EAA8B;AAC1E,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,CAAiB;AAAA,MAClC,EAAA,EAAI,kBAAA;AAAA,MACJ,SAAA,EAAWD,eAAAA;AAAA,MACX,GAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,sBAAA,CAAuB;AAAA,IAClC,EAAA;AAAA,IACA,kBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,EAMqB;AACnB,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,CAAqB;AAAA,MACtC,EAAA,EAAI,wBAAA;AAAA,MACJ,SAAA,EAAWA,eAAAA;AAAA,MACX,EAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,cAAA,CAAkB,EAAE,EAAA,EAAI,OAAM,EAA2D;AACpG,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,CAAe;AAAA,MAChC,EAAA,EAAI,gBAAA;AAAA,MACJ,SAAA,EAAWA,eAAAA;AAAA,MACX,EAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,oBAAA,CAAwB;AAAA,IACnC,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,EAKiB;AACf,IAAA,OAAO,IAAA,CAAK,OAAO,WAAA,CAAiB;AAAA,MAClC,EAAA,EAAI,sBAAA;AAAA,MACJ,SAAA,EAAWC,uBAAAA;AAAA,MACX,UAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,uBAAuB,UAAA,EAAmC;AACrE,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,OAAA,EAAS;AACd,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe;AAAA,QAChD,EAAA,EAAI,wBAAA;AAAA,QACJ,SAAA,EAAWA,uBAAAA;AAAA,QACX;AAAA,OACD,CAAA;AACD,MAAA,OAAA,GAAU,SAAS,OAAA,IAAW,KAAA;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,eAAA,CAAgB,WAAwB,MAAA,EAAkD;AAChG,IAAA,MAAM,UAAA,GAAkC,EAAE,GAAG,MAAA,EAAO;AAEpD,IAAA,IAAI,SAAA,KAAcC,uBAAAA,IAA2B,CAAC,UAAA,CAAW,EAAA,EAAI;AAC3D,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,MAAA,IAAU,UAAA,CAAW,KAAA;AAC9C,MAAA,MAAM,YAAA,GAAe,UAAA,CAAW,aAAA,IAAiB,UAAA,CAAW,YAAA;AAC5D,MAAA,UAAA,CAAW,KAAK,YAAA,GAAe,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,GAAK,KAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,CAAC,WAAW,EAAA,EAAI;AAClB,MAAA,UAAA,CAAW,EAAA,GAAK,OAAO,UAAA,EAAW;AAAA,IACpC;AAEA,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA,CAAM,WAAA,EAAY;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA,EAEQ,eAAe,MAAA,EAAkD;AACvE,IAAA,MAAM,UAAA,GAAkC,EAAE,GAAG,MAAA,EAAO;AAEpD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA,CAAM,WAAA,EAAY;AAAA,MACtC;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AACF,CAAA;;;ACtRA,SAAS,cAAc,CAAA,EAA2B;AAChD,EAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM,OAAO,IAAA;AAC1C,EAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AACzB;AAEA,SAAS,sBAAsB,CAAA,EAAoB;AACjD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAA,IAAK,EAAE,CAAA;AAC/B;AAEA,SAAS,SAAS,IAAA,EAAkC;AAClD,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,EAAA;AAAA,IACT,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,cAAc,IAAA,CAAK,UAAA;AAAA,IACnB,WAAW,IAAA,CAAK,QAAA;AAAA,IAChB,UAAU,IAAA,CAAK,OAAA;AAAA,IACf,QAAQ,IAAA,CAAK,KAAA;AAAA,IACb,SAAA,EAAW,KAAK,QAAA,IAAY,IAAA;AAAA,IAC5B,WAAA,EAAa,KAAK,UAAA,IAAc,IAAA;AAAA,IAChC,IAAA,EAAM,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AAAA,IACrC,MAAA,EAAQ,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AAAA,IACjC,KAAA,EAAO,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AAAA,IAC/B,eAAA,EAAiB,aAAA,CAAc,IAAA,CAAK,cAAc,CAAA;AAAA,IAClD,aAAa,IAAA,CAAK,UAAA;AAAA,IAClB,aAAa,IAAA,CAAK,UAAA;AAAA,IAClB,YAAY,IAAA,CAAK,SAAA;AAAA,IACjB,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,WAAA,EAAY;AAAA,IACtC,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,WAAA,EAAY,IAAK,IAAA;AAAA,IAC5C,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,WAAA,EAAY,IAAK,IAAA;AAAA,IAChD,WAAA,EAAa,IAAA,CAAK,WAAA,EAAa,WAAA,EAAY,IAAK;AAAA,GAClD;AACF;AAEA,SAAS,cAAc,MAAA,EAA+C;AACpE,EAAA,MAAM,QAAyB,EAAC;AAChC,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW,KAAA,CAAM,SAAS,MAAA,CAAO,MAAA;AACvD,EAAA,IAAI,YAAY,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,aAAA,CAAc,OAAO,MAAM,CAAA;AAClE,EAAA,IAAI,WAAW,MAAA,EAAQ,KAAA,CAAM,KAAA,GAAQ,aAAA,CAAc,OAAO,KAAK,CAAA;AAC/D,EAAA,IAAI,oBAAoB,MAAA,EAAQ,KAAA,CAAM,eAAA,GAAkB,aAAA,CAAc,OAAO,cAAc,CAAA;AAC3F,EAAA,IAAI,MAAA,CAAO,UAAA,KAAe,MAAA,EAAW,KAAA,CAAM,cAAc,MAAA,CAAO,UAAA;AAChE,EAAA,IAAI,MAAA,CAAO,UAAA,KAAe,MAAA,EAAW,KAAA,CAAM,cAAc,MAAA,CAAO,UAAA;AAChE,EAAA,IAAI,MAAA,CAAO,SAAA,KAAc,MAAA,EAAW,KAAA,CAAM,aAAa,MAAA,CAAO,SAAA;AAC9D,EAAA,IAAI,eAAe,MAAA,EAAQ,KAAA,CAAM,YAAY,MAAA,CAAO,SAAA,EAAW,aAAY,IAAK,IAAA;AAChF,EAAA,IAAI,iBAAiB,MAAA,EAAQ,KAAA,CAAM,cAAc,MAAA,CAAO,WAAA,EAAa,aAAY,IAAK,IAAA;AACtF,EAAA,IAAI,iBAAiB,MAAA,EAAQ,KAAA,CAAM,cAAc,MAAA,CAAO,WAAA,EAAa,aAAY,IAAK,IAAA;AACtF,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eAAA,CAAwB,MAAA,EAA6B,UAAA,EAAoB,SAAA,EAA2B;AAC3G,EAAA,OAAO,cAAc,MAAA,GAAS,MAAA,CAAO,UAAU,CAAA,GAAI,OAAO,SAAS,CAAA;AACrE;AAEA,SAAS,WAAW,MAAA,EAA0D;AAC5E,EAAA,MAAM,MAAA,GAAS,MAAA;AACf,EAAA,MAAMC,UAAAA,GAAY,CAAC,GAAA,KAAwC;AACzD,IAAA,IAAI,GAAA,IAAO,MAAM,OAAO,MAAA;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF,CAAA;AACA,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,CAAO,EAAA;AAAA,IACX,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAA,EAAU,eAAA,CAAwB,MAAA,EAAQ,WAAA,EAAa,UAAU,CAAA;AAAA,IACjE,UAAA,EAAY,eAAA,CAAwB,MAAA,EAAQ,cAAA,EAAgB,YAAY,CAAA;AAAA,IACxE,IAAA,EAAMA,UAAAA,CAAU,MAAA,CAAO,IAAI,KAAK,EAAC;AAAA,IACjC,OAAA,EAAS,eAAA,CAAwB,MAAA,EAAQ,UAAA,EAAY,SAAS,CAAA;AAAA,IAC9D,QAAA,EAAU,eAAA,CAA+B,MAAA,EAAQ,WAAA,EAAa,UAAU,CAAA,IAAK,MAAA;AAAA,IAC7E,UAAA,EAAY,eAAA,CAA+B,MAAA,EAAQ,aAAA,EAAe,YAAY,CAAA,IAAK,MAAA;AAAA,IACnF,KAAA,EAAO,eAAA,CAAwB,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAAA,IACxD,MAAA,EAAQA,UAAAA,CAAU,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/B,KAAA,EAAOA,UAAAA,CAAU,MAAA,CAAO,KAAK,CAAA;AAAA,IAC7B,gBAAgBA,UAAAA,CAAU,eAAA,CAA+B,MAAA,EAAQ,iBAAA,EAAmB,gBAAgB,CAAC,CAAA;AAAA,IACrG,UAAA,EAAY,eAAA,CAAwB,MAAA,EAAQ,aAAA,EAAe,YAAY,CAAA;AAAA,IACvE,UAAA,EAAY,eAAA,CAAwB,MAAA,EAAQ,aAAA,EAAe,YAAY,CAAA;AAAA,IACvE,SAAA,EAAW,eAAA,CAAwB,MAAA,EAAQ,YAAA,EAAc,WAAW,CAAA;AAAA,IACpE,SAAA,EAAW,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,IACpC,WAAW,MAAA,CAAO,SAAA,GAAY,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA;AAAA,IAC3D,aAAa,MAAA,CAAO,WAAA,GAAc,IAAI,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,GAAI,MAAA;AAAA,IACjE,aAAa,MAAA,CAAO,WAAA,GAAc,IAAI,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,GAAI;AAAA,GACnE;AACF;AAEA,SAAS,gBAAgB,MAAA,EAA6B;AACpD,EAAA,OAAO,OAAA;AAAA,IAAA,CACJ,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,GAAI,OAAO,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,MAAA,KAClE,MAAA,CAAO,WACP,MAAA,CAAO,QAAA,IACP,MAAA,CAAO,UAAA,IACP,MAAA,CAAO,QAAA,IACP,MAAA,CAAO,UAAA,IACP,MAAA,CAAO,KAAA,IACP,MAAA,CAAO,QAAA,IACP,MAAA,CAAO;AAAA,GACT;AACF;AAEO,IAAM,qBAAA,GAAN,cAAoC,sBAAA,CAAuB;AAAA,EAChE,GAAA;AAAA,EAEA,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,QAAA,CAAS,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,mBAAA,GAAqC;AACzC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWC,wBAAwB,CAAA;AAAA,EACjE;AAAA,EAEA,MAAM,WAAW,IAAA,EAAqC;AACpD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,EAAE,SAAA,EAAWA,wBAAwB,MAAA,EAAQ,QAAA,CAAS,IAAI,CAAA,EAAG,CAAA;AAAA,EACrF;AAAA,EAEA,MAAM,UAAA,CAAW,MAAA,EAAgB,MAAA,EAA6C;AAC5E,IAAA,MAAM,KAAA,GAAQ,cAAc,MAAM,CAAA;AAClC,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,WAAW,CAAA,EAAG;AAErC,IAAA,MAAM,IAAA,CAAK,IAAI,KAAA,CAAM;AAAA,MACnB,SAAA,EAAWA,sBAAAA;AAAA,MACX,EAAA,EAAI,MAAA;AAAA,MACJ,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,MAAA,EAAgD;AAC5D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAiB,EAAE,SAAA,EAAWA,sBAAAA,EAAwB,IAAA,EAAM,EAAE,EAAA,EAAI,MAAA,IAAU,CAAA;AACxG,IAAA,OAAO,IAAA,GAAO,UAAA,CAAW,IAAI,CAAA,GAAI,IAAA;AAAA,EACnC;AAAA,EAEA,MAAM,UAAU,MAAA,EAA6C;AAC3D,IAAA,MAAM,eAAwD,EAAC;AAE/D,IAAA,IAAI,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,MAAA,CAAO,MAAA,EAAQ,CAAA;AAElG,IAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,CAAO,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9D,MAAA,YAAA,CAAa,IAAA,CAAK,EAAE,KAAA,EAAO,QAAA,EAAU,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAI,CAAA;AAAA,IACjE;AACA,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,UAAA,EAAY,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,CAAA;AAClF,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,WAAA,EAAa,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,CAAA;AACrF,IAAA,IAAI,MAAA,CAAO,UAAA,EAAY,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,aAAA,EAAe,KAAA,EAAO,MAAA,CAAO,UAAA,EAAY,CAAA;AAC3F,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,WAAA,EAAa,KAAA,EAAO,MAAA,CAAO,QAAA,EAAU,CAAA;AACrF,IAAA,IAAI,MAAA,CAAO,UAAA,EAAY,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,cAAA,EAAgB,KAAA,EAAO,MAAA,CAAO,UAAA,EAAY,CAAA;AAC5F,IAAA,IAAI,MAAA,CAAO,KAAA,EAAO,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,CAAA;AAE5E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA;AAAA,MACzBA,sBAAAA;AAAA,MACA,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe;AAAA,KAC3C;AACA,IAAA,IAAI,KAAA,GAAQ,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA;AAE9B,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,MAAM,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,MAAA,CAAO,MAAA,GAAS,CAAC,MAAA,CAAO,MAAM,CAAA;AACvE,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,QAAA,CAAS,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAA,KAAY,MAAA,CAAO,OAAO,CAAA;AAC1E,IAAA,IAAI,MAAA,CAAO,UAAU,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,KAAa,MAAA,CAAO,QAAQ,CAAA;AAC7E,IAAA,IAAI,MAAA,CAAO,YAAY,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,KAAe,MAAA,CAAO,UAAU,CAAA;AACnF,IAAA,IAAI,MAAA,CAAO,UAAU,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,KAAa,MAAA,CAAO,QAAQ,CAAA;AAC7E,IAAA,IAAI,MAAA,CAAO,YAAY,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,UAAA,KAAe,MAAA,CAAO,UAAU,CAAA;AACnF,IAAA,IAAI,MAAA,CAAO,OAAO,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK,CAAA,CAAE,KAAA,KAAU,MAAA,CAAO,KAAK,CAAA;AAEpE,IAAA,MAAM,OAAA,GAAU,OAAO,YAAA,IAAgB,WAAA;AACvC,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK;AACxB,QAAA,MAAM,GAAA,GAAM,EAAE,OAAO,CAAA;AACrB,QAAA,OAAO,GAAA,IAAO,IAAA,IAAQ,GAAA,IAAO,MAAA,CAAO,QAAA;AAAA,MACtC,CAAC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAO,CAAA,CAAA,KAAK;AACxB,QAAA,MAAM,GAAA,GAAM,EAAE,OAAO,CAAA;AACrB,QAAA,OAAO,GAAA,IAAO,IAAA,IAAQ,GAAA,GAAM,MAAA,CAAO,MAAA;AAAA,MACrC,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,WAAA;AAClC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,cAAA,KAAmB,MAAA,GAAS,EAAA,GAAK,CAAA;AACpD,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,EAAG,OAAA,EAAQ,IAAK,CAAA,KAAM,EAAE,OAAO,CAAA,EAAG,OAAA,EAAQ,IAAK,MAAM,GAAG,CAAA;AAGxF,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AAEpB,IAAA,IAAI,MAAA,CAAO,IAAA,IAAQ,IAAA,IAAQ,MAAA,CAAO,WAAW,IAAA,EAAM;AACjD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,OAAA;AACnC,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,KAAA,GAAQ,OAAO,OAAO,CAAA;AAAA,IACnD,CAAA,MAAA,IAAW,MAAA,CAAO,OAAA,IAAW,IAAA,EAAM;AACjC,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AAAA,EAEA,MAAM,WAAW,MAAA,EAA+B;AAC9C,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAWA,sBAAAA,EAAwB,CAAC,MAAM,CAAC,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAM,YAAY,MAAA,EAAmC;AACnD,IAAA,IAAI,CAAC,eAAA,CAAgB,MAAM,CAAA,EAAG;AAE9B,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,UAAU,MAAM,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,EAAE,CAAA;AACnC,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAWA,sBAAAA,EAAwB,OAAO,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAM,eAAA,GAAmC;AACvC,IAAA,MAAM,EAAE,OAAM,GAAI,MAAM,KAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA;AAC5D,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EACA,MAAM,uBAAuB,OAAA,EAAkC;AAC7D,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,UAAU,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,CAAA;AACrE,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AC1NA,IAAM,cAAA,GAAgE;AAAA,EACpE,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEA,SAAS,cAAc,KAAA,EAAwC;AAC7D,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAEA,SAAS,SAAA,CAAU,OAAe,OAAA,EAA0C;AAC1E,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,MAAM,CAAA,8BAAA,EAAiC,OAAO,IAAI,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,EAC9E;AACF;AAEA,SAAS,oBAAA,CACP,cACA,cAAA,EAC2B;AAC3B,EAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,EAAA,OAAO;AAAA,IACL,IAAI,YAAA,CAAa,EAAA;AAAA,IACjB,UAAU,YAAA,CAAa,QAAA;AAAA,IACvB,SAAS,YAAA,CAAa,OAAA;AAAA,IACtB,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,SAAA,EAAW,aAAa,SAAA,IAAa,IAAA;AAAA,IACrC,IAAA,EAAM,aAAA,CAAc,YAAA,CAAa,IAAI,CAAA;AAAA,IACrC,UAAA,EAAY,aAAa,UAAA,IAAc,IAAA;AAAA,IACvC,KAAA,EAAO,aAAa,KAAA,IAAS,IAAA;AAAA,IAC7B,WAAW,cAAA,EAAgB,SAAA,IAAa,YAAA,CAAa,SAAA,EAAW,aAAY,IAAK,GAAA;AAAA,IACjF,SAAA,EAAW;AAAA,GACb;AACF;AAEA,SAAS,qBAAqB,MAAA,EAAwD;AACpF,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,CAAO,EAAA;AAAA,IACX,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAA,EAAW,OAAO,SAAA,IAAa,MAAA;AAAA,IAC/B,MAAM,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,aAAA,EAAgB,MAAA,CAAO,EAAE,CAAA,CAAE,CAAA;AAAA,IACxD,UAAA,EAAY,OAAO,UAAA,IAAc,MAAA;AAAA,IACjC,KAAA,EAAO,OAAO,KAAA,IAAS,MAAA;AAAA,IACvB,SAAA,EAAW,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,IACpC,SAAA,EAAW,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS;AAAA,GACtC;AACF;AAEA,SAAS,eAAe,MAAA,EAA4C;AAClE,EAAA,OAAO;AAAA,IACL,IAAI,MAAA,CAAO,QAAA;AAAA,IACX,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,IAAA,EAAM,aAAA,CAAc,MAAA,CAAO,IAAI,CAAA;AAAA,IAC/B,SAAA,EAAW,MAAA,CAAO,SAAA,CAAU,WAAA;AAAY,GAC1C;AACF;AAEA,SAAS,eAAe,MAAA,EAA4C;AAClE,EAAA,OAAO;AAAA,IACL,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,MAAM,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,CAAE,CAAA;AAAA,IACxD,SAAA,EAAW,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS;AAAA,GACtC;AACF;AAEA,SAAS,yBAAA,CAA0B,GAAwB,CAAA,EAAgC;AACzF,EAAA,MAAM,aAAa,cAAA,CAAe,CAAA,CAAE,MAAM,CAAA,GAAI,cAAA,CAAe,EAAE,MAAM,CAAA;AACrE,EAAA,IAAI,UAAA,KAAe,GAAG,OAAO,UAAA;AAC7B,EAAA,OAAO,EAAE,SAAA,CAAU,OAAA,EAAQ,GAAI,CAAA,CAAE,UAAU,OAAA,EAAQ;AACrD;AAEO,IAAM,cAAA,GAAN,cAA6B,eAAA,CAAgB;AAAA,EAClD,GAAA;AAAA,EAEA,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,QAAA,CAAS,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAAA,EAE5B;AAAA,EAEA,MAAM,mBAAA,GAAqC;AACzC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWC,6BAA6B,CAAA;AACpE,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWC,sBAAsB,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,iBAAiB,YAAA,EAAkD;AACvE,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAuC;AAAA,MAC3E,SAAA,EAAWD,2BAAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA,EAAI,YAAA,CAAa,EAAA;AAAG,KAC7B,CAAA;AAED,IAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACpB,SAAA,EAAWA,2BAAAA;AAAA,MACX,MAAA,EAAQ,oBAAA,CAAqB,YAAA,EAAc,cAAc;AAAA,KAC1D,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,EAAA,EAAiD;AACrE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAuC;AAAA,MACnE,SAAA,EAAWA,2BAAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA;AAAG,KACZ,CAAA;AACD,IAAA,OAAO,MAAA,GAAS,oBAAA,CAAqB,MAAM,CAAA,GAAI,IAAA;AAAA,EACjD;AAAA,EAEA,MAAM,sBAAA,CAAuB,QAAA,EAAkB,OAAA,EAAsD;AACnG,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,WAAsCA,2BAAAA,EAA6B;AAAA,MAChG,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,QAAA,EAAS;AAAA,MACrC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,OAAA;AAAQ,KACpC,CAAA;AACD,IAAA,MAAM,CAAC,YAAY,CAAA,GAAI,OAAA,CAAQ,IAAI,oBAAoB,CAAA,CAAE,KAAK,yBAAyB,CAAA;AACvF,IAAA,OAAO,YAAA,IAAgB,IAAA;AAAA,EACzB;AAAA,EAEA,MAAM,2BAA2B,SAAA,EAAwD;AACvF,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,WAAsCA,2BAAAA,EAA6B;AAAA,MAChG,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,SAAA;AAAU,KACxC,CAAA;AACD,IAAA,MAAM,CAAC,YAAY,CAAA,GAAI,QACpB,GAAA,CAAI,oBAAoB,EACxB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,SAAA,CAAU,OAAA,KAAY,CAAA,CAAE,SAAA,CAAU,SAAS,CAAA;AAC/D,IAAA,OAAO,YAAA,IAAgB,IAAA;AAAA,EACzB;AAAA,EAEA,MAAM,kBAAkB,QAAA,EAAkD;AACxE,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,WAAsCA,2BAAAA,EAA6B;AAAA,MAChG,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,QAAA;AAAS,KACtC,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,oBAAoB,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,UAAU,OAAA,EAAQ,GAAI,CAAA,CAAE,SAAA,CAAU,SAAS,CAAA;AAAA,EACvG;AAAA,EAEA,MAAM,mBAAmB,EAAA,EAA2B;AAClD,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAWA,2BAAAA,EAA6B,CAAC,EAAE,CAAC,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,WAAW,MAAA,EAAsC;AACrD,IAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACpB,SAAA,EAAWC,oBAAAA;AAAA,MACX,MAAA,EAAQ,eAAe,MAAM;AAAA,KAC9B,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,UAAU,QAAA,EAAiD;AAC/D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAiC;AAAA,MAC7D,SAAA,EAAWA,oBAAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA,EAAI,QAAA;AAAS,KACtB,CAAA;AACD,IAAA,OAAO,MAAA,GAAS,cAAA,CAAe,MAAM,CAAA,GAAI,IAAA;AAAA,EAC3C;AAAA,EAEA,MAAM,aAAa,QAAA,EAAiC;AAClD,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAWA,oBAAAA,EAAsB,CAAC,QAAQ,CAAC,CAAA;AAAA,EAC5D;AACF,CAAA;ACtJO,IAAM,YAAA,GAAN,cAA2B,aAAA,CAAc;AAAA,EAC9C,GAAA;AAAA,EACA,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,QAAA,CAAS,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAAA,EAE5B;AAAA,EAEA,MAAM,mBAAA,GAAqC;AACzC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWC,eAAe,CAAA;AACtD,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWC,gBAAgB,CAAA;AACvD,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWC,iBAAiB,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,aAAA,CAAc;AAAA,IAClB,QAAA;AAAA,IACA;AAAA,GACF,EAGsC;AACpC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAEzB;AAAA,MACA,SAAA,EAAWF,aAAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA,EAAI,QAAA;AAAS,KACtB,CAAA;AAED,IAAA,IAAI,CAAC,GAAA,IAAQ,UAAA,KAAe,UAAa,GAAA,CAAI,UAAA,KAAe,YAAa,OAAO,IAAA;AAEhF,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,QAAA,EAAU,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,GAAW,KAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,CAAI,QAAA;AAAA,MAC5E,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,MACjC,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS;AAAA,KACnC;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CAAW,EAAE,MAAA,EAAO,EAA8D;AACtF,IAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACpB,SAAA,EAAWA,aAAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,GAAG,MAAA;AAAA,QACH,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY;AAAC;AAChC,KACD,CAAA;AACD,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CAAa;AAAA,IACjB,EAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,EAI+B;AAC7B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,cAAc,EAAE,QAAA,EAAU,IAAI,CAAA;AAC1D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,oBAAA,CAAqB,QAAA,EAAU,eAAA,EAAiB,kBAAkB,CAAA;AAAA,QACtE,QAAQ,WAAA,CAAY,OAAA;AAAA,QACpB,UAAU,aAAA,CAAc,IAAA;AAAA,QACxB,IAAA,EAAM,UAAU,EAAE,CAAA,UAAA;AAAA,OACnB,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,OAAA,GAA6B;AAAA,MACjC,GAAG,QAAA;AAAA,MACH,KAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,GAAG,QAAA,CAAS,QAAA;AAAA,QACZ,GAAG;AAAA,OACL;AAAA,MACA,SAAA,sBAAe,IAAA;AAAK,KACtB;AAEA,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,EAAE,MAAA,EAAQ,SAAS,CAAA;AACzC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAAwC;AACpE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,WAA0BC,cAAAA,EAAgB;AAAA,MACxE,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,QAAA;AAAS,KACvC,CAAA;AACD,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA;AAAA,MACbA,cAAAA;AAAA,MACA,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,KAAO,GAAA,CAAI,EAAE;AAAA,KAC5B;AACA,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAWD,aAAAA,EAAe,CAAC,QAAQ,CAAC,CAAA;AAAA,EACrD;AAAA,EAEA,MAAM,YAAY,IAAA,EAAkE;AAClF,IAAA,MAAM,EAAE,IAAA,GAAO,CAAA,EAAG,SAAS,YAAA,EAAc,OAAA,EAAS,QAAO,GAAI,IAAA;AAE7D,IAAA,IAAI;AAGF,MAAA,IAAA,CAAK,uBAAA,CAAwB,IAAA,EAAM,YAAA,IAAgB,GAAG,CAAA;AAAA,IACxD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,oBAAA,CAAqB,QAAA,EAAU,cAAA,EAAgB,cAAc,CAAA;AAAA,UACjE,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS,EAAE,IAAA,EAAM,GAAI,iBAAiB,MAAA,IAAa,EAAE,OAAA,EAAS,YAAA,EAAa;AAAG,SAChF;AAAA,QACA,KAAA,YAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,MAAM,+BAA+B;AAAA,OAC5E;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,YAAA,EAAc,GAAG,CAAA;AAElD,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAU,GAAI,IAAA,CAAK,aAAa,OAAO,CAAA;AACtD,IAAA,MAAM,EAAE,QAAQ,OAAA,EAAS,kBAAA,KAAuB,mBAAA,CAAoB,IAAA,EAAM,cAAc,OAAO,CAAA;AAG/F,IAAA,MAAM,eAAqD,EAAC;AAE5D,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,YAAA,CAAa,KAAK,EAAE,KAAA,EAAO,cAAc,KAAA,EAAO,MAAA,CAAO,YAAY,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAE1BA,eAAe,YAAY,CAAA;AAE7B,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,MAC7B,GAAG,GAAA;AAAA,MACH,QAAA,EAAU,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,GAAW,KAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,CAAI,QAAA;AAAA,MAC5E,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,MACjC,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS;AAAA,KACnC,CAAE,CAAA;AAGF,IAAA,IAAI,MAAA,EAAQ,YAAY,MAAA,CAAO,IAAA,CAAK,OAAO,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AAC/D,MAAA,OAAA,GAAU,OAAA,CAAQ,OAAO,CAAA,MAAA,KAAU;AACjC,QAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,OAAO,KAAA;AAC7B,QAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,QAAS,EAAE,KAAA,CAAM,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,MAAA,CAAO,QAAA,CAAU,GAAG,MAAM,KAAK,CAAA;AAAA,MACjG,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,MAAA,MAAM,MAAA,GAAS,EAAE,KAAK,CAAA;AACtB,MAAA,MAAM,MAAA,GAAS,EAAE,KAAK,CAAA;AACtB,MAAA,MAAM,KAAA,GAAQ,MAAA,YAAkB,IAAA,GAAO,MAAA,CAAO,OAAA,KAAY,IAAI,IAAA,CAAK,MAAa,CAAA,CAAE,OAAA,EAAQ;AAC1F,MAAA,MAAM,KAAA,GAAQ,MAAA,YAAkB,IAAA,GAAO,MAAA,CAAO,OAAA,KAAY,IAAI,IAAA,CAAK,MAAa,CAAA,CAAE,OAAA,EAAQ;AAC1F,MAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,KAAA,GAAQ,KAAA,GAAQ,KAAA,GAAQ,KAAA;AAAA,IACvD,CAAC,CAAA;AAED,IAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA;AACtB,IAAA,MAAM,SAAA,GAAY,iBAAiB,KAAA,GAAQ,OAAA,GAAU,QAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,OAAO,CAAA;AAE3F,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,SAAA;AAAA,MACT,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,kBAAA;AAAA,MACT,OAAA,EAAS,YAAA,KAAiB,KAAA,GAAQ,KAAA,GAAQ,SAAS,OAAA,GAAU;AAAA,KAC/D;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAAA,EAAoE;AACrF,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,MAAA,EAAQ,SAAS,YAAA,EAAc,IAAA,GAAO,CAAA,EAAG,OAAA,EAAQ,GAAI,IAAA;AAG5F,IAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,GAAW,CAAC,QAAQ,CAAA;AAEhE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,SAAA,CAAU,IAAA,CAAK,QAAM,CAAC,EAAA,CAAG,IAAA,EAAM,CAAA,EAAG;AAC9D,MAAA,MAAM,IAAI,WAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAI,oBAAA,CAAqB,QAAA,EAAU,eAAA,EAAiB,mBAAmB,CAAA;AAAA,UACvE,QAAQ,WAAA,CAAY,OAAA;AAAA,UACpB,UAAU,aAAA,CAAc,IAAA;AAAA,UACxB,OAAA,EAAS,EAAE,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,GAAI,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,GAAI,QAAA;AAAS,SAC/E;AAAA,QACA,IAAI,MAAM,mEAAmE;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,YAAA,EAAc,EAAE,CAAA;AACjD,IAAA,MAAM,EAAE,QAAQ,OAAA,EAAS,kBAAA,KAAuB,mBAAA,CAAoB,IAAA,EAAM,cAAc,OAAO,CAAA;AAC/F,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,KAAc,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAG7D,IAAA,IAAI,YAAY,CAAA,KAAM,CAAC,OAAA,IAAW,OAAA,CAAQ,WAAW,CAAA,CAAA,EAAI;AACvD,MAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAG,KAAA,EAAO,GAAG,IAAA,EAAM,OAAA,EAAS,kBAAA,EAAoB,OAAA,EAAS,KAAA,EAAM;AAAA,IACrF;AAGA,IAAA,IAAI,OAAA,KAAY,CAAA,IAAK,OAAA,IAAW,OAAA,CAAQ,SAAS,CAAA,EAAG;AAClD,MAAA,MAAMG,SAAAA,GAAW,MAAM,IAAA,CAAK,oBAAA,CAAqB,OAAO,CAAA;AACxD,MAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,GAAA,CAAIA,WAAU,QAAQ,CAAA;AACrD,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,KAAK,aAAA,CAAc,IAAA,CAAK,IAAI,GAAA,CAAI,EAAA,EAAG,EAAG,KAAA,EAAO,SAAS,CAAA;AAAA,QAChE,KAAA,EAAO,CAAA;AAAA,QACP,IAAA;AAAA,QACA,OAAA,EAAS,kBAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AAGA,IAAA,IAAI,OAAwB,EAAC;AAC7B,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAA0BF,cAAAA,EAAgB,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,GAAA,EAAK,CAAC,CAAA;AAChH,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,UAAU,CAAA;AAAA,IACzB;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,CAAI,eAAe,UAAU,CAAA;AAAA,IACzD;AAGA,IAAA,IAAA,GAAO,iBAAA,CAAkB,MAAM,CAAA,GAAA,KAAO,IAAI,KAAK,GAAA,CAAI,SAAS,CAAA,EAAG,MAAA,EAAQ,SAAS,CAAA;AAEhF,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAClB,MAAA,MAAM,MAAA,GACJ,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,cAC/B,IAAI,IAAA,CAAM,CAAA,CAA0B,KAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,GACnD,EAA0B,KAAK,CAAA;AACtC,MAAA,MAAM,MAAA,GACJ,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,cAC/B,IAAI,IAAA,CAAM,CAAA,CAA0B,KAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,GACnD,EAA0B,KAAK,CAAA;AACtC,MAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,WAAW,QAAA,EAAU;AAC5D,QAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,MAAA,GAAS,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,MAC1D;AACA,MAAA,OAAO,cAAc,KAAA,GACjB,MAAA,CAAO,MAAM,CAAA,CAAE,cAAc,MAAA,CAAO,MAAM,CAAC,CAAA,GAC3C,OAAO,MAAM,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACjD,CAAC,CAAA;AAED,IAAA,MAAM,sBAAsB,IAAA,CAAK,MAAA;AACjC,IAAA,MAAM,aAAA,GAAgB,iBAAiB,KAAA,GAAQ,IAAA,GAAO,KAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,OAAO,CAAA;AACzF,IAAA,IAAI,WAAW,aAAA,CAAc,GAAA,CAAI,SAAO,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA;AACpE,IAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,GAAA,KAAO,GAAA,CAAI,EAAE,CAAC,CAAA;AAEtD,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAKjC,MAAA,MAAM,gBAAA,uBAAuB,GAAA,EAA6B;AAC1D,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,MAAA,EAAQ,SAAA,EAAW;AACrC,QAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,UAAA,gBAAA,CAAiB,GAAA;AAAA,YACf,GAAA;AAAA,YACA,IAAA,CAAK,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,cAAc,GAAG;AAAA,WACtC;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,oBAAA,CAAqB,SAAS,gBAAgB,CAAA;AAClF,MAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,QAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AAC3B,UAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AACjB,UAAA,UAAA,CAAW,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,KAAA,EAAO,SAAS,CAAA;AAExD,IAAA,MAAM,OAAA,GACJ,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,GACxB,IAAI,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,QAAA,KAAa,QAAQ,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAC,CAAA,CAAE,IAAA,GAAO,mBAAA,GAC7E,YAAA,KAAiB,KAAA,GACf,KAAA,GACA,MAAA,GAAS,OAAA,GAAU,mBAAA;AAE3B,IAAA,OAAO;AAAA,MACL,QAAA;AAAA,MACA,KAAA,EAAO,mBAAA;AAAA,MACP,IAAA;AAAA,MACA,OAAA,EAAS,kBAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAA,CAAiB,EAAE,UAAA,EAAW,EAAuE;AACzG,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAE,QAAA,EAAU,EAAC,EAAE;AAAA,IACxB;AACA,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAA0BA,gBAAgB,MAAS,CAAA;AAC/E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,CAAA,GAAA,KAAO,WAAW,QAAA,CAAS,GAAA,CAAI,EAAE,CAAC,EAAE,GAAA,CAAI,CAAA,GAAA,KAAO,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA;AACxG,IAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,GAAA,CAAI,UAAU,QAAQ,CAAA;AACrD,IAAA,OAAO,EAAE,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAG,EAAE;AAAA,EACvC;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAA8E;AAC1G,IAAA,IAAI,SAAS,MAAA,KAAW,CAAA,SAAU,EAAE,QAAA,EAAU,EAAC,EAAE;AAEjD,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,KAAW;AACzC,MAAA,IAAI,CAAC,QAAQ,QAAA,EAAU;AACrB,QAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,MACzC;AACA,MAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,QAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,MAC3C;AACA,MAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,YAAqB,IAAA,GAAO,QAAQ,SAAA,CAAU,WAAA,KAAgB,OAAA,CAAQ,SAAA;AAChG,MAAA,OAAO;AAAA,QACL,IAAI,OAAA,CAAQ,EAAA;AAAA,QACZ,WAAW,OAAA,CAAQ,QAAA;AAAA,QACnB,OAAA,EAAS,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,OAAO,CAAA;AAAA,QACvC,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,IAAA,EAAM,QAAQ,IAAA,IAAQ,IAAA;AAAA,QACtB,SAAA;AAAA,QACA,YAAY,OAAA,CAAQ;AAAA,OACtB;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,IAAA,CAAK,IAAI,WAAA,CAAY;AAAA,MACzB,SAAA,EAAWA,cAAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACV,CAAA;AAGD,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,IAAI,IAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAa,CAAC,CAAA;AACxF,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,UAAU,CAAA;AACpD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,UACpB,SAAA,EAAWD,aAAAA;AAAA,UACX,MAAA,EAAQ;AAAA,YACN,GAAG,MAAA;AAAA,YACH,IAAI,MAAA,CAAO,EAAA;AAAA,YACX,SAAA,EAAW,IAAI,WAAA,EAAY;AAAA,YAC3B,SAAA,EAAW,OAAO,SAAA,YAAqB,IAAA,GAAO,OAAO,SAAA,CAAU,WAAA,KAAgB,MAAA,CAAO,SAAA;AAAA,YACtF,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY;AAAC;AAChC,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,GAAA,CAAI,UAAU,QAAQ,CAAA;AACrD,IAAA,OAAO,EAAE,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAG,EAAE;AAAA,EACvC;AAAA,EAEA,MAAM,cAAA,CAAe;AAAA,IACnB;AAAA,GACF,EAK+B;AAC7B,IAAA,IAAI,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEnC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAA0BC,gBAAgB,MAAS,CAAA;AACnF,IAAA,MAAM,UAA6B,EAAC;AACpC,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAY;AAE1C,IAAA,KAAA,MAAW,UAAU,QAAA,EAAU;AAC7B,MAAA,MAAM,UAAU,QAAA,CAAS,IAAA,CAAK,SAAO,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACzD,MAAA,IAAI,CAAC,OAAA,EAAS;AAGd,MAAA,iBAAA,CAAkB,GAAA,CAAI,QAAQ,SAAS,CAAA;AAEvC,MAAA,IAAI,OAAO,QAAA,EAAU;AAEnB,QAAA,iBAAA,CAAkB,GAAA,CAAI,OAAO,QAAQ,CAAA;AACrC,QAAA,OAAA,CAAQ,YAAY,MAAA,CAAO,QAAA;AAAA,MAC7B;AACA,MAAA,IAAI,MAAA,CAAO,eAAe,MAAA,EAAW;AACnC,QAAA,OAAA,CAAQ,UAAA,GAAa,OAAO,UAAA,IAAc,IAAA;AAAA,MAC5C;AACA,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,OAAA,CAAQ,OAAO,MAAA,CAAO,IAAA;AAAA,MACxB;AACA,MAAA,IAAI,OAAO,IAAA,EAAM;AACf,QAAA,OAAA,CAAQ,OAAO,MAAA,CAAO,IAAA;AAAA,MACxB;AACA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,OAAA,CAAQ,OAAO,KAAK,EAAC;AAC7D,QAAA,MAAM,aAAA,GAAgB;AAAA,UACpB,GAAG,eAAA;AAAA,UACH,GAAG,MAAA,CAAO,OAAA;AAAA,UACV,GAAI,eAAA,CAAgB,QAAA,IAAY,OAAO,OAAA,CAAQ,QAAA,GAC3C,EAAE,QAAA,EAAU,EAAE,GAAG,eAAA,CAAgB,UAAU,GAAG,MAAA,CAAO,QAAQ,QAAA,EAAS,KACtE;AAAC,SACP;AACA,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,aAAa,CAAA;AAAA,MAChD;AAEA,MAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,QACpB,SAAA,EAAWA,cAAAA;AAAA,QACX,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,KAAA,MAAW,YAAY,iBAAA,EAAmB;AACxC,MAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAA,CAAc,EAAE,UAAU,CAAA;AACpD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,UACpB,SAAA,EAAWD,aAAAA;AAAA,UACX,MAAA,EAAQ;AAAA,YACN,GAAG,MAAA;AAAA,YACH,IAAI,MAAA,CAAO,EAAA;AAAA,YACX,SAAA,EAAW,IAAI,WAAA,EAAY;AAAA,YAC3B,SAAA,EAAW,OAAO,SAAA,YAAqB,IAAA,GAAO,OAAO,SAAA,CAAU,WAAA,KAAgB,MAAA,CAAO,SAAA;AAAA,YACtF,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY;AAAC;AAChC,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,UAAA,EAAqC;AACxD,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAWC,cAAAA,EAAgB,UAAU,CAAA;AAAA,EACtD;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,QAAA,EAAS,EAAoE;AAChG,IAAA,MAAM,MAAA,GAAkC;AAAA,MACtC,GAAG,QAAA;AAAA,MACH,SAAA,EAAW,SAAS,SAAA,YAAqB,IAAA,GAAO,SAAS,SAAA,CAAU,WAAA,KAAgB,QAAA,CAAS,SAAA;AAAA,MAC5F,SAAA,EAAW,SAAS,SAAA,YAAqB,IAAA,GAAO,SAAS,SAAA,CAAU,WAAA,KAAgB,QAAA,CAAS;AAAA,KAC9F;AAEA,IAAA,IAAI,QAAA,CAAS,aAAa,MAAA,EAAW;AACnC,MAAA,MAAA,CAAO,WAAW,QAAA,CAAS,QAAA;AAAA,IAC7B;AACA,IAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACpB,SAAA,EAAWC,eAAAA;AAAA,MACX;AAAA,KACD,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAA,CAAgB,EAAE,UAAA,EAAW,EAAgE;AACjG,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAE5B;AAAA,MACA,SAAA,EAAWA,eAAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA,EAAI,UAAA;AAAW,KACxB,CAAA;AACD,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,QAAA,EAAU,OAAO,MAAA,CAAO,QAAA,KAAa,WAAW,eAAA,CAAgB,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,QAAA;AAAA,MAC1F,SAAA,EAAW,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,MACpC,SAAA,EAAW,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS;AAAA,KACtC;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CAAe;AAAA,IACnB,UAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF,EAIiC;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,YAAY,CAAA;AAC1D,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,OAAA,GAA+B;AAAA,QACnC,EAAA,EAAI,UAAA;AAAA,QACJ,aAAA;AAAA,QACA,QAAA,EAAU,YAAY,EAAC;AAAA,QACvB,SAAA,EAAW,GAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACb;AACA,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,EAAE,QAAA,EAAU,SAAS,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,OAAA,GAA+B;AAAA,MACnC,GAAG,QAAA;AAAA,MACH,aAAA,EAAe,iBAAiB,QAAA,CAAS,aAAA;AAAA,MACzC,QAAA,EAAU;AAAA,QACR,GAAG,QAAA,CAAS,QAAA;AAAA,QACZ,GAAG;AAAA,OACL;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,MAAM,IAAA,CAAK,YAAA,CAAa,EAAE,QAAA,EAAU,SAAS,CAAA;AAC7C,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEQ,aAAA,CAAc,QAAA,EAA6B,KAAA,EAAe,SAAA,EAAsC;AACtG,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAC7B,MAAA,MAAM,MAAA,GACJ,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,cAAc,IAAI,IAAA,CAAM,CAAA,CAAU,KAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,GAAK,EAAU,KAAK,CAAA;AAC3G,MAAA,MAAM,MAAA,GACJ,KAAA,KAAU,WAAA,IAAe,KAAA,KAAU,cAAc,IAAI,IAAA,CAAM,CAAA,CAAU,KAAK,CAAC,CAAA,CAAE,OAAA,EAAQ,GAAK,EAAU,KAAK,CAAA;AAC3G,MAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,WAAW,QAAA,EAAU;AAC5D,QAAA,OAAO,SAAA,KAAc,KAAA,GAAQ,MAAA,GAAS,MAAA,GAAS,MAAA,GAAS,MAAA;AAAA,MAC1D;AACA,MAAA,OAAO,cAAc,KAAA,GACjB,MAAA,CAAO,MAAM,CAAA,CAAE,cAAc,MAAA,CAAO,MAAM,CAAC,CAAA,GAC3C,OAAO,MAAM,CAAA,CAAE,aAAA,CAAc,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACjD,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,oBAAA,CACZ,OAAA,EACA,gBAAA,EAC4B;AAC5B,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAElC,IAAA,MAAM,WAA8B,EAAC;AACrC,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,IAAA,MAAM,mBAAA,GAAsB,IAAI,GAAA,CAA6B,gBAAA,IAAoB,EAAE,CAAA;AACnF,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAAsD;AAEhF,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,IAAI,CAAA,IAAK,mBAAA,EAAqB;AAClD,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,aAAA,CAAc,IAAI,GAAA,CAAI,EAAA,EAAI,EAAE,QAAA,EAAU,KAAK,CAAA;AAAA,MAC7C;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,eAAe,OAAA,EAAS;AACjC,MAAA,IAAI,cAAA;AACJ,MAAA,IAAI,MAAA;AAEJ,MAAA,MAAM,MAAA,GAAS,aAAA,CAAc,GAAA,CAAI,WAAA,CAAY,EAAE,CAAA;AAC/C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAA,GAAS,MAAA,CAAO,GAAA;AAChB,QAAA,cAAA,GAAiB,MAAA,CAAO,QAAA;AAAA,MAC1B;AAGA,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,GAAA,CAAI,WAA0BD,cAAAA,EAAgB;AAAA,UAC3E,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,YAAY,EAAA;AAAG,SACtC,CAAA;AACD,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,MAAA,GAAS,YAAY,CAAC,CAAA;AACtB,UAAA,cAAA,GAAiB,MAAA,CAAQ,SAAA;AAEzB,UAAA,IAAI,cAAA,IAAkB,CAAC,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,EAAG;AAC9D,YAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,GAAA,CAAI,WAA0BA,cAAAA,EAAgB;AAAA,cAC/E,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,cAAA;AAAe,aAC7C,CAAA;AACD,YAAA,mBAAA,CAAoB,GAAA,CAAI,gBAAgB,eAAe,CAAA;AACvD,YAAA,KAAA,MAAW,OAAO,eAAA,EAAiB;AACjC,cAAA,aAAA,CAAc,IAAI,GAAA,CAAI,EAAA,EAAI,EAAE,QAAA,EAAU,cAAA,EAAgB,KAAK,CAAA;AAAA,YAC7D;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,cAAA,EAAgB;AAEhC,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AAC9B,QAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAC7C,QAAA,UAAA,CAAW,GAAA,CAAI,OAAO,EAAE,CAAA;AAAA,MAC1B;AAEA,MAAA,MAAM,gBAAA,GAAmB,mBAAA,CAAoB,GAAA,CAAI,cAAc,KAAK,EAAC;AACrE,MAAA,MAAM,KAAK,kBAAA,CAAmB;AAAA,QAC5B,WAAA;AAAA,QACA,WAAA,EAAa,gBAAA;AAAA,QACb,cAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,mBAAmB,OAAA,EAAyC;AAClE,IAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,OAAA,CAAQ,OAAO,CAAA;AAC/C,IAAA,OAAO;AAAA,MACL,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,UAAU,OAAA,CAAQ,SAAA;AAAA,MAClB,OAAA;AAAA,MACA,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,SAAA,EAAW,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AAAA,MACrC,UAAA,EAAY,QAAQ,UAAA,IAAc;AAAA,KACpC;AAAA,EACF;AAAA,EAEA,MAAc,kBAAA,CAAmB;AAAA,IAC/B,WAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,EAMkB;AAChB,IAAA,MAAM,OAAA,GAAU,WAAA,CACb,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,CAAI,cAAc,cAAc,CAAA,CAC9C,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,EAAS,CAAA;AAEnF,IAAA,MAAM,cAAc,OAAA,CAAQ,SAAA,CAAU,SAAO,GAAA,CAAI,EAAA,KAAO,YAAY,EAAE,CAAA;AACtE,IAAA,IAAI,gBAAgB,EAAA,EAAI;AAExB,IAAA,IAAI,YAAY,oBAAA,EAAsB;AACpC,MAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAA,GAAc,YAAY,oBAAoB,CAAA;AACxE,MAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AACxC,QAAA,MAAM,GAAA,GAAM,QAAQ,CAAC,CAAA;AACrB,QAAA,IAAI,OAAO,CAAC,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AAClC,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAC1C,UAAA,UAAA,CAAW,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,MAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,OAAA,CAAQ,QAAQ,WAAA,GAAc,WAAA,CAAY,mBAAmB,CAAC,CAAA;AACnF,MAAA,KAAA,IAAS,CAAA,GAAI,WAAA,GAAc,CAAA,EAAG,CAAA,GAAI,KAAK,CAAA,EAAA,EAAK;AAC1C,QAAA,MAAM,GAAA,GAAM,QAAQ,CAAC,CAAA;AACrB,QAAA,IAAI,OAAO,CAAC,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,EAAE,CAAA,EAAG;AAClC,UAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmB,GAAG,CAAC,CAAA;AAC1C,UAAA,UAAA,CAAW,GAAA,CAAI,IAAI,EAAE,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAA;AC9mBA,IAAM,mBAAA,GAAsB,GAAA;AAE5B,SAASG,eAAc,KAAA,EAAwB;AAC7C,EAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAC7B;AAEA,SAASR,WAAa,KAAA,EAAqD;AACzE,EAAA,IAAI,KAAA,IAAS,MAAM,OAAO,MAAA;AAC1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,IACzB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,8BAA8B,KAAA,EAAyB;AAC9D,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,OAAO,uLAAA,CAAwL,IAAA;AAAA,IAC7L;AAAA,GACF;AACF;AAEA,SAAS,iBAAiB,QAAA,EAAoC;AAC5D,EAAA,OAAO;AAAA,IACL,IAAI,QAAA,CAAS,EAAA;AAAA,IACb,MAAA,EAAQQ,cAAAA,CAAc,QAAA,CAAS,MAAM,CAAA;AAAA,IACrC,MAAM,QAAA,CAAS,IAAA;AAAA,IACf,QAAA,EAAU,SAAS,QAAA,IAAY,IAAA;AAAA,IAC/B,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,cAAc,QAAA,CAAS,UAAA;AAAA,IACvB,YAAA,EAAc,SAAS,UAAA,IAAc,IAAA;AAAA,IACrC,WAAA,EAAa,SAAS,SAAA,IAAa,IAAA;AAAA,IACnC,YAAY,QAAA,CAAS,SAAA;AAAA,IACrB,YAAY,QAAA,CAAS,SAAA;AAAA,IACrB,UAAU,QAAA,CAAS,QAAA,IAAY,OAAO,IAAA,GAAOA,cAAAA,CAAc,SAAS,QAAQ,CAAA;AAAA,IAC5E,UAAA,EAAY,SAAS,SAAA,IAAa,IAAA;AAAA,IAClC,QAAA,EAAU,SAAS,OAAA,IAAW,IAAA;AAAA,IAC9B,aAAa,QAAA,CAAS,MAAA,CAAO,SAAS,UAAA,GAAa,QAAA,CAAS,OAAO,UAAA,GAAa;AAAA,GAClF;AACF;AAEA,SAAS,iBAAiB,MAAA,EAAkC;AAC1D,EAAA,MAAM,MAAA,GAASR,UAAAA,CAA0B,MAAA,CAAO,MAAM,CAAA;AACtD,EAAA,IAAI,CAAC,UAAU,OAAO,MAAA,KAAW,YAAY,OAAQ,MAAA,CAA8B,SAAS,QAAA,EAAU;AACpG,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,MAAA,CAAO,EAAE,CAAA,mBAAA,CAAqB,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,QAAA,GAAqB;AAAA,IACzB,EAAA,EAAI,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,IACpB,MAAA;AAAA,IACA,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,IACxB,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,IAC5B,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAAA,IACtC,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAAA,IACnC,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,UAAU;AAAA,GACrC;AACA,EAAA,IAAI,OAAO,QAAA,IAAY,IAAA,WAAe,QAAA,GAAW,MAAA,CAAO,OAAO,QAAQ,CAAA;AACvE,EAAA,IAAI,OAAO,YAAA,IAAgB,IAAA,WAAe,UAAA,GAAa,MAAA,CAAO,OAAO,YAAY,CAAA;AACjF,EAAA,IAAI,OAAO,WAAA,IAAe,IAAA,WAAe,SAAA,GAAY,MAAA,CAAO,OAAO,WAAW,CAAA;AAC9E,EAAA,MAAM,QAAA,GAAWA,UAAAA,CAAmC,MAAA,CAAO,QAAQ,CAAA;AACnE,EAAA,IAAI,QAAA,IAAY,IAAA,EAAM,QAAA,CAAS,QAAA,GAAW,QAAA;AAC1C,EAAA,IAAI,OAAO,UAAA,IAAc,IAAA,WAAe,SAAA,GAAY,MAAA,CAAO,OAAO,UAAU,CAAA;AAC5E,EAAA,IAAI,OAAO,QAAA,IAAY,IAAA,WAAe,OAAA,GAAU,MAAA,CAAO,OAAO,QAAQ,CAAA;AACtE,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,gBAAgB,OAAA,EAAyC;AAChE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,OAAA,CAAQ,EAAA,IAAMS,MAAAA,CAAO,UAAA,EAAW;AAAA,IACpC,aAAa,OAAA,CAAQ,UAAA;AAAA,IACrB,QAAQ,OAAA,CAAQ,KAAA;AAAA,IAChB,mBAAmB,OAAA,CAAQ,eAAA;AAAA,IAC3B,gBAAgB,OAAA,CAAQ,YAAA;AAAA,IACxB,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,IAAA;AAAA,IACxB,YAAA,EAAc,QAAQ,WAAA,IAAe,eAAA;AAAA,IACrC,iBAAA,EAAmB,QAAQ,eAAA,IAAmB,IAAA;AAAA,IAC9C,UAAU,OAAA,CAAQ,QAAA,IAAY,OAAO,IAAA,GAAOD,cAAAA,CAAc,QAAQ,QAAQ;AAAA,GAC5E;AACF;AAEA,SAAS,gBAAgB,MAAA,EAAwC;AAC/D,EAAA,MAAM,OAAA,GAA2B;AAAA,IAC/B,IAAI,MAAA,CAAO,EAAA,IAAM,OAAO,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA,GAAI,MAAA;AAAA,IAC5C,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA;AAAA,IACrC,OAAO,MAAA,CAAO,MAAA,IAAU,OAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA;AAAA,IACvD,eAAA,EAAiB,MAAA,CAAO,MAAA,CAAO,iBAAiB,CAAA;AAAA,IAChD,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,cAAc,CAAA;AAAA,IAC1C,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA;AAAA,IAC9B,aACE,MAAA,CAAO,YAAA,IAAgB,OAAQ,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA,GAAuC;AAAA,GACpG;AACA,EAAA,IAAI,OAAO,KAAA,IAAS,IAAA,UAAc,KAAA,GAAQ,MAAA,CAAO,OAAO,KAAK,CAAA;AAC7D,EAAA,IAAI,OAAO,iBAAA,IAAqB,IAAA,UAAc,eAAA,GAAkB,MAAA,CAAO,OAAO,iBAAiB,CAAA;AAC/F,EAAA,MAAM,QAAA,GAAWR,UAAAA,CAAmC,MAAA,CAAO,QAAQ,CAAA;AACnE,EAAA,IAAI,QAAA,IAAY,IAAA,EAAM,OAAA,CAAQ,QAAA,GAAW,QAAA;AACzC,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EACpD,GAAA;AAAA,EAEA,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,QAAA,CAAS,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAAA,EAE5B;AAAA,EAEA,MAAM,mBAAA,GAAqC;AACzC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWF,yBAAyB,CAAA;AAChE,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWD,iBAAiB,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,eAAe,QAAA,EAAuC;AAC1D,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,cAAA,CAAe,gBAAA,CAAiB,QAAQ,CAAC,CAAA;AACxD,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,EAAA,EAAsC;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAA4B,EAAE,SAAA,EAAWA,eAAAA,EAAiB,IAAA,EAAM,EAAE,EAAA,EAAG,EAAG,CAAA;AACtG,IAAA,OAAO,MAAA,GAAS,gBAAA,CAAiB,MAAM,CAAA,GAAI,IAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,cAAc,MAAA,EAA8C;AAChE,IAAA,MAAM,eAA+D,EAAC;AACtE,IAAA,IAAI,MAAA,EAAQ,MAAA,EAAQ,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,MAAA,CAAO,MAAA,EAAQ,CAAA;AAC/E,IAAA,IAAI,MAAA,EAAQ,SAAA,KAAc,MAAA,IAAa,MAAA,CAAO,cAAc,IAAA,EAAM;AAChE,MAAA,YAAA,CAAa,KAAK,EAAE,KAAA,EAAO,cAAc,KAAA,EAAO,MAAA,CAAO,WAAW,CAAA;AAAA,IACpE;AACA,IAAA,IAAI,MAAA,EAAQ,cAAc,IAAA,EAAM;AAC9B,MAAA,YAAA,CAAa,KAAK,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,MAAM,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,MAAA,EAAQ,OAAA,KAAY,MAAA,IAAa,MAAA,CAAO,YAAY,IAAA,EAAM;AAC5D,MAAA,YAAA,CAAa,KAAK,EAAE,KAAA,EAAO,YAAY,KAAA,EAAO,MAAA,CAAO,SAAS,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,MAAA,EAAQ,YAAY,IAAA,EAAM;AAC5B,MAAA,YAAA,CAAa,KAAK,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,MAAM,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,MAAA,EAAQ,UAAA,EAAY,YAAA,CAAa,IAAA,CAAK,EAAE,OAAO,aAAA,EAAe,KAAA,EAAO,MAAA,CAAO,UAAA,EAAY,CAAA;AAE5F,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,MAAM,KAAK,GAAA,CAAI,UAAA;AAAA,QACvBA,eAAAA;AAAA,QACA,YAAA,CAAa,SAAS,YAAA,GAAe,MAAA;AAAA,QACrC,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,6BAAA,CAA8B,KAAK,CAAA,EAAG;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,kEAAA,EAAoE,EAAE,OAAO,CAAA;AAC9F,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,OAAA,CAAQ,UAAU,mBAAA,EAAqB;AACzC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,2EAAA,EAA6E;AAAA,QAC5F,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA;AAE5C,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,SAAA,GAAY,SAAA,CAAU,MAAA;AAAA,QACpB,CAAA,QAAA,KAAY,SAAS,MAAA,CAAO,IAAA,KAAS,cAAc,QAAA,CAAS,MAAA,CAAO,eAAe,MAAA,CAAO;AAAA,OAC3F;AAAA,IACF;AACA,IAAA,IAAI,MAAA,EAAQ,cAAc,IAAA,EAAM;AAC9B,MAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,QAAA,KAAA,CAAa,QAAA,CAAS,SAAA,IAAa,UAAU,IAAI,CAAA;AAAA,IAChF;AACA,IAAA,IAAI,MAAA,EAAQ,YAAY,IAAA,EAAM;AAC5B,MAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAA,QAAA,KAAA,CAAa,QAAA,CAAS,OAAA,IAAW,UAAU,IAAI,CAAA;AAAA,IAC9E;AAEA,IAAA,SAAA,CAAU,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAClD,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAM,gBAAA,CAAiB,GAAA,EAAa,KAAA,EAAqC;AACvE,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,gBAAA,CAAiC,KAAK,KAAK,CAAA;AAAA,IACtE,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,6BAAA,CAA8B,KAAK,CAAA,EAAG;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,sEAAA,EAAwE,EAAE,OAAO,CAAA;AAClG,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAAA,EACrC;AAAA,EAEA,MAAM,cAAA,CAAe,EAAA,EAAY,KAAA,EAA0C;AACzE,IAAA,MAAM,UAAmC,EAAC;AAC1C,IAAA,IAAI,MAAA,IAAU,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,MAAA,EAAW;AAC/C,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,IAAA;AAAA,IACvB;AACA,IAAA,IAAI,cAAc,KAAA,EAAO;AACvB,MAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,QAAA,IAAY,IAAA;AAAA,IACvC;AACA,IAAA,IAAI,QAAA,IAAY,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,MAAA,EAAW;AACnD,MAAA,OAAA,CAAQ,SAAS,KAAA,CAAM,MAAA;AAAA,IACzB;AACA,IAAA,IAAI,YAAA,IAAgB,KAAA,IAAS,KAAA,CAAM,UAAA,KAAe,MAAA,EAAW;AAC3D,MAAA,OAAA,CAAQ,eAAe,KAAA,CAAM,UAAA;AAAA,IAC/B;AACA,IAAA,IAAI,QAAA,IAAY,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,MAAA,EAAW;AACnD,MAAA,OAAA,CAAQ,MAAA,GAASW,cAAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AAC3C,MAAA,OAAA,CAAQ,cAAc,KAAA,CAAM,MAAA,CAAO,SAAS,UAAA,GAAa,KAAA,CAAM,OAAO,UAAA,GAAa,IAAA;AAAA,IACrF;AACA,IAAA,IAAI,cAAc,KAAA,EAAO;AACvB,MAAA,OAAA,CAAQ,WAAW,KAAA,CAAM,QAAA,IAAY,OAAO,IAAA,GAAOA,cAAAA,CAAc,MAAM,QAAQ,CAAA;AAAA,IACjF;AACA,IAAA,IAAI,eAAe,KAAA,EAAO;AACxB,MAAA,OAAA,CAAQ,UAAA,GAAa,MAAM,SAAA,IAAa,IAAA;AAAA,IAC1C;AACA,IAAA,IAAI,aAAa,KAAA,EAAO;AACtB,MAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,OAAA,IAAW,IAAA;AAAA,IACtC;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACrC,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AAC1C,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,EAAE,CAAA,UAAA,CAAY,CAAA;AAAA,MAC5C;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,OAAA,CAAQ,UAAA,GAAa,KAAK,GAAA,EAAI;AAC9B,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,eAA+B,EAAE,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,CAAA;AACpF,IAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,sBAAA,CACJ,EAAA,EACA,kBAAA,EACA,aAAA,EACA,YACA,SAAA,EACkB;AAClB,IAAA,OAAO,IAAA,CAAK,IAAI,sBAAA,CAAuB;AAAA,MACrC,EAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,EAAA,EAA2B;AAC9C,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,sBAAA,CAAuB,EAAE,CAAA;AACxC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAWX,eAAAA,EAAiB,CAAC,EAAE,CAAC,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,cAAc,OAAA,EAAyC;AAC3D,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,qBAAA,CAAsB,eAAA,CAAgB,OAAO,CAAC,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,YAAA,CAAa,UAAA,EAAoB,IAAA,EAA+D;AACpG,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,oBAAA,CAAoC;AAAA,MAClE,UAAA;AAAA,MACA,kBAAkB,IAAA,EAAM,gBAAA;AAAA,MACxB,gBAAgB,IAAA,EAAM,cAAA;AAAA,MACtB,OAAO,IAAA,EAAM;AAAA,KACd,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAI,eAAe,CAAA;AAAA,EACrC;AACF,CAAA;AC7SO,IAAM,YAAA,GAAN,cAA2B,aAAA,CAAc;AAAA,EAC9C,GAAA;AAAA,EACA,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,QAAA,CAAS,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,IAAA,GAAsB;AAAA,EAE5B;AAAA,EAEA,MAAM,mBAAA,GAAqC;AACzC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWa,eAAe,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,EAAA,EAAG,EAAiD;AACvE,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAyB;AAAA,MAClD,SAAA,EAAWA,aAAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA;AAAG,KACZ,CAAA;AACD,IAAA,OAAO,GAAA,GAAM,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,GAAI,IAAA;AAAA,EACvC;AAAA,EAEA,MAAM,UAAU,KAAA,EAA2D;AACzE,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,GAAG,KAAA;AAAA,MACH,EAAA,EAAID,OAAO,UAAA,EAAW;AAAA,MACtB,SAAA,EAAW,IAAI,WAAA,EAAY;AAAA,MAC3B,SAAA,EAAW,IAAI,WAAA;AAAY,KAC7B;AAEA,IAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACpB,SAAA,EAAWC,aAAAA;AAAA,MACX;AAAA,KACD,CAAA;AAED,IAAA,OAAO,EAAE,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA,EAAE;AAAA,EAC3C;AAAA,EAEA,MAAM,oBAAA,CAAqB;AAAA,IACzB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,EAMgC;AAC9B,IAAA,OAAO,KAAK,UAAA,CAAW;AAAA,MACrB,OAAA,EAAS,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,MAAA,EAAO;AAAA,MAClD;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAA,CAAkB;AAAA,IACtB,KAAA;AAAA,IACA;AAAA,GACF,EAGgC;AAC9B,IAAA,OAAO,KAAK,UAAA,CAAW;AAAA,MACrB,OAAA,EAAS,EAAE,KAAA,EAAM;AAAA,MACjB;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,oBAAA,CAAqB;AAAA,IACzB,QAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,EAIgC;AAC9B,IAAA,OAAO,KAAK,UAAA,CAAW;AAAA,MACrB,OAAA,EAAS,EAAE,QAAA,EAAU,UAAA,EAAW;AAAA,MAChC;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,UAAA,CAAW;AAAA,IACvB,OAAA;AAAA,IACA;AAAA,GACF,EAGgC;AAC9B,IAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAM,IAAIC,WAAAA;AAAA,QACR;AAAA,UACE,EAAA,EAAIC,oBAAAA,CAAqB,QAAA,EAAU,aAAA,EAAe,oBAAoB,CAAA;AAAA,UACtE,QAAQC,WAAAA,CAAY,OAAA;AAAA,UACpB,UAAUC,aAAAA,CAAc;AAAA,SAC1B;AAAA,QACA,IAAI,MAAM,mBAAmB;AAAA,OAC/B;AAAA,IACF;AAEA,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAwBJ,eAAe,MAAS,CAAA;AAC5E,IAAA,MAAM,QAAA,GAAW,IAAA,CACd,MAAA,CAAO,CAAA,GAAA,KAAQ,QAAQ,QAAA,GAAW,GAAA,CAAI,QAAA,KAAa,OAAA,CAAQ,QAAA,GAAW,IAAK,CAAA,CAC3E,MAAA,CAAO,SAAQ,OAAA,CAAQ,QAAA,GAAW,GAAA,CAAI,QAAA,KAAa,OAAA,CAAQ,QAAA,GAAW,IAAK,CAAA,CAC3E,OAAO,CAAA,GAAA,KAAQ,OAAA,CAAQ,UAAA,GAAa,GAAA,CAAI,UAAA,KAAe,OAAA,CAAQ,UAAA,GAAa,IAAK,EACjF,MAAA,CAAO,CAAA,GAAA,KAAQ,OAAA,CAAQ,KAAA,GAAQ,GAAA,CAAI,KAAA,KAAU,OAAA,CAAQ,KAAA,GAAQ,IAAK,CAAA,CAClE,MAAA,CAAO,CAAA,GAAA,KAAQ,OAAA,CAAQ,MAAA,GAAS,GAAA,CAAI,MAAA,KAAW,OAAA,CAAQ,SAAS,IAAK,CAAA,CACrE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAEnF,IAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAK,GAAI,UAAA;AAC1B,IAAA,MAAM,YAAA,GAAe,OAAA,KAAY,KAAA,GAAQ,QAAA,CAAS,MAAA,GAAS,OAAA;AAC3D,IAAA,MAAM,KAAA,GAAQ,OAAA,KAAY,KAAA,GAAQ,CAAA,GAAI,IAAA,GAAO,YAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,OAAA,KAAY,KAAA,GAAQ,QAAA,CAAS,SAAS,KAAA,GAAQ,YAAA;AAC1D,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,CAAE,GAAA,CAAI,CAAA,GAAA,KAAO,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AAEzE,IAAA,OAAO;AAAA,MACL,UAAA,EAAY;AAAA,QACV,OAAO,QAAA,CAAS,MAAA;AAAA,QAChB,IAAA;AAAA,QACA,OAAA;AAAA,QACA,OAAA,EAAS,OAAA,KAAY,KAAA,GAAQ,KAAA,GAAQ,MAAM,QAAA,CAAS;AAAA,OACtD;AAAA,MACA,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEQ,YAAY,GAAA,EAAgC;AAClD,IAAA,OAAO;AAAA,MACL,GAAI,GAAA;AAAA,MACJ,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,MACjC,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS;AAAA,KACnC;AAAA,EACF;AACF,CAAA;AC7IO,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EACpD,GAAA;AAAA,EACA,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,EAAM;AACN,IAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,QAAA,CAAS,MAAM,CAAA;AAAA,EAChC;AAAA,EAEA,yBAAA,GAAqC;AACnC,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAAsB;AAAA,EAE5B;AAAA,EAEA,MAAM,mBAAA,GAAqC;AACzC,IAAA,MAAM,KAAK,GAAA,CAAI,UAAA,CAAW,EAAE,SAAA,EAAWX,yBAAyB,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,sBAAsB,KAAA,EAMgC;AAC1D,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,KAAA,EAIgB;AACxC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,uBAAA,CAAwB;AAAA,IAC5B,YAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,EAOkB;AAChB,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AAErB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAoC;AAAA,MAClE,SAAA,EAAWA,uBAAAA;AAAA,MACX,IAAA,EAAM,EAAE,aAAA,EAAe,YAAA,EAAc,QAAQ,KAAA;AAAM,KACpD,CAAA;AAED,IAAA,MAAM,IAAA,CAAK,IAAI,MAAA,CAAO;AAAA,MACpB,SAAA,EAAWA,uBAAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,aAAA,EAAe,YAAA;AAAA,QACf,MAAA,EAAQ,KAAA;AAAA,QACR,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,QAAA,EAAU,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,QACjC,SAAA,EAAW,QAAA,EAAU,SAAA,KAAc,SAAA,GAAY,IAAI,IAAA,CAAK,SAAS,CAAA,CAAE,WAAA,EAAY,GAAI,GAAA,CAAI,WAAA,EAAY,CAAA;AAAA,QACnG,SAAA,EAAW,YAAY,IAAI,IAAA,CAAK,SAAS,CAAA,CAAE,WAAA,EAAY,GAAI,GAAA,CAAI,WAAA;AAAY;AAC7E,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,oBAAA,CAAqB;AAAA,IACzB,YAAA;AAAA,IACA;AAAA,GACF,EAGqC;AACnC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAqD;AAAA,MAC9E,SAAA,EAAWA,uBAAAA;AAAA,MACX,IAAA,EAAM,EAAE,aAAA,EAAe,YAAA,EAAc,QAAQ,KAAA;AAAM,KACpD,CAAA;AAED,IAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,IAAA,OAAO,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,GAAW,KAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,GAAI,KAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,EAC9G;AAAA,EAEA,MAAM,gBAAA,CAAiB,IAAA,GAAqC,EAAC,EAA0B;AACrF,IAAA,MAAM,EAAE,cAAc,QAAA,EAAU,MAAA,EAAQ,SAAS,IAAA,EAAM,UAAA,EAAY,QAAO,GAAI,IAAA;AAG9E,IAAA,MAAM,UAAmD,EAAC;AAC1D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,cAAc,CAAA;AAAA,IAC9D;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAA,CAAQ,KAAK,EAAE,KAAA,EAAO,YAAA,EAAc,KAAA,EAAO,YAAY,CAAA;AAAA,IACzD;AAEA,IAAA,IAAI,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA;AAAA,MACxBA,uBAAAA;AAAA,MACA,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,OAAA,GAAU;AAAA,KACjC;AACA,IAAA,IAAI,QAAA,EAAU,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,SAAO,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,CAAE,OAAA,EAAQ,IAAK,QAAA,CAAS,SAAS,CAAA;AAC/F,IAAA,IAAI,MAAA,EAAQ,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,SAAO,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA,CAAE,OAAA,EAAQ,IAAK,MAAA,CAAO,SAAS,CAAA;AAC3F,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,GAAO,IAAA,CAAK,OAAO,CAAA,GAAA,KAAO;AACxB,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA;AACxC,QAAA,OAAO,SAAS,MAAA,KAAW,MAAA;AAAA,MAC7B,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,KAAY,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,SAAS,CAAA;AAErF,IAAA,IAAI,OAAA,KAAY,MAAA,IAAa,IAAA,KAAS,MAAA,EAAW;AAC/C,MAAA,MAAM,UAAA,GAAagB,gBAAAA,CAAiB,OAAA,EAAS,MAAA,CAAO,gBAAgB,CAAA;AACpE,MAAA,MAAM,SAAS,IAAA,GAAO,UAAA;AACtB,MAAA,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,MAAA,GAAS,UAAU,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,IAAA,GAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,MAC3C,cAAc,GAAA,CAAI,aAAA;AAAA,MAClB,OAAO,GAAA,CAAI,MAAA;AAAA,MACX,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA;AAAA,MACjC,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,MACjC,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,MACjC,YAAY,GAAA,CAAI;AAAA,KAClB,CAAE,CAAA;AAEF,IAAA,OAAO,EAAE,MAAM,KAAA,EAAM;AAAA,EACvB;AAAA,EAEA,MAAM,kBAAA,CAAmB;AAAA,IACvB,KAAA;AAAA,IACA;AAAA,GACF,EAGgC;AAC9B,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,YAAA,EAAc;AAEhB,MAAA,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAA4B;AAAA,QACjD,SAAA,EAAWhB,uBAAAA;AAAA,QACX,IAAA,EAAM,EAAE,aAAA,EAAe,YAAA,EAAc,QAAQ,KAAA;AAAM,OACpD,CAAA;AAAA,IACH,CAAA,MAAO;AAEL,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,WAA2BA,uBAAAA,EAAyB;AAAA,QAC9E,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,KAAA;AAAM,OACjC,CAAA;AACD,MAAA,KAAA,GAAQ,IAAA,CAAK,CAAC,CAAA,IAAK,IAAA;AAAA,IACrB;AACA,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,IAAA,OAAO;AAAA,MACL,cAAc,KAAA,CAAM,aAAA;AAAA,MACpB,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,QAAA,EAAU,IAAA,CAAK,cAAA,CAAe,KAAK,CAAA;AAAA,MACnC,SAAA,EAAW,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAAA,MACnC,SAAA,EAAW,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAAA,MACnC,YAAY,KAAA,CAAM;AAAA,KACpB;AAAA,EACF;AAAA,EAEA,MAAM,qBAAA,CAAsB,EAAE,KAAA,EAAO,cAAa,EAA2D;AAC3G,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,CAAWA,uBAAAA,EAAyB,CAAC,GAAG,YAAY,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC,CAAA;AAAA,EACjF;AAAA,EAEA,MAAc,MAAA,CAAO,YAAA,EAAsB,KAAA,EAA+C;AAExF,IAAA,OAAO,IAAA,CAAK,IAAI,IAAA,CAA4B;AAAA,MAC1C,SAAA,EAAWA,uBAAAA;AAAA,MACX,IAAA,EAAM,EAAE,aAAA,EAAe,YAAA,EAAc,QAAQ,KAAA;AAAM,KACpD,CAAA;AAAA,EACH;AAAA,EAEQ,eAAe,GAAA,EAAgE;AACrF,IAAA,IAAI,CAAC,IAAI,QAAA,EAAU;AACjB,MAAA,OAAO;AAAA,QACL,SAAS,EAAC;AAAA,QACV,aAAa,EAAC;AAAA,QACd,iBAAiB,EAAC;AAAA,QAClB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,QACpB,gBAAgB,EAAC;AAAA,QACjB,cAAc,EAAC;AAAA,QACf,qBAAqB,EAAC;AAAA,QACtB,OAAO,EAAC;AAAA,QACR,cAAc,EAAC;AAAA,QACf,MAAA,EAAQ,SAAA;AAAA,QACR,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,EAAU;AACpC,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,KAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,EAChD;AACF,CAAA;;;AC7JA,IAAMiB,eAAAA,GAAiB,CAAC,MAAA,KAA2F;AACjH,EAAA,OAAO,QAAA,IAAY,MAAA;AACrB,CAAA;AAoBO,IAAM,WAAA,GAAN,cAA0B,oBAAA,CAAqB;AAAA,EAGpD,YAAY,MAAA,EAA2B;AACrC,IAAA,KAAA,CAAM,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,aAAA,EAAe,WAAA,EAAa,MAAA,CAAO,WAAA,EAAa,CAAA;AAG5F,IAAA,MAAM,MAAA,GAASA,gBAAe,MAAM,CAAA,GAAI,OAAO,MAAA,GAAS,IAAI,kBAAkB,MAAM,CAAA;AAEpF,IAAA,MAAM,YAAA,GAAe,EAAE,MAAA,EAAO;AAC9B,IAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,YAAY,CAAA;AAC5C,IAAA,MAAM,SAAA,GAAY,IAAI,eAAA,CAAgB,YAAY,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,YAAY,CAAA;AAE5C,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA,EAAiB,IAAI,qBAAA,CAAsB,YAAY,CAAA;AAAA,MACvD,SAAA,EAAW,IAAI,eAAA,CAAgB,YAAY,CAAA;AAAA,MAC3C,QAAA,EAAU,IAAI,cAAA,CAAe,YAAY;AAAA,KAC3C;AAAA,EACF;AACF;ACtFA,IAAM,oBAAA,GAAuB,uBAAA;AAMtB,IAAM,YAAA,GAAN,cAA2B,YAAA,CAA2B;AAAA,EAC1C,MAAA;AAAA,EAEjB,YAAY,MAAA,EAA4B;AACtC,IAAA,KAAA,CAAM,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,CAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,iBAAA,CAAkB,MAAM,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,SAAA,EAAW,WAAU,EAAqC;AAC5E,IAAA,MAAM,KAAK,WAAA,CAAY;AAAA,MACrB,EAAA,EAAI,QAAA;AAAA,MACJ,SAAA,EAAW,oBAAA;AAAA,MACX,MAAA,EAAQ;AAAA,QACN,EAAA,EAAI,SAAA;AAAA,QACJ,SAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA,EAAQ,QAAA;AAAA,QACR,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY;AACpC,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,SAAA,EAAU,EAAqC;AACjE,IAAA,MAAM,KAAK,WAAA,CAAY;AAAA,MACrB,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,oBAAA;AAAA,MACX,GAAA,EAAK,CAAC,SAAS;AAAA,KAChB,CAAA;AAGD,IAAA,MAAM,KAAK,wBAAA,CAAyB;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS;AAAA,KACtC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAU,EAAqC;AAGnE,IAAA,MAAM,KAAK,wBAAA,CAAyB;AAAA,MAClC,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS;AAAA,KACtC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,GAAiC;AACrC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAA8B;AAAA,MACvD,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,EAAE,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAU,EAA6C;AAC3E,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,WAAA,CAA0C;AAAA,MACjE,EAAA,EAAI,MAAA;AAAA,MACJ,SAAA,EAAW,oBAAA;AAAA,MACX,IAAA,EAAM,EAAE,EAAA,EAAI,SAAA;AAAU,KACvB,CAAA;AACD,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,MAAA,EAAS,SAAS,CAAA,UAAA,CAAY,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAA4B;AAAA,MACrD,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS;AAAA,KACtC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,OAAO,OAAA,CAAQ,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,EAAE,WAAW,OAAA,EAAS,GAAA,EAAK,UAAS,EAAwD;AACvG,IAAA,MAAM,YAAY,GAAA,IAAO,OAAA,CAAQ,IAAI,MAAMP,MAAAA,CAAO,YAAY,CAAA;AAE9D,IAAA,MAAM,OAAA,GAA0B,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAQ,CAAA,MAAO;AAAA,MAC1D,EAAA,EAAI,UAAU,CAAC,CAAA;AAAA,MACf,SAAA,EAAW,MAAA;AAAA,MACX,QAAA,EAAU,WAAW,CAAC;AAAA,KACxB,CAAE,CAAA;AAEF,IAAA,MAAM,KAAK,WAAA,CAAY;AAAA,MACrB,EAAA,EAAI,aAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAAA,MACrC;AAAA,KACD,CAAA;AAED,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAM,KAAA,CAAM;AAAA,IACV,SAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA,GAAO,EAAA;AAAA,IACP,aAAA,GAAgB,KAAA;AAAA,IAChB;AAAA,GACF,EAA4D;AAC1D,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAIE,WAAAA,CAAY;AAAA,QACpB,EAAA,EAAI,mBAAA,CAAoB,QAAA,EAAU,OAAA,EAAS,gBAAgB,CAAA;AAAA,QAC3D,IAAA,EAAM,2GAAA;AAAA,QACN,QAAQE,WAAAA,CAAY,OAAA;AAAA,QACpB,UAAUC,aAAAA,CAAc,IAAA;AAAA,QACxB,OAAA,EAAS,EAAE,SAAA;AAAU,OACtB,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAA4B;AAAA,MACrD,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS;AAAA,KACtC,CAAA;AAED,IAAA,MAAM,WACJ,MAAA,IAAU,CAAC,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,GAChC,OAAA,CAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,KAAK,aAAA,CAAc,MAAA,CAAO,QAAA,EAAU,MAAM,CAAC,CAAA,GACpE,OAAA;AAEN,IAAA,MAAM,MAAA,GAAS,QAAA,CACZ,GAAA,CAAI,CAAA,MAAA,MAAW;AAAA,MACd,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,KAAA,EAAO,gBAAA,CAAiB,WAAA,EAAa,MAAA,CAAO,SAAS,CAAA;AAAA,MACrD,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,GAAI,aAAA,GAAgB,EAAE,QAAQ,MAAA,CAAO,SAAA,KAAc;AAAC,KACtD,CAAE,EACD,MAAA,CAAO,CAAA,MAAA,KAAU,OAAO,QAAA,CAAS,MAAA,CAAO,KAAK,CAAC,CAAA,CAC9C,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA,CAChC,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AAEhB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,aAAa,MAAA,EAAyD;AAC1E,IAAA,MAAM,KAAA,GAAQ,IAAA,IAAQ,MAAA,IAAU,MAAA,CAAO,EAAA;AACvC,IAAA,MAAM,SAAA,GAAY,QAAA,IAAY,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,MAAA;AAG1D,IAAA,IAAI,SAAS,SAAA,EAAW;AACtB,MAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,IACnF;AAGA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AAEtB,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,EAAG;AAC9B,QAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,MAC9E;AAGA,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAA4B;AAAA,QACrD,EAAA,EAAI,YAAA;AAAA,QACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,SAAS;AAAA,OAC7C,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,QAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,KAAK,aAAA,CAAc,MAAA,CAAO,QAAA,EAAU,MAAM,CAAC,CAAA;AAErF,MAAA,KAAA,MAAWG,aAAY,QAAA,EAAU;AAC/B,QAAA,MAAMC,QAAAA,GAAwB;AAAA,UAC5B,GAAGD,SAAAA;AAAA,UACH,GAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,EAAE,WAAW,MAAA,CAAO,MAAA,CAAO,MAAA,EAAO,GAAI,EAAC;AAAA,UAClE,GAAI,MAAA,CAAO,MAAA,CAAO,QAAA,GAAW,EAAE,UAAU,EAAE,GAAGA,SAAAA,CAAS,QAAA,EAAU,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,EAAS,KAAM;AAAC,SACpG;AAEA,QAAA,MAAM,KAAK,WAAA,CAAY;AAAA,UACrB,EAAA,EAAI,QAAA;AAAA,UACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,UAC5C,MAAA,EAAQC;AAAA,SACT,CAAA;AAAA,MACH;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,IACnF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAiC;AAAA,MAC3D,EAAA,EAAI,MAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,MAC5C,IAAA,EAAM,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA;AAAG,KACvB,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,EAAU;AAEf,IAAA,MAAM,OAAA,GAAwB;AAAA,MAC5B,GAAG,QAAA;AAAA,MACH,GAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,EAAE,WAAW,MAAA,CAAO,MAAA,CAAO,MAAA,EAAO,GAAI,EAAC;AAAA,MAClE,GAAI,MAAA,CAAO,MAAA,CAAO,QAAA,GAAW,EAAE,UAAU,EAAE,GAAG,QAAA,CAAS,QAAA,EAAU,GAAG,MAAA,CAAO,MAAA,CAAO,QAAA,EAAS,KAAM;AAAC,KACpG;AAEA,IAAA,MAAM,KAAK,WAAA,CAAY;AAAA,MACrB,EAAA,EAAI,QAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA;AAAA,MAC5C,MAAA,EAAQ;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,SAAA,EAAW,IAAG,EAAsC;AACvE,IAAA,MAAM,KAAK,WAAA,CAAY;AAAA,MACrB,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAAA,MACrC,GAAA,EAAK,CAAC,EAAE;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,MAAA,EAA0D;AAC5E,IAAA,MAAM,EAAE,WAAU,GAAI,MAAA;AACtB,IAAA,MAAM,MAAA,GAAS,KAAA,IAAS,MAAA,IAAU,MAAA,CAAO,GAAA,KAAQ,MAAA;AACjD,IAAA,MAAM,SAAA,GAAY,QAAA,IAAY,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,MAAA;AAG1D,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,IACrF;AAGA,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,SAAA,EAAW;AACzB,MAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,IACrF;AAGA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,MAAM,MAAA,CAAO,GAAA;AACnB,MAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,QAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,MAClF;AACA,MAAA,MAAM,KAAK,WAAA,CAAY;AAAA,QACrB,EAAA,EAAI,YAAA;AAAA,QACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAAA,QACrC;AAAA,OACD,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAM,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,6DAA6D,CAAA;AAAA,IAC/E;AAGA,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAA4B;AAAA,MACrD,EAAA,EAAI,YAAA;AAAA,MACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS;AAAA,KACtC,CAAA;AAED,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,CAAA,MAAA,KAAU,KAAK,aAAA,CAAc,MAAA,CAAO,QAAA,EAAU,MAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,KAAU,OAAO,EAAE,CAAA;AAEjH,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAK,WAAA,CAAY;AAAA,QACrB,EAAA,EAAI,YAAA;AAAA,QACJ,SAAA,EAAW,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA;AAAA,QACrC,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,YAAY,SAAA,EAAmB;AACrC,IAAA,OAAO,iBAAiB,SAAS,CAAA,CAAA;AAAA,EACnC;AAAA,EAEQ,cAAc,MAAA,EAAqD;AACzE,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,KAAW,CAAA;AAAA,EACxC;AAAA,EAEQ,aAAA,CACN,gBACA,MAAA,EACS;AACT,IAAA,IAAI,CAAC,gBAAgB,OAAO,KAAA;AAC5B,IAAA,IAAI,CAAC,UAAU,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,IAAA;AAGxD,IAAA,IAAI,UAAA,IAAc,MAAA,IAAU,MAAA,CAAO,QAAA,EAAU;AAC3C,MAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,cAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA;AAAA,IACrE;AAGA,IAAA,OAAO,IAAA,CAAK,uBAAA,CAAwB,cAAA,EAAgB,MAAM,CAAA;AAAA,EAC5D;AAAA,EAEQ,uBAAA,CAAwB,gBAAqC,UAAA,EAA0C;AAC7G,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AAErD,MAAA,IAAI,GAAA,KAAQ,MAAA,IAAU,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAC,SAA8B,IAAA,CAAK,uBAAA,CAAwB,cAAA,EAAgB,IAAI,CAAC,CAAA;AAC9G,QAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,GAAA,KAAQ,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzC,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,CAAC,SAA8B,IAAA,CAAK,uBAAA,CAAwB,cAAA,EAAgB,IAAI,CAAC,CAAA;AAC7G,QAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjE,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,IAAK,CAAC,KAAA,CAAM,GAAA,CAAI,QAAA,CAAS,cAAA,CAAe,GAAG,CAAC,CAAA,EAAG;AACzE,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClE,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,cAAA,CAAe,GAAG,CAAC,CAAA,EAAG;AACzE,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjE,QAAA,IAAI,EAAE,cAAA,CAAe,GAAG,CAAA,GAAI,MAAM,GAAA,CAAA,EAAM;AACtC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClE,QAAA,IAAI,EAAE,cAAA,CAAe,GAAG,CAAA,IAAK,MAAM,IAAA,CAAA,EAAO;AACxC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjE,QAAA,IAAI,EAAE,cAAA,CAAe,GAAG,CAAA,GAAI,MAAM,GAAA,CAAA,EAAM;AACtC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,UAAU,KAAA,EAAO;AAClE,QAAA,IAAI,EAAE,cAAA,CAAe,GAAG,CAAA,IAAK,MAAM,IAAA,CAAA,EAAO;AACxC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,IAAQ,SAAS,KAAA,EAAO;AACjE,QAAA,IAAI,cAAA,CAAe,GAAG,CAAA,KAAM,KAAA,CAAM,GAAA,EAAK;AACrC,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,cAAA,CAAe,GAAG,CAAA,KAAM,KAAA,EAAO;AACjC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAc,YAAqB,OAAA,EAAqC;AACtE,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,WAAA,CAAe,OAAO,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,yBAAyB,OAAA,EAAwC;AAC7E,IAAA,IAAI,OAAA,GAAU,IAAA;AACd,IAAA,OAAO,OAAA,EAAS;AACd,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,eAAe,OAAO,CAAA;AACzD,MAAA,OAAA,GAAU,SAAS,OAAA,IAAW,KAAA;AAAA,IAChC;AAAA,EACF;AACF;AAEA,SAAS,gBAAA,CAAiB,GAAa,CAAA,EAAqB;AAC1D,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,EAAQ;AACzB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA;AAEX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,CAAE,QAAQ,CAAA,EAAA,EAAK;AACjC,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA;AACrB,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA;AACrB,IAAA,GAAA,IAAO,IAAA,GAAO,IAAA;AACd,IAAA,IAAA,IAAQ,IAAA,GAAO,IAAA;AACf,IAAA,IAAA,IAAQ,IAAA,GAAO,IAAA;AAAA,EACjB;AAEA,EAAA,IAAI,IAAA,KAAS,CAAA,IAAK,IAAA,KAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA,CAAK,KAAK,IAAI,CAAA,CAAA;AAChD;ACjUA,IAAM,oBAAA,GAAuB,cAAA;AAC7B,IAAM,gBAAA,GAAmB,IAAA;AACzB,IAAM,gBAAA,GAAmB,cAAA;AACzB,IAAM,oBAAA,GAAuB,WAAA;AAC7B,IAAM,sBAAA,GAAyB,UAAA;AAC/B,IAAM,qBAAA,GAAwB,2BAAA;AAC9B,IAAM,oBAAA,GAAuB,0BAAA;AAC7B,IAAM,uBAAA,GAA0B,2BAAA;AAChC,IAAM,yBAAA,GAA4B,GAAA;AAClC,IAAM,+BAAA,GAAkC,GAAA;AAExC,SAAS,iBAAiB,KAAA,EAA8C;AACtE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEO,IAAM,kBAAA,GAAN,cAAiCC,YAAAA,CAAuC;AAAA,EAC5D,MAAA;AAAA,EACA,OAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EAEjB,YAAY,MAAA,EAAkC;AAC5C,IAAA,KAAA,CAAM,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,CAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,iBAAA,CAAkB,MAAM,CAAA;AAC1C,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,WAAA;AAAA,MACpB,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,SAAA,EAAW,KAAK,CAAA,KAAM;AAAA,QACzD,SAAA;AAAA,QACA;AAAA,UACE,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,eAAA,EAAiB,MAAM,eAAA,IAAmB,oBAAA;AAAA,UAC1C,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,OAAA,EAAS,MAAM,OAAA,IAAW,gBAAA;AAAA,UAC1B,WAAA,EAAa,MAAM,WAAA,IAAe,gBAAA;AAAA,UAClC,WAAA,EAAa,MAAM,WAAA,IAAe,oBAAA;AAAA,UAClC,aAAA,EAAe,MAAM,aAAA,IAAiB,sBAAA;AAAA,UACtC,YAAA,EAAc,KAAA,CAAM,YAAA,IAAgB;AAAC;AACvC,OACD;AAAA,KACH;AACA,IAAA,IAAA,CAAK,kBAAA,GAAqB,OAAO,kBAAA,IAAsB,qBAAA;AACvD,IAAA,IAAA,CAAK,iBAAA,GAAoB,OAAO,iBAAA,IAAqB,oBAAA;AACrD,IAAA,IAAA,CAAK,oBAAA,GAAuB,OAAO,oBAAA,IAAwB,uBAAA;AAC3D,IAAA,IAAA,CAAK,kBAAA,GAAqB,OAAO,kBAAA,IAAsB,GAAA;AAAA,EACzD;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,WAAW,SAAA,EAAW,MAAA,GAAS,UAAS,EAAqC;AAC/F,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACrC,IAAA,IAAI,KAAA,CAAM,cAAc,SAAA,EAAW;AACjC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,0DAA0D,SAAS,CAAA,MAAA,EAAS,KAAA,CAAM,SAAS,oBAAoB,SAAS,CAAA,eAAA;AAAA,OAC1H;AAAA,IACF;AACA,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,MAAM,IAAI,MAAM,4FAA4F,CAAA;AAAA,IAC9G;AAAA,EACF;AAAA,EAEA,MAAM,WAAA,GAAiC;AACrC,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AAAA,EACjC;AAAA,EAEA,MAAM,aAAA,CAAc,EAAE,SAAA,EAAU,EAA6C;AAC3E,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACrC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAAsD,KAAK,iBAAA,EAAmB;AAAA,MAC7G,EAAA,EAAI,UAAA;AAAA,MACJ,MAAA,EAAQ,KAAA;AAAA,MACR,YAAY,IAAA,CAAK;AAAA,KAClB,CAAA;AAED,IAAA,IAAI,OAAO,cAAA,EAAgB;AACzB,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,QACV,CAAA,6CAAA,EAAgD,SAAS,CAAA,UAAA,EAAa,IAAA,CAAK,kBAAkB,CAAA,2BAAA;AAAA,OAC/F;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,EAAE,SAAA,EAAW,SAAS,GAAA,EAAK,QAAA,EAAU,cAAa,EAAiD;AAC9G,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,IAAI,MAAM,2FAA2F,CAAA;AAAA,IAC7G;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACrC,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,MAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ;AACxC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,uCAAA,EAA0C,GAAA,CAAI,MAAM,CAAA,6BAAA,EAAgC,QAAQ,MAAM,CAAA,CAAA;AAAA,OACpG;AAAA,IACF;AACA,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ;AAClD,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,4CAAA,EAA+C,QAAA,CAAS,MAAM,CAAA,6BAAA,EAAgC,QAAQ,MAAM,CAAA,CAAA;AAAA,OAC9G;AAAA,IACF;AACA,IAAA,IAAI,QAAA,IAAY,CAAC,QAAA,CAAS,KAAA,CAAM,gBAAgB,CAAA,EAAG;AACjD,MAAA,MAAM,IAAI,MAAM,2EAA2E,CAAA;AAAA,IAC7F;AACA,IAAA,MAAM,YAAY,GAAA,IAAO,OAAA,CAAQ,IAAI,MAAMV,MAAAA,CAAO,YAAY,CAAA;AAC9D,IAAA,IAAI,IAAI,GAAA,CAAI,SAAS,CAAA,CAAE,IAAA,KAAS,UAAU,MAAA,EAAQ;AAChD,MAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,IACjE;AAEA,IAAA,KAAA,IAAS,QAAQ,CAAA,EAAG,KAAA,GAAQ,OAAA,CAAQ,MAAA,EAAQ,SAAS,+BAAA,EAAiC;AACpF,MAAA,MAAM,MAAM,KAAA,GAAQ,+BAAA;AACpB,MAAA,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,oBAAA,EAAsB;AAAA,QACxD,EAAA,EAAI,QAAA;AAAA,QACJ,MAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAK,SAAA,CAAU,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QAC/B,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA;AAAA,QACjC,GAAI,QAAA,GAAW,EAAE,QAAA,EAAU,QAAA,CAAS,MAAM,KAAA,EAAO,GAAG,CAAA,EAAE,GAAI;AAAC,OAC5D,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEA,MAAM,KAAA,CAAM;AAAA,IACV,SAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA,GAAO,EAAA;AAAA,IACP,aAAA,GAAgB,KAAA;AAAA,IAChB;AAAA,GACF,EAAwE;AACtE,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAIE,WAAAA,CAAY;AAAA,QACpB,EAAA,EAAIS,mBAAAA,CAAoB,eAAA,EAAiB,OAAA,EAAS,gBAAgB,CAAA;AAAA,QAClE,IAAA,EAAM,2DAAA;AAAA,QACN,QAAQP,WAAAA,CAAY,OAAA;AAAA,QACpB,UAAUC,aAAAA,CAAc,IAAA;AAAA,QACxB,OAAA,EAAS,EAAE,SAAA;AAAU,OACtB,CAAA;AAAA,IACH;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,IAAK,IAAA,GAAO,CAAA,IAAK,OAAO,yBAAA,EAA2B;AACrG,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gEAAA,EAAmE,yBAAyB,CAAA,CAAE,CAAA;AAAA,IAChH;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACrC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,KAAK,CAAA;AACtD,IAAA,MAAM,gBAAgB,MAAM,IAAA,CAAK,MAAA,CAAO,UAAA,CAAiC,KAAK,kBAAA,EAAoB;AAAA,MAChG,MAAA,EAAQ,KAAA;AAAA,MACR,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,GAAI,YAAA,GAAe,EAAE,MAAA,EAAQ,YAAA,KAAiB;AAAC,KAChD,CAAA;AAED,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAExC,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,MAAA,CAAO,SAAA,CAA8C,KAAK,iBAAA,EAAmB;AAAA,MACnG,EAAA,EAAI,gBAAA;AAAA,MACJ,MAAA,EAAQ,KAAA;AAAA,MACR,GAAA,EAAK,aAAA,CAAc,GAAA,CAAI,CAAA,MAAA,KAAU,OAAO,EAAE,CAAA;AAAA,MAC1C;AAAA,KACD,CAAA;AACD,IAAA,MAAM,gBAAA,GAAmB,IAAI,GAAA,CAAI,aAAA,CAAc,GAAA,CAAI,CAAA,MAAA,KAAU,CAAC,MAAA,CAAO,EAAA,EAAI,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAEvF,IAAA,OAAO,IAAA,CAAK,QAAQ,CAAA,GAAA,KAAO;AACzB,MAAA,IAAI,CAAC,GAAA,EAAK,GAAA,EAAK,OAAO,EAAC;AACvB,MAAA,OAAO;AAAA,QACL;AAAA,UACE,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UAC7B,OAAO,gBAAA,CAAiB,GAAA,CAAI,OAAO,GAAA,CAAI,GAAG,CAAC,CAAA,IAAK,CAAA;AAAA,UAChD,QAAA,EAAU,GAAA,CAAI,KAAA,CAAM,aAAa,CAAA;AAAA,UACjC,GAAI,gBAAgB,EAAE,MAAA,EAAQ,IAAI,KAAA,CAAM,WAAW,CAAA,EAAE,GAAI;AAAC;AAC5D,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,MAAA,EAAqE;AACtF,IAAA,IAAI,QAAA,IAAY,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW;AACrD,MAAA,MAAM,IAAI,MAAM,gGAAgG,CAAA;AAAA,IAClH;AACA,IAAA,IAAI,MAAA,CAAO,OAAO,QAAA,KAAa,MAAA,IAAa,CAAC,gBAAA,CAAiB,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAG;AACrF,MAAA,MAAM,IAAI,MAAM,2EAA2E,CAAA;AAAA,IAC7F;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAC5C,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,oBAAA,EAAsB;AAAA,MACxD,EAAA,EAAI,YAAA;AAAA,MACJ,MAAA,EAAQ,KAAA;AAAA,MACR,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,MACtB,QAAA,EAAU,OAAO,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAA,CAAa,EAAE,SAAA,EAAW,IAAG,EAAsC;AACvE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AACrC,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,oBAAA,EAAsB;AAAA,MACxD,EAAA,EAAI,aAAA;AAAA,MACJ,MAAA,EAAQ,KAAA;AAAA,MACR,GAAA,EAAK,CAAC,EAAE;AAAA,KACT,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,MAAA,EAAsE;AACxF,IAAA,IAAI,MAAA,CAAO,WAAW,MAAA,EAAW;AAC/B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,GAAA,CAAI,WAAW,CAAA,EAAG;AAC1C,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,SAAS,CAAA;AAC5C,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,oBAAA,EAAsB;AAAA,MACxD,EAAA,EAAI,aAAA;AAAA,MACJ,MAAA,EAAQ,KAAA;AAAA,MACR,KAAK,MAAA,CAAO;AAAA,KACb,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,WAAA,CAAY,EAAE,SAAA,EAAU,EAAqC;AACjE,IAAA,IAAA,CAAK,SAAS,SAAS,CAAA;AACvB,IAAA,MAAM,IAAI,MAAM,+FAA+F,CAAA;AAAA,EACjH;AAAA,EAEQ,SAAS,SAAA,EAAmB;AAClC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AACpC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,mBAAA,CAAqB,CAAA;AAAA,IAC9E;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CACN,QACA,KAAA,EACgC;AAChC,IAAA,IAAI,CAAC,UAAU,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,KAAW,GAAG,OAAO,MAAA;AAExD,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAC3B,MAAA,MAAM,OAAA,GAAU,OAAO,GAAA,CAAI,GAAA,CAAI,YAAU,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC3E,MAAA,OAAO,EAAE,KAAK,OAAA,EAAQ;AAAA,IACxB;AAEA,IAAA,MAAM,cAAc,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA,GAAI,OAAO,QAAA,GAAW,MAAA;AACtE,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,KAAK,CAAA;AAAA,EAC/C;AAAA,EAEQ,cAAA,CACN,QACA,KAAA,EACoB;AACpB,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,CAAE,MAAA,CAAO,CAAC,GAAGO,MAAK,CAAA,KAAMA,MAAAA,KAAU,MAAS,CAAA;AAChF,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnC,IAAA,IAAI,CAAC,KAAA,CAAM,YAAA,CAAa,QAAA,CAAS,KAAK,CAAA,EAAG;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,KAAK,CAAA,mDAAA,CAAqD,CAAA;AAAA,IAChH;AAEA,IAAA,MAAM,KAAA,GACJ,OAAO,QAAA,KAAa,QAAA,IAAY,aAAa,IAAA,IAAQ,KAAA,IAAS,QAAA,GAC1D,QAAA,CAAS,GAAA,GACR,QAAA;AAEP,IAAA,IAAI,CAAC,CAAC,QAAA,EAAU,QAAA,EAAU,SAAS,CAAA,CAAE,QAAA,CAAS,OAAO,KAAK,CAAA,IAAK,KAAA,KAAU,IAAA,EAAM;AAC7E,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AAAA,EAEQ,WAAW,MAAA,EAA0E;AAC3F,IAAA,OAAO,KAAA,CAAM,OAAA,CAAS,MAAA,CAA6B,GAAG,CAAA;AAAA,EACxD;AAAA,EAEQ,iBAAiB,MAAA,EAA6E;AACpG,IAAA,MAAM,WAAY,MAAA,CAAkC,QAAA;AACpD,IAAA,OAAO,OAAO,aAAa,QAAA,IAAY,QAAA,KAAa,QAAQ,CAAC,KAAA,CAAM,QAAQ,QAAQ,CAAA;AAAA,EACrF;AACF","file":"index.js","sourcesContent":["import type { CacheRequest, CacheResponse } from './types';\n\nexport type ConvexCacheClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n cacheFunction?: string;\n requestTimeoutMs?: number;\n};\n\nexport type RawCacheResult<T = unknown> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_CACHE_FUNCTION = 'mastra/cache:handle';\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\nconst trimTrailingSlashes = (value: string): string => {\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return value.slice(0, end);\n};\n\nexport class ConvexCacheClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly cacheFunction: string;\n private readonly requestTimeoutMs: number;\n\n constructor({ deploymentUrl, adminAuthToken, cacheFunction, requestTimeoutMs }: ConvexCacheClientConfig) {\n const normalizedDeploymentUrl = deploymentUrl.trim();\n const normalizedAdminAuthToken = adminAuthToken.trim();\n const normalizedCacheFunction = cacheFunction?.trim();\n\n if (!normalizedDeploymentUrl) {\n throw new Error('ConvexCacheClient: deploymentUrl is required.');\n }\n\n if (!normalizedAdminAuthToken) {\n throw new Error('ConvexCacheClient: adminAuthToken is required.');\n }\n\n if (requestTimeoutMs !== undefined && requestTimeoutMs < 0) {\n throw new Error('ConvexCacheClient: requestTimeoutMs must be greater than or equal to 0.');\n }\n\n this.deploymentUrl = trimTrailingSlashes(normalizedDeploymentUrl);\n this.adminAuthToken = normalizedAdminAuthToken;\n this.cacheFunction = normalizedCacheFunction || DEFAULT_CACHE_FUNCTION;\n this.requestTimeoutMs = requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n }\n\n async callCacheRaw<T = unknown>(request: CacheRequest): Promise<RawCacheResult<T>> {\n const controller = this.requestTimeoutMs > 0 ? new AbortController() : undefined;\n const timeoutId = controller ? setTimeout(() => controller.abort(), this.requestTimeoutMs) : undefined;\n let response: Response;\n\n try {\n response = await fetch(`${this.deploymentUrl}/api/mutation`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path: this.cacheFunction,\n args: request,\n format: 'json',\n }),\n signal: controller?.signal,\n });\n } catch (error) {\n if (controller?.signal.aborted) {\n throw new Error(`Convex cache request timed out after ${this.requestTimeoutMs} ms.`);\n }\n throw error;\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n }\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as {\n status?: string;\n errorMessage?: string;\n errorCode?: string;\n code?: string;\n details?: Record<string, unknown>;\n value?: CacheResponse;\n };\n\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).code = result.errorCode ?? result.code;\n (error as any).details = result.details;\n throw error;\n }\n\n const cacheResponse = result.value as CacheResponse;\n if (!cacheResponse?.ok) {\n const errResponse = cacheResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex cache error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: cacheResponse.result as T,\n hasMore: cacheResponse.hasMore,\n };\n }\n\n async callCache<T = unknown>(request: CacheRequest): Promise<T> {\n const { result } = await this.callCacheRaw<T>(request);\n return result;\n }\n}\n","import { MastraServerCache } from '@mastra/core/cache';\n\nimport { ConvexCacheClient } from './client';\nimport type { ConvexCacheClientConfig } from './client';\n\nexport type ConvexServerCacheConfig = {\n /**\n * Prefix applied to all cache keys. `clear()` removes rows whose stored\n * prefix exactly matches this value.\n */\n keyPrefix?: string;\n /**\n * Default cache TTL in milliseconds. Set to 0 to disable expiry.\n */\n ttlMs?: number;\n} & ({ client: ConvexCacheClient } | ConvexCacheClientConfig);\n\nconst DEFAULT_KEY_PREFIX = 'mastra:cache:';\nconst DEFAULT_TTL_MS = 300_000;\nconst MAX_CACHE_OPERATION_BATCHES = 1000;\n\nconst isClientConfig = (\n config: ConvexServerCacheConfig,\n): config is ConvexServerCacheConfig & { client: ConvexCacheClient } => 'client' in config;\n\nexport class ConvexServerCache extends MastraServerCache {\n private readonly client: ConvexCacheClient;\n private readonly keyPrefix: string;\n private readonly ttlMs: number;\n\n constructor(config: ConvexServerCacheConfig) {\n super({ name: 'ConvexServerCache' });\n\n this.client = isClientConfig(config) ? config.client : new ConvexCacheClient(config);\n this.keyPrefix = config.keyPrefix ?? DEFAULT_KEY_PREFIX;\n this.ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;\n }\n\n private getKey(key: string): string {\n return `${this.keyPrefix}${key}`;\n }\n\n private getExpiresAt(ttlMs?: number): number | null {\n const effectiveTtlMs = ttlMs ?? this.ttlMs;\n return effectiveTtlMs > 0 ? Date.now() + effectiveTtlMs : null;\n }\n\n private async callUntilSettled<T>(request: () => Parameters<ConvexCacheClient['callCacheRaw']>[0]): Promise<T> {\n for (let batch = 0; batch < MAX_CACHE_OPERATION_BATCHES; batch += 1) {\n const response = await this.client.callCacheRaw({\n ...request(),\n });\n if (!response.hasMore) return response.result as T;\n }\n\n throw new Error(`ConvexServerCache operation exceeded ${MAX_CACHE_OPERATION_BATCHES} batches.`);\n }\n\n async get(key: string): Promise<unknown> {\n return this.callUntilSettled(() => ({\n op: 'get',\n key: this.getKey(key),\n }));\n }\n\n async set(key: string, value: unknown, ttlMs?: number): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'set',\n key: this.getKey(key),\n keyPrefix: this.keyPrefix,\n value,\n expiresAt: this.getExpiresAt(ttlMs),\n }));\n }\n\n async listLength(key: string): Promise<number> {\n return this.callUntilSettled(() => ({\n op: 'listLength',\n key: this.getKey(key),\n }));\n }\n\n async listPush(key: string, value: unknown): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'listPush',\n key: this.getKey(key),\n keyPrefix: this.keyPrefix,\n value,\n expiresAt: this.getExpiresAt(),\n }));\n }\n\n async listFromTo(key: string, from: number, to: number = -1): Promise<unknown[]> {\n return this.callUntilSettled(() => ({\n op: 'listFromTo',\n key: this.getKey(key),\n from,\n to,\n }));\n }\n\n async delete(key: string): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'delete',\n key: this.getKey(key),\n }));\n }\n\n async clear(): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'clear',\n keyPrefix: this.keyPrefix,\n }));\n }\n\n async increment(key: string): Promise<number> {\n return this.callUntilSettled(() => ({\n op: 'increment',\n key: this.getKey(key),\n keyPrefix: this.keyPrefix,\n expiresAt: this.getExpiresAt(),\n }));\n }\n}\n\nexport { ConvexCacheClient, type ConvexCacheClientConfig };\n","import type { StorageRequest, StorageResponse } from './types';\n\nexport type ConvexAdminClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n};\n\n/** Response from callStorageRaw that includes batch info */\nexport type RawStorageResult<T = any> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_STORAGE_FUNCTION = 'mastra/storage:handle';\n\ntype ConvexFunctionKind = 'action' | 'mutation' | 'query';\n\ntype ConvexHttpSuccess<T> = {\n status: 'success';\n value: T;\n logLines?: string[];\n};\n\ntype ConvexHttpResponse<T> =\n | {\n status: 'success';\n value: T;\n logLines?: string[];\n }\n | {\n status: 'error';\n errorMessage: string;\n errorData?: unknown;\n logLines?: string[];\n };\n\nexport class ConvexAdminClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly storageFunction: string;\n\n constructor({ deploymentUrl, adminAuthToken, storageFunction }: ConvexAdminClientConfig) {\n if (!deploymentUrl) {\n throw new Error('ConvexAdminClient: deploymentUrl is required.');\n }\n\n if (!adminAuthToken) {\n throw new Error('ConvexAdminClient: adminAuthToken is required.');\n }\n\n this.deploymentUrl = deploymentUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.adminAuthToken = adminAuthToken;\n this.storageFunction = storageFunction ?? DEFAULT_STORAGE_FUNCTION;\n }\n\n /**\n * Call storage and return the full response including hasMore flag.\n * Use this for operations that may need multiple calls (e.g., clearTable).\n */\n async callStorageRaw<T = any>(request: StorageRequest): Promise<RawStorageResult<T>> {\n const result = await this.callConvexFunction<StorageResponse>('mutation', this.storageFunction, request);\n\n const storageResponse = result.value;\n if (!storageResponse?.ok) {\n const errResponse = storageResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex storage error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: storageResponse.result as T,\n hasMore: storageResponse.hasMore,\n };\n }\n\n async callStorage<T = any>(request: StorageRequest): Promise<T> {\n const { result } = await this.callStorageRaw<T>(request);\n return result;\n }\n\n async callAction<T = any>(path: string, args: Record<string, any>): Promise<T> {\n return this.callFunction<T>('action', path, args);\n }\n\n async callMutation<T = any>(path: string, args: Record<string, any>): Promise<T> {\n return this.callFunction<T>('mutation', path, args);\n }\n\n async callQuery<T = any>(path: string, args: Record<string, any>): Promise<T> {\n return this.callFunction<T>('query', path, args);\n }\n\n private async callFunction<T>(kind: ConvexFunctionKind, path: string, args: Record<string, any>): Promise<T> {\n const result = await this.callConvexFunction<T>(kind, path, args);\n return result.value;\n }\n\n private async callConvexFunction<T>(\n kind: ConvexFunctionKind,\n path: string,\n args: Record<string, any>,\n ): Promise<ConvexHttpSuccess<T>> {\n const url = `${this.deploymentUrl}/api/${kind}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path,\n args,\n format: 'json',\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as ConvexHttpResponse<T>;\n\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).details = result.errorData;\n throw error;\n }\n\n if (result.status !== 'success') {\n throw new Error(`Convex ${kind} ${path} returned an invalid response`);\n }\n\n if (result.value === undefined) {\n throw new Error(`Convex ${kind} ${path} returned no value`);\n }\n\n return result;\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraBase } from '@mastra/core/base';\nimport { TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES } from '@mastra/core/storage';\n\nimport { ConvexAdminClient } from '../client';\nimport type { EqualityFilter, IndexHint } from '../types';\n\n/**\n * Configuration for standalone domain usage.\n * Accepts either:\n * 1. An existing ConvexAdminClient\n * 2. Config to create a new client internally\n */\nexport type ConvexDomainConfig = ConvexDomainClientConfig | ConvexDomainRestConfig;\n\n/**\n * Pass an existing ConvexAdminClient\n */\nexport interface ConvexDomainClientConfig {\n client: ConvexAdminClient;\n}\n\n/**\n * Pass config to create a new ConvexAdminClient internally\n */\nexport interface ConvexDomainRestConfig {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n}\n\n/**\n * Resolves ConvexDomainConfig to a ConvexAdminClient.\n * Handles creating a new client if config is provided.\n */\nexport function resolveConvexConfig(config: ConvexDomainConfig): ConvexAdminClient {\n // Existing client\n if ('client' in config) {\n return config.client;\n }\n\n // Config to create new client\n return new ConvexAdminClient(config);\n}\n\nexport class ConvexDB extends MastraBase {\n constructor(private readonly client: ConvexAdminClient) {\n super({ name: 'convex-db' });\n }\n\n async hasColumn(_table: string, _column: string): Promise<boolean> {\n return true;\n }\n\n async createTable({\n tableName,\n schema: _schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n // No-op for Convex; schema is managed server-side via schema.ts\n this.logger.debug(`ConvexDB: createTable called for ${tableName} (schema managed server-side)`);\n }\n\n async alterTable({\n tableName,\n schema: _schema,\n ifNotExists: _ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op for Convex; schema is managed server-side via schema.ts\n this.logger.debug(`ConvexDB: alterTable called for ${tableName} (schema managed server-side)`);\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'clearTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'dropTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.client.callStorage({\n op: 'insert',\n tableName,\n record: this.normalizeRecord(tableName, record),\n });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n await this.client.callStorage({\n op: 'batchInsert',\n tableName,\n records: records.map(record => this.normalizeRecord(tableName, record)),\n });\n }\n\n async patch({\n tableName,\n id,\n record,\n }: {\n tableName: TABLE_NAMES;\n id: string;\n record: Record<string, any>;\n }): Promise<boolean> {\n return this.client.callStorage<boolean>({\n op: 'patch',\n tableName,\n id,\n record: this.normalizePatch(record),\n });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n const result = await this.client.callStorage<R | null>({\n op: 'load',\n tableName,\n keys,\n });\n\n return result;\n }\n\n public async queryTable<R>(\n tableName: TABLE_NAMES,\n filters?: EqualityFilter[],\n indexHint?: IndexHint,\n limit?: number,\n ): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'queryTable',\n tableName,\n filters,\n indexHint,\n limit,\n });\n }\n\n public async deleteMany(tableName: TABLE_NAMES, ids: string[]): Promise<void> {\n if (ids.length === 0) return;\n await this.client.callStorage({\n op: 'deleteMany',\n tableName,\n ids,\n });\n }\n\n public async createSchedule(record: Record<string, any>): Promise<void> {\n if (!record.id) {\n throw new Error(`Schedule is missing an id`);\n }\n\n await this.client.callStorage({\n op: 'createSchedule',\n tableName: TABLE_SCHEDULES,\n record: this.normalizeRecord(TABLE_SCHEDULES, record),\n });\n }\n\n public async recordScheduleTrigger(record: Record<string, any>): Promise<void> {\n if (!record.id) {\n throw new Error(`Schedule trigger is missing an id`);\n }\n\n await this.client.callStorage({\n op: 'recordScheduleTrigger',\n tableName: TABLE_SCHEDULE_TRIGGERS,\n record: this.normalizeRecord(TABLE_SCHEDULE_TRIGGERS, record),\n });\n }\n\n public async listDueSchedules<R>(now: number, limit?: number): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'listDueSchedules',\n tableName: TABLE_SCHEDULES,\n now,\n limit,\n });\n }\n\n public async updateScheduleNextFire({\n id,\n expectedNextFireAt,\n newNextFireAt,\n lastFireAt,\n lastRunId,\n }: {\n id: string;\n expectedNextFireAt: number;\n newNextFireAt: number;\n lastFireAt: number;\n lastRunId: string;\n }): Promise<boolean> {\n return this.client.callStorage<boolean>({\n op: 'updateScheduleNextFire',\n tableName: TABLE_SCHEDULES,\n id,\n expectedNextFireAt,\n newNextFireAt,\n lastFireAt,\n lastRunId,\n });\n }\n\n public async updateSchedule<R>({ id, patch }: { id: string; patch: Record<string, any> }): Promise<R> {\n return this.client.callStorage<R>({\n op: 'updateSchedule',\n tableName: TABLE_SCHEDULES,\n id,\n patch,\n });\n }\n\n public async listScheduleTriggers<R>({\n scheduleId,\n fromActualFireAt,\n toActualFireAt,\n limit,\n }: {\n scheduleId: string;\n fromActualFireAt?: number;\n toActualFireAt?: number;\n limit?: number;\n }): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'listScheduleTriggers',\n tableName: TABLE_SCHEDULE_TRIGGERS,\n scheduleId,\n fromActualFireAt,\n toActualFireAt,\n limit,\n });\n }\n\n public async deleteScheduleTriggers(scheduleId: string): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'deleteScheduleTriggers',\n tableName: TABLE_SCHEDULE_TRIGGERS,\n scheduleId,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n private normalizeRecord(tableName: TABLE_NAMES, record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && !normalized.id) {\n const runId = normalized.run_id || normalized.runId;\n const workflowName = normalized.workflow_name || normalized.workflowName;\n normalized.id = workflowName ? `${workflowName}-${runId}` : runId;\n }\n\n if (!normalized.id) {\n normalized.id = crypto.randomUUID();\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n\n private normalizePatch(record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n}\n","import type { BackgroundTask, TaskFilter, TaskListResult, UpdateBackgroundTask } from '@mastra/core/background-tasks';\nimport { BackgroundTasksStorage, TABLE_BACKGROUND_TASKS } from '@mastra/core/storage';\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype StoredTask = {\n id: string;\n status: BackgroundTask['status'];\n tool_call_id: string;\n tool_name: string;\n agent_id: string;\n run_id: string;\n thread_id: string | null;\n resource_id: string | null;\n args: string;\n result: string | null;\n error: string | null;\n suspend_payload: string | null;\n retry_count: number;\n max_retries: number;\n timeout_ms: number;\n createdAt: string;\n startedAt: string | null;\n suspendedAt: string | null;\n completedAt: string | null;\n};\n\ntype StoredTaskPatch = Partial<Omit<StoredTask, 'id' | 'createdAt'>>;\n\nfunction serializeJson(v: unknown): string | null {\n if (v === undefined || v === null) return null;\n return JSON.stringify(v);\n}\n\nfunction serializeRequiredJson(v: unknown): string {\n return JSON.stringify(v ?? {});\n}\n\nfunction toStored(task: BackgroundTask): StoredTask {\n return {\n id: task.id,\n status: task.status,\n tool_call_id: task.toolCallId,\n tool_name: task.toolName,\n agent_id: task.agentId,\n run_id: task.runId,\n thread_id: task.threadId ?? null,\n resource_id: task.resourceId ?? null,\n args: serializeRequiredJson(task.args),\n result: serializeJson(task.result),\n error: serializeJson(task.error),\n suspend_payload: serializeJson(task.suspendPayload),\n retry_count: task.retryCount,\n max_retries: task.maxRetries,\n timeout_ms: task.timeoutMs,\n createdAt: task.createdAt.toISOString(),\n startedAt: task.startedAt?.toISOString() ?? null,\n suspendedAt: task.suspendedAt?.toISOString() ?? null,\n completedAt: task.completedAt?.toISOString() ?? null,\n };\n}\n\nfunction toStoredPatch(update: UpdateBackgroundTask): StoredTaskPatch {\n const patch: StoredTaskPatch = {};\n if (update.status !== undefined) patch.status = update.status;\n if ('result' in update) patch.result = serializeJson(update.result);\n if ('error' in update) patch.error = serializeJson(update.error);\n if ('suspendPayload' in update) patch.suspend_payload = serializeJson(update.suspendPayload);\n if (update.retryCount !== undefined) patch.retry_count = update.retryCount;\n if (update.maxRetries !== undefined) patch.max_retries = update.maxRetries;\n if (update.timeoutMs !== undefined) patch.timeout_ms = update.timeoutMs;\n if ('startedAt' in update) patch.startedAt = update.startedAt?.toISOString() ?? null;\n if ('suspendedAt' in update) patch.suspendedAt = update.suspendedAt?.toISOString() ?? null;\n if ('completedAt' in update) patch.completedAt = update.completedAt?.toISOString() ?? null;\n return patch;\n}\n\nfunction legacyOrCurrent<TValue>(stored: Record<string, any>, currentKey: string, legacyKey: string): TValue {\n return currentKey in stored ? stored[currentKey] : stored[legacyKey];\n}\n\nfunction fromStored(stored: StoredTask | Record<string, any>): BackgroundTask {\n const record = stored as Record<string, any>;\n const parseJson = (val: string | null | undefined): any => {\n if (val == null) return undefined;\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n };\n return {\n id: record.id,\n status: record.status,\n toolName: legacyOrCurrent<string>(record, 'tool_name', 'toolName'),\n toolCallId: legacyOrCurrent<string>(record, 'tool_call_id', 'toolCallId'),\n args: parseJson(record.args) ?? {},\n agentId: legacyOrCurrent<string>(record, 'agent_id', 'agentId'),\n threadId: legacyOrCurrent<string | null>(record, 'thread_id', 'threadId') ?? undefined,\n resourceId: legacyOrCurrent<string | null>(record, 'resource_id', 'resourceId') ?? undefined,\n runId: legacyOrCurrent<string>(record, 'run_id', 'runId'),\n result: parseJson(record.result),\n error: parseJson(record.error),\n suspendPayload: parseJson(legacyOrCurrent<string | null>(record, 'suspend_payload', 'suspendPayload')),\n retryCount: legacyOrCurrent<number>(record, 'retry_count', 'retryCount'),\n maxRetries: legacyOrCurrent<number>(record, 'max_retries', 'maxRetries'),\n timeoutMs: legacyOrCurrent<number>(record, 'timeout_ms', 'timeoutMs'),\n createdAt: new Date(record.createdAt),\n startedAt: record.startedAt ? new Date(record.startedAt) : undefined,\n suspendedAt: record.suspendedAt ? new Date(record.suspendedAt) : undefined,\n completedAt: record.completedAt ? new Date(record.completedAt) : undefined,\n };\n}\n\nfunction hasDeleteFilter(filter: TaskFilter): boolean {\n return Boolean(\n (Array.isArray(filter.status) ? filter.status.length > 0 : filter.status) ||\n filter.agentId ||\n filter.threadId ||\n filter.resourceId ||\n filter.toolName ||\n filter.toolCallId ||\n filter.runId ||\n filter.fromDate ||\n filter.toDate,\n );\n}\n\nexport class BackgroundTasksConvex extends BackgroundTasksStorage {\n #db: ConvexDB;\n\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_BACKGROUND_TASKS });\n }\n\n async createTask(task: BackgroundTask): Promise<void> {\n await this.#db.insert({ tableName: TABLE_BACKGROUND_TASKS, record: toStored(task) });\n }\n\n async updateTask(taskId: string, update: UpdateBackgroundTask): Promise<void> {\n const patch = toStoredPatch(update);\n if (Object.keys(patch).length === 0) return;\n\n await this.#db.patch({\n tableName: TABLE_BACKGROUND_TASKS,\n id: taskId,\n record: patch,\n });\n }\n\n async getTask(taskId: string): Promise<BackgroundTask | null> {\n const data = await this.#db.load<StoredTask>({ tableName: TABLE_BACKGROUND_TASKS, keys: { id: taskId } });\n return data ? fromStored(data) : null;\n }\n\n async listTasks(filter: TaskFilter): Promise<TaskListResult> {\n const queryFilters: Array<{ field: string; value: string }> = [];\n\n if (typeof filter.status === 'string') queryFilters.push({ field: 'status', value: filter.status });\n // Convex only supports equality indexes here; multi-status lists still need the in-memory filter below.\n if (Array.isArray(filter.status) && filter.status.length === 1) {\n queryFilters.push({ field: 'status', value: filter.status[0]! });\n }\n if (filter.agentId) queryFilters.push({ field: 'agent_id', value: filter.agentId });\n if (filter.threadId) queryFilters.push({ field: 'thread_id', value: filter.threadId });\n if (filter.resourceId) queryFilters.push({ field: 'resource_id', value: filter.resourceId });\n if (filter.toolName) queryFilters.push({ field: 'tool_name', value: filter.toolName });\n if (filter.toolCallId) queryFilters.push({ field: 'tool_call_id', value: filter.toolCallId });\n if (filter.runId) queryFilters.push({ field: 'run_id', value: filter.runId });\n\n const all = await this.#db.queryTable<StoredTask>(\n TABLE_BACKGROUND_TASKS,\n queryFilters.length > 0 ? queryFilters : undefined,\n );\n let tasks = all.map(fromStored);\n\n if (filter.status) {\n const s = Array.isArray(filter.status) ? filter.status : [filter.status];\n tasks = tasks.filter(t => s.includes(t.status));\n }\n if (filter.agentId) tasks = tasks.filter(t => t.agentId === filter.agentId);\n if (filter.threadId) tasks = tasks.filter(t => t.threadId === filter.threadId);\n if (filter.resourceId) tasks = tasks.filter(t => t.resourceId === filter.resourceId);\n if (filter.toolName) tasks = tasks.filter(t => t.toolName === filter.toolName);\n if (filter.toolCallId) tasks = tasks.filter(t => t.toolCallId === filter.toolCallId);\n if (filter.runId) tasks = tasks.filter(t => t.runId === filter.runId);\n // Date range filtering\n const dateCol = filter.dateFilterBy ?? 'createdAt';\n if (filter.fromDate) {\n tasks = tasks.filter(t => {\n const val = t[dateCol];\n return val != null && val >= filter.fromDate!;\n });\n }\n if (filter.toDate) {\n tasks = tasks.filter(t => {\n const val = t[dateCol];\n return val != null && val < filter.toDate!;\n });\n }\n\n const orderBy = filter.orderBy ?? 'createdAt';\n const dir = filter.orderDirection === 'desc' ? -1 : 1;\n tasks.sort((a, b) => ((a[orderBy]?.getTime() ?? 0) - (b[orderBy]?.getTime() ?? 0)) * dir);\n\n // Capture total before pagination\n const total = tasks.length;\n\n if (filter.page != null && filter.perPage != null) {\n const start = filter.page * filter.perPage;\n tasks = tasks.slice(start, start + filter.perPage);\n } else if (filter.perPage != null) {\n tasks = tasks.slice(0, filter.perPage);\n }\n return { tasks, total };\n }\n\n async deleteTask(taskId: string): Promise<void> {\n await this.#db.deleteMany(TABLE_BACKGROUND_TASKS, [taskId]);\n }\n\n async deleteTasks(filter: TaskFilter): Promise<void> {\n if (!hasDeleteFilter(filter)) return;\n\n const { tasks } = await this.listTasks(filter);\n const taskIds = tasks.map(t => t.id);\n await this.#db.deleteMany(TABLE_BACKGROUND_TASKS, taskIds);\n }\n\n async getRunningCount(): Promise<number> {\n const { total } = await this.listTasks({ status: 'running' });\n return total;\n }\n async getRunningCountByAgent(agentId: string): Promise<number> {\n const { total } = await this.listTasks({ status: 'running', agentId });\n return total;\n }\n}\n","import { ChannelsStorage, TABLE_CHANNEL_CONFIG, TABLE_CHANNEL_INSTALLATIONS } from '@mastra/core/storage';\nimport type { ChannelConfig, ChannelInstallation } from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype ChannelInstallationRecord = {\n id: string;\n platform: string;\n agentId: string;\n status: ChannelInstallation['status'];\n webhookId: string | null;\n data: string;\n configHash: string | null;\n error: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\ntype ChannelConfigRecord = Omit<ChannelConfig, 'updatedAt' | 'data'> & {\n id: string;\n updatedAt: string;\n data: string;\n};\n\nconst statusPriority: Record<ChannelInstallation['status'], number> = {\n active: 0,\n pending: 1,\n error: 2,\n};\n\nfunction stringifyJson(value: Record<string, unknown>): string {\n return JSON.stringify(value);\n}\n\nfunction parseJson(value: string, context: string): Record<string, unknown> {\n try {\n return JSON.parse(value) as Record<string, unknown>;\n } catch (error) {\n throw new Error(`Invalid channel data JSON for ${context}`, { cause: error });\n }\n}\n\nfunction installationToRecord(\n installation: ChannelInstallation,\n existingRecord?: ChannelInstallationRecord | null,\n): ChannelInstallationRecord {\n const now = new Date().toISOString();\n return {\n id: installation.id,\n platform: installation.platform,\n agentId: installation.agentId,\n status: installation.status,\n webhookId: installation.webhookId ?? null,\n data: stringifyJson(installation.data),\n configHash: installation.configHash ?? null,\n error: installation.error ?? null,\n createdAt: existingRecord?.createdAt ?? installation.createdAt?.toISOString() ?? now,\n updatedAt: now,\n };\n}\n\nfunction recordToInstallation(record: ChannelInstallationRecord): ChannelInstallation {\n return {\n id: record.id,\n platform: record.platform,\n agentId: record.agentId,\n status: record.status,\n webhookId: record.webhookId ?? undefined,\n data: parseJson(record.data, `installation ${record.id}`),\n configHash: record.configHash ?? undefined,\n error: record.error ?? undefined,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n}\n\nfunction configToRecord(config: ChannelConfig): ChannelConfigRecord {\n return {\n id: config.platform,\n platform: config.platform,\n data: stringifyJson(config.data),\n updatedAt: config.updatedAt.toISOString(),\n };\n}\n\nfunction recordToConfig(record: ChannelConfigRecord): ChannelConfig {\n return {\n platform: record.platform,\n data: parseJson(record.data, `config ${record.platform}`),\n updatedAt: new Date(record.updatedAt),\n };\n}\n\nfunction sortInstallationsForAgent(a: ChannelInstallation, b: ChannelInstallation): number {\n const statusDiff = statusPriority[a.status] - statusPriority[b.status];\n if (statusDiff !== 0) return statusDiff;\n return b.updatedAt.getTime() - a.updatedAt.getTime();\n}\n\nexport class ChannelsConvex extends ChannelsStorage {\n #db: ConvexDB;\n\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_CHANNEL_INSTALLATIONS });\n await this.#db.clearTable({ tableName: TABLE_CHANNEL_CONFIG });\n }\n\n async saveInstallation(installation: ChannelInstallation): Promise<void> {\n const existingRecord = await this.#db.load<ChannelInstallationRecord | null>({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n keys: { id: installation.id },\n });\n\n await this.#db.insert({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n record: installationToRecord(installation, existingRecord),\n });\n }\n\n async getInstallation(id: string): Promise<ChannelInstallation | null> {\n const record = await this.#db.load<ChannelInstallationRecord | null>({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n keys: { id },\n });\n return record ? recordToInstallation(record) : null;\n }\n\n async getInstallationByAgent(platform: string, agentId: string): Promise<ChannelInstallation | null> {\n const records = await this.#db.queryTable<ChannelInstallationRecord>(TABLE_CHANNEL_INSTALLATIONS, [\n { field: 'platform', value: platform },\n { field: 'agentId', value: agentId },\n ]);\n const [installation] = records.map(recordToInstallation).sort(sortInstallationsForAgent);\n return installation ?? null;\n }\n\n async getInstallationByWebhookId(webhookId: string): Promise<ChannelInstallation | null> {\n const records = await this.#db.queryTable<ChannelInstallationRecord>(TABLE_CHANNEL_INSTALLATIONS, [\n { field: 'webhookId', value: webhookId },\n ]);\n const [installation] = records\n .map(recordToInstallation)\n .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n return installation ?? null;\n }\n\n async listInstallations(platform: string): Promise<ChannelInstallation[]> {\n const records = await this.#db.queryTable<ChannelInstallationRecord>(TABLE_CHANNEL_INSTALLATIONS, [\n { field: 'platform', value: platform },\n ]);\n return records.map(recordToInstallation).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n }\n\n async deleteInstallation(id: string): Promise<void> {\n await this.#db.deleteMany(TABLE_CHANNEL_INSTALLATIONS, [id]);\n }\n\n async saveConfig(config: ChannelConfig): Promise<void> {\n await this.#db.insert({\n tableName: TABLE_CHANNEL_CONFIG,\n record: configToRecord(config),\n });\n }\n\n async getConfig(platform: string): Promise<ChannelConfig | null> {\n const record = await this.#db.load<ChannelConfigRecord | null>({\n tableName: TABLE_CHANNEL_CONFIG,\n keys: { id: platform },\n });\n return record ? recordToConfig(record) : null;\n }\n\n async deleteConfig(platform: string): Promise<void> {\n await this.#db.deleteMany(TABLE_CHANNEL_CONFIG, [platform]);\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n filterByDateRange,\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsInput,\n StorageListThreadsOutput,\n StorageResourceType,\n} from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype StoredMessage = {\n id: string;\n thread_id: string;\n content: string;\n role: string;\n type: string;\n createdAt: string;\n resourceId: string | null;\n};\n\nexport class MemoryConvex extends MemoryStorage {\n #db: ConvexDB;\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_THREADS });\n await this.#db.clearTable({ tableName: TABLE_MESSAGES });\n await this.#db.clearTable({ tableName: TABLE_RESOURCES });\n }\n\n async getThreadById({\n threadId,\n resourceId,\n }: {\n threadId: string;\n resourceId?: string;\n }): Promise<StorageThreadType | null> {\n const row = await this.#db.load<\n (Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!row || (resourceId !== undefined && row.resourceId !== resourceId)) return null;\n\n return {\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n await this.#db.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n metadata: thread.metadata ?? {},\n },\n });\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('CONVEX', 'UPDATE_THREAD', 'THREAD_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n });\n }\n\n const updated: StorageThreadType = {\n ...existing,\n title,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n await this.saveThread({ thread: updated });\n return updated;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const messages = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: threadId },\n ]);\n await this.#db.deleteMany(\n TABLE_MESSAGES,\n messages.map(msg => msg.id),\n );\n await this.#db.deleteMany(TABLE_THREADS, [threadId]);\n }\n\n async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n\n try {\n // Validate pagination input before normalization\n // This ensures page === 0 when perPageInput === false\n this.validatePaginationInput(page, perPageInput ?? 100);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_THREADS', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page, ...(perPageInput !== undefined && { perPage: perPageInput }) },\n },\n error instanceof Error ? error : new Error('Invalid pagination parameters'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Build query filters\n const queryFilters: Array<{ field: string; value: any }> = [];\n\n if (filter?.resourceId) {\n queryFilters.push({ field: 'resourceId', value: filter.resourceId });\n }\n\n const rows = await this.#db.queryTable<\n Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }\n >(TABLE_THREADS, queryFilters);\n\n let threads = rows.map(row => ({\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n }));\n\n // Apply metadata filters if provided (AND logic)\n if (filter?.metadata && Object.keys(filter.metadata).length > 0) {\n threads = threads.filter(thread => {\n if (!thread.metadata) return false;\n return Object.entries(filter.metadata!).every(([key, value]) => thread.metadata![key] === value);\n });\n }\n\n threads.sort((a, b) => {\n const aValue = a[field];\n const bValue = b[field];\n const aTime = aValue instanceof Date ? aValue.getTime() : new Date(aValue as any).getTime();\n const bTime = bValue instanceof Date ? bValue.getTime() : new Date(bValue as any).getTime();\n return direction === 'ASC' ? aTime - bTime : bTime - aTime;\n });\n\n const total = threads.length;\n const paginated = perPageInput === false ? threads : threads.slice(offset, offset + perPage);\n\n return {\n threads: paginated,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? threadId.join(',') : threadId },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n // When perPage is 0 with no includes, there's nothing to return.\n if (perPage === 0 && (!include || include.length === 0)) {\n return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n // When perPage is 0, we only need included messages — skip full thread load\n if (perPage === 0 && include && include.length > 0) {\n const messages = await this._getIncludedMessages(include);\n const list = new MessageList().add(messages, 'memory');\n return {\n messages: this._sortMessages(list.get.all.db(), field, direction),\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n // Fetch messages from all threads\n let rows: StoredMessage[] = [];\n for (const tid of threadIds) {\n const threadRows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [{ field: 'thread_id', value: tid }]);\n rows.push(...threadRows);\n }\n\n if (resourceId) {\n rows = rows.filter(row => row.resourceId === resourceId);\n }\n\n // Apply date range filter\n rows = filterByDateRange(rows, row => new Date(row.createdAt), filter?.dateRange);\n\n rows.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((a as Record<string, any>)[field]).getTime()\n : (a as Record<string, any>)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((b as Record<string, any>)[field]).getTime()\n : (b as Record<string, any>)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const totalThreadMessages = rows.length;\n const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);\n let messages = paginatedRows.map(row => this.parseStoredMessage(row));\n const messageIds = new Set(messages.map(msg => msg.id));\n\n if (include && include.length > 0) {\n // Pre-populate cache with already-fetched thread messages, but only when\n // rows represent a full unfiltered thread snapshot. When resourceId or\n // dateRange filters are active, the rows are a subset and would cause\n // addContextMessages() to compute neighbors from a truncated snapshot.\n const preloadedThreads = new Map<string, StoredMessage[]>();\n if (!resourceId && !filter?.dateRange) {\n for (const tid of threadIds) {\n preloadedThreads.set(\n tid,\n rows.filter(r => r.thread_id === tid),\n );\n }\n }\n\n const includedMessages = await this._getIncludedMessages(include, preloadedThreads);\n for (const msg of includedMessages) {\n if (!messageIds.has(msg.id)) {\n messages.push(msg);\n messageIds.add(msg.id);\n }\n }\n }\n\n messages = this._sortMessages(messages, field, direction);\n\n const hasMore =\n include && include.length > 0\n ? new Set(messages.filter(m => m.threadId === threadId).map(m => m.id)).size < totalThreadMessages\n : perPageInput === false\n ? false\n : offset + perPage < totalThreadMessages;\n\n return {\n messages,\n total: totalThreadMessages,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) {\n return { messages: [] };\n }\n const rows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const filtered = rows.filter(row => messageIds.includes(row.id)).map(row => this.parseStoredMessage(row));\n const list = new MessageList().add(filtered, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const normalized = messages.map(message => {\n if (!message.threadId) {\n throw new Error('Thread ID is required');\n }\n if (!message.resourceId) {\n throw new Error('Resource ID is required');\n }\n const createdAt = message.createdAt instanceof Date ? message.createdAt.toISOString() : message.createdAt;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content),\n role: message.role,\n type: message.type || 'v2',\n createdAt,\n resourceId: message.resourceId,\n };\n });\n\n await this.#db.batchInsert({\n tableName: TABLE_MESSAGES,\n records: normalized,\n });\n\n // Update thread updatedAt timestamps for all affected threads\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean) as string[])];\n const now = new Date();\n for (const threadId of threadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.#db.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const existing = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const updated: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n for (const update of messages) {\n const current = existing.find(row => row.id === update.id);\n if (!current) continue;\n\n // Track old thread for timestamp update\n affectedThreadIds.add(current.thread_id);\n\n if (update.threadId) {\n // Track new thread for timestamp update when moving messages\n affectedThreadIds.add(update.threadId);\n current.thread_id = update.threadId;\n }\n if (update.resourceId !== undefined) {\n current.resourceId = update.resourceId ?? null;\n }\n if (update.role) {\n current.role = update.role;\n }\n if (update.type) {\n current.type = update.type;\n }\n if (update.content) {\n const existingContent = safelyParseJSON(current.content) || {};\n const mergedContent = {\n ...existingContent,\n ...update.content,\n ...(existingContent.metadata && update.content.metadata\n ? { metadata: { ...existingContent.metadata, ...update.content.metadata } }\n : {}),\n };\n current.content = JSON.stringify(mergedContent);\n }\n\n await this.#db.insert({\n tableName: TABLE_MESSAGES,\n record: current,\n });\n updated.push(this.parseStoredMessage(current));\n }\n\n // Update thread updatedAt timestamps for all affected threads\n const now = new Date();\n for (const threadId of affectedThreadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.#db.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n return updated;\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.#db.deleteMany(TABLE_MESSAGES, messageIds);\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const record: Record<string, unknown> = {\n ...resource,\n createdAt: resource.createdAt instanceof Date ? resource.createdAt.toISOString() : resource.createdAt,\n updatedAt: resource.updatedAt instanceof Date ? resource.updatedAt.toISOString() : resource.updatedAt,\n };\n // Only include metadata if it's defined\n if (resource.metadata !== undefined) {\n record.metadata = resource.metadata;\n }\n await this.#db.insert({\n tableName: TABLE_RESOURCES,\n record,\n });\n return resource;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const record = await this.#db.load<\n (Omit<StorageResourceType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!record) return null;\n\n return {\n ...record,\n metadata: typeof record.metadata === 'string' ? safelyParseJSON(record.metadata) : record.metadata,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existing = await this.getResourceById({ resourceId });\n const now = new Date();\n if (!existing) {\n const created: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n return this.saveResource({ resource: created });\n }\n\n const updated: StorageResourceType = {\n ...existing,\n workingMemory: workingMemory ?? existing.workingMemory,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: now,\n };\n\n await this.saveResource({ resource: updated });\n return updated;\n }\n\n private _sortMessages(messages: MastraDBMessage[], field: string, direction: string): MastraDBMessage[] {\n return messages.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((b as any)[field]).getTime() : (b as any)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n }\n\n private async _getIncludedMessages(\n include: NonNullable<StorageListMessagesInput['include']>,\n preloadedThreads?: Map<string, StoredMessage[]>,\n ): Promise<MastraDBMessage[]> {\n if (include.length === 0) return [];\n\n const messages: MastraDBMessage[] = [];\n const messageIds = new Set<string>();\n const threadMessagesCache = new Map<string, StoredMessage[]>(preloadedThreads ?? []);\n const cachedTargets = new Map<string, { threadId: string; row: StoredMessage }>();\n\n for (const [threadId, rows] of threadMessagesCache) {\n for (const row of rows) {\n cachedTargets.set(row.id, { threadId, row });\n }\n }\n\n for (const includeItem of include) {\n let targetThreadId: string | undefined;\n let target: StoredMessage | undefined;\n\n const cached = cachedTargets.get(includeItem.id);\n if (cached) {\n target = cached.row;\n targetThreadId = cached.threadId;\n }\n\n // If not found, query by message ID directly\n if (!target) {\n const messageRows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'id', value: includeItem.id },\n ]);\n if (messageRows.length > 0) {\n target = messageRows[0];\n targetThreadId = target!.thread_id;\n\n if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {\n const otherThreadRows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: targetThreadId },\n ]);\n threadMessagesCache.set(targetThreadId, otherThreadRows);\n for (const row of otherThreadRows) {\n cachedTargets.set(row.id, { threadId: targetThreadId, row });\n }\n }\n }\n }\n\n if (!target || !targetThreadId) continue;\n\n if (!messageIds.has(target.id)) {\n messages.push(this.parseStoredMessage(target));\n messageIds.add(target.id);\n }\n\n const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];\n await this.addContextMessages({\n includeItem,\n allMessages: targetThreadRows,\n targetThreadId,\n messageIds,\n messages,\n });\n }\n\n return messages;\n }\n\n private parseStoredMessage(message: StoredMessage): MastraDBMessage {\n const content = safelyParseJSON(message.content);\n return {\n id: message.id,\n threadId: message.thread_id,\n content,\n role: message.role as MastraDBMessage['role'],\n type: message.type,\n createdAt: new Date(message.createdAt),\n resourceId: message.resourceId ?? undefined,\n };\n }\n\n private async addContextMessages({\n includeItem,\n allMessages,\n targetThreadId,\n messageIds,\n messages,\n }: {\n includeItem: NonNullable<StorageListMessagesInput['include']>[number];\n allMessages: StoredMessage[];\n targetThreadId: string;\n messageIds: Set<string>;\n messages: MastraDBMessage[];\n }): Promise<void> {\n const ordered = allMessages\n .filter(row => row.thread_id === targetThreadId)\n .sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n const targetIndex = ordered.findIndex(row => row.id === includeItem.id);\n if (targetIndex === -1) return;\n\n if (includeItem.withPreviousMessages) {\n const start = Math.max(0, targetIndex - includeItem.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n\n if (includeItem.withNextMessages) {\n const end = Math.min(ordered.length, targetIndex + includeItem.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n }\n}\n","import crypto from 'node:crypto';\n\nimport type {\n Schedule,\n ScheduleFilter,\n ScheduleStatus,\n ScheduleTarget,\n ScheduleTrigger,\n ScheduleTriggerListOptions,\n ScheduleUpdate,\n} from '@mastra/core/storage';\nimport { SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS } from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype ScheduleRecord = {\n id: string;\n target: ScheduleTarget | string;\n cron: string;\n timezone?: string | null;\n status: ScheduleStatus;\n next_fire_at: number;\n last_fire_at?: number | null;\n last_run_id?: string | null;\n created_at: number;\n updated_at: number;\n metadata?: Record<string, unknown> | string | null;\n owner_type?: string | null;\n owner_id?: string | null;\n workflow_id?: string | null;\n};\n\ntype TriggerRecord = {\n id: string;\n schedule_id: string;\n run_id?: string | null;\n scheduled_fire_at: number;\n actual_fire_at: number;\n outcome: ScheduleTrigger['outcome'];\n error?: string | null;\n trigger_kind?: ScheduleTrigger['triggerKind'] | null;\n parent_trigger_id?: string | null;\n metadata?: Record<string, unknown> | string | null;\n};\n\nconst SCHEDULE_LIST_LIMIT = 8_000;\n\nfunction serializeJson(value: unknown): string {\n return JSON.stringify(value);\n}\n\nfunction parseJson<T>(value: T | string | null | undefined): T | undefined {\n if (value == null) return undefined;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as T;\n } catch {\n return value as T;\n }\n }\n return value;\n}\n\nfunction isMissingSchedulesSchemaError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return /(?:Table|table)\\s+(?:[\"'`])?(?:mastra_schedules|mastra_schedule_triggers)(?:[\"'`])?\\s+(?:is\\s+)?(?:not\\s+in\\s+the\\s+schema|not\\s+found\\s+in\\s+schema|not\\s+found|does\\s+not\\s+exist)/i.test(\n message,\n );\n}\n\nfunction scheduleToRecord(schedule: Schedule): ScheduleRecord {\n return {\n id: schedule.id,\n target: serializeJson(schedule.target),\n cron: schedule.cron,\n timezone: schedule.timezone ?? null,\n status: schedule.status,\n next_fire_at: schedule.nextFireAt,\n last_fire_at: schedule.lastFireAt ?? null,\n last_run_id: schedule.lastRunId ?? null,\n created_at: schedule.createdAt,\n updated_at: schedule.updatedAt,\n metadata: schedule.metadata == null ? null : serializeJson(schedule.metadata),\n owner_type: schedule.ownerType ?? null,\n owner_id: schedule.ownerId ?? null,\n workflow_id: schedule.target.type === 'workflow' ? schedule.target.workflowId : null,\n };\n}\n\nfunction recordToSchedule(record: ScheduleRecord): Schedule {\n const target = parseJson<ScheduleTarget>(record.target);\n if (!target || typeof target !== 'object' || typeof (target as { type?: unknown }).type !== 'string') {\n throw new Error(`Schedule ${record.id} has invalid target`);\n }\n\n const schedule: Schedule = {\n id: String(record.id),\n target,\n cron: String(record.cron),\n status: String(record.status) as ScheduleStatus,\n nextFireAt: Number(record.next_fire_at),\n createdAt: Number(record.created_at),\n updatedAt: Number(record.updated_at),\n };\n if (record.timezone != null) schedule.timezone = String(record.timezone);\n if (record.last_fire_at != null) schedule.lastFireAt = Number(record.last_fire_at);\n if (record.last_run_id != null) schedule.lastRunId = String(record.last_run_id);\n const metadata = parseJson<Record<string, unknown>>(record.metadata);\n if (metadata != null) schedule.metadata = metadata;\n if (record.owner_type != null) schedule.ownerType = String(record.owner_type) as Schedule['ownerType'];\n if (record.owner_id != null) schedule.ownerId = String(record.owner_id);\n return schedule;\n}\n\nfunction triggerToRecord(trigger: ScheduleTrigger): TriggerRecord {\n return {\n id: trigger.id ?? crypto.randomUUID(),\n schedule_id: trigger.scheduleId,\n run_id: trigger.runId,\n scheduled_fire_at: trigger.scheduledFireAt,\n actual_fire_at: trigger.actualFireAt,\n outcome: trigger.outcome,\n error: trigger.error ?? null,\n trigger_kind: trigger.triggerKind ?? 'schedule-fire',\n parent_trigger_id: trigger.parentTriggerId ?? null,\n metadata: trigger.metadata == null ? null : serializeJson(trigger.metadata),\n };\n}\n\nfunction recordToTrigger(record: TriggerRecord): ScheduleTrigger {\n const trigger: ScheduleTrigger = {\n id: record.id != null ? String(record.id) : undefined,\n scheduleId: String(record.schedule_id),\n runId: record.run_id != null ? String(record.run_id) : null,\n scheduledFireAt: Number(record.scheduled_fire_at),\n actualFireAt: Number(record.actual_fire_at),\n outcome: String(record.outcome) as ScheduleTrigger['outcome'],\n triggerKind:\n record.trigger_kind != null ? (String(record.trigger_kind) as ScheduleTrigger['triggerKind']) : 'schedule-fire',\n };\n if (record.error != null) trigger.error = String(record.error);\n if (record.parent_trigger_id != null) trigger.parentTriggerId = String(record.parent_trigger_id);\n const metadata = parseJson<Record<string, unknown>>(record.metadata);\n if (metadata != null) trigger.metadata = metadata;\n return trigger;\n}\n\nexport class SchedulesConvex extends SchedulesStorage {\n #db: ConvexDB;\n\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SCHEDULE_TRIGGERS });\n await this.#db.clearTable({ tableName: TABLE_SCHEDULES });\n }\n\n async createSchedule(schedule: Schedule): Promise<Schedule> {\n await this.#db.createSchedule(scheduleToRecord(schedule));\n return schedule;\n }\n\n async getSchedule(id: string): Promise<Schedule | null> {\n const record = await this.#db.load<ScheduleRecord | null>({ tableName: TABLE_SCHEDULES, keys: { id } });\n return record ? recordToSchedule(record) : null;\n }\n\n async listSchedules(filter?: ScheduleFilter): Promise<Schedule[]> {\n const queryFilters: Array<{ field: string; value: string | null }> = [];\n if (filter?.status) queryFilters.push({ field: 'status', value: filter.status });\n if (filter?.ownerType !== undefined && filter.ownerType !== null) {\n queryFilters.push({ field: 'owner_type', value: filter.ownerType });\n }\n if (filter?.ownerType === null) {\n queryFilters.push({ field: 'owner_type', value: null });\n }\n if (filter?.ownerId !== undefined && filter.ownerId !== null) {\n queryFilters.push({ field: 'owner_id', value: filter.ownerId });\n }\n if (filter?.ownerId === null) {\n queryFilters.push({ field: 'owner_id', value: null });\n }\n if (filter?.workflowId) queryFilters.push({ field: 'workflow_id', value: filter.workflowId });\n\n let records: ScheduleRecord[];\n try {\n records = await this.#db.queryTable<ScheduleRecord>(\n TABLE_SCHEDULES,\n queryFilters.length ? queryFilters : undefined,\n undefined,\n SCHEDULE_LIST_LIMIT,\n );\n } catch (error) {\n if (isMissingSchedulesSchemaError(error)) {\n this.logger.warn('Convex schedules schema is not available; returning no schedules', { error });\n return [];\n }\n throw error;\n }\n\n if (records.length >= SCHEDULE_LIST_LIMIT) {\n this.logger.warn('Convex schedules list reached the adapter limit; results may be truncated', {\n limit: SCHEDULE_LIST_LIMIT,\n });\n }\n\n let schedules = records.map(recordToSchedule);\n\n if (filter?.workflowId) {\n schedules = schedules.filter(\n schedule => schedule.target.type === 'workflow' && schedule.target.workflowId === filter.workflowId,\n );\n }\n if (filter?.ownerType === null) {\n schedules = schedules.filter(schedule => (schedule.ownerType ?? null) === null);\n }\n if (filter?.ownerId === null) {\n schedules = schedules.filter(schedule => (schedule.ownerId ?? null) === null);\n }\n\n schedules.sort((a, b) => a.createdAt - b.createdAt);\n return schedules;\n }\n\n async listDueSchedules(now: number, limit?: number): Promise<Schedule[]> {\n let records: ScheduleRecord[];\n try {\n records = await this.#db.listDueSchedules<ScheduleRecord>(now, limit);\n } catch (error) {\n if (isMissingSchedulesSchemaError(error)) {\n this.logger.warn('Convex schedules schema is not available; returning no due schedules', { error });\n return [];\n }\n throw error;\n }\n return records.map(recordToSchedule);\n }\n\n async updateSchedule(id: string, patch: ScheduleUpdate): Promise<Schedule> {\n const updates: Record<string, unknown> = {};\n if ('cron' in patch && patch.cron !== undefined) {\n updates.cron = patch.cron;\n }\n if ('timezone' in patch) {\n updates.timezone = patch.timezone ?? null;\n }\n if ('status' in patch && patch.status !== undefined) {\n updates.status = patch.status;\n }\n if ('nextFireAt' in patch && patch.nextFireAt !== undefined) {\n updates.next_fire_at = patch.nextFireAt;\n }\n if ('target' in patch && patch.target !== undefined) {\n updates.target = serializeJson(patch.target);\n updates.workflow_id = patch.target.type === 'workflow' ? patch.target.workflowId : null;\n }\n if ('metadata' in patch) {\n updates.metadata = patch.metadata == null ? null : serializeJson(patch.metadata);\n }\n if ('ownerType' in patch) {\n updates.owner_type = patch.ownerType ?? null;\n }\n if ('ownerId' in patch) {\n updates.owner_id = patch.ownerId ?? null;\n }\n\n if (Object.keys(updates).length === 0) {\n const existing = await this.getSchedule(id);\n if (!existing) {\n throw new Error(`Schedule ${id} not found`);\n }\n return existing;\n }\n\n updates.updated_at = Date.now();\n const updated = await this.#db.updateSchedule<ScheduleRecord>({ id, patch: updates });\n return recordToSchedule(updated);\n }\n\n async updateScheduleNextFire(\n id: string,\n expectedNextFireAt: number,\n newNextFireAt: number,\n lastFireAt: number,\n lastRunId: string,\n ): Promise<boolean> {\n return this.#db.updateScheduleNextFire({\n id,\n expectedNextFireAt,\n newNextFireAt,\n lastFireAt,\n lastRunId,\n });\n }\n\n async deleteSchedule(id: string): Promise<void> {\n await this.#db.deleteScheduleTriggers(id);\n await this.#db.deleteMany(TABLE_SCHEDULES, [id]);\n }\n\n async recordTrigger(trigger: ScheduleTrigger): Promise<void> {\n await this.#db.recordScheduleTrigger(triggerToRecord(trigger));\n }\n\n async listTriggers(scheduleId: string, opts?: ScheduleTriggerListOptions): Promise<ScheduleTrigger[]> {\n const triggers = await this.#db.listScheduleTriggers<TriggerRecord>({\n scheduleId,\n fromActualFireAt: opts?.fromActualFireAt,\n toActualFireAt: opts?.toActualFireAt,\n limit: opts?.limit,\n });\n return triggers.map(recordToTrigger);\n }\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type {\n ListScoresResponse,\n SaveScorePayload,\n ScoreRowData,\n ScoringEntityType,\n ScoringSource,\n} from '@mastra/core/evals';\nimport { TABLE_SCORERS, ScoresStorage, createStorageErrorId } from '@mastra/core/storage';\nimport type { StoragePagination } from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype StoredScore = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport class ScoresConvex extends ScoresStorage {\n #db: ConvexDB;\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SCORERS });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n const row = await this.#db.load<StoredScore | null>({\n tableName: TABLE_SCORERS,\n keys: { id },\n });\n return row ? this.deserialize(row) : null;\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n const now = new Date();\n const record = {\n ...score,\n id: crypto.randomUUID(),\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n } as StoredScore;\n\n await this.#db.insert({\n tableName: TABLE_SCORERS,\n record,\n });\n\n return { score: this.deserialize(record) };\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: ScoringEntityType;\n source?: ScoringSource;\n }): Promise<ListScoresResponse> {\n return this.listScores({\n filters: { scorerId, entityId, entityType, source },\n pagination,\n });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n return this.listScores({\n filters: { runId },\n pagination,\n });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: ScoringEntityType;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n return this.listScores({\n filters: { entityId, entityType },\n pagination,\n });\n }\n\n private async listScores({\n filters,\n pagination,\n }: {\n filters: Partial<Pick<ScoreRowData, 'scorerId' | 'entityId' | 'entityType' | 'runId' | 'source'>>;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n if (pagination.page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_SCORES', 'INVALID_PAGINATION'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n new Error('page must be >= 0'),\n );\n }\n\n const rows = await this.#db.queryTable<StoredScore>(TABLE_SCORERS, undefined);\n const filtered = rows\n .filter(row => (filters.scorerId ? row.scorerId === filters.scorerId : true))\n .filter(row => (filters.entityId ? row.entityId === filters.entityId : true))\n .filter(row => (filters.entityType ? row.entityType === filters.entityType : true))\n .filter(row => (filters.runId ? row.runId === filters.runId : true))\n .filter(row => (filters.source ? row.source === filters.source : true))\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n const { perPage, page } = pagination;\n const perPageValue = perPage === false ? filtered.length : perPage;\n const start = perPage === false ? 0 : page * perPageValue;\n const end = perPage === false ? filtered.length : start + perPageValue;\n const slice = filtered.slice(start, end).map(row => this.deserialize(row));\n\n return {\n pagination: {\n total: filtered.length,\n page,\n perPage,\n hasMore: perPage === false ? false : end < filtered.length,\n },\n scores: slice,\n };\n }\n\n private deserialize(row: StoredScore): ScoreRowData {\n return {\n ...(row as unknown as ScoreRowData),\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n}\n","import { TABLE_WORKFLOW_SNAPSHOT, normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type {\n StorageListWorkflowRunsInput,\n StorageWorkflowRun,\n WorkflowRun,\n WorkflowRuns,\n UpdateWorkflowStateOptions,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype RawWorkflowRun = Omit<StorageWorkflowRun, 'createdAt' | 'updatedAt' | 'snapshot'> & {\n createdAt: string;\n updatedAt: string;\n snapshot: WorkflowRunState | string;\n};\n\nexport class WorkflowsConvex extends WorkflowsStorage {\n #db: ConvexDB;\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n supportsConcurrentUpdates(): boolean {\n return false;\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_WORKFLOW_SNAPSHOT });\n }\n\n async updateWorkflowResults(_args: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n throw new Error(\n 'updateWorkflowResults is not implemented for Convex storage. Convex does not support atomic read-modify-write operations needed for concurrent workflow updates.',\n );\n }\n\n async updateWorkflowState(_args: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState | undefined> {\n throw new Error(\n 'updateWorkflowState is not implemented for Convex storage. Convex does not support atomic read-modify-write operations needed for concurrent workflow updates.',\n );\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n createdAt,\n updatedAt,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n createdAt?: Date;\n updatedAt?: Date;\n }): Promise<void> {\n const now = new Date();\n // Check if a record already exists to preserve createdAt\n const existing = await this.#db.load<{ createdAt?: string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n await this.#db.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n // Convex rejects any field whose name starts with `$` (reserved prefix).\n // Workflow snapshots embed tool outputs whose serialized Zod->JSON Schemas\n // contain $schema/$ref/$defs/$id keys, so we serialize the snapshot here.\n // loadWorkflowSnapshot / ensureSnapshot already handle the string case.\n snapshot: JSON.stringify(snapshot),\n createdAt: existing?.createdAt ?? (createdAt ? new Date(createdAt).toISOString() : now.toISOString()),\n updatedAt: updatedAt ? new Date(updatedAt).toISOString() : now.toISOString(),\n },\n });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n const row = await this.#db.load<{ snapshot: WorkflowRunState | string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n if (!row) return null;\n return typeof row.snapshot === 'string' ? JSON.parse(row.snapshot) : JSON.parse(JSON.stringify(row.snapshot));\n }\n\n async listWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n // Pass known filters to queryTable for server-side filtering instead of fetching all rows\n const filters: Array<{ field: string; value: string }> = [];\n if (workflowName) {\n filters.push({ field: 'workflow_name', value: workflowName });\n }\n if (resourceId) {\n filters.push({ field: 'resourceId', value: resourceId });\n }\n\n let rows = await this.#db.queryTable<RawWorkflowRun>(\n TABLE_WORKFLOW_SNAPSHOT,\n filters.length > 0 ? filters : undefined,\n );\n if (fromDate) rows = rows.filter(run => new Date(run.createdAt).getTime() >= fromDate.getTime());\n if (toDate) rows = rows.filter(run => new Date(run.createdAt).getTime() <= toDate.getTime());\n if (status) {\n rows = rows.filter(run => {\n const snapshot = this.ensureSnapshot(run);\n return snapshot.status === status;\n });\n }\n\n const total = rows.length;\n rows.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n if (perPage !== undefined && page !== undefined) {\n const normalized = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalized;\n rows = rows.slice(offset, offset + normalized);\n }\n\n const runs: WorkflowRun[] = rows.map(run => ({\n workflowName: run.workflow_name,\n runId: run.run_id,\n snapshot: this.ensureSnapshot(run),\n createdAt: new Date(run.createdAt),\n updatedAt: new Date(run.updatedAt),\n resourceId: run.resourceId,\n }));\n\n return { runs, total };\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n let match: RawWorkflowRun | null;\n if (workflowName) {\n // O(1) composite key lookup via by_workflow_run index\n match = await this.#db.load<RawWorkflowRun | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n } else {\n // Fallback: filter by run_id server-side (no dedicated index, but avoids full unfiltered scan)\n const rows = await this.#db.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, [\n { field: 'run_id', value: runId },\n ]);\n match = rows[0] ?? null;\n }\n if (!match) return null;\n\n return {\n workflowName: match.workflow_name,\n runId: match.run_id,\n snapshot: this.ensureSnapshot(match),\n createdAt: new Date(match.createdAt),\n updatedAt: new Date(match.updatedAt),\n resourceId: match.resourceId,\n };\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n await this.#db.deleteMany(TABLE_WORKFLOW_SNAPSHOT, [`${workflowName}-${runId}`]);\n }\n\n private async getRun(workflowName: string, runId: string): Promise<RawWorkflowRun | null> {\n // O(1) composite key lookup instead of querying by workflow_name then filtering in JS\n return this.#db.load<RawWorkflowRun | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n }\n\n private ensureSnapshot(run: { snapshot: WorkflowRunState | string }): WorkflowRunState {\n if (!run.snapshot) {\n return {\n context: {},\n activePaths: [],\n activeStepsPath: {},\n timestamp: Date.now(),\n suspendedPaths: {},\n resumeLabels: {},\n serializedStepGraph: [],\n value: {},\n waitingPaths: {},\n status: 'pending',\n runId: '',\n };\n }\n\n if (typeof run.snapshot === 'string') {\n return JSON.parse(run.snapshot);\n }\n\n return JSON.parse(JSON.stringify(run.snapshot));\n }\n}\n","import type { StorageDomains } from '@mastra/core/storage';\nimport { MastraCompositeStore } from '@mastra/core/storage';\n\nimport type { ConvexAdminClientConfig } from './client';\nimport { ConvexAdminClient } from './client';\nimport { BackgroundTasksConvex } from './domains/background-tasks';\nimport { ChannelsConvex } from './domains/channels';\nimport { MemoryConvex } from './domains/memory';\nimport { SchedulesConvex } from './domains/schedules';\nimport { ScoresConvex } from './domains/scores';\nimport { WorkflowsConvex } from './domains/workflows';\n\n// Export domain classes for direct use with MastraStorage composition\nexport { BackgroundTasksConvex, ChannelsConvex, MemoryConvex, SchedulesConvex, ScoresConvex, WorkflowsConvex };\nexport type { ConvexDomainConfig } from './db';\n\n/**\n * Convex configuration type.\n *\n * Accepts either:\n * - A pre-configured ConvexAdminClient: `{ id, client }`\n * - Deployment config: `{ id, deploymentUrl, adminAuthToken, storageFunction? }`\n */\nexport type ConvexStoreConfig = {\n id: string;\n name?: string;\n /**\n * When true, automatic initialization (table creation/migrations) is disabled.\n * This is useful for CI/CD pipelines where you want to:\n * 1. Run migrations explicitly during deployment (not at runtime)\n * 2. Use different credentials for schema changes vs runtime operations\n *\n * When disableInit is true:\n * - The storage will not automatically create/alter tables on first use\n * - You must call `storage.init()` explicitly in your CI/CD scripts\n *\n * @example\n * // In CI/CD script:\n * const storage = new ConvexStore({ ...config, disableInit: false });\n * await storage.init(); // Explicitly run migrations\n *\n * // In runtime application:\n * const storage = new ConvexStore({ ...config, disableInit: true });\n * // No auto-init, tables must already exist\n */\n disableInit?: boolean;\n} & (\n | {\n /**\n * Pre-configured ConvexAdminClient.\n * Use this when you need to configure the client before initialization.\n *\n * @example\n * ```typescript\n * import { ConvexAdminClient } from '@mastra/convex/storage/client';\n *\n * const client = new ConvexAdminClient({\n * deploymentUrl: 'https://your-deployment.convex.cloud',\n * adminAuthToken: 'your-token',\n * storageFunction: 'custom/storage:handle',\n * });\n *\n * const store = new ConvexStore({ id: 'my-store', client });\n * ```\n */\n client: ConvexAdminClient;\n }\n | ConvexAdminClientConfig\n);\n\n/**\n * Type guard for pre-configured client config\n */\nconst isClientConfig = (config: ConvexStoreConfig): config is ConvexStoreConfig & { client: ConvexAdminClient } => {\n return 'client' in config;\n};\n\n/**\n * Convex storage adapter for Mastra.\n *\n * Access domain-specific storage via `getStore()`:\n *\n * @example\n * ```typescript\n * const storage = new ConvexStore({ id: 'my-store', deploymentUrl: '...', adminAuthToken: '...' });\n *\n * // Access memory domain\n * const memory = await storage.getStore('memory');\n * await memory?.saveThread({ thread });\n *\n * // Access workflows domain\n * const workflows = await storage.getStore('workflows');\n * await workflows?.persistWorkflowSnapshot({ workflowName, runId, snapshot });\n * ```\n */\nexport class ConvexStore extends MastraCompositeStore {\n declare stores: StorageDomains;\n\n constructor(config: ConvexStoreConfig) {\n super({ id: config.id, name: config.name ?? 'ConvexStore', disableInit: config.disableInit });\n\n // Handle pre-configured client vs creating new one\n const client = isClientConfig(config) ? config.client : new ConvexAdminClient(config);\n\n const domainConfig = { client };\n const memory = new MemoryConvex(domainConfig);\n const workflows = new WorkflowsConvex(domainConfig);\n const scores = new ScoresConvex(domainConfig);\n\n this.stores = {\n memory,\n workflows,\n scores,\n backgroundTasks: new BackgroundTasksConvex(domainConfig),\n schedules: new SchedulesConvex(domainConfig),\n channels: new ChannelsConvex(domainConfig),\n };\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport type { ConvexAdminClientConfig } from '../storage/client';\nimport { ConvexAdminClient } from '../storage/client';\nimport type { StorageRequest } from '../storage/types';\n\ntype VectorRecord = {\n id: string;\n embedding: number[];\n metadata?: Record<string, any>;\n};\n\ntype VectorFilter = {\n metadata?: Record<string, any>;\n};\n\nconst INDEX_METADATA_TABLE = 'mastra_vector_indexes';\n\nexport type ConvexVectorConfig = ConvexAdminClientConfig & {\n id: string;\n};\n\nexport class ConvexVector extends MastraVector<VectorFilter> {\n private readonly client: ConvexAdminClient;\n\n constructor(config: ConvexVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n }\n\n async createIndex({ indexName, dimension }: CreateIndexParams): Promise<void> {\n await this.callStorage({\n op: 'insert',\n tableName: INDEX_METADATA_TABLE,\n record: {\n id: indexName,\n indexName,\n dimension,\n metric: 'cosine',\n createdAt: new Date().toISOString(),\n },\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: INDEX_METADATA_TABLE,\n ids: [indexName],\n });\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async truncateIndex({ indexName }: DeleteIndexParams): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async listIndexes(): Promise<string[]> {\n const indexes = await this.callStorage<{ id: string }[]>({\n op: 'queryTable',\n tableName: INDEX_METADATA_TABLE,\n });\n return indexes.map(index => index.id);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = await this.callStorage<{ dimension: number } | null>({\n op: 'load',\n tableName: INDEX_METADATA_TABLE,\n keys: { id: indexName },\n });\n if (!index) {\n throw new Error(`Index ${indexName} not found`);\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n return {\n dimension: index.dimension,\n count: vectors.length,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata }: UpsertVectorParams<VectorFilter>): Promise<string[]> {\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n\n const records: VectorRecord[] = vectors.map((vector, i) => ({\n id: vectorIds[i]!,\n embedding: vector,\n metadata: metadata?.[i],\n }));\n\n await this.callStorage({\n op: 'batchInsert',\n tableName: this.vectorTable(indexName),\n records,\n });\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<VectorFilter>): Promise<QueryResult[]> {\n if (!queryVector) {\n throw new MastraError({\n id: createVectorErrorId('CONVEX', 'QUERY', 'MISSING_VECTOR'),\n text: 'queryVector is required for Convex queries. Metadata-only queries are not supported by this vector store.',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n });\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const filtered =\n filter && !this.isEmptyFilter(filter)\n ? vectors.filter(record => this.matchesFilter(record.metadata, filter))\n : vectors;\n\n const scored = filtered\n .map(record => ({\n id: record.id,\n score: cosineSimilarity(queryVector, record.embedding),\n metadata: record.metadata,\n ...(includeVector ? { vector: record.embedding } : {}),\n }))\n .filter(result => Number.isFinite(result.score))\n .sort((a, b) => b.score - a.score)\n .slice(0, topK);\n\n return scored;\n }\n\n async updateVector(params: UpdateVectorParams<VectorFilter>): Promise<void> {\n const hasId = 'id' in params && params.id;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasId && hasFilter) {\n throw new Error('ConvexVector.updateVector: id and filter are mutually exclusive');\n }\n\n // Check for filter-based update\n if (hasFilter) {\n const filter = params.filter as VectorFilter;\n // Check for empty filter\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.updateVector: cannot update with empty filter');\n }\n\n // Update by filter - find all matching records and update them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(params.indexName),\n });\n\n const matching = vectors.filter(record => this.matchesFilter(record.metadata, filter));\n\n for (const existing of matching) {\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n return;\n }\n\n // Update by id\n if (!hasId) {\n throw new Error('ConvexVector.updateVector: Either id or filter must be provided');\n }\n\n const existing = await this.callStorage<VectorRecord | null>({\n op: 'load',\n tableName: this.vectorTable(params.indexName),\n keys: { id: params.id },\n });\n if (!existing) return;\n\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<VectorFilter>): Promise<void> {\n const { indexName } = params;\n const hasIds = 'ids' in params && params.ids !== undefined;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasIds && hasFilter) {\n throw new Error('ConvexVector.deleteVectors: ids and filter are mutually exclusive');\n }\n\n // Check that at least one is provided\n if (!hasIds && !hasFilter) {\n throw new Error('ConvexVector.deleteVectors: Either filter or ids must be provided');\n }\n\n // Handle ID-based deletion\n if (hasIds) {\n const ids = params.ids as string[];\n if (ids.length === 0) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty ids array');\n }\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids,\n });\n return;\n }\n\n // Handle filter-based deletion\n const filter = params.filter as VectorFilter;\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty filter');\n }\n\n // Find all matching vectors and delete them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const matchingIds = vectors.filter(record => this.matchesFilter(record.metadata, filter)).map(record => record.id);\n\n if (matchingIds.length > 0) {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: matchingIds,\n });\n }\n }\n\n private vectorTable(indexName: string) {\n return `mastra_vector_${indexName}`;\n }\n\n private isEmptyFilter(filter: VectorFilter | Record<string, any>): boolean {\n if (!filter) return true;\n return Object.keys(filter).length === 0;\n }\n\n private matchesFilter(\n recordMetadata: Record<string, any> | undefined,\n filter: VectorFilter | Record<string, any>,\n ): boolean {\n if (!recordMetadata) return false;\n if (!filter || Object.keys(filter).length === 0) return true;\n\n // Handle VectorFilter with metadata property\n if ('metadata' in filter && filter.metadata) {\n return this.matchesFilterConditions(recordMetadata, filter.metadata);\n }\n\n // Handle direct filter conditions\n return this.matchesFilterConditions(recordMetadata, filter);\n }\n\n private matchesFilterConditions(recordMetadata: Record<string, any>, conditions: Record<string, any>): boolean {\n for (const [key, value] of Object.entries(conditions)) {\n // Handle $and operator\n if (key === '$and' && Array.isArray(value)) {\n const allMatch = value.every((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!allMatch) return false;\n continue;\n }\n\n // Handle $or operator\n if (key === '$or' && Array.isArray(value)) {\n const anyMatch = value.some((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!anyMatch) return false;\n continue;\n }\n\n // Handle $in operator\n if (typeof value === 'object' && value !== null && '$in' in value) {\n if (!Array.isArray(value.$in) || !value.$in.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $nin operator\n if (typeof value === 'object' && value !== null && '$nin' in value) {\n if (Array.isArray(value.$nin) && value.$nin.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $gt operator\n if (typeof value === 'object' && value !== null && '$gt' in value) {\n if (!(recordMetadata[key] > value.$gt)) {\n return false;\n }\n continue;\n }\n\n // Handle $gte operator\n if (typeof value === 'object' && value !== null && '$gte' in value) {\n if (!(recordMetadata[key] >= value.$gte)) {\n return false;\n }\n continue;\n }\n\n // Handle $lt operator\n if (typeof value === 'object' && value !== null && '$lt' in value) {\n if (!(recordMetadata[key] < value.$lt)) {\n return false;\n }\n continue;\n }\n\n // Handle $lte operator\n if (typeof value === 'object' && value !== null && '$lte' in value) {\n if (!(recordMetadata[key] <= value.$lte)) {\n return false;\n }\n continue;\n }\n\n // Handle $ne operator\n if (typeof value === 'object' && value !== null && '$ne' in value) {\n if (recordMetadata[key] === value.$ne) {\n return false;\n }\n continue;\n }\n\n // Handle simple equality\n if (recordMetadata[key] !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n private async callStorage<T = any>(request: StorageRequest): Promise<T> {\n return this.client.callStorage<T>(request);\n }\n\n /**\n * Call storage repeatedly until hasMore is false.\n * Use for bulk operations like clearTable that may need multiple batches.\n */\n private async callStorageUntilComplete(request: StorageRequest): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw(request);\n hasMore = response.hasMore ?? false;\n }\n }\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return -1;\n }\n\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dot += aVal * bVal;\n magA += aVal * aVal;\n magB += bVal * bVal;\n }\n\n if (magA === 0 || magB === 0) {\n return -1;\n }\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport { ConvexAdminClient } from '../storage/client';\nimport type { ConvexAdminClientConfig } from '../storage/client';\n\ntype NativeFilterValue = string | number | boolean | null;\n\ntype NativeFilterClause = {\n field: string;\n value: NativeFilterValue;\n};\n\ntype NativeActionFilter = NativeFilterClause | { $or: NativeFilterClause[] };\n\ntype NativeFieldFilter = Record<string, NativeFilterValue | { $eq: NativeFilterValue }>;\n\nexport type ConvexNativeVectorFilter =\n | NativeFieldFilter\n | { metadata: NativeFieldFilter }\n | {\n $or: NativeFieldFilter[];\n };\n\nexport type ConvexNativeVectorIndexConfig = {\n /**\n * Convex table that stores this Mastra vector index.\n */\n tableName: string;\n /**\n * Convex vector index name on `tableName`.\n */\n vectorIndexName?: string;\n /**\n * Number of dimensions configured in the Convex vector index.\n */\n dimension: number;\n /**\n * Mastra vector ID field in the Convex table.\n *\n * @default 'id'\n */\n idField?: string;\n /**\n * Convex database index used for lookup by `idField`.\n *\n * @default 'by_record_id'\n */\n idIndexName?: string;\n /**\n * Vector field in the Convex table.\n *\n * @default 'embedding'\n */\n vectorField?: string;\n /**\n * Metadata field in the Convex table.\n *\n * @default 'metadata'\n */\n metadataField?: string;\n /**\n * Top-level fields copied from metadata on writes and available to Convex\n * native vector filters.\n */\n filterFields?: string[];\n};\n\nexport type ConvexNativeVectorConfig = ConvexAdminClientConfig & {\n id: string;\n /**\n * Maps Mastra `indexName` values to deployed Convex table/index definitions.\n */\n indexes: Record<string, ConvexNativeVectorIndexConfig>;\n /**\n * Path to the deployed native vector action.\n *\n * @default 'mastra/nativeVector:query'\n */\n nativeVectorAction?: string;\n /**\n * Path to the deployed native vector query.\n *\n * @default 'mastra/nativeVector:read'\n */\n nativeVectorQuery?: string;\n /**\n * Path to the deployed native vector mutation.\n *\n * @default 'mastra/nativeVector:write'\n */\n nativeVectorMutation?: string;\n /**\n * Maximum number of documents read when estimating `describeIndex().count`.\n *\n * @default 10000\n */\n describeCountLimit?: number;\n};\n\ntype NativeSearchResult = {\n id: string;\n score: number;\n};\n\ntype NativeVectorDocument = Record<string, any>;\n\nconst DEFAULT_VECTOR_INDEX = 'by_embedding';\nconst DEFAULT_ID_FIELD = 'id';\nconst DEFAULT_ID_INDEX = 'by_record_id';\nconst DEFAULT_VECTOR_FIELD = 'embedding';\nconst DEFAULT_METADATA_FIELD = 'metadata';\nconst DEFAULT_NATIVE_ACTION = 'mastra/nativeVector:query';\nconst DEFAULT_NATIVE_QUERY = 'mastra/nativeVector:read';\nconst DEFAULT_NATIVE_MUTATION = 'mastra/nativeVector:write';\nconst MAX_CONVEX_VECTOR_RESULTS = 256;\nconst NATIVE_VECTOR_UPSERT_BATCH_SIZE = 100;\n\nfunction isMetadataRecord(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport class ConvexNativeVector extends MastraVector<ConvexNativeVectorFilter> {\n private readonly client: ConvexAdminClient;\n private readonly indexes: Record<string, Required<ConvexNativeVectorIndexConfig> & { filterFields: string[] }>;\n private readonly nativeVectorAction: string;\n private readonly nativeVectorQuery: string;\n private readonly nativeVectorMutation: string;\n private readonly describeCountLimit: number;\n\n constructor(config: ConvexNativeVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n this.indexes = Object.fromEntries(\n Object.entries(config.indexes).map(([indexName, index]) => [\n indexName,\n {\n tableName: index.tableName,\n vectorIndexName: index.vectorIndexName ?? DEFAULT_VECTOR_INDEX,\n dimension: index.dimension,\n idField: index.idField ?? DEFAULT_ID_FIELD,\n idIndexName: index.idIndexName ?? DEFAULT_ID_INDEX,\n vectorField: index.vectorField ?? DEFAULT_VECTOR_FIELD,\n metadataField: index.metadataField ?? DEFAULT_METADATA_FIELD,\n filterFields: index.filterFields ?? [],\n },\n ]),\n );\n this.nativeVectorAction = config.nativeVectorAction ?? DEFAULT_NATIVE_ACTION;\n this.nativeVectorQuery = config.nativeVectorQuery ?? DEFAULT_NATIVE_QUERY;\n this.nativeVectorMutation = config.nativeVectorMutation ?? DEFAULT_NATIVE_MUTATION;\n this.describeCountLimit = config.describeCountLimit ?? 10000;\n }\n\n async createIndex({ indexName, dimension, metric = 'cosine' }: CreateIndexParams): Promise<void> {\n const index = this.getIndex(indexName);\n if (index.dimension !== dimension) {\n throw new Error(\n `ConvexNativeVector.createIndex: deployed Convex index \"${indexName}\" has ${index.dimension} dimensions, but ${dimension} were requested`,\n );\n }\n if (metric !== 'cosine') {\n throw new Error('ConvexNativeVector.createIndex: Convex native vector search currently supports cosine only');\n }\n }\n\n async listIndexes(): Promise<string[]> {\n return Object.keys(this.indexes);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = this.getIndex(indexName);\n const result = await this.client.callQuery<{ count: number; countIsLimited: boolean }>(this.nativeVectorQuery, {\n op: 'describe',\n config: index,\n countLimit: this.describeCountLimit,\n });\n\n if (result.countIsLimited) {\n this.logger.warn(\n `ConvexNativeVector.describeIndex: count for \"${indexName}\" reached ${this.describeCountLimit}; reported count is capped.`,\n );\n }\n\n return {\n dimension: index.dimension,\n count: result.count,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata, deleteFilter }: UpsertVectorParams<ConvexNativeVectorFilter>) {\n if (deleteFilter) {\n throw new Error('ConvexNativeVector.upsert: deleteFilter is not supported. Delete by IDs before upserting.');\n }\n const index = this.getIndex(indexName);\n if (ids && ids.length !== vectors.length) {\n throw new Error(\n `ConvexNativeVector.upsert: ids length (${ids.length}) must match vectors length (${vectors.length})`,\n );\n }\n if (metadata && metadata.length !== vectors.length) {\n throw new Error(\n `ConvexNativeVector.upsert: metadata length (${metadata.length}) must match vectors length (${vectors.length})`,\n );\n }\n if (metadata && !metadata.every(isMetadataRecord)) {\n throw new Error('ConvexNativeVector.upsert: metadata entries must be objects when provided');\n }\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n if (new Set(vectorIds).size !== vectorIds.length) {\n throw new Error('ConvexNativeVector.upsert: ids must be unique');\n }\n\n for (let start = 0; start < vectors.length; start += NATIVE_VECTOR_UPSERT_BATCH_SIZE) {\n const end = start + NATIVE_VECTOR_UPSERT_BATCH_SIZE;\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'upsert',\n config: index,\n ids: vectorIds.slice(start, end),\n vectors: vectors.slice(start, end),\n ...(metadata ? { metadata: metadata.slice(start, end) } : {}),\n });\n }\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<ConvexNativeVectorFilter>): Promise<QueryResult[]> {\n if (!queryVector) {\n throw new MastraError({\n id: createVectorErrorId('CONVEX_NATIVE', 'QUERY', 'MISSING_VECTOR'),\n text: 'queryVector is required for Convex native vector queries.',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n });\n }\n if (!Number.isFinite(topK) || !Number.isInteger(topK) || topK < 1 || topK > MAX_CONVEX_VECTOR_RESULTS) {\n throw new Error(`ConvexNativeVector.query: topK must be an integer between 1 and ${MAX_CONVEX_VECTOR_RESULTS}`);\n }\n\n const index = this.getIndex(indexName);\n const nativeFilter = this.toNativeFilter(filter, index);\n const searchResults = await this.client.callAction<NativeSearchResult[]>(this.nativeVectorAction, {\n config: index,\n vector: queryVector,\n limit: topK,\n ...(nativeFilter ? { filter: nativeFilter } : {}),\n });\n\n if (searchResults.length === 0) return [];\n\n const docs = await this.client.callQuery<Array<NativeVectorDocument | null>>(this.nativeVectorQuery, {\n op: 'getByConvexIds',\n config: index,\n ids: searchResults.map(result => result.id),\n includeVector,\n });\n const scoresByConvexId = new Map(searchResults.map(result => [result.id, result.score]));\n\n return docs.flatMap(doc => {\n if (!doc?._id) return [];\n return [\n {\n id: String(doc[index.idField]),\n score: scoresByConvexId.get(String(doc._id)) ?? 0,\n metadata: doc[index.metadataField],\n ...(includeVector ? { vector: doc[index.vectorField] } : {}),\n },\n ];\n });\n }\n\n async updateVector(params: UpdateVectorParams<ConvexNativeVectorFilter>): Promise<void> {\n if ('filter' in params && params.filter !== undefined) {\n throw new Error('ConvexNativeVector.updateVector: filter-based updates are not supported. Update by ID instead.');\n }\n if (params.update.metadata !== undefined && !isMetadataRecord(params.update.metadata)) {\n throw new Error('ConvexNativeVector.updateVector: metadata must be an object when provided');\n }\n const index = this.getIndex(params.indexName);\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'updateById',\n config: index,\n id: params.id,\n vector: params.update.vector,\n metadata: params.update.metadata,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n const index = this.getIndex(indexName);\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'deleteByIds',\n config: index,\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<ConvexNativeVectorFilter>): Promise<void> {\n if (params.filter !== undefined) {\n throw new Error(\n 'ConvexNativeVector.deleteVectors: filter-based deletes are not supported. Delete by IDs instead.',\n );\n }\n if (!params.ids || params.ids.length === 0) {\n throw new Error('ConvexNativeVector.deleteVectors: ids are required');\n }\n const index = this.getIndex(params.indexName);\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'deleteByIds',\n config: index,\n ids: params.ids,\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n this.getIndex(indexName);\n throw new Error('ConvexNativeVector.deleteIndex: Convex native vector indexes are managed in convex/schema.ts.');\n }\n\n private getIndex(indexName: string) {\n const index = this.indexes[indexName];\n if (!index) {\n throw new Error(`ConvexNativeVector: index \"${indexName}\" is not configured`);\n }\n return index;\n }\n\n private toNativeFilter(\n filter: ConvexNativeVectorFilter | undefined,\n index: Required<ConvexNativeVectorIndexConfig> & { filterFields: string[] },\n ): NativeActionFilter | undefined {\n if (!filter || Object.keys(filter).length === 0) return undefined;\n\n if (this.isOrFilter(filter)) {\n const clauses = filter.$or.map(branch => this.toSingleClause(branch, index));\n return { $or: clauses };\n }\n\n const fieldFilter = this.isMetadataFilter(filter) ? filter.metadata : filter;\n return this.toSingleClause(fieldFilter, index);\n }\n\n private toSingleClause(\n filter: NativeFieldFilter,\n index: Required<ConvexNativeVectorIndexConfig> & { filterFields: string[] },\n ): NativeFilterClause {\n const entries = Object.entries(filter).filter(([, value]) => value !== undefined);\n if (entries.length !== 1) {\n throw new Error(\n 'ConvexNativeVector.query: native Convex filters support one equality field or $or of equality fields',\n );\n }\n\n const [field, rawValue] = entries[0]!;\n if (!index.filterFields.includes(field)) {\n throw new Error(`ConvexNativeVector.query: field \"${field}\" is not configured as a Convex vector filter field`);\n }\n\n const value =\n typeof rawValue === 'object' && rawValue !== null && '$eq' in rawValue\n ? rawValue.$eq\n : (rawValue as NativeFilterValue);\n\n if (!['string', 'number', 'boolean'].includes(typeof value) && value !== null) {\n throw new Error(\n 'ConvexNativeVector.query: native Convex filters support string, number, boolean, and null values',\n );\n }\n\n return { field, value };\n }\n\n private isOrFilter(filter: ConvexNativeVectorFilter): filter is { $or: NativeFieldFilter[] } {\n return Array.isArray((filter as { $or?: unknown }).$or);\n }\n\n private isMetadataFilter(filter: ConvexNativeVectorFilter): filter is { metadata: NativeFieldFilter } {\n const metadata = (filter as { metadata?: unknown }).metadata;\n return typeof metadata === 'object' && metadata !== null && !Array.isArray(metadata);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/cache/client.ts","../src/cache/index.ts","../src/storage/client.ts","../src/storage/db/index.ts","../src/storage/domains/background-tasks/index.ts","../src/storage/domains/channels/index.ts","../src/storage/domains/memory/index.ts","../src/storage/domains/schedules/index.ts","../src/storage/domains/scores/index.ts","../src/storage/domains/workflows/index.ts","../src/storage/index.ts","../src/vector/index.ts","../src/vector/native.ts"],"names":["TABLE_WORKFLOW_SNAPSHOT","TABLE_SCHEDULES","TABLE_SCHEDULE_TRIGGERS","parseJson","TABLE_BACKGROUND_TASKS","TABLE_CHANNEL_INSTALLATIONS","TABLE_CHANNEL_CONFIG","TABLE_THREADS","TABLE_MESSAGES","TABLE_RESOURCES","messages","serializeJson","crypto","TABLE_SCORERS","MastraError","createStorageErrorId","ErrorDomain","ErrorCategory","normalizePerPage","isClientConfig","existing","updated","MastraVector","createVectorErrorId","value"],"mappings":"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","file":"index.js","sourcesContent":["import type { CacheRequest, CacheResponse } from './types';\n\nexport type ConvexCacheClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n cacheFunction?: string;\n requestTimeoutMs?: number;\n};\n\nexport type RawCacheResult<T = unknown> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_CACHE_FUNCTION = 'mastra/cache:handle';\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\nconst trimTrailingSlashes = (value: string): string => {\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return value.slice(0, end);\n};\n\nexport class ConvexCacheClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly cacheFunction: string;\n private readonly requestTimeoutMs: number;\n\n constructor({ deploymentUrl, adminAuthToken, cacheFunction, requestTimeoutMs }: ConvexCacheClientConfig) {\n const normalizedDeploymentUrl = deploymentUrl.trim();\n const normalizedAdminAuthToken = adminAuthToken.trim();\n const normalizedCacheFunction = cacheFunction?.trim();\n\n if (!normalizedDeploymentUrl) {\n throw new Error('ConvexCacheClient: deploymentUrl is required.');\n }\n\n if (!normalizedAdminAuthToken) {\n throw new Error('ConvexCacheClient: adminAuthToken is required.');\n }\n\n if (requestTimeoutMs !== undefined && requestTimeoutMs < 0) {\n throw new Error('ConvexCacheClient: requestTimeoutMs must be greater than or equal to 0.');\n }\n\n this.deploymentUrl = trimTrailingSlashes(normalizedDeploymentUrl);\n this.adminAuthToken = normalizedAdminAuthToken;\n this.cacheFunction = normalizedCacheFunction || DEFAULT_CACHE_FUNCTION;\n this.requestTimeoutMs = requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n }\n\n async callCacheRaw<T = unknown>(request: CacheRequest): Promise<RawCacheResult<T>> {\n const controller = this.requestTimeoutMs > 0 ? new AbortController() : undefined;\n const timeoutId = controller ? setTimeout(() => controller.abort(), this.requestTimeoutMs) : undefined;\n let response: Response;\n\n try {\n response = await fetch(`${this.deploymentUrl}/api/mutation`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path: this.cacheFunction,\n args: request,\n format: 'json',\n }),\n signal: controller?.signal,\n });\n } catch (error) {\n if (controller?.signal.aborted) {\n throw new Error(`Convex cache request timed out after ${this.requestTimeoutMs} ms.`);\n }\n throw error;\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n }\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as {\n status?: string;\n errorMessage?: string;\n errorCode?: string;\n code?: string;\n details?: Record<string, unknown>;\n value?: CacheResponse;\n };\n\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).code = result.errorCode ?? result.code;\n (error as any).details = result.details;\n throw error;\n }\n\n const cacheResponse = result.value as CacheResponse;\n if (!cacheResponse?.ok) {\n const errResponse = cacheResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex cache error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: cacheResponse.result as T,\n hasMore: cacheResponse.hasMore,\n };\n }\n\n async callCache<T = unknown>(request: CacheRequest): Promise<T> {\n const { result } = await this.callCacheRaw<T>(request);\n return result;\n }\n}\n","import { MastraServerCache } from '@mastra/core/cache';\n\nimport { ConvexCacheClient } from './client';\nimport type { ConvexCacheClientConfig } from './client';\n\nexport type ConvexServerCacheConfig = {\n /**\n * Prefix applied to all cache keys. `clear()` removes rows whose stored\n * prefix exactly matches this value.\n */\n keyPrefix?: string;\n /**\n * Default cache TTL in milliseconds. Set to 0 to disable expiry.\n */\n ttlMs?: number;\n} & ({ client: ConvexCacheClient } | ConvexCacheClientConfig);\n\nconst DEFAULT_KEY_PREFIX = 'mastra:cache:';\nconst DEFAULT_TTL_MS = 300_000;\nconst MAX_CACHE_OPERATION_BATCHES = 1000;\n\nconst isClientConfig = (\n config: ConvexServerCacheConfig,\n): config is ConvexServerCacheConfig & { client: ConvexCacheClient } => 'client' in config;\n\nexport class ConvexServerCache extends MastraServerCache {\n private readonly client: ConvexCacheClient;\n private readonly keyPrefix: string;\n private readonly ttlMs: number;\n\n constructor(config: ConvexServerCacheConfig) {\n super({ name: 'ConvexServerCache' });\n\n this.client = isClientConfig(config) ? config.client : new ConvexCacheClient(config);\n this.keyPrefix = config.keyPrefix ?? DEFAULT_KEY_PREFIX;\n this.ttlMs = config.ttlMs ?? DEFAULT_TTL_MS;\n }\n\n private getKey(key: string): string {\n return `${this.keyPrefix}${key}`;\n }\n\n private getExpiresAt(ttlMs?: number): number | null {\n const effectiveTtlMs = ttlMs ?? this.ttlMs;\n return effectiveTtlMs > 0 ? Date.now() + effectiveTtlMs : null;\n }\n\n private async callUntilSettled<T>(request: () => Parameters<ConvexCacheClient['callCacheRaw']>[0]): Promise<T> {\n for (let batch = 0; batch < MAX_CACHE_OPERATION_BATCHES; batch += 1) {\n const response = await this.client.callCacheRaw({\n ...request(),\n });\n if (!response.hasMore) return response.result as T;\n }\n\n throw new Error(`ConvexServerCache operation exceeded ${MAX_CACHE_OPERATION_BATCHES} batches.`);\n }\n\n async get(key: string): Promise<unknown> {\n return this.callUntilSettled(() => ({\n op: 'get',\n key: this.getKey(key),\n }));\n }\n\n async set(key: string, value: unknown, ttlMs?: number): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'set',\n key: this.getKey(key),\n keyPrefix: this.keyPrefix,\n value,\n expiresAt: this.getExpiresAt(ttlMs),\n }));\n }\n\n async listLength(key: string): Promise<number> {\n return this.callUntilSettled(() => ({\n op: 'listLength',\n key: this.getKey(key),\n }));\n }\n\n async listPush(key: string, value: unknown): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'listPush',\n key: this.getKey(key),\n keyPrefix: this.keyPrefix,\n value,\n expiresAt: this.getExpiresAt(),\n }));\n }\n\n async listFromTo(key: string, from: number, to: number = -1): Promise<unknown[]> {\n return this.callUntilSettled(() => ({\n op: 'listFromTo',\n key: this.getKey(key),\n from,\n to,\n }));\n }\n\n async delete(key: string): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'delete',\n key: this.getKey(key),\n }));\n }\n\n async clear(): Promise<void> {\n await this.callUntilSettled(() => ({\n op: 'clear',\n keyPrefix: this.keyPrefix,\n }));\n }\n\n async increment(key: string): Promise<number> {\n return this.callUntilSettled(() => ({\n op: 'increment',\n key: this.getKey(key),\n keyPrefix: this.keyPrefix,\n expiresAt: this.getExpiresAt(),\n }));\n }\n}\n\nexport { ConvexCacheClient, type ConvexCacheClientConfig };\n","import type { StorageRequest, StorageResponse } from './types';\n\nexport type ConvexAdminClientConfig = {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n};\n\n/** Response from callStorageRaw that includes batch info */\nexport type RawStorageResult<T = any> = {\n result: T;\n hasMore?: boolean;\n};\n\nconst DEFAULT_STORAGE_FUNCTION = 'mastra/storage:handle';\n\ntype ConvexFunctionKind = 'action' | 'mutation' | 'query';\n\ntype ConvexHttpSuccess<T> = {\n status: 'success';\n value: T;\n logLines?: string[];\n};\n\ntype ConvexHttpResponse<T> =\n | {\n status: 'success';\n value: T;\n logLines?: string[];\n }\n | {\n status: 'error';\n errorMessage: string;\n errorData?: unknown;\n logLines?: string[];\n };\n\nexport class ConvexAdminClient {\n private readonly deploymentUrl: string;\n private readonly adminAuthToken: string;\n private readonly storageFunction: string;\n\n constructor({ deploymentUrl, adminAuthToken, storageFunction }: ConvexAdminClientConfig) {\n if (!deploymentUrl) {\n throw new Error('ConvexAdminClient: deploymentUrl is required.');\n }\n\n if (!adminAuthToken) {\n throw new Error('ConvexAdminClient: adminAuthToken is required.');\n }\n\n this.deploymentUrl = deploymentUrl.replace(/\\/$/, ''); // Remove trailing slash\n this.adminAuthToken = adminAuthToken;\n this.storageFunction = storageFunction ?? DEFAULT_STORAGE_FUNCTION;\n }\n\n /**\n * Call storage and return the full response including hasMore flag.\n * Use this for operations that may need multiple calls (e.g., clearTable).\n */\n async callStorageRaw<T = any>(request: StorageRequest): Promise<RawStorageResult<T>> {\n const result = await this.callConvexFunction<StorageResponse>('mutation', this.storageFunction, request);\n\n const storageResponse = result.value;\n if (!storageResponse?.ok) {\n const errResponse = storageResponse as { ok: false; error: string; code?: string; details?: Record<string, any> };\n const error = new Error(errResponse?.error || 'Unknown Convex storage error');\n (error as any).code = errResponse?.code;\n (error as any).details = errResponse?.details;\n throw error;\n }\n\n return {\n result: storageResponse.result as T,\n hasMore: storageResponse.hasMore,\n };\n }\n\n async callStorage<T = any>(request: StorageRequest): Promise<T> {\n const { result } = await this.callStorageRaw<T>(request);\n return result;\n }\n\n async callAction<T = any>(path: string, args: Record<string, any>): Promise<T> {\n return this.callFunction<T>('action', path, args);\n }\n\n async callMutation<T = any>(path: string, args: Record<string, any>): Promise<T> {\n return this.callFunction<T>('mutation', path, args);\n }\n\n async callQuery<T = any>(path: string, args: Record<string, any>): Promise<T> {\n return this.callFunction<T>('query', path, args);\n }\n\n private async callFunction<T>(kind: ConvexFunctionKind, path: string, args: Record<string, any>): Promise<T> {\n const result = await this.callConvexFunction<T>(kind, path, args);\n return result.value;\n }\n\n private async callConvexFunction<T>(\n kind: ConvexFunctionKind,\n path: string,\n args: Record<string, any>,\n ): Promise<ConvexHttpSuccess<T>> {\n const url = `${this.deploymentUrl}/api/${kind}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Convex ${this.adminAuthToken}`,\n },\n body: JSON.stringify({\n path,\n args,\n format: 'json',\n }),\n });\n\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Convex API error: ${response.status} ${text}`);\n }\n\n const result = (await response.json()) as ConvexHttpResponse<T>;\n\n if (result.status === 'error') {\n const error = new Error(result.errorMessage || 'Unknown Convex error');\n (error as any).details = result.errorData;\n throw error;\n }\n\n if (result.status !== 'success') {\n throw new Error(`Convex ${kind} ${path} returned an invalid response`);\n }\n\n if (result.value === undefined) {\n throw new Error(`Convex ${kind} ${path} returned no value`);\n }\n\n return result;\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraBase } from '@mastra/core/base';\nimport { TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS, TABLE_WORKFLOW_SNAPSHOT } from '@mastra/core/storage';\nimport type { StorageColumn, TABLE_NAMES, UpdateWorkflowStateOptions } from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\n\nimport { ConvexAdminClient } from '../client';\nimport type { EqualityFilter, IndexHint } from '../types';\n\n/**\n * Configuration for standalone domain usage.\n * Accepts either:\n * 1. An existing ConvexAdminClient\n * 2. Config to create a new client internally\n */\nexport type ConvexDomainConfig = ConvexDomainClientConfig | ConvexDomainRestConfig;\n\n/**\n * Pass an existing ConvexAdminClient\n */\nexport interface ConvexDomainClientConfig {\n client: ConvexAdminClient;\n}\n\n/**\n * Pass config to create a new ConvexAdminClient internally\n */\nexport interface ConvexDomainRestConfig {\n deploymentUrl: string;\n adminAuthToken: string;\n storageFunction?: string;\n}\n\n/**\n * Resolves ConvexDomainConfig to a ConvexAdminClient.\n * Handles creating a new client if config is provided.\n */\nexport function resolveConvexConfig(config: ConvexDomainConfig): ConvexAdminClient {\n // Existing client\n if ('client' in config) {\n return config.client;\n }\n\n // Config to create new client\n return new ConvexAdminClient(config);\n}\n\nexport class ConvexDB extends MastraBase {\n constructor(private readonly client: ConvexAdminClient) {\n super({ name: 'convex-db' });\n }\n\n async hasColumn(_table: string, _column: string): Promise<boolean> {\n return true;\n }\n\n async createTable({\n tableName,\n schema: _schema,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n }): Promise<void> {\n // No-op for Convex; schema is managed server-side via schema.ts\n this.logger.debug(`ConvexDB: createTable called for ${tableName} (schema managed server-side)`);\n }\n\n async alterTable({\n tableName,\n schema: _schema,\n ifNotExists: _ifNotExists,\n }: {\n tableName: TABLE_NAMES;\n schema: Record<string, StorageColumn>;\n ifNotExists: string[];\n }): Promise<void> {\n // No-op for Convex; schema is managed server-side via schema.ts\n this.logger.debug(`ConvexDB: alterTable called for ${tableName} (schema managed server-side)`);\n }\n\n async clearTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'clearTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async dropTable({ tableName }: { tableName: TABLE_NAMES }): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'dropTable',\n tableName,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n async insert({ tableName, record }: { tableName: TABLE_NAMES; record: Record<string, any> }): Promise<void> {\n await this.client.callStorage({\n op: 'insert',\n tableName,\n record: this.normalizeRecord(tableName, record),\n });\n }\n\n async batchInsert({ tableName, records }: { tableName: TABLE_NAMES; records: Record<string, any>[] }): Promise<void> {\n if (records.length === 0) return;\n\n await this.client.callStorage({\n op: 'batchInsert',\n tableName,\n records: records.map(record => this.normalizeRecord(tableName, record)),\n });\n }\n\n async patch({\n tableName,\n id,\n record,\n }: {\n tableName: TABLE_NAMES;\n id: string;\n record: Record<string, any>;\n }): Promise<boolean> {\n return this.client.callStorage<boolean>({\n op: 'patch',\n tableName,\n id,\n record: this.normalizePatch(record),\n });\n }\n\n async load<R>({ tableName, keys }: { tableName: TABLE_NAMES; keys: Record<string, any> }): Promise<R | null> {\n const result = await this.client.callStorage<R | null>({\n op: 'load',\n tableName,\n keys,\n });\n\n return result;\n }\n\n public async queryTable<R>(\n tableName: TABLE_NAMES,\n filters?: EqualityFilter[],\n indexHint?: IndexHint,\n limit?: number,\n ): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'queryTable',\n tableName,\n filters,\n indexHint,\n limit,\n });\n }\n\n public async deleteMany(tableName: TABLE_NAMES, ids: string[]): Promise<void> {\n if (ids.length === 0) return;\n await this.client.callStorage({\n op: 'deleteMany',\n tableName,\n ids,\n });\n }\n\n public async mergeWorkflowStepResult({\n workflowName,\n runId,\n stepId,\n result,\n requestContext,\n }: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n const context = await this.client.callStorage<string>({\n op: 'mergeWorkflowStepResult',\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n workflowName,\n runId,\n stepId,\n result: JSON.stringify(result),\n requestContext: JSON.stringify(requestContext),\n });\n if (!context) {\n throw new Error(`Convex workflow step merge returned no context for runId ${runId}`);\n }\n return JSON.parse(context);\n }\n\n public async mergeWorkflowState({\n workflowName,\n runId,\n opts,\n }: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState> {\n const snapshot = await this.client.callStorage<string>({\n op: 'mergeWorkflowState',\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n workflowName,\n runId,\n opts: JSON.stringify(opts),\n });\n if (!snapshot) {\n throw new Error(`Convex workflow state merge returned no snapshot for runId ${runId}`);\n }\n return JSON.parse(snapshot);\n }\n\n public async createSchedule(record: Record<string, any>): Promise<void> {\n if (!record.id) {\n throw new Error(`Schedule is missing an id`);\n }\n\n await this.client.callStorage({\n op: 'createSchedule',\n tableName: TABLE_SCHEDULES,\n record: this.normalizeRecord(TABLE_SCHEDULES, record),\n });\n }\n\n public async recordScheduleTrigger(record: Record<string, any>): Promise<void> {\n if (!record.id) {\n throw new Error(`Schedule trigger is missing an id`);\n }\n\n await this.client.callStorage({\n op: 'recordScheduleTrigger',\n tableName: TABLE_SCHEDULE_TRIGGERS,\n record: this.normalizeRecord(TABLE_SCHEDULE_TRIGGERS, record),\n });\n }\n\n public async listDueSchedules<R>(now: number, limit?: number): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'listDueSchedules',\n tableName: TABLE_SCHEDULES,\n now,\n limit,\n });\n }\n\n public async updateScheduleNextFire({\n id,\n expectedNextFireAt,\n newNextFireAt,\n lastFireAt,\n lastRunId,\n }: {\n id: string;\n expectedNextFireAt: number;\n newNextFireAt: number;\n lastFireAt: number;\n lastRunId: string;\n }): Promise<boolean> {\n return this.client.callStorage<boolean>({\n op: 'updateScheduleNextFire',\n tableName: TABLE_SCHEDULES,\n id,\n expectedNextFireAt,\n newNextFireAt,\n lastFireAt,\n lastRunId,\n });\n }\n\n public async updateSchedule<R>({ id, patch }: { id: string; patch: Record<string, any> }): Promise<R> {\n return this.client.callStorage<R>({\n op: 'updateSchedule',\n tableName: TABLE_SCHEDULES,\n id,\n patch,\n });\n }\n\n public async listScheduleTriggers<R>({\n scheduleId,\n fromActualFireAt,\n toActualFireAt,\n limit,\n }: {\n scheduleId: string;\n fromActualFireAt?: number;\n toActualFireAt?: number;\n limit?: number;\n }): Promise<R[]> {\n return this.client.callStorage<R[]>({\n op: 'listScheduleTriggers',\n tableName: TABLE_SCHEDULE_TRIGGERS,\n scheduleId,\n fromActualFireAt,\n toActualFireAt,\n limit,\n });\n }\n\n public async deleteScheduleTriggers(scheduleId: string): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw({\n op: 'deleteScheduleTriggers',\n tableName: TABLE_SCHEDULE_TRIGGERS,\n scheduleId,\n });\n hasMore = response.hasMore ?? false;\n }\n }\n\n private normalizeRecord(tableName: TABLE_NAMES, record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n if (tableName === TABLE_WORKFLOW_SNAPSHOT && !normalized.id) {\n const runId = normalized.run_id || normalized.runId;\n const workflowName = normalized.workflow_name || normalized.workflowName;\n normalized.id = workflowName ? `${workflowName}-${runId}` : runId;\n }\n\n if (!normalized.id) {\n normalized.id = crypto.randomUUID();\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n\n private normalizePatch(record: Record<string, any>): Record<string, any> {\n const normalized: Record<string, any> = { ...record };\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value instanceof Date) {\n normalized[key] = value.toISOString();\n }\n }\n\n return normalized;\n }\n}\n","import type { BackgroundTask, TaskFilter, TaskListResult, UpdateBackgroundTask } from '@mastra/core/background-tasks';\nimport { BackgroundTasksStorage, TABLE_BACKGROUND_TASKS } from '@mastra/core/storage';\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype StoredTask = {\n id: string;\n status: BackgroundTask['status'];\n tool_call_id: string;\n tool_name: string;\n agent_id: string;\n run_id: string;\n thread_id: string | null;\n resource_id: string | null;\n args: string;\n result: string | null;\n error: string | null;\n suspend_payload: string | null;\n retry_count: number;\n max_retries: number;\n timeout_ms: number;\n createdAt: string;\n startedAt: string | null;\n suspendedAt: string | null;\n completedAt: string | null;\n};\n\ntype StoredTaskPatch = Partial<Omit<StoredTask, 'id' | 'createdAt'>>;\n\nfunction serializeJson(v: unknown): string | null {\n if (v === undefined || v === null) return null;\n return JSON.stringify(v);\n}\n\nfunction serializeRequiredJson(v: unknown): string {\n return JSON.stringify(v ?? {});\n}\n\nfunction toStored(task: BackgroundTask): StoredTask {\n return {\n id: task.id,\n status: task.status,\n tool_call_id: task.toolCallId,\n tool_name: task.toolName,\n agent_id: task.agentId,\n run_id: task.runId,\n thread_id: task.threadId ?? null,\n resource_id: task.resourceId ?? null,\n args: serializeRequiredJson(task.args),\n result: serializeJson(task.result),\n error: serializeJson(task.error),\n suspend_payload: serializeJson(task.suspendPayload),\n retry_count: task.retryCount,\n max_retries: task.maxRetries,\n timeout_ms: task.timeoutMs,\n createdAt: task.createdAt.toISOString(),\n startedAt: task.startedAt?.toISOString() ?? null,\n suspendedAt: task.suspendedAt?.toISOString() ?? null,\n completedAt: task.completedAt?.toISOString() ?? null,\n };\n}\n\nfunction toStoredPatch(update: UpdateBackgroundTask): StoredTaskPatch {\n const patch: StoredTaskPatch = {};\n if (update.status !== undefined) patch.status = update.status;\n if ('result' in update) patch.result = serializeJson(update.result);\n if ('error' in update) patch.error = serializeJson(update.error);\n if ('suspendPayload' in update) patch.suspend_payload = serializeJson(update.suspendPayload);\n if (update.retryCount !== undefined) patch.retry_count = update.retryCount;\n if (update.maxRetries !== undefined) patch.max_retries = update.maxRetries;\n if (update.timeoutMs !== undefined) patch.timeout_ms = update.timeoutMs;\n if ('startedAt' in update) patch.startedAt = update.startedAt?.toISOString() ?? null;\n if ('suspendedAt' in update) patch.suspendedAt = update.suspendedAt?.toISOString() ?? null;\n if ('completedAt' in update) patch.completedAt = update.completedAt?.toISOString() ?? null;\n return patch;\n}\n\nfunction legacyOrCurrent<TValue>(stored: Record<string, any>, currentKey: string, legacyKey: string): TValue {\n return currentKey in stored ? stored[currentKey] : stored[legacyKey];\n}\n\nfunction fromStored(stored: StoredTask | Record<string, any>): BackgroundTask {\n const record = stored as Record<string, any>;\n const parseJson = (val: string | null | undefined): any => {\n if (val == null) return undefined;\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n };\n return {\n id: record.id,\n status: record.status,\n toolName: legacyOrCurrent<string>(record, 'tool_name', 'toolName'),\n toolCallId: legacyOrCurrent<string>(record, 'tool_call_id', 'toolCallId'),\n args: parseJson(record.args) ?? {},\n agentId: legacyOrCurrent<string>(record, 'agent_id', 'agentId'),\n threadId: legacyOrCurrent<string | null>(record, 'thread_id', 'threadId') ?? undefined,\n resourceId: legacyOrCurrent<string | null>(record, 'resource_id', 'resourceId') ?? undefined,\n runId: legacyOrCurrent<string>(record, 'run_id', 'runId'),\n result: parseJson(record.result),\n error: parseJson(record.error),\n suspendPayload: parseJson(legacyOrCurrent<string | null>(record, 'suspend_payload', 'suspendPayload')),\n retryCount: legacyOrCurrent<number>(record, 'retry_count', 'retryCount'),\n maxRetries: legacyOrCurrent<number>(record, 'max_retries', 'maxRetries'),\n timeoutMs: legacyOrCurrent<number>(record, 'timeout_ms', 'timeoutMs'),\n createdAt: new Date(record.createdAt),\n startedAt: record.startedAt ? new Date(record.startedAt) : undefined,\n suspendedAt: record.suspendedAt ? new Date(record.suspendedAt) : undefined,\n completedAt: record.completedAt ? new Date(record.completedAt) : undefined,\n };\n}\n\nfunction hasDeleteFilter(filter: TaskFilter): boolean {\n return Boolean(\n (Array.isArray(filter.status) ? filter.status.length > 0 : filter.status) ||\n filter.agentId ||\n filter.threadId ||\n filter.resourceId ||\n filter.toolName ||\n filter.toolCallId ||\n filter.runId ||\n filter.fromDate ||\n filter.toDate,\n );\n}\n\nexport class BackgroundTasksConvex extends BackgroundTasksStorage {\n #db: ConvexDB;\n\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_BACKGROUND_TASKS });\n }\n\n async createTask(task: BackgroundTask): Promise<void> {\n await this.#db.insert({ tableName: TABLE_BACKGROUND_TASKS, record: toStored(task) });\n }\n\n async updateTask(taskId: string, update: UpdateBackgroundTask): Promise<void> {\n const patch = toStoredPatch(update);\n if (Object.keys(patch).length === 0) return;\n\n await this.#db.patch({\n tableName: TABLE_BACKGROUND_TASKS,\n id: taskId,\n record: patch,\n });\n }\n\n async getTask(taskId: string): Promise<BackgroundTask | null> {\n const data = await this.#db.load<StoredTask>({ tableName: TABLE_BACKGROUND_TASKS, keys: { id: taskId } });\n return data ? fromStored(data) : null;\n }\n\n async listTasks(filter: TaskFilter): Promise<TaskListResult> {\n const queryFilters: Array<{ field: string; value: string }> = [];\n\n if (typeof filter.status === 'string') queryFilters.push({ field: 'status', value: filter.status });\n // Convex only supports equality indexes here; multi-status lists still need the in-memory filter below.\n if (Array.isArray(filter.status) && filter.status.length === 1) {\n queryFilters.push({ field: 'status', value: filter.status[0]! });\n }\n if (filter.agentId) queryFilters.push({ field: 'agent_id', value: filter.agentId });\n if (filter.threadId) queryFilters.push({ field: 'thread_id', value: filter.threadId });\n if (filter.resourceId) queryFilters.push({ field: 'resource_id', value: filter.resourceId });\n if (filter.toolName) queryFilters.push({ field: 'tool_name', value: filter.toolName });\n if (filter.toolCallId) queryFilters.push({ field: 'tool_call_id', value: filter.toolCallId });\n if (filter.runId) queryFilters.push({ field: 'run_id', value: filter.runId });\n\n const all = await this.#db.queryTable<StoredTask>(\n TABLE_BACKGROUND_TASKS,\n queryFilters.length > 0 ? queryFilters : undefined,\n );\n let tasks = all.map(fromStored);\n\n if (filter.status) {\n const s = Array.isArray(filter.status) ? filter.status : [filter.status];\n tasks = tasks.filter(t => s.includes(t.status));\n }\n if (filter.agentId) tasks = tasks.filter(t => t.agentId === filter.agentId);\n if (filter.threadId) tasks = tasks.filter(t => t.threadId === filter.threadId);\n if (filter.resourceId) tasks = tasks.filter(t => t.resourceId === filter.resourceId);\n if (filter.toolName) tasks = tasks.filter(t => t.toolName === filter.toolName);\n if (filter.toolCallId) tasks = tasks.filter(t => t.toolCallId === filter.toolCallId);\n if (filter.runId) tasks = tasks.filter(t => t.runId === filter.runId);\n // Date range filtering\n const dateCol = filter.dateFilterBy ?? 'createdAt';\n if (filter.fromDate) {\n tasks = tasks.filter(t => {\n const val = t[dateCol];\n return val != null && val >= filter.fromDate!;\n });\n }\n if (filter.toDate) {\n tasks = tasks.filter(t => {\n const val = t[dateCol];\n return val != null && val < filter.toDate!;\n });\n }\n\n const orderBy = filter.orderBy ?? 'createdAt';\n const dir = filter.orderDirection === 'desc' ? -1 : 1;\n tasks.sort((a, b) => ((a[orderBy]?.getTime() ?? 0) - (b[orderBy]?.getTime() ?? 0)) * dir);\n\n // Capture total before pagination\n const total = tasks.length;\n\n if (filter.page != null && filter.perPage != null) {\n const start = filter.page * filter.perPage;\n tasks = tasks.slice(start, start + filter.perPage);\n } else if (filter.perPage != null) {\n tasks = tasks.slice(0, filter.perPage);\n }\n return { tasks, total };\n }\n\n async deleteTask(taskId: string): Promise<void> {\n await this.#db.deleteMany(TABLE_BACKGROUND_TASKS, [taskId]);\n }\n\n async deleteTasks(filter: TaskFilter): Promise<void> {\n if (!hasDeleteFilter(filter)) return;\n\n const { tasks } = await this.listTasks(filter);\n const taskIds = tasks.map(t => t.id);\n await this.#db.deleteMany(TABLE_BACKGROUND_TASKS, taskIds);\n }\n\n async getRunningCount(): Promise<number> {\n const { total } = await this.listTasks({ status: 'running' });\n return total;\n }\n async getRunningCountByAgent(agentId: string): Promise<number> {\n const { total } = await this.listTasks({ status: 'running', agentId });\n return total;\n }\n}\n","import { ChannelsStorage, TABLE_CHANNEL_CONFIG, TABLE_CHANNEL_INSTALLATIONS } from '@mastra/core/storage';\nimport type { ChannelConfig, ChannelInstallation } from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype ChannelInstallationRecord = {\n id: string;\n platform: string;\n agentId: string;\n status: ChannelInstallation['status'];\n webhookId: string | null;\n data: string;\n configHash: string | null;\n error: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\ntype ChannelConfigRecord = Omit<ChannelConfig, 'updatedAt' | 'data'> & {\n id: string;\n updatedAt: string;\n data: string;\n};\n\nconst statusPriority: Record<ChannelInstallation['status'], number> = {\n active: 0,\n pending: 1,\n error: 2,\n};\n\nfunction stringifyJson(value: Record<string, unknown>): string {\n return JSON.stringify(value);\n}\n\nfunction parseJson(value: string, context: string): Record<string, unknown> {\n try {\n return JSON.parse(value) as Record<string, unknown>;\n } catch (error) {\n throw new Error(`Invalid channel data JSON for ${context}`, { cause: error });\n }\n}\n\nfunction installationToRecord(\n installation: ChannelInstallation,\n existingRecord?: ChannelInstallationRecord | null,\n): ChannelInstallationRecord {\n const now = new Date().toISOString();\n return {\n id: installation.id,\n platform: installation.platform,\n agentId: installation.agentId,\n status: installation.status,\n webhookId: installation.webhookId ?? null,\n data: stringifyJson(installation.data),\n configHash: installation.configHash ?? null,\n error: installation.error ?? null,\n createdAt: existingRecord?.createdAt ?? installation.createdAt?.toISOString() ?? now,\n updatedAt: now,\n };\n}\n\nfunction recordToInstallation(record: ChannelInstallationRecord): ChannelInstallation {\n return {\n id: record.id,\n platform: record.platform,\n agentId: record.agentId,\n status: record.status,\n webhookId: record.webhookId ?? undefined,\n data: parseJson(record.data, `installation ${record.id}`),\n configHash: record.configHash ?? undefined,\n error: record.error ?? undefined,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n}\n\nfunction configToRecord(config: ChannelConfig): ChannelConfigRecord {\n return {\n id: config.platform,\n platform: config.platform,\n data: stringifyJson(config.data),\n updatedAt: config.updatedAt.toISOString(),\n };\n}\n\nfunction recordToConfig(record: ChannelConfigRecord): ChannelConfig {\n return {\n platform: record.platform,\n data: parseJson(record.data, `config ${record.platform}`),\n updatedAt: new Date(record.updatedAt),\n };\n}\n\nfunction sortInstallationsForAgent(a: ChannelInstallation, b: ChannelInstallation): number {\n const statusDiff = statusPriority[a.status] - statusPriority[b.status];\n if (statusDiff !== 0) return statusDiff;\n return b.updatedAt.getTime() - a.updatedAt.getTime();\n}\n\nexport class ChannelsConvex extends ChannelsStorage {\n #db: ConvexDB;\n\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_CHANNEL_INSTALLATIONS });\n await this.#db.clearTable({ tableName: TABLE_CHANNEL_CONFIG });\n }\n\n async saveInstallation(installation: ChannelInstallation): Promise<void> {\n const existingRecord = await this.#db.load<ChannelInstallationRecord | null>({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n keys: { id: installation.id },\n });\n\n await this.#db.insert({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n record: installationToRecord(installation, existingRecord),\n });\n }\n\n async getInstallation(id: string): Promise<ChannelInstallation | null> {\n const record = await this.#db.load<ChannelInstallationRecord | null>({\n tableName: TABLE_CHANNEL_INSTALLATIONS,\n keys: { id },\n });\n return record ? recordToInstallation(record) : null;\n }\n\n async getInstallationByAgent(platform: string, agentId: string): Promise<ChannelInstallation | null> {\n const records = await this.#db.queryTable<ChannelInstallationRecord>(TABLE_CHANNEL_INSTALLATIONS, [\n { field: 'platform', value: platform },\n { field: 'agentId', value: agentId },\n ]);\n const [installation] = records.map(recordToInstallation).sort(sortInstallationsForAgent);\n return installation ?? null;\n }\n\n async getInstallationByWebhookId(webhookId: string): Promise<ChannelInstallation | null> {\n const records = await this.#db.queryTable<ChannelInstallationRecord>(TABLE_CHANNEL_INSTALLATIONS, [\n { field: 'webhookId', value: webhookId },\n ]);\n const [installation] = records\n .map(recordToInstallation)\n .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n return installation ?? null;\n }\n\n async listInstallations(platform: string): Promise<ChannelInstallation[]> {\n const records = await this.#db.queryTable<ChannelInstallationRecord>(TABLE_CHANNEL_INSTALLATIONS, [\n { field: 'platform', value: platform },\n ]);\n return records.map(recordToInstallation).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());\n }\n\n async deleteInstallation(id: string): Promise<void> {\n await this.#db.deleteMany(TABLE_CHANNEL_INSTALLATIONS, [id]);\n }\n\n async saveConfig(config: ChannelConfig): Promise<void> {\n await this.#db.insert({\n tableName: TABLE_CHANNEL_CONFIG,\n record: configToRecord(config),\n });\n }\n\n async getConfig(platform: string): Promise<ChannelConfig | null> {\n const record = await this.#db.load<ChannelConfigRecord | null>({\n tableName: TABLE_CHANNEL_CONFIG,\n keys: { id: platform },\n });\n return record ? recordToConfig(record) : null;\n }\n\n async deleteConfig(platform: string): Promise<void> {\n await this.#db.deleteMany(TABLE_CHANNEL_CONFIG, [platform]);\n }\n}\n","import { MessageList } from '@mastra/core/agent';\nimport type { MastraMessageContentV2 } from '@mastra/core/agent';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type { MastraDBMessage, StorageThreadType } from '@mastra/core/memory';\nimport {\n filterByDateRange,\n MemoryStorage,\n TABLE_MESSAGES,\n TABLE_RESOURCES,\n TABLE_THREADS,\n calculatePagination,\n createStorageErrorId,\n normalizePerPage,\n safelyParseJSON,\n} from '@mastra/core/storage';\nimport type {\n StorageListMessagesInput,\n StorageListMessagesOutput,\n StorageListThreadsInput,\n StorageListThreadsOutput,\n StorageResourceType,\n} from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype StoredMessage = {\n id: string;\n thread_id: string;\n content: string;\n role: string;\n type: string;\n createdAt: string;\n resourceId: string | null;\n};\n\nexport class MemoryConvex extends MemoryStorage {\n #db: ConvexDB;\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_THREADS });\n await this.#db.clearTable({ tableName: TABLE_MESSAGES });\n await this.#db.clearTable({ tableName: TABLE_RESOURCES });\n }\n\n async getThreadById({\n threadId,\n resourceId,\n }: {\n threadId: string;\n resourceId?: string;\n }): Promise<StorageThreadType | null> {\n const row = await this.#db.load<\n (Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_THREADS,\n keys: { id: threadId },\n });\n\n if (!row || (resourceId !== undefined && row.resourceId !== resourceId)) return null;\n\n return {\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n\n async saveThread({ thread }: { thread: StorageThreadType }): Promise<StorageThreadType> {\n await this.#db.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n metadata: thread.metadata ?? {},\n },\n });\n return thread;\n }\n\n async updateThread({\n id,\n title,\n metadata,\n }: {\n id: string;\n title: string;\n metadata: Record<string, unknown>;\n }): Promise<StorageThreadType> {\n const existing = await this.getThreadById({ threadId: id });\n if (!existing) {\n throw new MastraError({\n id: createStorageErrorId('CONVEX', 'UPDATE_THREAD', 'THREAD_NOT_FOUND'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n text: `Thread ${id} not found`,\n });\n }\n\n const updated: StorageThreadType = {\n ...existing,\n title,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: new Date(),\n };\n\n await this.saveThread({ thread: updated });\n return updated;\n }\n\n async deleteThread({ threadId }: { threadId: string }): Promise<void> {\n const messages = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: threadId },\n ]);\n await this.#db.deleteMany(\n TABLE_MESSAGES,\n messages.map(msg => msg.id),\n );\n await this.#db.deleteMany(TABLE_THREADS, [threadId]);\n }\n\n async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n const { page = 0, perPage: perPageInput, orderBy, filter } = args;\n\n try {\n // Validate pagination input before normalization\n // This ensures page === 0 when perPageInput === false\n this.validatePaginationInput(page, perPageInput ?? 100);\n } catch (error) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_THREADS', 'INVALID_PAGE'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { page, ...(perPageInput !== undefined && { perPage: perPageInput }) },\n },\n error instanceof Error ? error : new Error('Invalid pagination parameters'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 100);\n\n const { field, direction } = this.parseOrderBy(orderBy);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n\n // Build query filters\n const queryFilters: Array<{ field: string; value: any }> = [];\n\n if (filter?.resourceId) {\n queryFilters.push({ field: 'resourceId', value: filter.resourceId });\n }\n\n const rows = await this.#db.queryTable<\n Omit<StorageThreadType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }\n >(TABLE_THREADS, queryFilters);\n\n let threads = rows.map(row => ({\n ...row,\n metadata: typeof row.metadata === 'string' ? JSON.parse(row.metadata) : row.metadata,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n }));\n\n // Apply metadata filters if provided (AND logic)\n if (filter?.metadata && Object.keys(filter.metadata).length > 0) {\n threads = threads.filter(thread => {\n if (!thread.metadata) return false;\n return Object.entries(filter.metadata!).every(([key, value]) => thread.metadata![key] === value);\n });\n }\n\n threads.sort((a, b) => {\n const aValue = a[field];\n const bValue = b[field];\n const aTime = aValue instanceof Date ? aValue.getTime() : new Date(aValue as any).getTime();\n const bTime = bValue instanceof Date ? bValue.getTime() : new Date(bValue as any).getTime();\n return direction === 'ASC' ? aTime - bTime : bTime - aTime;\n });\n\n const total = threads.length;\n const paginated = perPageInput === false ? threads : threads.slice(offset, offset + perPage);\n\n return {\n threads: paginated,\n total,\n page,\n perPage: perPageForResponse,\n hasMore: perPageInput === false ? false : offset + perPage < total,\n };\n }\n\n async listMessages(args: StorageListMessagesInput): Promise<StorageListMessagesOutput> {\n const { threadId, resourceId, include, filter, perPage: perPageInput, page = 0, orderBy } = args;\n\n // Normalize threadId to array\n const threadIds = Array.isArray(threadId) ? threadId : [threadId];\n\n if (threadIds.length === 0 || threadIds.some(id => !id.trim())) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_MESSAGES', 'INVALID_THREAD_ID'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { threadId: Array.isArray(threadId) ? threadId.join(',') : threadId },\n },\n new Error('threadId must be a non-empty string or array of non-empty strings'),\n );\n }\n\n const perPage = normalizePerPage(perPageInput, 40);\n const { offset, perPage: perPageForResponse } = calculatePagination(page, perPageInput, perPage);\n const { field, direction } = this.parseOrderBy(orderBy, 'ASC');\n\n // When perPage is 0 with no includes, there's nothing to return.\n if (perPage === 0 && (!include || include.length === 0)) {\n return { messages: [], total: 0, page, perPage: perPageForResponse, hasMore: false };\n }\n\n // When perPage is 0, we only need included messages — skip full thread load\n if (perPage === 0 && include && include.length > 0) {\n const messages = await this._getIncludedMessages(include);\n const list = new MessageList().add(messages, 'memory');\n return {\n messages: this._sortMessages(list.get.all.db(), field, direction),\n total: 0,\n page,\n perPage: perPageForResponse,\n hasMore: false,\n };\n }\n\n // Fetch messages from all threads\n let rows: StoredMessage[] = [];\n for (const tid of threadIds) {\n const threadRows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [{ field: 'thread_id', value: tid }]);\n rows.push(...threadRows);\n }\n\n if (resourceId) {\n rows = rows.filter(row => row.resourceId === resourceId);\n }\n\n // Apply date range filter\n rows = filterByDateRange(rows, row => new Date(row.createdAt), filter?.dateRange);\n\n rows.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((a as Record<string, any>)[field]).getTime()\n : (a as Record<string, any>)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt'\n ? new Date((b as Record<string, any>)[field]).getTime()\n : (b as Record<string, any>)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n\n const totalThreadMessages = rows.length;\n const paginatedRows = perPageInput === false ? rows : rows.slice(offset, offset + perPage);\n let messages = paginatedRows.map(row => this.parseStoredMessage(row));\n const messageIds = new Set(messages.map(msg => msg.id));\n\n if (include && include.length > 0) {\n // Pre-populate cache with already-fetched thread messages, but only when\n // rows represent a full unfiltered thread snapshot. When resourceId or\n // dateRange filters are active, the rows are a subset and would cause\n // addContextMessages() to compute neighbors from a truncated snapshot.\n const preloadedThreads = new Map<string, StoredMessage[]>();\n if (!resourceId && !filter?.dateRange) {\n for (const tid of threadIds) {\n preloadedThreads.set(\n tid,\n rows.filter(r => r.thread_id === tid),\n );\n }\n }\n\n const includedMessages = await this._getIncludedMessages(include, preloadedThreads);\n for (const msg of includedMessages) {\n if (!messageIds.has(msg.id)) {\n messages.push(msg);\n messageIds.add(msg.id);\n }\n }\n }\n\n messages = this._sortMessages(messages, field, direction);\n\n const hasMore =\n include && include.length > 0\n ? new Set(messages.filter(m => m.threadId === threadId).map(m => m.id)).size < totalThreadMessages\n : perPageInput === false\n ? false\n : offset + perPage < totalThreadMessages;\n\n return {\n messages,\n total: totalThreadMessages,\n page,\n perPage: perPageForResponse,\n hasMore,\n };\n }\n\n async listMessagesById({ messageIds }: { messageIds: string[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messageIds.length === 0) {\n return { messages: [] };\n }\n const rows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const filtered = rows.filter(row => messageIds.includes(row.id)).map(row => this.parseStoredMessage(row));\n const list = new MessageList().add(filtered, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async saveMessages({ messages }: { messages: MastraDBMessage[] }): Promise<{ messages: MastraDBMessage[] }> {\n if (messages.length === 0) return { messages: [] };\n\n const normalized = messages.map(message => {\n if (!message.threadId) {\n throw new Error('Thread ID is required');\n }\n if (!message.resourceId) {\n throw new Error('Resource ID is required');\n }\n const createdAt = message.createdAt instanceof Date ? message.createdAt.toISOString() : message.createdAt;\n return {\n id: message.id,\n thread_id: message.threadId,\n content: JSON.stringify(message.content),\n role: message.role,\n type: message.type || 'v2',\n createdAt,\n resourceId: message.resourceId,\n };\n });\n\n await this.#db.batchInsert({\n tableName: TABLE_MESSAGES,\n records: normalized,\n });\n\n // Update thread updatedAt timestamps for all affected threads\n const threadIds = [...new Set(messages.map(m => m.threadId).filter(Boolean) as string[])];\n const now = new Date();\n for (const threadId of threadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.#db.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n const list = new MessageList().add(messages, 'memory');\n return { messages: list.get.all.db() };\n }\n\n async updateMessages({\n messages,\n }: {\n messages: (Partial<Omit<MastraDBMessage, 'createdAt'>> & {\n id: string;\n content?: { metadata?: MastraMessageContentV2['metadata']; content?: MastraMessageContentV2['content'] };\n })[];\n }): Promise<MastraDBMessage[]> {\n if (messages.length === 0) return [];\n\n const existing = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, undefined);\n const updated: MastraDBMessage[] = [];\n const affectedThreadIds = new Set<string>();\n\n for (const update of messages) {\n const current = existing.find(row => row.id === update.id);\n if (!current) continue;\n\n // Track old thread for timestamp update\n affectedThreadIds.add(current.thread_id);\n\n if (update.threadId) {\n // Track new thread for timestamp update when moving messages\n affectedThreadIds.add(update.threadId);\n current.thread_id = update.threadId;\n }\n if (update.resourceId !== undefined) {\n current.resourceId = update.resourceId ?? null;\n }\n if (update.role) {\n current.role = update.role;\n }\n if (update.type) {\n current.type = update.type;\n }\n if (update.content) {\n const existingContent = safelyParseJSON(current.content) || {};\n const mergedContent = {\n ...existingContent,\n ...update.content,\n ...(existingContent.metadata && update.content.metadata\n ? { metadata: { ...existingContent.metadata, ...update.content.metadata } }\n : {}),\n };\n current.content = JSON.stringify(mergedContent);\n }\n\n await this.#db.insert({\n tableName: TABLE_MESSAGES,\n record: current,\n });\n updated.push(this.parseStoredMessage(current));\n }\n\n // Update thread updatedAt timestamps for all affected threads\n const now = new Date();\n for (const threadId of affectedThreadIds) {\n const thread = await this.getThreadById({ threadId });\n if (thread) {\n await this.#db.insert({\n tableName: TABLE_THREADS,\n record: {\n ...thread,\n id: thread.id,\n updatedAt: now.toISOString(),\n createdAt: thread.createdAt instanceof Date ? thread.createdAt.toISOString() : thread.createdAt,\n metadata: thread.metadata ?? {},\n },\n });\n }\n }\n\n return updated;\n }\n\n async deleteMessages(messageIds: string[]): Promise<void> {\n await this.#db.deleteMany(TABLE_MESSAGES, messageIds);\n }\n\n async saveResource({ resource }: { resource: StorageResourceType }): Promise<StorageResourceType> {\n const record: Record<string, unknown> = {\n ...resource,\n createdAt: resource.createdAt instanceof Date ? resource.createdAt.toISOString() : resource.createdAt,\n updatedAt: resource.updatedAt instanceof Date ? resource.updatedAt.toISOString() : resource.updatedAt,\n };\n // Only include metadata if it's defined\n if (resource.metadata !== undefined) {\n record.metadata = resource.metadata;\n }\n await this.#db.insert({\n tableName: TABLE_RESOURCES,\n record,\n });\n return resource;\n }\n\n async getResourceById({ resourceId }: { resourceId: string }): Promise<StorageResourceType | null> {\n const record = await this.#db.load<\n (Omit<StorageResourceType, 'createdAt' | 'updatedAt'> & { createdAt: string; updatedAt: string }) | null\n >({\n tableName: TABLE_RESOURCES,\n keys: { id: resourceId },\n });\n if (!record) return null;\n\n return {\n ...record,\n metadata: typeof record.metadata === 'string' ? safelyParseJSON(record.metadata) : record.metadata,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(record.updatedAt),\n };\n }\n\n async updateResource({\n resourceId,\n workingMemory,\n metadata,\n }: {\n resourceId: string;\n workingMemory?: string;\n metadata?: Record<string, unknown>;\n }): Promise<StorageResourceType> {\n const existing = await this.getResourceById({ resourceId });\n const now = new Date();\n if (!existing) {\n const created: StorageResourceType = {\n id: resourceId,\n workingMemory,\n metadata: metadata ?? {},\n createdAt: now,\n updatedAt: now,\n };\n return this.saveResource({ resource: created });\n }\n\n const updated: StorageResourceType = {\n ...existing,\n workingMemory: workingMemory ?? existing.workingMemory,\n metadata: {\n ...existing.metadata,\n ...metadata,\n },\n updatedAt: now,\n };\n\n await this.saveResource({ resource: updated });\n return updated;\n }\n\n private _sortMessages(messages: MastraDBMessage[], field: string, direction: string): MastraDBMessage[] {\n return messages.sort((a, b) => {\n const aValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((a as any)[field]).getTime() : (a as any)[field];\n const bValue =\n field === 'createdAt' || field === 'updatedAt' ? new Date((b as any)[field]).getTime() : (b as any)[field];\n if (typeof aValue === 'number' && typeof bValue === 'number') {\n return direction === 'ASC' ? aValue - bValue : bValue - aValue;\n }\n return direction === 'ASC'\n ? String(aValue).localeCompare(String(bValue))\n : String(bValue).localeCompare(String(aValue));\n });\n }\n\n private async _getIncludedMessages(\n include: NonNullable<StorageListMessagesInput['include']>,\n preloadedThreads?: Map<string, StoredMessage[]>,\n ): Promise<MastraDBMessage[]> {\n if (include.length === 0) return [];\n\n const messages: MastraDBMessage[] = [];\n const messageIds = new Set<string>();\n const threadMessagesCache = new Map<string, StoredMessage[]>(preloadedThreads ?? []);\n const cachedTargets = new Map<string, { threadId: string; row: StoredMessage }>();\n\n for (const [threadId, rows] of threadMessagesCache) {\n for (const row of rows) {\n cachedTargets.set(row.id, { threadId, row });\n }\n }\n\n for (const includeItem of include) {\n let targetThreadId: string | undefined;\n let target: StoredMessage | undefined;\n\n const cached = cachedTargets.get(includeItem.id);\n if (cached) {\n target = cached.row;\n targetThreadId = cached.threadId;\n }\n\n // If not found, query by message ID directly\n if (!target) {\n const messageRows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'id', value: includeItem.id },\n ]);\n if (messageRows.length > 0) {\n target = messageRows[0];\n targetThreadId = target!.thread_id;\n\n if (targetThreadId && !threadMessagesCache.has(targetThreadId)) {\n const otherThreadRows = await this.#db.queryTable<StoredMessage>(TABLE_MESSAGES, [\n { field: 'thread_id', value: targetThreadId },\n ]);\n threadMessagesCache.set(targetThreadId, otherThreadRows);\n for (const row of otherThreadRows) {\n cachedTargets.set(row.id, { threadId: targetThreadId, row });\n }\n }\n }\n }\n\n if (!target || !targetThreadId) continue;\n\n if (!messageIds.has(target.id)) {\n messages.push(this.parseStoredMessage(target));\n messageIds.add(target.id);\n }\n\n const targetThreadRows = threadMessagesCache.get(targetThreadId) || [];\n await this.addContextMessages({\n includeItem,\n allMessages: targetThreadRows,\n targetThreadId,\n messageIds,\n messages,\n });\n }\n\n return messages;\n }\n\n private parseStoredMessage(message: StoredMessage): MastraDBMessage {\n const content = safelyParseJSON(message.content);\n return {\n id: message.id,\n threadId: message.thread_id,\n content,\n role: message.role as MastraDBMessage['role'],\n type: message.type,\n createdAt: new Date(message.createdAt),\n resourceId: message.resourceId ?? undefined,\n };\n }\n\n private async addContextMessages({\n includeItem,\n allMessages,\n targetThreadId,\n messageIds,\n messages,\n }: {\n includeItem: NonNullable<StorageListMessagesInput['include']>[number];\n allMessages: StoredMessage[];\n targetThreadId: string;\n messageIds: Set<string>;\n messages: MastraDBMessage[];\n }): Promise<void> {\n const ordered = allMessages\n .filter(row => row.thread_id === targetThreadId)\n .sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());\n\n const targetIndex = ordered.findIndex(row => row.id === includeItem.id);\n if (targetIndex === -1) return;\n\n if (includeItem.withPreviousMessages) {\n const start = Math.max(0, targetIndex - includeItem.withPreviousMessages);\n for (let i = start; i < targetIndex; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n\n if (includeItem.withNextMessages) {\n const end = Math.min(ordered.length, targetIndex + includeItem.withNextMessages + 1);\n for (let i = targetIndex + 1; i < end; i++) {\n const row = ordered[i];\n if (row && !messageIds.has(row.id)) {\n messages.push(this.parseStoredMessage(row));\n messageIds.add(row.id);\n }\n }\n }\n }\n}\n","import crypto from 'node:crypto';\n\nimport type {\n Schedule,\n ScheduleFilter,\n ScheduleStatus,\n ScheduleTarget,\n ScheduleTrigger,\n ScheduleTriggerListOptions,\n ScheduleUpdate,\n} from '@mastra/core/storage';\nimport { SchedulesStorage, TABLE_SCHEDULES, TABLE_SCHEDULE_TRIGGERS } from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype ScheduleRecord = {\n id: string;\n target: ScheduleTarget | string;\n cron: string;\n timezone?: string | null;\n status: ScheduleStatus;\n next_fire_at: number;\n last_fire_at?: number | null;\n last_run_id?: string | null;\n created_at: number;\n updated_at: number;\n metadata?: Record<string, unknown> | string | null;\n owner_type?: string | null;\n owner_id?: string | null;\n workflow_id?: string | null;\n};\n\ntype TriggerRecord = {\n id: string;\n schedule_id: string;\n run_id?: string | null;\n scheduled_fire_at: number;\n actual_fire_at: number;\n outcome: ScheduleTrigger['outcome'];\n error?: string | null;\n trigger_kind?: ScheduleTrigger['triggerKind'] | null;\n parent_trigger_id?: string | null;\n metadata?: Record<string, unknown> | string | null;\n};\n\nconst SCHEDULE_LIST_LIMIT = 8_000;\n\nfunction serializeJson(value: unknown): string {\n return JSON.stringify(value);\n}\n\nfunction parseJson<T>(value: T | string | null | undefined): T | undefined {\n if (value == null) return undefined;\n if (typeof value === 'string') {\n try {\n return JSON.parse(value) as T;\n } catch {\n return value as T;\n }\n }\n return value;\n}\n\nfunction isMissingSchedulesSchemaError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error);\n return /(?:Table|table)\\s+(?:[\"'`])?(?:mastra_schedules|mastra_schedule_triggers)(?:[\"'`])?\\s+(?:is\\s+)?(?:not\\s+in\\s+the\\s+schema|not\\s+found\\s+in\\s+schema|not\\s+found|does\\s+not\\s+exist)/i.test(\n message,\n );\n}\n\nfunction scheduleToRecord(schedule: Schedule): ScheduleRecord {\n return {\n id: schedule.id,\n target: serializeJson(schedule.target),\n cron: schedule.cron,\n timezone: schedule.timezone ?? null,\n status: schedule.status,\n next_fire_at: schedule.nextFireAt,\n last_fire_at: schedule.lastFireAt ?? null,\n last_run_id: schedule.lastRunId ?? null,\n created_at: schedule.createdAt,\n updated_at: schedule.updatedAt,\n metadata: schedule.metadata == null ? null : serializeJson(schedule.metadata),\n owner_type: schedule.ownerType ?? null,\n owner_id: schedule.ownerId ?? null,\n workflow_id: schedule.target.type === 'workflow' ? schedule.target.workflowId : null,\n };\n}\n\nfunction recordToSchedule(record: ScheduleRecord): Schedule {\n const target = parseJson<ScheduleTarget>(record.target);\n if (!target || typeof target !== 'object' || typeof (target as { type?: unknown }).type !== 'string') {\n throw new Error(`Schedule ${record.id} has invalid target`);\n }\n\n const schedule: Schedule = {\n id: String(record.id),\n target,\n cron: String(record.cron),\n status: String(record.status) as ScheduleStatus,\n nextFireAt: Number(record.next_fire_at),\n createdAt: Number(record.created_at),\n updatedAt: Number(record.updated_at),\n };\n if (record.timezone != null) schedule.timezone = String(record.timezone);\n if (record.last_fire_at != null) schedule.lastFireAt = Number(record.last_fire_at);\n if (record.last_run_id != null) schedule.lastRunId = String(record.last_run_id);\n const metadata = parseJson<Record<string, unknown>>(record.metadata);\n if (metadata != null) schedule.metadata = metadata;\n if (record.owner_type != null) schedule.ownerType = String(record.owner_type) as Schedule['ownerType'];\n if (record.owner_id != null) schedule.ownerId = String(record.owner_id);\n return schedule;\n}\n\nfunction triggerToRecord(trigger: ScheduleTrigger): TriggerRecord {\n return {\n id: trigger.id ?? crypto.randomUUID(),\n schedule_id: trigger.scheduleId,\n run_id: trigger.runId,\n scheduled_fire_at: trigger.scheduledFireAt,\n actual_fire_at: trigger.actualFireAt,\n outcome: trigger.outcome,\n error: trigger.error ?? null,\n trigger_kind: trigger.triggerKind ?? 'schedule-fire',\n parent_trigger_id: trigger.parentTriggerId ?? null,\n metadata: trigger.metadata == null ? null : serializeJson(trigger.metadata),\n };\n}\n\nfunction recordToTrigger(record: TriggerRecord): ScheduleTrigger {\n const trigger: ScheduleTrigger = {\n id: record.id != null ? String(record.id) : undefined,\n scheduleId: String(record.schedule_id),\n runId: record.run_id != null ? String(record.run_id) : null,\n scheduledFireAt: Number(record.scheduled_fire_at),\n actualFireAt: Number(record.actual_fire_at),\n outcome: String(record.outcome) as ScheduleTrigger['outcome'],\n triggerKind:\n record.trigger_kind != null ? (String(record.trigger_kind) as ScheduleTrigger['triggerKind']) : 'schedule-fire',\n };\n if (record.error != null) trigger.error = String(record.error);\n if (record.parent_trigger_id != null) trigger.parentTriggerId = String(record.parent_trigger_id);\n const metadata = parseJson<Record<string, unknown>>(record.metadata);\n if (metadata != null) trigger.metadata = metadata;\n return trigger;\n}\n\nexport class SchedulesConvex extends SchedulesStorage {\n #db: ConvexDB;\n\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SCHEDULE_TRIGGERS });\n await this.#db.clearTable({ tableName: TABLE_SCHEDULES });\n }\n\n async createSchedule(schedule: Schedule): Promise<Schedule> {\n await this.#db.createSchedule(scheduleToRecord(schedule));\n return schedule;\n }\n\n async getSchedule(id: string): Promise<Schedule | null> {\n const record = await this.#db.load<ScheduleRecord | null>({ tableName: TABLE_SCHEDULES, keys: { id } });\n return record ? recordToSchedule(record) : null;\n }\n\n async listSchedules(filter?: ScheduleFilter): Promise<Schedule[]> {\n const queryFilters: Array<{ field: string; value: string | null }> = [];\n if (filter?.status) queryFilters.push({ field: 'status', value: filter.status });\n if (filter?.ownerType !== undefined && filter.ownerType !== null) {\n queryFilters.push({ field: 'owner_type', value: filter.ownerType });\n }\n if (filter?.ownerType === null) {\n queryFilters.push({ field: 'owner_type', value: null });\n }\n if (filter?.ownerId !== undefined && filter.ownerId !== null) {\n queryFilters.push({ field: 'owner_id', value: filter.ownerId });\n }\n if (filter?.ownerId === null) {\n queryFilters.push({ field: 'owner_id', value: null });\n }\n if (filter?.workflowId) queryFilters.push({ field: 'workflow_id', value: filter.workflowId });\n\n let records: ScheduleRecord[];\n try {\n records = await this.#db.queryTable<ScheduleRecord>(\n TABLE_SCHEDULES,\n queryFilters.length ? queryFilters : undefined,\n undefined,\n SCHEDULE_LIST_LIMIT,\n );\n } catch (error) {\n if (isMissingSchedulesSchemaError(error)) {\n this.logger.warn('Convex schedules schema is not available; returning no schedules', { error });\n return [];\n }\n throw error;\n }\n\n if (records.length >= SCHEDULE_LIST_LIMIT) {\n this.logger.warn('Convex schedules list reached the adapter limit; results may be truncated', {\n limit: SCHEDULE_LIST_LIMIT,\n });\n }\n\n let schedules = records.map(recordToSchedule);\n\n if (filter?.workflowId) {\n schedules = schedules.filter(\n schedule => schedule.target.type === 'workflow' && schedule.target.workflowId === filter.workflowId,\n );\n }\n if (filter?.ownerType === null) {\n schedules = schedules.filter(schedule => (schedule.ownerType ?? null) === null);\n }\n if (filter?.ownerId === null) {\n schedules = schedules.filter(schedule => (schedule.ownerId ?? null) === null);\n }\n\n schedules.sort((a, b) => a.createdAt - b.createdAt);\n return schedules;\n }\n\n async listDueSchedules(now: number, limit?: number): Promise<Schedule[]> {\n let records: ScheduleRecord[];\n try {\n records = await this.#db.listDueSchedules<ScheduleRecord>(now, limit);\n } catch (error) {\n if (isMissingSchedulesSchemaError(error)) {\n this.logger.warn('Convex schedules schema is not available; returning no due schedules', { error });\n return [];\n }\n throw error;\n }\n return records.map(recordToSchedule);\n }\n\n async updateSchedule(id: string, patch: ScheduleUpdate): Promise<Schedule> {\n const updates: Record<string, unknown> = {};\n if ('cron' in patch && patch.cron !== undefined) {\n updates.cron = patch.cron;\n }\n if ('timezone' in patch) {\n updates.timezone = patch.timezone ?? null;\n }\n if ('status' in patch && patch.status !== undefined) {\n updates.status = patch.status;\n }\n if ('nextFireAt' in patch && patch.nextFireAt !== undefined) {\n updates.next_fire_at = patch.nextFireAt;\n }\n if ('target' in patch && patch.target !== undefined) {\n updates.target = serializeJson(patch.target);\n updates.workflow_id = patch.target.type === 'workflow' ? patch.target.workflowId : null;\n }\n if ('metadata' in patch) {\n updates.metadata = patch.metadata == null ? null : serializeJson(patch.metadata);\n }\n if ('ownerType' in patch) {\n updates.owner_type = patch.ownerType ?? null;\n }\n if ('ownerId' in patch) {\n updates.owner_id = patch.ownerId ?? null;\n }\n\n if (Object.keys(updates).length === 0) {\n const existing = await this.getSchedule(id);\n if (!existing) {\n throw new Error(`Schedule ${id} not found`);\n }\n return existing;\n }\n\n updates.updated_at = Date.now();\n const updated = await this.#db.updateSchedule<ScheduleRecord>({ id, patch: updates });\n return recordToSchedule(updated);\n }\n\n async updateScheduleNextFire(\n id: string,\n expectedNextFireAt: number,\n newNextFireAt: number,\n lastFireAt: number,\n lastRunId: string,\n ): Promise<boolean> {\n return this.#db.updateScheduleNextFire({\n id,\n expectedNextFireAt,\n newNextFireAt,\n lastFireAt,\n lastRunId,\n });\n }\n\n async deleteSchedule(id: string): Promise<void> {\n await this.#db.deleteScheduleTriggers(id);\n await this.#db.deleteMany(TABLE_SCHEDULES, [id]);\n }\n\n async recordTrigger(trigger: ScheduleTrigger): Promise<void> {\n await this.#db.recordScheduleTrigger(triggerToRecord(trigger));\n }\n\n async listTriggers(scheduleId: string, opts?: ScheduleTriggerListOptions): Promise<ScheduleTrigger[]> {\n const triggers = await this.#db.listScheduleTriggers<TriggerRecord>({\n scheduleId,\n fromActualFireAt: opts?.fromActualFireAt,\n toActualFireAt: opts?.toActualFireAt,\n limit: opts?.limit,\n });\n return triggers.map(recordToTrigger);\n }\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport type {\n ListScoresResponse,\n SaveScorePayload,\n ScoreRowData,\n ScoringEntityType,\n ScoringSource,\n} from '@mastra/core/evals';\nimport { TABLE_SCORERS, ScoresStorage, createStorageErrorId } from '@mastra/core/storage';\nimport type { StoragePagination } from '@mastra/core/storage';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype StoredScore = Omit<ScoreRowData, 'createdAt' | 'updatedAt'> & {\n createdAt: string;\n updatedAt: string;\n};\n\nexport class ScoresConvex extends ScoresStorage {\n #db: ConvexDB;\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_SCORERS });\n }\n\n async getScoreById({ id }: { id: string }): Promise<ScoreRowData | null> {\n const row = await this.#db.load<StoredScore | null>({\n tableName: TABLE_SCORERS,\n keys: { id },\n });\n return row ? this.deserialize(row) : null;\n }\n\n async saveScore(score: SaveScorePayload): Promise<{ score: ScoreRowData }> {\n const now = new Date();\n const record = {\n ...score,\n id: crypto.randomUUID(),\n createdAt: now.toISOString(),\n updatedAt: now.toISOString(),\n } as StoredScore;\n\n await this.#db.insert({\n tableName: TABLE_SCORERS,\n record,\n });\n\n return { score: this.deserialize(record) };\n }\n\n async listScoresByScorerId({\n scorerId,\n pagination,\n entityId,\n entityType,\n source,\n }: {\n scorerId: string;\n pagination: StoragePagination;\n entityId?: string;\n entityType?: ScoringEntityType;\n source?: ScoringSource;\n }): Promise<ListScoresResponse> {\n return this.listScores({\n filters: { scorerId, entityId, entityType, source },\n pagination,\n });\n }\n\n async listScoresByRunId({\n runId,\n pagination,\n }: {\n runId: string;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n return this.listScores({\n filters: { runId },\n pagination,\n });\n }\n\n async listScoresByEntityId({\n entityId,\n entityType,\n pagination,\n }: {\n entityId: string;\n entityType: ScoringEntityType;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n return this.listScores({\n filters: { entityId, entityType },\n pagination,\n });\n }\n\n private async listScores({\n filters,\n pagination,\n }: {\n filters: Partial<Pick<ScoreRowData, 'scorerId' | 'entityId' | 'entityType' | 'runId' | 'source'>>;\n pagination: StoragePagination;\n }): Promise<ListScoresResponse> {\n if (pagination.page < 0) {\n throw new MastraError(\n {\n id: createStorageErrorId('CONVEX', 'LIST_SCORES', 'INVALID_PAGINATION'),\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n },\n new Error('page must be >= 0'),\n );\n }\n\n const rows = await this.#db.queryTable<StoredScore>(TABLE_SCORERS, undefined);\n const filtered = rows\n .filter(row => (filters.scorerId ? row.scorerId === filters.scorerId : true))\n .filter(row => (filters.entityId ? row.entityId === filters.entityId : true))\n .filter(row => (filters.entityType ? row.entityType === filters.entityType : true))\n .filter(row => (filters.runId ? row.runId === filters.runId : true))\n .filter(row => (filters.source ? row.source === filters.source : true))\n .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n const { perPage, page } = pagination;\n const perPageValue = perPage === false ? filtered.length : perPage;\n const start = perPage === false ? 0 : page * perPageValue;\n const end = perPage === false ? filtered.length : start + perPageValue;\n const slice = filtered.slice(start, end).map(row => this.deserialize(row));\n\n return {\n pagination: {\n total: filtered.length,\n page,\n perPage,\n hasMore: perPage === false ? false : end < filtered.length,\n },\n scores: slice,\n };\n }\n\n private deserialize(row: StoredScore): ScoreRowData {\n return {\n ...(row as unknown as ScoreRowData),\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n };\n }\n}\n","import { TABLE_WORKFLOW_SNAPSHOT, normalizePerPage, WorkflowsStorage } from '@mastra/core/storage';\nimport type {\n StorageListWorkflowRunsInput,\n StorageWorkflowRun,\n WorkflowRun,\n WorkflowRuns,\n UpdateWorkflowStateOptions,\n} from '@mastra/core/storage';\nimport type { StepResult, WorkflowRunState } from '@mastra/core/workflows';\n\nimport { ConvexDB, resolveConvexConfig } from '../../db';\nimport type { ConvexDomainConfig } from '../../db';\n\ntype RawWorkflowRun = Omit<StorageWorkflowRun, 'createdAt' | 'updatedAt' | 'snapshot'> & {\n createdAt: string;\n updatedAt: string;\n snapshot: WorkflowRunState | string;\n};\n\nexport class WorkflowsConvex extends WorkflowsStorage {\n #db: ConvexDB;\n constructor(config: ConvexDomainConfig) {\n super();\n const client = resolveConvexConfig(config);\n this.#db = new ConvexDB(client);\n }\n\n supportsConcurrentUpdates(): boolean {\n return true;\n }\n\n async init(): Promise<void> {\n // No-op for Convex; schema is managed server-side.\n }\n\n async dangerouslyClearAll(): Promise<void> {\n await this.#db.clearTable({ tableName: TABLE_WORKFLOW_SNAPSHOT });\n }\n\n async updateWorkflowResults(args: {\n workflowName: string;\n runId: string;\n stepId: string;\n result: StepResult<any, any, any, any>;\n requestContext: Record<string, any>;\n }): Promise<Record<string, StepResult<any, any, any, any>>> {\n return this.#db.mergeWorkflowStepResult(args);\n }\n\n async updateWorkflowState(args: {\n workflowName: string;\n runId: string;\n opts: UpdateWorkflowStateOptions;\n }): Promise<WorkflowRunState | undefined> {\n return this.#db.mergeWorkflowState(args);\n }\n\n async persistWorkflowSnapshot({\n workflowName,\n runId,\n resourceId,\n snapshot,\n createdAt,\n updatedAt,\n }: {\n workflowName: string;\n runId: string;\n resourceId?: string;\n snapshot: WorkflowRunState;\n createdAt?: Date;\n updatedAt?: Date;\n }): Promise<void> {\n const now = new Date();\n // Check if a record already exists to preserve createdAt\n const existing = await this.#db.load<{ createdAt?: string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n await this.#db.insert({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n record: {\n workflow_name: workflowName,\n run_id: runId,\n resourceId,\n // Convex rejects any field whose name starts with `$` (reserved prefix).\n // Workflow snapshots embed tool outputs whose serialized Zod->JSON Schemas\n // contain $schema/$ref/$defs/$id keys, so we serialize the snapshot here.\n // loadWorkflowSnapshot / ensureSnapshot already handle the string case.\n snapshot: JSON.stringify(snapshot),\n createdAt: existing?.createdAt ?? (createdAt ? new Date(createdAt).toISOString() : now.toISOString()),\n updatedAt: updatedAt ? new Date(updatedAt).toISOString() : now.toISOString(),\n },\n });\n }\n\n async loadWorkflowSnapshot({\n workflowName,\n runId,\n }: {\n workflowName: string;\n runId: string;\n }): Promise<WorkflowRunState | null> {\n const row = await this.#db.load<{ snapshot: WorkflowRunState | string } | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n\n if (!row) return null;\n return typeof row.snapshot === 'string' ? JSON.parse(row.snapshot) : JSON.parse(JSON.stringify(row.snapshot));\n }\n\n async listWorkflowRuns(args: StorageListWorkflowRunsInput = {}): Promise<WorkflowRuns> {\n const { workflowName, fromDate, toDate, perPage, page, resourceId, status } = args;\n\n // Pass known filters to queryTable for server-side filtering instead of fetching all rows\n const filters: Array<{ field: string; value: string }> = [];\n if (workflowName) {\n filters.push({ field: 'workflow_name', value: workflowName });\n }\n if (resourceId) {\n filters.push({ field: 'resourceId', value: resourceId });\n }\n\n let rows = await this.#db.queryTable<RawWorkflowRun>(\n TABLE_WORKFLOW_SNAPSHOT,\n filters.length > 0 ? filters : undefined,\n );\n if (fromDate) rows = rows.filter(run => new Date(run.createdAt).getTime() >= fromDate.getTime());\n if (toDate) rows = rows.filter(run => new Date(run.createdAt).getTime() <= toDate.getTime());\n if (status) {\n rows = rows.filter(run => {\n const snapshot = this.ensureSnapshot(run);\n return snapshot.status === status;\n });\n }\n\n const total = rows.length;\n rows.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());\n\n if (perPage !== undefined && page !== undefined) {\n const normalized = normalizePerPage(perPage, Number.MAX_SAFE_INTEGER);\n const offset = page * normalized;\n rows = rows.slice(offset, offset + normalized);\n }\n\n const runs: WorkflowRun[] = rows.map(run => ({\n workflowName: run.workflow_name,\n runId: run.run_id,\n snapshot: this.ensureSnapshot(run),\n createdAt: new Date(run.createdAt),\n updatedAt: new Date(run.updatedAt),\n resourceId: run.resourceId,\n }));\n\n return { runs, total };\n }\n\n async getWorkflowRunById({\n runId,\n workflowName,\n }: {\n runId: string;\n workflowName?: string;\n }): Promise<WorkflowRun | null> {\n let match: RawWorkflowRun | null;\n if (workflowName) {\n // O(1) composite key lookup via by_workflow_run index\n match = await this.#db.load<RawWorkflowRun | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n } else {\n // Fallback: filter by run_id server-side (no dedicated index, but avoids full unfiltered scan)\n const rows = await this.#db.queryTable<RawWorkflowRun>(TABLE_WORKFLOW_SNAPSHOT, [\n { field: 'run_id', value: runId },\n ]);\n match = rows[0] ?? null;\n }\n if (!match) return null;\n\n return {\n workflowName: match.workflow_name,\n runId: match.run_id,\n snapshot: this.ensureSnapshot(match),\n createdAt: new Date(match.createdAt),\n updatedAt: new Date(match.updatedAt),\n resourceId: match.resourceId,\n };\n }\n\n async deleteWorkflowRunById({ runId, workflowName }: { runId: string; workflowName: string }): Promise<void> {\n await this.#db.deleteMany(TABLE_WORKFLOW_SNAPSHOT, [`${workflowName}-${runId}`]);\n }\n\n private async getRun(workflowName: string, runId: string): Promise<RawWorkflowRun | null> {\n // O(1) composite key lookup instead of querying by workflow_name then filtering in JS\n return this.#db.load<RawWorkflowRun | null>({\n tableName: TABLE_WORKFLOW_SNAPSHOT,\n keys: { workflow_name: workflowName, run_id: runId },\n });\n }\n\n private ensureSnapshot(run: { snapshot: WorkflowRunState | string }): WorkflowRunState {\n if (!run.snapshot) {\n return {\n context: {},\n activePaths: [],\n activeStepsPath: {},\n timestamp: Date.now(),\n suspendedPaths: {},\n resumeLabels: {},\n serializedStepGraph: [],\n value: {},\n waitingPaths: {},\n status: 'pending',\n runId: '',\n };\n }\n\n if (typeof run.snapshot === 'string') {\n return JSON.parse(run.snapshot);\n }\n\n return JSON.parse(JSON.stringify(run.snapshot));\n }\n}\n","import type { StorageDomains } from '@mastra/core/storage';\nimport { MastraCompositeStore } from '@mastra/core/storage';\n\nimport type { ConvexAdminClientConfig } from './client';\nimport { ConvexAdminClient } from './client';\nimport { BackgroundTasksConvex } from './domains/background-tasks';\nimport { ChannelsConvex } from './domains/channels';\nimport { MemoryConvex } from './domains/memory';\nimport { SchedulesConvex } from './domains/schedules';\nimport { ScoresConvex } from './domains/scores';\nimport { WorkflowsConvex } from './domains/workflows';\n\n// Export domain classes for direct use with MastraStorage composition\nexport { BackgroundTasksConvex, ChannelsConvex, MemoryConvex, SchedulesConvex, ScoresConvex, WorkflowsConvex };\nexport type { ConvexDomainConfig } from './db';\n\n/**\n * Convex configuration type.\n *\n * Accepts either:\n * - A pre-configured ConvexAdminClient: `{ id, client }`\n * - Deployment config: `{ id, deploymentUrl, adminAuthToken, storageFunction? }`\n */\nexport type ConvexStoreConfig = {\n id: string;\n name?: string;\n /**\n * When true, automatic initialization (table creation/migrations) is disabled.\n * This is useful for CI/CD pipelines where you want to:\n * 1. Run migrations explicitly during deployment (not at runtime)\n * 2. Use different credentials for schema changes vs runtime operations\n *\n * When disableInit is true:\n * - The storage will not automatically create/alter tables on first use\n * - You must call `storage.init()` explicitly in your CI/CD scripts\n *\n * @example\n * // In CI/CD script:\n * const storage = new ConvexStore({ ...config, disableInit: false });\n * await storage.init(); // Explicitly run migrations\n *\n * // In runtime application:\n * const storage = new ConvexStore({ ...config, disableInit: true });\n * // No auto-init, tables must already exist\n */\n disableInit?: boolean;\n} & (\n | {\n /**\n * Pre-configured ConvexAdminClient.\n * Use this when you need to configure the client before initialization.\n *\n * @example\n * ```typescript\n * import { ConvexAdminClient } from '@mastra/convex/storage/client';\n *\n * const client = new ConvexAdminClient({\n * deploymentUrl: 'https://your-deployment.convex.cloud',\n * adminAuthToken: 'your-token',\n * storageFunction: 'custom/storage:handle',\n * });\n *\n * const store = new ConvexStore({ id: 'my-store', client });\n * ```\n */\n client: ConvexAdminClient;\n }\n | ConvexAdminClientConfig\n);\n\n/**\n * Type guard for pre-configured client config\n */\nconst isClientConfig = (config: ConvexStoreConfig): config is ConvexStoreConfig & { client: ConvexAdminClient } => {\n return 'client' in config;\n};\n\n/**\n * Convex storage adapter for Mastra.\n *\n * Access domain-specific storage via `getStore()`:\n *\n * @example\n * ```typescript\n * const storage = new ConvexStore({ id: 'my-store', deploymentUrl: '...', adminAuthToken: '...' });\n *\n * // Access memory domain\n * const memory = await storage.getStore('memory');\n * await memory?.saveThread({ thread });\n *\n * // Access workflows domain\n * const workflows = await storage.getStore('workflows');\n * await workflows?.persistWorkflowSnapshot({ workflowName, runId, snapshot });\n * ```\n */\nexport class ConvexStore extends MastraCompositeStore {\n declare stores: StorageDomains;\n\n constructor(config: ConvexStoreConfig) {\n super({ id: config.id, name: config.name ?? 'ConvexStore', disableInit: config.disableInit });\n\n // Handle pre-configured client vs creating new one\n const client = isClientConfig(config) ? config.client : new ConvexAdminClient(config);\n\n const domainConfig = { client };\n const memory = new MemoryConvex(domainConfig);\n const workflows = new WorkflowsConvex(domainConfig);\n const scores = new ScoresConvex(domainConfig);\n\n this.stores = {\n memory,\n workflows,\n scores,\n backgroundTasks: new BackgroundTasksConvex(domainConfig),\n schedules: new SchedulesConvex(domainConfig),\n channels: new ChannelsConvex(domainConfig),\n };\n }\n}\n","import crypto from 'node:crypto';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport type { ConvexAdminClientConfig } from '../storage/client';\nimport { ConvexAdminClient } from '../storage/client';\nimport type { StorageRequest } from '../storage/types';\n\ntype VectorRecord = {\n id: string;\n embedding: number[];\n metadata?: Record<string, any>;\n};\n\ntype VectorFilter = {\n metadata?: Record<string, any>;\n};\n\nconst INDEX_METADATA_TABLE = 'mastra_vector_indexes';\n\nexport type ConvexVectorConfig = ConvexAdminClientConfig & {\n id: string;\n};\n\nexport class ConvexVector extends MastraVector<VectorFilter> {\n private readonly client: ConvexAdminClient;\n\n constructor(config: ConvexVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n }\n\n async createIndex({ indexName, dimension }: CreateIndexParams): Promise<void> {\n await this.callStorage({\n op: 'insert',\n tableName: INDEX_METADATA_TABLE,\n record: {\n id: indexName,\n indexName,\n dimension,\n metric: 'cosine',\n createdAt: new Date().toISOString(),\n },\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: INDEX_METADATA_TABLE,\n ids: [indexName],\n });\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async truncateIndex({ indexName }: DeleteIndexParams): Promise<void> {\n // Delete in batches since each mutation can only delete a small number of docs\n // to stay within Convex's 1-second mutation timeout.\n await this.callStorageUntilComplete({\n op: 'clearTable',\n tableName: this.vectorTable(indexName),\n });\n }\n\n async listIndexes(): Promise<string[]> {\n const indexes = await this.callStorage<{ id: string }[]>({\n op: 'queryTable',\n tableName: INDEX_METADATA_TABLE,\n });\n return indexes.map(index => index.id);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = await this.callStorage<{ dimension: number } | null>({\n op: 'load',\n tableName: INDEX_METADATA_TABLE,\n keys: { id: indexName },\n });\n if (!index) {\n throw new Error(`Index ${indexName} not found`);\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n return {\n dimension: index.dimension,\n count: vectors.length,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata }: UpsertVectorParams<VectorFilter>): Promise<string[]> {\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n\n const records: VectorRecord[] = vectors.map((vector, i) => ({\n id: vectorIds[i]!,\n embedding: vector,\n metadata: metadata?.[i],\n }));\n\n await this.callStorage({\n op: 'batchInsert',\n tableName: this.vectorTable(indexName),\n records,\n });\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<VectorFilter>): Promise<QueryResult[]> {\n if (!queryVector) {\n throw new MastraError({\n id: createVectorErrorId('CONVEX', 'QUERY', 'MISSING_VECTOR'),\n text: 'queryVector is required for Convex queries. Metadata-only queries are not supported by this vector store.',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n });\n }\n\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const filtered =\n filter && !this.isEmptyFilter(filter)\n ? vectors.filter(record => this.matchesFilter(record.metadata, filter))\n : vectors;\n\n const scored = filtered\n .map(record => ({\n id: record.id,\n score: cosineSimilarity(queryVector, record.embedding),\n metadata: record.metadata,\n ...(includeVector ? { vector: record.embedding } : {}),\n }))\n .filter(result => Number.isFinite(result.score))\n .sort((a, b) => b.score - a.score)\n .slice(0, topK);\n\n return scored;\n }\n\n async updateVector(params: UpdateVectorParams<VectorFilter>): Promise<void> {\n const hasId = 'id' in params && params.id;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasId && hasFilter) {\n throw new Error('ConvexVector.updateVector: id and filter are mutually exclusive');\n }\n\n // Check for filter-based update\n if (hasFilter) {\n const filter = params.filter as VectorFilter;\n // Check for empty filter\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.updateVector: cannot update with empty filter');\n }\n\n // Update by filter - find all matching records and update them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(params.indexName),\n });\n\n const matching = vectors.filter(record => this.matchesFilter(record.metadata, filter));\n\n for (const existing of matching) {\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n return;\n }\n\n // Update by id\n if (!hasId) {\n throw new Error('ConvexVector.updateVector: Either id or filter must be provided');\n }\n\n const existing = await this.callStorage<VectorRecord | null>({\n op: 'load',\n tableName: this.vectorTable(params.indexName),\n keys: { id: params.id },\n });\n if (!existing) return;\n\n const updated: VectorRecord = {\n ...existing,\n ...(params.update.vector ? { embedding: params.update.vector } : {}),\n ...(params.update.metadata ? { metadata: { ...existing.metadata, ...params.update.metadata } } : {}),\n };\n\n await this.callStorage({\n op: 'insert',\n tableName: this.vectorTable(params.indexName),\n record: updated,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<VectorFilter>): Promise<void> {\n const { indexName } = params;\n const hasIds = 'ids' in params && params.ids !== undefined;\n const hasFilter = 'filter' in params && params.filter !== undefined;\n\n // Check for mutually exclusive parameters\n if (hasIds && hasFilter) {\n throw new Error('ConvexVector.deleteVectors: ids and filter are mutually exclusive');\n }\n\n // Check that at least one is provided\n if (!hasIds && !hasFilter) {\n throw new Error('ConvexVector.deleteVectors: Either filter or ids must be provided');\n }\n\n // Handle ID-based deletion\n if (hasIds) {\n const ids = params.ids as string[];\n if (ids.length === 0) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty ids array');\n }\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids,\n });\n return;\n }\n\n // Handle filter-based deletion\n const filter = params.filter as VectorFilter;\n if (this.isEmptyFilter(filter)) {\n throw new Error('ConvexVector.deleteVectors: cannot delete with empty filter');\n }\n\n // Find all matching vectors and delete them\n const vectors = await this.callStorage<VectorRecord[]>({\n op: 'queryTable',\n tableName: this.vectorTable(indexName),\n });\n\n const matchingIds = vectors.filter(record => this.matchesFilter(record.metadata, filter)).map(record => record.id);\n\n if (matchingIds.length > 0) {\n await this.callStorage({\n op: 'deleteMany',\n tableName: this.vectorTable(indexName),\n ids: matchingIds,\n });\n }\n }\n\n private vectorTable(indexName: string) {\n return `mastra_vector_${indexName}`;\n }\n\n private isEmptyFilter(filter: VectorFilter | Record<string, any>): boolean {\n if (!filter) return true;\n return Object.keys(filter).length === 0;\n }\n\n private matchesFilter(\n recordMetadata: Record<string, any> | undefined,\n filter: VectorFilter | Record<string, any>,\n ): boolean {\n if (!recordMetadata) return false;\n if (!filter || Object.keys(filter).length === 0) return true;\n\n // Handle VectorFilter with metadata property\n if ('metadata' in filter && filter.metadata) {\n return this.matchesFilterConditions(recordMetadata, filter.metadata);\n }\n\n // Handle direct filter conditions\n return this.matchesFilterConditions(recordMetadata, filter);\n }\n\n private matchesFilterConditions(recordMetadata: Record<string, any>, conditions: Record<string, any>): boolean {\n for (const [key, value] of Object.entries(conditions)) {\n // Handle $and operator\n if (key === '$and' && Array.isArray(value)) {\n const allMatch = value.every((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!allMatch) return false;\n continue;\n }\n\n // Handle $or operator\n if (key === '$or' && Array.isArray(value)) {\n const anyMatch = value.some((cond: Record<string, any>) => this.matchesFilterConditions(recordMetadata, cond));\n if (!anyMatch) return false;\n continue;\n }\n\n // Handle $in operator\n if (typeof value === 'object' && value !== null && '$in' in value) {\n if (!Array.isArray(value.$in) || !value.$in.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $nin operator\n if (typeof value === 'object' && value !== null && '$nin' in value) {\n if (Array.isArray(value.$nin) && value.$nin.includes(recordMetadata[key])) {\n return false;\n }\n continue;\n }\n\n // Handle $gt operator\n if (typeof value === 'object' && value !== null && '$gt' in value) {\n if (!(recordMetadata[key] > value.$gt)) {\n return false;\n }\n continue;\n }\n\n // Handle $gte operator\n if (typeof value === 'object' && value !== null && '$gte' in value) {\n if (!(recordMetadata[key] >= value.$gte)) {\n return false;\n }\n continue;\n }\n\n // Handle $lt operator\n if (typeof value === 'object' && value !== null && '$lt' in value) {\n if (!(recordMetadata[key] < value.$lt)) {\n return false;\n }\n continue;\n }\n\n // Handle $lte operator\n if (typeof value === 'object' && value !== null && '$lte' in value) {\n if (!(recordMetadata[key] <= value.$lte)) {\n return false;\n }\n continue;\n }\n\n // Handle $ne operator\n if (typeof value === 'object' && value !== null && '$ne' in value) {\n if (recordMetadata[key] === value.$ne) {\n return false;\n }\n continue;\n }\n\n // Handle simple equality\n if (recordMetadata[key] !== value) {\n return false;\n }\n }\n\n return true;\n }\n\n private async callStorage<T = any>(request: StorageRequest): Promise<T> {\n return this.client.callStorage<T>(request);\n }\n\n /**\n * Call storage repeatedly until hasMore is false.\n * Use for bulk operations like clearTable that may need multiple batches.\n */\n private async callStorageUntilComplete(request: StorageRequest): Promise<void> {\n let hasMore = true;\n while (hasMore) {\n const response = await this.client.callStorageRaw(request);\n hasMore = response.hasMore ?? false;\n }\n }\n}\n\nfunction cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n return -1;\n }\n\n let dot = 0;\n let magA = 0;\n let magB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const aVal = a[i] ?? 0;\n const bVal = b[i] ?? 0;\n dot += aVal * bVal;\n magA += aVal * aVal;\n magB += bVal * bVal;\n }\n\n if (magA === 0 || magB === 0) {\n return -1;\n }\n\n return dot / (Math.sqrt(magA) * Math.sqrt(magB));\n}\n","import crypto from 'node:crypto';\n\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { createVectorErrorId } from '@mastra/core/storage';\nimport { MastraVector } from '@mastra/core/vector';\nimport type {\n CreateIndexParams,\n DeleteIndexParams,\n DeleteVectorParams,\n DeleteVectorsParams,\n DescribeIndexParams,\n IndexStats,\n QueryResult,\n QueryVectorParams,\n UpdateVectorParams,\n UpsertVectorParams,\n} from '@mastra/core/vector';\n\nimport { ConvexAdminClient } from '../storage/client';\nimport type { ConvexAdminClientConfig } from '../storage/client';\n\ntype NativeFilterValue = string | number | boolean | null;\n\ntype NativeFilterClause = {\n field: string;\n value: NativeFilterValue;\n};\n\ntype NativeActionFilter = NativeFilterClause | { $or: NativeFilterClause[] };\n\ntype NativeFieldFilter = Record<string, NativeFilterValue | { $eq: NativeFilterValue }>;\n\nexport type ConvexNativeVectorFilter =\n | NativeFieldFilter\n | { metadata: NativeFieldFilter }\n | {\n $or: NativeFieldFilter[];\n };\n\nexport type ConvexNativeVectorIndexConfig = {\n /**\n * Convex table that stores this Mastra vector index.\n */\n tableName: string;\n /**\n * Convex vector index name on `tableName`.\n */\n vectorIndexName?: string;\n /**\n * Number of dimensions configured in the Convex vector index.\n */\n dimension: number;\n /**\n * Mastra vector ID field in the Convex table.\n *\n * @default 'id'\n */\n idField?: string;\n /**\n * Convex database index used for lookup by `idField`.\n *\n * @default 'by_record_id'\n */\n idIndexName?: string;\n /**\n * Vector field in the Convex table.\n *\n * @default 'embedding'\n */\n vectorField?: string;\n /**\n * Metadata field in the Convex table.\n *\n * @default 'metadata'\n */\n metadataField?: string;\n /**\n * Top-level fields copied from metadata on writes and available to Convex\n * native vector filters.\n */\n filterFields?: string[];\n};\n\nexport type ConvexNativeVectorConfig = ConvexAdminClientConfig & {\n id: string;\n /**\n * Maps Mastra `indexName` values to deployed Convex table/index definitions.\n */\n indexes: Record<string, ConvexNativeVectorIndexConfig>;\n /**\n * Path to the deployed native vector action.\n *\n * @default 'mastra/nativeVector:query'\n */\n nativeVectorAction?: string;\n /**\n * Path to the deployed native vector query.\n *\n * @default 'mastra/nativeVector:read'\n */\n nativeVectorQuery?: string;\n /**\n * Path to the deployed native vector mutation.\n *\n * @default 'mastra/nativeVector:write'\n */\n nativeVectorMutation?: string;\n /**\n * Maximum number of documents read when estimating `describeIndex().count`.\n *\n * @default 10000\n */\n describeCountLimit?: number;\n};\n\ntype NativeSearchResult = {\n id: string;\n score: number;\n};\n\ntype NativeVectorDocument = Record<string, any>;\n\nconst DEFAULT_VECTOR_INDEX = 'by_embedding';\nconst DEFAULT_ID_FIELD = 'id';\nconst DEFAULT_ID_INDEX = 'by_record_id';\nconst DEFAULT_VECTOR_FIELD = 'embedding';\nconst DEFAULT_METADATA_FIELD = 'metadata';\nconst DEFAULT_NATIVE_ACTION = 'mastra/nativeVector:query';\nconst DEFAULT_NATIVE_QUERY = 'mastra/nativeVector:read';\nconst DEFAULT_NATIVE_MUTATION = 'mastra/nativeVector:write';\nconst MAX_CONVEX_VECTOR_RESULTS = 256;\nconst NATIVE_VECTOR_UPSERT_BATCH_SIZE = 100;\n\nfunction isMetadataRecord(value: unknown): value is Record<string, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport class ConvexNativeVector extends MastraVector<ConvexNativeVectorFilter> {\n private readonly client: ConvexAdminClient;\n private readonly indexes: Record<string, Required<ConvexNativeVectorIndexConfig> & { filterFields: string[] }>;\n private readonly nativeVectorAction: string;\n private readonly nativeVectorQuery: string;\n private readonly nativeVectorMutation: string;\n private readonly describeCountLimit: number;\n\n constructor(config: ConvexNativeVectorConfig) {\n super({ id: config.id });\n this.client = new ConvexAdminClient(config);\n this.indexes = Object.fromEntries(\n Object.entries(config.indexes).map(([indexName, index]) => [\n indexName,\n {\n tableName: index.tableName,\n vectorIndexName: index.vectorIndexName ?? DEFAULT_VECTOR_INDEX,\n dimension: index.dimension,\n idField: index.idField ?? DEFAULT_ID_FIELD,\n idIndexName: index.idIndexName ?? DEFAULT_ID_INDEX,\n vectorField: index.vectorField ?? DEFAULT_VECTOR_FIELD,\n metadataField: index.metadataField ?? DEFAULT_METADATA_FIELD,\n filterFields: index.filterFields ?? [],\n },\n ]),\n );\n this.nativeVectorAction = config.nativeVectorAction ?? DEFAULT_NATIVE_ACTION;\n this.nativeVectorQuery = config.nativeVectorQuery ?? DEFAULT_NATIVE_QUERY;\n this.nativeVectorMutation = config.nativeVectorMutation ?? DEFAULT_NATIVE_MUTATION;\n this.describeCountLimit = config.describeCountLimit ?? 10000;\n }\n\n async createIndex({ indexName, dimension, metric = 'cosine' }: CreateIndexParams): Promise<void> {\n const index = this.getIndex(indexName);\n if (index.dimension !== dimension) {\n throw new Error(\n `ConvexNativeVector.createIndex: deployed Convex index \"${indexName}\" has ${index.dimension} dimensions, but ${dimension} were requested`,\n );\n }\n if (metric !== 'cosine') {\n throw new Error('ConvexNativeVector.createIndex: Convex native vector search currently supports cosine only');\n }\n }\n\n async listIndexes(): Promise<string[]> {\n return Object.keys(this.indexes);\n }\n\n async describeIndex({ indexName }: DescribeIndexParams): Promise<IndexStats> {\n const index = this.getIndex(indexName);\n const result = await this.client.callQuery<{ count: number; countIsLimited: boolean }>(this.nativeVectorQuery, {\n op: 'describe',\n config: index,\n countLimit: this.describeCountLimit,\n });\n\n if (result.countIsLimited) {\n this.logger.warn(\n `ConvexNativeVector.describeIndex: count for \"${indexName}\" reached ${this.describeCountLimit}; reported count is capped.`,\n );\n }\n\n return {\n dimension: index.dimension,\n count: result.count,\n metric: 'cosine',\n };\n }\n\n async upsert({ indexName, vectors, ids, metadata, deleteFilter }: UpsertVectorParams<ConvexNativeVectorFilter>) {\n if (deleteFilter) {\n throw new Error('ConvexNativeVector.upsert: deleteFilter is not supported. Delete by IDs before upserting.');\n }\n const index = this.getIndex(indexName);\n if (ids && ids.length !== vectors.length) {\n throw new Error(\n `ConvexNativeVector.upsert: ids length (${ids.length}) must match vectors length (${vectors.length})`,\n );\n }\n if (metadata && metadata.length !== vectors.length) {\n throw new Error(\n `ConvexNativeVector.upsert: metadata length (${metadata.length}) must match vectors length (${vectors.length})`,\n );\n }\n if (metadata && !metadata.every(isMetadataRecord)) {\n throw new Error('ConvexNativeVector.upsert: metadata entries must be objects when provided');\n }\n const vectorIds = ids ?? vectors.map(() => crypto.randomUUID());\n if (new Set(vectorIds).size !== vectorIds.length) {\n throw new Error('ConvexNativeVector.upsert: ids must be unique');\n }\n\n for (let start = 0; start < vectors.length; start += NATIVE_VECTOR_UPSERT_BATCH_SIZE) {\n const end = start + NATIVE_VECTOR_UPSERT_BATCH_SIZE;\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'upsert',\n config: index,\n ids: vectorIds.slice(start, end),\n vectors: vectors.slice(start, end),\n ...(metadata ? { metadata: metadata.slice(start, end) } : {}),\n });\n }\n\n return vectorIds;\n }\n\n async query({\n indexName,\n queryVector,\n topK = 10,\n includeVector = false,\n filter,\n }: QueryVectorParams<ConvexNativeVectorFilter>): Promise<QueryResult[]> {\n if (!queryVector) {\n throw new MastraError({\n id: createVectorErrorId('CONVEX_NATIVE', 'QUERY', 'MISSING_VECTOR'),\n text: 'queryVector is required for Convex native vector queries.',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.USER,\n details: { indexName },\n });\n }\n if (!Number.isFinite(topK) || !Number.isInteger(topK) || topK < 1 || topK > MAX_CONVEX_VECTOR_RESULTS) {\n throw new Error(`ConvexNativeVector.query: topK must be an integer between 1 and ${MAX_CONVEX_VECTOR_RESULTS}`);\n }\n\n const index = this.getIndex(indexName);\n const nativeFilter = this.toNativeFilter(filter, index);\n const searchResults = await this.client.callAction<NativeSearchResult[]>(this.nativeVectorAction, {\n config: index,\n vector: queryVector,\n limit: topK,\n ...(nativeFilter ? { filter: nativeFilter } : {}),\n });\n\n if (searchResults.length === 0) return [];\n\n const docs = await this.client.callQuery<Array<NativeVectorDocument | null>>(this.nativeVectorQuery, {\n op: 'getByConvexIds',\n config: index,\n ids: searchResults.map(result => result.id),\n includeVector,\n });\n const scoresByConvexId = new Map(searchResults.map(result => [result.id, result.score]));\n\n return docs.flatMap(doc => {\n if (!doc?._id) return [];\n return [\n {\n id: String(doc[index.idField]),\n score: scoresByConvexId.get(String(doc._id)) ?? 0,\n metadata: doc[index.metadataField],\n ...(includeVector ? { vector: doc[index.vectorField] } : {}),\n },\n ];\n });\n }\n\n async updateVector(params: UpdateVectorParams<ConvexNativeVectorFilter>): Promise<void> {\n if ('filter' in params && params.filter !== undefined) {\n throw new Error('ConvexNativeVector.updateVector: filter-based updates are not supported. Update by ID instead.');\n }\n if (params.update.metadata !== undefined && !isMetadataRecord(params.update.metadata)) {\n throw new Error('ConvexNativeVector.updateVector: metadata must be an object when provided');\n }\n const index = this.getIndex(params.indexName);\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'updateById',\n config: index,\n id: params.id,\n vector: params.update.vector,\n metadata: params.update.metadata,\n });\n }\n\n async deleteVector({ indexName, id }: DeleteVectorParams): Promise<void> {\n const index = this.getIndex(indexName);\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'deleteByIds',\n config: index,\n ids: [id],\n });\n }\n\n async deleteVectors(params: DeleteVectorsParams<ConvexNativeVectorFilter>): Promise<void> {\n if (params.filter !== undefined) {\n throw new Error(\n 'ConvexNativeVector.deleteVectors: filter-based deletes are not supported. Delete by IDs instead.',\n );\n }\n if (!params.ids || params.ids.length === 0) {\n throw new Error('ConvexNativeVector.deleteVectors: ids are required');\n }\n const index = this.getIndex(params.indexName);\n await this.client.callMutation(this.nativeVectorMutation, {\n op: 'deleteByIds',\n config: index,\n ids: params.ids,\n });\n }\n\n async deleteIndex({ indexName }: DeleteIndexParams): Promise<void> {\n this.getIndex(indexName);\n throw new Error('ConvexNativeVector.deleteIndex: Convex native vector indexes are managed in convex/schema.ts.');\n }\n\n private getIndex(indexName: string) {\n const index = this.indexes[indexName];\n if (!index) {\n throw new Error(`ConvexNativeVector: index \"${indexName}\" is not configured`);\n }\n return index;\n }\n\n private toNativeFilter(\n filter: ConvexNativeVectorFilter | undefined,\n index: Required<ConvexNativeVectorIndexConfig> & { filterFields: string[] },\n ): NativeActionFilter | undefined {\n if (!filter || Object.keys(filter).length === 0) return undefined;\n\n if (this.isOrFilter(filter)) {\n const clauses = filter.$or.map(branch => this.toSingleClause(branch, index));\n return { $or: clauses };\n }\n\n const fieldFilter = this.isMetadataFilter(filter) ? filter.metadata : filter;\n return this.toSingleClause(fieldFilter, index);\n }\n\n private toSingleClause(\n filter: NativeFieldFilter,\n index: Required<ConvexNativeVectorIndexConfig> & { filterFields: string[] },\n ): NativeFilterClause {\n const entries = Object.entries(filter).filter(([, value]) => value !== undefined);\n if (entries.length !== 1) {\n throw new Error(\n 'ConvexNativeVector.query: native Convex filters support one equality field or $or of equality fields',\n );\n }\n\n const [field, rawValue] = entries[0]!;\n if (!index.filterFields.includes(field)) {\n throw new Error(`ConvexNativeVector.query: field \"${field}\" is not configured as a Convex vector filter field`);\n }\n\n const value =\n typeof rawValue === 'object' && rawValue !== null && '$eq' in rawValue\n ? rawValue.$eq\n : (rawValue as NativeFilterValue);\n\n if (!['string', 'number', 'boolean'].includes(typeof value) && value !== null) {\n throw new Error(\n 'ConvexNativeVector.query: native Convex filters support string, number, boolean, and null values',\n );\n }\n\n return { field, value };\n }\n\n private isOrFilter(filter: ConvexNativeVectorFilter): filter is { $or: NativeFieldFilter[] } {\n return Array.isArray((filter as { $or?: unknown }).$or);\n }\n\n private isMetadataFilter(filter: ConvexNativeVectorFilter): filter is { metadata: NativeFieldFilter } {\n const metadata = (filter as { metadata?: unknown }).metadata;\n return typeof metadata === 'object' && metadata !== null && !Array.isArray(metadata);\n }\n}\n"]}