@5minds/processcube_app_sdk
Version:
The SDK for ProcessCube Apps
2 lines (1 loc) • 14.9 kB
JavaScript
var N=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ue=Object.getOwnPropertyNames;var pe=Object.prototype.hasOwnProperty;var fe=(e,t)=>{for(var s in t)N(e,s,{get:t[s],enumerable:!0})},ye=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ue(t))!pe.call(e,o)&&o!==s&&N(e,o,{get:()=>t[o],enumerable:!(n=le(t,o))||n.enumerable});return e};var Ie=e=>ye(N({},"__esModule",{value:!0}),e);var $e={};fe($e,{cancelReservedUserTask:()=>ve,finishManualTask:()=>D,finishTask:()=>Me,finishUntypedTask:()=>M,finishUserTask:()=>L,finishUserTaskAndGetNext:()=>_e,getActiveProcessInstances:()=>Pe,getAssignedUserTasksByIdentity:()=>Oe,getEngineClient:()=>Ce,getFlowNodeInstances:()=>Ge,getFlowNodeInstancesByProcessInstanceId:()=>F,getFlowNodeInstancesTriggeredByFlowNodeInstanceIds:()=>v,getIdentity:()=>a,getProcessInstance:()=>Ke,getProcessInstanceById:()=>U,getReservedUserTasksByIdentity:()=>Ue,getTriggeredFlowNodeInstances:()=>Xe,getUserTasks:()=>te,getWaitingUserTaskByFlowNodeInstanceId:()=>se,getWaitingUserTasks:()=>Ne,getWaitingUserTasksByCorrelationId:()=>Re,getWaitingUserTasksByFlowNodeId:()=>be,getWaitingUserTasksByProcessInstanceId:()=>he,navigateToUrl:()=>Ae,reserveUserTask:()=>Fe,retryProcess:()=>qe,retryProcessInstance:()=>O,startProcess:()=>De,terminateProcess:()=>We,terminateProcessInstance:()=>B,waitForProcessEnd:()=>xe,waitForUserTask:()=>Se,withApplicationSdk:()=>Be});module.exports=Ie($e);var St=require("only-server"),_t=require("../common/index.cjs");var K=require("node:child_process"),C=require("node:fs"),d=require("node:path"),G=require("chokidar"),X=require("esbuild"),$=require("jwt-decode"),S=require("openid-client"),j=require("@5minds/processcube_engine_sdk");var q=require("@5minds/processcube_engine_client"),h=process.env.PROCESSCUBE_ENGINE_URL??"http://localhost:10560",r=new q.EngineClient(h);var ke={token:"ZHVtbXlfdG9rZW4=",userId:"dummy_token"},me=.85,x=["external_task.ts","external_task.js"],b=process.env.PROCESSCUBE_AUTHORITY_URL!==void 0,T=new j.Logger("processcube_app_sdk:external_task_adapter"),m={},E;async function H(e){if(e&&!(0,C.existsSync)(e))throw new Error(`Invalid customExternalTasksDirPath. The given path '${e}' does not exist`);S.custom.setHttpOptionsDefaults({timeout:1e5});let t=await Q();E=await Z(t),await ge(t);let s=Ee(e);(0,G.watch)(s).on("add",async n=>{if(x.includes((0,d.basename)(n)))return Y(n,s)}).on("change",async n=>{if(x.includes((0,d.basename)(n)))return Te(n,s)}).on("unlink",async n=>{x.includes((0,d.basename)(n))&&V(n)}).on("error",n=>T.error(`Watcher error: ${n}`))}async function Y(e,t){let s=(0,d.dirname)(e);if((await C.promises.readdir(s)).filter(u=>x.includes(u)).length>1){T.error(`Multiple external task files found in directory ${s}. Stopping all external task workers for this directory.`),m[s]&&V(e);return}let i=await J(e),c=(0,d.relative)(t,s),y=z(c),l=(0,d.join)(__dirname,"lib/ExternalTaskWorkerProcess.cjs"),I=(0,K.fork)(l,{env:{...process.env,PROCESSCUBE_ENGINE_URL:h}});m[s]=I,I.once("disconnect",()=>{delete m[s]}),I.send({action:"create",payload:{topic:y,identity:E,moduleString:i,workerPath:e}})}async function Te(e,t){let s=(0,d.dirname)(e),n=m[s];if(!n)return Y(e,t);let o=await J(e),i=(0,d.relative)(t,s),c=z(i);n.send({action:"restart",payload:{topic:c,identity:E,moduleString:o,workerPath:e}})}function V(e){let t=(0,d.dirname)(e),s=m[t];s&&s.kill()}async function Q(){if(!b)return null;if(!process.env.PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_ID||!process.env.PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_SECRET){let n=new Error("Required environment variables PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_ID and PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_SECRET are missing. For help, please refer to our documentation on environment variables at: https://processcube.io/docs/app-sdk/samples/nextjs/external-task-adapter-with-nextjs#authority");throw T.error("Required environment variables PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_ID and PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_SECRET are missing",{err:n}),n}let e=await S.Issuer.discover(process.env.PROCESSCUBE_AUTHORITY_URL);return await new e.Client({client_id:process.env.PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_ID,client_secret:process.env.PROCESSCUBE_EXTERNAL_TASK_WORKER_CLIENT_SECRET}).grant({grant_type:"client_credentials",scope:"engine_etw"})}function Z(e){if(!b||e===null)return ke;let t=e.access_token,s=(0,$.jwtDecode)(t);return{token:e.access_token,userId:s.sub}}async function ge(e){let t=5;if(!b||e===null)return;let n=await we(e)*me*1e3,o=async()=>{try{let i=await Q();E=Z(i);for(let c of Object.values(m))c.send({action:"updateIdentity",payload:{identity:E}});t=5,setTimeout(o,n)}catch(i){if(t===0){T.error("Could not refresh identity for external task worker processes. Stopping all external task workers.",{error:i});for(let y of Object.values(m))y.kill();return}T.error("Could not refresh identity for external task worker processes.",{error:i,retryCount:t}),t--;let c=2*1e3;setTimeout(o,c)}};setTimeout(o,n)}async function J(e){let t=await(0,X.build)({entryPoints:[e],write:!1,bundle:!0,platform:"node",target:"node18",format:"cjs",external:["@opentelemetry/api"]});if(t.errors.length>0)throw T.error(`Could not transpile file at '${e}'`,{errors:t.errors}),new Error(`Could not transpile file at '${e}'`);return t.warnings.length>0&&T.warn(`Transpiled file at '${e}' with warnings`,{warnings:t.warnings}),t.outputFiles[0].text}async function we(e){let t=e.expires_in;if(!t&&e.expires_at&&(t=Math.floor(e.expires_at-Date.now()/1e3)),t===void 0)throw new Error("Could not determine the time until the access token for external task workers expires");return t}function z(e){return e.replace(/^\.\/+|\([^)]+\)|^\/*|\/*$/g,"").replace(/[\/]{2,}/g,"/")}function Ee(e){let t,s=[e,(0,d.join)(process.cwd(),"app"),(0,d.join)(process.cwd(),"src","app")];for(let n of s)if(n&&(0,C.existsSync)(n)){t=n;break}if(!t)throw new Error("Could not find external tasks directory");return t}function Ce(){return r}var R=require("next-auth/jwt"),ee=require("next/dist/compiled/@edge-runtime/cookies"),k=require("next/headers");async function a(){let e=await(0,R.getToken)({req:{cookies:(0,k.cookies)(),headers:(0,k.headers)()}});if(e?.expiresAt&&Date.now()>=e.expiresAt*1e3){let s=await fetch(`${process.env.NEXTAUTH_URL}/api/auth/session`,{method:"GET",headers:{"Content-Type":"application/json",cookie:(0,k.cookies)().toString()}}),n=new ee.ResponseCookies(s.headers);if(n.getAll().length){let o=!1;try{for(let i of n.getAll())(0,k.cookies)().set(i.name,i.value,{...i})}catch{o=!0}if(e=await(0,R.getToken)({req:{cookies:o?n:(0,k.cookies)(),headers:(0,k.headers)()}}),e?.error)throw e.error}}if(!e?.accessToken||!e?.sub)throw new Error("AccessToken or Sub could not be determined!");return{token:e?.accessToken,userId:e?.sub}}var g=require("@5minds/processcube_engine_client");async function P(){try{return a()}catch{return}}async function U(e){let t=await P();return(await r.processInstances.query({processInstanceId:e},{identity:t})).processInstances[0]}async function F(e,t={sortSettings:{sortBy:g.DataModels.FlowNodeInstances.FlowNodeInstanceSortableColumns.createdAt,sortDir:"ASC"}}){return(await r.flowNodeInstances.query({processInstanceId:e},{...t,identity:t.identity??await P()})).flowNodeInstances}async function v(e){let t=await P();return(await r.flowNodeInstances.query({triggeredByFlowNodeInstance:e},{identity:t})).flowNodeInstances}async function O(e,t,s){let n=await P();await r.processInstances.retryProcessInstance(e,{flowNodeInstanceId:t,newStartToken:s,identity:n})}async function B(e){let t=await P();await r.processInstances.terminateProcessInstance(e,t)}async function Pe(e={options:{identity:!0}}){switch(e.options.identity){case!0:e.options.identity=await a();break;case!1:e.options.identity=void 0;break;case void 0:e.options.identity=await a();break}return await r.processInstances.query({...e?.query,state:g.DataModels.ProcessInstances.ProcessInstanceState.running},e?.options)}async function xe(e={},t=!0){let{processInstanceId:s}=e,n=typeof t=="boolean"?t==!0?await a():void 0:t;return new Promise(async(o,i)=>{let c=[],y=async l=>{if(s!==void 0&&l.processInstanceId!==s)return;let u=await r.processInstances.query({processInstanceId:l.processInstanceId},{identity:n});for(let _ of c)r.notification.removeSubscription(_,n);return u.totalCount===0?i(new Error(`Process with instance ID "${l.processInstanceId}" does not exist.`)):o(u.processInstances[0])};if(c.push(await r.notification.onProcessEnded(y,{identity:n})),c.push(await r.notification.onProcessError(y,{identity:n})),c.push(await r.notification.onProcessTerminated(y,{identity:n})),s){let l=await r.processInstances.query({processInstanceId:s,state:[g.DataModels.ProcessInstances.ProcessInstanceState.finished,g.DataModels.ProcessInstances.ProcessInstanceState.terminated,g.DataModels.ProcessInstances.ProcessInstanceState.error]},{identity:n});if(l.totalCount>0){for(let I of c)r.notification.removeSubscription(I,n);o(l.processInstances[0])}}})}var f=require("@5minds/processcube_engine_client"),p=require("../common/index.cjs");async function Se(e={},t=!0){let{correlationId:s,processInstanceId:n,flowNodeId:o}=e,i=typeof t=="boolean"?t==!0?await a():void 0:t;return new Promise(async(c,y)=>{let l=await r.userTasks.onUserTaskWaiting(async u=>{let _=s!==void 0&&u.correlationId!==s,ae=u.flowNodeInstanceId===void 0,ce=n!==void 0&&u.processInstanceId!==n,de=o!==void 0&&u.flowNodeId!==o;if(_||ae||ce||de)return;let W=await se(u.flowNodeInstanceId,{identity:i});return r.notification.removeSubscription(l,i),W===null?y(new Error(`UserTask with instance ID "${u.flowNodeInstanceId}" does not exist.`)):c(W)},{identity:i}),I=await te({correlationId:s,processInstanceId:n,flowNodeId:o,state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},{identity:i});I.userTasks.length>0&&(r.notification.removeSubscription(l,i),c(I.userTasks[0]))})}async function _e(e,t={},s={},n=!0){let o=typeof n=="boolean"?n==!0?await a():void 0:n;await r.userTasks.finishUserTask(e,s,o);let i={state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended,...t},c=await r.userTasks.query(i,{identity:o});return(0,p.mapUserTask)(c.userTasks[0])}async function te(e,t={identity:!0}){switch(t?.identity){case!0:t.identity=await a();break;case!1:t.identity=void 0;break;case void 0:t.identity=await a();break}let s=await r.userTasks.query(e,t);return(0,p.mapUserTaskList)(s)}async function Ne(e={identity:!0}){switch(e?.identity){case!0:e.identity=await a();break;case!1:e.identity=void 0;break;case void 0:e.identity=await a();break}let t=await r.userTasks.query({state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},e);return(0,p.mapUserTaskList)(t)}async function he(e,t={identity:!0}){switch(t?.identity){case!0:t.identity=await a();break;case!1:t.identity=void 0;break;case void 0:t.identity=await a();break}let s=await r.userTasks.query({processInstanceId:e,state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},t);return(0,p.mapUserTaskList)(s)}async function be(e,t={identity:!0}){switch(t?.identity){case!0:t.identity=await a();break;case!1:t.identity=void 0;break;case void 0:t.identity=await a();break}let s=await r.userTasks.query({flowNodeId:e,state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},t);return(0,p.mapUserTaskList)(s)}async function se(e,t={identity:!0}){switch(t?.identity){case!0:t.identity=await a();break;case!1:t.identity=void 0;break;case void 0:t.identity=await a();break}let s=await r.userTasks.query({flowNodeInstanceId:e,state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},{...t,limit:1});return s.userTasks.length===0?null:(0,p.mapUserTask)(s.userTasks[0])}async function Re(e,t={identity:!0}){switch(t?.identity){case!0:t.identity=await a();break;case!1:t.identity=void 0;break;case void 0:t.identity=await a();break}let s=await r.userTasks.query({correlationId:e,state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},t);return(0,p.mapUserTaskList)(s)}async function Ue(e,t){let s=e||await a(),n=await r.userTasks.query({state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},{identity:s,...t}),o=n.userTasks.filter(i=>i.actualOwnerId===s.userId);return n.userTasks=o,(0,p.mapUserTaskList)(n)}async function Fe(e,t,s){await r.userTasks.reserveUserTaskInstance(e,t,s||e.userId)}async function ve(e,t){await r.userTasks.cancelUserTaskInstanceReservation(e,t)}async function Oe(e,t){let s=e||await a(),n=await r.userTasks.query({state:f.DataModels.FlowNodeInstances.FlowNodeInstanceState.suspended},{identity:s,...t}),o=n.userTasks.filter(i=>i.assignedUserIds?.includes(s.userId));return n.userTasks=o,(0,p.mapUserTaskList)(n)}var w=require("next/dist/shared/lib/constants");var ne=!1,A=!1;function Be(e={}){let{applicationSdk:t,...s}=e;return async(n,o)=>{A=A||n===w.PHASE_PRODUCTION_BUILD;let i=n===w.PHASE_DEVELOPMENT_SERVER||n===w.PHASE_PRODUCTION_SERVER;return t?.useExternalTasks&&i&&!ne&&!A&&(ne=!0,await H(t?.customExternalTasksDirPath)),{...s,experimental:{...s.experimental,serverComponentsExternalPackages:[...s.experimental?.serverComponentsExternalPackages||[],"esbuild"]}}}}var re=require("next/cache"),oe=require("next/navigation");function Ae(e){(0,re.revalidatePath)(e),(0,oe.redirect)(e)}async function De(...e){return await r.processModels.startProcessInstance(...e)}async function D(...e){await r.manualTasks.finishManualTask(...e)}async function L(...e){await r.userTasks.finishUserTask(...e)}async function M(...e){await r.untypedTasks.finishTask(...e)}var ie=require("@5minds/processcube_engine_client");async function Le(){try{return a()}catch{return}}var Me=async(e,t)=>{let s=await Le();t==="bpmn:UserTask"?await L(e,{},s):t==="bpmn:ManualTask"?await D(e,s):t==="bpmn:Task"?await M(e,s):console.error(`[@5minds/processcube_app_sdk:handlePlay] Unsupported flow node type: ${t}`)},We=async e=>{await B(e)},qe=async(e,t,s)=>{await O(e,t,s)},Ke=async e=>U(e),Ge=async e=>F(e,{sortSettings:{sortBy:ie.DataModels.FlowNodeInstances.FlowNodeInstanceSortableColumns.createdAt,sortDir:"DESC"}}),Xe=async e=>v(e);0&&(module.exports={cancelReservedUserTask,finishManualTask,finishTask,finishUntypedTask,finishUserTask,finishUserTaskAndGetNext,getActiveProcessInstances,getAssignedUserTasksByIdentity,getEngineClient,getFlowNodeInstances,getFlowNodeInstancesByProcessInstanceId,getFlowNodeInstancesTriggeredByFlowNodeInstanceIds,getIdentity,getProcessInstance,getProcessInstanceById,getReservedUserTasksByIdentity,getTriggeredFlowNodeInstances,getUserTasks,getWaitingUserTaskByFlowNodeInstanceId,getWaitingUserTasks,getWaitingUserTasksByCorrelationId,getWaitingUserTasksByFlowNodeId,getWaitingUserTasksByProcessInstanceId,navigateToUrl,reserveUserTask,retryProcess,retryProcessInstance,startProcess,terminateProcess,terminateProcessInstance,waitForProcessEnd,waitForUserTask,withApplicationSdk});