@pierre/storage 1.3.2 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/dist/index.cjs +122 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +117 -1
- package/dist/index.d.ts +117 -1
- package/dist/index.js +122 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +127 -0
- package/src/schemas.ts +27 -0
- package/src/types.ts +61 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/schemas.ts","../src/commit-pack.ts","../src/stream-utils.ts","../package.json","../src/version.ts","../src/commit.ts","../src/diff-commit.ts","../src/fetch.ts","../src/util.ts","../src/webhook.ts","../src/index.ts"],"names":["BufferCtor","buildMessageIterable","normalizeBranchName","API_BASE_URL","crypto","toRefUpdate"],"mappings":";;;;;;;AASO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAM;AAAA,EACxB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAEhB,WAAA,CAAY,SAAiB,OAAA,EAAgC;AAC3D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AACZ,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,oBAAA,CAAqB,QAAQ,MAAM,CAAA;AACnE,IAAA,IAAA,CAAK,YAAY,OAAA,CAAQ,SAAA;AAAA,EAC3B;AACF;AAEA,IAAM,cAAA,GAAkD;AAAA,EACtD,mBAAA,EAAqB,qBAAA;AAAA,EACrB,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,WAAA;AAAA,EACX,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,YAAA,EAAc,cAAA;AAAA,EACd,SAAA,EAAW,WAAA;AAAA,EACX,WAAA,EAAa,aAAA;AAAA,EACb,QAAA,EAAU,UAAA;AAAA,EACV,MAAA,EAAQ,QAAA;AAAA,EACR,EAAA,EAAI;AACN,CAAA;AAEO,SAAS,qBAAqB,MAAA,EAAkC;AACrE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO,SAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,QAAQ,WAAA,EAAY;AAClC,EAAA,OAAO,cAAA,CAAe,KAAK,CAAA,IAAK,SAAA;AAClC;AC/CO,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,EACzB,GAAA,EAAK,EAAE,MAAA;AACT,CAAC,CAAA;AAEM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,eAAA,EAAiB,EAAE,MAAA;AACrB,CAAC,CAAA;AAEM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAAS,EAAE,MAAA;AACb,CAAC,CAAA;AAEM,IAAM,mCAAA,GAAsC,EAAE,MAAA,CAAO;AAAA,EAC1D,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,yBAAyB,CAAA;AAAA,EACxC,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,uBAAuB,CAAA;AAAA,EACzC,GAAA,EAAK,EAAE,MAAA;AACT,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACvC,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,UAAA,EAAY,EAAE,MAAA;AAChB,CAAC,CAAA;AAEM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,QAAA,EAAU,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EAClC,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAA,EAAU,EAAE,OAAA;AACd,CAAC,CAAA;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,EACtB,YAAA,EAAc,EAAE,MAAA,EAAO;AAAA,EACvB,cAAA,EAAgB,EAAE,MAAA,EAAO;AAAA,EACzB,eAAA,EAAiB,EAAE,MAAA,EAAO;AAAA,EAC1B,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,CAAA;AAEM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACpC,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAA,EAAU,EAAE,OAAA;AACd,CAAC,CAAA;AAEM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,CAAA;AAEM,IAAM,cAAA,GAAiB,EAAE,MAAA,CAAO;AAAA,EACrC,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,cAAA,EAAgB,EAAE,MAAA,EAAO;AAAA,EACzB,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA,EACrB,SAAA,EAAW,kBAAA,CAAmB,QAAA,EAAS,CAAE,QAAA;AAC3C,CAAC,CAAA;AAEM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,cAAc,CAAA;AAAA,EAC7B,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAA,EAAU,EAAE,OAAA;AACd,CAAC,CAAA;AAEM,IAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO;AAAA,EAC7C,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAAS,EAAE,MAAA;AACb,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAmB,EAAE,MAAA,CAAO;AAAA,EACvC,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,CAAA;AAEM,IAAM,uBAAA,GAA0B,EAAE,MAAA,CAAO;AAAA,EAC9C,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA,EACrB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACjC,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,EACtB,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,IAAM,eAAA,GAAkB,EAAE,MAAA,CAAO;AAAA,EACtC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAW,EAAE,MAAA,EAAO;AAAA,EACpB,OAAA,EAAS,EAAE,MAAA;AACb,CAAC,CAAA;AAEM,IAAM,iBAAA,GAAoB,EAAE,MAAA,CAAO;AAAA,EACxC,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQ,EAAE,OAAA,EAAQ;AAAA,EAClB,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACxB,CAAC,CAAA;AAEM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,UAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQ,EAAE,OAAA;AACZ,CAAC,CAAA;AAEM,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAO,eAAA;AAAA,EACP,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA;AAAA,EAChC,cAAA,EAAgB,CAAA,CAAE,KAAA,CAAM,qBAAqB;AAC/C,CAAC,CAAA;AAEM,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,EACd,KAAA,EAAO,eAAA;AAAA,EACP,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA;AAAA,EAChC,cAAA,EAAgB,CAAA,CAAE,KAAA,CAAM,qBAAqB;AAC/C,CAAC,CAAA;AAEM,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,aAAA,EAAe,EAAE,MAAA,EAAO;AAAA,EACxB,mBAAA,EAAqB,EAAE,OAAA,EAAQ;AAAA,EAC/B,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACpC,CAAC,CAAA;AAEM,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAAS,EAAE,OAAA,EAAQ;AAAA,EACnB,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,CAAA;AAEM,IAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO;AAAA,EAC7C,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA,EACrB,QAAA,EAAU,EAAE,MAAA,EAAO;AAAA,EACnB,aAAA,EAAe,EAAE,MAAA,EAAO;AAAA,EACxB,UAAA,EAAY,EAAE,MAAA,EAAO;AAAA,EACrB,UAAA,EAAY,EAAE,MAAA;AAChB,CAAC,CAAA;AAEM,IAAM,yBAAA,GAA4B,uBAAuB,IAAA,CAAK;AAAA,EACnE,UAAA,EAAY;AACd,CAAC,CAAA;AAEM,IAAM,kCAAA,GAAqC,EAAE,MAAA,CAAO;AAAA,EACzD,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC5B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,EACjB,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AACtB,CAAC,CAAA;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,MAAA,EAAQ,sBAAA;AAAA,EACR,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,IAAM,sBAAA,GAAyB,EAAE,MAAA,CAAO;AAAA,EAC7C,MAAA,EAAQ,yBAAA;AAAA,EACR,MAAA,EAAQ,sBAAsB,MAAA,CAAO,EAAE,SAAS,CAAA,CAAE,OAAA,CAAQ,IAAI,CAAA,EAAG;AACnE,CAAC,CAAA;AAEM,IAAM,wBAAA,GAA2B,EAAE,MAAA,CAAO;AAAA,EAC/C,QAAQ,sBAAA,CAAuB,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7D,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,IAAM,2BAAA,GAA8B,EAAE,MAAA,CAAO;AAAA,EAClD,QAAQ,yBAAA,CAA0B,OAAA,EAAQ,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAChE,MAAA,EAAQ;AACV,CAAC,CAAA;AAEM,IAAM,cAAA,GAAiB,EAAE,MAAA,CAAO;AAAA,EACrC,WAAA,EAAa,EAAE,MAAA,EAAO;AAAA,EACtB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,IAAA,EAAM,EAAE,MAAA;AACV,CAAC,CAAA;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,EACf,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,cAAc;AAC/B,CAAC,CAAA;AAEM,IAAM,kBAAA,GAAqB,EAAE,MAAA,CAAO;AAAA,EACzC,KAAA,EAAO,EAAE,MAAA,CAAO;AAAA,IACd,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,IAClB,cAAA,EAAgB,EAAE,OAAA;AAAQ,GAC3B,CAAA;AAAA,EACD,IAAA,EAAM,EAAE,MAAA,CAAO;AAAA,IACb,GAAA,EAAK,EAAE,MAAA,EAAO;AAAA,IACd,MAAA,EAAQ,EAAE,MAAA;AAAO,GAClB,CAAA;AAAA,EACD,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACpC,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC5C,QAAA,EAAU,EAAE,OAAA;AACd,CAAC,CAAA;AAEM,IAAM,mBAAA,GAAsB,EAAE,MAAA,CAAO;AAAA,EAC1C,KAAA,EAAO,EAAE,MAAA;AACX,CAAC,CAAA;;;ACrNM,SAAS,kBAAkB,GAAA,EAAqC;AACrE,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,IAAI,MAAA,CAAO,OAAA,IAAW,CAAA,0BAAA,EAA6B,GAAA,CAAI,OAAO,MAAM,CAAA,CAAA;AAAA,MACpE;AAAA,QACE,MAAA,EAAQ,IAAI,MAAA,CAAO,MAAA;AAAA,QACnB,OAAA,EAAS,IAAI,MAAA,CAAO,OAAA;AAAA,QACpB;AAAA;AACF,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,IAAI,MAAA,CAAO,UAAA;AAAA,IACtB,OAAA,EAAS,IAAI,MAAA,CAAO,QAAA;AAAA,IACpB,YAAA,EAAc,IAAI,MAAA,CAAO,aAAA;AAAA,IACzB,SAAA,EAAW,IAAI,MAAA,CAAO,UAAA;AAAA,IACtB,SAAA,EAAW,IAAI,MAAA,CAAO,UAAA;AAAA,IACtB;AAAA,GACF;AACF;AAEO,SAAS,YAAY,MAAA,EAA+C;AACzE,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAQ,MAAA,CAAO,OAAA;AAAA,IACf,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF;AAEA,eAAsB,oBAAA,CACpB,UACA,eAAA,EAKC;AACD,EAAA,MAAM,MAAA,GAAS,SAAS,KAAA,EAAM;AAC9B,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,QAAA,GAAW,MAAM,OAAO,IAAA,EAAK;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,QAAA,GAAW,MAAA;AAAA,EACb;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAM,SAAS,IAAA,EAAK;AAAA,IACjC,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,GAAW,MAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,MAAA,CAAO,QAAA,CAAS,MAAM,CAAC,CAAA;AAC7D,IAAA,OAAO,QAAA,KAAa,YAAY,QAAA,GAAW,QAAA;AAAA,EAC7C,CAAA,GAAG;AACH,EAAA,IAAI,WAAA,GAAc,aAAA;AAClB,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,OAAA;AAEJ,EAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,IAAA,MAAM,cAAA,GAAiB,wBAAA,CAAyB,SAAA,CAAU,QAAQ,CAAA;AAClE,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,MAAM,MAAA,GAAS,eAAe,IAAA,CAAK,MAAA;AACnC,MAAA,IAAI,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACpE,QAAA,WAAA,GAAc,MAAA,CAAO,OAAO,IAAA,EAAK;AAAA,MACnC;AACA,MAAA,SAAA,GAAY,wBAAA;AAAA,QACV,MAAA,CAAO,MAAA;AAAA,QACP,MAAA,CAAO,OAAA;AAAA,QACP,MAAA,CAAO;AAAA,OACT;AACA,MAAA,IAAI,OAAO,OAAO,OAAA,KAAY,QAAA,IAAY,OAAO,OAAA,CAAQ,IAAA,OAAW,EAAA,EAAI;AACtE,QAAA,OAAA,GAAU,MAAA,CAAO,QAAQ,IAAA,EAAK;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,SAAA,CAAU,QAAQ,CAAA;AAC1D,MAAA,IAAI,YAAY,OAAA,EAAS;AACvB,QAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAC5C,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,GAAU,OAAA;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,WAAW,OAAO,QAAA,KAAa,YAAY,QAAA,CAAS,IAAA,OAAW,EAAA,EAAI;AACtE,IAAA,OAAA,GAAU,SAAS,IAAA,EAAK;AAAA,EAC1B;AAEA,EAAA,IAAI,CAAC,OAAA,IAAW,QAAA,IAAY,QAAA,CAAS,IAAA,OAAW,EAAA,EAAI;AAClD,IAAA,OAAA,GAAU,SAAS,IAAA,EAAK;AAAA,EAC1B;AAEA,EAAA,OAAO;AAAA,IACL,eAAe,OAAA,IAAW,eAAA;AAAA,IAC1B,WAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,wBAAA,CACP,MAAA,EACA,MAAA,EACA,MAAA,EACgC;AAChC,EAAA,MAAM,YAAgC,EAAC;AAEvC,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,SAAA,CAAU,MAAA,GAAS,OAAO,IAAA,EAAK;AAAA,EACjC;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,SAAA,CAAU,MAAA,GAAS,OAAO,IAAA,EAAK;AAAA,EACjC;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,SAAA,CAAU,MAAA,GAAS,OAAO,IAAA,EAAK;AAAA,EACjC;AAEA,EAAA,OAAO,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,GAAS,IAAI,SAAA,GAAY,MAAA;AACzD;;;AC1HA,IAAM,aACJ,UAAA,CACA,MAAA;AAEK,IAAM,eAAA,GAAkB,IAAI,IAAA,GAAO,IAAA;AAO1C,gBAAuB,SACrB,MAAA,EAC6B;AAC7B,EAAA,IAAI,OAAA,GAA6B,IAAA;AACjC,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,WAAA,MAAiB,SAAS,MAAA,EAAQ;AAChC,IAAA,MAAM,KAAA,GAAQ,KAAA;AAEd,IAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,UAAA,KAAe,eAAA,EAAiB;AACrD,MAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,KAAA,EAAM;AACnC,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,OAAA,GAAU,IAAA;AAAA,IACZ;AAEA,IAAA,MAAM,MAAA,GAAqB,OAAA,GAAU,YAAA,CAAa,OAAA,EAAS,KAAK,CAAA,GAAI,KAAA;AACpE,IAAA,OAAA,GAAU,IAAA;AAEV,IAAA,IAAI,MAAA,GAAqB,MAAA;AACzB,IAAA,OAAO,MAAA,CAAO,aAAa,eAAA,EAAiB;AAC1C,MAAA,MAAM,KAAA,GAAoB,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,eAAe,CAAA;AACzD,MAAA,MAAA,GAAS,MAAA,CAAO,MAAM,eAAe,CAAA;AACrC,MAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAK,KAAA,EAAM;AAC1B,MAAA,QAAA,GAAW,IAAA;AAAA,IACb;AAEA,IAAA,OAAA,GAAU,MAAA;AAAA,EACZ;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAS,GAAA,EAAK,IAAA,EAAK;AAClC,IAAA,QAAA,GAAW,IAAA;AAAA,EACb;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,EAAE,KAAA,EAAO,IAAI,WAAW,CAAC,CAAA,EAAG,KAAK,IAAA,EAAK;AAAA,EAC9C;AACF;AAEA,gBAAuB,gBACrB,MAAA,EAS2B;AAC3B,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,MAAM,CAAA;AACrC,IAAA;AAAA,EACF;AACA,EAAA,IAAI,kBAAkB,UAAA,EAAY;AAChC,IAAA,MAAM,MAAA;AACN,IAAA;AAAA,EACF;AACA,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,MAAM,IAAI,WAAW,MAAM,CAAA;AAC3B,IAAA;AAAA,EACF;AACA,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA,EAAG;AAC9B,IAAA,MAAM,IAAI,UAAA,CAAW,MAAA,CAAO,QAAQ,MAAA,CAAO,UAAA,EAAY,OAAO,UAAU,CAAA;AACxE,IAAA;AAAA,EACF;AACA,EAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,EAAO;AAC7B,IAAA,IAAI,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC3B,MAAA,WAAA,MAAiB,SAAS,MAAA,EAAkC;AAC1D,QAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MAC9B;AACA,MAAA;AAAA,IACF;AACA,IAAA,IAAI,oBAAA,CAAqB,MAAM,CAAA,EAAG;AAChC,MAAA,OAAO,mBAAmB,MAAM,CAAA;AAChC,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,oBAAA,CAAqB,MAAM,CAAA,EAAG;AAChC,IAAA,OAAO,mBAAmB,MAAM,CAAA;AAChC,IAAA;AAAA,EACF;AACA,EAAA,IAAI,eAAA,CAAgB,MAAM,CAAA,EAAG;AAC3B,IAAA,WAAA,MAAiB,SAAS,MAAA,EAAkC;AAC1D,MAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,IAC9B;AACA,IAAA;AAAA,EACF;AACA,EAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,IAAA,KAAA,MAAW,SAAS,MAAA,EAA6B;AAC/C,MAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,IAC9B;AACA,IAAA;AAAA,EACF;AACA,EAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACpE;AAEO,SAAS,aAAa,KAAA,EAA2B;AACtD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,YAAY,CAAA,EAAA,EAAK;AACzC,IAAA,MAAA,IAAU,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACxC;AACA,EAAA,MAAM,SAAU,UAAA,CAAmD,IAAA;AACnE,EAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAChC,IAAA,OAAO,OAAO,MAAM,CAAA;AAAA,EACtB;AACA,EAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AACxE;AAEO,SAAS,eAAe,IAAA,EAAwB;AACrD,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IACE,OAAQ,IAAA,CACN,MAAA,CAAO,aACT,MAAM,UAAA,EACN;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,qBACJ,UAAA,CAGA,cAAA;AACF,EAAA,IAAI,kBAAA,IAAsB,gBAAgB,kBAAA,EAAoB;AAC5D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,cAAc,QAAA,EAA8C;AAC1E,EAAA,MAAM,qBACJ,UAAA,CAGA,cAAA;AACF,EAAA,IAAI,OAAO,uBAAuB,UAAA,EAAY;AAC5C,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,aAAa,CAAA,EAAE;AAChD,IAAA,OAAO,IAAI,kBAAA,CAAmB;AAAA,MAC5B,MAAM,KAAK,UAAA,EAGR;AACD,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,SAAS,IAAA,EAAK;AAC5C,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,UAAA,CAAW,KAAA,EAAM;AACjB,UAAA;AAAA,QACF;AACA,QAAA,UAAA,CAAW,QAAQ,KAAM,CAAA;AAAA,MAC3B,CAAA;AAAA,MACA,MAAM,OAAO,MAAA,EAAiB;AAC5B,QAAA,IAAI,OAAO,QAAA,CAAS,MAAA,KAAW,UAAA,EAAY;AACzC,UAAA,MAAM,QAAA,CAAS,OAAO,MAAM,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAA;AACT;AAEA,gBAAgB,mBACd,MAAA,EAC2B;AAC3B,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACR,QAAA;AAAA,MACF;AACA,MAAA,IAAI,UAAU,KAAA,CAAA,EAAW;AACvB,QAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,IAAc;AAAA,EACvB;AACF;AAEA,SAAS,iBAAiB,KAAA,EAA4B;AACpD,EAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,iBAAiB,WAAA,EAAa;AAChC,IAAA,OAAO,IAAI,WAAW,KAAK,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,KAAK,CAAA,EAAG;AAC7B,IAAA,OAAO,IAAI,UAAA,CAAW,KAAA,CAAM,QAAQ,KAAA,CAAM,UAAA,EAAY,MAAM,UAAU,CAAA;AAAA,EACxE;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,UAAA,IAAc,UAAA,CAAW,QAAA,CAAS,KAAK,CAAA,EAAG;AAC5C,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAChE;AAEA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,OAAQ,MAAmB,MAAA,KAAW,UAAA;AAE1C;AAEA,SAAS,qBACP,KAAA,EACgC;AAChC,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,OAAQ,MAAgC,SAAA,KAAc,UAAA;AAE1D;AAEA,SAAS,gBAAgB,KAAA,EAAiD;AACxE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,OAAO,aAAA,IAAkB,KAAA;AAE7B;AAEA,SAAS,WAAW,KAAA,EAA4C;AAC9D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACV,OAAO,QAAA,IAAa,KAAA;AAExB;AAEA,SAAS,YAAA,CAAa,GAAe,CAAA,EAA2B;AAC9D,EAAA,IAAI,CAAA,CAAE,eAAe,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,CAAE,eAAe,CAAA,EAAG;AACtB,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,IAAI,UAAA,CAAW,CAAA,CAAE,UAAA,GAAa,EAAE,UAAU,CAAA;AACzD,EAAA,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AACf,EAAA,MAAA,CAAO,GAAA,CAAI,CAAA,EAAG,CAAA,CAAE,UAAU,CAAA;AAC1B,EAAA,OAAO,MAAA;AACT;;;AC/QA,IAAA,eAAA,GAAA;AAAA,EAEE,OAAA,EAAW,OA0Cb,CAAA;;;AC1CO,IAAM,YAAA,GAAe,kBAAA;AACrB,IAAM,kBAAkB,eAAA,CAAY,OAAA;AAEpC,SAAS,YAAA,GAAuB;AACrC,EAAA,OAAO,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,eAAe,CAAA,CAAA;AAC3C;;;ACiBA,IAAM,sBAAsB,EAAA,GAAK,EAAA;AACjC,IAAM,gBAAA,GAAmB,aAAA;AASzB,IAAMA,cACJ,UAAA,CACA,MAAA;AA+DK,IAAM,oBAAN,MAAiD;AAAA,EACrC,OAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAmC,EAAC;AAAA,EAC7C,IAAA,GAAO,KAAA;AAAA,EAEf,YAAY,IAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,OAAA,GAAU,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AAClD,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAEtB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,IAAA,EAAK;AACxD,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,MAAM,IAAA,EAAK;AAC1D,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAA,EAAK;AAE5D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,CAAC,iBAAA,IAAqB,CAAC,kBAAA,EAAoB;AAC7C,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AACA,IAAA,IAAA,CAAK,QAAQ,aAAA,GAAgB,cAAA;AAC7B,IAAA,IAAA,CAAK,QAAQ,MAAA,GAAS;AAAA,MACpB,IAAA,EAAM,iBAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,KAAoB,QAAA,EAAU;AACpD,MAAA,IAAA,CAAK,OAAA,CAAQ,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,gBAAgB,IAAA,EAAK;AAAA,IACnE;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AAC/C,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,IAAA,EAAK;AACjD,MAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,QAAA,OAAO,KAAK,OAAA,CAAQ,UAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,IAAI,WAAA,CAAY,UAAA,CAAW,OAAO,CAAA,EAAG;AACnC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AACA,QAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,WAAA;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,OAAA,CAAQ,aAAA,IAAiB,CAAC,IAAA,CAAK,QAAQ,UAAA,EAAY;AAC1D,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,OAAA,CACE,IAAA,EACA,MAAA,EACA,OAAA,EACe;AACf,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAC9C,IAAA,MAAM,YAAY,eAAA,EAAgB;AAClC,IAAA,MAAM,IAAA,GAAO,SAAS,IAAA,IAAQ,QAAA;AAE9B,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK;AAAA,MACnB,IAAA,EAAM,cAAA;AAAA,MACN,SAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,QAAA;AAAA,MACX,aAAA,EAAe,MAAM,eAAA,CAAgB,MAAM;AAAA,KAC5C,CAAA;AAED,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,iBAAA,CACE,IAAA,EACA,QAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,QAAA,GAAW,SAAS,QAAA,IAAY,MAAA;AACtC,IAAA,MAAM,kBAAA,GAAqB,QAAA,KAAa,OAAA,GAAU,MAAA,GAAS,QAAA;AAC3D,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,uBAAuB,MAAA,EAAQ;AACjC,MAAA,IAAA,GAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,QAAQ,CAAA;AAAA,IAC1C,WAAWA,WAAAA,EAAY;AACrB,MAAA,IAAA,GAAOA,WAAAA,CAAW,IAAA;AAAA,QAChB,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,yBAAyB,QAAQ,CAAA,wEAAA;AAAA,OACnC;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACzC;AAAA,EAEA,WAAW,IAAA,EAA6B;AACtC,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAC9C,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK;AAAA,MACnB,IAAA,EAAM,cAAA;AAAA,MACN,WAAW,eAAA,EAAgB;AAAA,MAC3B,SAAA,EAAW;AAAA,KACZ,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,GAA8B;AAClC,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,MAAM,QAAA,GAAW,KAAK,aAAA,EAAc;AACpC,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CACtB,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,CAAG,SAAA,KAAc,QAAA,IAAY,EAAA,CAAG,aAAa,CAAA,CAC5D,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACZ,WAAW,EAAA,CAAG,SAAA;AAAA,MACd,MAAA,EAAQ,QAAA,CAAS,EAAA,CAAG,aAAA,EAAgB;AAAA,KACtC,CAAE,CAAA;AAEJ,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,YAAA,EAAa;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK;AAAA,MACpC,aAAA;AAAA,MACA,MAAA,EAAQ,KAAK,OAAA,CAAQ,MAAA;AAAA,MACrB,QAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,OAAO,kBAAkB,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEQ,aAAA,GAAuC;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,KAAO;AACxC,MAAA,MAAM,KAAA,GAAgD;AAAA,QACpD,MAAM,EAAA,CAAG,IAAA;AAAA,QACT,YAAY,EAAA,CAAG,SAAA;AAAA,QACf,WAAW,EAAA,CAAG;AAAA,OAChB;AACA,MAAA,IAAI,GAAG,IAAA,EAAM;AACX,QAAA,KAAA,CAAM,OAAO,EAAA,CAAG,IAAA;AAAA,MAClB;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAM,QAAA,GAAkC;AAAA,MACtC,aAAA,EAAe,KAAK,OAAA,CAAQ,YAAA;AAAA,MAC5B,cAAA,EAAgB,KAAK,OAAA,CAAQ,aAAA;AAAA,MAC7B,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,QAC1B,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO;AAAA,OAC7B;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,eAAA,EAAiB;AAChC,MAAA,QAAA,CAAS,iBAAA,GAAoB,KAAK,OAAA,CAAQ,eAAA;AAAA,IAC5C;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,UAAA,EAAY;AAC3B,MAAA,QAAA,CAAS,WAAA,GAAc,KAAK,OAAA,CAAQ,UAAA;AAAA,IACtC;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,SAAA,GAAY;AAAA,QACnB,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,IAAA;AAAA,QAC7B,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU;AAAA,OAChC;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAAA,IACvB;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,aAAA,EAAe;AAC9B,MAAA,QAAA,CAAS,cAAA,GAAiB,IAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,cAAc,IAAA,EAAsB;AAC1C,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA,KAAS,YAAY,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAC3D,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EAC/B;AACF,CAAA;AAEO,IAAM,uBAAN,MAAsD;AAAA,EAC1C,GAAA;AAAA,EAEjB,YAAY,MAAA,EAA8C;AACxD,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACrD,IAAA,IAAA,CAAK,GAAA,GAAM,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,OAAO,OAAO,CAAA,kBAAA,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,KAAK,OAAA,EAA4D;AACrE,IAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,OAAA,CAAQ,QAAA,EAAU,QAAQ,KAAK,CAAA;AACzE,IAAA,MAAM,IAAA,GAAO,cAAc,YAAY,CAAA;AAEvC,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,aAAa,CAAA,CAAA;AAAA,QAC9C,cAAA,EAAgB,sBAAA;AAAA,QAChB,MAAA,EAAQ,kBAAA;AAAA,QACR,sBAAsB,YAAA;AAAa,OACrC;AAAA,MACA,IAAA;AAAA,MACA,QAAQ,OAAA,CAAQ;AAAA,KAClB;AAEA,IAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,MAAC,KAA0C,MAAA,GAAS,MAAA;AAAA,IACtD;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,KAAK,IAAI,CAAA;AAE3C,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,kBAAkB,CAAA,6BAAA,EAAgC,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA,CAAA,CAAA;AAC9F,MAAA,MAAM,EAAE,eAAe,WAAA,EAAa,SAAA,KAClC,MAAM,oBAAA,CAAqB,UAAU,eAAe,CAAA;AACtD,MAAA,MAAM,IAAI,eAAe,aAAA,EAAe;AAAA,QACtC,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS,aAAA;AAAA,QACT;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAM,mBAAA,CAAoB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAC3D,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,oBAAA,CACP,UACA,KAAA,EAC2B;AAC3B,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,aAAa,CAAA,GAAI;AAC9B,MAAA,MAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,IAAA,CAAK,UAAU,EAAE,QAAA,EAAU,CAAC;AAAA,CAAI,CAAA;AACxD,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,WAAA,MAAiB,OAAA,IAAW,KAAK,MAAA,EAAQ;AACvC,UAAA,MAAM,OAAA,GAAU;AAAA,YACd,UAAA,EAAY;AAAA,cACV,YAAY,IAAA,CAAK,SAAA;AAAA,cACjB,IAAA,EAAM,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAAA,cAChC,KAAK,OAAA,CAAQ;AAAA;AACf,WACF;AACA,UAAA,MAAM,QAAQ,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC;AAAA,CAAI,CAAA;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,GACF;AACF;AAEA,SAAS,eAAA,GAA0B;AACjC,EAAA,MAAM,YAAY,UAAA,CAAW,MAAA;AAC7B,EAAA,IAAI,SAAA,IAAa,OAAO,SAAA,CAAU,UAAA,KAAe,UAAA,EAAY;AAC3D,IAAA,OAAO,UAAU,UAAA,EAAW;AAAA,EAC9B;AACA,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,MAAM,CAAC,CAAA;AACjD,EAAA,OAAO,CAAA,IAAA,EAAO,KAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAC,IAAI,MAAM,CAAA,CAAA;AACjD;AAEA,SAAS,uBACP,OAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,oBAAoB,OAAO,CAAA;AAAA,IACzC,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,SAAA,EAAW,QAAQ,SAAA,KAAc,IAAA;AAAA,IACjC,aAAA,EAAe,QAAQ,aAAA,KAAkB,IAAA;AAAA,IACzC,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,WAAW,OAAA,CAAQ,SAAA;AAAA,IACnB,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAK,OAAA,CAAQ;AAAA,GACf;AACF;AAEA,SAAS,oBAAoB,OAAA,EAAsC;AACjE,EAAA,MAAM,eAAA,GACJ,OAAO,OAAA,CAAQ,YAAA,KAAiB,WAAW,OAAA,CAAQ,YAAA,CAAa,MAAK,GAAI,EAAA;AAC3E,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,oBAAoB,eAAe,CAAA;AAAA,EAC5C;AACA,EAAA,IAAI,kBAAA,CAAmB,OAAO,CAAA,EAAG;AAC/B,IAAA,OAAO,wBAAA,CAAyB,QAAQ,SAAS,CAAA;AAAA,EACnD;AACA,EAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AACzD;AAEA,SAAS,oBAAoB,KAAA,EAAuB;AAClD,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACxC,IAAA,MAAM,SAAS,OAAA,CAAQ,KAAA,CAAM,gBAAA,CAAiB,MAAM,EAAE,IAAA,EAAK;AAC3D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,yBAAyB,GAAA,EAAqB;AACrD,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,EAAK;AACzB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACA,EAAA,IAAI,CAAC,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACA,EAAA,MAAM,SAAS,OAAA,CAAQ,KAAA,CAAM,gBAAA,CAAiB,MAAM,EAAE,IAAA,EAAK;AAC3D,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,mBACP,OAAA,EACsC;AACtC,EAAA,OAAO,OAAQ,QAAsC,SAAA,KAAc,QAAA;AACrE;AAEO,SAAS,oBAAoB,IAAA,EAAwC;AAC1E,EAAA,OAAO,IAAI,kBAAkB,IAAI,CAAA;AACnC;AAEO,SAAS,wBAAwB,OAAA,EAAoC;AAC1E,EAAA,IAAI,OAAO,OAAA,EAAS,GAAA,KAAQ,QAAA,IAAY,OAAA,CAAQ,MAAM,CAAA,EAAG;AACvD,IAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,EACjB;AACA,EAAA,OAAO,mBAAA;AACT;;;ACrXA,IAAM,qBAAN,MAAyB;AAAA,EACN,OAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACT,IAAA,GAAO,KAAA;AAAA,EAEf,YAAY,IAAA,EAA8B;AACxC,IAAA,IAAA,CAAK,OAAA,GAAU,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAA;AACtD,IAAA,IAAA,CAAK,eAAe,IAAA,CAAK,YAAA;AACzB,IAAA,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA;AAEtB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,IAAA,EAAK;AACxD,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,MAAM,IAAA,EAAK;AAC1D,IAAA,MAAM,kBAAA,GAAqB,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,OAAO,IAAA,EAAK;AAE5D,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,CAAC,iBAAA,IAAqB,CAAC,kBAAA,EAAoB;AAC7C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,QAAQ,aAAA,GAAgB,cAAA;AAC7B,IAAA,IAAA,CAAK,QAAQ,MAAA,GAAS;AAAA,MACpB,IAAA,EAAM,iBAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,IAAI,OAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,KAAoB,QAAA,EAAU;AACpD,MAAA,IAAA,CAAK,OAAA,CAAQ,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,gBAAgB,IAAA,EAAK;AAAA,IACnE;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AAC/C,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,IAAA,EAAK;AACjD,MAAA,IAAI,gBAAgB,EAAA,EAAI;AACtB,QAAA,OAAO,KAAK,OAAA,CAAQ,UAAA;AAAA,MACtB,CAAA,MAAO;AACL,QAAA,IAAI,WAAA,CAAY,UAAA,CAAW,OAAO,CAAA,EAAG;AACnC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WACF;AAAA,QACF;AACA,QAAA,IAAA,CAAK,QAAQ,UAAA,GAAa,WAAA;AAAA,MAC5B;AAAA,IACF;AACA,IAAA,IAAI,KAAK,OAAA,CAAQ,aAAA,IAAiB,CAAC,IAAA,CAAK,QAAQ,UAAA,EAAY;AAC1D,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAA,CAAK,WAAA,GAAc,MAAM,eAAA,CAAgB,IAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,EACnE;AAAA,EAEA,MAAM,IAAA,GAA8B;AAClC,IAAA,IAAA,CAAK,aAAA,EAAc;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAEZ,IAAA,MAAM,QAAA,GAAW,KAAK,aAAA,EAAc;AACpC,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,IAAA,CAAK,WAAA,EAAa,CAAA;AAEhD,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,YAAA,EAAa;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK;AAAA,MACpC,aAAA;AAAA,MACA,MAAA,EAAQ,KAAK,OAAA,CAAQ,MAAA;AAAA,MACrB,QAAA;AAAA,MACA,UAAA,EAAY;AAAA,KACb,CAAA;AAED,IAAA,OAAO,kBAAkB,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEQ,aAAA,GAA2C;AACjD,IAAA,MAAM,QAAA,GAAsC;AAAA,MAC1C,aAAA,EAAe,KAAK,OAAA,CAAQ,YAAA;AAAA,MAC5B,cAAA,EAAgB,KAAK,OAAA,CAAQ,aAAA;AAAA,MAC7B,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,QAC1B,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO;AAAA;AAC7B,KACF;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,eAAA,EAAiB;AAChC,MAAA,QAAA,CAAS,iBAAA,GAAoB,KAAK,OAAA,CAAQ,eAAA;AAAA,IAC5C;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,UAAA,EAAY;AAC3B,MAAA,QAAA,CAAS,WAAA,GAAc,KAAK,OAAA,CAAQ,UAAA;AAAA,IACtC;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,SAAA,GAAY;AAAA,QACnB,IAAA,EAAM,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,IAAA;AAAA,QAC7B,KAAA,EAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU;AAAA,OAChC;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAAA,IACvB;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,aAAA,EAAe;AAC9B,MAAA,QAAA,CAAS,cAAA,GAAiB,IAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAAA,EACF;AACF,CAAA;AAEO,IAAM,2BAAN,MAA8D;AAAA,EAClD,GAAA;AAAA,EAEjB,YAAY,MAAA,EAA8C;AACxD,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,QAAQ,EAAE,CAAA;AACrD,IAAA,IAAA,CAAK,GAAA,GAAM,CAAA,EAAG,WAAW,CAAA,MAAA,EAAS,OAAO,OAAO,CAAA,kBAAA,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,KAAK,OAAA,EAAgE;AACzE,IAAA,MAAM,YAAA,GAAeC,qBAAAA;AAAA,MACnB,OAAA,CAAQ,QAAA;AAAA,MACR,OAAA,CAAQ;AAAA,KACV;AACA,IAAA,MAAM,IAAA,GAAO,cAAc,YAAY,CAAA;AAEvC,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,CAAA,OAAA,EAAU,OAAA,CAAQ,aAAa,CAAA,CAAA;AAAA,QAC9C,cAAA,EAAgB,sBAAA;AAAA,QAChB,MAAA,EAAQ,kBAAA;AAAA,QACR,sBAAsB,YAAA;AAAa,OACrC;AAAA,MACA,IAAA;AAAA,MACA,QAAQ,OAAA,CAAQ;AAAA,KAClB;AAEA,IAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,MAAC,KAA0C,MAAA,GAAS,MAAA;AAAA,IACtD;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,KAAK,IAAI,CAAA;AAC3C,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,kBAAkB,CAAA,qCAAA,EAAwC,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA,CAAA,CAAA;AACtG,MAAA,MAAM,EAAE,eAAe,WAAA,EAAa,SAAA,KAClC,MAAM,oBAAA,CAAqB,UAAU,eAAe,CAAA;AACtD,MAAA,MAAM,IAAI,eAAe,aAAA,EAAe;AAAA,QACtC,MAAA,EAAQ,WAAA;AAAA,QACR,OAAA,EAAS,aAAA;AAAA,QACT;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,mBAAA,CAAoB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,EACxD;AACF,CAAA;AAEA,SAASA,qBAAAA,CACP,UACA,UAAA,EAC2B;AAC3B,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,aAAa,CAAA,GAAI;AAC9B,MAAA,MAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,IAAA,CAAK,UAAU,EAAE,QAAA,EAAU,CAAC;AAAA,CAAI,CAAA;AACxD,MAAA,WAAA,MAAiB,WAAW,UAAA,EAAY;AACtC,QAAA,MAAM,OAAA,GAAU;AAAA,UACd,UAAA,EAAY;AAAA,YACV,IAAA,EAAM,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAAA,YAChC,KAAK,OAAA,CAAQ;AAAA;AACf,SACF;AACA,QAAA,MAAM,QAAQ,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC;AAAA,CAAI,CAAA;AAAA,MACrD;AAAA,IACF;AAAA,GACF;AACF;AAEA,SAAS,2BACP,OAAA,EAC6B;AAC7B,EAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AAC3C,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AAEA,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAa,OAAA,CAAQ,SAAS,IAAA,EAAM;AACvD,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,YAAA,GAAeC,oBAAAA,CAAoB,OAAA,CAAQ,YAAY,CAAA;AAE7D,EAAA,IAAI,SAAA;AACJ,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,SAAA,CAAU,IAAA,EAAM,IAAA,EAAK;AAC1C,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,EAAK;AAC5C,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,EAAO;AACnB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,SAAA,GAAY,EAAE,MAAM,KAAA,EAAM;AAAA,EAC5B;AAEA,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,SAAA,EAAW,QAAQ,SAAA,KAAc,IAAA;AAAA,IACjC,aAAA,EAAe,QAAQ,aAAA,KAAkB,IAAA;AAAA,IACzC,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,SAAA;AAAA,IACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,aAAa,OAAA,CAAQ;AAAA,GACvB;AACF;AAEA,SAASA,qBAAoB,KAAA,EAAmC;AAC9D,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,EAAG;AACrC,IAAA,MAAM,SAAS,OAAA,CAAQ,KAAA,CAAM,aAAA,CAAc,MAAM,EAAE,IAAA,EAAK;AACxD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,eAAsB,mBACpB,IAAA,EACuB;AACvB,EAAA,MAAM,QAAA,GAAW,IAAI,kBAAA,CAAmB,IAAI,CAAA;AAC5C,EAAA,OAAO,SAAS,IAAA,EAAK;AACvB;;;AClTO,IAAM,QAAA,GAAN,cAAuB,KAAA,CAAM;AAAA,EAClB,MAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EAEhB,YAAY,MAAA,EAOT;AACD,IAAA,KAAA,CAAM,OAAO,OAAO,CAAA;AACpB,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AACzB,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AACrB,IAAA,IAAA,CAAK,MAAM,MAAA,CAAO,GAAA;AAClB,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AAAA,EACrB;AACF;AAEO,IAAM,aAAN,MAAiB;AAAA,EACtB,WAAA,CACmBC,eACA,OAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,YAAA,GAAAA,aAAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAChB;AAAA,EAEK,UAAA,GAAa;AACnB,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,YAAY,CAAA,MAAA,EAAS,KAAK,OAAO,CAAA,CAAA;AAAA,EAClD;AAAA,EAEQ,cAAc,IAAA,EAAiB;AACrC,IAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,OAAO,CAAA,EAAG,IAAA,CAAK,UAAA,EAAY,IAAI,IAAI,CAAA,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAG;AACtD,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,UAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,YAAA,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,UAC5B;AAAA,QACF,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,QAChC;AAAA,MACF;AACA,MAAA,MAAM,QAAA,GAAW,aAAa,QAAA,EAAS;AACvC,MAAA,OAAO,CAAA,EAAG,IAAA,CAAK,UAAA,EAAY,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAG,QAAA,GAAW,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAAA,IAC3E,CAAA,MAAO;AACL,MAAA,OAAO,GAAG,IAAA,CAAK,UAAA,EAAY,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAc,KAAA,CACZ,IAAA,EACA,MAAA,EACA,KACA,OAAA,EACA;AACA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAE1C,IAAA,MAAM,cAAA,GAA8B;AAAA,MAClC,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,UAAU,GAAG,CAAA,CAAA;AAAA,QAC5B,cAAA,EAAgB,kBAAA;AAAA,QAChB,sBAAsB,YAAA;AAAa;AACrC,KACF;AAEA,IAAA,IAAI,WAAW,KAAA,IAAS,OAAO,IAAA,KAAS,QAAA,IAAY,KAAK,IAAA,EAAM;AAC7D,MAAA,cAAA,CAAe,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAAA,IAChD;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,UAAA,EAAY,cAAc,CAAA;AAEvD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,OAAA,GAAU,OAAA,EAAS,aAAA,IAAiB,EAAC;AAC3C,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,EAAG;AACrC,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI,OAAA;AACJ,MAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AAE5D,MAAA,IAAI;AACF,QAAA,IAAI,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC5C,UAAA,SAAA,GAAY,MAAM,SAAS,IAAA,EAAK;AAAA,QAClC,CAAA,MAAO;AACL,UAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,UAAA,SAAA,GAAY,IAAA;AAAA,QACd;AAAA,MACF,CAAA,CAAA,MAAQ;AAEN,QAAA,IAAI;AACF,UAAA,SAAA,GAAY,MAAM,SAAS,IAAA,EAAK;AAAA,QAClC,CAAA,CAAA,MAAQ;AACN,UAAA,SAAA,GAAY,MAAA;AAAA,QACd;AAAA,MACF;AAEA,MAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AACjC,QAAA,MAAM,OAAA,GAAU,UAAU,IAAA,EAAK;AAC/B,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,GAAU,OAAA;AAAA,QACZ;AAAA,MACF,CAAA,MAAA,IAAW,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AACrD,QAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,SAAA,CAAU,SAAS,CAAA;AAC3D,QAAA,IAAI,YAAY,OAAA,EAAS;AACvB,UAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAC5C,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,OAAA,GAAU,OAAA;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,IAAI,QAAA,CAAS;AAAA,QACjB,OAAA,EACE,OAAA,IACA,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA;AAAA,QAC9F,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,MAAA;AAAA,QACA,GAAA,EAAK,UAAA;AAAA,QACL,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAM,GAAA,CAAI,IAAA,EAAiB,GAAA,EAAa,OAAA,EAA0B;AAChE,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,IAAA,CAAK,IAAA,EAAiB,GAAA,EAAa,OAAA,EAA0B;AACjE,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,KAAK,OAAO,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,GAAA,CAAI,IAAA,EAAiB,GAAA,EAAa,OAAA,EAA0B;AAChE,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,MAAA,CAAO,IAAA,EAAiB,GAAA,EAAa,OAAA,EAA0B;AACnE,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,QAAA,EAAU,KAAK,OAAO,CAAA;AAAA,EAChD;AACF,CAAA;;;AC7JO,SAAS,eAAA,CACd,GACA,CAAA,EACS;AACT,EAAA,MAAM,OAAA,GAAU,OAAO,CAAA,KAAM,QAAA,GAAW,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,OAAO,CAAA,KAAM,QAAA,GAAW,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAEtE,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,OAAA,CAAQ,MAAA,EAAQ,OAAO,KAAA;AAE9C,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,IAAA,MAAA,IAAU,OAAA,CAAQ,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,MAAA,KAAW,CAAA;AACpB;AAEA,eAAsB,oBAAA,GAAuB;AAC3C,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,QAAa,CAAA;AAChD,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,OAAO,UAAA,CAAW,MAAA;AACpB;AAEA,eAAsB,UAAA,CACpB,SAAA,EACA,MAAA,EACA,IAAA,EACiB;AAIjB,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,IAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,EACtC;AAEA,EAAA,MAAMC,OAAAA,GAAS,MAAM,oBAAA,EAAqB;AAC1C,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,EAAA,MAAM,GAAA,GAAM,MAAMA,OAAAA,CAAO,MAAA,CAAO,SAAA;AAAA,IAC9B,KAAA;AAAA,IACA,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,IACrB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,IAChC,KAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,SAAA,GAAY,MAAMA,OAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,GAAA,EAAK,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAC,CAAA;AAC5E,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,UAAA,CAAW,SAAS,CAAC,CAAA,CACxC,IAAI,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACZ;;;ACrCA,IAAM,uBAAA,GAA0B,GAAA;AAMzB,SAAS,qBACd,MAAA,EAC+B;AAC/B,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAI,SAAA,GAAY,EAAA;AAGhB,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AACjC,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,cAAA,GAAiB,QAAQ,IAAA,EAAK;AACpC,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,KAAA,CAAM,GAAA,EAAK,CAAC,CAAA;AACzC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,CAAC,GAAA,EAAK,KAAK,CAAA,GAAI,KAAA;AACrB,IAAA,QAAQ,GAAA;AAAK,MACX,KAAK,GAAA;AACH,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA;AAAA;AACJ,EACF;AAEA,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,EAAW;AAC5B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,EAAE,WAAW,SAAA,EAAU;AAChC;AAyBA,eAAsB,yBACpB,OAAA,EACA,eAAA,EACA,MAAA,EACA,OAAA,GAAoC,EAAC,EACH;AAClC,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAClC,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAGA,EAAA,MAAM,MAAA,GAAS,qBAAqB,eAAe,CAAA;AACnD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,WAAW,EAAE,CAAA;AACtD,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAGA,EAAA,MAAM,MAAA,GAAS,QAAQ,aAAA,IAAiB,uBAAA;AACxC,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACxC,IAAA,MAAM,MAAM,GAAA,GAAM,SAAA;AAElB,IAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,KAAA,EAAO,8BAA8B,GAAG,CAAA,SAAA,CAAA;AAAA,QACxC;AAAA,OACF;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,KAAA,EAAO,oCAAA;AAAA,QACP;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,aACJ,OAAO,OAAA,KAAY,WAAW,OAAA,GAAU,OAAA,CAAQ,SAAS,MAAM,CAAA;AAIjE,EAAA,MAAM,UAAA,GAAa,CAAA,EAAG,MAAA,CAAO,SAAS,IAAI,UAAU,CAAA,CAAA;AACpD,EAAA,MAAM,iBAAA,GAAoB,MAAM,UAAA,CAAW,QAAA,EAAU,QAAQ,UAAU,CAAA;AAGvE,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA;AACpD,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAGjD,EAAA,IAAI,cAAA,CAAe,MAAA,KAAW,YAAA,CAAa,MAAA,EAAQ;AACjD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,mBAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,cAAA,EAAgB,YAAY,CAAA;AACpE,EAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,mBAAA;AAAA,MACP;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAA;AAAA,IACP;AAAA,GACF;AACF;AA6BA,eAAsB,gBACpB,OAAA,EACA,OAAA,EACA,MAAA,EACA,OAAA,GAAoC,EAAC,EACiC;AAEtE,EAAA,MAAM,eAAA,GACJ,OAAA,CAAQ,oBAAoB,CAAA,IAAK,QAAQ,oBAAoB,CAAA;AAC/D,EAAA,IAAI,CAAC,eAAA,IAAmB,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,EAAG;AACtD,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAGA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,gBAAgB,CAAA,IAAK,QAAQ,gBAAgB,CAAA;AACvE,EAAA,IAAI,CAAC,SAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC1C,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAGA,EAAA,MAAM,mBAAmB,MAAM,wBAAA;AAAA,IAC7B,OAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,iBAAiB,KAAA,EAAO;AAC3B,IAAA,OAAO,gBAAA;AAAA,EACT;AAGA,EAAA,MAAM,aACJ,OAAO,OAAA,KAAY,WAAW,OAAA,GAAU,OAAA,CAAQ,SAAS,MAAM,CAAA;AACjE,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI;AACF,IAAA,UAAA,GAAa,IAAA,CAAK,MAAM,UAAU,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAO,sBAAA;AAAA,MACP,WAAW,gBAAA,CAAiB;AAAA,KAC9B;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAA,CAAsB,MAAA,CAAO,SAAS,GAAG,UAAU,CAAA;AACtE,EAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACrB,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,WAAW,gBAAA,CAAiB;AAAA,KAC9B;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAA;AAAA,IACP,SAAA;AAAA,IACA,WAAW,gBAAA,CAAiB,SAAA;AAAA,IAC5B,SAAS,UAAA,CAAW;AAAA,GACtB;AACF;AAEA,SAAS,qBAAA,CACP,WACA,GAAA,EAGkC;AAClC,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,IAAI,CAAC,qBAAA,CAAsB,GAAG,CAAA,EAAG;AAC/B,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA;AAAA,QACP,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS,mBAAmB,GAAG;AAAA,KACjC;AAAA,EACF;AACA,EAAA,MAAM,eAAA,GAAkB,EAAE,IAAA,EAAM,SAAA,EAAW,GAAA,EAAI;AAC/C,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AACF;AAEA,SAAS,mBAAmB,GAAA,EAA4C;AACtE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,EAAA,EAAI,IAAI,UAAA,CAAW,EAAA;AAAA,MACnB,GAAA,EAAK,IAAI,UAAA,CAAW;AAAA,KACtB;AAAA,IACA,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,YAAY,GAAA,CAAI,WAAA;AAAA,IAChB,QAAA,EAAU,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,IAChC,aAAa,GAAA,CAAI;AAAA,GACnB;AACF;AAEA,SAAS,sBAAsB,KAAA,EAA8C;AAC3E,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA,EAAG;AAC/B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OACE,OAAO,KAAA,CAAM,UAAA,CAAW,EAAA,KAAO,QAAA,IAC/B,OAAO,KAAA,CAAM,UAAA,CAAW,GAAA,KAAQ,QAAA,IAChC,OAAO,KAAA,CAAM,GAAA,KAAQ,QAAA,IACrB,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,IACxB,OAAO,KAAA,CAAM,KAAA,KAAU,QAAA,IACvB,OAAO,KAAA,CAAM,WAAA,KAAgB,QAAA,IAC7B,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA;AAE/B;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;;;ACrMA,IAAM,YAAA,GAAe,kCAAA;AACrB,IAAM,gBAAA,GAAmB,sBAAA;AACzB,IAAM,WAAA,GAA+B,CAAA;AAErC,IAAM,cAAA,uBAAqB,GAAA,EAAwB;AACnD,IAAM,4BAA4B,EAAA,GAAK,EAAA;AACvC,IAAM,6BAAA,GAAgC;AAAA,EACpC,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAA;AAEA,IAAM,yBAAA,GAA4B;AAAA,EAChC,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA;AAAA;AACF,CAAA;AAEA,SAAS,2BAAA,CACP,OAAA,EACA,YAAA,GAAuB,yBAAA,EACf;AACR,EAAA,IAAI,OAAO,OAAA,EAAS,GAAA,KAAQ,QAAA,IAAY,OAAA,CAAQ,MAAM,CAAA,EAAG;AACvD,IAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,EACjB;AACA,EAAA,OAAO,YAAA;AACT;AAIA,SAASC,aAAY,MAAA,EAA+C;AAClE,EAAA,OAAO;AAAA,IACL,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,QAAQ,MAAA,CAAO,OAAA;AAAA,IACf,QAAQ,MAAA,CAAO;AAAA,GACjB;AACF;AAEA,SAAS,yBAAyB,GAAA,EAA4C;AAC5E,EAAA,MAAM,SAAA,GAAYA,YAAAA,CAAY,GAAA,CAAI,MAAM,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,CAAO,OAAA,EAAS;AACvB,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,IAAI,MAAA,CAAO,OAAA,IACT,CAAA,kCAAA,EAAqC,GAAA,CAAI,OAAO,MAAM,CAAA,CAAA;AAAA,MACxD;AAAA,QACE,MAAA,EAAQ,IAAI,MAAA,CAAO,MAAA;AAAA,QACnB,OAAA,EAAS,IAAI,MAAA,CAAO,OAAA;AAAA,QACpB;AAAA;AACF,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,IAAI,MAAA,CAAO,UAAA;AAAA,IACtB,OAAA,EAAS,IAAI,MAAA,CAAO,QAAA;AAAA,IACpB,YAAA,EAAc,IAAI,MAAA,CAAO,aAAA;AAAA,IACzB,SAAA,EAAW,IAAI,MAAA,CAAO,UAAA;AAAA,IACtB;AAAA,GACF;AACF;AAQA,SAAS,kBAAA,CACP,MAAA,EACA,MAAA,EACA,MAAA,EACgC;AAChC,EAAA,MAAM,YAAgC,EAAC;AACvC,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,IAAA,OAAW,EAAA,EAAI;AACtD,IAAA,SAAA,CAAU,MAAA,GAAS,MAAA;AAAA,EACrB;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,GAAS,IAAI,SAAA,GAAY,MAAA;AACzD;AAEA,SAAS,0BACP,OAAA,EAC0E;AAC1E,EAAA,MAAM,GAAA,GAAM,sBAAA,CAAuB,SAAA,CAAU,OAAO,CAAA;AACpD,EAAA,IAAI,IAAI,OAAA,EAAS;AACf,IAAA,OAAO,EAAE,GAAA,EAAK,GAAA,CAAI,IAAA,EAAK;AAAA,EACzB;AAEA,EAAA,MAAM,OAAA,GAAU,2BAAA,CAA4B,SAAA,CAAU,OAAO,CAAA;AAC7D,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,MAAA;AAC5B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,SAAA,EAAW,kBAAA;AAAA,UACT,MAAA,CAAO,MAAA;AAAA,UACP,MAAA,CAAO,OAAA;AAAA,UACP,MAAA,CAAO;AAAA;AACT;AACF,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,0BAA0B,MAAA,EAAwB;AACzD,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,GAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,qBAAA;AAAA,IACT;AACE,MAAA,OAAO,GAAG,MAAM,CAAA,CAAA;AAAA;AAEtB;AAEA,SAAS,cAAA,CAAe,SAAiB,OAAA,EAA0B;AACjE,EAAA,IAAI,CAAC,eAAe,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,OAAO,EAAE,CAAA,EAAG;AACjD,IAAA,cAAA,CAAe,GAAA;AAAA,MACb,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAA;AAAA,MACtB,IAAI,UAAA,CAAW,OAAA,EAAS,OAAO;AAAA,KACjC;AAAA,EACF;AACA,EAAA,OAAO,eAAe,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AACpD;AAEA,SAAS,oBAAoB,GAAA,EAAgC;AAC3D,EAAA,OAAO;AAAA,IACL,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,SAAS,GAAA,CAAI,QAAA;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,GACjB;AACF;AAEA,SAAS,4BACP,GAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,mBAAmB,CAAA;AAAA,IAC9C,UAAA,EAAY,IAAI,WAAA,IAAe,MAAA;AAAA,IAC/B,SAAS,GAAA,CAAI;AAAA,GACf;AACF;AAEA,SAAS,oBAAoB,GAAA,EAAgC;AAC3D,EAAA,MAAM,UAAA,GAAa,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACpC,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,YAAY,GAAA,CAAI,WAAA;AAAA,IAChB,aAAa,GAAA,CAAI,YAAA;AAAA,IACjB,eAAe,GAAA,CAAI,cAAA;AAAA,IACnB,gBAAgB,GAAA,CAAI,eAAA;AAAA,IACpB,IAAA,EAAM,UAAA;AAAA,IACN,SAAS,GAAA,CAAI;AAAA,GACf;AACF;AAEA,SAAS,2BACP,GAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAAA,IAC5C,UAAA,EAAY,IAAI,WAAA,IAAe,MAAA;AAAA,IAC/B,SAAS,GAAA,CAAI;AAAA,GACf;AACF;AAEA,SAAS,0BAA0B,GAAA,EAA4C;AAC7E,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,eAAe,GAAA,CAAI;AAAA,GACrB;AACF;AAEA,SAAS,wBAAwB,GAAA,EAAwC;AACvE,EAAA,OAAO;AAAA,IACL,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,IAAA,EAAM,IAAI,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AAAA,IACvB,SAAS,GAAA,CAAI,IAAA;AAAA,IACb,SAAS,GAAA,CAAI;AAAA,GACf;AACF;AAEA,SAAS,qCACP,GAAA,EAC6B;AAC7B,EAAA,MAAM,UAA0C,EAAC;AACjD,EAAA,KAAA,MAAW,CAAC,KAAK,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACvD,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,uBAAA,CAAwB,MAAM,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,yBAAyB,CAAA;AAAA,IAC9C,OAAA;AAAA,IACA,KAAK,GAAA,CAAI;AAAA,GACX;AACF;AAEA,SAAS,mBAAmB,QAAA,EAAiC;AAC3D,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAU,QAAA,CAAS,IAAA,EAAK,CAAE,CAAC,GAAG,WAAA,EAAY;AAChD,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,GAAA;AACH,MAAA,OAAO,OAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,cAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,UAAA;AAAA,IACT;AACE,MAAA,OAAO,SAAA;AAAA;AAEb;AAEA,SAAS,kBAAkB,GAAA,EAA4B;AACrD,EAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,GAAA,CAAI,KAAK,CAAA;AACpD,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,KAAA,EAAO,eAAA;AAAA,IACP,UAAU,GAAA,CAAI,KAAA;AAAA,IACd,OAAA,EAAS,IAAI,QAAA,IAAY,MAAA;AAAA,IACzB,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAO,GAAA,CAAI,MAAA;AAAA,IACX,SAAA,EAAW,IAAI,SAAA,IAAa,CAAA;AAAA,IAC5B,SAAA,EAAW,IAAI,SAAA,IAAa;AAAA,GAC9B;AACF;AAEA,SAAS,sBAAsB,GAAA,EAAoC;AACjE,EAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,GAAA,CAAI,KAAK,CAAA;AACpD,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,KAAA,EAAO,eAAA;AAAA,IACP,UAAU,GAAA,CAAI,KAAA;AAAA,IACd,OAAA,EAAS,IAAI,QAAA,IAAY,MAAA;AAAA,IACzB,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,OAAO,GAAA,CAAI;AAAA,GACb;AACF;AAEA,SAAS,0BACP,GAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,iBAAiB,CAAA;AAAA,IACtC,aAAA,EAAe,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,qBAAqB;AAAA,GAC7D;AACF;AAEA,SAAS,0BACP,GAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,iBAAiB,CAAA;AAAA,IACtC,aAAA,EAAe,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,qBAAqB;AAAA,GAC7D;AACF;AAEA,SAAS,4BACP,GAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,cAAc,GAAA,CAAI,aAAA;AAAA,IAClB,mBAAmB,GAAA,CAAI,mBAAA;AAAA,IACvB,SAAA,EAAW,IAAI,UAAA,IAAc;AAAA,GAC/B;AACF;AAEA,SAAS,yBAAyB,GAAA,EAAyC;AACzE,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAC9B,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,eAAe,IAAA,CAAK,cAAA;AAAA,MACpB,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,QAAA,EAAU,KAAK,SAAA,GACX;AAAA,QACE,QAAA,EAAU,KAAK,SAAA,CAAU,QAAA;AAAA,QACzB,KAAA,EAAO,KAAK,SAAA,CAAU,KAAA;AAAA,QACtB,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,OACvB,GACA;AAAA,KACN,CAAE,CAAA;AAAA,IACF,UAAA,EAAY,IAAI,WAAA,IAAe,MAAA;AAAA,IAC/B,SAAS,GAAA,CAAI;AAAA,GACf;AACF;AAEA,SAAS,kBAAkB,GAAA,EAId;AACX,EAAA,OAAO;AAAA,IACL,YAAY,GAAA,CAAI,WAAA;AAAA,IAChB,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAM,GAAA,CAAI;AAAA,GACZ;AACF;AAEA,SAAS,uBAAuB,GAAA,EAGd;AAChB,EAAA,OAAO;AAAA,IACL,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,KAAA,EAAO,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,iBAAiB;AAAA,GACxC;AACF;AAEA,SAAS,wBAAwB,GAAA,EAIf;AAChB,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,QAAQ,GAAA,CAAI;AAAA,GACd;AACF;AAEA,SAAS,yBAAyB,GAAA,EAMd;AAClB,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,CAAI,GAAA;AAAA,IACT,WAAW,GAAA,CAAI,UAAA;AAAA,IACf,YAAY,GAAA,CAAI,WAAA;AAAA,IAChB,WAAW,GAAA,CAAI,WAAA;AAAA,IACf,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,IAAI,MAAA,CAAO,OAAA;AAAA,MACpB,MAAA,EAAQ,IAAI,MAAA,CAAO,MAAA;AAAA,MACnB,OAAA,EAAS,IAAI,MAAA,CAAO;AAAA;AACtB,GACF;AACF;AAEA,SAAS,kBAAA,CACP,GAAA,EACA,IAAA,EACA,MAAA,EACA,OAAA,EACyB;AACzB,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,GAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,cAAA,EAAgB,IAAA,EAAK;AACpD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,IAAA,CAAK,gBAAA,GAAmB,cAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,IAAA,EAAK;AAC7C,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,IAAA,EAAK;AAC/C,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,EAAa;AAC/B,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IACzE;AACA,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,IAAA,EAAM,UAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,sBAAA,CACb,UACA,MAAA,EAC0B;AAC1B,EAAA,IAAI,QAAA;AACJ,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AAC5D,EAAA,IAAI;AACF,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC5C,MAAA,QAAA,GAAW,MAAM,SAAS,IAAA,EAAK;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,MAAM,SAAS,IAAA,EAAK;AAAA,IACjC;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,QAAA,GAAW,MAAA;AAAA,EACb;AAEA,EAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,IAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,SAAA,CAAU,QAAQ,CAAA;AACzD,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAO,wBAAA,CAAyB,OAAO,IAAI,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,SAAA,CAAU,QAAQ,CAAA;AAC1D,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,MAAM,IAAI,QAAA,CAAS;AAAA,QACjB,OAAA,EAAS,YAAY,IAAA,CAAK,KAAA;AAAA,QAC1B,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,MAAA;AAAA,QACA,KAAK,QAAA,CAAS,GAAA;AAAA,QACd,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GACJ,OAAO,QAAA,KAAa,QAAA,IAAY,SAAS,IAAA,EAAK,KAAM,KAChD,QAAA,CAAS,IAAA,KACT,CAAA,QAAA,EAAW,MAAM,IAAI,QAAA,CAAS,GAAG,uBAAuB,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA;AAEpG,EAAA,MAAM,IAAI,QAAA,CAAS;AAAA,IACjB,OAAA,EAAS,eAAA;AAAA,IACT,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,MAAA;AAAA,IACA,KAAK,QAAA,CAAS,GAAA;AAAA,IACd,IAAA,EAAM;AAAA,GACP,CAAA;AACH;AAKA,IAAM,WAAN,MAA+B;AAAA,EAG7B,WAAA,CACkB,EAAA,EACA,aAAA,EACA,SAAA,EACC,SACA,WAAA,EAIjB;AARgB,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACC,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAKjB,IAAA,IAAA,CAAK,GAAA,GAAM,cAAA;AAAA,MACT,KAAK,OAAA,CAAQ,UAAA,IAAc,UAAA,CAAW,oBAAA,CAAqB,QAAQ,IAAI,CAAA;AAAA,MACvE,IAAA,CAAK,QAAQ,UAAA,IAAc;AAAA,KAC7B;AAAA,EACF;AAAA,EAhBiB,GAAA;AAAA,EAkBjB,MAAM,aAAa,UAAA,EAAmD;AACpE,IAAA,MAAM,MAAM,IAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,OAAA,CAAQ,cAAc,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,IAAA;AAAA,KACnD;AACA,IAAA,GAAA,CAAI,QAAA,GAAW,CAAA,CAAA,CAAA;AACf,IAAA,GAAA,CAAI,WAAW,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,UAAU,CAAA;AACzD,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB;AAAA,EAEA,MAAM,sBACJ,UAAA,EACiB;AACjB,IAAA,MAAM,MAAM,IAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,OAAA,CAAQ,cAAc,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,cAAA;AAAA,KACnD;AACA,IAAA,GAAA,CAAI,QAAA,GAAW,CAAA,CAAA,CAAA;AACf,IAAA,GAAA,CAAI,WAAW,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,UAAU,CAAA;AACzD,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB;AAAA,EAEA,MAAM,mBAAmB,UAAA,EAAmD;AAC1E,IAAA,MAAM,MAAM,IAAI,GAAA;AAAA,MACd,WAAW,IAAA,CAAK,OAAA,CAAQ,cAAc,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,WAAA;AAAA,KACnD;AACA,IAAA,GAAA,CAAI,QAAA,GAAW,CAAA,CAAA,CAAA;AACf,IAAA,GAAA,CAAI,WAAW,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,UAAU,CAAA;AACzD,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB;AAAA,EAEA,MAAM,cAAc,OAAA,EAA4C;AAC9D,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,MAAA,GAAiC;AAAA,MACrC,MAAM,OAAA,CAAQ;AAAA,KAChB;AAEA,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,MAAA,CAAO,MAAM,OAAA,CAAQ,GAAA;AAAA,IACvB;AACA,IAAA,IAAI,OAAO,OAAA,CAAQ,SAAA,KAAc,SAAA,EAAW;AAC1C,MAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,OAAO,OAAA,CAAQ,aAAA,KAAkB,SAAA,EAAW;AAC9C,MAAA,MAAA,CAAO,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA;AAAA,IACtD;AAGA,IAAA,OAAO,IAAA,CAAK,IAAI,GAAA,CAAI,EAAE,MAAM,YAAA,EAAc,MAAA,IAAU,GAAG,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,gBAAA,CAAiB,OAAA,GAA0B,EAAC,EAAsB;AACtE,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,OAAgC,EAAC;AACvC,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,EAAK,IAAA,EAAK;AAC9B,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,IACb;AACA,IAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,CAAQ,YAAY,KAAK,OAAA,CAAQ,YAAA,CAAa,SAAS,CAAA,EAAG;AAC1E,MAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,YAAA;AAAA,IAC/B;AACA,IAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,CAAQ,YAAY,KAAK,OAAA,CAAQ,YAAA,CAAa,SAAS,CAAA,EAAG;AAC1E,MAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,YAAA;AAAA,IAC/B;AACA,IAAA,IAAI,OAAO,QAAQ,WAAA,KAAgB,QAAA,IAAY,OAAO,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA,EAAG;AACnF,MAAA,IAAA,CAAK,gBAAgB,OAAA,CAAQ,WAAA;AAAA,IAC/B;AACA,IAAA,IAAI,OAAO,OAAA,CAAQ,aAAA,KAAkB,QAAA,EAAU;AAC7C,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,aAAA,CAAc,IAAA,EAAK;AAC1C,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAA,CAAK,OAAA,GAAU,EAAE,MAAA,EAAO;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GACJ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAK,GAAI,eAAA;AAEnE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,UAAU,OAAA,EAAsD;AACpE,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,MAAM,OAAA,CAAQ,GAAA;AAAA,IACvB;AACA,IAAA,IAAI,OAAO,OAAA,EAAS,SAAA,KAAc,SAAA,EAAW;AAC3C,MAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA;AAAA,MAC9B;AAAA,QACE,IAAA,EAAM,aAAA;AAAA,QACN,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,SAAS,MAAA,GAAS;AAAA,OAChD;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,MAAM,uBAAA,CAAwB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAC/D,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,EAAO,GAAA,EAAK,IAAI,GAAA,EAAI;AAAA,EAC1C;AAAA,EAEA,MAAM,sBACJ,OAAA,EACsC;AACtC,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,IAAI,SAAS,GAAA,EAAK;AAChB,MAAA,MAAA,CAAO,MAAM,OAAA,CAAQ,GAAA;AAAA,IACvB;AACA,IAAA,IAAI,OAAO,OAAA,EAAS,SAAA,KAAc,SAAA,EAAW;AAC3C,MAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA;AAAA,MAC9B;AAAA,QACE,IAAA,EAAM,sBAAA;AAAA,QACN,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,SAAS,MAAA,GAAS;AAAA,OAChD;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,MAAM,mCAAA,CAAoC,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAC3E,IAAA,OAAO,qCAAqC,GAAG,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,aACJ,OAAA,EAC6B;AAC7B,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,SAAS,OAAA,EAAS,MAAA;AACxB,IAAA,MAAM,QAAQ,OAAA,EAAS,KAAA;AAEvB,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,UAAU,QAAA,EAAU;AAC3D,MAAA,MAAA,GAAS,EAAC;AACV,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,MAAA,CAAO,MAAA,GAAS,MAAA;AAAA,MAClB;AACA,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,MAAA,CAAO,KAAA,GAAQ,MAAM,QAAA,EAAS;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,gBAAA,EAAkB,MAAA,EAAO;AAAA,MACjC;AAAA,KACF;AAEA,IAAA,MAAM,MAAM,0BAAA,CAA2B,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAClE,IAAA,OAAO,2BAAA,CAA4B;AAAA,MACjC,GAAG,GAAA;AAAA,MACH,WAAA,EAAa,IAAI,WAAA,IAAe;AAAA,KACjC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAAA,EAA0D;AAC1E,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,IAAI,MAAA;AAEJ,IAAA,IAAI,OAAA,EAAS,MAAA,IAAU,OAAA,EAAS,MAAA,IAAU,SAAS,KAAA,EAAO;AACxD,MAAA,MAAA,GAAS,EAAC;AACV,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,MAC1B;AACA,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,MAC1B;AACA,MAAA,IAAI,OAAO,OAAA,EAAS,KAAA,IAAS,QAAA,EAAU;AACrC,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,QAAA,EAAS;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAA,EAAO,EAAG,GAAG,CAAA;AAE1E,IAAA,MAAM,MAAM,yBAAA,CAA0B,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AACjE,IAAA,OAAO,0BAAA,CAA2B;AAAA,MAChC,GAAG,GAAA;AAAA,MACH,WAAA,EAAa,IAAI,WAAA,IAAe;AAAA,KACjC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,OAAA,EAAiD;AAC7D,IAAA,MAAM,GAAA,GAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAK;AAC/B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,aAAA,EAAe,MAAA,EAAQ,EAAE,KAAI,EAAE;AAAA,MACvC;AAAA,KACF;AACA,IAAA,MAAM,MAAM,sBAAA,CAAuB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAC9D,IAAA,OAAO,wBAAwB,GAAG,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,WAAW,OAAA,EAAsD;AACrE,IAAA,MAAM,GAAA,GAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAK;AAC/B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,IAAA,GAAO,OAAA,EAAS,IAAA,EAAM,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO;AAAA,MAChD,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,QAAQ,OAAA,CAAQ;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK,EAAG,GAAA,EAAK;AAAA,MACvE,aAAA,EAAe,CAAC,GAAG,yBAAyB;AAAA,KAC7C,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,sBAAA,CAAuB,QAAA,EAAU,MAAM,CAAA;AAC5D,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS;AAC1B,MAAA,MAAM,IAAI,cAAA;AAAA,QACR,OAAO,MAAA,CAAO,OAAA,IACZ,CAAA,8BAAA,EAAiC,MAAA,CAAO,OAAO,MAAM,CAAA,CAAA;AAAA,QACvD;AAAA,UACE,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,UACtB,OAAA,EAAS,OAAO,MAAA,CAAO,OAAA;AAAA,UACvB,SAAA,EAAW,kBAAA;AAAA,YACT,MAAA,CAAO,SAAA;AAAA,YACP,MAAA,CAAO,UAAA;AAAA,YACP,MAAA,CAAO;AAAA;AACT;AACF,OACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,OAAA,EAAsD;AACrE,IAAA,MAAM,GAAA,GAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAK;AAC/B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,IAAA,GAAO,OAAA,EAAS,IAAA,EAAM,IAAA,EAAK;AACjC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,GAAA,EAAK,IAAA,EAAM,QAAA,EAAU;AAAA,MACnD,gBAAgB,OAAA,CAAQ,cAAA;AAAA,MACxB,QAAQ,OAAA,CAAQ;AAAA,KACjB,CAAA;AAED,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK,EAAG,GAAA,EAAK;AAAA,MACvE,aAAA,EAAe,CAAC,GAAG,yBAAyB;AAAA,KAC7C,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,sBAAA,CAAuB,QAAA,EAAU,MAAM,CAAA;AAC5D,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS;AAC1B,MAAA,MAAM,IAAI,cAAA;AAAA,QACR,OAAO,MAAA,CAAO,OAAA,IACZ,CAAA,8BAAA,EAAiC,MAAA,CAAO,OAAO,MAAM,CAAA,CAAA;AAAA,QACvD;AAAA,UACE,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,UACtB,OAAA,EAAS,OAAO,MAAA,CAAO,OAAA;AAAA,UACvB,SAAA,EAAW,kBAAA;AAAA,YACT,MAAA,CAAO,SAAA;AAAA,YACP,MAAA,CAAO,UAAA;AAAA,YACP,MAAA,CAAO;AAAA;AACT;AACF,OACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,OAAA,EAAsD;AACrE,IAAA,MAAM,GAAA,GAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAK;AAC/B,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC;AAAA,KACF;AAEA,IAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,cAAA,EAAgB,IAAA,EAAK;AACpD,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,IAAA,CAAK,gBAAA,GAAmB,cAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAM,IAAA,EAAK;AAC7C,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,IAAA,EAAK;AAC/C,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,EAAa;AAC/B,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,IAAA,EAAM,UAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAK,EAAG,GAAA,EAAK;AAAA,MACzE,aAAA,EAAe,CAAC,GAAG,yBAAyB;AAAA,KAC7C,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,MAAM,sBAAA,CAAuB,QAAA,EAAU,QAAQ,CAAA;AAC9D,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS;AAC1B,MAAA,MAAM,IAAI,cAAA;AAAA,QACR,OAAO,MAAA,CAAO,OAAA,IACZ,CAAA,8BAAA,EAAiC,MAAA,CAAO,OAAO,MAAM,CAAA,CAAA;AAAA,QACvD;AAAA,UACE,MAAA,EAAQ,OAAO,MAAA,CAAO,MAAA;AAAA,UACtB,OAAA,EAAS,OAAO,MAAA,CAAO,OAAA;AAAA,UACvB,SAAA,EAAW,kBAAA;AAAA,YACT,MAAA,CAAO,SAAA;AAAA,YACP,MAAA,CAAO,UAAA;AAAA,YACP,MAAA,CAAO;AAAA;AACT;AACF,OACF;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,cACJ,OAAA,EAC8B;AAC9B,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,MAAA,GAA4C;AAAA,MAChD,QAAQ,OAAA,CAAQ;AAAA,KAClB;AAEA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,MAAA,CAAO,OAAO,OAAA,CAAQ,IAAA;AAAA,IACxB;AACA,IAAA,IAAI,OAAO,OAAA,CAAQ,SAAA,KAAc,SAAA,EAAW;AAC1C,MAAA,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,IAC7C;AACA,IAAA,IAAI,OAAO,OAAA,CAAQ,aAAA,KAAkB,SAAA,EAAW;AAC9C,MAAA,MAAA,CAAO,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA;AAAA,IACtD;AACA,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC7C,MAAA,MAAA,CAAO,OAAO,OAAA,CAAQ,KAAA;AAAA,IACxB;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,qBAAA,EAAuB,MAAA,EAAO;AAAA,MACtC;AAAA,KACF;AAEA,IAAA,MAAM,MAAM,wBAAA,CAAyB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAChE,IAAA,OAAO,0BAA0B,GAAG,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,cACJ,OAAA,EAC8B;AAC9B,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,MAAA,GAA4C;AAAA,MAChD,KAAK,OAAA,CAAQ;AAAA,KACf;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,UAAU,OAAA,CAAQ,OAAA;AAAA,IAC3B;AACA,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC7C,MAAA,MAAA,CAAO,OAAO,OAAA,CAAQ,KAAA;AAAA,IACxB;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAE,IAAA,EAAM,YAAA,EAAc,MAAA,EAAO,EAAG,GAAG,CAAA;AAEvE,IAAA,MAAM,MAAM,wBAAA,CAAyB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAChE,IAAA,OAAO,0BAA0B,GAAG,CAAA;AAAA,EACtC;AAAA,EAEA,MAAM,KAAK,OAAA,EAA2C;AACpD,IAAA,MAAM,OAAA,GAAU,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,IAAA,EAAK;AAC9C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,KAAA,EAAO;AAAA,QACL,OAAA;AAAA,QACA,GAAI,OAAO,OAAA,CAAQ,KAAA,CAAM,aAAA,KAAkB,SAAA,GACvC,EAAE,cAAA,EAAgB,OAAA,CAAQ,KAAA,CAAM,aAAA,EAAc,GAC9C;AAAC;AACP,KACF;AAEA,IAAA,MAAM,MAAM,OAAA,CAAQ,GAAA,EAAK,MAAK,IAAK,OAAA,CAAQ,KAAK,IAAA,EAAK;AACrD,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,IACb;AACA,IAAA,IAAI,KAAA,CAAM,QAAQ,OAAA,CAAQ,KAAK,KAAK,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5D,MAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AAAA,IACvB;AACA,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,IAAA,CAAK,YAAA,GAAe;AAAA,QAClB,GAAI,OAAA,CAAQ,WAAA,CAAY,YAAA,GACpB,EAAE,eAAe,OAAA,CAAQ,WAAA,CAAY,YAAA,EAAa,GAClD,EAAC;AAAA,QACL,GAAI,OAAA,CAAQ,WAAA,CAAY,YAAA,GACpB,EAAE,eAAe,OAAA,CAAQ,WAAA,CAAY,YAAA,EAAa,GAClD,EAAC;AAAA,QACL,GAAI,OAAA,CAAQ,WAAA,CAAY,gBAAA,GACpB,EAAE,mBAAmB,OAAA,CAAQ,WAAA,CAAY,gBAAA,EAAiB,GAC1D;AAAC,OACP;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,IAAA,CAAK,OAAA,GAAU;AAAA,QACb,GAAI,OAAO,OAAA,CAAQ,OAAA,CAAQ,MAAA,KAAW,QAAA,GAClC,EAAE,MAAA,EAAQ,OAAA,CAAQ,OAAA,CAAQ,MAAA,EAAO,GACjC,EAAC;AAAA,QACL,GAAI,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,KAAU,QAAA,GACjC,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAM,GAC/B;AAAC,OACP;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,MAAA,GAAS;AAAA,QACZ,GAAI,OAAO,OAAA,CAAQ,MAAA,CAAO,QAAA,KAAa,QAAA,GACnC,EAAE,SAAA,EAAW,OAAA,CAAQ,MAAA,CAAO,QAAA,EAAS,GACrC,EAAC;AAAA,QACL,GAAI,OAAO,OAAA,CAAQ,MAAA,CAAO,iBAAA,KAAsB,QAAA,GAC5C,EAAE,oBAAA,EAAsB,OAAA,CAAQ,MAAA,CAAO,iBAAA,EAAkB,GACzD;AAAC,OACP;AAAA,IACF;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,IAAA,CAAK,UAAA,GAAa;AAAA,QAChB,GAAI,OAAO,OAAA,CAAQ,WAAW,MAAA,KAAW,QAAA,IACzC,QAAQ,UAAA,CAAW,MAAA,CAAO,IAAA,EAAK,KAAM,KACjC,EAAE,MAAA,EAAQ,QAAQ,UAAA,CAAW,MAAA,KAC7B,EAAC;AAAA,QACL,GAAI,OAAO,OAAA,CAAQ,UAAA,CAAW,KAAA,KAAU,QAAA,GACpC,EAAE,KAAA,EAAO,OAAA,CAAQ,UAAA,CAAW,KAAA,EAAM,GAClC;AAAC,OACP;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAK,EAAG,GAAG,CAAA;AACtE,IAAA,MAAM,MAAM,kBAAA,CAAmB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAE1D,IAAA,OAAO;AAAA,MACL,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,IAAI,KAAA,CAAM,OAAA;AAAA,QACnB,aAAA,EAAe,IAAI,KAAA,CAAM;AAAA,OAC3B;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,GAAA,EAAK,IAAI,IAAA,CAAK,GAAA;AAAA,QACd,MAAA,EAAQ,IAAI,IAAA,CAAK;AAAA,OACnB;AAAA,MACA,OAAA,EAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,sBAAsB,CAAA;AAAA,MAC/C,UAAA,EAAY,IAAI,WAAA,IAAe,MAAA;AAAA,MAC/B,SAAS,GAAA,CAAI;AAAA,KACf;AAAA,EACF;AAAA,EAEA,MAAM,YAAA,CAAa,OAAA,GAA+B,EAAC,EAAkB;AACnE,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,OAA+B,EAAC;AAEtC,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,IAAA,CAAK,MAAM,OAAA,CAAQ,GAAA;AAAA,IACrB;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,qBAAA,EAAuB,IAAA,EAAK;AAAA,MACpC;AAAA,KACF;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,yBAAyB,QAAA,CAAS,MAAM,IAAI,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,OACnE;AAAA,IACF;AAEA,IAAA;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,OAAA,EAC6B;AAC7B,IAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,EAAY,IAAA,EAAK;AAC7C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,YAAA,GAAe,OAAA,EAAS,YAAA,EAAc,IAAA,EAAK;AACjD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AAEA,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,WAAA,EAAa,UAAA;AAAA,MACb,aAAA,EAAe;AAAA,KACjB;AAEA,IAAA,IAAI,OAAA,CAAQ,oBAAoB,IAAA,EAAM;AACpC,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AAAA,IAC3B;AACA,IAAA,IAAI,OAAA,CAAQ,sBAAsB,IAAA,EAAM;AACtC,MAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAA,EAAK;AAAA,MACtC;AAAA,KACF;AACA,IAAA,MAAM,MAAM,0BAAA,CAA2B,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAClE,IAAA,OAAO,4BAA4B,GAAG,CAAA;AAAA,EACxC;AAAA,EAEA,MAAM,cACJ,OAAA,EAC8B;AAC9B,IAAA,MAAM,YAAA,GAAe,OAAA,EAAS,YAAA,EAAc,IAAA,EAAK;AACjD,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,YAAA,CAAa,UAAA,CAAW,OAAO,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAK;AACvD,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC7D;AACA,IAAA,MAAM,aAAA,GAAgB,OAAA,EAAS,aAAA,EAAe,IAAA,EAAK;AAEnD,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAK;AAC9C,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAK;AAChD,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,WAAA,EAAa;AAC/B,MAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,IACpE;AAEA,IAAA,MAAM,GAAA,GAAM,wBAAwB,OAAO,CAAA;AAC3C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MAC1C,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,QAAA,GAAoC;AAAA,MACxC,aAAA,EAAe,YAAA;AAAA,MACf,iBAAA,EAAmB,eAAA;AAAA,MACnB,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,KAAA,EAAO;AAAA;AACT,KACF;AAEA,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,QAAA,CAAS,cAAA,GAAiB,aAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,eAAA,EAAiB,IAAA,EAAK;AACtD,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,QAAA,CAAS,iBAAA,GAAoB,eAAA;AAAA,IAC/B;AAEA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,SAAA,CAAU,IAAA,EAAM,IAAA,EAAK;AACnD,MAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,IAAA,EAAK;AACrD,MAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,cAAA,EAAgB;AACrC,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,QAAA,CAAS,SAAA,GAAY;AAAA,QACnB,IAAA,EAAM,aAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,sBAAA,EAAwB,IAAA,EAAM,EAAE,UAAS,EAAE;AAAA,MACnD,GAAA;AAAA,MACA;AAAA,QACE,aAAA,EAAe,CAAC,GAAG,6BAA6B;AAAA;AAClD,KACF;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,EAAK;AACpC,IAAA,MAAM,MAAA,GAAS,0BAA0B,OAAO,CAAA;AAChD,IAAA,IAAI,MAAA,IAAU,SAAS,MAAA,EAAQ;AAC7B,MAAA,OAAO,wBAAA,CAAyB,OAAO,GAAG,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,OAAA,GAAU,MAAA,IAAU,SAAA,IAAa,MAAA,GAAS,OAAO,OAAA,GAAU,MAAA;AACjE,IAAA,MAAM,MAAA,GACJ,OAAA,EAAS,MAAA,IAAU,yBAAA,CAA0B,SAAS,MAAM,CAAA;AAC9D,IAAA,MAAM,OAAA,GACJ,OAAA,EAAS,OAAA,IACT,CAAA,gCAAA,EAAmC,QAAA,CAAS,MAAM,CAAA,CAAA,IAC/C,QAAA,CAAS,UAAA,GAAa,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAA,GAAK,EAAA,CAAA;AAEvD,IAAA,MAAM,IAAI,eAAe,OAAA,EAAS;AAAA,MAChC,MAAA;AAAA,MACA,WAAW,OAAA,EAAS;AAAA,KACrB,CAAA;AAAA,EACH;AAAA,EAEA,aAAa,OAAA,EAA6C;AACxD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,UAAA,IAAc,WAAA;AAC3C,IAAA,MAAM,OAAA,GACJ,KAAK,OAAA,CAAQ,UAAA,IACb,WAAW,oBAAA,CAAqB,IAAA,CAAK,QAAQ,IAAI,CAAA;AACnD,IAAA,MAAM,YAAY,IAAI,oBAAA,CAAqB,EAAE,OAAA,EAAS,SAAS,CAAA;AAC/D,IAAA,MAAM,GAAA,GAAM,wBAAwB,OAAO,CAAA;AAC3C,IAAA,MAAM,cAAA,GAAsC;AAAA,MAC1C,GAAG,OAAA;AAAA,MACH;AAAA,KACF;AACA,IAAA,MAAM,YAAA,GAAe,MACnB,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MACxB,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAEH,IAAA,OAAO,mBAAA,CAAoB;AAAA,MACzB,OAAA,EAAS,cAAA;AAAA,MACT,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,qBACJ,OAAA,EACuB;AACvB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,UAAA,IAAc,WAAA;AAC3C,IAAA,MAAM,OAAA,GACJ,KAAK,OAAA,CAAQ,UAAA,IACb,WAAW,oBAAA,CAAqB,IAAA,CAAK,QAAQ,IAAI,CAAA;AACnD,IAAA,MAAM,YAAY,IAAI,wBAAA,CAAyB,EAAE,OAAA,EAAS,SAAS,CAAA;AACnE,IAAA,MAAM,GAAA,GAAM,wBAAwB,OAAO,CAAA;AAC3C,IAAA,MAAM,cAAA,GAA8C;AAAA,MAClD,GAAG,OAAA;AAAA,MACH;AAAA,KACF;AACA,IAAA,MAAM,YAAA,GAAe,MACnB,IAAA,CAAK,WAAA,CAAY,KAAK,EAAA,EAAI;AAAA,MACxB,WAAA,EAAa,CAAC,WAAW,CAAA;AAAA,MACzB;AAAA,KACD,CAAA;AAEH,IAAA,OAAO,kBAAA,CAAmB;AAAA,MACxB,OAAA,EAAS,cAAA;AAAA,MACT,YAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAA;AAEO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA,EACd,OAAA;AAAA,EACA,GAAA;AAAA,EAER,YAAY,OAAA,EAA4B;AACtC,IAAA,IACE,CAAC,OAAA,IACD,OAAA,CAAQ,IAAA,KAAS,MAAA,IACjB,OAAA,CAAQ,GAAA,KAAQ,MAAA,IAChB,OAAA,CAAQ,IAAA,KAAS,IAAA,IACjB,OAAA,CAAQ,QAAQ,IAAA,EAChB;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,QAAQ,IAAA,KAAS,QAAA,IAAY,QAAQ,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAClE,MAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,IAC/D;AAEA,IAAA,IAAI,OAAO,QAAQ,GAAA,KAAQ,QAAA,IAAY,QAAQ,GAAA,CAAI,IAAA,OAAW,EAAA,EAAI;AAChE,MAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,qBACJ,OAAA,CAAQ,UAAA,IAAc,WAAA,CAAW,oBAAA,CAAqB,QAAQ,IAAI,CAAA;AACpE,IAAA,MAAM,kBAAA,GAAqB,QAAQ,UAAA,IAAc,WAAA;AACjD,IAAA,MAAM,yBACJ,OAAA,CAAQ,cAAA,IACR,WAAA,CAAW,wBAAA,CAAyB,QAAQ,IAAI,CAAA;AAClD,IAAA,MAAM,qBAAqB,OAAA,CAAQ,UAAA;AAEnC,IAAA,IAAA,CAAK,GAAA,GAAM,cAAA,CAAe,kBAAA,EAAoB,kBAAkB,CAAA;AAEhE,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,UAAA,EAAY,kBAAA;AAAA,MACZ,UAAA,EAAY,kBAAA;AAAA,MACZ,cAAA,EAAgB,sBAAA;AAAA,MAChB,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAAA,EAEA,OAAO,qBAAqB,IAAA,EAAsB;AAChD,IAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,SAAA,EAAW,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEA,OAAO,yBAAyB,IAAA,EAAsB;AACpD,IAAA,OAAO,gBAAA,CAAiB,OAAA,CAAQ,SAAA,EAAW,IAAI,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAW,OAAA,EAA4C;AAC3D,IAAA,MAAM,MAAA,GAAS,OAAA,EAAS,EAAA,IAAM,MAAA,CAAO,UAAA,EAAW;AAChD,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,MAAA,EAAQ;AAAA,MACzC,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAED,IAAA,MAAM,WAAW,OAAA,EAAS,QAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,QAAA,GAAW,IAAA,IAAQ,QAAA,GAAW,KAAA;AAC7C,IAAA,IAAI,eAAA,GAAkD,IAAA;AACtD,IAAA,IAAI,qBAAA;AAEJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,WAAA,CAAY,SAAS,EAAA,EAAI;AAAA,UACxD,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,UACxB;AAAA,SACD,CAAA;AACD,QAAA,eAAA,GAAkB;AAAA,UAChB,QAAA,EAAU,MAAA;AAAA,UACV,KAAA,EAAO,KAAK,OAAA,CAAQ,IAAA;AAAA,UACpB,MAAM,QAAA,CAAS,EAAA;AAAA,UACf,SAAA,EAAW,MAAA;AAAA,UACX,IAAA,EAAM,EAAE,KAAA,EAAO,aAAA,EAAc;AAAA,UAC7B,GAAI,SAAS,GAAA,GAAM,EAAE,KAAK,QAAA,CAAS,GAAA,KAAQ,EAAC;AAAA,UAC5C,GAAI,SAAS,GAAA,GAAM,EAAE,KAAK,QAAA,CAAS,GAAA,KAAQ;AAAC,SAC9C;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,QAAA,GAAW,QAAA;AACjB,QAAA,MAAM,EAAE,QAAA,EAAU,EAAA,EAAI,GAAG,gBAAe,GAAI,aAAA;AAAA,UAC1C;AAAA,SACF;AACA,QAAA,eAAA,GAAkB;AAAA,UAChB,QAAA,EAAU,SAAS,QAAA,IAAY,QAAA;AAAA,UAC/B,GAAG;AAAA,SACL;AACA,QAAA,qBAAA,GAAwB,QAAA,CAAS,aAAA;AAAA,MACnC;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,MAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,QAAA,qBAAA,GAAwB,OAAA,CAAQ,aAAA;AAAA,MAClC,CAAA,MAAA,IAAW,CAAC,MAAA,EAAQ;AAClB,QAAA,qBAAA,GAAwB,MAAA;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,MAAM,cAAA,GACJ,mBAAmB,qBAAA,GACf;AAAA,MACE,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM;AAAA,QACJ,GAAI,eAAA,IAAmB,EAAE,SAAA,EAAW,eAAA,EAAgB;AAAA,QACpD,GAAI,qBAAA,IAAyB;AAAA,UAC3B,cAAA,EAAgB;AAAA;AAClB;AACF,KACF,GACA,OAAA;AAGN,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,gBAAgB,GAAA,EAAK;AAAA,MACpD,aAAA,EAAe,CAAC,GAAG;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,IAC7C;AAEA,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,EAAA,EAAI,MAAA;AAAA,MACJ,eAAe,qBAAA,IAAyB,MAAA;AAAA,MACxC,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACnC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,OAAA,EAAsD;AACpE,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO;AAAA,MACxC,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB;AAAA,KACD,CAAA;AAED,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,OAAA,EAAS,MAAA,IAAU,OAAO,OAAA,EAAS,UAAU,QAAA,EAAU;AACzD,MAAA,MAAA,GAAS,EAAC;AACV,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,MAC1B;AACA,MAAA,IAAI,OAAO,OAAA,CAAQ,KAAA,KAAU,QAAA,EAAU;AACrC,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,QAAA,EAAS;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAO,EAAG,GAAG,CAAA;AAClE,IAAA,MAAM,MAAM,uBAAA,CAAwB,KAAA,CAAM,MAAM,QAAA,CAAS,MAAM,CAAA;AAC/D,IAAA,OAAO,wBAAA,CAAyB;AAAA,MAC9B,GAAG,GAAA;AAAA,MACH,WAAA,EAAa,IAAI,WAAA,IAAe;AAAA,KACjC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,OAAA,EAA+C;AAC3D,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,QAAQ,EAAA,EAAI;AAAA,MAC7C,WAAA,EAAa,CAAC,UAAU,CAAA;AAAA,MACxB,GAAA,EAAK;AAAA,KACN,CAAA;AAGD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,EAAE,aAAA,EAAe,CAAC,GAAG,CAAA,EAAG,CAAA;AACrE,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,EAAK;AAI9B,IAAA,MAAM,aAAA,GAAgB,KAAK,cAAA,IAAkB,MAAA;AAC7C,IAAA,MAAM,SAAA,GAAY,KAAK,UAAA,IAAc,EAAA;AAErC,IAAA,OAAO,KAAK,IAAA,CAAK;AAAA,MACf,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,OAAA,EAA4B;AAC/B,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,OAAA,CAAQ,EAAA,KAAO,YAAY,OAAA,CAAQ,EAAA,CAAG,IAAA,EAAK,KAAM,EAAA,EAAI;AAC1E,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,IAAI,QAAA;AAAA,MACT,OAAA,CAAQ,EAAA;AAAA,MACR,QAAQ,aAAA,IAAiB,MAAA;AAAA,MACzB,QAAQ,SAAA,IAAa,EAAA;AAAA,MACrB,IAAA,CAAK,OAAA;AAAA,MACL,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI;AAAA,KAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,OAAA,EAAuD;AACtE,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,QAAQ,EAAA,EAAI;AAAA,MAC7C,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAGD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,gBAAgB,GAAA,EAAK;AAAA,MACtD,aAAA,EAAe,CAAC,GAAA,EAAK,GAAG;AAAA,KACzB,CAAA;AACD,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,EAAK;AAC9B,IAAA,OAAO;AAAA,MACL,QAAQ,IAAA,CAAK,OAAA;AAAA,MACb,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBACJ,OAAA,EACwB;AACxB,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,QAAQ,MAAA,EAAQ;AAAA,MACjD,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,SAAS,OAAA,CAAQ,MAAA;AAAA,MACjB,UAAU,OAAA,CAAQ;AAAA,KACpB;AACA,IAAA,IAAI,OAAA,CAAQ,aAAa,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA;AAAA,MAC1B,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAA,EAAK;AAAA,MACtC,GAAA;AAAA,MACA,EAAE,aAAA,EAAe,CAAC,GAAG,CAAA;AAAE,KACzB;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,EAAK;AAC9B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAG;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,OAAA,EACwB;AACxB,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO;AAAA,MACxC,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,UAAU,OAAA,CAAQ;AAAA,KACpB;AACA,IAAA,IAAI,OAAA,CAAQ,aAAa,MAAA,EAAW;AAClC,MAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,GAAA;AAAA,MAC1B,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAA,EAAK;AAAA,MACtC,GAAA;AAAA,MACA,EAAE,aAAA,EAAe,CAAC,GAAG,CAAA;AAAE,KACzB;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,IAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,EAAK;AAC9B,IAAA,OAAO;AAAA,MACL,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,GAAI,KAAK,UAAA,GAAa,EAAE,WAAW,IAAA,CAAK,UAAA,KAAe;AAAC,KAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,OAAA,EAAoD;AAC5E,IAAA,MAAM,GAAA,GAAM,2BAAA,CAA4B,OAAA,EAAS,yBAAyB,CAAA;AAC1E,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,WAAA,CAAY,KAAA,EAAO;AAAA,MACxC,WAAA,EAAa,CAAC,YAAY,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,MAAA;AAAA,MAC1B,EAAE,MAAM,uBAAA,EAAyB,IAAA,EAAM,EAAE,EAAA,EAAI,OAAA,CAAQ,IAAG,EAAE;AAAA,MAC1D,GAAA;AAAA,MACA,EAAE,aAAA,EAAe,CAAC,GAAG,CAAA;AAAE,KACzB;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,GAAA,EAAK;AACvB,MAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,GAA+B;AAC7B,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,OAAA,EAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,WAAA,CACZ,MAAA,EACA,OAAA,EACiB;AAEjB,IAAA,MAAM,WAAA,GAAc,OAAA,EAAS,WAAA,IAAe,CAAC,aAAa,UAAU,CAAA;AACpE,IAAA,MAAM,GAAA,GAAM,2BAAA;AAAA,MACV,OAAA;AAAA,MACA,IAAA,CAAK,OAAA,CAAQ,UAAA,IAAc,GAAA,GAAM,KAAK,EAAA,GAAK;AAAA,KAC7C;AAGA,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAA,EAAK,KAAK,OAAA,CAAQ,IAAA;AAAA,MAClB,GAAA,EAAK,iBAAA;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,WAAA;AAAA,MACR,GAAA,EAAK,GAAA;AAAA,MACL,KAAK,GAAA,GAAM;AAAA,KACb;AAIA,IAAA,MAAM,MAAM,MAAM,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAO,CAAA;AAEvD,IAAA,MAAM,GAAA,GAAM,MAAM,IAAI,OAAA,CAAQ,OAAO,CAAA,CAClC,kBAAA,CAAmB,EAAE,GAAA,EAAK,SAAS,GAAA,EAAK,KAAA,EAAO,CAAA,CAC/C,KAAK,GAAG,CAAA;AAEX,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AAGO,SAAS,aAAa,OAAA,EAAwC;AACnE,EAAA,OAAO,IAAI,WAAW,OAAO,CAAA;AAC/B","file":"index.js","sourcesContent":["import type { RefUpdate, RefUpdateReason } from './types';\n\nexport interface RefUpdateErrorOptions {\n status: string;\n message?: string;\n refUpdate?: Partial<RefUpdate>;\n reason?: RefUpdateReason;\n}\n\nexport class RefUpdateError extends Error {\n public readonly status: string;\n public readonly reason: RefUpdateReason;\n public readonly refUpdate?: Partial<RefUpdate>;\n\n constructor(message: string, options: RefUpdateErrorOptions) {\n super(message);\n this.name = 'RefUpdateError';\n this.status = options.status;\n this.reason = options.reason ?? inferRefUpdateReason(options.status);\n this.refUpdate = options.refUpdate;\n }\n}\n\nconst REF_REASON_MAP: Record<string, RefUpdateReason> = {\n precondition_failed: 'precondition_failed',\n conflict: 'conflict',\n not_found: 'not_found',\n invalid: 'invalid',\n timeout: 'timeout',\n unauthorized: 'unauthorized',\n forbidden: 'forbidden',\n unavailable: 'unavailable',\n internal: 'internal',\n failed: 'failed',\n ok: 'unknown',\n};\n\nexport function inferRefUpdateReason(status?: string): RefUpdateReason {\n if (!status) {\n return 'unknown';\n }\n\n const trimmed = status.trim();\n if (trimmed === '') {\n return 'unknown';\n }\n\n const label = trimmed.toLowerCase();\n return REF_REASON_MAP[label] ?? 'unknown';\n}\n","import { z } from 'zod';\n\nexport const listFilesResponseSchema = z.object({\n paths: z.array(z.string()),\n ref: z.string(),\n});\n\nexport const fileWithMetadataRawSchema = z.object({\n path: z.string(),\n mode: z.string(),\n size: z.number(),\n last_commit_sha: z.string(),\n});\n\nexport const commitMetadataRawSchema = z.object({\n author: z.string(),\n date: z.string(),\n message: z.string(),\n});\n\nexport const listFilesWithMetadataResponseSchema = z.object({\n files: z.array(fileWithMetadataRawSchema),\n commits: z.record(commitMetadataRawSchema),\n ref: z.string(),\n});\n\nexport const branchInfoSchema = z.object({\n cursor: z.string(),\n name: z.string(),\n head_sha: z.string(),\n created_at: z.string(),\n});\n\nexport const listBranchesResponseSchema = z.object({\n branches: z.array(branchInfoSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const commitInfoRawSchema = z.object({\n sha: z.string(),\n message: z.string(),\n author_name: z.string(),\n author_email: z.string(),\n committer_name: z.string(),\n committer_email: z.string(),\n date: z.string(),\n});\n\nexport const listCommitsResponseSchema = z.object({\n commits: z.array(commitInfoRawSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const repoBaseInfoSchema = z.object({\n provider: z.string(),\n owner: z.string(),\n name: z.string(),\n});\n\nexport const repoInfoSchema = z.object({\n repo_id: z.string(),\n url: z.string(),\n default_branch: z.string(),\n created_at: z.string(),\n base_repo: repoBaseInfoSchema.optional().nullable(),\n});\n\nexport const listReposResponseSchema = z.object({\n repos: z.array(repoInfoSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const noteReadResponseSchema = z.object({\n sha: z.string(),\n note: z.string(),\n ref_sha: z.string(),\n});\n\nexport const noteResultSchema = z.object({\n success: z.boolean(),\n status: z.string(),\n message: z.string().optional(),\n});\n\nexport const noteWriteResponseSchema = z.object({\n sha: z.string(),\n target_ref: z.string(),\n base_commit: z.string().optional(),\n new_ref_sha: z.string(),\n result: noteResultSchema,\n});\n\nexport const diffStatsSchema = z.object({\n files: z.number(),\n additions: z.number(),\n deletions: z.number(),\n changes: z.number(),\n});\n\nexport const diffFileRawSchema = z.object({\n path: z.string(),\n state: z.string(),\n old_path: z.string().nullable().optional(),\n raw: z.string(),\n bytes: z.number(),\n is_eof: z.boolean(),\n additions: z.number().optional(),\n deletions: z.number().optional(),\n});\n\nexport const filteredFileRawSchema = z.object({\n path: z.string(),\n state: z.string(),\n old_path: z.string().nullable().optional(),\n bytes: z.number(),\n is_eof: z.boolean(),\n});\n\nexport const branchDiffResponseSchema = z.object({\n branch: z.string(),\n base: z.string(),\n stats: diffStatsSchema,\n files: z.array(diffFileRawSchema),\n filtered_files: z.array(filteredFileRawSchema),\n});\n\nexport const commitDiffResponseSchema = z.object({\n sha: z.string(),\n stats: diffStatsSchema,\n files: z.array(diffFileRawSchema),\n filtered_files: z.array(filteredFileRawSchema),\n});\n\nexport const createBranchResponseSchema = z.object({\n message: z.string(),\n target_branch: z.string(),\n target_is_ephemeral: z.boolean(),\n commit_sha: z.string().nullable().optional(),\n});\n\nexport const refUpdateResultSchema = z.object({\n branch: z.string(),\n old_sha: z.string(),\n new_sha: z.string(),\n success: z.boolean(),\n status: z.string(),\n message: z.string().optional(),\n});\n\nexport const commitPackCommitSchema = z.object({\n commit_sha: z.string(),\n tree_sha: z.string(),\n target_branch: z.string(),\n pack_bytes: z.number(),\n blob_count: z.number(),\n});\n\nexport const restoreCommitCommitSchema = commitPackCommitSchema.omit({\n blob_count: true,\n});\n\nexport const refUpdateResultWithOptionalsSchema = z.object({\n branch: z.string().optional(),\n old_sha: z.string().optional(),\n new_sha: z.string().optional(),\n success: z.boolean().optional(),\n status: z.string(),\n message: z.string().optional(),\n});\n\nexport const commitPackAckSchema = z.object({\n commit: commitPackCommitSchema,\n result: refUpdateResultSchema,\n});\n\nexport const restoreCommitAckSchema = z.object({\n commit: restoreCommitCommitSchema,\n result: refUpdateResultSchema.extend({ success: z.literal(true) }),\n});\n\nexport const commitPackResponseSchema = z.object({\n commit: commitPackCommitSchema.partial().optional().nullable(),\n result: refUpdateResultWithOptionalsSchema,\n});\n\nexport const restoreCommitResponseSchema = z.object({\n commit: restoreCommitCommitSchema.partial().optional().nullable(),\n result: refUpdateResultWithOptionalsSchema,\n});\n\nexport const grepLineSchema = z.object({\n line_number: z.number(),\n text: z.string(),\n type: z.string(),\n});\n\nexport const grepFileMatchSchema = z.object({\n path: z.string(),\n lines: z.array(grepLineSchema),\n});\n\nexport const grepResponseSchema = z.object({\n query: z.object({\n pattern: z.string(),\n case_sensitive: z.boolean(),\n }),\n repo: z.object({\n ref: z.string(),\n commit: z.string(),\n }),\n matches: z.array(grepFileMatchSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const errorEnvelopeSchema = z.object({\n error: z.string(),\n});\n\nexport type ListFilesResponseRaw = z.infer<typeof listFilesResponseSchema>;\nexport type RawFileWithMetadata = z.infer<typeof fileWithMetadataRawSchema>;\nexport type RawCommitMetadata = z.infer<typeof commitMetadataRawSchema>;\nexport type ListFilesWithMetadataResponseRaw = z.infer<\n typeof listFilesWithMetadataResponseSchema\n>;\nexport type RawBranchInfo = z.infer<typeof branchInfoSchema>;\nexport type ListBranchesResponseRaw = z.infer<\n typeof listBranchesResponseSchema\n>;\nexport type RawCommitInfo = z.infer<typeof commitInfoRawSchema>;\nexport type ListCommitsResponseRaw = z.infer<typeof listCommitsResponseSchema>;\nexport type RawRepoBaseInfo = z.infer<typeof repoBaseInfoSchema>;\nexport type RawRepoInfo = z.infer<typeof repoInfoSchema>;\nexport type ListReposResponseRaw = z.infer<typeof listReposResponseSchema>;\nexport type NoteReadResponseRaw = z.infer<typeof noteReadResponseSchema>;\nexport type NoteWriteResponseRaw = z.infer<typeof noteWriteResponseSchema>;\nexport type RawFileDiff = z.infer<typeof diffFileRawSchema>;\nexport type RawFilteredFile = z.infer<typeof filteredFileRawSchema>;\nexport type GetBranchDiffResponseRaw = z.infer<typeof branchDiffResponseSchema>;\nexport type GetCommitDiffResponseRaw = z.infer<typeof commitDiffResponseSchema>;\nexport type CreateBranchResponseRaw = z.infer<\n typeof createBranchResponseSchema\n>;\nexport type CommitPackAckRaw = z.infer<typeof commitPackAckSchema>;\nexport type RestoreCommitAckRaw = z.infer<typeof restoreCommitAckSchema>;\nexport type GrepResponseRaw = z.infer<typeof grepResponseSchema>;\n","import { RefUpdateError, inferRefUpdateReason } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackResponseSchema, errorEnvelopeSchema } from './schemas';\nimport type { CommitResult, RefUpdate } from './types';\n\nexport type CommitPackAck = CommitPackAckRaw;\n\nexport function buildCommitResult(ack: CommitPackAckRaw): CommitResult {\n const refUpdate = toRefUpdate(ack.result);\n if (!ack.result.success) {\n throw new RefUpdateError(\n ack.result.message ?? `Commit failed with status ${ack.result.status}`,\n {\n status: ack.result.status,\n message: ack.result.message,\n refUpdate,\n }\n );\n }\n return {\n commitSha: ack.commit.commit_sha,\n treeSha: ack.commit.tree_sha,\n targetBranch: ack.commit.target_branch,\n packBytes: ack.commit.pack_bytes,\n blobCount: ack.commit.blob_count,\n refUpdate,\n };\n}\n\nexport function toRefUpdate(result: CommitPackAckRaw['result']): RefUpdate {\n return {\n branch: result.branch,\n oldSha: result.old_sha,\n newSha: result.new_sha,\n };\n}\n\nexport async function parseCommitPackError(\n response: Response,\n fallbackMessage: string\n): Promise<{\n statusMessage: string;\n statusLabel: string;\n refUpdate?: Partial<RefUpdate>;\n}> {\n const cloned = response.clone();\n let jsonBody: unknown;\n try {\n jsonBody = await cloned.json();\n } catch {\n jsonBody = undefined;\n }\n\n let textBody: string | undefined;\n if (jsonBody === undefined) {\n try {\n textBody = await response.text();\n } catch {\n textBody = undefined;\n }\n }\n\n const defaultStatus = (() => {\n const inferred = inferRefUpdateReason(String(response.status));\n return inferred === 'unknown' ? 'failed' : inferred;\n })();\n let statusLabel = defaultStatus;\n let refUpdate: Partial<RefUpdate> | undefined;\n let message: string | undefined;\n\n if (jsonBody !== undefined) {\n const parsedResponse = commitPackResponseSchema.safeParse(jsonBody);\n if (parsedResponse.success) {\n const result = parsedResponse.data.result;\n if (typeof result.status === 'string' && result.status.trim() !== '') {\n statusLabel = result.status.trim() as typeof statusLabel;\n }\n refUpdate = toPartialRefUpdateFields(\n result.branch,\n result.old_sha,\n result.new_sha\n );\n if (typeof result.message === 'string' && result.message.trim() !== '') {\n message = result.message.trim();\n }\n }\n\n if (!message) {\n const parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n if (parsedError.success) {\n const trimmed = parsedError.data.error.trim();\n if (trimmed) {\n message = trimmed;\n }\n }\n }\n }\n\n if (!message && typeof jsonBody === 'string' && jsonBody.trim() !== '') {\n message = jsonBody.trim();\n }\n\n if (!message && textBody && textBody.trim() !== '') {\n message = textBody.trim();\n }\n\n return {\n statusMessage: message ?? fallbackMessage,\n statusLabel,\n refUpdate,\n };\n}\n\nfunction toPartialRefUpdateFields(\n branch?: string | null,\n oldSha?: string | null,\n newSha?: string | null\n): Partial<RefUpdate> | undefined {\n const refUpdate: Partial<RefUpdate> = {};\n\n if (typeof branch === 'string' && branch.trim() !== '') {\n refUpdate.branch = branch.trim();\n }\n if (typeof oldSha === 'string' && oldSha.trim() !== '') {\n refUpdate.oldSha = oldSha.trim();\n }\n if (typeof newSha === 'string' && newSha.trim() !== '') {\n refUpdate.newSha = newSha.trim();\n }\n\n return Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n","import type { BlobLike, FileLike, ReadableStreamLike } from './types';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n from(data: Uint8Array): NodeBuffer;\n from(data: string, encoding?: string): NodeBuffer;\n isBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n globalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\nexport const MAX_CHUNK_BYTES = 4 * 1024 * 1024;\n\nexport type ChunkSegment = {\n chunk: Uint8Array;\n eof: boolean;\n};\n\nexport async function* chunkify(\n source: AsyncIterable<Uint8Array>\n): AsyncIterable<ChunkSegment> {\n let pending: Uint8Array | null = null;\n let produced = false;\n\n for await (const value of source) {\n const bytes = value;\n\n if (pending && pending.byteLength === MAX_CHUNK_BYTES) {\n yield { chunk: pending, eof: false };\n produced = true;\n pending = null;\n }\n\n const merged: Uint8Array = pending ? concatChunks(pending, bytes) : bytes;\n pending = null;\n\n let cursor: Uint8Array = merged;\n while (cursor.byteLength > MAX_CHUNK_BYTES) {\n const chunk: Uint8Array = cursor.slice(0, MAX_CHUNK_BYTES);\n cursor = cursor.slice(MAX_CHUNK_BYTES);\n yield { chunk, eof: false };\n produced = true;\n }\n\n pending = cursor;\n }\n\n if (pending) {\n yield { chunk: pending, eof: true };\n produced = true;\n }\n\n if (!produced) {\n yield { chunk: new Uint8Array(0), eof: true };\n }\n}\n\nexport async function* toAsyncIterable(\n source:\n | string\n | Uint8Array\n | ArrayBuffer\n | BlobLike\n | FileLike\n | ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n | AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n | Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n): AsyncIterable<Uint8Array> {\n if (typeof source === 'string') {\n yield new TextEncoder().encode(source);\n return;\n }\n if (source instanceof Uint8Array) {\n yield source;\n return;\n }\n if (source instanceof ArrayBuffer) {\n yield new Uint8Array(source);\n return;\n }\n if (ArrayBuffer.isView(source)) {\n yield new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n return;\n }\n if (isBlobLike(source)) {\n const stream = source.stream();\n if (isAsyncIterable(stream)) {\n for await (const chunk of stream as AsyncIterable<unknown>) {\n yield ensureUint8Array(chunk);\n }\n return;\n }\n if (isReadableStreamLike(stream)) {\n yield* readReadableStream(stream);\n return;\n }\n }\n if (isReadableStreamLike(source)) {\n yield* readReadableStream(source);\n return;\n }\n if (isAsyncIterable(source)) {\n for await (const chunk of source as AsyncIterable<unknown>) {\n yield ensureUint8Array(chunk);\n }\n return;\n }\n if (isIterable(source)) {\n for (const chunk of source as Iterable<unknown>) {\n yield ensureUint8Array(chunk);\n }\n return;\n }\n throw new Error('Unsupported content source; expected binary data');\n}\n\nexport function base64Encode(bytes: Uint8Array): string {\n if (BufferCtor) {\n return BufferCtor.from(bytes).toString('base64');\n }\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n const btoaFn = (globalThis as { btoa?: (data: string) => string }).btoa;\n if (typeof btoaFn === 'function') {\n return btoaFn(binary);\n }\n throw new Error('Base64 encoding is not supported in this environment');\n}\n\nexport function requiresDuplex(body: unknown): boolean {\n if (!body || typeof body !== 'object') {\n return false;\n }\n\n if (\n typeof (body as { [Symbol.asyncIterator]?: unknown })[\n Symbol.asyncIterator\n ] === 'function'\n ) {\n return true;\n }\n\n const readableStreamCtor = (\n globalThis as {\n ReadableStream?: new (...args: unknown[]) => unknown;\n }\n ).ReadableStream;\n if (readableStreamCtor && body instanceof readableStreamCtor) {\n return true;\n }\n\n return false;\n}\n\nexport function toRequestBody(iterable: AsyncIterable<Uint8Array>): unknown {\n const readableStreamCtor = (\n globalThis as {\n ReadableStream?: new (underlyingSource: unknown) => unknown;\n }\n ).ReadableStream;\n if (typeof readableStreamCtor === 'function') {\n const iterator = iterable[Symbol.asyncIterator]();\n return new readableStreamCtor({\n async pull(controller: {\n enqueue(chunk: Uint8Array): void;\n close(): void;\n }) {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n return;\n }\n controller.enqueue(value!);\n },\n async cancel(reason: unknown) {\n if (typeof iterator.return === 'function') {\n await iterator.return(reason);\n }\n },\n });\n }\n return iterable;\n}\n\nasync function* readReadableStream(\n stream: ReadableStreamLike<unknown>\n): AsyncIterable<Uint8Array> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (value !== undefined) {\n yield ensureUint8Array(value);\n }\n }\n } finally {\n reader.releaseLock?.();\n }\n}\n\nfunction ensureUint8Array(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value instanceof ArrayBuffer) {\n return new Uint8Array(value);\n }\n if (ArrayBuffer.isView(value)) {\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n if (typeof value === 'string') {\n return new TextEncoder().encode(value);\n }\n if (BufferCtor && BufferCtor.isBuffer(value)) {\n return value as Uint8Array;\n }\n throw new Error('Unsupported chunk type; expected binary data');\n}\n\nfunction isBlobLike(value: unknown): value is BlobLike {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as BlobLike).stream === 'function'\n );\n}\n\nfunction isReadableStreamLike<T>(\n value: unknown\n): value is ReadableStreamLike<T> {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as ReadableStreamLike<T>).getReader === 'function'\n );\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n Symbol.asyncIterator in (value as Record<string, unknown>)\n );\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n Symbol.iterator in (value as Record<string, unknown>)\n );\n}\n\nfunction concatChunks(a: Uint8Array, b: Uint8Array): Uint8Array {\n if (a.byteLength === 0) {\n return b;\n }\n if (b.byteLength === 0) {\n return a;\n }\n const merged = new Uint8Array(a.byteLength + b.byteLength);\n merged.set(a, 0);\n merged.set(b, a.byteLength);\n return merged;\n}\n","{\n \"name\": \"@pierre/storage\",\n \"version\": \"1.3.2\",\n \"description\": \"Pierre Git Storage SDK\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/pierrecomputer/sdk\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"src\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"jose\": \"^5.10.0\",\n \"snakecase-keys\": \"^9.0.2\",\n \"zod\": \"^3.23.8\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.0.0\",\n \"tsup\": \"8.5.0\",\n \"typescript\": \"5.8.3\",\n \"vitest\": \"3.2.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from '../package.json';\n\nexport const PACKAGE_NAME = 'code-storage-sdk';\nexport const PACKAGE_VERSION = packageJson.version;\n\nexport function getUserAgent(): string {\n return `${PACKAGE_NAME}/${PACKAGE_VERSION}`;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n type ChunkSegment,\n base64Encode,\n chunkify,\n requiresDuplex,\n toAsyncIterable,\n toRequestBody,\n} from './stream-utils';\nimport type {\n CommitBuilder,\n CommitFileOptions,\n CommitFileSource,\n CommitResult,\n CommitSignature,\n CommitTextFileOptions,\n CreateCommitOptions,\n LegacyCreateCommitOptions,\n} from './types';\nimport { getUserAgent } from './version';\n\nconst DEFAULT_TTL_SECONDS = 60 * 60;\nconst HEADS_REF_PREFIX = 'refs/heads/';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n from(data: Uint8Array): NodeBuffer;\n from(data: string, encoding?: string): NodeBuffer;\n isBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n globalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\ninterface CommitMetadataPayload {\n target_branch: string;\n expected_head_sha?: string;\n base_branch?: string;\n commit_message: string;\n ephemeral?: boolean;\n ephemeral_base?: boolean;\n author: {\n name: string;\n email: string;\n };\n committer?: {\n name: string;\n email: string;\n };\n files: Array<{\n path: string;\n content_id: string;\n operation?: 'upsert' | 'delete';\n mode?: string;\n }>;\n}\n\ninterface CommitTransportRequest {\n authorization: string;\n signal?: AbortSignal;\n metadata: CommitMetadataPayload;\n blobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>;\n}\n\ninterface CommitTransport {\n send(request: CommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedCommitOptions = {\n targetBranch: string;\n commitMessage: string;\n expectedHeadSha?: string;\n baseBranch?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n author: CommitSignature;\n committer?: CommitSignature;\n signal?: AbortSignal;\n ttl?: number;\n};\n\ninterface CommitBuilderDeps {\n options: CreateCommitOptions;\n getAuthToken: () => Promise<string>;\n transport: CommitTransport;\n}\n\ntype FileOperationState = {\n path: string;\n contentId: string;\n mode?: string;\n operation: 'upsert' | 'delete';\n streamFactory?: () => AsyncIterable<Uint8Array>;\n};\n\nexport class CommitBuilderImpl implements CommitBuilder {\n private readonly options: NormalizedCommitOptions;\n private readonly getAuthToken: () => Promise<string>;\n private readonly transport: CommitTransport;\n private readonly operations: FileOperationState[] = [];\n private sent = false;\n\n constructor(deps: CommitBuilderDeps) {\n this.options = normalizeCommitOptions(deps.options);\n this.getAuthToken = deps.getAuthToken;\n this.transport = deps.transport;\n\n const trimmedMessage = this.options.commitMessage?.trim();\n const trimmedAuthorName = this.options.author?.name?.trim();\n const trimmedAuthorEmail = this.options.author?.email?.trim();\n\n if (!trimmedMessage) {\n throw new Error('createCommit commitMessage is required');\n }\n if (!trimmedAuthorName || !trimmedAuthorEmail) {\n throw new Error('createCommit author name and email are required');\n }\n this.options.commitMessage = trimmedMessage;\n this.options.author = {\n name: trimmedAuthorName,\n email: trimmedAuthorEmail,\n };\n if (typeof this.options.expectedHeadSha === 'string') {\n this.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n }\n if (typeof this.options.baseBranch === 'string') {\n const trimmedBase = this.options.baseBranch.trim();\n if (trimmedBase === '') {\n delete this.options.baseBranch;\n } else {\n if (trimmedBase.startsWith('refs/')) {\n throw new Error(\n 'createCommit baseBranch must not include refs/ prefix'\n );\n }\n this.options.baseBranch = trimmedBase;\n }\n }\n\n if (this.options.ephemeralBase && !this.options.baseBranch) {\n throw new Error('createCommit ephemeralBase requires baseBranch');\n }\n }\n\n addFile(\n path: string,\n source: CommitFileSource,\n options?: CommitFileOptions\n ): CommitBuilder {\n this.ensureNotSent();\n const normalizedPath = this.normalizePath(path);\n const contentId = randomContentId();\n const mode = options?.mode ?? '100644';\n\n this.operations.push({\n path: normalizedPath,\n contentId,\n mode,\n operation: 'upsert',\n streamFactory: () => toAsyncIterable(source),\n });\n\n return this;\n }\n\n addFileFromString(\n path: string,\n contents: string,\n options?: CommitTextFileOptions\n ): CommitBuilder {\n const encoding = options?.encoding ?? 'utf8';\n const normalizedEncoding = encoding === 'utf-8' ? 'utf8' : encoding;\n let data: Uint8Array;\n if (normalizedEncoding === 'utf8') {\n data = new TextEncoder().encode(contents);\n } else if (BufferCtor) {\n data = BufferCtor.from(\n contents,\n normalizedEncoding as Parameters<NodeBufferConstructor['from']>[1]\n );\n } else {\n throw new Error(\n `Unsupported encoding \"${encoding}\" in this environment. Non-UTF encodings require Node.js Buffer support.`\n );\n }\n return this.addFile(path, data, options);\n }\n\n deletePath(path: string): CommitBuilder {\n this.ensureNotSent();\n const normalizedPath = this.normalizePath(path);\n this.operations.push({\n path: normalizedPath,\n contentId: randomContentId(),\n operation: 'delete',\n });\n return this;\n }\n\n async send(): Promise<CommitResult> {\n this.ensureNotSent();\n this.sent = true;\n\n const metadata = this.buildMetadata();\n const blobEntries = this.operations\n .filter((op) => op.operation === 'upsert' && op.streamFactory)\n .map((op) => ({\n contentId: op.contentId,\n chunks: chunkify(op.streamFactory!()),\n }));\n\n const authorization = await this.getAuthToken();\n const ack = await this.transport.send({\n authorization,\n signal: this.options.signal,\n metadata,\n blobs: blobEntries,\n });\n return buildCommitResult(ack);\n }\n\n private buildMetadata(): CommitMetadataPayload {\n const files = this.operations.map((op) => {\n const entry: CommitMetadataPayload['files'][number] = {\n path: op.path,\n content_id: op.contentId,\n operation: op.operation,\n };\n if (op.mode) {\n entry.mode = op.mode;\n }\n return entry;\n });\n\n const metadata: CommitMetadataPayload = {\n target_branch: this.options.targetBranch,\n commit_message: this.options.commitMessage,\n author: {\n name: this.options.author.name,\n email: this.options.author.email,\n },\n files,\n };\n\n if (this.options.expectedHeadSha) {\n metadata.expected_head_sha = this.options.expectedHeadSha;\n }\n if (this.options.baseBranch) {\n metadata.base_branch = this.options.baseBranch;\n }\n if (this.options.committer) {\n metadata.committer = {\n name: this.options.committer.name,\n email: this.options.committer.email,\n };\n }\n\n if (this.options.ephemeral) {\n metadata.ephemeral = true;\n }\n if (this.options.ephemeralBase) {\n metadata.ephemeral_base = true;\n }\n\n return metadata;\n }\n\n private ensureNotSent(): void {\n if (this.sent) {\n throw new Error('createCommit builder cannot be reused after send()');\n }\n }\n\n private normalizePath(path: string): string {\n if (!path || typeof path !== 'string' || path.trim() === '') {\n throw new Error('File path must be a non-empty string');\n }\n return path.replace(/^\\//, '');\n }\n}\n\nexport class FetchCommitTransport implements CommitTransport {\n private readonly url: string;\n\n constructor(config: { baseUrl: string; version: number }) {\n const trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n this.url = `${trimmedBase}/api/v${config.version}/repos/commit-pack`;\n }\n\n async send(request: CommitTransportRequest): Promise<CommitPackAckRaw> {\n const bodyIterable = buildMessageIterable(request.metadata, request.blobs);\n const body = toRequestBody(bodyIterable);\n\n const init: RequestInit = {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${request.authorization}`,\n 'Content-Type': 'application/x-ndjson',\n Accept: 'application/json',\n 'Code-Storage-Agent': getUserAgent(),\n },\n body: body as any,\n signal: request.signal,\n };\n\n if (requiresDuplex(body)) {\n (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n }\n\n const response = await fetch(this.url, init);\n\n if (!response.ok) {\n const fallbackMessage = `createCommit request failed (${response.status} ${response.statusText})`;\n const { statusMessage, statusLabel, refUpdate } =\n await parseCommitPackError(response, fallbackMessage);\n throw new RefUpdateError(statusMessage, {\n status: statusLabel,\n message: statusMessage,\n refUpdate,\n });\n }\n\n const ack = commitPackAckSchema.parse(await response.json());\n return ack;\n }\n}\n\nfunction buildMessageIterable(\n metadata: CommitMetadataPayload,\n blobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>\n): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n return {\n async *[Symbol.asyncIterator]() {\n yield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n for (const blob of blobs) {\n for await (const segment of blob.chunks) {\n const payload = {\n blob_chunk: {\n content_id: blob.contentId,\n data: base64Encode(segment.chunk),\n eof: segment.eof,\n },\n };\n yield encoder.encode(`${JSON.stringify(payload)}\\n`);\n }\n }\n },\n };\n}\n\nfunction randomContentId(): string {\n const cryptoObj = globalThis.crypto;\n if (cryptoObj && typeof cryptoObj.randomUUID === 'function') {\n return cryptoObj.randomUUID();\n }\n const random = Math.random().toString(36).slice(2);\n return `cid-${Date.now().toString(36)}-${random}`;\n}\n\nfunction normalizeCommitOptions(\n options: CreateCommitOptions\n): NormalizedCommitOptions {\n return {\n targetBranch: resolveTargetBranch(options),\n commitMessage: options.commitMessage,\n expectedHeadSha: options.expectedHeadSha,\n baseBranch: options.baseBranch,\n ephemeral: options.ephemeral === true,\n ephemeralBase: options.ephemeralBase === true,\n author: options.author,\n committer: options.committer,\n signal: options.signal,\n ttl: options.ttl,\n };\n}\n\nfunction resolveTargetBranch(options: CreateCommitOptions): string {\n const branchCandidate =\n typeof options.targetBranch === 'string' ? options.targetBranch.trim() : '';\n if (branchCandidate) {\n return normalizeBranchName(branchCandidate);\n }\n if (hasLegacyTargetRef(options)) {\n return normalizeLegacyTargetRef(options.targetRef);\n }\n throw new Error('createCommit targetBranch is required');\n}\n\nfunction normalizeBranchName(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error('createCommit targetBranch is required');\n }\n if (trimmed.startsWith(HEADS_REF_PREFIX)) {\n const branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n if (!branch) {\n throw new Error('createCommit targetBranch is required');\n }\n return branch;\n }\n if (trimmed.startsWith('refs/')) {\n throw new Error('createCommit targetBranch must not include refs/ prefix');\n }\n return trimmed;\n}\n\nfunction normalizeLegacyTargetRef(ref: string): string {\n const trimmed = ref.trim();\n if (!trimmed) {\n throw new Error('createCommit targetRef is required');\n }\n if (!trimmed.startsWith(HEADS_REF_PREFIX)) {\n throw new Error('createCommit targetRef must start with refs/heads/');\n }\n const branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n if (!branch) {\n throw new Error('createCommit targetRef must include a branch name');\n }\n return branch;\n}\n\nfunction hasLegacyTargetRef(\n options: CreateCommitOptions\n): options is LegacyCreateCommitOptions {\n return typeof (options as LegacyCreateCommitOptions).targetRef === 'string';\n}\n\nexport function createCommitBuilder(deps: CommitBuilderDeps): CommitBuilder {\n return new CommitBuilderImpl(deps);\n}\n\nexport function resolveCommitTtlSeconds(options?: { ttl?: number }): number {\n if (typeof options?.ttl === 'number' && options.ttl > 0) {\n return options.ttl;\n }\n return DEFAULT_TTL_SECONDS;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n type ChunkSegment,\n base64Encode,\n chunkify,\n requiresDuplex,\n toAsyncIterable,\n toRequestBody,\n} from './stream-utils';\nimport type {\n CommitResult,\n CommitSignature,\n CreateCommitFromDiffOptions,\n DiffSource,\n} from './types';\nimport { getUserAgent } from './version';\n\ninterface DiffCommitMetadataPayload {\n target_branch: string;\n expected_head_sha?: string;\n base_branch?: string;\n commit_message: string;\n ephemeral?: boolean;\n ephemeral_base?: boolean;\n author: {\n name: string;\n email: string;\n };\n committer?: {\n name: string;\n email: string;\n };\n}\n\ninterface DiffCommitTransportRequest {\n authorization: string;\n signal?: AbortSignal;\n metadata: DiffCommitMetadataPayload;\n diffChunks: AsyncIterable<ChunkSegment>;\n}\n\ninterface DiffCommitTransport {\n send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedDiffCommitOptions = {\n targetBranch: string;\n commitMessage: string;\n expectedHeadSha?: string;\n baseBranch?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n author: CommitSignature;\n committer?: CommitSignature;\n signal?: AbortSignal;\n ttl?: number;\n initialDiff: DiffSource;\n};\n\ninterface CommitFromDiffSendDeps {\n options: CreateCommitFromDiffOptions;\n getAuthToken: () => Promise<string>;\n transport: DiffCommitTransport;\n}\n\nclass DiffCommitExecutor {\n private readonly options: NormalizedDiffCommitOptions;\n private readonly getAuthToken: () => Promise<string>;\n private readonly transport: DiffCommitTransport;\n private readonly diffFactory: () => AsyncIterable<Uint8Array>;\n private sent = false;\n\n constructor(deps: CommitFromDiffSendDeps) {\n this.options = normalizeDiffCommitOptions(deps.options);\n this.getAuthToken = deps.getAuthToken;\n this.transport = deps.transport;\n\n const trimmedMessage = this.options.commitMessage?.trim();\n const trimmedAuthorName = this.options.author?.name?.trim();\n const trimmedAuthorEmail = this.options.author?.email?.trim();\n\n if (!trimmedMessage) {\n throw new Error('createCommitFromDiff commitMessage is required');\n }\n if (!trimmedAuthorName || !trimmedAuthorEmail) {\n throw new Error(\n 'createCommitFromDiff author name and email are required'\n );\n }\n\n this.options.commitMessage = trimmedMessage;\n this.options.author = {\n name: trimmedAuthorName,\n email: trimmedAuthorEmail,\n };\n\n if (typeof this.options.expectedHeadSha === 'string') {\n this.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n }\n if (typeof this.options.baseBranch === 'string') {\n const trimmedBase = this.options.baseBranch.trim();\n if (trimmedBase === '') {\n delete this.options.baseBranch;\n } else {\n if (trimmedBase.startsWith('refs/')) {\n throw new Error(\n 'createCommitFromDiff baseBranch must not include refs/ prefix'\n );\n }\n this.options.baseBranch = trimmedBase;\n }\n }\n if (this.options.ephemeralBase && !this.options.baseBranch) {\n throw new Error('createCommitFromDiff ephemeralBase requires baseBranch');\n }\n\n this.diffFactory = () => toAsyncIterable(this.options.initialDiff);\n }\n\n async send(): Promise<CommitResult> {\n this.ensureNotSent();\n this.sent = true;\n\n const metadata = this.buildMetadata();\n const diffIterable = chunkify(this.diffFactory());\n\n const authorization = await this.getAuthToken();\n const ack = await this.transport.send({\n authorization,\n signal: this.options.signal,\n metadata,\n diffChunks: diffIterable,\n });\n\n return buildCommitResult(ack);\n }\n\n private buildMetadata(): DiffCommitMetadataPayload {\n const metadata: DiffCommitMetadataPayload = {\n target_branch: this.options.targetBranch,\n commit_message: this.options.commitMessage,\n author: {\n name: this.options.author.name,\n email: this.options.author.email,\n },\n };\n\n if (this.options.expectedHeadSha) {\n metadata.expected_head_sha = this.options.expectedHeadSha;\n }\n if (this.options.baseBranch) {\n metadata.base_branch = this.options.baseBranch;\n }\n if (this.options.committer) {\n metadata.committer = {\n name: this.options.committer.name,\n email: this.options.committer.email,\n };\n }\n if (this.options.ephemeral) {\n metadata.ephemeral = true;\n }\n if (this.options.ephemeralBase) {\n metadata.ephemeral_base = true;\n }\n\n return metadata;\n }\n\n private ensureNotSent(): void {\n if (this.sent) {\n throw new Error('createCommitFromDiff cannot be reused after send()');\n }\n }\n}\n\nexport class FetchDiffCommitTransport implements DiffCommitTransport {\n private readonly url: string;\n\n constructor(config: { baseUrl: string; version: number }) {\n const trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n this.url = `${trimmedBase}/api/v${config.version}/repos/diff-commit`;\n }\n\n async send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw> {\n const bodyIterable = buildMessageIterable(\n request.metadata,\n request.diffChunks\n );\n const body = toRequestBody(bodyIterable);\n\n const init: RequestInit = {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${request.authorization}`,\n 'Content-Type': 'application/x-ndjson',\n Accept: 'application/json',\n 'Code-Storage-Agent': getUserAgent(),\n },\n body: body as any,\n signal: request.signal,\n };\n\n if (requiresDuplex(body)) {\n (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n }\n\n const response = await fetch(this.url, init);\n if (!response.ok) {\n const fallbackMessage = `createCommitFromDiff request failed (${response.status} ${response.statusText})`;\n const { statusMessage, statusLabel, refUpdate } =\n await parseCommitPackError(response, fallbackMessage);\n throw new RefUpdateError(statusMessage, {\n status: statusLabel,\n message: statusMessage,\n refUpdate,\n });\n }\n\n return commitPackAckSchema.parse(await response.json());\n }\n}\n\nfunction buildMessageIterable(\n metadata: DiffCommitMetadataPayload,\n diffChunks: AsyncIterable<ChunkSegment>\n): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n return {\n async *[Symbol.asyncIterator]() {\n yield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n for await (const segment of diffChunks) {\n const payload = {\n diff_chunk: {\n data: base64Encode(segment.chunk),\n eof: segment.eof,\n },\n };\n yield encoder.encode(`${JSON.stringify(payload)}\\n`);\n }\n },\n };\n}\n\nfunction normalizeDiffCommitOptions(\n options: CreateCommitFromDiffOptions\n): NormalizedDiffCommitOptions {\n if (!options || typeof options !== 'object') {\n throw new Error('createCommitFromDiff options are required');\n }\n\n if (options.diff === undefined || options.diff === null) {\n throw new Error('createCommitFromDiff diff is required');\n }\n\n const targetBranch = normalizeBranchName(options.targetBranch);\n\n let committer: CommitSignature | undefined;\n if (options.committer) {\n const name = options.committer.name?.trim();\n const email = options.committer.email?.trim();\n if (!name || !email) {\n throw new Error(\n 'createCommitFromDiff committer name and email are required when provided'\n );\n }\n committer = { name, email };\n }\n\n return {\n targetBranch,\n commitMessage: options.commitMessage,\n expectedHeadSha: options.expectedHeadSha,\n baseBranch: options.baseBranch,\n ephemeral: options.ephemeral === true,\n ephemeralBase: options.ephemeralBase === true,\n author: options.author,\n committer,\n signal: options.signal,\n ttl: options.ttl,\n initialDiff: options.diff,\n };\n}\n\nfunction normalizeBranchName(value: string | undefined): string {\n const trimmed = value?.trim();\n if (!trimmed) {\n throw new Error('createCommitFromDiff targetBranch is required');\n }\n if (trimmed.startsWith('refs/heads/')) {\n const branch = trimmed.slice('refs/heads/'.length).trim();\n if (!branch) {\n throw new Error(\n 'createCommitFromDiff targetBranch must include a branch name'\n );\n }\n return branch;\n }\n if (trimmed.startsWith('refs/')) {\n throw new Error(\n 'createCommitFromDiff targetBranch must not include refs/ prefix'\n );\n }\n return trimmed;\n}\n\nexport async function sendCommitFromDiff(\n deps: CommitFromDiffSendDeps\n): Promise<CommitResult> {\n const executor = new DiffCommitExecutor(deps);\n return executor.send();\n}\n","import { errorEnvelopeSchema } from './schemas';\nimport type { ValidAPIVersion, ValidMethod, ValidPath } from './types';\nimport { getUserAgent } from './version';\n\ninterface RequestOptions {\n allowedStatus?: number[];\n}\n\nexport class ApiError extends Error {\n public readonly status: number;\n public readonly statusText: string;\n public readonly method: ValidMethod;\n public readonly url: string;\n public readonly body?: unknown;\n\n constructor(params: {\n message: string;\n status: number;\n statusText: string;\n method: ValidMethod;\n url: string;\n body?: unknown;\n }) {\n super(params.message);\n this.name = 'ApiError';\n this.status = params.status;\n this.statusText = params.statusText;\n this.method = params.method;\n this.url = params.url;\n this.body = params.body;\n }\n}\n\nexport class ApiFetcher {\n constructor(\n private readonly API_BASE_URL: string,\n private readonly version: ValidAPIVersion\n ) {}\n\n private getBaseUrl() {\n return `${this.API_BASE_URL}/api/v${this.version}`;\n }\n\n private getRequestUrl(path: ValidPath) {\n if (typeof path === 'string') {\n return `${this.getBaseUrl()}/${path}`;\n } else if (path.params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(path.params)) {\n if (Array.isArray(value)) {\n for (const v of value) {\n searchParams.append(key, v);\n }\n } else {\n searchParams.append(key, value);\n }\n }\n const paramStr = searchParams.toString();\n return `${this.getBaseUrl()}/${path.path}${paramStr ? `?${paramStr}` : ''}`;\n } else {\n return `${this.getBaseUrl()}/${path.path}`;\n }\n }\n\n private async fetch(\n path: ValidPath,\n method: ValidMethod,\n jwt: string,\n options?: RequestOptions\n ) {\n const requestUrl = this.getRequestUrl(path);\n\n const requestOptions: RequestInit = {\n method,\n headers: {\n Authorization: `Bearer ${jwt}`,\n 'Content-Type': 'application/json',\n 'Code-Storage-Agent': getUserAgent(),\n },\n };\n\n if (method !== 'GET' && typeof path !== 'string' && path.body) {\n requestOptions.body = JSON.stringify(path.body);\n }\n\n const response = await fetch(requestUrl, requestOptions);\n\n if (!response.ok) {\n const allowed = options?.allowedStatus ?? [];\n if (allowed.includes(response.status)) {\n return response;\n }\n\n let errorBody: unknown;\n let message: string | undefined;\n const contentType = response.headers.get('content-type') ?? '';\n\n try {\n if (contentType.includes('application/json')) {\n errorBody = await response.json();\n } else {\n const text = await response.text();\n errorBody = text;\n }\n } catch {\n // Fallback to plain text if JSON parse failed after reading body\n try {\n errorBody = await response.text();\n } catch {\n errorBody = undefined;\n }\n }\n\n if (typeof errorBody === 'string') {\n const trimmed = errorBody.trim();\n if (trimmed) {\n message = trimmed;\n }\n } else if (errorBody && typeof errorBody === 'object') {\n const parsedError = errorEnvelopeSchema.safeParse(errorBody);\n if (parsedError.success) {\n const trimmed = parsedError.data.error.trim();\n if (trimmed) {\n message = trimmed;\n }\n }\n }\n\n throw new ApiError({\n message:\n message ??\n `Request ${method} ${requestUrl} failed with status ${response.status} ${response.statusText}`,\n status: response.status,\n statusText: response.statusText,\n method,\n url: requestUrl,\n body: errorBody,\n });\n }\n return response;\n }\n\n async get(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'GET', jwt, options);\n }\n\n async post(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'POST', jwt, options);\n }\n\n async put(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'PUT', jwt, options);\n }\n\n async delete(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'DELETE', jwt, options);\n }\n}\n","export function timingSafeEqual(\n a: string | Uint8Array,\n b: string | Uint8Array\n): boolean {\n const bufferA = typeof a === 'string' ? new TextEncoder().encode(a) : a;\n const bufferB = typeof b === 'string' ? new TextEncoder().encode(b) : b;\n\n if (bufferA.length !== bufferB.length) return false;\n\n let result = 0;\n for (let i = 0; i < bufferA.length; i++) {\n result |= bufferA[i] ^ bufferB[i];\n }\n return result === 0;\n}\n\nexport async function getEnvironmentCrypto() {\n if (!globalThis.crypto) {\n const { webcrypto } = await import('node:crypto');\n return webcrypto;\n }\n return globalThis.crypto;\n}\n\nexport async function createHmac(\n algorithm: string,\n secret: string,\n data: string\n): Promise<string> {\n if (algorithm !== 'sha256') {\n throw new Error('Only sha256 algorithm is supported');\n }\n if (!secret || secret.length === 0) {\n throw new Error('Secret is required');\n }\n\n const crypto = await getEnvironmentCrypto();\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","/**\n * Webhook validation utilities for Pierre Git Storage\n */\nimport type {\n ParsedWebhookSignature,\n RawWebhookPushEvent,\n WebhookEventPayload,\n WebhookPushEvent,\n WebhookValidationOptions,\n WebhookValidationResult,\n} from './types';\nimport { createHmac, timingSafeEqual } from './util';\n\nconst DEFAULT_MAX_AGE_SECONDS = 300; // 5 minutes\n\n/**\n * Parse the X-Pierre-Signature header\n * Format: t=<timestamp>,sha256=<signature>\n */\nexport function parseSignatureHeader(\n header: string\n): ParsedWebhookSignature | null {\n if (!header || typeof header !== 'string') {\n return null;\n }\n\n let timestamp = '';\n let signature = '';\n\n // Split by comma and parse each element\n const elements = header.split(',');\n for (const element of elements) {\n const trimmedElement = element.trim();\n const parts = trimmedElement.split('=', 2);\n if (parts.length !== 2) {\n continue;\n }\n\n const [key, value] = parts;\n switch (key) {\n case 't':\n timestamp = value;\n break;\n case 'sha256':\n signature = value;\n break;\n }\n }\n\n if (!timestamp || !signature) {\n return null;\n }\n\n return { timestamp, signature };\n}\n\n/**\n * Validate a webhook signature and timestamp\n *\n * @param payload - The raw webhook payload (request body)\n * @param signatureHeader - The X-Pierre-Signature header value\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns Validation result with details\n *\n * @example\n * ```typescript\n * const result = await validateWebhookSignature(\n * requestBody,\n * request.headers['x-pierre-signature'],\n * webhookSecret\n * );\n *\n * if (!result.valid) {\n * console.error('Invalid webhook:', result.error);\n * return;\n * }\n * ```\n */\nexport async function validateWebhookSignature(\n payload: string | Buffer,\n signatureHeader: string,\n secret: string,\n options: WebhookValidationOptions = {}\n): Promise<WebhookValidationResult> {\n if (!secret || secret.length === 0) {\n return {\n valid: false,\n error: 'Empty secret is not allowed',\n };\n }\n\n // Parse the signature header\n const parsed = parseSignatureHeader(signatureHeader);\n if (!parsed) {\n return {\n valid: false,\n error: 'Invalid signature header format',\n };\n }\n\n // Parse timestamp\n const timestamp = Number.parseInt(parsed.timestamp, 10);\n if (isNaN(timestamp)) {\n return {\n valid: false,\n error: 'Invalid timestamp in signature',\n };\n }\n\n // Validate timestamp age (prevent replay attacks)\n const maxAge = options.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS;\n if (maxAge > 0) {\n const now = Math.floor(Date.now() / 1000);\n const age = now - timestamp;\n\n if (age > maxAge) {\n return {\n valid: false,\n error: `Webhook timestamp too old (${age} seconds)`,\n timestamp,\n };\n }\n\n // Also reject timestamps from the future (clock skew tolerance of 60 seconds)\n if (age < -60) {\n return {\n valid: false,\n error: 'Webhook timestamp is in the future',\n timestamp,\n };\n }\n }\n\n // Convert payload to string if it's a Buffer\n const payloadStr =\n typeof payload === 'string' ? payload : payload.toString('utf8');\n\n // Compute expected signature\n // Format: HMAC-SHA256(secret, timestamp + \".\" + payload)\n const signedData = `${parsed.timestamp}.${payloadStr}`;\n const expectedSignature = await createHmac('sha256', secret, signedData);\n\n // Compare signatures using constant-time comparison\n const expectedBuffer = Buffer.from(expectedSignature);\n const actualBuffer = Buffer.from(parsed.signature);\n\n // Ensure both buffers are the same length for timing-safe comparison\n if (expectedBuffer.length !== actualBuffer.length) {\n return {\n valid: false,\n error: 'Invalid signature',\n timestamp,\n };\n }\n\n const signaturesMatch = timingSafeEqual(expectedBuffer, actualBuffer);\n if (!signaturesMatch) {\n return {\n valid: false,\n error: 'Invalid signature',\n timestamp,\n };\n }\n\n return {\n valid: true,\n timestamp,\n };\n}\n\n/**\n * Validate a webhook request\n *\n * This is a convenience function that validates the signature and parses the payload.\n *\n * @param payload - The raw webhook payload (request body)\n * @param headers - The request headers (must include x-pierre-signature and x-pierre-event)\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns The parsed webhook payload if valid, or validation error\n *\n * @example\n * ```typescript\n * const result = await validateWebhook(\n * request.body,\n * request.headers,\n * process.env.WEBHOOK_SECRET\n * );\n *\n * if (!result.valid) {\n * return new Response('Invalid webhook', { status: 401 });\n * }\n *\n * // Type-safe access to the webhook payload\n * console.log('Push event:', result.payload);\n * ```\n */\nexport async function validateWebhook(\n payload: string | Buffer,\n headers: Record<string, string | string[] | undefined>,\n secret: string,\n options: WebhookValidationOptions = {}\n): Promise<WebhookValidationResult & { payload?: WebhookEventPayload }> {\n // Get signature header\n const signatureHeader =\n headers['x-pierre-signature'] || headers['X-Pierre-Signature'];\n if (!signatureHeader || Array.isArray(signatureHeader)) {\n return {\n valid: false,\n error: 'Missing or invalid X-Pierre-Signature header',\n };\n }\n\n // Get event type header\n const eventType = headers['x-pierre-event'] || headers['X-Pierre-Event'];\n if (!eventType || Array.isArray(eventType)) {\n return {\n valid: false,\n error: 'Missing or invalid X-Pierre-Event header',\n };\n }\n\n // Validate signature\n const validationResult = await validateWebhookSignature(\n payload,\n signatureHeader,\n secret,\n options\n );\n\n if (!validationResult.valid) {\n return validationResult;\n }\n\n // Parse payload\n const payloadStr =\n typeof payload === 'string' ? payload : payload.toString('utf8');\n let parsedJson: unknown;\n try {\n parsedJson = JSON.parse(payloadStr);\n } catch {\n return {\n valid: false,\n error: 'Invalid JSON payload',\n timestamp: validationResult.timestamp,\n };\n }\n\n const conversion = convertWebhookPayload(String(eventType), parsedJson);\n if (!conversion.valid) {\n return {\n valid: false,\n error: conversion.error,\n timestamp: validationResult.timestamp,\n };\n }\n\n return {\n valid: true,\n eventType,\n timestamp: validationResult.timestamp,\n payload: conversion.payload,\n };\n}\n\nfunction convertWebhookPayload(\n eventType: string,\n raw: unknown\n):\n | { valid: true; payload: WebhookEventPayload }\n | { valid: false; error: string } {\n if (eventType === 'push') {\n if (!isRawWebhookPushEvent(raw)) {\n return {\n valid: false,\n error: 'Invalid push payload',\n };\n }\n return {\n valid: true,\n payload: transformPushEvent(raw),\n };\n }\n const fallbackPayload = { type: eventType, raw };\n return {\n valid: true,\n payload: fallbackPayload,\n };\n}\n\nfunction transformPushEvent(raw: RawWebhookPushEvent): WebhookPushEvent {\n return {\n type: 'push' as const,\n repository: {\n id: raw.repository.id,\n url: raw.repository.url,\n },\n ref: raw.ref,\n before: raw.before,\n after: raw.after,\n customerId: raw.customer_id,\n pushedAt: new Date(raw.pushed_at),\n rawPushedAt: raw.pushed_at,\n };\n}\n\nfunction isRawWebhookPushEvent(value: unknown): value is RawWebhookPushEvent {\n if (!isRecord(value)) {\n return false;\n }\n if (!isRecord(value.repository)) {\n return false;\n }\n return (\n typeof value.repository.id === 'string' &&\n typeof value.repository.url === 'string' &&\n typeof value.ref === 'string' &&\n typeof value.before === 'string' &&\n typeof value.after === 'string' &&\n typeof value.customer_id === 'string' &&\n typeof value.pushed_at === 'string'\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n","/**\n * Pierre Git Storage SDK\n *\n * A TypeScript SDK for interacting with Pierre's git storage system\n */\nimport { SignJWT, importPKCS8 } from 'jose';\nimport snakecaseKeys from 'snakecase-keys';\n\nimport {\n FetchCommitTransport,\n createCommitBuilder,\n resolveCommitTtlSeconds,\n} from './commit';\nimport { FetchDiffCommitTransport, sendCommitFromDiff } from './diff-commit';\nimport { RefUpdateError } from './errors';\nimport { ApiError, ApiFetcher } from './fetch';\nimport type { RestoreCommitAckRaw } from './schemas';\nimport {\n branchDiffResponseSchema,\n commitDiffResponseSchema,\n createBranchResponseSchema,\n errorEnvelopeSchema,\n grepResponseSchema,\n listBranchesResponseSchema,\n listCommitsResponseSchema,\n listFilesResponseSchema,\n listFilesWithMetadataResponseSchema,\n listReposResponseSchema,\n noteReadResponseSchema,\n noteWriteResponseSchema,\n restoreCommitAckSchema,\n restoreCommitResponseSchema,\n} from './schemas';\nimport type {\n AppendNoteOptions,\n ArchiveOptions,\n BranchInfo,\n CommitBuilder,\n CommitInfo,\n CommitMetadata,\n CommitResult,\n CreateBranchOptions,\n CreateBranchResponse,\n CreateBranchResult,\n CreateCommitFromDiffOptions,\n CreateCommitOptions,\n CreateGitCredentialOptions,\n CreateNoteOptions,\n CreateRepoOptions,\n DeleteGitCredentialOptions,\n DeleteNoteOptions,\n DeleteRepoOptions,\n DeleteRepoResult,\n DiffFileState,\n FileWithMetadata,\n FileDiff,\n FilteredFile,\n FindOneOptions,\n GenericGitBaseRepo,\n GetBranchDiffOptions,\n GetBranchDiffResponse,\n GetBranchDiffResult,\n GetCommitDiffOptions,\n GetCommitDiffResponse,\n GetCommitDiffResult,\n GetFileOptions,\n GetNoteOptions,\n GetNoteResult,\n GetRemoteURLOptions,\n GitCredential,\n GitHubBaseRepo,\n GitStorageOptions,\n GrepFileMatch,\n GrepLine,\n GrepOptions,\n GrepResult,\n ListBranchesOptions,\n ListBranchesResponse,\n ListBranchesResult,\n ListCommitsOptions,\n ListCommitsResponse,\n ListCommitsResult,\n ListFilesOptions,\n ListFilesResult,\n ListFilesWithMetadataOptions,\n ListFilesWithMetadataResponse,\n ListFilesWithMetadataResult,\n ListReposOptions,\n ListReposResponse,\n ListReposResult,\n NoteWriteResult,\n PullUpstreamOptions,\n RawBranchInfo,\n RawCommitMetadata,\n RawCommitInfo,\n RawFileWithMetadata,\n RawFileDiff,\n RawFilteredFile,\n RefUpdate,\n RepoOptions,\n Repo,\n RestoreCommitOptions,\n RestoreCommitResult,\n UpdateGitCredentialOptions,\n ValidAPIVersion,\n} from './types';\n\n/**\n * Type definitions for Pierre Git Storage SDK\n */\n\nexport { RefUpdateError } from './errors';\nexport { ApiError } from './fetch';\n// Import additional types from types.ts\nexport * from './types';\n\n// Export webhook validation utilities\nexport {\n parseSignatureHeader,\n validateWebhook,\n validateWebhookSignature,\n} from './webhook';\n\n/**\n * Git Storage API\n */\n\ndeclare const __STORAGE_BASE_URL__: string;\ndeclare const __API_BASE_URL__: string;\n\nconst API_BASE_URL = __API_BASE_URL__;\nconst STORAGE_BASE_URL = __STORAGE_BASE_URL__;\nconst API_VERSION: ValidAPIVersion = 1;\n\nconst apiInstanceMap = new Map<string, ApiFetcher>();\nconst DEFAULT_TOKEN_TTL_SECONDS = 60 * 60; // 1 hour\nconst RESTORE_COMMIT_ALLOWED_STATUS = [\n 400, // Bad Request - validation errors\n 401, // Unauthorized - missing/invalid auth header\n 403, // Forbidden - missing git:write scope\n 404, // Not Found - repo lookup failures\n 408, // Request Timeout - client cancelled\n 409, // Conflict - concurrent ref updates\n 412, // Precondition Failed - optimistic concurrency\n 422, // Unprocessable Entity - metadata issues\n 429, // Too Many Requests - upstream throttling\n 499, // Client Closed Request - storage cancellation\n 500, // Internal Server Error - generic failure\n 502, // Bad Gateway - storage/gateway bridge issues\n 503, // Service Unavailable - storage selection failures\n 504, // Gateway Timeout - long-running storage operations\n] as const;\n\nconst NOTE_WRITE_ALLOWED_STATUS = [\n 400, // Bad Request - validation errors\n 401, // Unauthorized - missing/invalid auth header\n 403, // Forbidden - missing git:write scope\n 404, // Not Found - repo or note lookup failures\n 408, // Request Timeout - client cancelled\n 409, // Conflict - concurrent ref updates\n 412, // Precondition Failed - optimistic concurrency\n 422, // Unprocessable Entity - metadata issues\n 429, // Too Many Requests - upstream throttling\n 499, // Client Closed Request - storage cancellation\n 500, // Internal Server Error - generic failure\n 502, // Bad Gateway - storage/gateway bridge issues\n 503, // Service Unavailable - storage selection failures\n 504, // Gateway Timeout - long-running storage operations\n] as const;\n\nfunction resolveInvocationTtlSeconds(\n options?: { ttl?: number },\n defaultValue: number = DEFAULT_TOKEN_TTL_SECONDS\n): number {\n if (typeof options?.ttl === 'number' && options.ttl > 0) {\n return options.ttl;\n }\n return defaultValue;\n}\n\ntype RestoreCommitAck = RestoreCommitAckRaw;\n\nfunction toRefUpdate(result: RestoreCommitAck['result']): RefUpdate {\n return {\n branch: result.branch,\n oldSha: result.old_sha,\n newSha: result.new_sha,\n };\n}\n\nfunction buildRestoreCommitResult(ack: RestoreCommitAck): RestoreCommitResult {\n const refUpdate = toRefUpdate(ack.result);\n if (!ack.result.success) {\n throw new RefUpdateError(\n ack.result.message ??\n `Restore commit failed with status ${ack.result.status}`,\n {\n status: ack.result.status,\n message: ack.result.message,\n refUpdate,\n }\n );\n }\n return {\n commitSha: ack.commit.commit_sha,\n treeSha: ack.commit.tree_sha,\n targetBranch: ack.commit.target_branch,\n packBytes: ack.commit.pack_bytes,\n refUpdate,\n };\n}\n\ninterface RestoreCommitFailureInfo {\n status?: string;\n message?: string;\n refUpdate?: Partial<RefUpdate>;\n}\n\nfunction toPartialRefUpdate(\n branch?: unknown,\n oldSha?: unknown,\n newSha?: unknown\n): Partial<RefUpdate> | undefined {\n const refUpdate: Partial<RefUpdate> = {};\n if (typeof branch === 'string' && branch.trim() !== '') {\n refUpdate.branch = branch;\n }\n if (typeof oldSha === 'string' && oldSha.trim() !== '') {\n refUpdate.oldSha = oldSha;\n }\n if (typeof newSha === 'string' && newSha.trim() !== '') {\n refUpdate.newSha = newSha;\n }\n return Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n\nfunction parseRestoreCommitPayload(\n payload: unknown\n): { ack: RestoreCommitAck } | { failure: RestoreCommitFailureInfo } | null {\n const ack = restoreCommitAckSchema.safeParse(payload);\n if (ack.success) {\n return { ack: ack.data };\n }\n\n const failure = restoreCommitResponseSchema.safeParse(payload);\n if (failure.success) {\n const result = failure.data.result;\n return {\n failure: {\n status: result.status,\n message: result.message,\n refUpdate: toPartialRefUpdate(\n result.branch,\n result.old_sha,\n result.new_sha\n ),\n },\n };\n }\n\n return null;\n}\n\nfunction httpStatusToRestoreStatus(status: number): string {\n switch (status) {\n case 409:\n return 'conflict';\n case 412:\n return 'precondition_failed';\n default:\n return `${status}`;\n }\n}\n\nfunction getApiInstance(baseUrl: string, version: ValidAPIVersion) {\n if (!apiInstanceMap.has(`${baseUrl}--${version}`)) {\n apiInstanceMap.set(\n `${baseUrl}--${version}`,\n new ApiFetcher(baseUrl, version)\n );\n }\n return apiInstanceMap.get(`${baseUrl}--${version}`)!;\n}\n\nfunction transformBranchInfo(raw: RawBranchInfo): BranchInfo {\n return {\n cursor: raw.cursor,\n name: raw.name,\n headSha: raw.head_sha,\n createdAt: raw.created_at,\n };\n}\n\nfunction transformListBranchesResult(\n raw: ListBranchesResponse\n): ListBranchesResult {\n return {\n branches: raw.branches.map(transformBranchInfo),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformCommitInfo(raw: RawCommitInfo): CommitInfo {\n const parsedDate = new Date(raw.date);\n return {\n sha: raw.sha,\n message: raw.message,\n authorName: raw.author_name,\n authorEmail: raw.author_email,\n committerName: raw.committer_name,\n committerEmail: raw.committer_email,\n date: parsedDate,\n rawDate: raw.date,\n };\n}\n\nfunction transformListCommitsResult(\n raw: ListCommitsResponse\n): ListCommitsResult {\n return {\n commits: raw.commits.map(transformCommitInfo),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformFileWithMetadata(raw: RawFileWithMetadata): FileWithMetadata {\n return {\n path: raw.path,\n mode: raw.mode,\n size: raw.size,\n lastCommitSha: raw.last_commit_sha,\n };\n}\n\nfunction transformCommitMetadata(raw: RawCommitMetadata): CommitMetadata {\n return {\n author: raw.author,\n date: new Date(raw.date),\n rawDate: raw.date,\n message: raw.message,\n };\n}\n\nfunction transformListFilesWithMetadataResult(\n raw: ListFilesWithMetadataResponse\n): ListFilesWithMetadataResult {\n const commits: Record<string, CommitMetadata> = {};\n for (const [sha, commit] of Object.entries(raw.commits)) {\n commits[sha] = transformCommitMetadata(commit);\n }\n\n return {\n files: raw.files.map(transformFileWithMetadata),\n commits,\n ref: raw.ref,\n };\n}\n\nfunction normalizeDiffState(rawState: string): DiffFileState {\n if (!rawState) {\n return 'unknown';\n }\n const leading = rawState.trim()[0]?.toUpperCase();\n switch (leading) {\n case 'A':\n return 'added';\n case 'M':\n return 'modified';\n case 'D':\n return 'deleted';\n case 'R':\n return 'renamed';\n case 'C':\n return 'copied';\n case 'T':\n return 'type_changed';\n case 'U':\n return 'unmerged';\n default:\n return 'unknown';\n }\n}\n\nfunction transformFileDiff(raw: RawFileDiff): FileDiff {\n const normalizedState = normalizeDiffState(raw.state);\n return {\n path: raw.path,\n state: normalizedState,\n rawState: raw.state,\n oldPath: raw.old_path ?? undefined,\n raw: raw.raw,\n bytes: raw.bytes,\n isEof: raw.is_eof,\n additions: raw.additions ?? 0,\n deletions: raw.deletions ?? 0,\n };\n}\n\nfunction transformFilteredFile(raw: RawFilteredFile): FilteredFile {\n const normalizedState = normalizeDiffState(raw.state);\n return {\n path: raw.path,\n state: normalizedState,\n rawState: raw.state,\n oldPath: raw.old_path ?? undefined,\n bytes: raw.bytes,\n isEof: raw.is_eof,\n };\n}\n\nfunction transformBranchDiffResult(\n raw: GetBranchDiffResponse\n): GetBranchDiffResult {\n return {\n branch: raw.branch,\n base: raw.base,\n stats: raw.stats,\n files: raw.files.map(transformFileDiff),\n filteredFiles: raw.filtered_files.map(transformFilteredFile),\n };\n}\n\nfunction transformCommitDiffResult(\n raw: GetCommitDiffResponse\n): GetCommitDiffResult {\n return {\n sha: raw.sha,\n stats: raw.stats,\n files: raw.files.map(transformFileDiff),\n filteredFiles: raw.filtered_files.map(transformFilteredFile),\n };\n}\n\nfunction transformCreateBranchResult(\n raw: CreateBranchResponse\n): CreateBranchResult {\n return {\n message: raw.message,\n targetBranch: raw.target_branch,\n targetIsEphemeral: raw.target_is_ephemeral,\n commitSha: raw.commit_sha ?? undefined,\n };\n}\n\nfunction transformListReposResult(raw: ListReposResponse): ListReposResult {\n return {\n repos: raw.repos.map((repo) => ({\n repoId: repo.repo_id,\n url: repo.url,\n defaultBranch: repo.default_branch,\n createdAt: repo.created_at,\n baseRepo: repo.base_repo\n ? {\n provider: repo.base_repo.provider,\n owner: repo.base_repo.owner,\n name: repo.base_repo.name,\n }\n : undefined,\n })),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformGrepLine(raw: {\n line_number: number;\n text: string;\n type: string;\n}): GrepLine {\n return {\n lineNumber: raw.line_number,\n text: raw.text,\n type: raw.type,\n };\n}\n\nfunction transformGrepFileMatch(raw: {\n path: string;\n lines: { line_number: number; text: string; type: string }[];\n}): GrepFileMatch {\n return {\n path: raw.path,\n lines: raw.lines.map(transformGrepLine),\n };\n}\n\nfunction transformNoteReadResult(raw: {\n sha: string;\n note: string;\n ref_sha: string;\n}): GetNoteResult {\n return {\n sha: raw.sha,\n note: raw.note,\n refSha: raw.ref_sha,\n };\n}\n\nfunction transformNoteWriteResult(raw: {\n sha: string;\n target_ref: string;\n base_commit?: string;\n new_ref_sha: string;\n result: { success: boolean; status: string; message?: string };\n}): NoteWriteResult {\n return {\n sha: raw.sha,\n targetRef: raw.target_ref,\n baseCommit: raw.base_commit,\n newRefSha: raw.new_ref_sha,\n result: {\n success: raw.result.success,\n status: raw.result.status,\n message: raw.result.message,\n },\n };\n}\n\nfunction buildNoteWriteBody(\n sha: string,\n note: string,\n action: 'add' | 'append',\n options: { expectedRefSha?: string; author?: { name: string; email: string } }\n): Record<string, unknown> {\n const body: Record<string, unknown> = {\n sha,\n action,\n note,\n };\n\n const expectedRefSha = options.expectedRefSha?.trim();\n if (expectedRefSha) {\n body.expected_ref_sha = expectedRefSha;\n }\n\n if (options.author) {\n const authorName = options.author.name?.trim();\n const authorEmail = options.author.email?.trim();\n if (!authorName || !authorEmail) {\n throw new Error('note author name and email are required when provided');\n }\n body.author = {\n name: authorName,\n email: authorEmail,\n };\n }\n\n return body;\n}\n\nasync function parseNoteWriteResponse(\n response: Response,\n method: 'POST' | 'DELETE'\n): Promise<NoteWriteResult> {\n let jsonBody: unknown;\n const contentType = response.headers.get('content-type') ?? '';\n try {\n if (contentType.includes('application/json')) {\n jsonBody = await response.json();\n } else {\n jsonBody = await response.text();\n }\n } catch {\n jsonBody = undefined;\n }\n\n if (jsonBody && typeof jsonBody === 'object') {\n const parsed = noteWriteResponseSchema.safeParse(jsonBody);\n if (parsed.success) {\n return transformNoteWriteResult(parsed.data);\n }\n const parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n if (parsedError.success) {\n throw new ApiError({\n message: parsedError.data.error,\n status: response.status,\n statusText: response.statusText,\n method,\n url: response.url,\n body: jsonBody,\n });\n }\n }\n\n const fallbackMessage =\n typeof jsonBody === 'string' && jsonBody.trim() !== ''\n ? jsonBody.trim()\n : `Request ${method} ${response.url} failed with status ${response.status} ${response.statusText}`;\n\n throw new ApiError({\n message: fallbackMessage,\n status: response.status,\n statusText: response.statusText,\n method,\n url: response.url,\n body: jsonBody,\n });\n}\n\n/**\n * Implementation of the Repo interface\n */\nclass RepoImpl implements Repo {\n private readonly api: ApiFetcher;\n\n constructor(\n public readonly id: string,\n public readonly defaultBranch: string,\n public readonly createdAt: string,\n private readonly options: GitStorageOptions,\n private readonly generateJWT: (\n repoId: string,\n options?: GetRemoteURLOptions\n ) => Promise<string>\n ) {\n this.api = getApiInstance(\n this.options.apiBaseUrl ?? GitStorage.getDefaultAPIBaseUrl(options.name),\n this.options.apiVersion ?? API_VERSION\n );\n }\n\n async getRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n const url = new URL(\n `https://${this.options.storageBaseUrl}/${this.id}.git`\n );\n url.username = `t`;\n url.password = await this.generateJWT(this.id, urlOptions);\n return url.toString();\n }\n\n async getEphemeralRemoteURL(\n urlOptions?: GetRemoteURLOptions\n ): Promise<string> {\n const url = new URL(\n `https://${this.options.storageBaseUrl}/${this.id}+ephemeral.git`\n );\n url.username = `t`;\n url.password = await this.generateJWT(this.id, urlOptions);\n return url.toString();\n }\n\n async getImportRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n const url = new URL(\n `https://${this.options.storageBaseUrl}/${this.id}+import.git`\n );\n url.username = `t`;\n url.password = await this.generateJWT(this.id, urlOptions);\n return url.toString();\n }\n\n async getFileStream(options: GetFileOptions): Promise<Response> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string> = {\n path: options.path,\n };\n\n if (options.ref) {\n params.ref = options.ref;\n }\n if (typeof options.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n if (typeof options.ephemeralBase === 'boolean') {\n params.ephemeral_base = String(options.ephemeralBase);\n }\n\n // Return the raw fetch Response for streaming\n return this.api.get({ path: 'repos/file', params }, jwt);\n }\n\n async getArchiveStream(options: ArchiveOptions = {}): Promise<Response> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const body: Record<string, unknown> = {};\n const ref = options.ref?.trim();\n if (ref) {\n body.ref = ref;\n }\n if (Array.isArray(options.includeGlobs) && options.includeGlobs.length > 0) {\n body.include_globs = options.includeGlobs;\n }\n if (Array.isArray(options.excludeGlobs) && options.excludeGlobs.length > 0) {\n body.exclude_globs = options.excludeGlobs;\n }\n if (typeof options.maxBlobSize === 'number' && Number.isFinite(options.maxBlobSize)) {\n body.max_blob_size = options.maxBlobSize;\n }\n if (typeof options.archivePrefix === 'string') {\n const prefix = options.archivePrefix.trim();\n if (prefix) {\n body.archive = { prefix };\n }\n }\n\n const path =\n Object.keys(body).length > 0 ? { path: 'repos/archive', body } : 'repos/archive';\n\n return this.api.post(path, jwt);\n }\n\n async listFiles(options?: ListFilesOptions): Promise<ListFilesResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string> = {};\n if (options?.ref) {\n params.ref = options.ref;\n }\n if (typeof options?.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n const response = await this.api.get(\n {\n path: 'repos/files',\n params: Object.keys(params).length ? params : undefined,\n },\n jwt\n );\n\n const raw = listFilesResponseSchema.parse(await response.json());\n return { paths: raw.paths, ref: raw.ref };\n }\n\n async listFilesWithMetadata(\n options?: ListFilesWithMetadataOptions\n ): Promise<ListFilesWithMetadataResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string> = {};\n if (options?.ref) {\n params.ref = options.ref;\n }\n if (typeof options?.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n const response = await this.api.get(\n {\n path: 'repos/files/metadata',\n params: Object.keys(params).length ? params : undefined,\n },\n jwt\n );\n\n const raw = listFilesWithMetadataResponseSchema.parse(await response.json());\n return transformListFilesWithMetadataResult(raw);\n }\n\n async listBranches(\n options?: ListBranchesOptions\n ): Promise<ListBranchesResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const cursor = options?.cursor;\n const limit = options?.limit;\n\n let params: Record<string, string> | undefined;\n\n if (typeof cursor === 'string' || typeof limit === 'number') {\n params = {};\n if (typeof cursor === 'string') {\n params.cursor = cursor;\n }\n if (typeof limit === 'number') {\n params.limit = limit.toString();\n }\n }\n\n const response = await this.api.get(\n { path: 'repos/branches', params },\n jwt\n );\n\n const raw = listBranchesResponseSchema.parse(await response.json());\n return transformListBranchesResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n async listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n let params: Record<string, string> | undefined;\n\n if (options?.branch || options?.cursor || options?.limit) {\n params = {};\n if (options?.branch) {\n params.branch = options.branch;\n }\n if (options?.cursor) {\n params.cursor = options.cursor;\n }\n if (typeof options?.limit == 'number') {\n params.limit = options.limit.toString();\n }\n }\n\n const response = await this.api.get({ path: 'repos/commits', params }, jwt);\n\n const raw = listCommitsResponseSchema.parse(await response.json());\n return transformListCommitsResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n async getNote(options: GetNoteOptions): Promise<GetNoteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('getNote sha is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const response = await this.api.get(\n { path: 'repos/notes', params: { sha } },\n jwt\n );\n const raw = noteReadResponseSchema.parse(await response.json());\n return transformNoteReadResult(raw);\n }\n\n async createNote(options: CreateNoteOptions): Promise<NoteWriteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('createNote sha is required');\n }\n\n const note = options?.note?.trim();\n if (!note) {\n throw new Error('createNote note is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body = buildNoteWriteBody(sha, note, 'add', {\n expectedRefSha: options.expectedRefSha,\n author: options.author,\n });\n\n const response = await this.api.post({ path: 'repos/notes', body }, jwt, {\n allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n });\n\n const result = await parseNoteWriteResponse(response, 'POST');\n if (!result.result.success) {\n throw new RefUpdateError(\n result.result.message ??\n `createNote failed with status ${result.result.status}`,\n {\n status: result.result.status,\n message: result.result.message,\n refUpdate: toPartialRefUpdate(\n result.targetRef,\n result.baseCommit,\n result.newRefSha\n ),\n }\n );\n }\n return result;\n }\n\n async appendNote(options: AppendNoteOptions): Promise<NoteWriteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('appendNote sha is required');\n }\n\n const note = options?.note?.trim();\n if (!note) {\n throw new Error('appendNote note is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body = buildNoteWriteBody(sha, note, 'append', {\n expectedRefSha: options.expectedRefSha,\n author: options.author,\n });\n\n const response = await this.api.post({ path: 'repos/notes', body }, jwt, {\n allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n });\n\n const result = await parseNoteWriteResponse(response, 'POST');\n if (!result.result.success) {\n throw new RefUpdateError(\n result.result.message ??\n `appendNote failed with status ${result.result.status}`,\n {\n status: result.result.status,\n message: result.result.message,\n refUpdate: toPartialRefUpdate(\n result.targetRef,\n result.baseCommit,\n result.newRefSha\n ),\n }\n );\n }\n return result;\n }\n\n async deleteNote(options: DeleteNoteOptions): Promise<NoteWriteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('deleteNote sha is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n sha,\n };\n\n const expectedRefSha = options.expectedRefSha?.trim();\n if (expectedRefSha) {\n body.expected_ref_sha = expectedRefSha;\n }\n\n if (options.author) {\n const authorName = options.author.name?.trim();\n const authorEmail = options.author.email?.trim();\n if (!authorName || !authorEmail) {\n throw new Error(\n 'deleteNote author name and email are required when provided'\n );\n }\n body.author = {\n name: authorName,\n email: authorEmail,\n };\n }\n\n const response = await this.api.delete({ path: 'repos/notes', body }, jwt, {\n allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n });\n\n const result = await parseNoteWriteResponse(response, 'DELETE');\n if (!result.result.success) {\n throw new RefUpdateError(\n result.result.message ??\n `deleteNote failed with status ${result.result.status}`,\n {\n status: result.result.status,\n message: result.result.message,\n refUpdate: toPartialRefUpdate(\n result.targetRef,\n result.baseCommit,\n result.newRefSha\n ),\n }\n );\n }\n return result;\n }\n\n async getBranchDiff(\n options: GetBranchDiffOptions\n ): Promise<GetBranchDiffResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string | string[]> = {\n branch: options.branch,\n };\n\n if (options.base) {\n params.base = options.base;\n }\n if (typeof options.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n if (typeof options.ephemeralBase === 'boolean') {\n params.ephemeral_base = String(options.ephemeralBase);\n }\n if (options.paths && options.paths.length > 0) {\n params.path = options.paths;\n }\n\n const response = await this.api.get(\n { path: 'repos/branches/diff', params },\n jwt\n );\n\n const raw = branchDiffResponseSchema.parse(await response.json());\n return transformBranchDiffResult(raw);\n }\n\n async getCommitDiff(\n options: GetCommitDiffOptions\n ): Promise<GetCommitDiffResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string | string[]> = {\n sha: options.sha,\n };\n\n if (options.baseSha) {\n params.baseSha = options.baseSha;\n }\n if (options.paths && options.paths.length > 0) {\n params.path = options.paths;\n }\n\n const response = await this.api.get({ path: 'repos/diff', params }, jwt);\n\n const raw = commitDiffResponseSchema.parse(await response.json());\n return transformCommitDiffResult(raw);\n }\n\n async grep(options: GrepOptions): Promise<GrepResult> {\n const pattern = options?.query?.pattern?.trim();\n if (!pattern) {\n throw new Error('grep query.pattern is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n query: {\n pattern,\n ...(typeof options.query.caseSensitive === 'boolean'\n ? { case_sensitive: options.query.caseSensitive }\n : {}),\n },\n };\n\n const ref = options.ref?.trim() || options.rev?.trim();\n if (ref) {\n body.ref = ref;\n }\n if (Array.isArray(options.paths) && options.paths.length > 0) {\n body.paths = options.paths;\n }\n if (options.fileFilters) {\n body.file_filters = {\n ...(options.fileFilters.includeGlobs\n ? { include_globs: options.fileFilters.includeGlobs }\n : {}),\n ...(options.fileFilters.excludeGlobs\n ? { exclude_globs: options.fileFilters.excludeGlobs }\n : {}),\n ...(options.fileFilters.extensionFilters\n ? { extension_filters: options.fileFilters.extensionFilters }\n : {}),\n };\n }\n if (options.context) {\n body.context = {\n ...(typeof options.context.before === 'number'\n ? { before: options.context.before }\n : {}),\n ...(typeof options.context.after === 'number'\n ? { after: options.context.after }\n : {}),\n };\n }\n if (options.limits) {\n body.limits = {\n ...(typeof options.limits.maxLines === 'number'\n ? { max_lines: options.limits.maxLines }\n : {}),\n ...(typeof options.limits.maxMatchesPerFile === 'number'\n ? { max_matches_per_file: options.limits.maxMatchesPerFile }\n : {}),\n };\n }\n if (options.pagination) {\n body.pagination = {\n ...(typeof options.pagination.cursor === 'string' &&\n options.pagination.cursor.trim() !== ''\n ? { cursor: options.pagination.cursor }\n : {}),\n ...(typeof options.pagination.limit === 'number'\n ? { limit: options.pagination.limit }\n : {}),\n };\n }\n\n const response = await this.api.post({ path: 'repos/grep', body }, jwt);\n const raw = grepResponseSchema.parse(await response.json());\n\n return {\n query: {\n pattern: raw.query.pattern,\n caseSensitive: raw.query.case_sensitive,\n },\n repo: {\n ref: raw.repo.ref,\n commit: raw.repo.commit,\n },\n matches: raw.matches.map(transformGrepFileMatch),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n }\n\n async pullUpstream(options: PullUpstreamOptions = {}): Promise<void> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body: Record<string, string> = {};\n\n if (options.ref) {\n body.ref = options.ref;\n }\n\n const response = await this.api.post(\n { path: 'repos/pull-upstream', body },\n jwt\n );\n\n if (response.status !== 202) {\n throw new Error(\n `Pull Upstream failed: ${response.status} ${await response.text()}`\n );\n }\n\n return;\n }\n\n async createBranch(\n options: CreateBranchOptions\n ): Promise<CreateBranchResult> {\n const baseBranch = options?.baseBranch?.trim();\n if (!baseBranch) {\n throw new Error('createBranch baseBranch is required');\n }\n const targetBranch = options?.targetBranch?.trim();\n if (!targetBranch) {\n throw new Error('createBranch targetBranch is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n base_branch: baseBranch,\n target_branch: targetBranch,\n };\n\n if (options.baseIsEphemeral === true) {\n body.base_is_ephemeral = true;\n }\n if (options.targetIsEphemeral === true) {\n body.target_is_ephemeral = true;\n }\n\n const response = await this.api.post(\n { path: 'repos/branches/create', body },\n jwt\n );\n const raw = createBranchResponseSchema.parse(await response.json());\n return transformCreateBranchResult(raw);\n }\n\n async restoreCommit(\n options: RestoreCommitOptions\n ): Promise<RestoreCommitResult> {\n const targetBranch = options?.targetBranch?.trim();\n if (!targetBranch) {\n throw new Error('restoreCommit targetBranch is required');\n }\n if (targetBranch.startsWith('refs/')) {\n throw new Error(\n 'restoreCommit targetBranch must not include refs/ prefix'\n );\n }\n\n const targetCommitSha = options?.targetCommitSha?.trim();\n if (!targetCommitSha) {\n throw new Error('restoreCommit targetCommitSha is required');\n }\n const commitMessage = options?.commitMessage?.trim();\n\n const authorName = options.author?.name?.trim();\n const authorEmail = options.author?.email?.trim();\n if (!authorName || !authorEmail) {\n throw new Error('restoreCommit author name and email are required');\n }\n\n const ttl = resolveCommitTtlSeconds(options);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const metadata: Record<string, unknown> = {\n target_branch: targetBranch,\n target_commit_sha: targetCommitSha,\n author: {\n name: authorName,\n email: authorEmail,\n },\n };\n\n if (commitMessage) {\n metadata.commit_message = commitMessage;\n }\n\n const expectedHeadSha = options.expectedHeadSha?.trim();\n if (expectedHeadSha) {\n metadata.expected_head_sha = expectedHeadSha;\n }\n\n if (options.committer) {\n const committerName = options.committer.name?.trim();\n const committerEmail = options.committer.email?.trim();\n if (!committerName || !committerEmail) {\n throw new Error(\n 'restoreCommit committer name and email are required when provided'\n );\n }\n metadata.committer = {\n name: committerName,\n email: committerEmail,\n };\n }\n\n const response = await this.api.post(\n { path: 'repos/restore-commit', body: { metadata } },\n jwt,\n {\n allowedStatus: [...RESTORE_COMMIT_ALLOWED_STATUS],\n }\n );\n\n const payload = await response.json();\n const parsed = parseRestoreCommitPayload(payload);\n if (parsed && 'ack' in parsed) {\n return buildRestoreCommitResult(parsed.ack);\n }\n\n const failure = parsed && 'failure' in parsed ? parsed.failure : undefined;\n const status =\n failure?.status ?? httpStatusToRestoreStatus(response.status);\n const message =\n failure?.message ??\n `Restore commit failed with HTTP ${response.status}` +\n (response.statusText ? ` ${response.statusText}` : '');\n\n throw new RefUpdateError(message, {\n status,\n refUpdate: failure?.refUpdate,\n });\n }\n\n createCommit(options: CreateCommitOptions): CommitBuilder {\n const version = this.options.apiVersion ?? API_VERSION;\n const baseUrl =\n this.options.apiBaseUrl ??\n GitStorage.getDefaultAPIBaseUrl(this.options.name);\n const transport = new FetchCommitTransport({ baseUrl, version });\n const ttl = resolveCommitTtlSeconds(options);\n const builderOptions: CreateCommitOptions = {\n ...options,\n ttl,\n };\n const getAuthToken = () =>\n this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n return createCommitBuilder({\n options: builderOptions,\n getAuthToken,\n transport,\n });\n }\n\n async createCommitFromDiff(\n options: CreateCommitFromDiffOptions\n ): Promise<CommitResult> {\n const version = this.options.apiVersion ?? API_VERSION;\n const baseUrl =\n this.options.apiBaseUrl ??\n GitStorage.getDefaultAPIBaseUrl(this.options.name);\n const transport = new FetchDiffCommitTransport({ baseUrl, version });\n const ttl = resolveCommitTtlSeconds(options);\n const requestOptions: CreateCommitFromDiffOptions = {\n ...options,\n ttl,\n };\n const getAuthToken = () =>\n this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n return sendCommitFromDiff({\n options: requestOptions,\n getAuthToken,\n transport,\n });\n }\n}\n\nexport class GitStorage {\n private options: GitStorageOptions;\n private api: ApiFetcher;\n\n constructor(options: GitStorageOptions) {\n if (\n !options ||\n options.name === undefined ||\n options.key === undefined ||\n options.name === null ||\n options.key === null\n ) {\n throw new Error(\n 'GitStorage requires a name and key. Please check your configuration and try again.'\n );\n }\n\n if (typeof options.name !== 'string' || options.name.trim() === '') {\n throw new Error('GitStorage name must be a non-empty string.');\n }\n\n if (typeof options.key !== 'string' || options.key.trim() === '') {\n throw new Error('GitStorage key must be a non-empty string.');\n }\n\n const resolvedApiBaseUrl =\n options.apiBaseUrl ?? GitStorage.getDefaultAPIBaseUrl(options.name);\n const resolvedApiVersion = options.apiVersion ?? API_VERSION;\n const resolvedStorageBaseUrl =\n options.storageBaseUrl ??\n GitStorage.getDefaultStorageBaseUrl(options.name);\n const resolvedDefaultTtl = options.defaultTTL;\n\n this.api = getApiInstance(resolvedApiBaseUrl, resolvedApiVersion);\n\n this.options = {\n key: options.key,\n name: options.name,\n apiBaseUrl: resolvedApiBaseUrl,\n apiVersion: resolvedApiVersion,\n storageBaseUrl: resolvedStorageBaseUrl,\n defaultTTL: resolvedDefaultTtl,\n };\n }\n\n static getDefaultAPIBaseUrl(name: string): string {\n return API_BASE_URL.replace('{{org}}', name);\n }\n\n static getDefaultStorageBaseUrl(name: string): string {\n return STORAGE_BASE_URL.replace('{{org}}', name);\n }\n\n /**\n * Create a new repository\n * @returns The created repository\n */\n async createRepo(options?: CreateRepoOptions): Promise<Repo> {\n const repoId = options?.id || crypto.randomUUID();\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(repoId, {\n permissions: ['repo:write'],\n ttl,\n });\n\n const baseRepo = options?.baseRepo;\n const isFork = baseRepo ? 'id' in baseRepo : false;\n let baseRepoOptions: Record<string, unknown> | null = null;\n let resolvedDefaultBranch: string | undefined;\n\n if (baseRepo) {\n if ('id' in baseRepo) {\n const baseRepoToken = await this.generateJWT(baseRepo.id, {\n permissions: ['git:read'],\n ttl,\n });\n baseRepoOptions = {\n provider: 'code',\n owner: this.options.name,\n name: baseRepo.id,\n operation: 'fork',\n auth: { token: baseRepoToken },\n ...(baseRepo.ref ? { ref: baseRepo.ref } : {}),\n ...(baseRepo.sha ? { sha: baseRepo.sha } : {}),\n };\n } else {\n // Sync base repo: GitHub or generic git provider (gitlab, bitbucket, etc.)\n const syncRepo = baseRepo as GitHubBaseRepo | GenericGitBaseRepo;\n const { provider: _p, ...restSnakecased } = snakecaseKeys(\n baseRepo as unknown as Record<string, unknown>\n ) as Record<string, unknown>;\n baseRepoOptions = {\n provider: syncRepo.provider ?? 'github',\n ...restSnakecased,\n };\n resolvedDefaultBranch = syncRepo.defaultBranch;\n }\n }\n\n // Match backend priority: baseRepo.defaultBranch > options.defaultBranch > 'main'\n if (!resolvedDefaultBranch) {\n if (options?.defaultBranch) {\n resolvedDefaultBranch = options.defaultBranch;\n } else if (!isFork) {\n resolvedDefaultBranch = 'main';\n }\n }\n\n const createRepoPath =\n baseRepoOptions || resolvedDefaultBranch\n ? {\n path: 'repos',\n body: {\n ...(baseRepoOptions && { base_repo: baseRepoOptions }),\n ...(resolvedDefaultBranch && {\n default_branch: resolvedDefaultBranch,\n }),\n },\n }\n : 'repos';\n\n // Allow 409 so we can map it to a clearer error message\n const resp = await this.api.post(createRepoPath, jwt, {\n allowedStatus: [409],\n });\n if (resp.status === 409) {\n throw new Error('Repository already exists');\n }\n\n return this.repo({\n id: repoId,\n defaultBranch: resolvedDefaultBranch ?? 'main',\n createdAt: new Date().toISOString(),\n });\n }\n\n /**\n * List repositories for the authenticated organization\n * @returns Paginated repositories list\n */\n async listRepos(options?: ListReposOptions): Promise<ListReposResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT('org', {\n permissions: ['org:read'],\n ttl,\n });\n\n let params: Record<string, string> | undefined;\n if (options?.cursor || typeof options?.limit === 'number') {\n params = {};\n if (options.cursor) {\n params.cursor = options.cursor;\n }\n if (typeof options.limit === 'number') {\n params.limit = options.limit.toString();\n }\n }\n\n const response = await this.api.get({ path: 'repos', params }, jwt);\n const raw = listReposResponseSchema.parse(await response.json());\n return transformListReposResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n /**\n * Find a repository by ID\n * @param options The search options\n * @returns The found repository\n */\n async findOne(options: FindOneOptions): Promise<Repo | null> {\n const jwt = await this.generateJWT(options.id, {\n permissions: ['git:read'],\n ttl: DEFAULT_TOKEN_TTL_SECONDS,\n });\n\n // Allow 404 to indicate \"not found\" without throwing\n const resp = await this.api.get('repo', jwt, { allowedStatus: [404] });\n if (resp.status === 404) {\n return null;\n }\n\n const body = (await resp.json()) as {\n default_branch?: string;\n created_at?: string;\n };\n const defaultBranch = body.default_branch ?? 'main';\n const createdAt = body.created_at ?? '';\n\n return this.repo({\n id: options.id,\n defaultBranch,\n createdAt,\n });\n }\n\n /**\n * Create a Repo handle from known metadata without making an HTTP request.\n */\n repo(options: RepoOptions): Repo {\n if (!options || typeof options.id !== 'string' || options.id.trim() === '') {\n throw new Error('repo requires a non-empty repository id.');\n }\n\n return new RepoImpl(\n options.id,\n options.defaultBranch ?? 'main',\n options.createdAt ?? '',\n this.options,\n this.generateJWT.bind(this)\n );\n }\n\n /**\n * Delete a repository by ID\n * @param options The delete options containing the repo ID\n * @returns The deletion result\n */\n async deleteRepo(options: DeleteRepoOptions): Promise<DeleteRepoResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(options.id, {\n permissions: ['repo:write'],\n ttl,\n });\n\n // Allow 404 and 409 for clearer error handling\n const resp = await this.api.delete('repos/delete', jwt, {\n allowedStatus: [404, 409],\n });\n if (resp.status === 404) {\n throw new Error('Repository not found');\n }\n if (resp.status === 409) {\n throw new Error('Repository already deleted');\n }\n\n const body = (await resp.json()) as { repo_id: string; message: string };\n return {\n repoId: body.repo_id,\n message: body.message,\n };\n }\n\n /**\n * Create a generic git credential for a repository.\n * Used to authenticate sync operations for non-GitHub providers (GitLab, Bitbucket, etc.)\n */\n async createGitCredential(\n options: CreateGitCredentialOptions\n ): Promise<GitCredential> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(options.repoId, {\n permissions: ['repo:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n repo_id: options.repoId,\n password: options.password,\n };\n if (options.username !== undefined) {\n body.username = options.username;\n }\n\n const resp = await this.api.post(\n { path: 'repos/git-credentials', body },\n jwt,\n { allowedStatus: [409] }\n );\n if (resp.status === 409) {\n throw new Error('A credential already exists for this repository');\n }\n\n const data = (await resp.json()) as { id: string };\n return { id: data.id };\n }\n\n /**\n * Update an existing generic git credential.\n */\n async updateGitCredential(\n options: UpdateGitCredentialOptions\n ): Promise<GitCredential> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT('org', {\n permissions: ['repo:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n id: options.id,\n password: options.password,\n };\n if (options.username !== undefined) {\n body.username = options.username;\n }\n\n const resp = await this.api.put(\n { path: 'repos/git-credentials', body },\n jwt,\n { allowedStatus: [404] }\n );\n if (resp.status === 404) {\n throw new Error('Credential not found');\n }\n\n const data = (await resp.json()) as { id: string; created_at?: string };\n return {\n id: data.id,\n ...(data.created_at ? { createdAt: data.created_at } : {}),\n };\n }\n\n /**\n * Delete a generic git credential.\n */\n async deleteGitCredential(options: DeleteGitCredentialOptions): Promise<void> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT('org', {\n permissions: ['repo:write'],\n ttl,\n });\n\n const resp = await this.api.delete(\n { path: 'repos/git-credentials', body: { id: options.id } },\n jwt,\n { allowedStatus: [404] }\n );\n if (resp.status === 404) {\n throw new Error('Credential not found');\n }\n }\n\n /**\n * Get the current configuration\n * @returns The client configuration\n */\n getConfig(): GitStorageOptions {\n return { ...this.options };\n }\n\n /**\n * Generate a JWT token for git storage URL authentication\n * @private\n */\n private async generateJWT(\n repoId: string,\n options?: GetRemoteURLOptions\n ): Promise<string> {\n // Default permissions and TTL\n const permissions = options?.permissions || ['git:write', 'git:read'];\n const ttl = resolveInvocationTtlSeconds(\n options,\n this.options.defaultTTL ?? 365 * 24 * 60 * 60\n );\n\n // Create the JWT payload\n const now = Math.floor(Date.now() / 1000);\n const payload = {\n iss: this.options.name,\n sub: '@pierre/storage',\n repo: repoId,\n scopes: permissions,\n iat: now,\n exp: now + ttl,\n };\n\n // Sign the JWT with the key as the secret\n // Using HS256 for symmetric signing with the key\n const key = await importPKCS8(this.options.key, 'ES256');\n // Sign the JWT with the key as the secret\n const jwt = await new SignJWT(payload)\n .setProtectedHeader({ alg: 'ES256', typ: 'JWT' })\n .sign(key);\n\n return jwt;\n }\n}\n\n// Export a default client factory\nexport function createClient(options: GitStorageOptions): GitStorage {\n return new GitStorage(options);\n}\n\n// Export CodeStorage as an alias for GitStorage\nexport { GitStorage as CodeStorage };\n\n// Type alias for backward compatibility\nexport type StorageOptions = GitStorageOptions;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/schemas.ts","../src/commit-pack.ts","../src/stream-utils.ts","../package.json","../src/version.ts","../src/commit.ts","../src/diff-commit.ts","../src/fetch.ts","../src/types.ts","../src/util.ts","../src/webhook.ts","../src/index.ts"],"names":["BufferCtor","buildMessageIterable","normalizeBranchName","API_BASE_URL","crypto","toRefUpdate"],"mappings":"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","file":"index.js","sourcesContent":["import type { RefUpdate, RefUpdateReason } from './types';\n\nexport interface RefUpdateErrorOptions {\n status: string;\n message?: string;\n refUpdate?: Partial<RefUpdate>;\n reason?: RefUpdateReason;\n}\n\nexport class RefUpdateError extends Error {\n public readonly status: string;\n public readonly reason: RefUpdateReason;\n public readonly refUpdate?: Partial<RefUpdate>;\n\n constructor(message: string, options: RefUpdateErrorOptions) {\n super(message);\n this.name = 'RefUpdateError';\n this.status = options.status;\n this.reason = options.reason ?? inferRefUpdateReason(options.status);\n this.refUpdate = options.refUpdate;\n }\n}\n\nconst REF_REASON_MAP: Record<string, RefUpdateReason> = {\n precondition_failed: 'precondition_failed',\n conflict: 'conflict',\n not_found: 'not_found',\n invalid: 'invalid',\n timeout: 'timeout',\n unauthorized: 'unauthorized',\n forbidden: 'forbidden',\n unavailable: 'unavailable',\n internal: 'internal',\n failed: 'failed',\n ok: 'unknown',\n};\n\nexport function inferRefUpdateReason(status?: string): RefUpdateReason {\n if (!status) {\n return 'unknown';\n }\n\n const trimmed = status.trim();\n if (trimmed === '') {\n return 'unknown';\n }\n\n const label = trimmed.toLowerCase();\n return REF_REASON_MAP[label] ?? 'unknown';\n}\n","import { z } from 'zod';\n\nexport const listFilesResponseSchema = z.object({\n paths: z.array(z.string()),\n ref: z.string(),\n});\n\nexport const fileWithMetadataRawSchema = z.object({\n path: z.string(),\n mode: z.string(),\n size: z.number(),\n last_commit_sha: z.string(),\n});\n\nexport const commitMetadataRawSchema = z.object({\n author: z.string(),\n date: z.string(),\n message: z.string(),\n});\n\nexport const listFilesWithMetadataResponseSchema = z.object({\n files: z.array(fileWithMetadataRawSchema),\n commits: z.record(commitMetadataRawSchema),\n ref: z.string(),\n});\n\nexport const branchInfoSchema = z.object({\n cursor: z.string(),\n name: z.string(),\n head_sha: z.string(),\n created_at: z.string(),\n});\n\nexport const listBranchesResponseSchema = z.object({\n branches: z.array(branchInfoSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const commitInfoRawSchema = z.object({\n sha: z.string(),\n message: z.string(),\n author_name: z.string(),\n author_email: z.string(),\n committer_name: z.string(),\n committer_email: z.string(),\n date: z.string(),\n});\n\nexport const listCommitsResponseSchema = z.object({\n commits: z.array(commitInfoRawSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const repoBaseInfoSchema = z.object({\n provider: z.string(),\n owner: z.string(),\n name: z.string(),\n});\n\nexport const repoInfoSchema = z.object({\n repo_id: z.string(),\n url: z.string(),\n default_branch: z.string(),\n created_at: z.string(),\n base_repo: repoBaseInfoSchema.optional().nullable(),\n});\n\nexport const listReposResponseSchema = z.object({\n repos: z.array(repoInfoSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const noteReadResponseSchema = z.object({\n sha: z.string(),\n note: z.string(),\n ref_sha: z.string(),\n});\n\nexport const noteResultSchema = z.object({\n success: z.boolean(),\n status: z.string(),\n message: z.string().optional(),\n});\n\nexport const noteWriteResponseSchema = z.object({\n sha: z.string(),\n target_ref: z.string(),\n base_commit: z.string().optional(),\n new_ref_sha: z.string(),\n result: noteResultSchema,\n});\n\nexport const diffStatsSchema = z.object({\n files: z.number(),\n additions: z.number(),\n deletions: z.number(),\n changes: z.number(),\n});\n\nexport const diffFileRawSchema = z.object({\n path: z.string(),\n state: z.string(),\n old_path: z.string().nullable().optional(),\n raw: z.string(),\n bytes: z.number(),\n is_eof: z.boolean(),\n additions: z.number().optional(),\n deletions: z.number().optional(),\n});\n\nexport const filteredFileRawSchema = z.object({\n path: z.string(),\n state: z.string(),\n old_path: z.string().nullable().optional(),\n bytes: z.number(),\n is_eof: z.boolean(),\n});\n\nexport const branchDiffResponseSchema = z.object({\n branch: z.string(),\n base: z.string(),\n stats: diffStatsSchema,\n files: z.array(diffFileRawSchema),\n filtered_files: z.array(filteredFileRawSchema),\n});\n\nexport const commitDiffResponseSchema = z.object({\n sha: z.string(),\n stats: diffStatsSchema,\n files: z.array(diffFileRawSchema),\n filtered_files: z.array(filteredFileRawSchema),\n});\n\nexport const createBranchResponseSchema = z.object({\n message: z.string(),\n target_branch: z.string(),\n target_is_ephemeral: z.boolean(),\n commit_sha: z.string().nullable().optional(),\n});\n\nexport const tagInfoSchema = z.object({\n cursor: z.string(),\n name: z.string(),\n sha: z.string(),\n});\n\nexport const listTagsResponseSchema = z.object({\n tags: z.array(tagInfoSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const createTagResponseSchema = z.object({\n name: z.string(),\n sha: z.string(),\n message: z.string(),\n});\n\nexport const deleteTagResponseSchema = z.object({\n name: z.string(),\n message: z.string(),\n});\n\nexport const refUpdateResultSchema = z.object({\n branch: z.string(),\n old_sha: z.string(),\n new_sha: z.string(),\n success: z.boolean(),\n status: z.string(),\n message: z.string().optional(),\n});\n\nexport const commitPackCommitSchema = z.object({\n commit_sha: z.string(),\n tree_sha: z.string(),\n target_branch: z.string(),\n pack_bytes: z.number(),\n blob_count: z.number(),\n});\n\nexport const restoreCommitCommitSchema = commitPackCommitSchema.omit({\n blob_count: true,\n});\n\nexport const refUpdateResultWithOptionalsSchema = z.object({\n branch: z.string().optional(),\n old_sha: z.string().optional(),\n new_sha: z.string().optional(),\n success: z.boolean().optional(),\n status: z.string(),\n message: z.string().optional(),\n});\n\nexport const commitPackAckSchema = z.object({\n commit: commitPackCommitSchema,\n result: refUpdateResultSchema,\n});\n\nexport const restoreCommitAckSchema = z.object({\n commit: restoreCommitCommitSchema,\n result: refUpdateResultSchema.extend({ success: z.literal(true) }),\n});\n\nexport const commitPackResponseSchema = z.object({\n commit: commitPackCommitSchema.partial().optional().nullable(),\n result: refUpdateResultWithOptionalsSchema,\n});\n\nexport const restoreCommitResponseSchema = z.object({\n commit: restoreCommitCommitSchema.partial().optional().nullable(),\n result: refUpdateResultWithOptionalsSchema,\n});\n\nexport const grepLineSchema = z.object({\n line_number: z.number(),\n text: z.string(),\n type: z.string(),\n});\n\nexport const grepFileMatchSchema = z.object({\n path: z.string(),\n lines: z.array(grepLineSchema),\n});\n\nexport const grepResponseSchema = z.object({\n query: z.object({\n pattern: z.string(),\n case_sensitive: z.boolean(),\n }),\n repo: z.object({\n ref: z.string(),\n commit: z.string(),\n }),\n matches: z.array(grepFileMatchSchema),\n next_cursor: z.string().nullable().optional(),\n has_more: z.boolean(),\n});\n\nexport const errorEnvelopeSchema = z.object({\n error: z.string(),\n});\n\nexport type ListFilesResponseRaw = z.infer<typeof listFilesResponseSchema>;\nexport type RawFileWithMetadata = z.infer<typeof fileWithMetadataRawSchema>;\nexport type RawCommitMetadata = z.infer<typeof commitMetadataRawSchema>;\nexport type ListFilesWithMetadataResponseRaw = z.infer<\n typeof listFilesWithMetadataResponseSchema\n>;\nexport type RawBranchInfo = z.infer<typeof branchInfoSchema>;\nexport type ListBranchesResponseRaw = z.infer<\n typeof listBranchesResponseSchema\n>;\nexport type RawCommitInfo = z.infer<typeof commitInfoRawSchema>;\nexport type ListCommitsResponseRaw = z.infer<typeof listCommitsResponseSchema>;\nexport type RawRepoBaseInfo = z.infer<typeof repoBaseInfoSchema>;\nexport type RawRepoInfo = z.infer<typeof repoInfoSchema>;\nexport type ListReposResponseRaw = z.infer<typeof listReposResponseSchema>;\nexport type NoteReadResponseRaw = z.infer<typeof noteReadResponseSchema>;\nexport type NoteWriteResponseRaw = z.infer<typeof noteWriteResponseSchema>;\nexport type RawFileDiff = z.infer<typeof diffFileRawSchema>;\nexport type RawFilteredFile = z.infer<typeof filteredFileRawSchema>;\nexport type GetBranchDiffResponseRaw = z.infer<typeof branchDiffResponseSchema>;\nexport type GetCommitDiffResponseRaw = z.infer<typeof commitDiffResponseSchema>;\nexport type CreateBranchResponseRaw = z.infer<\n typeof createBranchResponseSchema\n>;\nexport type RawTagInfo = z.infer<typeof tagInfoSchema>;\nexport type ListTagsResponseRaw = z.infer<typeof listTagsResponseSchema>;\nexport type CreateTagResponseRaw = z.infer<typeof createTagResponseSchema>;\nexport type DeleteTagResponseRaw = z.infer<typeof deleteTagResponseSchema>;\nexport type CommitPackAckRaw = z.infer<typeof commitPackAckSchema>;\nexport type RestoreCommitAckRaw = z.infer<typeof restoreCommitAckSchema>;\nexport type GrepResponseRaw = z.infer<typeof grepResponseSchema>;\n","import { RefUpdateError, inferRefUpdateReason } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackResponseSchema, errorEnvelopeSchema } from './schemas';\nimport type { CommitResult, RefUpdate } from './types';\n\nexport type CommitPackAck = CommitPackAckRaw;\n\nexport function buildCommitResult(ack: CommitPackAckRaw): CommitResult {\n const refUpdate = toRefUpdate(ack.result);\n if (!ack.result.success) {\n throw new RefUpdateError(\n ack.result.message ?? `Commit failed with status ${ack.result.status}`,\n {\n status: ack.result.status,\n message: ack.result.message,\n refUpdate,\n }\n );\n }\n return {\n commitSha: ack.commit.commit_sha,\n treeSha: ack.commit.tree_sha,\n targetBranch: ack.commit.target_branch,\n packBytes: ack.commit.pack_bytes,\n blobCount: ack.commit.blob_count,\n refUpdate,\n };\n}\n\nexport function toRefUpdate(result: CommitPackAckRaw['result']): RefUpdate {\n return {\n branch: result.branch,\n oldSha: result.old_sha,\n newSha: result.new_sha,\n };\n}\n\nexport async function parseCommitPackError(\n response: Response,\n fallbackMessage: string\n): Promise<{\n statusMessage: string;\n statusLabel: string;\n refUpdate?: Partial<RefUpdate>;\n}> {\n const cloned = response.clone();\n let jsonBody: unknown;\n try {\n jsonBody = await cloned.json();\n } catch {\n jsonBody = undefined;\n }\n\n let textBody: string | undefined;\n if (jsonBody === undefined) {\n try {\n textBody = await response.text();\n } catch {\n textBody = undefined;\n }\n }\n\n const defaultStatus = (() => {\n const inferred = inferRefUpdateReason(String(response.status));\n return inferred === 'unknown' ? 'failed' : inferred;\n })();\n let statusLabel = defaultStatus;\n let refUpdate: Partial<RefUpdate> | undefined;\n let message: string | undefined;\n\n if (jsonBody !== undefined) {\n const parsedResponse = commitPackResponseSchema.safeParse(jsonBody);\n if (parsedResponse.success) {\n const result = parsedResponse.data.result;\n if (typeof result.status === 'string' && result.status.trim() !== '') {\n statusLabel = result.status.trim() as typeof statusLabel;\n }\n refUpdate = toPartialRefUpdateFields(\n result.branch,\n result.old_sha,\n result.new_sha\n );\n if (typeof result.message === 'string' && result.message.trim() !== '') {\n message = result.message.trim();\n }\n }\n\n if (!message) {\n const parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n if (parsedError.success) {\n const trimmed = parsedError.data.error.trim();\n if (trimmed) {\n message = trimmed;\n }\n }\n }\n }\n\n if (!message && typeof jsonBody === 'string' && jsonBody.trim() !== '') {\n message = jsonBody.trim();\n }\n\n if (!message && textBody && textBody.trim() !== '') {\n message = textBody.trim();\n }\n\n return {\n statusMessage: message ?? fallbackMessage,\n statusLabel,\n refUpdate,\n };\n}\n\nfunction toPartialRefUpdateFields(\n branch?: string | null,\n oldSha?: string | null,\n newSha?: string | null\n): Partial<RefUpdate> | undefined {\n const refUpdate: Partial<RefUpdate> = {};\n\n if (typeof branch === 'string' && branch.trim() !== '') {\n refUpdate.branch = branch.trim();\n }\n if (typeof oldSha === 'string' && oldSha.trim() !== '') {\n refUpdate.oldSha = oldSha.trim();\n }\n if (typeof newSha === 'string' && newSha.trim() !== '') {\n refUpdate.newSha = newSha.trim();\n }\n\n return Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n","import type { BlobLike, FileLike, ReadableStreamLike } from './types';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n from(data: Uint8Array): NodeBuffer;\n from(data: string, encoding?: string): NodeBuffer;\n isBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n globalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\nexport const MAX_CHUNK_BYTES = 4 * 1024 * 1024;\n\nexport type ChunkSegment = {\n chunk: Uint8Array;\n eof: boolean;\n};\n\nexport async function* chunkify(\n source: AsyncIterable<Uint8Array>\n): AsyncIterable<ChunkSegment> {\n let pending: Uint8Array | null = null;\n let produced = false;\n\n for await (const value of source) {\n const bytes = value;\n\n if (pending && pending.byteLength === MAX_CHUNK_BYTES) {\n yield { chunk: pending, eof: false };\n produced = true;\n pending = null;\n }\n\n const merged: Uint8Array = pending ? concatChunks(pending, bytes) : bytes;\n pending = null;\n\n let cursor: Uint8Array = merged;\n while (cursor.byteLength > MAX_CHUNK_BYTES) {\n const chunk: Uint8Array = cursor.slice(0, MAX_CHUNK_BYTES);\n cursor = cursor.slice(MAX_CHUNK_BYTES);\n yield { chunk, eof: false };\n produced = true;\n }\n\n pending = cursor;\n }\n\n if (pending) {\n yield { chunk: pending, eof: true };\n produced = true;\n }\n\n if (!produced) {\n yield { chunk: new Uint8Array(0), eof: true };\n }\n}\n\nexport async function* toAsyncIterable(\n source:\n | string\n | Uint8Array\n | ArrayBuffer\n | BlobLike\n | FileLike\n | ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n | AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n | Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n): AsyncIterable<Uint8Array> {\n if (typeof source === 'string') {\n yield new TextEncoder().encode(source);\n return;\n }\n if (source instanceof Uint8Array) {\n yield source;\n return;\n }\n if (source instanceof ArrayBuffer) {\n yield new Uint8Array(source);\n return;\n }\n if (ArrayBuffer.isView(source)) {\n yield new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n return;\n }\n if (isBlobLike(source)) {\n const stream = source.stream();\n if (isAsyncIterable(stream)) {\n for await (const chunk of stream as AsyncIterable<unknown>) {\n yield ensureUint8Array(chunk);\n }\n return;\n }\n if (isReadableStreamLike(stream)) {\n yield* readReadableStream(stream);\n return;\n }\n }\n if (isReadableStreamLike(source)) {\n yield* readReadableStream(source);\n return;\n }\n if (isAsyncIterable(source)) {\n for await (const chunk of source as AsyncIterable<unknown>) {\n yield ensureUint8Array(chunk);\n }\n return;\n }\n if (isIterable(source)) {\n for (const chunk of source as Iterable<unknown>) {\n yield ensureUint8Array(chunk);\n }\n return;\n }\n throw new Error('Unsupported content source; expected binary data');\n}\n\nexport function base64Encode(bytes: Uint8Array): string {\n if (BufferCtor) {\n return BufferCtor.from(bytes).toString('base64');\n }\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n const btoaFn = (globalThis as { btoa?: (data: string) => string }).btoa;\n if (typeof btoaFn === 'function') {\n return btoaFn(binary);\n }\n throw new Error('Base64 encoding is not supported in this environment');\n}\n\nexport function requiresDuplex(body: unknown): boolean {\n if (!body || typeof body !== 'object') {\n return false;\n }\n\n if (\n typeof (body as { [Symbol.asyncIterator]?: unknown })[\n Symbol.asyncIterator\n ] === 'function'\n ) {\n return true;\n }\n\n const readableStreamCtor = (\n globalThis as {\n ReadableStream?: new (...args: unknown[]) => unknown;\n }\n ).ReadableStream;\n if (readableStreamCtor && body instanceof readableStreamCtor) {\n return true;\n }\n\n return false;\n}\n\nexport function toRequestBody(iterable: AsyncIterable<Uint8Array>): unknown {\n const readableStreamCtor = (\n globalThis as {\n ReadableStream?: new (underlyingSource: unknown) => unknown;\n }\n ).ReadableStream;\n if (typeof readableStreamCtor === 'function') {\n const iterator = iterable[Symbol.asyncIterator]();\n return new readableStreamCtor({\n async pull(controller: {\n enqueue(chunk: Uint8Array): void;\n close(): void;\n }) {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n return;\n }\n controller.enqueue(value!);\n },\n async cancel(reason: unknown) {\n if (typeof iterator.return === 'function') {\n await iterator.return(reason);\n }\n },\n });\n }\n return iterable;\n}\n\nasync function* readReadableStream(\n stream: ReadableStreamLike<unknown>\n): AsyncIterable<Uint8Array> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n if (value !== undefined) {\n yield ensureUint8Array(value);\n }\n }\n } finally {\n reader.releaseLock?.();\n }\n}\n\nfunction ensureUint8Array(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) {\n return value;\n }\n if (value instanceof ArrayBuffer) {\n return new Uint8Array(value);\n }\n if (ArrayBuffer.isView(value)) {\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n if (typeof value === 'string') {\n return new TextEncoder().encode(value);\n }\n if (BufferCtor && BufferCtor.isBuffer(value)) {\n return value as Uint8Array;\n }\n throw new Error('Unsupported chunk type; expected binary data');\n}\n\nfunction isBlobLike(value: unknown): value is BlobLike {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as BlobLike).stream === 'function'\n );\n}\n\nfunction isReadableStreamLike<T>(\n value: unknown\n): value is ReadableStreamLike<T> {\n return (\n typeof value === 'object' &&\n value !== null &&\n typeof (value as ReadableStreamLike<T>).getReader === 'function'\n );\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n Symbol.asyncIterator in (value as Record<string, unknown>)\n );\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n Symbol.iterator in (value as Record<string, unknown>)\n );\n}\n\nfunction concatChunks(a: Uint8Array, b: Uint8Array): Uint8Array {\n if (a.byteLength === 0) {\n return b;\n }\n if (b.byteLength === 0) {\n return a;\n }\n const merged = new Uint8Array(a.byteLength + b.byteLength);\n merged.set(a, 0);\n merged.set(b, a.byteLength);\n return merged;\n}\n","{\n \"name\": \"@pierre/storage\",\n \"version\": \"1.4.1\",\n \"description\": \"Pierre Git Storage SDK\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/pierrecomputer/sdk\"\n },\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\",\n \"default\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"src\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"jose\": \"^5.10.0\",\n \"snakecase-keys\": \"^9.0.2\",\n \"zod\": \"^3.23.8\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.0.0\",\n \"tsup\": \"8.5.0\",\n \"typescript\": \"5.8.3\",\n \"vitest\": \"3.2.4\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","import packageJson from '../package.json';\n\nexport const PACKAGE_NAME = 'code-storage-sdk';\nexport const PACKAGE_VERSION = packageJson.version;\n\nexport function getUserAgent(): string {\n return `${PACKAGE_NAME}/${PACKAGE_VERSION}`;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n type ChunkSegment,\n base64Encode,\n chunkify,\n requiresDuplex,\n toAsyncIterable,\n toRequestBody,\n} from './stream-utils';\nimport type {\n CommitBuilder,\n CommitFileOptions,\n CommitFileSource,\n CommitResult,\n CommitSignature,\n CommitTextFileOptions,\n CreateCommitOptions,\n LegacyCreateCommitOptions,\n} from './types';\nimport { getUserAgent } from './version';\n\nconst DEFAULT_TTL_SECONDS = 60 * 60;\nconst HEADS_REF_PREFIX = 'refs/heads/';\n\ntype NodeBuffer = Uint8Array & { toString(encoding?: string): string };\ninterface NodeBufferConstructor {\n from(data: Uint8Array): NodeBuffer;\n from(data: string, encoding?: string): NodeBuffer;\n isBuffer(value: unknown): value is NodeBuffer;\n}\n\nconst BufferCtor: NodeBufferConstructor | undefined = (\n globalThis as { Buffer?: NodeBufferConstructor }\n).Buffer;\n\ninterface CommitMetadataPayload {\n target_branch: string;\n expected_head_sha?: string;\n base_branch?: string;\n commit_message: string;\n ephemeral?: boolean;\n ephemeral_base?: boolean;\n author: {\n name: string;\n email: string;\n };\n committer?: {\n name: string;\n email: string;\n };\n files: Array<{\n path: string;\n content_id: string;\n operation?: 'upsert' | 'delete';\n mode?: string;\n }>;\n}\n\ninterface CommitTransportRequest {\n authorization: string;\n signal?: AbortSignal;\n metadata: CommitMetadataPayload;\n blobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>;\n}\n\ninterface CommitTransport {\n send(request: CommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedCommitOptions = {\n targetBranch: string;\n commitMessage: string;\n expectedHeadSha?: string;\n baseBranch?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n author: CommitSignature;\n committer?: CommitSignature;\n signal?: AbortSignal;\n ttl?: number;\n};\n\ninterface CommitBuilderDeps {\n options: CreateCommitOptions;\n getAuthToken: () => Promise<string>;\n transport: CommitTransport;\n}\n\ntype FileOperationState = {\n path: string;\n contentId: string;\n mode?: string;\n operation: 'upsert' | 'delete';\n streamFactory?: () => AsyncIterable<Uint8Array>;\n};\n\nexport class CommitBuilderImpl implements CommitBuilder {\n private readonly options: NormalizedCommitOptions;\n private readonly getAuthToken: () => Promise<string>;\n private readonly transport: CommitTransport;\n private readonly operations: FileOperationState[] = [];\n private sent = false;\n\n constructor(deps: CommitBuilderDeps) {\n this.options = normalizeCommitOptions(deps.options);\n this.getAuthToken = deps.getAuthToken;\n this.transport = deps.transport;\n\n const trimmedMessage = this.options.commitMessage?.trim();\n const trimmedAuthorName = this.options.author?.name?.trim();\n const trimmedAuthorEmail = this.options.author?.email?.trim();\n\n if (!trimmedMessage) {\n throw new Error('createCommit commitMessage is required');\n }\n if (!trimmedAuthorName || !trimmedAuthorEmail) {\n throw new Error('createCommit author name and email are required');\n }\n this.options.commitMessage = trimmedMessage;\n this.options.author = {\n name: trimmedAuthorName,\n email: trimmedAuthorEmail,\n };\n if (typeof this.options.expectedHeadSha === 'string') {\n this.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n }\n if (typeof this.options.baseBranch === 'string') {\n const trimmedBase = this.options.baseBranch.trim();\n if (trimmedBase === '') {\n delete this.options.baseBranch;\n } else {\n if (trimmedBase.startsWith('refs/')) {\n throw new Error(\n 'createCommit baseBranch must not include refs/ prefix'\n );\n }\n this.options.baseBranch = trimmedBase;\n }\n }\n\n if (this.options.ephemeralBase && !this.options.baseBranch) {\n throw new Error('createCommit ephemeralBase requires baseBranch');\n }\n }\n\n addFile(\n path: string,\n source: CommitFileSource,\n options?: CommitFileOptions\n ): CommitBuilder {\n this.ensureNotSent();\n const normalizedPath = this.normalizePath(path);\n const contentId = randomContentId();\n const mode = options?.mode ?? '100644';\n\n this.operations.push({\n path: normalizedPath,\n contentId,\n mode,\n operation: 'upsert',\n streamFactory: () => toAsyncIterable(source),\n });\n\n return this;\n }\n\n addFileFromString(\n path: string,\n contents: string,\n options?: CommitTextFileOptions\n ): CommitBuilder {\n const encoding = options?.encoding ?? 'utf8';\n const normalizedEncoding = encoding === 'utf-8' ? 'utf8' : encoding;\n let data: Uint8Array;\n if (normalizedEncoding === 'utf8') {\n data = new TextEncoder().encode(contents);\n } else if (BufferCtor) {\n data = BufferCtor.from(\n contents,\n normalizedEncoding as Parameters<NodeBufferConstructor['from']>[1]\n );\n } else {\n throw new Error(\n `Unsupported encoding \"${encoding}\" in this environment. Non-UTF encodings require Node.js Buffer support.`\n );\n }\n return this.addFile(path, data, options);\n }\n\n deletePath(path: string): CommitBuilder {\n this.ensureNotSent();\n const normalizedPath = this.normalizePath(path);\n this.operations.push({\n path: normalizedPath,\n contentId: randomContentId(),\n operation: 'delete',\n });\n return this;\n }\n\n async send(): Promise<CommitResult> {\n this.ensureNotSent();\n this.sent = true;\n\n const metadata = this.buildMetadata();\n const blobEntries = this.operations\n .filter((op) => op.operation === 'upsert' && op.streamFactory)\n .map((op) => ({\n contentId: op.contentId,\n chunks: chunkify(op.streamFactory!()),\n }));\n\n const authorization = await this.getAuthToken();\n const ack = await this.transport.send({\n authorization,\n signal: this.options.signal,\n metadata,\n blobs: blobEntries,\n });\n return buildCommitResult(ack);\n }\n\n private buildMetadata(): CommitMetadataPayload {\n const files = this.operations.map((op) => {\n const entry: CommitMetadataPayload['files'][number] = {\n path: op.path,\n content_id: op.contentId,\n operation: op.operation,\n };\n if (op.mode) {\n entry.mode = op.mode;\n }\n return entry;\n });\n\n const metadata: CommitMetadataPayload = {\n target_branch: this.options.targetBranch,\n commit_message: this.options.commitMessage,\n author: {\n name: this.options.author.name,\n email: this.options.author.email,\n },\n files,\n };\n\n if (this.options.expectedHeadSha) {\n metadata.expected_head_sha = this.options.expectedHeadSha;\n }\n if (this.options.baseBranch) {\n metadata.base_branch = this.options.baseBranch;\n }\n if (this.options.committer) {\n metadata.committer = {\n name: this.options.committer.name,\n email: this.options.committer.email,\n };\n }\n\n if (this.options.ephemeral) {\n metadata.ephemeral = true;\n }\n if (this.options.ephemeralBase) {\n metadata.ephemeral_base = true;\n }\n\n return metadata;\n }\n\n private ensureNotSent(): void {\n if (this.sent) {\n throw new Error('createCommit builder cannot be reused after send()');\n }\n }\n\n private normalizePath(path: string): string {\n if (!path || typeof path !== 'string' || path.trim() === '') {\n throw new Error('File path must be a non-empty string');\n }\n return path.replace(/^\\//, '');\n }\n}\n\nexport class FetchCommitTransport implements CommitTransport {\n private readonly url: string;\n\n constructor(config: { baseUrl: string; version: number }) {\n const trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n this.url = `${trimmedBase}/api/v${config.version}/repos/commit-pack`;\n }\n\n async send(request: CommitTransportRequest): Promise<CommitPackAckRaw> {\n const bodyIterable = buildMessageIterable(request.metadata, request.blobs);\n const body = toRequestBody(bodyIterable);\n\n const init: RequestInit = {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${request.authorization}`,\n 'Content-Type': 'application/x-ndjson',\n Accept: 'application/json',\n 'Code-Storage-Agent': getUserAgent(),\n },\n body: body as any,\n signal: request.signal,\n };\n\n if (requiresDuplex(body)) {\n (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n }\n\n const response = await fetch(this.url, init);\n\n if (!response.ok) {\n const fallbackMessage = `createCommit request failed (${response.status} ${response.statusText})`;\n const { statusMessage, statusLabel, refUpdate } =\n await parseCommitPackError(response, fallbackMessage);\n throw new RefUpdateError(statusMessage, {\n status: statusLabel,\n message: statusMessage,\n refUpdate,\n });\n }\n\n const ack = commitPackAckSchema.parse(await response.json());\n return ack;\n }\n}\n\nfunction buildMessageIterable(\n metadata: CommitMetadataPayload,\n blobs: Array<{ contentId: string; chunks: AsyncIterable<ChunkSegment> }>\n): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n return {\n async *[Symbol.asyncIterator]() {\n yield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n for (const blob of blobs) {\n for await (const segment of blob.chunks) {\n const payload = {\n blob_chunk: {\n content_id: blob.contentId,\n data: base64Encode(segment.chunk),\n eof: segment.eof,\n },\n };\n yield encoder.encode(`${JSON.stringify(payload)}\\n`);\n }\n }\n },\n };\n}\n\nfunction randomContentId(): string {\n const cryptoObj = globalThis.crypto;\n if (cryptoObj && typeof cryptoObj.randomUUID === 'function') {\n return cryptoObj.randomUUID();\n }\n const random = Math.random().toString(36).slice(2);\n return `cid-${Date.now().toString(36)}-${random}`;\n}\n\nfunction normalizeCommitOptions(\n options: CreateCommitOptions\n): NormalizedCommitOptions {\n return {\n targetBranch: resolveTargetBranch(options),\n commitMessage: options.commitMessage,\n expectedHeadSha: options.expectedHeadSha,\n baseBranch: options.baseBranch,\n ephemeral: options.ephemeral === true,\n ephemeralBase: options.ephemeralBase === true,\n author: options.author,\n committer: options.committer,\n signal: options.signal,\n ttl: options.ttl,\n };\n}\n\nfunction resolveTargetBranch(options: CreateCommitOptions): string {\n const branchCandidate =\n typeof options.targetBranch === 'string' ? options.targetBranch.trim() : '';\n if (branchCandidate) {\n return normalizeBranchName(branchCandidate);\n }\n if (hasLegacyTargetRef(options)) {\n return normalizeLegacyTargetRef(options.targetRef);\n }\n throw new Error('createCommit targetBranch is required');\n}\n\nfunction normalizeBranchName(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error('createCommit targetBranch is required');\n }\n if (trimmed.startsWith(HEADS_REF_PREFIX)) {\n const branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n if (!branch) {\n throw new Error('createCommit targetBranch is required');\n }\n return branch;\n }\n if (trimmed.startsWith('refs/')) {\n throw new Error('createCommit targetBranch must not include refs/ prefix');\n }\n return trimmed;\n}\n\nfunction normalizeLegacyTargetRef(ref: string): string {\n const trimmed = ref.trim();\n if (!trimmed) {\n throw new Error('createCommit targetRef is required');\n }\n if (!trimmed.startsWith(HEADS_REF_PREFIX)) {\n throw new Error('createCommit targetRef must start with refs/heads/');\n }\n const branch = trimmed.slice(HEADS_REF_PREFIX.length).trim();\n if (!branch) {\n throw new Error('createCommit targetRef must include a branch name');\n }\n return branch;\n}\n\nfunction hasLegacyTargetRef(\n options: CreateCommitOptions\n): options is LegacyCreateCommitOptions {\n return typeof (options as LegacyCreateCommitOptions).targetRef === 'string';\n}\n\nexport function createCommitBuilder(deps: CommitBuilderDeps): CommitBuilder {\n return new CommitBuilderImpl(deps);\n}\n\nexport function resolveCommitTtlSeconds(options?: { ttl?: number }): number {\n if (typeof options?.ttl === 'number' && options.ttl > 0) {\n return options.ttl;\n }\n return DEFAULT_TTL_SECONDS;\n}\n","import { buildCommitResult, parseCommitPackError } from './commit-pack';\nimport { RefUpdateError } from './errors';\nimport type { CommitPackAckRaw } from './schemas';\nimport { commitPackAckSchema } from './schemas';\nimport {\n type ChunkSegment,\n base64Encode,\n chunkify,\n requiresDuplex,\n toAsyncIterable,\n toRequestBody,\n} from './stream-utils';\nimport type {\n CommitResult,\n CommitSignature,\n CreateCommitFromDiffOptions,\n DiffSource,\n} from './types';\nimport { getUserAgent } from './version';\n\ninterface DiffCommitMetadataPayload {\n target_branch: string;\n expected_head_sha?: string;\n base_branch?: string;\n commit_message: string;\n ephemeral?: boolean;\n ephemeral_base?: boolean;\n author: {\n name: string;\n email: string;\n };\n committer?: {\n name: string;\n email: string;\n };\n}\n\ninterface DiffCommitTransportRequest {\n authorization: string;\n signal?: AbortSignal;\n metadata: DiffCommitMetadataPayload;\n diffChunks: AsyncIterable<ChunkSegment>;\n}\n\ninterface DiffCommitTransport {\n send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw>;\n}\n\ntype NormalizedDiffCommitOptions = {\n targetBranch: string;\n commitMessage: string;\n expectedHeadSha?: string;\n baseBranch?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n author: CommitSignature;\n committer?: CommitSignature;\n signal?: AbortSignal;\n ttl?: number;\n initialDiff: DiffSource;\n};\n\ninterface CommitFromDiffSendDeps {\n options: CreateCommitFromDiffOptions;\n getAuthToken: () => Promise<string>;\n transport: DiffCommitTransport;\n}\n\nclass DiffCommitExecutor {\n private readonly options: NormalizedDiffCommitOptions;\n private readonly getAuthToken: () => Promise<string>;\n private readonly transport: DiffCommitTransport;\n private readonly diffFactory: () => AsyncIterable<Uint8Array>;\n private sent = false;\n\n constructor(deps: CommitFromDiffSendDeps) {\n this.options = normalizeDiffCommitOptions(deps.options);\n this.getAuthToken = deps.getAuthToken;\n this.transport = deps.transport;\n\n const trimmedMessage = this.options.commitMessage?.trim();\n const trimmedAuthorName = this.options.author?.name?.trim();\n const trimmedAuthorEmail = this.options.author?.email?.trim();\n\n if (!trimmedMessage) {\n throw new Error('createCommitFromDiff commitMessage is required');\n }\n if (!trimmedAuthorName || !trimmedAuthorEmail) {\n throw new Error(\n 'createCommitFromDiff author name and email are required'\n );\n }\n\n this.options.commitMessage = trimmedMessage;\n this.options.author = {\n name: trimmedAuthorName,\n email: trimmedAuthorEmail,\n };\n\n if (typeof this.options.expectedHeadSha === 'string') {\n this.options.expectedHeadSha = this.options.expectedHeadSha.trim();\n }\n if (typeof this.options.baseBranch === 'string') {\n const trimmedBase = this.options.baseBranch.trim();\n if (trimmedBase === '') {\n delete this.options.baseBranch;\n } else {\n if (trimmedBase.startsWith('refs/')) {\n throw new Error(\n 'createCommitFromDiff baseBranch must not include refs/ prefix'\n );\n }\n this.options.baseBranch = trimmedBase;\n }\n }\n if (this.options.ephemeralBase && !this.options.baseBranch) {\n throw new Error('createCommitFromDiff ephemeralBase requires baseBranch');\n }\n\n this.diffFactory = () => toAsyncIterable(this.options.initialDiff);\n }\n\n async send(): Promise<CommitResult> {\n this.ensureNotSent();\n this.sent = true;\n\n const metadata = this.buildMetadata();\n const diffIterable = chunkify(this.diffFactory());\n\n const authorization = await this.getAuthToken();\n const ack = await this.transport.send({\n authorization,\n signal: this.options.signal,\n metadata,\n diffChunks: diffIterable,\n });\n\n return buildCommitResult(ack);\n }\n\n private buildMetadata(): DiffCommitMetadataPayload {\n const metadata: DiffCommitMetadataPayload = {\n target_branch: this.options.targetBranch,\n commit_message: this.options.commitMessage,\n author: {\n name: this.options.author.name,\n email: this.options.author.email,\n },\n };\n\n if (this.options.expectedHeadSha) {\n metadata.expected_head_sha = this.options.expectedHeadSha;\n }\n if (this.options.baseBranch) {\n metadata.base_branch = this.options.baseBranch;\n }\n if (this.options.committer) {\n metadata.committer = {\n name: this.options.committer.name,\n email: this.options.committer.email,\n };\n }\n if (this.options.ephemeral) {\n metadata.ephemeral = true;\n }\n if (this.options.ephemeralBase) {\n metadata.ephemeral_base = true;\n }\n\n return metadata;\n }\n\n private ensureNotSent(): void {\n if (this.sent) {\n throw new Error('createCommitFromDiff cannot be reused after send()');\n }\n }\n}\n\nexport class FetchDiffCommitTransport implements DiffCommitTransport {\n private readonly url: string;\n\n constructor(config: { baseUrl: string; version: number }) {\n const trimmedBase = config.baseUrl.replace(/\\/+$/, '');\n this.url = `${trimmedBase}/api/v${config.version}/repos/diff-commit`;\n }\n\n async send(request: DiffCommitTransportRequest): Promise<CommitPackAckRaw> {\n const bodyIterable = buildMessageIterable(\n request.metadata,\n request.diffChunks\n );\n const body = toRequestBody(bodyIterable);\n\n const init: RequestInit = {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${request.authorization}`,\n 'Content-Type': 'application/x-ndjson',\n Accept: 'application/json',\n 'Code-Storage-Agent': getUserAgent(),\n },\n body: body as any,\n signal: request.signal,\n };\n\n if (requiresDuplex(body)) {\n (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n }\n\n const response = await fetch(this.url, init);\n if (!response.ok) {\n const fallbackMessage = `createCommitFromDiff request failed (${response.status} ${response.statusText})`;\n const { statusMessage, statusLabel, refUpdate } =\n await parseCommitPackError(response, fallbackMessage);\n throw new RefUpdateError(statusMessage, {\n status: statusLabel,\n message: statusMessage,\n refUpdate,\n });\n }\n\n return commitPackAckSchema.parse(await response.json());\n }\n}\n\nfunction buildMessageIterable(\n metadata: DiffCommitMetadataPayload,\n diffChunks: AsyncIterable<ChunkSegment>\n): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n return {\n async *[Symbol.asyncIterator]() {\n yield encoder.encode(`${JSON.stringify({ metadata })}\\n`);\n for await (const segment of diffChunks) {\n const payload = {\n diff_chunk: {\n data: base64Encode(segment.chunk),\n eof: segment.eof,\n },\n };\n yield encoder.encode(`${JSON.stringify(payload)}\\n`);\n }\n },\n };\n}\n\nfunction normalizeDiffCommitOptions(\n options: CreateCommitFromDiffOptions\n): NormalizedDiffCommitOptions {\n if (!options || typeof options !== 'object') {\n throw new Error('createCommitFromDiff options are required');\n }\n\n if (options.diff === undefined || options.diff === null) {\n throw new Error('createCommitFromDiff diff is required');\n }\n\n const targetBranch = normalizeBranchName(options.targetBranch);\n\n let committer: CommitSignature | undefined;\n if (options.committer) {\n const name = options.committer.name?.trim();\n const email = options.committer.email?.trim();\n if (!name || !email) {\n throw new Error(\n 'createCommitFromDiff committer name and email are required when provided'\n );\n }\n committer = { name, email };\n }\n\n return {\n targetBranch,\n commitMessage: options.commitMessage,\n expectedHeadSha: options.expectedHeadSha,\n baseBranch: options.baseBranch,\n ephemeral: options.ephemeral === true,\n ephemeralBase: options.ephemeralBase === true,\n author: options.author,\n committer,\n signal: options.signal,\n ttl: options.ttl,\n initialDiff: options.diff,\n };\n}\n\nfunction normalizeBranchName(value: string | undefined): string {\n const trimmed = value?.trim();\n if (!trimmed) {\n throw new Error('createCommitFromDiff targetBranch is required');\n }\n if (trimmed.startsWith('refs/heads/')) {\n const branch = trimmed.slice('refs/heads/'.length).trim();\n if (!branch) {\n throw new Error(\n 'createCommitFromDiff targetBranch must include a branch name'\n );\n }\n return branch;\n }\n if (trimmed.startsWith('refs/')) {\n throw new Error(\n 'createCommitFromDiff targetBranch must not include refs/ prefix'\n );\n }\n return trimmed;\n}\n\nexport async function sendCommitFromDiff(\n deps: CommitFromDiffSendDeps\n): Promise<CommitResult> {\n const executor = new DiffCommitExecutor(deps);\n return executor.send();\n}\n","import { errorEnvelopeSchema } from './schemas';\nimport type { ValidAPIVersion, ValidMethod, ValidPath } from './types';\nimport { getUserAgent } from './version';\n\ninterface RequestOptions {\n allowedStatus?: number[];\n}\n\nexport class ApiError extends Error {\n public readonly status: number;\n public readonly statusText: string;\n public readonly method: ValidMethod;\n public readonly url: string;\n public readonly body?: unknown;\n\n constructor(params: {\n message: string;\n status: number;\n statusText: string;\n method: ValidMethod;\n url: string;\n body?: unknown;\n }) {\n super(params.message);\n this.name = 'ApiError';\n this.status = params.status;\n this.statusText = params.statusText;\n this.method = params.method;\n this.url = params.url;\n this.body = params.body;\n }\n}\n\nexport class ApiFetcher {\n constructor(\n private readonly API_BASE_URL: string,\n private readonly version: ValidAPIVersion\n ) {}\n\n private getBaseUrl() {\n return `${this.API_BASE_URL}/api/v${this.version}`;\n }\n\n private getRequestUrl(path: ValidPath) {\n if (typeof path === 'string') {\n return `${this.getBaseUrl()}/${path}`;\n } else if (path.params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(path.params)) {\n if (Array.isArray(value)) {\n for (const v of value) {\n searchParams.append(key, v);\n }\n } else {\n searchParams.append(key, value);\n }\n }\n const paramStr = searchParams.toString();\n return `${this.getBaseUrl()}/${path.path}${paramStr ? `?${paramStr}` : ''}`;\n } else {\n return `${this.getBaseUrl()}/${path.path}`;\n }\n }\n\n private async fetch(\n path: ValidPath,\n method: ValidMethod,\n jwt: string,\n options?: RequestOptions\n ) {\n const requestUrl = this.getRequestUrl(path);\n\n const requestOptions: RequestInit = {\n method,\n headers: {\n Authorization: `Bearer ${jwt}`,\n 'Content-Type': 'application/json',\n 'Code-Storage-Agent': getUserAgent(),\n },\n };\n\n if (method !== 'GET' && typeof path !== 'string' && path.body) {\n requestOptions.body = JSON.stringify(path.body);\n }\n\n const response = await fetch(requestUrl, requestOptions);\n\n if (!response.ok) {\n const allowed = options?.allowedStatus ?? [];\n if (allowed.includes(response.status)) {\n return response;\n }\n\n let errorBody: unknown;\n let message: string | undefined;\n const contentType = response.headers.get('content-type') ?? '';\n\n try {\n if (contentType.includes('application/json')) {\n errorBody = await response.json();\n } else {\n const text = await response.text();\n errorBody = text;\n }\n } catch {\n // Fallback to plain text if JSON parse failed after reading body\n try {\n errorBody = await response.text();\n } catch {\n errorBody = undefined;\n }\n }\n\n if (typeof errorBody === 'string') {\n const trimmed = errorBody.trim();\n if (trimmed) {\n message = trimmed;\n }\n } else if (errorBody && typeof errorBody === 'object') {\n const parsedError = errorEnvelopeSchema.safeParse(errorBody);\n if (parsedError.success) {\n const trimmed = parsedError.data.error.trim();\n if (trimmed) {\n message = trimmed;\n }\n }\n }\n\n throw new ApiError({\n message:\n message ??\n `Request ${method} ${requestUrl} failed with status ${response.status} ${response.statusText}`,\n status: response.status,\n statusText: response.statusText,\n method,\n url: requestUrl,\n body: errorBody,\n });\n }\n return response;\n }\n\n async get(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'GET', jwt, options);\n }\n\n async post(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'POST', jwt, options);\n }\n\n async put(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'PUT', jwt, options);\n }\n\n async delete(path: ValidPath, jwt: string, options?: RequestOptions) {\n return this.fetch(path, 'DELETE', jwt, options);\n }\n}\n","/**\n * Type definitions for Pierre Git Storage SDK\n */\nimport type {\n CreateBranchResponseRaw,\n CreateTagResponseRaw,\n DeleteTagResponseRaw,\n GetBranchDiffResponseRaw,\n GetCommitDiffResponseRaw,\n ListBranchesResponseRaw,\n ListCommitsResponseRaw,\n ListFilesResponseRaw,\n ListFilesWithMetadataResponseRaw,\n ListReposResponseRaw,\n ListTagsResponseRaw,\n NoteReadResponseRaw,\n NoteWriteResponseRaw,\n RawBranchInfo as SchemaRawBranchInfo,\n RawCommitMetadata as SchemaRawCommitMetadata,\n RawCommitInfo as SchemaRawCommitInfo,\n RawFileWithMetadata as SchemaRawFileWithMetadata,\n RawFileDiff as SchemaRawFileDiff,\n RawFilteredFile as SchemaRawFilteredFile,\n RawRepoBaseInfo as SchemaRawRepoBaseInfo,\n RawRepoInfo as SchemaRawRepoInfo,\n RawTagInfo as SchemaRawTagInfo,\n} from './schemas';\n\nexport interface OverrideableGitStorageOptions {\n apiBaseUrl?: string;\n storageBaseUrl?: string;\n apiVersion?: ValidAPIVersion;\n defaultTTL?: number;\n}\n\nexport interface GitStorageOptions extends OverrideableGitStorageOptions {\n key: string;\n name: string;\n defaultTTL?: number;\n}\n\nexport type ValidAPIVersion = 1;\n\n/** A policy operation included in the JWT. */\nexport type Op = string;\n\nexport const OP_NO_FORCE_PUSH: Op = 'no-force-push';\n\n/** A list of policy operations. */\nexport type Ops = Op[];\n\nexport interface GetRemoteURLOptions {\n permissions?: ('git:write' | 'git:read' | 'repo:write' | 'org:read')[];\n ttl?: number;\n ops?: Ops;\n}\n\nexport interface Repo {\n id: string;\n defaultBranch: string;\n createdAt: string;\n getRemoteURL(options?: GetRemoteURLOptions): Promise<string>;\n getEphemeralRemoteURL(options?: GetRemoteURLOptions): Promise<string>;\n getImportRemoteURL(options?: GetRemoteURLOptions): Promise<string>;\n\n getFileStream(options: GetFileOptions): Promise<Response>;\n getArchiveStream(options?: ArchiveOptions): Promise<Response>;\n listFiles(options?: ListFilesOptions): Promise<ListFilesResult>;\n listFilesWithMetadata(\n options?: ListFilesWithMetadataOptions\n ): Promise<ListFilesWithMetadataResult>;\n listBranches(options?: ListBranchesOptions): Promise<ListBranchesResult>;\n listTags(options?: ListTagsOptions): Promise<ListTagsResult>;\n listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult>;\n createTag(options: CreateTagOptions): Promise<CreateTagResult>;\n deleteTag(options: DeleteTagOptions): Promise<DeleteTagResult>;\n getNote(options: GetNoteOptions): Promise<GetNoteResult>;\n createNote(options: CreateNoteOptions): Promise<NoteWriteResult>;\n appendNote(options: AppendNoteOptions): Promise<NoteWriteResult>;\n deleteNote(options: DeleteNoteOptions): Promise<NoteWriteResult>;\n getBranchDiff(options: GetBranchDiffOptions): Promise<GetBranchDiffResult>;\n getCommitDiff(options: GetCommitDiffOptions): Promise<GetCommitDiffResult>;\n grep(options: GrepOptions): Promise<GrepResult>;\n pullUpstream(options?: PullUpstreamOptions): Promise<void>;\n restoreCommit(options: RestoreCommitOptions): Promise<RestoreCommitResult>;\n createBranch(options: CreateBranchOptions): Promise<CreateBranchResult>;\n createCommit(options: CreateCommitOptions): CommitBuilder;\n createCommitFromDiff(\n options: CreateCommitFromDiffOptions\n ): Promise<CommitResult>;\n}\n\nexport type ValidMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';\ntype SimplePath = string;\ntype ComplexPath = {\n path: string;\n params?: Record<string, string | string[]>;\n body?: Record<string, any>;\n};\nexport type ValidPath = SimplePath | ComplexPath;\n\ninterface GitStorageInvocationOptions {\n ttl?: number;\n}\n\nexport interface FindOneOptions {\n id: string;\n}\n\nexport interface RepoOptions {\n id: string;\n defaultBranch?: string;\n createdAt?: string;\n}\n\nexport type SupportedRepoProvider =\n | 'github'\n | 'gitlab'\n | 'bitbucket'\n | 'gitea'\n | 'forgejo'\n | 'codeberg'\n | 'sr.ht';\n\nexport interface PublicGitHubBaseRepoAuth {\n /**\n * Force public GitHub mode (no GitHub App installation required).\n */\n authType: 'public';\n}\n\nexport interface GitHubBaseRepo {\n /**\n * @default github\n */\n provider?: 'github';\n owner: string;\n name: string;\n defaultBranch?: string;\n auth?: PublicGitHubBaseRepoAuth;\n}\n\nexport interface GenericGitBaseRepo {\n /**\n * The git host provider. Must be one of the supported generic git providers.\n */\n provider: Exclude<SupportedRepoProvider, 'github'>;\n owner: string;\n name: string;\n defaultBranch?: string;\n /**\n * Bare hostname for self-hosted instances (e.g. \"gitlab.example.com\").\n * Falls back to the provider's default host when omitted.\n */\n upstreamHost?: string;\n}\n\nexport interface ForkBaseRepo {\n id: string;\n ref?: string;\n sha?: string;\n}\n\nexport type BaseRepo = GitHubBaseRepo | ForkBaseRepo | GenericGitBaseRepo;\n\nexport interface CreateGitCredentialOptions {\n repoId: string;\n username?: string;\n password: string;\n ttl?: number;\n}\n\nexport interface UpdateGitCredentialOptions {\n id: string;\n username?: string;\n password: string;\n ttl?: number;\n}\n\nexport interface DeleteGitCredentialOptions {\n id: string;\n ttl?: number;\n}\n\nexport interface GitCredential {\n id: string;\n createdAt?: string;\n}\n\nexport interface ListReposOptions extends GitStorageInvocationOptions {\n cursor?: string;\n limit?: number;\n}\n\nexport type RawRepoBaseInfo = SchemaRawRepoBaseInfo;\n\nexport interface RepoBaseInfo {\n provider: string;\n owner: string;\n name: string;\n}\n\nexport type RawRepoInfo = SchemaRawRepoInfo;\n\nexport interface RepoInfo {\n repoId: string;\n url: string;\n defaultBranch: string;\n createdAt: string;\n baseRepo?: RepoBaseInfo;\n}\n\nexport type ListReposResponse = ListReposResponseRaw;\n\nexport interface ListReposResult {\n repos: RepoInfo[];\n nextCursor?: string;\n hasMore: boolean;\n}\n\nexport interface CreateRepoOptions extends GitStorageInvocationOptions {\n id?: string;\n baseRepo?: BaseRepo;\n defaultBranch?: string;\n}\n\nexport interface DeleteRepoOptions extends GitStorageInvocationOptions {\n id: string;\n}\n\nexport interface DeleteRepoResult {\n repoId: string;\n message: string;\n}\n\n// Get File API types\nexport interface GetFileOptions extends GitStorageInvocationOptions {\n path: string;\n ref?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n}\n\nexport interface ArchiveOptions extends GitStorageInvocationOptions {\n ref?: string;\n includeGlobs?: string[];\n excludeGlobs?: string[];\n maxBlobSize?: number;\n archivePrefix?: string;\n}\n\nexport interface PullUpstreamOptions extends GitStorageInvocationOptions {\n ref?: string;\n}\n\n// List Files API types\nexport interface ListFilesOptions extends GitStorageInvocationOptions {\n ref?: string;\n ephemeral?: boolean;\n}\n\nexport type ListFilesResponse = ListFilesResponseRaw;\n\nexport interface ListFilesResult {\n paths: string[];\n ref: string;\n}\n\nexport interface ListFilesWithMetadataOptions extends GitStorageInvocationOptions {\n ref?: string;\n ephemeral?: boolean;\n}\n\nexport type RawFileWithMetadata = SchemaRawFileWithMetadata;\n\nexport interface FileWithMetadata {\n path: string;\n mode: string;\n size: number;\n lastCommitSha: string;\n}\n\nexport type RawCommitMetadata = SchemaRawCommitMetadata;\n\nexport interface CommitMetadata {\n author: string;\n date: Date;\n rawDate: string;\n message: string;\n}\n\nexport type ListFilesWithMetadataResponse = ListFilesWithMetadataResponseRaw;\n\nexport interface ListFilesWithMetadataResult {\n files: FileWithMetadata[];\n commits: Record<string, CommitMetadata>;\n ref: string;\n}\n\n// List Branches API types\nexport interface ListBranchesOptions extends GitStorageInvocationOptions {\n cursor?: string;\n limit?: number;\n}\n\nexport type RawBranchInfo = SchemaRawBranchInfo;\n\nexport interface BranchInfo {\n cursor: string;\n name: string;\n headSha: string;\n createdAt: string;\n}\n\nexport type ListBranchesResponse = ListBranchesResponseRaw;\n\nexport interface ListBranchesResult {\n branches: BranchInfo[];\n nextCursor?: string;\n hasMore: boolean;\n}\n\n// Create Branch API types\nexport interface CreateBranchOptions extends GitStorageInvocationOptions {\n baseBranch: string;\n targetBranch: string;\n baseIsEphemeral?: boolean;\n targetIsEphemeral?: boolean;\n}\n\nexport type CreateBranchResponse = CreateBranchResponseRaw;\n\nexport interface CreateBranchResult {\n message: string;\n targetBranch: string;\n targetIsEphemeral: boolean;\n commitSha?: string;\n}\n\nexport interface ListTagsOptions extends GitStorageInvocationOptions {\n cursor?: string;\n limit?: number;\n}\n\nexport type RawTagInfo = SchemaRawTagInfo;\n\nexport interface TagInfo {\n cursor: string;\n name: string;\n sha: string;\n}\n\nexport type ListTagsResponse = ListTagsResponseRaw;\n\nexport interface ListTagsResult {\n tags: TagInfo[];\n nextCursor?: string;\n hasMore: boolean;\n}\n\nexport interface CreateTagOptions extends GitStorageInvocationOptions {\n name: string;\n target: string;\n}\n\nexport type CreateTagResponse = CreateTagResponseRaw;\n\nexport interface CreateTagResult {\n name: string;\n sha: string;\n message: string;\n}\n\nexport interface DeleteTagOptions extends GitStorageInvocationOptions {\n name: string;\n}\n\nexport type DeleteTagResponse = DeleteTagResponseRaw;\n\nexport interface DeleteTagResult {\n name: string;\n message: string;\n}\n\n// List Commits API types\nexport interface ListCommitsOptions extends GitStorageInvocationOptions {\n branch?: string;\n cursor?: string;\n limit?: number;\n}\n\nexport type RawCommitInfo = SchemaRawCommitInfo;\n\nexport interface CommitInfo {\n sha: string;\n message: string;\n authorName: string;\n authorEmail: string;\n committerName: string;\n committerEmail: string;\n date: Date;\n rawDate: string;\n}\n\nexport type ListCommitsResponse = ListCommitsResponseRaw;\n\nexport interface ListCommitsResult {\n commits: CommitInfo[];\n nextCursor?: string;\n hasMore: boolean;\n}\n\n// Git notes API types\nexport interface GetNoteOptions extends GitStorageInvocationOptions {\n sha: string;\n}\n\nexport type GetNoteResponse = NoteReadResponseRaw;\n\nexport interface GetNoteResult {\n sha: string;\n note: string;\n refSha: string;\n}\n\ninterface NoteWriteBaseOptions extends GitStorageInvocationOptions {\n sha: string;\n note: string;\n expectedRefSha?: string;\n author?: CommitSignature;\n}\n\nexport type CreateNoteOptions = NoteWriteBaseOptions;\n\nexport type AppendNoteOptions = NoteWriteBaseOptions;\n\nexport interface DeleteNoteOptions extends GitStorageInvocationOptions {\n sha: string;\n expectedRefSha?: string;\n author?: CommitSignature;\n}\n\nexport interface NoteWriteResultPayload {\n success: boolean;\n status: string;\n message?: string;\n}\n\nexport type NoteWriteResponse = NoteWriteResponseRaw;\n\nexport interface NoteWriteResult {\n sha: string;\n targetRef: string;\n baseCommit?: string;\n newRefSha: string;\n result: NoteWriteResultPayload;\n}\n\n// Branch Diff API types\nexport interface GetBranchDiffOptions extends GitStorageInvocationOptions {\n branch: string;\n base?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n /** Optional paths to filter the diff to specific files */\n paths?: string[];\n}\n\nexport type GetBranchDiffResponse = GetBranchDiffResponseRaw;\n\nexport interface GetBranchDiffResult {\n branch: string;\n base: string;\n stats: DiffStats;\n files: FileDiff[];\n filteredFiles: FilteredFile[];\n}\n\n// Commit Diff API types\nexport interface GetCommitDiffOptions extends GitStorageInvocationOptions {\n sha: string;\n baseSha?: string;\n /** Optional paths to filter the diff to specific files */\n paths?: string[];\n}\n\nexport type GetCommitDiffResponse = GetCommitDiffResponseRaw;\n\nexport interface GetCommitDiffResult {\n sha: string;\n stats: DiffStats;\n files: FileDiff[];\n filteredFiles: FilteredFile[];\n}\n\n// Grep API types\nexport interface GrepOptions extends GitStorageInvocationOptions {\n ref?: string;\n /**\n * @deprecated Use ref instead.\n */\n rev?: string;\n paths?: string[];\n query: {\n pattern: string;\n /**\n * Default is case-sensitive.\n * When omitted, the server default is used.\n */\n caseSensitive?: boolean;\n };\n fileFilters?: {\n includeGlobs?: string[];\n excludeGlobs?: string[];\n extensionFilters?: string[];\n };\n context?: {\n before?: number;\n after?: number;\n };\n limits?: {\n maxLines?: number;\n maxMatchesPerFile?: number;\n };\n pagination?: {\n cursor?: string;\n limit?: number;\n };\n}\n\nexport interface GrepLine {\n lineNumber: number;\n text: string;\n type: string;\n}\n\nexport interface GrepFileMatch {\n path: string;\n lines: GrepLine[];\n}\n\nexport interface GrepResult {\n query: {\n pattern: string;\n caseSensitive: boolean;\n };\n repo: {\n ref: string;\n commit: string;\n };\n matches: GrepFileMatch[];\n nextCursor?: string;\n hasMore: boolean;\n}\n\n// Shared diff types\nexport interface DiffStats {\n files: number;\n additions: number;\n deletions: number;\n changes: number;\n}\n\nexport type RawFileDiff = SchemaRawFileDiff;\n\nexport type RawFilteredFile = SchemaRawFilteredFile;\n\nexport type DiffFileState =\n | 'added'\n | 'modified'\n | 'deleted'\n | 'renamed'\n | 'copied'\n | 'type_changed'\n | 'unmerged'\n | 'unknown';\n\nexport interface DiffFileBase {\n path: string;\n state: DiffFileState;\n rawState: string;\n oldPath?: string;\n bytes: number;\n isEof: boolean;\n}\n\nexport interface FileDiff extends DiffFileBase {\n raw: string;\n additions: number;\n deletions: number;\n}\n\nexport interface FilteredFile extends DiffFileBase {}\n\ninterface CreateCommitBaseOptions extends GitStorageInvocationOptions {\n commitMessage: string;\n expectedHeadSha?: string;\n baseBranch?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n author: CommitSignature;\n committer?: CommitSignature;\n signal?: AbortSignal;\n}\n\nexport interface CreateCommitBranchOptions extends CreateCommitBaseOptions {\n targetBranch: string;\n targetRef?: never;\n}\n\n/**\n * @deprecated Use {@link CreateCommitBranchOptions} instead.\n */\nexport interface LegacyCreateCommitOptions extends CreateCommitBaseOptions {\n targetBranch?: never;\n targetRef: string;\n}\n\nexport type CreateCommitOptions =\n | CreateCommitBranchOptions\n | LegacyCreateCommitOptions;\n\nexport interface CommitSignature {\n name: string;\n email: string;\n}\n\nexport interface ReadableStreamReaderLike<T> {\n read(): Promise<{ value?: T; done: boolean }>;\n releaseLock?(): void;\n}\n\nexport interface ReadableStreamLike<T> {\n getReader(): ReadableStreamReaderLike<T>;\n}\n\nexport interface BlobLike {\n stream(): unknown;\n}\n\nexport interface FileLike extends BlobLike {\n name: string;\n lastModified?: number;\n}\n\nexport type GitFileMode = '100644' | '100755' | '120000' | '160000';\n\nexport type TextEncoding =\n | 'ascii'\n | 'utf8'\n | 'utf-8'\n | 'utf16le'\n | 'utf-16le'\n | 'ucs2'\n | 'ucs-2'\n | 'base64'\n | 'base64url'\n | 'latin1'\n | 'binary'\n | 'hex';\n\nexport type CommitFileSource =\n | string\n | Uint8Array\n | ArrayBuffer\n | BlobLike\n | FileLike\n | ReadableStreamLike<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n | AsyncIterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>\n | Iterable<Uint8Array | ArrayBuffer | ArrayBufferView | string>;\n\nexport interface CommitFileOptions {\n mode?: GitFileMode;\n}\n\nexport interface CommitTextFileOptions extends CommitFileOptions {\n encoding?: TextEncoding;\n}\n\nexport interface CommitBuilder {\n addFile(\n path: string,\n source: CommitFileSource,\n options?: CommitFileOptions\n ): CommitBuilder;\n addFileFromString(\n path: string,\n contents: string,\n options?: CommitTextFileOptions\n ): CommitBuilder;\n deletePath(path: string): CommitBuilder;\n send(): Promise<CommitResult>;\n}\n\nexport type DiffSource = CommitFileSource;\n\nexport interface CreateCommitFromDiffOptions\n extends GitStorageInvocationOptions {\n targetBranch: string;\n commitMessage: string;\n diff: DiffSource;\n expectedHeadSha?: string;\n baseBranch?: string;\n ephemeral?: boolean;\n ephemeralBase?: boolean;\n author: CommitSignature;\n committer?: CommitSignature;\n signal?: AbortSignal;\n}\n\nexport interface RefUpdate {\n branch: string;\n oldSha: string;\n newSha: string;\n}\n\nexport type RefUpdateReason =\n | 'precondition_failed'\n | 'conflict'\n | 'not_found'\n | 'invalid'\n | 'timeout'\n | 'unauthorized'\n | 'forbidden'\n | 'unavailable'\n | 'internal'\n | 'failed'\n | 'unknown';\n\nexport interface CommitResult {\n commitSha: string;\n treeSha: string;\n targetBranch: string;\n packBytes: number;\n blobCount: number;\n refUpdate: RefUpdate;\n}\n\nexport interface RestoreCommitOptions extends GitStorageInvocationOptions {\n targetBranch: string;\n targetCommitSha: string;\n commitMessage?: string;\n expectedHeadSha?: string;\n author: CommitSignature;\n committer?: CommitSignature;\n}\n\nexport interface RestoreCommitResult {\n commitSha: string;\n treeSha: string;\n targetBranch: string;\n packBytes: number;\n refUpdate: RefUpdate;\n}\n\n// Webhook types\nexport interface WebhookValidationOptions {\n /**\n * Maximum age of webhook in seconds (default: 300 seconds / 5 minutes)\n * Set to 0 to disable timestamp validation\n */\n maxAgeSeconds?: number;\n}\n\nexport interface WebhookValidationResult {\n /**\n * Whether the webhook signature and timestamp are valid\n */\n valid: boolean;\n /**\n * Error message if validation failed\n */\n error?: string;\n /**\n * The parsed webhook event type (e.g., \"push\")\n */\n eventType?: string;\n /**\n * The timestamp from the signature (Unix seconds)\n */\n timestamp?: number;\n}\n\n// Webhook event payloads\nexport interface RawWebhookPushEvent {\n repository: {\n id: string;\n url: string;\n };\n ref: string;\n before: string;\n after: string;\n customer_id: string;\n pushed_at: string; // RFC3339 timestamp\n}\n\nexport interface WebhookPushEvent {\n type: 'push';\n repository: {\n id: string;\n url: string;\n };\n ref: string;\n before: string;\n after: string;\n customerId: string;\n pushedAt: Date;\n rawPushedAt: string;\n}\n\nexport interface WebhookUnknownEvent {\n type: string;\n raw: unknown;\n}\n\nexport type WebhookEventPayload = WebhookPushEvent | WebhookUnknownEvent;\n\nexport interface ParsedWebhookSignature {\n timestamp: string;\n signature: string;\n}\n","export function timingSafeEqual(\n a: string | Uint8Array,\n b: string | Uint8Array\n): boolean {\n const bufferA = typeof a === 'string' ? new TextEncoder().encode(a) : a;\n const bufferB = typeof b === 'string' ? new TextEncoder().encode(b) : b;\n\n if (bufferA.length !== bufferB.length) return false;\n\n let result = 0;\n for (let i = 0; i < bufferA.length; i++) {\n result |= bufferA[i] ^ bufferB[i];\n }\n return result === 0;\n}\n\nexport async function getEnvironmentCrypto() {\n if (!globalThis.crypto) {\n const { webcrypto } = await import('node:crypto');\n return webcrypto;\n }\n return globalThis.crypto;\n}\n\nexport async function createHmac(\n algorithm: string,\n secret: string,\n data: string\n): Promise<string> {\n if (algorithm !== 'sha256') {\n throw new Error('Only sha256 algorithm is supported');\n }\n if (!secret || secret.length === 0) {\n throw new Error('Secret is required');\n }\n\n const crypto = await getEnvironmentCrypto();\n const encoder = new TextEncoder();\n const key = await crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));\n return Array.from(new Uint8Array(signature))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","/**\n * Webhook validation utilities for Pierre Git Storage\n */\nimport type {\n ParsedWebhookSignature,\n RawWebhookPushEvent,\n WebhookEventPayload,\n WebhookPushEvent,\n WebhookValidationOptions,\n WebhookValidationResult,\n} from './types';\nimport { createHmac, timingSafeEqual } from './util';\n\nconst DEFAULT_MAX_AGE_SECONDS = 300; // 5 minutes\n\n/**\n * Parse the X-Pierre-Signature header\n * Format: t=<timestamp>,sha256=<signature>\n */\nexport function parseSignatureHeader(\n header: string\n): ParsedWebhookSignature | null {\n if (!header || typeof header !== 'string') {\n return null;\n }\n\n let timestamp = '';\n let signature = '';\n\n // Split by comma and parse each element\n const elements = header.split(',');\n for (const element of elements) {\n const trimmedElement = element.trim();\n const parts = trimmedElement.split('=', 2);\n if (parts.length !== 2) {\n continue;\n }\n\n const [key, value] = parts;\n switch (key) {\n case 't':\n timestamp = value;\n break;\n case 'sha256':\n signature = value;\n break;\n }\n }\n\n if (!timestamp || !signature) {\n return null;\n }\n\n return { timestamp, signature };\n}\n\n/**\n * Validate a webhook signature and timestamp\n *\n * @param payload - The raw webhook payload (request body)\n * @param signatureHeader - The X-Pierre-Signature header value\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns Validation result with details\n *\n * @example\n * ```typescript\n * const result = await validateWebhookSignature(\n * requestBody,\n * request.headers['x-pierre-signature'],\n * webhookSecret\n * );\n *\n * if (!result.valid) {\n * console.error('Invalid webhook:', result.error);\n * return;\n * }\n * ```\n */\nexport async function validateWebhookSignature(\n payload: string | Buffer,\n signatureHeader: string,\n secret: string,\n options: WebhookValidationOptions = {}\n): Promise<WebhookValidationResult> {\n if (!secret || secret.length === 0) {\n return {\n valid: false,\n error: 'Empty secret is not allowed',\n };\n }\n\n // Parse the signature header\n const parsed = parseSignatureHeader(signatureHeader);\n if (!parsed) {\n return {\n valid: false,\n error: 'Invalid signature header format',\n };\n }\n\n // Parse timestamp\n const timestamp = Number.parseInt(parsed.timestamp, 10);\n if (isNaN(timestamp)) {\n return {\n valid: false,\n error: 'Invalid timestamp in signature',\n };\n }\n\n // Validate timestamp age (prevent replay attacks)\n const maxAge = options.maxAgeSeconds ?? DEFAULT_MAX_AGE_SECONDS;\n if (maxAge > 0) {\n const now = Math.floor(Date.now() / 1000);\n const age = now - timestamp;\n\n if (age > maxAge) {\n return {\n valid: false,\n error: `Webhook timestamp too old (${age} seconds)`,\n timestamp,\n };\n }\n\n // Also reject timestamps from the future (clock skew tolerance of 60 seconds)\n if (age < -60) {\n return {\n valid: false,\n error: 'Webhook timestamp is in the future',\n timestamp,\n };\n }\n }\n\n // Convert payload to string if it's a Buffer\n const payloadStr =\n typeof payload === 'string' ? payload : payload.toString('utf8');\n\n // Compute expected signature\n // Format: HMAC-SHA256(secret, timestamp + \".\" + payload)\n const signedData = `${parsed.timestamp}.${payloadStr}`;\n const expectedSignature = await createHmac('sha256', secret, signedData);\n\n // Compare signatures using constant-time comparison\n const expectedBuffer = Buffer.from(expectedSignature);\n const actualBuffer = Buffer.from(parsed.signature);\n\n // Ensure both buffers are the same length for timing-safe comparison\n if (expectedBuffer.length !== actualBuffer.length) {\n return {\n valid: false,\n error: 'Invalid signature',\n timestamp,\n };\n }\n\n const signaturesMatch = timingSafeEqual(expectedBuffer, actualBuffer);\n if (!signaturesMatch) {\n return {\n valid: false,\n error: 'Invalid signature',\n timestamp,\n };\n }\n\n return {\n valid: true,\n timestamp,\n };\n}\n\n/**\n * Validate a webhook request\n *\n * This is a convenience function that validates the signature and parses the payload.\n *\n * @param payload - The raw webhook payload (request body)\n * @param headers - The request headers (must include x-pierre-signature and x-pierre-event)\n * @param secret - The webhook secret for HMAC verification\n * @param options - Validation options\n * @returns The parsed webhook payload if valid, or validation error\n *\n * @example\n * ```typescript\n * const result = await validateWebhook(\n * request.body,\n * request.headers,\n * process.env.WEBHOOK_SECRET\n * );\n *\n * if (!result.valid) {\n * return new Response('Invalid webhook', { status: 401 });\n * }\n *\n * // Type-safe access to the webhook payload\n * console.log('Push event:', result.payload);\n * ```\n */\nexport async function validateWebhook(\n payload: string | Buffer,\n headers: Record<string, string | string[] | undefined>,\n secret: string,\n options: WebhookValidationOptions = {}\n): Promise<WebhookValidationResult & { payload?: WebhookEventPayload }> {\n // Get signature header\n const signatureHeader =\n headers['x-pierre-signature'] || headers['X-Pierre-Signature'];\n if (!signatureHeader || Array.isArray(signatureHeader)) {\n return {\n valid: false,\n error: 'Missing or invalid X-Pierre-Signature header',\n };\n }\n\n // Get event type header\n const eventType = headers['x-pierre-event'] || headers['X-Pierre-Event'];\n if (!eventType || Array.isArray(eventType)) {\n return {\n valid: false,\n error: 'Missing or invalid X-Pierre-Event header',\n };\n }\n\n // Validate signature\n const validationResult = await validateWebhookSignature(\n payload,\n signatureHeader,\n secret,\n options\n );\n\n if (!validationResult.valid) {\n return validationResult;\n }\n\n // Parse payload\n const payloadStr =\n typeof payload === 'string' ? payload : payload.toString('utf8');\n let parsedJson: unknown;\n try {\n parsedJson = JSON.parse(payloadStr);\n } catch {\n return {\n valid: false,\n error: 'Invalid JSON payload',\n timestamp: validationResult.timestamp,\n };\n }\n\n const conversion = convertWebhookPayload(String(eventType), parsedJson);\n if (!conversion.valid) {\n return {\n valid: false,\n error: conversion.error,\n timestamp: validationResult.timestamp,\n };\n }\n\n return {\n valid: true,\n eventType,\n timestamp: validationResult.timestamp,\n payload: conversion.payload,\n };\n}\n\nfunction convertWebhookPayload(\n eventType: string,\n raw: unknown\n):\n | { valid: true; payload: WebhookEventPayload }\n | { valid: false; error: string } {\n if (eventType === 'push') {\n if (!isRawWebhookPushEvent(raw)) {\n return {\n valid: false,\n error: 'Invalid push payload',\n };\n }\n return {\n valid: true,\n payload: transformPushEvent(raw),\n };\n }\n const fallbackPayload = { type: eventType, raw };\n return {\n valid: true,\n payload: fallbackPayload,\n };\n}\n\nfunction transformPushEvent(raw: RawWebhookPushEvent): WebhookPushEvent {\n return {\n type: 'push' as const,\n repository: {\n id: raw.repository.id,\n url: raw.repository.url,\n },\n ref: raw.ref,\n before: raw.before,\n after: raw.after,\n customerId: raw.customer_id,\n pushedAt: new Date(raw.pushed_at),\n rawPushedAt: raw.pushed_at,\n };\n}\n\nfunction isRawWebhookPushEvent(value: unknown): value is RawWebhookPushEvent {\n if (!isRecord(value)) {\n return false;\n }\n if (!isRecord(value.repository)) {\n return false;\n }\n return (\n typeof value.repository.id === 'string' &&\n typeof value.repository.url === 'string' &&\n typeof value.ref === 'string' &&\n typeof value.before === 'string' &&\n typeof value.after === 'string' &&\n typeof value.customer_id === 'string' &&\n typeof value.pushed_at === 'string'\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n","/**\n * Pierre Git Storage SDK\n *\n * A TypeScript SDK for interacting with Pierre's git storage system\n */\nimport { SignJWT, importPKCS8 } from 'jose';\nimport snakecaseKeys from 'snakecase-keys';\n\nimport {\n FetchCommitTransport,\n createCommitBuilder,\n resolveCommitTtlSeconds,\n} from './commit';\nimport { FetchDiffCommitTransport, sendCommitFromDiff } from './diff-commit';\nimport { RefUpdateError } from './errors';\nimport { ApiError, ApiFetcher } from './fetch';\nimport type { RestoreCommitAckRaw } from './schemas';\nimport {\n branchDiffResponseSchema,\n commitDiffResponseSchema,\n createBranchResponseSchema,\n createTagResponseSchema,\n deleteTagResponseSchema,\n errorEnvelopeSchema,\n grepResponseSchema,\n listBranchesResponseSchema,\n listCommitsResponseSchema,\n listFilesResponseSchema,\n listFilesWithMetadataResponseSchema,\n listReposResponseSchema,\n listTagsResponseSchema,\n noteReadResponseSchema,\n noteWriteResponseSchema,\n restoreCommitAckSchema,\n restoreCommitResponseSchema,\n} from './schemas';\nimport type {\n AppendNoteOptions,\n ArchiveOptions,\n BranchInfo,\n CommitBuilder,\n CommitInfo,\n CommitMetadata,\n CommitResult,\n CreateBranchOptions,\n CreateBranchResponse,\n CreateBranchResult,\n CreateCommitFromDiffOptions,\n CreateCommitOptions,\n CreateTagOptions,\n CreateTagResponse,\n CreateTagResult,\n CreateGitCredentialOptions,\n CreateNoteOptions,\n CreateRepoOptions,\n DeleteTagOptions,\n DeleteTagResponse,\n DeleteTagResult,\n DeleteGitCredentialOptions,\n DeleteNoteOptions,\n DeleteRepoOptions,\n DeleteRepoResult,\n DiffFileState,\n FileWithMetadata,\n FileDiff,\n FilteredFile,\n FindOneOptions,\n GenericGitBaseRepo,\n GetBranchDiffOptions,\n GetBranchDiffResponse,\n GetBranchDiffResult,\n GetCommitDiffOptions,\n GetCommitDiffResponse,\n GetCommitDiffResult,\n GetFileOptions,\n GetNoteOptions,\n GetNoteResult,\n GetRemoteURLOptions,\n GitCredential,\n GitHubBaseRepo,\n GitStorageOptions,\n GrepFileMatch,\n GrepLine,\n GrepOptions,\n GrepResult,\n ListBranchesOptions,\n ListBranchesResponse,\n ListBranchesResult,\n ListCommitsOptions,\n ListCommitsResponse,\n ListCommitsResult,\n ListFilesOptions,\n ListFilesResult,\n ListFilesWithMetadataOptions,\n ListFilesWithMetadataResponse,\n ListFilesWithMetadataResult,\n ListReposOptions,\n ListReposResponse,\n ListReposResult,\n ListTagsOptions,\n ListTagsResponse,\n ListTagsResult,\n NoteWriteResult,\n PullUpstreamOptions,\n RawBranchInfo,\n RawCommitMetadata,\n RawCommitInfo,\n RawFileWithMetadata,\n RawFileDiff,\n RawFilteredFile,\n RawTagInfo,\n RefUpdate,\n RepoOptions,\n Repo,\n RestoreCommitOptions,\n RestoreCommitResult,\n TagInfo,\n UpdateGitCredentialOptions,\n ValidAPIVersion,\n} from './types';\n\n/**\n * Type definitions for Pierre Git Storage SDK\n */\n\nexport { RefUpdateError } from './errors';\nexport { ApiError } from './fetch';\n// Import additional types from types.ts\nexport * from './types';\n\n// Export webhook validation utilities\nexport {\n parseSignatureHeader,\n validateWebhook,\n validateWebhookSignature,\n} from './webhook';\n\n/**\n * Git Storage API\n */\n\ndeclare const __STORAGE_BASE_URL__: string;\ndeclare const __API_BASE_URL__: string;\n\nconst API_BASE_URL = __API_BASE_URL__;\nconst STORAGE_BASE_URL = __STORAGE_BASE_URL__;\nconst API_VERSION: ValidAPIVersion = 1;\n\nconst apiInstanceMap = new Map<string, ApiFetcher>();\nconst DEFAULT_TOKEN_TTL_SECONDS = 60 * 60; // 1 hour\nconst RESTORE_COMMIT_ALLOWED_STATUS = [\n 400, // Bad Request - validation errors\n 401, // Unauthorized - missing/invalid auth header\n 403, // Forbidden - missing git:write scope\n 404, // Not Found - repo lookup failures\n 408, // Request Timeout - client cancelled\n 409, // Conflict - concurrent ref updates\n 412, // Precondition Failed - optimistic concurrency\n 422, // Unprocessable Entity - metadata issues\n 429, // Too Many Requests - upstream throttling\n 499, // Client Closed Request - storage cancellation\n 500, // Internal Server Error - generic failure\n 502, // Bad Gateway - storage/gateway bridge issues\n 503, // Service Unavailable - storage selection failures\n 504, // Gateway Timeout - long-running storage operations\n] as const;\n\nconst NOTE_WRITE_ALLOWED_STATUS = [\n 400, // Bad Request - validation errors\n 401, // Unauthorized - missing/invalid auth header\n 403, // Forbidden - missing git:write scope\n 404, // Not Found - repo or note lookup failures\n 408, // Request Timeout - client cancelled\n 409, // Conflict - concurrent ref updates\n 412, // Precondition Failed - optimistic concurrency\n 422, // Unprocessable Entity - metadata issues\n 429, // Too Many Requests - upstream throttling\n 499, // Client Closed Request - storage cancellation\n 500, // Internal Server Error - generic failure\n 502, // Bad Gateway - storage/gateway bridge issues\n 503, // Service Unavailable - storage selection failures\n 504, // Gateway Timeout - long-running storage operations\n] as const;\n\nfunction resolveInvocationTtlSeconds(\n options?: { ttl?: number },\n defaultValue: number = DEFAULT_TOKEN_TTL_SECONDS\n): number {\n if (typeof options?.ttl === 'number' && options.ttl > 0) {\n return options.ttl;\n }\n return defaultValue;\n}\n\ntype RestoreCommitAck = RestoreCommitAckRaw;\n\nfunction toRefUpdate(result: RestoreCommitAck['result']): RefUpdate {\n return {\n branch: result.branch,\n oldSha: result.old_sha,\n newSha: result.new_sha,\n };\n}\n\nfunction buildRestoreCommitResult(ack: RestoreCommitAck): RestoreCommitResult {\n const refUpdate = toRefUpdate(ack.result);\n if (!ack.result.success) {\n throw new RefUpdateError(\n ack.result.message ??\n `Restore commit failed with status ${ack.result.status}`,\n {\n status: ack.result.status,\n message: ack.result.message,\n refUpdate,\n }\n );\n }\n return {\n commitSha: ack.commit.commit_sha,\n treeSha: ack.commit.tree_sha,\n targetBranch: ack.commit.target_branch,\n packBytes: ack.commit.pack_bytes,\n refUpdate,\n };\n}\n\ninterface RestoreCommitFailureInfo {\n status?: string;\n message?: string;\n refUpdate?: Partial<RefUpdate>;\n}\n\nfunction toPartialRefUpdate(\n branch?: unknown,\n oldSha?: unknown,\n newSha?: unknown\n): Partial<RefUpdate> | undefined {\n const refUpdate: Partial<RefUpdate> = {};\n if (typeof branch === 'string' && branch.trim() !== '') {\n refUpdate.branch = branch;\n }\n if (typeof oldSha === 'string' && oldSha.trim() !== '') {\n refUpdate.oldSha = oldSha;\n }\n if (typeof newSha === 'string' && newSha.trim() !== '') {\n refUpdate.newSha = newSha;\n }\n return Object.keys(refUpdate).length > 0 ? refUpdate : undefined;\n}\n\nfunction parseRestoreCommitPayload(\n payload: unknown\n): { ack: RestoreCommitAck } | { failure: RestoreCommitFailureInfo } | null {\n const ack = restoreCommitAckSchema.safeParse(payload);\n if (ack.success) {\n return { ack: ack.data };\n }\n\n const failure = restoreCommitResponseSchema.safeParse(payload);\n if (failure.success) {\n const result = failure.data.result;\n return {\n failure: {\n status: result.status,\n message: result.message,\n refUpdate: toPartialRefUpdate(\n result.branch,\n result.old_sha,\n result.new_sha\n ),\n },\n };\n }\n\n return null;\n}\n\nfunction httpStatusToRestoreStatus(status: number): string {\n switch (status) {\n case 409:\n return 'conflict';\n case 412:\n return 'precondition_failed';\n default:\n return `${status}`;\n }\n}\n\nfunction getApiInstance(baseUrl: string, version: ValidAPIVersion) {\n if (!apiInstanceMap.has(`${baseUrl}--${version}`)) {\n apiInstanceMap.set(\n `${baseUrl}--${version}`,\n new ApiFetcher(baseUrl, version)\n );\n }\n return apiInstanceMap.get(`${baseUrl}--${version}`)!;\n}\n\nfunction transformBranchInfo(raw: RawBranchInfo): BranchInfo {\n return {\n cursor: raw.cursor,\n name: raw.name,\n headSha: raw.head_sha,\n createdAt: raw.created_at,\n };\n}\n\nfunction transformListBranchesResult(\n raw: ListBranchesResponse\n): ListBranchesResult {\n return {\n branches: raw.branches.map(transformBranchInfo),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformCommitInfo(raw: RawCommitInfo): CommitInfo {\n const parsedDate = new Date(raw.date);\n return {\n sha: raw.sha,\n message: raw.message,\n authorName: raw.author_name,\n authorEmail: raw.author_email,\n committerName: raw.committer_name,\n committerEmail: raw.committer_email,\n date: parsedDate,\n rawDate: raw.date,\n };\n}\n\nfunction transformListCommitsResult(\n raw: ListCommitsResponse\n): ListCommitsResult {\n return {\n commits: raw.commits.map(transformCommitInfo),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformFileWithMetadata(raw: RawFileWithMetadata): FileWithMetadata {\n return {\n path: raw.path,\n mode: raw.mode,\n size: raw.size,\n lastCommitSha: raw.last_commit_sha,\n };\n}\n\nfunction transformCommitMetadata(raw: RawCommitMetadata): CommitMetadata {\n return {\n author: raw.author,\n date: new Date(raw.date),\n rawDate: raw.date,\n message: raw.message,\n };\n}\n\nfunction transformListFilesWithMetadataResult(\n raw: ListFilesWithMetadataResponse\n): ListFilesWithMetadataResult {\n const commits: Record<string, CommitMetadata> = {};\n for (const [sha, commit] of Object.entries(raw.commits)) {\n commits[sha] = transformCommitMetadata(commit);\n }\n\n return {\n files: raw.files.map(transformFileWithMetadata),\n commits,\n ref: raw.ref,\n };\n}\n\nfunction normalizeDiffState(rawState: string): DiffFileState {\n if (!rawState) {\n return 'unknown';\n }\n const leading = rawState.trim()[0]?.toUpperCase();\n switch (leading) {\n case 'A':\n return 'added';\n case 'M':\n return 'modified';\n case 'D':\n return 'deleted';\n case 'R':\n return 'renamed';\n case 'C':\n return 'copied';\n case 'T':\n return 'type_changed';\n case 'U':\n return 'unmerged';\n default:\n return 'unknown';\n }\n}\n\nfunction transformFileDiff(raw: RawFileDiff): FileDiff {\n const normalizedState = normalizeDiffState(raw.state);\n return {\n path: raw.path,\n state: normalizedState,\n rawState: raw.state,\n oldPath: raw.old_path ?? undefined,\n raw: raw.raw,\n bytes: raw.bytes,\n isEof: raw.is_eof,\n additions: raw.additions ?? 0,\n deletions: raw.deletions ?? 0,\n };\n}\n\nfunction transformFilteredFile(raw: RawFilteredFile): FilteredFile {\n const normalizedState = normalizeDiffState(raw.state);\n return {\n path: raw.path,\n state: normalizedState,\n rawState: raw.state,\n oldPath: raw.old_path ?? undefined,\n bytes: raw.bytes,\n isEof: raw.is_eof,\n };\n}\n\nfunction transformBranchDiffResult(\n raw: GetBranchDiffResponse\n): GetBranchDiffResult {\n return {\n branch: raw.branch,\n base: raw.base,\n stats: raw.stats,\n files: raw.files.map(transformFileDiff),\n filteredFiles: raw.filtered_files.map(transformFilteredFile),\n };\n}\n\nfunction transformCommitDiffResult(\n raw: GetCommitDiffResponse\n): GetCommitDiffResult {\n return {\n sha: raw.sha,\n stats: raw.stats,\n files: raw.files.map(transformFileDiff),\n filteredFiles: raw.filtered_files.map(transformFilteredFile),\n };\n}\n\nfunction transformCreateBranchResult(\n raw: CreateBranchResponse\n): CreateBranchResult {\n return {\n message: raw.message,\n targetBranch: raw.target_branch,\n targetIsEphemeral: raw.target_is_ephemeral,\n commitSha: raw.commit_sha ?? undefined,\n };\n}\n\nfunction transformTagInfo(raw: RawTagInfo): TagInfo {\n return {\n cursor: raw.cursor,\n name: raw.name,\n sha: raw.sha,\n };\n}\n\nfunction transformListTagsResult(raw: ListTagsResponse): ListTagsResult {\n return {\n tags: raw.tags.map(transformTagInfo),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformCreateTagResult(raw: CreateTagResponse): CreateTagResult {\n return {\n name: raw.name,\n sha: raw.sha,\n message: raw.message,\n };\n}\n\nfunction transformDeleteTagResult(raw: DeleteTagResponse): DeleteTagResult {\n return {\n name: raw.name,\n message: raw.message,\n };\n}\n\nfunction transformListReposResult(raw: ListReposResponse): ListReposResult {\n return {\n repos: raw.repos.map((repo) => ({\n repoId: repo.repo_id,\n url: repo.url,\n defaultBranch: repo.default_branch,\n createdAt: repo.created_at,\n baseRepo: repo.base_repo\n ? {\n provider: repo.base_repo.provider,\n owner: repo.base_repo.owner,\n name: repo.base_repo.name,\n }\n : undefined,\n })),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n}\n\nfunction transformGrepLine(raw: {\n line_number: number;\n text: string;\n type: string;\n}): GrepLine {\n return {\n lineNumber: raw.line_number,\n text: raw.text,\n type: raw.type,\n };\n}\n\nfunction transformGrepFileMatch(raw: {\n path: string;\n lines: { line_number: number; text: string; type: string }[];\n}): GrepFileMatch {\n return {\n path: raw.path,\n lines: raw.lines.map(transformGrepLine),\n };\n}\n\nfunction transformNoteReadResult(raw: {\n sha: string;\n note: string;\n ref_sha: string;\n}): GetNoteResult {\n return {\n sha: raw.sha,\n note: raw.note,\n refSha: raw.ref_sha,\n };\n}\n\nfunction transformNoteWriteResult(raw: {\n sha: string;\n target_ref: string;\n base_commit?: string;\n new_ref_sha: string;\n result: { success: boolean; status: string; message?: string };\n}): NoteWriteResult {\n return {\n sha: raw.sha,\n targetRef: raw.target_ref,\n baseCommit: raw.base_commit,\n newRefSha: raw.new_ref_sha,\n result: {\n success: raw.result.success,\n status: raw.result.status,\n message: raw.result.message,\n },\n };\n}\n\nfunction buildNoteWriteBody(\n sha: string,\n note: string,\n action: 'add' | 'append',\n options: { expectedRefSha?: string; author?: { name: string; email: string } }\n): Record<string, unknown> {\n const body: Record<string, unknown> = {\n sha,\n action,\n note,\n };\n\n const expectedRefSha = options.expectedRefSha?.trim();\n if (expectedRefSha) {\n body.expected_ref_sha = expectedRefSha;\n }\n\n if (options.author) {\n const authorName = options.author.name?.trim();\n const authorEmail = options.author.email?.trim();\n if (!authorName || !authorEmail) {\n throw new Error('note author name and email are required when provided');\n }\n body.author = {\n name: authorName,\n email: authorEmail,\n };\n }\n\n return body;\n}\n\nasync function parseNoteWriteResponse(\n response: Response,\n method: 'POST' | 'DELETE'\n): Promise<NoteWriteResult> {\n let jsonBody: unknown;\n const contentType = response.headers.get('content-type') ?? '';\n try {\n if (contentType.includes('application/json')) {\n jsonBody = await response.json();\n } else {\n jsonBody = await response.text();\n }\n } catch {\n jsonBody = undefined;\n }\n\n if (jsonBody && typeof jsonBody === 'object') {\n const parsed = noteWriteResponseSchema.safeParse(jsonBody);\n if (parsed.success) {\n return transformNoteWriteResult(parsed.data);\n }\n const parsedError = errorEnvelopeSchema.safeParse(jsonBody);\n if (parsedError.success) {\n throw new ApiError({\n message: parsedError.data.error,\n status: response.status,\n statusText: response.statusText,\n method,\n url: response.url,\n body: jsonBody,\n });\n }\n }\n\n const fallbackMessage =\n typeof jsonBody === 'string' && jsonBody.trim() !== ''\n ? jsonBody.trim()\n : `Request ${method} ${response.url} failed with status ${response.status} ${response.statusText}`;\n\n throw new ApiError({\n message: fallbackMessage,\n status: response.status,\n statusText: response.statusText,\n method,\n url: response.url,\n body: jsonBody,\n });\n}\n\n/**\n * Implementation of the Repo interface\n */\nclass RepoImpl implements Repo {\n private readonly api: ApiFetcher;\n\n constructor(\n public readonly id: string,\n public readonly defaultBranch: string,\n public readonly createdAt: string,\n private readonly options: GitStorageOptions,\n private readonly generateJWT: (\n repoId: string,\n options?: GetRemoteURLOptions\n ) => Promise<string>\n ) {\n this.api = getApiInstance(\n this.options.apiBaseUrl ?? GitStorage.getDefaultAPIBaseUrl(options.name),\n this.options.apiVersion ?? API_VERSION\n );\n }\n\n async getRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n const url = new URL(\n `https://${this.options.storageBaseUrl}/${this.id}.git`\n );\n url.username = `t`;\n url.password = await this.generateJWT(this.id, urlOptions);\n return url.toString();\n }\n\n async getEphemeralRemoteURL(\n urlOptions?: GetRemoteURLOptions\n ): Promise<string> {\n const url = new URL(\n `https://${this.options.storageBaseUrl}/${this.id}+ephemeral.git`\n );\n url.username = `t`;\n url.password = await this.generateJWT(this.id, urlOptions);\n return url.toString();\n }\n\n async getImportRemoteURL(urlOptions?: GetRemoteURLOptions): Promise<string> {\n const url = new URL(\n `https://${this.options.storageBaseUrl}/${this.id}+import.git`\n );\n url.username = `t`;\n url.password = await this.generateJWT(this.id, urlOptions);\n return url.toString();\n }\n\n async getFileStream(options: GetFileOptions): Promise<Response> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string> = {\n path: options.path,\n };\n\n if (options.ref) {\n params.ref = options.ref;\n }\n if (typeof options.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n if (typeof options.ephemeralBase === 'boolean') {\n params.ephemeral_base = String(options.ephemeralBase);\n }\n\n // Return the raw fetch Response for streaming\n return this.api.get({ path: 'repos/file', params }, jwt);\n }\n\n async getArchiveStream(options: ArchiveOptions = {}): Promise<Response> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const body: Record<string, unknown> = {};\n const ref = options.ref?.trim();\n if (ref) {\n body.ref = ref;\n }\n if (Array.isArray(options.includeGlobs) && options.includeGlobs.length > 0) {\n body.include_globs = options.includeGlobs;\n }\n if (Array.isArray(options.excludeGlobs) && options.excludeGlobs.length > 0) {\n body.exclude_globs = options.excludeGlobs;\n }\n if (typeof options.maxBlobSize === 'number' && Number.isFinite(options.maxBlobSize)) {\n body.max_blob_size = options.maxBlobSize;\n }\n if (typeof options.archivePrefix === 'string') {\n const prefix = options.archivePrefix.trim();\n if (prefix) {\n body.archive = { prefix };\n }\n }\n\n const path =\n Object.keys(body).length > 0 ? { path: 'repos/archive', body } : 'repos/archive';\n\n return this.api.post(path, jwt);\n }\n\n async listFiles(options?: ListFilesOptions): Promise<ListFilesResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string> = {};\n if (options?.ref) {\n params.ref = options.ref;\n }\n if (typeof options?.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n const response = await this.api.get(\n {\n path: 'repos/files',\n params: Object.keys(params).length ? params : undefined,\n },\n jwt\n );\n\n const raw = listFilesResponseSchema.parse(await response.json());\n return { paths: raw.paths, ref: raw.ref };\n }\n\n async listFilesWithMetadata(\n options?: ListFilesWithMetadataOptions\n ): Promise<ListFilesWithMetadataResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string> = {};\n if (options?.ref) {\n params.ref = options.ref;\n }\n if (typeof options?.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n const response = await this.api.get(\n {\n path: 'repos/files/metadata',\n params: Object.keys(params).length ? params : undefined,\n },\n jwt\n );\n\n const raw = listFilesWithMetadataResponseSchema.parse(await response.json());\n return transformListFilesWithMetadataResult(raw);\n }\n\n async listBranches(\n options?: ListBranchesOptions\n ): Promise<ListBranchesResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const cursor = options?.cursor;\n const limit = options?.limit;\n\n let params: Record<string, string> | undefined;\n\n if (typeof cursor === 'string' || typeof limit === 'number') {\n params = {};\n if (typeof cursor === 'string') {\n params.cursor = cursor;\n }\n if (typeof limit === 'number') {\n params.limit = limit.toString();\n }\n }\n\n const response = await this.api.get(\n { path: 'repos/branches', params },\n jwt\n );\n\n const raw = listBranchesResponseSchema.parse(await response.json());\n return transformListBranchesResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n async listTags(options?: ListTagsOptions): Promise<ListTagsResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const cursor = options?.cursor;\n const limit = options?.limit;\n\n let params: Record<string, string> | undefined;\n\n if (typeof cursor === 'string' || typeof limit === 'number') {\n params = {};\n if (typeof cursor === 'string') {\n params.cursor = cursor;\n }\n if (typeof limit === 'number') {\n params.limit = limit.toString();\n }\n }\n\n const response = await this.api.get({ path: 'repos/tags', params }, jwt);\n const raw = listTagsResponseSchema.parse(await response.json());\n return transformListTagsResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n async listCommits(options?: ListCommitsOptions): Promise<ListCommitsResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n let params: Record<string, string> | undefined;\n\n if (options?.branch || options?.cursor || options?.limit) {\n params = {};\n if (options?.branch) {\n params.branch = options.branch;\n }\n if (options?.cursor) {\n params.cursor = options.cursor;\n }\n if (typeof options?.limit == 'number') {\n params.limit = options.limit.toString();\n }\n }\n\n const response = await this.api.get({ path: 'repos/commits', params }, jwt);\n\n const raw = listCommitsResponseSchema.parse(await response.json());\n return transformListCommitsResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n async getNote(options: GetNoteOptions): Promise<GetNoteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('getNote sha is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const response = await this.api.get(\n { path: 'repos/notes', params: { sha } },\n jwt\n );\n const raw = noteReadResponseSchema.parse(await response.json());\n return transformNoteReadResult(raw);\n }\n\n async createNote(options: CreateNoteOptions): Promise<NoteWriteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('createNote sha is required');\n }\n\n const note = options?.note?.trim();\n if (!note) {\n throw new Error('createNote note is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body = buildNoteWriteBody(sha, note, 'add', {\n expectedRefSha: options.expectedRefSha,\n author: options.author,\n });\n\n const response = await this.api.post({ path: 'repos/notes', body }, jwt, {\n allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n });\n\n const result = await parseNoteWriteResponse(response, 'POST');\n if (!result.result.success) {\n throw new RefUpdateError(\n result.result.message ??\n `createNote failed with status ${result.result.status}`,\n {\n status: result.result.status,\n message: result.result.message,\n refUpdate: toPartialRefUpdate(\n result.targetRef,\n result.baseCommit,\n result.newRefSha\n ),\n }\n );\n }\n return result;\n }\n\n async appendNote(options: AppendNoteOptions): Promise<NoteWriteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('appendNote sha is required');\n }\n\n const note = options?.note?.trim();\n if (!note) {\n throw new Error('appendNote note is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body = buildNoteWriteBody(sha, note, 'append', {\n expectedRefSha: options.expectedRefSha,\n author: options.author,\n });\n\n const response = await this.api.post({ path: 'repos/notes', body }, jwt, {\n allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n });\n\n const result = await parseNoteWriteResponse(response, 'POST');\n if (!result.result.success) {\n throw new RefUpdateError(\n result.result.message ??\n `appendNote failed with status ${result.result.status}`,\n {\n status: result.result.status,\n message: result.result.message,\n refUpdate: toPartialRefUpdate(\n result.targetRef,\n result.baseCommit,\n result.newRefSha\n ),\n }\n );\n }\n return result;\n }\n\n async deleteNote(options: DeleteNoteOptions): Promise<NoteWriteResult> {\n const sha = options?.sha?.trim();\n if (!sha) {\n throw new Error('deleteNote sha is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n sha,\n };\n\n const expectedRefSha = options.expectedRefSha?.trim();\n if (expectedRefSha) {\n body.expected_ref_sha = expectedRefSha;\n }\n\n if (options.author) {\n const authorName = options.author.name?.trim();\n const authorEmail = options.author.email?.trim();\n if (!authorName || !authorEmail) {\n throw new Error(\n 'deleteNote author name and email are required when provided'\n );\n }\n body.author = {\n name: authorName,\n email: authorEmail,\n };\n }\n\n const response = await this.api.delete({ path: 'repos/notes', body }, jwt, {\n allowedStatus: [...NOTE_WRITE_ALLOWED_STATUS],\n });\n\n const result = await parseNoteWriteResponse(response, 'DELETE');\n if (!result.result.success) {\n throw new RefUpdateError(\n result.result.message ??\n `deleteNote failed with status ${result.result.status}`,\n {\n status: result.result.status,\n message: result.result.message,\n refUpdate: toPartialRefUpdate(\n result.targetRef,\n result.baseCommit,\n result.newRefSha\n ),\n }\n );\n }\n return result;\n }\n\n async getBranchDiff(\n options: GetBranchDiffOptions\n ): Promise<GetBranchDiffResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string | string[]> = {\n branch: options.branch,\n };\n\n if (options.base) {\n params.base = options.base;\n }\n if (typeof options.ephemeral === 'boolean') {\n params.ephemeral = String(options.ephemeral);\n }\n if (typeof options.ephemeralBase === 'boolean') {\n params.ephemeral_base = String(options.ephemeralBase);\n }\n if (options.paths && options.paths.length > 0) {\n params.path = options.paths;\n }\n\n const response = await this.api.get(\n { path: 'repos/branches/diff', params },\n jwt\n );\n\n const raw = branchDiffResponseSchema.parse(await response.json());\n return transformBranchDiffResult(raw);\n }\n\n async getCommitDiff(\n options: GetCommitDiffOptions\n ): Promise<GetCommitDiffResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const params: Record<string, string | string[]> = {\n sha: options.sha,\n };\n\n if (options.baseSha) {\n params.baseSha = options.baseSha;\n }\n if (options.paths && options.paths.length > 0) {\n params.path = options.paths;\n }\n\n const response = await this.api.get({ path: 'repos/diff', params }, jwt);\n\n const raw = commitDiffResponseSchema.parse(await response.json());\n return transformCommitDiffResult(raw);\n }\n\n async grep(options: GrepOptions): Promise<GrepResult> {\n const pattern = options?.query?.pattern?.trim();\n if (!pattern) {\n throw new Error('grep query.pattern is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n query: {\n pattern,\n ...(typeof options.query.caseSensitive === 'boolean'\n ? { case_sensitive: options.query.caseSensitive }\n : {}),\n },\n };\n\n const ref = options.ref?.trim() || options.rev?.trim();\n if (ref) {\n body.ref = ref;\n }\n if (Array.isArray(options.paths) && options.paths.length > 0) {\n body.paths = options.paths;\n }\n if (options.fileFilters) {\n body.file_filters = {\n ...(options.fileFilters.includeGlobs\n ? { include_globs: options.fileFilters.includeGlobs }\n : {}),\n ...(options.fileFilters.excludeGlobs\n ? { exclude_globs: options.fileFilters.excludeGlobs }\n : {}),\n ...(options.fileFilters.extensionFilters\n ? { extension_filters: options.fileFilters.extensionFilters }\n : {}),\n };\n }\n if (options.context) {\n body.context = {\n ...(typeof options.context.before === 'number'\n ? { before: options.context.before }\n : {}),\n ...(typeof options.context.after === 'number'\n ? { after: options.context.after }\n : {}),\n };\n }\n if (options.limits) {\n body.limits = {\n ...(typeof options.limits.maxLines === 'number'\n ? { max_lines: options.limits.maxLines }\n : {}),\n ...(typeof options.limits.maxMatchesPerFile === 'number'\n ? { max_matches_per_file: options.limits.maxMatchesPerFile }\n : {}),\n };\n }\n if (options.pagination) {\n body.pagination = {\n ...(typeof options.pagination.cursor === 'string' &&\n options.pagination.cursor.trim() !== ''\n ? { cursor: options.pagination.cursor }\n : {}),\n ...(typeof options.pagination.limit === 'number'\n ? { limit: options.pagination.limit }\n : {}),\n };\n }\n\n const response = await this.api.post({ path: 'repos/grep', body }, jwt);\n const raw = grepResponseSchema.parse(await response.json());\n\n return {\n query: {\n pattern: raw.query.pattern,\n caseSensitive: raw.query.case_sensitive,\n },\n repo: {\n ref: raw.repo.ref,\n commit: raw.repo.commit,\n },\n matches: raw.matches.map(transformGrepFileMatch),\n nextCursor: raw.next_cursor ?? undefined,\n hasMore: raw.has_more,\n };\n }\n\n async pullUpstream(options: PullUpstreamOptions = {}): Promise<void> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body: Record<string, string> = {};\n\n if (options.ref) {\n body.ref = options.ref;\n }\n\n const response = await this.api.post(\n { path: 'repos/pull-upstream', body },\n jwt\n );\n\n if (response.status !== 202) {\n throw new Error(\n `Pull Upstream failed: ${response.status} ${await response.text()}`\n );\n }\n\n return;\n }\n\n async createBranch(\n options: CreateBranchOptions\n ): Promise<CreateBranchResult> {\n const baseBranch = options?.baseBranch?.trim();\n if (!baseBranch) {\n throw new Error('createBranch baseBranch is required');\n }\n const targetBranch = options?.targetBranch?.trim();\n if (!targetBranch) {\n throw new Error('createBranch targetBranch is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n base_branch: baseBranch,\n target_branch: targetBranch,\n };\n\n if (options.baseIsEphemeral === true) {\n body.base_is_ephemeral = true;\n }\n if (options.targetIsEphemeral === true) {\n body.target_is_ephemeral = true;\n }\n\n const response = await this.api.post(\n { path: 'repos/branches/create', body },\n jwt\n );\n const raw = createBranchResponseSchema.parse(await response.json());\n return transformCreateBranchResult(raw);\n }\n\n async createTag(options: CreateTagOptions): Promise<CreateTagResult> {\n const name = options?.name?.trim();\n if (!name) {\n throw new Error('createTag name is required');\n }\n if (name.startsWith('refs/')) {\n throw new Error('createTag name must not start with refs/');\n }\n\n const target = options?.target?.trim();\n if (!target) {\n throw new Error('createTag target is required');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const response = await this.api.post(\n { path: 'repos/tags', body: { name, target } },\n jwt\n );\n const raw = createTagResponseSchema.parse(await response.json());\n return transformCreateTagResult(raw);\n }\n\n async deleteTag(options: DeleteTagOptions): Promise<DeleteTagResult> {\n const name = options?.name?.trim();\n if (!name) {\n throw new Error('deleteTag name is required');\n }\n if (name.startsWith('refs/')) {\n throw new Error('deleteTag name must not start with refs/');\n }\n\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:read', 'git:write'],\n ttl,\n });\n\n const response = await this.api.delete(\n { path: 'repos/tags', body: { name } },\n jwt\n );\n const raw = deleteTagResponseSchema.parse(await response.json());\n return transformDeleteTagResult(raw);\n }\n\n async restoreCommit(\n options: RestoreCommitOptions\n ): Promise<RestoreCommitResult> {\n const targetBranch = options?.targetBranch?.trim();\n if (!targetBranch) {\n throw new Error('restoreCommit targetBranch is required');\n }\n if (targetBranch.startsWith('refs/')) {\n throw new Error(\n 'restoreCommit targetBranch must not include refs/ prefix'\n );\n }\n\n const targetCommitSha = options?.targetCommitSha?.trim();\n if (!targetCommitSha) {\n throw new Error('restoreCommit targetCommitSha is required');\n }\n const commitMessage = options?.commitMessage?.trim();\n\n const authorName = options.author?.name?.trim();\n const authorEmail = options.author?.email?.trim();\n if (!authorName || !authorEmail) {\n throw new Error('restoreCommit author name and email are required');\n }\n\n const ttl = resolveCommitTtlSeconds(options);\n const jwt = await this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n const metadata: Record<string, unknown> = {\n target_branch: targetBranch,\n target_commit_sha: targetCommitSha,\n author: {\n name: authorName,\n email: authorEmail,\n },\n };\n\n if (commitMessage) {\n metadata.commit_message = commitMessage;\n }\n\n const expectedHeadSha = options.expectedHeadSha?.trim();\n if (expectedHeadSha) {\n metadata.expected_head_sha = expectedHeadSha;\n }\n\n if (options.committer) {\n const committerName = options.committer.name?.trim();\n const committerEmail = options.committer.email?.trim();\n if (!committerName || !committerEmail) {\n throw new Error(\n 'restoreCommit committer name and email are required when provided'\n );\n }\n metadata.committer = {\n name: committerName,\n email: committerEmail,\n };\n }\n\n const response = await this.api.post(\n { path: 'repos/restore-commit', body: { metadata } },\n jwt,\n {\n allowedStatus: [...RESTORE_COMMIT_ALLOWED_STATUS],\n }\n );\n\n const payload = await response.json();\n const parsed = parseRestoreCommitPayload(payload);\n if (parsed && 'ack' in parsed) {\n return buildRestoreCommitResult(parsed.ack);\n }\n\n const failure = parsed && 'failure' in parsed ? parsed.failure : undefined;\n const status =\n failure?.status ?? httpStatusToRestoreStatus(response.status);\n const message =\n failure?.message ??\n `Restore commit failed with HTTP ${response.status}` +\n (response.statusText ? ` ${response.statusText}` : '');\n\n throw new RefUpdateError(message, {\n status,\n refUpdate: failure?.refUpdate,\n });\n }\n\n createCommit(options: CreateCommitOptions): CommitBuilder {\n const version = this.options.apiVersion ?? API_VERSION;\n const baseUrl =\n this.options.apiBaseUrl ??\n GitStorage.getDefaultAPIBaseUrl(this.options.name);\n const transport = new FetchCommitTransport({ baseUrl, version });\n const ttl = resolveCommitTtlSeconds(options);\n const builderOptions: CreateCommitOptions = {\n ...options,\n ttl,\n };\n const getAuthToken = () =>\n this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n return createCommitBuilder({\n options: builderOptions,\n getAuthToken,\n transport,\n });\n }\n\n async createCommitFromDiff(\n options: CreateCommitFromDiffOptions\n ): Promise<CommitResult> {\n const version = this.options.apiVersion ?? API_VERSION;\n const baseUrl =\n this.options.apiBaseUrl ??\n GitStorage.getDefaultAPIBaseUrl(this.options.name);\n const transport = new FetchDiffCommitTransport({ baseUrl, version });\n const ttl = resolveCommitTtlSeconds(options);\n const requestOptions: CreateCommitFromDiffOptions = {\n ...options,\n ttl,\n };\n const getAuthToken = () =>\n this.generateJWT(this.id, {\n permissions: ['git:write'],\n ttl,\n });\n\n return sendCommitFromDiff({\n options: requestOptions,\n getAuthToken,\n transport,\n });\n }\n}\n\nexport class GitStorage {\n private options: GitStorageOptions;\n private api: ApiFetcher;\n\n constructor(options: GitStorageOptions) {\n if (\n !options ||\n options.name === undefined ||\n options.key === undefined ||\n options.name === null ||\n options.key === null\n ) {\n throw new Error(\n 'GitStorage requires a name and key. Please check your configuration and try again.'\n );\n }\n\n if (typeof options.name !== 'string' || options.name.trim() === '') {\n throw new Error('GitStorage name must be a non-empty string.');\n }\n\n if (typeof options.key !== 'string' || options.key.trim() === '') {\n throw new Error('GitStorage key must be a non-empty string.');\n }\n\n const resolvedApiBaseUrl =\n options.apiBaseUrl ?? GitStorage.getDefaultAPIBaseUrl(options.name);\n const resolvedApiVersion = options.apiVersion ?? API_VERSION;\n const resolvedStorageBaseUrl =\n options.storageBaseUrl ??\n GitStorage.getDefaultStorageBaseUrl(options.name);\n const resolvedDefaultTtl = options.defaultTTL;\n\n this.api = getApiInstance(resolvedApiBaseUrl, resolvedApiVersion);\n\n this.options = {\n key: options.key,\n name: options.name,\n apiBaseUrl: resolvedApiBaseUrl,\n apiVersion: resolvedApiVersion,\n storageBaseUrl: resolvedStorageBaseUrl,\n defaultTTL: resolvedDefaultTtl,\n };\n }\n\n static getDefaultAPIBaseUrl(name: string): string {\n return API_BASE_URL.replace('{{org}}', name);\n }\n\n static getDefaultStorageBaseUrl(name: string): string {\n return STORAGE_BASE_URL.replace('{{org}}', name);\n }\n\n /**\n * Create a new repository\n * @returns The created repository\n */\n async createRepo(options?: CreateRepoOptions): Promise<Repo> {\n const repoId = options?.id || crypto.randomUUID();\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(repoId, {\n permissions: ['repo:write'],\n ttl,\n });\n\n const baseRepo = options?.baseRepo;\n const isFork = baseRepo ? 'id' in baseRepo : false;\n let baseRepoOptions: Record<string, unknown> | null = null;\n let resolvedDefaultBranch: string | undefined;\n\n if (baseRepo) {\n if ('id' in baseRepo) {\n const baseRepoToken = await this.generateJWT(baseRepo.id, {\n permissions: ['git:read'],\n ttl,\n });\n baseRepoOptions = {\n provider: 'code',\n owner: this.options.name,\n name: baseRepo.id,\n operation: 'fork',\n auth: { token: baseRepoToken },\n ...(baseRepo.ref ? { ref: baseRepo.ref } : {}),\n ...(baseRepo.sha ? { sha: baseRepo.sha } : {}),\n };\n } else {\n // Sync base repo: GitHub or generic git provider (gitlab, bitbucket, etc.)\n const syncRepo = baseRepo as GitHubBaseRepo | GenericGitBaseRepo;\n const { provider: _p, ...restSnakecased } = snakecaseKeys(\n baseRepo as unknown as Record<string, unknown>\n ) as Record<string, unknown>;\n baseRepoOptions = {\n provider: syncRepo.provider ?? 'github',\n ...restSnakecased,\n };\n resolvedDefaultBranch = syncRepo.defaultBranch;\n }\n }\n\n // Match backend priority: baseRepo.defaultBranch > options.defaultBranch > 'main'\n if (!resolvedDefaultBranch) {\n if (options?.defaultBranch) {\n resolvedDefaultBranch = options.defaultBranch;\n } else if (!isFork) {\n resolvedDefaultBranch = 'main';\n }\n }\n\n const createRepoPath =\n baseRepoOptions || resolvedDefaultBranch\n ? {\n path: 'repos',\n body: {\n ...(baseRepoOptions && { base_repo: baseRepoOptions }),\n ...(resolvedDefaultBranch && {\n default_branch: resolvedDefaultBranch,\n }),\n },\n }\n : 'repos';\n\n // Allow 409 so we can map it to a clearer error message\n const resp = await this.api.post(createRepoPath, jwt, {\n allowedStatus: [409],\n });\n if (resp.status === 409) {\n throw new Error('Repository already exists');\n }\n\n return this.repo({\n id: repoId,\n defaultBranch: resolvedDefaultBranch ?? 'main',\n createdAt: new Date().toISOString(),\n });\n }\n\n /**\n * List repositories for the authenticated organization\n * @returns Paginated repositories list\n */\n async listRepos(options?: ListReposOptions): Promise<ListReposResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT('org', {\n permissions: ['org:read'],\n ttl,\n });\n\n let params: Record<string, string> | undefined;\n if (options?.cursor || typeof options?.limit === 'number') {\n params = {};\n if (options.cursor) {\n params.cursor = options.cursor;\n }\n if (typeof options.limit === 'number') {\n params.limit = options.limit.toString();\n }\n }\n\n const response = await this.api.get({ path: 'repos', params }, jwt);\n const raw = listReposResponseSchema.parse(await response.json());\n return transformListReposResult({\n ...raw,\n next_cursor: raw.next_cursor ?? undefined,\n });\n }\n\n /**\n * Find a repository by ID\n * @param options The search options\n * @returns The found repository\n */\n async findOne(options: FindOneOptions): Promise<Repo | null> {\n const jwt = await this.generateJWT(options.id, {\n permissions: ['git:read'],\n ttl: DEFAULT_TOKEN_TTL_SECONDS,\n });\n\n // Allow 404 to indicate \"not found\" without throwing\n const resp = await this.api.get('repo', jwt, { allowedStatus: [404] });\n if (resp.status === 404) {\n return null;\n }\n\n const body = (await resp.json()) as {\n default_branch?: string;\n created_at?: string;\n };\n const defaultBranch = body.default_branch ?? 'main';\n const createdAt = body.created_at ?? '';\n\n return this.repo({\n id: options.id,\n defaultBranch,\n createdAt,\n });\n }\n\n /**\n * Create a Repo handle from known metadata without making an HTTP request.\n */\n repo(options: RepoOptions): Repo {\n if (!options || typeof options.id !== 'string' || options.id.trim() === '') {\n throw new Error('repo requires a non-empty repository id.');\n }\n\n return new RepoImpl(\n options.id,\n options.defaultBranch ?? 'main',\n options.createdAt ?? '',\n this.options,\n this.generateJWT.bind(this)\n );\n }\n\n /**\n * Delete a repository by ID\n * @param options The delete options containing the repo ID\n * @returns The deletion result\n */\n async deleteRepo(options: DeleteRepoOptions): Promise<DeleteRepoResult> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(options.id, {\n permissions: ['repo:write'],\n ttl,\n });\n\n // Allow 404 and 409 for clearer error handling\n const resp = await this.api.delete('repos/delete', jwt, {\n allowedStatus: [404, 409],\n });\n if (resp.status === 404) {\n throw new Error('Repository not found');\n }\n if (resp.status === 409) {\n throw new Error('Repository already deleted');\n }\n\n const body = (await resp.json()) as { repo_id: string; message: string };\n return {\n repoId: body.repo_id,\n message: body.message,\n };\n }\n\n /**\n * Create a generic git credential for a repository.\n * Used to authenticate sync operations for non-GitHub providers (GitLab, Bitbucket, etc.)\n */\n async createGitCredential(\n options: CreateGitCredentialOptions\n ): Promise<GitCredential> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT(options.repoId, {\n permissions: ['repo:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n repo_id: options.repoId,\n password: options.password,\n };\n if (options.username !== undefined) {\n body.username = options.username;\n }\n\n const resp = await this.api.post(\n { path: 'repos/git-credentials', body },\n jwt,\n { allowedStatus: [409] }\n );\n if (resp.status === 409) {\n throw new Error('A credential already exists for this repository');\n }\n\n const data = (await resp.json()) as { id: string };\n return { id: data.id };\n }\n\n /**\n * Update an existing generic git credential.\n */\n async updateGitCredential(\n options: UpdateGitCredentialOptions\n ): Promise<GitCredential> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT('org', {\n permissions: ['repo:write'],\n ttl,\n });\n\n const body: Record<string, unknown> = {\n id: options.id,\n password: options.password,\n };\n if (options.username !== undefined) {\n body.username = options.username;\n }\n\n const resp = await this.api.put(\n { path: 'repos/git-credentials', body },\n jwt,\n { allowedStatus: [404] }\n );\n if (resp.status === 404) {\n throw new Error('Credential not found');\n }\n\n const data = (await resp.json()) as { id: string; created_at?: string };\n return {\n id: data.id,\n ...(data.created_at ? { createdAt: data.created_at } : {}),\n };\n }\n\n /**\n * Delete a generic git credential.\n */\n async deleteGitCredential(options: DeleteGitCredentialOptions): Promise<void> {\n const ttl = resolveInvocationTtlSeconds(options, DEFAULT_TOKEN_TTL_SECONDS);\n const jwt = await this.generateJWT('org', {\n permissions: ['repo:write'],\n ttl,\n });\n\n const resp = await this.api.delete(\n { path: 'repos/git-credentials', body: { id: options.id } },\n jwt,\n { allowedStatus: [404] }\n );\n if (resp.status === 404) {\n throw new Error('Credential not found');\n }\n }\n\n /**\n * Get the current configuration\n * @returns The client configuration\n */\n getConfig(): GitStorageOptions {\n return { ...this.options };\n }\n\n /**\n * Generate a JWT token for git storage URL authentication\n * @private\n */\n private async generateJWT(\n repoId: string,\n options?: GetRemoteURLOptions\n ): Promise<string> {\n // Default permissions and TTL\n const permissions = options?.permissions || ['git:write', 'git:read'];\n const ttl = resolveInvocationTtlSeconds(\n options,\n this.options.defaultTTL ?? 365 * 24 * 60 * 60\n );\n\n // Create the JWT payload\n const now = Math.floor(Date.now() / 1000);\n const payload = {\n iss: this.options.name,\n sub: '@pierre/storage',\n repo: repoId,\n scopes: permissions,\n iat: now,\n exp: now + ttl,\n ...(options?.ops && options.ops.length > 0 ? { ops: options.ops } : {}),\n };\n\n // Sign the JWT with the key as the secret\n // Using HS256 for symmetric signing with the key\n const key = await importPKCS8(this.options.key, 'ES256');\n // Sign the JWT with the key as the secret\n const jwt = await new SignJWT(payload)\n .setProtectedHeader({ alg: 'ES256', typ: 'JWT' })\n .sign(key);\n\n return jwt;\n }\n}\n\n// Export a default client factory\nexport function createClient(options: GitStorageOptions): GitStorage {\n return new GitStorage(options);\n}\n\n// Export CodeStorage as an alias for GitStorage\nexport { GitStorage as CodeStorage };\n\n// Type alias for backward compatibility\nexport type StorageOptions = GitStorageOptions;\n"]}
|