@transai/connector-runner-file 0.4.3 → 0.4.5

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/index.js 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:gm.loadavg(),uptime:gm.uptime()}}getTrace(e){return(e?mm.parse(e):mm.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 w2(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);y2(n,(a,u)=>{let d=b2(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 wm=S((GM,bm)=>{"use strict";var pa=class{constructor(e){let r=Ui();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)}};bm.exports=pa});var Ui=S((YM,Sm)=>{"use strict";var{Stream:_2,Transform:v2}=Tt(),_m=$i(),{LEVEL:Le,SPLAT:vm}=ie(),Em=sa(),E2=ca(),S2=da(),T2=bs(),O2=wm(),{warn:D2}=Uo(),x2=qi(),P2=/%[scdjifoO%]/g,Vi=class extends v2{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||x2.npm.levels,this.level=o,this.exceptions&&this.exceptions.unhandle(),this.rejections&&this.rejections.unhandle(),this.exceptions=new E2(this),this.rejections=new S2(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(P2))){let s=Object.assign({},this.defaultMeta,i,{[Le]:e,[vm]: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,[vm]: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();_m(r,(n,i)=>{if(!n||n.finished)return setImmediate(i);n.once("finish",i),n.end()},e)}add(e){let r=!Em(e)||e.log.length>2?new T2({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(!Em(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(){D2.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})}_m(this.transports.filter(a=>!!a.query),s,()=>r(null,n))}stream(e={}){let r=new _2,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 O2(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(Vi.prototype,"transports",{configurable:!1,enumerable:!0,get(){let{pipes:t}=this._readableState;return Array.isArray(t)?t:[t].filter(Boolean)}});Sm.exports=Vi});var ga=S((zM,Tm)=>{"use strict";var{LEVEL:M2}=ie(),N2=qi(),R2=Ui(),I2=$r()("winston:create-logger");function A2(t){return"is"+t.charAt(0).toUpperCase()+t.slice(1)+"Enabled"}Tm.exports=function(t={}){t.levels=t.levels||N2.npm.levels;class e extends R2{constructor(i){super(i)}}let r=new e(t);return Object.keys(t.levels).forEach(function(n){if(I2('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[M2]=n,o._addDefaultMeta(a),o.write(a),this||r}return i.length===0?(o.log(n,""),o):o.log(n,...i)},e.prototype[A2(n)]=function(){return(this||r).isLevelEnabled(n)}}),r}});var Dm=S((QM,Om)=>{"use strict";var L2=ga();Om.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=L2(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 Pm=S(Y=>{"use strict";var xm=$o(),{warn:Kr}=Uo();Y.version=qh().version;Y.transports=Zg();Y.config=qi();Y.addColors=xm.levels;Y.format=xm.format;Y.createLogger=ga();Y.Logger=Ui();Y.ExceptionHandler=ca();Y.RejectionHandler=da();Y.Container=Dm();Y.Transport=Ht();Y.loggers=new Y.Container;var Ce=Y.createLogger();Object.keys(Y.config.npm.levels).concat(["log","query","stream","add","remove","clear","profile","startTimer","handleExceptions","unhandleExceptions","handleRejections","unhandleRejections","configure","child"]).forEach(t=>Y[t]=(...e)=>Ce[t](...e));Object.defineProperty(Y,"level",{get(){return Ce.level},set(t){Ce.level=t}});Object.defineProperty(Y,"exceptions",{get(){return Ce.exceptions}});Object.defineProperty(Y,"rejections",{get(){return Ce.rejections}});["exitOnError"].forEach(t=>{Object.defineProperty(Y,t,{get(){return Ce[t]},set(e){Ce[t]=e}})});Object.defineProperty(Y,"default",{get(){return{exceptionHandlers:Ce.exceptionHandlers,rejectionHandlers:Ce.rejectionHandlers,transports:Ce.transports}}});Kr.deprecated(Y,"setLevels");Kr.forFunctions(Y,"useFormat",["cli"]);Kr.forProperties(Y,"useFormat",["padLevels","stripColors"]);Kr.forFunctions(Y,"deprecated",["addRewriter","addFilter","clone","extend"]);Kr.forProperties(Y,"deprecated",["emitErrs","levelLength"])});import*as lt from"node:process";var tn=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 ve=class{info(){}debug(){}error(){}warn(){}verbose(){}};import q2 from"node:events";var rr=class{static{this.TYPE="file.delete"}#e;#t;constructor(e,r=new ve){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}}};import Bm from"crypto";var nn=new Uint8Array(256),rn=nn.length;function Xi(){return rn>nn.length-16&&(Bm.randomFillSync(nn),rn=0),nn.slice(rn,rn+=16)}var he=[];for(let t=0;t<256;++t)he.push((t+256).toString(16).slice(1));function ba(t,e=0){return he[t[e+0]]+he[t[e+1]]+he[t[e+2]]+he[t[e+3]]+"-"+he[t[e+4]]+he[t[e+5]]+"-"+he[t[e+6]]+he[t[e+7]]+"-"+he[t[e+8]]+he[t[e+9]]+"-"+he[t[e+10]]+he[t[e+11]]+he[t[e+12]]+he[t[e+13]]+he[t[e+14]]+he[t[e+15]]}import $m from"crypto";var Ki={randomUUID:$m.randomUUID};function Um(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 ba(n)}var Gi=Um;var nr=class{static{this.TYPE="file.download"}#e;#t;#r;constructor(e,r,n=new ve){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 Nm=Wi($u()),Rm=Wi(pc());import*as er from"path";var ge=Wi(Pm());import He from"node:process";var Mm=(o=>(o.error="error",o.warn="warn",o.info="info",o.http="http",o.debug="debug",o))(Mm||{}),Gr=class t{#e;constructor(e="default",r="info"){this.logger=ge.createLogger({level:r,format:ge.format.combine(ge.format.label({label:e}),ge.format.timestamp(),ge.format.json())});let n=!1;(He.env.NODE_ENV!=="production"||He.env.LOG_TO_CONSOLE==="true")&&(n=!0,this.logger.add(new ge.transports.Console({format:ge.format.printf(({label:i,level:o,message:s})=>`[${i}] ${o}: ${s}`)}))),He.env.LOG_TO_FILE==="true"&&(n=!0,this.logger.add(new ge.transports.File({filename:"error.log",level:"error"})),this.logger.add(new ge.transports.File({filename:"combined.log"}))),n||this.logger.add(new ge.transports.Console({format:ge.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??He.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??He.env.DD_SOURCE??"nodejs",service:e?.service??He.env.DD_SERVICE??"unknown",env:e?.env??He.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.${He.env.DD_SITE??"datadoghq.eu"}`,path:`/api/v2/logs?${n.toString()}`,ssl:!0,batch:!0,format:ge.format.json(),level:"info"};return this.#e&&this.logger.remove(this.#e),this.#e=new ge.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=He.env.LOG_LEVEL||"info",i=!Object.values(Mm).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}};import{Readable as C2}from"stream";var 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 Nm.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=C2.from(e),o=!0;return Object.keys(n??{}).includes("noHeader")&&(o=(n??{}).noHeader===!0),(0,Rm.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 ve){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 ve){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 ve){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 Hi=class extends q2{#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.created()))}#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)}}}};import Im from"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(Im.join(e,i.name)):Promise.resolve(0)))).reduce((i,o)=>i+o,0)}async#a(e,r){let n=Im.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 Am=class extends tn{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 Hi(this.connectorSDK,this.#e);this.callbackFunction=o.callbackFunctionChain}#e};export{Am as ConnectorRunnerFile};
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 ve){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&&e.raw!=="true"?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 ve){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&&e.overwrite!=="true")throw new Error(`File already exists at ${n}. Set overwrite to true to replace it.`);o&&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 ve){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&&e.overwrite!=="true")throw new Error(`File already exists at ${n}. Set overwrite to true to replace it.`);i&&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 Hi=class extends q2{#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: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)}}}};import Im from"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(Im.join(e,i.name)):Promise.resolve(0)))).reduce((i,o)=>i+o,0)}async#a(e,r){let n=Im.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 Am=class extends tn{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 Hi(this.connectorSDK,this.#e);this.callbackFunction=o.callbackFunctionChain}#e};export{Am as ConnectorRunnerFile};
50
50
  /*! Bundled license information:
51
51
 
52
52
  sax/lib/sax.js: