@stackone/connect-sdk 2.25.0 → 2.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});let t=require(`@stackone/utils`),n=require(`path-to-regexp`),r=require(`fs`),i=require(`path`),a=require(`@stackone/core`),o=require(`@stackone/transport`),s=require(`yaml`),c=require(`@stackone/expressions`);const createBlock=async({connector:e,inputs:n,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u})=>{if((0,t.isMissing)(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:n,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:await l(),olapClient:u?await u():void 0,settings:s,logger:c}},getActionFromUrl=(e,n,r)=>{let i=r.toUpperCase();if(!e.actions)return;let a=testMatcher(n,i,Object.values(e.actions).filter(e=>(0,t.notMissing)(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})));if(a)return{action:e.actions?.[a.actionId],params:a.params}},removeLeadingAndTrailingSlashes=e=>{let t=e.startsWith(`/`)?e.slice(1):e;return t.endsWith(`/`)?t.slice(0,-1):t},testMatcher=(e,t,r)=>{let i=removeLeadingAndTrailingSlashes(e);for(let e of r)if(e.endpoint?.startsWith(t)){let r=(0,n.match)(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim()))(removeLeadingAndTrailingSlashes(i));if(r!==!1)return{actionId:e.actionId,path:e.endpoint,params:r.params}}},buildActionId=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,findActionByActionId=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.actions?.[r]},loadConnector=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=(0,r.readFileSync)(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
2
2
  `),(0,i.dirname)(e)).join(`
3
3
  `)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},processYamlObject=(e,t)=>{let n=[];for(let r of e)if(isPartialReference(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=loadPartialFile(i,t).map(t=>` `.repeat(e)+t);n.push(...a)}else n.push(r);return n},isPartialReference=e=>e.includes(`$ref:`),loadPartialFile=(e,t)=>{let n=(0,i.resolve)((0,i.join)(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{return(0,r.readFileSync)(n,`utf8`).split(`
4
- `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var l=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends l{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends l{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends l{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends l{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends l{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends l{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},MissingScopeDefinitionError=class extends l{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const u=25,formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),d={key:t.z.string(),label:t.z.string(),required:t.z.boolean().optional().default(!1),secret:t.z.boolean().optional().default(!1),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional()},f=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...d,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...d,type:t.z.literal(`select`),options:(0,t.zStrictObject)({value:t.z.string(),label:t.z.string()}).array()})]),p=(0,t.zStrictObject)({targetFieldKey:t.z.string(),alias:t.z.string().optional(),expression:t.z.string().optional(),values:t.z.unknown().optional(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:t.z.boolean().default(!1),custom:t.z.boolean().default(!1),hidden:t.z.boolean().default(!1),enumMapper:(0,t.zStrictObject)({matcher:t.z.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or((0,t.zStrictObject)({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional(),properties:t.z.lazy(()=>p).array().optional(),requiredScopes:t.z.string().optional()}),m=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),h=(0,t.zStrictObject)({name:t.z.string(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:t.z.boolean(),description:t.z.string(),array:t.z.boolean().optional().default(!1),arrayFormat:t.z.enum([`repeat`,`brackets`,`comma`]).optional(),in:t.z.enum([`body`,`query`,`path`,`headers`]),properties:t.z.lazy(()=>h.omit({in:!0})).array().optional(),oneOf:m.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}),g=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),_=(0,t.zStrictObject)({actionId:t.z.string(),categories:t.z.string().array(),actionType:t.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:t.z.string().optional(),schemaType:t.z.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:t.z.string().optional(),entrypointHttpMethod:t.z.string().optional(),label:t.z.string(),description:t.z.string(),details:t.z.string().optional(),examples:g.array().optional(),tags:t.z.string().array().optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),resources:t.z.string().optional(),responses:(0,t.zStrictObject)({statusCode:t.z.number(),description:t.z.string()}).array().optional(),requiredScopes:t.z.string().optional(),inputs:h.array().optional(),cursor:(0,t.zStrictObject)({enabled:t.z.boolean(),pageSize:t.z.number()}).optional(),compositeIdentifiers:(0,t.zStrictObject)({enabled:t.z.boolean(),version:t.z.number().optional(),fields:(0,t.zStrictObject)({targetFieldKey:t.z.string(),remote:t.z.string().optional(),components:t.z.string().array()}).array().optional()}).optional(),scheduledJobs:(0,t.zStrictObject)({enabled:t.z.boolean(),type:t.z.enum([`data_sync`]),schedule:t.z.string(),description:t.z.string(),requestParams:(0,t.zStrictObject)({fields:t.z.string().array().optional(),expand:t.z.string().array().optional(),filter:t.z.record(t.z.string(),t.z.string()).optional()}).optional(),syncFilter:(0,t.zStrictObject)({name:t.z.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:t.z.string(),incrementalLoopbackPeriod:t.z.string()}).optional()}).array().optional(),fieldConfigs:p.array().optional(),steps:(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional()}),v=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:_.extend({actionType:t.z.literal(`refresh_token`)})}),y=(0,t.zStrictObject)({mainRatelimit:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),rateLimit:t.z.number()})).optional(),mappedRateLimitErrors:t.z.array((0,t.zStrictObject)({errorStatus:t.z.number(),errorMessage:t.z.string(),errorMessagePath:t.z.string().optional(),retryAfterPath:t.z.string().optional(),retryAfterUnit:t.z.union([t.z.literal(`seconds`),t.z.literal(`milliseconds`),t.z.literal(`date`)]).optional(),retryAfterValue:t.z.number().optional()})).optional()}),b=(0,t.zStrictObject)({mainMaxConcurrency:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),maxConcurrency:t.z.number()})).optional()}),x=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional()}),S=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),steps:x.array().optional()}),C=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:S.array()}),w=(0,t.zStrictObject)({config:C.optional(),setup:C.optional()}),T=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,requiredScopes:t.z.string().optional(),environments:(0,t.zStrictObject)({key:t.z.string(),name:t.z.string()}).array(),support:(0,t.zStrictObject)({link:t.z.string().optional(),description:t.z.string().optional(),guides:w.optional()}).optional(),configFields:f.array().optional(),setupFields:f.array().optional(),refreshAuthentication:v.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(_),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),E=T.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),D=T.extend({type:t.z.literal(`custom`)}),O=T.extend({type:t.z.literal(`oidc`)}),k=t.z.discriminatedUnion(`type`,[E,D,O]),A=(0,t.zStrictObject)({StackOne:t.z.string(),info:(0,t.zStrictObject)({title:t.z.string(),version:t.z.string(),key:t.z.string(),assets:(0,t.zStrictObject)({icon:t.z.string()}),description:t.z.string(),details:t.z.string().optional()}),resources:t.z.string().optional(),baseUrl:t.z.string(),scopeDefinitions:t.z.record(t.z.string(),(0,t.zStrictObject)({description:t.z.string(),includes:t.z.string().optional()})).optional(),authentication:t.z.record(t.z.string(),k).array().optional(),actions:_.array().optional(),rateLimit:y.optional(),concurrency:b.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict();function parseYamlConnector(e){try{let n=parseWithSchemaException(A,(0,s.parse)(e)),r=parseScopeDefinitions(n.scopeDefinitions),i={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,details:n.info.details,resources:n.resources,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage,forkedFrom:n.forkedFrom,scopeDefinitions:r},a=buildAuthenticationFromYaml(n),o={baseUrl:n.baseUrl,authentication:stripAuthenticationSetup(a)},c=buildActionsFromYaml(n,o);return i.actions=c,hydrateTestActions(n,n.info.key,a,c,o),i.authentication=a,(0,t.notMissing)(c)&&(i.categories=getConnectorCategoriesFromActions(Object.values(c))),i}catch(e){if(e instanceof l)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,n,r,i,a)=>{if(!r||!i)return;let o=0;for(let s of Object.values(r)){for(let r of Object.values(s))r.testActions=r.testActions?.map((r,s)=>{if((0,t.notMissing)(r.action))if(typeof r.action==`string`){let e=buildActionId(n,r.action),t=Object.values(i).find(t=>t.id===e);if(t)return{...r,action:t}}else{let t=parseAction(e,[`authentication`,o,`testActions`,s],buildActionId(n,r.action.actionId),r.action,a);return{...r,action:t}}return r});o++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},buildAuthenticationFromYaml=e=>{let n={},r=new Set(Object.keys(e.scopeDefinitions||{})),i=[];for(let[a,o]of(e.authentication??[]).entries()){let[s]=Object.keys(o);n[s]=o[s].environments.reduce((n,c)=>{let{key:l,name:u}=c,{environments:d,refreshAuthentication:f,testActions:p,requiredScopes:m,...h}=o[s],g=m?m.split(` `).filter(e=>e.trim().length>0):void 0;Object.values(g??[]).forEach(e=>{r.has(e)||i.push({message:`Scope '${e}' included in authentication '${s}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let _=(0,t.notMissing)(f)?{schedule:f.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(e.info.key,f.action.actionId),f.action)}:void 0;return n[l]={...h,refreshAuthentication:_,requiredScopes:g,envKey:l,envName:u,testActions:p},n},{})}if(i.length>0)throw new MissingScopeDefinitionError(i);return n},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||(0,t.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>((0,o.isSuccessStatusCode)(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!(0,a.isValidEnumRef)(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,n,r)=>{if(!n||n.length===0)return;let i={};for(let e of r){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),i[e.name]=t}let a=t.z.object(i).strict();for(let t=0;t<n.length;t++){let{exampleDescription:r,...i}=n[t],o=a.safeParse(i);if(!o.success){let n=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,t,n)}}},parseAction=(e,t,n,r,i,a)=>{let o=inferEntrypointUrl(r),s=buildActionResponses(r),c=buildCursorConfig(r),l=r.inputs||[];c.enabled&&(l?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),l?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(n,l),validateExamplesMatchInputs(n,r.examples,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=r.requiredScopes?r.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;if(Object.values(p??[]).forEach(e=>{d.has(e)||f.push({message:`Scope '${e}' included in action '${r.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),f.length>0)throw new MissingScopeDefinitionError(f);return{id:n,categories:r.categories,label:r.label,description:r.description,details:r.details,examples:r.examples,actionType:r.actionType,schemaType:r.schemaType??`native`,entrypointUrl:r.entrypointUrl??o,entrypointHttpMethod:u,endpoint:a,tags:r.tags,releaseStage:r.releaseStage,resources:r.resources,responses:s,cursor:c,compositeIdentifiers:parseCompositeIdentifiersConfig(r),scheduledJobs:parseScheduledJobConfig(r),requiredScopes:p,inputs:l,steps:r.steps.reduce((n,a)=>{let{customErrors:o,...s}=a.stepFunction.parameters??{},c=parseFieldConfigs(e,t,a.stepFunction.functionName===`map_fields`||a.stepFunction.functionName===`typecast`?s.fields??r.fieldConfigs:void 0),l={id:a.stepId,description:a.description,condition:a.condition,ignoreError:a.ignoreError,stepFunction:{functionName:a.stepFunction.functionName,version:a.stepFunction.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:a.stepFunction.functionName,baseRequestParams:i,customErrors:o}),...c??{},...s}}};return validateStep(r.actionId,l),n[a.stepId]=l,n},{}),result:r.result}},parseFieldConfigs=(e,n,r)=>{if((0,t.isMissing)(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,t)=>{if(typeof e!=`object`||!e)return;let r=e.requiredScopes?e.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...n,`fieldConfigs`,t],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=a.StepFunctionsRegistry[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},parseActionInputs=(e,n)=>{if(!e.inputs)return{};let r=createInputsSchema(e.inputs),i=t.z.object(r).parse(n);return{...i.headers??{},...i.query??{},...i.path??{},...i.body??{}}},createInputsSchema=e=>{let n=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),r={};for(let[e,i]of Object.entries(n)){let n={};for(let e of i){let t=buildZodSchemaFromInputType(e);e.description&&(t=t.describe(e.description)),e.required||(t=t.optional()),n[e.name]=t}Object.keys(n).length>0&&(r[e]=t.z.object(n))}return r},buildEnumZodSchema=(e,n)=>{if(!n)throw Error(`Enum input "${e}" requires oneOf definition`);let r;if(`values`in n)r=n.values;else if(`ref`in n){let t=(0,a.getInputEnumValues)(n.ref);if(!t)throw Error(`Unknown enum reference "${n.ref}" in input "${e}"`);r=t}else throw Error(`Invalid oneOf definition in input "${e}"`);if(r.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return t.z.enum(r)},buildZodSchemaFromInputType=e=>{let n;switch(e.type){case`string`:case`datetime_string`:n=t.z.string();break;case`number`:n=t.z.number();break;case`boolean`:n=t.z.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),r[t.name]=e}n=t.z.object(r)}else n=t.z.record(t.z.string(),t.z.unknown());break;default:n=t.z.unknown()}return e.array&&(n=t.z.array(n)),n},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||(0,t.isMissing)(e.compositeIdentifiers))return{enabled:!1};let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},parseScheduledJobConfig=e=>{if(!(0,t.isMissing)(e.scheduledJobs))return e.scheduledJobs},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,n,r)=>{if(e.authentication?.[n]?.[r]?.type!==`oauth2`)return;let i=e.authentication?.[n]?.[r]?.refreshAuthentication?.action;if((0,t.notMissing)(i))return{action:i,params:{}}},supportsRefreshAuthentication=(e,n,r)=>e.authentication?.[n]?.[r]?.type===`oauth2`?(0,t.notMissing)(getActionForRefreshAuthentication(e,n,r)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(n){if(n instanceof SchemaValidationError||n instanceof MissingScopeDefinitionError){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=(0,t.isMissing)(r)?n.path:[...n.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof InvalidYamlFileError)return{success:!1,errors:[{line:n.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(n instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!1,e),message:n.message,field:void 0}]};else if(n instanceof InvalidStepFunctionParamsError){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=(0,t.isMissing)(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,n)=>{let r=n.split(`
4
+ `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var l=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends l{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends l{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends l{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends l{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends l{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends l{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},MissingScopeDefinitionError=class extends l{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const u=25,formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),d={key:t.z.string(),label:t.z.string(),required:t.z.boolean().optional().default(!1),secret:t.z.boolean().optional().default(!1),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional()},f=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...d,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...d,type:t.z.literal(`select`),options:(0,t.zStrictObject)({value:t.z.string(),label:t.z.string()}).array()})]),p=(0,t.zStrictObject)({targetFieldKey:t.z.string(),alias:t.z.string().optional(),expression:t.z.string().optional(),values:t.z.unknown().optional(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:t.z.boolean().default(!1),custom:t.z.boolean().default(!1),hidden:t.z.boolean().default(!1),enumMapper:(0,t.zStrictObject)({matcher:t.z.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or((0,t.zStrictObject)({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional(),properties:t.z.lazy(()=>p).array().optional(),requiredScopes:t.z.string().optional()}),m=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),h=(0,t.zStrictObject)({name:t.z.string(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:t.z.boolean(),description:t.z.string(),array:t.z.boolean().optional().default(!1),arrayFormat:t.z.enum([`repeat`,`brackets`,`comma`]).optional(),in:t.z.enum([`body`,`query`,`path`,`headers`]),properties:t.z.lazy(()=>h.omit({in:!0})).array().optional(),oneOf:m.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}),g=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),_=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),v=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:_,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),y=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:_.optional(),stepFunctions:_.array().optional(),condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}).refine(e=>e.stepFunction!==void 0&&e.stepFunctions===void 0||e.stepFunction===void 0&&e.stepFunctions!==void 0,{message:`Exactly one of 'stepFunction' or 'stepFunctions' must be provided, not both`}),b=(0,t.zStrictObject)({actionId:t.z.string(),categories:t.z.string().array(),actionType:t.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:t.z.string().optional(),schemaType:t.z.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:t.z.string().optional(),entrypointHttpMethod:t.z.string().optional(),label:t.z.string(),description:t.z.string(),details:t.z.string().optional(),examples:g.array().optional(),tags:t.z.string().array().optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),resources:t.z.string().optional(),responses:(0,t.zStrictObject)({statusCode:t.z.number(),description:t.z.string()}).array().optional(),requiredScopes:t.z.string().optional(),inputs:h.array().optional(),cursor:(0,t.zStrictObject)({enabled:t.z.boolean(),pageSize:t.z.number()}).optional(),compositeIdentifiers:(0,t.zStrictObject)({enabled:t.z.boolean(),version:t.z.number().optional(),fields:(0,t.zStrictObject)({targetFieldKey:t.z.string(),remote:t.z.string().optional(),components:t.z.string().array()}).array().optional()}).optional(),scheduledJobs:(0,t.zStrictObject)({enabled:t.z.boolean(),type:t.z.enum([`data_sync`]),schedule:t.z.string(),description:t.z.string(),requestParams:(0,t.zStrictObject)({fields:t.z.string().array().optional(),expand:t.z.string().array().optional(),filter:t.z.record(t.z.string(),t.z.string()).optional()}).optional(),syncFilter:(0,t.zStrictObject)({name:t.z.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:t.z.string(),incrementalLoopbackPeriod:t.z.string()}).optional()}).array().optional(),fieldConfigs:p.array().optional(),steps:t.z.union([v,y]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional()}),x=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:b.extend({actionType:t.z.literal(`refresh_token`)})}),S=(0,t.zStrictObject)({mainRatelimit:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),rateLimit:t.z.number()})).optional(),mappedRateLimitErrors:t.z.array((0,t.zStrictObject)({errorStatus:t.z.number(),errorMessage:t.z.string(),errorMessagePath:t.z.string().optional(),retryAfterPath:t.z.string().optional(),retryAfterUnit:t.z.union([t.z.literal(`seconds`),t.z.literal(`milliseconds`),t.z.literal(`date`)]).optional(),retryAfterValue:t.z.number().optional()})).optional()}),C=(0,t.zStrictObject)({mainMaxConcurrency:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),maxConcurrency:t.z.number()})).optional()}),w=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional()}),T=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),steps:w.array().optional()}),E=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:T.array()}),D=(0,t.zStrictObject)({config:E.optional(),setup:E.optional()}),O=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,requiredScopes:t.z.string().optional(),environments:(0,t.zStrictObject)({key:t.z.string(),name:t.z.string()}).array(),support:(0,t.zStrictObject)({link:t.z.string().optional(),description:t.z.string().optional(),guides:D.optional()}).optional(),configFields:f.array().optional(),setupFields:f.array().optional(),refreshAuthentication:x.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(b),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),k=O.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),A=O.extend({type:t.z.literal(`custom`)}),j=O.extend({type:t.z.literal(`oidc`)}),M=t.z.discriminatedUnion(`type`,[k,A,j]),N=(0,t.zStrictObject)({StackOne:t.z.string(),info:(0,t.zStrictObject)({title:t.z.string(),version:t.z.string(),key:t.z.string(),assets:(0,t.zStrictObject)({icon:t.z.string()}),description:t.z.string(),details:t.z.string().optional()}),resources:t.z.string().optional(),baseUrl:t.z.string(),scopeDefinitions:t.z.record(t.z.string(),(0,t.zStrictObject)({description:t.z.string(),includes:t.z.string().optional()})).optional(),authentication:t.z.record(t.z.string(),M).array().optional(),actions:b.array().optional(),rateLimit:S.optional(),concurrency:C.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),P=`https://docs.stackone.com`,toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,n,r)=>{if((0,t.isMissing)(r))return;if((0,t.notMissing)(r.link))return r;let i=r.guides?.config?.sections,a=toKebabCase(n);return(0,t.notMissing)(i)&&i.length>0&&a!==``?{...r,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:r};function parseYamlConnector(e){try{let n=parseWithSchemaException(N,(0,s.parse)(e)),r=parseScopeDefinitions(n.scopeDefinitions),i={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,details:n.info.details,resources:n.resources,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage,forkedFrom:n.forkedFrom,scopeDefinitions:r},a=buildAuthenticationFromYaml(n),o={baseUrl:n.baseUrl,authentication:stripAuthenticationSetup(a)},c=buildActionsFromYaml(n,o);return i.actions=c,hydrateTestActions(n,n.info.key,a,c,o),i.authentication=a,(0,t.notMissing)(c)&&(i.categories=getConnectorCategoriesFromActions(Object.values(c))),i}catch(e){if(e instanceof l)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,n,r,i,a)=>{if(!r||!i)return;let o=0;for(let s of Object.values(r)){for(let r of Object.values(s))r.testActions=r.testActions?.map((r,s)=>{if((0,t.notMissing)(r.action))if(typeof r.action==`string`){let e=buildActionId(n,r.action),t=Object.values(i).find(t=>t.id===e);if(t)return{...r,action:t}}else{let t=parseAction(e,[`authentication`,o,`testActions`,s],buildActionId(n,r.action.actionId),r.action,a);return{...r,action:t}}return r});o++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},buildAuthenticationFromYaml=e=>{let n={},r=new Set(Object.keys(e.scopeDefinitions||{})),i=[],a=e.info.key;for(let[o,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);n[c]=s[c].environments.reduce((n,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=h?h.split(` `).filter(e=>e.trim().length>0):void 0;Object.values(_??[]).forEach(e=>{r.has(e)||i.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,o],keys:[`requiredScopes`]})});let v=(0,t.notMissing)(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,o,`refreshAuthentication`,`action`],buildActionId(a,p.action.actionId),p.action)}:void 0,y=buildSupport(a,g.label,g.support);return n[u]={...g,...(0,t.notMissing)(y)?{support:y}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},n},{})}if(i.length>0)throw new MissingScopeDefinitionError(i);return n},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||(0,t.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>((0,o.isSuccessStatusCode)(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!(0,a.isValidEnumRef)(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,n,r)=>{if(!n||n.length===0)return;let i={};for(let e of r){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),i[e.name]=t}let a=t.z.object(i).strict();for(let t=0;t<n.length;t++){let{exampleDescription:r,...i}=n[t],o=a.safeParse(i);if(!o.success){let n=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,t,n)}}},parseAction=(e,t,n,r,i,a)=>{let o=inferEntrypointUrl(r),s=buildActionResponses(r),c=buildCursorConfig(r),l=r.inputs||[];c.enabled&&(l?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),l?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(n,l),validateExamplesMatchInputs(n,r.examples,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=r.requiredScopes?r.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;if(Object.values(p??[]).forEach(e=>{d.has(e)||f.push({message:`Scope '${e}' included in action '${r.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),f.length>0)throw new MissingScopeDefinitionError(f);return{id:n,categories:r.categories,label:r.label,description:r.description,details:r.details,examples:r.examples,actionType:r.actionType,schemaType:r.schemaType??`native`,entrypointUrl:r.entrypointUrl??o,entrypointHttpMethod:u,endpoint:a,tags:r.tags,releaseStage:r.releaseStage,resources:r.resources,responses:s,cursor:c,compositeIdentifiers:parseCompositeIdentifiersConfig(r),scheduledJobs:parseScheduledJobConfig(r),requiredScopes:p,inputs:l,steps:r.steps.reduce((n,a)=>{let parseStepFunctionMeta=n=>{let{customErrors:a,...o}=n.parameters??{},s=parseFieldConfigs(e,t,n.functionName===`map_fields`||n.functionName===`typecast`?o.fields??r.fieldConfigs:void 0);return{functionName:n.functionName,version:n.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:n.functionName,baseRequestParams:i,customErrors:a}),...s??{},...o}}},o={id:a.stepId,description:a.description,condition:a.condition,ignoreError:a.ignoreError};if(`iterator`in a&&a.iterator){if(`stepFunction`in a&&a.stepFunction){let e={...o,iterator:a.iterator,stepFunction:parseStepFunctionMeta(a.stepFunction)};validateStep(r.actionId,e),n[a.stepId]=e}else if(`stepFunctions`in a&&a.stepFunctions){let e={...o,iterator:a.iterator,stepFunctions:a.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(r.actionId,e),n[a.stepId]=e}}else if(`stepFunction`in a&&a.stepFunction){let e={...o,stepFunction:parseStepFunctionMeta(a.stepFunction)};validateStep(r.actionId,e),n[a.stepId]=e}return n},{}),result:r.result}},parseFieldConfigs=(e,n,r)=>{if((0,t.isMissing)(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,t)=>{if(typeof e!=`object`||!e)return;let r=e.requiredScopes?e.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...n,`fieldConfigs`,t],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=a.StepFunctionsRegistry[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},validateStepFunctions=(e,t)=>{for(let n of t.stepFunctions){let r=n.version??`1`,i=a.StepFunctionsRegistry[n.functionName]?.[`v${r}`];if(!i)throw new InvalidStepFunctionError(e,t.id,n.functionName,r);let o=i.inputSchema;o&&parseStepFunctionParamsWithSchemaException(o,n.params,e,t.id,n.functionName,r)}},parseActionInputs=(e,n)=>{if(!e.inputs)return{};let r=createInputsSchema(e.inputs),i=t.z.object(r).parse(n);return{...i.headers??{},...i.query??{},...i.path??{},...i.body??{}}},createInputsSchema=e=>{let n=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),r={};for(let[e,i]of Object.entries(n)){let n={};for(let e of i){let t=buildZodSchemaFromInputType(e);e.description&&(t=t.describe(e.description)),e.required||(t=t.optional()),n[e.name]=t}Object.keys(n).length>0&&(r[e]=t.z.object(n))}return r},buildEnumZodSchema=(e,n)=>{if(!n)throw Error(`Enum input "${e}" requires oneOf definition`);let r;if(`values`in n)r=n.values;else if(`ref`in n){let t=(0,a.getInputEnumValues)(n.ref);if(!t)throw Error(`Unknown enum reference "${n.ref}" in input "${e}"`);r=t}else throw Error(`Invalid oneOf definition in input "${e}"`);if(r.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return t.z.enum(r)},buildZodSchemaFromInputType=e=>{let n;switch(e.type){case`string`:case`datetime_string`:n=t.z.string();break;case`number`:n=t.z.number();break;case`boolean`:n=t.z.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),r[t.name]=e}n=t.z.object(r)}else n=t.z.record(t.z.string(),t.z.unknown());break;default:n=t.z.unknown()}return e.array&&(n=t.z.array(n)),n},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||(0,t.isMissing)(e.compositeIdentifiers))return{enabled:!1};let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},parseScheduledJobConfig=e=>{if(!(0,t.isMissing)(e.scheduledJobs))return e.scheduledJobs},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,n,r)=>{if(e.authentication?.[n]?.[r]?.type!==`oauth2`)return;let i=e.authentication?.[n]?.[r]?.refreshAuthentication?.action;if((0,t.notMissing)(i))return{action:i,params:{}}},supportsRefreshAuthentication=(e,n,r)=>e.authentication?.[n]?.[r]?.type===`oauth2`?(0,t.notMissing)(getActionForRefreshAuthentication(e,n,r)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(n){if(n instanceof SchemaValidationError||n instanceof MissingScopeDefinitionError){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=(0,t.isMissing)(r)?n.path:[...n.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof InvalidYamlFileError)return{success:!1,errors:[{line:n.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(n instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!1,e),message:n.message,field:void 0}]};else if(n instanceof InvalidStepFunctionParamsError){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=(0,t.isMissing)(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,n)=>{let r=n.split(`
5
5
  `),i=0,a=-1,o=0;for(let n=0;n<r.length;n++){let s=r[n],c=s.match(/^(\s*)/)?.[1]?.length||0,l=s.replace(`- `,``).trim();if(l.startsWith(`#`)||l===``||c<=a)continue;let u=(0,t.notMissing)(e[i])?`${String(e[i])}`:``;if((0,t.isMissing)(u))return o+1;if(isNaN(Number(u))){if(l.startsWith(`${u}:`)){if(i===e.length-1)return n+1;a=c,o=n,i++}}else{let e=parseInt(u,10),t=-1;for(let a=n;a<r.length;a++)if(r[a].trim().startsWith(`-`)&&t++,t===e){i++,o=n,n--;break}else n++}}return o+1},getErrorLineNumberInAction=(e,n,r,i,a)=>{let o=a.split(`
6
- `),s=1,c=null,l=null;for(let a=0;a<o.length;a++){let u=o[a].trim();if((0,t.isMissing)(c)&&u===`- actionId: ${e}`){c=e,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.isMissing)(l)&&u===`- stepId: ${n}`){l=n,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.notMissing)(l)&&!i&&u.startsWith(`functionName: ${r}`)||(0,t.notMissing)(c)&&(0,t.notMissing)(l)&&i&&u===`parameters:`)return s=a+1,s}return s};var j=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends j{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends j{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends j{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends j{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e)}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=a.StepFunctionsFactory.build})=>{let i=r({functionName:t}).fn,o=await i({block:e,params:n}),s=t===a.StepFunctionName.MAP_FIELDS?{[a.StepFunctionName.MAP_FIELDS.toString()]:{output:{data:o.block.result},errors:o.errors,successful:o.successful}}:{};return{...o.block,steps:{...o?.block?.steps??{},...s}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,authConfigKey:i,environment:a=`production`,action:o,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,sourceType:f,sourceId:p,sourceValue:m})=>({organizationId:l,projectSecureId:c,accountSecureId:s,connectorKey:n,connectorVersion:r,category:e,service:``,resource:``,originOwnerId:u,originOwnerName:d,source:{sourceType:f,sourceId:p,sourceValue:m},schema:o?.schema?.key,actionType:o?.actionType??`unknown`,authenticationType:i,environment:a,actionRunId:(0,t.generateActionRunId)()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,decodeInputCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!n?.enabled||(0,t.isMissing)(r))return e;let i=n.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:n.version??a.COMPOSITE_ID_LATEST_VERSION,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],o=[];for(let s of e)try{let e=(0,a.decodeCompositeId)(s,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:s,compositeIdentifierConfig:n,error:e}}),o.push(s)}return{compositeIdComponents:i,nonCompositeIds:o}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof a.CoreError&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},M=`remote_`,encodeResultCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers;if(!n?.enabled)return e;let r=`data`,i=e.outputs?.[r];if((0,t.isMissing)(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,n)):mapCompositeIds(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,n)=>{let r=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,n));return{...e,...(0,t.isObject)(r)?r:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??a.COMPOSITE_ID_LATEST_VERSION,r={};return t.fields?.forEach(t=>{let i={},o=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),o.push({key:t.name,value:e[t.name]})});let s=(0,a.encodeCompositeId)(o.length===1?o[0]:{identifiers:o},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=s,t.remote&&(r[`${M}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>(0,t.isString)(e)&&e.length>0),shouldSkipEncoding=(e,t)=>(0,a.isCompositeId)(e)||t.startsWith(M),encodeStringValue=(e,t)=>{try{return(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},processStringArrayField=(e,n,r)=>{r[e]=n.map(n=>(0,t.isString)(n)&&n.length>0&&!(0,a.isCompositeId)(n)?encodeStringValue(e,n):n),r[`${M}${e}`]=n},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION}),n[`remote_${e}`]=t)},processIdField=(e,n,r)=>{isValidStringArray(n)?processStringArrayField(e,n,r):(0,t.isString)(n)&&n.length>0&&processStringField(e,n,r)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!(0,t.isObject)(e))return e;let n={...e};for(let[r,i]of Object.entries(e))((0,t.isObject)(i)||Array.isArray(i)&&i.length>0&&(0,t.isObject)(i[0]))&&(n[r]=mapCompositeIdsFromInference(i)),isIdField(r)&&processIdField(r,i,n);return n},getPageSize=(e,n)=>{let r=Number(e.inputs?.page_size);return(0,t.notMissing)(e.inputs?.page_size)&&(0,t.isNumber)(r)&&!Number.isNaN(r)?r:e.action?.cursor?.pageSize??n},virtualPaginateResult=(e,n,r,i)=>{let o=(0,t.isMissing)(e)?void 0:e.data,s=Object.keys(r).length+1,c=(0,a.isCursorEmpty)({cursor:i,ignoreStepIndex:s});if(!(0,t.isObject)(e)||(0,t.isMissing)(o)||(o?.length??0)<=n)return{result:e,next:(0,t.notMissing)(i)&&!c?(0,a.minifyCursor)(i):null};let l=i?.remote?.[s]?.pageNumber??1,u=(l-1)*n,d=u+n,f=o.slice(u,d),p=o.length>d||!c,m=(0,a.updateCursor)({cursor:i,stepIndex:s,pageNumber:l+1});return{result:{...e,data:f},next:p?(0,a.minifyCursor)(m):null}},getOlapOptions=e=>{let n=e?.olap;return(0,t.isMissing)(n)?{}:{logs:n.logs?{enabled:n.logs.enabled}:void 0,advanced:n.advanced?{enabled:n.advanced.enabled,ttl:n.advanced.ttl,errorsOnly:n.advanced.errorsOnly}:void 0}},runStepAction=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),shouldSkipStepDueToCondition=(e,t)=>e.condition?!(0,c.safeEvaluate)(e.condition,t):!1,buildStepParams=(e,n,r)=>{let i=e.stepFunction,o=a.StepFunctionsRegistry[e.stepFunction.functionName]?.[`v${e.stepFunction.version??1}`],s=(0,t.notMissing)(o?.inputSchema?.shape)?`cursor`in o?.inputSchema?.shape:!1;return n.action?.cursor.enabled&&s?{...i.params??{},cursor:{token:n.nextCursor?.remote?.[r]?.providerPageCursor,position:n.nextCursor?.remote?.[r]?.position}}:i.params??{}},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,o,s)=>{let c=new Date,l=n[e],u=l.stepFunction,d=o.buildStepFunction({functionName:u.functionName,version:u.version,validateSchemas:!0}).fn;if(shouldSkipStepDueToCondition(l,r))return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`});if(i.hasFatalError)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`});let f=await d({block:r,params:buildStepParams(l,r,t)});if(f.successful===!1)return handleStepFailure(r,e,t,f,l,i,c,new Date);if(f.streamOutput)return s?addStepResultToBlock({block:{...f.block,streamOutput:f.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:f,startTime:c,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let p=r.action?.cursor.enabled?(0,a.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:f.output?.next,position:f.output?.position}):void 0;return addStepResultToBlock({block:{...f.block,nextCursor:p},stepId:e,stepIndex:t,successful:!0,functionOutput:f,startTime:c,endTime:new Date})},buildFinalResponse=(e,n,r,i,a)=>{let s=!r.hasFatalError,c=s?e.action?.responses.success.statusCode??200:r.errorStatusCode??500;if(n.streamOutput)return{...n,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}};let l=(0,t.notMissing)(a)&&(0,t.isObject)(a.result)?{next:a.next,...a.result}:i;return{...n,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},o=Object.keys(r),s=getPageSize(e,25),c={hasFatalError:!1,errorStatusCode:null},l={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of o.entries()){let n=e===o.length-1;i=await executeStep(t,e,r,i,c,l,n)}let u=e.action?.result?evaluateResult(e.action.result,i):void 0,d=e.action?.cursor.enabled?n(u,s,r,i.nextCursor):void 0;return buildFinalResponse(e,i,c,u,d)},evaluateResult=(e,n)=>(0,t.isObject)(e)?(0,c.safeEvaluateRecord)(e,n):(0,c.safeEvaluate)(e,n),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:n,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if((0,t.isMissing)(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:n,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},runAction=async e=>{let{pathParams:n={},queryParams:r={},body:i={},headers:a={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=parseActionInputs,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction,getActionFromUrlFn:f=getActionFromUrl,getActionForRefreshAuthenticationFn:p=getActionForRefreshAuthentication,getTestActionsFn:m=getTestActions,mode:h,account:g,connector:_,getHttpClient:v,getOlapClient:y,settings:b,source:x,logger:S,category:C,...w}=e,T=g.authConfigKey,E=g.environment??`production`,D=g.secureId,O=g.projectSecureId,k=g.organizationId,A=g.credentials,j=g.originOwnerId,M=g.originOwnerName,N=l({category:C??`action`,connectorKey:g.providerKey,connectorVersion:g.providerVersion,authConfigKey:T,environment:E,accountSecureId:D,projectSecureId:O,organizationId:k,originOwnerId:j,originOwnerName:M,sourceType:x?.sourceType,sourceId:x?.sourceId,sourceValue:x?.sourceValue}),P=new Date,F;try{F=(0,t.isString)(_)?o(_):_}catch{throw new ConnectorParseError(N,`Error while parsing connector`)}let I={connector:F,context:N,credentials:A,settings:b,logger:S,getHttpClient:v,getOlapClient:y};if(h===`action_id`){let{actionId:o}=w,c=findActionByActionId(F,o);if((0,t.isMissing)(c))throw new MissingActionError(N,`No matching action found`);let l=await executeAction({action:c,blockContext:N,queryParams:r,pathParams:n,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:I,runStepActionFn:d});return l.statistics={startTime:P,endTime:new Date},recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(h===`test_actions`){let n=m(F,T,E);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,I);N.actionType=`test`;for(let r of n){let n=new Date,i=await u({...I,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,c.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(((0,t.isMissing)(a?.response?.successful)||!a.response.successful)&&r.required){S?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let t=await createErrorBlock(u,I);return t.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,I);return r.statistics={startTime:P,endTime:new Date},r}else if(h===`refresh_authentication`){let n=p(F,T,E);if((0,t.isMissing)(n))throw new MissingActionError(N,`No matching action found`);let o=await executeAction({action:n.action,blockContext:N,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:I,runStepActionFn:d});return o.statistics={startTime:P,endTime:new Date},recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(h===`path`){let{path:n,method:o}=w,c=f(F,n,o);if((0,t.isMissing)(c))throw new MissingActionError(N,`No matching action found`);let l=await executeAction({action:c.action,blockContext:N,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:I,runStepActionFn:d});return l.statistics={startTime:P,endTime:new Date},recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,I)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,n)=>{let r=e?.next,i=(0,t.notMissing)(r)&&n.actionType===`list`?(0,a.expandCursor)(r):void 0;if(i===null)throw new InvalidCursorError(n,`Invalid cursor.`);return i},recordActionResult=({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e))return;let i=r.olapClient;if((0,t.isMissing)(i?.recordAction))return;let a=getOlapOptions(n.settings),o={actionId:e.id,mode:n.mode,url:e?.entrypointUrl,pathParams:n?.pathParams,queryParams:n?.queryParams,body:n?.body,headers:n?.headers,sourceId:n.source?.sourceId,sourceType:n.source?.sourceType,sourceValue:n.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime};i.recordAction(o,c,a)},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=parseYamlConnector,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseActionInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepActionFn:m}),N=`stackone://internal//`,P=`stackone://internal//refresh_token`,runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=parseYamlConnector,getActionFromUrlFn:d=getActionFromUrl,getActionForRefreshAuthenticationFn:f=getActionForRefreshAuthentication,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getActionFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runTestActions=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=parseYamlConnector,getTestActionsFn:a=getTestActions,createBlockContextFn:o=createBlockContext,createBlockFn:s=createBlock,runStepActionFn:c=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestActionsFn:a,createBlockContextFn:o,createBlockFn:s,runStepActionFn:c}))?.response?.successful??!1;exports.ConnectSDKError=j,exports.InvalidActionInputsError=InvalidActionInputsError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.executeStepFunction=executeStepFunction,exports.formatValidationErrorResponse=formatValidationErrorResponse,exports.getActionFromUrl=getActionFromUrl,exports.getActionsMeta=getActionsMeta,exports.getActionsMetaFromConnectors=getActionsMetaFromConnectors,exports.getActionsMetaSummary=getActionsMetaSummary,exports.getActionsMetaSummaryFromConnectors=getActionsMetaSummaryFromConnectors,exports.getRefreshTokenExpiresIn=getRefreshTokenExpiresIn,exports.getTokenExpiresIn=getTokenExpiresIn,exports.isConnectorReleased=isConnectorReleased,exports.loadConnector=loadConnector,exports.parseActionInputs=parseActionInputs,exports.parseYamlConnector=parseYamlConnector,exports.runAction=runAction,exports.runConnectorActionById=runConnectorActionById,exports.runConnectorActionByPath=runConnectorActionByPath,exports.runStepAction=runStepAction,exports.runTestActions=runTestActions,exports.supportsRefreshAuthentication=supportsRefreshAuthentication,exports.validateYamlConnector=validateYamlConnector;
6
+ `),s=1,c=null,l=null;for(let a=0;a<o.length;a++){let u=o[a].trim();if((0,t.isMissing)(c)&&u===`- actionId: ${e}`){c=e,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.isMissing)(l)&&u===`- stepId: ${n}`){l=n,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.notMissing)(l)&&!i&&u.includes(`functionName: ${r}`)||(0,t.notMissing)(c)&&(0,t.notMissing)(l)&&i&&u===`parameters:`)return s=a+1,s}return s};var F=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends F{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends F{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends F{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends F{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e)}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=a.StepFunctionsFactory.build})=>{let i=r({functionName:t}).fn,o=await i({block:e,params:n}),s=t===a.StepFunctionName.MAP_FIELDS?{[a.StepFunctionName.MAP_FIELDS.toString()]:{output:{data:o.block.result},errors:o.errors,successful:o.successful}}:{};return{...o.block,steps:{...o?.block?.steps??{},...s}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,authConfigKey:i,environment:a=`production`,action:o,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,sourceType:f,sourceId:p,sourceValue:m})=>({organizationId:l,projectSecureId:c,accountSecureId:s,connectorKey:n,connectorVersion:r,category:e,service:``,resource:``,originOwnerId:u,originOwnerName:d,source:{sourceType:f,sourceId:p,sourceValue:m},schema:o?.schema?.key,actionType:o?.actionType??`unknown`,authenticationType:i,environment:a,actionRunId:(0,t.generateActionRunId)()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,decodeInputCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!n?.enabled||(0,t.isMissing)(r))return e;let i=n.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:n.version??a.COMPOSITE_ID_LATEST_VERSION,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],o=[];for(let s of e)try{let e=(0,a.decodeCompositeId)(s,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:s,compositeIdentifierConfig:n,error:e}}),o.push(s)}return{compositeIdComponents:i,nonCompositeIds:o}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof a.CoreError&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},I=`remote_`,encodeResultCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers;if(!n?.enabled)return e;let r=`data`,i=e.outputs?.[r];if((0,t.isMissing)(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,n)):mapCompositeIds(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,n)=>{let r=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,n));return{...e,...(0,t.isObject)(r)?r:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??a.COMPOSITE_ID_LATEST_VERSION,r={};return t.fields?.forEach(t=>{let i={},o=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),o.push({key:t.name,value:e[t.name]})});let s=(0,a.encodeCompositeId)(o.length===1?o[0]:{identifiers:o},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=s,t.remote&&(r[`${I}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>(0,t.isString)(e)&&e.length>0),shouldSkipEncoding=(e,t)=>(0,a.isCompositeId)(e)||t.startsWith(I),encodeStringValue=(e,t)=>{try{return(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},processStringArrayField=(e,n,r)=>{r[e]=n.map(n=>(0,t.isString)(n)&&n.length>0&&!(0,a.isCompositeId)(n)?encodeStringValue(e,n):n),r[`${I}${e}`]=n},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION}),n[`remote_${e}`]=t)},processIdField=(e,n,r)=>{isValidStringArray(n)?processStringArrayField(e,n,r):(0,t.isString)(n)&&n.length>0&&processStringField(e,n,r)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!(0,t.isObject)(e))return e;let n={...e};for(let[r,i]of Object.entries(e))((0,t.isObject)(i)||Array.isArray(i)&&i.length>0&&(0,t.isObject)(i[0]))&&(n[r]=mapCompositeIdsFromInference(i)),isIdField(r)&&processIdField(r,i,n);return n},getPageSize=(e,n)=>{let r=Number(e.inputs?.page_size);return(0,t.notMissing)(e.inputs?.page_size)&&(0,t.isNumber)(r)&&!Number.isNaN(r)?r:e.action?.cursor?.pageSize??n},virtualPaginateResult=(e,n,r,i)=>{let o=(0,t.isMissing)(e)?void 0:e.data,s=Object.keys(r).length+1,c=(0,a.isCursorEmpty)({cursor:i,ignoreStepIndex:s});if(!(0,t.isObject)(e)||(0,t.isMissing)(o)||(o?.length??0)<=n)return{result:e,next:(0,t.notMissing)(i)&&!c?(0,a.minifyCursor)(i):null};let l=i?.remote?.[s]?.pageNumber??1,u=(l-1)*n,d=u+n,f=o.slice(u,d),p=o.length>d||!c,m=(0,a.updateCursor)({cursor:i,stepIndex:s,pageNumber:l+1});return{result:{...e,data:f},next:p?(0,a.minifyCursor)(m):null}},getOlapOptions=e=>{let n=e?.olap;return(0,t.isMissing)(n)?{}:{logs:n.logs?{enabled:n.logs.enabled}:void 0,advanced:n.advanced?{enabled:n.advanced.enabled,ttl:n.advanced.ttl,errorsOnly:n.advanced.errorsOnly}:void 0}},runStepAction=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],shouldSkipStepDueToCondition=(e,t)=>e.condition?!(0,c.safeEvaluate)(e.condition,t):!1,buildStepParamsForFunction=(e,n,r)=>{let i=a.StepFunctionsRegistry[e.functionName]?.[`v${e.version??1}`],o=(0,t.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return n.action?.cursor.enabled&&o?{...e.params??{},cursor:{token:n.nextCursor?.remote?.[r]?.providerPageCursor,position:n.nextCursor?.remote?.[r]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,o,s)=>{let c=n[e];return shouldSkipStepDueToCondition(c,r)?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`}):(0,a.isForeachStep)(c)?executeForeachStep(e,t,c,r,i,o,s):executeSimpleStep(e,t,c,r,i,o,s)},executeSimpleStep=async(e,t,n,r,i,o,s)=>{let c=new Date,l=n.stepFunction;if(!l)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`});let u=o.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,d=await u({block:r,params:buildStepParams(n,r,t)});if(d.successful===!1)return handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?addStepResultToBlock({block:{...d.block,streamOutput:d.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let f=r.action?.cursor.enabled?(0,a.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:d.output?.next,position:d.output?.position}):void 0;return addStepResultToBlock({block:{...d.block,nextCursor:f},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date})},executeForeachStep=async(e,n,r,i,o,s,l)=>{let u=new Date,d=(0,c.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let f=getStepFunctionsToExecute(r);if(f.length===0)return addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`});let p=[],m=i,h,g={};for(let[i,a]of d.entries()){let c={...m,iterator:{item:a,index:i}};for(let l of f){let d=s.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,f=buildStepParamsForFunction(l,c,n),p=await d({block:c,params:f});if(h=p,p.successful===!1&&!(r.ignoreError??!1))return o.hasFatalError=!0,o.errorStatusCode??=p.output?.statusCode??500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,output:p.output,errors:p.errors}},addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,functionOutput:p,startTime:u,endTime:new Date});if(c={...p.block,iterator:{item:a,index:i,current:p.output}},p.streamOutput)return o.hasFatalError=!0,o.errorStatusCode=500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`})}m=c,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:h?.successful??!0,output:h?.output,errors:h?.errors}},h?.output&&p.push(h.output)}let _=i.action?.cursor.enabled?(0,a.updateCursor)({cursor:i.nextCursor,stepIndex:n,providerPageCursor:h?.output?.next,position:h?.output?.position}):void 0,v={block:m,successful:!0,output:{data:p}};return addStepResultToBlock({block:{...m,nextCursor:_,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!0,functionOutput:v,startTime:u,endTime:new Date})},buildFinalResponse=(e,n,r,i,a)=>{let s=!r.hasFatalError,c=s?e.action?.responses.success.statusCode??200:r.errorStatusCode??500;if(n.streamOutput)return{...n,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}};let l=(0,t.notMissing)(a)&&(0,t.isObject)(a.result)?{next:a.next,...a.result}:i;return{...n,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},o=Object.keys(r),s=getPageSize(e,25),c={hasFatalError:!1,errorStatusCode:null},l={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of o.entries()){let n=e===o.length-1;i=await executeStep(t,e,r,i,c,l,n)}let u=e.action?.result?evaluateResult(e.action.result,i):void 0,d=e.action?.cursor.enabled?n(u,s,r,i.nextCursor):void 0;return buildFinalResponse(e,i,c,u,d)},evaluateResult=(e,n)=>(0,t.isObject)(e)?(0,c.safeEvaluateRecord)(e,n):(0,c.safeEvaluate)(e,n),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:n,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if((0,t.isMissing)(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:n,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},runAction=async e=>{let{pathParams:n={},queryParams:r={},body:i={},headers:a={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=parseActionInputs,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction,getActionFromUrlFn:f=getActionFromUrl,getActionForRefreshAuthenticationFn:p=getActionForRefreshAuthentication,getTestActionsFn:m=getTestActions,mode:h,account:g,connector:_,getHttpClient:v,getOlapClient:y,settings:b,source:x,logger:S,category:C,...w}=e,T=g.authConfigKey,E=g.environment??`production`,D=g.secureId,O=g.projectSecureId,k=g.organizationId,A=g.credentials,j=g.originOwnerId,M=g.originOwnerName,N=l({category:C??`action`,connectorKey:g.providerKey,connectorVersion:g.providerVersion,authConfigKey:T,environment:E,accountSecureId:D,projectSecureId:O,organizationId:k,originOwnerId:j,originOwnerName:M,sourceType:x?.sourceType,sourceId:x?.sourceId,sourceValue:x?.sourceValue}),P=new Date,F;try{F=(0,t.isString)(_)?o(_):_}catch{throw new ConnectorParseError(N,`Error while parsing connector`)}let I={connector:F,context:N,credentials:A,settings:b,logger:S,getHttpClient:v,getOlapClient:y};if(h===`action_id`){let{actionId:o}=w,c=findActionByActionId(F,o);if((0,t.isMissing)(c))throw new MissingActionError(N,`No matching action found`);let l=await executeAction({action:c,blockContext:N,queryParams:r,pathParams:n,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:I,runStepActionFn:d});return l.statistics={startTime:P,endTime:new Date},recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(h===`test_actions`){let n=m(F,T,E);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,I);N.actionType=`test`;for(let r of n){let n=new Date,i=await u({...I,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,c.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(((0,t.isMissing)(a?.response?.successful)||!a.response.successful)&&r.required){S?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let t=await createErrorBlock(u,I);return t.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,I);return r.statistics={startTime:P,endTime:new Date},r}else if(h===`refresh_authentication`){let n=p(F,T,E);if((0,t.isMissing)(n))throw new MissingActionError(N,`No matching action found`);let o=await executeAction({action:n.action,blockContext:N,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:I,runStepActionFn:d});return o.statistics={startTime:P,endTime:new Date},recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(h===`path`){let{path:n,method:o}=w,c=f(F,n,o);if((0,t.isMissing)(c))throw new MissingActionError(N,`No matching action found`);let l=await executeAction({action:c.action,blockContext:N,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:I,runStepActionFn:d});return l.statistics={startTime:P,endTime:new Date},recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,I)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,n)=>{let r=e?.next,i=(0,t.notMissing)(r)&&n.actionType===`list`?(0,a.expandCursor)(r):void 0;if(i===null)throw new InvalidCursorError(n,`Invalid cursor.`);return i},recordActionResult=({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e))return;let i=r.olapClient;if((0,t.isMissing)(i?.recordAction))return;let a=getOlapOptions(n.settings),o={actionId:e.id,mode:n.mode,url:e?.entrypointUrl,pathParams:n?.pathParams,queryParams:n?.queryParams,body:n?.body,headers:n?.headers,sourceId:n.source?.sourceId,sourceType:n.source?.sourceType,sourceValue:n.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime};i.recordAction(o,c,a)},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=parseYamlConnector,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseActionInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepActionFn:m}),L=`stackone://internal//`,R=`stackone://internal//refresh_token`,runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=parseYamlConnector,getActionFromUrlFn:d=getActionFromUrl,getActionForRefreshAuthenticationFn:f=getActionForRefreshAuthentication,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getActionFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runTestActions=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=parseYamlConnector,getTestActionsFn:a=getTestActions,createBlockContextFn:o=createBlockContext,createBlockFn:s=createBlock,runStepActionFn:c=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestActionsFn:a,createBlockContextFn:o,createBlockFn:s,runStepActionFn:c}))?.response?.successful??!1;exports.ConnectSDKError=F,exports.InvalidActionInputsError=InvalidActionInputsError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.executeStepFunction=executeStepFunction,exports.formatValidationErrorResponse=formatValidationErrorResponse,exports.getActionFromUrl=getActionFromUrl,exports.getActionsMeta=getActionsMeta,exports.getActionsMetaFromConnectors=getActionsMetaFromConnectors,exports.getActionsMetaSummary=getActionsMetaSummary,exports.getActionsMetaSummaryFromConnectors=getActionsMetaSummaryFromConnectors,exports.getRefreshTokenExpiresIn=getRefreshTokenExpiresIn,exports.getTokenExpiresIn=getTokenExpiresIn,exports.isConnectorReleased=isConnectorReleased,exports.loadConnector=loadConnector,exports.parseActionInputs=parseActionInputs,exports.parseYamlConnector=parseYamlConnector,exports.runAction=runAction,exports.runConnectorActionById=runConnectorActionById,exports.runConnectorActionByPath=runConnectorActionByPath,exports.runStepAction=runStepAction,exports.runTestActions=runTestActions,exports.supportsRefreshAuthentication=supportsRefreshAuthentication,exports.validateYamlConnector=validateYamlConnector;
package/dist/index.d.cts CHANGED
@@ -435,6 +435,7 @@ type Block = {
435
435
  context: BlockContext;
436
436
  debug?: DebugParams;
437
437
  steps?: StepsSnapshots;
438
+ intermediateSteps?: IntermediateStepsSnapshots;
438
439
  httpClient?: IHttpClient;
439
440
  olapClient?: IOlapClient;
440
441
  settings?: Settings;
@@ -451,6 +452,11 @@ type Block = {
451
452
  message?: string;
452
453
  };
453
454
  statistics?: BlockStatistics;
455
+ iterator?: {
456
+ item: unknown;
457
+ index: number;
458
+ current?: unknown;
459
+ };
454
460
  fieldConfigs?: FieldConfig[];
455
461
  result?: BlockIndexedRecord[] | BlockIndexedRecord;
456
462
  };
