@urateam/cli 0.1.43 → 0.1.45

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.unit.test.js","sourceRoot":"","sources":["../../src/__tests__/bootstrap.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,8EAA8E;AAC9E,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,yEAAyE;AACzE,gDAAgD;AAChD,8EAA8E;AAE9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,GAGjB,MAAM,0BAA0B,CAAC;AAElC,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,2FAA2F;AAC3F,SAAS,YAAY,CAAC,OAAkB;IACtC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC/B,IAAI,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,6EAA6E;AAC7E,MAAM,eAAe,GAAG,KAAK,EAAE,KAAa,EAAoB,EAAE,CAAC,IAAI,CAAC;AAExE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1F,wBAAwB,CACzB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAClC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1F,OAAO,CACR,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACrC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1F,UAAU,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAC1F,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE;aACzF,CAAC;YACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,qBAAqB,CACnB,cAAc,EACd,qCAAqC,EACrC,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CACF,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE3B,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAA0B,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE;aACzF,CAAC;YACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,qBAAqB,CACzB,cAAc,EACd,qCAAqC,EACrC,UAAU,EACV,SAAS,EACT,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;QAEF,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAA0B,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE;aACzF,CAAC;YACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,qBAAqB,CACzB,cAAc,EACd,qCAAqC,EACrC,SAAS,EACT,yBAAyB,EACzB,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CAAC;QAEF,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAA0B,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC9D,8DAA8D;QAC9D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,cAAc;SACjC,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,qBAAqB,CACnB,SAAS,EACT,qCAAqC,EACrC,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CACF,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;gBACvC,IAAI,EAAE,IAAI;aACX,CAAC;YACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,qBAAqB,CACnB,cAAc,EACd,qCAAqC,EACrC,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CACF,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;aAC5C,CAAC;YACF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,qBAAqB,CACnB,cAAc,EACd,qCAAqC,EACrC,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,SAAS,EAAE,CACrB,CACF,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,MAAc,CAAC;IAEnB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,SAAS,OAAO,CAAC,SAAqC;QACpD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,yEAAyE;YACrF,mBAAmB,EAAE,UAAU;YAC/B,YAAY,EAAE,iBAAiB;YAC/B,mBAAmB,EAAE,cAAc;YACnC,UAAU,EAAE,2BAA2B;YACvC,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,8CAA8C;QAC9C,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,IAAa,EAAE,EAAE;YACtF,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAc,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,aAAoC,EAAE,CAAC,CAAC;QAExF,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,CAAC;QACvD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACxD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACnE,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QACvE,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACnE,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC;QAC1E,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACpD,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,UAAU,EAAE,sEAAsE,EAAE,CAAC,CAAC;QAC5G,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,IAAa,EAAE,EAAE;YACtF,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAc,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,aAAoC,EAAE,CAAC,CAAC;QAExF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,CAAC;QAChD,0DAA0D;QAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAChD,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,IAAa,EAAE,EAAE;YACtF,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAc,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,aAAoC,EAAE,CAAC,CAAC;QAExF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,KAAc,EAAE,EAAE;YACvF,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,aAAoC,EAAE,CAAC,CAAC;QAExF,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,SAAS,OAAO;QACd,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,KAAK;YACjB,mBAAmB,EAAE,UAAU;YAC/B,YAAY,EAAE,cAAc;YAC5B,mBAAmB,EAAE,cAAc;YACnC,UAAU,EAAE,2BAA2B;SACxC,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,IAAa,EAAE,EAAE;YACtF,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAc,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,MAAM,qBAAqB,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE;YACtD,SAAS,EAAE,aAAoC;SAChD,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,CAAC;QAEhD,4BAA4B;QAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAExC,iBAAiB;QACjB,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEvC,sBAAsB;QACtB,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,KAAc,EAAE,EAAE;YACvF,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,MAAM,qBAAqB,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE;YACtD,SAAS,EAAE,aAAoC;SAChD,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,YAAY,GAA2B,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,QAAkC,EAAE,IAAa,EAAE,EAAE;YACtF,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAc,CAAC;QACrD,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,MAAM,0BAA0B,CAAC,mBAAmB,EAAE,OAAO,EAAE,eAAe,EAAE;YAC9E,SAAS,EAAE,aAAoC;YAC/C,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC,CAAC;QAEH,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAE1D,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,MAAM,0BAA0B,CAAC,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE;YACpF,SAAS,EAAE,aAAoC;YAC/C,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SAC7B,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAE7C,wCAAwC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACjD,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;YAC1C,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;QAEH,MAAM,MAAM,CACV,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACjD,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,sDAAsD;QACtD,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAEvE,MAAM,MAAM,CACV,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CACnE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,8CAA8C;QAC9C,MAAM,SAAS,GAAG,EAAE;aACjB,EAAE,EAAE;aACJ,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;aACtC,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAE1C,yEAAyE;QACzE,wEAAwE;QACxE,8DAA8D;QAC9D,0DAA0D;QAC1D,MAAM,MAAM,CACV,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAClD,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE3B,+CAA+C;QAC/C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,EAAE,MAAM,CAAC,CAAC;AACb,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAa,EAAoB,EAAE,CAAC,KAAK,CAAC;QAE1E,MAAM,MAAM,CACV,eAAe,CAAC;YACd,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE;SACvC,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,kCAAkC;QAEzD,MAAM,MAAM,CACV,eAAe,CAAC;YACd,YAAY,EAAE,IAAI,EAAE,sDAAsD;YAC1E,SAAS;YACT,IAAI,EAAE;gBACJ,UAAU,EAAE,YAAY;gBACxB,WAAW,EAAE,cAAc;gBAC3B,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;aAC9D;SACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,kEAAkE;QAEvF,+DAA+D;QAC/D,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAE/B,4DAA4D;QAC5D,MAAM,MAAM,CACV,eAAe,CAAC;YACd,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,GAAG;YACd,IAAI,EAAE;gBACJ,WAAW,EAAE,cAAc;gBAC3B,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aAC7B;SACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAE/B,MAAM,MAAM,CACV,eAAe,CAAC;YACd,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,GAAG;YACd,IAAI,EAAE;gBACJ,WAAW,EAAE,cAAc;gBAC3B,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;aAC7B;SACF,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,iEAAiE;QACjE,0EAA0E;QAC1E,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,6DAA6D;QAC7D,iDAAiD;QACjD,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,8 +3,10 @@ import { Command } from "commander";
3
3
  // ---------------------------------------------------------------------------
