@onereach/step-run-snowflake-query 0.0.2-rc.7 → 0.0.2-rc.8

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/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- var k=Object.defineProperty;var l=(t,e)=>k(t,"name",{value:e,configurable:!0});import{install as le}from"source-map-support";import{ACTION as Z}from"@onereach/flow-sdk/types/index.js";import{createPrivateKey as ee}from"crypto";import te from"snowflake-sdk";import{setInstance as ne}from"snowflake-sdk/dist/lib/logger.js";import{ACTION as $}from"@onereach/flow-sdk/types/index.js";import D from"@onereach/flow-sdk/errors/timeout.js";import{z as L}from"zod/v4-mini";import M from"@onereach/flow-sdk/errors/base.js";var E={UNKNOWN:"UNKNOWN",STEP_LOGIC_ISSUE:"STEP_LOGIC_ISSUE",AUTH:"AUTH",TIMEOUT:"TIMEOUT",VALIDATION:"VALIDATION",INVALID_REQUEST:"INVALID_REQUEST",RATE_LIMITED:"RATE_LIMITED",SERVER_ERROR:"SERVER_ERROR",UNSUPPORTED:"UNSUPPORTED"},m=class extends M{static{l(this,"SnowflakeExecuteSqlStepError")}};var G=[m,D];function R(t,e={}){let{preserveErrors:n=G,unknownMessage:s="Unknown error",unknownCode:i=E.UNKNOWN}=e;if(n?.some(o=>t instanceof o))return t;if(t instanceof L.core.$ZodError)return new m(L.prettifyError(t),t,{code:E.VALIDATION});if(typeof t=="string")return new m(t,{code:E.UNKNOWN});if(t instanceof Error){if(t.message.includes("Request timed out"))return new D("Timeout",t,{code:E.TIMEOUT});let o=t?.response?.data?.error?.message;return o!=null?new m(o,t,{code:E.SERVER_ERROR}):new m(s,t,{code:i})}return new m(s,{code:i,data:t})}l(R,"errorFilter");function I(t,e){function n(s,i,o,r){let c=t(s,i,o,r);if(typeof c=="function"){let f=r.value,d=c;if(f?.name!=null)try{Object.defineProperty(d,"name",{value:f.name})}catch{}return r.value=d,r}return c??r}return l(n,"runApply"),l(function(i,o,r){if(i!==null&&typeof i=="object"&&(typeof o=="string"||typeof o=="symbol")&&r!==null&&typeof r=="object")return n(e,i,o,r);{let c=i??e;return(f,d,w)=>n(c,f,d,w)}},"decoratorOrFactory")}l(I,"createMethodDecoratorWithOptionalArguments");var V={allowHandleError:!1,useErrorFilter:!0},N=I((t,e,n,s)=>{let i=s.value;if(!(!i||typeof i!="function"))return function(...o){try{let r=i.apply(this,o);return r instanceof Promise?r.catch(c=>F.call(this,t,c,n)):r}catch(r){return F.call(this,t,r,n)}}},V);function F(t,e,n){let s=n.toString();this.log.DEBUG?.(`Error in method '${s}'`,e);let i=t.useErrorFilter?R(e):e;if(i instanceof Error)if(t.allowHandleError){this.thread.enqueue({name:$.error,error:i});return}else{this.end(i);return}throw i}l(F,"errorHandler");import{BasicThreadService as W}from"@onereach/flow-sdk/services/basic.js";import{format as v}from"util";var S=class extends W{static{l(this,"SnowflakeLogger")}logLevel;constructor(e,n){super(e),this.configure(n),this.logLevel=n.logLevel??"ERROR"}trace(e,...n){this.shouldLog("TRACE")&&this.log.DEBUG?.(v(e,...n))}debug(e,...n){this.shouldLog("DEBUG")&&this.log.DEBUG?.(v(e,...n))}info(e,...n){this.shouldLog("INFO")&&this.log.INFO?.(v(e,...n))}warn(e,...n){this.shouldLog("WARNING")&&this.log.WARN?.(v(e,...n))}error(e,...n){this.shouldLog("ERROR")&&this.log.ERROR?.(v(e,...n))}getLevelTag(){return this.logLevel??"ERROR"}getLevel(){return this.getLevelValue(this.getLevelTag())}getLogBuffer(){return[]}configure(e){e.logLevel&&(this.logLevel=e.logLevel)}shouldLog(e){return this.getLevelValue(e)>=this.getLevelValue(this.logLevel)}getLevelValue(e){let n={TRACE:0,DEBUG:1,INFO:2,WARNING:3,ERROR:4,OFF:5};return n[e]??n.ERROR}};import Y from"@onereach/flow-sdk/step.js";var q={},_=I((t,e,n,s)=>{let i=s.value;if(!(!i||typeof i!="function"))return function(...o){try{let r=i.apply(this,o);return r instanceof Promise?r.catch(c=>{let f=n.toString();throw this.log.DEBUG?.(`Error in method '${f}'`,c),R(c)}):r}catch(r){let c=n.toString();throw this.log.DEBUG?.(`Error in method '${c}'`,r),R(r)}}},q);import{en as H}from"zod/v4/locales";import{z as a}from"zod/v4-mini";a.config(H());var u=a.string().check(a.trim(),a.refine(t=>!["undefined","null"].includes(t),{error:"Unexpected undefined or null merge-field value"})),O=a.union([a.coerce.number(),u,a.boolean(),a.null()]),z=a.array(a.array(O)),J=a.union([a.array(O),z]),Q=a.union([J,a.pipe(a.array(a.object({value:O})),a.transform(t=>t.map(e=>e.value))),a.pipe(a.array(a.object({value:a.array(O)})),a.transform(t=>t.map(e=>e.value)))]),A=a.object({auth:a.looseObject({account:u.check(a.minLength(1)),authenticator:h(u),username:h(u),warehouse:h(u),role:h(u),host:h(u.check(a.hostname())),schema:h(u),database:h(u)}),privateKey:a.object({pemKey:h(u.check(a.minLength(1))),keyPass:h(u)}),sqlText:u.check(a.minLength(1)),binds:Q,fetchAsString:a.array(a.enum(["Boolean","Number","Date","Buffer","JSON"]))});function h(t){return a.pipe(a.union([a.undefined(),a.literal(""),t]),a.transform(e=>e===""?void 0:e))}l(h,"optionalStringValue");function X(t,e,n,s){var i=arguments.length,o=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(o=(i<3?r(o):i>3?r(e,n,o):r(e,n))||o);return i>3&&o&&Object.defineProperty(e,n,o),o}l(X,"_ts_decorate");function x(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}l(x,"_ts_metadata");var y=class extends Y{static{l(this,"BaseStep")}async resolveDataIn(){let e=await super.resolveDataIn();return this.log.DEBUG?.("data in before validation",e),A.parse(e)}};X([_,x("design:type",Function),x("design:paramtypes",[]),x("design:returntype",Promise)],y.prototype,"resolveDataIn",null);var P="snfl_sql";var U="cnc_ctx";function C(t,e,n,s){var i=arguments.length,o=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(o=(i<3?r(o):i>3?r(e,n,o):r(e,n))||o);return i>3&&o&&Object.defineProperty(e,n,o),o}l(C,"_ts_decorate");function g(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}l(g,"_ts_metadata");var oe="snfl_cnc",p=class extends y{static{l(this,"ConnectionContext")}static classId=U;static async start(e){await e.process.runThread({id:this.getThreadId(e.id),state:{step:e.step.id,class:this.classId,parentThreadId:e.id},background:!0});let n=this.getConnection(e);if(!n)throw new Error("Failed to create Snowflake connection");return n}static getThreadId(e){return`${P}_${this.classId}_${e}`}static getConnection(e){let n=j(e.id);return e.process.cache[n]}runStep(){this.triggers.hook({name:Z.exit},this.onContentContextEnd),this.triggers.otherwise(this.initialize)}async initialize(){await this._initConnection()}async onContentContextEnd(){await this._destroyConnection()}_createConnection(){let{auth:e}=this.data;return ne(this.logger),te.createConnection({clientSessionKeepAlive:!0,clientSessionKeepAliveHeartbeatFrequency:20,privateKey:this._privateKey,...e})}async _destroyConnection(){let e=this._connection;e&&await new Promise(n=>{e.destroy(s=>{if(s)return this.log.WARN?.("Failed to destroy Snowflake connection"),n();delete this.process.cache[this._cacheKey],this.log.DEBUG?.("Successfully destroyed snowflake connection"),n()})})}async _initConnection(){let e=this._connection??=this._createConnection();return await e.isValidAsync()?(this.log.DEBUG?.("Cached snowflake connection is still valid. Reusing it.",{connectionId:e.getId()}),e):new Promise((s,i)=>{e.connect((o,r)=>{if(o)return this.log.DEBUG?.("Failed to connect to Snowflake",{error:o.message}),i(o);this.log.DEBUG?.("Successfully connected to Snowflake",{id:r.getId()}),s(r)})})}get _connection(){return this.process.cache[this._cacheKey]}set _connection(e){this.process.cache[this._cacheKey]=e}get _cacheKey(){return j(this.state.parentThreadId)}get logger(){let e="INFO";return new S(this.thread,{logLevel:e})}get _privateKey(){let{privateKey:e}=this.data;return e?.pemKey==null?void 0:ee({key:e.pemKey.replaceAll(String.raw`\n`,`
2
- `).trim(),format:"pem",passphrase:e.keyPass}).export({format:"pem",type:"pkcs8"})}};C([N,g("design:type",Function),g("design:paramtypes",[]),g("design:returntype",void 0)],p.prototype,"runStep",null);C([N,g("design:type",Function),g("design:paramtypes",[]),g("design:returntype",Promise)],p.prototype,"initialize",null);C([N,g("design:type",Function),g("design:paramtypes",[]),g("design:returntype",Promise)],p.prototype,"onContentContextEnd",null);function j(t){if(!t)throw new Error("Missing thread id");return`${oe}_${t}`}l(j,"getConnectionCacheKey");import{readFile as re}from"fs/promises";import{createRequire as ie}from"module";var se=ie(import.meta.url);async function K(t){if(typeof t!="string"||!/^\d+\.\d+\.\d+$/.test(t))throw new Error(`Invalid minimum version format: ${t}`);let e=se.resolve("@onereach/flow-sdk/package.json");if(!e)throw new Error("Could not find package.json for @onereach/flow-sdk");let n=await re(e,"utf8"),{version:s}=JSON.parse(n),{groups:i}=/^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)/.exec(s)||{};if(!i)throw new Error(`Invalid Flow SDK version format: ${s}`);let o=Number.parseInt(i.major??"0",10),r=Number.parseInt(i.minor??"0",10),c=Number.parseInt(i.patch??"0",10);if(o==null||r==null||c==null||Number.isNaN(o)||Number.isNaN(r)||Number.isNaN(c))throw new Error(`Invalid version format: ${s}`);let[f,d,w]=t.split(".").map(B=>Number.parseInt(B,10));if(f==null||d==null||w==null||Number.isNaN(f)||Number.isNaN(d)||Number.isNaN(w))throw new Error(`Invalid minimum version format: ${t}`);if(o<f||o===f&&r<d||o===f&&r===d&&c<w)throw new Error(`Flow SDK version '${s}' is lower than required minimum version '${t}' for the step`)}l(K,"validateFlowSdkVersion");function ae(t,e,n,s){var i=arguments.length,o=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(o=(i<3?r(o):i>3?r(e,n,o):r(e,n))||o);return i>3&&o&&Object.defineProperty(e,n,o),o}l(ae,"_ts_decorate");function T(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}l(T,"_ts_metadata");var ce="8.0.72",b=class extends y{static{l(this,"SnowflakeExecuteSqlStep")}async runStep(){await K(ce);let e=await p.start(this.thread),n=await this._executeSql(e);this.exitStep("next",n)}async _executeSql(e){let{sqlText:n,binds:s,fetchAsString:i}=this.data;return await new Promise((o,r)=>{e.execute({sqlText:n,binds:s,fetchAsString:[...new Set(i)],complete(c,f,d){if(c)return r(c);o({rows:d})}})})}};ae([_,T("design:type",Function),T("design:paramtypes",[]),T("design:returntype",Promise)],b.prototype,"runStep",null);le();var ut={[p.classId]:p};export{ut as states,b as step};
1
+ var M=Object.defineProperty;var l=(t,e)=>M(t,"name",{value:e,configurable:!0});import{install as fe}from"source-map-support";import{ACTION as Z}from"@onereach/flow-sdk/types/index.js";import{createPrivateKey as ee}from"crypto";import te from"snowflake-sdk";import{setInstance as ne}from"snowflake-sdk/dist/lib/logger.js";import{Memoize as oe}from"typescript-memoize";import{ACTION as $}from"@onereach/flow-sdk/types/index.js";import D from"@onereach/flow-sdk/errors/timeout.js";import{z as L}from"zod/v4-mini";import k from"@onereach/flow-sdk/errors/base.js";var E={UNKNOWN:"UNKNOWN",STEP_LOGIC_ISSUE:"STEP_LOGIC_ISSUE",AUTH:"AUTH",TIMEOUT:"TIMEOUT",VALIDATION:"VALIDATION",INVALID_REQUEST:"INVALID_REQUEST",RATE_LIMITED:"RATE_LIMITED",SERVER_ERROR:"SERVER_ERROR",UNSUPPORTED:"UNSUPPORTED"},h=class extends k{static{l(this,"SnowflakeExecuteSqlStepError")}};var G=[h,D];function v(t,e={}){let{preserveErrors:n=G,unknownMessage:s="Unknown error",unknownCode:i=E.UNKNOWN}=e;if(n?.some(o=>t instanceof o))return t;if(t instanceof L.core.$ZodError)return new h(L.prettifyError(t),t,{code:E.VALIDATION});if(typeof t=="string")return new h(t,{code:E.UNKNOWN});if(t instanceof Error){if(t.message.includes("Request timed out"))return new D("Timeout",t,{code:E.TIMEOUT});let o=t?.response?.data?.error?.message;return o!=null?new h(o,t,{code:E.SERVER_ERROR}):new h(s,t,{code:i})}return new h(s,{code:i,data:t})}l(v,"errorFilter");function N(t,e){function n(s,i,o,r){let c=t(s,i,o,r);if(typeof c=="function"){let f=r.value,d=c;if(f?.name!=null)try{Object.defineProperty(d,"name",{value:f.name})}catch{}return r.value=d,r}return c??r}return l(n,"runApply"),l(function(i,o,r){if(i!==null&&typeof i=="object"&&(typeof o=="string"||typeof o=="symbol")&&r!==null&&typeof r=="object")return n(e,i,o,r);{let c=i??e;return(f,d,R)=>n(c,f,d,R)}},"decoratorOrFactory")}l(N,"createMethodDecoratorWithOptionalArguments");var V={allowHandleError:!1,useErrorFilter:!0},S=N((t,e,n,s)=>{let i=s.value;if(!(!i||typeof i!="function"))return function(...o){try{let r=i.apply(this,o);return r instanceof Promise?r.catch(c=>F.call(this,t,c,n)):r}catch(r){return F.call(this,t,r,n)}}},V);function F(t,e,n){let s=n.toString();this.log.DEBUG?.(`Error in method '${s}'`,e);let i=t.useErrorFilter?v(e):e;if(i instanceof Error)if(t.allowHandleError){this.thread.enqueue({name:$.error,error:i});return}else{this.end(i);return}throw i}l(F,"errorHandler");import{BasicThreadService as W}from"@onereach/flow-sdk/services/basic.js";import{format as I}from"util";var w=class extends W{static{l(this,"SnowflakeLogger")}logLevel;constructor(e,n){super(e),this.configure(n),this.logLevel=n.logLevel??"ERROR"}trace(e,...n){this.shouldLog("TRACE")&&this.log.DEBUG?.(I(e,...n))}debug(e,...n){this.shouldLog("DEBUG")&&this.log.DEBUG?.(I(e,...n))}info(e,...n){this.shouldLog("INFO")&&this.log.INFO?.(I(e,...n))}warn(e,...n){this.shouldLog("WARNING")&&this.log.WARN?.(I(e,...n))}error(e,...n){this.shouldLog("ERROR")&&this.log.ERROR?.(I(e,...n))}getLevelTag(){return this.logLevel??"ERROR"}getLevel(){return this.getLevelValue(this.getLevelTag())}getLogBuffer(){return[]}configure(e){e.logLevel&&(this.logLevel=e.logLevel)}shouldLog(e){return this.getLevelValue(e)>=this.getLevelValue(this.logLevel)}getLevelValue(e){let n={TRACE:0,DEBUG:1,INFO:2,WARNING:3,ERROR:4,OFF:5};return n[e]??n.ERROR}};import Y from"@onereach/flow-sdk/step.js";var q={},_=N((t,e,n,s)=>{let i=s.value;if(!(!i||typeof i!="function"))return function(...o){try{let r=i.apply(this,o);return r instanceof Promise?r.catch(c=>{let f=n.toString();throw this.log.DEBUG?.(`Error in method '${f}'`,c),v(c)}):r}catch(r){let c=n.toString();throw this.log.DEBUG?.(`Error in method '${c}'`,r),v(r)}}},q);import{en as H}from"zod/v4/locales";import{z as a}from"zod/v4-mini";a.config(H());var u=a.string().check(a.trim(),a.refine(t=>!["undefined","null"].includes(t),{error:"Unexpected undefined or null merge-field value"})),O=a.union([a.coerce.number(),u,a.boolean(),a.null()]),z=a.array(a.array(O)),J=a.union([a.array(O),z]),Q=a.union([J,a.pipe(a.array(a.object({value:O})),a.transform(t=>t.map(e=>e.value))),a.pipe(a.array(a.object({value:a.array(O)})),a.transform(t=>t.map(e=>e.value)))]),A=a.object({auth:a.looseObject({account:u.check(a.minLength(1)),authenticator:g(u),username:g(u),warehouse:g(u),role:g(u),host:g(u.check(a.hostname())),schema:g(u),database:g(u)}),privateKey:a.object({pemKey:g(u.check(a.minLength(1))),keyPass:g(u)}),sqlText:u.check(a.minLength(1)),binds:Q,fetchAsString:a.array(a.enum(["Boolean","Number","Date","Buffer","JSON"]))});function g(t){return a.pipe(a.union([a.undefined(),a.literal(""),t]),a.transform(e=>e===""?void 0:e))}l(g,"optionalStringValue");function X(t,e,n,s){var i=arguments.length,o=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(o=(i<3?r(o):i>3?r(e,n,o):r(e,n))||o);return i>3&&o&&Object.defineProperty(e,n,o),o}l(X,"_ts_decorate");function C(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}l(C,"_ts_metadata");var y=class extends Y{static{l(this,"BaseStep")}async resolveDataIn(){let e=await super.resolveDataIn();return A.parse(e)}};X([_,C("design:type",Function),C("design:paramtypes",[]),C("design:returntype",Promise)],y.prototype,"resolveDataIn",null);var P="snfl_sql";var U="cnc_ctx";function b(t,e,n,s){var i=arguments.length,o=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(o=(i<3?r(o):i>3?r(e,n,o):r(e,n))||o);return i>3&&o&&Object.defineProperty(e,n,o),o}l(b,"_ts_decorate");function p(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}l(p,"_ts_metadata");var re="snfl_cnc",m=class extends y{static{l(this,"ConnectionContext")}static classId=U;static async start(e){await e.process.runThread({id:this.getThreadId(e.id),state:{step:e.step.id,class:this.classId,parentThreadId:e.id},background:!0});let n=this.getConnection(e);if(!n)throw new Error("Failed to create Snowflake connection");return n}static getThreadId(e){return`${P}_${this.classId}_${e}`}static getConnection(e){let n=j(e.id);return e.process.cache[n]}runStep(){this.triggers.hook({name:Z.exit},this.onContentContextEnd),this.triggers.otherwise(this.initialize)}async initialize(){await this._initConnection()}async onContentContextEnd(){await this._destroyConnection()}_createConnection(){this.log.DEBUG?.("Creating Snowflake connection...");let{auth:e}=this.data;return ne(this.logger),te.createConnection({clientSessionKeepAlive:!0,clientSessionKeepAliveHeartbeatFrequency:20,privateKey:this._privateKey,...e})}async _destroyConnection(){let e=this._connection;e&&await new Promise(n=>{e.destroy(s=>{if(s)return this.log.WARN?.("Failed to destroy Snowflake connection"),n();delete this.process.cache[this._cacheKey],this.log.DEBUG?.("Successfully destroyed snowflake connection"),n()})})}async _initConnection(){let e=this._connection??=this._createConnection();return await e.isValidAsync()?(this.log.DEBUG?.("Cached Snowflake connection is still valid. Reusing it.",{connectionId:e.getId()}),e):new Promise((s,i)=>{let o=Date.now();e.connect((r,c)=>{if(r)return this.log.DEBUG?.("Failed to connect to Snowflake",{error:r.message}),i(r);let f=Date.now()-o;this.log.DEBUG?.("Successfully connected to Snowflake",{connectionId:c.getId(),durationMs:f}),s(c)})})}get _connection(){return this.process.cache[this._cacheKey]}set _connection(e){this.process.cache[this._cacheKey]=e}get _cacheKey(){return j(this.state.parentThreadId)}get logger(){let e="INFO";return new w(this.thread,{logLevel:e})}get _privateKey(){let{privateKey:e}=this.data;return e?.pemKey==null?void 0:ee({key:e.pemKey.replaceAll(String.raw`\n`,`
2
+ `).trim(),format:"pem",passphrase:e.keyPass}).export({format:"pem",type:"pkcs8"})}};b([S,p("design:type",Function),p("design:paramtypes",[]),p("design:returntype",void 0)],m.prototype,"runStep",null);b([S,p("design:type",Function),p("design:paramtypes",[]),p("design:returntype",Promise)],m.prototype,"initialize",null);b([S,p("design:type",Function),p("design:paramtypes",[]),p("design:returntype",Promise)],m.prototype,"onContentContextEnd",null);b([oe(),p("design:type",typeof w>"u"?Object:w),p("design:paramtypes",[])],m.prototype,"logger",null);function j(t){if(!t)throw new Error("Missing thread id");return`${re}_${t}`}l(j,"getConnectionCacheKey");import{readFile as ie}from"fs/promises";import{createRequire as se}from"module";var ae=se(import.meta.url);async function K(t){if(typeof t!="string"||!/^\d+\.\d+\.\d+$/.test(t))throw new Error(`Invalid minimum version format: ${t}`);let e=ae.resolve("@onereach/flow-sdk/package.json");if(!e)throw new Error("Could not find package.json for @onereach/flow-sdk");let n=await ie(e,"utf8"),{version:s}=JSON.parse(n),{groups:i}=/^(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)/.exec(s)||{};if(!i)throw new Error(`Invalid Flow SDK version format: ${s}`);let o=Number.parseInt(i.major??"0",10),r=Number.parseInt(i.minor??"0",10),c=Number.parseInt(i.patch??"0",10);if(o==null||r==null||c==null||Number.isNaN(o)||Number.isNaN(r)||Number.isNaN(c))throw new Error(`Invalid version format: ${s}`);let[f,d,R]=t.split(".").map(B=>Number.parseInt(B,10));if(f==null||d==null||R==null||Number.isNaN(f)||Number.isNaN(d)||Number.isNaN(R))throw new Error(`Invalid minimum version format: ${t}`);if(o<f||o===f&&r<d||o===f&&r===d&&c<R)throw new Error(`Flow SDK version '${s}' is lower than required minimum version '${t}' for the step`)}l(K,"validateFlowSdkVersion");function ce(t,e,n,s){var i=arguments.length,o=i<3?e:s===null?s=Object.getOwnPropertyDescriptor(e,n):s,r;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")o=Reflect.decorate(t,e,n,s);else for(var c=t.length-1;c>=0;c--)(r=t[c])&&(o=(i<3?r(o):i>3?r(e,n,o):r(e,n))||o);return i>3&&o&&Object.defineProperty(e,n,o),o}l(ce,"_ts_decorate");function T(t,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(t,e)}l(T,"_ts_metadata");var le="8.0.72",x=class extends y{static{l(this,"SnowflakeExecuteSqlStep")}async runStep(){await K(le);let e=await m.start(this.thread),n=await this._executeSql(e);this.exitStep("next",n)}async _executeSql(e){let{sqlText:n,binds:s,fetchAsString:i}=this.data;return await new Promise((o,r)=>{e.execute({sqlText:n,binds:s,fetchAsString:[...new Set(i)],complete(c,f,d){if(c)return r(c);o({rows:d})}})})}};ce([_,T("design:type",Function),T("design:paramtypes",[]),T("design:returntype",Promise)],x.prototype,"runStep",null);fe();var pt={[m.classId]:m};export{pt as states,x as step};
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/threads/connection/connection-context.ts","../src/decorators/background-thread-error-filter.ts","../src/errors/error-filter.ts","../src/errors/step-error.ts","../src/utils/create-method-decorator.ts","../src/services/snowflake-logger.ts","../src/threads/base/base.ts","../src/decorators/error-filter.ts","../src/schemas/data-in.ts","../src/threads/connection/constants.ts","../src/utils/validate-flow-sdk-version.ts","../src/threads/main/step.ts"],"sourcesContent":["import { install } from 'source-map-support';\n\nimport { ConnectionContext } from './threads/connection/connection-context.ts';\n\n// enable source map support for better error stack traces\ninstall();\n\nexport const states = {\n [ConnectionContext.classId]: ConnectionContext,\n};\n\nexport { SnowflakeExecuteSqlStep as step } from './threads/main/step.ts';\n\nexport type * from './threads/main/types.ts';\nexport type * from './threads/base/types.ts';\nexport type * from './threads/connection/types.ts';\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { ACTION } from '@onereach/flow-sdk/types/index.js';\nimport type { AnyConfig, IThread, IThreadId } from '@onereach/flow-sdk/types/index.js';\nimport { createPrivateKey } from 'node:crypto';\nimport snowflake from 'snowflake-sdk';\nimport type { Connection } from 'snowflake-sdk';\nimport { setInstance } from 'snowflake-sdk/dist/lib/logger.js';\n\nimport { BackgroundThreadErrorFilter } from '../../decorators/background-thread-error-filter.ts';\nimport { SnowflakeLogger } from '../../services/snowflake-logger.ts';\nimport { baseClassIdPrefix, BaseStep } from '../base/base.ts';\nimport type { SnowflakeExecuteSqlConfig } from '../main/types.ts';\n\nimport { connectionContextClassId } from './constants.ts';\nimport type { ConnectionContextConfig } from './types.ts';\n\nconst PROCESS_CACHE_KEY_PREFIX = 'snfl_cnc';\n\nexport class ConnectionContext extends BaseStep<ConnectionContextConfig> {\n public static readonly classId = connectionContextClassId;\n\n public static async start<T extends SnowflakeExecuteSqlConfig>(thread: IThread<T>): Promise<Connection> {\n await thread.process.runThread<ConnectionContextConfig>({\n id: this.getThreadId(thread.id),\n state: {\n step: thread.step.id,\n class: this.classId,\n\n parentThreadId: thread.id,\n },\n background: true,\n });\n\n const connection = this.getConnection<T>(thread);\n // TODO: use branded error\n if (!connection) throw new Error('Failed to create Snowflake connection');\n\n return connection;\n }\n\n public static getThreadId(threadId: IThreadId): IThreadId {\n return `${baseClassIdPrefix}_${this.classId}_${threadId}`;\n }\n\n public static getConnection<T extends SnowflakeExecuteSqlConfig>(thread: IThread<T>): Connection | undefined {\n const cacheKey = getConnectionCacheKey(thread.id);\n return thread.process.cache[cacheKey] as Connection | undefined;\n }\n\n // ---------------------------------------\n\n @BackgroundThreadErrorFilter\n public runStep(): void {\n this.triggers.hook<AnyConfig, ACTION.exit>({ name: ACTION.exit }, this.onContentContextEnd);\n this.triggers.otherwise(this.initialize);\n }\n\n @BackgroundThreadErrorFilter\n public async initialize(): Promise<void> {\n await this._initConnection();\n }\n\n @BackgroundThreadErrorFilter\n public async onContentContextEnd(): Promise<void> {\n await this._destroyConnection();\n }\n\n private _createConnection(): Connection {\n const { auth } = this.data;\n\n // set Snowflake SDK logger\n setInstance(this.logger);\n\n // TODO: use this.data here\n return snowflake.createConnection({\n clientSessionKeepAlive: true, // Keep connections alive\n clientSessionKeepAliveHeartbeatFrequency: 20, // 20 seconds\n // timeout: 20_000,\n privateKey: this._privateKey,\n ...auth,\n });\n }\n\n private async _destroyConnection(): Promise<void> {\n const connection = this._connection;\n if (!connection) return;\n\n await new Promise<void>((resolve) => {\n connection.destroy((error) => {\n if (error) {\n this.log.WARN?.('Failed to destroy Snowflake connection');\n return resolve();\n }\n\n delete this.process.cache[this._cacheKey];\n this.log.DEBUG?.('Successfully destroyed snowflake connection');\n resolve();\n });\n });\n }\n\n private async _initConnection(): Promise<Connection> {\n const connection = (this._connection ??= this._createConnection());\n\n const isConnectionValid = await connection.isValidAsync();\n if (isConnectionValid) {\n this.log.DEBUG?.('Cached snowflake connection is still valid. Reusing it.', { connectionId: connection.getId() });\n return connection;\n }\n\n return new Promise((resolve, reject) => {\n connection.connect((error, conn) => {\n if (error) {\n this.log.DEBUG?.('Failed to connect to Snowflake', { error: error.message });\n return reject(error);\n }\n\n this.log.DEBUG?.('Successfully connected to Snowflake', { id: conn.getId() });\n resolve(conn);\n });\n });\n }\n\n private get _connection(): Connection | undefined {\n return this.process.cache[this._cacheKey] as Connection | undefined;\n }\n\n private set _connection(connection: Connection) {\n this.process.cache[this._cacheKey] = connection;\n }\n\n private get _cacheKey(): string {\n // TODO: take into account connection parameters\n return getConnectionCacheKey(this.state.parentThreadId);\n }\n\n private get logger(): SnowflakeLogger<ConnectionContextConfig> {\n // const { logLevel } = this.data;\n const logLevel = 'INFO';\n\n return new SnowflakeLogger(this.thread, { logLevel });\n }\n\n private get _privateKey(): string | undefined {\n const { privateKey } = this.data;\n\n if (privateKey?.pemKey == undefined) return undefined;\n\n // Get the private key from the file as an object.\n const privateKeyObject = createPrivateKey({\n key: privateKey.pemKey.replaceAll(String.raw`\\n`, '\\n').trim(),\n format: 'pem',\n passphrase: privateKey.keyPass,\n });\n\n // Extract the private key from the object as a PEM-encoded string.\n return privateKeyObject.export({\n format: 'pem',\n type: 'pkcs8',\n }) as string;\n }\n}\n\nfunction getConnectionCacheKey(threadId: IThreadId): string {\n if (!threadId) throw new Error('Missing thread id');\n\n // TODO: take into account connection parameters\n return `${PROCESS_CACHE_KEY_PREFIX}_${threadId}`;\n}\n","import type Step from '@onereach/flow-sdk/step.js';\nimport { ACTION } from '@onereach/flow-sdk/types/index.js';\n\nimport { errorFilter } from '../errors/error-filter.ts';\nimport { createMethodDecoratorWithOptionalArguments } from '../utils/create-method-decorator.ts';\n\nconst defaultOptions: BackgroundThreadErrorFilterOptions = { allowHandleError: false, useErrorFilter: true };\n\n/**\n * Since errors in hooks are fatal and can't be processed this decorator allows to wrap hook handler\n * and manage errors by ending a thread with the error (preventing sending error to `error` exit)\n * @param options.allowHandleError - Default `false`. If `false` in case of error will end thread with error as result, if `true` will allow to handle error via 'error' exit\n * @param options.useErrorFilter - Default `true`. If `true` every error wild be processed with `errorFilter` utility function\n */\nexport const BackgroundThreadErrorFilter = createMethodDecoratorWithOptionalArguments(\n (options, _target, propertyKey, descriptor) => {\n const originalMethod = descriptor.value;\n if (!originalMethod || typeof originalMethod !== 'function') return;\n\n return function (this: Step, ...arguments_: Parameters<typeof originalMethod>): ReturnType<typeof originalMethod> {\n try {\n const result: unknown = originalMethod.apply(this, arguments_);\n\n if (result instanceof Promise) {\n return result.catch((error) => errorHandler.call(this, options, error, propertyKey));\n }\n\n return result;\n } catch (error) {\n return errorHandler.call(this, options, error, propertyKey) as ReturnType<typeof originalMethod>;\n }\n } as typeof originalMethod;\n },\n defaultOptions,\n);\n\nfunction errorHandler(\n this: Step,\n options: BackgroundThreadErrorFilterOptions,\n error: unknown,\n propertyKey: string | symbol,\n): void {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n const filteredError = options.useErrorFilter ? errorFilter(error) : error;\n\n if (filteredError instanceof Error) {\n if (options.allowHandleError) {\n // Send it to the 'error' exit and stop here\n this.thread.enqueue({ name: ACTION.error, error: filteredError });\n return;\n } else {\n // End the thread with the error and stop here\n this.end(filteredError);\n return;\n }\n }\n\n // Only throw if it's not an Error instance and you truly want to bubble it\n throw filteredError;\n}\n\nexport type BackgroundThreadErrorFilterOptions = {\n allowHandleError?: boolean;\n useErrorFilter?: boolean;\n};\n","import TimeoutError from '@onereach/flow-sdk/errors/timeout.js';\nimport { z } from 'zod/v4-mini';\n\nimport { SnowflakeExecuteSqlStepError, ErrorCode } from './step-error.ts';\n\nconst defaultPreserveErrors = [SnowflakeExecuteSqlStepError, TimeoutError] as const;\nexport function errorFilter<P extends readonly AnyErrorClass[] = typeof defaultPreserveErrors>(\n error: unknown,\n options: ErrorFilterOptions<P> = {},\n): InstancesOf<P> | SnowflakeExecuteSqlStepError | TimeoutError {\n const {\n preserveErrors = defaultPreserveErrors,\n unknownMessage = 'Unknown error',\n unknownCode = ErrorCode.UNKNOWN,\n } = options;\n\n // if error is SnowflakeExecuteSqlStepError or TimeoutError, return it directly\n if (preserveErrors?.some((ErrorClass) => error instanceof ErrorClass)) {\n return error as InstancesOf<P>;\n }\n\n // validation errors\n if (error instanceof z.core.$ZodError) {\n return new SnowflakeExecuteSqlStepError(z.prettifyError(error), error, {\n code: ErrorCode.VALIDATION,\n });\n }\n\n // if error is a string assume it's an error message\n if (typeof error === 'string') {\n return new SnowflakeExecuteSqlStepError(error, {\n code: ErrorCode.UNKNOWN,\n });\n }\n\n if (error instanceof Error) {\n // timeout errors\n if (error.message.includes('Request timed out')) {\n return new TimeoutError('Timeout', error, { code: ErrorCode.TIMEOUT });\n }\n\n // TODO: fix interpreting of this kind of errors\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const responseErrorMessage: string | undefined = (error as unknown as any)?.response?.data?.error?.message;\n if (responseErrorMessage != undefined) {\n return new SnowflakeExecuteSqlStepError(responseErrorMessage, error, {\n code: ErrorCode.SERVER_ERROR,\n });\n }\n\n return new SnowflakeExecuteSqlStepError(unknownMessage, error, {\n code: unknownCode,\n });\n }\n\n // catch all for unknown errors\n return new SnowflakeExecuteSqlStepError(unknownMessage, {\n code: unknownCode,\n data: error,\n });\n}\n\nexport type ErrorFilterOptions<P extends readonly AnyErrorClass[]> = {\n /** Array of error classes that should not be wrapped */\n preserveErrors?: P;\n /** Error message to use when message is unknown */\n unknownMessage?: string;\n /** Error code to use when message is unknown */\n unknownCode?: keyof typeof ErrorCode;\n};\n\n/** Any Error class */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyErrorClass<E extends Error = Error> = new (...arguments_: any[]) => E;\n\n/** Turn a tuple/array of constructors into a union of their instance types. */\nexport type InstancesOf<Ctors extends readonly AnyErrorClass[]> =\n Ctors[number] extends AnyErrorClass<infer I> ? I : never;\n","import BaseError from '@onereach/flow-sdk/errors/base.js';\n\nexport const ErrorCode = {\n UNKNOWN: 'UNKNOWN',\n STEP_LOGIC_ISSUE: 'STEP_LOGIC_ISSUE',\n AUTH: 'AUTH',\n TIMEOUT: 'TIMEOUT',\n VALIDATION: 'VALIDATION',\n INVALID_REQUEST: 'INVALID_REQUEST',\n RATE_LIMITED: 'RATE_LIMITED',\n SERVER_ERROR: 'SERVER_ERROR',\n UNSUPPORTED: 'UNSUPPORTED',\n} as const;\n\nexport class SnowflakeExecuteSqlStepError extends BaseError<{\n code: keyof typeof ErrorCode;\n data?: unknown;\n}> {}\n\nexport class AbortRequestError extends BaseError {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Creates a method decorator that can be used with or without options.\n * @param apply - Function that applies the decorator logic with given options.\n * @param defaultOptions - Default options to use if none are provided.\n */\nexport function createMethodDecoratorWithOptionalArguments<A, T extends AnyFunction = AnyFunction>(\n apply: (\n options: A,\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ) => T | TypedPropertyDescriptor<T> | void,\n defaultOptions: A,\n): MethodDecoratorWithOptionalArguments<A, T> {\n function runApply(\n options: A,\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ): TypedPropertyDescriptor<T> | void {\n const maybe = apply(options, target, propertyKey, descriptor);\n\n // If the decorator factory returned a wrapped function, assign it to the descriptor here\n if (typeof maybe === 'function') {\n const originalMethod = descriptor.value;\n const wrappedMethod = maybe as typeof originalMethod;\n\n if (originalMethod?.name != undefined) {\n try {\n Object.defineProperty(wrappedMethod, 'name', { value: originalMethod.name });\n } catch {\n // ignore if name is non-configurable\n }\n }\n\n descriptor.value = wrappedMethod;\n return descriptor;\n }\n\n // If a descriptor was returned or decorator mutated descriptor in-place, use that\n return maybe ?? descriptor;\n }\n\n return function decoratorOrFactory(\n argument0?: object | A,\n argument1?: string | symbol,\n argument2?: TypedPropertyDescriptor<T>,\n ): any {\n if (\n argument0 !== null &&\n typeof argument0 === 'object' &&\n (typeof argument1 === 'string' || typeof argument1 === 'symbol') &&\n argument2 !== null &&\n typeof argument2 === 'object'\n ) {\n // Called as plain decorator: @Decorator\n return runApply(defaultOptions, argument0, argument1, argument2);\n } else {\n // Called as decorator factory: @Decorator(options)\n const options = (argument0 as A) ?? defaultOptions;\n return (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => {\n return runApply(options, target, propertyKey, descriptor);\n };\n }\n };\n}\n\nexport type AnyFunction = (...arguments_: any[]) => any;\n\nexport type MethodDecoratorWithOptionalArguments<A, T extends AnyFunction = AnyFunction> =\n // Plain method decorator (three arguments)\n ((\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ) => TypedPropertyDescriptor<T> | void) &\n // Decorator factory (optional options argument)\n ((options?: A) => MethodDecorator);\n","import { BasicThreadService } from '@onereach/flow-sdk/services/basic.js';\nimport type { CONFIG, IThread } from '@onereach/flow-sdk/types/index.js';\nimport { format } from 'node:util';\nimport type Logger from 'snowflake-sdk/dist/lib/logger/browser.js';\n\nexport type LogLevel = 'TRACE' | 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR' | 'OFF';\n\nexport type SnowflakeLoggerConfig = {\n logLevel?: LogLevel;\n};\n\nexport class SnowflakeLogger<TConfig extends CONFIG> extends BasicThreadService<TConfig> implements Logger {\n private logLevel: LogLevel;\n\n constructor(thread: IThread<TConfig>, config: SnowflakeLoggerConfig) {\n super(thread);\n\n this.configure(config);\n this.logLevel = config.logLevel ?? 'ERROR';\n }\n\n public trace(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('TRACE')) {\n this.log.DEBUG?.(format(message, ...parameters));\n }\n }\n\n public debug(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('DEBUG')) {\n this.log.DEBUG?.(format(message, ...parameters));\n }\n }\n\n public info(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('INFO')) {\n this.log.INFO?.(format(message, ...parameters));\n }\n }\n\n public warn(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('WARNING')) {\n this.log.WARN?.(format(message, ...parameters));\n }\n }\n\n public error(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('ERROR')) {\n this.log.ERROR?.(format(message, ...parameters));\n }\n }\n\n public getLevelTag(): LogLevel {\n return this.logLevel ?? 'ERROR';\n }\n\n /** Required to implement Logger interface */\n public getLevel(): number {\n return this.getLevelValue(this.getLevelTag());\n }\n\n /** Required to implement Logger interface */\n public getLogBuffer(): string[] {\n return [];\n }\n\n /** Required to implement Logger interface */\n public configure(config: SnowflakeLoggerConfig) {\n if (config.logLevel) {\n this.logLevel = config.logLevel;\n }\n }\n\n /** If returns `true`, log would be created */\n private shouldLog(level: LogLevel): boolean {\n return this.getLevelValue(level) >= this.getLevelValue(this.logLevel);\n }\n\n /** Map Snowflake log levels to numeric values */\n private getLevelValue(level: LogLevel): number {\n const levels = { TRACE: 0, DEBUG: 1, INFO: 2, WARNING: 3, ERROR: 4, OFF: 5 };\n return levels[level] ?? levels.ERROR;\n }\n}\n","import Step from '@onereach/flow-sdk/step.js';\n\nimport { ErrorFilter } from '../../decorators/error-filter.ts';\nimport { dataInSchema } from '../../schemas/data-in.ts';\n\nimport type { BaseConfig } from './types.ts';\n\n// TODO: convert it into class decorator\nexport class BaseStep<T extends BaseConfig> extends Step<T> {\n @ErrorFilter\n public async resolveDataIn() {\n const dataIn = await super.resolveDataIn();\n\n // validate dataIn against schema\n this.log.DEBUG?.('data in before validation', dataIn);\n return dataInSchema.parse(dataIn);\n }\n}\n\nexport const baseClassIdPrefix = 'snfl_sql';\n","import type Step from '@onereach/flow-sdk/step.js';\n\nimport { errorFilter } from '../errors/error-filter.ts';\nimport { createMethodDecoratorWithOptionalArguments } from '../utils/create-method-decorator.ts';\n\nconst defaultOptions = {};\n\n/**\n * Will wrap method with `errorFilter` for every error.\n */\nexport const ErrorFilter = createMethodDecoratorWithOptionalArguments((_options, _target, propertyKey, descriptor) => {\n const originalMethod = descriptor.value;\n\n if (!originalMethod || typeof originalMethod !== 'function') return;\n\n return function (this: Step, ...arguments_: Parameters<typeof originalMethod>): ReturnType<typeof originalMethod> {\n try {\n const result: unknown = originalMethod.apply(this, arguments_);\n\n if (result instanceof Promise) {\n return result.catch((error: unknown) => {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n throw errorFilter(error);\n }) as ReturnType<typeof originalMethod>;\n }\n\n return result;\n } catch (error) {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n throw errorFilter(error);\n }\n };\n}, defaultOptions);\n","import type { Bind, Binds, InsertBinds } from 'snowflake-sdk';\nimport { en } from 'zod/v4/locales';\nimport { z } from 'zod/v4-mini';\n\nz.config(en());\n\n// string that prevents 'undefined' and 'null' values\nconst stringNoUndefinedSchema = z.string().check(\n z.trim(),\n z.refine((value) => !['undefined', 'null'].includes(value), {\n error: 'Unexpected undefined or null merge-field value',\n }),\n);\n\nconst bindSchema = z.union([\n z.coerce.number(),\n stringNoUndefinedSchema,\n z.boolean(),\n z.null(),\n]) satisfies z.core.$ZodType<Bind>;\n\nconst insertBindsSchema = z.array(z.array(bindSchema)) satisfies z.core.$ZodType<InsertBinds>;\nconst bindsSchema = z.union([z.array(bindSchema), insertBindsSchema]) satisfies z.core.$ZodType<Binds>;\nconst extendedBindsSchema = z.union([\n bindsSchema,\n\n // binds wrapped in object with \"value\" key from UI\n z.pipe(\n z.array(z.object({ value: bindSchema })),\n z.transform((array) => array.map((o) => o.value)),\n ),\n\n // insert binds wrapped in object with \"value\" key from UI\n z.pipe(\n z.array(z.object({ value: z.array(bindSchema) })),\n z.transform((array) => array.map((o) => o.value)),\n ),\n]);\n\nexport const dataInSchema = z.object({\n auth: z.looseObject({\n account: stringNoUndefinedSchema.check(z.minLength(1)),\n authenticator: optionalStringValue(stringNoUndefinedSchema),\n username: optionalStringValue(stringNoUndefinedSchema),\n\n warehouse: optionalStringValue(stringNoUndefinedSchema),\n role: optionalStringValue(stringNoUndefinedSchema),\n host: optionalStringValue(stringNoUndefinedSchema.check(z.hostname())),\n schema: optionalStringValue(stringNoUndefinedSchema),\n database: optionalStringValue(stringNoUndefinedSchema),\n // TODO: add timeout\n }),\n privateKey: z.object({\n pemKey: optionalStringValue(stringNoUndefinedSchema.check(z.minLength(1))),\n keyPass: optionalStringValue(stringNoUndefinedSchema),\n }),\n sqlText: stringNoUndefinedSchema.check(z.minLength(1)),\n binds: extendedBindsSchema,\n fetchAsString: z.array(z.enum(['Boolean', 'Number', 'Date', 'Buffer', 'JSON'])),\n});\n\nexport type DataIn = z.infer<typeof dataInSchema>;\n\n/**\n * Convert empty string to undefined before running schema validation\n * @param schema schema to validate against\n * @param defaultValue optional default value\n */\nfunction optionalStringValue<T extends z.core.SomeType>(schema: T) {\n return z.pipe(\n z.union([z.undefined(), z.literal(''), schema]),\n z.transform((value) => (value === '' ? undefined : value)),\n );\n}\n","export const connectionContextClassId = 'cnc_ctx';\n","import { readFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\n\nconst require = createRequire(import.meta.url);\n\nexport async function validateFlowSdkVersion(minVersion: string): Promise<void> {\n if (typeof minVersion !== 'string' || !/^\\d+\\.\\d+\\.\\d+$/.test(minVersion)) {\n throw new Error(`Invalid minimum version format: ${minVersion}`);\n }\n\n const packageJsonPath = require.resolve('@onereach/flow-sdk/package.json');\n if (!packageJsonPath) {\n throw new Error(`Could not find package.json for @onereach/flow-sdk`);\n }\n // Read the package.json file to get the version\n const packageJsonContent = await readFile(packageJsonPath, 'utf8');\n\n const { version } = JSON.parse(packageJsonContent) as { version: string };\n const { groups } = /^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)/.exec(version) || {};\n\n if (!groups) throw new Error(`Invalid Flow SDK version format: ${version}`);\n\n const major = Number.parseInt(groups.major ?? '0', 10);\n const minor = Number.parseInt(groups.minor ?? '0', 10);\n const patch = Number.parseInt(groups.patch ?? '0', 10);\n\n if (\n major == undefined ||\n minor == undefined ||\n patch == undefined ||\n Number.isNaN(major) ||\n Number.isNaN(minor) ||\n Number.isNaN(patch)\n ) {\n throw new Error(`Invalid version format: ${version}`);\n }\n\n const [minMajor, minMinor, minPatch] = minVersion.split('.').map((x) => Number.parseInt(x, 10));\n\n if (\n minMajor == undefined ||\n minMinor == undefined ||\n minPatch == undefined ||\n Number.isNaN(minMajor) ||\n Number.isNaN(minMinor) ||\n Number.isNaN(minPatch)\n ) {\n throw new Error(`Invalid minimum version format: ${minVersion}`);\n }\n\n if (\n major < minMajor ||\n (major === minMajor && minor < minMinor) ||\n (major === minMajor && minor === minMinor && patch < minPatch)\n ) {\n throw new Error(\n `Flow SDK version '${version}' is lower than required minimum version '${minVersion}' for the step`,\n );\n }\n}\n","import type snowflake from 'snowflake-sdk';\n\nimport { ErrorFilter } from '../../decorators/error-filter.ts';\nimport { validateFlowSdkVersion } from '../../utils/validate-flow-sdk-version.ts';\nimport { BaseStep } from '../base/base.ts';\nimport { ConnectionContext } from '../connection/connection-context.ts';\n\nimport { SnowflakeExecuteSqlConfig } from './types.ts';\n\nconst MINIMAL_FLOW_SDK_VERSION = '8.0.72';\n\nexport class SnowflakeExecuteSqlStep extends BaseStep<SnowflakeExecuteSqlConfig> {\n @ErrorFilter\n public async runStep(): Promise<void> {\n await validateFlowSdkVersion(MINIMAL_FLOW_SDK_VERSION);\n\n const connection = await ConnectionContext.start(this.thread);\n const result = await this._executeSql(connection);\n\n this.exitStep('next', result);\n }\n\n private async _executeSql<T = unknown>(connection: snowflake.Connection): Promise<{ rows: T[] | undefined }> {\n const { sqlText, binds, fetchAsString } = this.data;\n\n return await new Promise((resolve, reject) => {\n connection.execute({\n sqlText,\n binds,\n fetchAsString: [...new Set(fetchAsString)],\n complete(error, _stmt, rows) {\n if (error) return reject(error);\n resolve({ rows });\n },\n });\n });\n }\n}\n"],"mappings":"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","names":["install","ACTION","createPrivateKey","snowflake","setInstance","ACTION","TimeoutError","z","BaseError","ErrorCode","UNKNOWN","STEP_LOGIC_ISSUE","AUTH","TIMEOUT","VALIDATION","INVALID_REQUEST","RATE_LIMITED","SERVER_ERROR","UNSUPPORTED","SnowflakeExecuteSqlStepError","BaseError","defaultPreserveErrors","SnowflakeExecuteSqlStepError","TimeoutError","errorFilter","error","options","preserveErrors","unknownMessage","unknownCode","ErrorCode","UNKNOWN","some","ErrorClass","z","core","$ZodError","prettifyError","code","VALIDATION","Error","message","includes","TIMEOUT","responseErrorMessage","response","data","undefined","SERVER_ERROR","createMethodDecoratorWithOptionalArguments","apply","defaultOptions","runApply","options","target","propertyKey","descriptor","maybe","originalMethod","value","wrappedMethod","name","undefined","Object","defineProperty","__name","argument0","argument1","argument2","defaultOptions","allowHandleError","useErrorFilter","BackgroundThreadErrorFilter","createMethodDecoratorWithOptionalArguments","options","_target","propertyKey","descriptor","originalMethod","value","arguments_","result","apply","Promise","catch","error","errorHandler","call","methodName","toString","log","DEBUG","filteredError","errorFilter","Error","thread","enqueue","name","ACTION","end","BasicThreadService","format","SnowflakeLogger","BasicThreadService","logLevel","thread","config","configure","trace","message","parameters","shouldLog","log","DEBUG","format","debug","info","INFO","warn","WARN","error","ERROR","getLevelTag","getLevel","getLevelValue","getLogBuffer","level","levels","TRACE","WARNING","OFF","Step","defaultOptions","ErrorFilter","createMethodDecoratorWithOptionalArguments","_options","_target","propertyKey","descriptor","originalMethod","value","arguments_","result","apply","Promise","catch","error","methodName","toString","log","DEBUG","errorFilter","en","z","z","config","en","stringNoUndefinedSchema","string","check","trim","refine","value","includes","error","bindSchema","union","coerce","number","boolean","null","insertBindsSchema","array","bindsSchema","extendedBindsSchema","pipe","object","transform","map","o","dataInSchema","auth","looseObject","account","minLength","authenticator","optionalStringValue","username","warehouse","role","host","hostname","schema","database","privateKey","pemKey","keyPass","sqlText","binds","fetchAsString","enum","undefined","literal","BaseStep","Step","resolveDataIn","dataIn","log","DEBUG","dataInSchema","parse","baseClassIdPrefix","connectionContextClassId","PROCESS_CACHE_KEY_PREFIX","ConnectionContext","BaseStep","classId","connectionContextClassId","start","thread","process","runThread","id","getThreadId","state","step","class","parentThreadId","background","connection","getConnection","Error","threadId","baseClassIdPrefix","cacheKey","getConnectionCacheKey","cache","runStep","triggers","hook","name","ACTION","exit","onContentContextEnd","otherwise","initialize","_initConnection","_destroyConnection","_createConnection","auth","data","setInstance","logger","snowflake","createConnection","clientSessionKeepAlive","clientSessionKeepAliveHeartbeatFrequency","privateKey","_privateKey","_connection","Promise","resolve","destroy","error","log","WARN","_cacheKey","DEBUG","isValidAsync","connectionId","getId","reject","connect","conn","message","logLevel","SnowflakeLogger","pemKey","undefined","createPrivateKey","key","replaceAll","String","raw","trim","format","passphrase","keyPass","export","type","readFile","createRequire","require","createRequire","url","validateFlowSdkVersion","minVersion","test","Error","packageJsonPath","resolve","packageJsonContent","readFile","version","JSON","parse","groups","exec","major","Number","parseInt","minor","patch","undefined","isNaN","minMajor","minMinor","minPatch","split","map","x","MINIMAL_FLOW_SDK_VERSION","SnowflakeExecuteSqlStep","BaseStep","runStep","validateFlowSdkVersion","connection","ConnectionContext","start","thread","result","_executeSql","exitStep","sqlText","binds","fetchAsString","data","Promise","resolve","reject","execute","Set","complete","error","_stmt","rows","install","states","ConnectionContext","classId"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/threads/connection/connection-context.ts","../src/decorators/background-thread-error-filter.ts","../src/errors/error-filter.ts","../src/errors/step-error.ts","../src/utils/create-method-decorator.ts","../src/services/snowflake-logger.ts","../src/threads/base/base.ts","../src/decorators/error-filter.ts","../src/schemas/data-in.ts","../src/threads/connection/constants.ts","../src/utils/validate-flow-sdk-version.ts","../src/threads/main/step.ts"],"sourcesContent":["import { install } from 'source-map-support';\n\nimport { ConnectionContext } from './threads/connection/connection-context.ts';\n\n// enable source map support for better error stack traces\ninstall();\n\nexport const states = {\n [ConnectionContext.classId]: ConnectionContext,\n};\n\nexport { SnowflakeExecuteSqlStep as step } from './threads/main/step.ts';\n\nexport type * from './threads/main/types.ts';\nexport type * from './threads/base/types.ts';\nexport type * from './threads/connection/types.ts';\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { ACTION } from '@onereach/flow-sdk/types/index.js';\nimport type { AnyConfig, IThread, IThreadId } from '@onereach/flow-sdk/types/index.js';\nimport { createPrivateKey } from 'node:crypto';\nimport snowflake from 'snowflake-sdk';\nimport type { Connection } from 'snowflake-sdk';\nimport { setInstance } from 'snowflake-sdk/dist/lib/logger.js';\nimport { Memoize } from 'typescript-memoize';\n\nimport { BackgroundThreadErrorFilter } from '../../decorators/background-thread-error-filter.ts';\nimport { SnowflakeLogger } from '../../services/snowflake-logger.ts';\nimport { baseClassIdPrefix, BaseStep } from '../base/base.ts';\nimport type { SnowflakeExecuteSqlConfig } from '../main/types.ts';\n\nimport { connectionContextClassId } from './constants.ts';\nimport type { ConnectionContextConfig } from './types.ts';\n\nconst PROCESS_CACHE_KEY_PREFIX = 'snfl_cnc';\n\nexport class ConnectionContext extends BaseStep<ConnectionContextConfig> {\n public static readonly classId = connectionContextClassId;\n\n public static async start<T extends SnowflakeExecuteSqlConfig>(thread: IThread<T>): Promise<Connection> {\n await thread.process.runThread<ConnectionContextConfig>({\n id: this.getThreadId(thread.id),\n state: {\n step: thread.step.id,\n class: this.classId,\n\n parentThreadId: thread.id,\n },\n background: true,\n });\n\n const connection = this.getConnection<T>(thread);\n // TODO: use branded error\n if (!connection) throw new Error('Failed to create Snowflake connection');\n\n return connection;\n }\n\n public static getThreadId(threadId: IThreadId): IThreadId {\n return `${baseClassIdPrefix}_${this.classId}_${threadId}`;\n }\n\n public static getConnection<T extends SnowflakeExecuteSqlConfig>(thread: IThread<T>): Connection | undefined {\n const cacheKey = getConnectionCacheKey(thread.id);\n return thread.process.cache[cacheKey] as Connection | undefined;\n }\n\n // ---------------------------------------\n\n @BackgroundThreadErrorFilter\n public runStep(): void {\n this.triggers.hook<AnyConfig, ACTION.exit>({ name: ACTION.exit }, this.onContentContextEnd);\n this.triggers.otherwise(this.initialize);\n }\n\n @BackgroundThreadErrorFilter\n public async initialize(): Promise<void> {\n await this._initConnection();\n }\n\n @BackgroundThreadErrorFilter\n public async onContentContextEnd(): Promise<void> {\n await this._destroyConnection();\n }\n\n private _createConnection(): Connection {\n this.log.DEBUG?.('Creating Snowflake connection...');\n\n const { auth } = this.data;\n\n // set Snowflake SDK logger\n setInstance(this.logger);\n\n // TODO: use this.data here\n return snowflake.createConnection({\n clientSessionKeepAlive: true, // Keep connections alive\n clientSessionKeepAliveHeartbeatFrequency: 20, // 20 seconds\n // timeout: 20_000,\n privateKey: this._privateKey,\n ...auth,\n });\n }\n\n private async _destroyConnection(): Promise<void> {\n const connection = this._connection;\n if (!connection) return;\n\n await new Promise<void>((resolve) => {\n connection.destroy((error) => {\n if (error) {\n this.log.WARN?.('Failed to destroy Snowflake connection');\n return resolve();\n }\n\n delete this.process.cache[this._cacheKey];\n this.log.DEBUG?.('Successfully destroyed snowflake connection');\n resolve();\n });\n });\n }\n\n private async _initConnection(): Promise<Connection> {\n const connection = (this._connection ??= this._createConnection());\n\n const isConnectionValid = await connection.isValidAsync();\n if (isConnectionValid) {\n this.log.DEBUG?.('Cached Snowflake connection is still valid. Reusing it.', { connectionId: connection.getId() });\n return connection;\n }\n\n return new Promise((resolve, reject) => {\n const start = Date.now();\n connection.connect((error, conn) => {\n if (error) {\n this.log.DEBUG?.('Failed to connect to Snowflake', { error: error.message });\n return reject(error);\n }\n\n const durationMs = Date.now() - start;\n this.log.DEBUG?.('Successfully connected to Snowflake', { connectionId: conn.getId(), durationMs });\n resolve(conn);\n });\n });\n }\n\n private get _connection(): Connection | undefined {\n return this.process.cache[this._cacheKey] as Connection | undefined;\n }\n\n private set _connection(connection: Connection) {\n this.process.cache[this._cacheKey] = connection;\n }\n\n private get _cacheKey(): string {\n // TODO: take into account connection parameters\n return getConnectionCacheKey(this.state.parentThreadId);\n }\n\n @Memoize()\n private get logger(): SnowflakeLogger<ConnectionContextConfig> {\n // const { logLevel } = this.data;\n // TODO: add 'logLevel' to dataIn type\n const logLevel = 'INFO';\n\n return new SnowflakeLogger(this.thread, { logLevel });\n }\n\n private get _privateKey(): string | undefined {\n const { privateKey } = this.data;\n\n if (privateKey?.pemKey == undefined) return undefined;\n\n // Get the private key from the file as an object.\n const privateKeyObject = createPrivateKey({\n key: privateKey.pemKey.replaceAll(String.raw`\\n`, '\\n').trim(),\n format: 'pem',\n passphrase: privateKey.keyPass,\n });\n\n // Extract the private key from the object as a PEM-encoded string.\n return privateKeyObject.export({\n format: 'pem',\n type: 'pkcs8',\n }) as string;\n }\n}\n\nfunction getConnectionCacheKey(threadId: IThreadId): string {\n if (!threadId) throw new Error('Missing thread id');\n\n // TODO: take into account connection parameters\n return `${PROCESS_CACHE_KEY_PREFIX}_${threadId}`;\n}\n","import type Step from '@onereach/flow-sdk/step.js';\nimport { ACTION } from '@onereach/flow-sdk/types/index.js';\n\nimport { errorFilter } from '../errors/error-filter.ts';\nimport { createMethodDecoratorWithOptionalArguments } from '../utils/create-method-decorator.ts';\n\nconst defaultOptions: BackgroundThreadErrorFilterOptions = { allowHandleError: false, useErrorFilter: true };\n\n/**\n * Since errors in hooks are fatal and can't be processed this decorator allows to wrap hook handler\n * and manage errors by ending a thread with the error (preventing sending error to `error` exit)\n * @param options.allowHandleError - Default `false`. If `false` in case of error will end thread with error as result, if `true` will allow to handle error via 'error' exit\n * @param options.useErrorFilter - Default `true`. If `true` every error wild be processed with `errorFilter` utility function\n */\nexport const BackgroundThreadErrorFilter = createMethodDecoratorWithOptionalArguments(\n (options, _target, propertyKey, descriptor) => {\n const originalMethod = descriptor.value;\n if (!originalMethod || typeof originalMethod !== 'function') return;\n\n return function (this: Step, ...arguments_: Parameters<typeof originalMethod>): ReturnType<typeof originalMethod> {\n try {\n const result: unknown = originalMethod.apply(this, arguments_);\n\n if (result instanceof Promise) {\n return result.catch((error) => errorHandler.call(this, options, error, propertyKey));\n }\n\n return result;\n } catch (error) {\n return errorHandler.call(this, options, error, propertyKey) as ReturnType<typeof originalMethod>;\n }\n } as typeof originalMethod;\n },\n defaultOptions,\n);\n\nfunction errorHandler(\n this: Step,\n options: BackgroundThreadErrorFilterOptions,\n error: unknown,\n propertyKey: string | symbol,\n): void {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n const filteredError = options.useErrorFilter ? errorFilter(error) : error;\n\n if (filteredError instanceof Error) {\n if (options.allowHandleError) {\n // Send it to the 'error' exit and stop here\n this.thread.enqueue({ name: ACTION.error, error: filteredError });\n return;\n } else {\n // End the thread with the error and stop here\n this.end(filteredError);\n return;\n }\n }\n\n // Only throw if it's not an Error instance and you truly want to bubble it\n throw filteredError;\n}\n\nexport type BackgroundThreadErrorFilterOptions = {\n allowHandleError?: boolean;\n useErrorFilter?: boolean;\n};\n","import TimeoutError from '@onereach/flow-sdk/errors/timeout.js';\nimport { z } from 'zod/v4-mini';\n\nimport { SnowflakeExecuteSqlStepError, ErrorCode } from './step-error.ts';\n\nconst defaultPreserveErrors = [SnowflakeExecuteSqlStepError, TimeoutError] as const;\nexport function errorFilter<P extends readonly AnyErrorClass[] = typeof defaultPreserveErrors>(\n error: unknown,\n options: ErrorFilterOptions<P> = {},\n): InstancesOf<P> | SnowflakeExecuteSqlStepError | TimeoutError {\n const {\n preserveErrors = defaultPreserveErrors,\n unknownMessage = 'Unknown error',\n unknownCode = ErrorCode.UNKNOWN,\n } = options;\n\n // if error is SnowflakeExecuteSqlStepError or TimeoutError, return it directly\n if (preserveErrors?.some((ErrorClass) => error instanceof ErrorClass)) {\n return error as InstancesOf<P>;\n }\n\n // validation errors\n if (error instanceof z.core.$ZodError) {\n return new SnowflakeExecuteSqlStepError(z.prettifyError(error), error, {\n code: ErrorCode.VALIDATION,\n });\n }\n\n // if error is a string assume it's an error message\n if (typeof error === 'string') {\n return new SnowflakeExecuteSqlStepError(error, {\n code: ErrorCode.UNKNOWN,\n });\n }\n\n if (error instanceof Error) {\n // timeout errors\n if (error.message.includes('Request timed out')) {\n return new TimeoutError('Timeout', error, { code: ErrorCode.TIMEOUT });\n }\n\n // TODO: fix interpreting of this kind of errors\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const responseErrorMessage: string | undefined = (error as unknown as any)?.response?.data?.error?.message;\n if (responseErrorMessage != undefined) {\n return new SnowflakeExecuteSqlStepError(responseErrorMessage, error, {\n code: ErrorCode.SERVER_ERROR,\n });\n }\n\n return new SnowflakeExecuteSqlStepError(unknownMessage, error, {\n code: unknownCode,\n });\n }\n\n // catch all for unknown errors\n return new SnowflakeExecuteSqlStepError(unknownMessage, {\n code: unknownCode,\n data: error,\n });\n}\n\nexport type ErrorFilterOptions<P extends readonly AnyErrorClass[]> = {\n /** Array of error classes that should not be wrapped */\n preserveErrors?: P;\n /** Error message to use when message is unknown */\n unknownMessage?: string;\n /** Error code to use when message is unknown */\n unknownCode?: keyof typeof ErrorCode;\n};\n\n/** Any Error class */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyErrorClass<E extends Error = Error> = new (...arguments_: any[]) => E;\n\n/** Turn a tuple/array of constructors into a union of their instance types. */\nexport type InstancesOf<Ctors extends readonly AnyErrorClass[]> =\n Ctors[number] extends AnyErrorClass<infer I> ? I : never;\n","import BaseError from '@onereach/flow-sdk/errors/base.js';\n\nexport const ErrorCode = {\n UNKNOWN: 'UNKNOWN',\n STEP_LOGIC_ISSUE: 'STEP_LOGIC_ISSUE',\n AUTH: 'AUTH',\n TIMEOUT: 'TIMEOUT',\n VALIDATION: 'VALIDATION',\n INVALID_REQUEST: 'INVALID_REQUEST',\n RATE_LIMITED: 'RATE_LIMITED',\n SERVER_ERROR: 'SERVER_ERROR',\n UNSUPPORTED: 'UNSUPPORTED',\n} as const;\n\nexport class SnowflakeExecuteSqlStepError extends BaseError<{\n code: keyof typeof ErrorCode;\n data?: unknown;\n}> {}\n\nexport class AbortRequestError extends BaseError {}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Creates a method decorator that can be used with or without options.\n * @param apply - Function that applies the decorator logic with given options.\n * @param defaultOptions - Default options to use if none are provided.\n */\nexport function createMethodDecoratorWithOptionalArguments<A, T extends AnyFunction = AnyFunction>(\n apply: (\n options: A,\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ) => T | TypedPropertyDescriptor<T> | void,\n defaultOptions: A,\n): MethodDecoratorWithOptionalArguments<A, T> {\n function runApply(\n options: A,\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ): TypedPropertyDescriptor<T> | void {\n const maybe = apply(options, target, propertyKey, descriptor);\n\n // If the decorator factory returned a wrapped function, assign it to the descriptor here\n if (typeof maybe === 'function') {\n const originalMethod = descriptor.value;\n const wrappedMethod = maybe as typeof originalMethod;\n\n if (originalMethod?.name != undefined) {\n try {\n Object.defineProperty(wrappedMethod, 'name', { value: originalMethod.name });\n } catch {\n // ignore if name is non-configurable\n }\n }\n\n descriptor.value = wrappedMethod;\n return descriptor;\n }\n\n // If a descriptor was returned or decorator mutated descriptor in-place, use that\n return maybe ?? descriptor;\n }\n\n return function decoratorOrFactory(\n argument0?: object | A,\n argument1?: string | symbol,\n argument2?: TypedPropertyDescriptor<T>,\n ): any {\n if (\n argument0 !== null &&\n typeof argument0 === 'object' &&\n (typeof argument1 === 'string' || typeof argument1 === 'symbol') &&\n argument2 !== null &&\n typeof argument2 === 'object'\n ) {\n // Called as plain decorator: @Decorator\n return runApply(defaultOptions, argument0, argument1, argument2);\n } else {\n // Called as decorator factory: @Decorator(options)\n const options = (argument0 as A) ?? defaultOptions;\n return (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => {\n return runApply(options, target, propertyKey, descriptor);\n };\n }\n };\n}\n\nexport type AnyFunction = (...arguments_: any[]) => any;\n\nexport type MethodDecoratorWithOptionalArguments<A, T extends AnyFunction = AnyFunction> =\n // Plain method decorator (three arguments)\n ((\n target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n ) => TypedPropertyDescriptor<T> | void) &\n // Decorator factory (optional options argument)\n ((options?: A) => MethodDecorator);\n","import { BasicThreadService } from '@onereach/flow-sdk/services/basic.js';\nimport type { CONFIG, IThread } from '@onereach/flow-sdk/types/index.js';\nimport { format } from 'node:util';\nimport type Logger from 'snowflake-sdk/dist/lib/logger/browser.js';\n\nexport type LogLevel = 'TRACE' | 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR' | 'OFF';\n\nexport type SnowflakeLoggerConfig = {\n logLevel?: LogLevel;\n};\n\nexport class SnowflakeLogger<TConfig extends CONFIG> extends BasicThreadService<TConfig> implements Logger {\n private logLevel: LogLevel;\n\n constructor(thread: IThread<TConfig>, config: SnowflakeLoggerConfig) {\n super(thread);\n\n this.configure(config);\n this.logLevel = config.logLevel ?? 'ERROR';\n }\n\n public trace(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('TRACE')) {\n this.log.DEBUG?.(format(message, ...parameters));\n }\n }\n\n public debug(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('DEBUG')) {\n this.log.DEBUG?.(format(message, ...parameters));\n }\n }\n\n public info(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('INFO')) {\n this.log.INFO?.(format(message, ...parameters));\n }\n }\n\n public warn(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('WARNING')) {\n this.log.WARN?.(format(message, ...parameters));\n }\n }\n\n public error(message: string, ...parameters: unknown[]): void {\n if (this.shouldLog('ERROR')) {\n this.log.ERROR?.(format(message, ...parameters));\n }\n }\n\n public getLevelTag(): LogLevel {\n return this.logLevel ?? 'ERROR';\n }\n\n /** Required to implement Logger interface */\n public getLevel(): number {\n return this.getLevelValue(this.getLevelTag());\n }\n\n /** Required to implement Logger interface */\n public getLogBuffer(): string[] {\n return [];\n }\n\n /** Required to implement Logger interface */\n public configure(config: SnowflakeLoggerConfig) {\n if (config.logLevel) {\n this.logLevel = config.logLevel;\n }\n }\n\n /** If returns `true`, log would be created */\n private shouldLog(level: LogLevel): boolean {\n return this.getLevelValue(level) >= this.getLevelValue(this.logLevel);\n }\n\n /** Map Snowflake log levels to numeric values */\n private getLevelValue(level: LogLevel): number {\n const levels = { TRACE: 0, DEBUG: 1, INFO: 2, WARNING: 3, ERROR: 4, OFF: 5 };\n return levels[level] ?? levels.ERROR;\n }\n}\n","import Step from '@onereach/flow-sdk/step.js';\n\nimport { ErrorFilter } from '../../decorators/error-filter.ts';\nimport { dataInSchema } from '../../schemas/data-in.ts';\n\nimport type { BaseConfig } from './types.ts';\n\n// TODO: convert it into class decorator\nexport class BaseStep<T extends BaseConfig> extends Step<T> {\n @ErrorFilter\n public async resolveDataIn() {\n const dataIn = await super.resolveDataIn();\n return dataInSchema.parse(dataIn);\n }\n}\n\nexport const baseClassIdPrefix = 'snfl_sql';\n","import type Step from '@onereach/flow-sdk/step.js';\n\nimport { errorFilter } from '../errors/error-filter.ts';\nimport { createMethodDecoratorWithOptionalArguments } from '../utils/create-method-decorator.ts';\n\nconst defaultOptions = {};\n\n/**\n * Will wrap method with `errorFilter` for every error.\n */\nexport const ErrorFilter = createMethodDecoratorWithOptionalArguments((_options, _target, propertyKey, descriptor) => {\n const originalMethod = descriptor.value;\n\n if (!originalMethod || typeof originalMethod !== 'function') return;\n\n return function (this: Step, ...arguments_: Parameters<typeof originalMethod>): ReturnType<typeof originalMethod> {\n try {\n const result: unknown = originalMethod.apply(this, arguments_);\n\n if (result instanceof Promise) {\n return result.catch((error: unknown) => {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n throw errorFilter(error);\n }) as ReturnType<typeof originalMethod>;\n }\n\n return result;\n } catch (error) {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n throw errorFilter(error);\n }\n };\n}, defaultOptions);\n","import type { Bind, Binds, InsertBinds } from 'snowflake-sdk';\nimport { en } from 'zod/v4/locales';\nimport { z } from 'zod/v4-mini';\n\nz.config(en());\n\n// string that prevents 'undefined' and 'null' values\nconst stringNoUndefinedSchema = z.string().check(\n z.trim(),\n z.refine((value) => !['undefined', 'null'].includes(value), {\n error: 'Unexpected undefined or null merge-field value',\n }),\n);\n\nconst bindSchema = z.union([\n z.coerce.number(),\n stringNoUndefinedSchema,\n z.boolean(),\n z.null(),\n]) satisfies z.core.$ZodType<Bind>;\n\nconst insertBindsSchema = z.array(z.array(bindSchema)) satisfies z.core.$ZodType<InsertBinds>;\nconst bindsSchema = z.union([z.array(bindSchema), insertBindsSchema]) satisfies z.core.$ZodType<Binds>;\nconst extendedBindsSchema = z.union([\n bindsSchema,\n\n // binds wrapped in object with \"value\" key from UI\n z.pipe(\n z.array(z.object({ value: bindSchema })),\n z.transform((array) => array.map((o) => o.value)),\n ),\n\n // insert binds wrapped in object with \"value\" key from UI\n z.pipe(\n z.array(z.object({ value: z.array(bindSchema) })),\n z.transform((array) => array.map((o) => o.value)),\n ),\n]);\n\nexport const dataInSchema = z.object({\n auth: z.looseObject({\n account: stringNoUndefinedSchema.check(z.minLength(1)),\n authenticator: optionalStringValue(stringNoUndefinedSchema),\n username: optionalStringValue(stringNoUndefinedSchema),\n\n warehouse: optionalStringValue(stringNoUndefinedSchema),\n role: optionalStringValue(stringNoUndefinedSchema),\n host: optionalStringValue(stringNoUndefinedSchema.check(z.hostname())),\n schema: optionalStringValue(stringNoUndefinedSchema),\n database: optionalStringValue(stringNoUndefinedSchema),\n // TODO: add timeout\n }),\n privateKey: z.object({\n pemKey: optionalStringValue(stringNoUndefinedSchema.check(z.minLength(1))),\n keyPass: optionalStringValue(stringNoUndefinedSchema),\n }),\n sqlText: stringNoUndefinedSchema.check(z.minLength(1)),\n binds: extendedBindsSchema,\n fetchAsString: z.array(z.enum(['Boolean', 'Number', 'Date', 'Buffer', 'JSON'])),\n});\n\nexport type DataIn = z.infer<typeof dataInSchema>;\n\n/**\n * Convert empty string to undefined before running schema validation\n * @param schema schema to validate against\n * @param defaultValue optional default value\n */\nfunction optionalStringValue<T extends z.core.SomeType>(schema: T) {\n return z.pipe(\n z.union([z.undefined(), z.literal(''), schema]),\n z.transform((value) => (value === '' ? undefined : value)),\n );\n}\n","export const connectionContextClassId = 'cnc_ctx';\n","import { readFile } from 'node:fs/promises';\nimport { createRequire } from 'node:module';\n\nconst require = createRequire(import.meta.url);\n\nexport async function validateFlowSdkVersion(minVersion: string): Promise<void> {\n if (typeof minVersion !== 'string' || !/^\\d+\\.\\d+\\.\\d+$/.test(minVersion)) {\n throw new Error(`Invalid minimum version format: ${minVersion}`);\n }\n\n const packageJsonPath = require.resolve('@onereach/flow-sdk/package.json');\n if (!packageJsonPath) {\n throw new Error(`Could not find package.json for @onereach/flow-sdk`);\n }\n // Read the package.json file to get the version\n const packageJsonContent = await readFile(packageJsonPath, 'utf8');\n\n const { version } = JSON.parse(packageJsonContent) as { version: string };\n const { groups } = /^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)/.exec(version) || {};\n\n if (!groups) throw new Error(`Invalid Flow SDK version format: ${version}`);\n\n const major = Number.parseInt(groups.major ?? '0', 10);\n const minor = Number.parseInt(groups.minor ?? '0', 10);\n const patch = Number.parseInt(groups.patch ?? '0', 10);\n\n if (\n major == undefined ||\n minor == undefined ||\n patch == undefined ||\n Number.isNaN(major) ||\n Number.isNaN(minor) ||\n Number.isNaN(patch)\n ) {\n throw new Error(`Invalid version format: ${version}`);\n }\n\n const [minMajor, minMinor, minPatch] = minVersion.split('.').map((x) => Number.parseInt(x, 10));\n\n if (\n minMajor == undefined ||\n minMinor == undefined ||\n minPatch == undefined ||\n Number.isNaN(minMajor) ||\n Number.isNaN(minMinor) ||\n Number.isNaN(minPatch)\n ) {\n throw new Error(`Invalid minimum version format: ${minVersion}`);\n }\n\n if (\n major < minMajor ||\n (major === minMajor && minor < minMinor) ||\n (major === minMajor && minor === minMinor && patch < minPatch)\n ) {\n throw new Error(\n `Flow SDK version '${version}' is lower than required minimum version '${minVersion}' for the step`,\n );\n }\n}\n","import type snowflake from 'snowflake-sdk';\n\nimport { ErrorFilter } from '../../decorators/error-filter.ts';\nimport { validateFlowSdkVersion } from '../../utils/validate-flow-sdk-version.ts';\nimport { BaseStep } from '../base/base.ts';\nimport { ConnectionContext } from '../connection/connection-context.ts';\n\nimport { SnowflakeExecuteSqlConfig } from './types.ts';\n\nconst MINIMAL_FLOW_SDK_VERSION = '8.0.72';\n\nexport class SnowflakeExecuteSqlStep extends BaseStep<SnowflakeExecuteSqlConfig> {\n @ErrorFilter\n public async runStep(): Promise<void> {\n await validateFlowSdkVersion(MINIMAL_FLOW_SDK_VERSION);\n\n const connection = await ConnectionContext.start(this.thread);\n const result = await this._executeSql(connection);\n\n this.exitStep('next', result);\n }\n\n private async _executeSql<T = unknown>(connection: snowflake.Connection): Promise<{ rows: T[] | undefined }> {\n const { sqlText, binds, fetchAsString } = this.data;\n\n return await new Promise((resolve, reject) => {\n connection.execute({\n sqlText,\n binds,\n fetchAsString: [...new Set(fetchAsString)],\n complete(error, _stmt, rows) {\n if (error) return reject(error);\n resolve({ rows });\n },\n });\n });\n }\n}\n"],"mappings":"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","names":["install","ACTION","createPrivateKey","snowflake","setInstance","Memoize","ACTION","TimeoutError","z","BaseError","ErrorCode","UNKNOWN","STEP_LOGIC_ISSUE","AUTH","TIMEOUT","VALIDATION","INVALID_REQUEST","RATE_LIMITED","SERVER_ERROR","UNSUPPORTED","SnowflakeExecuteSqlStepError","BaseError","defaultPreserveErrors","SnowflakeExecuteSqlStepError","TimeoutError","errorFilter","error","options","preserveErrors","unknownMessage","unknownCode","ErrorCode","UNKNOWN","some","ErrorClass","z","core","$ZodError","prettifyError","code","VALIDATION","Error","message","includes","TIMEOUT","responseErrorMessage","response","data","undefined","SERVER_ERROR","createMethodDecoratorWithOptionalArguments","apply","defaultOptions","runApply","options","target","propertyKey","descriptor","maybe","originalMethod","value","wrappedMethod","name","undefined","Object","defineProperty","__name","argument0","argument1","argument2","defaultOptions","allowHandleError","useErrorFilter","BackgroundThreadErrorFilter","createMethodDecoratorWithOptionalArguments","options","_target","propertyKey","descriptor","originalMethod","value","arguments_","result","apply","Promise","catch","error","errorHandler","call","methodName","toString","log","DEBUG","filteredError","errorFilter","Error","thread","enqueue","name","ACTION","end","BasicThreadService","format","SnowflakeLogger","BasicThreadService","logLevel","thread","config","configure","trace","message","parameters","shouldLog","log","DEBUG","format","debug","info","INFO","warn","WARN","error","ERROR","getLevelTag","getLevel","getLevelValue","getLogBuffer","level","levels","TRACE","WARNING","OFF","Step","defaultOptions","ErrorFilter","createMethodDecoratorWithOptionalArguments","_options","_target","propertyKey","descriptor","originalMethod","value","arguments_","result","apply","Promise","catch","error","methodName","toString","log","DEBUG","errorFilter","en","z","z","config","en","stringNoUndefinedSchema","string","check","trim","refine","value","includes","error","bindSchema","union","coerce","number","boolean","null","insertBindsSchema","array","bindsSchema","extendedBindsSchema","pipe","object","transform","map","o","dataInSchema","auth","looseObject","account","minLength","authenticator","optionalStringValue","username","warehouse","role","host","hostname","schema","database","privateKey","pemKey","keyPass","sqlText","binds","fetchAsString","enum","undefined","literal","BaseStep","Step","resolveDataIn","dataIn","dataInSchema","parse","baseClassIdPrefix","connectionContextClassId","PROCESS_CACHE_KEY_PREFIX","ConnectionContext","BaseStep","classId","connectionContextClassId","start","thread","process","runThread","id","getThreadId","state","step","class","parentThreadId","background","connection","getConnection","Error","threadId","baseClassIdPrefix","cacheKey","getConnectionCacheKey","cache","runStep","triggers","hook","name","ACTION","exit","onContentContextEnd","otherwise","initialize","_initConnection","_destroyConnection","_createConnection","log","DEBUG","auth","data","setInstance","logger","snowflake","createConnection","clientSessionKeepAlive","clientSessionKeepAliveHeartbeatFrequency","privateKey","_privateKey","_connection","Promise","resolve","destroy","error","WARN","_cacheKey","isValidAsync","connectionId","getId","reject","Date","now","connect","conn","message","durationMs","logLevel","SnowflakeLogger","pemKey","undefined","createPrivateKey","key","replaceAll","String","raw","trim","format","passphrase","keyPass","export","type","readFile","createRequire","require","createRequire","url","validateFlowSdkVersion","minVersion","test","Error","packageJsonPath","resolve","packageJsonContent","readFile","version","JSON","parse","groups","exec","major","Number","parseInt","minor","patch","undefined","isNaN","minMajor","minMinor","minPatch","split","map","x","MINIMAL_FLOW_SDK_VERSION","SnowflakeExecuteSqlStep","BaseStep","runStep","validateFlowSdkVersion","connection","ConnectionContext","start","thread","result","_executeSql","exitStep","sqlText","binds","fetchAsString","data","Promise","resolve","reject","execute","Set","complete","error","_stmt","rows","install","states","ConnectionContext","classId"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onereach/step-run-snowflake-query",
3
- "version": "0.0.2-rc.7",
3
+ "version": "0.0.2-rc.8",
4
4
  "description": "Logic for running Snowflake query step",
5
5
  "keywords": [],
6
6
  "license": "MIT",