@@ -567,18 +573,39 @@ type StepSnapshot = {
567
573
  type StepsSnapshots = {
568
574
  [stepId: string]: StepSnapshot;
569
575
  };
576
+ type IntermediateStepsSnapshots = {
577
+ [stepId: string]: IntermediateStepSnapshot;
578
+ };
579
+ type IntermediateStepSnapshot = {
580
+ [interationIndex: number]: {
581
+ iterator?: string;
582
+ snapshot: StepSnapshot;
583
+ };
584
+ };
570
585
  type StepError = {
571
586
  [key: string]: unknown;
572
587
  };
573
- type Step = {
588
+ type BaseStep = {
574
589
  id: string;
575
590
  description: string;
576
- stepFunction: StepFunctionMeta;
577
591
  ignoreError?: boolean;
578
592
  async?: boolean;
579
593
  successCriteria?: string;
580
594
  condition?: string;
581
595
  };
596
+ type SimpleStep = BaseStep & {
597
+ stepFunction: StepFunctionMeta;
598
+ };
599
+ type ForeachStep = BaseStep & {
600
+ iterator: string;
601
+ } & ({
602
+ stepFunction: StepFunctionMeta;
603
+ stepFunctions?: never;
604
+ } | {
605
+ stepFunction?: never;
606
+ stepFunctions: StepFunctionMeta[];
607
+ });
608
+ type Step = SimpleStep | ForeachStep;
582
609
  type StepStatistics = {
583
610
  startTime?: Date;
584
611
  endTime?: Date;
package/dist/index.d.mts CHANGED
@@ -435,6 +435,7 @@ type Block = {
435
435
  context: BlockContext;
436
436
  debug?: DebugParams;
437
437
  steps?: StepsSnapshots;
438
+ intermediateSteps?: IntermediateStepsSnapshots;
438
439
  httpClient?: IHttpClient;
439
440
  olapClient?: IOlapClient;
440
441
  settings?: Settings;
@@ -451,6 +452,11 @@ type Block = {
451
452
  message?: string;
452
453
  };
453
454
  statistics?: BlockStatistics;
455
+ iterator?: {
456
+ item: unknown;
457
+ index: number;
458
+ current?: unknown;
459
+ };
454
460
  fieldConfigs?: FieldConfig[];
455
461
  result?: BlockIndexedRecord[] | BlockIndexedRecord;
456
462
  };
@@ -567,18 +573,39 @@ type StepSnapshot = {
567
573
  type StepsSnapshots = {
568
574
  [stepId: string]: StepSnapshot;
569
575
  };
576
+ type IntermediateStepsSnapshots = {
577
+ [stepId: string]: IntermediateStepSnapshot;
578
+ };
579
+ type IntermediateStepSnapshot = {
580
+ [interationIndex: number]: {
581
+ iterator?: string;
582
+ snapshot: StepSnapshot;
583
+ };
584
+ };
570
585
  type StepError = {
571
586
  [key: string]: unknown;
572
587
  };
573
- type Step = {
588
+ type BaseStep = {
574
589
  id: string;
575
590
  description: string;
576
- stepFunction: StepFunctionMeta;
577
591
  ignoreError?: boolean;
578
592
  async?: boolean;
579
593
  successCriteria?: string;
580
594
  condition?: string;
581
595
  };
596
+ type SimpleStep = BaseStep & {
597
+ stepFunction: StepFunctionMeta;
598
+ };
599
+ type ForeachStep = BaseStep & {
600
+ iterator: string;
601
+ } & ({
602
+ stepFunction: StepFunctionMeta;
603
+ stepFunctions?: never;
604
+ } | {
605
+ stepFunction?: never;
606
+ stepFunctions: StepFunctionMeta[];
607
+ });
608
+ type Step = SimpleStep | ForeachStep;
582
609
  type StepStatistics = {
583
610
  startTime?: Date;
584
611
  endTime?: Date;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import{t as e}from"./chunk-Cfxk5zVN.mjs";import{generateActionRunId as t,isMissing as n,isNumber as r,isObject as i,isString as a,notMissing as o,z as s,zStrictObject as c}from"@stackone/utils";import{match as l}from"path-to-regexp";import{readFileSync as u}from"fs";import{dirname as d,join as f,resolve as p}from"path";import{AUTHORIZATION_SCHEMA as m,COMPOSITE_ID_LATEST_VERSION as h,CoreError as g,ReleaseStages as _,StepFunctionName as v,StepFunctionsFactory as y,StepFunctionsRegistry as b,decodeCompositeId as x,encodeCompositeId as S,expandCursor as C,getInputEnumValues as w,isCompositeId as T,isCursorEmpty as E,isValidEnumRef as D,minifyCursor as O,updateCursor as k}from"@stackone/core";import{HttpErrorMessages as A,isSuccessStatusCode as j}from"@stackone/transport";import{parse as M}from"yaml";import{evaluate as N,safeEvaluate as P,safeEvaluateRecord as F}from"@stackone/expressions";const createBlock=async({connector:e,inputs:t,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u})=>{if(n(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:t,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:await l(),olapClient:u?await u():void 0,settings:s,logger:c}},getActionFromUrl=(e,t,n)=>{let r=n.toUpperCase();if(!e.actions)return;let i=testMatcher(t,r,Object.values(e.actions).filter(e=>o(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})));if(i)return{action:e.actions?.[i.actionId],params:i.params}},removeLeadingAndTrailingSlashes=e=>{let t=e.startsWith(`/`)?e.slice(1):e;return t.endsWith(`/`)?t.slice(0,-1):t},testMatcher=(e,t,n)=>{let r=removeLeadingAndTrailingSlashes(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=l(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim()))(removeLeadingAndTrailingSlashes(r));if(n!==!1)return{actionId:e.actionId,path:e.endpoint,params:n.params}}},buildActionId=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,findActionByActionId=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.actions?.[r]},loadConnector=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=u(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
1
+ import{t as e}from"./chunk-Cfxk5zVN.mjs";import{generateActionRunId as t,isMissing as n,isNumber as r,isObject as i,isString as a,notMissing as o,z as s,zStrictObject as c}from"@stackone/utils";import{match as l}from"path-to-regexp";import{readFileSync as u}from"fs";import{dirname as d,join as f,resolve as p}from"path";import{AUTHORIZATION_SCHEMA as m,COMPOSITE_ID_LATEST_VERSION as h,CoreError as g,ReleaseStages as _,StepFunctionName as v,StepFunctionsFactory as y,StepFunctionsRegistry as b,decodeCompositeId as x,encodeCompositeId as S,expandCursor as C,getInputEnumValues as w,isCompositeId as T,isCursorEmpty as E,isForeachStep as D,isValidEnumRef as O,minifyCursor as k,updateCursor as A}from"@stackone/core";import{HttpErrorMessages as j,isSuccessStatusCode as M}from"@stackone/transport";import{parse as N}from"yaml";import{evaluate as P,safeEvaluate as F,safeEvaluateRecord as I}from"@stackone/expressions";const createBlock=async({connector:e,inputs:t,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u})=>{if(n(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:t,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:await l(),olapClient:u?await u():void 0,settings:s,logger:c}},getActionFromUrl=(e,t,n)=>{let r=n.toUpperCase();if(!e.actions)return;let i=testMatcher(t,r,Object.values(e.actions).filter(e=>o(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})));if(i)return{action:e.actions?.[i.actionId],params:i.params}},removeLeadingAndTrailingSlashes=e=>{let t=e.startsWith(`/`)?e.slice(1):e;return t.endsWith(`/`)?t.slice(0,-1):t},testMatcher=(e,t,n)=>{let r=removeLeadingAndTrailingSlashes(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=l(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim()))(removeLeadingAndTrailingSlashes(r));if(n!==!1)return{actionId:e.actionId,path:e.endpoint,params:n.params}}},buildActionId=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,findActionByActionId=(e,t)=>{let n=`${e.key}_`,r=t.startsWith(n)?t:`${n}${t}`;return e.actions?.[r]},loadConnector=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=u(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
2
2
  `),d(e)).join(`
3
3
  `)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},processYamlObject=(e,t)=>{let n=[];for(let r of e)if(isPartialReference(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=loadPartialFile(i,t).map(t=>` `.repeat(e)+t);n.push(...a)}else n.push(r);return n},isPartialReference=e=>e.includes(`$ref:`),loadPartialFile=(e,t)=>{let n=p(f(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{return u(n,`utf8`).split(`
4
- `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var I=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends I{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends I{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends I{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends I{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends I{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends I{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},MissingScopeDefinitionError=class extends I{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),L={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional()},R=s.discriminatedUnion(`type`,[c({...L,type:s.enum([`text`,`password`])}),c({...L,type:s.literal(`select`),options:c({value:s.string(),label:s.string()}).array()})]),z=c({targetFieldKey:s.string(),alias:s.string().optional(),expression:s.string().optional(),values:s.unknown().optional(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:s.boolean().default(!1),custom:s.boolean().default(!1),hidden:s.boolean().default(!1),enumMapper:c({matcher:s.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or(c({matchExpression:s.string(),value:s.string()}).array())}).optional(),properties:s.lazy(()=>z).array().optional(),requiredScopes:s.string().optional()}),B=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),V=c({name:s.string(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:s.boolean(),description:s.string(),array:s.boolean().optional().default(!1),arrayFormat:s.enum([`repeat`,`brackets`,`comma`]).optional(),in:s.enum([`body`,`query`,`path`,`headers`]),properties:s.lazy(()=>V.omit({in:!0})).array().optional(),oneOf:B.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}),H=s.object({exampleDescription:s.string().optional()}).catchall(s.unknown()),U=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:s.string().optional(),schemaType:s.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:s.string().optional(),entrypointHttpMethod:s.string().optional(),label:s.string(),description:s.string(),details:s.string().optional(),examples:H.array().optional(),tags:s.string().array().optional(),releaseStage:s.enum(_).optional(),resources:s.string().optional(),responses:c({statusCode:s.number(),description:s.string()}).array().optional(),requiredScopes:s.string().optional(),inputs:V.array().optional(),cursor:c({enabled:s.boolean(),pageSize:s.number()}).optional(),compositeIdentifiers:c({enabled:s.boolean(),version:s.number().optional(),fields:c({targetFieldKey:s.string(),remote:s.string().optional(),components:s.string().array()}).array().optional()}).optional(),scheduledJobs:c({enabled:s.boolean(),type:s.enum([`data_sync`]),schedule:s.string(),description:s.string(),requestParams:c({fields:s.string().array().optional(),expand:s.string().array().optional(),filter:s.record(s.string(),s.string()).optional()}).optional(),syncFilter:c({name:s.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:s.string(),incrementalLoopbackPeriod:s.string()}).optional()}).array().optional(),fieldConfigs:z.array().optional(),steps:c({stepId:s.string(),description:s.string(),stepFunction:c({functionName:s.string(),version:s.string().optional(),parameters:s.record(s.string(),s.unknown())}),condition:s.string().optional(),ignoreError:s.boolean().optional()}).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional()}),W=c({schedule:s.string().optional(),action:U.extend({actionType:s.literal(`refresh_token`)})}),G=c({mainRatelimit:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),rateLimit:s.number()})).optional(),mappedRateLimitErrors:s.array(c({errorStatus:s.number(),errorMessage:s.string(),errorMessagePath:s.string().optional(),retryAfterPath:s.string().optional(),retryAfterUnit:s.union([s.literal(`seconds`),s.literal(`milliseconds`),s.literal(`date`)]).optional(),retryAfterValue:s.number().optional()})).optional()}),K=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),q=c({title:s.string(),content:s.string(),list:s.string().array().optional()}),J=c({title:s.string(),content:s.string(),list:s.string().array().optional(),steps:q.array().optional()}),Y=c({warning:s.string().optional(),sections:J.array()}),X=c({config:Y.optional(),setup:Y.optional()}),Z=c({label:s.string(),authorization:m,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:X.optional()}).optional(),configFields:R.array().optional(),setupFields:R.array().optional(),refreshAuthentication:W.optional(),testActions:c({action:s.string().or(U),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),ee=Z.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),te=Z.extend({type:s.literal(`custom`)}),ne=Z.extend({type:s.literal(`oidc`)}),re=s.discriminatedUnion(`type`,[ee,te,ne]),ie=c({StackOne:s.string(),info:c({title:s.string(),version:s.string(),key:s.string(),assets:c({icon:s.string()}),description:s.string(),details:s.string().optional()}),resources:s.string().optional(),baseUrl:s.string(),scopeDefinitions:s.record(s.string(),c({description:s.string(),includes:s.string().optional()})).optional(),authentication:s.record(s.string(),re).array().optional(),actions:U.array().optional(),rateLimit:G.optional(),concurrency:K.optional(),releaseStage:s.enum(_).optional(),forkedFrom:s.string().optional()}).strict();function parseYamlConnector(e){try{let t=parseWithSchemaException(ie,M(e)),n=parseScopeDefinitions(t.scopeDefinitions),r={title:t.info.title,version:t.info.version,key:t.info.key,assets:t.info.assets,description:t.info.description,details:t.info.details,resources:t.resources,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},s=buildActionsFromYaml(t,a);return r.actions=s,hydrateTestActions(t,t.info.key,i,s,a),r.authentication=i,o(s)&&(r.categories=getConnectorCategoriesFromActions(Object.values(s))),r}catch(e){if(e instanceof I)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let s of Object.values(n)){for(let n of Object.values(s))n.testActions=n.testActions?.map((n,s)=>{if(o(n.action))if(typeof n.action==`string`){let e=buildActionId(t,n.action),i=Object.values(r).find(t=>t.id===e);if(i)return{...n,action:i}}else{let r=parseAction(e,[`authentication`,a,`testActions`,s],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r}}return n});a++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[];for(let[i,a]of(e.authentication??[]).entries()){let[s]=Object.keys(a);t[s]=a[s].environments.reduce((t,c)=>{let{key:l,name:u}=c,{environments:d,refreshAuthentication:f,testActions:p,requiredScopes:m,...h}=a[s],g=m?m.split(` `).filter(e=>e.trim().length>0):void 0;Object.values(g??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${s}' is not defined.`,path:[`authentication`,i],keys:[`requiredScopes`]})});let _=o(f)?{schedule:f.schedule,action:parseAction(e,[`authentication`,i,`refreshAuthentication`,`action`],buildActionId(e.info.key,f.action.actionId),f.action)}:void 0;return t[l]={...h,refreshAuthentication:_,requiredScopes:g,envKey:l,envName:u,testActions:p},t},{})}if(r.length>0)throw new MissingScopeDefinitionError(r);return t},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||n(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>(j(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!D(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,t,n)=>{if(!t||t.length===0)return;let r={};for(let e of n){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),r[e.name]=t}let i=s.object(r).strict();for(let n=0;n<t.length;n++){let{exampleDescription:r,...a}=t[n],o=i.safeParse(a);if(!o.success){let t=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,n,t)}}},parseAction=(e,t,n,r,i,a)=>{let o=inferEntrypointUrl(r),s=buildActionResponses(r),c=buildCursorConfig(r),l=r.inputs||[];c.enabled&&(l?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),l?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(n,l),validateExamplesMatchInputs(n,r.examples,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=r.requiredScopes?r.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;if(Object.values(p??[]).forEach(e=>{d.has(e)||f.push({message:`Scope '${e}' included in action '${r.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),f.length>0)throw new MissingScopeDefinitionError(f);return{id:n,categories:r.categories,label:r.label,description:r.description,details:r.details,examples:r.examples,actionType:r.actionType,schemaType:r.schemaType??`native`,entrypointUrl:r.entrypointUrl??o,entrypointHttpMethod:u,endpoint:a,tags:r.tags,releaseStage:r.releaseStage,resources:r.resources,responses:s,cursor:c,compositeIdentifiers:parseCompositeIdentifiersConfig(r),scheduledJobs:parseScheduledJobConfig(r),requiredScopes:p,inputs:l,steps:r.steps.reduce((n,a)=>{let{customErrors:o,...s}=a.stepFunction.parameters??{},c=parseFieldConfigs(e,t,a.stepFunction.functionName===`map_fields`||a.stepFunction.functionName===`typecast`?s.fields??r.fieldConfigs:void 0),l={id:a.stepId,description:a.description,condition:a.condition,ignoreError:a.ignoreError,stepFunction:{functionName:a.stepFunction.functionName,version:a.stepFunction.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:a.stepFunction.functionName,baseRequestParams:i,customErrors:o}),...c??{},...s}}};return validateStep(r.actionId,l),n[a.stepId]=l,n},{}),result:r.result}},parseFieldConfigs=(e,t,r)=>{if(n(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,n)=>{if(typeof e!=`object`||!e)return;let r=e.requiredScopes?e.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...t,`fieldConfigs`,n],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=b[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},parseActionInputs=(e,t)=>{if(!e.inputs)return{};let n=createInputsSchema(e.inputs),r=s.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},createInputsSchema=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=buildZodSchemaFromInputType(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=s.object(t))}return n},buildEnumZodSchema=(e,t)=>{if(!t)throw Error(`Enum input "${e}" requires oneOf definition`);let n;if(`values`in t)n=t.values;else if(`ref`in t){let r=w(t.ref);if(!r)throw Error(`Unknown enum reference "${t.ref}" in input "${e}"`);n=r}else throw Error(`Invalid oneOf definition in input "${e}"`);if(n.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return s.enum(n)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=s.string();break;case`number`:t=s.number();break;case`boolean`:t=s.boolean();break;case`enum`:t=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=s.object(n)}else t=s.record(s.string(),s.unknown());break;default:t=s.unknown()}return e.array&&(t=s.array(t)),t},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||n(e.compositeIdentifiers))return{enabled:!1};let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},parseScheduledJobConfig=e=>{if(!n(e.scheduledJobs))return e.scheduledJobs},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if(o(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?o(getActionForRefreshAuthentication(e,t,n)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(t){if(t instanceof SchemaValidationError||t instanceof MissingScopeDefinitionError){let r=t.issues,i=[];return r.forEach(t=>{let r=t?.keys?.[0],a=n(r)?t.path:[...t.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:t.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(t instanceof InvalidYamlFileError)return{success:!1,errors:[{line:t.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(t instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!1,e),message:t.message,field:void 0}]};else if(t instanceof InvalidStepFunctionParamsError){let r=t.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=n(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,t)=>{let r=t.split(`
4
+ `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var L=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends L{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends L{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends L{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends L{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends L{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends L{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},MissingScopeDefinitionError=class extends L{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),R={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional()},z=s.discriminatedUnion(`type`,[c({...R,type:s.enum([`text`,`password`])}),c({...R,type:s.literal(`select`),options:c({value:s.string(),label:s.string()}).array()})]),B=c({targetFieldKey:s.string(),alias:s.string().optional(),expression:s.string().optional(),values:s.unknown().optional(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:s.boolean().default(!1),custom:s.boolean().default(!1),hidden:s.boolean().default(!1),enumMapper:c({matcher:s.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or(c({matchExpression:s.string(),value:s.string()}).array())}).optional(),properties:s.lazy(()=>B).array().optional(),requiredScopes:s.string().optional()}),V=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),H=c({name:s.string(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:s.boolean(),description:s.string(),array:s.boolean().optional().default(!1),arrayFormat:s.enum([`repeat`,`brackets`,`comma`]).optional(),in:s.enum([`body`,`query`,`path`,`headers`]),properties:s.lazy(()=>H.omit({in:!0})).array().optional(),oneOf:V.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}),U=s.object({exampleDescription:s.string().optional()}).catchall(s.unknown()),W=c({functionName:s.string(),version:s.string().optional(),parameters:s.record(s.string(),s.unknown())}),G=c({stepId:s.string(),description:s.string(),stepFunction:W,condition:s.string().optional(),ignoreError:s.boolean().optional()}),K=c({stepId:s.string(),description:s.string(),iterator:s.string(),stepFunction:W.optional(),stepFunctions:W.array().optional(),condition:s.string().optional(),ignoreError:s.boolean().optional()}).refine(e=>e.stepFunction!==void 0&&e.stepFunctions===void 0||e.stepFunction===void 0&&e.stepFunctions!==void 0,{message:`Exactly one of 'stepFunction' or 'stepFunctions' must be provided, not both`}),q=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`unknown`]),schema:s.string().optional(),schemaType:s.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:s.string().optional(),entrypointHttpMethod:s.string().optional(),label:s.string(),description:s.string(),details:s.string().optional(),examples:U.array().optional(),tags:s.string().array().optional(),releaseStage:s.enum(_).optional(),resources:s.string().optional(),responses:c({statusCode:s.number(),description:s.string()}).array().optional(),requiredScopes:s.string().optional(),inputs:H.array().optional(),cursor:c({enabled:s.boolean(),pageSize:s.number()}).optional(),compositeIdentifiers:c({enabled:s.boolean(),version:s.number().optional(),fields:c({targetFieldKey:s.string(),remote:s.string().optional(),components:s.string().array()}).array().optional()}).optional(),scheduledJobs:c({enabled:s.boolean(),type:s.enum([`data_sync`]),schedule:s.string(),description:s.string(),requestParams:c({fields:s.string().array().optional(),expand:s.string().array().optional(),filter:s.record(s.string(),s.string()).optional()}).optional(),syncFilter:c({name:s.enum([`updated_after`,`created_after`]),initialLoopbackPeriod:s.string(),incrementalLoopbackPeriod:s.string()}).optional()}).array().optional(),fieldConfigs:B.array().optional(),steps:s.union([G,K]).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional()}),J=c({schedule:s.string().optional(),action:q.extend({actionType:s.literal(`refresh_token`)})}),Y=c({mainRatelimit:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),rateLimit:s.number()})).optional(),mappedRateLimitErrors:s.array(c({errorStatus:s.number(),errorMessage:s.string(),errorMessagePath:s.string().optional(),retryAfterPath:s.string().optional(),retryAfterUnit:s.union([s.literal(`seconds`),s.literal(`milliseconds`),s.literal(`date`)]).optional(),retryAfterValue:s.number().optional()})).optional()}),ee=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),te=c({title:s.string(),content:s.string(),list:s.string().array().optional()}),ne=c({title:s.string(),content:s.string(),list:s.string().array().optional(),steps:te.array().optional()}),X=c({warning:s.string().optional(),sections:ne.array()}),re=c({config:X.optional(),setup:X.optional()}),Z=c({label:s.string(),authorization:m,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:re.optional()}).optional(),configFields:z.array().optional(),setupFields:z.array().optional(),refreshAuthentication:J.optional(),testActions:c({action:s.string().or(q),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),ie=Z.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),ae=Z.extend({type:s.literal(`custom`)}),oe=Z.extend({type:s.literal(`oidc`)}),se=s.discriminatedUnion(`type`,[ie,ae,oe]),ce=c({StackOne:s.string(),info:c({title:s.string(),version:s.string(),key:s.string(),assets:c({icon:s.string()}),description:s.string(),details:s.string().optional()}),resources:s.string().optional(),baseUrl:s.string(),scopeDefinitions:s.record(s.string(),c({description:s.string(),includes:s.string().optional()})).optional(),authentication:s.record(s.string(),se).array().optional(),actions:q.array().optional(),rateLimit:Y.optional(),concurrency:ee.optional(),releaseStage:s.enum(_).optional(),forkedFrom:s.string().optional()}).strict(),toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,t,r)=>{if(n(r))return;if(o(r.link))return r;let i=r.guides?.config?.sections,a=toKebabCase(t);return o(i)&&i.length>0&&a!==``?{...r,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:r};function parseYamlConnector(e){try{let t=parseWithSchemaException(ce,N(e)),n=parseScopeDefinitions(t.scopeDefinitions),r={title:t.info.title,version:t.info.version,key:t.info.key,assets:t.info.assets,description:t.info.description,details:t.info.details,resources:t.resources,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},s=buildActionsFromYaml(t,a);return r.actions=s,hydrateTestActions(t,t.info.key,i,s,a),r.authentication=i,o(s)&&(r.categories=getConnectorCategoriesFromActions(Object.values(s))),r}catch(e){if(e instanceof L)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let s of Object.values(n)){for(let n of Object.values(s))n.testActions=n.testActions?.map((n,s)=>{if(o(n.action))if(typeof n.action==`string`){let e=buildActionId(t,n.action),i=Object.values(r).find(t=>t.id===e);if(i)return{...n,action:i}}else{let r=parseAction(e,[`authentication`,a,`testActions`,s],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r}}return n});a++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[],i=e.info.key;for(let[a,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);t[c]=s[c].environments.reduce((t,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=h?h.split(` `).filter(e=>e.trim().length>0):void 0;Object.values(_??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let v=o(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(i,p.action.actionId),p.action)}:void 0,y=buildSupport(i,g.label,g.support);return t[u]={...g,...o(y)?{support:y}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},t},{})}if(r.length>0)throw new MissingScopeDefinitionError(r);return t},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||n(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>(M(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!O(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,t,n)=>{if(!t||t.length===0)return;let r={};for(let e of n){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),r[e.name]=t}let i=s.object(r).strict();for(let n=0;n<t.length;n++){let{exampleDescription:r,...a}=t[n],o=i.safeParse(a);if(!o.success){let t=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,n,t)}}},parseAction=(e,t,n,r,i,a)=>{let o=inferEntrypointUrl(r),s=buildActionResponses(r),c=buildCursorConfig(r),l=r.inputs||[];c.enabled&&(l?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),l?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(n,l),validateExamplesMatchInputs(n,r.examples,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=r.requiredScopes?r.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;if(Object.values(p??[]).forEach(e=>{d.has(e)||f.push({message:`Scope '${e}' included in action '${r.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),f.length>0)throw new MissingScopeDefinitionError(f);return{id:n,categories:r.categories,label:r.label,description:r.description,details:r.details,examples:r.examples,actionType:r.actionType,schemaType:r.schemaType??`native`,entrypointUrl:r.entrypointUrl??o,entrypointHttpMethod:u,endpoint:a,tags:r.tags,releaseStage:r.releaseStage,resources:r.resources,responses:s,cursor:c,compositeIdentifiers:parseCompositeIdentifiersConfig(r),scheduledJobs:parseScheduledJobConfig(r),requiredScopes:p,inputs:l,steps:r.steps.reduce((n,a)=>{let parseStepFunctionMeta=n=>{let{customErrors:a,...o}=n.parameters??{},s=parseFieldConfigs(e,t,n.functionName===`map_fields`||n.functionName===`typecast`?o.fields??r.fieldConfigs:void 0);return{functionName:n.functionName,version:n.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:n.functionName,baseRequestParams:i,customErrors:a}),...s??{},...o}}},o={id:a.stepId,description:a.description,condition:a.condition,ignoreError:a.ignoreError};if(`iterator`in a&&a.iterator){if(`stepFunction`in a&&a.stepFunction){let e={...o,iterator:a.iterator,stepFunction:parseStepFunctionMeta(a.stepFunction)};validateStep(r.actionId,e),n[a.stepId]=e}else if(`stepFunctions`in a&&a.stepFunctions){let e={...o,iterator:a.iterator,stepFunctions:a.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(r.actionId,e),n[a.stepId]=e}}else if(`stepFunction`in a&&a.stepFunction){let e={...o,stepFunction:parseStepFunctionMeta(a.stepFunction)};validateStep(r.actionId,e),n[a.stepId]=e}return n},{}),result:r.result}},parseFieldConfigs=(e,t,r)=>{if(n(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,n)=>{if(typeof e!=`object`||!e)return;let r=e.requiredScopes?e.requiredScopes.split(` `).filter(e=>e.trim().length>0):void 0;return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...t,`fieldConfigs`,n],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=b[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},validateStepFunctions=(e,t)=>{for(let n of t.stepFunctions){let r=n.version??`1`,i=b[n.functionName]?.[`v${r}`];if(!i)throw new InvalidStepFunctionError(e,t.id,n.functionName,r);let a=i.inputSchema;a&&parseStepFunctionParamsWithSchemaException(a,n.params,e,t.id,n.functionName,r)}},parseActionInputs=(e,t)=>{if(!e.inputs)return{};let n=createInputsSchema(e.inputs),r=s.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},createInputsSchema=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=buildZodSchemaFromInputType(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=s.object(t))}return n},buildEnumZodSchema=(e,t)=>{if(!t)throw Error(`Enum input "${e}" requires oneOf definition`);let n;if(`values`in t)n=t.values;else if(`ref`in t){let r=w(t.ref);if(!r)throw Error(`Unknown enum reference "${t.ref}" in input "${e}"`);n=r}else throw Error(`Invalid oneOf definition in input "${e}"`);if(n.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return s.enum(n)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=s.string();break;case`number`:t=s.number();break;case`boolean`:t=s.boolean();break;case`enum`:t=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=s.object(n)}else t=s.record(s.string(),s.unknown());break;default:t=s.unknown()}return e.array&&(t=s.array(t)),t},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||n(e.compositeIdentifiers))return{enabled:!1};let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},parseScheduledJobConfig=e=>{if(!n(e.scheduledJobs))return e.scheduledJobs},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if(o(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?o(getActionForRefreshAuthentication(e,t,n)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(t){if(t instanceof SchemaValidationError||t instanceof MissingScopeDefinitionError){let r=t.issues,i=[];return r.forEach(t=>{let r=t?.keys?.[0],a=n(r)?t.path:[...t.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:t.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(t instanceof InvalidYamlFileError)return{success:!1,errors:[{line:t.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(t instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!1,e),message:t.message,field:void 0}]};else if(t instanceof InvalidStepFunctionParamsError){let r=t.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=n(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,t)=>{let r=t.split(`
5
5
  `),i=0,a=-1,s=0;for(let t=0;t<r.length;t++){let c=r[t],l=c.match(/^(\s*)/)?.[1]?.length||0,u=c.replace(`- `,``).trim();if(u.startsWith(`#`)||u===``||l<=a)continue;let d=o(e[i])?`${String(e[i])}`:``;if(n(d))return s+1;if(isNaN(Number(d))){if(u.startsWith(`${d}:`)){if(i===e.length-1)return t+1;a=l,s=t,i++}}else{let e=parseInt(d,10),n=-1;for(let a=t;a<r.length;a++)if(r[a].trim().startsWith(`-`)&&n++,n===e){i++,s=t,t--;break}else t++}}return s+1},getErrorLineNumberInAction=(e,t,r,i,a)=>{let s=a.split(`
6
- `),c=1,l=null,u=null;for(let a=0;a<s.length;a++){let d=s[a].trim();if(n(l)&&d===`- actionId: ${e}`){l=e,c=a+1;continue}if(o(l)&&n(u)&&d===`- stepId: ${t}`){u=t,c=a+1;continue}if(o(l)&&o(u)&&!i&&d.startsWith(`functionName: ${r}`)||o(l)&&o(u)&&i&&d===`parameters:`)return c=a+1,c}return c};var Q=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends Q{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Q{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Q{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Q{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e)}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=y.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===v.MAP_FIELDS?{[v.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,authConfigKey:i,environment:a=`production`,action:o,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,sourceType:f,sourceId:p,sourceValue:m})=>({organizationId:l,projectSecureId:c,accountSecureId:s,connectorKey:n,connectorVersion:r,category:e,service:``,resource:``,originOwnerId:u,originOwnerName:d,source:{sourceType:f,sourceId:p,sourceValue:m},schema:o?.schema?.key,actionType:o?.actionType??`unknown`,authenticationType:i,environment:a,actionRunId:t()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,decodeInputCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!t?.enabled||n(r))return e;let i=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:t.version??h,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=x(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof g&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},$=`remote_`,encodeResultCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers;if(!t?.enabled)return e;let r=`data`,i=e.outputs?.[r];if(n(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,t)):mapCompositeIds(i,t);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,t)=>{let n=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,t));return{...e,...i(n)?n:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??h,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=S(a.length===1?a[0]:{identifiers:a},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=o,t.remote&&(r[`${$}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>a(e)&&e.length>0),shouldSkipEncoding=(e,t)=>T(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return S({key:e,value:t},{version:h})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>a(t)&&t.length>0&&!T(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=S({key:e,value:t},{version:h}),n[`remote_${e}`]=t)},processIdField=(e,t,n)=>{isValidStringArray(t)?processStringArrayField(e,t,n):a(t)&&t.length>0&&processStringField(e,t,n)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!i(e))return e;let t={...e};for(let[n,r]of Object.entries(e))(i(r)||Array.isArray(r)&&r.length>0&&i(r[0]))&&(t[n]=mapCompositeIdsFromInference(r)),isIdField(n)&&processIdField(n,r,t);return t},getPageSize=(e,t)=>{let n=Number(e.inputs?.page_size);return o(e.inputs?.page_size)&&r(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t},virtualPaginateResult=(e,t,r,a)=>{let s=n(e)?void 0:e.data,c=Object.keys(r).length+1,l=E({cursor:a,ignoreStepIndex:c});if(!i(e)||n(s)||(s?.length??0)<=t)return{result:e,next:o(a)&&!l?O(a):null};let u=a?.remote?.[c]?.pageNumber??1,d=(u-1)*t,f=d+t,p=s.slice(d,f),m=s.length>f||!l,h=k({cursor:a,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?O(h):null}},getOlapOptions=e=>{let t=e?.olap;return n(t)?{}:{logs:t.logs?{enabled:t.logs.enabled}:void 0,advanced:t.advanced?{enabled:t.advanced.enabled,ttl:t.advanced.ttl,errorsOnly:t.advanced.errorsOnly}:void 0}},runStepAction=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),shouldSkipStepDueToCondition=(e,t)=>e.condition?!P(e.condition,t):!1,buildStepParams=(e,t,n)=>{let r=e.stepFunction,i=b[e.stepFunction.functionName]?.[`v${e.stepFunction.version??1}`],a=o(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return t.action?.cursor.enabled&&a?{...r.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:r.params??{}},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=new Date,c=n[e],l=c.stepFunction,u=a.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn;if(shouldSkipStepDueToCondition(c,r))return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`});if(i.hasFatalError)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`});let d=await u({block:r,params:buildStepParams(c,r,t)});if(d.successful===!1)return handleStepFailure(r,e,t,d,c,i,s,new Date);if(d.streamOutput)return o?addStepResultToBlock({block:{...d.block,streamOutput:d.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:s,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let f=r.action?.cursor.enabled?k({cursor:r.nextCursor,stepIndex:t,providerPageCursor:d.output?.next,position:d.output?.position}):void 0;return addStepResultToBlock({block:{...d.block,nextCursor:f},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:s,endTime:new Date})},buildFinalResponse=(e,t,n,r,a)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??A?.[c]??`Error while processing the request`}};let l=o(a)&&i(a.result)?{next:a.next,...a.result}:r;return{...t,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??A?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=getPageSize(e,25),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=e===a.length-1;i=await executeStep(t,e,r,i,s,c,n)}let l=e.action?.result?evaluateResult(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return buildFinalResponse(e,i,s,l,u)},evaluateResult=(e,t)=>i(e)?F(e,t):P(e,t),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:t,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if(n(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:t,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},runAction=async e=>{let{pathParams:t={},queryParams:r={},body:i={},headers:s={},parseConnector:c=parseYamlConnector,parseActionInputsFn:l=parseActionInputs,createBlockContextFn:u=createBlockContext,createBlockFn:d=createBlock,runStepActionFn:f=runStepAction,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,getTestActionsFn:h=getTestActions,mode:g,account:_,connector:v,getHttpClient:y,getOlapClient:b,settings:x,source:S,logger:C,category:w,...T}=e,E=_.authConfigKey,D=_.environment??`production`,O=_.secureId,k=_.projectSecureId,A=_.organizationId,j=_.credentials,M=_.originOwnerId,P=_.originOwnerName,F=u({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A,originOwnerId:M,originOwnerName:P,sourceType:S?.sourceType,sourceId:S?.sourceId,sourceValue:S?.sourceValue}),I=new Date,L;try{L=a(v)?c(v):v}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let R={connector:L,context:F,credentials:j,settings:x,logger:C,getHttpClient:y,getOlapClient:b};if(g===`action_id`){let{actionId:a}=T,o=findActionByActionId(L,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o,blockContext:F,queryParams:r,pathParams:t,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c.statistics={startTime:I,endTime:new Date},recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(g===`test_actions`){let t=h(L,E,D);if(n(t)||t.length===0)return await createSuccessBlock(d,R);F.actionType=`test`;for(let r of t){let t=new Date,i=await d({...R,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!o(r.condition)||N(r.condition,i)))continue;let a=await f({block:i});if((n(a?.response?.successful)||!a.response.successful)&&r.required){C?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let n=await createErrorBlock(d,R);return n.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(d,R);return r.statistics={startTime:I,endTime:new Date},r}else if(g===`refresh_authentication`){let t=m(L,E,D);if(n(t))throw new MissingActionError(F,`No matching action found`);let a=await executeAction({action:t.action,blockContext:F,queryParams:r,pathParams:t.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return a.statistics={startTime:I,endTime:new Date},recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(g===`path`){let{path:t,method:a}=T,o=p(L,t,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o.action,blockContext:F,queryParams:r,pathParams:o.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c.statistics={startTime:I,endTime:new Date},recordActionResult({action:o.action,actionParams:e,resultBlock:c}),c}else return await createErrorBlock(d,R)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,t)=>{let n=e?.next,r=o(n)&&t.actionType===`list`?C(n):void 0;if(r===null)throw new InvalidCursorError(t,`Invalid cursor.`);return r},recordActionResult=({action:e,actionParams:t,resultBlock:r})=>{if(n(e))return;let i=r.olapClient;if(n(i?.recordAction))return;let a=getOlapOptions(t.settings),o={actionId:e.id,mode:t.mode,url:e?.entrypointUrl,pathParams:t?.pathParams,queryParams:t?.queryParams,body:t?.body,headers:t?.headers,sourceId:t.source?.sourceId,sourceType:t.source?.sourceType,sourceValue:t.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:t.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime};i.recordAction(o,c,a)},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=parseYamlConnector,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseActionInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepActionFn:m}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=parseYamlConnector,getActionFromUrlFn:d=getActionFromUrl,getActionForRefreshAuthenticationFn:f=getActionForRefreshAuthentication,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getActionFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runTestActions=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=parseYamlConnector,getTestActionsFn:a=getTestActions,createBlockContextFn:o=createBlockContext,createBlockFn:s=createBlock,runStepActionFn:c=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestActionsFn:a,createBlockContextFn:o,createBlockFn:s,runStepActionFn:c}))?.response?.successful??!1;export{Q as ConnectSDKError,InvalidActionInputsError,applyReleaseStageToConnector,createBlock,executeStepFunction,formatValidationErrorResponse,getActionFromUrl,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runStepAction,runTestActions,supportsRefreshAuthentication,validateYamlConnector};
6
+ `),c=1,l=null,u=null;for(let a=0;a<s.length;a++){let d=s[a].trim();if(n(l)&&d===`- actionId: ${e}`){l=e,c=a+1;continue}if(o(l)&&n(u)&&d===`- stepId: ${t}`){u=t,c=a+1;continue}if(o(l)&&o(u)&&!i&&d.includes(`functionName: ${r}`)||o(l)&&o(u)&&i&&d===`parameters:`)return c=a+1,c}return c};var Q=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends Q{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Q{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Q{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Q{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description.replace(/\b\w/g,e=>e.toUpperCase()),label:e.label.replace(/\b\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e)}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=y.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===v.MAP_FIELDS?{[v.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,authConfigKey:i,environment:a=`production`,action:o,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,sourceType:f,sourceId:p,sourceValue:m})=>({organizationId:l,projectSecureId:c,accountSecureId:s,connectorKey:n,connectorVersion:r,category:e,service:``,resource:``,originOwnerId:u,originOwnerName:d,source:{sourceType:f,sourceId:p,sourceValue:m},schema:o?.schema?.key,actionType:o?.actionType??`unknown`,authenticationType:i,environment:a,actionRunId:t()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions,decodeInputCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!t?.enabled||n(r))return e;let i=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:t.version??h,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=x(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof g&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},$=`remote_`,encodeResultCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers;if(!t?.enabled)return e;let r=`data`,i=e.outputs?.[r];if(n(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,t)):mapCompositeIds(i,t);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,t)=>{let n=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,t));return{...e,...i(n)?n:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??h,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=S(a.length===1?a[0]:{identifiers:a},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=o,t.remote&&(r[`${$}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>a(e)&&e.length>0),shouldSkipEncoding=(e,t)=>T(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return S({key:e,value:t},{version:h})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>a(t)&&t.length>0&&!T(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=S({key:e,value:t},{version:h}),n[`remote_${e}`]=t)},processIdField=(e,t,n)=>{isValidStringArray(t)?processStringArrayField(e,t,n):a(t)&&t.length>0&&processStringField(e,t,n)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!i(e))return e;let t={...e};for(let[n,r]of Object.entries(e))(i(r)||Array.isArray(r)&&r.length>0&&i(r[0]))&&(t[n]=mapCompositeIdsFromInference(r)),isIdField(n)&&processIdField(n,r,t);return t},getPageSize=(e,t)=>{let n=Number(e.inputs?.page_size);return o(e.inputs?.page_size)&&r(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t},virtualPaginateResult=(e,t,r,a)=>{let s=n(e)?void 0:e.data,c=Object.keys(r).length+1,l=E({cursor:a,ignoreStepIndex:c});if(!i(e)||n(s)||(s?.length??0)<=t)return{result:e,next:o(a)&&!l?k(a):null};let u=a?.remote?.[c]?.pageNumber??1,d=(u-1)*t,f=d+t,p=s.slice(d,f),m=s.length>f||!l,h=A({cursor:a,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?k(h):null}},getOlapOptions=e=>{let t=e?.olap;return n(t)?{}:{logs:t.logs?{enabled:t.logs.enabled}:void 0,advanced:t.advanced?{enabled:t.advanced.enabled,ttl:t.advanced.ttl,errorsOnly:t.advanced.errorsOnly}:void 0}},runStepAction=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],shouldSkipStepDueToCondition=(e,t)=>e.condition?!F(e.condition,t):!1,buildStepParamsForFunction=(e,t,n)=>{let r=b[e.functionName]?.[`v${e.version??1}`],i=o(r?.inputSchema?.shape)?`cursor`in r?.inputSchema?.shape:!1;return t.action?.cursor.enabled&&i?{...e.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=n[e];return shouldSkipStepDueToCondition(s,r)?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`}):D(s)?executeForeachStep(e,t,s,r,i,a,o):executeSimpleStep(e,t,s,r,i,a,o)},executeSimpleStep=async(e,t,n,r,i,a,o)=>{let s=new Date,c=n.stepFunction;if(!c)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`});let l=a.buildStepFunction({functionName:c.functionName,version:c.version,validateSchemas:!0}).fn,u=await l({block:r,params:buildStepParams(n,r,t)});if(u.successful===!1)return handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?addStepResultToBlock({block:{...u.block,streamOutput:u.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let d=r.action?.cursor.enabled?A({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return addStepResultToBlock({block:{...u.block,nextCursor:d},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date})},executeForeachStep=async(e,t,n,r,a,o,s)=>{let c=new Date,l=F(n.iterator,r);if(!Array.isArray(l))return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let u=getStepFunctionsToExecute(n);if(u.length===0)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`});let d=[],f=r,p,m={};for(let[r,s]of l.entries()){let l={...f,iterator:{item:s,index:r}};for(let d of u){let u=o.buildStepFunction({functionName:d.functionName,version:d.version,validateSchemas:!0}).fn,h=buildStepParamsForFunction(d,l,t),g=await u({block:l,params:h});if(p=g,g.successful===!1&&!(n.ignoreError??!1))return a.hasFatalError=!0,a.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,output:g.output,errors:g.errors}},addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,functionOutput:g,startTime:c,endTime:new Date});if(l={...g.block,iterator:{item:s,index:r,current:g.output}},g.streamOutput)return a.hasFatalError=!0,a.errorStatusCode=500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`})}f=l,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:p?.successful??!0,output:p?.output,errors:p?.errors}},p?.output&&d.push(p.output)}let h=r.action?.cursor.enabled?A({cursor:r.nextCursor,stepIndex:t,providerPageCursor:p?.output?.next,position:p?.output?.position}):void 0,g={block:f,successful:!0,output:{data:d}};return addStepResultToBlock({block:{...f,nextCursor:h,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!0,functionOutput:g,startTime:c,endTime:new Date})},buildFinalResponse=(e,t,n,r,a)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??j?.[c]??`Error while processing the request`}};let l=o(a)&&i(a.result)?{next:a.next,...a.result}:r;return{...t,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??j?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=getPageSize(e,25),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=e===a.length-1;i=await executeStep(t,e,r,i,s,c,n)}let l=e.action?.result?evaluateResult(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return buildFinalResponse(e,i,s,l,u)},evaluateResult=(e,t)=>i(e)?I(e,t):F(e,t),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:t,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if(n(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:t,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},runAction=async e=>{let{pathParams:t={},queryParams:r={},body:i={},headers:s={},parseConnector:c=parseYamlConnector,parseActionInputsFn:l=parseActionInputs,createBlockContextFn:u=createBlockContext,createBlockFn:d=createBlock,runStepActionFn:f=runStepAction,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,getTestActionsFn:h=getTestActions,mode:g,account:_,connector:v,getHttpClient:y,getOlapClient:b,settings:x,source:S,logger:C,category:w,...T}=e,E=_.authConfigKey,D=_.environment??`production`,O=_.secureId,k=_.projectSecureId,A=_.organizationId,j=_.credentials,M=_.originOwnerId,N=_.originOwnerName,F=u({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A,originOwnerId:M,originOwnerName:N,sourceType:S?.sourceType,sourceId:S?.sourceId,sourceValue:S?.sourceValue}),I=new Date,L;try{L=a(v)?c(v):v}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let R={connector:L,context:F,credentials:j,settings:x,logger:C,getHttpClient:y,getOlapClient:b};if(g===`action_id`){let{actionId:a}=T,o=findActionByActionId(L,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o,blockContext:F,queryParams:r,pathParams:t,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c.statistics={startTime:I,endTime:new Date},recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(g===`test_actions`){let t=h(L,E,D);if(n(t)||t.length===0)return await createSuccessBlock(d,R);F.actionType=`test`;for(let r of t){let t=new Date,i=await d({...R,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!o(r.condition)||P(r.condition,i)))continue;let a=await f({block:i});if((n(a?.response?.successful)||!a.response.successful)&&r.required){C?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let n=await createErrorBlock(d,R);return n.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(d,R);return r.statistics={startTime:I,endTime:new Date},r}else if(g===`refresh_authentication`){let t=m(L,E,D);if(n(t))throw new MissingActionError(F,`No matching action found`);let a=await executeAction({action:t.action,blockContext:F,queryParams:r,pathParams:t.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return a.statistics={startTime:I,endTime:new Date},recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(g===`path`){let{path:t,method:a}=T,o=p(L,t,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o.action,blockContext:F,queryParams:r,pathParams:o.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c.statistics={startTime:I,endTime:new Date},recordActionResult({action:o.action,actionParams:e,resultBlock:c}),c}else return await createErrorBlock(d,R)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,t)=>{let n=e?.next,r=o(n)&&t.actionType===`list`?C(n):void 0;if(r===null)throw new InvalidCursorError(t,`Invalid cursor.`);return r},recordActionResult=({action:e,actionParams:t,resultBlock:r})=>{if(n(e))return;let i=r.olapClient;if(n(i?.recordAction))return;let a=getOlapOptions(t.settings),o={actionId:e.id,mode:t.mode,url:e?.entrypointUrl,pathParams:t?.pathParams,queryParams:t?.queryParams,body:t?.body,headers:t?.headers,sourceId:t.source?.sourceId,sourceType:t.source?.sourceType,sourceValue:t.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:t.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime};i.recordAction(o,c,a)},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u=parseYamlConnector,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,logger:s,getHttpClient:c,getOlapClient:l,parseConnector:u,parseActionInputsFn:d,createBlockContextFn:f,createBlockFn:p,runStepActionFn:m}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,logger:c,getHttpClient:l,parseConnector:u=parseYamlConnector,getActionFromUrlFn:d=getActionFromUrl,getActionForRefreshAuthenticationFn:f=getActionForRefreshAuthentication,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,getActionForRefreshAuthenticationFn:f,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,getActionFromUrlFn:d,parseConnector:u,logger:c,getHttpClient:l,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runTestActions=async({account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i=parseYamlConnector,getTestActionsFn:a=getTestActions,createBlockContextFn:o=createBlockContext,createBlockFn:s=createBlock,runStepActionFn:c=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,logger:n,getHttpClient:r,parseConnector:i,getTestActionsFn:a,createBlockContextFn:o,createBlockFn:s,runStepActionFn:c}))?.response?.successful??!1;export{Q as ConnectSDKError,InvalidActionInputsError,applyReleaseStageToConnector,createBlock,executeStepFunction,formatValidationErrorResponse,getActionFromUrl,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runStepAction,runTestActions,supportsRefreshAuthentication,validateYamlConnector};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/connect-sdk",
3
- "version": "2.25.0",
3
+ "version": "2.27.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",