@stackone/connect-sdk 2.82.0 → 2.84.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()}),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(`
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=(0,t.zStrictObject)({type:t.z.literal(`delta_token`),iterator:(0,t.zStrictObject)({key:t.z.string(),in:t.z.enum([`query`,`body`,`headers`])}),response:(0,t.zStrictObject)({path:t.z.string(),onlyOnFinalPage:t.z.boolean().optional()})}),_=60,v=(0,t.zStrictObject)({type:t.z.literal(`time_filter`),iterator:(0,t.zStrictObject)({key:t.z.string(),in:t.z.enum([`query`,`body`,`headers`])}),format:t.z.enum([`iso8601`,`unix_seconds`,`unix_millis`]),safetyBufferSeconds:t.z.number().int().nonnegative().default(60)}),y=t.z.discriminatedUnion(`type`,[v,g]),b={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()},x=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...b,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...b,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`]})}),S=(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(()=>S).array().optional(),requiredScopes:t.z.string().optional()}),C=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),w=(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()}),T=(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`}),E=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:T,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()})]),D=(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(()=>D.omit({in:!0})).array().optional(),oneOf:C.optional(),rules:w.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`}),O=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),k=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),A=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:k,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),j=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:k.optional(),stepFunctions:k.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`}),M=(0,t.zStrictObject)({allowed:t.z.boolean(),indexField:t.z.string().or(t.z.string().array()),dataKey:t.z.string().optional(),pagination:h.optional(),incremental:y.optional(),maxPages:t.z.number().int().positive().optional(),maxDurationMinutes:t.z.number().int().positive().optional()}),N=(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()}),P=(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:O.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:D.array().optional(),validationRules:E.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:S.array().optional(),steps:t.z.union([A,j]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional(),dataSync:M.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,F=P.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`]})}),I=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:P.extend({actionType:t.z.literal(`refresh_token`)})}),L=(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()}),ee=(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()}),R=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),z=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:R.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),te=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:R.optional(),steps:z.array().optional(),applicableScopes:t.z.string().optional()}),B=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:te.array()}),V=(0,t.zStrictObject)({config:B.optional(),setup:B.optional()}),H=(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`]}),ne=(0,t.zStrictObject)({certs:t.z.string().array().optional(),keys:t.z.string().array().optional()}).optional(),U=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,certificates:ne,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:V.optional()}).optional(),configFields:x.array().optional(),configNotices:H.array().optional(),setupFields:x.array().optional(),setupNotices:H.array().optional(),refreshAuthentication:I.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(F),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),re=U.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),W=U.extend({type:t.z.literal(`custom`)}),G=U.extend({type:t.z.literal(`oidc`)}),K=t.z.discriminatedUnion(`type`,[re,W,G]),q=(0,t.zStrictObject)({steps:t.z.union([A,j]).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:P.extend({actionType:t.z.literal(`event`),requiresManualSetup:t.z.boolean().optional()}).array().optional(),router:N.optional(),externalAccountIdExtractor:P.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),ie=(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:F.array().optional(),events:Y.optional(),rateLimit:L.optional(),concurrency:ee.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),ae=`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(ie,(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)},oe=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!(0,t.notMissing)(e))return;let n=[];for(let t of e.matchAll(oe)){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)},validateDataSyncIncrementalKeys=(e,t,n,r)=>{let i=n?.incremental;if(!i)return;let{key:a,in:o}=i.iterator;if(!r.some(e=>e.in===o&&e.name===a))throw new SchemaValidationError([{message:`Incremental iterator references key '${a}' in '${o}', but no input with that name and location is declared on action '${e}'.`,path:[...t,`dataSync`,`incremental`,`iterator`],keys:[a]}])},parseAction=(e,t,n,r,i,a)=>{let o=inferEntrypointUrl(r),s=buildActionResponses(r),c=buildCursorConfig(r),l=r.inputs||[];c.enabled&&(l?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),l?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(n,l),validateExamplesMatchInputs(n,r.examples,l),validateActionRuleFieldReferences(n,t,r.validationRules,l),validateDataSyncPaginationKeys(n,t,r.dataSync,l),validateDataSyncIncrementalKeys(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)},se={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=se[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,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;
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 ce={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=ce[e.type];return n(e,t)}const le=`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`}}}function createDeltaTokenStrategy(e){return{config:e,applyToInputs({baseInputs:t,checkpoint:n}){return n?.kind===`cursor`?buildInputs(t,e.iterator.in,{[e.iterator.key]:n.value}):t},extractFromPage({block:n,isFinalPage:r}){if(e.response.onlyOnFinalPage&&!r)return null;let i=(0,t.getByDotPath)(n.outputs,e.response.path);if(i==null)return null;let a=String(i);return a===``?null:{kind:`cursor`,value:a}},finalizeCheckpoint({lastExtractedCheckpoint:e}){return e}}}function formatIncrementalWatermark(e,t){switch(t){case`iso8601`:return e.toISOString();case`unix_seconds`:return String(Math.floor(e.getTime()/1e3));case`unix_millis`:return String(e.getTime())}}function resolveIncrementalWatermark(e,t,n){return e?.kind===`timestamp`?e.value:t?formatIncrementalWatermark(t,n):null}function createTimeFilterStrategy(e){return{config:e,applyToInputs({baseInputs:t,checkpoint:n,lastFullRunAt:r}){let i=resolveIncrementalWatermark(n,r,e.format);return i===null?t:buildInputs(t,e.iterator.in,{[e.iterator.key]:i})},extractFromPage(){return null},finalizeCheckpoint({runStartTime:t}){let n=e.safetyBufferSeconds??60,r=t.getTime()-n*1e3;return{kind:`timestamp`,value:formatIncrementalWatermark(new Date(r),e.format)}}}}const ue={time_filter:createTimeFilterStrategy,delta_token:createDeltaTokenStrategy};function createIncrementalStrategy(e){let t=ue[e.type];return t(e)}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})}},de={action_id:`action`,path:`action`,test_actions:`test_action`,refresh_authentication:`refresh_authentication`},fe=.64,pe=.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:de[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}),me=`stackone://internal//`,he=`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`,ge=`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,_e=`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.DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS=60,exports.DELTA_TOKEN_INCREMENTAL_SCHEMA=g,exports.INCREMENTAL_SCHEMA=y,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.TIME_FILTER_INCREMENTAL_SCHEMA=v,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.createCursorPaginator=createCursorPaginator,exports.createDeltaTokenStrategy=createDeltaTokenStrategy,exports.createIncrementalStrategy=createIncrementalStrategy,exports.createOffsetPaginator=createOffsetPaginator,exports.createPagePaginator=createPagePaginator,exports.createPaginator=createPaginator,exports.createTimeFilterStrategy=createTimeFilterStrategy,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
@@ -1,7 +1,7 @@
1
1
  import http from "node:http";