4
4
  // Command registration — all expected commands are registered
5
5
  // ---------------------------------------------------------------------------
6
- describe("command registration", () => {
7
- it("registers all expected commands: run, dev, webhook, config, start", async () => {
6
+ // Dynamic imports of 6 commands each pull in @urateam/core (which is heavy);
7
+ // the default 5s timeout is too tight for a cold first-import on slower hosts.
8
+ describe("command registration", { timeout: 30_000 }, () => {
9
+ it("registers all expected commands: run, dev, webhook, config, start, bootstrap", async () => {
8
10
  // We cannot import index.ts directly because it calls .parse() on import,
9
11
  // so we verify by importing each command and checking its name.
10
12
  const { runCommand } = await import("../commands/run.js");
@@ -12,6 +14,7 @@ describe("command registration", () => {
12
14
  const { webhookCommand } = await import("../commands/webhook.js");
13
15
  const { configCommand } = await import("../commands/config.js");
14
16
  const { startCommand } = await import("../commands/start.js");
17
+ const { bootstrapCommand } = await import("../commands/bootstrap.js");
15
18
  // Build a program the same way index.ts does
16
19
  const program = new Command();
17
20
  program.name("ura").version("0.1.0");
@@ -20,13 +23,15 @@ describe("command registration", () => {
20
23
  program.addCommand(webhookCommand);
21
24
  program.addCommand(configCommand);
22
25
  program.addCommand(startCommand);
26
+ program.addCommand(bootstrapCommand);
23
27
  const commandNames = program.commands.map((c) => c.name());
24
28
  expect(commandNames).toContain("run");
25
29
  expect(commandNames).toContain("dev");
26
30
  expect(commandNames).toContain("webhook");
27
31
  expect(commandNames).toContain("config");
28
32
  expect(commandNames).toContain("start");
29
- expect(commandNames).toHaveLength(5);
33
+ expect(commandNames).toContain("bootstrap");
34
+ expect(commandNames).toHaveLength(6);
30
35
  });
31
36
  it("each command has a non-empty description", async () => {
32
37
  const { runCommand } = await import("../commands/run.js");
@@ -34,7 +39,8 @@ describe("command registration", () => {
34
39
  const { webhookCommand } = await import("../commands/webhook.js");
35
40
  const { configCommand } = await import("../commands/config.js");
36
41
  const { startCommand } = await import("../commands/start.js");
37
- for (const cmd of [runCommand, devCommand, webhookCommand, configCommand, startCommand]) {
42
+ const { bootstrapCommand } = await import("../commands/bootstrap.js");
43
+ for (const cmd of [runCommand, devCommand, webhookCommand, configCommand, startCommand, bootstrapCommand]) {
38
44
  expect(cmd.description()).toBeTruthy();
39
45
  }
40
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"cli-integration.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,8EAA8E;AAC9E,8DAA8D;AAC9D,8EAA8E;AAC9E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,0EAA0E;QAC1E,gEAAgE;QAChE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAE9D,6CAA6C;QAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAEjC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAE9D,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC;YACxF,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACxE,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,kEAAkE;AAClE,8EAA8E;AAC9E,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE1D,8DAA8D;QAC9D,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,wCAAwC;QACnE,MAAM,MAAM,CACV,UAAU,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CACvD,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAC9E,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,IAAI,UAAuC,CAAC;IAC5C,8DAA8D;IAC9D,IAAI,WAAgB,CAAC;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnE,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAc,EAAE,EAAE;YAC7E,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAU,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,WAAW,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE1D,MAAM,UAAU,CAAC,UAAU,CACzB,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAC/D,EAAE,IAAI,EAAE,MAAM,EAAE,CACjB,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAE3C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli-integration.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config-watcher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config-watcher.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,209 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { mkdtempSync, rmSync, writeFileSync, } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { tmpdir } from "node:os";
5
+ import { diffRepos, hashConfig, ConfigWatcher, SAFE_REPO_FIELDS, UNSAFE_REPO_FIELDS, } from "../lib/config-watcher.js";
6
+ function repo(over) {
7
+ return {
8
+ url: "https://github.com/a/x.git",
9
+ path: "/p/x",
10
+ defaultBranch: "main",
11
+ testCommand: "pnpm test",
12
+ buildCommand: "pnpm build",
13
+ ...over,
14
+ };
15
+ }
16
+ function cfg(repos) {
17
+ return { version: 1, repos };
18
+ }
19
+ describe("diffRepos", () => {
20
+ it("detects added repos", () => {
21
+ const prev = cfg([]);
22
+ const next = cfg([repo({ url: "https://github.com/a/x.git" })]);
23
+ const d = diffRepos(prev, next);
24
+ expect(d.added).toHaveLength(1);
25
+ expect(d.added[0].url).toBe("https://github.com/a/x.git");
26
+ expect(d.removed).toEqual([]);
27
+ expect(d.modifiedSafe).toEqual([]);
28
+ expect(d.modifiedUnsafe).toEqual([]);
29
+ });
30
+ it("detects removed repos", () => {
31
+ const prev = cfg([repo({ url: "https://github.com/a/x.git" })]);
32
+ const next = cfg([]);
33
+ const d = diffRepos(prev, next);
34
+ expect(d.removed).toHaveLength(1);
35
+ expect(d.removed[0].url).toBe("https://github.com/a/x.git");
36
+ expect(d.added).toEqual([]);
37
+ });
38
+ it("detects safe-field modifications and carries prev + next entries", () => {
39
+ const prev = cfg([repo({ testCommand: "pnpm test" })]);
40
+ const next = cfg([repo({ testCommand: "pnpm test --changed" })]);
41
+ const d = diffRepos(prev, next);
42
+ expect(d.modifiedSafe).toHaveLength(1);
43
+ expect(d.modifiedSafe[0].fields).toContain("testCommand");
44
+ expect(d.modifiedSafe[0].prev.testCommand).toBe("pnpm test");
45
+ expect(d.modifiedSafe[0].repo.testCommand).toBe("pnpm test --changed");
46
+ expect(d.modifiedUnsafe).toEqual([]);
47
+ });
48
+ it("detects teamId change (safe) and the diff carries the old teamId for re-keying", () => {
49
+ const prev = cfg([repo({ teamId: "team-old" })]);
50
+ const next = cfg([repo({ teamId: "team-new" })]);
51
+ const d = diffRepos(prev, next);
52
+ expect(d.modifiedSafe).toHaveLength(1);
53
+ expect(d.modifiedSafe[0].fields).toContain("teamId");
54
+ expect(d.modifiedSafe[0].prev.teamId).toBe("team-old");
55
+ expect(d.modifiedSafe[0].repo.teamId).toBe("team-new");
56
+ });
57
+ it("detects unsafe-field modifications (defaultBranch)", () => {
58
+ const prev = cfg([repo({ defaultBranch: "main" })]);
59
+ const next = cfg([repo({ defaultBranch: "master" })]);
60
+ const d = diffRepos(prev, next);
61
+ expect(d.modifiedUnsafe).toHaveLength(1);
62
+ expect(d.modifiedUnsafe[0].fields).toContain("defaultBranch");
63
+ expect(d.modifiedSafe).toEqual([]);
64
+ });
65
+ it("splits safe + unsafe modifications on the same repo", () => {
66
+ const prev = cfg([repo({ defaultBranch: "main", testCommand: "a" })]);
67
+ const next = cfg([repo({ defaultBranch: "develop", testCommand: "b" })]);
68
+ const d = diffRepos(prev, next);
69
+ expect(d.modifiedSafe).toHaveLength(1);
70
+ expect(d.modifiedUnsafe).toHaveLength(1);
71
+ });
72
+ it("returns empty diff when configs are identical", () => {
73
+ const same = cfg([repo({})]);
74
+ const d = diffRepos(same, same);
75
+ expect(d.added).toEqual([]);
76
+ expect(d.removed).toEqual([]);
77
+ expect(d.modifiedSafe).toEqual([]);
78
+ expect(d.modifiedUnsafe).toEqual([]);
79
+ });
80
+ it("classifies SAFE_REPO_FIELDS and UNSAFE_REPO_FIELDS disjointly", () => {
81
+ for (const f of SAFE_REPO_FIELDS) {
82
+ expect(UNSAFE_REPO_FIELDS).not.toContain(f);
83
+ }
84
+ });
85
+ });
86
+ describe("hashConfig", () => {
87
+ it("returns a 64-char hex string", () => {
88
+ expect(hashConfig(cfg([]))).toMatch(/^[0-9a-f]{64}$/);
89
+ });
90
+ it("is deterministic for the same input", () => {
91
+ expect(hashConfig(cfg([repo({})]))).toBe(hashConfig(cfg([repo({})])));
92
+ });
93
+ it("changes when content changes", () => {
94
+ expect(hashConfig(cfg([]))).not.toBe(hashConfig(cfg([repo({})])));
95
+ });
96
+ });
97
+ describe("ConfigWatcher", () => {
98
+ let tmp;
99
+ let configPath;
100
+ beforeEach(() => {
101
+ tmp = mkdtempSync(join(tmpdir(), "ura-watch-"));
102
+ configPath = join(tmp, "config.json");
103
+ writeFileSync(configPath, JSON.stringify(cfg([])));
104
+ });
105
+ afterEach(() => {
106
+ rmSync(tmp, { recursive: true, force: true });
107
+ });
108
+ it("emits 'applied' with a diff when the reader returns a new config", async () => {
109
+ const initial = cfg([]);
110
+ const after = cfg([repo({ url: "https://github.com/a/x.git" })]);
111
+ // Reader returns the post-change config on every call; the watcher's
112
+ // diff is against its in-memory `initial`, so the first reload emits.
113
+ const reader = vi.fn(() => after);
114
+ const w = new ConfigWatcher(initial, {
115
+ path: configPath,
116
+ debounceMs: 5,
117
+ reader,
118
+ log: () => { },
119
+ });
120
+ const applied = new Promise((resolve) => w.once("applied", resolve));
121
+ w.reloadNow();
122
+ const diff = await applied;
123
+ expect(diff.added).toHaveLength(1);
124
+ expect(diff.added[0].url).toBe("https://github.com/a/x.git");
125
+ // After applying, subsequent same-content reloads should be no-ops.
126
+ const handler = vi.fn();
127
+ w.on("applied", handler);
128
+ w.reloadNow();
129
+ expect(handler).not.toHaveBeenCalled();
130
+ });
131
+ it("emits no 'applied' for a no-op reload", () => {
132
+ const initial = cfg([]);
133
+ const w = new ConfigWatcher(initial, {
134
+ path: configPath,
135
+ reader: () => initial,
136
+ log: () => { },
137
+ });
138
+ const handler = vi.fn();
139
+ w.on("applied", handler);
140
+ w.reloadNow();
141
+ expect(handler).not.toHaveBeenCalled();
142
+ });
143
+ it("emits 'error' and keeps the previous config when the reader throws", () => {
144
+ const initial = cfg([]);
145
+ const reader = vi.fn(() => {
146
+ throw new Error("zod: invalid schema");
147
+ });
148
+ const w = new ConfigWatcher(initial, {
149
+ path: configPath,
150
+ reader,
151
+ log: () => { },
152
+ });
153
+ const handler = vi.fn();
154
+ w.on("error", handler);
155
+ w.reloadNow();
156
+ expect(handler).toHaveBeenCalled();
157
+ expect(w.getCurrent()).toBe(initial);
158
+ });
159
+ it("keeps the previous config when the config file disappears", () => {
160
+ const initial = cfg([]);
161
+ const w = new ConfigWatcher(initial, {
162
+ path: configPath,
163
+ reader: () => null,
164
+ log: () => { },
165
+ });
166
+ w.reloadNow();
167
+ expect(w.getCurrent()).toBe(initial);
168
+ });
169
+ it("debounces 5 rapid scheduleReload calls into exactly one reload", async () => {
170
+ vi.useFakeTimers();
171
+ try {
172
+ const initial = cfg([]);
173
+ const next = cfg([repo({})]);
174
+ const reader = vi.fn(() => next);
175
+ const w = new ConfigWatcher(initial, {
176
+ path: configPath,
177
+ debounceMs: 100,
178
+ reader,
179
+ log: () => { },
180
+ });
181
+ // Don't call start() — fs.watch fires on OS time and can't be driven
182
+ // by fake timers. Instead exercise scheduleReload() directly so the
183
+ // debounce + setTimeout chain runs entirely under our control.
184
+ for (let i = 0; i < 5; i++)
185
+ w.scheduleReload();
186
+ expect(reader).not.toHaveBeenCalled();
187
+ await vi.advanceTimersByTimeAsync(99);
188
+ expect(reader).not.toHaveBeenCalled();
189
+ await vi.advanceTimersByTimeAsync(1);
190
+ expect(reader).toHaveBeenCalledTimes(1);
191
+ }
192
+ finally {
193
+ vi.useRealTimers();
194
+ }
195
+ });
196
+ it("stop() unwatches and cancels pending debounce timer", () => {
197
+ const initial = cfg([]);
198
+ const w = new ConfigWatcher(initial, {
199
+ path: configPath,
200
+ reader: () => initial,
201
+ log: () => { },
202
+ });
203
+ w.start();
204
+ w.stop();
205
+ // No exceptions; subsequent stop is a no-op.
206
+ expect(() => w.stop()).not.toThrow();
207
+ });
208
+ });
209
+ //# sourceMappingURL=config-watcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-watcher.test.js","sourceRoot":"","sources":["../../src/__tests__/config-watcher.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * `ura bootstrap` — one-command self-hosted onboarding wizard.
3
+ *
4
+ * Walks the operator through:
5
+ * 1. Pre-flight checks (Docker, ports, tools)
6
+ * 2. GitHub App creation via manifest flow
7
+ * 3. Linear webhook registration
8
+ * 4. .env + docker-compose.dogfood.yml generation
9
+ * 5. Reverse-proxy config (Caddyfile or cloudflared command)
10
+ * 6. Optional first-run validation (POST synthetic webhook)
11
+ *
12
+ * All exported functions accept a `deps` parameter so unit tests can inject
13
+ * mocked implementations of I/O, network, and child-process calls.
14
+ */
15
+ import { Command } from "commander";
16
+ import * as fs from "node:fs/promises";
17
+ /**
18
+ * Simplified execFile signature used for dependency injection.
19
+ * Matches the `(file, args, callback)` overload of child_process.execFile
20
+ * with a simplified callback type so tests can easily provide mocks.
21
+ */
22
+ export type ExecFileFn = (file: string, args: string[], callback: (error: Error | null, stdout?: string | Buffer, stderr?: string | Buffer) => void) => void;
23
+ /** Dependencies injectable for testing. */
24
+ export interface BootstrapDeps {
25
+ /** Replaces child_process.execFile. */
26
+ execFile?: ExecFileFn;
27
+ /** Replaces global fetch. */
28
+ fetch?: typeof fetch;
29
+ /** Replaces fs.writeFile. */
30
+ writeFile?: typeof fs.writeFile;
31
+ /** Replaces fs.mkdir. */
32
+ mkdir?: typeof fs.mkdir;
33
+ /** Replaces process.stdout.write (for console output). */
34
+ log?: (msg: string) => void;
35
+ /** Replaces opening the browser. */
36
+ openBrowser?: (url: string) => void;
37
+ /** Replaces the TCP port-free check (returns true when port is available). */
38
+ isPortFree?: (port: number) => Promise<boolean>;
39
+ }
40
+ /**
41
+ * @internal
42
+ * Result from a successful GitHub App manifest flow.
43
+ *
44
+ * Credential carrier — do NOT log or serialise this object.
45
+ * Fields named `*Key`, `*Secret`, and `*Id` contain sensitive material.
46
+ * Pass this struct only to {@link generateEnvFile} / {@link generateDockerCompose};
47
+ * never include it in audit log entries, Slack messages, or HTTP responses.
48
+ *
49
+ * @remarks
50
+ * This type is exported only because TypeScript's `declaration: true` requires
51
+ * exported functions to have fully-resolvable return types in `.d.ts` files.
52
+ * Treat it as `@internal` at the API level.
53
+ */
54
+ /** @internal */
55
+ export interface GitHubAppCredentials {
56
+ appId: number;
57
+ appName: string;
58
+ /** @internal PEM-encoded private key — never log */
59
+ privateKey: string;
60
+ /** @internal Webhook HMAC secret — never log */
61
+ webhookSecret: string;
62
+ clientId: string;
63
+ /** @internal OAuth client secret — never log */
64
+ clientSecret: string;
65
+ htmlUrl: string;
66
+ }
67
+ /** Options for createGitHubApp. */
68
+ export interface CreateGitHubAppOpts {
69
+ /** GitHub organisation name. Leave blank for a personal account. */
70
+ org?: string;
71
+ /** Pre-assigned callback port; defaults to a random available port. */
72
+ callbackPort?: number;
73
+ /** Timeout (ms) to wait for the OAuth callback. Default: 30 000. */
74
+ timeoutMs?: number;
75
+ deps?: BootstrapDeps;
76
+ }
77
+ /**
78
+ * @internal
79
+ * Everything needed to render output files (.env, docker-compose, Caddyfile).
80
+ *
81
+ * Credential carrier — do NOT log or serialise this object.
82
+ * It contains sensitive strings (private keys, API keys, webhook secrets,
83
+ * dashboard passwords). Pass it only to the `generate*` functions; never
84
+ * include it in audit log entries, Slack messages, or HTTP responses.
85
+ */
86
+ /** @internal */
87
+ export interface BootstrapContext {
88
+ /** GitHub App ID. */
89
+ appId: number;
90
+ /** @internal PEM-encoded GitHub App private key — never log */
91
+ privateKey: string;
92
+ /** @internal GitHub App webhook secret — never log */
93
+ githubWebhookSecret: string;
94
+ /** @internal Linear API key — never log */
95
+ linearApiKey: string;
96
+ /**
97
+ * @internal Linear webhook signing secret — never log.
98
+ * Generated locally by the bootstrap action and sent to Linear as
99
+ * `webhookCreate.secret` so the urateam handler can verify HMAC
100
+ * signatures on incoming events.
101
+ */
102
+ linearWebhookSecret: string;
103
+ /** Public webhook URL (e.g. https://hooks.example.com). */
104
+ webhookUrl: string;
105
+ /** Optional Postgres DATABASE_URL; defaults to a SQLite path. */
106
+ databaseUrl?: string;
107
+ /** Dashboard basic-auth username. */
108
+ dashboardUser?: string;
109
+ /** @internal Dashboard basic-auth password — never log */
110
+ dashboardPassword?: string;
111
+ }
112
+ /**
113
+ * Verifies that the local environment is ready for a bootstrap run:
114
+ * - Docker daemon is reachable (`docker info`)
115
+ * - Ports 3000 and 3001 are free
116
+ * - Required CLI tools are present: curl, openssl, jq
117
+ *
118
+ * Throws a descriptive `Error` on the first failure. The bootstrap action
119
+ * calls `process.exit(1)` after logging the error.
120
+ *
121
+ * @param deps - Optional injectable dependencies (for testing).
122
+ */
123
+ export declare function preflightChecks(deps?: BootstrapDeps): Promise<void>;
124
+ /**
125
+ * Creates a GitHub App via the manifest flow:
126
+ * 1. Starts a temporary HTTP server on a local port to capture the OAuth code.
127
+ * 2. Opens the browser to GitHub's manifest endpoint.
128
+ * 3. Waits for GitHub to redirect back with `?code=`.
129
+ * 4. Exchanges the code for full app credentials via the GitHub API.
130
+ *
131
+ * Returns the app credentials (`appId`, `privateKey`, `webhookSecret`, etc.).
132
+ * Throws if the callback times out or the exchange fails.
133
+ *
134
+ * @param opts - Options including org name, timeout, and injectable deps.
135
+ */
136
+ export declare function createGitHubApp(opts?: CreateGitHubAppOpts): Promise<GitHubAppCredentials>;
137
+ /**
138
+ * Registers a webhook in the Linear workspace via the GraphQL API.
139
+ *
140
+ * The webhook is registered for `Issue` resource type events. If `teamId` is
141
+ * supplied the webhook is scoped to that team; otherwise it applies
142
+ * workspace-wide (requires admin privileges).
143
+ *
144
+ * **Important**: when `secret` is provided, it is sent to Linear as the
145
+ * webhook signing secret. The caller MUST persist the same value (e.g. in
146
+ * `.env` as `LINEAR_WEBHOOK_SECRET`) so the urateam handler can verify
147
+ * incoming webhook signatures. Omitting `secret` leaves Linear's webhook
148
+ * unsigned — incoming events will not carry a verifiable signature.
149
+ *
150
+ * @param apiKey - Linear API key (starts with `lin_api_`).
151
+ * @param webhookUrl - Publicly reachable URL for the webhook endpoint.
152
+ * @param teamId - Optional Linear team ID to scope the webhook.
153
+ * @param secret - Optional HMAC signing secret sent to Linear; must match
154
+ * the `LINEAR_WEBHOOK_SECRET` env var used by the handler.
155
+ * @param deps - Optional injectable dependencies (for testing).
156
+ */
157
+ export declare function registerLinearWebhook(apiKey: string, webhookUrl: string, teamId?: string, secret?: string, deps?: BootstrapDeps): Promise<void>;
158
+ /**
159
+ * Generates a `.env` file in `outputDir` (default: `process.cwd()`) with all
160
+ * required environment variables populated from `ctx`.
161
+ *
162
+ * @param ctx - Bootstrap context containing all credential values.
163
+ * @param outputDir - Directory to write `.env` to. Defaults to `process.cwd()`.
164
+ * @param deps - Optional injectable dependencies (for testing).
165
+ */
166
+ export declare function generateEnvFile(ctx: BootstrapContext, outputDir?: string, deps?: BootstrapDeps): Promise<void>;
167
+ /**
168
+ * Generates a `docker-compose.dogfood.yml` in `outputDir` with two services:
169
+ * - `app` — webhook server on port 3000
170
+ * - `dashboard` — ops dashboard on port 3001
171
+ *
172
+ * Both services reference `env_file: .env` for all credentials.
173
+ *
174
+ * @param ctx - Bootstrap context (used for documentation/comments only).
175
+ * @param outputDir - Directory to write the compose file. Defaults to `process.cwd()`.
176
+ * @param deps - Optional injectable dependencies (for testing).
177
+ */
178
+ export declare function generateDockerCompose(ctx: BootstrapContext, outputDir?: string, deps?: BootstrapDeps): Promise<void>;
179
+ /**
180
+ * Generates reverse-proxy configuration for the given domain.
181
+ *
182
+ * For `"caddy"`: writes a `Caddyfile` in `outputDir`.
183
+ * For `"cloudflared"`: prints the `cloudflared tunnel` command to stdout
184
+ * (no file is written — cloudflared uses its own config store).
185
+ *
186
+ * @param domain - Fully-qualified domain name (e.g. `hooks.example.com`).
187
+ * @param choice - Proxy type: `"caddy"` or `"cloudflared"`.
188
+ * @param outputDir - Directory to write generated files. Defaults to `process.cwd()`.
189
+ * @param deps - Optional injectable dependencies (for testing).
190
+ */
191
+ export declare function generateReverseProxyConfig(domain: string, choice: "caddy" | "cloudflared", outputDir?: string, deps?: BootstrapDeps): Promise<void>;
192
+ /**
193
+ * Validates the running stack by POSTing a synthetic Linear webhook to the
194
+ * local webhook server. Polls every 2 seconds for up to `timeoutMs`
195
+ * (default: 30 000 ms). Resolves on a 2xx response; throws on timeout.
196
+ *
197
+ * @param port - Local webhook server port (default: 3000).
198
+ * @param timeoutMs - Total time to wait in milliseconds (default: 30 000).
199
+ * @param deps - Optional injectable dependencies (for testing).
200
+ */
201
+ export declare function validateSetup(port?: number, timeoutMs?: number, deps?: BootstrapDeps): Promise<void>;
202
+ /**
203
+ * `ura bootstrap` — the Commander.js command object.
204
+ *
205
+ * Orchestrates the full self-hosted onboarding sequence in interactive mode.
206
+ */
207
+ export declare const bootstrapCommand: Command;
208
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"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"}