@blue-labs/document-processor 1.28.0 → 1.30.0
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/BlueDocumentProcessor.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.mjs +156 -137
- package/dist/processors/ChannelEventCheckpointProcessor.d.ts +1 -0
- package/dist/processors/ChannelEventCheckpointProcessor.d.ts.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/document.d.ts +8 -1
- package/dist/utils/document.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlueDocumentProcessor.d.ts","sourceRoot":"","sources":["../src/BlueDocumentProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,YAAY,EAEZ,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAmBjB,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C;;;;;GAKG;AACH,qBAAa,qBAAqB;IAc9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD;;;;OAIG;gBAEgB,IAAI,EAAE,IAAI,EAC3B,UAAU,GAAE,iBAAiB,EAAsB;IAkBrD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzD;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuBnE;;;;;;OAMG;IACG,aAAa,CACjB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,OAAO,CAAC,gBAAgB,CAAC;IA8B5B;;OAEG;YACW,UAAU;
|
|
1
|
+
{"version":3,"file":"BlueDocumentProcessor.d.ts","sourceRoot":"","sources":["../src/BlueDocumentProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,YAAY,EAEZ,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAmBjB,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C;;;;;GAKG;AACH,qBAAa,qBAAqB;IAc9B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD;;;;OAIG;gBAEgB,IAAI,EAAE,IAAI,EAC3B,UAAU,GAAE,iBAAiB,EAAsB;IAkBrD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIzD;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuBnE;;;;;;OAMG;IACG,aAAa,CACjB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,OAAO,CAAC,gBAAgB,CAAC;IA8B5B;;OAEG;YACW,UAAU;CAsFzB"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";var ye=Object.defineProperty;var ge=(s,e,t)=>e in s?ye(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var l=(s,e,t)=>ge(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@blue-repository/core-dev"),m=require("@blue-labs/language"),T=require("@blue-labs/shared-utils"),P=require("@blue-repository/myos-dev"),Ee=(s,e)=>({on:(t,n)=>({end:()=>n(null)})});async function we(s){return new Promise((e,t)=>{Ee().on("error",t).end()})}const S=(...s)=>s.map((e,t)=>{if(typeof e!="string")return"";if(t===0&&e==="/")return"/";const n=t>0?e.replace(/^\/+/,""):e;return t<s.length-1?n.replace(/\/+$/,""):n}).filter(Boolean).join("/").replace(/\/{2,}/g,"/");class K{constructor(e,t,n,o){l(this,"actions",[]);this.getDocument=e,this.taskInfo=t,this.blue=n,this.onFlush=o}get(e){const t=this.getDocument(),n=S(this.taskInfo.nodePath,e);return t.get(n)}addPatch(e){this.actions.push({kind:"patch",patch:{...e,path:S(this.taskInfo.nodePath,e.path)}})}emitEvent(e){const t=this.taskInfo.event,n=t.trace??[],o={...e,originNodePath:e.originNodePath??this.taskInfo.nodePath,rootEvent:e.rootEvent??t.rootEvent??t,trace:[...n]};this.actions.push({kind:"event",event:o})}async flush(){var t;if(!this.actions.length)return[];const e=[...this.actions];return this.actions.length=0,await((t=this.onFlush)==null?void 0:t.call(this,e)),e}getNodePath(){return this.taskInfo.nodePath}resolvePath(e){return S(this.taskInfo.nodePath,e)}getTaskInfo(){return this.taskInfo}getBlue(){return this.blue}loadExternalModule(e){if(!/^https?:\/\//.test(e))throw new Error("Only http/https URLs are allowed");return we()}loadBlueContent(e){throw new Error("Not implemented")}}class A extends Error{constructor(e,t){super(`Cannot apply patch ${JSON.stringify(e)}`),this.patch=e,this.cause=t,this.name="PatchApplicationError"}}class x extends Error{constructor(e,t,n){super(`Patch ${JSON.stringify(e)} touches "${e.op==="move"||e.op==="copy"?`${e.from} → ${e.path}`:e.path}" which is inside embedded document "${t}" (Process Embedded @ "${n}")`),this.patch=e,this.offendingPath=t,this.contractNodePath=n,this.name="EmbeddedDocumentModificationError"}}class M extends Error{constructor(e,t){super(`Failed to evaluate expression "${e}"`),this.code=e,this.cause=t,this.name="ExpressionEvaluationError"}}class q extends Error{constructor(e,t){super(`Failed to evaluate code block "${e}"`),this.code=e,this.cause=t,this.name="CodeBlockEvaluationError"}}function N(s){return T.deepFreeze(s)}function B(s){return s.clone()}function j(s,e,t="/",n=[]){const o=s.getContracts()??{};for(const[r,a]of Object.entries(o))if(m.BlueNodeTypeSchema.isTypeOf(a,d.ProcessEmbeddedSchema)){const h=e.nodeToSchemaOutput(a,d.ProcessEmbeddedSchema).paths??[];for(const u of h)n.push({absPath:S(t,u),contractPath:S(t,`contracts/${r}`)})}for(const[r,a]of Object.entries(s.getProperties()??{}))j(a,e,S(t,r),n);return n}function J(s,e){return s===e||s.startsWith(e.endsWith("/")?e:e+"/")}function _(s,e){if(!e.length)return s;let t=B(s);for(const n of e)try{t=m.applyBlueNodePatch(t,n,!0)}catch(o){throw new A(n,o)}return N(t)}function y(s){return s!=null}function C(s){return s instanceof m.BlueNode}class ve{constructor(e=[],t=(n,o)=>n<o?-1:n>o?1:0){l(this,"data");l(this,"length");l(this,"compare");if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let n=(this.length>>1)-1;n>=0;n--)this._down(n)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(this.length===0)return;const e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){const{data:t,compare:n}=this,o=t[e];for(;e>0;){const r=e-1>>1,a=t[r];if(n(o,a)>=0)break;t[e]=a,e=r}t[e]=o}_down(e){const{data:t,compare:n}=this,o=this.length>>1,r=t[e];for(;e<o;){let a=(e<<1)+1;const c=a+1;if(c<this.length&&n(t[c],t[a])<0&&(a=c),n(t[a],r)>=0)break;t[e]=t[a],e=a}t[e]=r}}const Se=(s,e,t,n,o,r)=>[-s,e,t,n,o,r],be=(s,e)=>{for(let t=0;t<s.key.length;t++){const n=s.key[t],o=e.key[t];if(n!==o)return typeof n=="number"&&typeof o=="number"?n-o:typeof n=="string"&&typeof o=="string"?n.localeCompare(o):0}return 0};class Pe{constructor(){l(this,"queue");this.queue=new ve([],be)}push(e){this.queue.push(e)}pop(){return this.queue.pop()}get length(){return this.queue.length}}class Te{constructor(e=[]){l(this,"processors",new Map);l(this,"typeOrder",new Map);e.forEach((t,n)=>this.register(t,n))}register(e,t){if(this.processors.has(e.contractBlueId))throw new Error(`Processor for ${e.contractType} already registered`);this.processors.set(e.contractBlueId,e),this.typeOrder.has(e.contractBlueId)||this.typeOrder.set(e.contractBlueId,t??this.typeOrder.size)}get(e){if(!e)return;const t=e.getBlueId();if(t)return this.processors.get(t)}orderOf(e){if(!e)return 0;const t=e.getBlueId();return t?this.typeOrder.get(t)??0:0}values(){return this.processors.values()}}class Ce{constructor(){l(this,"isEnabled");this.isEnabled=process.env.TRACE_BLUE_ENABLED==="true"}makeHop(e,t){return`${e}#${t}`}shouldTrace(){return this.isEnabled}addHop(e,t,n){if(!this.shouldTrace())return{...e};const o=[...e.trace??[],this.makeHop(t,n)];return{...e,trace:o}}getTrace(e){return e.trace??[]}clearTrace(e){return{...e,trace:[]}}isTracingEnabled(){return this.isEnabled}}const ke=64;class Ie{constructor(e,t,n,o,r){l(this,"traceManager");this.blue=e,this.registry=t,this.queue=n,this.getNextTaskId=o,this.getNextEventSeq=r,this.traceManager=new Ce}async route(e,t,n,o,r=0){var i;if(n.seq===void 0&&(n.seq=this.getNextEventSeq()),t.length===0){if(n.dispatchPath){const h=n.dispatchPath.split("/").filter(Boolean),u={...n};return delete u.dispatchPath,this.route(e,h,u,o,r)}if(n.source==="channel"&&n.originNodePath&&n.originNodePath!=="/"){const h=((i=n.originNodePath)==null?void 0:i.split("/").filter(Boolean))??[];return this.route(e,h,n,o,r)}}const a=S("/",t.join("/")),c=e.get(a);C(c)&&await this.traverseContracts({doc:e,node:c,nodePath:a,event:n,afterTaskId:o,pathSegments:t,inlineDepth:r})}async traverseContracts(e){const{doc:t,node:n,nodePath:o,event:r,afterTaskId:a,pathSegments:c,inlineDepth:i}=e;if(!this.shouldSkipForChannel(r,o))for(const[h,u]of Object.entries(n.getContracts()??{})){if(!u.getType())continue;const p=this.registry.get(u.getType());if(!p){console.warn(`No processor registered for contract: ${h}`);continue}const f={nodePath:o,contractName:h,contractNode:u,event:r},g=new K(()=>t,f,this.blue);if(p.supports(r,u,g,h))switch(p.role){case"adapter":await this.processAdapter({cp:p,event:r,contractNode:u,ctx:g,contractName:h,doc:t,afterTaskId:a,inlineDepth:i});break;case"handler":this.scheduleHandler({contractNode:u,contractName:h,nodePath:o,event:r,depth:c.length,afterTaskId:a});break}}}async processAdapter(e){var v;const{cp:t,event:n,contractNode:o,ctx:r,contractName:a,doc:c,afterTaskId:i,inlineDepth:h}=e;if(h>=ke)throw new Error("Adapter recursion limit reached");const u=this.traceManager.addHop(n,((v=r.getTaskInfo())==null?void 0:v.nodePath)??"",a);await t.handle(u,o,r,a);const p=await r.flush();if(p.find(b=>b.kind==="patch"))throw new Error(`Contract "${a}" (adapter) attempted to patch the document`);const g=p.filter(b=>b.kind==="event");for(const b of g)await this.route(c,[],b.event,i,h+1)}scheduleHandler(e){const{contractNode:t,contractName:n,nodePath:o,event:r,depth:a,afterTaskId:c}=e,i=t.getType();if(!i){console.warn(`Contract node type is not defined for: ${n}`);return}const h=this.registry.orderOf(i),u=t.get("/order"),p=m.isBigNumber(u)?u.toNumber():0,f=this.getNextTaskId()+c,g=Se(a,r.seq,h,p,n,f),v=this.traceManager.addHop(r,o,n);this.queue.push({key:g,nodePath:o,contractName:n,contractNode:t,event:v})}shouldSkipForChannel(e,t){return e.source==="channel"&&!!e.originNodePath&&e.originNodePath!==t}}const Ne=(s,e,t)=>{(t instanceof A||t instanceof x)&&console.error(`[Blue] Failed to apply patches for contract "${s}" on event ${JSON.stringify(e)}`,t)};function U(s,e){const t=B(s),n=o=>{if(!C(o))return;const r=o.getContracts();(!(r!=null&&r.checkpoint)||!m.BlueNodeTypeSchema.isTypeOf(r.checkpoint,d.ChannelEventCheckpointSchema))&&o.addContract("checkpoint",e.jsonValueToNode({type:{name:"Channel Event Checkpoint",blueId:d.blueIds["Channel Event Checkpoint"]},lastEvents:{}}))};n(t);for(const{absPath:o}of j(t,e)){const r=t.get(o);C(r)&&n(r)}return N(t)}function Be(s,e){const t=B(s);return C(t)&&(X(t,e)||t.addContract("initialized",e.jsonValueToNode({type:{name:"Initialized Marker",blueId:d.blueIds["Initialized Marker"]}}))),N(t)}function X(s,e){const t=s.getContracts();return Object.values(t??{}).some(n=>e.isTypeOf(n,d.InitializedMarkerSchema,{checkSchemaExtensions:!0}))}class Y{constructor(e){l(this,"contractType","Channel Event Checkpoint");l(this,"contractBlueId",d.blueIds["Channel Event Checkpoint"]);l(this,"role","handler");this.cache=e}supports(e){var t,n;return e.source==="channel"&&((t=e.rootEvent)==null?void 0:t.payload)===e.payload&&((n=e.rootEvent)==null?void 0:n.source)==="external"}async handle(e,t,n){var a;if(!e.channelName||!((a=e.rootEvent)!=null&&a.seq))return;const o=await n.getBlue().calculateBlueId(e.rootEvent.payload),r=n.getNodePath().replace(/\/contracts\/checkpoint$/,"");this.cache.record(r,e,o)}}const F=(s,e)=>s.get(e)!==void 0;class Oe{constructor(){l(this,"firstSeen",new Map)}record(e,t,n){const o=e;this.firstSeen.has(o)||this.firstSeen.set(o,{docBase:e,event:t,eventBlueId:n})}flush(e){const t=[];for(const{docBase:n,event:o,eventBlueId:r}of this.firstSeen.values()){if(!o.channelName)continue;const a=S(n,"contracts/checkpoint/lastEvents",o.channelName),c=`${a}/blueId`;F(e,a)?t.push({op:F(e,c)?"replace":"add",path:c,val:r}):t.push({op:"add",path:a,val:{blueId:r}})}return t}clear(){this.firstSeen.clear()}}class k{constructor(){l(this,"role","adapter")}baseSupports(e){return e.source!=="channel"}}class Z extends k{constructor(){super(...arguments);l(this,"contractType","Composite Timeline Channel");l(this,"contractBlueId",d.blueIds["Composite Timeline Channel"])}supports(t,n,o){const r=o.getBlue().nodeToSchemaOutput(n,d.CompositeTimelineChannelSchema);return!r.channels||!t.channelName?!1:r.channels.includes(t.channelName)}handle(t,n,o,r){o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}}class G extends k{constructor(){super(...arguments);l(this,"contractType","Document Update Channel");l(this,"contractBlueId",d.blueIds["Document Update Channel"])}supports(t,n,o,r){if(!this.baseSupports(t))return!1;const a=o.getBlue().nodeToSchemaOutput(n,d.DocumentUpdateChannelSchema),c=t.payload.get("/path");if(!c||t.channelName===r)return!1;const i=a.path;return T.isNonNullable(i)&&c===o.resolvePath(i)}handle(t,n,o,r){const a=t.payload;a&&o.emitEvent({payload:a,channelName:r,source:"channel"})}}class ee extends k{constructor(){super(...arguments);l(this,"contractType","Embedded Node Channel");l(this,"contractBlueId",d.blueIds["Embedded Node Channel"])}supports(t,n,o){if(!this.baseSupports(t))return!1;const r=o.getBlue().nodeToSchemaOutput(n,d.EmbeddedNodeChannelSchema);return y(t.originNodePath)&&y(r.path)&&t.originNodePath===o.resolvePath(r.path)}handle(t,n,o,r){const a=o.getBlue().nodeToSchemaOutput(n,d.EmbeddedNodeChannelSchema),{originNodePath:c,payload:i}=t;y(a.path)&&c===o.resolvePath(a.path)&&o.emitEvent({payload:i,channelName:r,source:"channel"})}}class te{constructor(){l(this,"contractType","Initialized Marker");l(this,"contractBlueId",d.blueIds["Initialized Marker"]);l(this,"role","marker")}supports(){return!1}handle(){}}class ne extends k{constructor(){super(...arguments);l(this,"contractType","Lifecycle Event Channel");l(this,"contractBlueId",d.blueIds["Lifecycle Event Channel"])}supports(t,n,o){return!this.baseSupports(t)||!this.isLifecycleEvent(t,o)?!1:this.isEventPatternMatch(t,n,o)}handle(t,n,o,r){o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}isLifecycleEvent(t,n){const o=n.getBlue(),r=t.payload;return o.isTypeOf(r,d.LifecycleEventSchema,{checkSchemaExtensions:!0})}isEventPatternMatch(t,n,o){var a;const r=(a=n.getProperties())==null?void 0:a.event;if(!r)return!0;try{const c=o.getBlue(),i=c.nodeToJson(t.payload),h=c.nodeToJson(r);return T.deepContains(i,h)}catch(c){return console.warn("Error during lifecycle event pattern matching:",c),!1}}}const L=(s,e)=>{const t=e.getBlue();return t.isTypeOf(s.payload,d.TimelineEntrySchema)||t.isTypeOf(s.payload,P.MyOSTimelineEntrySchema)};class oe extends k{constructor(){super(...arguments);l(this,"contractType","MyOS Timeline Channel");l(this,"contractBlueId",P.blueIds["MyOS Timeline Channel"])}supports(t,n,o){var f;if(!this.baseSupports(t)||!L(t,o))return!1;const a=o.getBlue().nodeToSchemaOutput(t.payload,P.MyOSTimelineEntrySchema),c=o.getBlue().nodeToSchemaOutput(n,P.MyOSTimelineChannelSchema),i=(f=a.timeline)==null?void 0:f.timelineId,h=y(c.timelineId)&&y(i),u=y(c.account)&&y(a.account),p=y(c.email)&&y(a.email);return h&&i===c.timelineId||u&&a.account===c.account||p&&a.email===c.email}handle(t,n,o,r){L(t,o)&&o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}}class re extends k{constructor(){super(...arguments);l(this,"contractType","MyOS Agent Channel");l(this,"contractBlueId",P.blueIds["MyOS Agent Channel"])}supports(t,n,o){if(!this.baseSupports(t))return!1;try{const{myosAgentEvent:r,myosAgentChannel:a}=this.parseEventAndChannel(t,n,o);return this.isAgentMatch(r,a)&&this.isEventPatternMatch(r,a,o)}catch(r){return console.warn("Error in MyOSAgentChannelProcessor.supports:",r),!1}}handle(t,n,o,r){o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}parseEventAndChannel(t,n,o){const r=o.getBlue(),a=r.nodeToSchemaOutput(t.payload,P.MyOSAgentEventSchema),c=r.nodeToSchemaOutput(n,P.MyOSAgentChannelSchema);return{myosAgentEvent:a,myosAgentChannel:c}}isAgentMatch(t,n){var a;const o=t.agentId,r=(a=n.agent)==null?void 0:a.agentId;return y(o)&&y(r)&&o===r}isEventPatternMatch(t,n,o){const r=n.event;if(!r)return!0;const a=t.event;if(!a)return!1;try{const c=o.getBlue(),i=c.nodeToJson(a),h=c.nodeToJson(r);return T.deepContains(i,h)}catch(c){return console.warn("Error during event pattern matching:",c),!1}}}class ae{constructor(){l(this,"contractType","Operation");l(this,"contractBlueId",d.blueIds.Operation);l(this,"role","adapter")}supports(e,t,n,o){const a=n.getBlue().nodeToSchemaOutput(t,d.OperationSchema),c=this.parseEventPayload(e,n);return y(c==null?void 0:c.operation)&&c.operation===o&&e.source==="channel"&&e.channelName===a.channel}async handle(e,t,n,o){n.emitEvent({payload:e.payload,channelName:o,source:"channel"})}parseEventPayload(e,t){const n=t.getBlue();if(n.isTypeOf(e.payload,d.TimelineEntrySchema,{checkSchemaExtensions:!0})){const o=n.nodeToSchemaOutput(e.payload,d.TimelineEntrySchema);if(o.message)return n.nodeToSchemaOutput(o.message,d.OperationRequestSchema)}return null}}class se{constructor(){l(this,"contractType","Process Embedded");l(this,"role","adapter");l(this,"contractBlueId",d.blueIds["Process Embedded"])}supports(e){return e.source!=="channel"}handle(e,t,n){const o=n.getBlue().nodeToSchemaOutput(t,d.ProcessEmbeddedSchema);for(const r of o.paths??[])n.emitEvent({...e,dispatchPath:n.resolvePath(r)})}}const ce=!process.env.SKIP_ISOLATED_VM;let w=null;if(ce)try{w=require("isolated-vm")}catch{console.warn("isolated-vm not available, using fallback evaluation method")}function z(s){return/\bimport\s.+\sfrom\s+['"][^'"]+['"]/.test(s)||/\bexport\s+/.test(s)}class ${static async evaluate({code:e,ctx:t,bindings:n={},options:o={}}){return!w||!ce?this.evaluateSimple(e,n,o):this.evaluateSecure(e,n,t,o)}static async evaluateSimple(e,t,n={}){if(z(e))throw new Error("Static import/export syntax requires isolated-vm – start Node without SKIP_ISOLATED_VM.");try{if(n.isCodeBlock){const o=Object.keys(t);return await(await new Function(...o,`return async function codeBlock(${o.join(", ")}) { ${e} }`)(...o.map(c=>t[c])))(...o.map(c=>t[c]))}else return new Function(...Object.keys(t),`return ${e};`)(...Object.values(t))}catch(o){throw n.isCodeBlock?new q(e,o):new M(e,o)}}static async evaluateSecure(e,t,n,o={}){if(!w)throw new Error("isolated-vm not available");const r=new w.Isolate({memoryLimit:32}),a=await r.createContext(),c=a.global;try{await this.setupIsolateEnvironment(c,t);const i=new Map,h=this.createModuleResolver(r,a,i,n);let u;return z(e)?u=await this.evaluateESModule(r,a,e,o,h):u=await this.evaluateSimpleScript(r,a,e,t,o),this.deepClone(u)}catch(i){throw o.isCodeBlock?new q(e,i):new M(e,i)}finally{a.release(),r.dispose()}}static async setupIsolateEnvironment(e,t){if(!w)throw new Error("isolated-vm not available");const n=new w.Callback((...r)=>console.log(...r)),o=new w.ExternalCopy({log:n}).copyInto();await e.set("console",o);for(const[r,a]of Object.entries(t))typeof a=="function"?await e.set(r,new w.Callback(a)):await e.set(r,new w.ExternalCopy(a).copyInto())}static createModuleResolver(e,t,n,o){return async r=>{if(n.has(r))return n.get(r);if(r.startsWith("blue:")){const a=r.slice(5),c=o.loadBlueContent;if(typeof c!="function")throw new Error(`ProcessingContext is missing a loadBlueContent(blueId) implementation (needed for ${r})`);const i=await c(a),h=await e.compileModule(i);return n.set(r,h),await h.instantiate(t,this.createModuleResolver(e,t,n,o)),h}if(/^https?:\/\//.test(r)){let a;if(typeof o.loadExternalModule=="function")a=await o.loadExternalModule(r);else throw new Error(`ProcessingContext is missing a loadExternalModule(url) implementation (needed for ${r})`);const c=await e.compileModule(a);return n.set(r,c),await c.instantiate(t,this.createModuleResolver(e,t,n,o)),c}throw new Error(`Unsupported module specifier "${r}"`)}}static async evaluateSimpleScript(e,t,n,o,r){const a=Object.keys(o).join(", "),c=Object.keys(o).map(u=>u),i=`(async (${a}) => { ${r.isCodeBlock?n:`return (${n});`} })(${c.join(", ")})`;return await(await e.compileScript(i)).run(t,{timeout:r.timeout??500,promise:!0,copy:!0,release:!0})}static async evaluateESModule(e,t,n,o,r){let a=n;if(o.isCodeBlock){const h=/^\s*(import\s.+?;|export\s.+?;)/gm,u=(n.match(h)||[]).join(`
|
|
1
|
+
"use strict";var ye=Object.defineProperty;var ge=(s,e,t)=>e in s?ye(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var l=(s,e,t)=>ge(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@blue-repository/core-dev"),m=require("@blue-labs/language"),T=require("@blue-labs/shared-utils"),P=require("@blue-repository/myos-dev"),Ee=(s,e)=>({on:(t,n)=>({end:()=>n(null)})});async function we(s){return new Promise((e,t)=>{Ee().on("error",t).end()})}const S=(...s)=>s.map((e,t)=>{if(typeof e!="string")return"";if(t===0&&e==="/")return"/";const n=t>0?e.replace(/^\/+/,""):e;return t<s.length-1?n.replace(/\/+$/,""):n}).filter(Boolean).join("/").replace(/\/{2,}/g,"/");class K{constructor(e,t,n,o){l(this,"actions",[]);this.getDocument=e,this.taskInfo=t,this.blue=n,this.onFlush=o}get(e){const t=this.getDocument(),n=S(this.taskInfo.nodePath,e);return t.get(n)}addPatch(e){this.actions.push({kind:"patch",patch:{...e,path:S(this.taskInfo.nodePath,e.path)}})}emitEvent(e){const t=this.taskInfo.event,n=t.trace??[],o={...e,originNodePath:e.originNodePath??this.taskInfo.nodePath,rootEvent:e.rootEvent??t.rootEvent??t,trace:[...n]};this.actions.push({kind:"event",event:o})}async flush(){var t;if(!this.actions.length)return[];const e=[...this.actions];return this.actions.length=0,await((t=this.onFlush)==null?void 0:t.call(this,e)),e}getNodePath(){return this.taskInfo.nodePath}resolvePath(e){return S(this.taskInfo.nodePath,e)}getTaskInfo(){return this.taskInfo}getBlue(){return this.blue}loadExternalModule(e){if(!/^https?:\/\//.test(e))throw new Error("Only http/https URLs are allowed");return we()}loadBlueContent(e){throw new Error("Not implemented")}}class j extends Error{constructor(e,t){super(`Cannot apply patch ${JSON.stringify(e)}`),this.patch=e,this.cause=t,this.name="PatchApplicationError"}}class x extends Error{constructor(e,t,n){super(`Patch ${JSON.stringify(e)} touches "${e.op==="move"||e.op==="copy"?`${e.from} → ${e.path}`:e.path}" which is inside embedded document "${t}" (Process Embedded @ "${n}")`),this.patch=e,this.offendingPath=t,this.contractNodePath=n,this.name="EmbeddedDocumentModificationError"}}class q extends Error{constructor(e,t){super(`Failed to evaluate expression "${e}"`),this.code=e,this.cause=t,this.name="ExpressionEvaluationError"}}class $ extends Error{constructor(e,t){super(`Failed to evaluate code block "${e}"`),this.code=e,this.cause=t,this.name="CodeBlockEvaluationError"}}function N(s){return T.deepFreeze(s)}function B(s){return s.clone()}function M(s,e,t="/",n=[]){const o=s.getContracts()??{};for(const[r,a]of Object.entries(o))if(e.isTypeOf(a,d.ProcessEmbeddedSchema)){const h=e.nodeToSchemaOutput(a,d.ProcessEmbeddedSchema).paths??[];for(const u of h)n.push({absPath:S(t,u),contractPath:S(t,`contracts/${r}`)})}for(const[r,a]of Object.entries(s.getProperties()??{}))M(a,e,S(t,r),n);return n}function J(s,e){return s===e||s.startsWith(e.endsWith("/")?e:e+"/")}function _(s,e){if(!e.length)return s;let t=B(s);for(const n of e)try{t=m.applyBlueNodePatch(t,n,!0)}catch(o){throw new j(n,o)}return N(t)}function y(s){return s!=null}function C(s){return s instanceof m.BlueNode}class ve{constructor(e=[],t=(n,o)=>n<o?-1:n>o?1:0){l(this,"data");l(this,"length");l(this,"compare");if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let n=(this.length>>1)-1;n>=0;n--)this._down(n)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(this.length===0)return;const e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){const{data:t,compare:n}=this,o=t[e];for(;e>0;){const r=e-1>>1,a=t[r];if(n(o,a)>=0)break;t[e]=a,e=r}t[e]=o}_down(e){const{data:t,compare:n}=this,o=this.length>>1,r=t[e];for(;e<o;){let a=(e<<1)+1;const c=a+1;if(c<this.length&&n(t[c],t[a])<0&&(a=c),n(t[a],r)>=0)break;t[e]=t[a],e=a}t[e]=r}}const Se=(s,e,t,n,o,r)=>[-s,e,t,n,o,r],be=(s,e)=>{for(let t=0;t<s.key.length;t++){const n=s.key[t],o=e.key[t];if(n!==o)return typeof n=="number"&&typeof o=="number"?n-o:typeof n=="string"&&typeof o=="string"?n.localeCompare(o):0}return 0};class Pe{constructor(){l(this,"queue");this.queue=new ve([],be)}push(e){this.queue.push(e)}pop(){return this.queue.pop()}get length(){return this.queue.length}}class Te{constructor(e=[]){l(this,"processors",new Map);l(this,"typeOrder",new Map);e.forEach((t,n)=>this.register(t,n))}register(e,t){if(this.processors.has(e.contractBlueId))throw new Error(`Processor for ${e.contractType} already registered`);this.processors.set(e.contractBlueId,e),this.typeOrder.has(e.contractBlueId)||this.typeOrder.set(e.contractBlueId,t??this.typeOrder.size)}get(e){if(!e)return;const t=e.getBlueId();if(t)return this.processors.get(t)}orderOf(e){if(!e)return 0;const t=e.getBlueId();return t?this.typeOrder.get(t)??0:0}values(){return this.processors.values()}}class Ce{constructor(){l(this,"isEnabled");this.isEnabled=process.env.TRACE_BLUE_ENABLED==="true"}makeHop(e,t){return`${e}#${t}`}shouldTrace(){return this.isEnabled}addHop(e,t,n){if(!this.shouldTrace())return{...e};const o=[...e.trace??[],this.makeHop(t,n)];return{...e,trace:o}}getTrace(e){return e.trace??[]}clearTrace(e){return{...e,trace:[]}}isTracingEnabled(){return this.isEnabled}}const ke=64;class Ie{constructor(e,t,n,o,r){l(this,"traceManager");this.blue=e,this.registry=t,this.queue=n,this.getNextTaskId=o,this.getNextEventSeq=r,this.traceManager=new Ce}async route(e,t,n,o,r=0){var i;if(n.seq===void 0&&(n.seq=this.getNextEventSeq()),t.length===0){if(n.dispatchPath){const h=n.dispatchPath.split("/").filter(Boolean),u={...n};return delete u.dispatchPath,this.route(e,h,u,o,r)}if(n.source==="channel"&&n.originNodePath&&n.originNodePath!=="/"){const h=((i=n.originNodePath)==null?void 0:i.split("/").filter(Boolean))??[];return this.route(e,h,n,o,r)}}const a=S("/",t.join("/")),c=e.get(a);C(c)&&await this.traverseContracts({doc:e,node:c,nodePath:a,event:n,afterTaskId:o,pathSegments:t,inlineDepth:r})}async traverseContracts(e){const{doc:t,node:n,nodePath:o,event:r,afterTaskId:a,pathSegments:c,inlineDepth:i}=e;if(!this.shouldSkipForChannel(r,o))for(const[h,u]of Object.entries(n.getContracts()??{})){if(!u.getType())continue;const p=this.registry.get(u.getType());if(!p){console.warn(`No processor registered for contract: ${h}`);continue}const f={nodePath:o,contractName:h,contractNode:u,event:r},g=new K(()=>t,f,this.blue);if(p.supports(r,u,g,h))switch(p.role){case"adapter":await this.processAdapter({cp:p,event:r,contractNode:u,ctx:g,contractName:h,doc:t,afterTaskId:a,inlineDepth:i});break;case"handler":this.scheduleHandler({contractNode:u,contractName:h,nodePath:o,event:r,depth:c.length,afterTaskId:a});break}}}async processAdapter(e){var v;const{cp:t,event:n,contractNode:o,ctx:r,contractName:a,doc:c,afterTaskId:i,inlineDepth:h}=e;if(h>=ke)throw new Error("Adapter recursion limit reached");const u=this.traceManager.addHop(n,((v=r.getTaskInfo())==null?void 0:v.nodePath)??"",a);await t.handle(u,o,r,a);const p=await r.flush();if(p.find(b=>b.kind==="patch"))throw new Error(`Contract "${a}" (adapter) attempted to patch the document`);const g=p.filter(b=>b.kind==="event");for(const b of g)await this.route(c,[],b.event,i,h+1)}scheduleHandler(e){const{contractNode:t,contractName:n,nodePath:o,event:r,depth:a,afterTaskId:c}=e,i=t.getType();if(!i){console.warn(`Contract node type is not defined for: ${n}`);return}const h=this.registry.orderOf(i),u=t.get("/order"),p=m.isBigNumber(u)?u.toNumber():0,f=this.getNextTaskId()+c,g=Se(a,r.seq,h,p,n,f),v=this.traceManager.addHop(r,o,n);this.queue.push({key:g,nodePath:o,contractName:n,contractNode:t,event:v})}shouldSkipForChannel(e,t){return e.source==="channel"&&!!e.originNodePath&&e.originNodePath!==t}}const Ne=(s,e,t)=>{(t instanceof j||t instanceof x)&&console.error(`[Blue] Failed to apply patches for contract "${s}" on event ${JSON.stringify(e)}`,t)};function U(s,e){const t=B(s),n=o=>{if(!C(o))return;const r=o.getContracts();(!(r!=null&&r.checkpoint)||!m.BlueNodeTypeSchema.isTypeOf(r.checkpoint,d.ChannelEventCheckpointSchema))&&o.addContract("checkpoint",e.jsonValueToNode({type:{name:"Channel Event Checkpoint",blueId:d.blueIds["Channel Event Checkpoint"]},lastEvents:{}}))};n(t);for(const{absPath:o}of M(t,e)){const r=t.get(o);C(r)&&n(r)}return N(t)}function Be(s,e){const t=B(s);return C(t)&&(X(t,e)||t.addContract("initialized",e.jsonValueToNode({type:{name:"Initialized Marker",blueId:d.blueIds["Initialized Marker"]}}))),N(t)}function X(s,e){const t=s.getContracts();return Object.values(t??{}).some(n=>e.isTypeOf(n,d.InitializedMarkerSchema,{checkSchemaExtensions:!0}))}class Y{constructor(e){l(this,"contractType","Channel Event Checkpoint");l(this,"contractBlueId",d.blueIds["Channel Event Checkpoint"]);l(this,"role","handler");this.cache=e}supports(e){var t,n;return e.source==="channel"&&((t=e.rootEvent)==null?void 0:t.payload)===e.payload&&((n=e.rootEvent)==null?void 0:n.source)==="external"}async getEventBlueId(e,t){var o;const n=(o=e.rootEvent)==null?void 0:o.payload;if(!n)throw new Error("Cannot calculate blueId for checkpoint: missing root event payload");if(n instanceof m.ResolvedBlueNode){const r=n.getMinimalNode();return await t.getBlue().calculateBlueId(r)}return await t.getBlue().calculateBlueId(n)}async handle(e,t,n){var a;if(!e.channelName||!((a=e.rootEvent)!=null&&a.seq))return;const o=await this.getEventBlueId(e,n),r=n.getNodePath().replace(/\/contracts\/checkpoint$/,"");this.cache.record(r,e,o)}}const F=(s,e)=>s.get(e)!==void 0;class Oe{constructor(){l(this,"firstSeen",new Map)}record(e,t,n){const o=e;this.firstSeen.has(o)||this.firstSeen.set(o,{docBase:e,event:t,eventBlueId:n})}flush(e){const t=[];for(const{docBase:n,event:o,eventBlueId:r}of this.firstSeen.values()){if(!o.channelName)continue;const a=S(n,"contracts/checkpoint/lastEvents",o.channelName),c=`${a}/blueId`;F(e,a)?t.push({op:F(e,c)?"replace":"add",path:c,val:r}):t.push({op:"add",path:a,val:{blueId:r}})}return t}clear(){this.firstSeen.clear()}}class k{constructor(){l(this,"role","adapter")}baseSupports(e){return e.source!=="channel"}}class Z extends k{constructor(){super(...arguments);l(this,"contractType","Composite Timeline Channel");l(this,"contractBlueId",d.blueIds["Composite Timeline Channel"])}supports(t,n,o){const r=o.getBlue().nodeToSchemaOutput(n,d.CompositeTimelineChannelSchema);return!r.channels||!t.channelName?!1:r.channels.includes(t.channelName)}handle(t,n,o,r){o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}}class G extends k{constructor(){super(...arguments);l(this,"contractType","Document Update Channel");l(this,"contractBlueId",d.blueIds["Document Update Channel"])}supports(t,n,o,r){if(!this.baseSupports(t))return!1;const a=o.getBlue().nodeToSchemaOutput(n,d.DocumentUpdateChannelSchema),c=t.payload.get("/path");if(!c||t.channelName===r)return!1;const i=a.path;return T.isNonNullable(i)&&c===o.resolvePath(i)}handle(t,n,o,r){const a=t.payload;a&&o.emitEvent({payload:a,channelName:r,source:"channel"})}}class ee extends k{constructor(){super(...arguments);l(this,"contractType","Embedded Node Channel");l(this,"contractBlueId",d.blueIds["Embedded Node Channel"])}supports(t,n,o){if(!this.baseSupports(t))return!1;const r=o.getBlue().nodeToSchemaOutput(n,d.EmbeddedNodeChannelSchema);return y(t.originNodePath)&&y(r.path)&&t.originNodePath===o.resolvePath(r.path)}handle(t,n,o,r){const a=o.getBlue().nodeToSchemaOutput(n,d.EmbeddedNodeChannelSchema),{originNodePath:c,payload:i}=t;y(a.path)&&c===o.resolvePath(a.path)&&o.emitEvent({payload:i,channelName:r,source:"channel"})}}class te{constructor(){l(this,"contractType","Initialized Marker");l(this,"contractBlueId",d.blueIds["Initialized Marker"]);l(this,"role","marker")}supports(){return!1}handle(){}}class ne extends k{constructor(){super(...arguments);l(this,"contractType","Lifecycle Event Channel");l(this,"contractBlueId",d.blueIds["Lifecycle Event Channel"])}supports(t,n,o){return!this.baseSupports(t)||!this.isLifecycleEvent(t,o)?!1:this.isEventPatternMatch(t,n,o)}handle(t,n,o,r){o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}isLifecycleEvent(t,n){const o=n.getBlue(),r=t.payload;return o.isTypeOf(r,d.LifecycleEventSchema,{checkSchemaExtensions:!0})}isEventPatternMatch(t,n,o){var a;const r=(a=n.getProperties())==null?void 0:a.event;if(!r)return!0;try{const c=o.getBlue(),i=c.nodeToJson(t.payload),h=c.nodeToJson(r);return T.deepContains(i,h)}catch(c){return console.warn("Error during lifecycle event pattern matching:",c),!1}}}const L=(s,e)=>{const t=e.getBlue();return t.isTypeOf(s.payload,d.TimelineEntrySchema)||t.isTypeOf(s.payload,P.MyOSTimelineEntrySchema)};class oe extends k{constructor(){super(...arguments);l(this,"contractType","MyOS Timeline Channel");l(this,"contractBlueId",P.blueIds["MyOS Timeline Channel"])}supports(t,n,o){var f;if(!this.baseSupports(t)||!L(t,o))return!1;const a=o.getBlue().nodeToSchemaOutput(t.payload,P.MyOSTimelineEntrySchema),c=o.getBlue().nodeToSchemaOutput(n,P.MyOSTimelineChannelSchema),i=(f=a.timeline)==null?void 0:f.timelineId,h=y(c.timelineId)&&y(i),u=y(c.account)&&y(a.account),p=y(c.email)&&y(a.email);return h&&i===c.timelineId||u&&a.account===c.account||p&&a.email===c.email}handle(t,n,o,r){L(t,o)&&o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}}class re extends k{constructor(){super(...arguments);l(this,"contractType","MyOS Agent Channel");l(this,"contractBlueId",P.blueIds["MyOS Agent Channel"])}supports(t,n,o){if(!this.baseSupports(t))return!1;try{const{myosAgentEvent:r,myosAgentChannel:a}=this.parseEventAndChannel(t,n,o);return this.isAgentMatch(r,a)&&this.isEventPatternMatch(r,a,o)}catch(r){return console.warn("Error in MyOSAgentChannelProcessor.supports:",r),!1}}handle(t,n,o,r){o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}parseEventAndChannel(t,n,o){const r=o.getBlue(),a=r.nodeToSchemaOutput(t.payload,P.MyOSAgentEventSchema),c=r.nodeToSchemaOutput(n,P.MyOSAgentChannelSchema);return{myosAgentEvent:a,myosAgentChannel:c}}isAgentMatch(t,n){var a;const o=t.agentId,r=(a=n.agent)==null?void 0:a.agentId;return y(o)&&y(r)&&o===r}isEventPatternMatch(t,n,o){const r=n.event;if(!r)return!0;const a=t.event;if(!a)return!1;try{const c=o.getBlue(),i=c.nodeToJson(a),h=c.nodeToJson(r);return T.deepContains(i,h)}catch(c){return console.warn("Error during event pattern matching:",c),!1}}}class ae{constructor(){l(this,"contractType","Operation");l(this,"contractBlueId",d.blueIds.Operation);l(this,"role","adapter")}supports(e,t,n,o){const a=n.getBlue().nodeToSchemaOutput(t,d.OperationSchema),c=this.parseEventPayload(e,n);return y(c==null?void 0:c.operation)&&c.operation===o&&e.source==="channel"&&e.channelName===a.channel}async handle(e,t,n,o){n.emitEvent({payload:e.payload,channelName:o,source:"channel"})}parseEventPayload(e,t){const n=t.getBlue();if(n.isTypeOf(e.payload,d.TimelineEntrySchema,{checkSchemaExtensions:!0})){const o=n.nodeToSchemaOutput(e.payload,d.TimelineEntrySchema);if(o.message)return n.nodeToSchemaOutput(o.message,d.OperationRequestSchema)}return null}}class se{constructor(){l(this,"contractType","Process Embedded");l(this,"role","adapter");l(this,"contractBlueId",d.blueIds["Process Embedded"])}supports(e){return e.source!=="channel"}handle(e,t,n){const o=n.getBlue().nodeToSchemaOutput(t,d.ProcessEmbeddedSchema);for(const r of o.paths??[])n.emitEvent({...e,dispatchPath:n.resolvePath(r)})}}const ce=!process.env.SKIP_ISOLATED_VM;let w=null;if(ce)try{w=require("isolated-vm")}catch{console.warn("isolated-vm not available, using fallback evaluation method")}function z(s){return/\bimport\s.+\sfrom\s+['"][^'"]+['"]/.test(s)||/\bexport\s+/.test(s)}class D{static async evaluate({code:e,ctx:t,bindings:n={},options:o={}}){return!w||!ce?this.evaluateSimple(e,n,o):this.evaluateSecure(e,n,t,o)}static async evaluateSimple(e,t,n={}){if(z(e))throw new Error("Static import/export syntax requires isolated-vm – start Node without SKIP_ISOLATED_VM.");try{if(n.isCodeBlock){const o=Object.keys(t);return await(await new Function(...o,`return async function codeBlock(${o.join(", ")}) { ${e} }`)(...o.map(c=>t[c])))(...o.map(c=>t[c]))}else return new Function(...Object.keys(t),`return ${e};`)(...Object.values(t))}catch(o){throw n.isCodeBlock?new $(e,o):new q(e,o)}}static async evaluateSecure(e,t,n,o={}){if(!w)throw new Error("isolated-vm not available");const r=new w.Isolate({memoryLimit:32}),a=await r.createContext(),c=a.global;try{await this.setupIsolateEnvironment(c,t);const i=new Map,h=this.createModuleResolver(r,a,i,n);let u;return z(e)?u=await this.evaluateESModule(r,a,e,o,h):u=await this.evaluateSimpleScript(r,a,e,t,o),this.deepClone(u)}catch(i){throw o.isCodeBlock?new $(e,i):new q(e,i)}finally{a.release(),r.dispose()}}static async setupIsolateEnvironment(e,t){if(!w)throw new Error("isolated-vm not available");const n=new w.Callback((...r)=>console.log(...r)),o=new w.ExternalCopy({log:n}).copyInto();await e.set("console",o);for(const[r,a]of Object.entries(t))typeof a=="function"?await e.set(r,new w.Callback(a)):await e.set(r,new w.ExternalCopy(a).copyInto())}static createModuleResolver(e,t,n,o){return async r=>{if(n.has(r))return n.get(r);if(r.startsWith("blue:")){const a=r.slice(5),c=o.loadBlueContent;if(typeof c!="function")throw new Error(`ProcessingContext is missing a loadBlueContent(blueId) implementation (needed for ${r})`);const i=await c(a),h=await e.compileModule(i);return n.set(r,h),await h.instantiate(t,this.createModuleResolver(e,t,n,o)),h}if(/^https?:\/\//.test(r)){let a;if(typeof o.loadExternalModule=="function")a=await o.loadExternalModule(r);else throw new Error(`ProcessingContext is missing a loadExternalModule(url) implementation (needed for ${r})`);const c=await e.compileModule(a);return n.set(r,c),await c.instantiate(t,this.createModuleResolver(e,t,n,o)),c}throw new Error(`Unsupported module specifier "${r}"`)}}static async evaluateSimpleScript(e,t,n,o,r){const a=Object.keys(o).join(", "),c=Object.keys(o).map(u=>u),i=`(async (${a}) => { ${r.isCodeBlock?n:`return (${n});`} })(${c.join(", ")})`;return await(await e.compileScript(i)).run(t,{timeout:r.timeout??500,promise:!0,copy:!0,release:!0})}static async evaluateESModule(e,t,n,o,r){let a=n;if(o.isCodeBlock){const h=/^\s*(import\s.+?;|export\s.+?;)/gm,u=(n.match(h)||[]).join(`
|
|
2
2
|
`),p=n.replace(h,"").trim();a=`
|
|
3
3
|
${u}
|
|
4
4
|
const run = function() {
|
|
5
5
|
${p}
|
|
6
6
|
};
|
|
7
7
|
export default run();
|
|
8
|
-
`}const c=await e.compileModule(a);return await c.instantiate(t,r),await c.evaluate({timeout:o.timeout??500,promise:!0,reference:!0,release:!0}),await c.namespace.get("default",{timeout:o.timeout??500,promise:!0,copy:!0,release:!0})}static deepClone(e){return typeof e>"u"?e:JSON.parse(JSON.stringify(e))}}class
|
|
8
|
+
`}const c=await e.compileModule(a);return await c.instantiate(t,r),await c.evaluate({timeout:o.timeout??500,promise:!0,reference:!0,release:!0}),await c.namespace.get("default",{timeout:o.timeout??500,promise:!0,copy:!0,release:!0})}static deepClone(e){return typeof e>"u"?e:JSON.parse(JSON.stringify(e))}}class A{static createStandardBindings(e,t,n){const o=e.getBlue(),r=o.nodeToJson(t.payload,"simple"),a=m.isBigNumber(r)?r.toNumber():r;return{document:c=>{const i=e.get(c);return m.isBigNumber(i)?i.toNumber():C(i)?o.nodeToJson(i,"original"):i},event:a,steps:n}}}function R(s,e){const{op:t,path:n,val:o,from:r}=s;if((t==="move"||t==="copy")&&!r)throw new Error(`${t} operation requires 'from' path`);if((t==="add"||t==="replace")&&o===void 0)throw new Error(`${t} operation requires 'val' property`);const a={type:"Document Update",op:t,path:n};return o!==void 0&&(a.val=o),r!==void 0&&(a.from=r),e.jsonValueToNode(a)}function Me(s){return s.jsonValueToNode({type:"Document Processing Initiated"})}const qe=/^\$\{(.*)\}$/,O=s=>typeof s!="string"?!1:qe.test(s),H=s=>{if(!O(s))throw new Error(`Invalid expression: ${s}`);return s.slice(2,-1)};class $e{constructor(){l(this,"stepType","Update Document")}supports(e){return m.BlueNodeTypeSchema.isTypeOf(e,d.UpdateDocumentSchema)}async execute(e,t,n,o,r){const a=n.getBlue();if(!m.BlueNodeTypeSchema.isTypeOf(e,d.UpdateDocumentSchema))return;const c=await this.evaluateChangeset(e.get("/changeset"),n,t,r),i=m.applyBlueNodePatch(e,{op:"replace",path:"/changeset",val:c}),h=n.getBlue().nodeToSchemaOutput(i,d.UpdateDocumentSchema);for(const u of h.changeset??[]){if(!u.path)continue;const p=u.val;if((u.op==="replace"||u.op==="add")&&T.isNonNullable(p)){const f=await this.evaluateChangeValue(p,n,t,r);n.addPatch({op:u.op,path:u.path,val:f}),n.emitEvent({payload:R({op:u.op,path:n.resolvePath(u.path),val:a.nodeToJson(f,"original")},a)})}u.op==="remove"&&(n.addPatch({op:u.op,path:u.path}),n.emitEvent({payload:R({op:u.op,path:n.resolvePath(u.path),val:null},a)}))}}async evaluateChangeset(e,t,n,o){const r=t.getBlue();if(O(e)){const a=H(e),c=await D.evaluate({code:a,ctx:t,bindings:A.createStandardBindings(t,n,o)});return r.jsonValueToNode(c??null)}if(C(e))return e;throw new Error("Invalid changeset: expected a string or document node")}async evaluateChangeValue(e,t,n,o){const r=e.getValue(),a=t.getBlue();if(O(r)){const c=H(r),i=await D.evaluate({code:c,ctx:t,bindings:A.createStandardBindings(t,n,o)});return a.jsonValueToNode(i??null)}return e}}class De{constructor(){l(this,"stepType","Trigger Event")}supports(e){return m.BlueNodeTypeSchema.isTypeOf(e,d.TriggerEventSchema)}async execute(e,t,n){const o=n.getBlue();if(!m.BlueNodeTypeSchema.isTypeOf(e,d.TriggerEventSchema))return;const r=o.nodeToSchemaOutput(e,d.TriggerEventSchema);r.event&&n.emitEvent({payload:r.event})}}class Ae{constructor(){l(this,"stepType","JavaScript Code")}supports(e){return m.BlueNodeTypeSchema.isTypeOf(e,d.JavaScriptCodeSchema)}async execute(e,t,n,o,r){if(!m.BlueNodeTypeSchema.isTypeOf(e,d.JavaScriptCodeSchema))return;const a=n.getBlue(),c=a.nodeToSchemaOutput(e,d.JavaScriptCodeSchema);if(!c.code)throw new Error("JavaScript code is required");const i=await D.evaluate({code:c.code,ctx:n,bindings:A.createStandardBindings(n,t,r),options:{isCodeBlock:!0,timeout:500}});if(i&&typeof i=="object"&&"events"in i){const h=i;if(Array.isArray(h.events))for(const u of h.events)n.emitEvent({payload:a.jsonValueToNode(u)})}return i}}const je=[new $e,new De,new Ae];class V{constructor(e=je){l(this,"contractType","Sequential Workflow");l(this,"contractBlueId",d.blueIds["Sequential Workflow"]);l(this,"role","handler");l(this,"executors",[]);this.executors=e}registerExecutor(e){this.executors.push(e)}supports(e,t,n){const a=n.getBlue().nodeToSchemaOutput(t,d.SequentialWorkflowSchema).channel;return e.source==="channel"&&e.channelName===a}async handle(e,t,n,o){var c;const r={},a=(c=t.getProperties())==null?void 0:c.steps.getItems();for(const[i,h]of(a??[]).entries()){const u=this.executors.find(f=>f.supports(h));if(!u)throw new Error(`Unsupported workflow step type "${h.getType()}"`);const p=await u.execute(h,e,n,o,r);if(p!==void 0){const f=h.getName(),g=typeof f=="string"?f:`Step${i+1}`;r[g]=p}await n.flush()}}}class ie{constructor(e){l(this,"contractType","Sequential Workflow Operation");l(this,"contractBlueId",d.blueIds["Sequential Workflow Operation"]);l(this,"role","handler");l(this,"sequentialWorkflowProcessor");this.sequentialWorkflowProcessor=e||new V}supports(e,t,n){const a=n.getBlue().nodeToSchemaOutput(t,d.SequentialWorkflowOperationSchema).operation,c=e.channelName;return e.source==="channel"&&T.isNonNullable(c)&&T.isNonNullable(a)&&c===a}async handle(e,t,n,o){try{await this.sequentialWorkflowProcessor.handle(e,t,n,o)}catch(r){throw console.error("Error in SequentialWorkflowOperationProcessor.handle:",r),r}}}const Q=s=>m.BlueNodeTypeSchema.isTypeOf(s.payload,d.TimelineEntrySchema);class le extends k{constructor(){super(...arguments);l(this,"contractType","Timeline Channel");l(this,"contractBlueId",d.blueIds["Timeline Channel"])}supports(t,n,o){var u;if(!this.baseSupports(t)||!Q(t))return!1;const a=o.getBlue().nodeToSchemaOutput(t.payload,d.TimelineEntrySchema),c=o.getBlue().nodeToSchemaOutput(n,d.TimelineChannelSchema),i=(u=a.timeline)==null?void 0:u.timelineId;return y(c.timelineId)&&y(i)&&i===c.timelineId}handle(t,n,o,r){Q(t)&&o.emitEvent({payload:t.payload,channelName:r,source:"channel"})}}const xe=[new se,new ee,new G,new le,new oe,new re,new Z,new ne,new ae,new V,new ie,new te];class Ve{constructor(e,t=xe){l(this,"taskCounter",0);l(this,"eventCounter",0);l(this,"registry");l(this,"queue");l(this,"router");l(this,"checkpointCache",new Oe);this.blue=e,this.registry=new Te(t),this.queue=new Pe,this.router=new Ie(this.blue,this.registry,this.queue,()=>++this.taskCounter,()=>++this.eventCounter),this.register(new Y(this.checkpointCache),9999)}register(e,t){this.registry.register(e,t)}async initialize(e){let t=U(N(e),this.blue);const n={payload:Me(this.blue)},o=[n.payload];await this.router.route(t,[],n,0);const r=await this.drainQueue(t);return t=r.state,o.push(...r.emitted),t=Be(t,this.blue),{state:B(t),emitted:o}}async processEvents(e,t){let n=U(N(e),this.blue);const o=[];if(!X(n,this.blue))throw new Error("Document is not initialized");for(const r of t)try{const a={payload:r,source:"external"};await this.router.route(n,[],a,0);const c=await this.drainQueue(n);n=c.state,o.push(...c.emitted);const i=this.checkpointCache.flush(n);i.length&&(n=_(n,i))}finally{this.checkpointCache.clear()}return{state:B(n),emitted:o}}async drainQueue(e){var a;let t=e;const n=[],o=1e4;let r=0;for(;this.queue.length;){if(++r>o)throw new Error("Possible cycle – too many iterations");const c=this.queue.pop(),{nodePath:i,contractName:h,contractNode:u,event:p}=c,f=t.get(i);if(!C(f)||!((a=f.getContracts())!=null&&a[h])||!u.getType())continue;const g=this.registry.get(u.getType());if(!g){console.warn(`No processor registered for contract: ${h}`);continue}const v=new K(()=>t,c,this.blue,async b=>{for(const E of b)if(E.kind==="patch"){const he=M(t,this.blue);for(const I of he){const de=E.patch.op==="move"||E.patch.op==="copy"?[E.patch.from,E.patch.path]:[E.patch.path],W=v.getNodePath(),pe=de.some(fe=>J(fe,I.absPath)),me=J(W,I.absPath);if(pe&&!me)throw new x(E.patch,I.absPath,W)}try{t=_(t,[E.patch])}catch(I){throw Ne(h,p,I),I}}else E.kind==="event"&&(n.push(E.event.payload),await this.router.route(t,[],E.event,c.key[5]))});await g.handle(p,u,v,h),await v.flush()}return{state:t,emitted:n}}}class ue{process(e,t){const n=t.getValue();if(O(n)){const o=t.clone();return o.setValue(n),o.setProperties(void 0),o.setItems(void 0),o.setType(void 0),o}return e}postProcess(e,t){const n=t.getValue();if(O(n)&&e.getValue()!==n&&n!==void 0){const o=e.clone();return o.setValue(n),o}return e}}const We=Object.freeze(Object.defineProperty({__proto__:null,ExpressionPreserver:ue},Symbol.toStringTag,{value:"Module"}));function Je(){return new m.MergingProcessors.SequentialMergingProcessor([new m.MergingProcessors.ValuePropagator,new ue,new m.MergingProcessors.TypeAssigner,new m.MergingProcessors.ListProcessor,new m.MergingProcessors.DictionaryProcessor,new m.MergingProcessors.BasicTypesVerifier])}exports.BlueDocumentProcessor=Ve;exports.ChannelEventCheckpointProcessor=Y;exports.CodeBlockEvaluationError=$;exports.CompositeTimelineChannelProcessor=Z;exports.DocumentUpdateChannelProcessor=G;exports.EmbeddedDocumentModificationError=x;exports.EmbeddedNodeChannelProcessor=ee;exports.ExpressionEvaluationError=q;exports.InitializedMarkerProcessor=te;exports.LifecycleEventChannelProcessor=ne;exports.MergingProcessors=We;exports.MyOSAgentChannelProcessor=re;exports.MyOSTimelineChannelProcessor=oe;exports.OperationProcessor=ae;exports.PatchApplicationError=j;exports.ProcessEmbeddedProcessor=se;exports.SequentialWorkflowOperationProcessor=ie;exports.SequentialWorkflowProcessor=V;exports.TimelineChannelProcessor=le;exports.collectEmbeddedPathSpecs=M;exports.createDefaultMergingProcessor=Je;
|
package/dist/index.mjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
var me = Object.defineProperty;
|
|
2
2
|
var ye = (s, e, t) => e in s ? me(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
|
|
3
3
|
var l = (s, e, t) => ye(s, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { ProcessEmbeddedSchema as D, ChannelEventCheckpointSchema as ge, blueIds as m, InitializedMarkerSchema as Ee, CompositeTimelineChannelSchema as we, DocumentUpdateChannelSchema as ve, EmbeddedNodeChannelSchema as _, LifecycleEventSchema as be, TimelineEntrySchema as N, OperationSchema as
|
|
5
|
-
import { applyBlueNodePatch as G,
|
|
6
|
-
import { deepFreeze as
|
|
7
|
-
import { blueIds as te, MyOSTimelineEntrySchema as ne, MyOSTimelineChannelSchema as Oe, MyOSAgentEventSchema as
|
|
8
|
-
const
|
|
4
|
+
import { ProcessEmbeddedSchema as D, ChannelEventCheckpointSchema as ge, blueIds as m, InitializedMarkerSchema as Ee, CompositeTimelineChannelSchema as we, DocumentUpdateChannelSchema as ve, EmbeddedNodeChannelSchema as _, LifecycleEventSchema as be, TimelineEntrySchema as N, OperationSchema as Pe, OperationRequestSchema as Te, UpdateDocumentSchema as $, TriggerEventSchema as q, JavaScriptCodeSchema as A, SequentialWorkflowSchema as Se, SequentialWorkflowOperationSchema as Ce, TimelineChannelSchema as ke } from "@blue-repository/core-dev";
|
|
5
|
+
import { applyBlueNodePatch as G, BlueNode as Ie, isBigNumber as x, BlueNodeTypeSchema as b, ResolvedBlueNode as Ne, MergingProcessors as k } from "@blue-labs/language";
|
|
6
|
+
import { deepFreeze as Be, isNonNullable as M, deepContains as ee } from "@blue-labs/shared-utils";
|
|
7
|
+
import { blueIds as te, MyOSTimelineEntrySchema as ne, MyOSTimelineChannelSchema as Oe, MyOSAgentEventSchema as Me, MyOSAgentChannelSchema as $e } from "@blue-repository/myos-dev";
|
|
8
|
+
const qe = (s, e) => ({
|
|
9
9
|
on: (t, n) => ({ end: () => n(null) })
|
|
10
10
|
});
|
|
11
|
-
async function
|
|
11
|
+
async function Ae(s) {
|
|
12
12
|
return new Promise((e, t) => {
|
|
13
|
-
|
|
13
|
+
qe().on("error", t).end();
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
|
-
const
|
|
16
|
+
const v = (...s) => s.map((e, t) => {
|
|
17
17
|
if (typeof e != "string") return "";
|
|
18
18
|
if (t === 0 && e === "/") return "/";
|
|
19
19
|
const n = t > 0 ? e.replace(/^\/+/, "") : e;
|
|
@@ -25,7 +25,7 @@ class oe {
|
|
|
25
25
|
this.getDocument = e, this.taskInfo = t, this.blue = n, this.onFlush = o;
|
|
26
26
|
}
|
|
27
27
|
get(e) {
|
|
28
|
-
const t = this.getDocument(), n =
|
|
28
|
+
const t = this.getDocument(), n = v(this.taskInfo.nodePath, e);
|
|
29
29
|
return t.get(n);
|
|
30
30
|
}
|
|
31
31
|
addPatch(e) {
|
|
@@ -33,7 +33,7 @@ class oe {
|
|
|
33
33
|
kind: "patch",
|
|
34
34
|
patch: {
|
|
35
35
|
...e,
|
|
36
|
-
path:
|
|
36
|
+
path: v(this.taskInfo.nodePath, e.path)
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
39
|
}
|
|
@@ -56,7 +56,7 @@ class oe {
|
|
|
56
56
|
return this.taskInfo.nodePath;
|
|
57
57
|
}
|
|
58
58
|
resolvePath(e) {
|
|
59
|
-
return
|
|
59
|
+
return v(this.taskInfo.nodePath, e);
|
|
60
60
|
}
|
|
61
61
|
getTaskInfo() {
|
|
62
62
|
return this.taskInfo;
|
|
@@ -68,7 +68,7 @@ class oe {
|
|
|
68
68
|
loadExternalModule(e) {
|
|
69
69
|
if (!/^https?:\/\//.test(e))
|
|
70
70
|
throw new Error("Only http/https URLs are allowed");
|
|
71
|
-
return
|
|
71
|
+
return Ae();
|
|
72
72
|
}
|
|
73
73
|
loadBlueContent(e) {
|
|
74
74
|
throw new Error("Not implemented");
|
|
@@ -97,30 +97,32 @@ class L extends Error {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
function I(s) {
|
|
100
|
-
return
|
|
100
|
+
return Be(s);
|
|
101
101
|
}
|
|
102
|
-
function
|
|
102
|
+
function B(s) {
|
|
103
103
|
return s.clone();
|
|
104
104
|
}
|
|
105
105
|
function W(s, e, t = "/", n = []) {
|
|
106
106
|
const o = s.getContracts() ?? {};
|
|
107
107
|
for (const [r, a] of Object.entries(o))
|
|
108
|
-
if (
|
|
109
|
-
a,
|
|
110
|
-
D
|
|
111
|
-
)) {
|
|
108
|
+
if (e.isTypeOf(a, D)) {
|
|
112
109
|
const h = e.nodeToSchemaOutput(
|
|
113
110
|
a,
|
|
114
111
|
D
|
|
115
112
|
).paths ?? [];
|
|
116
113
|
for (const u of h)
|
|
117
114
|
n.push({
|
|
118
|
-
absPath:
|
|
119
|
-
contractPath:
|
|
115
|
+
absPath: v(t, u),
|
|
116
|
+
contractPath: v(t, `contracts/${r}`)
|
|
120
117
|
});
|
|
121
118
|
}
|
|
122
119
|
for (const [r, a] of Object.entries(s.getProperties() ?? {}))
|
|
123
|
-
W(
|
|
120
|
+
W(
|
|
121
|
+
a,
|
|
122
|
+
e,
|
|
123
|
+
v(t, r),
|
|
124
|
+
n
|
|
125
|
+
);
|
|
124
126
|
return n;
|
|
125
127
|
}
|
|
126
128
|
function z(s, e) {
|
|
@@ -128,7 +130,7 @@ function z(s, e) {
|
|
|
128
130
|
}
|
|
129
131
|
function U(s, e) {
|
|
130
132
|
if (!e.length) return s;
|
|
131
|
-
let t =
|
|
133
|
+
let t = B(s);
|
|
132
134
|
for (const n of e)
|
|
133
135
|
try {
|
|
134
136
|
t = G(t, n, !0);
|
|
@@ -140,10 +142,10 @@ function U(s, e) {
|
|
|
140
142
|
function f(s) {
|
|
141
143
|
return s != null;
|
|
142
144
|
}
|
|
143
|
-
function
|
|
145
|
+
function T(s) {
|
|
144
146
|
return s instanceof Ie;
|
|
145
147
|
}
|
|
146
|
-
class
|
|
148
|
+
class De {
|
|
147
149
|
constructor(e = [], t = (n, o) => n < o ? -1 : n > o ? 1 : 0) {
|
|
148
150
|
l(this, "data");
|
|
149
151
|
l(this, "length");
|
|
@@ -182,14 +184,14 @@ class Ae {
|
|
|
182
184
|
t[e] = r;
|
|
183
185
|
}
|
|
184
186
|
}
|
|
185
|
-
const
|
|
187
|
+
const xe = (s, e, t, n, o, r) => [
|
|
186
188
|
-s,
|
|
187
189
|
e,
|
|
188
190
|
t,
|
|
189
191
|
n,
|
|
190
192
|
o,
|
|
191
193
|
r
|
|
192
|
-
],
|
|
194
|
+
], je = (s, e) => {
|
|
193
195
|
for (let t = 0; t < s.key.length; t++) {
|
|
194
196
|
const n = s.key[t], o = e.key[t];
|
|
195
197
|
if (n !== o)
|
|
@@ -197,13 +199,13 @@ const De = (s, e, t, n, o, r) => [
|
|
|
197
199
|
}
|
|
198
200
|
return 0;
|
|
199
201
|
};
|
|
200
|
-
class
|
|
202
|
+
class Ve {
|
|
201
203
|
/**
|
|
202
204
|
* Creates a new task queue with the task key comparator
|
|
203
205
|
*/
|
|
204
206
|
constructor() {
|
|
205
207
|
l(this, "queue");
|
|
206
|
-
this.queue = new
|
|
208
|
+
this.queue = new De([], je);
|
|
207
209
|
}
|
|
208
210
|
/**
|
|
209
211
|
* Adds a task to the queue
|
|
@@ -228,7 +230,7 @@ class je {
|
|
|
228
230
|
return this.queue.length;
|
|
229
231
|
}
|
|
230
232
|
}
|
|
231
|
-
class
|
|
233
|
+
class We {
|
|
232
234
|
/**
|
|
233
235
|
* Creates a new contract registry
|
|
234
236
|
*
|
|
@@ -283,7 +285,7 @@ class Ve {
|
|
|
283
285
|
return this.processors.values();
|
|
284
286
|
}
|
|
285
287
|
}
|
|
286
|
-
class
|
|
288
|
+
class Je {
|
|
287
289
|
constructor() {
|
|
288
290
|
l(this, "isEnabled");
|
|
289
291
|
this.isEnabled = process.env.TRACE_BLUE_ENABLED === "true";
|
|
@@ -350,8 +352,8 @@ class We {
|
|
|
350
352
|
return this.isEnabled;
|
|
351
353
|
}
|
|
352
354
|
}
|
|
353
|
-
const
|
|
354
|
-
class
|
|
355
|
+
const _e = 64;
|
|
356
|
+
class Fe {
|
|
355
357
|
/**
|
|
356
358
|
* Creates a new event router
|
|
357
359
|
*
|
|
@@ -362,7 +364,7 @@ class _e {
|
|
|
362
364
|
*/
|
|
363
365
|
constructor(e, t, n, o, r) {
|
|
364
366
|
l(this, "traceManager");
|
|
365
|
-
this.blue = e, this.registry = t, this.queue = n, this.getNextTaskId = o, this.getNextEventSeq = r, this.traceManager = new
|
|
367
|
+
this.blue = e, this.registry = t, this.queue = n, this.getNextTaskId = o, this.getNextEventSeq = r, this.traceManager = new Je();
|
|
366
368
|
}
|
|
367
369
|
/**
|
|
368
370
|
* Routes an event to matching contracts in the document
|
|
@@ -385,8 +387,8 @@ class _e {
|
|
|
385
387
|
return this.route(e, h, n, o, r);
|
|
386
388
|
}
|
|
387
389
|
}
|
|
388
|
-
const a =
|
|
389
|
-
|
|
390
|
+
const a = v("/", t.join("/")), c = e.get(a);
|
|
391
|
+
T(c) && await this.traverseContracts({
|
|
390
392
|
doc: e,
|
|
391
393
|
node: c,
|
|
392
394
|
nodePath: a,
|
|
@@ -456,7 +458,7 @@ class _e {
|
|
|
456
458
|
* Processes an adapter contract and routes any emitted events
|
|
457
459
|
*/
|
|
458
460
|
async processAdapter(e) {
|
|
459
|
-
var
|
|
461
|
+
var w;
|
|
460
462
|
const {
|
|
461
463
|
cp: t,
|
|
462
464
|
event: n,
|
|
@@ -467,22 +469,22 @@ class _e {
|
|
|
467
469
|
afterTaskId: i,
|
|
468
470
|
inlineDepth: h
|
|
469
471
|
} = e;
|
|
470
|
-
if (h >=
|
|
472
|
+
if (h >= _e)
|
|
471
473
|
throw new Error("Adapter recursion limit reached");
|
|
472
474
|
const u = this.traceManager.addHop(
|
|
473
475
|
n,
|
|
474
|
-
((
|
|
476
|
+
((w = r.getTaskInfo()) == null ? void 0 : w.nodePath) ?? "",
|
|
475
477
|
a
|
|
476
478
|
);
|
|
477
479
|
await t.handle(u, o, r, a);
|
|
478
480
|
const d = await r.flush();
|
|
479
|
-
if (d.find((
|
|
481
|
+
if (d.find((P) => P.kind === "patch"))
|
|
480
482
|
throw new Error(
|
|
481
483
|
`Contract "${a}" (adapter) attempted to patch the document`
|
|
482
484
|
);
|
|
483
|
-
const y = d.filter((
|
|
484
|
-
for (const
|
|
485
|
-
await this.route(c, [],
|
|
485
|
+
const y = d.filter((P) => P.kind === "event");
|
|
486
|
+
for (const P of y)
|
|
487
|
+
await this.route(c, [], P.event, i, h + 1);
|
|
486
488
|
}
|
|
487
489
|
/**
|
|
488
490
|
* Schedules a handler contract for future execution
|
|
@@ -493,20 +495,20 @@ class _e {
|
|
|
493
495
|
console.warn(`Contract node type is not defined for: ${n}`);
|
|
494
496
|
return;
|
|
495
497
|
}
|
|
496
|
-
const h = this.registry.orderOf(i), u = t.get("/order"), d = x(u) ? u.toNumber() : 0, p = this.getNextTaskId() + c, y =
|
|
498
|
+
const h = this.registry.orderOf(i), u = t.get("/order"), d = x(u) ? u.toNumber() : 0, p = this.getNextTaskId() + c, y = xe(
|
|
497
499
|
a,
|
|
498
500
|
r.seq,
|
|
499
501
|
h,
|
|
500
502
|
d,
|
|
501
503
|
n,
|
|
502
504
|
p
|
|
503
|
-
),
|
|
505
|
+
), w = this.traceManager.addHop(r, o, n);
|
|
504
506
|
this.queue.push({
|
|
505
507
|
key: y,
|
|
506
508
|
nodePath: o,
|
|
507
509
|
contractName: n,
|
|
508
510
|
contractNode: t,
|
|
509
|
-
event:
|
|
511
|
+
event: w
|
|
510
512
|
});
|
|
511
513
|
}
|
|
512
514
|
/**
|
|
@@ -516,17 +518,17 @@ class _e {
|
|
|
516
518
|
return e.source === "channel" && !!e.originNodePath && e.originNodePath !== t;
|
|
517
519
|
}
|
|
518
520
|
}
|
|
519
|
-
const
|
|
521
|
+
const Le = (s, e, t) => {
|
|
520
522
|
(t instanceof re || t instanceof ae) && console.error(
|
|
521
523
|
`[Blue] Failed to apply patches for contract "${s}" on event ${JSON.stringify(e)}`,
|
|
522
524
|
t
|
|
523
525
|
);
|
|
524
526
|
};
|
|
525
527
|
function R(s, e) {
|
|
526
|
-
const t =
|
|
527
|
-
if (!
|
|
528
|
+
const t = B(s), n = (o) => {
|
|
529
|
+
if (!T(o)) return;
|
|
528
530
|
const r = o.getContracts();
|
|
529
|
-
(!(r != null && r.checkpoint) || !
|
|
531
|
+
(!(r != null && r.checkpoint) || !b.isTypeOf(
|
|
530
532
|
r.checkpoint,
|
|
531
533
|
ge
|
|
532
534
|
)) && o.addContract(
|
|
@@ -543,13 +545,13 @@ function R(s, e) {
|
|
|
543
545
|
n(t);
|
|
544
546
|
for (const { absPath: o } of W(t, e)) {
|
|
545
547
|
const r = t.get(o);
|
|
546
|
-
|
|
548
|
+
T(r) && n(r);
|
|
547
549
|
}
|
|
548
550
|
return I(t);
|
|
549
551
|
}
|
|
550
|
-
function
|
|
551
|
-
const t =
|
|
552
|
-
return
|
|
552
|
+
function ze(s, e) {
|
|
553
|
+
const t = B(s);
|
|
554
|
+
return T(t) && (se(t, e) || t.addContract(
|
|
553
555
|
"initialized",
|
|
554
556
|
e.jsonValueToNode({
|
|
555
557
|
type: {
|
|
@@ -567,7 +569,7 @@ function se(s, e) {
|
|
|
567
569
|
})
|
|
568
570
|
);
|
|
569
571
|
}
|
|
570
|
-
class
|
|
572
|
+
class Ue {
|
|
571
573
|
constructor(e) {
|
|
572
574
|
l(this, "contractType", "Channel Event Checkpoint");
|
|
573
575
|
l(this, "contractBlueId", m["Channel Event Checkpoint"]);
|
|
@@ -578,15 +580,28 @@ class ze {
|
|
|
578
580
|
var t, n;
|
|
579
581
|
return e.source === "channel" && ((t = e.rootEvent) == null ? void 0 : t.payload) === e.payload && ((n = e.rootEvent) == null ? void 0 : n.source) === "external";
|
|
580
582
|
}
|
|
583
|
+
async getEventBlueId(e, t) {
|
|
584
|
+
var o;
|
|
585
|
+
const n = (o = e.rootEvent) == null ? void 0 : o.payload;
|
|
586
|
+
if (!n)
|
|
587
|
+
throw new Error(
|
|
588
|
+
"Cannot calculate blueId for checkpoint: missing root event payload"
|
|
589
|
+
);
|
|
590
|
+
if (n instanceof Ne) {
|
|
591
|
+
const r = n.getMinimalNode();
|
|
592
|
+
return await t.getBlue().calculateBlueId(r);
|
|
593
|
+
}
|
|
594
|
+
return await t.getBlue().calculateBlueId(n);
|
|
595
|
+
}
|
|
581
596
|
async handle(e, t, n) {
|
|
582
597
|
var a;
|
|
583
598
|
if (!e.channelName || !((a = e.rootEvent) != null && a.seq)) return;
|
|
584
|
-
const o = await
|
|
599
|
+
const o = await this.getEventBlueId(e, n), r = n.getNodePath().replace(/\/contracts\/checkpoint$/, "");
|
|
585
600
|
this.cache.record(r, e, o);
|
|
586
601
|
}
|
|
587
602
|
}
|
|
588
603
|
const H = (s, e) => s.get(e) !== void 0;
|
|
589
|
-
class
|
|
604
|
+
class Re {
|
|
590
605
|
constructor() {
|
|
591
606
|
l(this, "firstSeen", /* @__PURE__ */ new Map());
|
|
592
607
|
}
|
|
@@ -599,7 +614,7 @@ class Ue {
|
|
|
599
614
|
const t = [];
|
|
600
615
|
for (const { docBase: n, event: o, eventBlueId: r } of this.firstSeen.values()) {
|
|
601
616
|
if (!o.channelName) continue;
|
|
602
|
-
const a =
|
|
617
|
+
const a = v(
|
|
603
618
|
n,
|
|
604
619
|
"contracts/checkpoint/lastEvents",
|
|
605
620
|
o.channelName
|
|
@@ -632,7 +647,7 @@ class S {
|
|
|
632
647
|
return e.source !== "channel";
|
|
633
648
|
}
|
|
634
649
|
}
|
|
635
|
-
class
|
|
650
|
+
class He extends S {
|
|
636
651
|
constructor() {
|
|
637
652
|
super(...arguments);
|
|
638
653
|
l(this, "contractType", "Composite Timeline Channel");
|
|
@@ -650,7 +665,7 @@ class Re extends S {
|
|
|
650
665
|
});
|
|
651
666
|
}
|
|
652
667
|
}
|
|
653
|
-
class
|
|
668
|
+
class Qe extends S {
|
|
654
669
|
constructor() {
|
|
655
670
|
super(...arguments);
|
|
656
671
|
l(this, "contractType", "Document Update Channel");
|
|
@@ -672,7 +687,7 @@ class He extends S {
|
|
|
672
687
|
});
|
|
673
688
|
}
|
|
674
689
|
}
|
|
675
|
-
class
|
|
690
|
+
class Ke extends S {
|
|
676
691
|
constructor() {
|
|
677
692
|
super(...arguments);
|
|
678
693
|
l(this, "contractType", "Embedded Node Channel");
|
|
@@ -692,7 +707,7 @@ class Qe extends S {
|
|
|
692
707
|
});
|
|
693
708
|
}
|
|
694
709
|
}
|
|
695
|
-
class
|
|
710
|
+
class Xe {
|
|
696
711
|
constructor() {
|
|
697
712
|
l(this, "contractType", "Initialized Marker");
|
|
698
713
|
l(this, "contractBlueId", m["Initialized Marker"]);
|
|
@@ -704,7 +719,7 @@ class Ke {
|
|
|
704
719
|
handle() {
|
|
705
720
|
}
|
|
706
721
|
}
|
|
707
|
-
class
|
|
722
|
+
class Ye extends S {
|
|
708
723
|
constructor() {
|
|
709
724
|
super(...arguments);
|
|
710
725
|
l(this, "contractType", "Lifecycle Event Channel");
|
|
@@ -749,7 +764,7 @@ const Q = (s, e) => {
|
|
|
749
764
|
const t = e.getBlue();
|
|
750
765
|
return t.isTypeOf(s.payload, N) || t.isTypeOf(s.payload, ne);
|
|
751
766
|
};
|
|
752
|
-
class
|
|
767
|
+
class Ze extends S {
|
|
753
768
|
constructor() {
|
|
754
769
|
super(...arguments);
|
|
755
770
|
l(this, "contractType", "MyOS Timeline Channel");
|
|
@@ -772,7 +787,7 @@ class Ye extends S {
|
|
|
772
787
|
});
|
|
773
788
|
}
|
|
774
789
|
}
|
|
775
|
-
class
|
|
790
|
+
class Ge extends S {
|
|
776
791
|
constructor() {
|
|
777
792
|
super(...arguments);
|
|
778
793
|
l(this, "contractType", "MyOS Agent Channel");
|
|
@@ -805,10 +820,10 @@ class Ze extends S {
|
|
|
805
820
|
parseEventAndChannel(t, n, o) {
|
|
806
821
|
const r = o.getBlue(), a = r.nodeToSchemaOutput(
|
|
807
822
|
t.payload,
|
|
808
|
-
|
|
823
|
+
Me
|
|
809
824
|
), c = r.nodeToSchemaOutput(
|
|
810
825
|
n,
|
|
811
|
-
|
|
826
|
+
$e
|
|
812
827
|
);
|
|
813
828
|
return { myosAgentEvent: a, myosAgentChannel: c };
|
|
814
829
|
}
|
|
@@ -851,14 +866,14 @@ class Ze extends S {
|
|
|
851
866
|
}
|
|
852
867
|
}
|
|
853
868
|
}
|
|
854
|
-
class
|
|
869
|
+
class et {
|
|
855
870
|
constructor() {
|
|
856
871
|
l(this, "contractType", "Operation");
|
|
857
872
|
l(this, "contractBlueId", m.Operation);
|
|
858
873
|
l(this, "role", "adapter");
|
|
859
874
|
}
|
|
860
875
|
supports(e, t, n, o) {
|
|
861
|
-
const a = n.getBlue().nodeToSchemaOutput(t,
|
|
876
|
+
const a = n.getBlue().nodeToSchemaOutput(t, Pe), c = this.parseEventPayload(e, n);
|
|
862
877
|
return f(c == null ? void 0 : c.operation) && c.operation === o && e.source === "channel" && e.channelName === a.channel;
|
|
863
878
|
}
|
|
864
879
|
async handle(e, t, n, o) {
|
|
@@ -880,13 +895,13 @@ class Ge {
|
|
|
880
895
|
if (o.message)
|
|
881
896
|
return n.nodeToSchemaOutput(
|
|
882
897
|
o.message,
|
|
883
|
-
|
|
898
|
+
Te
|
|
884
899
|
);
|
|
885
900
|
}
|
|
886
901
|
return null;
|
|
887
902
|
}
|
|
888
903
|
}
|
|
889
|
-
class
|
|
904
|
+
class tt {
|
|
890
905
|
constructor() {
|
|
891
906
|
l(this, "contractType", "Process Embedded");
|
|
892
907
|
l(this, "role", "adapter");
|
|
@@ -1102,7 +1117,7 @@ class V {
|
|
|
1102
1117
|
return {
|
|
1103
1118
|
document: (c) => {
|
|
1104
1119
|
const i = e.get(c);
|
|
1105
|
-
return x(i) ? i.toNumber() :
|
|
1120
|
+
return x(i) ? i.toNumber() : T(i) ? o.nodeToJson(i, "original") : i;
|
|
1106
1121
|
},
|
|
1107
1122
|
event: a,
|
|
1108
1123
|
steps: n
|
|
@@ -1122,26 +1137,26 @@ function X(s, e) {
|
|
|
1122
1137
|
};
|
|
1123
1138
|
return o !== void 0 && (a.val = o), r !== void 0 && (a.from = r), e.jsonValueToNode(a);
|
|
1124
1139
|
}
|
|
1125
|
-
function
|
|
1140
|
+
function nt(s) {
|
|
1126
1141
|
return s.jsonValueToNode({
|
|
1127
1142
|
type: "Document Processing Initiated"
|
|
1128
1143
|
});
|
|
1129
1144
|
}
|
|
1130
|
-
const
|
|
1131
|
-
if (!
|
|
1145
|
+
const ot = /^\$\{(.*)\}$/, O = (s) => typeof s != "string" ? !1 : ot.test(s), Y = (s) => {
|
|
1146
|
+
if (!O(s))
|
|
1132
1147
|
throw new Error(`Invalid expression: ${s}`);
|
|
1133
1148
|
return s.slice(2, -1);
|
|
1134
1149
|
};
|
|
1135
|
-
class
|
|
1150
|
+
class rt {
|
|
1136
1151
|
constructor() {
|
|
1137
1152
|
l(this, "stepType", "Update Document");
|
|
1138
1153
|
}
|
|
1139
1154
|
supports(e) {
|
|
1140
|
-
return
|
|
1155
|
+
return b.isTypeOf(e, $);
|
|
1141
1156
|
}
|
|
1142
1157
|
async execute(e, t, n, o, r) {
|
|
1143
1158
|
const a = n.getBlue();
|
|
1144
|
-
if (!
|
|
1159
|
+
if (!b.isTypeOf(e, $)) return;
|
|
1145
1160
|
const c = await this.evaluateChangeset(
|
|
1146
1161
|
e.get("/changeset"),
|
|
1147
1162
|
n,
|
|
@@ -1191,7 +1206,7 @@ class ot {
|
|
|
1191
1206
|
}
|
|
1192
1207
|
async evaluateChangeset(e, t, n, o) {
|
|
1193
1208
|
const r = t.getBlue();
|
|
1194
|
-
if (
|
|
1209
|
+
if (O(e)) {
|
|
1195
1210
|
const a = Y(e), c = await j.evaluate({
|
|
1196
1211
|
code: a,
|
|
1197
1212
|
ctx: t,
|
|
@@ -1203,13 +1218,13 @@ class ot {
|
|
|
1203
1218
|
});
|
|
1204
1219
|
return r.jsonValueToNode(c ?? null);
|
|
1205
1220
|
}
|
|
1206
|
-
if (
|
|
1221
|
+
if (T(e))
|
|
1207
1222
|
return e;
|
|
1208
1223
|
throw new Error("Invalid changeset: expected a string or document node");
|
|
1209
1224
|
}
|
|
1210
1225
|
async evaluateChangeValue(e, t, n, o) {
|
|
1211
1226
|
const r = e.getValue(), a = t.getBlue();
|
|
1212
|
-
if (
|
|
1227
|
+
if (O(r)) {
|
|
1213
1228
|
const c = Y(r), i = await j.evaluate({
|
|
1214
1229
|
code: c,
|
|
1215
1230
|
ctx: t,
|
|
@@ -1224,31 +1239,31 @@ class ot {
|
|
|
1224
1239
|
return e;
|
|
1225
1240
|
}
|
|
1226
1241
|
}
|
|
1227
|
-
class
|
|
1242
|
+
class at {
|
|
1228
1243
|
constructor() {
|
|
1229
1244
|
l(this, "stepType", "Trigger Event");
|
|
1230
1245
|
}
|
|
1231
1246
|
supports(e) {
|
|
1232
|
-
return
|
|
1247
|
+
return b.isTypeOf(e, q);
|
|
1233
1248
|
}
|
|
1234
1249
|
async execute(e, t, n) {
|
|
1235
1250
|
const o = n.getBlue();
|
|
1236
|
-
if (!
|
|
1251
|
+
if (!b.isTypeOf(e, q)) return;
|
|
1237
1252
|
const r = o.nodeToSchemaOutput(e, q);
|
|
1238
1253
|
r.event && n.emitEvent({
|
|
1239
1254
|
payload: r.event
|
|
1240
1255
|
});
|
|
1241
1256
|
}
|
|
1242
1257
|
}
|
|
1243
|
-
class
|
|
1258
|
+
class st {
|
|
1244
1259
|
constructor() {
|
|
1245
1260
|
l(this, "stepType", "JavaScript Code");
|
|
1246
1261
|
}
|
|
1247
1262
|
supports(e) {
|
|
1248
|
-
return
|
|
1263
|
+
return b.isTypeOf(e, A);
|
|
1249
1264
|
}
|
|
1250
1265
|
async execute(e, t, n, o, r) {
|
|
1251
|
-
if (!
|
|
1266
|
+
if (!b.isTypeOf(e, A)) return;
|
|
1252
1267
|
const a = n.getBlue(), c = a.nodeToSchemaOutput(
|
|
1253
1268
|
e,
|
|
1254
1269
|
A
|
|
@@ -1275,13 +1290,13 @@ class at {
|
|
|
1275
1290
|
return i;
|
|
1276
1291
|
}
|
|
1277
1292
|
}
|
|
1278
|
-
const
|
|
1279
|
-
new ot(),
|
|
1293
|
+
const ct = [
|
|
1280
1294
|
new rt(),
|
|
1281
|
-
new at()
|
|
1295
|
+
new at(),
|
|
1296
|
+
new st()
|
|
1282
1297
|
];
|
|
1283
1298
|
class ie {
|
|
1284
|
-
constructor(e =
|
|
1299
|
+
constructor(e = ct) {
|
|
1285
1300
|
l(this, "contractType", "Sequential Workflow");
|
|
1286
1301
|
l(this, "contractBlueId", m["Sequential Workflow"]);
|
|
1287
1302
|
l(this, "role", "handler");
|
|
@@ -1321,7 +1336,7 @@ class ie {
|
|
|
1321
1336
|
}
|
|
1322
1337
|
}
|
|
1323
1338
|
}
|
|
1324
|
-
class
|
|
1339
|
+
class it {
|
|
1325
1340
|
constructor(e) {
|
|
1326
1341
|
l(this, "contractType", "Sequential Workflow Operation");
|
|
1327
1342
|
l(this, "contractBlueId", m["Sequential Workflow Operation"]);
|
|
@@ -1347,8 +1362,8 @@ class ct {
|
|
|
1347
1362
|
}
|
|
1348
1363
|
}
|
|
1349
1364
|
}
|
|
1350
|
-
const Z = (s) =>
|
|
1351
|
-
class
|
|
1365
|
+
const Z = (s) => b.isTypeOf(s.payload, N);
|
|
1366
|
+
class lt extends S {
|
|
1352
1367
|
constructor() {
|
|
1353
1368
|
super(...arguments);
|
|
1354
1369
|
l(this, "contractType", "Timeline Channel");
|
|
@@ -1371,44 +1386,44 @@ class it extends S {
|
|
|
1371
1386
|
});
|
|
1372
1387
|
}
|
|
1373
1388
|
}
|
|
1374
|
-
const
|
|
1375
|
-
new
|
|
1389
|
+
const ut = [
|
|
1390
|
+
new tt(),
|
|
1376
1391
|
// channels
|
|
1392
|
+
new Ke(),
|
|
1377
1393
|
new Qe(),
|
|
1378
|
-
new
|
|
1379
|
-
new it(),
|
|
1380
|
-
new Ye(),
|
|
1394
|
+
new lt(),
|
|
1381
1395
|
new Ze(),
|
|
1382
|
-
new Re(),
|
|
1383
|
-
new Xe(),
|
|
1384
1396
|
new Ge(),
|
|
1397
|
+
new He(),
|
|
1398
|
+
new Ye(),
|
|
1399
|
+
new et(),
|
|
1385
1400
|
// sequential workflows
|
|
1386
1401
|
new ie(),
|
|
1387
|
-
new
|
|
1402
|
+
new it(),
|
|
1388
1403
|
// markers
|
|
1389
|
-
new
|
|
1404
|
+
new Xe()
|
|
1390
1405
|
];
|
|
1391
|
-
class
|
|
1406
|
+
class gt {
|
|
1392
1407
|
/**
|
|
1393
1408
|
* Creates a new document processor
|
|
1394
1409
|
*
|
|
1395
1410
|
* @param processors - Initial list of processors to register
|
|
1396
1411
|
*/
|
|
1397
|
-
constructor(e, t =
|
|
1412
|
+
constructor(e, t = ut) {
|
|
1398
1413
|
l(this, "taskCounter", 0);
|
|
1399
1414
|
l(this, "eventCounter", 0);
|
|
1400
1415
|
l(this, "registry");
|
|
1401
1416
|
l(this, "queue");
|
|
1402
1417
|
l(this, "router");
|
|
1403
|
-
l(this, "checkpointCache", new
|
|
1404
|
-
this.blue = e, this.registry = new
|
|
1418
|
+
l(this, "checkpointCache", new Re());
|
|
1419
|
+
this.blue = e, this.registry = new We(t), this.queue = new Ve(), this.router = new Fe(
|
|
1405
1420
|
this.blue,
|
|
1406
1421
|
this.registry,
|
|
1407
1422
|
this.queue,
|
|
1408
1423
|
() => ++this.taskCounter,
|
|
1409
1424
|
() => ++this.eventCounter
|
|
1410
1425
|
), this.register(
|
|
1411
|
-
new
|
|
1426
|
+
new Ue(this.checkpointCache),
|
|
1412
1427
|
9999
|
|
1413
1428
|
);
|
|
1414
1429
|
}
|
|
@@ -1430,11 +1445,11 @@ class yt {
|
|
|
1430
1445
|
async initialize(e) {
|
|
1431
1446
|
let t = R(I(e), this.blue);
|
|
1432
1447
|
const n = {
|
|
1433
|
-
payload:
|
|
1448
|
+
payload: nt(this.blue)
|
|
1434
1449
|
}, o = [n.payload];
|
|
1435
1450
|
await this.router.route(t, [], n, 0);
|
|
1436
1451
|
const r = await this.drainQueue(t);
|
|
1437
|
-
return t = r.state, o.push(...r.emitted), t =
|
|
1452
|
+
return t = r.state, o.push(...r.emitted), t = ze(t, this.blue), { state: B(t), emitted: o };
|
|
1438
1453
|
}
|
|
1439
1454
|
/**
|
|
1440
1455
|
* Processes a batch of events against the document
|
|
@@ -1459,7 +1474,7 @@ class yt {
|
|
|
1459
1474
|
} finally {
|
|
1460
1475
|
this.checkpointCache.clear();
|
|
1461
1476
|
}
|
|
1462
|
-
return { state:
|
|
1477
|
+
return { state: B(n), emitted: o };
|
|
1463
1478
|
}
|
|
1464
1479
|
/**
|
|
1465
1480
|
* Drains the task queue and applies all actions
|
|
@@ -1473,22 +1488,25 @@ class yt {
|
|
|
1473
1488
|
if (++r > o)
|
|
1474
1489
|
throw new Error("Possible cycle – too many iterations");
|
|
1475
1490
|
const c = this.queue.pop(), { nodePath: i, contractName: h, contractNode: u, event: d } = c, p = t.get(i);
|
|
1476
|
-
if (!
|
|
1491
|
+
if (!T(p) || !((a = p.getContracts()) != null && a[h]) || !u.getType()) continue;
|
|
1477
1492
|
const y = this.registry.get(u.getType());
|
|
1478
1493
|
if (!y) {
|
|
1479
1494
|
console.warn(`No processor registered for contract: ${h}`);
|
|
1480
1495
|
continue;
|
|
1481
1496
|
}
|
|
1482
|
-
const
|
|
1497
|
+
const w = new oe(
|
|
1483
1498
|
() => t,
|
|
1484
1499
|
c,
|
|
1485
1500
|
this.blue,
|
|
1486
|
-
async (
|
|
1487
|
-
for (const g of
|
|
1501
|
+
async (P) => {
|
|
1502
|
+
for (const g of P)
|
|
1488
1503
|
if (g.kind === "patch") {
|
|
1489
|
-
const ue = W(
|
|
1504
|
+
const ue = W(
|
|
1505
|
+
t,
|
|
1506
|
+
this.blue
|
|
1507
|
+
);
|
|
1490
1508
|
for (const C of ue) {
|
|
1491
|
-
const he = g.patch.op === "move" || g.patch.op === "copy" ? [g.patch.from, g.patch.path] : [g.patch.path], J =
|
|
1509
|
+
const he = g.patch.op === "move" || g.patch.op === "copy" ? [g.patch.from, g.patch.path] : [g.patch.path], J = w.getNodePath(), de = he.some(
|
|
1492
1510
|
(fe) => z(fe, C.absPath)
|
|
1493
1511
|
), pe = z(
|
|
1494
1512
|
J,
|
|
@@ -1504,12 +1522,12 @@ class yt {
|
|
|
1504
1522
|
try {
|
|
1505
1523
|
t = U(t, [g.patch]);
|
|
1506
1524
|
} catch (C) {
|
|
1507
|
-
throw
|
|
1525
|
+
throw Le(h, d, C), C;
|
|
1508
1526
|
}
|
|
1509
1527
|
} else g.kind === "event" && (n.push(g.event.payload), await this.router.route(t, [], g.event, c.key[5]));
|
|
1510
1528
|
}
|
|
1511
1529
|
);
|
|
1512
|
-
await y.handle(d, u,
|
|
1530
|
+
await y.handle(d, u, w, h), await w.flush();
|
|
1513
1531
|
}
|
|
1514
1532
|
return { state: t, emitted: n };
|
|
1515
1533
|
}
|
|
@@ -1517,7 +1535,7 @@ class yt {
|
|
|
1517
1535
|
class le {
|
|
1518
1536
|
process(e, t) {
|
|
1519
1537
|
const n = t.getValue();
|
|
1520
|
-
if (
|
|
1538
|
+
if (O(n)) {
|
|
1521
1539
|
const o = t.clone();
|
|
1522
1540
|
return o.setValue(n), o.setProperties(void 0), o.setItems(void 0), o.setType(void 0), o;
|
|
1523
1541
|
}
|
|
@@ -1528,18 +1546,18 @@ class le {
|
|
|
1528
1546
|
*/
|
|
1529
1547
|
postProcess(e, t) {
|
|
1530
1548
|
const n = t.getValue();
|
|
1531
|
-
if (
|
|
1549
|
+
if (O(n) && e.getValue() !== n && n !== void 0) {
|
|
1532
1550
|
const o = e.clone();
|
|
1533
1551
|
return o.setValue(n), o;
|
|
1534
1552
|
}
|
|
1535
1553
|
return e;
|
|
1536
1554
|
}
|
|
1537
1555
|
}
|
|
1538
|
-
const
|
|
1556
|
+
const Et = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1539
1557
|
__proto__: null,
|
|
1540
1558
|
ExpressionPreserver: le
|
|
1541
1559
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
1542
|
-
function
|
|
1560
|
+
function wt() {
|
|
1543
1561
|
return new k.SequentialMergingProcessor([
|
|
1544
1562
|
new k.ValuePropagator(),
|
|
1545
1563
|
new le(),
|
|
@@ -1550,24 +1568,25 @@ function Et() {
|
|
|
1550
1568
|
]);
|
|
1551
1569
|
}
|
|
1552
1570
|
export {
|
|
1553
|
-
|
|
1554
|
-
|
|
1571
|
+
gt as BlueDocumentProcessor,
|
|
1572
|
+
Ue as ChannelEventCheckpointProcessor,
|
|
1555
1573
|
L as CodeBlockEvaluationError,
|
|
1556
|
-
|
|
1557
|
-
|
|
1574
|
+
He as CompositeTimelineChannelProcessor,
|
|
1575
|
+
Qe as DocumentUpdateChannelProcessor,
|
|
1558
1576
|
ae as EmbeddedDocumentModificationError,
|
|
1559
|
-
|
|
1577
|
+
Ke as EmbeddedNodeChannelProcessor,
|
|
1560
1578
|
F as ExpressionEvaluationError,
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1579
|
+
Xe as InitializedMarkerProcessor,
|
|
1580
|
+
Ye as LifecycleEventChannelProcessor,
|
|
1581
|
+
Et as MergingProcessors,
|
|
1582
|
+
Ge as MyOSAgentChannelProcessor,
|
|
1583
|
+
Ze as MyOSTimelineChannelProcessor,
|
|
1584
|
+
et as OperationProcessor,
|
|
1567
1585
|
re as PatchApplicationError,
|
|
1568
|
-
|
|
1569
|
-
|
|
1586
|
+
tt as ProcessEmbeddedProcessor,
|
|
1587
|
+
it as SequentialWorkflowOperationProcessor,
|
|
1570
1588
|
ie as SequentialWorkflowProcessor,
|
|
1571
|
-
|
|
1572
|
-
|
|
1589
|
+
lt as TimelineChannelProcessor,
|
|
1590
|
+
W as collectEmbeddedPathSpecs,
|
|
1591
|
+
wt as createDefaultMergingProcessor
|
|
1573
1592
|
};
|
|
@@ -7,6 +7,7 @@ export declare class ChannelEventCheckpointProcessor implements ContractProcesso
|
|
|
7
7
|
readonly role = "handler";
|
|
8
8
|
constructor(cache: CheckpointCache);
|
|
9
9
|
supports(evt: EventNode): boolean;
|
|
10
|
+
private getEventBlueId;
|
|
10
11
|
handle(event: EventNode, node: DocumentNode, ctx: ProcessingContext): Promise<void>;
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=ChannelEventCheckpointProcessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelEventCheckpointProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/ChannelEventCheckpointProcessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChannelEventCheckpointProcessor.d.ts","sourceRoot":"","sources":["../../src/processors/ChannelEventCheckpointProcessor.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAM3D,qBAAa,+BAAgC,YAAW,iBAAiB;IAK3D,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJlC,QAAQ,CAAC,YAAY,8BAA8B;IACnD,QAAQ,CAAC,cAAc,iDAAuC;IAC9D,QAAQ,CAAC,IAAI,aAAa;gBAEG,KAAK,EAAE,eAAe;IAEnD,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;YAQnB,cAAc;IAgBtB,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB;CAQ1E"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Blue, BlueNode, BlueNodePatch } from '@blue-labs/language';
|
|
1
|
+
import { Blue, BlueNode, BlueNodePatch, ResolvedBlueNode } from '@blue-labs/language';
|
|
2
2
|
export type BlueId = string;
|
|
3
3
|
export type DocumentNode = BlueNode;
|
|
4
|
-
export type EventNodePayload = BlueNode;
|
|
4
|
+
export type EventNodePayload = BlueNode | ResolvedBlueNode;
|
|
5
5
|
export interface EventNode<Payload = EventNodePayload> {
|
|
6
6
|
payload: Payload;
|
|
7
7
|
source?: 'channel' | 'external';
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;AAEpC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAE3D,MAAM,WAAW,SAAS,CAAC,OAAO,GAAG,gBAAgB;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAChC,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,6DAA6D;IAC7D,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,KAAK,EAAE,YAAY,CAAC;IAEpB,yBAAyB;IACzB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAK1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CACN,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IACX,MAAM,CACJ,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,iBAAiB,EACtB,YAAY,EAAE,MAAM,GACnB,IAAI,CAAC;CACT;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAK1E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAElC;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAErC;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;IAIhB;;;OAGG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEjD;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACvD"}
|
package/dist/utils/document.d.ts
CHANGED
|
@@ -12,7 +12,14 @@ export declare function freeze(doc: DocumentNode): DocumentNode;
|
|
|
12
12
|
* Creates a mutable copy of a document for processing
|
|
13
13
|
*/
|
|
14
14
|
export declare function mutable(doc: DocumentNode): DocumentNode;
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Collects all paths to embedded documents
|
|
17
|
+
* @param doc - The document to collect embedded paths from
|
|
18
|
+
* @param blue - The Blue instance
|
|
19
|
+
* @param base - The base path
|
|
20
|
+
* @param out - The output array
|
|
21
|
+
*/
|
|
22
|
+
export declare function collectEmbeddedPathSpecs(doc: DocumentNode, blue: Blue, base?: string, out?: EmbeddedSpec[]): EmbeddedSpec[];
|
|
16
23
|
export declare function isInside(target: string, root: string): boolean;
|
|
17
24
|
/**
|
|
18
25
|
* Apply a collection of patches to a document
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/utils/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,OAAO,EAEL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/utils/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAIxC,OAAO,EAEL,KAAK,aAAa,EAClB,IAAI,EACL,MAAM,qBAAqB,CAAC;AAM7B,KAAK,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D;;GAEG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAEtD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,IAAI,EACV,IAAI,SAAM,EACV,GAAG,GAAE,YAAY,EAAO,GACvB,YAAY,EAAE,CA8BhB;AAKD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,aAAa,EAAE,GACvB,YAAY,CAcd"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blue-labs/document-processor",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.0",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@blue-labs/language": "1.
|
|
6
|
-
"@blue-labs/shared-utils": "1.
|
|
5
|
+
"@blue-labs/language": "1.30.0",
|
|
6
|
+
"@blue-labs/shared-utils": "1.30.0",
|
|
7
7
|
"isolated-vm": "^5.0.4"
|
|
8
8
|
},
|
|
9
9
|
"main": "./dist/index.js",
|