2
2
  import https from "node:https";
3
3
  import { Readable } from "node:stream";
4
- import { ZodType } from "zod/v4";
4
+ import { ZodType, z } from "zod/v4";
5
5
 
6
6
  //#region rolldown:runtime
7
7
  //#endregion
@@ -366,6 +366,7 @@ interface IOlapClient {
366
366
  getLogs(organizationId: string, projectSecureId: string, query: Query): Promise<QueryResult>;
367
367
  getActionLogs(organizationId: string, projectSecureId: string, query: ActionsQuery): Promise<ActionsQueryResult>;
368
368
  getActionLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionLog | undefined>;
369
+ getLog(organizationId: string, projectSecureId: string, logId: string): Promise<ActionLog | UnifiedLog | StepLog | ProviderLog | undefined>;
369
370
  getStepLogs(organizationId: string, projectSecureId: string, query: StepsQuery): Promise<StepsQueryResult>;
370
371
  getStepLog(organizationId: string, projectSecureId: string, actionRunId: string, stepIndex: number): Promise<StepLog | undefined>;
371
372
  getUnifiedLogs(organizationId: string, projectSecureId: string, query: UnifiedQuery): Promise<UnifiedQueryResult>;
@@ -561,6 +562,7 @@ type Query = {
561
562
  originOwnerId?: string | string[];
562
563
  httpMethod?: string | string[];
563
564
  isBackground?: boolean;
565
+ logId?: string | string[];
564
566
  logType?: (typeof LogType.Action | typeof LogType.Unified) | (typeof LogType.Action | typeof LogType.Unified)[];
565
567
  success?: boolean;
566
568
  startTime?: Date;
@@ -903,6 +905,43 @@ interface PagePaginationConfig extends BasePaginationConfig {
903
905
  //#region ../core/src/exhaustivePagination/index.d.ts
904
906
  type PaginationConfig = CursorPaginationConfig | OffsetPaginationConfig | PagePaginationConfig;
905
907
  //#endregion
908
+ //#region ../core/src/incrementalSync/baseIncrementalConfig.d.ts
909
+ interface BaseIncrementalConfig {
910
+ type: string;
911
+ iterator: {
912
+ key: string;
913
+ in: IteratorLocation;
914
+ };
915
+ }
916
+ //#endregion
917
+ //#region ../core/src/incrementalSync/deltaTokenConfig.d.ts
918
+ interface DeltaTokenIncrementalConfig extends BaseIncrementalConfig {
919
+ type: 'delta_token';
920
+ response: {
921
+ path: string;
922
+ onlyOnFinalPage?: boolean;
923
+ };
924
+ }
925
+ //#endregion
926
+ //#region ../core/src/incrementalSync/timeFilterConfig.d.ts
927
+ interface TimeFilterIncrementalConfig extends BaseIncrementalConfig {
928
+ type: 'time_filter';
929
+ format: 'iso8601' | 'unix_seconds' | 'unix_millis';
930
+ safetyBufferSeconds?: number;
931
+ }
932
+ //#endregion
933
+ //#region ../core/src/incrementalSync/checkpoint.d.ts
934
+ type Checkpoint = {
935
+ kind: 'timestamp';
936
+ value: string;
937
+ } | {
938
+ kind: 'cursor';
939
+ value: string;
940
+ };
941
+ //#endregion
942
+ //#region ../core/src/incrementalSync/index.d.ts
943
+ type IncrementalConfig = TimeFilterIncrementalConfig | DeltaTokenIncrementalConfig;
944
+ //#endregion
906
945
  //#region ../core/src/schema/types.d.ts
907
946
  type Schema = {
908
947
  name: string;
@@ -1213,6 +1252,7 @@ type DataSyncConfig = {
1213
1252
  indexField: string | string[];
1214
1253
  dataKey?: string;
1215
1254
  pagination?: PaginationConfig;
1255
+ incremental?: IncrementalConfig;
1216
1256
  maxPages?: number;
1217
1257
  maxDurationMinutes?: number;
1218
1258
  };
@@ -1743,6 +1783,105 @@ declare function createPagePaginator(config: PagePaginationConfig, {
1743
1783
  baseInputs
1744
1784
  }?: CreatePaginatorOptions): Paginator;
1745
1785
  //#endregion
1786
+ //#region src/incrementalSync/constants.d.ts
1787
+ declare const DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS = 60;
1788
+ //#endregion
1789
+ //#region src/incrementalSync/types.d.ts
1790
+ interface IncrementalStrategy {
1791
+ readonly config: IncrementalConfig;
1792
+ applyToInputs(args: {
1793
+ baseInputs: Record<string, unknown>;
1794
+ checkpoint: Checkpoint | null;
1795
+ lastFullRunAt: Date | null;
1796
+ }): Record<string, unknown>;
1797
+ extractFromPage(args: {
1798
+ block: Block;
1799
+ isFinalPage: boolean;
1800
+ }): Checkpoint | null;
1801
+ finalizeCheckpoint(args: {
1802
+ runStartTime: Date;
1803
+ lastExtractedCheckpoint: Checkpoint | null;
1804
+ }): Checkpoint | null;
1805
+ }
1806
+ //#endregion
1807
+ //#region src/incrementalSync/createIncrementalStrategy.d.ts
1808
+ declare function createIncrementalStrategy(config: IncrementalConfig): IncrementalStrategy;
1809
+ //#endregion
1810
+ //#region src/incrementalSync/schemas/deltaTokenIncrementalSchema.d.ts
1811
+ declare const DELTA_TOKEN_INCREMENTAL_SCHEMA: z.ZodObject<{
1812
+ type: z.ZodLiteral<"delta_token">;
1813
+ iterator: z.ZodObject<{
1814
+ key: z.ZodString;
1815
+ in: z.ZodEnum<{
1816
+ query: "query";
1817
+ body: "body";
1818
+ headers: "headers";
1819
+ }>;
1820
+ }, z.core.$strict>;
1821
+ response: z.ZodObject<{
1822
+ path: z.ZodString;
1823
+ onlyOnFinalPage: z.ZodOptional<z.ZodBoolean>;
1824
+ }, z.core.$strict>;
1825
+ }, z.core.$strict>;
1826
+ //#endregion
1827
+ //#region src/incrementalSync/schemas/timeFilterIncrementalSchema.d.ts
1828
+ declare const TIME_FILTER_INCREMENTAL_SCHEMA: z.ZodObject<{
1829
+ type: z.ZodLiteral<"time_filter">;
1830
+ iterator: z.ZodObject<{
1831
+ key: z.ZodString;
1832
+ in: z.ZodEnum<{
1833
+ query: "query";
1834
+ body: "body";
1835
+ headers: "headers";
1836
+ }>;
1837
+ }, z.core.$strict>;
1838
+ format: z.ZodEnum<{
1839
+ iso8601: "iso8601";
1840
+ unix_seconds: "unix_seconds";
1841
+ unix_millis: "unix_millis";
1842
+ }>;
1843
+ safetyBufferSeconds: z.ZodDefault<z.ZodNumber>;
1844
+ }, z.core.$strict>;
1845
+ //#endregion
1846
+ //#region src/incrementalSync/schemas/index.d.ts
1847
+ declare const INCREMENTAL_SCHEMA: z.ZodDiscriminatedUnion<[z.ZodObject<{
1848
+ type: z.ZodLiteral<"time_filter">;
1849
+ iterator: z.ZodObject<{
1850
+ key: z.ZodString;
1851
+ in: z.ZodEnum<{
1852
+ query: "query";
1853
+ body: "body";
1854
+ headers: "headers";
1855
+ }>;
1856
+ }, z.core.$strict>;
1857
+ format: z.ZodEnum<{
1858
+ iso8601: "iso8601";
1859
+ unix_seconds: "unix_seconds";
1860
+ unix_millis: "unix_millis";
1861
+ }>;
1862
+ safetyBufferSeconds: z.ZodDefault<z.ZodNumber>;
1863
+ }, z.core.$strict>, z.ZodObject<{
1864
+ type: z.ZodLiteral<"delta_token">;
1865
+ iterator: z.ZodObject<{
1866
+ key: z.ZodString;
1867
+ in: z.ZodEnum<{
1868
+ query: "query";
1869
+ body: "body";
1870
+ headers: "headers";
1871
+ }>;
1872
+ }, z.core.$strict>;
1873
+ response: z.ZodObject<{
1874
+ path: z.ZodString;
1875
+ onlyOnFinalPage: z.ZodOptional<z.ZodBoolean>;
1876
+ }, z.core.$strict>;
1877
+ }, z.core.$strict>]>;
1878
+ //#endregion
1879
+ //#region src/incrementalSync/strategies/deltaToken.d.ts
1880
+ declare function createDeltaTokenStrategy(config: DeltaTokenIncrementalConfig): IncrementalStrategy;
1881
+ //#endregion
1882
+ //#region src/incrementalSync/strategies/timeFilter.d.ts
1883
+ declare function createTimeFilterStrategy(config: TimeFilterIncrementalConfig): IncrementalStrategy;
1884
+ //#endregion
1746
1885
  //#region src/meta/types.d.ts
1747
1886
  interface MetaAction {
1748
1887
  id: string;
@@ -2199,4 +2338,4 @@ declare const runWebhookSetupPhase: ({
2199
2338
  runStepActionFn?: typeof runStepAction;
2200
2339
  }) => Promise<WebhookSetupPhaseResult>;
2201
2340
  //#endregion
2202
- export { type CallAction, ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type CreatePaginatorOptions, type ErrorType, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type PaginateOptions, type PaginateResult, type PaginationProgress, type Paginator, type ValidationError, type ValidationErrorResponse, type WebhookSetupPhaseResult, 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 };
2341
+ export { type CallAction, ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type CreatePaginatorOptions, DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS, DELTA_TOKEN_INCREMENTAL_SCHEMA, type ErrorType, INCREMENTAL_SCHEMA, type IncrementalStrategy, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type PaginateOptions, type PaginateResult, type PaginationProgress, type Paginator, TIME_FILTER_INCREMENTAL_SCHEMA, type ValidationError, type ValidationErrorResponse, type WebhookSetupPhaseResult, applyReleaseStageToConnector, createBlock, createCursorPaginator, createDeltaTokenStrategy, createIncrementalStrategy, createOffsetPaginator, createPagePaginator, createPaginator, createTimeFilterStrategy, 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/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ import { t as __name } from "./chunk-Cfxk5zVN.mjs";
2
2
  import https from "node:https";
3
3
  import { Readable } from "node:stream";
4
4
  import http from "node:http";
5
- import { ZodType } from "zod/v4";
5
+ import { ZodType, z } from "zod/v4";
6
6
 
7
7
  //#region ../logger/src/types.d.ts
8
8
  interface ILogger {
@@ -365,6 +365,7 @@ interface IOlapClient {
365
365
  getLogs(organizationId: string, projectSecureId: string, query: Query): Promise<QueryResult>;
366
366
  getActionLogs(organizationId: string, projectSecureId: string, query: ActionsQuery): Promise<ActionsQueryResult>;
367
367
  getActionLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionLog | undefined>;
368
+ getLog(organizationId: string, projectSecureId: string, logId: string): Promise<ActionLog | UnifiedLog | StepLog | ProviderLog | undefined>;
368
369
  getStepLogs(organizationId: string, projectSecureId: string, query: StepsQuery): Promise<StepsQueryResult>;
369
370
  getStepLog(organizationId: string, projectSecureId: string, actionRunId: string, stepIndex: number): Promise<StepLog | undefined>;
370
371
  getUnifiedLogs(organizationId: string, projectSecureId: string, query: UnifiedQuery): Promise<UnifiedQueryResult>;
@@ -560,6 +561,7 @@ type Query = {
560
561
  originOwnerId?: string | string[];
561
562
  httpMethod?: string | string[];
562
563
  isBackground?: boolean;
564
+ logId?: string | string[];
563
565
  logType?: (typeof LogType.Action | typeof LogType.Unified) | (typeof LogType.Action | typeof LogType.Unified)[];
564
566
  success?: boolean;
565
567
  startTime?: Date;
@@ -902,6 +904,43 @@ interface PagePaginationConfig extends BasePaginationConfig {
902
904
  //#region ../core/src/exhaustivePagination/index.d.ts
903
905
  type PaginationConfig = CursorPaginationConfig | OffsetPaginationConfig | PagePaginationConfig;
904
906
  //#endregion
907
+ //#region ../core/src/incrementalSync/baseIncrementalConfig.d.ts
908
+ interface BaseIncrementalConfig {
909
+ type: string;
910
+ iterator: {
911
+ key: string;
912
+ in: IteratorLocation;
913
+ };
914
+ }
915
+ //#endregion
916
+ //#region ../core/src/incrementalSync/deltaTokenConfig.d.ts
917
+ interface DeltaTokenIncrementalConfig extends BaseIncrementalConfig {
918
+ type: 'delta_token';
919
+ response: {
920
+ path: string;
921
+ onlyOnFinalPage?: boolean;
922
+ };
923
+ }
924
+ //#endregion
925
+ //#region ../core/src/incrementalSync/timeFilterConfig.d.ts
926
+ interface TimeFilterIncrementalConfig extends BaseIncrementalConfig {
927
+ type: 'time_filter';
928
+ format: 'iso8601' | 'unix_seconds' | 'unix_millis';
929
+ safetyBufferSeconds?: number;
930
+ }
931
+ //#endregion
932
+ //#region ../core/src/incrementalSync/checkpoint.d.ts
933
+ type Checkpoint = {
934
+ kind: 'timestamp';
935
+ value: string;
936
+ } | {
937
+ kind: 'cursor';
938
+ value: string;
939
+ };
940
+ //#endregion
941
+ //#region ../core/src/incrementalSync/index.d.ts
942
+ type IncrementalConfig = TimeFilterIncrementalConfig | DeltaTokenIncrementalConfig;
943
+ //#endregion
905
944
  //#region ../core/src/schema/types.d.ts
906
945
  type Schema = {
907
946
  name: string;
@@ -1212,6 +1251,7 @@ type DataSyncConfig = {
1212
1251
  indexField: string | string[];
1213
1252
  dataKey?: string;
1214
1253
  pagination?: PaginationConfig;
1254
+ incremental?: IncrementalConfig;
1215
1255
  maxPages?: number;
1216
1256
  maxDurationMinutes?: number;
1217
1257
  };
@@ -1742,6 +1782,105 @@ declare function createPagePaginator(config: PagePaginationConfig, {
1742
1782
  baseInputs
1743
1783
  }?: CreatePaginatorOptions): Paginator;
1744
1784
  //#endregion
1785
+ //#region src/incrementalSync/constants.d.ts
1786
+ declare const DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS = 60;
1787
+ //#endregion
1788
+ //#region src/incrementalSync/types.d.ts
1789
+ interface IncrementalStrategy {
1790
+ readonly config: IncrementalConfig;
1791
+ applyToInputs(args: {
1792
+ baseInputs: Record<string, unknown>;
1793
+ checkpoint: Checkpoint | null;
1794
+ lastFullRunAt: Date | null;
1795
+ }): Record<string, unknown>;
1796
+ extractFromPage(args: {
1797
+ block: Block;
1798
+ isFinalPage: boolean;
1799
+ }): Checkpoint | null;
1800
+ finalizeCheckpoint(args: {
1801
+ runStartTime: Date;
1802
+ lastExtractedCheckpoint: Checkpoint | null;
1803
+ }): Checkpoint | null;
1804
+ }
1805
+ //#endregion
1806
+ //#region src/incrementalSync/createIncrementalStrategy.d.ts
1807
+ declare function createIncrementalStrategy(config: IncrementalConfig): IncrementalStrategy;
1808
+ //#endregion
1809
+ //#region src/incrementalSync/schemas/deltaTokenIncrementalSchema.d.ts
1810
+ declare const DELTA_TOKEN_INCREMENTAL_SCHEMA: z.ZodObject<{
1811
+ type: z.ZodLiteral<"delta_token">;
1812
+ iterator: z.ZodObject<{
1813
+ key: z.ZodString;
1814
+ in: z.ZodEnum<{
1815
+ query: "query";
1816
+ body: "body";
1817
+ headers: "headers";
1818
+ }>;
1819
+ }, z.core.$strict>;
1820
+ response: z.ZodObject<{
1821
+ path: z.ZodString;
1822
+ onlyOnFinalPage: z.ZodOptional<z.ZodBoolean>;
1823
+ }, z.core.$strict>;
1824
+ }, z.core.$strict>;
1825
+ //#endregion
1826
+ //#region src/incrementalSync/schemas/timeFilterIncrementalSchema.d.ts
1827
+ declare const TIME_FILTER_INCREMENTAL_SCHEMA: z.ZodObject<{
1828
+ type: z.ZodLiteral<"time_filter">;
1829
+ iterator: z.ZodObject<{
1830
+ key: z.ZodString;
1831
+ in: z.ZodEnum<{
1832
+ query: "query";
1833
+ body: "body";
1834
+ headers: "headers";
1835
+ }>;
1836
+ }, z.core.$strict>;
1837
+ format: z.ZodEnum<{
1838
+ iso8601: "iso8601";
1839
+ unix_seconds: "unix_seconds";
1840
+ unix_millis: "unix_millis";
1841
+ }>;
1842
+ safetyBufferSeconds: z.ZodDefault<z.ZodNumber>;
1843
+ }, z.core.$strict>;
1844
+ //#endregion
1845
+ //#region src/incrementalSync/schemas/index.d.ts
1846
+ declare const INCREMENTAL_SCHEMA: z.ZodDiscriminatedUnion<[z.ZodObject<{
1847
+ type: z.ZodLiteral<"time_filter">;
1848
+ iterator: z.ZodObject<{
1849
+ key: z.ZodString;
1850
+ in: z.ZodEnum<{
1851
+ query: "query";
1852
+ body: "body";
1853
+ headers: "headers";
1854
+ }>;
1855
+ }, z.core.$strict>;
1856
+ format: z.ZodEnum<{
1857
+ iso8601: "iso8601";
1858
+ unix_seconds: "unix_seconds";
1859
+ unix_millis: "unix_millis";
1860
+ }>;
1861
+ safetyBufferSeconds: z.ZodDefault<z.ZodNumber>;
1862
+ }, z.core.$strict>, z.ZodObject<{
1863
+ type: z.ZodLiteral<"delta_token">;
1864
+ iterator: z.ZodObject<{
1865
+ key: z.ZodString;
1866
+ in: z.ZodEnum<{
1867
+ query: "query";
1868
+ body: "body";
1869
+ headers: "headers";
1870
+ }>;
1871
+ }, z.core.$strict>;
1872
+ response: z.ZodObject<{
1873
+ path: z.ZodString;
1874
+ onlyOnFinalPage: z.ZodOptional<z.ZodBoolean>;
1875
+ }, z.core.$strict>;
1876
+ }, z.core.$strict>]>;
1877
+ //#endregion
1878
+ //#region src/incrementalSync/strategies/deltaToken.d.ts
1879
+ declare function createDeltaTokenStrategy(config: DeltaTokenIncrementalConfig): IncrementalStrategy;
1880
+ //#endregion
1881
+ //#region src/incrementalSync/strategies/timeFilter.d.ts
1882
+ declare function createTimeFilterStrategy(config: TimeFilterIncrementalConfig): IncrementalStrategy;
1883
+ //#endregion
1745
1884
  //#region src/meta/types.d.ts
1746
1885
  interface MetaAction {
1747
1886
  id: string;
@@ -2198,4 +2337,4 @@ declare const runWebhookSetupPhase: ({
2198
2337
  runStepActionFn?: typeof runStepAction;
2199
2338
  }) => Promise<WebhookSetupPhaseResult>;
2200
2339
  //#endregion
2201
- export { type CallAction, ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type CreatePaginatorOptions, type ErrorType, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type PaginateOptions, type PaginateResult, type PaginationProgress, type Paginator, type ValidationError, type ValidationErrorResponse, type WebhookSetupPhaseResult, 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 };
2340
+ export { type CallAction, ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type CreatePaginatorOptions, DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS, DELTA_TOKEN_INCREMENTAL_SCHEMA, type ErrorType, INCREMENTAL_SCHEMA, type IncrementalStrategy, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type PaginateOptions, type PaginateResult, type PaginationProgress, type Paginator, TIME_FILTER_INCREMENTAL_SCHEMA, type ValidationError, type ValidationErrorResponse, type WebhookSetupPhaseResult, applyReleaseStageToConnector, createBlock, createCursorPaginator, createDeltaTokenStrategy, createIncrementalStrategy, createOffsetPaginator, createPagePaginator, createPaginator, createTimeFilterStrategy, 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/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
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(`
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 ee,getInputEnumValues as te,getIteratorLocation as ne,getPaginationKeys as k,isCompositeId as A,isCursorEmpty as re,isForeachStep as j,isValidEnumRef as M,minifyCursor as N,updateCursor as P}from"@stackone/core";import{HttpErrorMessages as F,isSuccessStatusCode as ie}from"@stackone/transport";import{parse as ae}from"yaml";import{evaluate as I,safeEvaluate as L,safeEvaluateRecord as oe}from"@stackone/expressions";import{createPromptDefense as se}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
2
  `),p(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=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(`
4
+ `).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var R=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 R{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends R{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 R{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 R{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 R{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 R{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 R{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 R{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.`}}),ce=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()}),le=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()}),ue=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()}),de=l.discriminatedUnion(`type`,[ce,le,ue]),z=u({type:l.literal(`delta_token`),iterator:u({key:l.string(),in:l.enum([`query`,`body`,`headers`])}),response:u({path:l.string(),onlyOnFinalPage:l.boolean().optional()})}),fe=60,B=u({type:l.literal(`time_filter`),iterator:u({key:l.string(),in:l.enum([`query`,`body`,`headers`])}),format:l.enum([`iso8601`,`unix_seconds`,`unix_millis`]),safetyBufferSeconds:l.number().int().nonnegative().default(60)}),V=l.discriminatedUnion(`type`,[B,z]),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()}),pe=l.union([u({values:l.string().array().min(1)}),u({ref:l.string()})]),me=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()}),he=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`}),ge=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:he,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:pe.optional(),rules:me.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`}),_e=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`}),ve=u({allowed:l.boolean(),indexField:l.string().or(l.string().array()),dataKey:l.string().optional(),pagination:de.optional(),incremental:V.optional(),maxPages:l.number().int().positive().optional(),maxDurationMinutes:l.number().int().positive().optional()}),ye=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:_e.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:ge.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:ve.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,be=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`]})}),xe=u({schedule:l.string().optional(),action:Y.extend({actionType:l.literal(`refresh_token`)})}),Se=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()}),Ce=u({mainMaxConcurrency:l.number(),subPools:l.array(u({subPoolKey:l.string(),urlPattern:l.string(),maxConcurrency:l.number()})).optional()}),we=u({src:l.string(),alt:l.string()}),Te=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:we.optional(),displayScopes:l.boolean().optional(),applicableScopes:l.string().optional()}),Ee=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:we.optional(),steps:Te.array().optional(),applicableScopes:l.string().optional()}),De=u({warning:l.string().optional(),sections:Ee.array()}),Oe=u({config:De.optional(),setup:De.optional()}),ke=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`]}),Ae=u({certs:l.string().array().optional(),keys:l.string().array().optional()}).optional(),X=u({label:l.string(),authorization:g,certificates:Ae,requiredScopes:l.string().optional(),environments:u({key:l.string(),name:l.string()}).array(),support:u({link:l.string().optional(),description:l.string().optional(),guides:Oe.optional()}).optional(),configFields:U.array().optional(),configNotices:ke.array().optional(),setupFields:U.array().optional(),setupNotices:ke.array().optional(),refreshAuthentication:xe.optional(),testActions:u({action:l.string().or(be),condition:l.string().optional(),required:l.boolean().default(!0)}).array().optional()}),je=X.extend({type:l.literal(`oauth2`),grantType:l.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),Me=X.extend({type:l.literal(`custom`)}),Ne=X.extend({type:l.literal(`oidc`)}),Pe=l.discriminatedUnion(`type`,[je,Me,Ne]),Z=u({steps:l.union([q,J]).array().min(1),result:l.string().optional()}),Fe=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)},Ie=u({setup:u({creation:Fe,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:ye.optional(),externalAccountIdExtractor:Y.extend({actionType:l.literal(`custom`),result:l.string().min(1)}).optional()}),Le=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(),Pe).array().optional(),actions:be.array().optional(),events:Ie.optional(),rateLimit:Se.optional(),concurrency:Ce.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(Le,ae(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 R)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)},Re=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!c(e))return;let t=[];for(let n of e.matchAll(Re)){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)=>(ie(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&&!M(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=ne(i),o=k(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)},validateDataSyncIncrementalKeys=(e,t,n,r)=>{let i=n?.incremental;if(!i)return;let{key:a,in:o}=i.iterator;if(!r.some(e=>e.in===o&&e.name===a))throw new SchemaValidationError([{message:`Incremental iterator references key '${a}' in '${o}', but no input with that name and location is declared on action '${e}'.`,path:[...t,`dataSync`,`incremental`,`iterator`],keys:[a]}])},parseAction=(e,t,n,r,i,a)=>{let o=inferEntrypointUrl(r),s=buildActionResponses(r),c=buildCursorConfig(r),l=r.inputs||[];c.enabled&&(l?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),l?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(n,l),validateExamplesMatchInputs(n,r.examples,l),validateActionRuleFieldReferences(n,t,r.validationRules,l),validateDataSyncPaginationKeys(n,t,r.dataSync,l),validateDataSyncIncrementalKeys(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=te(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)},ze={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=ze[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
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};
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!!I(`{{ ${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 Be={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=Be[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 Ve=1e4,He=3e5;function hasExceededMaxIterations(e,t=Ve){return e>=t}function hasExceededTimeout(e,t,n=He){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,t,n={}){let i=n.maxIterations??Ve,a=n.timeoutMs??He,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`}}}function createDeltaTokenStrategy(e){return{config:e,applyToInputs({baseInputs:t,checkpoint:n}){return n?.kind===`cursor`?buildInputs(t,e.iterator.in,{[e.iterator.key]:n.value}):t},extractFromPage({block:t,isFinalPage:r}){if(e.response.onlyOnFinalPage&&!r)return null;let i=n(t.outputs,e.response.path);if(i==null)return null;let a=String(i);return a===``?null:{kind:`cursor`,value:a}},finalizeCheckpoint({lastExtractedCheckpoint:e}){return e}}}function formatIncrementalWatermark(e,t){switch(t){case`iso8601`:return e.toISOString();case`unix_seconds`:return String(Math.floor(e.getTime()/1e3));case`unix_millis`:return String(e.getTime())}}function resolveIncrementalWatermark(e,t,n){return e?.kind===`timestamp`?e.value:t?formatIncrementalWatermark(t,n):null}function createTimeFilterStrategy(e){return{config:e,applyToInputs({baseInputs:t,checkpoint:n,lastFullRunAt:r}){let i=resolveIncrementalWatermark(n,r,e.format);return i===null?t:buildInputs(t,e.iterator.in,{[e.iterator.key]:i})},extractFromPage(){return null},finalizeCheckpoint({runStartTime:t}){let n=e.safetyBufferSeconds??60,r=t.getTime()-n*1e3;return{kind:`timestamp`,value:formatIncrementalWatermark(new Date(r),e.format)}}}}const Ue={time_filter:createTimeFilterStrategy,delta_token:createDeltaTokenStrategy};function createIncrementalStrategy(e){let t=Ue[e.type];return t(e)}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)=>A(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&&!A(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=re({cursor:r,ignoreStepIndex:s});if(!o(e)||i(a)||(a?.length??0)<=t)return{result:e,next:c(r)&&!l?N(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=P({cursor:r,stepIndex:s,pageNumber:u+1});return{result:{...e,data:p},next:m?N(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?!L(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}):j(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?P({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=L(n.iterator,r);if(!Array.isArray(l))return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`,startTime:c,endTime:c});let u=getStepFunctionsToExecute(n);if(u.length===0)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`,startTime:c,endTime:new Date});let d=[],f=r,p,m={};for(let[r,s]of l.entries()){let l={...f,iterator:{item:s,index:r}};for(let d of u){let u=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?P({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??F?.[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??F?.[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)?oe(e,n):L(e,n)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>({...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o,statistics:{startTime:s,endTime:c}}}}),getOlapOptions=e=>{let t=e?.olap;if(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})}},We={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`,ee=v.secureId,te=v.projectSecureId,ne=v.organizationId,k=v.credentials,A=v.originOwnerId,re=v.originOwnerName,j=u({category:T??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,connectorOwner:v.connectorOwner,connectorProfileId:v.connectorProfileId,authConfigKey:D,environment:O,accountSecureId:ee,projectSecureId:te,organizationId:ne,originOwnerId:A,originOwnerName:re,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:We[_],sourceId:C?.sourceId,sourceValue:C?.sourceValue}),M=new Date,N;try{N=s(y)?o(y):y}catch{throw new ConnectorParseError(j,`Error while parsing connector`)}let P={connector:N,context:j,credentials:k,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:o}=E,s=findActionByActionId(N,o);if(i(s))throw new MissingActionError(j,`No matching action found`);let c=await executeAction({action:s,blockContext:j,queryParams:n,pathParams:t,body:r,headers:a,parseActionInputsFn:l,createBlockFn:d,createBlockParams:P,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:M,endTime:new Date},await recordActionResult({action:s,resultBlock:c,...recordingFieldsFromParams(e)}),c}else if(_===`test_actions`){let t=h(N,D,O);if(i(t)||t.length===0)return await createSuccessBlock(d,P);j.actionType=`test`;for(let n of t){let t=new Date,r=await d({...P,inputs:void 0,action:n.action,nextCursor:void 0});if(!(!c(n.condition)||I(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,P);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,P);return n.statistics={startTime:M,endTime:new Date},n}else if(_===`refresh_authentication`){let t=m(N,D,O);if(i(t))throw new MissingActionError(j,`No matching action found`);let o=await executeAction({action:t.action,blockContext:j,queryParams:n,pathParams:t.params,body:r,headers:a,parseActionInputsFn:l,createBlockFn:d,createBlockParams:P,runStepActionFn:f});return o=await applyDefenderToBlock(o,g,S,w),o.statistics={startTime:M,endTime:new Date},await recordActionResult({action:t.action,resultBlock:o,...recordingFieldsFromParams(e)}),o}else if(_===`path`){let{path:t,method:o}=E,s=p(N,t,o);if(i(s))throw new MissingActionError(j,`No matching action found`);let c=await executeAction({action:s.action,blockContext:j,queryParams:n,pathParams:s.params,body:r,headers:a,parseActionInputsFn:l,createBlockFn:d,createBlockParams:P,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:M,endTime:new Date},await recordActionResult({action:s.action,resultBlock:c,...recordingFieldsFromParams(e)}),c}else return await createErrorBlock(d,P)},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`?ee(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 se({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,fe as DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS,z as DELTA_TOKEN_INCREMENTAL_SCHEMA,V as INCREMENTAL_SCHEMA,InvalidActionInputsError,InvalidEventOutputError,B as TIME_FILTER_INCREMENTAL_SCHEMA,applyReleaseStageToConnector,createBlock,createCursorPaginator,createDeltaTokenStrategy,createIncrementalStrategy,createOffsetPaginator,createPagePaginator,createPaginator,createTimeFilterStrategy,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.82.0",
3
+ "version": "2.84.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",