@stackone/connect-sdk 2.79.0 → 2.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});let t=require(`@stackone/utils`),n=require(`path-to-regexp`),r=require(`fs`),i=require(`path`),a=require(`@stackone/core`),o=require(`@stackone/transport`),s=require(`yaml`),c=require(`@stackone/expressions`),l=require(`@stackone/defender`);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().replace(/\{([^}]+)\}/g,`:$1`)))(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`,`stringify`]).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()),dataKey:t.z.string().optional(),pagination:h.optional(),maxPages:t.z.number().int().positive().optional(),maxDurationMinutes:t.z.number().int().positive().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`]),executionMode:t.z.enum(a.ExecutionModes).optional(),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()}),stepUsesBrowserUse=e=>`stepFunction`in e&&e.stepFunction?.functionName===a.StepFunctionName.BROWSER_USE?!0:`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>e.functionName===a.StepFunctionName.BROWSER_USE):!1,j=A.superRefine((e,n)=>{e.executionMode!==`async`&&e.steps.some(stepUsesBrowserUse)&&n.addIssue({code:t.z.ZodIssueCode.custom,message:`Actions containing a 'browser_use' step must declare executionMode: 'async' so they are dispatched to the Temporal workflow runtime`,path:[`executionMode`]})}),M=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:A.extend({actionType:t.z.literal(`refresh_token`)})}),N=(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()}),P=(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()}),F=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),I=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:F.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),L=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:F.optional(),steps:I.array().optional(),applicableScopes:t.z.string().optional()}),R=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:L.array()}),z=(0,t.zStrictObject)({config:R.optional(),setup:R.optional()}),B=(0,t.zStrictObject)({key:t.z.string(),type:t.z.enum([`warning`,`info`]).default(`info`),description:t.z.string(),position:t.z.enum([`top`,`bottom`]).default(`top`),anchor:t.z.string().optional()}).refine(e=>!(e.anchor&&e.position===`bottom`),{message:`anchor cannot be used with position: 'bottom'`,path:[`anchor`]}),V=(0,t.zStrictObject)({certs:t.z.string().array().optional(),keys:t.z.string().array().optional()}).optional(),H=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,certificates:V,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:z.optional()}).optional(),configFields:_.array().optional(),configNotices:B.array().optional(),setupFields:_.array().optional(),setupNotices:B.array().optional(),refreshAuthentication:M.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(j),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),U=H.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),W=H.extend({type:t.z.literal(`custom`)}),G=H.extend({type:t.z.literal(`oidc`)}),K=t.z.discriminatedUnion(`type`,[U,W,G]),q=(0,t.zStrictObject)({steps:t.z.union([E,D]).array().min(1),result:t.z.string().optional()}),J=q.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)},Y=(0,t.zStrictObject)({setup:(0,t.zStrictObject)({creation:J,activation:q.optional(),deletion:q,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`),requiresManualSetup:t.z.boolean().optional()}).array().optional(),router:k.optional(),externalAccountIdExtractor:A.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),ee=(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(),documentation:(0,t.zStrictObject)({references:(0,t.zStrictObject)({title:t.z.string(),url:t.z.string(),description:t.z.string().optional()}).array()}).optional(),baseUrl:t.z.string(),scopeDefinitions:t.z.record(t.z.string(),(0,t.zStrictObject)({description:t.z.string(),includes:t.z.string().optional()})).optional(),authentication:t.z.record(t.z.string(),K).array().optional(),actions:j.array().optional(),events:Y.optional(),rateLimit:N.optional(),concurrency:P.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),te=`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(ee,(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,documentation:n.documentation,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))t[n]={name:n,description:r.description,includes:parseScopesString(r?.includes)};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,setupNotices:i,configFields:a,configNotices:o,support:s,refreshAuthentication:c,testActions:l,requiredScopes:u,...d}=r;t[n]=stripAuthenticationSetup(d)}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)},ne=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!(0,t.notMissing)(e))return;let n=[];for(let t of e.matchAll(ne)){let e=(t[1]??t[2])?.trim();e&&e.length>0&&n.push(e)}return n},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)},validateDataSyncPaginationKeys=(e,t,n,r)=>{let i=n?.pagination;if(!i)return;let o=(0,a.getIteratorLocation)(i),s=(0,a.getPaginationKeys)(i);if(!o||s.length===0)return;let c=new Set(r.filter(e=>e.in===o).map(e=>e.name)),l=[];for(let n of s)c.has(n)||l.push({message:`Pagination iterator references key '${n}' in '${o}', but no input with that name and location is declared on action '${e}'.`,path:[...t,`dataSync`,`pagination`,`iterator`],keys:[n]});if(l.length>0)throw new SchemaValidationError(l)},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),validateDataSyncPaginationKeys(n,t,r.dataSync,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,executionMode:r.executionMode,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,requiresManualSetup:r.requiresManualSetup}},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)},re={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=re[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`,`stringify`]).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()),dataKey:t.z.string().optional(),pagination:h.optional(),maxPages:t.z.number().int().positive().optional(),maxDurationMinutes:t.z.number().int().positive().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`]),executionMode:t.z.enum(a.ExecutionModes).optional(),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()}),stepUsesBrowserUse=e=>`stepFunction`in e&&e.stepFunction?.functionName===a.StepFunctionName.BROWSER_USE?!0:`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>e.functionName===a.StepFunctionName.BROWSER_USE):!1,j=A.superRefine((e,n)=>{e.executionMode!==`async`&&e.steps.some(stepUsesBrowserUse)&&n.addIssue({code:t.z.ZodIssueCode.custom,message:`Actions containing a 'browser_use' step must declare executionMode: 'async' so they are dispatched to the Temporal workflow runtime`,path:[`executionMode`]})}),M=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:A.extend({actionType:t.z.literal(`refresh_token`)})}),N=(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()}),P=(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()}),F=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),I=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:F.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),L=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:F.optional(),steps:I.array().optional(),applicableScopes:t.z.string().optional()}),R=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:L.array()}),ee=(0,t.zStrictObject)({config:R.optional(),setup:R.optional()}),z=(0,t.zStrictObject)({key:t.z.string(),type:t.z.enum([`warning`,`info`]).default(`info`),description:t.z.string(),position:t.z.enum([`top`,`bottom`]).default(`top`),anchor:t.z.string().optional()}).refine(e=>!(e.anchor&&e.position===`bottom`),{message:`anchor cannot be used with position: 'bottom'`,path:[`anchor`]}),B=(0,t.zStrictObject)({certs:t.z.string().array().optional(),keys:t.z.string().array().optional()}).optional(),V=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,certificates:B,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:ee.optional()}).optional(),configFields:_.array().optional(),configNotices:z.array().optional(),setupFields:_.array().optional(),setupNotices:z.array().optional(),refreshAuthentication:M.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(j),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),H=V.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),U=V.extend({type:t.z.literal(`custom`)}),W=V.extend({type:t.z.literal(`oidc`)}),G=t.z.discriminatedUnion(`type`,[H,U,W]),K=(0,t.zStrictObject)({steps:t.z.union([E,D]).array().min(1),result:t.z.string().optional()}),q=K.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)},J=(0,t.zStrictObject)({setup:(0,t.zStrictObject)({creation:q,activation:K.optional(),deletion:K,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`),requiresManualSetup:t.z.boolean().optional()}).array().optional(),router:k.optional(),externalAccountIdExtractor:A.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),Y=(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(),documentation:(0,t.zStrictObject)({references:(0,t.zStrictObject)({title:t.z.string(),url:t.z.string(),description:t.z.string().optional()}).array()}).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(),G).array().optional(),actions:j.array().optional(),events:J.optional(),rateLimit:N.optional(),concurrency:P.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),te=`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(Y,(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,documentation:n.documentation,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))t[n]={name:n,description:r.description,includes:parseScopesString(r?.includes)};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,setupNotices:i,configFields:a,configNotices:o,support:s,refreshAuthentication:c,testActions:l,requiredScopes:u,...d}=r;t[n]=stripAuthenticationSetup(d)}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)},ne=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!(0,t.notMissing)(e))return;let n=[];for(let t of e.matchAll(ne)){let e=(t[1]??t[2])?.trim();e&&e.length>0&&n.push(e)}return n},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)},validateDataSyncPaginationKeys=(e,t,n,r)=>{let i=n?.pagination;if(!i)return;let o=(0,a.getIteratorLocation)(i),s=(0,a.getPaginationKeys)(i);if(!o||s.length===0)return;let c=new Set(r.filter(e=>e.in===o).map(e=>e.name)),l=[];for(let n of s)c.has(n)||l.push({message:`Pagination iterator references key '${n}' in '${o}', but no input with that name and location is declared on action '${e}'.`,path:[...t,`dataSync`,`pagination`,`iterator`],keys:[n]});if(l.length>0)throw new SchemaValidationError(l)},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),validateDataSyncPaginationKeys(n,t,r.dataSync,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,executionMode:r.executionMode,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,requiresManualSetup:r.requiresManualSetup}},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)},re={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=re[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 X=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 X{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends X{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends X{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends X{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends X{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};function buildInputs(e,t,n){let r=e[t],i=r&&typeof r==`object`&&!Array.isArray(r)?{...r,...n}:n;return{...e,[t]:i}}function extractData(e,n){let r=(0,t.getByDotPath)(n.outputs,e.response.dataKey);return Array.isArray(r)?r:r==null?[]:[r]}function isExhausted(e,t,n,r){let i=e.stopCondition??n;try{return!!(0,c.evaluate)(`{{ ${i} }}`,t.outputs)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to evaluate pagination stop condition on page ${r}: ${i}. ${t}`)}}function createCursorPaginator(e,{baseInputs:n={}}={}){let r=`${e.response.nextKey} == null`;return{config:e,computeNextInputs({previousResponse:r}){if(!r)return{...n};let i=(0,t.getByDotPath)(r.outputs,e.response.nextKey);return buildInputs(n,e.iterator.in,{[e.iterator.key]:i})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,r,n)}}function createOffsetPaginator(e,{baseInputs:t={}}={}){let n=e.iterator.defaultLimit??100,{in:r,offsetKey:i,limitKey:a}=e.iterator,o=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){return buildInputs(t,r,{[i]:e*n,[a]:n})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,o,n)}}function createPagePaginator(e,{baseInputs:t={}}={}){let n=e.iterator.startPage??1,r=e.iterator.defaultPageSize??100,{in:i,pageKey:a,pageSizeKey:o}=e.iterator,s=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){let s={[a]:n+e};return o&&(s[o]=r),buildInputs(t,i,s)},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,s,n)}}const ie={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=ie[e.type];return n(e,t)}const ae=`data`;function extractItems(e,n){let r=n.pagination?.response.dataKey??n.dataKey??`data`,i=(0,t.getByDotPath)(e.outputs,r);return Array.isArray(i)?i:i==null?[]:[i]}function assertSuccessful(e,t){if(e.response?.successful===!1)throw Error(`Action call failed on page ${t}: ${e.response.statusCode} ${e.response.message??``}`.trim())}const Z=1e4,Q=3e5;function hasExceededMaxIterations(e,t=Z){return e>=t}function hasExceededTimeout(e,t,n=Q){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,n,r={}){let i=r.maxIterations??Z,a=r.timeoutMs??Q,o=r.onPageComplete,s=r.now??Date.now,c=s(),l=[],u=0,d=null,f;for(;;){if(hasExceededMaxIterations(u,i))return{data:l,pagesRetrieved:u,stoppedBy:`maxIterations`};if(hasExceededTimeout(c,s(),a))return{data:l,pagesRetrieved:u,stoppedBy:`timeout`};let r=await n(e.computeNextInputs({previousResponse:f,currentIteration:u}));u++,assertSuccessful(r,u);let p=e.extractData(r),m=(0,t.getContentHash)(p);if(isDuplicatePage(m,d))return{data:l,pagesRetrieved:u,stoppedBy:`duplicatePage`};if(l.push(...p),d=m,f=r,o?.({pagesRetrieved:u,totalRecords:l.length}),e.isExhausted(r,u))return{data:l,pagesRetrieved:u,stoppedBy:`exhausted`}}}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.configNotices=r?.configNotices,i.setupFields=r?.setupFields,i.setupNotices=r?.setupNotices),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,t)=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage,...e.requiresManualSetup?{requires_manual_setup:!0}:{},authentication:t})),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,r);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,documentation:e.documentation}},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=getActionAuthenticationMethods(e),i=getScopeDefinitions(e),a=getEventActionsMeta(e,r);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:i.length>0?i:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:a.length>0?a: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)}},$=`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[`${$}${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($),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[`${$}${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,c.safeEvaluate)(e.condition,t):!1,buildStepParamsForFunction=(e,n,r)=>{let i=a.StepFunctionsRegistry[e.functionName]?.[`v${e.version??1}`],o=(0,t.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return n.action?.cursor.enabled&&o?{...e.params??{},cursor:{token:n.nextCursor?.remote?.[r]?.providerPageCursor,position:n.nextCursor?.remote?.[r]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=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,l)=>{let u=new Date,d=(0,c.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,c.safeEvaluateRecord)(e,r):(0,c.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}},recordActionResult=async({action:e,resultBlock:n,mode:r,organizationId:i,pathParams:a,queryParams:o,body:s,headers:c,source:l,isBackground:u,settings:d,logger:f})=>{if((0,t.isMissing)(e)){f?.warning({message:`action missing, skipping recording action result`});return}let p=n.olapClient;if((0,t.isMissing)(p)){f?.warning({message:`olap client is missing, skipping recording action result`});return}let m=getOlapOptions(d),h={actionId:e.id,mode:r,url:e?.entrypointUrl,pathParams:a,queryParams:o,body:s,headers:c,sourceId:l?.sourceId,sourceType:l?.sourceType,sourceValue:l?.sourceValue,isBackground:u,startTime:n.statistics?.startTime},g=n.context,_={actionRunId:g.actionRunId||`missing`,actionId:e.id,connectorKey:g.connectorKey,connectorVersion:g.connectorVersion,connectorOwner:g.connectorOwner,connectorProfileId:g.connectorProfileId,actionType:g.actionType,category:g.category,organizationId:i,projectSecureId:g.projectSecureId,accountSecureId:g.accountSecureId,originOwnerId:g.originOwnerId,originOwnerName:g.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:n.response?.successful??!1,statusCode:n.response?.statusCode,body:n.outputs??void 0,message:n.response?.message,endTime:n.statistics?.endTime,defenderContext:n.defenderMetadata};try{await p.recordAction(h,_,m);let r=e.steps||{},a=Object.keys(r).map((e,a)=>{let o=n.steps?.[e];if((0,t.isMissing)(o))return null;let s=r[e],c=s?.stepFunction?.functionName,l=s?.stepFunction?.version,u=s&&`iterator`in s&&n.intermediateSteps?.[e]?Object.keys(n.intermediateSteps[e]).length:void 0,d=typeof o.output?.statusCode==`number`?o.output.statusCode:void 0;return{input:{actionRunId:_.actionRunId,actionMode:h.mode,actionSuccess:_.success,stepIndex:a,stepId:e,organizationId:i,projectSecureId:g.projectSecureId,accountSecureId:g.accountSecureId,inputs:n.inputs,...c&&{stepFunctionName:c},...l&&{stepFunctionVersion:l},...u!==void 0&&{stepIterations:u},startTime:o.statistics?.startTime},result:{success:o.successful,statusCode:d,message:o.message,outputs:o.output,errors:o.errors,skipped:o.skipped,endTime:o.statistics?.endTime}}}).filter(t.notMissing);a.length>0&&await p.recordSteps(a,m)}catch(e){f?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},oe={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},se=.64,ce=.458,buildTier2Config=e=>{let t={};return e?.highRiskThreshold!==void 0&&(t.highRiskThreshold=e.highRiskThreshold),e?.mediumRiskThreshold!==void 0&&(t.mediumRiskThreshold=e.mediumRiskThreshold),e?.multiheadEnabled&&(t.multihead={mainThreshold:.64,auxThreshold:.458}),Object.keys(t).length>0?{tier2Config:t}:{}},recordingFieldsFromParams=e=>({mode:e.mode,organizationId:e.account.organizationId,pathParams:e.pathParams,queryParams:e.queryParams,body:e.body,headers:e.headers,source:e.source,settings:e.settings,logger:e.logger}),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:l=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=l({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:oe[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,resultBlock:l,...recordingFieldsFromParams(e)}),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,c.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,resultBlock:t,...recordingFieldsFromParams(e)}),t}a.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,resultBlock:a,...recordingFieldsFromParams(e)})}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,resultBlock:o,...recordingFieldsFromParams(e)}),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,resultBlock:l,...recordingFieldsFromParams(e)}),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,l.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,...buildTier2Config(r?.defender)}).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,tier2RawScore:t.tier2RawScore,tier2AuxScore:t.tier2AuxScore,tier2MultiheadBlocked:t.tier2MultiheadBlocked,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}}}}},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}),le=`stackone://internal//`,ue=`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`,de=`event`,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={mode:`event`,organizationId:n.organizationId,body:i,headers:a,source:{sourceType:t.RequestSourceType.NATIVE_WEBHOOK},isBackground:!1,logger:o},x;try{x=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),await recordActionResult({action:g,resultBlock:{...y,response:{successful:!1,statusCode:500,message:t.message},statistics:{startTime:v,endTime:new Date}},...b}),t}if(x.statistics={startTime:v,endTime:new Date},typeof x.outputs?.statusCode!=`number`)throw await recordActionResult({action:g,resultBlock:{...x,response:{successful:!1,statusCode:500,message:`Event action output must include a numeric statusCode`}},...b}),new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return await recordActionResult({action:g,resultBlock:x,...b}),x},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,fe=`webhook_setup`,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,originOwnerId:l,originOwnerName:u,connectorKey:d,connectorVersion:f,authConfigKey:p,environment:m,logger:h,getHttpClient:g,getOlapClient:_,createBlockFn:v=createBlock,createBlockContextFn:y=createBlockContext,runStepActionFn:b=runStepAction})=>{let x=e.categories?.[0];if((0,t.isMissing)(x))throw Error(`Connector category is required for webhook setup phase execution (connector '${d}')`);let S=phaseAsAction(n,r),C=y({category:x,connectorKey:d,connectorVersion:f,authConfigKey:p,environment:m,action:S,accountSecureId:o,projectSecureId:s,organizationId:c,originOwnerId:l,originOwnerName:u,flowType:`action`}),w=new Date,T=await v({connector:e,inputs:i,credentials:a,context:C,action:S,logger:h,getHttpClient:g,getOlapClient:_}),E={mode:`webhook_setup`,organizationId:c,body:i,source:{sourceType:t.RequestSourceType.NATIVE_WEBHOOK_SETUP_WORKER},isBackground:!0,logger:h},D;try{D=await b({block:T})}catch(e){throw await recordActionResult({action:S,resultBlock:{...T,response:{successful:!1,statusCode:500,message:e.message},statistics:{startTime:w,endTime:new Date}},...E}),e}if(D.statistics={startTime:w,endTime:new Date},(0,t.isMissing)(D.response))throw await recordActionResult({action:S,resultBlock:{...D,response:{successful:!1,statusCode:500,message:`Webhook setup ${r} phase produced no response`}},...E}),Error(`Webhook setup ${r} phase produced no response (connector '${d}')`);return await recordActionResult({action:S,resultBlock:D,...E}),{successful:D.response.successful,statusCode:D.response.statusCode,outputs:D.outputs}};exports.ConnectSDKError=X,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.createCursorPaginator=createCursorPaginator,exports.createOffsetPaginator=createOffsetPaginator,exports.createPagePaginator=createPagePaginator,exports.createPaginator=createPaginator,exports.evaluateExternalAccountIdExtractorByConnector=evaluateExternalAccountIdExtractorByConnector,exports.executeStepFunction=executeStepFunction,exports.extractItems=extractItems,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.paginate=paginate,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 X=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 X{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends X{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends X{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends X{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends X{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};function buildInputs(e,t,n){let r=e[t],i=r&&typeof r==`object`&&!Array.isArray(r)?{...r,...n}:n;return{...e,[t]:i}}function extractData(e,n){let r=(0,t.getByDotPath)(n.outputs,e.response.dataKey);return Array.isArray(r)?r:r==null?[]:[r]}function isExhausted(e,t,n,r){let i=e.stopCondition??n;try{return!!(0,c.evaluate)(`{{ ${i} }}`,t.outputs)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to evaluate pagination stop condition on page ${r}: ${i}. ${t}`)}}function createCursorPaginator(e,{baseInputs:n={}}={}){let r=`${e.response.nextKey} == null`;return{config:e,computeNextInputs({previousResponse:r}){if(!r)return{...n};let i=(0,t.getByDotPath)(r.outputs,e.response.nextKey);return buildInputs(n,e.iterator.in,{[e.iterator.key]:i})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,r,n)}}function createOffsetPaginator(e,{baseInputs:t={}}={}){let n=e.iterator.defaultLimit??100,{in:r,offsetKey:i,limitKey:a}=e.iterator,o=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){return buildInputs(t,r,{[i]:e*n,[a]:n})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,o,n)}}function createPagePaginator(e,{baseInputs:t={}}={}){let n=e.iterator.startPage??1,r=e.iterator.defaultPageSize??100,{in:i,pageKey:a,pageSizeKey:o}=e.iterator,s=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){let s={[a]:n+e};return o&&(s[o]=r),buildInputs(t,i,s)},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,s,n)}}const ie={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=ie[e.type];return n(e,t)}const ae=`data`;function extractItems(e,n){let r=n.pagination?.response.dataKey??n.dataKey??`data`,i=(0,t.getByDotPath)(e.outputs,r);return Array.isArray(i)?i:i==null?[]:[i]}function assertSuccessful(e,t){if(e.response?.successful===!1)throw Error(`Action call failed on page ${t}: ${e.response.statusCode} ${e.response.message??``}`.trim())}const Z=1e4,Q=3e5;function hasExceededMaxIterations(e,t=Z){return e>=t}function hasExceededTimeout(e,t,n=Q){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,n,r={}){let i=r.maxIterations??Z,a=r.timeoutMs??Q,o=r.onPageComplete,s=r.now??Date.now,c=s(),l=[],u=0,d=null,f;for(;;){if(hasExceededMaxIterations(u,i))return{data:l,pagesRetrieved:u,stoppedBy:`maxIterations`};if(hasExceededTimeout(c,s(),a))return{data:l,pagesRetrieved:u,stoppedBy:`timeout`};let r=await n(e.computeNextInputs({previousResponse:f,currentIteration:u}));u++,assertSuccessful(r,u);let p=e.extractData(r),m=(0,t.getContentHash)(p);if(isDuplicatePage(m,d))return{data:l,pagesRetrieved:u,stoppedBy:`duplicatePage`};if(l.push(...p),d=m,f=r,o?.({pagesRetrieved:u,totalRecords:l.length}),e.isExhausted(r,u))return{data:l,pagesRetrieved:u,stoppedBy:`exhausted`}}}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.configNotices=r?.configNotices,i.setupFields=r?.setupFields,i.setupNotices=r?.setupNotices),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,t)=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage,...e.requiresManualSetup?{requires_manual_setup:!0}:{},authentication:t})),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,r);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,documentation:e.documentation}},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=getActionAuthenticationMethods(e),i=getScopeDefinitions(e),a=getEventActionsMeta(e,r);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:i.length>0?i:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:a.length>0?a: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,authType:g,authId:_,sessionId:v,agentId:y,userAgent:b,ipAddress:x,transportType:S,streamType:C,flowType:w,sourceValue:T})=>({organizationId:d,projectSecureId:u,accountSecureId:l,connectorKey:n,connectorVersion:r,connectorOwner:i,connectorProfileId:a,category:e,service:``,resource:``,originOwnerId:f,originOwnerName:p,sourceType:m,sourceId:h,authType:g,authId:_,sessionId:v,agentId:y,userAgent:b,ipAddress:x,transportType:S,streamType:C,schema:c?.schema?.key,actionType:c?.actionType??`unknown`,authenticationType:o,environment:s,actionRunId:(0,t.generateActionRunId)(),flowType:w,sourceValue:T}),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)}},$=`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[`${$}${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($),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[`${$}${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,c.safeEvaluate)(e.condition,t):!1,buildStepParamsForFunction=(e,n,r)=>{let i=a.StepFunctionsRegistry[e.functionName]?.[`v${e.version??1}`],o=(0,t.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return n.action?.cursor.enabled&&o?{...e.params??{},cursor:{token:n.nextCursor?.remote?.[r]?.providerPageCursor,position:n.nextCursor?.remote?.[r]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=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,l)=>{let u=new Date,d=(0,c.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,c.safeEvaluateRecord)(e,r):(0,c.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}},recordActionResult=async({action:e,resultBlock:n,mode:r,organizationId:i,pathParams:a,queryParams:o,body:s,headers:c,source:l,isBackground:u,settings:d,logger:f})=>{if((0,t.isMissing)(e)){f?.warning({message:`action missing, skipping recording action result`});return}let p=n.olapClient;if((0,t.isMissing)(p)){f?.warning({message:`olap client is missing, skipping recording action result`});return}let m=getOlapOptions(d),h=n.context,g={actionId:e.id,actionRunId:h.actionRunId||`missing`,mode:r,connectorKey:h.connectorKey,connectorVersion:h.connectorVersion,connectorOwner:h.connectorOwner,connectorProfileId:h.connectorProfileId,actionType:h.actionType,category:h.category,organizationId:i,projectSecureId:h.projectSecureId,accountSecureId:h.accountSecureId,originOwnerId:h.originOwnerId,originOwnerName:h.originOwnerName,sourceType:l?.sourceType,authType:l?.authType,authId:l?.authId,sessionId:l?.sessionId,agentId:l?.agentId,userAgent:l?.userAgent,ipAddress:l?.ipAddress,transportType:l?.transportType,streamType:l?.streamType,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,pathParams:a,queryParams:o,body:s,headers:c,isBackground:u,startTime:n.statistics?.startTime},_={success:n.response?.successful??!1,statusCode:n.response?.statusCode,body:n.outputs??void 0,message:n.response?.message,endTime:n.statistics?.endTime,defenderContext:n.defenderMetadata};try{await p.recordAction(g,_,m);let r=e.steps||{},a=Object.keys(r).map((e,a)=>{let o=n.steps?.[e];if((0,t.isMissing)(o))return null;let s=r[e],c=s?.stepFunction?.functionName,l=s?.stepFunction?.version,u=s&&`iterator`in s&&n.intermediateSteps?.[e]?Object.keys(n.intermediateSteps[e]).length:void 0,d=typeof o.output?.statusCode==`number`?o.output.statusCode:void 0;return{input:{actionRunId:g.actionRunId,actionMode:g.mode,actionSuccess:_.success,stepIndex:a,stepId:e,organizationId:i,projectSecureId:h.projectSecureId,accountSecureId:h.accountSecureId,inputs:n.inputs,...c&&{stepFunctionName:c},...l&&{stepFunctionVersion:l},...u!==void 0&&{stepIterations:u},startTime:o.statistics?.startTime},result:{success:o.successful,statusCode:d,message:o.message,outputs:o.output,errors:o.errors,skipped:o.skipped,endTime:o.statistics?.endTime}}}).filter(t.notMissing);a.length>0&&await p.recordSteps(a,m)}catch(e){f?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},oe={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},se=.64,ce=.458,buildTier2Config=e=>{let t={};return e?.highRiskThreshold!==void 0&&(t.highRiskThreshold=e.highRiskThreshold),e?.mediumRiskThreshold!==void 0&&(t.mediumRiskThreshold=e.mediumRiskThreshold),e?.multiheadEnabled&&(t.multihead={mainThreshold:.64,auxThreshold:.458}),Object.keys(t).length>0?{tier2Config:t}:{}},recordingFieldsFromParams=e=>({mode:e.mode,organizationId:e.account.organizationId,pathParams:e.pathParams,queryParams:e.queryParams,body:e.body,headers:e.headers,source:e.source,settings:e.settings,logger:e.logger}),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:l=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=l({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,authType:S?.authType,authId:S?.authId,sessionId:S?.sessionId,agentId:S?.agentId,userAgent:S?.userAgent,ipAddress:S?.ipAddress,transportType:S?.transportType,streamType:S?.streamType,flowType:oe[g],sourceId:S?.sourceId,sourceValue:S?.sourceValue}),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,resultBlock:l,...recordingFieldsFromParams(e)}),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,c.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,resultBlock:t,...recordingFieldsFromParams(e)}),t}a.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,resultBlock:a,...recordingFieldsFromParams(e)})}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,resultBlock:o,...recordingFieldsFromParams(e)}),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,resultBlock:l,...recordingFieldsFromParams(e)}),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,l.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,...buildTier2Config(r?.defender)}).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,tier2RawScore:t.tier2RawScore,tier2AuxScore:t.tier2AuxScore,tier2MultiheadBlocked:t.tier2MultiheadBlocked,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}}}}},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}),le=`stackone://internal//`,ue=`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`,de=`event`,runEventActionById=async({actionId:e,account:n,connector:r,body:i={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,emitEvent:u,findActionFn:d=findEventActionByActionId,parseActionInputsFn:f=parseActionInputs,createBlockContextFn:p=createBlockContext,createBlockFn:m=createBlock,runStepActionFn:h=runStepAction})=>{let g=p({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`}),_=d(r,e);if((0,t.isMissing)(_))throw new MissingActionError(g,`No matching event action found`);g.actionType=`event`,g.schema=_.schema?.key;let v=f(_,{body:i,headers:o}),y=new Date,b=await m({connector:r,context:g,credentials:n.credentials,logger:s,getHttpClient:c,getOlapClient:l,emitEvent:u,inputs:v,action:_,nextCursor:void 0}),x={mode:`event`,organizationId:n.organizationId,body:i,headers:o,source:{sourceType:a.SourceType.Webhook},isBackground:!1,logger:s},S;try{S=await h({block:b})}catch(t){throw s?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),await recordActionResult({action:_,resultBlock:{...b,response:{successful:!1,statusCode:500,message:t.message},statistics:{startTime:y,endTime:new Date}},...x}),t}if(S.statistics={startTime:y,endTime:new Date},typeof S.outputs?.statusCode!=`number`)throw await recordActionResult({action:_,resultBlock:{...S,response:{successful:!1,statusCode:500,message:`Event action output must include a numeric statusCode`}},...x}),new InvalidEventOutputError(g,`Event action output must include a numeric statusCode`);return await recordActionResult({action:_,resultBlock:S,...x}),S},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,fe=`webhook_setup`,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:o,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,connectorKey:f,connectorVersion:p,authConfigKey:m,environment:h,logger:g,getHttpClient:_,getOlapClient:v,createBlockFn:y=createBlock,createBlockContextFn:b=createBlockContext,runStepActionFn:x=runStepAction})=>{let S=e.categories?.[0];if((0,t.isMissing)(S))throw Error(`Connector category is required for webhook setup phase execution (connector '${f}')`);let C=phaseAsAction(n,r),w=b({category:S,connectorKey:f,connectorVersion:p,authConfigKey:m,environment:h,action:C,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,flowType:`action`}),T=new Date,E=await y({connector:e,inputs:i,credentials:o,context:w,action:C,logger:g,getHttpClient:_,getOlapClient:v}),D={mode:`webhook_setup`,organizationId:l,body:i,source:{sourceType:a.SourceType.Internal},isBackground:!0,logger:g},O;try{O=await x({block:E})}catch(e){throw await recordActionResult({action:C,resultBlock:{...E,response:{successful:!1,statusCode:500,message:e.message},statistics:{startTime:T,endTime:new Date}},...D}),e}if(O.statistics={startTime:T,endTime:new Date},(0,t.isMissing)(O.response))throw await recordActionResult({action:C,resultBlock:{...O,response:{successful:!1,statusCode:500,message:`Webhook setup ${r} phase produced no response`}},...D}),Error(`Webhook setup ${r} phase produced no response (connector '${f}')`);return await recordActionResult({action:C,resultBlock:O,...D}),{successful:O.response.successful,statusCode:O.response.statusCode,outputs:O.outputs}};exports.ConnectSDKError=X,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.createCursorPaginator=createCursorPaginator,exports.createOffsetPaginator=createOffsetPaginator,exports.createPagePaginator=createPagePaginator,exports.createPaginator=createPaginator,exports.evaluateExternalAccountIdExtractorByConnector=evaluateExternalAccountIdExtractorByConnector,exports.executeStepFunction=executeStepFunction,exports.extractItems=extractItems,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.paginate=paginate,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
@@ -390,22 +390,9 @@ type DefenderContext = {
390
390
  [key: string]: unknown;
391
391
  };
392
392
  type ActionInput = {
393
+ actionRunId: string;
393
394
  actionId?: string;
394
395
  mode: string;
395
- url?: string;
396
- pathParams?: unknown;
397
- queryParams?: unknown;
398
- body?: unknown;
399
- headers?: Record<string, string>;
400
- sourceId?: string;
401
- sourceType?: string;
402
- sourceValue?: string;
403
- isBackground?: boolean;
404
- startTime?: Date;
405
- };
406
- type ActionResult = {
407
- actionRunId: string;
408
- actionId: string;
409
396
  connectorKey: string;
410
397
  connectorVersion: string;
411
398
  connectorOwner?: string;
@@ -417,12 +404,29 @@ type ActionResult = {
417
404
  accountSecureId: string;
418
405
  originOwnerId?: string;
419
406
  originOwnerName?: string;
407
+ authType?: AuthType;
408
+ authId?: string;
409
+ sourceType?: SourceType;
410
+ userAgent?: string;
411
+ ipAddress?: string;
412
+ sessionId?: string;
413
+ agentId?: string;
414
+ transportType?: TransportType;
415
+ streamType?: StreamType;
416
+ isBackground?: boolean;
417
+ pathParams?: unknown;
418
+ queryParams?: unknown;
419
+ body?: unknown;
420
+ headers?: Record<string, string>;
420
421
  httpMethod?: string;
421
422
  url?: string;
422
423
  path?: string;
423
424
  resource?: string;
424
425
  subResource?: string;
425
426
  childResource?: string;
427
+ startTime?: Date;
428
+ };
429
+ type ActionResult = {
426
430
  success?: boolean;
427
431
  statusCode?: number;
428
432
  message?: string;
@@ -477,9 +481,12 @@ type UnifiedInput = {
477
481
  resource?: string;
478
482
  subResource?: string;
479
483
  childResource?: string;
480
- sourceId?: string;
481
- sourceType?: string;
482
- sourceValue?: string;
484
+ authType?: AuthType;
485
+ authId?: string;
486
+ sourceType?: SourceType;
487
+ userAgent?: string;
488
+ ipAddress?: string;
489
+ transportType?: TransportType;
483
490
  isBackground?: boolean;
484
491
  startTime?: Date;
485
492
  };
@@ -724,9 +731,17 @@ type ActionLog = ILog & {
724
731
  originOwnerName?: string;
725
732
  httpMethod?: string;
726
733
  url?: string;
727
- sourceType?: string;
734
+ sourceType?: SourceType;
728
735
  sourceId?: string;
729
736
  sourceValue?: string;
737
+ authType?: AuthType;
738
+ authId?: string;
739
+ userAgent?: string;
740
+ ipAddress?: string;
741
+ sessionId?: string;
742
+ agentId?: string;
743
+ transportType?: TransportType;
744
+ streamType?: StreamType;
730
745
  isBackground?: boolean;
731
746
  success?: boolean;
732
747
  statusCode?: number;
@@ -769,8 +784,16 @@ type UnifiedLog = ILog & {
769
784
  service?: string;
770
785
  action?: string;
771
786
  sourceId?: string;
772
- sourceType?: string;
787
+ sourceType?: SourceType;
773
788
  sourceValue?: string;
789
+ authType?: AuthType;
790
+ authId?: string;
791
+ userAgent?: string;
792
+ ipAddress?: string;
793
+ sessionId?: string;
794
+ agentId?: string;
795
+ transportType?: TransportType;
796
+ streamType?: StreamType;
774
797
  isBackground?: boolean;
775
798
  originOwnerId?: string;
776
799
  originOwnerName?: string;
@@ -1352,9 +1375,53 @@ type DefenderSettings = {
1352
1375
  };
1353
1376
  //#endregion
1354
1377
  //#region ../core/src/source/types.d.ts
1378
+ declare const SourceType: {
1379
+ readonly RequestTester: "REQUEST_TESTER";
1380
+ readonly ActionTester: "ACTION_TESTER";
1381
+ readonly Dashboard: "DASHBOARD";
1382
+ readonly Playground: "PLAYGROUND";
1383
+ readonly SDK: "SDK";
1384
+ readonly API: "API";
1385
+ readonly Scheduler: "SCHEDULER";
1386
+ readonly Webhook: "WEBHOOK";
1387
+ readonly Agent: "AGENT";
1388
+ readonly DataSync: "DATA_SYNC";
1389
+ readonly Internal: "INTERNAL";
1390
+ };
1391
+ type SourceType = (typeof SourceType)[keyof typeof SourceType];
1392
+ declare const TransportType: {
1393
+ readonly HTTP: "HTTP";
1394
+ readonly MCP: "MCP";
1395
+ readonly ActionRPC: "ACTION_RPC";
1396
+ readonly WebSocket: "WEBSOCKET";
1397
+ };
1398
+ type TransportType = (typeof TransportType)[keyof typeof TransportType];
1399
+ declare const StreamType: {
1400
+ readonly HTTP: "HTTP";
1401
+ readonly WebSocket: "WEBSOCKET";
1402
+ readonly SSE: "SSE";
1403
+ };
1404
+ type StreamType = (typeof StreamType)[keyof typeof StreamType] | null;
1405
+ declare const AuthType: {
1406
+ readonly APIKey: "API_KEY";
1407
+ readonly SessionToken: "SESSION_TOKEN";
1408
+ readonly UserSession: "USER_SESSION";
1409
+ readonly Cookie: "COOKIE";
1410
+ readonly Webhook: "WEBHOOK";
1411
+ readonly Signature: "SIGNATURE";
1412
+ };
1413
+ type AuthType = (typeof AuthType)[keyof typeof AuthType];
1355
1414
  type Source = {
1356
- sourceType?: string;
1415
+ sourceType?: SourceType;
1357
1416
  sourceId?: string;
1417
+ userAgent?: string;
1418
+ ipAddress?: string;
1419
+ sessionId?: string;
1420
+ agentId?: string;
1421
+ transportType?: TransportType;
1422
+ streamType?: StreamType;
1423
+ authType?: AuthType;
1424
+ authId?: string;
1358
1425
  sourceValue?: string;
1359
1426
  };
1360
1427
  //#endregion
@@ -1411,8 +1478,18 @@ type BlockContext = {
1411
1478
  actionRunId?: string;
1412
1479
  originOwnerId?: string;
1413
1480
  originOwnerName?: string;
1414
- source?: Source;
1481
+ sourceType?: SourceType;
1482
+ authType?: AuthType;
1483
+ authId?: string;
1484
+ sessionId?: string;
1485
+ agentId?: string;
1486
+ userAgent?: string;
1487
+ ipAddress?: string;
1488
+ transportType?: TransportType;
1489
+ streamType?: StreamType;
1415
1490
  flowType?: FlowType;
1491
+ sourceId?: string;
1492
+ sourceValue?: string;
1416
1493
  service: string;
1417
1494
  resource: string;
1418
1495
  subResource?: string;
@@ -1787,8 +1864,16 @@ declare const createBlockContext: ({
1787
1864
  originOwnerName,
1788
1865
  sourceType,
1789
1866
  sourceId,
1790
- sourceValue,
1791
- flowType
1867
+ authType,
1868
+ authId,
1869
+ sessionId,
1870
+ agentId,
1871
+ userAgent,
1872
+ ipAddress,
1873
+ transportType,
1874
+ streamType,
1875
+ flowType,
1876
+ sourceValue
1792
1877
  }: {
1793
1878
  category: Category;
1794
1879
  connectorKey: string;
@@ -1803,10 +1888,18 @@ declare const createBlockContext: ({
1803
1888
  organizationId: string;
1804
1889
  originOwnerId?: string;
1805
1890
  originOwnerName?: string;
1806
- sourceType?: string;
1891
+ sourceType?: SourceType;
1807
1892
  sourceId?: string;
1808
- sourceValue?: string;
1893
+ authType?: AuthType;
1894
+ authId?: string;
1895
+ sessionId?: string;
1896
+ agentId?: string;
1897
+ userAgent?: string;
1898
+ ipAddress?: string;
1899
+ transportType?: TransportType;
1900
+ streamType?: StreamType;
1809
1901
  flowType?: FlowType;
1902
+ sourceValue?: string;
1810
1903
  }) => BlockContext;
1811
1904
  //#endregion
1812
1905
  //#region src/connectors/testActions.d.ts
package/dist/index.d.mts CHANGED
@@ -389,22 +389,9 @@ type DefenderContext = {
389
389
  [key: string]: unknown;
390
390
  };
391
391
  type ActionInput = {
392
+ actionRunId: string;
392
393
  actionId?: string;
393
394
  mode: string;
394
- url?: string;
395
- pathParams?: unknown;
396
- queryParams?: unknown;
397
- body?: unknown;
398
- headers?: Record<string, string>;
399
- sourceId?: string;
400
- sourceType?: string;
401
- sourceValue?: string;
402
- isBackground?: boolean;
403
- startTime?: Date;
404
- };
405
- type ActionResult = {
406
- actionRunId: string;
407
- actionId: string;
408
395
  connectorKey: string;
409
396
  connectorVersion: string;
410
397
  connectorOwner?: string;
@@ -416,12 +403,29 @@ type ActionResult = {
416
403
  accountSecureId: string;
417
404
  originOwnerId?: string;
418
405
  originOwnerName?: string;
406
+ authType?: AuthType;
407
+ authId?: string;
408
+ sourceType?: SourceType;
409
+ userAgent?: string;
410
+ ipAddress?: string;
411
+ sessionId?: string;
412
+ agentId?: string;
413
+ transportType?: TransportType;
414
+ streamType?: StreamType;
415
+ isBackground?: boolean;
416
+ pathParams?: unknown;
417
+ queryParams?: unknown;
418
+ body?: unknown;
419
+ headers?: Record<string, string>;
419
420
  httpMethod?: string;
420
421
  url?: string;
421
422
  path?: string;
422
423
  resource?: string;
423
424
  subResource?: string;
424
425
  childResource?: string;
426
+ startTime?: Date;
427
+ };
428
+ type ActionResult = {
425
429
  success?: boolean;
426
430
  statusCode?: number;
427
431
  message?: string;
@@ -476,9 +480,12 @@ type UnifiedInput = {
476
480
  resource?: string;
477
481
  subResource?: string;
478
482
  childResource?: string;
479
- sourceId?: string;
480
- sourceType?: string;
481
- sourceValue?: string;
483
+ authType?: AuthType;
484
+ authId?: string;
485
+ sourceType?: SourceType;
486
+ userAgent?: string;
487
+ ipAddress?: string;
488
+ transportType?: TransportType;
482
489
  isBackground?: boolean;
483
490
  startTime?: Date;
484
491
  };
@@ -723,9 +730,17 @@ type ActionLog = ILog & {
723
730
  originOwnerName?: string;
724
731
  httpMethod?: string;
725
732
  url?: string;
726
- sourceType?: string;
733
+ sourceType?: SourceType;
727
734
  sourceId?: string;
728
735
  sourceValue?: string;
736
+ authType?: AuthType;
737
+ authId?: string;
738
+ userAgent?: string;
739
+ ipAddress?: string;
740
+ sessionId?: string;
741
+ agentId?: string;
742
+ transportType?: TransportType;
743
+ streamType?: StreamType;
729
744
  isBackground?: boolean;
730
745
  success?: boolean;
731
746
  statusCode?: number;
@@ -768,8 +783,16 @@ type UnifiedLog = ILog & {
768
783
  service?: string;
769
784
  action?: string;
770
785
  sourceId?: string;
771
- sourceType?: string;
786
+ sourceType?: SourceType;
772
787
  sourceValue?: string;
788
+ authType?: AuthType;
789
+ authId?: string;
790
+ userAgent?: string;
791
+ ipAddress?: string;
792
+ sessionId?: string;
793
+ agentId?: string;
794
+ transportType?: TransportType;
795
+ streamType?: StreamType;
773
796
  isBackground?: boolean;
774
797
  originOwnerId?: string;
775
798
  originOwnerName?: string;
@@ -1351,9 +1374,53 @@ type DefenderSettings = {
1351
1374
  };
1352
1375
  //#endregion
1353
1376
  //#region ../core/src/source/types.d.ts
1377
+ declare const SourceType: {
1378
+ readonly RequestTester: "REQUEST_TESTER";
1379
+ readonly ActionTester: "ACTION_TESTER";
1380
+ readonly Dashboard: "DASHBOARD";
1381
+ readonly Playground: "PLAYGROUND";
1382
+ readonly SDK: "SDK";
1383
+ readonly API: "API";
1384
+ readonly Scheduler: "SCHEDULER";
1385
+ readonly Webhook: "WEBHOOK";
1386
+ readonly Agent: "AGENT";
1387
+ readonly DataSync: "DATA_SYNC";
1388
+ readonly Internal: "INTERNAL";
1389
+ };
1390
+ type SourceType = (typeof SourceType)[keyof typeof SourceType];
1391
+ declare const TransportType: {
1392
+ readonly HTTP: "HTTP";
1393
+ readonly MCP: "MCP";
1394
+ readonly ActionRPC: "ACTION_RPC";
1395
+ readonly WebSocket: "WEBSOCKET";
1396
+ };
1397
+ type TransportType = (typeof TransportType)[keyof typeof TransportType];
1398
+ declare const StreamType: {
1399
+ readonly HTTP: "HTTP";
1400
+ readonly WebSocket: "WEBSOCKET";
1401
+ readonly SSE: "SSE";
1402
+ };
1403
+ type StreamType = (typeof StreamType)[keyof typeof StreamType] | null;
1404
+ declare const AuthType: {
1405
+ readonly APIKey: "API_KEY";
1406
+ readonly SessionToken: "SESSION_TOKEN";
1407
+ readonly UserSession: "USER_SESSION";
1408
+ readonly Cookie: "COOKIE";
1409
+ readonly Webhook: "WEBHOOK";
1410
+ readonly Signature: "SIGNATURE";
1411
+ };
1412
+ type AuthType = (typeof AuthType)[keyof typeof AuthType];
1354
1413
  type Source = {
1355
- sourceType?: string;
1414
+ sourceType?: SourceType;
1356
1415
  sourceId?: string;
1416
+ userAgent?: string;
1417
+ ipAddress?: string;
1418
+ sessionId?: string;
1419
+ agentId?: string;
1420
+ transportType?: TransportType;
1421
+ streamType?: StreamType;
1422
+ authType?: AuthType;
1423
+ authId?: string;
1357
1424
  sourceValue?: string;
1358
1425
  };
1359
1426
  //#endregion
@@ -1410,8 +1477,18 @@ type BlockContext = {
1410
1477
  actionRunId?: string;
1411
1478
  originOwnerId?: string;
1412
1479
  originOwnerName?: string;
1413
- source?: Source;
1480
+ sourceType?: SourceType;
1481
+ authType?: AuthType;
1482
+ authId?: string;
1483
+ sessionId?: string;
1484
+ agentId?: string;
1485
+ userAgent?: string;
1486
+ ipAddress?: string;
1487
+ transportType?: TransportType;
1488
+ streamType?: StreamType;
1414
1489
  flowType?: FlowType;
1490
+ sourceId?: string;
1491
+ sourceValue?: string;
1415
1492
  service: string;
1416
1493
  resource: string;
1417
1494
  subResource?: string;
@@ -1786,8 +1863,16 @@ declare const createBlockContext: ({
1786
1863
  originOwnerName,
1787
1864
  sourceType,
1788
1865
  sourceId,
1789
- sourceValue,
1790
- flowType
1866
+ authType,
1867
+ authId,
1868
+ sessionId,
1869
+ agentId,
1870
+ userAgent,
1871
+ ipAddress,
1872
+ transportType,
1873
+ streamType,
1874
+ flowType,
1875
+ sourceValue
1791
1876
  }: {
1792
1877
  category: Category;
1793
1878
  connectorKey: string;
@@ -1802,10 +1887,18 @@ declare const createBlockContext: ({
1802
1887
  organizationId: string;
1803
1888
  originOwnerId?: string;
1804
1889
  originOwnerName?: string;
1805
- sourceType?: string;
1890
+ sourceType?: SourceType;
1806
1891
  sourceId?: string;
1807
- sourceValue?: string;
1892
+ authType?: AuthType;
1893
+ authId?: string;
1894
+ sessionId?: string;
1895
+ agentId?: string;
1896
+ userAgent?: string;
1897
+ ipAddress?: string;
1898
+ transportType?: TransportType;
1899
+ streamType?: StreamType;
1808
1900
  flowType?: FlowType;
1901
+ sourceValue?: string;
1809
1902
  }) => BlockContext;
1810
1903
  //#endregion
1811
1904
  //#region src/connectors/testActions.d.ts
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import{t as e}from"./chunk-Cfxk5zVN.mjs";import{RequestSourceType as t,generateActionRunId as n,getByDotPath as r,getContentHash as i,isMissing as a,isNumber as o,isObject as s,isString as c,notMissing as l,z as u,zStrictObject as d}from"@stackone/utils";import{match as f}from"path-to-regexp";import{readFileSync as p}from"fs";import{dirname as m,join as h,resolve as g}from"path";import{AUTHORIZATION_SCHEMA as _,COMPOSITE_ID_LATEST_VERSION as v,CoreError as y,ExecutionModes as b,ReleaseStages as x,StepFunctionName as S,StepFunctionsFactory as C,StepFunctionsRegistry as w,buildExpressionContext as T,decodeCompositeId as E,encodeCompositeId as D,evaluateExternalAccountIdExtractor as O,expandCursor as k,getInputEnumValues as A,getIteratorLocation as j,getPaginationKeys as M,isCompositeId as N,isCursorEmpty as ee,isForeachStep as P,isValidEnumRef as F,minifyCursor as I,updateCursor as L}from"@stackone/core";import{HttpErrorMessages as R,isSuccessStatusCode as te}from"@stackone/transport";import{parse as ne}from"yaml";import{evaluate as z,safeEvaluate as B,safeEvaluateRecord as re}from"@stackone/expressions";import{createPromptDefense as ie}from"@stackone/defender";const createBlock=async({connector:e,inputs:t,context:n,action:r,credentials:i,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u,emitEvent:d})=>{if(a(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:t,fieldConfigs:[],context:n,action:r,credentials:i,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=>l(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=f(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim().replace(/\{([^}]+)\}/g,`:$1`)))(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=p(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
2
- `),m(e)).join(`
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=g(h(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{return p(n,`utf8`).split(`
4
- `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var V=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 V{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends V{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 V{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 V{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 V{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 V{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 V{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 V{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.`}}),ae=d({type:u.literal(`cursor`),response:d({dataKey:u.string(),nextKey:u.string()}),iterator:d({key:u.string(),in:u.enum([`query`,`body`,`headers`])}),stopCondition:u.string().optional()}),oe=d({type:u.literal(`offset`),response:d({dataKey:u.string()}),iterator:d({offsetKey:u.string(),limitKey:u.string(),in:u.enum([`query`,`body`,`headers`]),defaultLimit:u.number().optional()}),stopCondition:u.string().optional()}),se=d({type:u.literal(`page`),response:d({dataKey:u.string()}),iterator:d({pageKey:u.string(),pageSizeKey:u.string().optional(),in:u.enum([`query`,`body`,`headers`]),startPage:u.number().optional(),defaultPageSize:u.number().optional()}),stopCondition:u.string().optional()}),ce=u.discriminatedUnion(`type`,[ae,oe,se]),H={key:u.string(),label:u.string(),required:u.boolean().optional().default(!1),secret:u.boolean().optional().default(!1),externalSystemAccountIdentifier:u.boolean().optional(),readOnly:u.boolean().optional().default(!1),placeholder:u.string().optional(),description:u.string().optional(),tooltip:u.string().optional(),value:u.string().optional(),computed:u.boolean().optional()},U=u.discriminatedUnion(`type`,[d({...H,type:u.enum([`text`,`password`])}),d({...H,type:u.literal(`select`),options:d({value:u.string(),label:u.string()}).array()})]).superRefine((e,t)=>{e.computed===!0&&!e.value&&t.addIssue({code:u.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),W=d({targetFieldKey:u.string(),alias:u.string().optional(),expression:u.string().optional(),values:u.unknown().optional(),type:u.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:u.boolean().default(!1),custom:u.boolean().default(!1),hidden:u.boolean().default(!1),enumMapper:d({matcher:u.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(d({matchExpression:u.string(),value:u.string()}).array())}).optional(),properties:u.lazy(()=>W).array().optional(),requiredScopes:u.string().optional()}),le=u.union([d({values:u.string().array().min(1)}),d({ref:u.string()})]),ue=d({minLength:u.number().optional(),maxLength:u.number().optional(),pattern:u.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:u.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:u.number().optional(),max:u.number().optional(),errorMessage:u.string().optional()}),de=d({field:u.string(),equals:u.string().optional(),notEquals:u.string().optional(),present:u.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`}),fe=u.discriminatedUnion(`rule`,[d({rule:u.literal(`atLeastOneOf`),fields:u.string().array().min(2),errorMessage:u.string().optional()}),d({rule:u.literal(`requiredIf`),field:u.string(),condition:de,errorMessage:u.string().optional()}),d({rule:u.literal(`mutuallyExclusive`),fields:u.string().array().min(2),errorMessage:u.string().optional()})]),G=d({name:u.string(),type:u.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:u.boolean(),description:u.string(),array:u.boolean().optional().default(!1),arrayFormat:u.enum([`repeat`,`brackets`,`comma`,`stringify`]).optional(),in:u.enum([`body`,`query`,`path`,`headers`]),properties:u.lazy(()=>G.omit({in:!0})).array().optional(),oneOf:le.optional(),rules:ue.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`}),pe=u.object({exampleDescription:u.string().optional()}).catchall(u.unknown()),K=d({functionName:u.string(),version:u.string().optional(),parameters:u.record(u.string(),u.unknown())}),q=d({stepId:u.string(),description:u.string(),stepFunction:K,condition:u.string().optional(),ignoreError:u.boolean().optional()}),J=d({stepId:u.string(),description:u.string(),iterator:u.string(),stepFunction:K.optional(),stepFunctions:K.array().optional(),condition:u.string().optional(),ignoreError:u.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`}),me=d({allowed:u.boolean(),indexField:u.string().or(u.string().array()),dataKey:u.string().optional(),pagination:ce.optional(),maxPages:u.number().int().positive().optional(),maxDurationMinutes:u.number().int().positive().optional()}),he=d({rules:d({when:u.string(),then:d({action:u.string(),input:u.record(u.string(),u.unknown()).optional()})}).array()}),Y=d({actionId:u.string(),categories:u.string().array(),actionType:u.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),executionMode:u.enum(b).optional(),schema:u.string().optional(),schemaType:u.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:u.string().optional(),entrypointHttpMethod:u.string().optional(),label:u.string(),description:u.string(),details:u.string().optional(),examples:pe.array().optional(),tags:u.string().array().optional(),releaseStage:u.enum(x).optional(),resources:u.string().optional(),responses:d({statusCode:u.number(),description:u.string()}).array().optional(),requiredScopes:u.string().optional(),inputs:G.array().optional(),validationRules:fe.array().optional(),cursor:d({enabled:u.boolean(),pageSize:u.number()}).optional(),compositeIdentifiers:d({enabled:u.boolean(),version:u.number().optional(),fields:d({targetFieldKey:u.string(),remote:u.string().optional(),components:u.string().array()}).array().optional()}).optional(),fieldConfigs:W.array().optional(),steps:u.union([q,J]).array(),result:u.string().or(u.record(u.string(),u.unknown())).optional(),dataSync:me.optional(),providerEvents:u.string().array().nonempty().optional()}),stepUsesBrowserUse=e=>`stepFunction`in e&&e.stepFunction?.functionName===S.BROWSER_USE?!0:`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>e.functionName===S.BROWSER_USE):!1,ge=Y.superRefine((e,t)=>{e.executionMode!==`async`&&e.steps.some(stepUsesBrowserUse)&&t.addIssue({code:u.ZodIssueCode.custom,message:`Actions containing a 'browser_use' step must declare executionMode: 'async' so they are dispatched to the Temporal workflow runtime`,path:[`executionMode`]})}),_e=d({schedule:u.string().optional(),action:Y.extend({actionType:u.literal(`refresh_token`)})}),ve=d({mainRatelimit:u.number(),subPools:u.array(d({subPoolKey:u.string(),urlPattern:u.string(),rateLimit:u.number()})).optional(),mappedRateLimitErrors:u.array(d({errorStatus:u.number(),errorMessage:u.string(),errorMessagePath:u.string().optional(),retryAfterPath:u.string().optional(),retryAfterUnit:u.union([u.literal(`seconds`),u.literal(`milliseconds`),u.literal(`date`)]).optional(),retryAfterValue:u.number().optional()})).optional()}),ye=d({mainMaxConcurrency:u.number(),subPools:u.array(d({subPoolKey:u.string(),urlPattern:u.string(),maxConcurrency:u.number()})).optional()}),be=d({src:u.string(),alt:u.string()}),xe=d({title:u.string(),content:u.string(),list:u.string().array().optional(),image:be.optional(),displayScopes:u.boolean().optional(),applicableScopes:u.string().optional()}),Se=d({title:u.string(),content:u.string(),list:u.string().array().optional(),image:be.optional(),steps:xe.array().optional(),applicableScopes:u.string().optional()}),Ce=d({warning:u.string().optional(),sections:Se.array()}),we=d({config:Ce.optional(),setup:Ce.optional()}),Te=d({key:u.string(),type:u.enum([`warning`,`info`]).default(`info`),description:u.string(),position:u.enum([`top`,`bottom`]).default(`top`),anchor:u.string().optional()}).refine(e=>!(e.anchor&&e.position===`bottom`),{message:`anchor cannot be used with position: 'bottom'`,path:[`anchor`]}),Ee=d({certs:u.string().array().optional(),keys:u.string().array().optional()}).optional(),X=d({label:u.string(),authorization:_,certificates:Ee,requiredScopes:u.string().optional(),environments:d({key:u.string(),name:u.string()}).array(),support:d({link:u.string().optional(),description:u.string().optional(),guides:we.optional()}).optional(),configFields:U.array().optional(),configNotices:Te.array().optional(),setupFields:U.array().optional(),setupNotices:Te.array().optional(),refreshAuthentication:_e.optional(),testActions:d({action:u.string().or(ge),condition:u.string().optional(),required:u.boolean().default(!0)}).array().optional()}),De=X.extend({type:u.literal(`oauth2`),grantType:u.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),Oe=X.extend({type:u.literal(`custom`)}),ke=X.extend({type:u.literal(`oidc`)}),Ae=u.discriminatedUnion(`type`,[De,Oe,ke]),Z=d({steps:u.union([q,J]).array().min(1),result:u.string().optional()}),je=Z.extend({result:u.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)},Me=d({setup:d({creation:je,activation:Z.optional(),deletion:Z,isConsolidated:u.boolean().optional().default(!1)}).superRefine((e,t)=>{e.activation&&!phaseContainsTemplate(e.activation,"${inputs.remoteId}")&&t.addIssue({code:u.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:u.ZodIssueCode.custom,message:"Deletion phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`deletion`]})}).optional(),actions:Y.extend({actionType:u.literal(`event`),requiresManualSetup:u.boolean().optional()}).array().optional(),router:he.optional(),externalAccountIdExtractor:Y.extend({actionType:u.literal(`custom`),result:u.string().min(1)}).optional()}),Ne=d({StackOne:u.string(),info:d({title:u.string(),version:u.string(),key:u.string(),assets:d({icon:u.string()}),description:u.string(),details:u.string().optional()}),resources:u.string().optional(),documentation:d({references:d({title:u.string(),url:u.string(),description:u.string().optional()}).array()}).optional(),baseUrl:u.string(),scopeDefinitions:u.record(u.string(),d({description:u.string(),includes:u.string().optional()})).optional(),authentication:u.record(u.string(),Ae).array().optional(),actions:ge.array().optional(),events:Me.optional(),rateLimit:ve.optional(),concurrency:ye.optional(),releaseStage:u.enum(x).optional(),forkedFrom:u.string().optional()}).strict(),toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,t,n)=>{if(a(n))return;if(l(n.link))return n;let r=n.guides?.config?.sections,i=toKebabCase(t);return l(r)&&r.length>0&&i!==``?{...n,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${i}`}:n};function parseYamlConnector(e){try{let t=parseWithSchemaException(Ne,ne(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,documentation:t.documentation,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},o=buildActionsFromYaml(t,a);r.actions=o,hydrateTestActions(t,t.info.key,i,o,a),r.authentication=i,l(o)&&(r.categories=getConnectorCategoriesFromActions(Object.values(o)));let s=buildEventActionsFromYaml(t,a),c=t.events?.router,u=l(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=l(d)?{isConsolidated:d.isConsolidated,creation:parseWebhookSetupPhase(`creation`,d.creation,a),activation:l(d.activation)?parseWebhookSetupPhase(`activation`,d.activation,a):void 0,deletion:parseWebhookSetupPhase(`deletion`,d.deletion,a)}:void 0;if((l(s)||l(c)||l(u)||l(f))&&(r.events={setup:f,actions:s,router:c,externalAccountIdExtractor:u}),l(c)){let e=Object.keys(r.events?.actions??{}),n=t.info.key,i=c.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 V)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))t[n]={name:n,description:r.description,includes:parseScopesString(r?.includes)};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,setupNotices:i,configFields:a,configNotices:o,support:s,refreshAuthentication:c,testActions:l,requiredScopes:u,...d}=r;t[n]=stripAuthenticationSetup(d)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let o of Object.values(n)){for(let n of Object.values(o))n.testActions=n.testActions?.map((n,o)=>{if(l(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`,o],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)},Pe=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!l(e))return;let t=[];for(let n of e.matchAll(Pe)){let e=(n[1]??n[2])?.trim();e&&e.length>0&&t.push(e)}return t},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,n)=>{if(a(e))return e;let r=e.guides;if(a(r))return e;let i=parseGuideSectionsRequiredScopes(r.config?.sections,t,[...n,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(r.setup?.sections,t,[...n,`guides`,`setup`,`sections`]);return{...e,guides:{...r,config:i!==void 0&&r.config?{...r.config,sections:i}:r.config,setup:o!==void 0&&r.setup?{...r.setup,sections:o}:r.setup}}},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[],i=e.info.key;for(let[a,o]of(e.authentication??[]).entries()){let[s]=Object.keys(o);t[s]=o[s].environments.reduce((t,c)=>{let{key:u,name:d}=c,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=o[s],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${s}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let v=l(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(i,p.action.actionId),p.action)}:void 0,y=l(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,s,`support`]):void 0,b=l(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...l(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`||a(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)=>(te(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&&!F(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=u.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)},validateDataSyncPaginationKeys=(e,t,n,r)=>{let i=n?.pagination;if(!i)return;let a=j(i),o=M(i);if(!a||o.length===0)return;let s=new Set(r.filter(e=>e.in===a).map(e=>e.name)),c=[];for(let n of o)s.has(n)||c.push({message:`Pagination iterator references key '${n}' in '${a}', but no input with that name and location is declared on action '${e}'.`,path:[...t,`dataSync`,`pagination`,`iterator`],keys:[n]});if(c.length>0)throw new SchemaValidationError(c)},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),validateDataSyncPaginationKeys(n,t,r.dataSync,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,executionMode:r.executionMode,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,requiresManualSetup:r.requiresManualSetup}},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,n)=>{if(a(n)||!Array.isArray(n))return;let r=new Set(Object.keys(e.scopeDefinitions||{})),i=[],o=n.map((e,n)=>{if(typeof e!=`object`||!e)return;let a=parseScopesString(e.requiredScopes);return Object.values(a??[]).forEach(a=>{r.has(a)||i.push({message:`Scope '${a}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...t,`fieldConfigs`,n],keys:[`requiredScopes`]})}),{...e,requiredScopes:a}});if(i.length>0)throw new MissingScopeDefinitionError(i);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=w[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=w[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=u.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]=u.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=A(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 u.enum(n)},Fe={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=Fe[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 u.ZodError(r)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=u.string();break;case`number`:t=u.number();break;case`boolean`:t=u.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=u.object(n)}else t=u.record(u.string(),u.unknown());break;default:t=u.unknown()}return e.rules&&(t=applyInputRules(t,e.rules,e.type)),e.array&&(t=u.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`||a(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(l(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?l(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=>l(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 n=t.issues,r=[];return n.forEach(t=>{let n=t?.keys?.[0],i=a(n)?t.path:[...t.path,n],o=getErrorLineNumber(i,e);r.push({line:o,message:t.message,field:i.join(`.`)})}),{success:!1,errors:r}}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 n=t.issues,r=[],i=stepLocationFieldPrefix(t.location);return n.forEach(n=>{let o=n?.keys?.[0],s=a(o)?n.path:[...n.path,o],c=getErrorLineNumberInSteps(t.location,t.stepId,t.functionName,!0,e);r.push({line:c,message:n.message,field:`${i}${s.join(`.`)}`})}),{success:!1,errors:r}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,t)=>{let n=t.split(`
5
- `),r=0,i=-1,o=0;for(let t=0;t<n.length;t++){let s=n[t],c=s.match(/^(\s*)/)?.[1]?.length||0,u=s.replace(`- `,``).trim();if(u.startsWith(`#`)||u===``||c<=i)continue;let d=l(e[r])?`${String(e[r])}`:``;if(a(d))return o+1;if(isNaN(Number(d))){if(u.startsWith(`${d}:`)){if(r===e.length-1)return t+1;i=c,o=t,r++}}else{let e=parseInt(d,10),i=-1;for(let a=t;a<n.length;a++)if(n[a].trim().startsWith(`-`)&&i++,i===e){r++,o=t,t--;break}else t++}}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 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`}};function buildInputs(e,t,n){let r=e[t],i=r&&typeof r==`object`&&!Array.isArray(r)?{...r,...n}:n;return{...e,[t]:i}}function extractData(e,t){let n=r(t.outputs,e.response.dataKey);return Array.isArray(n)?n:n==null?[]:[n]}function isExhausted(e,t,n,r){let i=e.stopCondition??n;try{return!!z(`{{ ${i} }}`,t.outputs)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to evaluate pagination stop condition on page ${r}: ${i}. ${t}`)}}function createCursorPaginator(e,{baseInputs:t={}}={}){let n=`${e.response.nextKey} == null`;return{config:e,computeNextInputs({previousResponse:n}){if(!n)return{...t};let i=r(n.outputs,e.response.nextKey);return buildInputs(t,e.iterator.in,{[e.iterator.key]:i})},extractData:t=>extractData(e,t),isExhausted:(t,r)=>isExhausted(e,t,n,r)}}function createOffsetPaginator(e,{baseInputs:t={}}={}){let n=e.iterator.defaultLimit??100,{in:r,offsetKey:i,limitKey:a}=e.iterator,o=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){return buildInputs(t,r,{[i]:e*n,[a]:n})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,o,n)}}function createPagePaginator(e,{baseInputs:t={}}={}){let n=e.iterator.startPage??1,r=e.iterator.defaultPageSize??100,{in:i,pageKey:a,pageSizeKey:o}=e.iterator,s=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){let s={[a]:n+e};return o&&(s[o]=r),buildInputs(t,i,s)},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,s,n)}}const Ie={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=Ie[e.type];return n(e,t)}function extractItems(e,t){let n=t.pagination?.response.dataKey??t.dataKey??`data`,i=r(e.outputs,n);return Array.isArray(i)?i:i==null?[]:[i]}function assertSuccessful(e,t){if(e.response?.successful===!1)throw Error(`Action call failed on page ${t}: ${e.response.statusCode} ${e.response.message??``}`.trim())}const Le=1e4,Re=3e5;function hasExceededMaxIterations(e,t=Le){return e>=t}function hasExceededTimeout(e,t,n=Re){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,t,n={}){let r=n.maxIterations??Le,a=n.timeoutMs??Re,o=n.onPageComplete,s=n.now??Date.now,c=s(),l=[],u=0,d=null,f;for(;;){if(hasExceededMaxIterations(u,r))return{data:l,pagesRetrieved:u,stoppedBy:`maxIterations`};if(hasExceededTimeout(c,s(),a))return{data:l,pagesRetrieved:u,stoppedBy:`timeout`};let n=await t(e.computeNextInputs({previousResponse:f,currentIteration:u}));u++,assertSuccessful(n,u);let p=e.extractData(n),m=i(p);if(isDuplicatePage(m,d))return{data:l,pagesRetrieved:u,stoppedBy:`duplicatePage`};if(l.push(...p),d=m,f=n,o?.({pagesRetrieved:u,totalRecords:l.length}),e.isExhausted(n,u))return{data:l,pagesRetrieved:u,stoppedBy:`exhausted`}}}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.configNotices=r?.configNotices,i.setupFields=r?.setupFields,i.setupNotices=r?.setupNotices),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,t)=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage,...e.requiresManualSetup?{requires_manual_setup:!0}:{},authentication:t})),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,r);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,documentation:e.documentation}},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=getActionAuthenticationMethods(e),i=getScopeDefinitions(e),a=getEventActionsMeta(e,r);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:i.length>0?i:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:a.length>0?a:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>O(e,t),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=C.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===S.MAP_FIELDS?{[S.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:t,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:t,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:n(),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,n={...e.inputs??{}};if(!t?.enabled||a(n))return e;let r=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(n,{version:t.version??v,aliases:r},e.logger),{...e,inputs:n}},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=E(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 y&&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 n=`data`,r=e.outputs?.[n];if(a(r))return e;let i=Array.isArray(r)?r.map(e=>mapCompositeIds(e,t)):mapCompositeIds(r,t);return{...e,outputs:{...e.outputs??{},[n]:i}}},mapCompositeIds=(e,t)=>{let n=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,t));return{...e,...s(n)?n:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??v,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=D(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=>c(e)&&e.length>0),shouldSkipEncoding=(e,t)=>N(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return D({key:e,value:t},{version:v})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>c(t)&&t.length>0&&!N(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=D({key:e,value:t},{version:v}),n[`remote_${e}`]=t)},processIdField=(e,t,n)=>{isValidStringArray(t)?processStringArrayField(e,t,n):c(t)&&t.length>0&&processStringField(e,t,n)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!s(e))return e;let t={...e};for(let[n,r]of Object.entries(e))(s(r)||Array.isArray(r)&&r.length>0&&s(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 l(e.inputs?.page_size)&&o(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t},virtualPaginateResult=(e,t,n,r)=>{let i=a(e)?void 0:e.data,o=Object.keys(n).length+1,c=ee({cursor:r,ignoreStepIndex:o});if(!s(e)||a(i)||(i?.length??0)<=t)return{result:e,next:l(r)&&!c?I(r):null};let u=r?.remote?.[o]?.pageNumber??1,d=(u-1)*t,f=d+t,p=i.slice(d,f),m=i.length>f||!c,h=L({cursor:r,stepIndex:o,pageNumber:u+1});return{result:{...e,data:p},next:m?I(h):null}},runStepAction=async({block:e,buildStepFunction:t=C.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?!B(e.condition,t):!1,buildStepParamsForFunction=(e,t,n)=>{let r=w[e.functionName]?.[`v${e.version??1}`],i=l(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}):P(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?L({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,i,a,o)=>{let c=new Date,l=B(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,o]of l.entries()){let l={...f,iterator:{item:o,index:r}};for(let d of u){let u=a.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 i.hasFatalError=!0,i.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:s(o)?void 0:String(o),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:o,index:r,current:g.output}},g.streamOutput)return i.hasFatalError=!0,i.errorStatusCode=500,m[r]={iterator:s(o)?void 0:String(o),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:s(o)?void 0:String(o),snapshot:{successful:p?.successful??!0,output:p?.output,errors:p?.errors}},p?.output&&d.push(p.output)}let h=r.action?.cursor.enabled?L({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,i)=>{let a=!n.hasFatalError,o=a?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:a,statusCode:o,message:a?void 0:e.action?.responses?.errors?.[o]?.description??R?.[o]??`Error while processing the request`}};let c=l(i)&&s(i.result)?{next:i.next,...i.result}:r;return{...t,outputs:c,response:{successful:a,statusCode:o,message:a?void 0:e.action?.responses?.errors?.[o]?.description??R?.[o]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=C.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=T(t);return s(e)?re(e,n):B(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(a(t))return{};let n=t.logs,r=n&&typeof n.enabled==`boolean`?{enabled:n.enabled}:void 0,i=t.advanced,o=i?{}:void 0;return i&&o&&(typeof i.enabled==`boolean`&&(o.enabled=i.enabled),typeof i.ttl==`number`&&(o.ttl=i.ttl),typeof i.errorsOnly==`boolean`&&(o.errorsOnly=i.errorsOnly),typeof i.includeBackground==`boolean`&&(o.includeBackground=i.includeBackground)),{logs:r,advanced:o}},recordActionResult=async({action:e,resultBlock:t,mode:n,organizationId:r,pathParams:i,queryParams:o,body:s,headers:c,source:u,isBackground:d,settings:f,logger:p})=>{if(a(e)){p?.warning({message:`action missing, skipping recording action result`});return}let m=t.olapClient;if(a(m)){p?.warning({message:`olap client is missing, skipping recording action result`});return}let h=getOlapOptions(f),g={actionId:e.id,mode:n,url:e?.entrypointUrl,pathParams:i,queryParams:o,body:s,headers:c,sourceId:u?.sourceId,sourceType:u?.sourceType,sourceValue:u?.sourceValue,isBackground:d,startTime:t.statistics?.startTime},_=t.context,v={actionRunId:_.actionRunId||`missing`,actionId:e.id,connectorKey:_.connectorKey,connectorVersion:_.connectorVersion,connectorOwner:_.connectorOwner,connectorProfileId:_.connectorProfileId,actionType:_.actionType,category:_.category,organizationId:r,projectSecureId:_.projectSecureId,accountSecureId:_.accountSecureId,originOwnerId:_.originOwnerId,originOwnerName:_.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:t.response?.successful??!1,statusCode:t.response?.statusCode,body:t.outputs??void 0,message:t.response?.message,endTime:t.statistics?.endTime,defenderContext:t.defenderMetadata};try{await m.recordAction(g,v,h);let n=e.steps||{},i=Object.keys(n).map((e,i)=>{let o=t.steps?.[e];if(a(o))return null;let s=n[e],c=s?.stepFunction?.functionName,l=s?.stepFunction?.version,u=s&&`iterator`in s&&t.intermediateSteps?.[e]?Object.keys(t.intermediateSteps[e]).length:void 0,d=typeof o.output?.statusCode==`number`?o.output.statusCode:void 0;return{input:{actionRunId:v.actionRunId,actionMode:g.mode,actionSuccess:v.success,stepIndex:i,stepId:e,organizationId:r,projectSecureId:_.projectSecureId,accountSecureId:_.accountSecureId,inputs:t.inputs,...c&&{stepFunctionName:c},...l&&{stepFunctionVersion:l},...u!==void 0&&{stepIterations:u},startTime:o.statistics?.startTime},result:{success:o.successful,statusCode:d,message:o.message,outputs:o.output,errors:o.errors,skipped:o.skipped,endTime:o.statistics?.endTime}}}).filter(l);i.length>0&&await m.recordSteps(i,h)}catch(e){p?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},ze={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},buildTier2Config=e=>{let t={};return e?.highRiskThreshold!==void 0&&(t.highRiskThreshold=e.highRiskThreshold),e?.mediumRiskThreshold!==void 0&&(t.mediumRiskThreshold=e.mediumRiskThreshold),e?.multiheadEnabled&&(t.multihead={mainThreshold:.64,auxThreshold:.458}),Object.keys(t).length>0?{tier2Config:t}:{}},recordingFieldsFromParams=e=>({mode:e.mode,organizationId:e.account.organizationId,pathParams:e.pathParams,queryParams:e.queryParams,body:e.body,headers:e.headers,source:e.source,settings:e.settings,logger:e.logger}),applyDefenderToBlock=async(e,t,n,r)=>{if(!n?.defender?.enabled)return e;let{defenderMetadata:i,outputs:a,response:o}=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,...l(a)&&{outputs:a},...l(o)&&{response:o}}},runAction=async e=>{let{pathParams:t={},queryParams:n={},body:r={},headers:i={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=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,ee=v.originOwnerName,P=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:ee,sourceType:C?.sourceType,sourceId:C?.sourceId,sourceValue:C?.sourceValue,flowType:ze[_]}),F=new Date,I;try{I=c(y)?o(y):y}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:o}=E,c=findActionByActionId(I,o);if(a(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c,blockContext:P,queryParams:n,pathParams:t,body:r,headers:i,parseActionInputsFn:s,createBlockFn:d,createBlockParams:L,runStepActionFn:f});return l=await applyDefenderToBlock(l,g,S,w),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c,resultBlock:l,...recordingFieldsFromParams(e)}),l}else if(_===`test_actions`){let t=h(I,D,O);if(a(t)||t.length===0)return await createSuccessBlock(d,L);P.actionType=`test`;for(let n of t){let t=new Date,r=await d({...L,inputs:void 0,action:n.action,nextCursor:void 0});if(!(!l(n.condition)||z(n.condition,r)))continue;let i=await f({block:r});if(i=await applyDefenderToBlock(i,applyDefender,S,w),(a(i?.response?.successful)||!i.response.successful)&&n.required){w?.error({code:`TestActionFailed`,message:`Test action "${n.action.id}" failed with error: ${i?.response?.message}`});let r=await createErrorBlock(d,L);return r.statistics={startTime:t,endTime:new Date},await recordActionResult({action:n.action,resultBlock:r,...recordingFieldsFromParams(e)}),r}i.statistics={startTime:t,endTime:new Date},await recordActionResult({action:n.action,resultBlock:i,...recordingFieldsFromParams(e)})}let n=await createSuccessBlock(d,L);return n.statistics={startTime:F,endTime:new Date},n}else if(_===`refresh_authentication`){let t=m(I,D,O);if(a(t))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:t.action,blockContext:P,queryParams:n,pathParams:t.params,body:r,headers:i,parseActionInputsFn:s,createBlockFn:d,createBlockParams:L,runStepActionFn:f});return o=await applyDefenderToBlock(o,g,S,w),o.statistics={startTime:F,endTime:new Date},await recordActionResult({action:t.action,resultBlock:o,...recordingFieldsFromParams(e)}),o}else if(_===`path`){let{path:t,method:o}=E,c=p(I,t,o);if(a(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:n,pathParams:c.params,body:r,headers:i,parseActionInputsFn:s,createBlockFn:d,createBlockParams:L,runStepActionFn:f});return l=await applyDefenderToBlock(l,g,S,w),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,resultBlock:l,...recordingFieldsFromParams(e)}),l}else return await createErrorBlock(d,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,t)=>{let n=e?.next,r=l(n)&&t.actionType===`list`?k(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 ie({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,...buildTier2Config(r?.defender)}).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,tier2RawScore:t.tier2RawScore,tier2AuxScore:t.tier2AuxScore,tier2MultiheadBlocked:t.tier2MultiheadBlocked,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}}}}},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:n,connector:r,body:i={},headers:o={},logger:s,getHttpClient:c,getOlapClient:l,emitEvent:u,findActionFn:d=findEventActionByActionId,parseActionInputsFn:f=parseActionInputs,createBlockContextFn:p=createBlockContext,createBlockFn:m=createBlock,runStepActionFn:h=runStepAction})=>{let g=p({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`}),_=d(r,e);if(a(_))throw new MissingActionError(g,`No matching event action found`);g.actionType=`event`,g.schema=_.schema?.key;let v=f(_,{body:i,headers:o}),y=new Date,b=await m({connector:r,context:g,credentials:n.credentials,logger:s,getHttpClient:c,getOlapClient:l,emitEvent:u,inputs:v,action:_,nextCursor:void 0}),x={mode:`event`,organizationId:n.organizationId,body:i,headers:o,source:{sourceType:t.NATIVE_WEBHOOK},isBackground:!1,logger:s},S;try{S=await h({block:b})}catch(t){throw s?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),await recordActionResult({action:_,resultBlock:{...b,response:{successful:!1,statusCode:500,message:t.message},statistics:{startTime:y,endTime:new Date}},...x}),t}if(S.statistics={startTime:y,endTime:new Date},typeof S.outputs?.statusCode!=`number`)throw await recordActionResult({action:_,resultBlock:{...S,response:{successful:!1,statusCode:500,message:`Event action output must include a numeric statusCode`}},...x}),new InvalidEventOutputError(g,`Event action output must include a numeric statusCode`);return await recordActionResult({action:_,resultBlock:S,...x}),S},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:o,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,connectorKey:f,connectorVersion:p,authConfigKey:m,environment:h,logger:g,getHttpClient:_,getOlapClient:v,createBlockFn:y=createBlock,createBlockContextFn:b=createBlockContext,runStepActionFn:x=runStepAction})=>{let S=e.categories?.[0];if(a(S))throw Error(`Connector category is required for webhook setup phase execution (connector '${f}')`);let C=phaseAsAction(n,r),w=b({category:S,connectorKey:f,connectorVersion:p,authConfigKey:m,environment:h,action:C,accountSecureId:s,projectSecureId:c,organizationId:l,originOwnerId:u,originOwnerName:d,flowType:`action`}),T=new Date,E=await y({connector:e,inputs:i,credentials:o,context:w,action:C,logger:g,getHttpClient:_,getOlapClient:v}),D={mode:`webhook_setup`,organizationId:l,body:i,source:{sourceType:t.NATIVE_WEBHOOK_SETUP_WORKER},isBackground:!0,logger:g},O;try{O=await x({block:E})}catch(e){throw await recordActionResult({action:C,resultBlock:{...E,response:{successful:!1,statusCode:500,message:e.message},statistics:{startTime:T,endTime:new Date}},...D}),e}if(O.statistics={startTime:T,endTime:new Date},a(O.response))throw await recordActionResult({action:C,resultBlock:{...O,response:{successful:!1,statusCode:500,message:`Webhook setup ${r} phase produced no response`}},...D}),Error(`Webhook setup ${r} phase produced no response (connector '${f}')`);return await recordActionResult({action:C,resultBlock:O,...D}),{successful:O.response.successful,statusCode:O.response.statusCode,outputs:O.outputs}};export{Q as ConnectSDKError,InvalidActionInputsError,InvalidEventOutputError,applyReleaseStageToConnector,createBlock,createCursorPaginator,createOffsetPaginator,createPagePaginator,createPaginator,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,extractItems,formatValidationErrorResponse,getActionFromUrl,getActionMeta,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,paginate,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runEventActionById,runStepAction,runTestActions,runWebhookSetupPhase,supportsRefreshAuthentication,validateYamlConnector};
1
+ import{t as e}from"./chunk-Cfxk5zVN.mjs";import{generateActionRunId as t,getByDotPath as n,getContentHash as r,isMissing as i,isNumber as a,isObject as o,isString as s,notMissing as c,z as l,zStrictObject as u}from"@stackone/utils";import{match as d}from"path-to-regexp";import{readFileSync as f}from"fs";import{dirname as p,join as m,resolve as h}from"path";import{AUTHORIZATION_SCHEMA as g,COMPOSITE_ID_LATEST_VERSION as _,CoreError as v,ExecutionModes as y,ReleaseStages as b,SourceType as x,StepFunctionName as S,StepFunctionsFactory as C,StepFunctionsRegistry as w,buildExpressionContext as T,decodeCompositeId as E,encodeCompositeId as D,evaluateExternalAccountIdExtractor as O,expandCursor as k,getInputEnumValues as A,getIteratorLocation as j,getPaginationKeys as M,isCompositeId as N,isCursorEmpty as ee,isForeachStep as P,isValidEnumRef as F,minifyCursor as I,updateCursor as L}from"@stackone/core";import{HttpErrorMessages as R,isSuccessStatusCode as te}from"@stackone/transport";import{parse as ne}from"yaml";import{evaluate as z,safeEvaluate as B,safeEvaluateRecord as re}from"@stackone/expressions";import{createPromptDefense as ie}from"@stackone/defender";const createBlock=async({connector:e,inputs:t,context:n,action:r,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u,emitEvent:d})=>{if(i(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:t,fieldConfigs:[],context:n,action:r,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=>c(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=d(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim().replace(/\{([^}]+)\}/g,`:$1`)))(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=f(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
2
+ `),p(e)).join(`
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=h(m(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{return f(n,`utf8`).split(`
4
+ `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var V=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 V{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends V{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 V{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 V{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 V{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 V{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 V{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 V{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.`}}),ae=u({type:l.literal(`cursor`),response:u({dataKey:l.string(),nextKey:l.string()}),iterator:u({key:l.string(),in:l.enum([`query`,`body`,`headers`])}),stopCondition:l.string().optional()}),oe=u({type:l.literal(`offset`),response:u({dataKey:l.string()}),iterator:u({offsetKey:l.string(),limitKey:l.string(),in:l.enum([`query`,`body`,`headers`]),defaultLimit:l.number().optional()}),stopCondition:l.string().optional()}),se=u({type:l.literal(`page`),response:u({dataKey:l.string()}),iterator:u({pageKey:l.string(),pageSizeKey:l.string().optional(),in:l.enum([`query`,`body`,`headers`]),startPage:l.number().optional(),defaultPageSize:l.number().optional()}),stopCondition:l.string().optional()}),ce=l.discriminatedUnion(`type`,[ae,oe,se]),H={key:l.string(),label:l.string(),required:l.boolean().optional().default(!1),secret:l.boolean().optional().default(!1),externalSystemAccountIdentifier:l.boolean().optional(),readOnly:l.boolean().optional().default(!1),placeholder:l.string().optional(),description:l.string().optional(),tooltip:l.string().optional(),value:l.string().optional(),computed:l.boolean().optional()},U=l.discriminatedUnion(`type`,[u({...H,type:l.enum([`text`,`password`])}),u({...H,type:l.literal(`select`),options:u({value:l.string(),label:l.string()}).array()})]).superRefine((e,t)=>{e.computed===!0&&!e.value&&t.addIssue({code:l.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),W=u({targetFieldKey:l.string(),alias:l.string().optional(),expression:l.string().optional(),values:l.unknown().optional(),type:l.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:l.boolean().default(!1),custom:l.boolean().default(!1),hidden:l.boolean().default(!1),enumMapper:u({matcher:l.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(u({matchExpression:l.string(),value:l.string()}).array())}).optional(),properties:l.lazy(()=>W).array().optional(),requiredScopes:l.string().optional()}),le=l.union([u({values:l.string().array().min(1)}),u({ref:l.string()})]),ue=u({minLength:l.number().optional(),maxLength:l.number().optional(),pattern:l.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:l.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:l.number().optional(),max:l.number().optional(),errorMessage:l.string().optional()}),de=u({field:l.string(),equals:l.string().optional(),notEquals:l.string().optional(),present:l.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`}),fe=l.discriminatedUnion(`rule`,[u({rule:l.literal(`atLeastOneOf`),fields:l.string().array().min(2),errorMessage:l.string().optional()}),u({rule:l.literal(`requiredIf`),field:l.string(),condition:de,errorMessage:l.string().optional()}),u({rule:l.literal(`mutuallyExclusive`),fields:l.string().array().min(2),errorMessage:l.string().optional()})]),G=u({name:l.string(),type:l.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:l.boolean(),description:l.string(),array:l.boolean().optional().default(!1),arrayFormat:l.enum([`repeat`,`brackets`,`comma`,`stringify`]).optional(),in:l.enum([`body`,`query`,`path`,`headers`]),properties:l.lazy(()=>G.omit({in:!0})).array().optional(),oneOf:le.optional(),rules:ue.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`}),pe=l.object({exampleDescription:l.string().optional()}).catchall(l.unknown()),K=u({functionName:l.string(),version:l.string().optional(),parameters:l.record(l.string(),l.unknown())}),q=u({stepId:l.string(),description:l.string(),stepFunction:K,condition:l.string().optional(),ignoreError:l.boolean().optional()}),J=u({stepId:l.string(),description:l.string(),iterator:l.string(),stepFunction:K.optional(),stepFunctions:K.array().optional(),condition:l.string().optional(),ignoreError:l.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`}),me=u({allowed:l.boolean(),indexField:l.string().or(l.string().array()),dataKey:l.string().optional(),pagination:ce.optional(),maxPages:l.number().int().positive().optional(),maxDurationMinutes:l.number().int().positive().optional()}),he=u({rules:u({when:l.string(),then:u({action:l.string(),input:l.record(l.string(),l.unknown()).optional()})}).array()}),Y=u({actionId:l.string(),categories:l.string().array(),actionType:l.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),executionMode:l.enum(y).optional(),schema:l.string().optional(),schemaType:l.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:l.string().optional(),entrypointHttpMethod:l.string().optional(),label:l.string(),description:l.string(),details:l.string().optional(),examples:pe.array().optional(),tags:l.string().array().optional(),releaseStage:l.enum(b).optional(),resources:l.string().optional(),responses:u({statusCode:l.number(),description:l.string()}).array().optional(),requiredScopes:l.string().optional(),inputs:G.array().optional(),validationRules:fe.array().optional(),cursor:u({enabled:l.boolean(),pageSize:l.number()}).optional(),compositeIdentifiers:u({enabled:l.boolean(),version:l.number().optional(),fields:u({targetFieldKey:l.string(),remote:l.string().optional(),components:l.string().array()}).array().optional()}).optional(),fieldConfigs:W.array().optional(),steps:l.union([q,J]).array(),result:l.string().or(l.record(l.string(),l.unknown())).optional(),dataSync:me.optional(),providerEvents:l.string().array().nonempty().optional()}),stepUsesBrowserUse=e=>`stepFunction`in e&&e.stepFunction?.functionName===S.BROWSER_USE?!0:`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>e.functionName===S.BROWSER_USE):!1,ge=Y.superRefine((e,t)=>{e.executionMode!==`async`&&e.steps.some(stepUsesBrowserUse)&&t.addIssue({code:l.ZodIssueCode.custom,message:`Actions containing a 'browser_use' step must declare executionMode: 'async' so they are dispatched to the Temporal workflow runtime`,path:[`executionMode`]})}),_e=u({schedule:l.string().optional(),action:Y.extend({actionType:l.literal(`refresh_token`)})}),ve=u({mainRatelimit:l.number(),subPools:l.array(u({subPoolKey:l.string(),urlPattern:l.string(),rateLimit:l.number()})).optional(),mappedRateLimitErrors:l.array(u({errorStatus:l.number(),errorMessage:l.string(),errorMessagePath:l.string().optional(),retryAfterPath:l.string().optional(),retryAfterUnit:l.union([l.literal(`seconds`),l.literal(`milliseconds`),l.literal(`date`)]).optional(),retryAfterValue:l.number().optional()})).optional()}),ye=u({mainMaxConcurrency:l.number(),subPools:l.array(u({subPoolKey:l.string(),urlPattern:l.string(),maxConcurrency:l.number()})).optional()}),be=u({src:l.string(),alt:l.string()}),xe=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:be.optional(),displayScopes:l.boolean().optional(),applicableScopes:l.string().optional()}),Se=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:be.optional(),steps:xe.array().optional(),applicableScopes:l.string().optional()}),Ce=u({warning:l.string().optional(),sections:Se.array()}),we=u({config:Ce.optional(),setup:Ce.optional()}),Te=u({key:l.string(),type:l.enum([`warning`,`info`]).default(`info`),description:l.string(),position:l.enum([`top`,`bottom`]).default(`top`),anchor:l.string().optional()}).refine(e=>!(e.anchor&&e.position===`bottom`),{message:`anchor cannot be used with position: 'bottom'`,path:[`anchor`]}),Ee=u({certs:l.string().array().optional(),keys:l.string().array().optional()}).optional(),X=u({label:l.string(),authorization:g,certificates:Ee,requiredScopes:l.string().optional(),environments:u({key:l.string(),name:l.string()}).array(),support:u({link:l.string().optional(),description:l.string().optional(),guides:we.optional()}).optional(),configFields:U.array().optional(),configNotices:Te.array().optional(),setupFields:U.array().optional(),setupNotices:Te.array().optional(),refreshAuthentication:_e.optional(),testActions:u({action:l.string().or(ge),condition:l.string().optional(),required:l.boolean().default(!0)}).array().optional()}),De=X.extend({type:l.literal(`oauth2`),grantType:l.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),Oe=X.extend({type:l.literal(`custom`)}),ke=X.extend({type:l.literal(`oidc`)}),Ae=l.discriminatedUnion(`type`,[De,Oe,ke]),Z=u({steps:l.union([q,J]).array().min(1),result:l.string().optional()}),je=Z.extend({result:l.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)},Me=u({setup:u({creation:je,activation:Z.optional(),deletion:Z,isConsolidated:l.boolean().optional().default(!1)}).superRefine((e,t)=>{e.activation&&!phaseContainsTemplate(e.activation,"${inputs.remoteId}")&&t.addIssue({code:l.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:l.ZodIssueCode.custom,message:"Deletion phase must reference '${inputs.remoteId}' in at least one step parameter",path:[`deletion`]})}).optional(),actions:Y.extend({actionType:l.literal(`event`),requiresManualSetup:l.boolean().optional()}).array().optional(),router:he.optional(),externalAccountIdExtractor:Y.extend({actionType:l.literal(`custom`),result:l.string().min(1)}).optional()}),Ne=u({StackOne:l.string(),info:u({title:l.string(),version:l.string(),key:l.string(),assets:u({icon:l.string()}),description:l.string(),details:l.string().optional()}),resources:l.string().optional(),documentation:u({references:u({title:l.string(),url:l.string(),description:l.string().optional()}).array()}).optional(),baseUrl:l.string(),scopeDefinitions:l.record(l.string(),u({description:l.string(),includes:l.string().optional()})).optional(),authentication:l.record(l.string(),Ae).array().optional(),actions:ge.array().optional(),events:Me.optional(),rateLimit:ve.optional(),concurrency:ye.optional(),releaseStage:l.enum(b).optional(),forkedFrom:l.string().optional()}).strict(),toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,t,n)=>{if(i(n))return;if(c(n.link))return n;let r=n.guides?.config?.sections,a=toKebabCase(t);return c(r)&&r.length>0&&a!==``?{...n,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:n};function parseYamlConnector(e){try{let t=parseWithSchemaException(Ne,ne(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,documentation:t.documentation,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},o=buildActionsFromYaml(t,a);r.actions=o,hydrateTestActions(t,t.info.key,i,o,a),r.authentication=i,c(o)&&(r.categories=getConnectorCategoriesFromActions(Object.values(o)));let s=buildEventActionsFromYaml(t,a),l=t.events?.router,u=c(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=c(d)?{isConsolidated:d.isConsolidated,creation:parseWebhookSetupPhase(`creation`,d.creation,a),activation:c(d.activation)?parseWebhookSetupPhase(`activation`,d.activation,a):void 0,deletion:parseWebhookSetupPhase(`deletion`,d.deletion,a)}:void 0;if((c(s)||c(l)||c(u)||c(f))&&(r.events={setup:f,actions:s,router:l,externalAccountIdExtractor:u}),c(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 V)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))t[n]={name:n,description:r.description,includes:parseScopesString(r?.includes)};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,setupNotices:i,configFields:a,configNotices:o,support:s,refreshAuthentication:c,testActions:l,requiredScopes:u,...d}=r;t[n]=stripAuthenticationSetup(d)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let o of Object.values(n)){for(let n of Object.values(o))n.testActions=n.testActions?.map((n,o)=>{if(c(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`,o],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)},Pe=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!c(e))return;let t=[];for(let n of e.matchAll(Pe)){let e=(n[1]??n[2])?.trim();e&&e.length>0&&t.push(e)}return t},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,n)=>{if(i(e))return e;let r=e.guides;if(i(r))return e;let a=parseGuideSectionsRequiredScopes(r.config?.sections,t,[...n,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(r.setup?.sections,t,[...n,`guides`,`setup`,`sections`]);return{...e,guides:{...r,config:a!==void 0&&r.config?{...r.config,sections:a}:r.config,setup:o!==void 0&&r.setup?{...r.setup,sections:o}:r.setup}}},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[],i=e.info.key;for(let[a,o]of(e.authentication??[]).entries()){let[s]=Object.keys(o);t[s]=o[s].environments.reduce((t,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=o[s],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${s}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let v=c(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(i,p.action.actionId),p.action)}:void 0,y=c(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,s,`support`]):void 0,b=c(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...c(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`||i(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)=>(te(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&&!F(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=l.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)},validateDataSyncPaginationKeys=(e,t,n,r)=>{let i=n?.pagination;if(!i)return;let a=j(i),o=M(i);if(!a||o.length===0)return;let s=new Set(r.filter(e=>e.in===a).map(e=>e.name)),c=[];for(let n of o)s.has(n)||c.push({message:`Pagination iterator references key '${n}' in '${a}', but no input with that name and location is declared on action '${e}'.`,path:[...t,`dataSync`,`pagination`,`iterator`],keys:[n]});if(c.length>0)throw new SchemaValidationError(c)},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),validateDataSyncPaginationKeys(n,t,r.dataSync,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,executionMode:r.executionMode,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,requiresManualSetup:r.requiresManualSetup}},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,n)=>{if(i(n)||!Array.isArray(n))return;let r=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=n.map((e,n)=>{if(typeof e!=`object`||!e)return;let i=parseScopesString(e.requiredScopes);return Object.values(i??[]).forEach(i=>{r.has(i)||a.push({message:`Scope '${i}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...t,`fieldConfigs`,n],keys:[`requiredScopes`]})}),{...e,requiredScopes:i}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=w[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=w[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=l.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]=l.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=A(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 l.enum(n)},Fe={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=Fe[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 l.ZodError(r)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=l.string();break;case`number`:t=l.number();break;case`boolean`:t=l.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=l.object(n)}else t=l.record(l.string(),l.unknown());break;default:t=l.unknown()}return e.rules&&(t=applyInputRules(t,e.rules,e.type)),e.array&&(t=l.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`||i(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(c(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?c(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=>c(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 n=t.issues,r=[];return n.forEach(t=>{let n=t?.keys?.[0],a=i(n)?t.path:[...t.path,n],o=getErrorLineNumber(a,e);r.push({line:o,message:t.message,field:a.join(`.`)})}),{success:!1,errors:r}}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 n=t.issues,r=[],a=stepLocationFieldPrefix(t.location);return n.forEach(n=>{let o=n?.keys?.[0],s=i(o)?n.path:[...n.path,o],c=getErrorLineNumberInSteps(t.location,t.stepId,t.functionName,!0,e);r.push({line:c,message:n.message,field:`${a}${s.join(`.`)}`})}),{success:!1,errors:r}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,t)=>{let n=t.split(`
5
+ `),r=0,a=-1,o=0;for(let t=0;t<n.length;t++){let s=n[t],l=s.match(/^(\s*)/)?.[1]?.length||0,u=s.replace(`- `,``).trim();if(u.startsWith(`#`)||u===``||l<=a)continue;let d=c(e[r])?`${String(e[r])}`:``;if(i(d))return o+1;if(isNaN(Number(d))){if(u.startsWith(`${d}:`)){if(r===e.length-1)return t+1;a=l,o=t,r++}}else{let e=parseInt(d,10),i=-1;for(let a=t;a<n.length;a++)if(n[a].trim().startsWith(`-`)&&i++,i===e){r++,o=t,t--;break}else t++}}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 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`}};function buildInputs(e,t,n){let r=e[t],i=r&&typeof r==`object`&&!Array.isArray(r)?{...r,...n}:n;return{...e,[t]:i}}function extractData(e,t){let r=n(t.outputs,e.response.dataKey);return Array.isArray(r)?r:r==null?[]:[r]}function isExhausted(e,t,n,r){let i=e.stopCondition??n;try{return!!z(`{{ ${i} }}`,t.outputs)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to evaluate pagination stop condition on page ${r}: ${i}. ${t}`)}}function createCursorPaginator(e,{baseInputs:t={}}={}){let r=`${e.response.nextKey} == null`;return{config:e,computeNextInputs({previousResponse:r}){if(!r)return{...t};let i=n(r.outputs,e.response.nextKey);return buildInputs(t,e.iterator.in,{[e.iterator.key]:i})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,r,n)}}function createOffsetPaginator(e,{baseInputs:t={}}={}){let n=e.iterator.defaultLimit??100,{in:r,offsetKey:i,limitKey:a}=e.iterator,o=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){return buildInputs(t,r,{[i]:e*n,[a]:n})},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,o,n)}}function createPagePaginator(e,{baseInputs:t={}}={}){let n=e.iterator.startPage??1,r=e.iterator.defaultPageSize??100,{in:i,pageKey:a,pageSizeKey:o}=e.iterator,s=`${e.response.dataKey}[0] == null`;return{config:e,computeNextInputs({currentIteration:e}){let s={[a]:n+e};return o&&(s[o]=r),buildInputs(t,i,s)},extractData:t=>extractData(e,t),isExhausted:(t,n)=>isExhausted(e,t,s,n)}}const Ie={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=Ie[e.type];return n(e,t)}function extractItems(e,t){let r=t.pagination?.response.dataKey??t.dataKey??`data`,i=n(e.outputs,r);return Array.isArray(i)?i:i==null?[]:[i]}function assertSuccessful(e,t){if(e.response?.successful===!1)throw Error(`Action call failed on page ${t}: ${e.response.statusCode} ${e.response.message??``}`.trim())}const Le=1e4,Re=3e5;function hasExceededMaxIterations(e,t=Le){return e>=t}function hasExceededTimeout(e,t,n=Re){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,t,n={}){let i=n.maxIterations??Le,a=n.timeoutMs??Re,o=n.onPageComplete,s=n.now??Date.now,c=s(),l=[],u=0,d=null,f;for(;;){if(hasExceededMaxIterations(u,i))return{data:l,pagesRetrieved:u,stoppedBy:`maxIterations`};if(hasExceededTimeout(c,s(),a))return{data:l,pagesRetrieved:u,stoppedBy:`timeout`};let n=await t(e.computeNextInputs({previousResponse:f,currentIteration:u}));u++,assertSuccessful(n,u);let p=e.extractData(n),m=r(p);if(isDuplicatePage(m,d))return{data:l,pagesRetrieved:u,stoppedBy:`duplicatePage`};if(l.push(...p),d=m,f=n,o?.({pagesRetrieved:u,totalRecords:l.length}),e.isExhausted(n,u))return{data:l,pagesRetrieved:u,stoppedBy:`exhausted`}}}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.configNotices=r?.configNotices,i.setupFields=r?.setupFields,i.setupNotices=r?.setupNotices),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,t)=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage,...e.requiresManualSetup?{requires_manual_setup:!0}:{},authentication:t})),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,r);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,documentation:e.documentation}},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=getActionAuthenticationMethods(e),i=getScopeDefinitions(e),a=getEventActionsMeta(e,r);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:i.length>0?i:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:a.length>0?a:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>O(e,t),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=C.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===S.MAP_FIELDS?{[S.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,authType:g,authId:_,sessionId:v,agentId:y,userAgent:b,ipAddress:x,transportType:S,streamType:C,flowType:w,sourceValue:T})=>({organizationId:d,projectSecureId:u,accountSecureId:l,connectorKey:n,connectorVersion:r,connectorOwner:i,connectorProfileId:a,category:e,service:``,resource:``,originOwnerId:f,originOwnerName:p,sourceType:m,sourceId:h,authType:g,authId:_,sessionId:v,agentId:y,userAgent:b,ipAddress:x,transportType:S,streamType:C,schema:c?.schema?.key,actionType:c?.actionType??`unknown`,authenticationType:o,environment:s,actionRunId:t(),flowType:w,sourceValue:T}),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,n={...e.inputs??{}};if(!t?.enabled||i(n))return e;let r=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(n,{version:t.version??_,aliases:r},e.logger),{...e,inputs:n}},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=E(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 v&&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 n=`data`,r=e.outputs?.[n];if(i(r))return e;let a=Array.isArray(r)?r.map(e=>mapCompositeIds(e,t)):mapCompositeIds(r,t);return{...e,outputs:{...e.outputs??{},[n]:a}}},mapCompositeIds=(e,t)=>{let n=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,t));return{...e,...o(n)?n:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??_,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=D(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=>s(e)&&e.length>0),shouldSkipEncoding=(e,t)=>N(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return D({key:e,value:t},{version:_})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>s(t)&&t.length>0&&!N(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=D({key:e,value:t},{version:_}),n[`remote_${e}`]=t)},processIdField=(e,t,n)=>{isValidStringArray(t)?processStringArrayField(e,t,n):s(t)&&t.length>0&&processStringField(e,t,n)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!o(e))return e;let t={...e};for(let[n,r]of Object.entries(e))(o(r)||Array.isArray(r)&&r.length>0&&o(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 c(e.inputs?.page_size)&&a(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t},virtualPaginateResult=(e,t,n,r)=>{let a=i(e)?void 0:e.data,s=Object.keys(n).length+1,l=ee({cursor:r,ignoreStepIndex:s});if(!o(e)||i(a)||(a?.length??0)<=t)return{result:e,next:c(r)&&!l?I(r):null};let u=r?.remote?.[s]?.pageNumber??1,d=(u-1)*t,f=d+t,p=a.slice(d,f),m=a.length>f||!l,h=L({cursor:r,stepIndex:s,pageNumber:u+1});return{result:{...e,data:p},next:m?I(h):null}},runStepAction=async({block:e,buildStepFunction:t=C.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?!B(e.condition,t):!1,buildStepParamsForFunction=(e,t,n)=>{let r=w[e.functionName]?.[`v${e.version??1}`],i=c(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}):P(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?L({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,i,a,s)=>{let c=new Date,l=B(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=a.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 i.hasFatalError=!0,i.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:o(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 i.hasFatalError=!0,i.errorStatusCode=500,m[r]={iterator:o(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:o(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?L({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,i)=>{let a=!n.hasFatalError,s=a?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:a,statusCode:s,message:a?void 0:e.action?.responses?.errors?.[s]?.description??R?.[s]??`Error while processing the request`}};let l=c(i)&&o(i.result)?{next:i.next,...i.result}:r;return{...t,outputs:l,response:{successful:a,statusCode:s,message:a?void 0:e.action?.responses?.errors?.[s]?.description??R?.[s]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=C.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=T(t);return o(e)?re(e,n):B(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(i(t))return{};let n=t.logs,r=n&&typeof n.enabled==`boolean`?{enabled:n.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:r,advanced:o}},recordActionResult=async({action:e,resultBlock:t,mode:n,organizationId:r,pathParams:a,queryParams:o,body:s,headers:l,source:u,isBackground:d,settings:f,logger:p})=>{if(i(e)){p?.warning({message:`action missing, skipping recording action result`});return}let m=t.olapClient;if(i(m)){p?.warning({message:`olap client is missing, skipping recording action result`});return}let h=getOlapOptions(f),g=t.context,_={actionId:e.id,actionRunId:g.actionRunId||`missing`,mode:n,connectorKey:g.connectorKey,connectorVersion:g.connectorVersion,connectorOwner:g.connectorOwner,connectorProfileId:g.connectorProfileId,actionType:g.actionType,category:g.category,organizationId:r,projectSecureId:g.projectSecureId,accountSecureId:g.accountSecureId,originOwnerId:g.originOwnerId,originOwnerName:g.originOwnerName,sourceType:u?.sourceType,authType:u?.authType,authId:u?.authId,sessionId:u?.sessionId,agentId:u?.agentId,userAgent:u?.userAgent,ipAddress:u?.ipAddress,transportType:u?.transportType,streamType:u?.streamType,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,pathParams:a,queryParams:o,body:s,headers:l,isBackground:d,startTime:t.statistics?.startTime},v={success:t.response?.successful??!1,statusCode:t.response?.statusCode,body:t.outputs??void 0,message:t.response?.message,endTime:t.statistics?.endTime,defenderContext:t.defenderMetadata};try{await m.recordAction(_,v,h);let n=e.steps||{},a=Object.keys(n).map((e,a)=>{let o=t.steps?.[e];if(i(o))return null;let s=n[e],c=s?.stepFunction?.functionName,l=s?.stepFunction?.version,u=s&&`iterator`in s&&t.intermediateSteps?.[e]?Object.keys(t.intermediateSteps[e]).length:void 0,d=typeof o.output?.statusCode==`number`?o.output.statusCode:void 0;return{input:{actionRunId:_.actionRunId,actionMode:_.mode,actionSuccess:v.success,stepIndex:a,stepId:e,organizationId:r,projectSecureId:g.projectSecureId,accountSecureId:g.accountSecureId,inputs:t.inputs,...c&&{stepFunctionName:c},...l&&{stepFunctionVersion:l},...u!==void 0&&{stepIterations:u},startTime:o.statistics?.startTime},result:{success:o.successful,statusCode:d,message:o.message,outputs:o.output,errors:o.errors,skipped:o.skipped,endTime:o.statistics?.endTime}}}).filter(c);a.length>0&&await m.recordSteps(a,h)}catch(e){p?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},ze={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},buildTier2Config=e=>{let t={};return e?.highRiskThreshold!==void 0&&(t.highRiskThreshold=e.highRiskThreshold),e?.mediumRiskThreshold!==void 0&&(t.mediumRiskThreshold=e.mediumRiskThreshold),e?.multiheadEnabled&&(t.multihead={mainThreshold:.64,auxThreshold:.458}),Object.keys(t).length>0?{tier2Config:t}:{}},recordingFieldsFromParams=e=>({mode:e.mode,organizationId:e.account.organizationId,pathParams:e.pathParams,queryParams:e.queryParams,body:e.body,headers:e.headers,source:e.source,settings:e.settings,logger:e.logger}),applyDefenderToBlock=async(e,t,n,r)=>{if(!n?.defender?.enabled)return e;let{defenderMetadata:i,outputs:a,response:o}=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,...c(a)&&{outputs:a},...c(o)&&{response:o}}},runAction=async e=>{let{pathParams:t={},queryParams:n={},body:r={},headers:a={},parseConnector:o=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,ee=v.originOwnerName,P=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:ee,sourceType:C?.sourceType,authType:C?.authType,authId:C?.authId,sessionId:C?.sessionId,agentId:C?.agentId,userAgent:C?.userAgent,ipAddress:C?.ipAddress,transportType:C?.transportType,streamType:C?.streamType,flowType:ze[_],sourceId:C?.sourceId,sourceValue:C?.sourceValue}),F=new Date,I;try{I=s(y)?o(y):y}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:o}=E,s=findActionByActionId(I,o);if(i(s))throw new MissingActionError(P,`No matching action found`);let c=await executeAction({action:s,blockContext:P,queryParams:n,pathParams:t,body:r,headers:a,parseActionInputsFn:l,createBlockFn:d,createBlockParams:L,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:F,endTime:new Date},await recordActionResult({action:s,resultBlock:c,...recordingFieldsFromParams(e)}),c}else if(_===`test_actions`){let t=h(I,D,O);if(i(t)||t.length===0)return await createSuccessBlock(d,L);P.actionType=`test`;for(let n of t){let t=new Date,r=await d({...L,inputs:void 0,action:n.action,nextCursor:void 0});if(!(!c(n.condition)||z(n.condition,r)))continue;let a=await f({block:r});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(i(a?.response?.successful)||!a.response.successful)&&n.required){w?.error({code:`TestActionFailed`,message:`Test action "${n.action.id}" failed with error: ${a?.response?.message}`});let r=await createErrorBlock(d,L);return r.statistics={startTime:t,endTime:new Date},await recordActionResult({action:n.action,resultBlock:r,...recordingFieldsFromParams(e)}),r}a.statistics={startTime:t,endTime:new Date},await recordActionResult({action:n.action,resultBlock:a,...recordingFieldsFromParams(e)})}let n=await createSuccessBlock(d,L);return n.statistics={startTime:F,endTime:new Date},n}else if(_===`refresh_authentication`){let t=m(I,D,O);if(i(t))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:t.action,blockContext:P,queryParams:n,pathParams:t.params,body:r,headers:a,parseActionInputsFn:l,createBlockFn:d,createBlockParams:L,runStepActionFn:f});return o=await applyDefenderToBlock(o,g,S,w),o.statistics={startTime:F,endTime:new Date},await recordActionResult({action:t.action,resultBlock:o,...recordingFieldsFromParams(e)}),o}else if(_===`path`){let{path:t,method:o}=E,s=p(I,t,o);if(i(s))throw new MissingActionError(P,`No matching action found`);let c=await executeAction({action:s.action,blockContext:P,queryParams:n,pathParams:s.params,body:r,headers:a,parseActionInputsFn:l,createBlockFn:d,createBlockParams:L,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:F,endTime:new Date},await recordActionResult({action:s.action,resultBlock:c,...recordingFieldsFromParams(e)}),c}else return await createErrorBlock(d,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,t)=>{let n=e?.next,r=c(n)&&t.actionType===`list`?k(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 ie({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,...buildTier2Config(r?.defender)}).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,tier2RawScore:t.tier2RawScore,tier2AuxScore:t.tier2AuxScore,tier2MultiheadBlocked:t.tier2MultiheadBlocked,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}}}}},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:n,body:r={},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(n,e);if(i(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:r,headers:a}),v=new Date,y=await p({connector:n,context:h,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b={mode:`event`,organizationId:t.organizationId,body:r,headers:a,source:{sourceType:x.Webhook},isBackground:!1,logger:o},S;try{S=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),await recordActionResult({action:g,resultBlock:{...y,response:{successful:!1,statusCode:500,message:t.message},statistics:{startTime:v,endTime:new Date}},...b}),t}if(S.statistics={startTime:v,endTime:new Date},typeof S.outputs?.statusCode!=`number`)throw await recordActionResult({action:g,resultBlock:{...S,response:{successful:!1,statusCode:500,message:`Event action output must include a numeric statusCode`}},...b}),new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return await recordActionResult({action:g,resultBlock:S,...b}),S},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:n,inputs:r,credentials:a,accountSecureId:o,projectSecureId:s,organizationId:c,originOwnerId:l,originOwnerName:u,connectorKey:d,connectorVersion:f,authConfigKey:p,environment:m,logger:h,getHttpClient:g,getOlapClient:_,createBlockFn:v=createBlock,createBlockContextFn:y=createBlockContext,runStepActionFn:b=runStepAction})=>{let S=e.categories?.[0];if(i(S))throw Error(`Connector category is required for webhook setup phase execution (connector '${d}')`);let C=phaseAsAction(t,n),w=y({category:S,connectorKey:d,connectorVersion:f,authConfigKey:p,environment:m,action:C,accountSecureId:o,projectSecureId:s,organizationId:c,originOwnerId:l,originOwnerName:u,flowType:`action`}),T=new Date,E=await v({connector:e,inputs:r,credentials:a,context:w,action:C,logger:h,getHttpClient:g,getOlapClient:_}),D={mode:`webhook_setup`,organizationId:c,body:r,source:{sourceType:x.Internal},isBackground:!0,logger:h},O;try{O=await b({block:E})}catch(e){throw await recordActionResult({action:C,resultBlock:{...E,response:{successful:!1,statusCode:500,message:e.message},statistics:{startTime:T,endTime:new Date}},...D}),e}if(O.statistics={startTime:T,endTime:new Date},i(O.response))throw await recordActionResult({action:C,resultBlock:{...O,response:{successful:!1,statusCode:500,message:`Webhook setup ${n} phase produced no response`}},...D}),Error(`Webhook setup ${n} phase produced no response (connector '${d}')`);return await recordActionResult({action:C,resultBlock:O,...D}),{successful:O.response.successful,statusCode:O.response.statusCode,outputs:O.outputs}};export{Q as ConnectSDKError,InvalidActionInputsError,InvalidEventOutputError,applyReleaseStageToConnector,createBlock,createCursorPaginator,createOffsetPaginator,createPagePaginator,createPaginator,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,extractItems,formatValidationErrorResponse,getActionFromUrl,getActionMeta,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,paginate,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.79.0",
3
+ "version": "2.81.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",