@transai/connector-runner-file 0.4.3 → 0.4.4
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/CHANGELOG.md +11 -0
- package/index.cjs +1 -1
- package/index.cjs.map +2 -2
- package/index.js +1 -1
- package/index.js.map +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
## 0.4.3 (2025-12-17)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **XODO-1197:** properly close the file handle ([93a5257d](https://github.com/xip-online-applications/xod-core/commit/93a5257d))
|
|
6
|
+
- **XODO-1197:** more fixes for file actions ([a8a86bf6](https://github.com/xip-online-applications/xod-core/commit/a8a86bf6))
|
|
7
|
+
|
|
8
|
+
### ❤️ Thank You
|
|
9
|
+
|
|
10
|
+
- Youri Lefers @yourilefers
|
|
11
|
+
|
|
1
12
|
## 0.4.2 (2025-12-17)
|
|
2
13
|
|
|
3
14
|
### 🚀 Features
|
package/index.cjs
CHANGED
|
@@ -46,7 +46,7 @@ ${D}`),v.pop(),`{${_}}`}case"number":return isFinite(h)?String(h):e?e(h):"null";
|
|
|
46
46
|
`),stack:e&&e.stack,rejection:!0,date:new Date().toString(),process:this.getProcessInfo(),os:this.getOsInfo(),trace:this.getTrace(e)}}getProcessInfo(){return{pid:process.pid,uid:process.getuid?process.getuid():null,gid:process.getgid?process.getgid():null,cwd:process.cwd(),execPath:process.execPath,version:process.version,argv:process.argv,memoryUsage:process.memoryUsage()}}getOsInfo(){return{loadavg:wm.loadavg(),uptime:wm.uptime()}}getTrace(e){return(e?_m.parse(e):_m.get()).map(n=>({column:n.getColumnNumber(),file:n.getFileName(),function:n.getFunctionName(),line:n.getLineNumber(),method:n.getMethodName(),native:n.isNative()}))}_addHandler(e){if(!this.handlers.has(e)){e.handleRejections=!0;let r=new E2(e);this.handlers.set(e,r),this.logger.pipe(r)}}_unhandledRejection(e){let r=this.getAllInfo(e),n=this._getRejectionHandlers(),i=typeof this.logger.exitOnError=="function"?this.logger.exitOnError(e):this.logger.exitOnError,o;!n.length&&i&&(console.warn("winston: exitOnError cannot be true with no rejection handlers."),console.warn("winston: not exiting process."),i=!1);function s(){ha("doExit",i),ha("process._exiting",process._exiting),i&&!process._exiting&&(o&&clearTimeout(o),process.exit(1))}if(!n||n.length===0)return process.nextTick(s);_2(n,(a,u)=>{let d=v2(u),w=a.transport||a;function E(y){return()=>{ha(y),d()}}w._ending=!0,w.once("finish",E("finished")),w.once("error",E("error"))},()=>i&&s()),this.logger.log(r),i&&(o=setTimeout(s,3e3))}_getRejectionHandlers(){return this.logger.transports.filter(e=>(e.transport||e).handleRejections)}}});var Sm=S((GM,Em)=>{"use strict";var pa=class{constructor(e){let r=Vi();if(typeof e!="object"||Array.isArray(e)||!(e instanceof r))throw new Error("Logger is required for profiling");this.logger=e,this.start=Date.now()}done(...e){typeof e[e.length-1]=="function"&&(console.warn("Callback function no longer supported as of winston@3.0.0"),e.pop());let r=typeof e[e.length-1]=="object"?e.pop():{};return r.level=r.level||"info",r.durationMs=Date.now()-this.start,this.logger.write(r)}};Em.exports=pa});var Vi=S((YM,xm)=>{"use strict";var{Stream:S2,Transform:T2}=Tt(),Tm=Ui(),{LEVEL:Le,SPLAT:Om}=ne(),Dm=sa(),O2=ca(),D2=da(),x2=bs(),P2=Sm(),{warn:M2}=Uo(),N2=Fi(),R2=/%[scdjifoO%]/g,Hi=class extends T2{constructor(e){super({objectMode:!0}),this.configure(e)}child(e){let r=this;return Object.create(r,{write:{value:function(n){let i=Object.assign({},e,n);n instanceof Error&&(i.stack=n.stack,i.message=n.message),r.write(i)}}})}configure({silent:e,format:r,defaultMeta:n,levels:i,level:o="info",exitOnError:s=!0,transports:a,colors:u,emitErrs:d,formatters:w,padLevels:E,rewriters:y,stripColors:m,exceptionHandlers:h,rejectionHandlers:v}={}){if(this.transports.length&&this.clear(),this.silent=e,this.format=r||this.format||qo()(),this.defaultMeta=n||null,this.levels=i||this.levels||N2.npm.levels,this.level=o,this.exceptions&&this.exceptions.unhandle(),this.rejections&&this.rejections.unhandle(),this.exceptions=new O2(this),this.rejections=new D2(this),this.profilers={},this.exitOnError=s,a&&(a=Array.isArray(a)?a:[a],a.forEach(I=>this.add(I))),u||d||w||E||y||m)throw new Error(["{ colors, emitErrs, formatters, padLevels, rewriters, stripColors } were removed in winston@3.0.0.","Use a custom winston.format(function) instead.","See: https://github.com/winstonjs/winston/tree/master/UPGRADE-3.0.md"].join(`
|
|
47
47
|
`));h&&this.exceptions.handle(h),v&&this.rejections.handle(v)}getHighestLogLevel(){let e=Xr(this.levels,this.level);return!this.transports||this.transports.length===0?e:this.transports.reduce((r,n)=>{let i=Xr(this.levels,n.level);return i!==null&&i>r?i:r},e)}isLevelEnabled(e){let r=Xr(this.levels,e);if(r===null)return!1;let n=Xr(this.levels,this.level);return n===null?!1:!this.transports||this.transports.length===0?n>=r:this.transports.findIndex(o=>{let s=Xr(this.levels,o.level);return s===null&&(s=n),s>=r})!==-1}log(e,r,...n){if(arguments.length===1)return e[Le]=e.level,this._addDefaultMeta(e),this.write(e),this;if(arguments.length===2)return r&&typeof r=="object"?(r[Le]=r.level=e,this._addDefaultMeta(r),this.write(r),this):(r={[Le]:e,level:e,message:r},this._addDefaultMeta(r),this.write(r),this);let[i]=n;if(typeof i=="object"&&i!==null&&!(r&&r.match&&r.match(R2))){let s=Object.assign({},this.defaultMeta,i,{[Le]:e,[Om]:n,level:e,message:r});return i.message&&(s.message=`${s.message} ${i.message}`),i.stack&&(s.stack=i.stack),i.cause&&(s.cause=i.cause),this.write(s),this}return this.write(Object.assign({},this.defaultMeta,{[Le]:e,[Om]:n,level:e,message:r})),this}_transform(e,r,n){if(this.silent)return n();e[Le]||(e[Le]=e.level),!this.levels[e[Le]]&&this.levels[e[Le]]!==0&&console.error("[winston] Unknown logger level: %s",e[Le]),this._readableState.pipes||console.error("[winston] Attempt to write logs with no transports, which can increase memory usage: %j",e);try{this.push(this.format.transform(e,this.format.options))}finally{this._writableState.sync=!1,n()}}_final(e){let r=this.transports.slice();Tm(r,(n,i)=>{if(!n||n.finished)return setImmediate(i);n.once("finish",i),n.end()},e)}add(e){let r=!Dm(e)||e.log.length>2?new x2({transport:e}):e;if(!r._writableState||!r._writableState.objectMode)throw new Error("Transports must WritableStreams in objectMode. Set { objectMode: true }.");return this._onEvent("error",r),this._onEvent("warn",r),this.pipe(r),e.handleExceptions&&this.exceptions.handle(),e.handleRejections&&this.rejections.handle(),this}remove(e){if(!e)return this;let r=e;return(!Dm(e)||e.log.length>2)&&(r=this.transports.filter(n=>n.transport===e)[0]),r&&this.unpipe(r),this}clear(){return this.unpipe(),this}close(){return this.exceptions.unhandle(),this.rejections.unhandle(),this.clear(),this.emit("close"),this}setLevels(){M2.deprecated("setLevels")}query(e,r){typeof e=="function"&&(r=e,e={}),e=e||{};let n={},i=Object.assign({},e.query||{});function o(a,u){e.query&&typeof a.formatQuery=="function"&&(e.query=a.formatQuery(i)),a.query(e,(d,w)=>{if(d)return u(d);typeof a.formatResults=="function"&&(w=a.formatResults(w,e.format)),u(null,w)})}function s(a,u){o(a,(d,w)=>{u&&(w=d||w,w&&(n[a.name]=w),u()),u=null})}Tm(this.transports.filter(a=>!!a.query),s,()=>r(null,n))}stream(e={}){let r=new S2,n=[];return r._streams=n,r.destroy=()=>{let i=n.length;for(;i--;)n[i].destroy()},this.transports.filter(i=>!!i.stream).forEach(i=>{let o=i.stream(e);o&&(n.push(o),o.on("log",s=>{s.transport=s.transport||[],s.transport.push(i.name),r.emit("log",s)}),o.on("error",s=>{s.transport=s.transport||[],s.transport.push(i.name),r.emit("error",s)}))}),r}startTimer(){return new P2(this)}profile(e,...r){let n=Date.now();if(this.profilers[e]){let i=this.profilers[e];delete this.profilers[e],typeof r[r.length-2]=="function"&&(console.warn("Callback function no longer supported as of winston@3.0.0"),r.pop());let o=typeof r[r.length-1]=="object"?r.pop():{};return o.level=o.level||"info",o.durationMs=n-i,o.message=o.message||e,this.write(o)}return this.profilers[e]=n,this}handleExceptions(...e){console.warn("Deprecated: .handleExceptions() will be removed in winston@4. Use .exceptions.handle()"),this.exceptions.handle(...e)}unhandleExceptions(...e){console.warn("Deprecated: .unhandleExceptions() will be removed in winston@4. Use .exceptions.unhandle()"),this.exceptions.unhandle(...e)}cli(){throw new Error(["Logger.cli() was removed in winston@3.0.0","Use a custom winston.formats.cli() instead.","See: https://github.com/winstonjs/winston/tree/master/UPGRADE-3.0.md"].join(`
|
|
48
48
|
`))}_onEvent(e,r){function n(i){e==="error"&&!this.transports.includes(r)&&this.add(r),this.emit(e,i,r)}r["__winston"+e]||(r["__winston"+e]=n.bind(this),r.on(e,r["__winston"+e]))}_addDefaultMeta(e){this.defaultMeta&&Object.assign(e,this.defaultMeta)}};function Xr(t,e){let r=t[e];return!r&&r!==0?null:r}Object.defineProperty(Hi.prototype,"transports",{configurable:!1,enumerable:!0,get(){let{pipes:t}=this._readableState;return Array.isArray(t)?t:[t].filter(Boolean)}});xm.exports=Hi});var ga=S((zM,Pm)=>{"use strict";var{LEVEL:I2}=ne(),A2=Fi(),L2=Vi(),C2=$r()("winston:create-logger");function q2(t){return"is"+t.charAt(0).toUpperCase()+t.slice(1)+"Enabled"}Pm.exports=function(t={}){t.levels=t.levels||A2.npm.levels;class e extends L2{constructor(i){super(i)}}let r=new e(t);return Object.keys(t.levels).forEach(function(n){if(C2('Define prototype method for "%s"',n),n==="log"){console.warn('Level "log" not defined: conflicts with the method "log". Use a different level name.');return}e.prototype[n]=function(...i){let o=this||r;if(i.length===1){let[s]=i,a=s&&s.message&&s||{message:s};return a.level=a[I2]=n,o._addDefaultMeta(a),o.write(a),this||r}return i.length===0?(o.log(n,""),o):o.log(n,...i)},e.prototype[q2(n)]=function(){return(this||r).isLevelEnabled(n)}}),r}});var Nm=S((QM,Mm)=>{"use strict";var F2=ga();Mm.exports=class{constructor(e={}){this.loggers=new Map,this.options=e}add(e,r){if(!this.loggers.has(e)){r=Object.assign({},r||this.options);let n=r.transports||this.options.transports;n?r.transports=Array.isArray(n)?n.slice():[n]:r.transports=[];let i=F2(r);i.on("close",()=>this._delete(e)),this.loggers.set(e,i)}return this.loggers.get(e)}get(e,r){return this.add(e,r)}has(e){return!!this.loggers.has(e)}close(e){if(e)return this._removeLogger(e);this.loggers.forEach((r,n)=>this._removeLogger(n))}_removeLogger(e){if(!this.loggers.has(e))return;this.loggers.get(e).close(),this._delete(e)}_delete(e){this.loggers.delete(e)}}});var Im=S(G=>{"use strict";var Rm=$o(),{warn:Kr}=Uo();G.version=Bh().version;G.transports=nm();G.config=Fi();G.addColors=Rm.levels;G.format=Rm.format;G.createLogger=ga();G.Logger=Vi();G.ExceptionHandler=ca();G.RejectionHandler=da();G.Container=Nm();G.Transport=Ht();G.loggers=new G.Container;var Ce=G.createLogger();Object.keys(G.config.npm.levels).concat(["log","query","stream","add","remove","clear","profile","startTimer","handleExceptions","unhandleExceptions","handleRejections","unhandleRejections","configure","child"]).forEach(t=>G[t]=(...e)=>Ce[t](...e));Object.defineProperty(G,"level",{get(){return Ce.level},set(t){Ce.level=t}});Object.defineProperty(G,"exceptions",{get(){return Ce.exceptions}});Object.defineProperty(G,"rejections",{get(){return Ce.rejections}});["exitOnError"].forEach(t=>{Object.defineProperty(G,t,{get(){return Ce[t]},set(e){Ce[t]=e}})});Object.defineProperty(G,"default",{get(){return{exceptionHandlers:Ce.exceptionHandlers,rejectionHandlers:Ce.rejectionHandlers,transports:Ce.transports}}});Kr.deprecated(G,"setLevels");Kr.forFunctions(G,"useFormat",["cli"]);Kr.forProperties(G,"useFormat",["padLevels","stripColors"]);Kr.forFunctions(G,"deprecated",["addRewriter","addFilter","clone","extend"]);Kr.forProperties(G,"deprecated",["emitErrs","levelLength"])});var j2={};Vm(j2,{ConnectorRunnerFile:()=>ya});module.exports=Hm(j2);var lt=xe(require("node:process")),rn=class{constructor(e,r){this.#e="connector-runtime";this.init=()=>Promise.resolve();this.start=()=>Promise.resolve();this.stop=()=>Promise.resolve();this.#t=r,lt.on?lt.on("message",n=>{n.cmd===this.#e&&r.logger.verbose(`${lt.pid} Received message from parent process:`,n)}):r.logger.warn("IPC channel is not available. process.on is undefined."),lt.send||r.logger.warn("IPC channel is not available. process.send is undefined."),e.actions?.forEach(n=>{if(n.config.templates===void 0)return;let i={};Object.entries(n.config.templates).forEach(([o,s])=>{try{i[o]=r.templating.compile(s)}catch(a){r.logger.error(`Error compiling template ${o} for action ${n.identifier}`,a)}}),n.config.parsedTemplates=i})}#e;#t;set callbackFunction(e){this.connectorSDK.receiver.registerCallback(this.#r(e))}get connectorSDK(){return this.#t}#r(e){return async r=>{let n=await this.#t.receiver.getActionConfig(r);return n?e(r,n):this.#t.receiver.responses.badRequest("Action not found")(r)}}};var _e=class{info(){}debug(){}error(){}warn(){}verbose(){}};var Fm=xe(require("node:events"));var rr=class{static{this.TYPE="file.delete"}#e;#t;constructor(e,r=new _e){this.#e=e,this.#t=r}async execute(e){let{remotePath:r}=e;if(!r)throw new Error("Missing required parameter: remotePath");this.#t.debug(`Deleting file at ${r}`);try{await this.#e.delete(r)}catch(n){throw this.#t.error(`Error deleting file at ${r}: ${n instanceof Error?n.message:"Unknown error"}`),n}}};var _a=xe(require("crypto")),on=new Uint8Array(256),nn=on.length;function Xi(){return nn>on.length-16&&(_a.default.randomFillSync(on),nn=0),on.slice(nn,nn+=16)}var ce=[];for(let t=0;t<256;++t)ce.push((t+256).toString(16).slice(1));function va(t,e=0){return ce[t[e+0]]+ce[t[e+1]]+ce[t[e+2]]+ce[t[e+3]]+"-"+ce[t[e+4]]+ce[t[e+5]]+"-"+ce[t[e+6]]+ce[t[e+7]]+"-"+ce[t[e+8]]+ce[t[e+9]]+"-"+ce[t[e+10]]+ce[t[e+11]]+ce[t[e+12]]+ce[t[e+13]]+ce[t[e+14]]+ce[t[e+15]]}var Ea=xe(require("crypto")),Ki={randomUUID:Ea.default.randomUUID};function Wm(t,e,r){if(Ki.randomUUID&&!e&&!t)return Ki.randomUUID();t=t||{};let n=t.random||(t.rng||Xi)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return va(n)}var Gi=Wm;var nr=class{static{this.TYPE="file.download"}#e;#t;#r;constructor(e,r,n=new _e){this.#e=e,this.#t=r,this.#r=n}async execute(e){let{remotePath:r}=e;if(!r)throw new Error("Missing required parameter: remotePath");let n=`downloaded-${Gi()}`;this.#r.debug(`Reading file from ${r} and writing to ${n}`);let i;try{i=await this.#e.read(r),await this.#t.write(n,i)}catch(o){throw this.#r.error(`Error reading file from ${r}: ${o instanceof Error?o.message:"Unknown error"}`),o}finally{i?.close()}return{pathDsn:this.#t.pathAsDsn(n),path:n}}};var Lm=xe(Wu()),Cm=xe(bc()),er=xe(require("path"));var qe=xe(require("node:process")),pe=xe(Im()),Am=(o=>(o.error="error",o.warn="warn",o.info="info",o.http="http",o.debug="debug",o))(Am||{}),Gr=class t{#e;constructor(e="default",r="info"){this.logger=pe.createLogger({level:r,format:pe.format.combine(pe.format.label({label:e}),pe.format.timestamp(),pe.format.json())});let n=!1;(qe.default.env.NODE_ENV!=="production"||qe.default.env.LOG_TO_CONSOLE==="true")&&(n=!0,this.logger.add(new pe.transports.Console({format:pe.format.printf(({label:i,level:o,message:s})=>`[${i}] ${o}: ${s}`)}))),qe.default.env.LOG_TO_FILE==="true"&&(n=!0,this.logger.add(new pe.transports.File({filename:"error.log",level:"error"})),this.logger.add(new pe.transports.File({filename:"combined.log"}))),n||this.logger.add(new pe.transports.Console({format:pe.format.printf(({label:i,level:o,message:s})=>`[${i}] ${o}: ${s}`)}))}static getInstance(e,r){return t.instance||(t.instance=new t(e??"default",t.#r(r))),t.instance}setDatadogTransport(e){let r=e?.apiKey??qe.default.env.DATADOG_API_KEY;if(!r)return this.debug("DATADOG_API_KEY is not set, cannot add Datadog transport"),this;let n=new URLSearchParams({"dd-api-key":r,ddsource:e?.source??qe.default.env.DD_SOURCE??"nodejs",service:e?.service??qe.default.env.DD_SERVICE??"unknown",env:e?.env??qe.default.env.DD_ENV??"prod"});e?.tags&&n.append("ddtags",Object.entries(e.tags).map(([o,s])=>`${o}:${s}`).join(","));let i={host:`http-intake.logs.${qe.default.env.DD_SITE??"datadoghq.eu"}`,path:`/api/v2/logs?${n.toString()}`,ssl:!0,batch:!0,format:pe.format.json(),level:"info"};return this.#e&&this.logger.remove(this.#e),this.#e=new pe.transports.Http(i),this.logger.add(this.#e),this}info(...e){this.#t(this.logger.info,...e)}debug(...e){this.#t(this.logger.debug,...e)}error(...e){this.#t(this.logger.error,...e)}warn(...e){this.#t(this.logger.warn,...e)}verbose(...e){this.#t(this.logger.verbose,...e)}#t(e,...r){try{let n=r.map(i=>typeof i=="object"?JSON.stringify(i):String(i));e(n.join(" "),...r)}catch(n){console.error("unknown error in log, function",n)}}static#r=e=>{if(e!==void 0)return e;let r=qe.default.env.LOG_LEVEL||"info",i=!Object.values(Am).includes(r);return i&&(r="info"),i&&console.error(`Invalid log level: ${r} only allow; 'error', 'warn', 'info', 'debug', 'trace'. Using info as default.`),r}};var qm=require("stream"),Dt=class t{#e;#t;constructor(e=void 0){this.#e=e,this.#t=Gr.getInstance(),this.#t.info(`FileHandler initialized with delimiter: ${e}`)}async handleBuffer(e,r,n,i){let o;switch(t.getExtension(e)){case".csv":o=await this.parseCSV(r,n,i);break;default:return this.handle(e,r.toString(),n,i)}return o}async handle(e,r,n,i){let o;switch(t.getExtension(e)){case".xml":o=await this.parseXML(r,n);break;case".json":o=JSON.parse(r);break;default:Gr.getInstance().error(`Unsupported file type: ${e}`)}return o}async parseXML(e,r){try{let n=await Lm.default.parseStringPromise(e,{explicitArray:!1});return this.xmlOptions(n,r)}catch(n){throw new Error(`Error parsing XML content: ${n.message}`)}}async parseCSV(e,r,n){try{let i=qm.Readable.from(e),o=!0;return Object.keys(n??{}).includes("noHeader")&&(o=(n??{}).noHeader===!0),(0,Cm.default)({delimiter:this.#e??",",noheader:o}).fromStream(i)}catch(i){throw this.#t.error(`Error parsing CSV: ${i.message}`),new Error(`Error parsing CSV content: ${i.message}`)}}xmlOptions(e,r){let n=i=>{if(typeof i=="object")for(let o of Object.keys(i)){let s=i[o];r.includes(o)?Array.isArray(s)||(i[o]=[s]):o!=="_text"&&(i[o]=n(s))}return i};return n(e)}csvOptions(e,r){let n;return Array.isArray(r)&&r.length>0?n={headers:r}:n=e.split(`
|
|
49
|
-
`)[0].trim().split(",").length>1?{headers:!0}:{noheader:!0},n}stringify(e){return JSON.stringify(e,null,2)}static getPath(e){return er.dirname(e)}static getFileName(e){return er.basename(e)}static getExtension(e){return er.extname(e).toLowerCase()}};var Yr=class{static{this.TYPE="file.read"}#e;#t;#r;#n;constructor(e,r,n=new _e){this.#e=e,this.#t=r,this.#r=n,this.#n=new Dt}async execute(e){let{localPath:r,remotePath:n}=e;if(!r&&!n)throw new Error("Missing required parameter: localPath or remotePath");if(r&&n)throw new Error("Use either localPath or remotePath");this.#r.debug(`Reading file from ${r??n}`);let i,o;try{r?i=await this.#t.read(this.#i(r)):i=await this.#e.read(n);let s=i.get();e.raw!==!0?o=await this.#n.handleBuffer(r??n,s,[]):o=s.toString()}catch(s){throw this.#r.error(`Error reading file from ${r??n}: ${s instanceof Error?s.message:"Unknown error"}`),s}finally{i?.close()}return{contents:o}}#i(e){if(!e.startsWith("file://"))return e;let r=this.#t.pathAsDsn("/");if(e.startsWith(r))return e.slice(r.length-1);throw new Error(`Local path must be of the right format matching the local file SDK, got: ${e}`)}};var zr=class{static{this.TYPE="file.upload"}#e;#t;#r;constructor(e,r,n=new _e){this.#e=e,this.#t=r,this.#r=n}async execute(e){let{localPath:r,remotePath:n}=e;if(!r)throw new Error("Missing required parameter: localPath");if(!n)throw new Error("Missing required parameter: remotePath");this.#r.debug(`Writing file from ${r} to ${n}`);let i;try{i=await this.#t.read(this.#n(r));let o=await this.#e.exists(n);if(o&&e.overwrite!==!0)throw new Error(`File already exists at ${n}. Set overwrite to true to replace it.`);o&&e.overwrite===!0&&await this.#e.delete(n).catch(()=>{}),await this.#e.write(n,i)}catch(o){throw this.#r.error(`Error writing file from ${r} to ${n}: ${o instanceof Error?o.message:"Unknown error"}`),o}finally{i?.close()}}#n(e){if(!e.startsWith("file://"))return e;let r=this.#t.pathAsDsn("/");if(e.startsWith(r))return e.slice(r.length-1);throw new Error(`Local path must be of the right format matching the local file SDK, got: ${e}`)}};var Jr=class{static{this.TYPE="file.write"}#e;#t;constructor(e,r=new _e){this.#e=e,this.#t=r}async execute(e){let{contents:r,remotePath:n}=e;if(!r&&r!=="")throw new Error("Missing required parameter: contents");if(!n)throw new Error("Missing required parameter: remotePath");this.#t.debug(`Writing content to ${n}`);try{let i=await this.#e.exists(n);if(i&&e.overwrite!==!0)throw new Error(`File already exists at ${n}. Set overwrite to true to replace it.`);i&&e.overwrite===!0&&await this.#e.delete(n).catch(()=>{}),await this.#e.write(n,r)}catch(i){throw this.#t.error(`Error writing content to ${n}: ${i instanceof Error?i.message:"Unknown error"}`),i}}};var Wi=class extends Fm.default{#e;#t;constructor(e,r,n){super(),this.#e=e,n=n??this.#e.files(`file://${process.env.TRANSAI_TMP_DIR??"/var/run/transai"}/connectors/${e.config.datasourceIdentifier??"file"}`),this.#t={[nr.TYPE]:new nr(r,n,this.#e.logger),[zr.TYPE]:new zr(r,n,this.#e.logger),[Jr.TYPE]:new Jr(r,this.#e.logger),[rr.TYPE]:new rr(r,this.#e.logger),[Yr.TYPE]:new Yr(r,n,this.#e.logger)}}get callbackFunctionChain(){return this.#r(this.#e.receiver.emitEventType(this.#e.receiver.responses.
|
|
49
|
+
`)[0].trim().split(",").length>1?{headers:!0}:{noheader:!0},n}stringify(e){return JSON.stringify(e,null,2)}static getPath(e){return er.dirname(e)}static getFileName(e){return er.basename(e)}static getExtension(e){return er.extname(e).toLowerCase()}};var Yr=class{static{this.TYPE="file.read"}#e;#t;#r;#n;constructor(e,r,n=new _e){this.#e=e,this.#t=r,this.#r=n,this.#n=new Dt}async execute(e){let{localPath:r,remotePath:n}=e;if(!r&&!n)throw new Error("Missing required parameter: localPath or remotePath");if(r&&n)throw new Error("Use either localPath or remotePath");this.#r.debug(`Reading file from ${r??n}`);let i,o;try{r?i=await this.#t.read(this.#i(r)):i=await this.#e.read(n);let s=i.get();e.raw!==!0?o=await this.#n.handleBuffer(r??n,s,[]):o=s.toString()}catch(s){throw this.#r.error(`Error reading file from ${r??n}: ${s instanceof Error?s.message:"Unknown error"}`),s}finally{i?.close()}return{contents:o}}#i(e){if(!e.startsWith("file://"))return e;let r=this.#t.pathAsDsn("/");if(e.startsWith(r))return e.slice(r.length-1);throw new Error(`Local path must be of the right format matching the local file SDK, got: ${e}`)}};var zr=class{static{this.TYPE="file.upload"}#e;#t;#r;constructor(e,r,n=new _e){this.#e=e,this.#t=r,this.#r=n}async execute(e){let{localPath:r,remotePath:n}=e;if(!r)throw new Error("Missing required parameter: localPath");if(!n)throw new Error("Missing required parameter: remotePath");this.#r.debug(`Writing file from ${r} to ${n}`);let i;try{i=await this.#t.read(this.#n(r));let o=await this.#e.exists(n);if(o&&e.overwrite!==!0)throw new Error(`File already exists at ${n}. Set overwrite to true to replace it.`);o&&e.overwrite===!0&&await this.#e.delete(n).catch(()=>{}),await this.#e.write(n,i)}catch(o){throw this.#r.error(`Error writing file from ${r} to ${n}: ${o instanceof Error?o.message:"Unknown error"}`),o}finally{i?.close()}}#n(e){if(!e.startsWith("file://"))return e;let r=this.#t.pathAsDsn("/");if(e.startsWith(r))return e.slice(r.length-1);throw new Error(`Local path must be of the right format matching the local file SDK, got: ${e}`)}};var Jr=class{static{this.TYPE="file.write"}#e;#t;constructor(e,r=new _e){this.#e=e,this.#t=r}async execute(e){let{contents:r,remotePath:n}=e;if(!r&&r!=="")throw new Error("Missing required parameter: contents");if(!n)throw new Error("Missing required parameter: remotePath");this.#t.debug(`Writing content to ${n}`);try{let i=await this.#e.exists(n);if(i&&e.overwrite!==!0)throw new Error(`File already exists at ${n}. Set overwrite to true to replace it.`);i&&e.overwrite===!0&&await this.#e.delete(n).catch(()=>{}),await this.#e.write(n,r)}catch(i){throw this.#t.error(`Error writing content to ${n}: ${i instanceof Error?i.message:"Unknown error"}`),i}}};var Wi=class extends Fm.default{#e;#t;constructor(e,r,n){super(),this.#e=e,n=n??this.#e.files(`file://${process.env.TRANSAI_TMP_DIR??"/var/run/transai"}/connectors/${e.config.datasourceIdentifier??"file"}`),this.#t={[nr.TYPE]:new nr(r,n,this.#e.logger),[zr.TYPE]:new zr(r,n,this.#e.logger),[Jr.TYPE]:new Jr(r,this.#e.logger),[rr.TYPE]:new rr(r,this.#e.logger),[Yr.TYPE]:new Yr(r,n,this.#e.logger)}}get callbackFunctionChain(){return this.#r(this.#e.receiver.emitEventType(this.#e.receiver.responses.ok()))}#r(e){return async(r,n)=>{let i=n.identifier,o=this.#t[i];if(!o)return this.#e.receiver.responses.badRequest(`Action ${i} does not exist.`)(r);try{let s=await o.execute(r.payload);this.#e.logger.debug(`Action ${i} executed successfully with pathDsn: ${JSON.stringify(s)}`);let a=r;return typeof s<"u"&&(a={...r,payload:{...r.payload??{},...s}}),e(a)}catch(s){return this.#e.logger.error(`Error executing action ${i}: ${s instanceof Error?s.message:"Unknown error"}`),this.#e.receiver.responses.internalServerError(s instanceof Error?s.message:"Unknown error occurred")(r)}}}};var ma=xe(require("path"));var Qr=class{static{this.DEFAULT_INTERVAL_SECONDS=60}#e;#t;#r;#n;#i;#o;constructor(e,r,n){this.#e=e,this.#t=r,this.#r=n,this.#i=new Dt(r.delimiter);let{selector:i}=this.#t;if(this.#o=new RegExp(typeof i!="string"?i.pattern:i,typeof i!="string"&&i.flags?i.flags:"i"),this.#t.destinationDsn)this.#n=this.#e.files(this.#t.destinationDsn);else if(this.#t.action==="move")throw new Error(`Destination DSN must be provided for 'move' action in file selector: ${this.name}`)}get name(){let{selector:e}=this.#t;return`file-processor-${typeof e=="string"?e:e.pattern}`}async onRun(){let e=await this.#s();this.#e.telemetry.increment("files.processed.count",e)}async#s(e="/"){let r=await this.#r.list(e);return(await Promise.all(r.map(async i=>i.type==="FILE"?await this.#a(i,e)?1:0:this.#t.recursive===!0?this.#s(ma.default.join(e,i.name)):Promise.resolve(0)))).reduce((i,o)=>i+o,0)}async#a(e,r){let n=ma.default.join(r,e.name);if(!this.#o.test(n))return this.#e.logger.verbose(`Skipping file at path: ${n} as it does not match selector regex`),!1;this.#e.logger.debug(`Processing file at path: ${n}`);let i,o;try{if(i=await this.#r.read(n),o=await this.#i.handleBuffer(n,i.get(),this.#t.optionalHeaders??[],this.#t.optionalSettings),!o)return this.#e.logger.info(`Failed to parse file at path: ${n}`),i.close(),!1;this.#e.logger.debug(`Parsed file successfully at path: ${n}`)}catch(s){return this.#e.logger.error(`Error parsing file at path: ${n}, error: ${s}`),i?.close(),!1}try{let s={...o,_filename:Dt.getFileName(n)??e.name},a={keyField:"_filename",collection:`${this.#e.config.datasourceIdentifier??"file"}_${this.#t.identifier??this.#o.source??"default"}`};this.#t.action==="move"&&(s._fileDestination=this.#n?.pathAsDsn(e.name)),this.#t.type==="metric"?await this.#e.sender.metricsLegacy([s],a):await this.#e.sender.documents([s],a)}catch(s){return this.#e.logger.error(`Error sending parsed file from path: ${n}, error: ${s}`),i?.close(),!1}try{switch(this.#t.action){case"move":await this.#n?.write(e.name,i),await this.#r.delete(n),this.#e.logger.debug(`"Moved" file at path: ${n} to ${this.#n?.pathAsDsn(e.name)} after processing`);break;case"delete":await this.#r.delete(n),this.#e.logger.debug(`Deleted file at path: ${n} after processing`);break}}finally{i?.close()}return!0}};var ya=class extends rn{constructor(r,n){super(r,n);this.init=async()=>{let{config:r}=this.connectorSDK;await Promise.all((r.fileSelectors??[]).map(async n=>{let i=new Qr(this.connectorSDK,n,this.#e);await this.connectorSDK.processing.registerInterval(n.intervalSeconds??Qr.DEFAULT_INTERVAL_SECONDS,i)}))};let{config:i}=this.connectorSDK;this.#e=this.connectorSDK.files(i.dsn);let o=new Wi(this.connectorSDK,this.#e);this.callbackFunction=o.callbackFunctionChain}#e};0&&(module.exports={ConnectorRunnerFile});
|
|
50
50
|
/*! Bundled license information:
|
|
51
51
|
|
|
52
52
|
sax/lib/sax.js:
|