@transai/connector-runner-file 0.5.5 → 0.5.7

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 CHANGED
@@ -1,3 +1,23 @@
1
+ ## 0.5.6 (2026-01-07)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **XODO-1133:** ability to use both action ID and config type ([6f6d84d5](https://github.com/xip-online-applications/xod-core/commit/6f6d84d5))
6
+
7
+ ### ❤️ Thank You
8
+
9
+ - Youri Lefers @yourilefers
10
+
11
+ ## 0.5.5 (2026-01-07)
12
+
13
+ ### 🚀 Features
14
+
15
+ - **XODO-1133:** ability to use both action ID and config type ([#972](https://github.com/xip-online-applications/xod-core/pull/972))
16
+
17
+ ### ❤️ Thank You
18
+
19
+ - Youri Lefers @yourilefers
20
+
1
21
  ## 0.5.4 (2026-01-07)
2
22
 
3
23
  ### 🩹 Fixes
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 S2(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);v2(n,(a,u)=>{let d=E2(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((YM,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((zM,xm)=>{"use strict";var{Stream:T2,Transform:O2}=Tt(),Tm=Ui(),{LEVEL:Ce,SPLAT:Om}=ne(),Dm=sa(),D2=ca(),x2=da(),P2=bs(),M2=Sm(),{warn:N2}=Uo(),R2=Fi(),I2=/%[scdjifoO%]/g,Hi=class extends O2{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||R2.npm.levels,this.level=o,this.exceptions&&this.exceptions.unhandle(),this.rejections&&this.rejections.unhandle(),this.exceptions=new D2(this),this.rejections=new x2(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[Ce]=e.level,this._addDefaultMeta(e),this.write(e),this;if(arguments.length===2)return r&&typeof r=="object"?(r[Ce]=r.level=e,this._addDefaultMeta(r),this.write(r),this):(r={[Ce]: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(I2))){let s=Object.assign({},this.defaultMeta,i,{[Ce]: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,{[Ce]:e,[Om]:n,level:e,message:r})),this}_transform(e,r,n){if(this.silent)return n();e[Ce]||(e[Ce]=e.level),!this.levels[e[Ce]]&&this.levels[e[Ce]]!==0&&console.error("[winston] Unknown logger level: %s",e[Ce]),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 P2({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(){N2.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 T2,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 M2(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((JM,Pm)=>{"use strict";var{LEVEL:L2}=ne(),A2=Fi(),C2=Vi(),q2=$r()("winston:create-logger");function F2(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 C2{constructor(i){super(i)}}let r=new e(t);return Object.keys(t.levels).forEach(function(n){if(q2('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[L2]=n,o._addDefaultMeta(a),o.write(a),this||r}return i.length===0?(o.log(n,""),o):o.log(n,...i)},e.prototype[F2(n)]=function(){return(this||r).isLevelEnabled(n)}}),r}});var Nm=S((ZM,Mm)=>{"use strict";var j2=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=j2(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 qe=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)=>qe[t](...e));Object.defineProperty(G,"level",{get(){return qe.level},set(t){qe.level=t}});Object.defineProperty(G,"exceptions",{get(){return qe.exceptions}});Object.defineProperty(G,"rejections",{get(){return qe.rejections}});["exitOnError"].forEach(t=>{Object.defineProperty(G,t,{get(){return qe[t]},set(e){qe[t]=e}})});Object.defineProperty(G,"default",{get(){return{exceptionHandlers:qe.exceptionHandlers,rejectionHandlers:qe.rejectionHandlers,transports:qe.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 k2={};Hm(k2,{ConnectorRunnerFile:()=>ya});module.exports=Wm(k2);var lt=Te(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=Te(require("node:events")),jm=Te(require("node:path"));var rr=class{static{this.TYPE="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=Te(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=Te(require("crypto")),Ki={randomUUID:Ea.default.randomUUID};function Xm(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=Xm;var nr=class{static{this.TYPE="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 Am=Te(Wu()),Cm=Te(bc()),er=Te(require("path"));var Pe=Te(require("node:process")),de=Te(Im()),Lm=(o=>(o.error="error",o.warn="warn",o.info="info",o.http="http",o.debug="debug",o))(Lm||{}),Gr=class t{#e;constructor(e="default",r="info"){this.logger=de.createLogger({level:r,format:de.format.combine(de.format.label({label:e}),de.format.timestamp(),de.format.json(),de.format.errors({stack:!0}))});let n=!1;(Pe.default.env.NODE_ENV!=="production"||Pe.default.env.LOG_TO_CONSOLE==="true")&&(n=!0,this.logger.add(new de.transports.Console({format:de.format.printf(({label:i,level:o,message:s})=>{let a=new Date().toLocaleString();return`[${i}] ${Pe.default.pid} - ${a} ${o}: ${s}`})}))),Pe.default.env.LOG_TO_FILE==="true"&&(n=!0,this.logger.add(new de.transports.File({filename:"error.log",level:"error"})),this.logger.add(new de.transports.File({filename:"combined.log"}))),n||this.logger.add(new de.transports.Console({format:de.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??Pe.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??Pe.default.env.DD_SOURCE??"nodejs",service:e?.service??Pe.default.env.DD_SERVICE??"unknown",env:e?.env??Pe.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.${Pe.default.env.DD_SITE??"datadoghq.eu"}`,path:`/api/v2/logs?${n.toString()}`,ssl:!0,batch:!0,format:de.format.json(),level:"info"};return this.#e&&this.logger.remove(this.#e),this.#e=new de.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=Pe.default.env.LOG_LEVEL||"info",i=!Object.values(Lm).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 Am.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="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&&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="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&&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="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&&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 Wi=class extends Fm.default{#e;#t;constructor(e,r,n){super(),this.#e=e,n=n??this.#e.files(`file://${jm.default.join(process.env.RUNTIME_DIRECTORY??process.env.TRANSAI_TMP_DIR??"./tmp","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.toLowerCase(),o=this.#t[i]||this.#t[i.replace(/^file-/,"")]||this.#t[String(n.config.type)];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)}}}};var ma=Te(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});
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="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&&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="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&&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="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&&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 Wi=class extends Fm.default{#e;#t;constructor(e,r,n){super(),this.#e=e,n=n??this.#e.files(`file://${jm.default.join(process.env.RUNTIME_DIRECTORY??process.env.TRANSAI_TMP_DIR??"./tmp","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.toLowerCase(),o=this.#t[i]||this.#t[i.replace(/^file[.-]/,"")]||this.#t[String(n.config.type)];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)}}}};var ma=Te(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: