@stackone/connect-sdk 2.62.0 → 2.64.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/defender`),l=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,emitEvent:d})=>{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,emitEvent:d}},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}`,resolveActionId=(e,t)=>{let n=`${e}_`;return t.startsWith(n)?t:`${n}${t}`},findActionByActionId=(e,t)=>e.actions?.[resolveActionId(e.key,t)],findEventActionByActionId=(e,t)=>e.events?.actions?.[resolveActionId(e.key,t)],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 u=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 u{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends u{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}};const formatStepLocation=e=>e.kind===`action`?`action '${e.actionId}'`:`webhook setup phase '${e.phase}'`;var InvalidStepFunctionError=class extends u{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends u{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends u{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 u{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}},InvalidEventRouterReferenceError=class extends u{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends u{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 d=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`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event 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.`}}),f=(0,t.zStrictObject)({type:t.z.literal(`cursor`),response:(0,t.zStrictObject)({dataKey:t.z.string(),nextKey:t.z.string()}),iterator:(0,t.zStrictObject)({key:t.z.string(),in:t.z.enum([`query`,`body`,`headers`])}),stopCondition:t.z.string().optional()}),p=(0,t.zStrictObject)({type:t.z.literal(`offset`),response:(0,t.zStrictObject)({dataKey:t.z.string()}),iterator:(0,t.zStrictObject)({offsetKey:t.z.string(),limitKey:t.z.string(),in:t.z.enum([`query`,`body`,`headers`]),defaultLimit:t.z.number().optional()}),stopCondition:t.z.string().optional()}),m=(0,t.zStrictObject)({type:t.z.literal(`page`),response:(0,t.zStrictObject)({dataKey:t.z.string()}),iterator:(0,t.zStrictObject)({pageKey:t.z.string(),pageSizeKey:t.z.string().optional(),in:t.z.enum([`query`,`body`,`headers`]),startPage:t.z.number().optional(),defaultPageSize:t.z.number().optional()}),stopCondition:t.z.string().optional()}),h=t.z.discriminatedUnion(`type`,[f,p,m]),g={key:t.z.string(),label:t.z.string(),required:t.z.boolean().optional().default(!1),secret:t.z.boolean().optional().default(!1),externalSystemAccountIdentifier:t.z.boolean().optional(),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional(),value:t.z.string().optional(),computed:t.z.boolean().optional()},_=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...g,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...g,type:t.z.literal(`select`),options:(0,t.zStrictObject)({value:t.z.string(),label:t.z.string()}).array()})]).superRefine((e,n)=>{e.computed===!0&&!e.value&&n.addIssue({code:t.z.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),v=(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(()=>v).array().optional(),requiredScopes:t.z.string().optional()}),y=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),b=(0,t.zStrictObject)({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),pattern:t.z.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:t.z.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:t.z.number().optional(),max:t.z.number().optional(),errorMessage:t.z.string().optional()}),x=(0,t.zStrictObject)({field:t.z.string(),equals:t.z.string().optional(),notEquals:t.z.string().optional(),present:t.z.boolean().optional()}).refine(e=>[e.equals!==void 0,e.notEquals!==void 0,e.present!==void 0].filter(Boolean).length===1,{message:`Condition must specify exactly one of: equals, notEquals, present`}),S=t.z.discriminatedUnion(`rule`,[(0,t.zStrictObject)({rule:t.z.literal(`atLeastOneOf`),fields:t.z.string().array().min(2),errorMessage:t.z.string().optional()}),(0,t.zStrictObject)({rule:t.z.literal(`requiredIf`),field:t.z.string(),condition:x,errorMessage:t.z.string().optional()}),(0,t.zStrictObject)({rule:t.z.literal(`mutuallyExclusive`),fields:t.z.string().array().min(2),errorMessage:t.z.string().optional()})]),C=(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(()=>C.omit({in:!0})).array().optional(),oneOf:y.optional(),rules: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'`}).refine(e=>e.rules&&(e.rules.minLength!==void 0||e.rules.maxLength!==void 0||e.rules.pattern!==void 0||e.rules.format!==void 0)?e.type===`string`||e.type===`datetime_string`:!0,{message:`String rules (minLength, maxLength, pattern, format) can only be used with string or datetime_string types`}).refine(e=>e.rules&&(e.rules.min!==void 0||e.rules.max!==void 0)?e.type===`number`:!0,{message:`Number rules (min, max) can only be used with number type`}),w=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),T=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),E=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:T,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),D=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:T.optional(),stepFunctions:T.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`}),O=(0,t.zStrictObject)({allowed:t.z.boolean(),indexField:t.z.string().or(t.z.string().array()),pagination:h.optional()}),k=(0,t.zStrictObject)({rules:(0,t.zStrictObject)({when:t.z.string(),then:(0,t.zStrictObject)({action:t.z.string(),input:t.z.record(t.z.string(),t.z.unknown()).optional()})}).array()}),A=(0,t.zStrictObject)({actionId:t.z.string(),categories:t.z.string().array(),actionType:t.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`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:w.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:C.array().optional(),validationRules:S.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(),fieldConfigs:v.array().optional(),steps:t.z.union([E,D]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional(),dataSync:O.optional()}),j=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:A.extend({actionType:t.z.literal(`refresh_token`)})}),M=(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()}),N=(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()}),P=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),F=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:P.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),I=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:P.optional(),steps:F.array().optional(),applicableScopes:t.z.string().optional()}),L=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:I.array()}),R=(0,t.zStrictObject)({config:L.optional(),setup:L.optional()}),z=(0,t.zStrictObject)({certs:t.z.string().array().optional(),keys:t.z.string().array().optional()}).optional(),B=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,certificates:z,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:R.optional()}).optional(),configFields:_.array().optional(),setupFields:_.array().optional(),refreshAuthentication:j.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(A),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),V=B.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),H=B.extend({type:t.z.literal(`custom`)}),U=B.extend({type:t.z.literal(`oidc`)}),W=t.z.discriminatedUnion(`type`,[V,H,U]),G=(0,t.zStrictObject)({steps:t.z.union([E,D]).array().min(1),result:t.z.string().optional()}),K=G.extend({result:t.z.string()}),phaseContainsTemplate=(e,t)=>{let containsTemplate=e=>typeof e==`string`?e.includes(t):Array.isArray(e)?e.some(containsTemplate):typeof e==`object`&&e?Object.values(e).some(containsTemplate):!1;return e.steps.some(e=>`stepFunction`in e&&e.stepFunction?containsTemplate(e.stepFunction.parameters):`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>containsTemplate(e.parameters)):!1)},q=(0,t.zStrictObject)({setup:(0,t.zStrictObject)({creation:K,activation:G.optional(),deletion:G,isConsolidated:t.z.boolean().optional().default(!1)}).superRefine((e,n)=>{e.activation&&!phaseContainsTemplate(e.activation,"${inputs.remoteId}")&&n.addIssue({code:t.z.ZodIssueCode.custom,message:"Activation phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`activation`]}),phaseContainsTemplate(e.deletion,"${inputs.remoteId}")||n.addIssue({code:t.z.ZodIssueCode.custom,message:"Deletion phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`deletion`]})}).optional(),actions:A.extend({actionType:t.z.literal(`event`)}).array().optional(),router:k.optional(),externalAccountIdExtractor:A.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),J=(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(),W).array().optional(),actions:A.array().optional(),events:q.optional(),rateLimit:M.optional(),concurrency:N.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),Y=`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(J,(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);i.actions=c,hydrateTestActions(n,n.info.key,a,c,o),i.authentication=a,(0,t.notMissing)(c)&&(i.categories=getConnectorCategoriesFromActions(Object.values(c)));let l=buildEventActionsFromYaml(n,o),u=n.events?.router,d=(0,t.notMissing)(n.events?.externalAccountIdExtractor)?parseAction(n,[`events`,`externalAccountIdExtractor`],buildActionId(n.info.key,n.events.externalAccountIdExtractor.actionId),n.events.externalAccountIdExtractor,o,void 0):void 0,f=n.events?.setup,p=(0,t.notMissing)(f)?{isConsolidated:f.isConsolidated,creation:parseWebhookSetupPhase(`creation`,f.creation,o),activation:(0,t.notMissing)(f.activation)?parseWebhookSetupPhase(`activation`,f.activation,o):void 0,deletion:parseWebhookSetupPhase(`deletion`,f.deletion,o)}:void 0;if(((0,t.notMissing)(l)||(0,t.notMissing)(u)||(0,t.notMissing)(d)||(0,t.notMissing)(p))&&(i.events={setup:p,actions:l,router:u,externalAccountIdExtractor:d}),(0,t.notMissing)(u)){let e=Object.keys(i.events?.actions??{}),t=n.info.key,r=u.rules.map(e=>e.then.action);for(let n of r){let r=n.startsWith(`${t}_`)?n:`${t}_${n}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(n)}}return i}catch(e){if(e instanceof u)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(Array.isArray(r))t[n]=r;else 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)},parseScopesString=e=>(0,t.notMissing)(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,n,r)=>{if((0,t.isMissing)(e))return e;let i=e.guides;if((0,t.isMissing)(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,n,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,n,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},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],_=parseScopesString(h);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=(0,t.notMissing)(g.support)?parseSupportGuides(g.support,r,[`authentication`,o,c,`support`]):void 0,b=(0,t.notMissing)(y)?buildSupport(a,g.label,y):void 0;return n[u]={...g,...(0,t.notMissing)(b)?{support:b}:{},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},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),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)}}},validateActionRuleFieldReferences=(e,t,n,r)=>{if(!n||n.length===0)return;let i=new Set(r.map(e=>e.name)),a=[];for(let r of n){let n=[];switch(r.rule){case`atLeastOneOf`:case`mutuallyExclusive`:n.push(...r.fields);break;case`requiredIf`:n.push(r.field,r.condition.field);break}for(let o of n)i.has(o)||a.push({message:`Validation rule '${r.rule}' in action '${e}' references unknown field '${o}'`,path:[...t,`validationRules`],keys:[o]})}if(a.length>0)throw new SchemaValidationError(a)},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),validateActionRuleFieldReferences(n,t,r.validationRules,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=parseScopesString(r.requiredScopes);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),requiredScopes:p,inputs:l,validationRules:r.validationRules,steps:parseSteps({kind:`action`,actionId:r.actionId},r.steps,i,n=>n.functionName!==`map_fields`&&n.functionName!==`typecast`?{}:parseFieldConfigs(e,t,n.parameters?.fields??r.fieldConfigs)??{}),result:r.result,dataSync:r.dataSync}},parseWebhookSetupPhase=(e,t,n)=>({steps:parseSteps({kind:`setupPhase`,phase:e},t.steps,n),result:t.result}),parseSteps=(e,t,n,r)=>t.reduce((t,i)=>{let parseStepFunctionMeta=e=>{let{customErrors:t,...i}=e.parameters??{},a=r?.(e)??{};return{functionName:e.functionName,version:e.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:e.functionName,baseRequestParams:n,customErrors:t}),...a,...i}}},a={id:i.stepId,description:i.description,condition:i.condition,ignoreError:i.ignoreError};if(`iterator`in i&&i.iterator){if(`stepFunction`in i&&i.stepFunction){let n={...a,iterator:i.iterator,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}else if(`stepFunctions`in i&&i.stepFunctions){let n={...a,iterator:i.iterator,stepFunctions:i.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(e,n),t[i.stepId]=n}}else if(`stepFunction`in i&&i.stepFunction){let n={...a,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}return t},{}),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=parseScopesString(e.requiredScopes);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),a={...i.headers??{},...i.query??{},...i.path??{},...i.body??{}};return e.validationRules&&e.validationRules.length>0&&validateActionRules(e.validationRules,a,e.inputs),a},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)},X={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uri:/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/},applyInputRules=(e,t,n)=>{let r=t.errorMessage;if(n===`string`||n===`datetime_string`){let n=e;if(t.minLength!==void 0&&(n=n.min(t.minLength,r)),t.maxLength!==void 0&&(n=n.max(t.maxLength,r)),t.pattern!==void 0&&(n=n.regex(new RegExp(t.pattern),r)),t.format!==void 0){let e=X[t.format];e&&(n=n.regex(e,r??`Must be a valid ${t.format}`))}return n}if(n===`number`){let n=e;return t.min!==void 0&&(n=n.min(t.min,r)),t.max!==void 0&&(n=n.max(t.max,r)),n}return e},validateActionRules=(e,n,r)=>{let i=[],a={};if(r)for(let e of r)a[e.name]=e.in;let fieldPath=e=>{let t=a[e];return t?[t,e]:[e]};for(let t of e)switch(t.rule){case`atLeastOneOf`:if(!t.fields.some(e=>n[e]!==void 0&&n[e]!==null))for(let e of t.fields)i.push({code:`custom`,message:t.errorMessage??`At least one of [${t.fields.join(`, `)}] is required`,path:fieldPath(e),input:n});break;case`requiredIf`:{let e=n[t.condition.field],r=!1;if(t.condition.equals!==void 0)r=String(e)===t.condition.equals;else if(t.condition.notEquals!==void 0)r=String(e)!==t.condition.notEquals;else if(t.condition.present!==void 0){let n=e!=null;r=t.condition.present?n:!n}r&&(n[t.field]===void 0||n[t.field]===null)&&i.push({code:`custom`,message:t.errorMessage??`Field "${t.field}" is required when condition is met`,path:fieldPath(t.field),input:n});break}case`mutuallyExclusive`:{let e=t.fields.filter(e=>n[e]!==void 0&&n[e]!==null);if(e.length>1)for(let r of e)i.push({code:`custom`,message:t.errorMessage??`Fields [${t.fields.join(`, `)}] are mutually exclusive`,path:fieldPath(r),input:n});break}}if(i.length>0)throw new t.z.ZodError(i)},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.rules&&(n=applyInputRules(n,e.rules,e.type)),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}},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`||e===`upload_binary`){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},isCustomConnector=e=>(0,t.notMissing)(e.owner)&&e.owner!==`stackone`,isConnectorReleased=(e,t=[])=>isCustomConnector(e)||isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(isCustomConnector(e))return{...e,actions:e.actions??{}};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:getErrorLineNumberInSteps(n.location,n.stepId,n.functionName,!1,e),message:n.message,field:stepLocationField(n.location)}]};else if(n instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:n.message,field:`events.router`}]};else if(n instanceof InvalidStepFunctionParamsError){let r=n.issues,i=[],a=stepLocationFieldPrefix(n.location);return r.forEach(r=>{let o=r?.keys?.[0],s=(0,t.isMissing)(o)?r.path:[...r.path,o],c=getErrorLineNumberInSteps(n.location,n.stepId,n.functionName,!0,e);i.push({line:c,message:r.message,field:`${a}${s.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 u=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 u{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends u{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}};const formatStepLocation=e=>e.kind===`action`?`action '${e.actionId}'`:`webhook setup phase '${e.phase}'`;var InvalidStepFunctionError=class extends u{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends u{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends u{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 u{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}},InvalidEventRouterReferenceError=class extends u{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends u{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 d=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`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event 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.`}}),f=(0,t.zStrictObject)({type:t.z.literal(`cursor`),response:(0,t.zStrictObject)({dataKey:t.z.string(),nextKey:t.z.string()}),iterator:(0,t.zStrictObject)({key:t.z.string(),in:t.z.enum([`query`,`body`,`headers`])}),stopCondition:t.z.string().optional()}),p=(0,t.zStrictObject)({type:t.z.literal(`offset`),response:(0,t.zStrictObject)({dataKey:t.z.string()}),iterator:(0,t.zStrictObject)({offsetKey:t.z.string(),limitKey:t.z.string(),in:t.z.enum([`query`,`body`,`headers`]),defaultLimit:t.z.number().optional()}),stopCondition:t.z.string().optional()}),m=(0,t.zStrictObject)({type:t.z.literal(`page`),response:(0,t.zStrictObject)({dataKey:t.z.string()}),iterator:(0,t.zStrictObject)({pageKey:t.z.string(),pageSizeKey:t.z.string().optional(),in:t.z.enum([`query`,`body`,`headers`]),startPage:t.z.number().optional(),defaultPageSize:t.z.number().optional()}),stopCondition:t.z.string().optional()}),h=t.z.discriminatedUnion(`type`,[f,p,m]),g={key:t.z.string(),label:t.z.string(),required:t.z.boolean().optional().default(!1),secret:t.z.boolean().optional().default(!1),externalSystemAccountIdentifier:t.z.boolean().optional(),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional(),value:t.z.string().optional(),computed:t.z.boolean().optional()},_=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...g,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...g,type:t.z.literal(`select`),options:(0,t.zStrictObject)({value:t.z.string(),label:t.z.string()}).array()})]).superRefine((e,n)=>{e.computed===!0&&!e.value&&n.addIssue({code:t.z.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),v=(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(()=>v).array().optional(),requiredScopes:t.z.string().optional()}),y=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),b=(0,t.zStrictObject)({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),pattern:t.z.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:t.z.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:t.z.number().optional(),max:t.z.number().optional(),errorMessage:t.z.string().optional()}),x=(0,t.zStrictObject)({field:t.z.string(),equals:t.z.string().optional(),notEquals:t.z.string().optional(),present:t.z.boolean().optional()}).refine(e=>[e.equals!==void 0,e.notEquals!==void 0,e.present!==void 0].filter(Boolean).length===1,{message:`Condition must specify exactly one of: equals, notEquals, present`}),S=t.z.discriminatedUnion(`rule`,[(0,t.zStrictObject)({rule:t.z.literal(`atLeastOneOf`),fields:t.z.string().array().min(2),errorMessage:t.z.string().optional()}),(0,t.zStrictObject)({rule:t.z.literal(`requiredIf`),field:t.z.string(),condition:x,errorMessage:t.z.string().optional()}),(0,t.zStrictObject)({rule:t.z.literal(`mutuallyExclusive`),fields:t.z.string().array().min(2),errorMessage:t.z.string().optional()})]),C=(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(()=>C.omit({in:!0})).array().optional(),oneOf:y.optional(),rules: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'`}).refine(e=>e.rules&&(e.rules.minLength!==void 0||e.rules.maxLength!==void 0||e.rules.pattern!==void 0||e.rules.format!==void 0)?e.type===`string`||e.type===`datetime_string`:!0,{message:`String rules (minLength, maxLength, pattern, format) can only be used with string or datetime_string types`}).refine(e=>e.rules&&(e.rules.min!==void 0||e.rules.max!==void 0)?e.type===`number`:!0,{message:`Number rules (min, max) can only be used with number type`}),w=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),T=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),E=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:T,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),D=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:T.optional(),stepFunctions:T.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`}),O=(0,t.zStrictObject)({allowed:t.z.boolean(),indexField:t.z.string().or(t.z.string().array()),pagination:h.optional()}),k=(0,t.zStrictObject)({rules:(0,t.zStrictObject)({when:t.z.string(),then:(0,t.zStrictObject)({action:t.z.string(),input:t.z.record(t.z.string(),t.z.unknown()).optional()})}).array()}),A=(0,t.zStrictObject)({actionId:t.z.string(),categories:t.z.string().array(),actionType:t.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`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:w.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:C.array().optional(),validationRules:S.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(),fieldConfigs:v.array().optional(),steps:t.z.union([E,D]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional(),dataSync:O.optional(),providerEvents:t.z.string().array().nonempty().optional()}),j=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:A.extend({actionType:t.z.literal(`refresh_token`)})}),M=(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()}),N=(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()}),P=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),F=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:P.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),I=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:P.optional(),steps:F.array().optional(),applicableScopes:t.z.string().optional()}),L=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:I.array()}),R=(0,t.zStrictObject)({config:L.optional(),setup:L.optional()}),z=(0,t.zStrictObject)({certs:t.z.string().array().optional(),keys:t.z.string().array().optional()}).optional(),B=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,certificates:z,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:R.optional()}).optional(),configFields:_.array().optional(),setupFields:_.array().optional(),refreshAuthentication:j.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(A),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),V=B.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),H=B.extend({type:t.z.literal(`custom`)}),U=B.extend({type:t.z.literal(`oidc`)}),W=t.z.discriminatedUnion(`type`,[V,H,U]),G=(0,t.zStrictObject)({steps:t.z.union([E,D]).array().min(1),result:t.z.string().optional()}),K=G.extend({result:t.z.string()}),phaseContainsTemplate=(e,t)=>{let containsTemplate=e=>typeof e==`string`?e.includes(t):Array.isArray(e)?e.some(containsTemplate):typeof e==`object`&&e?Object.values(e).some(containsTemplate):!1;return e.steps.some(e=>`stepFunction`in e&&e.stepFunction?containsTemplate(e.stepFunction.parameters):`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>containsTemplate(e.parameters)):!1)},q=(0,t.zStrictObject)({setup:(0,t.zStrictObject)({creation:K,activation:G.optional(),deletion:G,isConsolidated:t.z.boolean().optional().default(!1)}).superRefine((e,n)=>{e.activation&&!phaseContainsTemplate(e.activation,"${inputs.remoteId}")&&n.addIssue({code:t.z.ZodIssueCode.custom,message:"Activation phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`activation`]}),phaseContainsTemplate(e.deletion,"${inputs.remoteId}")||n.addIssue({code:t.z.ZodIssueCode.custom,message:"Deletion phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`deletion`]})}).optional(),actions:A.extend({actionType:t.z.literal(`event`)}).array().optional(),router:k.optional(),externalAccountIdExtractor:A.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),J=(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(),W).array().optional(),actions:A.array().optional(),events:q.optional(),rateLimit:M.optional(),concurrency:N.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),Y=`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(J,(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);i.actions=c,hydrateTestActions(n,n.info.key,a,c,o),i.authentication=a,(0,t.notMissing)(c)&&(i.categories=getConnectorCategoriesFromActions(Object.values(c)));let l=buildEventActionsFromYaml(n,o),u=n.events?.router,d=(0,t.notMissing)(n.events?.externalAccountIdExtractor)?parseAction(n,[`events`,`externalAccountIdExtractor`],buildActionId(n.info.key,n.events.externalAccountIdExtractor.actionId),n.events.externalAccountIdExtractor,o,void 0):void 0,f=n.events?.setup,p=(0,t.notMissing)(f)?{isConsolidated:f.isConsolidated,creation:parseWebhookSetupPhase(`creation`,f.creation,o),activation:(0,t.notMissing)(f.activation)?parseWebhookSetupPhase(`activation`,f.activation,o):void 0,deletion:parseWebhookSetupPhase(`deletion`,f.deletion,o)}:void 0;if(((0,t.notMissing)(l)||(0,t.notMissing)(u)||(0,t.notMissing)(d)||(0,t.notMissing)(p))&&(i.events={setup:p,actions:l,router:u,externalAccountIdExtractor:d}),(0,t.notMissing)(u)){let e=Object.keys(i.events?.actions??{}),t=n.info.key,r=u.rules.map(e=>e.then.action);for(let n of r){let r=n.startsWith(`${t}_`)?n:`${t}_${n}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(n)}}return i}catch(e){if(e instanceof u)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(Array.isArray(r))t[n]=r;else 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)},parseScopesString=e=>(0,t.notMissing)(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,n,r)=>{if((0,t.isMissing)(e))return e;let i=e.guides;if((0,t.isMissing)(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,n,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,n,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},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],_=parseScopesString(h);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=(0,t.notMissing)(g.support)?parseSupportGuides(g.support,r,[`authentication`,o,c,`support`]):void 0,b=(0,t.notMissing)(y)?buildSupport(a,g.label,y):void 0;return n[u]={...g,...(0,t.notMissing)(b)?{support:b}:{},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},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),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)}}},validateActionRuleFieldReferences=(e,t,n,r)=>{if(!n||n.length===0)return;let i=new Set(r.map(e=>e.name)),a=[];for(let r of n){let n=[];switch(r.rule){case`atLeastOneOf`:case`mutuallyExclusive`:n.push(...r.fields);break;case`requiredIf`:n.push(r.field,r.condition.field);break}for(let o of n)i.has(o)||a.push({message:`Validation rule '${r.rule}' in action '${e}' references unknown field '${o}'`,path:[...t,`validationRules`],keys:[o]})}if(a.length>0)throw new SchemaValidationError(a)},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),validateActionRuleFieldReferences(n,t,r.validationRules,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=parseScopesString(r.requiredScopes);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),requiredScopes:p,inputs:l,validationRules:r.validationRules,steps:parseSteps({kind:`action`,actionId:r.actionId},r.steps,i,n=>n.functionName!==`map_fields`&&n.functionName!==`typecast`?{}:parseFieldConfigs(e,t,n.parameters?.fields??r.fieldConfigs)??{}),result:r.result,dataSync:r.dataSync,providerEvents:r.providerEvents}},parseWebhookSetupPhase=(e,t,n)=>({steps:parseSteps({kind:`setupPhase`,phase:e},t.steps,n),result:t.result}),parseSteps=(e,t,n,r)=>t.reduce((t,i)=>{let parseStepFunctionMeta=e=>{let{customErrors:t,...i}=e.parameters??{},a=r?.(e)??{};return{functionName:e.functionName,version:e.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:e.functionName,baseRequestParams:n,customErrors:t}),...a,...i}}},a={id:i.stepId,description:i.description,condition:i.condition,ignoreError:i.ignoreError};if(`iterator`in i&&i.iterator){if(`stepFunction`in i&&i.stepFunction){let n={...a,iterator:i.iterator,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}else if(`stepFunctions`in i&&i.stepFunctions){let n={...a,iterator:i.iterator,stepFunctions:i.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(e,n),t[i.stepId]=n}}else if(`stepFunction`in i&&i.stepFunction){let n={...a,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}return t},{}),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=parseScopesString(e.requiredScopes);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),a={...i.headers??{},...i.query??{},...i.path??{},...i.body??{}};return e.validationRules&&e.validationRules.length>0&&validateActionRules(e.validationRules,a,e.inputs),a},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)},X={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uri:/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/},applyInputRules=(e,t,n)=>{let r=t.errorMessage;if(n===`string`||n===`datetime_string`){let n=e;if(t.minLength!==void 0&&(n=n.min(t.minLength,r)),t.maxLength!==void 0&&(n=n.max(t.maxLength,r)),t.pattern!==void 0&&(n=n.regex(new RegExp(t.pattern),r)),t.format!==void 0){let e=X[t.format];e&&(n=n.regex(e,r??`Must be a valid ${t.format}`))}return n}if(n===`number`){let n=e;return t.min!==void 0&&(n=n.min(t.min,r)),t.max!==void 0&&(n=n.max(t.max,r)),n}return e},validateActionRules=(e,n,r)=>{let i=[],a={};if(r)for(let e of r)a[e.name]=e.in;let fieldPath=e=>{let t=a[e];return t?[t,e]:[e]};for(let t of e)switch(t.rule){case`atLeastOneOf`:if(!t.fields.some(e=>n[e]!==void 0&&n[e]!==null))for(let e of t.fields)i.push({code:`custom`,message:t.errorMessage??`At least one of [${t.fields.join(`, `)}] is required`,path:fieldPath(e),input:n});break;case`requiredIf`:{let e=n[t.condition.field],r=!1;if(t.condition.equals!==void 0)r=String(e)===t.condition.equals;else if(t.condition.notEquals!==void 0)r=String(e)!==t.condition.notEquals;else if(t.condition.present!==void 0){let n=e!=null;r=t.condition.present?n:!n}r&&(n[t.field]===void 0||n[t.field]===null)&&i.push({code:`custom`,message:t.errorMessage??`Field "${t.field}" is required when condition is met`,path:fieldPath(t.field),input:n});break}case`mutuallyExclusive`:{let e=t.fields.filter(e=>n[e]!==void 0&&n[e]!==null);if(e.length>1)for(let r of e)i.push({code:`custom`,message:t.errorMessage??`Fields [${t.fields.join(`, `)}] are mutually exclusive`,path:fieldPath(r),input:n});break}}if(i.length>0)throw new t.z.ZodError(i)},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.rules&&(n=applyInputRules(n,e.rules,e.type)),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}},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`||e===`upload_binary`){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},isCustomConnector=e=>(0,t.notMissing)(e.owner)&&e.owner!==`stackone`,isConnectorReleased=(e,t=[])=>isCustomConnector(e)||isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(isCustomConnector(e))return{...e,actions:e.actions??{}};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:getErrorLineNumberInSteps(n.location,n.stepId,n.functionName,!1,e),message:n.message,field:stepLocationField(n.location)}]};else if(n instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:n.message,field:`events.router`}]};else if(n instanceof InvalidStepFunctionParamsError){let r=n.issues,i=[],a=stepLocationFieldPrefix(n.location);return r.forEach(r=>{let o=r?.keys?.[0],s=(0,t.isMissing)(o)?r.path:[...r.path,o],c=getErrorLineNumberInSteps(n.location,n.stepId,n.functionName,!0,e);i.push({line:c,message:r.message,field:`${a}${s.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},stepLocationField=e=>e.kind===`action`?void 0:`events.setup.${e.phase}`,stepLocationFieldPrefix=e=>e.kind===`action`?``:`events.setup.${e.phase}.`,ownerMarkersFor=e=>e.kind===`action`?[`- actionId: ${e.actionId}`]:[`setup:`,`${e.phase}:`],getErrorLineNumberInSteps=(e,t,n,r,i)=>{let a=i.split(`
6
- `),o=ownerMarkersFor(e),s=0,c=!1,l=1;for(let e=0;e<a.length;e++){let i=a[e].trim();if(s<o.length){i===o[s]&&(s++,l=e+1);continue}if(!c){i===`- stepId: ${t}`&&(c=!0,l=e+1);continue}if(!r&&i.includes(`functionName: ${n}`)||r&&i===`parameters:`)return e+1}return l};var Z=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 Z{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Z{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Z{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Z{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends Z{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};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,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t]?.production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),buildActionMeta=(e,t,n)=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,authentication:t,...e.tags?{tags:e.tags}:{},...e.requiredScopes?{required_scopes:e.requiredScopes}:{},...e.releaseStage?{release_stage:e.releaseStage}:{},...n?.includes(`action_details`)?{action_details:e}:{}}),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e.actions??{}).length,getEventActionsMeta=e=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e.actions??{}).map(e=>buildActionMeta(e,r,t)),a=getScopeDefinitions(e),o=getEventActionsMeta(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,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionMeta=(e,t,n)=>{let r=e.actions?.[t];if(r)return buildActionMeta(r,getActionAuthenticationMethods(e),n)},getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(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),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>(0,a.evaluateExternalAccountIdExtractor)(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,connectorOwner:i,authConfigKey:a,environment:o=`production`,action:s,accountSecureId:c,projectSecureId:l,organizationId:u,originOwnerId:d,originOwnerName:f,sourceType:p,sourceId:m,sourceValue:h,flowType:g})=>({organizationId:u,projectSecureId:l,accountSecureId:c,connectorKey:n,connectorVersion:r,connectorOwner:i,category:e,service:``,resource:``,originOwnerId:d,originOwnerName:f,source:{sourceType:p,sourceId:m,sourceValue:h},schema:s?.schema?.key,actionType:s?.actionType??`unknown`,authenticationType:a,environment:o,actionRunId:(0,t.generateActionRunId)(),flowType:g}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const 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)}},Q=`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[`${Q}${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(Q),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[`${Q}${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}},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,l.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=async(e,t,n,r,i,a,o,s)=>{let c=await 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];return shouldSkipStepDueToCondition(l,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`,startTime:c,endTime:c}):i.hasFatalError?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`,startTime:c,endTime:c}):(0,a.isForeachStep)(l)?executeForeachStep(e,t,l,r,i,o,s):executeSimpleStep(e,t,l,r,i,o,s)},executeSimpleStep=async(e,t,n,r,i,o,s)=>{let c=new Date,l=n.stepFunction;if(!l)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`,startTime:c,endTime:new Date});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 await handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?await 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,await 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".`,startTime:c,endTime:new Date}));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 await 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,c)=>{let u=new Date,d=(0,l.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`,startTime:u,endTime:u});let f=getStepFunctionsToExecute(r);if(f.length===0)return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`,startTime:u,endTime:new Date});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}},await 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.`}},await addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`,startTime:u,endTime:new Date})}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 await 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)=>{let r=(0,a.buildExpressionContext)(n);return(0,t.isObject)(e)?(0,l.safeEvaluateRecord)(e,r):(0,l.safeEvaluate)(e,r)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,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,statistics:{startTime:s,endTime:c}}}}),getOlapOptions=e=>{let n=e?.olap;if((0,t.isMissing)(n))return{};let r=n.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=n.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},$={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},applyDefenderToBlock=async(e,n,r,i)=>{if(!r?.defender?.enabled)return e;let{defenderMetadata:a,outputs:o,response:s}=await n({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:r,logger:i});return{...e,defenderMetadata:a,...(0,t.notMissing)(o)&&{outputs:o},...(0,t.notMissing)(s)&&{response:s}}},runAction=async e=>{let{pathParams:n={},queryParams:r={},body:i={},headers:a={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=parseActionInputs,createBlockContextFn:c=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction,getActionFromUrlFn:f=getActionFromUrl,getActionForRefreshAuthenticationFn:p=getActionForRefreshAuthentication,getTestActionsFn:m=getTestActions,applyDefenderFn:h=applyDefender,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,P=c({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,connectorOwner:_.connectorOwner,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A,originOwnerId:M,originOwnerName:N,sourceType:S?.sourceType,sourceId:S?.sourceId,sourceValue:S?.sourceValue,flowType:$[g]}),F=new Date,I;try{I=(0,t.isString)(v)?o(v):v}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:j,settings:x,logger:C,getHttpClient:y,getOlapClient:b};if(g===`action_id`){let{actionId:o}=T,c=findActionByActionId(I,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c,blockContext:P,queryParams:r,pathParams:n,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(g===`test_actions`){let n=m(I,E,D);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,L);P.actionType=`test`;for(let r of n){let n=new Date,i=await u({...L,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,l.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(a=await applyDefenderToBlock(a,applyDefender,x,C),((0,t.isMissing)(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 t=await createErrorBlock(u,L);return t.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,L);return r.statistics={startTime:F,endTime:new Date},r}else if(g===`refresh_authentication`){let n=p(I,E,D);if((0,t.isMissing)(n))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:n.action,blockContext:P,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return o=await applyDefenderToBlock(o,h,x,C),o.statistics={startTime:F,endTime:new Date},await recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(g===`path`){let{path:n,method:o}=T,c=f(I,n,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,L)},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},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await(0,c.createPromptDefense)({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useSfe:r?.defender?.useSfe??!0,tier2Fields:r?.defender?.tier2Fields,annotateBoundary:r?.defender?.annotateBoundary??!1,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=async({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e)){n.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if((0,t.isMissing)(i)){n.logger?.warning({message:`olap client is missing, skipping recording action result`});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,startTime:r.statistics?.startTime},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??!1,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata};try{await i.recordAction(o,c,a);let l=e.steps||{},u=Object.keys(l).map((e,i)=>{let a=r.steps?.[e];return(0,t.isMissing)(a)?null:{input:{actionRunId:c.actionRunId,actionMode:o.mode,actionSuccess:c.success,stepIndex:i,stepId:e,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,inputs:r.inputs},result:{success:a.successful,message:a.message,outputs:a.output,errors:a.errors,skipped:a.skipped,startTime:a.statistics?.startTime,endTime:a.statistics?.endTime}}}).filter(t.notMissing);u.length>0&&await i.recordSteps(u,a)}catch(e){n.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),ee=`stackone://internal//`,te=`stackone://internal//refresh_token`,runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:n,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:n.providerKey,connectorVersion:n.providerVersion,authConfigKey:n.authConfigKey,environment:n.environment??`production`,accountSecureId:n.secureId,projectSecureId:n.projectSecureId,organizationId:n.organizationId,originOwnerId:n.originOwnerId,originOwnerName:n.originOwnerName,connectorOwner:n.connectorOwner,flowType:`action`}),g=u(r,e);if((0,t.isMissing)(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:n.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1,phaseKindToActionType=e=>e===`deletion`?`delete`:`create`,phaseAsAction=(e,t)=>({id:`webhook-setup-${t}`,categories:[],label:`Webhook Setup ${t}`,description:`Webhook setup ${t} phase execution`,schemaType:`native`,actionType:phaseKindToActionType(t),steps:e.steps,result:e.result,responses:{success:{statusCode:200},errors:{}},cursor:{enabled:!1,pageSize:0},compositeIdentifiers:{enabled:!1}}),runWebhookSetupPhase=async({connector:e,phase:n,phaseKind:r,inputs:i,credentials:a,accountSecureId:o,projectSecureId:s,organizationId:c,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,logger:p,getHttpClient:m,createBlockFn:h=createBlock,createBlockContextFn:g=createBlockContext,runStepActionFn:_=runStepAction})=>{let v=e.categories?.[0];if((0,t.isMissing)(v))throw Error(`Connector category is required for webhook setup phase execution (connector '${l}')`);let y=phaseAsAction(n,r),b=await _({block:await h({connector:e,inputs:i,credentials:a,context:g({category:v,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,action:y,accountSecureId:o,projectSecureId:s,organizationId:c,flowType:`action`}),action:y,logger:p,getHttpClient:m})});if((0,t.isMissing)(b.response))throw Error(`Webhook setup ${r} phase produced no response (connector '${l}')`);return{successful:b.response.successful,statusCode:b.response.statusCode,outputs:b.outputs}};exports.ConnectSDKError=Z,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.evaluateExternalAccountIdExtractorByConnector=evaluateExternalAccountIdExtractorByConnector,exports.executeStepFunction=executeStepFunction,exports.formatValidationErrorResponse=formatValidationErrorResponse,exports.getActionFromUrl=getActionFromUrl,exports.getActionMeta=getActionMeta,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.runEventActionById=runEventActionById,exports.runStepAction=runStepAction,exports.runTestActions=runTestActions,exports.runWebhookSetupPhase=runWebhookSetupPhase,exports.supportsRefreshAuthentication=supportsRefreshAuthentication,exports.validateYamlConnector=validateYamlConnector;
6
+ `),o=ownerMarkersFor(e),s=0,c=!1,l=1;for(let e=0;e<a.length;e++){let i=a[e].trim();if(s<o.length){i===o[s]&&(s++,l=e+1);continue}if(!c){i===`- stepId: ${t}`&&(c=!0,l=e+1);continue}if(!r&&i.includes(`functionName: ${n}`)||r&&i===`parameters:`)return e+1}return l};var Z=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 Z{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Z{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Z{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Z{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends Z{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};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,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t]?.production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),buildActionMeta=(e,t,n)=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,authentication:t,...e.tags?{tags:e.tags}:{},...e.requiredScopes?{required_scopes:e.requiredScopes}:{},...e.releaseStage?{release_stage:e.releaseStage}:{},...n?.includes(`action_details`)?{action_details:e}:{}}),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e.actions??{}).length,getEventActionsMeta=e=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e.actions??{}).map(e=>buildActionMeta(e,r,t)),a=getScopeDefinitions(e),o=getEventActionsMeta(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,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionMeta=(e,t,n)=>{let r=e.actions?.[t];if(r)return buildActionMeta(r,getActionAuthenticationMethods(e),n)},getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(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),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>(0,a.evaluateExternalAccountIdExtractor)(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,connectorOwner:i,connectorProfileId:a,authConfigKey:o,environment:s=`production`,action:c,accountSecureId:l,projectSecureId:u,organizationId:d,originOwnerId:f,originOwnerName:p,sourceType:m,sourceId:h,sourceValue:g,flowType:_})=>({organizationId:d,projectSecureId:u,accountSecureId:l,connectorKey:n,connectorVersion:r,connectorOwner:i,connectorProfileId:a,category:e,service:``,resource:``,originOwnerId:f,originOwnerName:p,source:{sourceType:m,sourceId:h,sourceValue:g},schema:c?.schema?.key,actionType:c?.actionType??`unknown`,authenticationType:o,environment:s,actionRunId:(0,t.generateActionRunId)(),flowType:_}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const 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)}},Q=`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[`${Q}${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(Q),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[`${Q}${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}},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,l.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=async(e,t,n,r,i,a,o,s)=>{let c=await 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];return shouldSkipStepDueToCondition(l,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`,startTime:c,endTime:c}):i.hasFatalError?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`,startTime:c,endTime:c}):(0,a.isForeachStep)(l)?executeForeachStep(e,t,l,r,i,o,s):executeSimpleStep(e,t,l,r,i,o,s)},executeSimpleStep=async(e,t,n,r,i,o,s)=>{let c=new Date,l=n.stepFunction;if(!l)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`,startTime:c,endTime:new Date});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 await handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?await 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,await 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".`,startTime:c,endTime:new Date}));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 await 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,c)=>{let u=new Date,d=(0,l.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`,startTime:u,endTime:u});let f=getStepFunctionsToExecute(r);if(f.length===0)return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`,startTime:u,endTime:new Date});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}},await 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.`}},await addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`,startTime:u,endTime:new Date})}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 await 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)=>{let r=(0,a.buildExpressionContext)(n);return(0,t.isObject)(e)?(0,l.safeEvaluateRecord)(e,r):(0,l.safeEvaluate)(e,r)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,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,statistics:{startTime:s,endTime:c}}}}),getOlapOptions=e=>{let n=e?.olap;if((0,t.isMissing)(n))return{};let r=n.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=n.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},$={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},applyDefenderToBlock=async(e,n,r,i)=>{if(!r?.defender?.enabled)return e;let{defenderMetadata:a,outputs:o,response:s}=await n({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:r,logger:i});return{...e,defenderMetadata:a,...(0,t.notMissing)(o)&&{outputs:o},...(0,t.notMissing)(s)&&{response:s}}},runAction=async e=>{let{pathParams:n={},queryParams:r={},body:i={},headers:a={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=parseActionInputs,createBlockContextFn:c=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction,getActionFromUrlFn:f=getActionFromUrl,getActionForRefreshAuthenticationFn:p=getActionForRefreshAuthentication,getTestActionsFn:m=getTestActions,applyDefenderFn:h=applyDefender,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,P=c({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,connectorOwner:_.connectorOwner,connectorProfileId:_.connectorProfileId,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A,originOwnerId:M,originOwnerName:N,sourceType:S?.sourceType,sourceId:S?.sourceId,sourceValue:S?.sourceValue,flowType:$[g]}),F=new Date,I;try{I=(0,t.isString)(v)?o(v):v}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:j,settings:x,logger:C,getHttpClient:y,getOlapClient:b};if(g===`action_id`){let{actionId:o}=T,c=findActionByActionId(I,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c,blockContext:P,queryParams:r,pathParams:n,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(g===`test_actions`){let n=m(I,E,D);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,L);P.actionType=`test`;for(let r of n){let n=new Date,i=await u({...L,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,l.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(a=await applyDefenderToBlock(a,applyDefender,x,C),((0,t.isMissing)(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 t=await createErrorBlock(u,L);return t.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,L);return r.statistics={startTime:F,endTime:new Date},r}else if(g===`refresh_authentication`){let n=p(I,E,D);if((0,t.isMissing)(n))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:n.action,blockContext:P,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return o=await applyDefenderToBlock(o,h,x,C),o.statistics={startTime:F,endTime:new Date},await recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(g===`path`){let{path:n,method:o}=T,c=f(I,n,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,L)},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},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await(0,c.createPromptDefense)({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useSfe:r?.defender?.useSfe??!0,tier2Fields:r?.defender?.tier2Fields,annotateBoundary:r?.defender?.annotateBoundary??!1,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=async({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e)){n.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if((0,t.isMissing)(i)){n.logger?.warning({message:`olap client is missing, skipping recording action result`});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,startTime:r.statistics?.startTime},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,connectorOwner:s.connectorOwner,connectorProfileId:s.connectorProfileId,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??!1,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata};try{await i.recordAction(o,c,a);let l=e.steps||{},u=Object.keys(l).map((e,i)=>{let a=r.steps?.[e];return(0,t.isMissing)(a)?null:{input:{actionRunId:c.actionRunId,actionMode:o.mode,actionSuccess:c.success,stepIndex:i,stepId:e,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,inputs:r.inputs},result:{success:a.successful,message:a.message,outputs:a.output,errors:a.errors,skipped:a.skipped,startTime:a.statistics?.startTime,endTime:a.statistics?.endTime}}}).filter(t.notMissing);u.length>0&&await i.recordSteps(u,a)}catch(e){n.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),ee=`stackone://internal//`,te=`stackone://internal//refresh_token`,runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:n,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:n.providerKey,connectorVersion:n.providerVersion,authConfigKey:n.authConfigKey,environment:n.environment??`production`,accountSecureId:n.secureId,projectSecureId:n.projectSecureId,organizationId:n.organizationId,originOwnerId:n.originOwnerId,originOwnerName:n.originOwnerName,connectorOwner:n.connectorOwner,flowType:`action`}),g=u(r,e);if((0,t.isMissing)(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:n.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1,phaseKindToActionType=e=>e===`deletion`?`delete`:`create`,phaseAsAction=(e,t)=>({id:`webhook-setup-${t}`,categories:[],label:`Webhook Setup ${t}`,description:`Webhook setup ${t} phase execution`,schemaType:`native`,actionType:phaseKindToActionType(t),steps:e.steps,result:e.result,responses:{success:{statusCode:200},errors:{}},cursor:{enabled:!1,pageSize:0},compositeIdentifiers:{enabled:!1}}),runWebhookSetupPhase=async({connector:e,phase:n,phaseKind:r,inputs:i,credentials:a,accountSecureId:o,projectSecureId:s,organizationId:c,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,logger:p,getHttpClient:m,createBlockFn:h=createBlock,createBlockContextFn:g=createBlockContext,runStepActionFn:_=runStepAction})=>{let v=e.categories?.[0];if((0,t.isMissing)(v))throw Error(`Connector category is required for webhook setup phase execution (connector '${l}')`);let y=phaseAsAction(n,r),b=await _({block:await h({connector:e,inputs:i,credentials:a,context:g({category:v,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,action:y,accountSecureId:o,projectSecureId:s,organizationId:c,flowType:`action`}),action:y,logger:p,getHttpClient:m})});if((0,t.isMissing)(b.response))throw Error(`Webhook setup ${r} phase produced no response (connector '${l}')`);return{successful:b.response.successful,statusCode:b.response.statusCode,outputs:b.outputs}};exports.ConnectSDKError=Z,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.evaluateExternalAccountIdExtractorByConnector=evaluateExternalAccountIdExtractorByConnector,exports.executeStepFunction=executeStepFunction,exports.formatValidationErrorResponse=formatValidationErrorResponse,exports.getActionFromUrl=getActionFromUrl,exports.getActionMeta=getActionMeta,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.runEventActionById=runEventActionById,exports.runStepAction=runStepAction,exports.runTestActions=runTestActions,exports.runWebhookSetupPhase=runWebhookSetupPhase,exports.supportsRefreshAuthentication=supportsRefreshAuthentication,exports.validateYamlConnector=validateYamlConnector;
package/dist/index.d.cts CHANGED
@@ -403,6 +403,8 @@ type ActionResult = {
403
403
  actionId: string;
404
404
  connectorKey: string;
405
405
  connectorVersion: string;
406
+ connectorOwner?: string;
407
+ connectorProfileId?: string;
406
408
  actionType: string;
407
409
  category?: string;
408
410
  organizationId: string;
@@ -701,6 +703,8 @@ type ActionLog = ILog & {
701
703
  actionId: string;
702
704
  connectorKey: string;
703
705
  connectorVersion: string;
706
+ connectorOwner?: string;
707
+ connectorProfileId?: string;
704
708
  organizationId: string;
705
709
  projectSecureId: string;
706
710
  accountSecureId: string;
@@ -1151,6 +1155,7 @@ type Action = {
1151
1155
  };
1152
1156
  compositeIdentifiers: CompositeIdentifierConnectorConfig;
1153
1157
  dataSync?: DataSyncConfig;
1158
+ providerEvents?: string[];
1154
1159
  };
1155
1160
  type DataSyncConfig = {
1156
1161
  allowed: boolean;
@@ -1349,6 +1354,7 @@ type BlockContext = {
1349
1354
  connectorKey: string;
1350
1355
  connectorVersion: string;
1351
1356
  connectorOwner?: string;
1357
+ connectorProfileId?: string;
1352
1358
  category: Category;
1353
1359
  schema?: string;
1354
1360
  actionType: ActionType;
@@ -1439,6 +1445,7 @@ type Account = {
1439
1445
  providerKey: string;
1440
1446
  providerVersion: string;
1441
1447
  connectorOwner?: string;
1448
+ connectorProfileId?: string;
1442
1449
  authConfigKey: string;
1443
1450
  environment: string;
1444
1451
  organizationId: string;
@@ -1659,6 +1666,7 @@ declare const createBlockContext: ({
1659
1666
  connectorKey,
1660
1667
  connectorVersion,
1661
1668
  connectorOwner,
1669
+ connectorProfileId,
1662
1670
  authConfigKey,
1663
1671
  environment,
1664
1672
  action,
@@ -1676,6 +1684,7 @@ declare const createBlockContext: ({
1676
1684
  connectorKey: string;
1677
1685
  connectorVersion: string;
1678
1686
  connectorOwner?: string;
1687
+ connectorProfileId?: string;
1679
1688
  authConfigKey: string;
1680
1689
  environment?: string;
1681
1690
  action?: Action;
package/dist/index.d.mts CHANGED
@@ -402,6 +402,8 @@ type ActionResult = {
402
402
  actionId: string;
403
403
  connectorKey: string;
404
404
  connectorVersion: string;
405
+ connectorOwner?: string;
406
+ connectorProfileId?: string;
405
407
  actionType: string;
406
408
  category?: string;
407
409
  organizationId: string;
@@ -700,6 +702,8 @@ type ActionLog = ILog & {
700
702
  actionId: string;
701
703
  connectorKey: string;
702
704
  connectorVersion: string;
705
+ connectorOwner?: string;
706
+ connectorProfileId?: string;
703
707
  organizationId: string;
704
708
  projectSecureId: string;
705
709
  accountSecureId: string;
@@ -1150,6 +1154,7 @@ type Action = {
1150
1154
  };
1151
1155
  compositeIdentifiers: CompositeIdentifierConnectorConfig;
1152
1156
  dataSync?: DataSyncConfig;
1157
+ providerEvents?: string[];
1153
1158
  };
1154
1159
  type DataSyncConfig = {
1155
1160
  allowed: boolean;
@@ -1348,6 +1353,7 @@ type BlockContext = {
1348
1353
  connectorKey: string;
1349
1354
  connectorVersion: string;
1350
1355
  connectorOwner?: string;
1356
+ connectorProfileId?: string;
1351
1357
  category: Category;
1352
1358
  schema?: string;
1353
1359
  actionType: ActionType;
@@ -1438,6 +1444,7 @@ type Account = {
1438
1444
  providerKey: string;
1439
1445
  providerVersion: string;
1440
1446
  connectorOwner?: string;
1447
+ connectorProfileId?: string;
1441
1448
  authConfigKey: string;
1442
1449
  environment: string;
1443
1450
  organizationId: string;
@@ -1658,6 +1665,7 @@ declare const createBlockContext: ({
1658
1665
  connectorKey,
1659
1666
  connectorVersion,
1660
1667
  connectorOwner,
1668
+ connectorProfileId,
1661
1669
  authConfigKey,
1662
1670
  environment,
1663
1671
  action,
@@ -1675,6 +1683,7 @@ declare const createBlockContext: ({
1675
1683
  connectorKey: string;
1676
1684
  connectorVersion: string;
1677
1685
  connectorOwner?: string;
1686
+ connectorProfileId?: string;
1678
1687
  authConfigKey: string;
1679
1688
  environment?: string;
1680
1689
  action?: Action;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
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,buildExpressionContext as x,decodeCompositeId as S,encodeCompositeId as C,evaluateExternalAccountIdExtractor as w,expandCursor as T,getInputEnumValues as E,isCompositeId as D,isCursorEmpty as O,isForeachStep as k,isValidEnumRef as A,minifyCursor as j,updateCursor as M}from"@stackone/core";import{HttpErrorMessages as N,isSuccessStatusCode as P}from"@stackone/transport";import{parse as F}from"yaml";import{createPromptDefense as I}from"@stackone/defender";import{evaluate as ee,safeEvaluate as L,safeEvaluateRecord as R}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,emitEvent:d})=>{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,emitEvent:d}},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}`,resolveActionId=(e,t)=>{let n=`${e}_`;return t.startsWith(n)?t:`${n}${t}`},findActionByActionId=(e,t)=>e.actions?.[resolveActionId(e.key,t)],findEventActionByActionId=(e,t)=>e.events?.actions?.[resolveActionId(e.key,t)],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 z=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 z{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends z{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}};const formatStepLocation=e=>e.kind===`action`?`action '${e.actionId}'`:`webhook setup phase '${e.phase}'`;var InvalidStepFunctionError=class extends z{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends z{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends z{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 z{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}},InvalidEventRouterReferenceError=class extends z{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends z{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`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event 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.`}}),te=c({type:s.literal(`cursor`),response:c({dataKey:s.string(),nextKey:s.string()}),iterator:c({key:s.string(),in:s.enum([`query`,`body`,`headers`])}),stopCondition:s.string().optional()}),ne=c({type:s.literal(`offset`),response:c({dataKey:s.string()}),iterator:c({offsetKey:s.string(),limitKey:s.string(),in:s.enum([`query`,`body`,`headers`]),defaultLimit:s.number().optional()}),stopCondition:s.string().optional()}),re=c({type:s.literal(`page`),response:c({dataKey:s.string()}),iterator:c({pageKey:s.string(),pageSizeKey:s.string().optional(),in:s.enum([`query`,`body`,`headers`]),startPage:s.number().optional(),defaultPageSize:s.number().optional()}),stopCondition:s.string().optional()}),ie=s.discriminatedUnion(`type`,[te,ne,re]),B={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),externalSystemAccountIdentifier:s.boolean().optional(),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional(),value:s.string().optional(),computed:s.boolean().optional()},V=s.discriminatedUnion(`type`,[c({...B,type:s.enum([`text`,`password`])}),c({...B,type:s.literal(`select`),options:c({value:s.string(),label:s.string()}).array()})]).superRefine((e,t)=>{e.computed===!0&&!e.value&&t.addIssue({code:s.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),H=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(()=>H).array().optional(),requiredScopes:s.string().optional()}),ae=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),oe=c({minLength:s.number().optional(),maxLength:s.number().optional(),pattern:s.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:s.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:s.number().optional(),max:s.number().optional(),errorMessage:s.string().optional()}),se=c({field:s.string(),equals:s.string().optional(),notEquals:s.string().optional(),present:s.boolean().optional()}).refine(e=>[e.equals!==void 0,e.notEquals!==void 0,e.present!==void 0].filter(Boolean).length===1,{message:`Condition must specify exactly one of: equals, notEquals, present`}),ce=s.discriminatedUnion(`rule`,[c({rule:s.literal(`atLeastOneOf`),fields:s.string().array().min(2),errorMessage:s.string().optional()}),c({rule:s.literal(`requiredIf`),field:s.string(),condition:se,errorMessage:s.string().optional()}),c({rule:s.literal(`mutuallyExclusive`),fields:s.string().array().min(2),errorMessage:s.string().optional()})]),U=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(()=>U.omit({in:!0})).array().optional(),oneOf:ae.optional(),rules:oe.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'`}).refine(e=>e.rules&&(e.rules.minLength!==void 0||e.rules.maxLength!==void 0||e.rules.pattern!==void 0||e.rules.format!==void 0)?e.type===`string`||e.type===`datetime_string`:!0,{message:`String rules (minLength, maxLength, pattern, format) can only be used with string or datetime_string types`}).refine(e=>e.rules&&(e.rules.min!==void 0||e.rules.max!==void 0)?e.type===`number`:!0,{message:`Number rules (min, max) can only be used with number type`}),le=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`}),ue=c({allowed:s.boolean(),indexField:s.string().or(s.string().array()),pagination:ie.optional()}),de=c({rules:c({when:s.string(),then:c({action:s.string(),input:s.record(s.string(),s.unknown()).optional()})}).array()}),q=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`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:le.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:U.array().optional(),validationRules:ce.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(),fieldConfigs:H.array().optional(),steps:s.union([G,K]).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional(),dataSync:ue.optional()}),fe=c({schedule:s.string().optional(),action:q.extend({actionType:s.literal(`refresh_token`)})}),pe=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()}),me=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),J=c({src:s.string(),alt:s.string()}),he=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:J.optional(),displayScopes:s.boolean().optional(),applicableScopes:s.string().optional()}),ge=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:J.optional(),steps:he.array().optional(),applicableScopes:s.string().optional()}),Y=c({warning:s.string().optional(),sections:ge.array()}),_e=c({config:Y.optional(),setup:Y.optional()}),ve=c({certs:s.string().array().optional(),keys:s.string().array().optional()}).optional(),X=c({label:s.string(),authorization:m,certificates:ve,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:_e.optional()}).optional(),configFields:V.array().optional(),setupFields:V.array().optional(),refreshAuthentication:fe.optional(),testActions:c({action:s.string().or(q),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),ye=X.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),be=X.extend({type:s.literal(`custom`)}),xe=X.extend({type:s.literal(`oidc`)}),Se=s.discriminatedUnion(`type`,[ye,be,xe]),Z=c({steps:s.union([G,K]).array().min(1),result:s.string().optional()}),Ce=Z.extend({result:s.string()}),phaseContainsTemplate=(e,t)=>{let containsTemplate=e=>typeof e==`string`?e.includes(t):Array.isArray(e)?e.some(containsTemplate):typeof e==`object`&&e?Object.values(e).some(containsTemplate):!1;return e.steps.some(e=>`stepFunction`in e&&e.stepFunction?containsTemplate(e.stepFunction.parameters):`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>containsTemplate(e.parameters)):!1)},we=c({setup:c({creation:Ce,activation:Z.optional(),deletion:Z,isConsolidated:s.boolean().optional().default(!1)}).superRefine((e,t)=>{e.activation&&!phaseContainsTemplate(e.activation,"${inputs.remoteId}")&&t.addIssue({code:s.ZodIssueCode.custom,message:"Activation phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`activation`]}),phaseContainsTemplate(e.deletion,"${inputs.remoteId}")||t.addIssue({code:s.ZodIssueCode.custom,message:"Deletion phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`deletion`]})}).optional(),actions:q.extend({actionType:s.literal(`event`)}).array().optional(),router:de.optional(),externalAccountIdExtractor:q.extend({actionType:s.literal(`custom`),result:s.string().min(1)}).optional()}),Te=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(),events:we.optional(),rateLimit:pe.optional(),concurrency:me.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(Te,F(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);r.actions=s,hydrateTestActions(t,t.info.key,i,s,a),r.authentication=i,o(s)&&(r.categories=getConnectorCategoriesFromActions(Object.values(s)));let c=buildEventActionsFromYaml(t,a),l=t.events?.router,u=o(t.events?.externalAccountIdExtractor)?parseAction(t,[`events`,`externalAccountIdExtractor`],buildActionId(t.info.key,t.events.externalAccountIdExtractor.actionId),t.events.externalAccountIdExtractor,a,void 0):void 0,d=t.events?.setup,f=o(d)?{isConsolidated:d.isConsolidated,creation:parseWebhookSetupPhase(`creation`,d.creation,a),activation:o(d.activation)?parseWebhookSetupPhase(`activation`,d.activation,a):void 0,deletion:parseWebhookSetupPhase(`deletion`,d.deletion,a)}:void 0;if((o(c)||o(l)||o(u)||o(f))&&(r.events={setup:f,actions:c,router:l,externalAccountIdExtractor:u}),o(l)){let e=Object.keys(r.events?.actions??{}),n=t.info.key,i=l.rules.map(e=>e.then.action);for(let t of i){let r=t.startsWith(`${n}_`)?t:`${n}_${t}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(t)}}return r}catch(e){if(e instanceof z)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(Array.isArray(r))t[n]=r;else 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)},parseScopesString=e=>o(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,t,r)=>{if(n(e))return e;let i=e.guides;if(n(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,t,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,t,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},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],_=parseScopesString(h);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=o(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,c,`support`]):void 0,b=o(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...o(b)?{support:b}:{},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)=>(P(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},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!A(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)}}},validateActionRuleFieldReferences=(e,t,n,r)=>{if(!n||n.length===0)return;let i=new Set(r.map(e=>e.name)),a=[];for(let r of n){let n=[];switch(r.rule){case`atLeastOneOf`:case`mutuallyExclusive`:n.push(...r.fields);break;case`requiredIf`:n.push(r.field,r.condition.field);break}for(let o of n)i.has(o)||a.push({message:`Validation rule '${r.rule}' in action '${e}' references unknown field '${o}'`,path:[...t,`validationRules`],keys:[o]})}if(a.length>0)throw new SchemaValidationError(a)},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),validateActionRuleFieldReferences(n,t,r.validationRules,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=parseScopesString(r.requiredScopes);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),requiredScopes:p,inputs:l,validationRules:r.validationRules,steps:parseSteps({kind:`action`,actionId:r.actionId},r.steps,i,n=>n.functionName!==`map_fields`&&n.functionName!==`typecast`?{}:parseFieldConfigs(e,t,n.parameters?.fields??r.fieldConfigs)??{}),result:r.result,dataSync:r.dataSync}},parseWebhookSetupPhase=(e,t,n)=>({steps:parseSteps({kind:`setupPhase`,phase:e},t.steps,n),result:t.result}),parseSteps=(e,t,n,r)=>t.reduce((t,i)=>{let parseStepFunctionMeta=e=>{let{customErrors:t,...i}=e.parameters??{},a=r?.(e)??{};return{functionName:e.functionName,version:e.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:e.functionName,baseRequestParams:n,customErrors:t}),...a,...i}}},a={id:i.stepId,description:i.description,condition:i.condition,ignoreError:i.ignoreError};if(`iterator`in i&&i.iterator){if(`stepFunction`in i&&i.stepFunction){let n={...a,iterator:i.iterator,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}else if(`stepFunctions`in i&&i.stepFunctions){let n={...a,iterator:i.iterator,stepFunctions:i.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(e,n),t[i.stepId]=n}}else if(`stepFunction`in i&&i.stepFunction){let n={...a,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}return t},{}),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=parseScopesString(e.requiredScopes);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),i={...r.headers??{},...r.query??{},...r.path??{},...r.body??{}};return e.validationRules&&e.validationRules.length>0&&validateActionRules(e.validationRules,i,e.inputs),i},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=E(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)},Ee={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uri:/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/},applyInputRules=(e,t,n)=>{let r=t.errorMessage;if(n===`string`||n===`datetime_string`){let n=e;if(t.minLength!==void 0&&(n=n.min(t.minLength,r)),t.maxLength!==void 0&&(n=n.max(t.maxLength,r)),t.pattern!==void 0&&(n=n.regex(new RegExp(t.pattern),r)),t.format!==void 0){let e=Ee[t.format];e&&(n=n.regex(e,r??`Must be a valid ${t.format}`))}return n}if(n===`number`){let n=e;return t.min!==void 0&&(n=n.min(t.min,r)),t.max!==void 0&&(n=n.max(t.max,r)),n}return e},validateActionRules=(e,t,n)=>{let r=[],i={};if(n)for(let e of n)i[e.name]=e.in;let fieldPath=e=>{let t=i[e];return t?[t,e]:[e]};for(let n of e)switch(n.rule){case`atLeastOneOf`:if(!n.fields.some(e=>t[e]!==void 0&&t[e]!==null))for(let e of n.fields)r.push({code:`custom`,message:n.errorMessage??`At least one of [${n.fields.join(`, `)}] is required`,path:fieldPath(e),input:t});break;case`requiredIf`:{let e=t[n.condition.field],i=!1;if(n.condition.equals!==void 0)i=String(e)===n.condition.equals;else if(n.condition.notEquals!==void 0)i=String(e)!==n.condition.notEquals;else if(n.condition.present!==void 0){let t=e!=null;i=n.condition.present?t:!t}i&&(t[n.field]===void 0||t[n.field]===null)&&r.push({code:`custom`,message:n.errorMessage??`Field "${n.field}" is required when condition is met`,path:fieldPath(n.field),input:t});break}case`mutuallyExclusive`:{let e=n.fields.filter(e=>t[e]!==void 0&&t[e]!==null);if(e.length>1)for(let i of e)r.push({code:`custom`,message:n.errorMessage??`Fields [${n.fields.join(`, `)}] are mutually exclusive`,path:fieldPath(i),input:t});break}}if(r.length>0)throw new s.ZodError(r)},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.rules&&(t=applyInputRules(t,e.rules,e.type)),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}},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`||e===`upload_binary`){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},isCustomConnector=e=>o(e.owner)&&e.owner!==`stackone`,isConnectorReleased=(e,t=[])=>isCustomConnector(e)||isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(isCustomConnector(e))return{...e,actions:e.actions??{}};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:getErrorLineNumberInSteps(t.location,t.stepId,t.functionName,!1,e),message:t.message,field:stepLocationField(t.location)}]};else if(t instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:t.message,field:`events.router`}]};else if(t instanceof InvalidStepFunctionParamsError){let r=t.issues,i=[],a=stepLocationFieldPrefix(t.location);return r.forEach(r=>{let o=r?.keys?.[0],s=n(o)?r.path:[...r.path,o],c=getErrorLineNumberInSteps(t.location,t.stepId,t.functionName,!0,e);i.push({line:c,message:r.message,field:`${a}${s.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 z=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 z{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends z{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}};const formatStepLocation=e=>e.kind===`action`?`action '${e.actionId}'`:`webhook setup phase '${e.phase}'`;var InvalidStepFunctionError=class extends z{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends z{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 ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends z{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 z{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}},InvalidEventRouterReferenceError=class extends z{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends z{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`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event 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.`}}),te=c({type:s.literal(`cursor`),response:c({dataKey:s.string(),nextKey:s.string()}),iterator:c({key:s.string(),in:s.enum([`query`,`body`,`headers`])}),stopCondition:s.string().optional()}),ne=c({type:s.literal(`offset`),response:c({dataKey:s.string()}),iterator:c({offsetKey:s.string(),limitKey:s.string(),in:s.enum([`query`,`body`,`headers`]),defaultLimit:s.number().optional()}),stopCondition:s.string().optional()}),re=c({type:s.literal(`page`),response:c({dataKey:s.string()}),iterator:c({pageKey:s.string(),pageSizeKey:s.string().optional(),in:s.enum([`query`,`body`,`headers`]),startPage:s.number().optional(),defaultPageSize:s.number().optional()}),stopCondition:s.string().optional()}),ie=s.discriminatedUnion(`type`,[te,ne,re]),B={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),externalSystemAccountIdentifier:s.boolean().optional(),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional(),value:s.string().optional(),computed:s.boolean().optional()},V=s.discriminatedUnion(`type`,[c({...B,type:s.enum([`text`,`password`])}),c({...B,type:s.literal(`select`),options:c({value:s.string(),label:s.string()}).array()})]).superRefine((e,t)=>{e.computed===!0&&!e.value&&t.addIssue({code:s.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),H=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(()=>H).array().optional(),requiredScopes:s.string().optional()}),ae=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),oe=c({minLength:s.number().optional(),maxLength:s.number().optional(),pattern:s.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:s.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:s.number().optional(),max:s.number().optional(),errorMessage:s.string().optional()}),se=c({field:s.string(),equals:s.string().optional(),notEquals:s.string().optional(),present:s.boolean().optional()}).refine(e=>[e.equals!==void 0,e.notEquals!==void 0,e.present!==void 0].filter(Boolean).length===1,{message:`Condition must specify exactly one of: equals, notEquals, present`}),ce=s.discriminatedUnion(`rule`,[c({rule:s.literal(`atLeastOneOf`),fields:s.string().array().min(2),errorMessage:s.string().optional()}),c({rule:s.literal(`requiredIf`),field:s.string(),condition:se,errorMessage:s.string().optional()}),c({rule:s.literal(`mutuallyExclusive`),fields:s.string().array().min(2),errorMessage:s.string().optional()})]),U=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(()=>U.omit({in:!0})).array().optional(),oneOf:ae.optional(),rules:oe.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'`}).refine(e=>e.rules&&(e.rules.minLength!==void 0||e.rules.maxLength!==void 0||e.rules.pattern!==void 0||e.rules.format!==void 0)?e.type===`string`||e.type===`datetime_string`:!0,{message:`String rules (minLength, maxLength, pattern, format) can only be used with string or datetime_string types`}).refine(e=>e.rules&&(e.rules.min!==void 0||e.rules.max!==void 0)?e.type===`number`:!0,{message:`Number rules (min, max) can only be used with number type`}),le=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`}),ue=c({allowed:s.boolean(),indexField:s.string().or(s.string().array()),pagination:ie.optional()}),de=c({rules:c({when:s.string(),then:c({action:s.string(),input:s.record(s.string(),s.unknown()).optional()})}).array()}),q=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`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:le.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:U.array().optional(),validationRules:ce.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(),fieldConfigs:H.array().optional(),steps:s.union([G,K]).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional(),dataSync:ue.optional(),providerEvents:s.string().array().nonempty().optional()}),fe=c({schedule:s.string().optional(),action:q.extend({actionType:s.literal(`refresh_token`)})}),pe=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()}),me=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),J=c({src:s.string(),alt:s.string()}),he=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:J.optional(),displayScopes:s.boolean().optional(),applicableScopes:s.string().optional()}),ge=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:J.optional(),steps:he.array().optional(),applicableScopes:s.string().optional()}),Y=c({warning:s.string().optional(),sections:ge.array()}),_e=c({config:Y.optional(),setup:Y.optional()}),ve=c({certs:s.string().array().optional(),keys:s.string().array().optional()}).optional(),X=c({label:s.string(),authorization:m,certificates:ve,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:_e.optional()}).optional(),configFields:V.array().optional(),setupFields:V.array().optional(),refreshAuthentication:fe.optional(),testActions:c({action:s.string().or(q),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),ye=X.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),be=X.extend({type:s.literal(`custom`)}),xe=X.extend({type:s.literal(`oidc`)}),Se=s.discriminatedUnion(`type`,[ye,be,xe]),Z=c({steps:s.union([G,K]).array().min(1),result:s.string().optional()}),Ce=Z.extend({result:s.string()}),phaseContainsTemplate=(e,t)=>{let containsTemplate=e=>typeof e==`string`?e.includes(t):Array.isArray(e)?e.some(containsTemplate):typeof e==`object`&&e?Object.values(e).some(containsTemplate):!1;return e.steps.some(e=>`stepFunction`in e&&e.stepFunction?containsTemplate(e.stepFunction.parameters):`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>containsTemplate(e.parameters)):!1)},we=c({setup:c({creation:Ce,activation:Z.optional(),deletion:Z,isConsolidated:s.boolean().optional().default(!1)}).superRefine((e,t)=>{e.activation&&!phaseContainsTemplate(e.activation,"${inputs.remoteId}")&&t.addIssue({code:s.ZodIssueCode.custom,message:"Activation phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`activation`]}),phaseContainsTemplate(e.deletion,"${inputs.remoteId}")||t.addIssue({code:s.ZodIssueCode.custom,message:"Deletion phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`deletion`]})}).optional(),actions:q.extend({actionType:s.literal(`event`)}).array().optional(),router:de.optional(),externalAccountIdExtractor:q.extend({actionType:s.literal(`custom`),result:s.string().min(1)}).optional()}),Te=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(),events:we.optional(),rateLimit:pe.optional(),concurrency:me.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(Te,F(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);r.actions=s,hydrateTestActions(t,t.info.key,i,s,a),r.authentication=i,o(s)&&(r.categories=getConnectorCategoriesFromActions(Object.values(s)));let c=buildEventActionsFromYaml(t,a),l=t.events?.router,u=o(t.events?.externalAccountIdExtractor)?parseAction(t,[`events`,`externalAccountIdExtractor`],buildActionId(t.info.key,t.events.externalAccountIdExtractor.actionId),t.events.externalAccountIdExtractor,a,void 0):void 0,d=t.events?.setup,f=o(d)?{isConsolidated:d.isConsolidated,creation:parseWebhookSetupPhase(`creation`,d.creation,a),activation:o(d.activation)?parseWebhookSetupPhase(`activation`,d.activation,a):void 0,deletion:parseWebhookSetupPhase(`deletion`,d.deletion,a)}:void 0;if((o(c)||o(l)||o(u)||o(f))&&(r.events={setup:f,actions:c,router:l,externalAccountIdExtractor:u}),o(l)){let e=Object.keys(r.events?.actions??{}),n=t.info.key,i=l.rules.map(e=>e.then.action);for(let t of i){let r=t.startsWith(`${n}_`)?t:`${n}_${t}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(t)}}return r}catch(e){if(e instanceof z)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(Array.isArray(r))t[n]=r;else 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)},parseScopesString=e=>o(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,t,r)=>{if(n(e))return e;let i=e.guides;if(n(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,t,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,t,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},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],_=parseScopesString(h);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=o(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,c,`support`]):void 0,b=o(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...o(b)?{support:b}:{},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)=>(P(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},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!A(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)}}},validateActionRuleFieldReferences=(e,t,n,r)=>{if(!n||n.length===0)return;let i=new Set(r.map(e=>e.name)),a=[];for(let r of n){let n=[];switch(r.rule){case`atLeastOneOf`:case`mutuallyExclusive`:n.push(...r.fields);break;case`requiredIf`:n.push(r.field,r.condition.field);break}for(let o of n)i.has(o)||a.push({message:`Validation rule '${r.rule}' in action '${e}' references unknown field '${o}'`,path:[...t,`validationRules`],keys:[o]})}if(a.length>0)throw new SchemaValidationError(a)},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),validateActionRuleFieldReferences(n,t,r.validationRules,l);let u=getEntrypointHttpMethod(r),d=new Set(Object.keys(e.scopeDefinitions||{})),f=[],p=parseScopesString(r.requiredScopes);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),requiredScopes:p,inputs:l,validationRules:r.validationRules,steps:parseSteps({kind:`action`,actionId:r.actionId},r.steps,i,n=>n.functionName!==`map_fields`&&n.functionName!==`typecast`?{}:parseFieldConfigs(e,t,n.parameters?.fields??r.fieldConfigs)??{}),result:r.result,dataSync:r.dataSync,providerEvents:r.providerEvents}},parseWebhookSetupPhase=(e,t,n)=>({steps:parseSteps({kind:`setupPhase`,phase:e},t.steps,n),result:t.result}),parseSteps=(e,t,n,r)=>t.reduce((t,i)=>{let parseStepFunctionMeta=e=>{let{customErrors:t,...i}=e.parameters??{},a=r?.(e)??{};return{functionName:e.functionName,version:e.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:e.functionName,baseRequestParams:n,customErrors:t}),...a,...i}}},a={id:i.stepId,description:i.description,condition:i.condition,ignoreError:i.ignoreError};if(`iterator`in i&&i.iterator){if(`stepFunction`in i&&i.stepFunction){let n={...a,iterator:i.iterator,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}else if(`stepFunctions`in i&&i.stepFunctions){let n={...a,iterator:i.iterator,stepFunctions:i.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(e,n),t[i.stepId]=n}}else if(`stepFunction`in i&&i.stepFunction){let n={...a,stepFunction:parseStepFunctionMeta(i.stepFunction)};validateStep(e,n),t[i.stepId]=n}return t},{}),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=parseScopesString(e.requiredScopes);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),i={...r.headers??{},...r.query??{},...r.path??{},...r.body??{}};return e.validationRules&&e.validationRules.length>0&&validateActionRules(e.validationRules,i,e.inputs),i},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=E(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)},Ee={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uri:/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/},applyInputRules=(e,t,n)=>{let r=t.errorMessage;if(n===`string`||n===`datetime_string`){let n=e;if(t.minLength!==void 0&&(n=n.min(t.minLength,r)),t.maxLength!==void 0&&(n=n.max(t.maxLength,r)),t.pattern!==void 0&&(n=n.regex(new RegExp(t.pattern),r)),t.format!==void 0){let e=Ee[t.format];e&&(n=n.regex(e,r??`Must be a valid ${t.format}`))}return n}if(n===`number`){let n=e;return t.min!==void 0&&(n=n.min(t.min,r)),t.max!==void 0&&(n=n.max(t.max,r)),n}return e},validateActionRules=(e,t,n)=>{let r=[],i={};if(n)for(let e of n)i[e.name]=e.in;let fieldPath=e=>{let t=i[e];return t?[t,e]:[e]};for(let n of e)switch(n.rule){case`atLeastOneOf`:if(!n.fields.some(e=>t[e]!==void 0&&t[e]!==null))for(let e of n.fields)r.push({code:`custom`,message:n.errorMessage??`At least one of [${n.fields.join(`, `)}] is required`,path:fieldPath(e),input:t});break;case`requiredIf`:{let e=t[n.condition.field],i=!1;if(n.condition.equals!==void 0)i=String(e)===n.condition.equals;else if(n.condition.notEquals!==void 0)i=String(e)!==n.condition.notEquals;else if(n.condition.present!==void 0){let t=e!=null;i=n.condition.present?t:!t}i&&(t[n.field]===void 0||t[n.field]===null)&&r.push({code:`custom`,message:n.errorMessage??`Field "${n.field}" is required when condition is met`,path:fieldPath(n.field),input:t});break}case`mutuallyExclusive`:{let e=n.fields.filter(e=>t[e]!==void 0&&t[e]!==null);if(e.length>1)for(let i of e)r.push({code:`custom`,message:n.errorMessage??`Fields [${n.fields.join(`, `)}] are mutually exclusive`,path:fieldPath(i),input:t});break}}if(r.length>0)throw new s.ZodError(r)},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.rules&&(t=applyInputRules(t,e.rules,e.type)),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}},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`||e===`upload_binary`){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},isCustomConnector=e=>o(e.owner)&&e.owner!==`stackone`,isConnectorReleased=(e,t=[])=>isCustomConnector(e)||isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(isCustomConnector(e))return{...e,actions:e.actions??{}};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:getErrorLineNumberInSteps(t.location,t.stepId,t.functionName,!1,e),message:t.message,field:stepLocationField(t.location)}]};else if(t instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:t.message,field:`events.router`}]};else if(t instanceof InvalidStepFunctionParamsError){let r=t.issues,i=[],a=stepLocationFieldPrefix(t.location);return r.forEach(r=>{let o=r?.keys?.[0],s=n(o)?r.path:[...r.path,o],c=getErrorLineNumberInSteps(t.location,t.stepId,t.functionName,!0,e);i.push({line:c,message:r.message,field:`${a}${s.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},stepLocationField=e=>e.kind===`action`?void 0:`events.setup.${e.phase}`,stepLocationFieldPrefix=e=>e.kind===`action`?``:`events.setup.${e.phase}.`,ownerMarkersFor=e=>e.kind===`action`?[`- actionId: ${e.actionId}`]:[`setup:`,`${e.phase}:`],getErrorLineNumberInSteps=(e,t,n,r,i)=>{let a=i.split(`
6
- `),o=ownerMarkersFor(e),s=0,c=!1,l=1;for(let e=0;e<a.length;e++){let i=a[e].trim();if(s<o.length){i===o[s]&&(s++,l=e+1);continue}if(!c){i===`- stepId: ${t}`&&(c=!0,l=e+1);continue}if(!r&&i.includes(`functionName: ${n}`)||r&&i===`parameters:`)return e+1}return l};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`}},InvalidEventOutputError=class extends Q{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};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,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t]?.production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),buildActionMeta=(e,t,n)=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,authentication:t,...e.tags?{tags:e.tags}:{},...e.requiredScopes?{required_scopes:e.requiredScopes}:{},...e.releaseStage?{release_stage:e.releaseStage}:{},...n?.includes(`action_details`)?{action_details:e}:{}}),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e.actions??{}).length,getEventActionsMeta=e=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e.actions??{}).map(e=>buildActionMeta(e,r,t)),a=getScopeDefinitions(e),o=getEventActionsMeta(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,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionMeta=(e,t,n)=>{let r=e.actions?.[t];if(r)return buildActionMeta(r,getActionAuthenticationMethods(e),n)},getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(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),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>w(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,connectorOwner:i,authConfigKey:a,environment:o=`production`,action:s,accountSecureId:c,projectSecureId:l,organizationId:u,originOwnerId:d,originOwnerName:f,sourceType:p,sourceId:m,sourceValue:h,flowType:g})=>({organizationId:u,projectSecureId:l,accountSecureId:c,connectorKey:n,connectorVersion:r,connectorOwner:i,category:e,service:``,resource:``,originOwnerId:d,originOwnerName:f,source:{sourceType:p,sourceId:m,sourceValue:h},schema:s?.schema?.key,actionType:s?.actionType??`unknown`,authenticationType:a,environment:o,actionRunId:t(),flowType:g}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const 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=S(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=C(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)=>D(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return C({key:e,value:t},{version:h})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>a(t)&&t.length>0&&!D(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=C({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=O({cursor:a,ignoreStepIndex:c});if(!i(e)||n(s)||(s?.length??0)<=t)return{result:e,next:o(a)&&!l?j(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=M({cursor:a,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?j(h):null}},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?!L(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=async(e,t,n,r,i,a,o,s)=>{let c=await 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];return shouldSkipStepDueToCondition(c,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`,startTime:s,endTime:s}):i.hasFatalError?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`,startTime:s,endTime:s}):k(c)?executeForeachStep(e,t,c,r,i,a,o):executeSimpleStep(e,t,c,r,i,a,o)},executeSimpleStep=async(e,t,n,r,i,a,o)=>{let s=new Date,c=n.stepFunction;if(!c)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`,startTime:s,endTime:new Date});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 await handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?await 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,await 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".`,startTime:s,endTime:new Date}));let d=r.action?.cursor.enabled?M({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return await 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=L(n.iterator,r);if(!Array.isArray(l))return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`,startTime:c,endTime:c});let u=getStepFunctionsToExecute(n);if(u.length===0)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`,startTime:c,endTime:new Date});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}},await 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.`}},await addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`,startTime:c,endTime:new Date})}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?M({cursor:r.nextCursor,stepIndex:t,providerPageCursor:p?.output?.next,position:p?.output?.position}):void 0,g={block:f,successful:!0,output:{data:d}};return await 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??N?.[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??N?.[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)=>{let n=x(t);return i(e)?R(e,n):L(e,n)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,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,statistics:{startTime:s,endTime:c}}}}),getOlapOptions=e=>{let t=e?.olap;if(n(t))return{};let r=t.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=t.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},De={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},applyDefenderToBlock=async(e,t,n,r)=>{if(!n?.defender?.enabled)return e;let{defenderMetadata:i,outputs:a,response:s}=await t({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:n,logger:r});return{...e,defenderMetadata:i,...o(a)&&{outputs:a},...o(s)&&{response:s}}},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,applyDefenderFn:g=applyDefender,mode:_,account:v,connector:y,getHttpClient:b,getOlapClient:x,settings:S,source:C,logger:w,category:T,...E}=e,D=v.authConfigKey,O=v.environment??`production`,k=v.secureId,A=v.projectSecureId,j=v.organizationId,M=v.credentials,N=v.originOwnerId,P=v.originOwnerName,F=u({category:T??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,connectorOwner:v.connectorOwner,authConfigKey:D,environment:O,accountSecureId:k,projectSecureId:A,organizationId:j,originOwnerId:N,originOwnerName:P,sourceType:C?.sourceType,sourceId:C?.sourceId,sourceValue:C?.sourceValue,flowType:De[_]}),I=new Date,L;try{L=a(y)?c(y):y}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let R={connector:L,context:F,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:a}=E,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=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(_===`test_actions`){let t=h(L,D,O);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)||ee(r.condition,i)))continue;let a=await f({block:i});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(n(a?.response?.successful)||!a.response.successful)&&r.required){w?.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},await recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},await 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(_===`refresh_authentication`){let t=m(L,D,O);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=await applyDefenderToBlock(a,g,S,w),a.statistics={startTime:I,endTime:new Date},await recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(_===`path`){let{path:t,method:a}=E,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=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await 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`?T(n):void 0;if(r===null)throw new InvalidCursorError(t,`Invalid cursor.`);return r},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await I({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useSfe:r?.defender?.useSfe??!0,tier2Fields:r?.defender?.tier2Fields,annotateBoundary:r?.defender?.annotateBoundary??!1,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=async({action:e,actionParams:t,resultBlock:r})=>{if(n(e)){t.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if(n(i)){t.logger?.warning({message:`olap client is missing, skipping recording action result`});return}let a=getOlapOptions(t.settings),s={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,startTime:r.statistics?.startTime},c=r.context,l={actionRunId:c.actionRunId||`missing`,actionId:e.id,connectorKey:c.connectorKey,connectorVersion:c.connectorVersion,actionType:c.actionType,category:c.category,organizationId:t.account.organizationId,projectSecureId:c.projectSecureId,accountSecureId:c.accountSecureId,originOwnerId:c.originOwnerId,originOwnerName:c.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful??!1,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata};try{await i.recordAction(s,l,a);let u=e.steps||{},d=Object.keys(u).map((e,i)=>{let a=r.steps?.[e];return n(a)?null:{input:{actionRunId:l.actionRunId,actionMode:s.mode,actionSuccess:l.success,stepIndex:i,stepId:e,organizationId:t.account.organizationId,projectSecureId:c.projectSecureId,accountSecureId:c.accountSecureId,inputs:r.inputs},result:{success:a.successful,message:a.message,outputs:a.output,errors:a.errors,skipped:a.skipped,startTime:a.statistics?.startTime,endTime:a.statistics?.endTime}}}).filter(o);d.length>0&&await i.recordSteps(d,a)}catch(e){t.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:t,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:t.providerKey,connectorVersion:t.providerVersion,authConfigKey:t.authConfigKey,environment:t.environment??`production`,accountSecureId:t.secureId,projectSecureId:t.projectSecureId,organizationId:t.organizationId,originOwnerId:t.originOwnerId,originOwnerName:t.originOwnerName,connectorOwner:t.connectorOwner,flowType:`action`}),g=u(r,e);if(n(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1,phaseKindToActionType=e=>e===`deletion`?`delete`:`create`,phaseAsAction=(e,t)=>({id:`webhook-setup-${t}`,categories:[],label:`Webhook Setup ${t}`,description:`Webhook setup ${t} phase execution`,schemaType:`native`,actionType:phaseKindToActionType(t),steps:e.steps,result:e.result,responses:{success:{statusCode:200},errors:{}},cursor:{enabled:!1,pageSize:0},compositeIdentifiers:{enabled:!1}}),runWebhookSetupPhase=async({connector:e,phase:t,phaseKind:r,inputs:i,credentials:a,accountSecureId:o,projectSecureId:s,organizationId:c,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,logger:p,getHttpClient:m,createBlockFn:h=createBlock,createBlockContextFn:g=createBlockContext,runStepActionFn:_=runStepAction})=>{let v=e.categories?.[0];if(n(v))throw Error(`Connector category is required for webhook setup phase execution (connector '${l}')`);let y=phaseAsAction(t,r),b=await _({block:await h({connector:e,inputs:i,credentials:a,context:g({category:v,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,action:y,accountSecureId:o,projectSecureId:s,organizationId:c,flowType:`action`}),action:y,logger:p,getHttpClient:m})});if(n(b.response))throw Error(`Webhook setup ${r} phase produced no response (connector '${l}')`);return{successful:b.response.successful,statusCode:b.response.statusCode,outputs:b.outputs}};export{Q as ConnectSDKError,InvalidActionInputsError,InvalidEventOutputError,applyReleaseStageToConnector,createBlock,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,formatValidationErrorResponse,getActionFromUrl,getActionMeta,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runEventActionById,runStepAction,runTestActions,runWebhookSetupPhase,supportsRefreshAuthentication,validateYamlConnector};
6
+ `),o=ownerMarkersFor(e),s=0,c=!1,l=1;for(let e=0;e<a.length;e++){let i=a[e].trim();if(s<o.length){i===o[s]&&(s++,l=e+1);continue}if(!c){i===`- stepId: ${t}`&&(c=!0,l=e+1);continue}if(!r&&i.includes(`functionName: ${n}`)||r&&i===`parameters:`)return e+1}return l};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`}},InvalidEventOutputError=class extends Q{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};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,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t]?.production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),buildActionMeta=(e,t,n)=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,authentication:t,...e.tags?{tags:e.tags}:{},...e.requiredScopes?{required_scopes:e.requiredScopes}:{},...e.releaseStage?{release_stage:e.releaseStage}:{},...n?.includes(`action_details`)?{action_details:e}:{}}),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e.actions??{}).length,getEventActionsMeta=e=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e.actions??{}).map(e=>buildActionMeta(e,r,t)),a=getScopeDefinitions(e),o=getEventActionsMeta(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,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionMeta=(e,t,n)=>{let r=e.actions?.[t];if(r)return buildActionMeta(r,getActionAuthenticationMethods(e),n)},getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(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),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>w(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,connectorOwner:i,connectorProfileId:a,authConfigKey:o,environment:s=`production`,action:c,accountSecureId:l,projectSecureId:u,organizationId:d,originOwnerId:f,originOwnerName:p,sourceType:m,sourceId:h,sourceValue:g,flowType:_})=>({organizationId:d,projectSecureId:u,accountSecureId:l,connectorKey:n,connectorVersion:r,connectorOwner:i,connectorProfileId:a,category:e,service:``,resource:``,originOwnerId:f,originOwnerName:p,source:{sourceType:m,sourceId:h,sourceValue:g},schema:c?.schema?.key,actionType:c?.actionType??`unknown`,authenticationType:o,environment:s,actionRunId:t(),flowType:_}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const 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=S(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=C(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)=>D(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return C({key:e,value:t},{version:h})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>a(t)&&t.length>0&&!D(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=C({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=O({cursor:a,ignoreStepIndex:c});if(!i(e)||n(s)||(s?.length??0)<=t)return{result:e,next:o(a)&&!l?j(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=M({cursor:a,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?j(h):null}},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?!L(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=async(e,t,n,r,i,a,o,s)=>{let c=await 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];return shouldSkipStepDueToCondition(c,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`,startTime:s,endTime:s}):i.hasFatalError?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`,startTime:s,endTime:s}):k(c)?executeForeachStep(e,t,c,r,i,a,o):executeSimpleStep(e,t,c,r,i,a,o)},executeSimpleStep=async(e,t,n,r,i,a,o)=>{let s=new Date,c=n.stepFunction;if(!c)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`,startTime:s,endTime:new Date});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 await handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?await 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,await 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".`,startTime:s,endTime:new Date}));let d=r.action?.cursor.enabled?M({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return await 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=L(n.iterator,r);if(!Array.isArray(l))return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`,startTime:c,endTime:c});let u=getStepFunctionsToExecute(n);if(u.length===0)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`,startTime:c,endTime:new Date});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}},await 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.`}},await addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`,startTime:c,endTime:new Date})}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?M({cursor:r.nextCursor,stepIndex:t,providerPageCursor:p?.output?.next,position:p?.output?.position}):void 0,g={block:f,successful:!0,output:{data:d}};return await 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??N?.[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??N?.[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)=>{let n=x(t);return i(e)?R(e,n):L(e,n)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,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,statistics:{startTime:s,endTime:c}}}}),getOlapOptions=e=>{let t=e?.olap;if(n(t))return{};let r=t.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=t.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},De={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},applyDefenderToBlock=async(e,t,n,r)=>{if(!n?.defender?.enabled)return e;let{defenderMetadata:i,outputs:a,response:s}=await t({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:n,logger:r});return{...e,defenderMetadata:i,...o(a)&&{outputs:a},...o(s)&&{response:s}}},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,applyDefenderFn:g=applyDefender,mode:_,account:v,connector:y,getHttpClient:b,getOlapClient:x,settings:S,source:C,logger:w,category:T,...E}=e,D=v.authConfigKey,O=v.environment??`production`,k=v.secureId,A=v.projectSecureId,j=v.organizationId,M=v.credentials,N=v.originOwnerId,P=v.originOwnerName,F=u({category:T??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,connectorOwner:v.connectorOwner,connectorProfileId:v.connectorProfileId,authConfigKey:D,environment:O,accountSecureId:k,projectSecureId:A,organizationId:j,originOwnerId:N,originOwnerName:P,sourceType:C?.sourceType,sourceId:C?.sourceId,sourceValue:C?.sourceValue,flowType:De[_]}),I=new Date,L;try{L=a(y)?c(y):y}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let R={connector:L,context:F,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:a}=E,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=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(_===`test_actions`){let t=h(L,D,O);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)||ee(r.condition,i)))continue;let a=await f({block:i});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(n(a?.response?.successful)||!a.response.successful)&&r.required){w?.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},await recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},await 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(_===`refresh_authentication`){let t=m(L,D,O);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=await applyDefenderToBlock(a,g,S,w),a.statistics={startTime:I,endTime:new Date},await recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(_===`path`){let{path:t,method:a}=E,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=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await 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`?T(n):void 0;if(r===null)throw new InvalidCursorError(t,`Invalid cursor.`);return r},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await I({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useSfe:r?.defender?.useSfe??!0,tier2Fields:r?.defender?.tier2Fields,annotateBoundary:r?.defender?.annotateBoundary??!1,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=async({action:e,actionParams:t,resultBlock:r})=>{if(n(e)){t.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if(n(i)){t.logger?.warning({message:`olap client is missing, skipping recording action result`});return}let a=getOlapOptions(t.settings),s={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,startTime:r.statistics?.startTime},c=r.context,l={actionRunId:c.actionRunId||`missing`,actionId:e.id,connectorKey:c.connectorKey,connectorVersion:c.connectorVersion,connectorOwner:c.connectorOwner,connectorProfileId:c.connectorProfileId,actionType:c.actionType,category:c.category,organizationId:t.account.organizationId,projectSecureId:c.projectSecureId,accountSecureId:c.accountSecureId,originOwnerId:c.originOwnerId,originOwnerName:c.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful??!1,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata};try{await i.recordAction(s,l,a);let u=e.steps||{},d=Object.keys(u).map((e,i)=>{let a=r.steps?.[e];return n(a)?null:{input:{actionRunId:l.actionRunId,actionMode:s.mode,actionSuccess:l.success,stepIndex:i,stepId:e,organizationId:t.account.organizationId,projectSecureId:c.projectSecureId,accountSecureId:c.accountSecureId,inputs:r.inputs},result:{success:a.successful,message:a.message,outputs:a.output,errors:a.errors,skipped:a.skipped,startTime:a.statistics?.startTime,endTime:a.statistics?.endTime}}}).filter(o);d.length>0&&await i.recordSteps(d,a)}catch(e){t.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:t,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:t.providerKey,connectorVersion:t.providerVersion,authConfigKey:t.authConfigKey,environment:t.environment??`production`,accountSecureId:t.secureId,projectSecureId:t.projectSecureId,organizationId:t.organizationId,originOwnerId:t.originOwnerId,originOwnerName:t.originOwnerName,connectorOwner:t.connectorOwner,flowType:`action`}),g=u(r,e);if(n(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1,phaseKindToActionType=e=>e===`deletion`?`delete`:`create`,phaseAsAction=(e,t)=>({id:`webhook-setup-${t}`,categories:[],label:`Webhook Setup ${t}`,description:`Webhook setup ${t} phase execution`,schemaType:`native`,actionType:phaseKindToActionType(t),steps:e.steps,result:e.result,responses:{success:{statusCode:200},errors:{}},cursor:{enabled:!1,pageSize:0},compositeIdentifiers:{enabled:!1}}),runWebhookSetupPhase=async({connector:e,phase:t,phaseKind:r,inputs:i,credentials:a,accountSecureId:o,projectSecureId:s,organizationId:c,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,logger:p,getHttpClient:m,createBlockFn:h=createBlock,createBlockContextFn:g=createBlockContext,runStepActionFn:_=runStepAction})=>{let v=e.categories?.[0];if(n(v))throw Error(`Connector category is required for webhook setup phase execution (connector '${l}')`);let y=phaseAsAction(t,r),b=await _({block:await h({connector:e,inputs:i,credentials:a,context:g({category:v,connectorKey:l,connectorVersion:u,authConfigKey:d,environment:f,action:y,accountSecureId:o,projectSecureId:s,organizationId:c,flowType:`action`}),action:y,logger:p,getHttpClient:m})});if(n(b.response))throw Error(`Webhook setup ${r} phase produced no response (connector '${l}')`);return{successful:b.response.successful,statusCode:b.response.statusCode,outputs:b.outputs}};export{Q as ConnectSDKError,InvalidActionInputsError,InvalidEventOutputError,applyReleaseStageToConnector,createBlock,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,formatValidationErrorResponse,getActionFromUrl,getActionMeta,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runEventActionById,runStepAction,runTestActions,runWebhookSetupPhase,supportsRefreshAuthentication,validateYamlConnector};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/connect-sdk",
3
- "version": "2.62.0",
3
+ "version": "2.64.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",