@workflow/cli 5.0.0-beta.4 → 5.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.js +1 -1
- package/dist/commands/build.js +1 -1
- package/dist/commands/cancel.d.ts +1 -0
- package/dist/commands/cancel.d.ts.map +1 -1
- package/dist/commands/cancel.js +36 -55
- package/dist/commands/dev.js +1 -1
- package/dist/commands/health.d.ts +1 -3
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +26 -50
- package/dist/commands/init.js +1 -1
- package/dist/commands/inspect.d.ts +4 -0
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +37 -7
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +8 -3
- package/dist/commands/transform.js +1 -1
- package/dist/commands/validate.js +1 -1
- package/dist/commands/web.d.ts +2 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +9 -3
- package/dist/lib/bulk-cancel.d.ts +74 -0
- package/dist/lib/bulk-cancel.d.ts.map +1 -0
- package/dist/lib/bulk-cancel.js +197 -0
- package/dist/lib/bulk-cancel.test.d.ts +2 -0
- package/dist/lib/bulk-cancel.test.d.ts.map +1 -0
- package/dist/lib/bulk-cancel.test.js +366 -0
- package/dist/lib/config/log.js +1 -1
- package/dist/lib/config/types.d.ts +6 -1
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/config/types.js +1 -1
- package/dist/lib/config/workflow-config.d.ts.map +1 -1
- package/dist/lib/config/workflow-config.js +2 -2
- package/dist/lib/inspect/auth.js +1 -1
- package/dist/lib/inspect/env.d.ts +1 -1
- package/dist/lib/inspect/env.js +2 -2
- package/dist/lib/inspect/errors.d.ts +3 -0
- package/dist/lib/inspect/errors.d.ts.map +1 -0
- package/dist/lib/inspect/errors.js +27 -0
- package/dist/lib/inspect/flags.d.ts +9 -0
- package/dist/lib/inspect/flags.d.ts.map +1 -1
- package/dist/lib/inspect/flags.js +23 -1
- package/dist/lib/inspect/hydration.d.ts +22 -0
- package/dist/lib/inspect/hydration.d.ts.map +1 -1
- package/dist/lib/inspect/hydration.js +107 -49
- package/dist/lib/inspect/hydration.test.d.ts +2 -0
- package/dist/lib/inspect/hydration.test.d.ts.map +1 -0
- package/dist/lib/inspect/hydration.test.js +23 -0
- package/dist/lib/inspect/output.d.ts +2 -2
- package/dist/lib/inspect/output.d.ts.map +1 -1
- package/dist/lib/inspect/output.js +327 -136
- package/dist/lib/inspect/output.test.js +663 -3
- package/dist/lib/inspect/pagination.d.ts +10 -1
- package/dist/lib/inspect/pagination.d.ts.map +1 -1
- package/dist/lib/inspect/pagination.js +20 -4
- package/dist/lib/inspect/run.d.ts.map +1 -1
- package/dist/lib/inspect/run.js +33 -10
- package/dist/lib/inspect/setup.d.ts.map +1 -1
- package/dist/lib/inspect/setup.js +42 -6
- package/dist/lib/inspect/stream.js +1 -1
- package/dist/lib/inspect/terminal-utils.js +1 -1
- package/dist/lib/inspect/time-window.d.ts +28 -0
- package/dist/lib/inspect/time-window.d.ts.map +1 -0
- package/dist/lib/inspect/time-window.js +61 -0
- package/dist/lib/inspect/time-window.test.d.ts +2 -0
- package/dist/lib/inspect/time-window.test.d.ts.map +1 -0
- package/dist/lib/inspect/time-window.test.js +58 -0
- package/dist/lib/inspect/vercel-api.d.ts +5 -2
- package/dist/lib/inspect/vercel-api.d.ts.map +1 -1
- package/dist/lib/inspect/vercel-api.js +12 -37
- package/dist/lib/inspect/vercel-api.test.d.ts +2 -0
- package/dist/lib/inspect/vercel-api.test.d.ts.map +1 -0
- package/dist/lib/inspect/vercel-api.test.js +21 -0
- package/dist/lib/inspect/vercel-link.js +1 -1
- package/dist/lib/inspect/web.d.ts +24 -0
- package/dist/lib/inspect/web.d.ts.map +1 -1
- package/dist/lib/inspect/web.js +122 -3
- package/dist/lib/update-check.js +1 -1
- package/package.json +15 -14
- package/dist/base.js.map +0 -1
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/cancel.js.map +0 -1
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/start.js.map +0 -1
- package/dist/commands/transform.js.map +0 -1
- package/dist/commands/validate.js.map +0 -1
- package/dist/commands/web.js.map +0 -1
- package/dist/lib/config/log.js.map +0 -1
- package/dist/lib/config/types.js.map +0 -1
- package/dist/lib/config/workflow-config.js.map +0 -1
- package/dist/lib/inspect/auth.js.map +0 -1
- package/dist/lib/inspect/env.js.map +0 -1
- package/dist/lib/inspect/flags.js.map +0 -1
- package/dist/lib/inspect/hydration.js.map +0 -1
- package/dist/lib/inspect/output.js.map +0 -1
- package/dist/lib/inspect/output.test.js.map +0 -1
- package/dist/lib/inspect/pagination.js.map +0 -1
- package/dist/lib/inspect/run.js.map +0 -1
- package/dist/lib/inspect/setup.js.map +0 -1
- package/dist/lib/inspect/stream.js.map +0 -1
- package/dist/lib/inspect/terminal-utils.js.map +0 -1
- package/dist/lib/inspect/vercel-api.js.map +0 -1
- package/dist/lib/inspect/vercel-link.js.map +0 -1
- package/dist/lib/inspect/web.js.map +0 -1
- package/dist/lib/update-check.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAiBxD,SAAS,mBAAmB,CAAC,QAAgB,EAAE,SAAiB;IAC9D,OAAO,CACL,KAAK,CAAC,KAAK,CAAC,OAAO,QAAQ,sBAAsB,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,KAAK,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB,EAAE,KAAc;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,wBAAwB,CAAC,GAAG,WAAW,CAAC;AAC1E,CAAC;AAED,SAAS,mBAAmB,CAAC,YAAoB;IAC/C,OAAO,YAAY,KAAK,MAAM;QAC5B,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC;QACtB,CAAC,CAAC,CAAC,YAAmC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,OAA+B,EAAE,OAAe;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAChE,MAAM,CAAC,GAAG,CACR,KAAK,CAAC,GAAG,CAAC,GAAG,cAAc,OAAO,OAAO,CAAC,MAAM,wBAAwB,CAAC,CAC1E,CAAC;QACF,0CAA0C;QAC1C,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,uBAAuB,EAAE,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,GAAG,CACR,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,YAAgC,EAChC,YAAgC;IAEhC,MAAM,CAAC,KAAK,CAAC,uBAAuB,YAAY,IAAI,WAAW,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,CACV,gCAAgC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,WAAW,EAAE,CACrF,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,2BAA2B,YAAY,IAAI,QAAQ,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,6CAA6C;AAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,SAAS,mBAAmB,CAC1B,YAAgC,EAChC,YAAgC;IAEhC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,oBAAoB,YAAY,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAC7C,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,oBAAoB,YAAY,EAAE,CAAC;IAC5C,CAAC;IACD,kEAAkE;IAClE,OAAO,oBAAoB,kBAAkB,EAAE,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAe,EACf,QAAyB,EACzB,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,GAAG,OAAO,4BAA4B,QAAQ,WAAW,CAAC;QAC5E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/C,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,6BAA6B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,2BAA2B,CACxC,OAAgB,EAChB,YAAqB;IAErB,MAAM,YAAY,GAAG,YAAY,IAAI,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC;IAE/D,IAAI,OAAO,EAAE,CAAC;QACZ,qBAAqB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAEhE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,KAAK,oBAAoB,kBAAkB,EAAE;QAClD,CAAC,CAAC,2FAA2F;QAC7F,CAAC,CAAC,gFAAgF,CAAC;IACvF,MAAM,IAAI,KAAK,CACb,gCAAgC,OAAO,mDAAmD;QACxF,QAAQ,CACX,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,uBAAuB,CAAC;AACpE,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,CAAC,KAAK,CACV,mBAAmB,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,WAAW,EAAE,CACxE,CAAC;IACF,MAAM,CAAC,KAAK,CACV,aAAa,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,WAAW,EAAE,CAClE,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,WAI+B,EAC/B,KAAU,EACV,QAA6B,EAC7B,OAAe,EACf,OAAgB;IAEhB,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,6BAA6B,QAAQ,KAAK,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CACV,oBAAoB,QAAQ,eAAe,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CACpE,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,oBAAoB,QAAQ,WAAW,YAAY,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,YAAY,IAAI,mCAAmC;SAC3D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,GAChB,0EAA0E,CAAC;IAE7E,MAAM,CAAC,QAAQ,GAAG;QAChB,mBAAmB;QACnB,uCAAuC;QACvC,mDAAmD;QACnD,wEAAwE;KACzE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,WAAW,EAAE,4BAA4B;YACzC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACrC,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;SACxC,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,0CAA0C;YACvD,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,eAAe;YAC1B,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,MAAM;SAClB,CAAC;QACF,qFAAqF;QACrF,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;KACT,CAAC;IAEX,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE3C,qDAAqD;QACrD,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,iEAAiE;YACjE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC;YACzE,CAAC;YACD,yDAAyD;YACzD,oEAAoE;YACpE,iEAAiE;YACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,oBAAoB,kBAAkB,EAAE,CAAC;YACjF,CAAC;YAED,oDAAoD;YACpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAC7C,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,CACX,CAAC;YACF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC/D,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEtD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,WAAW,GACf,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YAC7D,MAAM,CAAC,GAAG,CACR,KAAK,CAAC,IAAI,CAAC,4CAA4C,WAAW,KAAK,CAAC,CACzE,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE;YACvE,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,QAAiB,EACjB,OAAgB,EAChB,IAAa;QAEb,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACrE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CAAC;oBACb,OAAO,EAAE,EAAE;oBACX,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,YAAY;iBACpB,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,SAAgC,EAChC,WAI+B,EAC/B,KAAU,EACV,KAA2D;QAE3D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,cAAc,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAC3C,QAAQ,EACR,WAAW,EACX,KAAK,EACL,KAAK,CACN,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAA6B,EAC7B,WAI+B,EAC/B,KAAU,EACV,KAA2D;QAE3D,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,CAAC,YAAY,QAAQ,cAAc,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C,WAAW,EACX,KAAK,EACL,QAAQ,EACR,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,CACd,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;gBAC5B,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;gBACtD,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;QAED,OAAO;YACL,QAAQ;YACR,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;IACJ,CAAC;IAEO,aAAa,CACnB,OAA+B,EAC/B,QAAiB,EACjB,OAAe;QAEf,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,UAAU,GAAG;gBACjB,OAAO;gBACP,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aAC5C,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;;AAGH,SAAS,sBAAsB,CAAC,KAAU;IACxC,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC","sourcesContent":["import { Flags } from '@oclif/core';\nimport { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';\nimport { getWorkflowPort } from '@workflow/utils/get-port';\nimport chalk from 'chalk';\nimport { BaseCommand } from '../base.js';\nimport { LOGGING_CONFIG, logger } from '../lib/config/log.js';\nimport { cliFlags } from '../lib/inspect/flags.js';\nimport { setupCliWorld } from '../lib/inspect/setup.js';\n\ntype HealthCheckEndpoint = 'workflow' | 'step';\n\ninterface HealthCheckResult {\n healthy: boolean;\n error?: string;\n latencyMs?: number;\n}\n\ninterface EndpointHealthResult {\n endpoint: HealthCheckEndpoint;\n healthy: boolean;\n error?: string;\n latencyMs?: number;\n}\n\nfunction formatHealthyResult(endpoint: string, latencyMs: number): string {\n return (\n chalk.green(` ✓ ${endpoint} endpoint is healthy`) +\n chalk.gray(` (${latencyMs}ms)`)\n );\n}\n\nfunction formatUnhealthyResult(endpoint: string, error?: string): string {\n const errorSuffix = error ? chalk.gray(` - ${error}`) : '';\n return chalk.red(` ✗ ${endpoint} endpoint is unhealthy`) + errorSuffix;\n}\n\nfunction getEndpointsToCheck(endpointFlag: string): HealthCheckEndpoint[] {\n return endpointFlag === 'both'\n ? ['workflow', 'step']\n : [endpointFlag as HealthCheckEndpoint];\n}\n\nfunction printSummary(results: EndpointHealthResult[], backend: string): void {\n const allHealthy = results.every((r) => r.healthy);\n logger.log('');\n if (allHealthy) {\n logger.log(chalk.green('All endpoints are healthy!'));\n } else {\n const unhealthyCount = results.filter((r) => !r.healthy).length;\n logger.log(\n chalk.red(`${unhealthyCount} of ${results.length} endpoint(s) unhealthy`)\n );\n // Provide helpful hints for common issues\n if (backend === 'local' || backend === '@workflow/world-local') {\n logger.log('');\n logger.log(chalk.yellow('Hint: For local health checks, ensure:'));\n logger.log(chalk.yellow(' 1. Your development server is running'));\n logger.log(\n chalk.yellow(' 2. The server is accessible at the configured URL')\n );\n }\n }\n}\n\nfunction logPortDetectionDebug(\n explicitPort: number | undefined,\n detectedPort: number | undefined\n): void {\n logger.debug(`Explicit port flag: ${explicitPort || '(not set)'}`);\n logger.debug(`PORT env: ${process.env.PORT || '(not set)'}`);\n logger.debug(\n `WORKFLOW_LOCAL_BASE_URL env: ${process.env.WORKFLOW_LOCAL_BASE_URL || '(not set)'}`\n );\n logger.debug(`Detected/resolved port: ${detectedPort || '(none)'}`);\n}\n\n// Default port for local development servers\nconst DEFAULT_LOCAL_PORT = 3000;\n\nfunction resolveLocalBaseUrl(\n explicitPort: number | undefined,\n detectedPort: number | undefined\n): string {\n if (explicitPort) {\n return `http://localhost:${explicitPort}`;\n }\n if (process.env.WORKFLOW_LOCAL_BASE_URL) {\n return process.env.WORKFLOW_LOCAL_BASE_URL;\n }\n if (process.env.PORT) {\n return `http://localhost:${process.env.PORT}`;\n }\n if (detectedPort) {\n return `http://localhost:${detectedPort}`;\n }\n // Fall back to default port 3000 (common for Next.js, Nuxt, etc.)\n return `http://localhost:${DEFAULT_LOCAL_PORT}`;\n}\n\nasync function testHttpHealthEndpoint(\n baseUrl: string,\n endpoint: 'flow' | 'step',\n verbose: boolean\n): Promise<{ ok: boolean; status?: number; error?: string }> {\n try {\n const healthUrl = `${baseUrl}/.well-known/workflow/v1/${endpoint}?__health`;\n if (verbose) {\n logger.debug(`Testing HTTP health at: ${healthUrl}`);\n }\n const response = await fetch(healthUrl, {\n method: 'POST',\n signal: AbortSignal.timeout(5000),\n });\n if (response.ok) {\n return { ok: true, status: response.status };\n }\n if (verbose) {\n logger.debug(`HTTP health check returned status: ${response.status}`);\n }\n return { ok: false, status: response.status };\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n if (verbose) {\n logger.debug(`HTTP health check failed: ${errorMessage}`);\n }\n return { ok: false, error: errorMessage };\n }\n}\n\n/**\n * For local backend, verify the server is accessible before attempting health check.\n * Returns the base URL if accessible, or throws an error with a helpful message.\n */\nasync function verifyLocalServerAccessible(\n verbose: boolean,\n explicitPort?: number\n): Promise<string> {\n const detectedPort = explicitPort ?? (await getWorkflowPort());\n\n if (verbose) {\n logPortDetectionDebug(explicitPort, detectedPort);\n }\n\n const baseUrl = resolveLocalBaseUrl(explicitPort, detectedPort);\n\n if (verbose) {\n logger.debug(`Resolved base URL: ${baseUrl}`);\n }\n\n const result = await testHttpHealthEndpoint(baseUrl, 'flow', verbose);\n if (result.ok) {\n return baseUrl;\n }\n\n const portHint =\n baseUrl === `http://localhost:${DEFAULT_LOCAL_PORT}`\n ? 'If your server runs on a different port, use --port <port> or set WORKFLOW_LOCAL_BASE_URL'\n : `Hint: Use --port <port> or set WORKFLOW_LOCAL_BASE_URL=http://localhost:<port>`;\n throw new Error(\n `Cannot reach local server at ${baseUrl}. Make sure your development server is running.\\n` +\n portHint\n );\n}\n\nfunction isLocalBackend(backend: string): boolean {\n return backend === 'local' || backend === '@workflow/world-local';\n}\n\nfunction logWorldConfig(): void {\n logger.debug(\n `Data directory: ${process.env.WORKFLOW_LOCAL_DATA_DIR || '(not set)'}`\n );\n logger.debug(\n `Base URL: ${process.env.WORKFLOW_LOCAL_BASE_URL || '(not set)'}`\n );\n logger.debug(`PORT: ${process.env.PORT || '(not set)'}`);\n}\n\nasync function runHealthCheckWithLogging(\n healthCheck: (\n world: any,\n endpoint: HealthCheckEndpoint,\n options: { timeout: number }\n ) => Promise<HealthCheckResult>,\n world: any,\n endpoint: HealthCheckEndpoint,\n timeout: number,\n verbose: boolean\n): Promise<HealthCheckResult> {\n try {\n if (verbose) {\n logger.debug(`Starting health check for ${endpoint}...`);\n }\n const result = await healthCheck(world, endpoint, { timeout });\n if (verbose) {\n logger.debug(\n `Health check for ${endpoint} completed: ${JSON.stringify(result)}`\n );\n }\n return result;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (verbose) {\n logger.debug(`Health check for ${endpoint} threw: ${errorMessage}`);\n }\n return {\n healthy: false,\n error: errorMessage || 'Unknown error during health check',\n };\n }\n}\n\nexport default class Health extends BaseCommand {\n static description =\n 'Check health of workflow and step endpoints via queue-based health check';\n\n static examples = [\n '$ workflow health',\n '$ workflow health --endpoint workflow',\n '$ workflow health --endpoint step --timeout 60000',\n '$ workflow health --backend vercel --project my-project --team my-team',\n ];\n\n static flags = {\n endpoint: Flags.string({\n description: 'Which endpoint(s) to check',\n options: ['workflow', 'step', 'both'],\n default: 'both',\n helpGroup: 'Health Check',\n helpLabel: '--endpoint',\n helpValue: ['workflow', 'step', 'both'],\n }),\n timeout: Flags.integer({\n char: 't',\n description: 'Timeout in milliseconds for health check',\n default: 30000,\n helpGroup: 'Health Check',\n helpLabel: '-t, --timeout',\n helpValue: 'MS',\n }),\n port: Flags.integer({\n char: 'p',\n description: 'Local server port (for local backend)',\n required: false,\n helpGroup: 'Health Check',\n helpLabel: '-p, --port',\n helpValue: 'PORT',\n }),\n // Include relevant flags from cliFlags (excluding ones not relevant to health check)\n verbose: cliFlags.verbose,\n json: cliFlags.json,\n backend: cliFlags.backend,\n authToken: cliFlags.authToken,\n project: cliFlags.project,\n team: cliFlags.team,\n env: cliFlags.env,\n } as const;\n\n async catch(error: any) {\n handleHealthCheckError(error);\n }\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Health);\n\n // For local backend, set up port configuration early\n if (isLocalBackend(flags.backend)) {\n // If user specifies a port, set the env var so the World uses it\n if (flags.port) {\n process.env.WORKFLOW_LOCAL_BASE_URL = `http://localhost:${flags.port}`;\n }\n // Set default WORKFLOW_LOCAL_BASE_URL if not already set\n // We use WORKFLOW_LOCAL_BASE_URL instead of PORT to avoid conflicts\n // with other tools (like Next.js) that also use the PORT env var\n if (!process.env.WORKFLOW_LOCAL_BASE_URL && !process.env.PORT) {\n process.env.WORKFLOW_LOCAL_BASE_URL = `http://localhost:${DEFAULT_LOCAL_PORT}`;\n }\n\n // Verify the server is accessible before proceeding\n const accessible = await this.verifyLocalServer(\n flags.json,\n flags.verbose,\n flags.port\n );\n if (!accessible) {\n process.exit(1);\n }\n }\n\n const world = await setupCliWorld(flags, this.config.version);\n if (!world) {\n throw new Error(\n 'Failed to connect to backend. Check your configuration.'\n );\n }\n\n const { healthCheck } = await import('@workflow/core/runtime');\n const endpoints = getEndpointsToCheck(flags.endpoint);\n\n if (!flags.json) {\n const backendName =\n flags.backend === 'local' ? 'local server' : flags.backend;\n logger.log(\n chalk.gray(`Running queue-based health check against ${backendName}...`)\n );\n logger.log('');\n }\n\n const results = await this.checkEndpoints(endpoints, healthCheck, world, {\n timeout: flags.timeout,\n json: flags.json,\n verbose: flags.verbose,\n });\n\n this.outputResults(results, flags.json, flags.backend);\n\n const allHealthy = results.every((r) => r.healthy);\n process.exit(allHealthy ? 0 : 1);\n }\n\n private async verifyLocalServer(\n jsonMode: boolean,\n verbose: boolean,\n port?: number\n ): Promise<boolean> {\n if (!jsonMode) {\n logger.log(chalk.gray('Checking local server accessibility...'));\n }\n try {\n const baseUrl = await verifyLocalServerAccessible(verbose, port);\n if (!jsonMode) {\n logger.log(chalk.green(` ✓ Local server accessible at ${baseUrl}`));\n logger.log('');\n }\n return true;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n if (jsonMode) {\n console.log(\n JSON.stringify({\n results: [],\n allHealthy: false,\n error: errorMessage,\n })\n );\n } else {\n logger.error(errorMessage);\n }\n return false;\n }\n }\n\n private async checkEndpoints(\n endpoints: HealthCheckEndpoint[],\n healthCheck: (\n world: any,\n endpoint: HealthCheckEndpoint,\n options: { timeout: number }\n ) => Promise<HealthCheckResult>,\n world: any,\n flags: { timeout: number; json: boolean; verbose: boolean }\n ): Promise<EndpointHealthResult[]> {\n if (flags.verbose) {\n logWorldConfig();\n }\n\n const results: EndpointHealthResult[] = [];\n for (const endpoint of endpoints) {\n const result = await this.checkSingleEndpoint(\n endpoint,\n healthCheck,\n world,\n flags\n );\n results.push(result);\n }\n return results;\n }\n\n private async checkSingleEndpoint(\n endpoint: HealthCheckEndpoint,\n healthCheck: (\n world: any,\n endpoint: HealthCheckEndpoint,\n options: { timeout: number }\n ) => Promise<HealthCheckResult>,\n world: any,\n flags: { timeout: number; json: boolean; verbose: boolean }\n ): Promise<EndpointHealthResult> {\n if (!flags.json) {\n logger.log(`Checking ${endpoint} endpoint...`);\n }\n\n const result = await runHealthCheckWithLogging(\n healthCheck,\n world,\n endpoint,\n flags.timeout,\n flags.verbose\n );\n\n if (!flags.json) {\n const message = result.healthy\n ? formatHealthyResult(endpoint, result.latencyMs ?? 0)\n : formatUnhealthyResult(endpoint, result.error);\n logger.log(message);\n }\n\n return {\n endpoint,\n healthy: result.healthy,\n error: result.error,\n latencyMs: result.latencyMs,\n };\n }\n\n private outputResults(\n results: EndpointHealthResult[],\n jsonMode: boolean,\n backend: string\n ): void {\n if (jsonMode) {\n const jsonOutput = {\n results,\n allHealthy: results.every((r) => r.healthy),\n };\n console.log(JSON.stringify(jsonOutput, null, 2));\n } else {\n printSummary(results, backend);\n }\n }\n}\n\nfunction handleHealthCheckError(error: any): never {\n if (error?.status === 403) {\n logger.error(VERCEL_403_ERROR_MESSAGE);\n } else if (LOGGING_CONFIG.VERBOSE_MODE) {\n logger.error(error);\n } else {\n const errorMessage = error?.message || String(error) || 'Unknown error';\n logger.error(`Error: ${errorMessage}`);\n }\n process.exit(1);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW;IAC3C,MAAM,CAAC,WAAW,GAAG,iDAAiD,CAAC;IAEvE,MAAM,CAAC,QAAQ,GAAG;QAChB,iBAAiB;QACjB,mCAAmC;QACnC,uBAAuB;KACxB,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,WAAW,EAAE,iBAAiB;YAC9B,OAAO,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC;SAC7C,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+BAA+B;SAC7C,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEjB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,CACV,yEAAyE,CAC1E,CAAC;IACJ,CAAC","sourcesContent":["import { Flags } from '@oclif/core';\nimport { BaseCommand } from '../base.js';\n\nexport default class Init extends BaseCommand {\n static description = 'Initialize a new workflow project (Coming soon)';\n\n static examples = [\n '$ workflow init',\n '$ workflow init --template nextjs',\n '$ workflow init --yes',\n ];\n\n static flags = {\n template: Flags.string({\n description: 'template to use',\n options: ['standalone', 'nextjs', 'express'],\n }),\n yes: Flags.boolean({\n char: 'y',\n description: 'skip prompts and use defaults',\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Init);\n\n this.logInfo('🚧 Project initialization is coming soon!');\n this.logInfo('');\n this.logInfo('This command will provide:');\n this.logInfo('• Interactive project setup');\n this.logInfo('• Multiple project templates');\n this.logInfo('• Automatic configuration file generation');\n this.logInfo('• Dependency installation');\n this.logInfo('• Example workflows and steps');\n this.logInfo('Or we might do a create-workflow-app package');\n this.logInfo('');\n\n if (flags.template) {\n this.logInfo(`Selected template: ${flags.template}`);\n }\n\n if (flags.yes) {\n this.logInfo('Auto-accept mode enabled');\n }\n\n this.logInfo('');\n this.logInfo(\n 'For now, manually create your workflow files in a ./workflows directory'\n );\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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","sourcesContent":["import { Args, Flags } from '@oclif/core';\nimport { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';\nimport { BaseCommand } from '../base.js';\nimport { LOGGING_CONFIG, logger } from '../lib/config/log.js';\nimport type { InspectCLIOptions } from '../lib/config/types.js';\nimport { cliFlags } from '../lib/inspect/flags.js';\nimport {\n listEvents,\n listHooks,\n listRuns,\n listSleeps,\n listSteps,\n listStreamsByRunId,\n showHook,\n showRun,\n showStep,\n showStream,\n} from '../lib/inspect/output.js';\nimport { setupCliWorld } from '../lib/inspect/setup.js';\nimport { launchWebUI } from '../lib/inspect/web.js';\n\nexport default class Inspect extends BaseCommand {\n static description = 'Inspect runs, steps, streams, or events';\n\n static aliases = ['i'];\n\n static examples = [\n '$ workflow inspect runs',\n '$ workflow inspect runs',\n '$ workflow inspect events --step=step_01K5WAJZ8W367CV2RFKDSDNWB8',\n '$ workflow inspect hooks',\n '$ workflow inspect hook hook_01K5WAJZ8W367CV2RFKDSDNWB8',\n '$ workflow inspect sleeps --runId=run_01K5WAJZ8W367CV2RFKDSDNWB8',\n ];\n\n async catch(error: any) {\n // Check if this is a 403 error from the Vercel backend\n if (error?.status === 403) {\n const message = VERCEL_403_ERROR_MESSAGE;\n logger.error(message);\n } else if (LOGGING_CONFIG.VERBOSE_MODE) {\n logger.error(error);\n } else {\n const errorMessage = error?.message || String(error) || 'Unknown error';\n logger.error(`Error: ${errorMessage}`);\n }\n process.exit(1);\n }\n\n static args = {\n resource: Args.string({\n description:\n 'what to inspect: run(s) | step(s) | stream(s) | event(s) | hook(s) | sleep(s)',\n required: true,\n options: [\n 'r',\n 'run',\n 'runs',\n 's',\n 'step',\n 'steps',\n 'e',\n 'event',\n 'events',\n 'st',\n 'stream',\n 'streams',\n 'h',\n 'hook',\n 'hooks',\n 'w',\n 'web',\n 'sleep',\n 'sleeps',\n ],\n }),\n id: Args.string({\n description: 'ID of the resource if inspecting a specific item',\n required: false,\n }),\n } as const;\n\n static flags = {\n runId: Flags.string({\n description:\n 'Run ID to filter by (required for steps, sleeps, and events. Optional for hooks.)',\n required: false,\n char: 'r',\n aliases: ['run'],\n helpGroup: 'Filtering',\n helpLabel: '-r, --runId',\n helpValue: 'RUN_ID',\n }),\n stepId: Flags.string({\n description: 'step ID to filter by (only for events)',\n required: false,\n char: 's',\n aliases: ['step'],\n helpGroup: 'Filtering',\n helpLabel: '-s, --stepId',\n helpValue: 'STEP_ID',\n }),\n hookId: Flags.string({\n description: 'hook ID to filter by (only for events)',\n required: false,\n aliases: ['hook'],\n helpGroup: 'Filtering',\n helpLabel: '--hookId',\n helpValue: 'HOOK_ID',\n }),\n workflowName: Flags.string({\n description: 'workflow name to filter by (only for runs)',\n required: false,\n char: 'n',\n aliases: ['workflow'],\n helpGroup: 'Filtering',\n helpLabel: '-n, --workflowName',\n }),\n status: Flags.string({\n description: 'filter runs by status (only for runs)',\n required: false,\n options: ['running', 'completed', 'failed', 'cancelled', 'pending'],\n helpGroup: 'Filtering',\n helpLabel: '--status',\n }),\n withData: Flags.boolean({\n description: 'include full input/output data in list views',\n required: false,\n char: 'd',\n default: false,\n helpGroup: 'Display',\n helpLabel: '-d, --withData',\n }),\n decrypt: Flags.boolean({\n description:\n 'decrypt encrypted values (triggers audit-logged key retrieval)',\n required: false,\n default: false,\n helpGroup: 'Display',\n helpLabel: '--decrypt',\n }),\n ...cliFlags,\n } as const;\n\n public async run(): Promise<void> {\n try {\n const { args, flags } = await this.parse(Inspect);\n\n const resource = normalizeResource(args.resource);\n if (!resource) {\n this.logError(\n `Unknown resource \"${args.resource}\": must be one of: run(s), step(s), stream(s), event(s), hook(s), sleep(s)`\n );\n process.exitCode = 1;\n return;\n }\n\n const id = args.id;\n\n // For web mode, allow config errors so we can open the web UI for configuration\n const isWebMode = flags.web || resource === 'web';\n const world = await setupCliWorld(flags, this.config.version, isWebMode);\n\n // Handle web UI mode\n if (isWebMode) {\n const actualResource = resource === 'web' ? 'run' : resource;\n await launchWebUI(actualResource, id, flags, this.config.version);\n return;\n }\n\n // For non-web commands, we need a valid world\n if (!world) {\n throw new Error(\n 'Failed to connect to backend. Check your configuration.'\n );\n }\n\n // Convert flags to InspectCLIOptions with proper typing\n const options = toInspectOptions(flags);\n\n if (resource === 'run') {\n if (id) {\n await showRun(world, id, options);\n } else {\n await listRuns(world, options);\n }\n return;\n }\n\n if (resource === 'step') {\n if (id) {\n await showStep(world, id, options);\n } else {\n await listSteps(world, options);\n }\n return;\n }\n\n if (resource === 'stream') {\n if (id) {\n await showStream(world, id, options);\n } else {\n await listStreamsByRunId(world, options);\n }\n return;\n }\n\n if (resource === 'event') {\n if (id) {\n this.logError(\n 'Event-ID is not supported for events. Filter by run-id or step-id instead. Usage: `workflow inspect events --runId=<id>`'\n );\n process.exitCode = 1;\n return;\n }\n await listEvents(world, options);\n return;\n }\n\n if (resource === 'hook') {\n if (id) {\n await showHook(world, id, options);\n } else {\n await listHooks(world, options);\n }\n return;\n }\n\n if (resource === 'sleep') {\n if (id) {\n this.logError(\n 'Sleep-ID is not supported for sleeps. Filter by run-id instead. Usage: `workflow inspect sleeps --runId=<id>`'\n );\n process.exitCode = 1;\n return;\n }\n if (!flags.runId) {\n this.logError(\n 'run-id is required for listing sleeps. Usage: `workflow inspect sleeps --runId=<id>`'\n );\n process.exitCode = 1;\n return;\n }\n await listSleeps(world, options);\n return;\n }\n\n this.logError(\n `Unknown resource: ${resource}. Usage: ${Inspect.examples.join('\\n')}`\n );\n process.exitCode = 1;\n return;\n } catch (error) {\n // Let the catch handler deal with it, but ensure we exit\n throw error;\n }\n }\n}\n\nfunction toInspectOptions(flags: any): InspectCLIOptions {\n return {\n json: flags.json,\n runId: flags.runId,\n stepId: flags.stepId,\n cursor: flags.cursor,\n sort: flags.sort as 'asc' | 'desc' | undefined,\n limit: flags.limit,\n workflowName: flags.workflowName,\n status: flags.status,\n withData: flags.withData,\n decrypt: flags.decrypt,\n backend: flags.backend,\n interactive: flags.interactive,\n };\n}\n\nfunction normalizeResource(\n value?: string\n): 'run' | 'step' | 'stream' | 'event' | 'hook' | 'web' | 'sleep' | undefined {\n if (!value) return undefined;\n const v = value.toLowerCase();\n if (v.startsWith('r')) return 'run';\n if (v.startsWith('e')) return 'event';\n if (v.startsWith('str')) return 'stream';\n if (v.startsWith('sl')) return 'sleep';\n if (v.startsWith('s')) return 'step';\n if (v.startsWith('h')) return 'hook';\n if (v.startsWith('w')) return 'web';\n return undefined;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAC;IAExC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,CAAC,QAAQ,GAAG;QAChB,yCAAyC;QACzC,mCAAmC;KACpC,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC;YACxB,WAAW,EACT,yFAAyF;YAC3F,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE;gBACX,0EAA0E;gBAC1E,oJAAoJ;aACrJ,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,KAAK;SAChB,CAAC;KACM,CAAC;IAEX,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;IAEjB,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEtD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC","sourcesContent":["import { Args } from '@oclif/core';\nimport { BaseCommand } from '../base.js';\nimport { LOGGING_CONFIG } from '../lib/config/log.js';\nimport { cliFlags } from '../lib/inspect/flags.js';\nimport { startRun } from '../lib/inspect/run.js';\nimport { setupCliWorld } from '../lib/inspect/setup.js';\n\nexport default class Start extends BaseCommand {\n static description = 'Start a workflow';\n\n static aliases = ['s'];\n\n static examples = [\n '$ workflow start <workflow-name> <args>',\n '$ wf start <workflow-name> <args>',\n ];\n\n async catch(error: any) {\n if (LOGGING_CONFIG.VERBOSE_MODE) {\n console.error(error);\n }\n throw error;\n }\n\n static args = {\n workflowName: Args.string({\n description:\n 'Name of a workflow to start. Providing a run ID will create a new run on that workflow.',\n required: true,\n }),\n args: Args.string({\n description: [\n 'Arguments to pass to the workflow. All arguments will be parsed as JSON.',\n 'E.g. `wf start example 123 \"\\'123\\'\" \"{\"a\": 1}\"` will start the \"example\" workflow with 123 (a number), \"123\" (a string), and {\"a\": 1} (an object)',\n ].join('\\n'),\n required: false,\n }),\n } as const;\n\n static flags = cliFlags;\n\n public async run(): Promise<void> {\n const { flags, args, argv } = await this.parse(Start);\n\n const fixedArgIndex = argv.indexOf(args.workflowName);\n const restArgs = fixedArgIndex !== -1 ? argv.slice(fixedArgIndex + 1) : [];\n const stringArgs = restArgs.map((arg) => String(arg));\n\n const world = await setupCliWorld(flags, this.config.version);\n if (!world) {\n throw new Error(\n 'Failed to connect to backend. Check your configuration.'\n );\n }\n\n await startRun(world, args.workflowName, flags, stringArgs);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/commands/transform.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { relative, resolve } from 'node:path';\nimport { Args, Flags } from '@oclif/core';\nimport {\n analyzeSerdeCompliance,\n applySwcTransform,\n detectWorkflowPatterns,\n} from '@workflow/builders';\nimport chalk from 'chalk';\nimport { BaseCommand } from '../base.js';\n\ntype TransformMode = 'workflow' | 'step';\n\nconst ALL_MODES: TransformMode[] = ['workflow', 'step'];\n\nexport default class Transform extends BaseCommand {\n static description =\n 'Show SWC transform output for a workflow file. Useful for inspecting what code runs in each execution context.';\n\n static examples = [\n '$ workflow transform src/MyClass.ts',\n '$ workflow transform src/MyClass.ts --mode workflow',\n '$ workflow transform src/MyClass.ts --mode step',\n '$ workflow transform src/MyClass.ts --check-serde',\n '$ workflow transform src/MyClass.ts --json',\n ];\n\n static args = {\n file: Args.string({\n description: 'The file to transform',\n required: true,\n }),\n };\n\n static flags = {\n mode: Flags.string({\n char: 'm',\n description: 'Transform mode (workflow, step, or all)',\n default: 'all',\n options: ['workflow', 'step', 'all'],\n }),\n 'check-serde': Flags.boolean({\n description: 'Run serde compliance analysis on the transformed output',\n default: false,\n }),\n };\n\n public async run(): Promise<Record<string, unknown>> {\n const { args, flags } = await this.parse(Transform);\n const filePath = resolve(args.file);\n const relPath = relative(process.cwd(), filePath);\n\n let source: string;\n try {\n source = await readFile(filePath, 'utf-8');\n } catch {\n this.error(`Could not read file: ${filePath}`);\n }\n\n // Detect if this file has workflow patterns\n const patterns = detectWorkflowPatterns(source);\n if (!patterns.hasDirective && !patterns.hasSerde) {\n this.logInfo(\n chalk.yellow(\n `Warning: ${relPath} does not contain \"use workflow\", \"use step\", or serde patterns.`\n )\n );\n }\n\n const modes: TransformMode[] =\n flags.mode === 'all' ? ALL_MODES : [flags.mode as TransformMode];\n\n const results: Record<string, { code: string; error?: string }> = {};\n\n for (const mode of modes) {\n try {\n const { code } = await applySwcTransform(\n relPath,\n source,\n mode,\n filePath\n );\n results[mode] = { code };\n } catch (err) {\n results[mode] = {\n code: '',\n error: err instanceof Error ? err.message : 'Transform failed',\n };\n }\n }\n\n // Serde analysis\n let serdeAnalysis = null;\n if (flags['check-serde'] || patterns.hasSerde) {\n // Ensure we have workflow mode output for serde analysis\n let workflowCode = results.workflow?.code;\n let workflowManifest = null;\n\n if (!workflowCode) {\n try {\n const result = await applySwcTransform(\n relPath,\n source,\n 'workflow',\n filePath\n );\n workflowCode = result.code;\n workflowManifest = result.workflowManifest;\n } catch {\n workflowCode = '';\n }\n } else {\n // Re-run to get the manifest\n try {\n const result = await applySwcTransform(\n relPath,\n source,\n 'workflow',\n filePath\n );\n workflowManifest = result.workflowManifest;\n } catch {\n // ignore\n }\n }\n\n if (workflowCode && workflowManifest) {\n serdeAnalysis = analyzeSerdeCompliance({\n sourceCode: source,\n workflowCode,\n manifest: workflowManifest,\n });\n }\n }\n\n // JSON output\n if (flags.json) {\n return {\n file: relPath,\n patterns: {\n hasUseWorkflow: patterns.hasUseWorkflow,\n hasUseStep: patterns.hasUseStep,\n hasSerde: patterns.hasSerde,\n },\n transforms: results,\n ...(serdeAnalysis\n ? {\n serdeAnalysis: {\n hasSerdeClasses: serdeAnalysis.hasSerdeClasses,\n globalNodeImports: serdeAnalysis.globalNodeImports,\n classes: serdeAnalysis.classes,\n },\n }\n : {}),\n };\n }\n\n // Human-readable output\n for (const mode of modes) {\n const result = results[mode];\n this.logInfo('');\n this.logInfo(chalk.bold.cyan(`═══ ${mode.toUpperCase()} MODE ═══`));\n if (result.error) {\n this.logInfo(chalk.red(`Error: ${result.error}`));\n } else {\n this.logInfo(result.code);\n }\n }\n\n // Serde analysis output\n if (serdeAnalysis) {\n this.logInfo('');\n this.logInfo(chalk.bold.cyan('═══ SERDE ANALYSIS ═══'));\n\n if (\n !serdeAnalysis.hasSerdeClasses &&\n serdeAnalysis.classes.length === 0\n ) {\n this.logInfo(chalk.gray('No serde-enabled classes detected.'));\n } else {\n for (const cls of serdeAnalysis.classes) {\n this.logInfo('');\n this.logInfo(\n cls.compliant\n ? chalk.green(`✓ Class \"${cls.className}\" is serde-compliant`)\n : chalk.red(`✗ Class \"${cls.className}\" is NOT serde-compliant`)\n );\n\n if (cls.classId) {\n this.logInfo(chalk.gray(` classId: ${cls.classId}`));\n }\n this.logInfo(\n ` Detected by SWC: ${cls.detected ? chalk.green('yes') : chalk.red('no')}`\n );\n this.logInfo(\n ` Registration IIFE: ${cls.registered ? chalk.green('yes') : chalk.red('no')}`\n );\n\n if (cls.nodeImports.length > 0) {\n this.logInfo(\n chalk.yellow(\n ` Node.js imports in workflow bundle: ${cls.nodeImports.join(', ')}`\n )\n );\n }\n\n for (const issue of cls.issues) {\n this.logInfo(chalk.yellow(` ⚠ ${issue}`));\n }\n }\n\n if (serdeAnalysis.globalNodeImports.length > 0) {\n this.logInfo('');\n this.logInfo(\n chalk.yellow(\n `Node.js built-in imports found in workflow output: ${serdeAnalysis.globalNodeImports.join(', ')}`\n )\n );\n this.logInfo(\n chalk.yellow(\n 'Add \"use step\" to methods that depend on these modules.'\n )\n );\n }\n }\n }\n\n return {};\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from 'node:fs/promises';\nimport { join, relative, resolve } from 'node:path';\nimport { Flags } from '@oclif/core';\nimport {\n analyzeSerdeCompliance,\n applySwcTransform,\n detectWorkflowPatterns,\n type SerdeClassCheckResult,\n} from '@workflow/builders';\nimport chalk from 'chalk';\nimport { glob } from 'tinyglobby';\nimport { BaseCommand } from '../base.js';\n\n/**\n * Parse a .gitignore file into glob-compatible ignore patterns.\n * Returns an empty array if the file doesn't exist.\n */\nasync function loadGitignorePatterns(dir: string): Promise<string[]> {\n try {\n const content = await readFile(join(dir, '.gitignore'), 'utf-8');\n return content\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith('#'));\n } catch {\n return [];\n }\n}\n\ninterface FileValidationResult {\n file: string;\n hasUseWorkflow: boolean;\n hasUseStep: boolean;\n hasSerde: boolean;\n serdeClasses: SerdeClassCheckResult[];\n errors: string[];\n}\n\nexport default class Validate extends BaseCommand {\n static description =\n 'Validate workflow files for correctness, including serde compliance checks';\n\n static examples = [\n '$ workflow validate',\n '$ workflow validate --dir src/workflows',\n '$ workflow validate --strict',\n '$ workflow validate --json',\n ];\n\n static flags = {\n strict: Flags.boolean({\n description: 'exit with code 1 if any validation issues are found',\n }),\n dir: Flags.string({\n char: 'd',\n description: 'directory to validate',\n default: '.',\n }),\n };\n\n public async run(): Promise<Record<string, unknown>> {\n const { flags } = await this.parse(Validate);\n const targetDir = resolve(flags.dir);\n\n // Build ignore list from .gitignore (if present) plus baseline patterns\n const gitignorePatterns = await loadGitignorePatterns(targetDir);\n const ignore = [\n ...gitignorePatterns,\n // Always exclude these regardless of .gitignore\n '**/node_modules/**',\n '**/*.test.*',\n '**/*.spec.*',\n '**/*.d.ts',\n ];\n\n // Find all TS/JS files in the target directory\n const files = await glob(\n ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx', '**/*.mts', '**/*.cts'],\n {\n cwd: targetDir,\n ignore,\n }\n );\n\n const results: FileValidationResult[] = [];\n let totalIssues = 0;\n let filesScanned = 0;\n let filesWithWorkflowPatterns = 0;\n\n for (const file of files) {\n const absPath = resolve(targetDir, file);\n const relPath = relative(process.cwd(), absPath);\n\n let source: string;\n try {\n source = await readFile(absPath, 'utf-8');\n } catch {\n continue;\n }\n\n filesScanned++;\n const patterns = detectWorkflowPatterns(source);\n\n if (!patterns.hasDirective && !patterns.hasSerde) {\n continue;\n }\n\n filesWithWorkflowPatterns++;\n const fileResult: FileValidationResult = {\n file: relPath,\n hasUseWorkflow: patterns.hasUseWorkflow,\n hasUseStep: patterns.hasUseStep,\n hasSerde: patterns.hasSerde,\n serdeClasses: [],\n errors: [],\n };\n\n // Run SWC transform in workflow mode to check serde compliance\n if (patterns.hasSerde) {\n try {\n const { code, workflowManifest } = await applySwcTransform(\n relPath,\n source,\n 'workflow',\n absPath\n );\n\n const serdeResult = analyzeSerdeCompliance({\n sourceCode: source,\n workflowCode: code,\n manifest: workflowManifest,\n });\n\n fileResult.serdeClasses = serdeResult.classes;\n\n for (const cls of serdeResult.classes) {\n if (!cls.compliant) {\n totalIssues += cls.issues.length;\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : 'Transform failed';\n fileResult.errors.push(`SWC transform failed: ${msg}`);\n totalIssues++;\n }\n }\n\n // Only include files with issues or serde classes in results\n if (fileResult.serdeClasses.length > 0 || fileResult.errors.length > 0) {\n results.push(fileResult);\n }\n }\n\n // JSON output\n if (flags.json) {\n const output = {\n filesScanned,\n filesWithWorkflowPatterns,\n totalIssues,\n results: results.map((r) => ({\n file: r.file,\n hasUseWorkflow: r.hasUseWorkflow,\n hasUseStep: r.hasUseStep,\n hasSerde: r.hasSerde,\n serdeClasses: r.serdeClasses,\n errors: r.errors,\n })),\n };\n\n if (flags.strict && totalIssues > 0) {\n process.exitCode = 1;\n }\n\n return output;\n }\n\n // Human-readable output\n this.logInfo(\n chalk.bold(\n `Scanned ${filesScanned} files, ${filesWithWorkflowPatterns} with workflow patterns`\n )\n );\n this.logInfo('');\n\n if (results.length === 0) {\n this.logInfo(chalk.green('No serde issues found.'));\n return {};\n }\n\n for (const result of results) {\n this.logInfo(chalk.bold(result.file));\n\n // Show errors\n for (const error of result.errors) {\n this.logInfo(chalk.red(` ✗ ${error}`));\n }\n\n // Show serde class results\n for (const cls of result.serdeClasses) {\n if (cls.compliant) {\n this.logInfo(\n chalk.green(` ✓ Class \"${cls.className}\" is serde-compliant`)\n );\n } else {\n this.logInfo(\n chalk.red(` ✗ Class \"${cls.className}\" has serde issues:`)\n );\n for (const issue of cls.issues) {\n this.logInfo(chalk.yellow(` ⚠ ${issue}`));\n }\n }\n }\n\n this.logInfo('');\n }\n\n // Summary\n if (totalIssues > 0) {\n this.logInfo(\n chalk.red(\n `Found ${totalIssues} issue${totalIssues === 1 ? '' : 's'} across ${results.length} file${results.length === 1 ? '' : 's'}.`\n )\n );\n } else {\n this.logInfo(chalk.green('All serde classes are compliant.'));\n }\n\n if (flags.strict && totalIssues > 0) {\n process.exitCode = 1;\n }\n\n return {};\n }\n}\n"]}
|
package/dist/commands/web.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW;IAC1C,MAAM,CAAC,WAAW,GAAG,0CAA0C,CAAC;IAEhE,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,CAAC,QAAQ,GAAG;QAChB,gBAAgB;QAChB,+CAA+C;QAC/C,iCAAiC;KAClC,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,KAAU;QACpB,uDAAuD;QACvD,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,wBAAwB,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,UAAU,YAAY,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,GAAG;QACZ,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,KAAK;SAChB,CAAC;KACM,CAAC;IAEX,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,QAAQ;KACH,CAAC;IAEJ,KAAK,CAAC,GAAG;QACd,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAEnB,mDAAmD;YACnD,wEAAwE;YACxE,4DAA4D;YAC5D,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEtD,mDAAmD;YACnD,MAAM,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yDAAyD;YACzD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC","sourcesContent":["import { Args } from '@oclif/core';\nimport { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';\nimport { BaseCommand } from '../base.js';\nimport { LOGGING_CONFIG, logger } from '../lib/config/log.js';\nimport { cliFlags } from '../lib/inspect/flags.js';\nimport { setupCliWorld } from '../lib/inspect/setup.js';\nimport { launchWebUI } from '../lib/inspect/web.js';\n\nexport default class Web extends BaseCommand {\n static description = 'Open the web UI to inspect workflow runs';\n\n static aliases = ['w'];\n\n static examples = [\n '$ workflow web',\n '$ workflow web run_01K5WAJZ8W367CV2RFKDSDNWB8',\n '$ workflow web --backend=vercel',\n ];\n\n async catch(error: any) {\n // Check if this is a 403 error from the Vercel backend\n if (error?.status === 403) {\n const message = VERCEL_403_ERROR_MESSAGE;\n logger.error(message);\n } else if (LOGGING_CONFIG.VERBOSE_MODE) {\n logger.error(error);\n } else {\n const errorMessage = error?.message || String(error) || 'Unknown error';\n logger.error(`Error: ${errorMessage}`);\n }\n process.exit(1);\n }\n\n static args = {\n id: Args.string({\n description: 'Optional run ID to open directly',\n required: false,\n }),\n } as const;\n\n static flags = {\n ...cliFlags,\n } as const;\n\n public async run(): Promise<void> {\n try {\n const { args, flags } = await this.parse(Web);\n const id = args.id;\n\n // Setup the CLI world to write env vars from flags\n // This ensures backend, authToken, team, project, etc. are properly set\n // Don't throw on config errors - let the web UI handle them\n await setupCliWorld(flags, this.config.version, true);\n\n // Launch web UI with 'run' as the default resource\n await launchWebUI('run', id, flags, this.config.version);\n process.exit(0);\n } catch (error) {\n // Let the catch handler deal with it, but ensure we exit\n throw error;\n }\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/lib/config/log.ts"],"names":[],"mappings":"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","sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\n\nexport const LOGGING_CONFIG = {\n JSON_MODE: false,\n VERBOSE_MODE: false,\n};\n\nexport const setJsonMode = (value: boolean) => {\n LOGGING_CONFIG.JSON_MODE = Boolean(value);\n process.env.WORKFLOW_JSON_MODE = value ? '1' : '';\n};\n\nexport const setVerboseMode = (value: boolean) => {\n LOGGING_CONFIG.VERBOSE_MODE = Boolean(value);\n};\n\n/**\n * This Logger should be unified with `core/src/logger.ts`. The main difference\n * is that the CLI logger has internal handling on JSON/VERBOSE modes, but\n * does not implement per-module logging and debug levels.\n *\n * There are four modes of operation:\n * - Regular (both JSON and VERBOSE modes are off)\n * - JSON mode (JSON mode is on, VERBOSE mode is off)\n * - verbose mode (JSON mode is off, VERBOSE mode is on)\n * - verbose JSON mode (JSON and VERBOSE modes are on)\n *\n * Generally, we want to hide debug logs unless verbose mode is on,\n * and during JSON mode, we want to ensure no logs end up in stdout,\n * because we assume the user might be piping the output to a JSON parser.\n * However, during verbose JSON mode, we want to keep debug information\n * without breaking the JSON output, so we redirect all logs to stderr.\n */\nclass Logger {\n constructor() {}\n\n shouldLogToStderr = () => {\n return LOGGING_CONFIG.JSON_MODE;\n };\n\n shouldSkipDebugLogs = () => {\n return !LOGGING_CONFIG.VERBOSE_MODE;\n };\n\n private logPlain = (...args: any[]) => {\n if (this.shouldLogToStderr()) {\n console.error(...args);\n return;\n }\n console.log(...args);\n };\n\n private logDebug = (...args: any[]) => {\n if (this.shouldLogToStderr()) {\n console.error(...args);\n return;\n }\n if (this.shouldSkipDebugLogs()) {\n return;\n }\n console.debug(...args);\n };\n\n private logWarn = (...args: any[]) => {\n if (this.shouldLogToStderr()) {\n console.error(...args);\n return;\n }\n console.warn(...args);\n };\n\n private logError = (...args: any[]) => {\n console.error(...args);\n };\n\n log = (...args: any[]) => {\n this.logPlain(...args);\n };\n\n info = (...args: any[]) => {\n this.logPlain(chalk.white(`[Info]`, ...args));\n };\n\n success = (...args: any[]) => {\n this.logPlain(chalk.green(`[Success]`, ...args));\n };\n\n debug = (...args: any[]) => {\n this.logDebug(chalk.gray(`[Debug]`, ...args));\n };\n\n warn = (...args: any[]) => {\n this.logWarn(chalk.yellow(`[Warn]`, ...args));\n };\n\n error = (...args: any[]) => {\n this.logError(chalk.red(`[Error]`, ...args));\n };\n\n showBox = (\n color: 'yellow' | 'green' | 'white',\n ...lines: (string | undefined)[]\n ) => {\n const borderColor =\n color === 'yellow' ? 'yellow' : color === 'green' ? 'green' : 'white';\n const content = lines.filter((line) => line !== undefined).join('\\n');\n const box = boxen(content, {\n padding: 1,\n borderColor: borderColor as any,\n textAlignment: 'center',\n });\n this.logPlain(box);\n };\n}\n\nexport const logger = new Logger();\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/config/types.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC","sourcesContent":["// Re-export builder types for backwards compatibility\nexport type {\n BuildTarget,\n WorkflowConfig,\n} from '@workflow/builders';\nexport {\n isValidBuildTarget,\n validBuildTargets,\n} from '@workflow/builders';\n\nexport type InspectCLIOptions = {\n json?: boolean;\n watch?: boolean;\n runId?: string;\n stepId?: string;\n hookId?: string;\n cursor?: string;\n sort?: 'asc' | 'desc';\n limit?: number;\n workflowName?: string;\n status?: string;\n withData?: boolean;\n backend?: string;\n disableRelativeDates?: boolean;\n interactive?: boolean;\n /** When true, decrypt encrypted values (triggers audit-logged key retrieval) */\n decrypt?: boolean;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-config.js","sourceRoot":"","sources":["../../../src/lib/config/workflow-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,SAAS,uBAAuB;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACnD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,sEAAsE;IACtE,oCAAoC;IACpC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,EACE,WAAW,EACX,gBAAgB,MAId;IACF,WAAW,EAAE,YAAY;CAC1B,EACD,EAAE;IACF,MAAM,MAAM,GAAmB;QAC7B,IAAI,EAAE,CAAC,aAAa,CAAC;QACrB,UAAU,EAAE,uBAAuB,EAAE;QACrC,WAAW,EAAE,WAA0B;QACvC,eAAe,EAAE,oCAAoC;QACrD,mBAAmB,EAAE,oCAAoC;QACzD,iBAAiB,EAAE,uCAAuC;QAC1D,oBAAoB,EAAE,gBAAgB;QAEtC,mEAAmE;QACnE,oDAAoD;KACrD,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC","sourcesContent":["import type { BuildTarget, WorkflowConfig } from './types.js';\nimport { resolve } from 'node:path';\n\nfunction resolveObservabilityCwd(): string {\n const raw = process.env.WORKFLOW_OBSERVABILITY_CWD;\n if (!raw) {\n return process.cwd();\n }\n // Allow relative paths; resolve relative to the current process.cwd()\n // (i.e. where the CLI was invoked).\n return resolve(process.cwd(), raw);\n}\n\nexport const getWorkflowConfig = (\n {\n buildTarget,\n workflowManifest,\n }: {\n buildTarget?: BuildTarget;\n workflowManifest?: string;\n } = {\n buildTarget: 'standalone',\n }\n) => {\n const config: WorkflowConfig = {\n dirs: ['./workflows'],\n workingDir: resolveObservabilityCwd(),\n buildTarget: buildTarget as BuildTarget,\n stepsBundlePath: './.well-known/workflow/v1/step.mjs',\n workflowsBundlePath: './.well-known/workflow/v1/flow.mjs',\n webhookBundlePath: './.well-known/workflow/v1/webhook.mjs',\n workflowManifestPath: workflowManifest,\n\n // WIP: generate a client library to easily execute workflows/steps\n // clientBundlePath: './lib/generated/workflows.js',\n };\n return config;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/lib/inspect/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,GACjB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC;AACpD,MAAM,oBAAoB,GAAG,qCAAqC,CAAC;AACnE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,WAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,WAAW,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IAC3D,qCAAqC;IACrC,IAAI,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,IAAI,WAAW,CAAC,SAAS,IAAI,YAAY,EAAE,CAAC;QAC1C,uBAAuB;QACvB,OAAO,WAAW,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,CAAC;YAC7B,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,KAAK,CAAC;YAClB,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE,oBAAoB;YAC9B,SAAS;SACV,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAErE,MAAM,kBAAkB,GAAG;YACzB,GAAG,WAAW;YACd,KAAK,EAAE,QAAQ,CAAC,YAAY;YAC5B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU;YAC9D,GAAG,CAAC,QAAQ,CAAC,aAAa;gBACxB,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,aAAa,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAElD,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import {\n type Credentials,\n CredentialsStore,\n} from '@vercel/cli-auth/credentials-store.js';\nimport { OAuth } from '@vercel/cli-auth/oauth.js';\nimport { getUserAgent } from '@vercel/cli-auth/user-agent.js';\nimport { logger } from '../config/log.js';\n\nconst VERCEL_ISSUER = new URL('https://vercel.com');\nconst VERCEL_CLI_CLIENT_ID = 'cl_HYyOPBNtFMfHhaUn9L4QPfTZz6TP47bp';\nconst CREDENTIALS_DIR = 'com.vercel.cli';\n\nconst store = CredentialsStore(CREDENTIALS_DIR);\n\n/**\n * Reads the auth token, refreshing it via OAuth if expired.\n *\n * Uses `@vercel/cli-auth` to:\n * 1. Read credentials from disk (`auth.json`)\n * 2. Check if the access token is expired\n * 3. If expired, use the refresh token to obtain a new access token\n * 4. Persist the updated credentials back to disk\n *\n * Returns the valid access token, or `null` if credentials are\n * missing or the refresh fails.\n */\nexport async function getAuthToken(): Promise<string | null> {\n let credentials: Credentials;\n try {\n credentials = store.get();\n } catch {\n return null;\n }\n if (!credentials?.token) {\n return null;\n }\n\n // If there's no expiration info, assume the token is valid\n // (e.g. legacy tokens without OAuth)\n if (typeof credentials.expiresAt !== 'number') {\n return credentials.token;\n }\n\n const nowInSeconds = Math.floor(Date.now() / 1000);\n if (credentials.expiresAt >= nowInSeconds) {\n // Token is still valid\n return credentials.token;\n }\n\n // Token is expired — attempt refresh\n if (!credentials.refreshToken) {\n logger.debug('Auth token expired and no refresh token available');\n return null;\n }\n\n logger.debug('Auth token expired, refreshing via OAuth...');\n try {\n const userAgent = getUserAgent({\n name: '@workflow/cli',\n version: '0.0.0',\n });\n\n const oauth = OAuth({\n issuer: VERCEL_ISSUER,\n clientId: VERCEL_CLI_CLIENT_ID,\n userAgent,\n });\n const client = await oauth.init();\n const tokenSet = await client.refreshToken(credentials.refreshToken);\n\n const updatedCredentials = {\n ...credentials,\n token: tokenSet.access_token,\n expiresAt: Math.floor(Date.now() / 1000) + tokenSet.expires_in,\n ...(tokenSet.refresh_token\n ? { refreshToken: tokenSet.refresh_token }\n : {}),\n };\n\n store.update(updatedCredentials);\n logger.debug('Auth token refreshed successfully');\n\n return tokenSet.access_token;\n } catch (error) {\n logger.debug('Failed to refresh auth token:', error);\n return null;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/lib/inspect/env.ts"],"names":[],"mappings":"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","sourcesContent":["import { access } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { findWorkflowDataDir } from '@workflow/utils/check-data-dir';\nimport { logger } from '../config/log.js';\nimport { getWorkflowConfig } from '../config/workflow-config.js';\nimport { getAuthToken } from './auth.js';\nimport { fetchTeamInfo } from './vercel-api.js';\nimport {\n findRepoRoot,\n getProjectLink,\n isOneOfErrNoExceptions,\n type ProjectLink,\n} from './vercel-link.js';\n\n/**\n * Overwrite values on process.env with the given values (if not undefined)\n *\n * Used by the CLI to configure environment variables that are read by\n * various subsystems (e.g., WORKFLOW_TARGET_WORLD, WORKFLOW_LOCAL_DATA_DIR).\n * Note: WORKFLOW_VERCEL_* env vars are read back via getEnvVars() and passed\n * to createVercelWorld() explicitly — they are NOT read by createWorld().\n */\nexport const writeEnvVars = (envVars: Record<string, string>) => {\n Object.entries(envVars).forEach(([key, value]) => {\n if (\n value === undefined ||\n value === null ||\n value === '' ||\n value === 'undefined'\n ) {\n return;\n }\n process.env[key] = value;\n });\n};\n\nexport const getEnvVars = (): Record<string, string> => {\n const env = process.env;\n return {\n WORKFLOW_TARGET_WORLD: env.WORKFLOW_TARGET_WORLD || '',\n WORKFLOW_VERCEL_ENV: env.WORKFLOW_VERCEL_ENV || '',\n WORKFLOW_VERCEL_AUTH_TOKEN: env.WORKFLOW_VERCEL_AUTH_TOKEN || '',\n WORKFLOW_VERCEL_PROJECT: env.WORKFLOW_VERCEL_PROJECT || '',\n WORKFLOW_VERCEL_PROJECT_NAME: env.WORKFLOW_VERCEL_PROJECT_NAME || '',\n WORKFLOW_VERCEL_TEAM: env.WORKFLOW_VERCEL_TEAM || '',\n WORKFLOW_LOCAL_BASE_URL: env.WORKFLOW_LOCAL_BASE_URL || '',\n WORKFLOW_LOCAL_UI: env.WORKFLOW_LOCAL_UI || '',\n PORT: env.PORT || '',\n WORKFLOW_LOCAL_DATA_DIR: env.WORKFLOW_LOCAL_DATA_DIR || '',\n WORKFLOW_MANIFEST_PATH: env.WORKFLOW_MANIFEST_PATH || '',\n };\n};\n\nconst possibleManifestPaths = [\n 'app/.well-known/workflow/v1/manifest.json',\n 'src/app/.well-known/workflow/v1/manifest.json',\n '.well-known/workflow/v1/manifest.json',\n];\n\nasync function findManifestPath(cwd: string) {\n for (const path of possibleManifestPaths) {\n const fullPath = join(cwd, path);\n if (\n await access(fullPath)\n .then(() => true)\n .catch(() => false)\n ) {\n const absolutePath = resolve(fullPath);\n logger.debug('Found workflow manifest:', absolutePath);\n return absolutePath;\n }\n }\n}\n\n/**\n * Overwrites process.env variables related to local world configuration,\n * if relevant environment variables aren't set already.\n *\n * Throws if the workflow data directory can not be found.\n */\nexport const inferLocalWorldEnvVars = async () => {\n const envVars = getEnvVars();\n const cwd = getWorkflowConfig().workingDir;\n let repoRoot: string | undefined;\n\n // Always expose the effective working directory to the web UI/server-side helpers.\n // This is especially useful when developing the web UI from the workflow repo\n // while targeting another project directory.\n if (!process.env.WORKFLOW_OBSERVABILITY_CWD) {\n writeEnvVars({ WORKFLOW_OBSERVABILITY_CWD: cwd });\n }\n\n // Set default base URL for local queue if not already configured\n // We use WORKFLOW_LOCAL_BASE_URL instead of PORT to avoid conflicts\n // with other tools (like Next.js) that also use the PORT env var\n if (!envVars.WORKFLOW_LOCAL_BASE_URL && !envVars.PORT) {\n logger.debug(\n 'Using default queue target http://localhost:3000, set WORKFLOW_LOCAL_BASE_URL or PORT to override.'\n );\n envVars.WORKFLOW_LOCAL_BASE_URL = 'http://localhost:3000';\n writeEnvVars(envVars);\n }\n\n // Infer workflow data directory\n if (!envVars.WORKFLOW_LOCAL_DATA_DIR) {\n const localResult = await findWorkflowDataDir(cwd);\n if (localResult.dataDir) {\n logger.debug('Found workflow data directory:', localResult.dataDir);\n envVars.WORKFLOW_LOCAL_DATA_DIR = localResult.dataDir;\n writeEnvVars(envVars);\n } else {\n // As a fallback, find the repo root, and try to infer the data dir from there\n repoRoot = await findRepoRoot(cwd, cwd);\n if (repoRoot) {\n const repoResult = await findWorkflowDataDir(repoRoot);\n if (repoResult.dataDir) {\n logger.debug('Found workflow data directory:', repoResult.dataDir);\n envVars.WORKFLOW_LOCAL_DATA_DIR = repoResult.dataDir;\n writeEnvVars(envVars);\n }\n }\n if (!envVars.WORKFLOW_LOCAL_DATA_DIR) {\n const message = `No workflow data directory found in \"${cwd}\". Have you run any workflows yet?`;\n throw new Error(message);\n }\n }\n }\n\n // Infer workflow manifest path (for Graph tab in web UI)\n if (!envVars.WORKFLOW_MANIFEST_PATH) {\n const localManifest = await findManifestPath(cwd);\n if (localManifest) {\n envVars.WORKFLOW_MANIFEST_PATH = localManifest;\n writeEnvVars(envVars);\n logger.debug(`Found workflow manifest at: ${localManifest}`);\n } else {\n // As a fallback, find the repo root, and try to infer the manifest from there\n if (!repoRoot) {\n repoRoot = await findRepoRoot(cwd, cwd);\n }\n if (repoRoot) {\n const repoManifest = await findManifestPath(repoRoot);\n if (repoManifest) {\n envVars.WORKFLOW_MANIFEST_PATH = repoManifest;\n writeEnvVars(envVars);\n logger.debug(`Found workflow manifest at: ${repoManifest}`);\n }\n }\n\n // It's okay if manifest is not found - the web UI will just show empty workflows\n if (!envVars.WORKFLOW_MANIFEST_PATH) {\n logger.debug(\n 'No workflow manifest found. Workflows tab will be empty.'\n );\n }\n }\n }\n};\n\nexport const inferVercelProjectAndTeam = async () => {\n const cwd = getWorkflowConfig().workingDir;\n let project: ProjectLink | null = null;\n try {\n logger.debug(`Inferring project and team from CWD: ${cwd}`);\n project = await getProjectLink(cwd);\n } catch (error) {\n if (!isOneOfErrNoExceptions(error, ['ENOENT'])) {\n throw error;\n }\n }\n if (!project) {\n logger.debug('Could not find project link folder');\n return;\n }\n logger.debug(`Found project ${project.projectId} and team ${project.orgId}`);\n return {\n projectId: project.projectId,\n projectName: project.projectName,\n teamId: project.orgId,\n };\n};\n\nexport interface VercelEnvVars {\n token?: string;\n environment?: string;\n projectId?: string;\n projectName?: string;\n teamId?: string;\n}\n\n/**\n * Infers Vercel World configuration from the local environment (`.vercel`\n * folder, CLI auth file, Vercel API) and returns a resolved config object.\n *\n * Also writes the resolved values to `process.env` so the embedded web UI\n * (which reads `process.env` as a fallback) can pick them up.\n */\nexport const inferVercelEnvVars = async (): Promise<VercelEnvVars> => {\n const envVars = getEnvVars();\n\n // Infer project/team from .vercel folder when:\n // - WORKFLOW_VERCEL_PROJECT or WORKFLOW_VERCEL_TEAM is missing, OR\n // - WORKFLOW_VERCEL_PROJECT is set but doesn't look like a real project ID\n // (e.g., user passed a slug via --project flag), OR\n // - WORKFLOW_VERCEL_PROJECT_NAME is missing (need to populate the slug)\n const needsInference =\n !envVars.WORKFLOW_VERCEL_PROJECT ||\n !envVars.WORKFLOW_VERCEL_TEAM ||\n !envVars.WORKFLOW_VERCEL_PROJECT_NAME ||\n !envVars.WORKFLOW_VERCEL_PROJECT.startsWith('prj_');\n\n if (needsInference) {\n logger.debug('Inferring vercel project and team from .vercel folder');\n const inferredProject = await inferVercelProjectAndTeam();\n if (inferredProject) {\n const { projectId, projectName, teamId } = inferredProject;\n // WORKFLOW_VERCEL_PROJECT is the real project ID (e.g., prj_xxx)\n envVars.WORKFLOW_VERCEL_PROJECT = projectId;\n // WORKFLOW_VERCEL_PROJECT_NAME is the project slug (e.g., my-app)\n envVars.WORKFLOW_VERCEL_PROJECT_NAME = projectName || projectId;\n envVars.WORKFLOW_VERCEL_TEAM = envVars.WORKFLOW_VERCEL_TEAM || teamId;\n } else {\n logger.warn(\n 'Could not infer vercel project and team from .vercel folder, server authentication might fail.'\n );\n }\n }\n\n if (!envVars.WORKFLOW_VERCEL_AUTH_TOKEN) {\n logger.debug('Inferring vercel auth token from CLI auth file');\n const token = await getAuthToken();\n if (!token) {\n throw new Error('Could not find credentials. Run `vc login` to log in.');\n }\n envVars.WORKFLOW_VERCEL_AUTH_TOKEN = token;\n }\n\n // Fetch team information from Vercel API to get the team slug\n // TODO: Sadly, in order to redirect to Vercel dashboard correctly, we need to\n // resolve the team name, which is a whole API request. The alternative would be to\n // change front to allow passing in the team slug directly, or add some generic redirect.\n if (envVars.WORKFLOW_VERCEL_TEAM && envVars.WORKFLOW_VERCEL_AUTH_TOKEN) {\n logger.info('Vercel project detected. Loading project data...');\n logger.debug('Fetching team information from Vercel API');\n const teamInfo = await fetchTeamInfo(\n envVars.WORKFLOW_VERCEL_TEAM,\n envVars.WORKFLOW_VERCEL_AUTH_TOKEN\n );\n if (teamInfo) {\n envVars.WORKFLOW_VERCEL_TEAM = teamInfo.teamSlug;\n logger.debug(`Found team slug: ${teamInfo.teamSlug}`);\n }\n }\n\n // Write resolved values to process.env for the embedded web UI, which\n // reads them as fallbacks in its server actions.\n writeEnvVars(envVars);\n\n return {\n token: envVars.WORKFLOW_VERCEL_AUTH_TOKEN || undefined,\n environment: envVars.WORKFLOW_VERCEL_ENV || undefined,\n projectId: envVars.WORKFLOW_VERCEL_PROJECT || undefined,\n projectName: envVars.WORKFLOW_VERCEL_PROJECT_NAME || undefined,\n teamId: envVars.WORKFLOW_VERCEL_TEAM || undefined,\n };\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flags.js","sourceRoot":"","sources":["../../../src/lib/inspect/flags.ts"],"names":[],"mappings":"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","sourcesContent":["import { Flags } from '@oclif/core';\n\nexport const cliFlags = {\n verbose: Flags.boolean({\n description: 'Verbose output',\n required: false,\n char: 'v',\n helpGroup: 'Output',\n helpLabel: '-v, --verbose',\n env: 'DEBUG',\n default: false,\n }),\n json: Flags.boolean({\n description: 'output JSON instead of human-readable tables/streams',\n required: false,\n char: 'j',\n default: false,\n helpGroup: 'Output',\n helpLabel: '-j, --json',\n }),\n cursor: Flags.string({\n description: 'pagination cursor for list commands',\n required: false,\n default: '',\n helpGroup: 'Filtering',\n helpLabel: '--cursor',\n helpValue: 'CURSOR',\n }),\n backend: Flags.string({\n description: 'backend to inspect',\n required: false,\n char: 'b',\n default: 'local',\n env: 'WORKFLOW_TARGET_WORLD',\n helpGroup: 'Target',\n helpLabel: '-b, --backend',\n helpValue: ['local', 'vercel', '<your-package-name>'],\n defaultHelp: 'local',\n }),\n authToken: Flags.string({\n description:\n 'Authentication token to be passed to the backend. If not provided and the backend is vercel, will fall back to the token generated by `vc login`.',\n required: false,\n char: 'a',\n dependsOn: ['backend'],\n default: '',\n env: 'WORKFLOW_VERCEL_AUTH_TOKEN',\n helpGroup: 'Target',\n helpLabel: '-a, --authToken',\n helpValue: 'TOKEN',\n }),\n project: Flags.string({\n description:\n 'If backend is vercel, the vercel project to authenticate against',\n required: false,\n default: '',\n dependsOn: ['backend'],\n env: 'WORKFLOW_VERCEL_PROJECT',\n helpGroup: 'Target',\n helpLabel: '--project',\n helpValue: 'PROJECT',\n }),\n team: Flags.string({\n description:\n 'If backend is vercel, the vercel team to authenticate against',\n required: false,\n dependsOn: ['backend'],\n default: '',\n env: 'WORKFLOW_VERCEL_TEAM',\n helpGroup: 'Target',\n helpLabel: '--team',\n helpValue: 'TEAM',\n }),\n env: Flags.string({\n description: 'If backend is vercel, the vercel environment to use',\n required: false,\n options: ['production', 'preview'],\n default: 'production',\n char: 'e',\n dependsOn: ['backend'],\n env: 'WORKFLOW_VERCEL_ENV',\n helpGroup: 'Target',\n helpLabel: '-e, --env',\n helpValue: ['production', 'preview'],\n defaultHelp: 'production',\n }),\n web: Flags.boolean({\n description: 'Open the web UI instead of displaying in terminal',\n required: false,\n char: 'w',\n default: false,\n helpGroup: 'Output',\n helpLabel: '-w, --web',\n }),\n webPort: Flags.integer({\n description: 'Port to use when launching the web UI (default: 3456)',\n required: false,\n default: 3456,\n helpGroup: 'Output',\n helpLabel: '--webPort',\n helpValue: 'WEB_PORT',\n env: 'WORKFLOW_WEB_PORT',\n }),\n noBrowser: Flags.boolean({\n description: 'Disable automatic browser opening when launching web UI',\n required: false,\n default: false,\n env: 'WORKFLOW_DISABLE_BROWSER_OPEN',\n helpGroup: 'Output',\n helpLabel: '--noBrowser',\n }),\n localUi: Flags.boolean({\n description:\n 'Use local web UI instead of Vercel dashboard (when backend is vercel)',\n required: false,\n default: false,\n env: 'WORKFLOW_LOCAL_UI',\n helpGroup: 'Output',\n helpLabel: '--localUi',\n }),\n sort: Flags.string({\n description: 'sort order for list commands',\n required: false,\n options: ['asc', 'desc'],\n default: 'desc',\n helpGroup: 'Filtering',\n helpLabel: '--sort',\n helpValue: ['asc', 'desc'],\n defaultHelp: 'desc',\n }),\n limit: Flags.integer({\n description: 'number of items to return per page',\n required: false,\n default: 20,\n helpGroup: 'Filtering',\n helpLabel: '--limit',\n helpValue: 'NUMBER',\n }),\n interactive: Flags.boolean({\n description: 'Enable interactive pagination with keyboard controls',\n required: false,\n char: 'i',\n default: false,\n helpGroup: 'Output',\n helpLabel: '-i, --interactive',\n }),\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.js","sourceRoot":"","sources":["../../../src/lib/inspect/hydration.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * CLI-specific hydration for o11y display.\n *\n * Node.js revivers that use `Buffer.from()` for base64 decoding and add\n * `util.inspect.custom` to ClassInstanceRef for pretty CLI output.\n */\n\nimport { inspect } from 'node:util';\nimport { maybeDecrypt } from '@workflow/core/serialization';\nimport {\n ClassInstanceRef,\n extractClassName,\n hydrateResourceIO as hydrateResourceIOGeneric,\n isEncryptedData,\n isExpiredStub,\n isRunRef,\n observabilityRevivers,\n type Revivers,\n serializedInstanceToRef,\n} from '@workflow/core/serialization-format';\nimport { parseClassName } from '@workflow/utils/parse-name';\nimport chalk from 'chalk';\n\n/**\n * A function that resolves an encryption key for a run, or null to skip\n * decryption. Accepts a runId — the resolver is responsible for looking\n * up the WorkflowRun internally (with caching) if the World needs it.\n */\nexport type EncryptionKeyResolver =\n | ((runId: string) => Promise<Uint8Array | undefined>)\n | null;\n\n// Re-export types and utilities that consumers need\nexport {\n CLASS_INSTANCE_REF_TYPE,\n ClassInstanceRef,\n ENCRYPTED_PLACEHOLDER,\n extractStreamIds,\n isClassInstanceRef,\n isEncryptedData,\n isStreamId,\n isStreamRef,\n type Revivers,\n STREAM_REF_TYPE,\n type StreamRef,\n truncateId,\n} from '@workflow/core/serialization-format';\n\n// ---------------------------------------------------------------------------\n// CLI ClassInstanceRef with inspect.custom\n// ---------------------------------------------------------------------------\n\n/**\n * Extended ClassInstanceRef with Node.js `util.inspect.custom` for\n * pretty CLI output: `ClassName@filename { ...data }`\n */\nclass CLIClassInstanceRef extends ClassInstanceRef {\n [inspect.custom](\n _depth: number,\n options: import('node:util').InspectOptionsStylized\n ): string {\n const dataStr = inspect(this.data, { ...options, depth: options.depth });\n const parsed = parseClassName(this.classId);\n const moduleSpecifier = parsed?.moduleSpecifier ?? this.classId;\n const fileName = moduleSpecifier.split('/').pop() ?? moduleSpecifier;\n const styledFileName = options.stylize\n ? options.stylize(`@${fileName}`, 'undefined')\n : `@${fileName}`;\n return `${this.className}${styledFileName} ${dataStr}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// CLI encrypted data placeholder with custom inspect\n// ---------------------------------------------------------------------------\n\n/**\n * Placeholder object for encrypted data fields in CLI output.\n *\n * Uses `util.inspect.custom` to render as a styled, unquoted string\n * (e.g., dim yellow \"🔒 Encrypted\") instead of a plain quoted string.\n * Also provides `toJSON()` for `--json` output.\n */\nclass EncryptedDataRef {\n [inspect.custom](): string {\n return chalk.dim.yellow('\\u{1F512} Encrypted');\n }\n\n toJSON(): string {\n return '\\u{1F512} Encrypted';\n }\n\n toString(): string {\n return '\\u{1F512} Encrypted';\n }\n}\n\n/** Singleton encrypted data placeholder for CLI display */\nconst ENCRYPTED_REF = new EncryptedDataRef();\n\n/** Check if a value is an EncryptedDataRef (for custom table formatting in CLI) */\nexport function isEncryptedRef(value: unknown): value is EncryptedDataRef {\n return value instanceof EncryptedDataRef;\n}\n\n// ---------------------------------------------------------------------------\n// CLI expired data placeholder with custom inspect\n// ---------------------------------------------------------------------------\n\n/**\n * Placeholder object for expired data fields in CLI output.\n *\n * Uses `util.inspect.custom` to render as a styled, unquoted string\n * (e.g., dim gray \"<data expired>\") instead of a raw stub object.\n * Also provides `toJSON()` for `--json` output.\n */\nclass ExpiredDataRef {\n [inspect.custom](): string {\n return chalk.gray('<data expired>');\n }\n\n toJSON(): string {\n return '<data expired>';\n }\n\n toString(): string {\n return '<data expired>';\n }\n}\n\n/** Singleton expired data placeholder for CLI display */\nconst EXPIRED_REF = new ExpiredDataRef();\n\n/** Check if a value is an ExpiredDataRef (for custom table formatting in CLI) */\nexport function isExpiredRef(value: unknown): value is ExpiredDataRef {\n return value instanceof ExpiredDataRef;\n}\n\n// ---------------------------------------------------------------------------\n// CLI revivers (Node.js, uses Buffer)\n// ---------------------------------------------------------------------------\n\nexport function getCLIRevivers(): Revivers {\n function reviveArrayBuffer(value: string): ArrayBuffer {\n const base64 = value === '.' ? '' : value;\n const buffer = Buffer.from(base64, 'base64');\n const arrayBuffer = new ArrayBuffer(buffer.length);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(buffer);\n return arrayBuffer;\n }\n\n return {\n ArrayBuffer: reviveArrayBuffer,\n BigInt: (value: string) => BigInt(value),\n BigInt64Array: (value: string) =>\n new BigInt64Array(reviveArrayBuffer(value)),\n BigUint64Array: (value: string) =>\n new BigUint64Array(reviveArrayBuffer(value)),\n Date: (value) => new Date(value),\n Error: (value) => {\n const error = new Error(value.message);\n error.name = value.name;\n error.stack = value.stack;\n return error;\n },\n Float32Array: (value: string) => new Float32Array(reviveArrayBuffer(value)),\n Float64Array: (value: string) => new Float64Array(reviveArrayBuffer(value)),\n Headers: (value) => new Headers(value),\n Request: (value) => {\n // biome-ignore lint/complexity/useArrowFunction: arrow functions have no .prototype\n const ctor = { Request: function () {} }.Request!;\n const obj = Object.create(ctor.prototype);\n Object.assign(obj, {\n method: value.method,\n url: value.url,\n headers: new Headers(value.headers),\n body: value.body,\n duplex: value.duplex,\n ...(value.responseWritable\n ? { responseWritable: value.responseWritable }\n : {}),\n });\n return obj;\n },\n Response: (value) => {\n // biome-ignore lint/complexity/useArrowFunction: arrow functions have no .prototype\n const ctor = { Response: function () {} }.Response!;\n const obj = Object.create(ctor.prototype);\n Object.assign(obj, {\n status: value.status,\n statusText: value.statusText,\n url: value.url,\n headers: new Headers(value.headers),\n body: value.body,\n redirected: value.redirected,\n type: value.type,\n });\n return obj;\n },\n Int8Array: (value: string) => new Int8Array(reviveArrayBuffer(value)),\n Int16Array: (value: string) => new Int16Array(reviveArrayBuffer(value)),\n Int32Array: (value: string) => new Int32Array(reviveArrayBuffer(value)),\n Map: (value) => new Map(value),\n RegExp: (value) => new RegExp(value.source, value.flags),\n // O11y-specific revivers (streams, step functions → display objects).\n // Spread FIRST so CLI-specific overrides below take precedence.\n ...observabilityRevivers,\n // CLI-specific overrides for class instances with inspect.custom\n Class: (value) => `<class:${extractClassName(value.classId)}>`,\n Instance: (value) => {\n // Run instances are rendered as RunRef for clickable rendering\n const runRef = serializedInstanceToRef(value);\n if (isRunRef(runRef)) {\n return runRef;\n }\n return new CLIClassInstanceRef(\n extractClassName(value.classId),\n value.classId,\n value.data\n );\n },\n Set: (value) => new Set(value),\n URL: (value) => new URL(value),\n URLSearchParams: (value) => new URLSearchParams(value === '.' ? '' : value),\n Uint8Array: (value: string) => new Uint8Array(reviveArrayBuffer(value)),\n Uint8ClampedArray: (value: string) =>\n new Uint8ClampedArray(reviveArrayBuffer(value)),\n Uint16Array: (value: string) => new Uint16Array(reviveArrayBuffer(value)),\n Uint32Array: (value: string) => new Uint32Array(reviveArrayBuffer(value)),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Pre-built CLI revivers (cached)\n// ---------------------------------------------------------------------------\n\nlet cachedRevivers: Revivers | null = null;\n\nfunction getRevivers(): Revivers {\n if (!cachedRevivers) {\n cachedRevivers = getCLIRevivers();\n }\n return cachedRevivers;\n}\n\n// ---------------------------------------------------------------------------\n// Decryption helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-process a resource's data fields: if the resolver is provided and\n * the field is encrypted, decrypt it before generic hydration.\n *\n * Uses core's `maybeDecrypt()` which handles the 'encr' prefix stripping\n * and AES-GCM decryption transparently.\n *\n * When the resolver is null (no --decrypt flag), encrypted fields pass\n * through as Uint8Array and are replaced with EncryptedDataRef in post-processing.\n */\nasync function maybeDecryptFields<\n T extends {\n runId?: string;\n input?: any;\n output?: any;\n metadata?: any;\n eventData?: any;\n },\n>(resource: T, resolver: EncryptionKeyResolver): Promise<T> {\n if (!resolver) return resource;\n\n const runId = (resource as any).runId as string | undefined;\n if (!runId) return resource;\n\n const result = { ...resource };\n\n try {\n const rawKey = await resolver(runId);\n const { importKey } = await import('@workflow/core/encryption');\n const k = rawKey ? await importKey(rawKey) : undefined;\n\n // Decrypt input/output/error fields (WorkflowRun, Step)\n result.input = await maybeDecrypt(result.input, k);\n result.output = await maybeDecrypt(result.output, k);\n (result as any).error = await maybeDecrypt((result as any).error, k);\n\n // Decrypt metadata field (Hook)\n result.metadata = await maybeDecrypt(result.metadata, k);\n\n // Decrypt eventData fields (Event)\n if (result.eventData && typeof result.eventData === 'object') {\n const eventData = { ...result.eventData };\n for (const field of [\n 'result',\n 'input',\n 'output',\n 'metadata',\n 'payload',\n ]) {\n eventData[field] = await maybeDecrypt(eventData[field], k);\n }\n result.eventData = eventData;\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n\n // If the key fetch failed due to an HTTP error (e.g. 429 rate limit,\n // 500 server error), re-throw so the caller surfaces a clear failure\n // instead of silently showing encrypted placeholders.\n if (message.includes('HTTP ')) {\n throw err;\n }\n\n // Decryption failed (bad key, corrupted ciphertext, etc.) — fall back\n // to showing encrypted placeholders instead of crashing the CLI.\n const { logger } = await import('../config/log.js');\n logger.warn(`Decryption failed for resource ${runId}: ${message}`);\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/** Replace a single field value with a display ref if it's encrypted or expired. */\nfunction toDisplayRef(value: unknown): unknown {\n if (isEncryptedData(value)) return ENCRYPTED_REF;\n if (isExpiredStub(value)) return EXPIRED_REF;\n return value;\n}\n\n/**\n * Replace encrypted Uint8Array values and expired stubs with styled\n * ref objects in known data fields for custom inspect rendering.\n */\nfunction replaceEncryptedAndExpiredWithRef<T>(resource: T): T {\n if (!resource || typeof resource !== 'object') return resource;\n const r = resource as Record<string, unknown>;\n const result = { ...r };\n\n for (const key of ['input', 'output', 'metadata', 'error']) {\n result[key] = toDisplayRef(result[key]);\n }\n\n if (result.eventData && typeof result.eventData === 'object') {\n const ed = { ...(result.eventData as Record<string, unknown>) };\n for (const key of ['result', 'input', 'output', 'metadata', 'payload']) {\n ed[key] = toDisplayRef(ed[key]);\n }\n result.eventData = ed;\n }\n\n return result as T;\n}\n\n/**\n * Hydrate the serialized data fields of a resource for CLI display.\n *\n * When `encryptorResolver` is null (default / no --decrypt flag), encrypted\n * fields are shown as styled \"🔒 Encrypted\" placeholders via EncryptedDataRef.\n *\n * When `encryptorResolver` is provided (--decrypt flag), encrypted fields\n * are decrypted before hydration so the actual user data is displayed.\n */\nexport async function hydrateResourceIO<T>(\n resource: T,\n keyResolver?: EncryptionKeyResolver\n): Promise<T> {\n // Pre-process: decrypt any encrypted fields when a resolver is provided\n const preprocessed = await maybeDecryptFields(\n resource as any,\n keyResolver ?? null\n );\n const hydrated = hydrateResourceIOGeneric(preprocessed, getRevivers()) as T;\n // Post-process: swap encrypted Uint8Arrays and expired stubs for CLI-styled objects\n return replaceEncryptedAndExpiredWithRef(hydrated);\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/inspect/output.ts"],"names":[],"mappings":"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","sourcesContent":["import { importKey } from '@workflow/core/encryption';\nimport {\n type EncryptionKeyParam,\n getDeserializeStream,\n getExternalRevivers,\n} from '@workflow/core/serialization';\nimport { VERCEL_403_ERROR_MESSAGE } from '@workflow/errors';\nimport { parseStepName, parseWorkflowName } from '@workflow/utils/parse-name';\nimport type {\n Event,\n Hook,\n ListEventsParams,\n PaginationOptions,\n Step,\n StepWithoutData,\n WorkflowRun,\n WorkflowRunWithoutData,\n World,\n} from '@workflow/world';\nimport chalk from 'chalk';\n\nimport { formatDistance } from 'date-fns';\nimport Table from 'easy-table';\nimport { logger } from '../config/log.js';\nimport type { InspectCLIOptions } from '../config/types.js';\nimport {\n type EncryptionKeyResolver,\n hydrateResourceIO,\n isEncryptedRef,\n isExpiredRef,\n} from './hydration.js';\n\n/**\n * Create an EncryptionKeyResolver from a World instance.\n * Returns null if decrypt is false — encrypted data will show as a placeholder.\n *\n * The resolver fetches the full WorkflowRun (cached per runId) so that the\n * World can inspect deployment-specific fields for key resolution.\n */\nfunction createResolver(world: World, decrypt: boolean): EncryptionKeyResolver {\n if (!decrypt) return null;\n if (!world.getEncryptionKeyForRun) return null;\n const cache = new Map<string, Promise<Uint8Array | undefined>>();\n return (runId: string) => {\n let cached = cache.get(runId);\n if (!cached) {\n cached = world.runs\n .get(runId)\n .then((run) => world.getEncryptionKeyForRun!(run));\n cache.set(runId, cached);\n }\n return cached;\n };\n}\n\nimport { setupListPagination } from './pagination.js';\nimport { streamToConsole } from './stream.js';\nimport {\n formatISODate,\n formatStatus as formatStatusAbbrev,\n getDisplaySettings,\n getTerminalWidth,\n isCI,\n} from './terminal-utils.js';\n\nconst DEFAULT_PAGE_SIZE = 20;\nlet TABLE_TRUNCATE_IO_LENGTH = 15; // Will be adjusted based on terminal width\n\nconst WORKFLOW_RUN_IO_PROPS: (keyof WorkflowRun)[] = ['input', 'output'];\n\nconst STEP_IO_PROPS: (keyof Step)[] = ['input', 'output'];\n\nconst WORKFLOW_RUN_LISTED_PROPS: (keyof WorkflowRun)[] = [\n 'runId',\n 'workflowName',\n 'status',\n 'startedAt',\n 'completedAt',\n ...WORKFLOW_RUN_IO_PROPS,\n];\n\nconst STEP_LISTED_PROPS: (keyof Step)[] = [\n 'runId',\n 'stepId',\n 'stepName',\n 'status',\n 'startedAt',\n 'completedAt',\n ...STEP_IO_PROPS,\n];\n\nconst EVENT_IO_PROPS: (keyof Event | 'eventData')[] = ['eventData'];\n\nconst EVENT_LISTED_PROPS: (keyof Event | 'eventData')[] = [\n 'eventId',\n 'eventType',\n 'correlationId',\n 'createdAt',\n ...EVENT_IO_PROPS,\n];\n\n// const HOOK_DATA_PROPS: (keyof Hook | 'hasResponse')[] = ['hasResponse'];\n\nconst HOOK_LISTED_PROPS: (keyof Hook | 'hasResponse')[] = [\n 'runId',\n 'hookId',\n 'ownerId',\n 'createdAt',\n // ...HOOK_DATA_PROPS,\n];\n\ninterface Sleep {\n correlationId: string;\n runId: string;\n eventId: string;\n createdAt: Date;\n resumeAt: Date | undefined;\n completedAt: Date | undefined;\n}\n\nconst WAIT_LISTED_PROPS: (keyof Sleep)[] = [\n 'correlationId',\n 'eventId',\n 'createdAt',\n 'resumeAt',\n 'completedAt',\n];\n\nconst STATUS_COLORS: Record<\n WorkflowRun['status'] | Step['status'],\n (value: string) => string\n> = {\n running: chalk.blue,\n completed: chalk.green,\n failed: chalk.red,\n cancelled: chalk.strikethrough.yellow,\n pending: chalk.blue,\n};\n\nconst isStreamId = (value: string) => {\n return typeof value === 'string' && value.startsWith('strm_');\n};\n\nconst showStatusLegend = () => {\n logger.log('\\nStatus Legend:');\n const statuses: Array<WorkflowRun['status'] | Step['status']> = [\n 'running',\n 'completed',\n 'failed',\n 'cancelled',\n 'pending',\n ];\n\n const legendItems = statuses.map((status) => {\n const colorFunc = STATUS_COLORS[status];\n const abbrev = formatStatusAbbrev(status, true);\n return `${colorFunc(abbrev)} = ${status}`;\n });\n\n logger.log(` ${legendItems.join(' ')}`);\n logger.log('');\n};\n\nconst isSleepStep = (stepName: string) => {\n return stepName.includes('-sleep');\n};\n\nconst checkAndHandleVercelAccessError = (\n error: unknown,\n backend?: string\n): boolean => {\n if (backend === 'vercel' && error && typeof error === 'object') {\n const err = error as Record<string, unknown>;\n if (err.status === 403) {\n logger.error(VERCEL_403_ERROR_MESSAGE);\n return true;\n }\n }\n return false;\n};\n\nconst extractErrorMessage = (\n err: Record<string, unknown>\n): string | undefined => {\n if (err.message && typeof err.message === 'string') {\n return err.message;\n }\n\n if (err.body && typeof err.body === 'object') {\n const body = err.body as Record<string, unknown>;\n if (body.message && typeof body.message === 'string') {\n return body.message;\n }\n if (body.error && typeof body.error === 'string') {\n return body.error;\n }\n }\n\n return undefined;\n};\n\nconst handleApiError = (error: unknown, backend?: string): boolean => {\n // First check for Vercel access errors\n if (checkAndHandleVercelAccessError(error, backend)) {\n return true;\n }\n\n // Handle other HTTP errors\n if (error && typeof error === 'object') {\n const err = error as Record<string, unknown>;\n\n // Handle 400 Bad Request\n if (err.status === 400) {\n logger.error('Bad Request: The request was invalid.');\n const message = extractErrorMessage(err);\n if (message) {\n logger.error(`Details: ${message}`);\n }\n return true;\n }\n\n // Handle other HTTP errors (404, 500, etc.)\n if (typeof err.status === 'number' && err.status >= 400) {\n logger.error(`HTTP Error ${err.status}: ${getStatusText(err.status)}`);\n const message = extractErrorMessage(err);\n if (message) {\n logger.error(`Details: ${message}`);\n }\n return true;\n }\n }\n\n return false;\n};\n\nconst getStatusText = (status: number): string => {\n const statusTexts: Record<number, string> = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 429: 'Too Many Requests',\n 500: 'Internal Server Error',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n };\n return statusTexts[status] || 'Unknown Error';\n};\n\nconst truncateNameIfNeeded = (name: string, maxLength: number): string => {\n return maxLength < name.length ? `${name.substring(0, maxLength)}...` : name;\n};\n\nconst formatNameField = (\n nameNonUnique: string,\n truncateLength: number,\n isSleep: boolean\n): string => {\n const truncatedName = truncateNameIfNeeded(nameNonUnique, truncateLength);\n if (isSleep) {\n return chalk.yellowBright(truncatedName);\n }\n return chalk.blue.blueBright(truncatedName);\n};\n\nconst formatIdField = (\n prop: string,\n value: unknown,\n shouldTruncateIds: boolean\n): string | undefined => {\n const valueStr = String(value);\n const idStr = shouldTruncateIds ? truncateIdToLastChars(valueStr) : valueStr;\n if (prop === 'streamId') {\n return chalk.green(idStr);\n }\n return idStr;\n};\n\nexport const formatTableValue = (\n prop: string,\n value: unknown,\n opts: InspectCLIOptions = {},\n displaySettings?: ReturnType<typeof getDisplaySettings>,\n item?: Record<string, unknown>\n) => {\n const namesTruncate = displaySettings?.namesTruncateLength ?? 40;\n const shouldTruncateIds = displaySettings?.truncateIdsToLastChars ?? false;\n\n // Handle IDs with potential truncation\n if (\n [\n 'streamId',\n 'runId',\n 'stepId',\n 'hookId',\n 'eventId',\n 'correlationId',\n 'ownerId',\n ].includes(prop)\n ) {\n return formatIdField(prop, value, shouldTruncateIds);\n }\n\n // Handle names with truncation\n if (prop === 'stepName') {\n const nameNonUnique = parseStepName(String(value))?.shortName || '?';\n return formatNameField(\n nameNonUnique,\n namesTruncate,\n isSleepStep(String(value))\n );\n }\n\n if (prop === 'workflowName') {\n const nameNonUnique = parseWorkflowName(String(value))?.shortName || '?';\n const truncatedName = truncateNameIfNeeded(nameNonUnique, namesTruncate);\n return chalk.blue.blueBright(truncatedName);\n }\n\n if (prop === 'output' || prop === 'input' || prop === 'error') {\n if (\n item &&\n 'expiredAt' in item &&\n item.expiredAt != null &&\n new Date(item.expiredAt as string | number | Date) < new Date()\n ) {\n return EXPIRED_DATA_MESSAGE;\n }\n return inlineFormatIO(value);\n }\n\n if (prop === 'status') {\n const status = value as WorkflowRun['status'] | Step['status'];\n const colorFunc = STATUS_COLORS[status];\n const formattedStatus = displaySettings?.abbreviateStatus\n ? formatStatusAbbrev(status, true)\n : status;\n return colorFunc(formattedStatus);\n }\n\n if (prop === 'eventData') {\n return truncateString(JSON.stringify(value));\n }\n\n if (prop === 'hasResponse') {\n return value ? chalk.green('true') : chalk.gray('false');\n }\n\n if (value instanceof Date) {\n return formatTableTimestamp(value, opts, displaySettings);\n }\n\n return value;\n};\n\nconst getVisibleProps = (\n props: string[],\n displaySettings: ReturnType<typeof getDisplaySettings>\n): string[] => {\n if (displaySettings.hideCompletedAt) {\n return props.filter((prop) => prop !== 'completedAt');\n }\n return props;\n};\n\nconst showTable = (\n data: Record<string, unknown>[],\n props: string[],\n opts: InspectCLIOptions = {}\n) => {\n // Get display settings based on terminal width\n const terminalWidth = getTerminalWidth();\n const displaySettings = getDisplaySettings(\n terminalWidth,\n opts.withData || false,\n props.includes('runName')\n );\n\n // Filter out completedAt column if needed\n const visibleProps = getVisibleProps(props, displaySettings);\n\n // Update truncate length for IO fields\n const originalTruncateLength = TABLE_TRUNCATE_IO_LENGTH;\n TABLE_TRUNCATE_IO_LENGTH = displaySettings.dataFieldWidth;\n\n // Show status legend if using abbreviated status\n if (\n data.length > 0 &&\n displaySettings.abbreviateStatus &&\n visibleProps.includes('status')\n ) {\n showStatusLegend();\n }\n\n // Create header mapping for abbreviated status\n const headerMap: Record<string, string> = {};\n if (displaySettings.abbreviateStatus && visibleProps.includes('status')) {\n headerMap['status'] = 'S';\n }\n\n // Add a blank line before any table\n const table = new Table();\n if (data && data.length === 0) {\n logger.warn('No data found for this query and resource.\\n');\n for (const prop of visibleProps) {\n const header = headerMap[prop] || prop;\n table.cell(header, 'N/A');\n }\n table.newRow();\n // Restore original truncate length\n TABLE_TRUNCATE_IO_LENGTH = originalTruncateLength;\n return table.toString();\n } else if (!data) {\n logger.warn('Expecting an array of data, but got null.\\n');\n }\n logger.log('');\n for (const item of data) {\n for (const prop of visibleProps) {\n const header = headerMap[prop] || prop;\n const value = item[prop];\n table.cell(\n header,\n formatTableValue(prop, value, opts, displaySettings, item)\n );\n }\n table.newRow();\n }\n\n // Restore original truncate length\n TABLE_TRUNCATE_IO_LENGTH = originalTruncateLength;\n return table.toString();\n};\n\nconst showJson = (data: unknown) => {\n const json = JSON.stringify(data, null, 2);\n process.stdout.write(`${json}\\n`);\n};\n\n/**\n * In tables, we want to show a shorter timestamp, YYYY-MM-DD HH:MM:SS\n */\nconst formatTableTimestamp = (\n value: Date,\n opts: InspectCLIOptions = {},\n displaySettings?: ReturnType<typeof getDisplaySettings>\n) => {\n // Format ISO time without T and Z\n const isoTime = formatISODate(value);\n\n // Show relative time only if:\n // - Not in CI mode\n // - Display settings allow it (based on terminal width)\n // - withData is disabled (more space available)\n // - Not in JSON mode\n // - disableRelativeDates is not set\n const shouldShowRelative =\n !isCI() &&\n displaySettings?.showRelativeDates !== false &&\n !opts.withData &&\n !opts.json &&\n !opts.disableRelativeDates;\n\n if (shouldShowRelative) {\n const relative = formatDistance(value, new Date(), { addSuffix: true });\n return `${isoTime} (${relative})`;\n }\n\n return isoTime;\n};\n\nconst truncateString = (\n str: string,\n maxLength: number = TABLE_TRUNCATE_IO_LENGTH\n) => {\n return str && str.length > maxLength\n ? `${str.substring(0, maxLength)}...`\n : str;\n};\n\nconst truncateIdToLastChars = (id: string, chars: number = 4): string => {\n if (!id || id.length <= chars) return id;\n return `...${id.substring(id.length - chars)}`;\n};\n\nconst showInspectInfoBox = (resource: string) => {\n logger.info(\n `To view details for a ${resource}, use \\`workflow inspect ${resource}\\` <id>`\n );\n logger.info(\n `To view the content of any stream, use \\`workflow inspect stream <stream-id>\\``\n );\n};\n\nconst EXPIRED_DATA_MESSAGE = chalk.gray('<data expired>');\n\n/**\n * Checks if a run has expired data storage (run-level expiredAt field).\n * Only returns true when `expiredAt` is in the past.\n */\nexport const hasExpiredData = (run: WorkflowRun): boolean => {\n return (\n 'expiredAt' in run &&\n run.expiredAt != null &&\n new Date(run.expiredAt) < new Date()\n );\n};\n\n/**\n * Checks if any data field in a hydrated resource has been replaced with an\n * expired placeholder. Works for runs, steps, hooks, and events — unlike\n * `hasExpiredData` which only checks the run-level `expiredAt` field.\n */\nconst hasExpiredFields = (resource: Record<string, unknown>): boolean => {\n return ['input', 'output', 'error', 'metadata'].some((key) =>\n isExpiredRef(resource[key])\n );\n};\n\n/**\n * Takes hydrated step/workflow input/output and serializes it for inline display.\n */\nconst inlineFormatIO = <T>(io: T, topLevel: boolean = true): string => {\n const type = typeof io;\n let value = '';\n if (io === undefined) {\n value = '<empty>';\n } else if (io === null) {\n value = '<null>';\n } else if (isEncryptedRef(io)) {\n value = chalk.dim.yellow('\\u{1F512} Encrypted');\n } else if (isExpiredRef(io)) {\n value = chalk.gray('<data expired>');\n } else if (io && Array.isArray(io)) {\n if (io.length === 0) {\n value = '<empty>';\n } else {\n const stringified = io\n .map((item) => inlineFormatIO(item, false))\n .join(',');\n if (stringified.length > TABLE_TRUNCATE_IO_LENGTH && topLevel) {\n value = chalk.yellow(`${io.length} args`);\n } else {\n value = stringified;\n }\n }\n } else if (type === 'object') {\n if (io instanceof Date) {\n value = io.toISOString();\n } else {\n value = truncateString(JSON.stringify(io));\n }\n } else if (['string', 'number', 'boolean'].includes(type)) {\n if (isStreamId(io as string)) {\n value = io.toString();\n } else if (type === 'string' && (io as string).includes('strm_')) {\n value = io as string;\n } else {\n value = truncateString(String(io));\n }\n } else {\n value = `<${type}>`;\n }\n return value;\n};\n\nexport const listRuns = async (world: World, opts: InspectCLIOptions = {}) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n if (opts.stepId || opts.runId) {\n logger.warn(\n 'Filtering by step-id or run-id is not supported in list calls, ignoring filter.'\n );\n }\n\n const resolveData = opts.withData ? 'all' : 'none';\n\n // Determine which props to show based on withData flag\n const props = opts.withData\n ? WORKFLOW_RUN_LISTED_PROPS\n : WORKFLOW_RUN_LISTED_PROPS.filter(\n (prop) => !WORKFLOW_RUN_IO_PROPS.includes(prop)\n );\n\n // For JSON output, just fetch once and return\n if (opts.json) {\n try {\n const runs = await world.runs.list({\n workflowName: opts.workflowName,\n status: opts.status as any,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor: opts.cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData,\n });\n const runsWithHydratedIO = await Promise.all(\n runs.data.map((r) => hydrateResourceIO(r, resolveKey))\n );\n showJson({ ...runs, data: runsWithHydratedIO });\n return;\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n }\n\n await setupListPagination<WorkflowRun | WorkflowRunWithoutData>({\n initialCursor: opts.cursor,\n interactive: opts.interactive,\n fetchPage: async (cursor) => {\n try {\n const runs = await world.runs.list({\n workflowName: opts.workflowName,\n status: opts.status as any,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData,\n });\n return {\n data: runs.data,\n cursor: runs.cursor,\n hasMore: runs.hasMore,\n };\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n },\n displayPage: async (runs) => {\n const runsWithHydratedIO = await Promise.all(\n runs.map((r) => hydrateResourceIO(r, resolveKey))\n );\n logger.log(showTable(runsWithHydratedIO, props, opts));\n },\n });\n};\n\nexport const getRecentRun = async (\n world: World,\n opts: InspectCLIOptions = {}\n) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n logger.warn(`No runId provided, fetching data for latest run instead.`);\n try {\n const runs = await world.runs.list({\n pagination: { limit: 1, sortOrder: opts.sort || 'desc' },\n resolveData: 'none', // Don't need data for just getting the ID\n });\n runs.data = await Promise.all(\n runs.data.map((r) => hydrateResourceIO(r, resolveKey))\n );\n return runs.data[0];\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n};\n\nexport const showRun = async (\n world: World,\n runId: string,\n opts: InspectCLIOptions = {}\n) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n if (opts.withData) {\n logger.warn('`withData` flag is ignored when showing individual resources');\n }\n try {\n const run = await world.runs.get(runId, { resolveData: 'all' });\n const runWithHydratedIO = await hydrateResourceIO(run, resolveKey);\n if (opts.json) {\n showJson(runWithHydratedIO);\n return;\n } else {\n if (hasExpiredData(run)) {\n logger.warn(\n \"This run's data (input/output/error) has expired and is no longer available.\"\n );\n }\n logger.log(runWithHydratedIO);\n }\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n};\n\nexport const listSteps = async (\n world: World,\n opts: InspectCLIOptions = {\n runId: undefined,\n }\n) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n if (opts.stepId) {\n logger.warn(\n 'Filtering by step-id is not supported in list calls, ignoring filter.'\n );\n }\n if (opts.workflowName) {\n logger.warn(\n 'Filtering by workflow-name is not supported for steps, ignoring filter.'\n );\n }\n\n const runId = opts.runId\n ? opts.runId\n : (await getRecentRun(world, opts))?.runId;\n if (!runId) {\n logger.error('No run found.');\n return;\n }\n\n const resolveData = opts.withData ? 'all' : 'none';\n\n // Determine which props to show based on withData flag\n const props = opts.withData\n ? STEP_LISTED_PROPS\n : STEP_LISTED_PROPS.filter((prop) => !STEP_IO_PROPS.includes(prop));\n\n // For JSON output, just fetch once and return\n if (opts.json) {\n logger.debug(`Fetching steps for run ${runId}`);\n try {\n const stepChunks = await world.steps.list({\n runId,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor: opts.cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData,\n });\n const stepsWithHydratedIO = await Promise.all(\n stepChunks.data.map((s) => hydrateResourceIO(s, resolveKey))\n );\n showJson(stepsWithHydratedIO);\n return;\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n }\n\n await setupListPagination<Step | StepWithoutData>({\n initialCursor: opts.cursor,\n interactive: opts.interactive,\n fetchPage: async (cursor) => {\n logger.debug(`Fetching steps for run ${runId}`);\n try {\n const stepChunks = await world.steps.list({\n runId,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData,\n });\n return {\n data: stepChunks.data,\n cursor: stepChunks.cursor,\n hasMore: stepChunks.hasMore,\n };\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n },\n displayPage: async (steps) => {\n const stepsWithHydratedIO = await Promise.all(\n steps.map((s) => hydrateResourceIO(s, resolveKey))\n );\n logger.log(showTable(stepsWithHydratedIO, props, opts));\n showInspectInfoBox('step');\n },\n });\n};\n\nexport const showStep = async (\n world: World,\n stepId: string,\n opts: InspectCLIOptions = {}\n) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n if (opts.withData) {\n logger.warn('`withData` flag is ignored when showing individual resources');\n }\n if (opts.stepId) {\n logger.warn(\n 'Filtering by step-id is not supported in get calls, ignoring filter.'\n );\n }\n\n const runId = opts.runId ?? (await getRecentRun(world, opts))?.runId;\n if (!runId) {\n logger.error(\n 'run-id is required for showing a step. Usage: `workflow inspect step <STEP_ID> --runId=<RUN_ID>`'\n );\n return;\n }\n\n try {\n const step = await world.steps.get(runId, stepId, {\n resolveData: 'all',\n });\n const stepWithHydratedIO = await hydrateResourceIO(step, resolveKey);\n if (opts.json) {\n showJson(stepWithHydratedIO);\n return;\n } else {\n if (\n hasExpiredFields(\n stepWithHydratedIO as unknown as Record<string, unknown>\n )\n ) {\n logger.warn(\n \"This step's data (input/output/error) has expired and is no longer available.\"\n );\n }\n logger.log(stepWithHydratedIO);\n }\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n};\n\nexport const showStream = async (\n world: World,\n streamId: string,\n opts: InspectCLIOptions = {}\n) => {\n if (opts.stepId) {\n logger.warn(\n 'Filtering by step-id is not supported when showing a stream, ignoring filter.'\n );\n }\n if (!opts.runId) {\n throw new Error('--run is required when showing a stream');\n }\n const rawStream = await world.streams.get(opts.runId, streamId);\n\n // Only resolve the encryption key when --decrypt is passed and --run is provided.\n // We fetch the full WorkflowRun object so that getEncryptionKeyForRun has\n // access to the deploymentId (needed for API-based key resolution).\n let encryptionKey: EncryptionKeyParam;\n if (opts.decrypt && opts.runId) {\n encryptionKey = (async () => {\n const run = await world.runs.get(opts.runId!);\n const rawKey = await world.getEncryptionKeyForRun?.(run);\n return rawKey ? await importKey(rawKey) : undefined;\n })();\n } else if (opts.decrypt && !opts.runId) {\n logger.warn(\n 'Cannot decrypt stream content without a run ID. Use --run=<run-id> with --decrypt.'\n );\n }\n\n // Deserialize the stream to get JavaScript objects\n const revivers = getExternalRevivers(\n globalThis,\n [],\n opts.runId ?? '',\n encryptionKey\n );\n const transform = getDeserializeStream(revivers, encryptionKey);\n const stream = rawStream.pipeThrough(transform);\n\n logger.info('Streaming to stdout, press CTRL+C to abort.');\n logger.info(\n 'Use --json to output the stream as newline-delimited JSON without info logs.\\n'\n );\n await streamToConsole(stream, streamId, opts);\n};\n\n/**\n * Listing streams only lists available stream IDs based on run/step passed,\n * and doesn't read any data from the streams.\n */\nexport const listStreamsByRunId = async (\n world: World,\n opts: InspectCLIOptions = {}\n) => {\n if (opts.withData) {\n logger.warn('`withData` flag is ignored when listing streams');\n }\n if (opts.workflowName) {\n logger.warn(\n 'Filtering by workflow-name is not supported for streams, ignoring filter.'\n );\n }\n if (opts.stepId) {\n logger.warn(\n 'Filtering by step-id is not supported for streams, ignoring filter.'\n );\n }\n\n let runId = opts.runId;\n if (!runId) {\n logger.warn(\n 'No run-id provided. Listing streams for latest run instead.',\n 'Use --run=<run-id> to filter streams by run.'\n );\n const run = await getRecentRun(world, opts);\n if (!run) {\n logger.warn('No runs found.');\n return;\n }\n runId = run.runId;\n }\n\n try {\n const streamIds = await world.streams.list(runId);\n const matchingStreams = streamIds.map((streamId) => ({\n runId,\n streamId,\n }));\n\n if (opts.json) {\n showJson(matchingStreams);\n return;\n }\n logger.log(showTable(matchingStreams, ['runId', 'streamId']));\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n};\n\nexport const listEvents = async (\n world: World,\n opts: InspectCLIOptions = {}\n) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n if (opts.workflowName) {\n logger.warn(\n 'Filtering by workflow-name is not supported for events, ignoring filter.'\n );\n }\n\n const runId = opts.runId ?? (await getRecentRun(world, opts))?.runId;\n if (!runId) {\n logger.error('No run found.');\n return;\n }\n\n const correlationIdFilter = opts.hookId || opts.stepId;\n const params: ListEventsParams = {\n runId,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor: opts.cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData: opts.withData ? 'all' : 'none',\n };\n const listCall = async (pagination: PaginationOptions) => {\n const result = await world.events.list({\n ...params,\n pagination: { ...params.pagination, ...pagination },\n });\n if (correlationIdFilter) {\n return {\n ...result,\n data: result.data.filter(\n (e) => e.correlationId === correlationIdFilter\n ),\n };\n }\n return result;\n };\n\n // Determine which props to show based on withData flag\n const props = opts.withData\n ? EVENT_LISTED_PROPS\n : EVENT_LISTED_PROPS.filter((prop) => !EVENT_IO_PROPS.includes(prop));\n\n // For JSON output, just fetch once and return\n if (opts.json) {\n logger.debug(`Fetching events for run ${runId}`);\n try {\n const events = await listCall({});\n const hydratedEvents = await Promise.all(\n events.data.map((e) => hydrateResourceIO(e, resolveKey))\n );\n showJson(hydratedEvents);\n return;\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n }\n\n await setupListPagination<Event>({\n initialCursor: opts.cursor,\n interactive: opts.interactive,\n fetchPage: async (cursor) => {\n logger.debug(`Fetching events for run ${runId}`);\n try {\n const events = await listCall({ cursor });\n return {\n data: events.data,\n cursor: events.cursor,\n hasMore: events.hasMore,\n };\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n },\n displayPage: async (events) => {\n const hydratedEvents = await Promise.all(\n events.map((e) => hydrateResourceIO(e, resolveKey))\n );\n logger.log(showTable(hydratedEvents, props, opts));\n showInspectInfoBox('event');\n },\n });\n};\n\nexport const listHooks = async (world: World, opts: InspectCLIOptions = {}) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n if (opts.workflowName) {\n logger.warn(\n 'Filtering by workflow-name is not supported for hooks, ignoring filter.'\n );\n }\n if (opts.stepId) {\n logger.warn(\n 'Filtering by step-id is not supported for hooks, ignoring filter.'\n );\n }\n\n const runId = opts.runId;\n const resolveData = opts.withData ? 'all' : 'none';\n\n // For JSON output, just fetch once and return\n if (opts.json) {\n if (!runId) {\n logger.debug('Fetching all hooks');\n } else {\n logger.debug(`Fetching hooks for run ${runId}`);\n }\n try {\n const hooks = await world.hooks.list({\n runId,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor: opts.cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData,\n });\n const hydratedHooks = await Promise.all(\n hooks.data.map((h) => hydrateResourceIO(h, resolveKey))\n );\n showJson({ ...hooks, data: hydratedHooks });\n return;\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n }\n\n // Setup pagination with new mechanism\n await setupListPagination<Hook>({\n initialCursor: opts.cursor,\n interactive: opts.interactive,\n fetchPage: async (cursor) => {\n if (!runId) {\n logger.debug('Fetching all hooks');\n } else {\n logger.debug(`Fetching hooks for run ${runId}`);\n }\n try {\n const hooks = await world.hooks.list({\n runId,\n pagination: {\n sortOrder: opts.sort || 'desc',\n cursor,\n limit: opts.limit || DEFAULT_PAGE_SIZE,\n },\n resolveData,\n });\n return {\n data: hooks.data,\n cursor: hooks.cursor,\n hasMore: hooks.hasMore,\n };\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n },\n displayPage: async (hooks) => {\n const hydratedHooks = await Promise.all(\n hooks.map((h) => hydrateResourceIO(h, resolveKey))\n );\n logger.log(showTable(hydratedHooks, HOOK_LISTED_PROPS, opts));\n showInspectInfoBox('hook');\n },\n });\n};\n\nexport const showHook = async (\n world: World,\n hookId: string,\n opts: InspectCLIOptions = {}\n) => {\n const resolveKey = createResolver(world, opts?.decrypt ?? false);\n\n if (opts.withData) {\n logger.warn('`withData` flag is ignored when showing individual resources');\n }\n try {\n const hook = await world.hooks.get(hookId, {\n resolveData: 'all',\n });\n const hydratedHook = await hydrateResourceIO(hook, resolveKey);\n if (opts.json) {\n showJson(hydratedHook);\n return;\n } else {\n if (\n hasExpiredFields(hydratedHook as unknown as Record<string, unknown>)\n ) {\n logger.warn(\n \"This hook's data (metadata) has expired and is no longer available.\"\n );\n }\n logger.log(hydratedHook);\n }\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n};\n\nexport const listSleeps = async (\n world: World,\n opts: InspectCLIOptions = {}\n) => {\n if (!opts.runId) {\n logger.error(\n 'run-id is required for listing sleeps. Usage: `workflow inspect sleeps --runId=<id>`'\n );\n process.exit(1);\n }\n\n if (opts.stepId) {\n logger.warn(\n 'Filtering by step-id is not supported for sleeps, ignoring filter.'\n );\n }\n if (opts.workflowName) {\n logger.warn(\n 'Filtering by workflow-name is not supported for sleeps, ignoring filter.'\n );\n }\n if (opts.withData) {\n logger.warn('`withData` flag is ignored when listing sleeps');\n }\n\n try {\n // Fetch all events for the run with resolveData='all' to get wait eventData\n const events = await world.events.list({\n runId: opts.runId,\n pagination: {\n sortOrder: opts.sort || 'desc',\n limit: 1000,\n },\n resolveData: 'all',\n });\n\n // Show info message if there might be more sleeps\n if (events.hasMore) {\n logger.info(\n 'Warning: This run has more than 1000 events. Some sleeps might not be shown. Please use the web UI to ensure getting a complete list.'\n );\n }\n\n // Group wait events by correlationId\n const waitEventsByCorrelation = new Map<string, Event[]>();\n for (const event of events.data) {\n if (event.correlationId?.startsWith('wait_')) {\n const existing = waitEventsByCorrelation.get(event.correlationId) ?? [];\n existing.push(event);\n waitEventsByCorrelation.set(event.correlationId, existing);\n }\n }\n\n if (waitEventsByCorrelation.size === 0) {\n logger.warn('No sleeps found for this run.');\n if (opts.json) {\n showJson([]);\n } else {\n logger.log(\n showTable([] as Record<string, unknown>[], WAIT_LISTED_PROPS, {\n ...opts,\n disableRelativeDates: true,\n })\n );\n }\n return;\n }\n\n // Build sleeps from grouped wait events\n const sleeps: Sleep[] = [];\n for (const [correlationId, correlationEvents] of waitEventsByCorrelation) {\n // Stitch up wait_created and wait_completed events\n const waitCreated = correlationEvents.find(\n (e: Event) => e.eventType === 'wait_created'\n );\n const waitCompleted = correlationEvents.find(\n (e: Event) => e.eventType === 'wait_completed'\n );\n\n if (waitCreated) {\n const sleep: Sleep = {\n correlationId,\n runId: waitCreated.runId,\n eventId: waitCreated.eventId,\n createdAt: waitCreated.createdAt,\n resumeAt:\n waitCreated.eventType === 'wait_created'\n ? waitCreated.eventData.resumeAt\n : undefined,\n completedAt: waitCompleted?.createdAt,\n };\n sleeps.push(sleep);\n }\n }\n\n // Sort sleeps by createdAt\n sleeps.sort((a, b) => {\n const timeA = a.createdAt.getTime();\n const timeB = b.createdAt.getTime();\n return opts.sort === 'asc' ? timeA - timeB : timeB - timeA;\n });\n\n if (opts.json) {\n showJson(sleeps);\n return;\n }\n\n logger.log(\n showTable(\n sleeps as unknown as Record<string, unknown>[],\n WAIT_LISTED_PROPS,\n { ...opts, disableRelativeDates: true }\n )\n );\n } catch (error) {\n if (handleApiError(error, opts.backend)) {\n process.exit(1);\n }\n throw error;\n }\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.test.js","sourceRoot":"","sources":["../../../src/lib/inspect/output.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest';\nimport type { WorkflowRun } from '@workflow/world';\nimport { formatTableValue, hasExpiredData } from './output.js';\n\nconst makeRun = (overrides: Partial<WorkflowRun> = {}): WorkflowRun =>\n ({\n runId: 'run-1',\n status: 'running',\n deploymentId: 'dep-1',\n workflowName: 'workflow//./src/workflows/test//myWorkflow',\n input: undefined,\n output: undefined,\n error: undefined,\n createdAt: new Date('2025-01-01'),\n updatedAt: new Date('2025-01-01'),\n completedAt: undefined,\n startedAt: undefined,\n expiredAt: undefined,\n specVersion: 2,\n executionContext: {},\n ...overrides,\n }) as unknown as WorkflowRun;\n\ndescribe('hasExpiredData', () => {\n it('returns false when expiredAt is undefined', () => {\n expect(hasExpiredData(makeRun({ expiredAt: undefined }))).toBe(false);\n });\n\n it('returns false when expiredAt is in the future', () => {\n const future = new Date(Date.now() + 24 * 60 * 60 * 1000);\n expect(hasExpiredData(makeRun({ expiredAt: future }))).toBe(false);\n });\n\n it('returns true when expiredAt is in the past', () => {\n const past = new Date(Date.now() - 24 * 60 * 60 * 1000);\n expect(hasExpiredData(makeRun({ expiredAt: past }))).toBe(true);\n });\n});\n\ndescribe('formatTableValue expired data handling', () => {\n it('returns input value when expiredAt is in the future', () => {\n const future = new Date(Date.now() + 24 * 60 * 60 * 1000);\n const item = { expiredAt: future.toISOString(), input: 'hello' };\n const result = formatTableValue('input', 'hello', {}, undefined, item);\n expect(result).not.toContain('expired');\n });\n\n it('returns expired message when expiredAt is in the past', () => {\n const past = new Date(Date.now() - 24 * 60 * 60 * 1000);\n const item = { expiredAt: past.toISOString(), output: 'hello' };\n const result = formatTableValue('output', 'hello', {}, undefined, item);\n expect(String(result)).toContain('data expired');\n });\n\n it('returns input value when expiredAt is not present', () => {\n const item = { input: 'hello' };\n const result = formatTableValue('input', 'hello', {}, undefined, item);\n expect(String(result)).not.toContain('expired');\n });\n});\n"]}
|