@semiont/core 0.2.33 → 0.2.34-build.89
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/README.md +50 -18
- package/dist/index.d.ts +3644 -12
- package/dist/index.js +127 -4
- package/dist/index.js.map +1 -1
- package/package.json +9 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/creation-methods.ts","../src/identifiers.ts","../src/uri-utils.ts","../src/events.ts","../src/event-utils.ts","../src/annotation-utils.ts","../src/type-guards.ts","../src/errors.ts","../src/did-utils.ts","../src/config/configuration-error.ts","../src/config/config.schema.json","../src/config/config-validator.ts","../src/config/environment-loader.ts","../src/config/environment-validator.ts","../src/config/platform-types.ts","../src/index.ts"],"names":["annotationUri","resourceUri","isResourceEvent","userId"],"mappings":";;;;;AAOO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,GAAA,EAAK,KAAA;AAAA,EACL,MAAA,EAAQ,QAAA;AAAA,EACR,EAAA,EAAI,IAAA;AAAA,EACJ,SAAA,EAAW,WAAA;AAAA,EACX,KAAA,EAAO,OAAA;AAAA,EACP,SAAA,EAAW;AACb;;;ACEO,SAAS,aAAa,KAAA,EAAoC;AAC/D,EAAA,OAAO,CAAC,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AAC5B;AAEO,SAAS,eAAe,KAAA,EAAsC;AACnE,EAAA,OAAO,CAAC,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA;AAC5B;AAGO,SAAS,WAAW,EAAA,EAAwB;AACjD,EAAA,IAAI,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,8BAAA,EAAiC,EAAE,CAAA,CAAE,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,aAAa,EAAA,EAA0B;AACrD,EAAA,IAAI,EAAA,CAAG,QAAA,CAAS,GAAG,CAAA,EAAG;AACpB,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,gCAAA,EAAmC,EAAE,CAAA,CAAE,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,OAAO,EAAA,EAAoB;AACzC,EAAA,OAAO,EAAA;AACT;ACpBO,SAAS,eAAA,CAAgB,IAAgB,SAAA,EAAgC;AAE9E,EAAA,MAAM,cAAA,GAAiB,UAAU,QAAA,CAAS,GAAG,IAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,SAAA;AAC1E,EAAA,OAAO,WAAA,CAAY,CAAA,EAAG,cAAc,CAAA,WAAA,EAAc,EAAE,CAAA,CAAG,CAAA;AACzD;AAaO,SAAS,gBAAgB,GAAA,EAAyB;AACvD,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAG,CAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,sBAAsB,CAAA;AACvD,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,UAAA,CAAW,KAAA,CAAM,CAAC,CAAC,CAAA;AAC5B;AAaO,SAAS,iBAAA,CAAkB,IAAkB,SAAA,EAAkC;AAEpF,EAAA,MAAM,cAAA,GAAiB,UAAU,QAAA,CAAS,GAAG,IAAI,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,SAAA;AAC1E,EAAA,OAAO,aAAA,CAAc,CAAA,EAAG,cAAc,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAE,CAAA;AAC5D;AAaO,SAAS,kBAAkB,GAAA,EAA2B;AAC3D,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,GAAG,CAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,wBAAwB,CAAA;AACzD,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAE,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAC9B;AAmBO,SAAS,+BAA+B,OAAA,EAA+B;AAE5E,EAAA,IAAI;AACF,IAAA,OAAO,kBAAkB,OAAO,CAAA;AAAA,EAClC,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,aAAa,OAAO,CAAA;AAAA,EAC7B;AACF;AAaO,SAAS,oCAAoCA,cAAAA,EAAmD;AACrG,EAAA,MAAM,KAAA,GAAQA,cAAAA,CAAc,KAAA,CAAM,eAAe,CAAA;AACjD,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkCA,cAAa,CAAA,CAAE,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,WAAA,CAAY,KAAA,CAAM,CAAC,CAAC,CAAA;AAC7B;;;AC2HO,SAAS,gBAAgB,KAAA,EAAoC;AAClE,EAAA,OAAO,KAAA,IACL,OAAO,KAAA,CAAM,EAAA,KAAO,YACpB,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,KAC1B,KAAA,CAAM,UAAA,KAAe,MAAA,IAAa,OAAO,MAAM,UAAA,KAAe,QAAA,CAAA;AAAA,EAC/D,OAAO,KAAA,CAAM,IAAA,KAAS,YACtB,KAAA,CAAM,IAAA,CAAK,SAAS,GAAG,CAAA;AAC3B;AAMO,SAAS,cAAc,KAAA,EAA4C;AACxE,EAAA,OAAO,MAAM,IAAA,KAAS,kBAAA;AACxB;AAMO,SAAS,sBAAsB,KAAA,EAAoD;AACxF,EAAA,OAAO,CAAC,cAAc,KAAK,CAAA;AAC7B;AAEO,SAAS,aACd,KAAA,EACW;AACX,EAAA,OAAO,KAAA,CAAM,IAAA;AACf;;;ACnQO,SAAS,0BAA0B,KAAA,EAA0C;AAClF,EAAA,MAAM,YAAY,KAAA,CAAM,KAAA;AAExB,EAAA,IAAI,SAAA,CAAU,SAAS,kBAAA,EAAoB;AAEzC,IAAA,OAAO,SAAA,CAAU,OAAA,CAAQ,UAAA,CAAW,EAAA,IAAuB,IAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,SAAA,CAAU,IAAA,KAAS,oBAAA,IAAwB,SAAA,CAAU,SAAS,yBAAA,EAA2B;AAG3F,IAAA,IAAI,SAAA,CAAU,OAAA,CAAQ,YAAA,IAAgB,SAAA,CAAU,UAAA,EAAY;AAC1D,MAAA,IAAI;AACF,QAAA,MAAMC,eAAc,SAAA,CAAU,UAAA;AAE9B,QAAA,MAAM,UAAUA,YAAAA,CAAY,SAAA,CAAU,GAAGA,YAAAA,CAAY,WAAA,CAAY,aAAa,CAAC,CAAA;AAC/E,QAAA,OAAO,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,SAAA,CAAU,QAAQ,YAAY,CAAA,CAAA;AAAA,MACjE,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,0BAAA,CAA2B,OAAoBD,cAAAA,EAAuC;AACpG,EAAA,MAAM,kBAAA,GAAqB,0BAA0B,KAAK,CAAA;AAC1D,EAAA,OAAO,kBAAA,KAAuBA,cAAAA;AAChC;AAKO,SAASE,iBAAgB,KAAA,EAAkC;AAChE,EAAA,OAAO,KAAA,IACL,OAAO,KAAA,CAAM,KAAA,KAAU,YACvB,OAAO,KAAA,CAAM,KAAA,CAAM,EAAA,KAAO,QAAA,IAC1B,OAAO,KAAA,CAAM,KAAA,CAAM,cAAc,QAAA,IACjC,OAAO,KAAA,CAAM,KAAA,CAAM,UAAA,KAAe,QAAA,IAClC,OAAO,KAAA,CAAM,MAAM,IAAA,KAAS,QAAA,IAC5B,OAAO,KAAA,CAAM,QAAA,KAAa,QAAA,IAC1B,OAAO,KAAA,CAAM,SAAS,cAAA,KAAmB,QAAA;AAC7C;;;ACtDO,SAAS,YAAA,CAAa,MAA0B,UAAA,EAA8B;AACnF,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACxB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AAGnB,IAAA,IACE,OAAO,SAAS,QAAA,IAChB,IAAA,KAAS,QACT,MAAA,IAAU,IAAA,IACV,aAAa,IAAA,EACb;AACA,MAAA,MAAM,WAAY,IAAA,CAA2B,IAAA;AAC7C,MAAA,MAAM,cAAe,IAAA,CAA8B,OAAA;AAGnD,MAAA,IAAI,QAAA,KAAa,UAAA,CAAW,IAAA,IAAQ,WAAA,KAAgB,WAAW,OAAA,EAAS;AACtE,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,UAAA,CAAW,IAAA,KAAS,aAAA,IAAiB,OAAA,IAAW,IAAA,EAAM;AACxD,QAAA,MAAM,YAAa,IAAA,CAA4B,KAAA;AAC/C,QAAA,IAAI,SAAA,KAAc,WAAW,KAAA,EAAO;AAClC,UAAA,OAAO,CAAA;AAAA,QACT;AAAA,MACF;AAGA,MAAA,IAAI,UAAA,CAAW,IAAA,KAAS,kBAAA,IAAsB,QAAA,IAAY,IAAA,EAAM;AAC9D,QAAA,MAAM,aAAc,IAAA,CAA6B,MAAA;AACjD,QAAA,IAAI,UAAA,KAAe,WAAW,MAAA,EAAQ;AACpC,UAAA,OAAO,CAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,EAAA;AACT;;;AChDO,SAAS,SAAS,KAAA,EAAiC;AACxD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA;AAC1B;AAKO,SAAS,SAAS,KAAA,EAAiC;AACxD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAM,KAAK,CAAA;AAClD;AAKO,SAAS,SAAS,KAAA,EAAkD;AACzE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAKO,SAAS,QAAQ,KAAA,EAAoC;AAC1D,EAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5B;AAKO,SAAS,UAAU,KAAA,EAAkC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,SAAA;AAC1B;AAKO,SAAS,WAAW,KAAA,EAAmC;AAC5D,EAAA,OAAO,OAAO,KAAA,KAAU,UAAA;AAC1B;AAKO,SAAS,OAAO,KAAA,EAA+B;AACpD,EAAA,OAAO,KAAA,KAAU,IAAA;AACnB;AAKO,SAAS,YAAY,KAAA,EAAoC;AAC9D,EAAA,OAAO,KAAA,KAAU,MAAA;AACnB;AAKO,SAAS,UAAU,KAAA,EAA2C;AACnE,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AACrC;AAKO,SAAS,UAAa,KAAA,EAAyC;AACpE,EAAA,OAAO,KAAA,KAAU,QAAQ,KAAA,KAAU,MAAA;AACrC;;;ACjEO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EACtC,WAAA,CACE,OAAA,EACO,IAAA,EACA,OAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHN,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AACZ,IAAA,KAAA,CAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA;AAAA,EAChD;AACF;AAKO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,oBAAoB,OAAO,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAKO,IAAM,WAAA,GAAN,cAA0B,YAAA,CAAa;AAAA,EAC5C,WAAA,CAAY,OAAA,EAAiB,IAAA,GAAe,cAAA,EAAgB,OAAA,EAA+B;AACzF,IAAA,KAAA,CAAM,OAAA,EAAS,MAAM,OAAO,CAAA;AAC5B,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AAAA,EACd;AACF;AAKO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,UAAkB,EAAA,EAAa;AACzC,IAAA,MAAM,OAAA,GAAU,KAAK,CAAA,EAAG,QAAQ,aAAa,EAAE,CAAA,WAAA,CAAA,GAAgB,GAAG,QAAQ,CAAA,UAAA,CAAA;AAC1E,IAAA,KAAA,CAAM,OAAA,EAAS,WAAA,EAAa,EAAE,QAAA,EAAU,IAAI,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAKO,IAAM,iBAAA,GAAN,cAAgC,YAAA,CAAa;AAAA,EAClD,WAAA,CAAY,OAAA,GAAkB,cAAA,EAAgB,OAAA,EAA+B;AAC3E,IAAA,KAAA,CAAM,OAAA,EAAS,gBAAgB,OAAO,CAAA;AACtC,IAAA,IAAA,CAAK,IAAA,GAAO,mBAAA;AAAA,EACd;AACF;AAKO,IAAM,aAAA,GAAN,cAA4B,YAAA,CAAa;AAAA,EAC9C,WAAA,CAAY,SAAiB,OAAA,EAA+B;AAC1D,IAAA,KAAA,CAAM,OAAA,EAAS,YAAY,OAAO,CAAA;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAMO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClC,WAAA,CACS,MAAA,EACA,IAAA,EACP,OAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAA,IAAW,CAAA,WAAA,EAAc,MAAM,CAAA,CAAE,CAAA;AAJhC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAIP,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,KAAA,CAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA;AAAA,EAChD;AACF;;;AC9DO,SAAS,UAAU,IAAA,EAA8C;AACtE,EAAA,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,OAAA,EAAU,KAAK,EAAE,CAAA,CAAA;AAChD;AAWO,SAAS,YAAY,IAAA,EAKlB;AACR,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,UAAU,IAAI,CAAA;AAAA,IAClB,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK;AAAA,GAC1B;AACF;AAYO,SAAS,WAAW,GAAA,EAAoB;AAE7C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAMC,OAAAA,GAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,SAAA;AAE1C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,EAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAMA;AAAA;AAAA,GACR;AACF;;;AC7DO,IAAM,kBAAA,GAAN,cAAiC,KAAA,CAAM;AAAA,EAG5C,WAAA,CACE,OAAA,EACO,WAAA,EACA,UAAA,EACP,KAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJN,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAIP,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAXyB,KAAA;AAAA;AAAA;AAAA;AAAA,EAgBhB,QAAA,GAAmB;AAC1B,IAAA,IAAI,MAAA,GAAS,CAAA,OAAA,EAAK,IAAA,CAAK,OAAO,CAAA,CAAA;AAC9B,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAA,IAAU;AAAA,gBAAA,EAAqB,KAAK,WAAW,CAAA,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAA,IAAU;AAAA,yBAAA,EAAuB,KAAK,UAAU,CAAA,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;;;AClCA,IAAA,qBAAA,GAAA;AAAA,EACE,OAAA,EAAW,yCAAA;AAAA,EACX,GAAA,EAAO,yCAAA;AAAA,EACP,WAAA,EAAe;AAAA,IACb,YAAA,EAAgB;AAAA,MACd,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,qBAAA,EAAyB;AAAA,MACvB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA;AACF,KACF;AAAA,IACA,oBAAA,EAAwB;AAAA,MACtB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,gBAAA,EAAoB;AAAA,UAClB,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,iBAAA,EAAqB;AAAA,UACnB,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,oBAAA,EAAwB;AAAA,MACtB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,sBAAA,EAA0B;AAAA,UACxB,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ;AAAA;AACV,aACF;AAAA,YACA;AAAA,cACE,IAAA,EAAQ,QAAA;AAAA,cACR,UAAA,EAAc;AAAA,gBACZ,GAAA,EAAO;AAAA,kBACL,IAAA,EAAQ,OAAA;AAAA,kBACR,KAAA,EAAS;AAAA,oBACP,IAAA,EAAQ;AAAA;AACV,iBACF;AAAA,gBACA,IAAA,EAAQ;AAAA,kBACN,IAAA,EAAQ,OAAA;AAAA,kBACR,KAAA,EAAS;AAAA,oBACP,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,wBAAA,EAA4B;AAAA,UAC1B,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,oBAAA,EAAwB;AAAA,MACtB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,qBAAA,EAAyB;AAAA,MACvB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,cAAA,EAAkB;AAAA,UAChB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,kBAAA,EAAsB;AAAA,MACpB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ,CAAC,OAAA,EAAS,OAAA,EAAS,SAAS,CAAA;AAAA,UACpC,OAAA,EAAW;AAAA,SACb;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAW;AAAA,SACb;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,qBAAA,EAAyB;AAAA,MACvB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ;AAAA,QACN,OAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,kBAAA,EAAsB;AAAA,MACpB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,iBAAA,EAAqB;AAAA,UACnB,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,aAAA,EAAiB;AAAA,UACf,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAS;AAAA,QACP;AAAA,UACE,EAAA,EAAM;AAAA,YACJ,UAAA,EAAc;AAAA,cACZ,IAAA,EAAQ;AAAA,gBACN,KAAA,EAAS;AAAA;AACX;AACF,WACF;AAAA,UACA,IAAA,EAAQ;AAAA,YACN,QAAA,EAAY;AAAA,cACV,KAAA;AAAA,cACA,UAAA;AAAA,cACA,UAAA;AAAA,cACA;AAAA;AACF;AACF;AACF,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,uBAAA,EAA2B;AAAA,MACzB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,sBAAA,EAA0B;AAAA,MACxB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,UAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,gBAAA,EAAoB;AAAA,MAClB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,KAAA,EAAS;AAAA,YACP;AAAA,cACE,IAAA,EAAQ;AAAA,aACV;AAAA,YACA;AAAA,cACE,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,oBAAA,EAAwB;AAAA,UACtB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,KAAA,EAAS;AAAA,cACP;AAAA,gBACE,IAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,IAAA,EAAQ,QAAA;AAAA,gBACR,UAAA,EAAc;AAAA,kBACZ,IAAA,EAAQ;AAAA,oBACN,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,GAAA,EAAO;AAAA,oBACL,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,QAAA,EAAY;AAAA,oBACV,IAAA,EAAQ;AAAA,mBACV;AAAA,kBACA,WAAA,EAAe;AAAA,oBACb,IAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,SACF;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,oBAAA,EAAwB;AAAA,YACtB,IAAA,EAAQ;AAAA;AACV;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,cAAA,EAAkB;AAAA,MAChB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,KAAA,EAAS;AAAA,UACP,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ,QAAA;AAAA,UACR,SAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,MAAA,EAAU;AAAA,UACR,IAAA,EAAQ,QAAA;AAAA,UACR,SAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAU,OAAA;AAAA,UACV,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,YAAA,EAAgB;AAAA,UACd,IAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAU,OAAA;AAAA,UACV,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,mBAAA,EAAuB;AAAA,UACrB,IAAA,EAAQ,OAAA;AAAA,UACR,KAAA,EAAS;AAAA,YACP,IAAA,EAAQ;AAAA,WACV;AAAA,UACA,QAAA,EAAY,CAAA;AAAA,UACZ,WAAA,EAAe;AAAA;AACjB,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,SAAA,EAAa;AAAA,MACX,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,eAAA,EAAmB;AAAA,cACjB,IAAA,EAAQ;AAAA,aACV;AAAA,YACA,qBAAA,EAAyB;AAAA,cACvB,IAAA,EAAQ;AAAA,aACV;AAAA,YACA,kBAAA,EAAsB;AAAA,cACpB,IAAA,EAAQ;AAAA;AACV,WACF;AAAA,UACA,oBAAA,EAAwB;AAAA,SAC1B;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,cAAA,EAAkB;AAAA,cAChB,IAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAW,EAAA;AAAA,cACX,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,gBAAA,EAAoB;AAAA,cAClB,IAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAW,CAAA;AAAA,cACX,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,kBAAA,EAAsB;AAAA,cACpB,IAAA,EAAQ,OAAA;AAAA,cACR,KAAA,EAAS;AAAA,gBACP,IAAA,EAAQ;AAAA;AACV,aACF;AAAA,YACA,eAAA,EAAmB;AAAA,cACjB,IAAA,EAAQ,SAAA;AAAA,cACR,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,SAAA,EAAa;AAAA,cACX,IAAA,EAAQ,QAAA;AAAA,cACR,SAAA,EAAa,EAAA;AAAA,cACb,WAAA,EAAe;AAAA;AACjB,WACF;AAAA,UACA,oBAAA,EAAwB;AAAA,SAC1B;AAAA,QACA,WAAA,EAAe;AAAA,UACb,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,aAAA,EAAiB;AAAA,cACf,IAAA,EAAQ;AAAA,aACV;AAAA,YACA,YAAA,EAAgB;AAAA,cACd,IAAA,EAAQ,SAAA;AAAA,cACR,OAAA,EAAW,CAAA;AAAA,cACX,WAAA,EAAe;AAAA,aACjB;AAAA,YACA,cAAA,EAAkB;AAAA,cAChB,IAAA,EAAQ,QAAA;AAAA,cACR,OAAA,EAAW,oBAAA;AAAA,cACX,WAAA,EAAe;AAAA;AACjB,WACF;AAAA,UACA,oBAAA,EAAwB;AAAA;AAC1B,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,iBAAA,EAAqB;AAAA,MACnB,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ,QAAA;AAAA,UACR,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,SAAA,EAAa;AAAA,UACX,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,WAAA,EAAe;AAAA,cACb,IAAA,EAAQ;AAAA,aACV;AAAA,YACA,WAAA,EAAe;AAAA,cACb,IAAA,EAAQ;AAAA;AACV,WACF;AAAA,UACA,QAAA,EAAY;AAAA,YACV,aAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ,QAAA;AAAA,UACR,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,OAAA,EAAW;AAAA,cACT,IAAA,EAAQ;AAAA;AACV;AACF,SACF;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,QAAA,EAAY;AAAA,cACV,IAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAQ;AAAA,gBACN,aAAA;AAAA,gBACA,YAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA,oBAAA,EAAwB;AAAA,SAC1B;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAQ;AAAA,YACN,OAAA;AAAA,YACA,MAAA;AAAA,YACA,MAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACF;AAAA,UACA,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,IAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAc;AAAA,YACZ,gBAAA,EAAoB;AAAA,cAClB,IAAA,EAAQ,QAAA;AAAA,cACR,IAAA,EAAQ;AAAA,gBACN,SAAA;AAAA,gBACA,WAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAc;AAAA,QACZ,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,QAAA;AAAA,UACR,OAAA,EAAW,4BAAA;AAAA,UACX,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,OAAA,EAAW;AAAA,UACT,IAAA,EAAQ,QAAA;AAAA,UACR,SAAA,EAAa,CAAA;AAAA,UACb,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,IAAA,EAAQ;AAAA,UACN,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,GAAA,EAAO;AAAA,UACL,IAAA,EAAQ;AAAA,SACV;AAAA,QACA,QAAA,EAAY;AAAA,UACV,IAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,QAAA,EAAY;AAAA,QACV,SAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,oBAAA,EAAwB;AAAA;AAC1B;AAEJ,CAAA;;;AC7iDA,IAAM,GAAA,GAAM,IAAI,GAAA,CAAI;AAAA,EAClB,SAAA,EAAW,IAAA;AAAA;AAAA,EACX,WAAA,EAAa,IAAA;AAAA;AAAA,EACb,gBAAA,EAAkB,KAAA;AAAA;AAAA,EAClB,WAAA,EAAa,IAAA;AAAA;AAAA,EACb,MAAA,EAAQ;AACV,CAAC,CAAA;AAGD,UAAA,CAAW,GAAG,CAAA;AAGd,GAAA,CAAI,SAAA,CAAU,uBAAc,QAAQ,CAAA;AAW7B,SAAS,sBAAsB,IAAA,EAAiC;AACrE,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,mCAAmC,CAAA;AAClE,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,EAClD;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAE3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA,MAC3B,YAAA,EAAc,YAAA,CAAa,QAAA,CAAS,MAAA,IAAU,EAAE;AAAA,KAClD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AACrC;AAKO,SAAS,0BAA0B,IAAA,EAAiC;AACzE,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,uCAAuC,CAAA;AACtE,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAE3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA,MAC3B,YAAA,EAAc,YAAA,CAAa,QAAA,CAAS,MAAA,IAAU,EAAE;AAAA,KAClD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AACrC;AAKO,SAAS,mBAAmB,IAAA,EAAiC;AAClE,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,CAAU,gCAAgC,CAAA;AAC/D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,KAAA,GAAQ,SAAS,IAAI,CAAA;AAE3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,MAAA,EAAQ,SAAS,MAAA,IAAU,IAAA;AAAA,MAC3B,YAAA,EAAc,YAAA,CAAa,QAAA,CAAS,MAAA,IAAU,EAAE;AAAA,KAClD;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAK;AACrC;AAKO,SAAS,aAAa,MAAA,EAA+B;AAC1D,EAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,mBAAA;AAEhC,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,CAAA,GAAA,KAAO;AACjC,IAAA,MAAM,IAAA,GAAO,IAAI,YAAA,IAAgB,MAAA;AACjC,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,IAAW,kBAAA;AAE/B,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,UAAA,IAAc,iBAAA,IAAqB,IAAI,MAAA,EAAQ;AACjE,MAAA,OAAO,CAAA,2BAAA,EAA8B,GAAA,CAAI,MAAA,CAAO,eAAe,CAAA,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,IAAU,MAAA,IAAU,IAAI,MAAA,EAAQ;AAClD,MAAA,OAAO,GAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,WAAA,EAAc,GAAA,CAAI,OAAO,IAAI,CAAA,CAAA,CAAA;AAAA,IACzD;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,IAAU,eAAA,IAAmB,IAAI,MAAA,EAAQ;AAC3D,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,kBAAA,EAAsB,GAAA,CAAI,OAAO,aAAA,CAA2B,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,IACtF;AAEA,IAAA,IAAI,GAAA,CAAI,YAAY,QAAA,EAAU;AAC5B,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,kBAAA,EAAqB,OAAO,CAAA,CAAA,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,KAAY,WAAA,IAAe,GAAA,CAAI,YAAY,UAAA,EAAY;AAC7D,MAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,EAC5B,CAAC,CAAA;AAED,EAAA,OAAO,QAAA,CAAS,KAAK,IAAI,CAAA;AAC3B;;;ACtCO,SAAS,SAAA,CAAU,WAAgB,OAAA,EAAqB;AAC7D,EAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAO,MAAA;AAC5B,EAAA,MAAM,MAAA,GAAS,QAAQ,KAAA,EAAM;AAE7B,EAAA,IAAI,QAAA,CAAS,MAAM,CAAA,IAAK,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,MAAA,IAAI,QAAA,CAAS,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AACzB,QAAA,IAAI,CAAC,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,EAAE,CAAC,GAAG,GAAG,IAAI,CAAA;AACrD,QAAA,SAAA,CAAU,MAAA,CAAO,GAAG,CAAA,EAAG,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,MAAA,CAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,MAAA,CAAO,GAAG,CAAA,EAAG,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,GAAG,OAAO,CAAA;AACrC;AAYO,SAAS,cAAA,CAAe,KAAU,GAAA,EAA8C;AACrF,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAE3B,IAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,gBAAA,EAAkB,CAAC,OAAO,OAAA,KAAY;AACvD,MAAA,OAAO,GAAA,CAAI,OAAO,CAAA,IAAK,KAAA;AAAA,IACzB,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,IAAI,GAAA,CAAI,CAAA,IAAA,KAAQ,cAAA,CAAe,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,IAAA,MAAM,WAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,OAAO,GAAA,EAAK;AACrB,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,cAAA,CAAe,GAAA,CAAI,GAAG,GAAG,GAAG,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA;AACT;AAcO,SAAS,oBAAA,CACd,WAAA,EACA,UAAA,EACA,GAAA,EACA,aACA,WAAA,EACmB;AACnB,EAAA,IAAI;AAEF,IAAA,IAAI,aAAkB,EAAC;AACvB,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,UAAA,GAAa,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,IACrC;AAGA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA;AAGvC,IAAA,MAAM,MAAA,GAAS,SAAA;AAAA,MACb,EAAC;AAAA,MACD,EAAE,IAAA,EAAM,UAAA,CAAW,IAAA,EAAK;AAAA;AAAA,MACxB,UAAA,CAAW,YAAY,EAAC;AAAA;AAAA,MACxB;AAAA;AAAA,KACF;AAGA,IAAA,MAAM,QAAA,GAAW,cAAA,CAAe,MAAA,EAAQ,GAAG,CAAA;AAG3C,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,MAAA,QAAA,CAAS,WAAW,EAAC;AAAA,IACvB;AAGA,IAAA,IAAI,QAAA,CAAS,KAAK,QAAA,EAAU;AAC1B,MAAA,MAAM,YAAA,GAAe,CAAC,aAAA,EAAe,YAAA,EAAc,MAAM,CAAA;AACzD,MAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,EAAG;AACjD,QAAA,MAAM,IAAI,kBAAA;AAAA,UACR,CAAA,wBAAA,EAA2B,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA,CAAA;AAAA,UAChD,WAAA;AAAA,UACA,CAAA,yBAAA,EAA4B,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACrD;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,kBAAA,GAAqB;AAAA,MACzB,GAAG,QAAA;AAAA,MACH,SAAA,EAAW;AAAA,QACT,WAAA;AAAA,QACA;AAAA;AACF,KACF;AAGA,IAAA,MAAM,gBAAA,GAAmB,0BAA0B,kBAAkB,CAAA;AAErE,IAAA,IAAI,CAAC,iBAAiB,KAAA,EAAO;AAC3B,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,mCAAA,EAAsC,iBAAiB,YAAY,CAAA,CAAA;AAAA,QACnE,WAAA;AAAA,QACA,kDAAkD,WAAW,CAAA,UAAA;AAAA,OAC/D;AAAA,IACF;AAEA,IAAA,OAAO,kBAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,kBAAA,EAAoB;AACvC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,iBAAiB,WAAA,IAAe,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAClE,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,yCAAA,CAAA;AAAA,QACA,WAAA;AAAA,QACA,CAAA,qFAAA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,kBAAA;AAAA,MACR,8CAA8C,OAAO,CAAA,CAAA;AAAA,MACrD,WAAA;AAAA,MACA,CAAA,4CAAA;AAAA,KACF;AAAA,EACF;AACF;AAQO,SAAS,yBAAyB,MAAA,EAAkE;AACzG,EAAA,MAAM,OAAA,GAAU,OAAO,GAAA,EAAK,QAAA;AAG5B,EAAA,OAAO,OAAA,IAAW,aAAA;AACpB;AASO,SAAS,qBAAqB,KAAA,EAA2B;AAC9D,EAAA,OAAO,KAAA,CACJ,OAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,SAAS,OAAO,CAAC,CAAA,CACrC,GAAA,CAAI,CAAA,IAAA,KAAQ;AAEX,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY,IAAI,CAAC,CAAA;AACxE,IAAA,MAAM,WAAW,SAAA,IAAa,CAAA,GAAI,KAAK,SAAA,CAAU,SAAA,GAAY,CAAC,CAAA,GAAI,IAAA;AAElE,IAAA,OAAO,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EAC7B,CAAC,EACA,IAAA,EAAK;AACV;AAQO,SAAS,aAAa,MAAA,EAA6E;AACxG,EAAA,OAAO,CAAC,CAAE,MAAA,CAAe,OAAO,CAAC,CAAE,OAAe,GAAA,CAAI,MAAA;AACxD;AAOO,SAAS,qBAAqB,MAAA,EAAiC;AACpE,EAAA,OAAA,CAAQ,IAAI,4BAA4B,CAAA;AACxC,EAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC7C;;;AC3RO,SAAS,kBAAA,CAAmB,OAA2B,qBAAA,EAAuD;AACnH,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,OAAO,qBAAA,CAAsB,SAAS,KAAK,CAAA;AAC7C;AASO,SAAS,gBAAA,CAAiB,OAA2B,qBAAA,EAA8C;AACxG,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AACA,EAAA,IAAI,CAAC,kBAAA,CAAmB,KAAA,EAAO,qBAAqB,CAAA,EAAG;AACrD,IAAA,MAAM,IAAI,MAAM,CAAA,qBAAA,EAAwB,KAAK,6BAA6B,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9G;AACA,EAAA,OAAO,KAAA;AACT;AAQO,SAAS,mBAAA,CAAoB,OAA2B,qBAAA,EAA8C;AAC3G,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AACA,EAAA,IAAI,CAAC,kBAAA,CAAmB,KAAA,EAAO,qBAAqB,CAAA,EAAG;AACrD,IAAA,MAAM,IAAI,MAAM,CAAA,qBAAA,EAAwB,KAAK,6BAA6B,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EAC9G;AACA,EAAA,OAAO,KAAA;AACT;;;AC5BO,SAAS,oBAAoB,KAAA,EAAsC;AACxE,EAAA,OAAO,CAAC,KAAA,EAAO,WAAA,EAAa,SAAS,UAAU,CAAA,CAAE,SAAS,KAAK,CAAA;AACjE;AAOO,SAAS,mBAAA,GAAsC;AACpD,EAAA,OAAO,CAAC,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,UAAU,CAAA;AACjD;;;AC6HO,IAAM,kBAAA,GAAqB;AAC3B,IAAM,WAAA,GAAc","file":"index.js","sourcesContent":["/**\n * Resource creation methods - How resources are created in the system\n */\n\n/**\n * Enumeration of all possible resource creation methods\n */\nexport const CREATION_METHODS = {\n API: 'api',\n UPLOAD: 'upload',\n UI: 'ui',\n REFERENCE: 'reference',\n CLONE: 'clone',\n GENERATED: 'generated',\n} as const;\n\n/**\n * Type for resource creation methods\n */\nexport type CreationMethod = typeof CREATION_METHODS[keyof typeof CREATION_METHODS];","/**\n * Branded identifier types for compile-time type safety.\n *\n * These types prevent mixing up resource IDs, annotation IDs, and user IDs\n * at compile time while having zero runtime overhead.\n *\n * URI types (ResourceUri, AnnotationUri) are in @semiont/api-client\n * since they deal with HTTP URIs returned by the API.\n */\n\n// Branded type definitions for IDs only\nexport type ResourceId = string & { readonly __brand: 'ResourceId' };\nexport type AnnotationId = string & { readonly __brand: 'AnnotationId' };\nexport type UserId = string & { readonly __brand: 'UserId' };\n\n// Type guards with runtime validation\nexport function isResourceId(value: string): value is ResourceId {\n return !value.includes('/');\n}\n\nexport function isAnnotationId(value: string): value is AnnotationId {\n return !value.includes('/');\n}\n\n// Factory functions with runtime validation\nexport function resourceId(id: string): ResourceId {\n if (id.includes('/')) {\n throw new TypeError(`Expected ResourceId, got URI: ${id}`);\n }\n return id as ResourceId;\n}\n\nexport function annotationId(id: string): AnnotationId {\n if (id.includes('/')) {\n throw new TypeError(`Expected AnnotationId, got URI: ${id}`);\n }\n return id as AnnotationId;\n}\n\nexport function userId(id: string): UserId {\n return id as UserId;\n}\n","/**\n * URI utilities for W3C annotations\n *\n * Converts between short resource/annotation IDs and full URIs.\n * Full URIs are required by W3C Web Annotation Data Model.\n */\n\nimport { resourceId, annotationId, type ResourceId, type AnnotationId } from './identifiers';\nimport { resourceUri, annotationUri, type ResourceUri, type AnnotationUri, type ResourceAnnotationUri } from '@semiont/api-client';\n\n/**\n * Convert resource ID to full URI\n *\n * @param id - Short resource ID (e.g., \"doc-abc123\")\n * @param publicURL - Backend base URL\n * @returns Full URI (e.g., \"https://api.semiont.app/resources/doc-abc123\")\n *\n * @example\n * resourceIdToURI(\"doc-abc123\", \"https://api.semiont.app\")\n * // => \"https://api.semiont.app/resources/doc-abc123\"\n */\nexport function resourceIdToURI(id: ResourceId, publicURL: string): ResourceUri {\n // Remove trailing slash if present\n const normalizedBase = publicURL.endsWith('/') ? publicURL.slice(0, -1) : publicURL;\n return resourceUri(`${normalizedBase}/resources/${id}` );\n}\n\n/**\n * Extract resource ID from full URI\n *\n * @param uri - Full resource URI (e.g., \"https://api.semiont.app/resources/doc-abc123\")\n * @returns Short resource ID (e.g., \"doc-abc123\")\n * @throws Error if URI format is invalid\n *\n * @example\n * uriToResourceId(\"https://api.semiont.app/resources/doc-abc123\")\n * // => \"doc-abc123\"\n */\nexport function uriToResourceId(uri: string): ResourceId {\n const url = new URL(uri);\n const match = url.pathname.match(/\\/resources\\/([^/]+)/);\n if (!match || !match[1]) {\n throw new Error(`Invalid resource URI: ${uri}`);\n }\n return resourceId(match[1]);\n}\n\n/**\n * Convert annotation ID to full URI\n *\n * @param id - Short annotation ID (e.g., \"anno-xyz789\")\n * @param publicURL - Backend base URL\n * @returns Full URI (e.g., \"https://api.semiont.app/annotations/anno-xyz789\")\n *\n * @example\n * annotationIdToURI(\"anno-xyz789\", \"https://api.semiont.app\")\n * // => \"https://api.semiont.app/annotations/anno-xyz789\"\n */\nexport function annotationIdToURI(id: AnnotationId, publicURL: string): AnnotationUri {\n // Remove trailing slash if present\n const normalizedBase = publicURL.endsWith('/') ? publicURL.slice(0, -1) : publicURL;\n return annotationUri(`${normalizedBase}/annotations/${id}`);\n}\n\n/**\n * Extract annotation ID from full URI\n *\n * @param uri - Full annotation URI (e.g., \"https://api.semiont.app/annotations/anno-xyz789\")\n * @returns Short annotation ID (e.g., \"anno-xyz789\")\n * @throws Error if URI format is invalid\n *\n * @example\n * uriToAnnotationId(\"https://api.semiont.app/annotations/anno-xyz789\")\n * // => \"anno-xyz789\"\n */\nexport function uriToAnnotationId(uri: string): AnnotationId {\n const url = new URL(uri);\n const match = url.pathname.match(/\\/annotations\\/([^/]+)/);\n if (!match || !match[1]) {\n throw new Error(`Invalid annotation URI: ${uri}`);\n }\n return annotationId(match[1]);\n}\n\n/**\n * Extract annotation ID from URI or pass through if already an ID\n *\n * Defensive version of uriToAnnotationId that handles both:\n * - Full URIs: \"https://api.semiont.app/annotations/anno-xyz789\" → \"anno-xyz789\"\n * - Already IDs: \"anno-xyz789\" → \"anno-xyz789\"\n *\n * @param uriOrId - Full annotation URI or short ID\n * @returns Short annotation ID\n *\n * @example\n * uriToAnnotationIdOrPassthrough(\"https://api.semiont.app/annotations/anno-xyz789\")\n * // => \"anno-xyz789\"\n *\n * uriToAnnotationIdOrPassthrough(\"anno-xyz789\")\n * // => \"anno-xyz789\"\n */\nexport function uriToAnnotationIdOrPassthrough(uriOrId: string): AnnotationId {\n // Try parsing as URI first\n try {\n return uriToAnnotationId(uriOrId);\n } catch {\n // If it fails, assume it's already an ID and return as-is\n return annotationId(uriOrId);\n }\n}\n\n/**\n * Extract resource URI from nested annotation URI\n *\n * @param annotationUri - Nested ResourceAnnotationUri (e.g., \"https://api.semiont.app/resources/doc-123/annotations/anno-456\")\n * @returns Resource URI (e.g., \"https://api.semiont.app/resources/doc-123\")\n * @throws Error if URI format is invalid\n *\n * @example\n * extractResourceUriFromAnnotationUri(\"https://api.semiont.app/resources/doc-123/annotations/anno-456\")\n * // => \"https://api.semiont.app/resources/doc-123\"\n */\nexport function extractResourceUriFromAnnotationUri(annotationUri: ResourceAnnotationUri): ResourceUri {\n const parts = annotationUri.split('/annotations/');\n if (parts.length !== 2) {\n throw new Error(`Invalid annotation URI format: ${annotationUri}`);\n }\n return resourceUri(parts[0]);\n}\n","/**\n * Resource Event Types\n *\n * Event-sourced architecture for resource state management\n * Events are stored in an append-only log (JSONL format)\n *\n * Federation-ready design:\n * - resourceId uses content hashes (doc-sha256:...)\n * - userId uses DID format (did:web:org.com:users:alice)\n * - prevEventHash creates tamper-evident chains\n * - Optional signatures for cross-org verification\n */\n\nimport type { CreationMethod } from './creation-methods';\nimport type { components, AnnotationUri, JobId } from '@semiont/api-client';\nimport type { ResourceId, AnnotationId, UserId } from './identifiers';\n\n// Import OpenAPI types\ntype Annotation = components['schemas']['Annotation'];\ntype ContentFormat = components['schemas']['ContentFormat'];\ntype Motivation = components['schemas']['Motivation'];\n\nexport interface BaseEvent {\n id: string; // Unique event ID (UUID)\n timestamp: string; // ISO 8601 timestamp (for humans, NOT for ordering)\n resourceId?: ResourceId; // Optional - present for resource-scoped events, absent for system events\n // Use isSystemEvent() / isResourceScopedEvent() type guards for routing\n userId: UserId; // DID format: did:web:org.com:users:alice (federation-ready)\n version: number; // Event schema version\n}\n\n// Resource lifecycle events\nexport interface ResourceCreatedEvent extends BaseEvent {\n type: 'resource.created';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of content (should match resourceId)\n contentByteSize?: number; // Size of content in bytes\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n isDraft?: boolean; // Draft status for generated resources\n generatedFrom?: string; // Annotation/Reference ID that triggered generation\n generationPrompt?: string; // Prompt used for AI generation (events-only, not on Resource)\n };\n}\n\nexport interface ResourceClonedEvent extends BaseEvent {\n type: 'resource.cloned';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of new content\n contentByteSize?: number; // Size of content in bytes\n parentResourceId: string; // Content hash of parent resource\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n };\n}\n\nexport interface ResourceArchivedEvent extends BaseEvent {\n type: 'resource.archived';\n payload: {\n reason?: string;\n };\n}\n\nexport interface ResourceUnarchivedEvent extends BaseEvent {\n type: 'resource.unarchived';\n payload: Record<string, never>; // Empty payload\n}\n\n// Representation events (multi-format support)\nexport interface RepresentationAddedEvent extends BaseEvent {\n type: 'representation.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n representation: {\n '@id': string; // Unique ID (content hash)\n mediaType: string; // MIME type (e.g., 'text/markdown', 'application/pdf')\n byteSize: number; // Size in bytes\n checksum: string; // Content hash (SHA-256)\n created: string; // ISO 8601 timestamp\n rel?: 'original' | 'thumbnail' | 'preview' | 'optimized' | 'derived' | 'other';\n storageUri?: string; // Where bytes are stored (optional)\n filename?: string; // Original filename (optional)\n language?: string; // IETF BCP 47 language tag (optional, for translations)\n width?: number; // Pixels (images/video)\n height?: number; // Pixels (images/video)\n duration?: number; // Seconds (audio/video)\n };\n };\n}\n\nexport interface RepresentationRemovedEvent extends BaseEvent {\n type: 'representation.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n checksum: string; // Which representation to remove\n };\n}\n\n// Unified annotation events\n// Single principle: An annotation is an annotation. The motivation field tells you what kind it is.\nexport interface AnnotationAddedEvent extends BaseEvent {\n type: 'annotation.added';\n payload: {\n annotation: Omit<Annotation, 'creator' | 'created'>; // W3C Annotation (creator/created come from event metadata)\n };\n}\n\nexport interface AnnotationRemovedEvent extends BaseEvent {\n type: 'annotation.removed';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n };\n}\n\n// Body operation types for fine-grained annotation body modifications\nexport type BodyItem =\n | { type: 'TextualBody'; value: string; purpose?: Motivation; format?: string; language?: string }\n | { type: 'SpecificResource'; source: string; purpose?: Motivation };\n\nexport type BodyOperation =\n | { op: 'add'; item: BodyItem }\n | { op: 'remove'; item: BodyItem }\n | { op: 'replace'; oldItem: BodyItem; newItem: BodyItem };\n\nexport interface AnnotationBodyUpdatedEvent extends BaseEvent {\n type: 'annotation.body.updated';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n operations: BodyOperation[];\n };\n}\n\n// Job progress events (resource-level)\n// Emitted by background workers for real-time progress updates\nexport interface JobStartedEvent extends BaseEvent {\n type: 'job.started';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n totalSteps?: number; // Optional - total number of steps if known\n };\n}\n\nexport interface JobProgressEvent extends BaseEvent {\n type: 'job.progress';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n percentage: number; // 0-100\n currentStep?: string; // Human-readable current step (e.g., \"Scanning for Person\")\n processedSteps?: number; // Number of steps completed\n totalSteps?: number; // Total number of steps\n foundCount?: number; // For detection: number of entities found so far\n message?: string; // Optional status message\n progress?: any; // For new job types: full progress object\n };\n}\n\nexport interface JobCompletedEvent extends BaseEvent {\n type: 'job.completed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n totalSteps?: number; // Total steps completed\n foundCount?: number; // For detection: total entities found\n resultResourceId?: ResourceId; // For generation: ID of generated resource (branded type)\n annotationUri?: AnnotationUri; // For generation: URI of annotation that triggered generation\n message?: string; // Optional completion message\n result?: any; // For new job types: full result object\n };\n}\n\nexport interface JobFailedEvent extends BaseEvent {\n type: 'job.failed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n error: string; // Error message\n details?: string; // Optional detailed error information\n };\n}\n\n// Entity tag events (resource-level)\nexport interface EntityTagAddedEvent extends BaseEvent {\n type: 'entitytag.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\nexport interface EntityTagRemovedEvent extends BaseEvent {\n type: 'entitytag.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\n// Entity type events (global collection)\nexport interface EntityTypeAddedEvent extends BaseEvent {\n type: 'entitytype.added';\n resourceId?: undefined; // System-level event - no resource scope\n payload: {\n entityType: string; // The entity type being added to global collection\n };\n}\n\n// Union type of all events\nexport type ResourceEvent =\n | ResourceCreatedEvent\n | ResourceClonedEvent\n | ResourceArchivedEvent\n | ResourceUnarchivedEvent\n | RepresentationAddedEvent // Multi-format support\n | RepresentationRemovedEvent // Multi-format support\n | AnnotationAddedEvent\n | AnnotationRemovedEvent\n | AnnotationBodyUpdatedEvent\n | JobStartedEvent // Job progress\n | JobProgressEvent // Job progress\n | JobCompletedEvent // Job progress\n | JobFailedEvent // Job progress\n | EntityTagAddedEvent // Resource-level\n | EntityTagRemovedEvent // Resource-level\n | EntityTypeAddedEvent; // Global collection\n\n// Extract just the event type strings from the union\nexport type ResourceEventType = ResourceEvent['type'];\n\n// System-level events (no resource scope)\nexport type SystemEvent = EntityTypeAddedEvent;\n\n// Resource-scoped events (require resourceId)\nexport type ResourceScopedEvent = Exclude<ResourceEvent, SystemEvent>;\n\n// Type guards\nexport function isResourceEvent(event: any): event is ResourceEvent {\n return event &&\n typeof event.id === 'string' &&\n typeof event.timestamp === 'string' &&\n (event.resourceId === undefined || typeof event.resourceId === 'string') && // resourceId now optional\n typeof event.type === 'string' &&\n event.type.includes('.');\n}\n\n/**\n * Type guard: Check if event is system-level (no resourceId)\n * System events affect global state, not individual resources\n */\nexport function isSystemEvent(event: ResourceEvent): event is SystemEvent {\n return event.type === 'entitytype.added';\n}\n\n/**\n * Type guard: Check if event is resource-scoped (has resourceId)\n * Resource events affect a specific resource's state\n */\nexport function isResourceScopedEvent(event: ResourceEvent): event is ResourceScopedEvent {\n return !isSystemEvent(event);\n}\n\nexport function getEventType<T extends ResourceEvent>(\n event: ResourceEvent\n): T['type'] {\n return event.type as T['type'];\n}\n\n// Event metadata for querying and indexing\nexport interface EventMetadata {\n sequenceNumber: number; // Position in the event log (source of truth for ordering)\n streamPosition: number; // Byte position in JSONL file\n timestamp: string; // When stored (for humans, not ordering)\n prevEventHash?: string; // SHA-256 of previous event (chain integrity, null for first event)\n checksum?: string; // SHA-256 of this event for integrity\n}\n\n// Optional signature for federation\nexport interface EventSignature {\n algorithm: 'ed25519'; // Signature algorithm\n publicKey: string; // User's public key (base64)\n signature: string; // Event signature (base64)\n keyId?: string; // Key identifier for rotation\n}\n\n// Event with metadata (as stored)\nexport interface StoredEvent<T extends ResourceEvent = ResourceEvent> {\n event: T;\n metadata: EventMetadata;\n signature?: EventSignature; // Optional, for federation (unused in MVP)\n}\n\n// Query filters for event retrieval\nexport interface EventQuery {\n resourceId?: ResourceId;\n userId?: string;\n eventTypes?: ResourceEvent['type'][];\n fromTimestamp?: string;\n toTimestamp?: string;\n fromSequence?: number;\n limit?: number;\n}\n\n// Annotation collections for a resource (view storage projection)\n// Annotations are NOT part of the resource - they reference the resource\nexport interface ResourceAnnotations {\n resourceId: ResourceId; // Which resource these annotations belong to (branded type)\n annotations: Annotation[]; // All annotations (highlights, references, assessments, etc.)\n version: number; // Event count for this resource's annotation stream\n updatedAt: string; // Last annotation event timestamp\n}","/**\n * Event Type Guards and Extraction Utilities\n *\n * Domain logic for working with resource events.\n * No React dependencies - safe to use in any JavaScript environment.\n */\n\nimport type { StoredEvent } from './events';\nimport type { AnnotationUri } from '@semiont/api-client';\n\n// =============================================================================\n// EVENT TYPE GUARDS AND EXTRACTION\n// =============================================================================\n\n/**\n * Extract annotation ID from event payload\n * Returns null if event is not annotation-related\n *\n * For annotation.added: extracts full URI from payload.annotation.id\n * For annotation.removed/body.updated: constructs full URI from payload.annotationId (UUID) + resourceId\n */\nexport function getAnnotationUriFromEvent(event: StoredEvent): AnnotationUri | null {\n const eventData = event.event;\n\n if (eventData.type === 'annotation.added') {\n // annotation.added has the full annotation object with id as full URI\n return eventData.payload.annotation.id as AnnotationUri || null;\n }\n\n if (eventData.type === 'annotation.removed' || eventData.type === 'annotation.body.updated') {\n // These events have annotationId (UUID only), need to construct full URI\n // Extract base URL from resourceId (format: http://host/resources/id)\n if (eventData.payload.annotationId && eventData.resourceId) {\n try {\n const resourceUri = eventData.resourceId;\n // Extract base URL by removing the /resources/{id} part\n const baseUrl = resourceUri.substring(0, resourceUri.lastIndexOf('/resources/'));\n return `${baseUrl}/annotations/${eventData.payload.annotationId}` as AnnotationUri;\n } catch (e) {\n return null;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Check if an event is related to a specific annotation\n */\nexport function isEventRelatedToAnnotation(event: StoredEvent, annotationUri: AnnotationUri): boolean {\n const eventAnnotationUri = getAnnotationUriFromEvent(event);\n return eventAnnotationUri === annotationUri;\n}\n\n/**\n * Type guard to check if event is a resource event\n */\nexport function isResourceEvent(event: any): event is StoredEvent {\n return event &&\n typeof event.event === 'object' &&\n typeof event.event.id === 'string' &&\n typeof event.event.timestamp === 'string' &&\n typeof event.event.resourceId === 'string' &&\n typeof event.event.type === 'string' &&\n typeof event.metadata === 'object' &&\n typeof event.metadata.sequenceNumber === 'number';\n}\n","/**\n * Backend-specific annotation utility functions\n */\n\nimport type { components } from '@semiont/api-client';\nimport type { BodyItem } from './events';\n\ntype Annotation = components['schemas']['Annotation'];\n\n/**\n * Find a body item in an array\n * Returns the index of the first matching item, or -1 if not found\n */\nexport function findBodyItem(body: Annotation['body'], targetItem: BodyItem): number {\n if (!Array.isArray(body)) {\n return -1;\n }\n\n for (let i = 0; i < body.length; i++) {\n const item = body[i];\n\n // Check if this is a valid body item that can be matched\n if (\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n 'purpose' in item\n ) {\n const itemType = (item as { type: unknown }).type;\n const itemPurpose = (item as { purpose: unknown }).purpose;\n\n // Type and purpose must match\n if (itemType !== targetItem.type || itemPurpose !== targetItem.purpose) {\n continue;\n }\n\n // For TextualBody, match by value\n if (targetItem.type === 'TextualBody' && 'value' in item) {\n const itemValue = (item as { value: unknown }).value;\n if (itemValue === targetItem.value) {\n return i;\n }\n }\n\n // For SpecificResource, match by source\n if (targetItem.type === 'SpecificResource' && 'source' in item) {\n const itemSource = (item as { source: unknown }).source;\n if (itemSource === targetItem.source) {\n return i;\n }\n }\n }\n }\n\n return -1;\n}\n","/**\n * Common type guard utilities\n */\n\n/**\n * Check if value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Check if value is a number (not NaN)\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if value is an object (not null, not array)\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Check if value is an array\n */\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\n/**\n * Check if value is a boolean\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Check if value is a function\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === 'function';\n}\n\n/**\n * Check if value is null\n */\nexport function isNull(value: unknown): value is null {\n return value === null;\n}\n\n/**\n * Check if value is undefined\n */\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined;\n}\n\n/**\n * Check if value is null or undefined\n */\nexport function isNullish(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Check if value is defined (not null or undefined)\n */\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}","/**\n * Common error classes\n */\n\n/**\n * Base error class for Semiont applications\n */\nexport class SemiontError extends Error {\n constructor(\n message: string,\n public code: string,\n public details?: Record<string, any>\n ) {\n super(message);\n this.name = 'SemiontError';\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\n/**\n * Error thrown when validation fails\n */\nexport class ValidationError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Error thrown by scripts\n */\nexport class ScriptError extends SemiontError {\n constructor(message: string, code: string = 'SCRIPT_ERROR', details?: Record<string, any>) {\n super(message, code, details);\n this.name = 'ScriptError';\n }\n}\n\n/**\n * Error thrown when a resource is not found\n */\nexport class NotFoundError extends SemiontError {\n constructor(resource: string, id?: string) {\n const message = id ? `${resource} with id '${id}' not found` : `${resource} not found`;\n super(message, 'NOT_FOUND', { resource, id });\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Error thrown when user is not authorized\n */\nexport class UnauthorizedError extends SemiontError {\n constructor(message: string = 'Unauthorized', details?: Record<string, any>) {\n super(message, 'UNAUTHORIZED', details);\n this.name = 'UnauthorizedError';\n }\n}\n\n/**\n * Error thrown when operation would conflict with existing data\n */\nexport class ConflictError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONFLICT', details);\n this.name = 'ConflictError';\n }\n}\n\n/**\n * API Error class for handling HTTP errors\n * Used by API clients to represent failed HTTP requests\n */\nexport class APIError extends Error {\n constructor(\n public status: number,\n public data: any,\n message?: string\n ) {\n super(message || `API Error: ${status}`);\n this.name = 'APIError';\n Error.captureStackTrace(this, this.constructor);\n }\n}","/**\n * DID (Decentralized Identifier) and W3C Agent utilities\n *\n * Provides utilities for working with DID:WEB identifiers and converting\n * between user representations and W3C Web Annotation Agent objects.\n */\n\nimport type { components } from '@semiont/api-client';\n\ntype Agent = components['schemas']['Agent'];\n\n/**\n * Convert a user object to a DID:WEB identifier\n *\n * Format: did:web:domain.com:users:userId\n * Example: did:web:example.com:users:abc123\n *\n * This is used for W3C Web Annotation compliance and federation readiness.\n *\n * @param user - User object with id and domain\n * @returns DID:WEB identifier string\n */\nexport function userToDid(user: { id: string; domain: string }): string {\n return `did:web:${user.domain}:users:${user.id}`;\n}\n\n/**\n * Convert a user object to a W3C Agent object with DID:WEB identifier\n *\n * Creates a full Agent object for W3C Web Annotation compliance.\n * Includes DID:WEB identifier, type, and name.\n *\n * @param user - User object with id, domain, name, and email\n * @returns W3C Agent object\n */\nexport function userToAgent(user: {\n id: string;\n domain: string;\n name: string | null;\n email: string;\n}): Agent {\n return {\n type: 'Person' as const,\n id: userToDid(user),\n name: user.name || user.email,\n };\n}\n\n/**\n * Convert a DID string to a minimal W3C Agent object\n *\n * Used when reconstructing annotations from events where only the DID is available.\n * Creates a minimal Agent with just the required fields (id, type).\n * Name is derived from the DID for display purposes.\n *\n * @param did - DID:WEB identifier string\n * @returns Minimal W3C Agent object\n */\nexport function didToAgent(did: string): Agent {\n // Extract user ID from DID format: did:web:domain.com:users:userId\n const parts = did.split(':');\n const userId = parts[parts.length - 1] || 'unknown';\n\n return {\n type: 'Person' as const,\n id: did,\n name: userId, // Use user ID as name since we don't have full user data\n };\n}\n","/**\n * Configuration Error Class\n * \n * Custom error class for configuration validation and loading errors.\n * Provides structured error information with helpful suggestions.\n */\n\nexport class ConfigurationError extends Error {\n public override readonly cause?: Error;\n\n constructor(\n message: string,\n public environment?: string,\n public suggestion?: string,\n cause?: Error\n ) {\n super(message);\n this.name = 'ConfigurationError';\n this.cause = cause;\n }\n \n /**\n * Format the error nicely for CLI output\n */\n override toString(): string {\n let output = `❌ ${this.message}`;\n if (this.environment) {\n output += `\\n Environment: ${this.environment}`;\n }\n if (this.suggestion) {\n output += `\\n 💡 Suggestion: ${this.suggestion}`;\n }\n return output;\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://semiont.org/schemas/config.json\",\n \"definitions\": {\n \"PlatformType\": {\n \"type\": \"string\",\n \"enum\": [\n \"posix\",\n \"container\",\n \"aws\",\n \"external\"\n ]\n },\n \"ServicePlatformConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"$ref\": \"#/definitions/PlatformType\"\n }\n },\n \"required\": [\n \"type\"\n ]\n },\n \"ResourceRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"cpu\": {\n \"type\": \"string\"\n },\n \"memory\": {\n \"type\": \"string\"\n },\n \"gpu\": {\n \"type\": \"integer\"\n },\n \"gpus\": {\n \"type\": \"integer\"\n },\n \"replicas\": {\n \"type\": \"integer\"\n },\n \"ephemeralStorage\": {\n \"type\": \"string\"\n },\n \"memoryReservation\": {\n \"type\": \"string\"\n }\n },\n \"additionalProperties\": false\n },\n \"SecurityRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"readOnlyRootFilesystem\": {\n \"type\": \"boolean\"\n },\n \"runAsNonRoot\": {\n \"type\": \"boolean\"\n },\n \"runAsUser\": {\n \"type\": \"integer\"\n },\n \"runAsGroup\": {\n \"type\": \"integer\"\n },\n \"capabilities\": {\n \"oneOf\": [\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"add\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"drop\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n }\n ]\n },\n \"privileged\": {\n \"type\": \"boolean\"\n },\n \"allowPrivilegeEscalation\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"BuildRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"BackendServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"devMode\": {\n \"type\": \"boolean\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"publicURL\": {\n \"type\": \"string\"\n },\n \"corsOrigin\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"cpu\": {\n \"type\": \"string\"\n },\n \"memory\": {\n \"type\": \"string\"\n },\n \"semiontRepo\": {\n \"type\": \"string\"\n },\n \"databaseUrl\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"redisUrl\": {\n \"type\": \"string\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"port\",\n \"publicURL\",\n \"corsOrigin\"\n ],\n \"additionalProperties\": false\n },\n \"FrontendServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"devMode\": {\n \"type\": \"boolean\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"siteName\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"semiontRepo\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n },\n \"databaseUrl\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"publicURL\": {\n \"type\": \"string\"\n },\n \"allowedOrigins\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"port\",\n \"siteName\"\n ],\n \"additionalProperties\": false\n },\n \"ProxyServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"envoy\", \"nginx\", \"haproxy\"],\n \"default\": \"envoy\"\n },\n \"port\": {\n \"type\": \"integer\",\n \"default\": 8080\n },\n \"adminPort\": {\n \"type\": \"integer\",\n \"default\": 9901\n },\n \"backendPort\": {\n \"type\": \"integer\",\n \"default\": 4000\n },\n \"frontendPort\": {\n \"type\": \"integer\",\n \"default\": 3000\n },\n \"image\": {\n \"type\": \"string\",\n \"default\": \"envoyproxy/envoy:v1.28-latest\"\n },\n \"configPath\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"port\"\n ],\n \"additionalProperties\": false\n },\n \"DatabaseServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"host\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"user\": {\n \"type\": \"string\"\n },\n \"username\": {\n \"type\": \"string\"\n },\n \"password\": {\n \"type\": \"string\"\n },\n \"database\": {\n \"type\": \"string\"\n },\n \"storageSize\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"host\",\n \"port\"\n ],\n \"additionalProperties\": false\n },\n \"GraphDatabaseType\": {\n \"type\": \"string\",\n \"enum\": [\n \"neo4j\",\n \"janusgraph\",\n \"neptune\",\n \"memory\"\n ]\n },\n \"GraphServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"$ref\": \"#/definitions/GraphDatabaseType\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"uri\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"username\": {\n \"type\": \"string\"\n },\n \"password\": {\n \"type\": \"string\"\n },\n \"database\": {\n \"type\": \"string\"\n },\n \"host\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"storage\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"string\"\n },\n \"endpoint\": {\n \"type\": \"string\"\n },\n \"region\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"janusgraphVersion\": {\n \"type\": \"string\"\n },\n \"javaOptions\": {\n \"type\": \"string\"\n },\n \"heapSize\": {\n \"type\": \"string\"\n },\n \"pageCacheSize\": {\n \"type\": \"string\"\n },\n \"noAuth\": {\n \"type\": \"boolean\"\n },\n \"dataPath\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\"\n ],\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"neo4j\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"uri\",\n \"username\",\n \"password\",\n \"database\"\n ]\n }\n }\n ],\n \"additionalProperties\": false\n },\n \"FilesystemServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"path\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"path\"\n ],\n \"additionalProperties\": false\n },\n \"InferenceServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\"\n },\n \"model\": {\n \"type\": \"string\"\n },\n \"maxTokens\": {\n \"type\": \"integer\"\n },\n \"endpoint\": {\n \"type\": \"string\"\n },\n \"baseURL\": {\n \"type\": \"string\"\n },\n \"apiKey\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"organization\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"apiKey\"\n ],\n \"additionalProperties\": false\n },\n \"McpServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"dependsOn\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\"\n ],\n \"additionalProperties\": false\n },\n \"ServicesConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"backend\": {\n \"$ref\": \"#/definitions/BackendServiceConfig\"\n },\n \"frontend\": {\n \"$ref\": \"#/definitions/FrontendServiceConfig\"\n },\n \"database\": {\n \"$ref\": \"#/definitions/DatabaseServiceConfig\"\n },\n \"graph\": {\n \"$ref\": \"#/definitions/GraphServiceConfig\"\n },\n \"filesystem\": {\n \"$ref\": \"#/definitions/FilesystemServiceConfig\"\n },\n \"inference\": {\n \"$ref\": \"#/definitions/InferenceServiceConfig\"\n },\n \"mcp\": {\n \"$ref\": \"#/definitions/McpServiceConfig\"\n },\n \"proxy\": {\n \"$ref\": \"#/definitions/ProxyServiceConfig\"\n }\n },\n \"additionalProperties\": true\n },\n \"SiteConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"siteName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display name for the site\"\n },\n \"domain\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Primary domain for the site\"\n },\n \"adminEmail\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"Administrator email address\"\n },\n \"supportEmail\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"Support email address (optional)\"\n },\n \"oauthAllowedDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Email domains allowed for OAuth authentication\"\n }\n },\n \"required\": [\n \"domain\"\n ],\n \"additionalProperties\": false\n },\n \"AppConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"features\": {\n \"type\": \"object\",\n \"properties\": {\n \"enableAnalytics\": {\n \"type\": \"boolean\"\n },\n \"enableMaintenanceMode\": {\n \"type\": \"boolean\"\n },\n \"enableDebugLogging\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"security\": {\n \"type\": \"object\",\n \"properties\": {\n \"sessionTimeout\": {\n \"type\": \"integer\",\n \"minimum\": 60,\n \"description\": \"Session timeout in seconds\"\n },\n \"maxLoginAttempts\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Maximum failed login attempts before lockout\"\n },\n \"corsAllowedOrigins\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"enableLocalAuth\": {\n \"type\": \"boolean\",\n \"description\": \"Enable local username/password authentication\"\n },\n \"jwtSecret\": {\n \"type\": \"string\",\n \"minLength\": 32,\n \"description\": \"JWT signing secret (base64 encoded, 32+ bytes)\"\n }\n },\n \"additionalProperties\": false\n },\n \"performance\": {\n \"type\": \"object\",\n \"properties\": {\n \"enableCaching\": {\n \"type\": \"boolean\"\n },\n \"cacheTimeout\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Cache timeout in seconds\"\n },\n \"maxRequestSize\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]+(kb|mb|gb)$\",\n \"description\": \"Maximum request size (e.g., '10mb')\"\n }\n },\n \"additionalProperties\": false\n }\n },\n \"additionalProperties\": false\n },\n \"EnvironmentConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"_comment\": {\n \"type\": \"string\",\n \"description\": \"Optional comment for documentation\"\n },\n \"_metadata\": {\n \"type\": \"object\",\n \"properties\": {\n \"environment\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"environment\",\n \"projectRoot\"\n ]\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Environment name\"\n },\n \"platform\": {\n \"type\": \"object\",\n \"properties\": {\n \"default\": {\n \"$ref\": \"#/definitions/PlatformType\"\n }\n }\n },\n \"services\": {\n \"$ref\": \"#/definitions/ServicesConfig\"\n },\n \"site\": {\n \"$ref\": \"#/definitions/SiteConfig\"\n },\n \"app\": {\n \"$ref\": \"#/definitions/AppConfig\"\n },\n \"env\": {\n \"type\": \"object\",\n \"properties\": {\n \"NODE_ENV\": {\n \"type\": \"string\",\n \"enum\": [\n \"development\",\n \"production\",\n \"test\"\n ]\n }\n },\n \"additionalProperties\": true\n },\n \"logLevel\": {\n \"type\": \"string\",\n \"enum\": [\n \"error\",\n \"warn\",\n \"info\",\n \"http\",\n \"debug\"\n ],\n \"description\": \"Logging verbosity level\"\n },\n \"deployment\": {\n \"type\": \"object\",\n \"properties\": {\n \"imageTagStrategy\": {\n \"type\": \"string\",\n \"enum\": [\n \"mutable\",\n \"immutable\",\n \"git-hash\"\n ]\n }\n }\n }\n },\n \"required\": [\n \"services\"\n ],\n \"additionalProperties\": false\n },\n \"SemiontConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\",\n \"description\": \"Config file version (semver)\"\n },\n \"project\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Project name\"\n },\n \"site\": {\n \"$ref\": \"#/definitions/SiteConfig\"\n },\n \"app\": {\n \"$ref\": \"#/definitions/AppConfig\"\n },\n \"services\": {\n \"$ref\": \"#/definitions/ServicesConfig\"\n }\n },\n \"required\": [\n \"version\",\n \"project\",\n \"site\"\n ],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * Config Schema Validator\n *\n * Validates configuration data against JSON Schema using Ajv (JSON Schema validator).\n * Provides runtime validation for semiont.json and environment config files.\n */\n\nimport Ajv, { type ErrorObject } from 'ajv';\nimport addFormats from 'ajv-formats';\nimport configSchema from './config.schema.json' with { type: 'json' };\n\n// Initialize Ajv with config-compatible settings\nconst ajv = new Ajv({\n allErrors: true, // Return all errors, not just the first one\n coerceTypes: true, // Coerce types (e.g., \"123\" -> 123)\n removeAdditional: false, // Don't remove additional properties\n useDefaults: true, // Apply default values from schema\n strict: false\n});\n\n// Add format validators (email, uri, date-time, etc.)\naddFormats(ajv);\n\n// Load schema\najv.addSchema(configSchema, 'config');\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ErrorObject[] | null;\n errorMessage?: string;\n}\n\n/**\n * Validate semiont.json config\n */\nexport function validateSemiontConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/SemiontConfig');\n if (!validate) {\n throw new Error('SemiontConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Validate environment config (environments/*.json)\n */\nexport function validateEnvironmentConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/EnvironmentConfig');\n if (!validate) {\n throw new Error('EnvironmentConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Validate site config\n */\nexport function validateSiteConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/SiteConfig');\n if (!validate) {\n throw new Error('SiteConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Format validation errors into human-readable message\n */\nexport function formatErrors(errors: ErrorObject[]): string {\n if (errors.length === 0) return 'Validation failed';\n\n const messages = errors.map(err => {\n const path = err.instancePath || 'root';\n const message = err.message || 'validation error';\n\n if (err.keyword === 'required' && 'missingProperty' in err.params) {\n return `Missing required property: ${err.params.missingProperty}`;\n }\n\n if (err.keyword === 'type' && 'type' in err.params) {\n return `${path}: ${message} (expected ${err.params.type})`;\n }\n\n if (err.keyword === 'enum' && 'allowedValues' in err.params) {\n return `${path}: must be one of [${(err.params.allowedValues as string[]).join(', ')}]`;\n }\n\n if (err.keyword === 'format') {\n return `${path}: invalid format (${message})`;\n }\n\n if (err.keyword === 'minLength' || err.keyword === 'minItems') {\n return `${path}: ${message}`;\n }\n\n return `${path}: ${message}`;\n });\n\n return messages.join('; ');\n}\n","/**\n * Environment Loader Module\n *\n * Responsible for loading and merging environment configurations.\n * Handles semiont.json base config and environment-specific overrides.\n */\n\nimport { ConfigurationError } from './configuration-error';\nimport { PlatformType } from './platform-types';\nimport { isObject } from '../index';\nimport { validateEnvironmentConfig } from './config-validator';\nimport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n SemiontConfig,\n ServicesConfig,\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n ServicePlatformConfig\n} from './config.types';\n\n/**\n * Re-export generated types from JSON Schema\n * These types are automatically generated from config.schema.json\n */\nexport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n SemiontConfig,\n PlatformType,\n ServicesConfig,\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n ServicePlatformConfig\n};\n\n/**\n * Generic service configuration\n * Platform-specific fields should be accessed through platform-specific interfaces\n */\nexport interface ServiceConfig {\n platform?: {\n type: PlatformType;\n };\n // Generic fields that apply across platforms\n port?: number;\n name?: string;\n // Platform-specific fields are loosely typed here\n // Platforms should validate and type these properly\n [key: string]: any;\n}\n\nexport interface AWSConfig {\n region: string;\n accountId: string;\n certificateArn?: string;\n hostedZoneId?: string;\n rootDomain?: string;\n stacks?: {\n data?: string;\n app?: string;\n };\n database?: {\n name?: string;\n instanceClass?: string;\n allocatedStorage?: number;\n backupRetentionDays?: number;\n multiAZ?: boolean;\n };\n ecs?: {\n desiredCount?: number;\n minCapacity?: number;\n maxCapacity?: number;\n };\n monitoring?: {\n enableDetailedMonitoring?: boolean;\n logRetentionDays?: number;\n };\n}\n\n/**\n * Deep merge utility for configuration objects\n * Pure function - no side effects\n */\nexport function deepMerge(target: any, ...sources: any[]): any {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n deepMerge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return deepMerge(target, ...sources);\n}\n\n\n/**\n * Recursively resolve environment variable placeholders in configuration\n * Replaces ${VAR_NAME} with the value from the provided env object\n * Pure function - accepts env as parameter instead of using process.env\n *\n * @param obj - Configuration object to process\n * @param env - Environment variables object\n * @returns Configuration with resolved environment variables\n */\nexport function resolveEnvVars(obj: any, env: Record<string, string | undefined>): any {\n if (typeof obj === 'string') {\n // Replace ${VAR_NAME} with actual environment variable value\n return obj.replace(/\\$\\{([^}]+)\\}/g, (match, varName) => {\n return env[varName] || match;\n });\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => resolveEnvVars(item, env));\n }\n\n if (obj && typeof obj === 'object') {\n const resolved: any = {};\n for (const key in obj) {\n resolved[key] = resolveEnvVars(obj[key], env);\n }\n return resolved;\n }\n\n return obj;\n}\n\n/**\n * Parse and merge configuration files\n * Pure function - accepts file contents as strings instead of reading from filesystem\n *\n * @param baseContent - Contents of semiont.json (null if file doesn't exist)\n * @param envContent - Contents of environment-specific JSON file\n * @param env - Environment variables object\n * @param environment - Environment name\n * @param projectRoot - Project root path (for metadata only)\n * @returns Merged and validated environment configuration\n * @throws ConfigurationError if parsing or validation fails\n */\nexport function parseAndMergeConfigs(\n baseContent: string | null,\n envContent: string,\n env: Record<string, string | undefined>,\n environment: string,\n projectRoot: string\n): EnvironmentConfig {\n try {\n // Parse base config\n let baseConfig: any = {};\n if (baseContent) {\n baseConfig = JSON.parse(baseContent);\n }\n\n // Parse environment config\n const envConfig = JSON.parse(envContent);\n\n // Merge configurations: base defaults -> environment config\n const merged = deepMerge(\n {},\n { site: baseConfig.site }, // Site config from semiont.json\n baseConfig.defaults || {}, // Default config from semiont.json\n envConfig // Environment-specific overrides\n );\n\n // Resolve environment variables in the merged configuration\n const resolved = resolveEnvVars(merged, env);\n\n // Ensure services exists (even if empty)\n if (!resolved.services) {\n resolved.services = {};\n }\n\n // Validate NODE_ENV if specified\n if (resolved.env?.NODE_ENV) {\n const validNodeEnv = ['development', 'production', 'test'];\n if (!validNodeEnv.includes(resolved.env.NODE_ENV)) {\n throw new ConfigurationError(\n `Invalid NODE_ENV value: ${resolved.env.NODE_ENV}`,\n environment,\n `NODE_ENV must be one of: ${validNodeEnv.join(', ')}`\n );\n }\n }\n\n // Add metadata about where this config came from\n const configWithMetadata = {\n ...resolved,\n _metadata: {\n environment,\n projectRoot\n }\n };\n\n // Validate with AJV\n const validationResult = validateEnvironmentConfig(configWithMetadata);\n\n if (!validationResult.valid) {\n throw new ConfigurationError(\n `Invalid environment configuration: ${validationResult.errorMessage}`,\n environment,\n `Fix the validation errors in your environments/${environment}.json file`\n );\n }\n\n return configWithMetadata as EnvironmentConfig;\n } catch (error) {\n if (error instanceof ConfigurationError) {\n throw error; // Re-throw our custom errors\n }\n\n if (error instanceof SyntaxError && error.message.includes('JSON')) {\n throw new ConfigurationError(\n `Invalid JSON syntax in configuration file`,\n environment,\n `Check for missing commas, quotes, or brackets. Use a JSON validator to verify syntax.`\n );\n }\n\n const message = error instanceof Error ? error.message : String(error);\n throw new ConfigurationError(\n `Failed to parse environment configuration: ${message}`,\n environment,\n `Check the configuration files are valid JSON`\n );\n }\n}\n\n/**\n * Get NODE_ENV value from environment config\n *\n * @param config - Environment configuration\n * @returns NODE_ENV value (defaults to 'development' if not specified)\n */\nexport function getNodeEnvForEnvironment(config: EnvironmentConfig): 'development' | 'production' | 'test' {\n const nodeEnv = config.env?.NODE_ENV;\n\n // Default to 'development' if not specified\n return nodeEnv || 'development';\n}\n\n/**\n * List environment names from filenames\n * Pure function - accepts array of filenames instead of reading from filesystem\n *\n * @param files - Array of filenames from environments directory\n * @returns Sorted array of environment names\n */\nexport function listEnvironmentNames(files: string[]): string[] {\n return files\n .filter(file => file.endsWith('.json'))\n .map(file => {\n // Extract filename from path (handle directory separators)\n const lastSlash = Math.max(file.lastIndexOf('/'), file.lastIndexOf('\\\\'));\n const filename = lastSlash >= 0 ? file.substring(lastSlash + 1) : file;\n // Remove '.json' suffix\n return filename.slice(0, -5);\n })\n .sort();\n}\n\n/**\n * Type guard to check if config has AWS settings\n * \n * @param config - Environment configuration\n * @returns True if AWS configuration is present\n */\nexport function hasAWSConfig(config: EnvironmentConfig): config is EnvironmentConfig & { aws: AWSConfig } {\n return !!(config as any).aws && !!(config as any).aws.region;\n}\n\n/**\n * Display configuration for debugging\n * \n * @param config - Configuration to display\n */\nexport function displayConfiguration(config: EnvironmentConfig): void {\n console.log('Environment Configuration:');\n console.log(JSON.stringify(config, null, 2));\n}","/**\n * Environment validation utilities\n *\n * Pure functions - accept available environments as parameter instead of reading from filesystem\n */\n\nexport type Environment = string; // Allow any environment name\n\n/**\n * Type guard to check if a string is a valid Environment\n * @param value - The environment string to check\n * @param availableEnvironments - List of valid environment names\n */\nexport function isValidEnvironment(value: string | undefined, availableEnvironments: string[]): value is Environment {\n if (!value) return false;\n return availableEnvironments.includes(value);\n}\n\n/**\n * Parse environment string to Environment type\n * @param value - The environment string to parse\n * @param availableEnvironments - List of valid environment names\n * @returns Valid Environment type\n * @throws Error if environment is invalid or not provided\n */\nexport function parseEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}\n\n/**\n * Validate and return environment or throw error\n * @param value - The environment string to validate\n * @param availableEnvironments - List of valid environment names\n * @throws Error if environment is invalid\n */\nexport function validateEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}","/**\n * Platform Types Module\n *\n * Re-exports PlatformType from schema-generated types.\n * Platforms represent WHERE services run (infrastructure targets).\n */\n\nimport { PlatformType as SchemaPlatformType } from './config.types';\n\n/**\n * Platform type literals from JSON Schema\n * These represent the infrastructure targets where services can be deployed\n */\nexport type PlatformType = SchemaPlatformType;\n\n/**\n * Type guard to check if a string is a valid platform type\n *\n * @param value - Value to check\n * @returns True if value is a valid PlatformType\n */\nexport function isValidPlatformType(value: string): value is PlatformType {\n return ['aws', 'container', 'posix', 'external'].includes(value);\n}\n\n/**\n * Get all valid platform types\n *\n * @returns Array of all platform types\n */\nexport function getAllPlatformTypes(): PlatformType[] {\n return ['aws', 'container', 'posix', 'external'];\n}","/**\n * @semiont/core\n *\n * Core domain logic and utilities for the Semiont semantic knowledge platform.\n * For OpenAPI types, import directly from @semiont/api-client.\n */\n\n// NOTE: OpenAPI types are NOT re-exported from @semiont/core.\n// Import types directly from @semiont/api-client where needed:\n// import type { components } from '@semiont/api-client';\n// type Annotation = components['schemas']['Annotation'];\n\n// Creation methods\nexport { CREATION_METHODS } from './creation-methods';\nexport type { CreationMethod } from './creation-methods';\n\n// Identifier types (only IDs - URIs are in @semiont/api-client)\nexport type { ResourceId, AnnotationId, UserId } from './identifiers';\nexport {\n resourceId,\n annotationId,\n userId,\n isResourceId,\n isAnnotationId,\n} from './identifiers';\n\n// URI utilities\nexport {\n resourceIdToURI,\n uriToResourceId,\n annotationIdToURI,\n uriToAnnotationId,\n uriToAnnotationIdOrPassthrough,\n extractResourceUriFromAnnotationUri,\n} from './uri-utils';\n\n// Graph types\nexport type {\n GraphConnection,\n GraphPath,\n EntityTypeStats,\n} from './graph';\n\n// Event types\nexport type {\n BaseEvent,\n ResourceEvent,\n ResourceEventType,\n SystemEvent,\n ResourceScopedEvent,\n ResourceCreatedEvent,\n ResourceClonedEvent,\n ResourceArchivedEvent,\n ResourceUnarchivedEvent,\n RepresentationAddedEvent,\n RepresentationRemovedEvent,\n AnnotationAddedEvent,\n AnnotationRemovedEvent,\n AnnotationBodyUpdatedEvent,\n JobStartedEvent,\n JobProgressEvent,\n JobCompletedEvent,\n JobFailedEvent,\n BodyOperation,\n BodyItem,\n EntityTagAddedEvent,\n EntityTagRemovedEvent,\n EventMetadata,\n EventSignature,\n StoredEvent,\n EventQuery,\n ResourceAnnotations,\n} from './events';\nexport {\n isResourceEvent,\n isSystemEvent,\n isResourceScopedEvent,\n getEventType,\n} from './events';\n\n// Event utilities\nexport {\n getAnnotationUriFromEvent,\n isEventRelatedToAnnotation,\n isResourceEvent as isStoredEvent,\n} from './event-utils';\n\n// Backend-specific annotation utilities\nexport { findBodyItem } from './annotation-utils';\n\n// Resource types\nexport type { UpdateResourceInput, ResourceFilter } from './resource-types';\n\n// Annotation types\nexport type { AnnotationCategory, CreateAnnotationInternal } from './annotation-types';\n\n// Auth types\nexport type { GoogleAuthRequest } from './auth-types';\n\n// Utility functions\nexport * from './type-guards';\nexport * from './errors';\nexport * from './did-utils';\n\n// Configuration loading - Pure functions (testable without filesystem)\nexport {\n deepMerge,\n resolveEnvVars,\n parseAndMergeConfigs,\n listEnvironmentNames,\n getNodeEnvForEnvironment,\n hasAWSConfig,\n displayConfiguration,\n // Types\n type EnvironmentConfig,\n type ServiceConfig,\n type AWSConfig,\n type SiteConfig,\n type AppConfig,\n} from './config/environment-loader';\n\nexport {\n parseEnvironment,\n validateEnvironment,\n type Environment,\n} from './config/environment-validator';\nexport {\n formatErrors,\n validateSemiontConfig,\n validateEnvironmentConfig,\n validateSiteConfig,\n type ValidationResult,\n} from './config/config-validator';\nexport { ConfigurationError } from './config/configuration-error';\nexport type { ProxyServiceConfig } from './config/config.types';\nexport {\n type PlatformType,\n isValidPlatformType,\n getAllPlatformTypes,\n} from './config/platform-types';\n\n// Schema-generated configuration types\nexport type {\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n McpServiceConfig,\n ServicesConfig,\n SemiontConfig,\n GraphDatabaseType,\n ServicePlatformConfig\n} from './config/config.types';\n\n// Version information\nexport const CORE_TYPES_VERSION = '0.1.0';\nexport const SDK_VERSION = '0.1.0';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/branded-types.ts","../src/creation-methods.ts","../src/identifiers.ts","../src/uri-utils.ts","../src/events.ts","../src/event-utils.ts","../src/event-bus.ts","../src/annotation-utils.ts","../src/type-guards.ts","../src/errors.ts","../src/did-utils.ts","../src/config/configuration-error.ts","../src/config/config.schema.json","../src/config/config-validator.ts","../src/config/environment-loader.ts","../src/config/environment-validator.ts","../src/config/platform-types.ts","../src/index.ts"],"names":["annotationUri","resourceUri","baseUrl","isResourceEvent","userId"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Branded string types for compile-time type safety\n *\n * These types are zero-cost at runtime but prevent mixing\n * different string types at compile time.\n */\n\nimport type { components } from './types';\n\n// ============================================================================\n// OPENAPI-GENERATED TYPES (use directly from spec)\n// ============================================================================\n\nexport type Motivation = components['schemas']['Motivation'];\nexport type ContentFormat = components['schemas']['ContentFormat'];\n\n// ============================================================================\n// AUTHENTICATION & TOKENS\n// ============================================================================\n\nexport type Email = string & { readonly __brand: 'Email' };\nexport type AuthCode = string & { readonly __brand: 'AuthCode' };\nexport type GoogleCredential = string & { readonly __brand: 'GoogleCredential' };\nexport type AccessToken = string & { readonly __brand: 'AccessToken' };\nexport type RefreshToken = string & { readonly __brand: 'RefreshToken' };\nexport type MCPToken = string & { readonly __brand: 'MCPToken' };\nexport type CloneToken = string & { readonly __brand: 'CloneToken' };\n\n// ============================================================================\n// SYSTEM IDENTIFIERS\n// ============================================================================\n\nexport type JobId = string & { readonly __brand: 'JobId' };\nexport type UserDID = string & { readonly __brand: 'UserDID' };\nexport type EntityType = string & { readonly __brand: 'EntityType' };\nexport type SearchQuery = string & { readonly __brand: 'SearchQuery' };\nexport type BaseUrl = string & { readonly __brand: 'BaseUrl' };\n\n// ============================================================================\n// HELPER FUNCTIONS (minimal validation, just branding)\n// ============================================================================\n\nexport function email(value: string): Email { return value as Email; }\nexport function authCode(value: string): AuthCode { return value as AuthCode; }\nexport function googleCredential(value: string): GoogleCredential { return value as GoogleCredential; }\nexport function accessToken(value: string): AccessToken { return value as AccessToken; }\nexport function refreshToken(value: string): RefreshToken { return value as RefreshToken; }\nexport function mcpToken(value: string): MCPToken { return value as MCPToken; }\nexport function cloneToken(value: string): CloneToken { return value as CloneToken; }\nexport function jobId(value: string): JobId { return value as JobId; }\nexport function userDID(value: string): UserDID { return value as UserDID; }\nexport function entityType(value: string): EntityType { return value as EntityType; }\nexport function searchQuery(value: string): SearchQuery { return value as SearchQuery; }\nexport function baseUrl(value: string): BaseUrl { return value as BaseUrl; }\n\n// Motivation and ContentFormat use OpenAPI enums - no helpers needed\n// Use the enum values directly from the OpenAPI spec\n\n// ============================================================================\n// HTTP URI TYPES\n// ============================================================================\n\n// Branded type definitions for HTTP URIs returned by the API\nexport type ResourceUri = string & { readonly __brand: 'ResourceUri' };\n\n// W3C flat format for content negotiation: http://localhost:4000/annotations/{id}\nexport type AnnotationUri = string & { readonly __brand: 'AnnotationUri' };\n\n// Nested format for CRUD operations: http://localhost:4000/resources/{resourceId}/annotations/{annotationId}\nexport type ResourceAnnotationUri = string & { readonly __brand: 'ResourceAnnotationUri' };\n\n// Factory functions with runtime validation\nexport function resourceUri(uri: string): ResourceUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected ResourceUri, got: ${uri}`);\n }\n return uri as ResourceUri;\n}\n\nexport function annotationUri(uri: string): AnnotationUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected AnnotationUri, got: ${uri}`);\n }\n return uri as AnnotationUri;\n}\n\nexport function resourceAnnotationUri(uri: string): ResourceAnnotationUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected ResourceAnnotationUri, got: ${uri}`);\n }\n // Additional validation: must contain /resources/ and /annotations/\n if (!uri.includes('/resources/') || !uri.includes('/annotations/')) {\n throw new TypeError(`Expected nested ResourceAnnotationUri format, got: ${uri}`);\n }\n return uri as ResourceAnnotationUri;\n}\n","/**\n * Resource creation methods - How resources are created in the system\n */\n\n/**\n * Enumeration of all possible resource creation methods\n */\nexport const CREATION_METHODS = {\n API: 'api',\n UPLOAD: 'upload',\n UI: 'ui',\n REFERENCE: 'reference',\n CLONE: 'clone',\n GENERATED: 'generated',\n} as const;\n\n/**\n * Type for resource creation methods\n */\nexport type CreationMethod = typeof CREATION_METHODS[keyof typeof CREATION_METHODS];","/**\n * Branded identifier types for compile-time type safety.\n *\n * These types prevent mixing up resource IDs, annotation IDs, and user IDs\n * at compile time while having zero runtime overhead.\n *\n * URI types (ResourceUri, AnnotationUri) are in @semiont/api-client\n * since they deal with HTTP URIs returned by the API.\n */\n\n// Branded type definitions for IDs only\nexport type ResourceId = string & { readonly __brand: 'ResourceId' };\nexport type AnnotationId = string & { readonly __brand: 'AnnotationId' };\nexport type UserId = string & { readonly __brand: 'UserId' };\n\n// Type guards with runtime validation\nexport function isResourceId(value: string): value is ResourceId {\n return !value.includes('/');\n}\n\nexport function isAnnotationId(value: string): value is AnnotationId {\n return !value.includes('/');\n}\n\n// Factory functions with runtime validation\nexport function resourceId(id: string): ResourceId {\n if (id.includes('/')) {\n throw new TypeError(`Expected ResourceId, got URI: ${id}`);\n }\n return id as ResourceId;\n}\n\nexport function annotationId(id: string): AnnotationId {\n if (id.includes('/')) {\n throw new TypeError(`Expected AnnotationId, got URI: ${id}`);\n }\n return id as AnnotationId;\n}\n\nexport function userId(id: string): UserId {\n return id as UserId;\n}\n","/**\n * URI utilities for W3C annotations\n *\n * Converts between short resource/annotation IDs and full URIs.\n * Full URIs are required by W3C Web Annotation Data Model.\n */\n\nimport { resourceId, annotationId, type ResourceId, type AnnotationId } from './identifiers';\nimport { resourceUri, annotationUri, type ResourceUri, type AnnotationUri, type ResourceAnnotationUri } from './branded-types';\n\n/**\n * Convert resource ID to full URI\n *\n * @param id - Short resource ID (e.g., \"doc-abc123\")\n * @param publicURL - Backend base URL\n * @returns Full URI (e.g., \"https://api.semiont.app/resources/doc-abc123\")\n *\n * @example\n * resourceIdToURI(\"doc-abc123\", \"https://api.semiont.app\")\n * // => \"https://api.semiont.app/resources/doc-abc123\"\n */\nexport function resourceIdToURI(id: ResourceId, publicURL: string): ResourceUri {\n // Remove trailing slash if present\n const normalizedBase = publicURL.endsWith('/') ? publicURL.slice(0, -1) : publicURL;\n return resourceUri(`${normalizedBase}/resources/${id}` );\n}\n\n/**\n * Extract resource ID from full URI\n *\n * @param uri - Full resource URI (e.g., \"https://api.semiont.app/resources/doc-abc123\")\n * @returns Short resource ID (e.g., \"doc-abc123\")\n * @throws Error if URI format is invalid\n *\n * @example\n * uriToResourceId(\"https://api.semiont.app/resources/doc-abc123\")\n * // => \"doc-abc123\"\n */\nexport function uriToResourceId(uri: string): ResourceId {\n const url = new URL(uri);\n const match = url.pathname.match(/\\/resources\\/([^/]+)/);\n if (!match || !match[1]) {\n throw new Error(`Invalid resource URI: ${uri}`);\n }\n return resourceId(match[1]);\n}\n\n/**\n * Convert annotation ID to full URI\n *\n * @param id - Short annotation ID (e.g., \"anno-xyz789\")\n * @param publicURL - Backend base URL\n * @returns Full URI (e.g., \"https://api.semiont.app/annotations/anno-xyz789\")\n *\n * @example\n * annotationIdToURI(\"anno-xyz789\", \"https://api.semiont.app\")\n * // => \"https://api.semiont.app/annotations/anno-xyz789\"\n */\nexport function annotationIdToURI(id: AnnotationId, publicURL: string): AnnotationUri {\n // Remove trailing slash if present\n const normalizedBase = publicURL.endsWith('/') ? publicURL.slice(0, -1) : publicURL;\n return annotationUri(`${normalizedBase}/annotations/${id}`);\n}\n\n/**\n * Extract annotation ID from full URI\n *\n * @param uri - Full annotation URI (e.g., \"https://api.semiont.app/annotations/anno-xyz789\")\n * @returns Short annotation ID (e.g., \"anno-xyz789\")\n * @throws Error if URI format is invalid\n *\n * @example\n * uriToAnnotationId(\"https://api.semiont.app/annotations/anno-xyz789\")\n * // => \"anno-xyz789\"\n */\nexport function uriToAnnotationId(uri: string): AnnotationId {\n const url = new URL(uri);\n const match = url.pathname.match(/\\/annotations\\/([^/]+)/);\n if (!match || !match[1]) {\n throw new Error(`Invalid annotation URI: ${uri}`);\n }\n return annotationId(match[1]);\n}\n\n/**\n * Extract annotation ID from URI or pass through if already an ID\n *\n * Defensive version of uriToAnnotationId that handles both:\n * - Full URIs: \"https://api.semiont.app/annotations/anno-xyz789\" → \"anno-xyz789\"\n * - Already IDs: \"anno-xyz789\" → \"anno-xyz789\"\n *\n * @param uriOrId - Full annotation URI or short ID\n * @returns Short annotation ID\n *\n * @example\n * uriToAnnotationIdOrPassthrough(\"https://api.semiont.app/annotations/anno-xyz789\")\n * // => \"anno-xyz789\"\n *\n * uriToAnnotationIdOrPassthrough(\"anno-xyz789\")\n * // => \"anno-xyz789\"\n */\nexport function uriToAnnotationIdOrPassthrough(uriOrId: string): AnnotationId {\n // Try parsing as URI first\n try {\n return uriToAnnotationId(uriOrId);\n } catch {\n // If it fails, assume it's already an ID and return as-is\n return annotationId(uriOrId);\n }\n}\n\n/**\n * Extract resource URI from nested annotation URI\n *\n * @param annotationUri - Nested ResourceAnnotationUri (e.g., \"https://api.semiont.app/resources/doc-123/annotations/anno-456\")\n * @returns Resource URI (e.g., \"https://api.semiont.app/resources/doc-123\")\n * @throws Error if URI format is invalid\n *\n * @example\n * extractResourceUriFromAnnotationUri(\"https://api.semiont.app/resources/doc-123/annotations/anno-456\")\n * // => \"https://api.semiont.app/resources/doc-123\"\n */\nexport function extractResourceUriFromAnnotationUri(annotationUri: ResourceAnnotationUri): ResourceUri {\n const parts = annotationUri.split('/annotations/');\n if (parts.length !== 2) {\n throw new Error(`Invalid annotation URI format: ${annotationUri}`);\n }\n return resourceUri(parts[0]);\n}\n","/**\n * Resource Event Types\n *\n * Event-sourced architecture for resource state management\n * Events are stored in an append-only log (JSONL format)\n *\n * Federation-ready design:\n * - resourceId uses content hashes (doc-sha256:...)\n * - userId uses DID format (did:web:org.com:users:alice)\n * - prevEventHash creates tamper-evident chains\n * - Optional signatures for cross-org verification\n */\n\nimport type { CreationMethod } from './creation-methods';\nimport type { components } from './types';\nimport type { AnnotationUri, JobId } from './branded-types';\nimport type { ResourceId, AnnotationId, UserId } from './identifiers';\n\n// Import OpenAPI types\ntype Annotation = components['schemas']['Annotation'];\ntype ContentFormat = components['schemas']['ContentFormat'];\ntype Motivation = components['schemas']['Motivation'];\n\nexport interface BaseEvent {\n id: string; // Unique event ID (UUID)\n timestamp: string; // ISO 8601 timestamp (for humans, NOT for ordering)\n resourceId?: ResourceId; // Optional - present for resource-scoped events, absent for system events\n // Use isSystemEvent() / isResourceScopedEvent() type guards for routing\n userId: UserId; // DID format: did:web:org.com:users:alice (federation-ready)\n version: number; // Event schema version\n}\n\n// Resource lifecycle events\nexport interface ResourceCreatedEvent extends BaseEvent {\n type: 'resource.created';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of content (should match resourceId)\n contentByteSize?: number; // Size of content in bytes\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n isDraft?: boolean; // Draft status for generated resources\n generatedFrom?: string; // Annotation/Reference ID that triggered generation\n generationPrompt?: string; // Prompt used for AI generation (events-only, not on Resource)\n };\n}\n\nexport interface ResourceClonedEvent extends BaseEvent {\n type: 'resource.cloned';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of new content\n contentByteSize?: number; // Size of content in bytes\n parentResourceId: string; // Content hash of parent resource\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n };\n}\n\nexport interface ResourceArchivedEvent extends BaseEvent {\n type: 'resource.archived';\n payload: {\n reason?: string;\n };\n}\n\nexport interface ResourceUnarchivedEvent extends BaseEvent {\n type: 'resource.unarchived';\n payload: Record<string, never>; // Empty payload\n}\n\n// Representation events (multi-format support)\nexport interface RepresentationAddedEvent extends BaseEvent {\n type: 'representation.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n representation: {\n '@id': string; // Unique ID (content hash)\n mediaType: string; // MIME type (e.g., 'text/markdown', 'application/pdf')\n byteSize: number; // Size in bytes\n checksum: string; // Content hash (SHA-256)\n created: string; // ISO 8601 timestamp\n rel?: 'original' | 'thumbnail' | 'preview' | 'optimized' | 'derived' | 'other';\n storageUri?: string; // Where bytes are stored (optional)\n filename?: string; // Original filename (optional)\n language?: string; // IETF BCP 47 language tag (optional, for translations)\n width?: number; // Pixels (images/video)\n height?: number; // Pixels (images/video)\n duration?: number; // Seconds (audio/video)\n };\n };\n}\n\nexport interface RepresentationRemovedEvent extends BaseEvent {\n type: 'representation.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n checksum: string; // Which representation to remove\n };\n}\n\n// Unified annotation events\n// Single principle: An annotation is an annotation. The motivation field tells you what kind it is.\nexport interface AnnotationAddedEvent extends BaseEvent {\n type: 'annotation.added';\n payload: {\n annotation: Omit<Annotation, 'creator' | 'created'>; // W3C Annotation (creator/created come from event metadata)\n };\n}\n\nexport interface AnnotationRemovedEvent extends BaseEvent {\n type: 'annotation.removed';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n };\n}\n\n// Body operation types for fine-grained annotation body modifications\nexport type BodyItem =\n | { type: 'TextualBody'; value: string; purpose?: Motivation; format?: string; language?: string }\n | { type: 'SpecificResource'; source: string; purpose?: Motivation };\n\nexport type BodyOperation =\n | { op: 'add'; item: BodyItem }\n | { op: 'remove'; item: BodyItem }\n | { op: 'replace'; oldItem: BodyItem; newItem: BodyItem };\n\nexport interface AnnotationBodyUpdatedEvent extends BaseEvent {\n type: 'annotation.body.updated';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n operations: BodyOperation[];\n };\n}\n\n// Job progress events (resource-level)\n// Emitted by background workers for real-time progress updates\nexport interface JobStartedEvent extends BaseEvent {\n type: 'job.started';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n totalSteps?: number; // Optional - total number of steps if known\n };\n}\n\nexport interface JobProgressEvent extends BaseEvent {\n type: 'job.progress';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n percentage: number; // 0-100\n currentStep?: string; // Human-readable current step (e.g., \"Scanning for Person\")\n processedSteps?: number; // Number of steps completed\n totalSteps?: number; // Total number of steps\n foundCount?: number; // For detection: number of entities found so far\n message?: string; // Optional status message\n progress?: any; // For new job types: full progress object\n };\n}\n\nexport interface JobCompletedEvent extends BaseEvent {\n type: 'job.completed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n totalSteps?: number; // Total steps completed\n foundCount?: number; // For detection: total entities found\n resultResourceId?: ResourceId; // For generation: ID of generated resource (branded type)\n annotationUri?: AnnotationUri; // For generation: URI of annotation that triggered generation\n message?: string; // Optional completion message\n result?: any; // For new job types: full result object\n };\n}\n\nexport interface JobFailedEvent extends BaseEvent {\n type: 'job.failed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'detection' | 'generation' | 'highlight-detection' | 'assessment-detection' | 'comment-detection' | 'tag-detection';\n error: string; // Error message\n details?: string; // Optional detailed error information\n };\n}\n\n// Entity tag events (resource-level)\nexport interface EntityTagAddedEvent extends BaseEvent {\n type: 'entitytag.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\nexport interface EntityTagRemovedEvent extends BaseEvent {\n type: 'entitytag.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\n// Entity type events (global collection)\nexport interface EntityTypeAddedEvent extends BaseEvent {\n type: 'entitytype.added';\n resourceId?: undefined; // System-level event - no resource scope\n payload: {\n entityType: string; // The entity type being added to global collection\n };\n}\n\n// Union type of all events\nexport type ResourceEvent =\n | ResourceCreatedEvent\n | ResourceClonedEvent\n | ResourceArchivedEvent\n | ResourceUnarchivedEvent\n | RepresentationAddedEvent // Multi-format support\n | RepresentationRemovedEvent // Multi-format support\n | AnnotationAddedEvent\n | AnnotationRemovedEvent\n | AnnotationBodyUpdatedEvent\n | JobStartedEvent // Job progress\n | JobProgressEvent // Job progress\n | JobCompletedEvent // Job progress\n | JobFailedEvent // Job progress\n | EntityTagAddedEvent // Resource-level\n | EntityTagRemovedEvent // Resource-level\n | EntityTypeAddedEvent; // Global collection\n\n// Extract just the event type strings from the union\nexport type ResourceEventType = ResourceEvent['type'];\n\n// System-level events (no resource scope)\nexport type SystemEvent = EntityTypeAddedEvent;\n\n// Resource-scoped events (require resourceId)\nexport type ResourceScopedEvent = Exclude<ResourceEvent, SystemEvent>;\n\n// Type guards\nexport function isResourceEvent(event: any): event is ResourceEvent {\n return event &&\n typeof event.id === 'string' &&\n typeof event.timestamp === 'string' &&\n (event.resourceId === undefined || typeof event.resourceId === 'string') && // resourceId now optional\n typeof event.type === 'string' &&\n event.type.includes('.');\n}\n\n/**\n * Type guard: Check if event is system-level (no resourceId)\n * System events affect global state, not individual resources\n */\nexport function isSystemEvent(event: ResourceEvent): event is SystemEvent {\n return event.type === 'entitytype.added';\n}\n\n/**\n * Type guard: Check if event is resource-scoped (has resourceId)\n * Resource events affect a specific resource's state\n */\nexport function isResourceScopedEvent(event: ResourceEvent): event is ResourceScopedEvent {\n return !isSystemEvent(event);\n}\n\nexport function getEventType<T extends ResourceEvent>(\n event: ResourceEvent\n): T['type'] {\n return event.type as T['type'];\n}\n\n// Event metadata for querying and indexing\nexport interface EventMetadata {\n sequenceNumber: number; // Position in the event log (source of truth for ordering)\n streamPosition: number; // Byte position in JSONL file\n timestamp: string; // When stored (for humans, not ordering)\n prevEventHash?: string; // SHA-256 of previous event (chain integrity, null for first event)\n checksum?: string; // SHA-256 of this event for integrity\n}\n\n// Optional signature for federation\nexport interface EventSignature {\n algorithm: 'ed25519'; // Signature algorithm\n publicKey: string; // User's public key (base64)\n signature: string; // Event signature (base64)\n keyId?: string; // Key identifier for rotation\n}\n\n// Event with metadata (as stored)\nexport interface StoredEvent<T extends ResourceEvent = ResourceEvent> {\n event: T;\n metadata: EventMetadata;\n signature?: EventSignature; // Optional, for federation (unused in MVP)\n}\n\n// Query filters for event retrieval\nexport interface EventQuery {\n resourceId?: ResourceId;\n userId?: string;\n eventTypes?: ResourceEvent['type'][];\n fromTimestamp?: string;\n toTimestamp?: string;\n fromSequence?: number;\n limit?: number;\n}\n\n// Annotation collections for a resource (view storage projection)\n// Annotations are NOT part of the resource - they reference the resource\nexport interface ResourceAnnotations {\n resourceId: ResourceId; // Which resource these annotations belong to (branded type)\n annotations: Annotation[]; // All annotations (highlights, references, assessments, etc.)\n version: number; // Event count for this resource's annotation stream\n updatedAt: string; // Last annotation event timestamp\n}","/**\n * Event Type Guards and Extraction Utilities\n *\n * Domain logic for working with resource events.\n * No React dependencies - safe to use in any JavaScript environment.\n */\n\nimport type { StoredEvent } from './events';\nimport type { AnnotationUri } from './branded-types';\n\n// =============================================================================\n// EVENT TYPE GUARDS AND EXTRACTION\n// =============================================================================\n\n/**\n * Extract annotation ID from event payload\n * Returns null if event is not annotation-related\n *\n * For annotation.added: extracts full URI from payload.annotation.id\n * For annotation.removed/body.updated: constructs full URI from payload.annotationId (UUID) + resourceId\n */\nexport function getAnnotationUriFromEvent(event: StoredEvent): AnnotationUri | null {\n const eventData = event.event;\n\n if (eventData.type === 'annotation.added') {\n // annotation.added has the full annotation object with id as full URI\n return eventData.payload.annotation.id as AnnotationUri || null;\n }\n\n if (eventData.type === 'annotation.removed' || eventData.type === 'annotation.body.updated') {\n // These events have annotationId (UUID only), need to construct full URI\n // Extract base URL from resourceId (format: http://host/resources/id)\n if (eventData.payload.annotationId && eventData.resourceId) {\n try {\n const resourceUri = eventData.resourceId;\n // Extract base URL by removing the /resources/{id} part\n const baseUrl = resourceUri.substring(0, resourceUri.lastIndexOf('/resources/'));\n return `${baseUrl}/annotations/${eventData.payload.annotationId}` as AnnotationUri;\n } catch (e) {\n return null;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Check if an event is related to a specific annotation\n */\nexport function isEventRelatedToAnnotation(event: StoredEvent, annotationUri: AnnotationUri): boolean {\n const eventAnnotationUri = getAnnotationUriFromEvent(event);\n return eventAnnotationUri === annotationUri;\n}\n\n/**\n * Type guard to check if event is a resource event\n */\nexport function isResourceEvent(event: any): event is StoredEvent {\n return event &&\n typeof event.event === 'object' &&\n typeof event.event.id === 'string' &&\n typeof event.event.timestamp === 'string' &&\n typeof event.event.resourceId === 'string' &&\n typeof event.event.type === 'string' &&\n typeof event.metadata === 'object' &&\n typeof event.metadata.sequenceNumber === 'number';\n}\n","/**\n * RxJS-based Event Bus\n *\n * Framework-agnostic event bus providing direct access to typed RxJS Subjects.\n *\n * Can be used in Node.js, browser, workers, CLI - anywhere RxJS runs.\n */\n\nimport { Subject } from 'rxjs';\nimport type { EventMap } from './event-map';\n\n/**\n * RxJS-based event bus\n *\n * Provides direct access to RxJS Subjects for each event type.\n * Use standard RxJS patterns for emitting and subscribing.\n *\n * @example\n * ```typescript\n * const eventBus = new EventBus();\n *\n * // Emit events\n * eventBus.get('annotation:hover').next({ annotationId: 'ann-1' });\n *\n * // Subscribe to events\n * const subscription = eventBus.get('annotation:hover').subscribe(({ annotationId }) => {\n * console.log('Hover:', annotationId);\n * });\n *\n * // Use RxJS operators\n * import { debounceTime } from 'rxjs/operators';\n * eventBus.get('annotation:hover')\n * .pipe(debounceTime(100))\n * .subscribe(handleHover);\n *\n * // Cleanup\n * subscription.unsubscribe();\n * eventBus.destroy();\n * ```\n */\nexport class EventBus {\n private subjects: Map<keyof EventMap, Subject<any>>;\n private isDestroyed: boolean;\n\n constructor() {\n this.subjects = new Map();\n this.isDestroyed = false;\n }\n\n /**\n * Get the RxJS Subject for an event\n *\n * Returns a typed Subject that can be used with all RxJS operators.\n * Subjects are created lazily on first access.\n *\n * @param eventName - The event name\n * @returns The RxJS Subject for this event\n *\n * @example\n * ```typescript\n * // Emit\n * eventBus.get('annotation:hover').next({ annotationId: 'ann-1' });\n *\n * // Subscribe\n * const sub = eventBus.get('annotation:hover').subscribe(handleHover);\n *\n * // With operators\n * eventBus.get('annotation:hover')\n * .pipe(debounceTime(100), distinctUntilChanged())\n * .subscribe(handleHover);\n * ```\n */\n get<K extends keyof EventMap>(eventName: K): Subject<EventMap[K]> {\n if (this.isDestroyed) {\n throw new Error(`Cannot access event '${String(eventName)}' on destroyed bus`);\n }\n\n if (!this.subjects.has(eventName)) {\n this.subjects.set(eventName, new Subject<EventMap[K]>());\n }\n return this.subjects.get(eventName)!;\n }\n\n /**\n * Destroy the event bus and complete all subjects\n *\n * After calling destroy(), no new events can be emitted or subscribed to.\n * All active subscriptions will be completed.\n */\n destroy(): void {\n if (this.isDestroyed) {\n return;\n }\n\n for (const subject of this.subjects.values()) {\n subject.complete();\n }\n\n this.subjects.clear();\n this.isDestroyed = true;\n }\n\n /**\n * Check if the event bus has been destroyed\n */\n get destroyed(): boolean {\n return this.isDestroyed;\n }\n}\n","/**\n * Backend-specific annotation utility functions\n */\n\nimport type { components } from './types';\nimport type { BodyItem } from './events';\n\ntype Annotation = components['schemas']['Annotation'];\n\n/**\n * Find a body item in an array\n * Returns the index of the first matching item, or -1 if not found\n */\nexport function findBodyItem(body: Annotation['body'], targetItem: BodyItem): number {\n if (!Array.isArray(body)) {\n return -1;\n }\n\n for (let i = 0; i < body.length; i++) {\n const item = body[i];\n\n // Check if this is a valid body item that can be matched\n if (\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n 'purpose' in item\n ) {\n const itemType = (item as { type: unknown }).type;\n const itemPurpose = (item as { purpose: unknown }).purpose;\n\n // Type and purpose must match\n if (itemType !== targetItem.type || itemPurpose !== targetItem.purpose) {\n continue;\n }\n\n // For TextualBody, match by value\n if (targetItem.type === 'TextualBody' && 'value' in item) {\n const itemValue = (item as { value: unknown }).value;\n if (itemValue === targetItem.value) {\n return i;\n }\n }\n\n // For SpecificResource, match by source\n if (targetItem.type === 'SpecificResource' && 'source' in item) {\n const itemSource = (item as { source: unknown }).source;\n if (itemSource === targetItem.source) {\n return i;\n }\n }\n }\n }\n\n return -1;\n}\n","/**\n * Common type guard utilities\n */\n\n/**\n * Check if value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Check if value is a number (not NaN)\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if value is an object (not null, not array)\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Check if value is an array\n */\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\n/**\n * Check if value is a boolean\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Check if value is a function\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === 'function';\n}\n\n/**\n * Check if value is null\n */\nexport function isNull(value: unknown): value is null {\n return value === null;\n}\n\n/**\n * Check if value is undefined\n */\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined;\n}\n\n/**\n * Check if value is null or undefined\n */\nexport function isNullish(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Check if value is defined (not null or undefined)\n */\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}","/**\n * Common error classes\n */\n\n/**\n * Base error class for Semiont applications\n */\nexport class SemiontError extends Error {\n constructor(\n message: string,\n public code: string,\n public details?: Record<string, any>\n ) {\n super(message);\n this.name = 'SemiontError';\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\n/**\n * Error thrown when validation fails\n */\nexport class ValidationError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Error thrown by scripts\n */\nexport class ScriptError extends SemiontError {\n constructor(message: string, code: string = 'SCRIPT_ERROR', details?: Record<string, any>) {\n super(message, code, details);\n this.name = 'ScriptError';\n }\n}\n\n/**\n * Error thrown when a resource is not found\n */\nexport class NotFoundError extends SemiontError {\n constructor(resource: string, id?: string) {\n const message = id ? `${resource} with id '${id}' not found` : `${resource} not found`;\n super(message, 'NOT_FOUND', { resource, id });\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Error thrown when user is not authorized\n */\nexport class UnauthorizedError extends SemiontError {\n constructor(message: string = 'Unauthorized', details?: Record<string, any>) {\n super(message, 'UNAUTHORIZED', details);\n this.name = 'UnauthorizedError';\n }\n}\n\n/**\n * Error thrown when operation would conflict with existing data\n */\nexport class ConflictError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONFLICT', details);\n this.name = 'ConflictError';\n }\n}\n\n/**\n * API Error class for handling HTTP errors\n * Used by API clients to represent failed HTTP requests\n */\nexport class APIError extends Error {\n constructor(\n public status: number,\n public data: any,\n message?: string\n ) {\n super(message || `API Error: ${status}`);\n this.name = 'APIError';\n Error.captureStackTrace(this, this.constructor);\n }\n}","/**\n * DID (Decentralized Identifier) and W3C Agent utilities\n *\n * Provides utilities for working with DID:WEB identifiers and converting\n * between user representations and W3C Web Annotation Agent objects.\n */\n\nimport type { components } from './types';\n\ntype Agent = components['schemas']['Agent'];\n\n/**\n * Convert a user object to a DID:WEB identifier\n *\n * Format: did:web:domain.com:users:userId\n * Example: did:web:example.com:users:abc123\n *\n * This is used for W3C Web Annotation compliance and federation readiness.\n *\n * @param user - User object with id and domain\n * @returns DID:WEB identifier string\n */\nexport function userToDid(user: { id: string; domain: string }): string {\n return `did:web:${user.domain}:users:${user.id}`;\n}\n\n/**\n * Convert a user object to a W3C Agent object with DID:WEB identifier\n *\n * Creates a full Agent object for W3C Web Annotation compliance.\n * Includes DID:WEB identifier, type, and name.\n *\n * @param user - User object with id, domain, name, and email\n * @returns W3C Agent object\n */\nexport function userToAgent(user: {\n id: string;\n domain: string;\n name: string | null;\n email: string;\n}): Agent {\n return {\n type: 'Person' as const,\n id: userToDid(user),\n name: user.name || user.email,\n };\n}\n\n/**\n * Convert a DID string to a minimal W3C Agent object\n *\n * Used when reconstructing annotations from events where only the DID is available.\n * Creates a minimal Agent with just the required fields (id, type).\n * Name is derived from the DID for display purposes.\n *\n * @param did - DID:WEB identifier string\n * @returns Minimal W3C Agent object\n */\nexport function didToAgent(did: string): Agent {\n // Extract user ID from DID format: did:web:domain.com:users:userId\n const parts = did.split(':');\n const userId = parts[parts.length - 1] || 'unknown';\n\n return {\n type: 'Person' as const,\n id: did,\n name: userId, // Use user ID as name since we don't have full user data\n };\n}\n","/**\n * Configuration Error Class\n * \n * Custom error class for configuration validation and loading errors.\n * Provides structured error information with helpful suggestions.\n */\n\nexport class ConfigurationError extends Error {\n public override readonly cause?: Error;\n\n constructor(\n message: string,\n public environment?: string,\n public suggestion?: string,\n cause?: Error\n ) {\n super(message);\n this.name = 'ConfigurationError';\n this.cause = cause;\n }\n \n /**\n * Format the error nicely for CLI output\n */\n override toString(): string {\n let output = `❌ ${this.message}`;\n if (this.environment) {\n output += `\\n Environment: ${this.environment}`;\n }\n if (this.suggestion) {\n output += `\\n 💡 Suggestion: ${this.suggestion}`;\n }\n return output;\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://semiont.org/schemas/config.json\",\n \"definitions\": {\n \"PlatformType\": {\n \"type\": \"string\",\n \"enum\": [\n \"posix\",\n \"container\",\n \"aws\",\n \"external\"\n ]\n },\n \"ServicePlatformConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"$ref\": \"#/definitions/PlatformType\"\n }\n },\n \"required\": [\n \"type\"\n ]\n },\n \"ResourceRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"cpu\": {\n \"type\": \"string\"\n },\n \"memory\": {\n \"type\": \"string\"\n },\n \"gpu\": {\n \"type\": \"integer\"\n },\n \"gpus\": {\n \"type\": \"integer\"\n },\n \"replicas\": {\n \"type\": \"integer\"\n },\n \"ephemeralStorage\": {\n \"type\": \"string\"\n },\n \"memoryReservation\": {\n \"type\": \"string\"\n }\n },\n \"additionalProperties\": false\n },\n \"SecurityRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"readOnlyRootFilesystem\": {\n \"type\": \"boolean\"\n },\n \"runAsNonRoot\": {\n \"type\": \"boolean\"\n },\n \"runAsUser\": {\n \"type\": \"integer\"\n },\n \"runAsGroup\": {\n \"type\": \"integer\"\n },\n \"capabilities\": {\n \"oneOf\": [\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"add\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"drop\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n }\n ]\n },\n \"privileged\": {\n \"type\": \"boolean\"\n },\n \"allowPrivilegeEscalation\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"BuildRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"BackendServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"devMode\": {\n \"type\": \"boolean\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"publicURL\": {\n \"type\": \"string\"\n },\n \"corsOrigin\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"cpu\": {\n \"type\": \"string\"\n },\n \"memory\": {\n \"type\": \"string\"\n },\n \"semiontRepo\": {\n \"type\": \"string\"\n },\n \"databaseUrl\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"redisUrl\": {\n \"type\": \"string\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"port\",\n \"publicURL\",\n \"corsOrigin\"\n ],\n \"additionalProperties\": false\n },\n \"FrontendServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"devMode\": {\n \"type\": \"boolean\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"siteName\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"semiontRepo\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n },\n \"databaseUrl\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"publicURL\": {\n \"type\": \"string\"\n },\n \"allowedOrigins\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"port\",\n \"siteName\"\n ],\n \"additionalProperties\": false\n },\n \"ProxyServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"envoy\", \"nginx\", \"haproxy\"],\n \"default\": \"envoy\"\n },\n \"port\": {\n \"type\": \"integer\",\n \"default\": 8080\n },\n \"adminPort\": {\n \"type\": \"integer\",\n \"default\": 9901\n },\n \"backendPort\": {\n \"type\": \"integer\",\n \"default\": 4000\n },\n \"frontendPort\": {\n \"type\": \"integer\",\n \"default\": 3000\n },\n \"image\": {\n \"type\": \"string\",\n \"default\": \"envoyproxy/envoy:v1.28-latest\"\n },\n \"configPath\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"port\"\n ],\n \"additionalProperties\": false\n },\n \"DatabaseServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"host\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"user\": {\n \"type\": \"string\"\n },\n \"username\": {\n \"type\": \"string\"\n },\n \"password\": {\n \"type\": \"string\"\n },\n \"database\": {\n \"type\": \"string\"\n },\n \"storageSize\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"host\",\n \"port\"\n ],\n \"additionalProperties\": false\n },\n \"GraphDatabaseType\": {\n \"type\": \"string\",\n \"enum\": [\n \"neo4j\",\n \"janusgraph\",\n \"neptune\",\n \"memory\"\n ]\n },\n \"GraphServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"$ref\": \"#/definitions/GraphDatabaseType\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"uri\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"username\": {\n \"type\": \"string\"\n },\n \"password\": {\n \"type\": \"string\"\n },\n \"database\": {\n \"type\": \"string\"\n },\n \"host\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"storage\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"string\"\n },\n \"endpoint\": {\n \"type\": \"string\"\n },\n \"region\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"janusgraphVersion\": {\n \"type\": \"string\"\n },\n \"javaOptions\": {\n \"type\": \"string\"\n },\n \"heapSize\": {\n \"type\": \"string\"\n },\n \"pageCacheSize\": {\n \"type\": \"string\"\n },\n \"noAuth\": {\n \"type\": \"boolean\"\n },\n \"dataPath\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\"\n ],\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"neo4j\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"uri\",\n \"username\",\n \"password\",\n \"database\"\n ]\n }\n }\n ],\n \"additionalProperties\": false\n },\n \"FilesystemServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"path\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"path\"\n ],\n \"additionalProperties\": false\n },\n \"InferenceServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\"\n },\n \"model\": {\n \"type\": \"string\"\n },\n \"maxTokens\": {\n \"type\": \"integer\"\n },\n \"endpoint\": {\n \"type\": \"string\"\n },\n \"baseURL\": {\n \"type\": \"string\"\n },\n \"apiKey\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"organization\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"apiKey\"\n ],\n \"additionalProperties\": false\n },\n \"McpServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"dependsOn\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\"\n ],\n \"additionalProperties\": false\n },\n \"ServicesConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"backend\": {\n \"$ref\": \"#/definitions/BackendServiceConfig\"\n },\n \"frontend\": {\n \"$ref\": \"#/definitions/FrontendServiceConfig\"\n },\n \"database\": {\n \"$ref\": \"#/definitions/DatabaseServiceConfig\"\n },\n \"graph\": {\n \"$ref\": \"#/definitions/GraphServiceConfig\"\n },\n \"filesystem\": {\n \"$ref\": \"#/definitions/FilesystemServiceConfig\"\n },\n \"inference\": {\n \"$ref\": \"#/definitions/InferenceServiceConfig\"\n },\n \"mcp\": {\n \"$ref\": \"#/definitions/McpServiceConfig\"\n },\n \"proxy\": {\n \"$ref\": \"#/definitions/ProxyServiceConfig\"\n }\n },\n \"additionalProperties\": true\n },\n \"SiteConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"siteName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display name for the site\"\n },\n \"domain\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Primary domain for the site\"\n },\n \"adminEmail\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"Administrator email address\"\n },\n \"supportEmail\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"Support email address (optional)\"\n },\n \"oauthAllowedDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Email domains allowed for OAuth authentication\"\n }\n },\n \"required\": [\n \"domain\"\n ],\n \"additionalProperties\": false\n },\n \"AppConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"features\": {\n \"type\": \"object\",\n \"properties\": {\n \"enableAnalytics\": {\n \"type\": \"boolean\"\n },\n \"enableMaintenanceMode\": {\n \"type\": \"boolean\"\n },\n \"enableDebugLogging\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"security\": {\n \"type\": \"object\",\n \"properties\": {\n \"sessionTimeout\": {\n \"type\": \"integer\",\n \"minimum\": 60,\n \"description\": \"Session timeout in seconds\"\n },\n \"maxLoginAttempts\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Maximum failed login attempts before lockout\"\n },\n \"corsAllowedOrigins\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"enableLocalAuth\": {\n \"type\": \"boolean\",\n \"description\": \"Enable local username/password authentication\"\n },\n \"jwtSecret\": {\n \"type\": \"string\",\n \"minLength\": 32,\n \"description\": \"JWT signing secret (base64 encoded, 32+ bytes)\"\n }\n },\n \"additionalProperties\": false\n },\n \"performance\": {\n \"type\": \"object\",\n \"properties\": {\n \"enableCaching\": {\n \"type\": \"boolean\"\n },\n \"cacheTimeout\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Cache timeout in seconds\"\n },\n \"maxRequestSize\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]+(kb|mb|gb)$\",\n \"description\": \"Maximum request size (e.g., '10mb')\"\n }\n },\n \"additionalProperties\": false\n }\n },\n \"additionalProperties\": false\n },\n \"EnvironmentConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"_comment\": {\n \"type\": \"string\",\n \"description\": \"Optional comment for documentation\"\n },\n \"_metadata\": {\n \"type\": \"object\",\n \"properties\": {\n \"environment\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"environment\",\n \"projectRoot\"\n ]\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Environment name\"\n },\n \"platform\": {\n \"type\": \"object\",\n \"properties\": {\n \"default\": {\n \"$ref\": \"#/definitions/PlatformType\"\n }\n }\n },\n \"services\": {\n \"$ref\": \"#/definitions/ServicesConfig\"\n },\n \"site\": {\n \"$ref\": \"#/definitions/SiteConfig\"\n },\n \"app\": {\n \"$ref\": \"#/definitions/AppConfig\"\n },\n \"env\": {\n \"type\": \"object\",\n \"properties\": {\n \"NODE_ENV\": {\n \"type\": \"string\",\n \"enum\": [\n \"development\",\n \"production\",\n \"test\"\n ]\n }\n },\n \"additionalProperties\": true\n },\n \"logLevel\": {\n \"type\": \"string\",\n \"enum\": [\n \"error\",\n \"warn\",\n \"info\",\n \"http\",\n \"debug\"\n ],\n \"description\": \"Logging verbosity level\"\n },\n \"deployment\": {\n \"type\": \"object\",\n \"properties\": {\n \"imageTagStrategy\": {\n \"type\": \"string\",\n \"enum\": [\n \"mutable\",\n \"immutable\",\n \"git-hash\"\n ]\n }\n }\n }\n },\n \"required\": [\n \"services\"\n ],\n \"additionalProperties\": false\n },\n \"SemiontConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\",\n \"description\": \"Config file version (semver)\"\n },\n \"project\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Project name\"\n },\n \"site\": {\n \"$ref\": \"#/definitions/SiteConfig\"\n },\n \"app\": {\n \"$ref\": \"#/definitions/AppConfig\"\n },\n \"services\": {\n \"$ref\": \"#/definitions/ServicesConfig\"\n }\n },\n \"required\": [\n \"version\",\n \"project\",\n \"site\"\n ],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * Config Schema Validator\n *\n * Validates configuration data against JSON Schema using Ajv (JSON Schema validator).\n * Provides runtime validation for semiont.json and environment config files.\n */\n\nimport Ajv, { type ErrorObject } from 'ajv';\nimport addFormats from 'ajv-formats';\nimport configSchema from './config.schema.json' with { type: 'json' };\n\n// Initialize Ajv with config-compatible settings\nconst ajv = new Ajv({\n allErrors: true, // Return all errors, not just the first one\n coerceTypes: true, // Coerce types (e.g., \"123\" -> 123)\n removeAdditional: false, // Don't remove additional properties\n useDefaults: true, // Apply default values from schema\n strict: false\n});\n\n// Add format validators (email, uri, date-time, etc.)\naddFormats(ajv);\n\n// Load schema\najv.addSchema(configSchema, 'config');\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ErrorObject[] | null;\n errorMessage?: string;\n}\n\n/**\n * Validate semiont.json config\n */\nexport function validateSemiontConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/SemiontConfig');\n if (!validate) {\n throw new Error('SemiontConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Validate environment config (environments/*.json)\n */\nexport function validateEnvironmentConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/EnvironmentConfig');\n if (!validate) {\n throw new Error('EnvironmentConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Validate site config\n */\nexport function validateSiteConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/SiteConfig');\n if (!validate) {\n throw new Error('SiteConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Format validation errors into human-readable message\n */\nexport function formatErrors(errors: ErrorObject[]): string {\n if (errors.length === 0) return 'Validation failed';\n\n const messages = errors.map(err => {\n const path = err.instancePath || 'root';\n const message = err.message || 'validation error';\n\n if (err.keyword === 'required' && 'missingProperty' in err.params) {\n return `Missing required property: ${err.params.missingProperty}`;\n }\n\n if (err.keyword === 'type' && 'type' in err.params) {\n return `${path}: ${message} (expected ${err.params.type})`;\n }\n\n if (err.keyword === 'enum' && 'allowedValues' in err.params) {\n return `${path}: must be one of [${(err.params.allowedValues as string[]).join(', ')}]`;\n }\n\n if (err.keyword === 'format') {\n return `${path}: invalid format (${message})`;\n }\n\n if (err.keyword === 'minLength' || err.keyword === 'minItems') {\n return `${path}: ${message}`;\n }\n\n return `${path}: ${message}`;\n });\n\n return messages.join('; ');\n}\n","/**\n * Environment Loader Module\n *\n * Responsible for loading and merging environment configurations.\n * Handles semiont.json base config and environment-specific overrides.\n */\n\nimport { ConfigurationError } from './configuration-error';\nimport { PlatformType } from './platform-types';\nimport { isObject } from '../index';\nimport { validateEnvironmentConfig } from './config-validator';\nimport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n SemiontConfig,\n ServicesConfig,\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n ServicePlatformConfig\n} from './config.types';\n\n/**\n * Re-export generated types from JSON Schema\n * These types are automatically generated from config.schema.json\n */\nexport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n SemiontConfig,\n PlatformType,\n ServicesConfig,\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n ServicePlatformConfig\n};\n\n/**\n * Generic service configuration\n * Platform-specific fields should be accessed through platform-specific interfaces\n */\nexport interface ServiceConfig {\n platform?: {\n type: PlatformType;\n };\n // Generic fields that apply across platforms\n port?: number;\n name?: string;\n // Platform-specific fields are loosely typed here\n // Platforms should validate and type these properly\n [key: string]: any;\n}\n\nexport interface AWSConfig {\n region: string;\n accountId: string;\n certificateArn?: string;\n hostedZoneId?: string;\n rootDomain?: string;\n stacks?: {\n data?: string;\n app?: string;\n };\n database?: {\n name?: string;\n instanceClass?: string;\n allocatedStorage?: number;\n backupRetentionDays?: number;\n multiAZ?: boolean;\n };\n ecs?: {\n desiredCount?: number;\n minCapacity?: number;\n maxCapacity?: number;\n };\n monitoring?: {\n enableDetailedMonitoring?: boolean;\n logRetentionDays?: number;\n };\n}\n\n/**\n * Deep merge utility for configuration objects\n * Pure function - no side effects\n */\nexport function deepMerge(target: any, ...sources: any[]): any {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n deepMerge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return deepMerge(target, ...sources);\n}\n\n\n/**\n * Recursively resolve environment variable placeholders in configuration\n * Replaces ${VAR_NAME} with the value from the provided env object\n * Pure function - accepts env as parameter instead of using process.env\n *\n * @param obj - Configuration object to process\n * @param env - Environment variables object\n * @returns Configuration with resolved environment variables\n */\nexport function resolveEnvVars(obj: any, env: Record<string, string | undefined>): any {\n if (typeof obj === 'string') {\n // Replace ${VAR_NAME} with actual environment variable value\n return obj.replace(/\\$\\{([^}]+)\\}/g, (match, varName) => {\n return env[varName] || match;\n });\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => resolveEnvVars(item, env));\n }\n\n if (obj && typeof obj === 'object') {\n const resolved: any = {};\n for (const key in obj) {\n resolved[key] = resolveEnvVars(obj[key], env);\n }\n return resolved;\n }\n\n return obj;\n}\n\n/**\n * Parse and merge configuration files\n * Pure function - accepts file contents as strings instead of reading from filesystem\n *\n * @param baseContent - Contents of semiont.json (null if file doesn't exist)\n * @param envContent - Contents of environment-specific JSON file\n * @param env - Environment variables object\n * @param environment - Environment name\n * @param projectRoot - Project root path (for metadata only)\n * @returns Merged and validated environment configuration\n * @throws ConfigurationError if parsing or validation fails\n */\nexport function parseAndMergeConfigs(\n baseContent: string | null,\n envContent: string,\n env: Record<string, string | undefined>,\n environment: string,\n projectRoot: string\n): EnvironmentConfig {\n try {\n // Parse base config\n let baseConfig: any = {};\n if (baseContent) {\n baseConfig = JSON.parse(baseContent);\n }\n\n // Parse environment config\n const envConfig = JSON.parse(envContent);\n\n // Merge configurations: base defaults -> environment config\n const merged = deepMerge(\n {},\n { site: baseConfig.site }, // Site config from semiont.json\n baseConfig.defaults || {}, // Default config from semiont.json\n envConfig // Environment-specific overrides\n );\n\n // Resolve environment variables in the merged configuration\n const resolved = resolveEnvVars(merged, env);\n\n // Ensure services exists (even if empty)\n if (!resolved.services) {\n resolved.services = {};\n }\n\n // Validate NODE_ENV if specified\n if (resolved.env?.NODE_ENV) {\n const validNodeEnv = ['development', 'production', 'test'];\n if (!validNodeEnv.includes(resolved.env.NODE_ENV)) {\n throw new ConfigurationError(\n `Invalid NODE_ENV value: ${resolved.env.NODE_ENV}`,\n environment,\n `NODE_ENV must be one of: ${validNodeEnv.join(', ')}`\n );\n }\n }\n\n // Add metadata about where this config came from\n const configWithMetadata = {\n ...resolved,\n _metadata: {\n environment,\n projectRoot\n }\n };\n\n // Validate with AJV\n const validationResult = validateEnvironmentConfig(configWithMetadata);\n\n if (!validationResult.valid) {\n throw new ConfigurationError(\n `Invalid environment configuration: ${validationResult.errorMessage}`,\n environment,\n `Fix the validation errors in your environments/${environment}.json file`\n );\n }\n\n return configWithMetadata as EnvironmentConfig;\n } catch (error) {\n if (error instanceof ConfigurationError) {\n throw error; // Re-throw our custom errors\n }\n\n if (error instanceof SyntaxError && error.message.includes('JSON')) {\n throw new ConfigurationError(\n `Invalid JSON syntax in configuration file`,\n environment,\n `Check for missing commas, quotes, or brackets. Use a JSON validator to verify syntax.`\n );\n }\n\n const message = error instanceof Error ? error.message : String(error);\n throw new ConfigurationError(\n `Failed to parse environment configuration: ${message}`,\n environment,\n `Check the configuration files are valid JSON`\n );\n }\n}\n\n/**\n * Get NODE_ENV value from environment config\n *\n * @param config - Environment configuration\n * @returns NODE_ENV value (defaults to 'development' if not specified)\n */\nexport function getNodeEnvForEnvironment(config: EnvironmentConfig): 'development' | 'production' | 'test' {\n const nodeEnv = config.env?.NODE_ENV;\n\n // Default to 'development' if not specified\n return nodeEnv || 'development';\n}\n\n/**\n * List environment names from filenames\n * Pure function - accepts array of filenames instead of reading from filesystem\n *\n * @param files - Array of filenames from environments directory\n * @returns Sorted array of environment names\n */\nexport function listEnvironmentNames(files: string[]): string[] {\n return files\n .filter(file => file.endsWith('.json'))\n .map(file => {\n // Extract filename from path (handle directory separators)\n const lastSlash = Math.max(file.lastIndexOf('/'), file.lastIndexOf('\\\\'));\n const filename = lastSlash >= 0 ? file.substring(lastSlash + 1) : file;\n // Remove '.json' suffix\n return filename.slice(0, -5);\n })\n .sort();\n}\n\n/**\n * Type guard to check if config has AWS settings\n * \n * @param config - Environment configuration\n * @returns True if AWS configuration is present\n */\nexport function hasAWSConfig(config: EnvironmentConfig): config is EnvironmentConfig & { aws: AWSConfig } {\n return !!(config as any).aws && !!(config as any).aws.region;\n}\n\n/**\n * Display configuration for debugging\n * \n * @param config - Configuration to display\n */\nexport function displayConfiguration(config: EnvironmentConfig): void {\n console.log('Environment Configuration:');\n console.log(JSON.stringify(config, null, 2));\n}","/**\n * Environment validation utilities\n *\n * Pure functions - accept available environments as parameter instead of reading from filesystem\n */\n\nexport type Environment = string; // Allow any environment name\n\n/**\n * Type guard to check if a string is a valid Environment\n * @param value - The environment string to check\n * @param availableEnvironments - List of valid environment names\n */\nexport function isValidEnvironment(value: string | undefined, availableEnvironments: string[]): value is Environment {\n if (!value) return false;\n return availableEnvironments.includes(value);\n}\n\n/**\n * Parse environment string to Environment type\n * @param value - The environment string to parse\n * @param availableEnvironments - List of valid environment names\n * @returns Valid Environment type\n * @throws Error if environment is invalid or not provided\n */\nexport function parseEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}\n\n/**\n * Validate and return environment or throw error\n * @param value - The environment string to validate\n * @param availableEnvironments - List of valid environment names\n * @throws Error if environment is invalid\n */\nexport function validateEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}","/**\n * Platform Types Module\n *\n * Re-exports PlatformType from schema-generated types.\n * Platforms represent WHERE services run (infrastructure targets).\n */\n\nimport { PlatformType as SchemaPlatformType } from './config.types';\n\n/**\n * Platform type literals from JSON Schema\n * These represent the infrastructure targets where services can be deployed\n */\nexport type PlatformType = SchemaPlatformType;\n\n/**\n * Type guard to check if a string is a valid platform type\n *\n * @param value - Value to check\n * @returns True if value is a valid PlatformType\n */\nexport function isValidPlatformType(value: string): value is PlatformType {\n return ['aws', 'container', 'posix', 'external'].includes(value);\n}\n\n/**\n * Get all valid platform types\n *\n * @returns Array of all platform types\n */\nexport function getAllPlatformTypes(): PlatformType[] {\n return ['aws', 'container', 'posix', 'external'];\n}","/**\n * @semiont/core\n *\n * Core domain logic and utilities for the Semiont semantic knowledge platform.\n * OpenAPI types are generated here and exported for use across the monorepo.\n */\n\n// OpenAPI-generated types (source of truth for API schemas)\nexport type { components, paths, operations } from './types';\n\n// Branded types (compile-time type safety)\nexport type {\n // OpenAPI types\n Motivation,\n ContentFormat,\n // Authentication & tokens\n Email,\n AuthCode,\n GoogleCredential,\n AccessToken,\n RefreshToken,\n MCPToken,\n CloneToken,\n // System identifiers\n JobId,\n UserDID,\n EntityType,\n SearchQuery,\n BaseUrl,\n // HTTP URI types\n ResourceUri,\n AnnotationUri,\n ResourceAnnotationUri,\n} from './branded-types';\nexport {\n // Helper functions\n email,\n authCode,\n googleCredential,\n accessToken,\n refreshToken,\n mcpToken,\n cloneToken,\n jobId,\n userDID,\n entityType,\n searchQuery,\n baseUrl,\n // URI factory functions\n resourceUri,\n annotationUri,\n resourceAnnotationUri,\n} from './branded-types';\n\n// Creation methods\nexport { CREATION_METHODS } from './creation-methods';\nexport type { CreationMethod } from './creation-methods';\n\n// Identifier types (only IDs - URIs are in @semiont/api-client)\nexport type { ResourceId, AnnotationId, UserId } from './identifiers';\nexport {\n resourceId,\n annotationId,\n userId,\n isResourceId,\n isAnnotationId,\n} from './identifiers';\n\n// URI utilities\nexport {\n resourceIdToURI,\n uriToResourceId,\n annotationIdToURI,\n uriToAnnotationId,\n uriToAnnotationIdOrPassthrough,\n extractResourceUriFromAnnotationUri,\n} from './uri-utils';\n\n// Graph types\nexport type {\n GraphConnection,\n GraphPath,\n EntityTypeStats,\n} from './graph';\n\n// Event types\nexport type {\n BaseEvent,\n ResourceEvent,\n ResourceEventType,\n SystemEvent,\n ResourceScopedEvent,\n ResourceCreatedEvent,\n ResourceClonedEvent,\n ResourceArchivedEvent,\n ResourceUnarchivedEvent,\n RepresentationAddedEvent,\n RepresentationRemovedEvent,\n AnnotationAddedEvent,\n AnnotationRemovedEvent,\n AnnotationBodyUpdatedEvent,\n JobStartedEvent,\n JobProgressEvent,\n JobCompletedEvent,\n JobFailedEvent,\n BodyOperation,\n BodyItem,\n EntityTagAddedEvent,\n EntityTagRemovedEvent,\n EventMetadata,\n EventSignature,\n StoredEvent,\n EventQuery,\n ResourceAnnotations,\n} from './events';\nexport {\n isResourceEvent,\n isSystemEvent,\n isResourceScopedEvent,\n getEventType,\n} from './events';\n\n// Event utilities\nexport {\n getAnnotationUriFromEvent,\n isEventRelatedToAnnotation,\n isResourceEvent as isStoredEvent,\n} from './event-utils';\n\n// Event bus (RxJS-based, framework-agnostic)\nexport { EventBus } from './event-bus';\n\n// Event protocol (application-level events for event bus)\nexport type {\n EventMap,\n SelectionData,\n DetectionProgress,\n GenerationProgress,\n Selector,\n GenerationContext,\n} from './event-map';\n\n// Backend-specific annotation utilities\nexport { findBodyItem } from './annotation-utils';\n\n// Resource types\nexport type { UpdateResourceInput, ResourceFilter } from './resource-types';\n\n// Annotation types\nexport type { AnnotationCategory, CreateAnnotationInternal } from './annotation-types';\n\n// Auth types\nexport type { GoogleAuthRequest } from './auth-types';\n\n// Utility functions\nexport * from './type-guards';\nexport * from './errors';\nexport * from './did-utils';\n\n// Configuration loading - Pure functions (testable without filesystem)\nexport {\n deepMerge,\n resolveEnvVars,\n parseAndMergeConfigs,\n listEnvironmentNames,\n getNodeEnvForEnvironment,\n hasAWSConfig,\n displayConfiguration,\n // Types\n type EnvironmentConfig,\n type ServiceConfig,\n type AWSConfig,\n type SiteConfig,\n type AppConfig,\n} from './config/environment-loader';\n\nexport {\n parseEnvironment,\n validateEnvironment,\n type Environment,\n} from './config/environment-validator';\nexport {\n formatErrors,\n validateSemiontConfig,\n validateEnvironmentConfig,\n validateSiteConfig,\n type ValidationResult,\n} from './config/config-validator';\nexport { ConfigurationError } from './config/configuration-error';\nexport type { ProxyServiceConfig } from './config/config.types';\nexport {\n type PlatformType,\n isValidPlatformType,\n getAllPlatformTypes,\n} from './config/platform-types';\n\n// Schema-generated configuration types\nexport type {\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n McpServiceConfig,\n ServicesConfig,\n SemiontConfig,\n GraphDatabaseType,\n ServicePlatformConfig\n} from './config/config.types';\n\n// Version information\nexport const CORE_TYPES_VERSION = '0.1.0';\nexport const SDK_VERSION = '0.1.0';\n"]}
|