orcheo-studio 0.24.0 → 0.24.2
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/.bumpversion.cfg +1 -1
- package/dist/assets/{arc-DAv23sxp.js → arc-B5ofENSG.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-D_gUzQPQ.js → architectureDiagram-VXUJARFQ-DxYHdW7c.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-2_hx47qT.js → blockDiagram-VD42YOAC-DJFNLztP.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-dehdDKxT.js → c4Diagram-YG6GDRKO-i42OpjrQ.js} +1 -1
- package/dist/assets/channel-D4idvlBv.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-CtLOuP9F.js → chunk-4BX2VUAB-BP38Jeu1.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-CwinXV4-.js → chunk-55IACEB6-DgOteLeo.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-BI7iPFRv.js → chunk-B4BG7PRW-DSFMHhnv.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-CNYNrYjW.js → chunk-DI55MBZ5-houO_rDU.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-BFVTHaU-.js → chunk-FMBD7UC4-2uWxVMuK.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-xWy7sSv1.js → chunk-QN33PNHL-CNE7iDzV.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-Ds_R1QaP.js → chunk-QZHKN3VN-CuJasZjZ.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-D8g2OOzb.js → chunk-TZMSLE5B-DdOfh1YS.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-BbsIqyB3.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-BbsIqyB3.js +1 -0
- package/dist/assets/clone-BtsJ7Mgy.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-DnkMvL-f.js → cose-bilkent-S5V4N54A-n5L5u7aX.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-dpKYJ1gN.js → dagre-6UL2VRFP-DA0iPKXN.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-BnFoR8YQ.js → diagram-PSM6KHXK-3FRZnvw9.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-Brg1AGVu.js → diagram-QEK2KX5R-ePGkAGnY.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-Dhmom7Q4.js → diagram-S2PKOQOG-FYWv9iIE.js} +1 -1
- package/dist/assets/{erDiagram-Q2GNP2WA-BTez8fDL.js → erDiagram-Q2GNP2WA-2la-V9DA.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-CVXmtc0D.js → flowDiagram-NV44I4VS-Cv-HCQV2.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-CHbw3AtF.js → ganttDiagram-JELNMOA3-DZhWBmY1.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-CaPZ1SUE.js → gitGraphDiagram-V2S2FVAM-CBfpN1uw.js} +1 -1
- package/dist/assets/{graph-DjLsaDIL.js → graph-D6aI-bPq.js} +1 -1
- package/dist/assets/index-D8PZ9Puu.js +795 -0
- package/dist/assets/index-Df4jFRhd.css +1 -0
- package/dist/assets/{infoDiagram-HS3SLOUP-D_9DW9VU.js → infoDiagram-HS3SLOUP-Lvd-vDDU.js} +1 -1
- package/dist/assets/{isUndefined-BkijP54r.js → isUndefined-DLcwy6eJ.js} +1 -1
- package/dist/assets/{journeyDiagram-XKPGCS4Q-xxRWc5wn.js → journeyDiagram-XKPGCS4Q-rVvUlw1X.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-BCI2NbpB.js → kanban-definition-3W4ZIXB7-Dg-tIUSI.js} +1 -1
- package/dist/assets/{layout-M840MAqW.js → layout-CYgJ9n1K.js} +1 -1
- package/dist/assets/{linear--_gMRK53.js → linear-CfAw1dgz.js} +1 -1
- package/dist/assets/{min-D06s3WKk.js → min-BBMETs6R.js} +1 -1
- package/dist/assets/{mindmap-definition-VGOIOE7T-B1-ALKFj.js → mindmap-definition-VGOIOE7T-DY__eUNT.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-76kjoNcf.js → pieDiagram-ADFJNKIX-Nr7ukKrm.js} +1 -1
- package/dist/assets/{quadrantDiagram-AYHSOK5B-O_d3GTQl.js → quadrantDiagram-AYHSOK5B-Bb54Oaa_.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-CasSIIPr.js → requirementDiagram-UZGBJVZJ-BtLViRZC.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-CL_kG7jD.js → sankeyDiagram-TZEHDZUN-COqbhL3I.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-RYnztN0k.js → sequenceDiagram-WL72ISMW-DHKy94Yw.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-NHFLaLiz.js → stateDiagram-FKZM4ZOC-8dJVXo1X.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-_96AsFOw.js +1 -0
- package/dist/assets/{timeline-definition-IT6M3QCI-BH1cZoua.js → timeline-definition-IT6M3QCI-CyS6rBy_.js} +1 -1
- package/dist/assets/{treemap-GDKQZRPO-QAQDPzuO.js → treemap-GDKQZRPO-CUM9baT2.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-C3M4ZzCP.js → xychartDiagram-PRI3JC2R-BztiRmM1.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/src/features/account/pages/service-tokens.tsx +13 -60
- package/src/features/auth/pages/login.tsx +8 -1
- package/src/features/workflow/components/dialogs/update-workflow-dialog.tsx +1 -1
- package/src/features/workflow/components/dialogs/upload-workflow-dialog.tsx +14 -2
- package/src/features/workflow/components/panels/rjsf-cron-widget.tsx +421 -0
- package/src/features/workflow/components/panels/rjsf-theme.tsx +2 -0
- package/src/features/workflow/data/workflow-types.ts +5 -0
- package/src/features/workflow/lib/workflow-storage-api.ts +103 -2
- package/src/features/workflow/lib/workflow-storage-helpers.ts +40 -0
- package/src/features/workflow/lib/workflow-storage.ts +58 -31
- package/src/features/workflow/lib/workflow-storage.types.ts +11 -0
- package/src/features/workflow/lib/workflow-upload-errors.ts +81 -0
- package/src/features/workflow/pages/workflow/components/workflow-config-sheet.tsx +26 -5
- package/src/features/workflow/pages/workflow/components/workflow-layout.tsx +4 -1
- package/src/features/workflow/pages/workflow/components/workflow-tab-content.tsx +169 -5
- package/src/features/workflow/pages/workflow/hooks/controller/build-layout-props.ts +8 -0
- package/src/features/workflow/pages/workflow/hooks/controller/use-workflow-lifecycle.ts +6 -0
- package/src/features/workflow/pages/workflow/hooks/controller/use-workflow-resources.ts +2 -0
- package/src/features/workflow/pages/workflow/hooks/execution-runtime-updates.ts +1 -1
- package/src/features/workflow/pages/workflow/hooks/use-workflow-loader.ts +22 -0
- package/src/features/workflow/pages/workflow/hooks/use-workflow-metadata-state.ts +11 -0
- package/src/features/workflow/pages/workflow/hooks/use-workflow-saver.ts +8 -0
- package/src/features/workflow/pages/workflow/hooks/use-workflow-storage-listener.ts +14 -0
- package/src/features/workflow/pages/workflow-gallery/workflow-card.tsx +26 -4
- package/src/lib/api.ts +2 -17
- package/dist/assets/channel-C3cH7p5A.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-o6x5AEsV.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-o6x5AEsV.js +0 -1
- package/dist/assets/clone-CnJR7M_G.js +0 -1
- package/dist/assets/index-DSthAh3a.css +0 -1
- package/dist/assets/index-DlptXU2u.js +0 -795
- package/dist/assets/stateDiagram-v2-4FDKWEC3-3y5AUrwb.js +0 -1
package/dist/assets/{xychartDiagram-PRI3JC2R-C3M4ZzCP.js → xychartDiagram-PRI3JC2R-BztiRmM1.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as gi,g as xi,q as Xt,p as di,a as fi,b as pi,_ as a,l as Nt,H as mi,e as yi,y as bi,F as St,i as Ai,D as Yt,E as wi,K as Ci,aI as Si,R as Wt}from"./index-
|
|
1
|
+
import{s as gi,g as xi,q as Xt,p as di,a as fi,b as pi,_ as a,l as Nt,H as mi,e as yi,y as bi,F as St,i as Ai,D as Yt,E as wi,K as Ci,aI as Si,R as Wt}from"./index-D8PZ9Puu.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-CfAw1dgz.js";import"./defaultLocale-C4B-KCzX.js";function Ri(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s<n;)o[s]=e+s*i;return o}function yt(){var e=ki().unknown(void 0),t=e.domain,i=e.range,s=0,n=1,o,g,m=!1,p=0,k=0,v=.5;delete e.unknown;function C(){var b=t().length,E=n<s,D=E?n:s,P=E?s:n;o=(P-D)/Math.max(1,b-p+k*2),m&&(o=Math.floor(o)),D+=(P-D-o*(b-p))*v,g=o*(1-p),m&&(D=Math.round(D),g=Math.round(g));var I=Ri(b).map(function(y){return D+o*y});return i(E?I.reverse():I)}return e.domain=function(b){return arguments.length?(t(b),C()):t()},e.range=function(b){return arguments.length?([s,n]=b,s=+s,n=+n,C()):[s,n]},e.rangeRound=function(b){return[s,n]=b,s=+s,n=+n,m=!0,C()},e.bandwidth=function(){return g},e.step=function(){return o},e.round=function(b){return arguments.length?(m=!!b,C()):m},e.padding=function(b){return arguments.length?(p=Math.min(1,k=+b),C()):p},e.paddingInner=function(b){return arguments.length?(p=Math.min(1,b),C()):p},e.paddingOuter=function(b){return arguments.length?(k=+b,C()):k},e.align=function(b){return arguments.length?(v=Math.max(0,Math.min(1,b)),C()):v},e.copy=function(){return yt(t(),[s,n]).round(m).paddingInner(p).paddingOuter(k).align(v)},_i.apply(C(),arguments)}var bt=(function(){var e=a(function(F,h,u,x){for(u=u||{},x=F.length;x--;u[F[x]]=h);return u},"o"),t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],n=[1,5],o=[1,6],g=[1,7],m=[1,5,10,12,14,16,18,19,21,23,34,35,36],p=[1,25],k=[1,26],v=[1,28],C=[1,29],b=[1,30],E=[1,31],D=[1,32],P=[1,33],I=[1,34],y=[1,35],_=[1,36],c=[1,37],W=[1,43],z=[1,42],U=[1,47],X=[1,50],l=[1,10,12,14,16,18,19,21,23,34,35,36],L=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],S=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],R=[1,64],$={trace:a(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:a(function(h,u,x,d,w,r,at){var f=r.length-1;switch(w){case 5:d.setOrientation(r[f]);break;case 9:d.setDiagramTitle(r[f].text.trim());break;case 12:d.setLineData({text:"",type:"text"},r[f]);break;case 13:d.setLineData(r[f-1],r[f]);break;case 14:d.setBarData({text:"",type:"text"},r[f]);break;case 15:d.setBarData(r[f-1],r[f]);break;case 16:this.$=r[f].trim(),d.setAccTitle(this.$);break;case 17:case 18:this.$=r[f].trim(),d.setAccDescription(this.$);break;case 19:this.$=r[f-1];break;case 20:this.$=[Number(r[f-2]),...r[f]];break;case 21:this.$=[Number(r[f])];break;case 22:d.setXAxisTitle(r[f]);break;case 23:d.setXAxisTitle(r[f-1]);break;case 24:d.setXAxisTitle({type:"text",text:""});break;case 25:d.setXAxisBand(r[f]);break;case 26:d.setXAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 27:this.$=r[f-1];break;case 28:this.$=[r[f-2],...r[f]];break;case 29:this.$=[r[f]];break;case 30:d.setYAxisTitle(r[f]);break;case 31:d.setYAxisTitle(r[f-1]);break;case 32:d.setYAxisTitle({type:"text",text:""});break;case 33:d.setYAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 37:this.$={text:r[f],type:"text"};break;case 38:this.$={text:r[f],type:"text"};break;case 39:this.$={text:r[f],type:"markdown"};break;case 40:this.$=r[f];break;case 41:this.$=r[f-1]+""+r[f];break}},"anonymous"),table:[e(t,i,{3:1,4:2,7:4,5:s,34:n,35:o,36:g}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,34:n,35:o,36:g}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:o,36:g}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(m,[2,34]),e(m,[2,35]),e(m,[2,36]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,34:n,35:o,36:g}),{1:[2,3]},e(m,[2,5]),e(t,[2,7],{4:22,34:n,35:o,36:g}),{11:23,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:39,13:38,24:W,27:z,29:40,30:41,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:45,15:44,27:U,33:46,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:49,17:48,24:X,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{11:52,17:51,24:X,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},{20:[1,53]},{22:[1,54]},e(l,[2,18]),{1:[2,2]},e(l,[2,8]),e(l,[2,9]),e(L,[2,37],{40:55,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c}),e(L,[2,38]),e(L,[2,39]),e(S,[2,40]),e(S,[2,42]),e(S,[2,43]),e(S,[2,44]),e(S,[2,45]),e(S,[2,46]),e(S,[2,47]),e(S,[2,48]),e(S,[2,49]),e(S,[2,50]),e(S,[2,51]),e(l,[2,10]),e(l,[2,22],{30:41,29:56,24:W,27:z}),e(l,[2,24]),e(l,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},e(l,[2,11]),e(l,[2,30],{33:60,27:U}),e(l,[2,32]),{31:[1,61]},e(l,[2,12]),{17:62,24:X},{25:63,27:R},e(l,[2,14]),{17:65,24:X},e(l,[2,16]),e(l,[2,17]),e(S,[2,41]),e(l,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(l,[2,31]),{27:[1,69]},e(l,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(l,[2,15]),e(l,[2,26]),e(l,[2,27]),{11:59,32:72,37:24,38:p,39:k,40:27,41:v,42:C,43:b,44:E,45:D,46:P,47:I,48:y,49:_,50:c},e(l,[2,33]),e(l,[2,19]),{25:73,27:R},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:a(function(h,u){if(u.recoverable)this.trace(h);else{var x=new Error(h);throw x.hash=u,x}},"parseError"),parse:a(function(h){var u=this,x=[0],d=[],w=[null],r=[],at=this.table,f="",lt=0,It=0,hi=2,Mt=1,li=r.slice.call(arguments,1),T=Object.create(this.lexer),Y={yy:{}};for(var dt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,dt)&&(Y.yy[dt]=this.yy[dt]);T.setInput(h,Y.yy),Y.yy.lexer=T,Y.yy.parser=this,typeof T.yylloc>"u"&&(T.yylloc={});var ft=T.yylloc;r.push(ft);var ci=T.options&&T.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ui(V){x.length=x.length-2*V,w.length=w.length-V,r.length=r.length-V}a(ui,"popStack");function Vt(){var V;return V=d.pop()||T.lex()||Mt,typeof V!="number"&&(V instanceof Array&&(d=V,V=d.pop()),V=u.symbols_[V]||V),V}a(Vt,"lex");for(var M,H,B,pt,q={},ct,O,Bt,ut;;){if(H=x[x.length-1],this.defaultActions[H]?B=this.defaultActions[H]:((M===null||typeof M>"u")&&(M=Vt()),B=at[H]&&at[H][M]),typeof B>"u"||!B.length||!B[0]){var mt="";ut=[];for(ct in at[H])this.terminals_[ct]&&ct>hi&&ut.push("'"+this.terminals_[ct]+"'");T.showPosition?mt="Parse error on line "+(lt+1)+`:
|
|
2
2
|
`+T.showPosition()+`
|
|
3
3
|
Expecting `+ut.join(", ")+", got '"+(this.terminals_[M]||M)+"'":mt="Parse error on line "+(lt+1)+": Unexpected "+(M==Mt?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(mt,{text:T.match,token:this.terminals_[M]||M,line:T.yylineno,loc:ft,expected:ut})}if(B[0]instanceof Array&&B.length>1)throw new Error("Parse Error: multiple actions possible at state: "+H+", token: "+M);switch(B[0]){case 1:x.push(M),w.push(T.yytext),r.push(T.yylloc),x.push(B[1]),M=null,It=T.yyleng,f=T.yytext,lt=T.yylineno,ft=T.yylloc;break;case 2:if(O=this.productions_[B[1]][1],q.$=w[w.length-O],q._$={first_line:r[r.length-(O||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(O||1)].first_column,last_column:r[r.length-1].last_column},ci&&(q._$.range=[r[r.length-(O||1)].range[0],r[r.length-1].range[1]]),pt=this.performAction.apply(q,[f,It,lt,Y.yy,B[1],w,r].concat(li)),typeof pt<"u")return pt;O&&(x=x.slice(0,-1*O*2),w=w.slice(0,-1*O),r=r.slice(0,-1*O)),x.push(this.productions_[B[1]][0]),w.push(q.$),r.push(q._$),Bt=at[x[x.length-2]][x[x.length-1]],x.push(Bt);break;case 3:return!0}}return!0},"parse")},Et=(function(){var F={EOF:1,parseError:a(function(u,x){if(this.yy.parser)this.yy.parser.parseError(u,x);else throw new Error(u)},"parseError"),setInput:a(function(h,u){return this.yy=u||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:a(function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var u=h.match(/(?:\r\n?|\n).*/g);return u?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},"input"),unput:a(function(h){var u=h.length,x=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-u),this.offset-=u;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),x.length-1&&(this.yylineno-=x.length-1);var w=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:x?(x.length===d.length?this.yylloc.first_column:0)+d[d.length-x.length].length-x[0].length:this.yylloc.first_column-u},this.options.ranges&&(this.yylloc.range=[w[0],w[0]+this.yyleng-u]),this.yyleng=this.yytext.length,this},"unput"),more:a(function(){return this._more=!0,this},"more"),reject:a(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:a(function(h){this.unput(this.match.slice(h))},"less"),pastInput:a(function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:a(function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:a(function(){var h=this.pastInput(),u=new Array(h.length+1).join("-");return h+this.upcomingInput()+`
|
package/dist/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Orcheo</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-D8PZ9Puu.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Df4jFRhd.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useEffect, useState } from "react";
|
|
2
|
-
import { Copy, KeyRound,
|
|
2
|
+
import { Copy, KeyRound, Trash2 } from "lucide-react";
|
|
3
3
|
import { Button } from "@/design-system/ui/button";
|
|
4
4
|
import { Input } from "@/design-system/ui/input";
|
|
5
5
|
import { Label } from "@/design-system/ui/label";
|
|
@@ -43,7 +43,6 @@ import {
|
|
|
43
43
|
getActiveWorkspace,
|
|
44
44
|
listServiceTokens,
|
|
45
45
|
revokeServiceToken,
|
|
46
|
-
rotateServiceToken,
|
|
47
46
|
type ServiceToken,
|
|
48
47
|
} from "@/lib/api";
|
|
49
48
|
|
|
@@ -63,8 +62,6 @@ const EXPIRY_OPTIONS = [
|
|
|
63
62
|
{ value: "30d", label: "30 days", seconds: 2592000 },
|
|
64
63
|
] as const;
|
|
65
64
|
|
|
66
|
-
const ROTATION_OVERLAP_SECONDS = 300;
|
|
67
|
-
|
|
68
65
|
const formatDate = (value: string | null | undefined): string =>
|
|
69
66
|
value ? new Date(value).toLocaleString() : "—";
|
|
70
67
|
|
|
@@ -90,13 +87,12 @@ export default function ServiceTokens() {
|
|
|
90
87
|
const [workspaceName, setWorkspaceName] = useState<string | null>(null);
|
|
91
88
|
|
|
92
89
|
const [createOpen, setCreateOpen] = useState(false);
|
|
93
|
-
const [
|
|
90
|
+
const [name, setName] = useState("");
|
|
94
91
|
const [selectedScopes, setSelectedScopes] = useState<Set<string>>(new Set());
|
|
95
92
|
const [expiry, setExpiry] = useState<string>("never");
|
|
96
93
|
const [isMinting, setIsMinting] = useState(false);
|
|
97
94
|
|
|
98
95
|
const [revealed, setRevealed] = useState<RevealedSecret | null>(null);
|
|
99
|
-
const [rotatingId, setRotatingId] = useState<string | null>(null);
|
|
100
96
|
const [revokingId, setRevokingId] = useState<string | null>(null);
|
|
101
97
|
const [revokeTarget, setRevokeTarget] = useState<string | null>(null);
|
|
102
98
|
|
|
@@ -137,7 +133,7 @@ export default function ServiceTokens() {
|
|
|
137
133
|
}, []);
|
|
138
134
|
|
|
139
135
|
const resetCreateForm = () => {
|
|
140
|
-
|
|
136
|
+
setName("");
|
|
141
137
|
setSelectedScopes(new Set());
|
|
142
138
|
setExpiry("never");
|
|
143
139
|
};
|
|
@@ -161,14 +157,14 @@ export default function ServiceTokens() {
|
|
|
161
157
|
(option) => option.value === expiry,
|
|
162
158
|
);
|
|
163
159
|
const token = await createServiceToken({
|
|
164
|
-
|
|
160
|
+
name: name.trim() || undefined,
|
|
165
161
|
scopes: [...selectedScopes],
|
|
166
162
|
expires_in_seconds: expiryOption?.seconds ?? undefined,
|
|
167
163
|
});
|
|
168
164
|
setTokens((prev) => [token, ...prev]);
|
|
169
165
|
setRevealed({
|
|
170
166
|
title: "API key created",
|
|
171
|
-
identifier: token.identifier,
|
|
167
|
+
identifier: token.name ?? token.identifier,
|
|
172
168
|
secret: token.secret ?? "",
|
|
173
169
|
});
|
|
174
170
|
resetCreateForm();
|
|
@@ -185,32 +181,6 @@ export default function ServiceTokens() {
|
|
|
185
181
|
}
|
|
186
182
|
};
|
|
187
183
|
|
|
188
|
-
const handleRotate = async (tokenId: string) => {
|
|
189
|
-
setRotatingId(tokenId);
|
|
190
|
-
try {
|
|
191
|
-
const rotated = await rotateServiceToken(
|
|
192
|
-
tokenId,
|
|
193
|
-
ROTATION_OVERLAP_SECONDS,
|
|
194
|
-
);
|
|
195
|
-
const tokenList = await listServiceTokens();
|
|
196
|
-
setTokens(tokenList.tokens);
|
|
197
|
-
setRevealed({
|
|
198
|
-
title: "API key rotated",
|
|
199
|
-
identifier: rotated.identifier,
|
|
200
|
-
secret: rotated.secret ?? "",
|
|
201
|
-
});
|
|
202
|
-
toast({ title: "API key rotated" });
|
|
203
|
-
} catch (err) {
|
|
204
|
-
toast({
|
|
205
|
-
title: "Failed to rotate API key",
|
|
206
|
-
description: err instanceof Error ? err.message : undefined,
|
|
207
|
-
variant: "destructive",
|
|
208
|
-
});
|
|
209
|
-
} finally {
|
|
210
|
-
setRotatingId(null);
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
|
|
214
184
|
const handleRevoke = async () => {
|
|
215
185
|
const tokenId = revokeTarget;
|
|
216
186
|
if (!tokenId) {
|
|
@@ -277,7 +247,7 @@ export default function ServiceTokens() {
|
|
|
277
247
|
<Table>
|
|
278
248
|
<TableHeader>
|
|
279
249
|
<TableRow>
|
|
280
|
-
<TableHead>
|
|
250
|
+
<TableHead>Name</TableHead>
|
|
281
251
|
<TableHead>Key</TableHead>
|
|
282
252
|
<TableHead>Scopes</TableHead>
|
|
283
253
|
<TableHead>Issued</TableHead>
|
|
@@ -294,7 +264,7 @@ export default function ServiceTokens() {
|
|
|
294
264
|
return (
|
|
295
265
|
<TableRow key={token.identifier}>
|
|
296
266
|
<TableCell className="font-mono text-sm">
|
|
297
|
-
{token.identifier}
|
|
267
|
+
{token.name ?? token.identifier}
|
|
298
268
|
</TableCell>
|
|
299
269
|
<TableCell className="font-mono text-sm text-muted-foreground">
|
|
300
270
|
{token.secret_preview
|
|
@@ -332,30 +302,13 @@ export default function ServiceTokens() {
|
|
|
332
302
|
</TableCell>
|
|
333
303
|
<TableCell className="text-right">
|
|
334
304
|
<div className="flex justify-end gap-1">
|
|
335
|
-
<Button
|
|
336
|
-
variant="ghost"
|
|
337
|
-
size="sm"
|
|
338
|
-
onClick={() => void handleRotate(token.identifier)}
|
|
339
|
-
disabled={
|
|
340
|
-
!isActive ||
|
|
341
|
-
rotatingId === token.identifier ||
|
|
342
|
-
revokingId === token.identifier
|
|
343
|
-
}
|
|
344
|
-
>
|
|
345
|
-
<RotateCw className="mr-2 h-4 w-4" />
|
|
346
|
-
{rotatingId === token.identifier
|
|
347
|
-
? "Rotating..."
|
|
348
|
-
: "Rotate"}
|
|
349
|
-
</Button>
|
|
350
305
|
<Button
|
|
351
306
|
variant="ghost"
|
|
352
307
|
size="sm"
|
|
353
308
|
className="text-destructive hover:text-destructive"
|
|
354
309
|
onClick={() => setRevokeTarget(token.identifier)}
|
|
355
310
|
disabled={
|
|
356
|
-
!isActive ||
|
|
357
|
-
rotatingId === token.identifier ||
|
|
358
|
-
revokingId === token.identifier
|
|
311
|
+
!isActive || revokingId === token.identifier
|
|
359
312
|
}
|
|
360
313
|
>
|
|
361
314
|
<Trash2 className="mr-2 h-4 w-4" />
|
|
@@ -391,12 +344,12 @@ export default function ServiceTokens() {
|
|
|
391
344
|
</DialogHeader>
|
|
392
345
|
<div className="space-y-4">
|
|
393
346
|
<div className="space-y-1.5">
|
|
394
|
-
<Label htmlFor="token-
|
|
347
|
+
<Label htmlFor="token-name">Name (optional)</Label>
|
|
395
348
|
<Input
|
|
396
|
-
id="token-
|
|
397
|
-
placeholder="
|
|
398
|
-
value={
|
|
399
|
-
onChange={(event) =>
|
|
349
|
+
id="token-name"
|
|
350
|
+
placeholder="e.g. Local, CI, Production"
|
|
351
|
+
value={name}
|
|
352
|
+
onChange={(event) => setName(event.target.value)}
|
|
400
353
|
disabled={isMinting}
|
|
401
354
|
/>
|
|
402
355
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useMemo, useState, type FormEvent } from "react";
|
|
1
|
+
import { useEffect, useMemo, useState, type FormEvent } from "react";
|
|
2
2
|
import { useLocation, useNavigate } from "react-router-dom";
|
|
3
3
|
import { Loader2, Mail } from "lucide-react";
|
|
4
4
|
import { Button } from "@/design-system/ui/button";
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
startEmailChallenge,
|
|
16
16
|
verifyEmailCode,
|
|
17
17
|
} from "@features/auth/lib/auth-api";
|
|
18
|
+
import { isAuthenticated } from "@features/auth/lib/auth-session";
|
|
18
19
|
|
|
19
20
|
// Only allow same-origin relative paths to avoid open-redirect via state/query.
|
|
20
21
|
const sanitizeRedirect = (value: unknown): string | undefined => {
|
|
@@ -57,6 +58,12 @@ export default function Login() {
|
|
|
57
58
|
const [busy, setBusy] = useState(false);
|
|
58
59
|
const [error, setError] = useState<string | null>(null);
|
|
59
60
|
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (isAuthenticated()) {
|
|
63
|
+
navigate(redirectTo, { replace: true });
|
|
64
|
+
}
|
|
65
|
+
}, [navigate, redirectTo]);
|
|
66
|
+
|
|
60
67
|
const handleSendEmail = async (event: FormEvent) => {
|
|
61
68
|
event.preventDefault();
|
|
62
69
|
setError(null);
|
|
@@ -13,7 +13,10 @@ import {
|
|
|
13
13
|
import { Input } from "@/design-system/ui/input";
|
|
14
14
|
import { Label } from "@/design-system/ui/label";
|
|
15
15
|
import { toast } from "@/hooks/use-toast";
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
uploadWorkflowFromFiles,
|
|
18
|
+
WorkflowUploadFailedError,
|
|
19
|
+
} from "@features/workflow/lib/workflow-storage";
|
|
17
20
|
import { getWorkflowRouteRef } from "@features/workflow/lib/workflow-storage-helpers";
|
|
18
21
|
import { getSelectedWorkspaceSlug } from "@/lib/workspace-session";
|
|
19
22
|
import { getWorkspaceWorkflowPath } from "@/lib/workspace-routing";
|
|
@@ -197,9 +200,18 @@ export function UploadWorkflowDialog({
|
|
|
197
200
|
setError(message);
|
|
198
201
|
toast({
|
|
199
202
|
title: "Upload failed",
|
|
200
|
-
description: message
|
|
203
|
+
description: `${message} Fix the error and upload again.`,
|
|
201
204
|
variant: "destructive",
|
|
202
205
|
});
|
|
206
|
+
if (err instanceof WorkflowUploadFailedError) {
|
|
207
|
+
handleOpenChange(false);
|
|
208
|
+
navigate(
|
|
209
|
+
getWorkspaceWorkflowPath(
|
|
210
|
+
getSelectedWorkspaceSlug(),
|
|
211
|
+
getWorkflowRouteRef(err.workflow),
|
|
212
|
+
),
|
|
213
|
+
);
|
|
214
|
+
}
|
|
203
215
|
} finally {
|
|
204
216
|
setIsUploading(false);
|
|
205
217
|
}
|