@stackone/connect-sdk 2.112.0 → 2.113.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.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import"./chunk-BhWHdk3m.mjs";import{dateToEpoch as e,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,FORMAT_PATTERNS as b,ReleaseStages as x,SourceType as S,StepFunctionName as C,StepFunctionsFactory as w,StepFunctionsRegistry as T,buildExpressionContext as E,computeDataSyncFingerprint as D,decodeCompositeId as O,encodeCompositeId as k,evaluateExternalAccountIdExtractor as A,expandCursor as ee,getInputEnumValues as j,getIteratorLocation as te,getPaginationKeys as ne,isCompositeId as M,isCursorEmpty as N,isForeachStep as P,isValidEnumRef as F,minifyCursor as I,updateCursor as L}from"@stackone/core";import{HttpErrorMessages as re,isSuccessStatusCode as ie}from"@stackone/transport";import{parse as ae}from"yaml";import{evaluate as oe,evaluateConditionExpression as se,safeEvaluate as R,safeEvaluateRecord as ce}from"@stackone/expressions";import{createDecider as le,createEvaluator as ue,prepareLevels as de}from"@stackone/policy";import{createPromptDefense as fe}from"@stackone/defender";import{hasErrorEntries as pe}from"@stackone/olap";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)],filterActionsByAuthType=(e,t)=>{if(i(t)||i(e.actions))return e;let n={};for(let[r,a]of Object.entries(e.actions))(i(a.authRequirements)||t in a.authRequirements)&&(n[r]=a);return{...e,actions:n}},me=[/client.?id/i,/client.?secret/i,/app.?secret/i],he=/(?:credentials|config|setup)\.([A-Za-z0-9_-]+)/g,computeCredentialsVerifiedByAuth=e=>{let t=!!(e.type===`oauth2`&&e.authorization?.authorizationUrl&&e.authorization?.tokenUrl),n=!!e.refreshAuthentication?.action;if(!(t||n))return!1;let r=[...e.setupFields??[],...e.configFields??[]].filter(e=>e.required===!0).map(e=>e.key);if(t&&(r=r.filter(e=>!me.some(t=>t.test(e)))),r.length===0)return!0;let i=JSON.stringify([e.authorization,e.refreshAuthentication]),a=new Set;for(let e of i.matchAll(he))a.add(e[1]);return r.every(e=>a.has(e))},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"./chunk-BhWHdk3m.mjs";import{dateToEpoch as e,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{HttpErrorMessages as g,McpClient as _,isSuccessStatusCode as v,probeMcpServer as y}from"@stackone/transport";import{parse as b,stringify as x}from"yaml";import{AUTHORIZATION_SCHEMA as S,COMPOSITE_ID_LATEST_VERSION as C,CoreError as w,ExecutionModes as T,FORMAT_PATTERNS as E,ReleaseStages as D,SourceType as O,StepFunctionName as k,StepFunctionsFactory as A,StepFunctionsRegistry as j,buildExpressionContext as M,computeDataSyncFingerprint as ee,decodeCompositeId as te,encodeCompositeId as N,evaluateExternalAccountIdExtractor as ne,expandCursor as P,getInputEnumValues as F,getIteratorLocation as I,getPaginationKeys as L,isCompositeId as re,isCursorEmpty as ie,isForeachStep as ae,isValidEnumRef as R,minifyCursor as oe,updateCursor as z}from"@stackone/core";import{evaluate as se,evaluateConditionExpression as ce,safeEvaluate as le,safeEvaluateRecord as ue}from"@stackone/expressions";import{createDecider as de,createEvaluator as fe,prepareLevels as pe}from"@stackone/policy";import{createPromptDefense as me}from"@stackone/defender";import{hasErrorEntries as he}from"@stackone/olap";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)],filterActionsByAuthType=(e,t)=>{if(i(t)||i(e.actions))return e;let n={};for(let[r,a]of Object.entries(e.actions))(i(a.authRequirements)||t in a.authRequirements)&&(n[r]=a);return{...e,actions:n}},ge=[/client.?id/i,/client.?secret/i,/app.?secret/i],_e=/(?:credentials|config|setup)\.([A-Za-z0-9_-]+)/g,computeCredentialsVerifiedByAuth=e=>{let t=!!(e.type===`oauth2`&&e.authorization?.authorizationUrl&&e.authorization?.tokenUrl),n=!!(e.type===`mcp`&&e.authorizationFlow),r=!!e.refreshAuthentication?.action;if(!(t||n||r))return!1;let i=[...e.setupFields??[],...e.configFields??[]].filter(e=>e.required===!0).map(e=>e.key);if((t||n)&&(i=i.filter(e=>!ge.some(t=>t.test(e)))),i.length===0)return!0;let a=JSON.stringify([e.authorization,e.refreshAuthentication]),o=new Set;for(let e of a.matchAll(_e))o.add(e[1]);return i.every(e=>o.has(e))},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 z=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends z{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends z{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}};const formatStepLocation=e=>e.kind===`action`?`action '${e.actionId}'`:`webhook setup phase '${e.phase}'`;var InvalidStepFunctionError=class extends z{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends z{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the ${formatStepLocation(e)}.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.location=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends z{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends z{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},InvalidEventRouterReferenceError=class extends z{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends z{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}},InvalidAuthRequirementsError=class extends z{constructor(e){super(`INVALID_AUTH_REQUIREMENTS`,`Invalid authRequirements. Verify auth config keys are valid and not used alongside requiredScopes.`),this.name=`InvalidAuthRequirementsError`,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.`}}),ge=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()}),_e=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()}),ve=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()}),ye=l.discriminatedUnion(`type`,[ge,_e,ve]),B=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()})}),be=60,V=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),response:u({updatedAtPath:l.string()}).optional()}),H=l.discriminatedUnion(`type`,[V,B]),hasCatastrophicBacktrackingRisk=e=>{let t=[],n=!1,r=/\{(\d+)(?:(,)(\d*))?\}/y,quantifierAt=t=>{let n=e[t];if(n===`*`||n===`+`)return{length:1,variable:!0,amplifying:!0};if(n===`?`)return{length:1,variable:!0,amplifying:!1};if(n===`{`){r.lastIndex=t;let n=r.exec(e);if(n){let e=Number(n[1]),t=n[2]===void 0?e:n[3]?Number(n[3]):1/0;return{length:n[0].length,variable:t>e,amplifying:t>=2}}}};for(let r=0;r<e.length;r++){let i=e[r];if(i===`\\`){r++;continue}if(n){i===`]`&&(n=!1);continue}if(i===`[`){n=!0;continue}if(i===`|`){t.length>0&&(t[t.length-1].hasAlternation=!0);continue}if(i===`(`){if(t.push({hasVariable:!1,hasAlternation:!1}),e[r+1]===`?`){let t=e[r+2]===`<`&&(e[r+3]===`=`||e[r+3]===`!`);r+=t?2:1}continue}if(i===`)`){let e=t.pop(),n=quantifierAt(r+1);if(n){if(n.amplifying&&(e?.hasVariable||e?.hasAlternation))return!0;r+=n.length}t.length>0&&((n?.variable||e?.hasVariable)&&(t[t.length-1].hasVariable=!0),e?.hasAlternation&&(t[t.length-1].hasAlternation=!0));continue}let a=quantifierAt(r);a&&(a.variable&&t.length>0&&(t[t.length-1].hasVariable=!0),r+=a.length-1)}return!1},compilesAsRegex=e=>{try{return new RegExp(e),!0}catch{return!1}},U=Object.keys(b),compileFieldValidationRegex=e=>e.pattern===void 0?e.format?b[e.format]:void 0:new RegExp(e.pattern),xe=u({pattern:l.string().optional(),format:l.enum(U).optional(),errorMessage:l.string().min(1,`errorMessage cannot be empty when set`).optional()}).check(e=>{let t=e.value;if(t.pattern!==void 0==(t.format!==void 0)){e.issues.push({code:`custom`,input:t,path:[],message:`validation: must declare exactly one of pattern or format — pattern subsumes format, so encode compound constraints as a single pattern`});return}if(t.pattern!==void 0){if(t.pattern.length===0){e.issues.push({code:`custom`,input:t,path:[`pattern`],message:`pattern cannot be empty when set`});return}if(!compilesAsRegex(t.pattern)){e.issues.push({code:`custom`,input:t,path:[`pattern`],message:`Invalid regex pattern`});return}hasCatastrophicBacktrackingRisk(t.pattern)&&e.issues.push({code:`custom`,input:t,path:[`pattern`],message:"Pattern risks catastrophic backtracking (variable-width quantifier or alternation nested inside a repeated group, e.g. `(a+)+`, `(a{2,4})+` or `(a|a)+`). It runs on every keystroke in the browser — rewrite without nesting, typically by flattening the repeated group into a single character class with a lookahead guarding label boundaries (e.g. `^([a-z0-9-]+\\.)+[a-z]{2,}$` becomes `^(?!\\.|.*\\.\\.)[a-z0-9.-]+\\.[a-z]{2,}$`)."})}}),W={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()},collectComputedValueIssues=e=>e.computed===!0&&!e.value?[{path:[`value`],message:`A computed field must have a value (JEXL expression)`}]:[],collectValidationSupportIssues=e=>e.computed===!0?[{path:[`validation`],message:`validation: is not supported on computed fields — the value is a server-evaluated expression the customer never types`}]:e.readOnly===!0?[{path:[`validation`],message:`validation: is not supported on readOnly fields — the customer never edits the value, so there is nothing for client-side validation to check`}]:[],collectValidationExampleIssues=e=>{let t=compileFieldValidationRegex(e.validation);if(!t)return[];let n=[];return e.placeholder!==void 0&&!t.test(e.placeholder)&&n.push({path:[`validation`],message:`placeholder "${e.placeholder}" does not satisfy the field's own validation — fix the pattern/format or the placeholder`}),e.value!==void 0&&!t.test(e.value)&&n.push({path:[`validation`],message:`default value "${e.value}" does not satisfy the field's own validation — fix the pattern/format or the value`}),n},Se=l.discriminatedUnion(`type`,[u({...W,type:l.enum([`text`,`password`,`text_area`]),validation:xe.optional()}),u({...W,type:l.literal(`select`),options:u({value:l.string(),label:l.string()}).array()})]).check(e=>{let t=e.value,n=`validation`in t?t.validation:void 0,r=n?collectValidationSupportIssues(t):[],i=[...collectComputedValueIssues(t),...r,...n&&r.length===0?collectValidationExampleIssues({...t,validation:n}):[]];for(let n of i)e.issues.push({code:`custom`,input:t,message:n.message,path:n.path})}),Ce=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(()=>Ce).array().optional(),requiredScopes:l.string().optional()}),we=l.union([u({values:l.string().array().min(1)}),u({ref:l.string()})]),Te=u({minLength:l.number().optional(),maxLength:l.number().optional(),pattern:l.string().refine(e=>compilesAsRegex(e),{message:`Invalid regex pattern`}).optional(),format:l.enum(U).optional(),min:l.number().optional(),max:l.number().optional(),errorMessage:l.string().optional()}),Ee=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`}),De=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:Ee,errorMessage:l.string().optional()}),u({rule:l.literal(`mutuallyExclusive`),fields:l.string().array().min(2),errorMessage:l.string().optional()})]),Oe=l.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),ke=l.lazy(()=>u({type:Oe,description:l.string().optional(),array:l.boolean().optional().default(!1),properties:l.lazy(()=>G.omit({in:!0})).array().optional(),oneOf:we.optional(),rules:Te.optional()}).check(e=>{let t=e.value;t.type===`enum`&&!t.oneOf&&e.issues.push({code:`custom`,message:`Variant with type 'enum' must declare oneOf`,input:t,path:[]})})),G=u({name:l.string(),type:Oe.optional(),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:we.optional(),rules:Te.optional(),variants:l.lazy(()=>ke).array().min(2).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`}).check(e=>{let t=e.value;t.variants?(t.type&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'type' must be absent`,input:t,path:[]}),t.array&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'array' must be absent`,input:t,path:[]}),t.properties&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'properties' must be absent`,input:t,path:[]}),t.oneOf&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'oneOf' must be absent`,input:t,path:[]}),t.rules&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'rules' must be absent — define rules inside each variant instead`,input:t,path:[]})):t.type||e.issues.push({code:`custom`,message:`'type' is required when 'variants' is absent`,input:t,path:[]})}),Ae=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())}),je=l.union([l.boolean(),l.literal(`break`)]).optional(),Me=u({stepId:l.string(),description:l.string(),stepFunction:K,condition:l.string().optional(),onConditionError:je,ignoreError:l.boolean().optional()}),Ne=u({stepId:l.string(),description:l.string(),iterator:l.string(),stepFunction:K.optional(),stepFunctions:K.array().optional(),condition:l.string().optional(),onConditionError:je,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`}),Pe=u({allowed:l.boolean(),indexField:l.string().or(l.string().array()),dataKey:l.string().optional(),pagination:ye.optional(),incremental:H.optional(),maxPages:l.number().int().positive().optional(),maxDurationMinutes:l.number().int().positive().optional()}),Fe=u({rules:u({when:l.string(),then:u({action:l.string(),input:l.record(l.string(),l.unknown()).optional()})}).array()}),q=u({actionId:l.string(),categories:l.string().array(),actionType:l.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),effects:l.array(l.enum([`read`,`write`,`delete`,`search`,`execute`])).optional(),annotations:u({title:l.string().optional(),readOnlyHint:l.boolean().optional(),destructiveHint:l.boolean().optional(),idempotentHint:l.boolean().optional(),openWorldHint:l.boolean().optional()}).optional(),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:Ae.array().optional(),tags:l.string().array().optional(),releaseStage:l.enum(x).optional(),resources:l.string().optional(),responses:u({statusCode:l.number(),description:l.string()}).array().optional(),requiredScopes:l.string().optional(),authRequirements:l.record(l.string(),l.string().array()).optional(),inputs:G.array().optional(),validationRules:De.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:Ce.array().optional(),steps:l.union([Me,Ne]).array(),result:l.string().or(l.record(l.string(),l.unknown())).optional(),dataSync:Pe.optional(),providerEvents:l.string().array().nonempty().optional(),prerequisiteActions:l.string().array().optional()}),stepUsesBrowserUse=e=>`stepFunction`in e&&e.stepFunction?.functionName===C.BROWSER_USE?!0:`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>e.functionName===C.BROWSER_USE):!1,Ie=q.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`]})}),Le=u({schedule:l.string().optional(),action:q.extend({actionType:l.literal(`refresh_token`)})}),Re=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()}),ze=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()}),Ve=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:Be.optional(),displayScopes:l.boolean().optional(),applicableScopes:l.string().optional()}),He=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:Be.optional(),steps:Ve.array().optional(),applicableScopes:l.string().optional()}),J=u({warning:l.string().optional(),sections:He.array()}),Ue=u({config:J.optional(),setup:J.optional()}),We=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`]}),Ge=u({certs:l.string().array().optional(),keys:l.string().array().optional()}).optional(),Y=u({label:l.string(),authorization:g,certificates:Ge,requiredScopes:l.string().optional(),environments:u({key:l.string(),name:l.string()}).array(),support:u({link:l.string().optional(),description:l.string().optional(),guides:Ue.optional()}).optional(),configFields:Se.array().optional(),configNotices:We.array().optional(),setupFields:Se.array().optional(),setupNotices:We.array().optional(),refreshAuthentication:Le.optional(),testActions:u({action:l.string().or(Ie),condition:l.string().optional(),required:l.boolean().default(!0)}).array().optional()}),Ke=Y.extend({type:l.literal(`oauth2`),grantType:l.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),qe=Y.extend({type:l.literal(`custom`)}),Je=Y.extend({type:l.literal(`oidc`)}),Ye=l.discriminatedUnion(`type`,[Ke,qe,Je]),X=u({steps:l.union([Me,Ne]).array().min(1),result:l.string().optional()}),Xe=X.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)},Ze=u({creation:Xe,activation:X.optional(),deletion:X,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`]})}),Qe=u({setup:J.optional()}),$e=u({setup:Ze.optional(),guides:Qe.optional(),actions:q.extend({actionType:l.literal(`event`),requiresManualSetup:l.boolean().optional()}).array().optional(),router:Fe.optional(),externalAccountIdExtractor:q.extend({actionType:l.literal(`custom`),result:l.string().min(1)}).optional()}),et=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(),changelog:u({summary:l.string(),labels:l.string().array().optional()}).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(),Ye).array().optional(),actions:Ie.array().optional(),events:$e.optional(),rateLimit:Re.optional(),concurrency:ze.optional(),releaseStage:l.enum(x).optional(),forkedFrom:l.string().optional(),mcp:u({instructions:l.string().max(2e3).optional()}).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(et,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,changelog:t.info.changelog,resources:t.resources,documentation:t.documentation,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,mcp:t.mcp,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},o=buildActionsFromYaml(t,a);validateAuthRequirementsMutualExclusivity(t,o),r.actions=o;let s=buildSyncedActionsFromActions(o);c(s)&&(r.syncedActions=s),hydrateTestActions(t,t.info.key,i,o,a),r.authentication=i,c(o)&&(r.categories=getConnectorCategoriesFromActions(Object.values(o)));let l=buildEventActionsFromYaml(t,a),u=t.events?.router,d=c(t.events?.externalAccountIdExtractor)?parseAction(t,[`events`,`externalAccountIdExtractor`],buildActionId(t.info.key,t.events.externalAccountIdExtractor.actionId),t.events.externalAccountIdExtractor,a,void 0):void 0,f=t.events?.setup,p=c(f)?{isConsolidated:f.isConsolidated,creation:parseWebhookSetupPhase(`creation`,f.creation,a),activation:c(f.activation)?parseWebhookSetupPhase(`activation`,f.activation,a):void 0,deletion:parseWebhookSetupPhase(`deletion`,f.deletion,a)}:void 0,m=t.events?.guides,h=c(m)?(()=>{let e=m.setup;if(!c(e))return{setup:void 0};let n=new Set(Object.keys(t.scopeDefinitions||{})),r=parseGuideSectionsRequiredScopes(e.sections,n,[`events`,`guides`,`setup`,`sections`]);return{setup:{warning:e.warning,sections:r??[]}}})():void 0;if((c(l)||c(u)||c(d)||c(p)||c(h))&&(r.events={setup:p,guides:h,actions:l,router:u,externalAccountIdExtractor:d}),c(u)){let e=Object.keys(r.events?.actions??{}),n=t.info.key,i=u.rules.map(e=>e.then.action);for(let t of i){let r=t.startsWith(`${n}_`)?t:`${n}_${t}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(t)}}return r}catch(e){if(e instanceof z)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e))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,isInline:!1}}else{let r=parseAction(e,[`authentication`,a,`testActions`,o],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r,isInline:!0}}return{...n,isInline:!1}});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)},tt=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!c(e))return;let t=[];for(let n of e.matchAll(tt)){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}}},resolveAuthorizationRedirectUri=(e,t)=>{let{authorization:n}=e;if(!(e.type===`oauth2`&&e.grantType===`authorization_code`&&c(n?.authorizationUrl))||i(n))return;let r=n.redirectUri;return s(r)&&r.trim()!==``?r:`\${apiHostUri}/connect/oauth2/${t}/callback`},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,x=resolveAuthorizationRedirectUri(g,i),S=c(x)?{...g.authorization,redirectUri:x}:g.authorization;return t[u]={...g,authorization:S,...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},{}),buildSyncedActionsFromActions=e=>{if(!c(e))return;let t=Object.values(e).reduce((e,t)=>{if(t.dataSync?.allowed!==!0)return e;let n=`${t.id}_s1query`;return e[n]={id:n,baseActionId:t.id,label:t.label,description:t.description,actionType:t.actionType,entrypointHttpMethod:t.entrypointHttpMethod,inputs:t.inputs,validationRules:t.validationRules,hasRequiredInput:t.inputs?.some(e=>e.required)??!1,dataSync:t.dataSync},e},{});return Object.keys(t).length>0?t:void 0},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)}},validateVariantProperties=(e,t,n)=>{for(let r of t){let t=[...e,r.name];!r.variants&&!r.type&&n.push({message:`'type' is required when 'variants' is absent`,path:t,keys:[`type`]}),r.type===`enum`&&!r.oneOf&&n.push({message:`oneOf is required when type is 'enum'`,path:t,keys:[]}),r.type===`enum`&&r.oneOf&&`ref`in r.oneOf&&(F(r.oneOf.ref)||n.push({message:`Invalid enum reference '${r.oneOf.ref}'`,path:t,keys:[]})),r.type!==`enum`&&r.oneOf&&n.push({message:`oneOf is only allowed when type is 'enum'`,path:t,keys:[]}),r.variants&&validateInputVariants(e,[r],n),r.type===`object`&&r.properties&&validateVariantProperties(t,r.properties,n)}},validateInputVariants=(e,t,n)=>{if(t)for(let r of t){let t=[...e,r.name];if(r.variants){r.type&&n.push({message:`when 'variants' is present, 'type' must be absent`,path:t,keys:[`type`]}),r.array&&n.push({message:`when 'variants' is present, 'array' must be absent`,path:t,keys:[`array`]}),r.properties&&n.push({message:`when 'variants' is present, 'properties' must be absent`,path:t,keys:[`properties`]}),r.oneOf&&n.push({message:`when 'variants' is present, 'oneOf' must be absent`,path:t,keys:[`oneOf`]}),r.rules&&n.push({message:`when 'variants' is present, 'rules' must be absent — define rules inside each variant instead`,path:t,keys:[`rules`]}),r.variants.length<2&&n.push({message:`'variants' must contain at least 2 entries`,path:t,keys:[`variants`]});for(let e of r.variants)e.type===`enum`&&!e.oneOf&&n.push({message:`oneOf is required when type is 'enum'`,path:t,keys:[]}),e.type===`enum`&&e.oneOf&&`ref`in e.oneOf&&(F(e.oneOf.ref)||n.push({message:`Invalid enum reference '${e.oneOf.ref}'`,path:t,keys:[]})),e.type===`object`&&e.properties&&validateVariantProperties(t,e.properties,n)}else r.type||n.push({message:`'type' is required when 'variants' is absent`,path:t,keys:[`type`]});r.type===`object`&&r.properties&&validateInputVariants(t,r.properties,n)}},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=te(i),o=ne(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]}])},validateAuthRequirementsMutualExclusivity=(e,t)=>{if(i(t))return;let n=e.info.key,r=Object.values(t).some(e=>c(e.authRequirements)),a=Object.values(t).some(e=>c(e.requiredScopes)&&e.requiredScopes.length>0);if(r&&a)throw new InvalidAuthRequirementsError([{message:`Connector '${n}' cannot have both 'authRequirements' and 'requiredScopes'. To migrate, replace 'requiredScopes' with 'authRequirements' on all actions including test actions.`,path:[`actions`],keys:[`authRequirements`,`requiredScopes`]}])},getConnectorAuthKeys=e=>{let t=new Set;for(let n of e.authentication??[])for(let e of Object.keys(n))t.add(e);return t},parseAuthRequirements=(e,t,n,r,a)=>{if(i(r))return;if(Object.keys(r).length===0)throw new InvalidAuthRequirementsError([{message:`Action '${n}' has an empty authRequirements map. Either omit authRequirements (to allow all auth types) or specify at least one auth config key.`,path:[...t,`authRequirements`],keys:[]}]);let o=getConnectorAuthKeys(e),s=[],c={};for(let[e,i]of Object.entries(r)){if(!o.has(e)){s.push({message:`Action '${n}' references auth config key '${e}' which is not defined on this connector. Valid keys: ${[...o].join(`, `)}.`,path:[...t,`authRequirements`],keys:[e]});continue}for(let r of i)a.has(r)||s.push({message:`Undefined scope '${r}' in action '${n}' (auth: '${e}'). Ensure the scope is declared in scopeDefinitions.`,path:[...t,`authRequirements`,e],keys:[r]});c[e]=i}if(s.length>0)throw new InvalidAuthRequirementsError(s);return 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);let u=[];if(validateInputVariants(t,l,u),u.length>0)throw new SchemaValidationError(u);validateExamplesMatchInputs(n,r.examples,l),validateActionRuleFieldReferences(n,t,r.validationRules,l),validateDataSyncPaginationKeys(n,t,r.dataSync,l),validateDataSyncIncrementalKeys(n,t,r.dataSync,l);let d=getEntrypointHttpMethod(r),f=new Set(Object.keys(e.scopeDefinitions||{})),p=[],m=parseScopesString(r.requiredScopes);if(Object.values(m??[]).forEach(e=>{f.has(e)||p.push({message:`Scope '${e}' included in action '${r.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),p.length>0)throw new MissingScopeDefinitionError(p);let h=parseAuthRequirements(e,t,r.actionId,r.authRequirements,f);return{id:n,categories:r.categories,label:r.label,description:r.description,details:r.details,examples:r.examples,actionType:r.actionType,effects:r.effects,annotations:r.annotations,executionMode:r.executionMode,schemaType:r.schemaType??`native`,entrypointUrl:r.entrypointUrl??o,entrypointHttpMethod:d,endpoint:a,tags:r.tags,releaseStage:r.releaseStage,resources:r.resources,responses:s,cursor:c,compositeIdentifiers:parseCompositeIdentifiersConfig(r),requiredScopes:m,authRequirements:h,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,dataSyncConfigFingerprint:r.dataSync?.allowed===!0?D(r.dataSync):void 0,providerEvents:r.providerEvents,prerequisiteActions:r.prerequisiteActions,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,onConditionError:i.onConditionError,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=T[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=T[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)}},buildPathString=e=>e.reduce((e,t)=>typeof t==`number`?`${e}[${t}]`:typeof t==`string`?e?`${e}.${t}`:t:e,``),enrichVariantErrors=e=>{let isVariantDump=e=>e.message?.includes(`expected one of the following shapes`),t=e.filter(isVariantDump);if(t.length===0)return e;let n=Math.min(...t.map(e=>e.path?.length??0));return e.filter(e=>!isVariantDump(e)||(e.path?.length??0)<=n).map(e=>isVariantDump(e)&&e.path?.length>0?{...e,message:`The field '${buildPathString(e.path)}' ${e.message}`}:e)},parseActionInputs=(e,t)=>{if(!e.inputs)return{};let n=createInputsSchema(e.inputs),r;try{r=l.object(n).parse(t)}catch(e){throw e instanceof l.ZodError?new l.ZodError(enrichVariantErrors(e.issues)):e}let 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=j(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)},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=b[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)},describeVariantShape=e=>{let t;switch(e.type){case`string`:case`datetime_string`:case`number`:case`boolean`:t=e.type;break;case`enum`:t=e.oneOf&&`values`in e.oneOf?e.oneOf.values.map(e=>`'${e}'`).join(` | `):`enum`;break;case`object`:t=e.properties&&e.properties.length>0?`{ ${e.properties.map(e=>{let t=e.required?``:`?`,n;return n=e.variants&&e.variants.length>=2?e.variants.map(describeVariantShape).join(` | `):e.type===`enum`&&e.oneOf&&`values`in e.oneOf?e.oneOf.values.map(e=>`'${e}'`).join(` | `):e.type??`unknown`,e.array&&(n+=`[]`),`${e.name}${t}: ${n}`}).join(`, `)} }`:`object`;break;default:t=`unknown`}return e.array&&(t+=`[]`),t},buildVariantsSchema=e=>{let t=e.map(e=>buildZodSchemaFromInputType(e,{strict:!0})),n=e.map(describeVariantShape).join(` | `);return l.any().check(e=>{for(let n of t)if(n.safeParse(e.value).success)return;e.issues.push({code:`custom`,message:`expected one of the following shapes: ${n}`,input:e.value,path:[]})})},buildZodSchemaFromInputType=(e,t)=>{if(e.variants&&e.variants.length>=2)return buildVariantsSchema(e.variants);let n;switch(e.type){case`string`:case`datetime_string`:n=l.string();break;case`number`:n=l.number();break;case`boolean`:n=l.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let n of e.properties){let e=buildZodSchemaFromInputType(n,t);n.description&&(e=e.describe(n.description)),n.required||(e=e.optional()),r[n.name]=e}n=t?.strict?u(r):l.object(r)}else n=l.record(l.string(),l.unknown());break;default:n=l.unknown()}return e.rules&&e.type&&(n=applyInputRules(n,e.rules,e.type)),e.array&&(n=l.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`||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)=>{let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;return c(r)?{action:r,params:{}}:void 0},supportsRefreshAuthentication=(e,t,n)=>c(getActionForRefreshAuthentication(e,t,n)),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||t instanceof InvalidAuthRequirementsError){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}`)}},ve=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()}),ye=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()}),be=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()}),xe=l.discriminatedUnion(`type`,[ve,ye,be]),Se=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()})}),Ce=60,we=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),response:u({updatedAtPath:l.string()}).optional()}),Te=l.discriminatedUnion(`type`,[we,Se]),hasCatastrophicBacktrackingRisk=e=>{let t=[],n=!1,r=/\{(\d+)(?:(,)(\d*))?\}/y,quantifierAt=t=>{let n=e[t];if(n===`*`||n===`+`)return{length:1,variable:!0,amplifying:!0};if(n===`?`)return{length:1,variable:!0,amplifying:!1};if(n===`{`){r.lastIndex=t;let n=r.exec(e);if(n){let e=Number(n[1]),t=n[2]===void 0?e:n[3]?Number(n[3]):1/0;return{length:n[0].length,variable:t>e,amplifying:t>=2}}}};for(let r=0;r<e.length;r++){let i=e[r];if(i===`\\`){r++;continue}if(n){i===`]`&&(n=!1);continue}if(i===`[`){n=!0;continue}if(i===`|`){t.length>0&&(t[t.length-1].hasAlternation=!0);continue}if(i===`(`){if(t.push({hasVariable:!1,hasAlternation:!1}),e[r+1]===`?`){let t=e[r+2]===`<`&&(e[r+3]===`=`||e[r+3]===`!`);r+=t?2:1}continue}if(i===`)`){let e=t.pop(),n=quantifierAt(r+1);if(n){if(n.amplifying&&(e?.hasVariable||e?.hasAlternation))return!0;r+=n.length}t.length>0&&((n?.variable||e?.hasVariable)&&(t[t.length-1].hasVariable=!0),e?.hasAlternation&&(t[t.length-1].hasAlternation=!0));continue}let a=quantifierAt(r);a&&(a.variable&&t.length>0&&(t[t.length-1].hasVariable=!0),r+=a.length-1)}return!1},compilesAsRegex=e=>{try{return new RegExp(e),!0}catch{return!1}},Ee=Object.keys(E),compileFieldValidationRegex=e=>e.pattern===void 0?e.format?E[e.format]:void 0:new RegExp(e.pattern),De=u({pattern:l.string().optional(),format:l.enum(Ee).optional(),errorMessage:l.string().min(1,`errorMessage cannot be empty when set`).optional()}).check(e=>{let t=e.value;if(t.pattern!==void 0==(t.format!==void 0)){e.issues.push({code:`custom`,input:t,path:[],message:`validation: must declare exactly one of pattern or format — pattern subsumes format, so encode compound constraints as a single pattern`});return}if(t.pattern!==void 0){if(t.pattern.length===0){e.issues.push({code:`custom`,input:t,path:[`pattern`],message:`pattern cannot be empty when set`});return}if(!compilesAsRegex(t.pattern)){e.issues.push({code:`custom`,input:t,path:[`pattern`],message:`Invalid regex pattern`});return}hasCatastrophicBacktrackingRisk(t.pattern)&&e.issues.push({code:`custom`,input:t,path:[`pattern`],message:"Pattern risks catastrophic backtracking (variable-width quantifier or alternation nested inside a repeated group, e.g. `(a+)+`, `(a{2,4})+` or `(a|a)+`). It runs on every keystroke in the browser — rewrite without nesting, typically by flattening the repeated group into a single character class with a lookahead guarding label boundaries (e.g. `^([a-z0-9-]+\\.)+[a-z]{2,}$` becomes `^(?!\\.|.*\\.\\.)[a-z0-9.-]+\\.[a-z]{2,}$`)."})}}),Oe={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()},collectComputedValueIssues=e=>e.computed===!0&&!e.value?[{path:[`value`],message:`A computed field must have a value (JEXL expression)`}]:[],collectValidationSupportIssues=e=>e.computed===!0?[{path:[`validation`],message:`validation: is not supported on computed fields — the value is a server-evaluated expression the customer never types`}]:e.readOnly===!0?[{path:[`validation`],message:`validation: is not supported on readOnly fields — the customer never edits the value, so there is nothing for client-side validation to check`}]:[],collectValidationExampleIssues=e=>{let t=compileFieldValidationRegex(e.validation);if(!t)return[];let n=[];return e.placeholder!==void 0&&!t.test(e.placeholder)&&n.push({path:[`validation`],message:`placeholder "${e.placeholder}" does not satisfy the field's own validation — fix the pattern/format or the placeholder`}),e.value!==void 0&&!t.test(e.value)&&n.push({path:[`validation`],message:`default value "${e.value}" does not satisfy the field's own validation — fix the pattern/format or the value`}),n},ke=l.discriminatedUnion(`type`,[u({...Oe,type:l.enum([`text`,`password`,`text_area`]),validation:De.optional()}),u({...Oe,type:l.literal(`select`),options:u({value:l.string(),label:l.string()}).array()})]).check(e=>{let t=e.value,n=`validation`in t?t.validation:void 0,r=n?collectValidationSupportIssues(t):[],i=[...collectComputedValueIssues(t),...r,...n&&r.length===0?collectValidationExampleIssues({...t,validation:n}):[]];for(let n of i)e.issues.push({code:`custom`,input:t,message:n.message,path:n.path})}),Ae=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(()=>Ae).array().optional(),requiredScopes:l.string().optional()}),B=l.union([u({values:l.string().array().min(1)}),u({ref:l.string()})]),je=u({minLength:l.number().optional(),maxLength:l.number().optional(),pattern:l.string().refine(e=>compilesAsRegex(e),{message:`Invalid regex pattern`}).optional(),format:l.enum(Ee).optional(),min:l.number().optional(),max:l.number().optional(),errorMessage:l.string().optional()}),Me=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`}),Ne=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:Me,errorMessage:l.string().optional()}),u({rule:l.literal(`mutuallyExclusive`),fields:l.string().array().min(2),errorMessage:l.string().optional()})]),Pe=l.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),Fe=l.lazy(()=>u({type:Pe,description:l.string().optional(),array:l.boolean().optional().default(!1),properties:l.lazy(()=>V.omit({in:!0})).array().optional(),oneOf:B.optional(),rules:je.optional()}).check(e=>{let t=e.value;t.type===`enum`&&!t.oneOf&&e.issues.push({code:`custom`,message:`Variant with type 'enum' must declare oneOf`,input:t,path:[]})})),V=u({name:l.string(),type:Pe.optional(),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(()=>V.omit({in:!0})).array().optional(),oneOf:B.optional(),rules:je.optional(),variants:l.lazy(()=>Fe).array().min(2).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`}).check(e=>{let t=e.value;t.variants?(t.type&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'type' must be absent`,input:t,path:[]}),t.array&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'array' must be absent`,input:t,path:[]}),t.properties&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'properties' must be absent`,input:t,path:[]}),t.oneOf&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'oneOf' must be absent`,input:t,path:[]}),t.rules&&e.issues.push({code:`custom`,message:`when 'variants' is present, 'rules' must be absent — define rules inside each variant instead`,input:t,path:[]})):t.type||e.issues.push({code:`custom`,message:`'type' is required when 'variants' is absent`,input:t,path:[]})}),Ie=l.object({exampleDescription:l.string().optional()}).catchall(l.unknown()),H=u({functionName:l.string(),version:l.string().optional(),parameters:l.record(l.string(),l.unknown())}),U=l.union([l.boolean(),l.literal(`break`)]).optional(),Le=u({stepId:l.string(),description:l.string(),stepFunction:H,condition:l.string().optional(),onConditionError:U,ignoreError:l.boolean().optional()}),Re=u({stepId:l.string(),description:l.string(),iterator:l.string(),stepFunction:H.optional(),stepFunctions:H.array().optional(),condition:l.string().optional(),onConditionError:U,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`}),ze=u({allowed:l.boolean(),indexField:l.string().or(l.string().array()),dataKey:l.string().optional(),pagination:xe.optional(),incremental:Te.optional(),maxPages:l.number().int().positive().optional(),maxDurationMinutes:l.number().int().positive().optional()}),Be=u({rules:u({when:l.string(),then:u({action:l.string(),input:l.record(l.string(),l.unknown()).optional()})}).array()}),W=u({actionId:l.string(),categories:l.string().array(),actionType:l.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),effects:l.array(l.enum([`read`,`write`,`delete`,`search`,`execute`])).optional(),annotations:u({title:l.string().optional(),readOnlyHint:l.boolean().optional(),destructiveHint:l.boolean().optional(),idempotentHint:l.boolean().optional(),openWorldHint:l.boolean().optional()}).optional(),executionMode:l.enum(T).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:Ie.array().optional(),tags:l.string().array().optional(),releaseStage:l.enum(D).optional(),resources:l.string().optional(),responses:u({statusCode:l.number(),description:l.string()}).array().optional(),requiredScopes:l.string().optional(),authRequirements:l.record(l.string(),l.string().array()).optional(),inputs:V.array().optional(),validationRules:Ne.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:Ae.array().optional(),steps:l.union([Le,Re]).array(),result:l.string().or(l.record(l.string(),l.unknown())).optional(),dataSync:ze.optional(),providerEvents:l.string().array().nonempty().optional(),prerequisiteActions:l.string().array().optional()}),stepUsesBrowserUse=e=>`stepFunction`in e&&e.stepFunction?.functionName===k.BROWSER_USE?!0:`stepFunctions`in e&&e.stepFunctions?e.stepFunctions.some(e=>e.functionName===k.BROWSER_USE):!1,Ve=W.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`]})}),He=u({schedule:l.string().optional(),action:W.extend({actionType:l.literal(`refresh_token`)})}),Ue=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()}),We=u({mainMaxConcurrency:l.number(),subPools:l.array(u({subPoolKey:l.string(),urlPattern:l.string(),maxConcurrency:l.number()})).optional()}),Ge=u({src:l.string(),alt:l.string()}),Ke=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:Ge.optional(),displayScopes:l.boolean().optional(),applicableScopes:l.string().optional()}),qe=u({title:l.string(),content:l.string(),list:l.string().array().optional(),image:Ge.optional(),steps:Ke.array().optional(),applicableScopes:l.string().optional()}),G=u({warning:l.string().optional(),sections:qe.array()}),Je=u({config:G.optional(),setup:G.optional()}),Ye=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`]}),Xe=u({certs:l.string().array().optional(),keys:l.string().array().optional()}).optional(),K=u({label:l.string(),authorization:S,certificates:Xe,requiredScopes:l.string().optional(),environments:u({key:l.string(),name:l.string()}).array(),support:u({link:l.string().optional(),description:l.string().optional(),guides:Je.optional()}).optional(),configFields:ke.array().optional(),configNotices:Ye.array().optional(),setupFields:ke.array().optional(),setupNotices:Ye.array().optional(),refreshAuthentication:He.optional(),testActions:u({action:l.string().or(Ve),condition:l.string().optional(),required:l.boolean().default(!0)}).array().optional()}),Ze=K.extend({type:l.literal(`oauth2`),grantType:l.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),Qe=K.extend({type:l.literal(`custom`)}),$e=K.extend({type:l.literal(`oidc`)}),et=u({serverUrl:l.string().optional(),discovery:l.boolean().default(!0),clientRegistration:l.enum([`cimd`,`dcr`]).default(`cimd`),scopes:l.string().array().optional()}),tt=K.extend({type:l.literal(`mcp`),authorizationFlow:et.optional()}),nt=l.discriminatedUnion(`type`,[Ze,Qe,$e,tt]),q=u({steps:l.union([Le,Re]).array().min(1),result:l.string().optional()}),rt=q.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)},it=u({creation:rt,activation:q.optional(),deletion:q,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`]})}),at=u({setup:G.optional()}),ot=u({setup:it.optional(),guides:at.optional(),actions:W.extend({actionType:l.literal(`event`),requiresManualSetup:l.boolean().optional()}).array().optional(),router:Be.optional(),externalAccountIdExtractor:W.extend({actionType:l.literal(`custom`),result:l.string().min(1)}).optional()}),J=2e3,st=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(),changelog:u({summary:l.string(),labels:l.string().array().optional()}).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(),nt).array().optional(),actions:Ve.array().optional(),events:ot.optional(),rateLimit:Ue.optional(),concurrency:We.optional(),releaseStage:l.enum(D).optional(),forkedFrom:l.string().optional(),mcp:u({instructions:l.string().max(J).optional()}).optional()}).strict();var Y=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 Y{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends Y{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 Y{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 Y{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 Y{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 Y{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 Y{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 Y{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}},InvalidAuthRequirementsError=class extends Y{constructor(e){super(`INVALID_AUTH_REQUIREMENTS`,`Invalid authRequirements. Verify auth config keys are valid and not used alongside requiredScopes.`),this.name=`InvalidAuthRequirementsError`,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.`}}),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(st,b(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,changelog:t.info.changelog,resources:t.resources,documentation:t.documentation,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,mcp:t.mcp,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},o=buildActionsFromYaml(t,a);validateAuthRequirementsMutualExclusivity(t,o),r.actions=o;let s=buildSyncedActionsFromActions(o);c(s)&&(r.syncedActions=s),hydrateTestActions(t,t.info.key,i,o,a),r.authentication=i,c(o)&&(r.categories=getConnectorCategoriesFromActions(Object.values(o)));let l=buildEventActionsFromYaml(t,a),u=t.events?.router,d=c(t.events?.externalAccountIdExtractor)?parseAction(t,[`events`,`externalAccountIdExtractor`],buildActionId(t.info.key,t.events.externalAccountIdExtractor.actionId),t.events.externalAccountIdExtractor,a,void 0):void 0,f=t.events?.setup,p=c(f)?{isConsolidated:f.isConsolidated,creation:parseWebhookSetupPhase(`creation`,f.creation,a),activation:c(f.activation)?parseWebhookSetupPhase(`activation`,f.activation,a):void 0,deletion:parseWebhookSetupPhase(`deletion`,f.deletion,a)}:void 0,m=t.events?.guides,h=c(m)?(()=>{let e=m.setup;if(!c(e))return{setup:void 0};let n=new Set(Object.keys(t.scopeDefinitions||{})),r=parseGuideSectionsRequiredScopes(e.sections,n,[`events`,`guides`,`setup`,`sections`]);return{setup:{warning:e.warning,sections:r??[]}}})():void 0;if((c(l)||c(u)||c(d)||c(p)||c(h))&&(r.events={setup:p,guides:h,actions:l,router:u,externalAccountIdExtractor:d}),c(u)){let e=Object.keys(r.events?.actions??{}),n=t.info.key,i=u.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 Y)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,authorizationFlow:d,...f}=r;t[n]=stripAuthenticationSetup(f)}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,isInline:!1}}else{let r=parseAction(e,[`authentication`,a,`testActions`,o],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r,isInline:!0}}return{...n,isInline:!1}});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)},ct=/"([^"]*)"|(\S+)/g,parseScopesString=e=>{if(!c(e))return;let t=[];for(let n of e.matchAll(ct)){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}}},resolveAuthorizationRedirectUri=(e,t)=>{let{authorization:n}=e,r=e.type===`oauth2`&&e.grantType===`authorization_code`&&c(n?.authorizationUrl),a=e.type===`mcp`&&c(e.authorizationFlow);if(!r&&!a||i(n))return;let o=n.redirectUri;return s(o)&&o.trim()!==``?o:`\${apiHostUri}/connect/${r?`oauth2`:`mcp`}/${t}/callback`},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,x=resolveAuthorizationRedirectUri(g,i),S=c(x)?{...g.authorization,redirectUri:x}:g.authorization;return t[u]={...g,authorization:S,...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)=>(v(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},{}),buildSyncedActionsFromActions=e=>{if(!c(e))return;let t=Object.values(e).reduce((e,t)=>{if(t.dataSync?.allowed!==!0)return e;let n=`${t.id}_s1query`;return e[n]={id:n,baseActionId:t.id,label:t.label,description:t.description,actionType:t.actionType,entrypointHttpMethod:t.entrypointHttpMethod,inputs:t.inputs,validationRules:t.validationRules,hasRequiredInput:t.inputs?.some(e=>e.required)??!1,dataSync:t.dataSync},e},{});return Object.keys(t).length>0?t:void 0},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&&!R(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateVariantProperties=(e,t,n)=>{for(let r of t){let t=[...e,r.name];!r.variants&&!r.type&&n.push({message:`'type' is required when 'variants' is absent`,path:t,keys:[`type`]}),r.type===`enum`&&!r.oneOf&&n.push({message:`oneOf is required when type is 'enum'`,path:t,keys:[]}),r.type===`enum`&&r.oneOf&&`ref`in r.oneOf&&(R(r.oneOf.ref)||n.push({message:`Invalid enum reference '${r.oneOf.ref}'`,path:t,keys:[]})),r.type!==`enum`&&r.oneOf&&n.push({message:`oneOf is only allowed when type is 'enum'`,path:t,keys:[]}),r.variants&&validateInputVariants(e,[r],n),r.type===`object`&&r.properties&&validateVariantProperties(t,r.properties,n)}},validateInputVariants=(e,t,n)=>{if(t)for(let r of t){let t=[...e,r.name];if(r.variants){r.type&&n.push({message:`when 'variants' is present, 'type' must be absent`,path:t,keys:[`type`]}),r.array&&n.push({message:`when 'variants' is present, 'array' must be absent`,path:t,keys:[`array`]}),r.properties&&n.push({message:`when 'variants' is present, 'properties' must be absent`,path:t,keys:[`properties`]}),r.oneOf&&n.push({message:`when 'variants' is present, 'oneOf' must be absent`,path:t,keys:[`oneOf`]}),r.rules&&n.push({message:`when 'variants' is present, 'rules' must be absent — define rules inside each variant instead`,path:t,keys:[`rules`]}),r.variants.length<2&&n.push({message:`'variants' must contain at least 2 entries`,path:t,keys:[`variants`]});for(let e of r.variants)e.type===`enum`&&!e.oneOf&&n.push({message:`oneOf is required when type is 'enum'`,path:t,keys:[]}),e.type===`enum`&&e.oneOf&&`ref`in e.oneOf&&(R(e.oneOf.ref)||n.push({message:`Invalid enum reference '${e.oneOf.ref}'`,path:t,keys:[]})),e.type===`object`&&e.properties&&validateVariantProperties(t,e.properties,n)}else r.type||n.push({message:`'type' is required when 'variants' is absent`,path:t,keys:[`type`]});r.type===`object`&&r.properties&&validateInputVariants(t,r.properties,n)}},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=I(i),o=L(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]}])},validateAuthRequirementsMutualExclusivity=(e,t)=>{if(i(t))return;let n=e.info.key,r=Object.values(t).some(e=>c(e.authRequirements)),a=Object.values(t).some(e=>c(e.requiredScopes)&&e.requiredScopes.length>0);if(r&&a)throw new InvalidAuthRequirementsError([{message:`Connector '${n}' cannot have both 'authRequirements' and 'requiredScopes'. To migrate, replace 'requiredScopes' with 'authRequirements' on all actions including test actions.`,path:[`actions`],keys:[`authRequirements`,`requiredScopes`]}])},getConnectorAuthKeys=e=>{let t=new Set;for(let n of e.authentication??[])for(let e of Object.keys(n))t.add(e);return t},parseAuthRequirements=(e,t,n,r,a)=>{if(i(r))return;if(Object.keys(r).length===0)throw new InvalidAuthRequirementsError([{message:`Action '${n}' has an empty authRequirements map. Either omit authRequirements (to allow all auth types) or specify at least one auth config key.`,path:[...t,`authRequirements`],keys:[]}]);let o=getConnectorAuthKeys(e),s=[],c={};for(let[e,i]of Object.entries(r)){if(!o.has(e)){s.push({message:`Action '${n}' references auth config key '${e}' which is not defined on this connector. Valid keys: ${[...o].join(`, `)}.`,path:[...t,`authRequirements`],keys:[e]});continue}for(let r of i)a.has(r)||s.push({message:`Undefined scope '${r}' in action '${n}' (auth: '${e}'). Ensure the scope is declared in scopeDefinitions.`,path:[...t,`authRequirements`,e],keys:[r]});c[e]=i}if(s.length>0)throw new InvalidAuthRequirementsError(s);return 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);let u=[];if(validateInputVariants(t,l,u),u.length>0)throw new SchemaValidationError(u);validateExamplesMatchInputs(n,r.examples,l),validateActionRuleFieldReferences(n,t,r.validationRules,l),validateDataSyncPaginationKeys(n,t,r.dataSync,l),validateDataSyncIncrementalKeys(n,t,r.dataSync,l);let d=getEntrypointHttpMethod(r),f=new Set(Object.keys(e.scopeDefinitions||{})),p=[],m=parseScopesString(r.requiredScopes);if(Object.values(m??[]).forEach(e=>{f.has(e)||p.push({message:`Scope '${e}' included in action '${r.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),p.length>0)throw new MissingScopeDefinitionError(p);let h=parseAuthRequirements(e,t,r.actionId,r.authRequirements,f);return{id:n,categories:r.categories,label:r.label,description:r.description,details:r.details,examples:r.examples,actionType:r.actionType,effects:r.effects,annotations:r.annotations,executionMode:r.executionMode,schemaType:r.schemaType??`native`,entrypointUrl:r.entrypointUrl??o,entrypointHttpMethod:d,endpoint:a,tags:r.tags,releaseStage:r.releaseStage,resources:r.resources,responses:s,cursor:c,compositeIdentifiers:parseCompositeIdentifiersConfig(r),requiredScopes:m,authRequirements:h,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,dataSyncConfigFingerprint:r.dataSync?.allowed===!0?ee(r.dataSync):void 0,providerEvents:r.providerEvents,prerequisiteActions:r.prerequisiteActions,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,onConditionError:i.onConditionError,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=j[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=j[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)}},buildPathString=e=>e.reduce((e,t)=>typeof t==`number`?`${e}[${t}]`:typeof t==`string`?e?`${e}.${t}`:t:e,``),enrichVariantErrors=e=>{let isVariantDump=e=>e.message?.includes(`expected one of the following shapes`),t=e.filter(isVariantDump);if(t.length===0)return e;let n=Math.min(...t.map(e=>e.path?.length??0));return e.filter(e=>!isVariantDump(e)||(e.path?.length??0)<=n).map(e=>isVariantDump(e)&&e.path?.length>0?{...e,message:`The field '${buildPathString(e.path)}' ${e.message}`}:e)},parseActionInputs=(e,t)=>{if(!e.inputs)return{};let n=createInputsSchema(e.inputs),r;try{r=l.object(n).parse(t)}catch(e){throw e instanceof l.ZodError?new l.ZodError(enrichVariantErrors(e.issues)):e}let 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=F(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)},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=E[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)},describeVariantShape=e=>{let t;switch(e.type){case`string`:case`datetime_string`:case`number`:case`boolean`:t=e.type;break;case`enum`:t=e.oneOf&&`values`in e.oneOf?e.oneOf.values.map(e=>`'${e}'`).join(` | `):`enum`;break;case`object`:t=e.properties&&e.properties.length>0?`{ ${e.properties.map(e=>{let t=e.required?``:`?`,n;return n=e.variants&&e.variants.length>=2?e.variants.map(describeVariantShape).join(` | `):e.type===`enum`&&e.oneOf&&`values`in e.oneOf?e.oneOf.values.map(e=>`'${e}'`).join(` | `):e.type??`unknown`,e.array&&(n+=`[]`),`${e.name}${t}: ${n}`}).join(`, `)} }`:`object`;break;default:t=`unknown`}return e.array&&(t+=`[]`),t},buildVariantsSchema=e=>{let t=e.map(e=>buildZodSchemaFromInputType(e,{strict:!0})),n=e.map(describeVariantShape).join(` | `);return l.any().check(e=>{for(let n of t)if(n.safeParse(e.value).success)return;e.issues.push({code:`custom`,message:`expected one of the following shapes: ${n}`,input:e.value,path:[]})})},buildZodSchemaFromInputType=(e,t)=>{if(e.variants&&e.variants.length>=2)return buildVariantsSchema(e.variants);let n;switch(e.type){case`string`:case`datetime_string`:n=l.string();break;case`number`:n=l.number();break;case`boolean`:n=l.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let n of e.properties){let e=buildZodSchemaFromInputType(n,t);n.description&&(e=e.describe(n.description)),n.required||(e=e.optional()),r[n.name]=e}n=t?.strict?u(r):l.object(r)}else n=l.record(l.string(),l.unknown());break;default:n=l.unknown()}return e.rules&&e.type&&(n=applyInputRules(n,e.rules,e.type)),e.array&&(n=l.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`||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 if(e===`mcp_request`)return{...t};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??[]})))},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(t){if(t instanceof SchemaValidationError||t instanceof MissingScopeDefinitionError||t instanceof InvalidAuthRequirementsError){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))){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++}else if(u.startsWith(`${d}:`)){if(r===e.length-1)return t+1;a=l,o=t,r++}}return o+1},stepLocationField=e=>e.kind===`action`?void 0:`events.setup.${e.phase}`,stepLocationFieldPrefix=e=>e.kind===`action`?``:`events.setup.${e.phase}.`,ownerMarkersFor=e=>e.kind===`action`?[`- actionId: ${e.actionId}`]:[`setup:`,`${e.phase}:`],getErrorLineNumberInSteps=(e,t,n,r,i)=>{let a=i.split(`
6
- `),o=ownerMarkersFor(e),s=0,c=!1,l=1;for(let e=0;e<a.length;e++){let i=a[e].trim();if(s<o.length){i===o[s]&&(s++,l=e+1);continue}if(!c){i===`- stepId: ${t}`&&(c=!0,l=e+1);continue}if(!r&&i.includes(`functionName: ${n}`)||r&&i===`parameters:`)return e+1}return l};var Z=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends Z{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Z{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Z{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Z{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},IncompatibleAuthTypeError=class extends Z{constructor(e,t){super(`INCOMPATIBLE_AUTH_TYPE_ERROR`,e,t),this.name=`IncompatibleAuthTypeError`}},InvalidEventOutputError=class extends Z{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}},PolicyDeniedError=class extends Z{constructor(e,t,n){super(`POLICY_DENIED_ERROR`,e,n),this.name=`PolicyDeniedError`,this.level=t.level,this.policyIds=t.policyIds}};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!!oe(`{{ ${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 nt={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=nt[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())}function hasExceededMaxIterations(e,t=1e4){return e>=t}function hasExceededTimeout(e,t,n=3e5){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,t,n={}){let i=n.maxIterations??1e4,a=n.timeoutMs??3e5,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({extractedCheckpoints:e}){return e[e.length-1]??null}}}function formatIncrementalWatermark(t,n){switch(n){case`iso8601`:return t.toISOString();case`unix_seconds`:return String(e(t,`seconds`));case`unix_millis`:return String(e(t,`ms`))}}function createTimeFilterStrategy(e){let laterOf=(t,n)=>{if(e.format!==`iso8601`)return Number(t)>Number(n)?t:n;let r=Date.parse(t),i=Date.parse(n),a=!Number.isNaN(r),o=!Number.isNaN(i);return a&&o?r>i?t:n:a===o?t>n?t:n:a?t:n};return{config:e,applyToInputs({baseInputs:t,checkpoint:n}){return n?.kind===`timestamp`?buildInputs(t,e.iterator.in,{[e.iterator.key]:n.value}):t},extractFromPage({items:t}){let r=e.response?.updatedAtPath;if(!r)return null;let i=null;for(let e of t){let t=n(e,r);if(t==null)continue;let a=String(t);a!==``&&(i=i===null?a:laterOf(i,a))}return i===null?null:{kind:`timestamp`,value:i}},finalizeCheckpoint({runStartTime:t,extractedCheckpoints:n}){let r=null;for(let e of n)e.kind===`timestamp`&&(r=r===null?e.value:laterOf(r,e.value));if(r!==null)return{kind:`timestamp`,value:r};let i=e.safetyBufferSeconds??60,a=t.getTime()-i*1e3;return{kind:`timestamp`,value:formatIncrementalWatermark(new Date(a),e.format)}}}}const rt={time_filter:createTimeFilterStrategy,delta_token:createDeltaTokenStrategy};function createIncrementalStrategy(e){let t=rt[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}:{}}}),buildActionAuthentication=(e,t)=>{if(i(e.authRequirements))return t;let n=e.authRequirements;return t.filter(e=>e.key in n).map(e=>({...e,required_scopes:n[e.key]}))},buildActionMeta=(e,t,n)=>{let r=buildActionAuthentication(e,t);return{id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,authentication:r,...e.tags?{tags:e.tags}:{},...c(e.requiredScopes)&&i(e.authRequirements)?{required_scopes:e.requiredScopes}:{},...e.releaseStage?{release_stage:e.releaseStage}:{},...e.effects?.length?{effects:e.effects}:{},...e.annotations&&Object.keys(e.annotations).length?{annotations:e.annotations}:{},...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})),getEventGuidesMeta=(e,t)=>{if(!t?.includes(`event_guides`))return;let n=e.events?.guides;if(n?.setup)return{setup:n.setup}},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),s=getEventGuidesMeta(e,t);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,event_guides:s}},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),o=getEventGuidesMeta(e,t);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,event_guides:o}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),credentialOf=e=>e??`unknown`,categoryOf=e=>e.categories?.[0]?.toLowerCase()??`unknown`;let Q;const it={warn:(e,t)=>Q?.warning({message:e,context:t}),error:(e,t)=>Q?.error({code:`PolicyEvaluationError`,message:e,context:t})};let at;const sharedPolicyEvaluator=e=>(Q??=e,at??=ue(it)),decideInvokeTool=async e=>{if(e.policy.levels.length===0)return{decision:`allow`};let t=e.evaluator??sharedPolicyEvaluator(e.logger),n=await de(t,{organizationId:e.account.organizationId,levels:e.policy.levels}),r=await le(t,async()=>n).decide({principal:e.policy.principal,tool:{id:e.action.id,name:e.policy.toolName??e.action.id,labels:[]},account:{id:e.account.secureId,connector:e.account.providerKey,category:categoryOf(e.action)},args:e.args,context:{orgId:e.account.organizationId,projectId:null,sessionId:e.sessionId??``,credential:credentialOf(e.authType),...e.policy.client?{client:e.policy.client}:{}}});return r.decision===`deny`&&r.deniedBy?{decision:`deny`,level:r.deniedBy.level,policyIds:r.deniedBy.policyIds}:{decision:`allow`}},evaluateExternalAccountIdExtractorByConnector=(e,t)=>A(e,t),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=w.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===C.MAP_FIELDS?{[C.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=O(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=k(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)=>M(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return k({key:e,value:t},{version:_})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>s(t)&&t.length>0&&!M(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=k({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=N({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=w.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),captureErrorDetails=(e,t)=>{e.errorStatusCode??=t?.statusCode??500,!c(e.errorMessage)&&typeof t?.message==`string`&&(e.errorMessage=t.message),e.errorData??=t?.data,e.errorRaw??=t?.raw},getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],buildConditionContext=e=>{let t=E(e,{includeCredentials:!0});return`action`in e&&(t.action=e.action),`nextCursor`in e&&(t.nextCursor=e.nextCursor),`scopes`in e&&(t.scopes=e.scopes),t},resolveConditionOutcome=(e,t)=>{if(!e.condition)return{kind:`run`};let{errored:n,value:r,error:i}=se(e.condition,buildConditionContext(t));if(!n)return r?{kind:`run`}:{kind:`skip`,message:`Step skipped due to condition not met.`};let a=e.onConditionError??!1;return a===`break`?{kind:`fail`,message:`Step condition failed to evaluate.`,error:i}:a===!0?{kind:`run`,message:`Step ran due to a condition evaluation error.`}:{kind:`skip`,message:`Step skipped due to a condition evaluation error.`}},stampConditionNote=(e,t,n)=>{let r=e.steps?.[t];return!r||r.successful===!1||c(r.message)?e:{...e,steps:{...e.steps,[t]:{...r,message:n}}}},buildStepParamsForFunction=(e,t,n)=>{let r=T[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,captureErrorDetails(a,r.output)),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=new Date,l=n[e];if(i.hasFatalError)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`,startTime:s,endTime:s});let u=resolveConditionOutcome(l,r);if(u.kind===`skip`)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:u.message,startTime:s,endTime:s});if(u.kind===`fail`){let n=u.error??u.message;return i.errorStatusCode??=500,c(i.errorMessage)||(i.errorMessage=u.message,i.errorData??={error:n}),i.hasFatalError=!0,await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:u.message,errors:[{message:n}],startTime:s,endTime:s})}let d=P(l)?await executeForeachStep(e,t,l,r,i,a,o):await executeSimpleStep(e,t,l,r,i,a,o);return u.message?stampConditionNote(d,e,u.message):d},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,i.errorMessage=`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`,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=R(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,captureErrorDetails(i,g.output),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,i.errorMessage=`Stream output is not supported in foreach steps.`,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,l=a?void 0:n.errorMessage??e.action?.responses?.errors?.[s]?.description??re?.[s]??`Error while processing the request`,u=a?{}:{...n.errorData===void 0?{}:{data:n.errorData},...n.errorRaw===void 0?{}:{raw:n.errorRaw}};if(t.streamOutput)return{...t,response:{successful:a,statusCode:s,message:l,...u}};let d=c(i)&&o(i.result)?{next:i.next,...i.result}:r;return{...t,outputs:d,response:{successful:a,statusCode:s,message:l,...u}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=w.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=E(t);return o(e)?ce(e,n):R(e,n)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,errors:s,startTime:c,endTime:l})=>({...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:s??i?.errors,output:i?.output,skipped:a,message:o,statistics:{startTime:c,endTime:l}}}}),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,sourceId:u?.sourceId,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=Object.values(t.steps??{}).some(e=>e?.successful===!1||pe(e?.errors)),y={success:t.response?.successful??!1,statusCode:t.response?.statusCode,body:t.outputs??void 0,message:t.response?.message,hasStepErrors:v,endTime:t.statistics?.endTime,defenderContext:t.defenderMetadata};try{await m.recordAction(_,y,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:y.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})}},ot={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}}},isEnabledTestAction=(e,t,n)=>i(n)||e.isInline||n.has(t.id),validateAuthTypeCompatibility=(e,t,n)=>{if(!Object.prototype.hasOwnProperty.call(e,`authRequirements`)||i(t))return;let r=e.authRequirements;if(!i(r)&&!(t in r)){let i=Object.keys(r).join(`, `);throw new IncompatibleAuthTypeError(n,`Action '${e.id}' is not compatible with authentication type '${t}'. Compatible types: ${i}`)}},runAction=async e=>{let{pathParams:t={},queryParams:n={},body:r={},headers:a={},decideInvokeToolFn:o=decideInvokeTool,parseConnector:l=parseYamlConnector,parseActionInputsFn:u=parseActionInputs,createBlockContextFn:d=createBlockContext,createBlockFn:f=createBlock,runStepActionFn:p=runStepAction,getActionFromUrlFn:m=getActionFromUrl,getActionForRefreshAuthenticationFn:h=getActionForRefreshAuthentication,getTestActionsFn:g=getTestActions,applyDefenderFn:_=applyDefender,mode:v,account:y,connector:b,getHttpClient:x,getOlapClient:S,settings:C,source:w,policy:T,logger:E,category:D,...O}=e,k=y.authConfigKey,A=y.environment??`production`,ee=y.secureId,j=y.projectSecureId,te=y.organizationId,ne=y.credentials,M=y.originOwnerId,N=y.originOwnerName,P=d({category:D??`action`,connectorKey:y.providerKey,connectorVersion:y.providerVersion,connectorOwner:y.connectorOwner,connectorProfileId:y.connectorProfileId,authConfigKey:k,environment:A,accountSecureId:ee,projectSecureId:j,organizationId:te,originOwnerId:M,originOwnerName:N,sourceType:w?.sourceType,authType:w?.authType,authId:w?.authId,sessionId:w?.sessionId,agentId:w?.agentId,userAgent:w?.userAgent,ipAddress:w?.ipAddress,transportType:w?.transportType,streamType:w?.streamType,flowType:ot[v],sourceId:w?.sourceId,sourceValue:w?.sourceValue}),F=new Date,I;try{I=s(b)?l(b):b}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:ne,settings:C,logger:E,getHttpClient:x,getOlapClient:S};if(v===`action_id`){let{actionId:s}=O,c=findActionByActionId(I,s);if(i(c))throw new MissingActionError(P,`No matching action found`);validateAuthTypeCompatibility(c,k,P);let l=await executeAction({action:c,blockContext:P,account:y,policy:T,logger:E,decideInvokeToolFn:o,queryParams:n,pathParams:t,body:r,headers:a,parseActionInputsFn:u,createBlockFn:f,createBlockParams:L,runStepActionFn:p});return l=await applyDefenderToBlock(l,_,C,E),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c,resultBlock:l,...recordingFieldsFromParams(e)}),l}else if(v===`test_actions`){let{enabledActions:t}=O,n=g(I,k,A);if(i(n)||n.length===0)return await createSuccessBlock(f,L);P.actionType=`test`;let r=c(t)&&!t.allEnabled?new Set(t.actionIds):void 0,a=0;for(let t of n){let{action:n}=t;if(s(n))throw new MissingActionError(P,`Test action "${n}" does not resolve to an action`);if(!isEnabledTestAction(t,n,r))continue;let i=new Date,o=await f({...L,inputs:void 0,action:n,nextCursor:void 0});if(!(!c(t.condition)||oe(t.condition,o)))continue;a++;let l=await p({block:o});if(l=await applyDefenderToBlock(l,_,C,E),c(l?.response?.successful)&&l.response.successful){l.statistics={startTime:i,endTime:new Date},await recordActionResult({action:n,resultBlock:l,...recordingFieldsFromParams(e)});let t=await createSuccessBlock(f,L);return t.statistics={startTime:F,endTime:new Date},t}E?.error({code:`TestActionFailed`,message:`Test action "${n.id}" failed with error: ${l?.response?.message}`}),l.statistics={startTime:i,endTime:new Date},await recordActionResult({action:n,resultBlock:l,...recordingFieldsFromParams(e)})}if(a>0){let e=await createErrorBlock(f,L);return e.statistics={startTime:F,endTime:new Date},e}let o=await createSuccessBlock(f,L);return o.statistics={startTime:F,endTime:new Date},o}else if(v===`refresh_authentication`){let{redirectUri:t}=O;P.redirectUri=t;let s=h(I,k,A);if(i(s))throw new MissingActionError(P,`No matching action found`);let c=await executeAction({action:s.action,blockContext:P,account:y,policy:T,logger:E,decideInvokeToolFn:o,queryParams:n,pathParams:s.params,body:r,headers:a,parseActionInputsFn:u,createBlockFn:f,createBlockParams:L,runStepActionFn:p});return c=await applyDefenderToBlock(c,_,C,E),c.statistics={startTime:F,endTime:new Date},await recordActionResult({action:s.action,resultBlock:c,...recordingFieldsFromParams(e)}),c}else if(v===`path`){let{path:t,method:s}=O,c=m(I,t,s);if(i(c))throw new MissingActionError(P,`No matching action found`);validateAuthTypeCompatibility(c.action,k,P);let l=await executeAction({action:c.action,blockContext:P,account:y,policy:T,logger:E,decideInvokeToolFn:o,queryParams:n,pathParams:c.params,body:r,headers:a,parseActionInputsFn:u,createBlockFn:f,createBlockParams:L,runStepActionFn:p});return l=await applyDefenderToBlock(l,_,C,E),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,resultBlock:l,...recordingFieldsFromParams(e)}),l}else return await createErrorBlock(f,L)},executeAction=async e=>{let{action:t,blockContext:n,account:r,policy:i,logger:a,decideInvokeToolFn:o,queryParams:s,pathParams:c,body:l,headers:u,parseActionInputsFn:d,createBlockFn:f,createBlockParams:p,runStepActionFn:m}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let h=processCursor(s,n),g;try{g=d(t,{path:c,query:s,body:l,headers:u})}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 enforceInvokeTool({action:t,blockContext:n,account:r,policy:i,logger:a,decideInvokeToolFn:o}),await m({block:await f({...p,inputs:g,action:t,nextCursor:h})})},enforceInvokeTool=async e=>{let t=e.policy;if(i(t)||e.blockContext.flowType!==`action`)return;let n=await e.decideInvokeToolFn({policy:t,account:e.account,action:e.action,authType:e.blockContext.authType,sessionId:e.blockContext.sessionId,logger:e.logger});if(n.decision===`allow`)return;let r=t.toolName??e.action.id;throw new PolicyDeniedError(e.blockContext,{level:n.level,policyIds:n.policyIds},`Action '${r}' is not permitted by ${n.level} policy`)},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 fe({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,sanitizeContent:r?.defender?.sanitizeContent??!0,enableTier3:r?.defender?.useTier3Classification??!1,defenderMode:r?.defender?.defenderMode??`cascade`,...buildTier2Config(r?.defender)}).defendToolResult(e,n);i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs,tier1Ms:t.tier1Ms,coldLoad:t.coldLoad,tier2Stats:t.tier2Stats,phaseTimings:t.phaseTimings}});let a=t.tier3,o=a!==void 0&&(a.decision===`block`||a.decision===`allow`)?{tier3Decision:a.decision,tier3LatencyMs:a.latencyMs,...a.usage&&{tier3PromptTokens:a.usage.promptTokens,tier3CompletionTokens:a.usage.completionTokens}}:{};return{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,tier3:t.tier3,latencyMs:t.latencyMs,...o}},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,getWebhookRemoteId:u,findActionFn:d=findEventActionByActionId,parseActionInputsFn:f=parseActionInputs,createBlockContextFn:p=createBlockContext,createBlockFn:m=createBlock,runStepActionFn:h=runStepAction})=>{let g=p({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`}),_=d(n,e);if(i(_))throw new MissingActionError(g,`No matching event action found`);g.actionType=`event`,g.schema=_.schema?.key,g.webhookRemoteId=await u?.();let v=f(_,{body:r,headers:a}),y=new Date,b=await m({connector:n,context:g,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:v,action:_,nextCursor:void 0}),x={mode:`event`,organizationId:t.organizationId,body:r,headers:a,source:{sourceType:S.Webhook},isBackground:!1,logger:o},C;try{C=await h({block:b})}catch(t){throw o?.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(C.statistics={startTime:y,endTime:new Date},typeof C.outputs?.statusCode!=`number`)throw await recordActionResult({action:_,resultBlock:{...C,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:C,...x}),C},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,enabledActions:s,parseConnector:c=parseYamlConnector,getTestActionsFn:l=getTestActions,createBlockContextFn:u=createBlockContext,createBlockFn:d=createBlock,runStepActionFn:f=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,enabledActions:s,parseConnector:c,getTestActionsFn:l,createBlockContextFn:u,createBlockFn:d,runStepActionFn:f}))?.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 x=e.categories?.[0];if(i(x))throw Error(`Connector category is required for webhook setup phase execution (connector '${d}')`);let C=phaseAsAction(t,n),w=y({category:x,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:S.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{Z as ConnectSDKError,be as DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS,B as DELTA_TOKEN_INCREMENTAL_SCHEMA,H as INCREMENTAL_SCHEMA,IncompatibleAuthTypeError,InvalidActionInputsError,InvalidEventOutputError,PolicyDeniedError,V as TIME_FILTER_INCREMENTAL_SCHEMA,applyReleaseStageToConnector,computeCredentialsVerifiedByAuth,createBlock,createCursorPaginator,createDeltaTokenStrategy,createIncrementalStrategy,createOffsetPaginator,createPagePaginator,createPaginator,createTimeFilterStrategy,decideInvokeTool,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,extractItems,filterActionsByAuthType,formatValidationErrorResponse,getActionFromUrl,getActionMeta,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,hasCatastrophicBacktrackingRisk,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},X=[{key:`production`,name:`Production`}],finishDescription=e=>{let t=e.length>200?e.slice(0,199).trimEnd():e;return t.endsWith(`.`)?t:`${t}.`},buildDescription=(e,t)=>{let n=t.server?.description?.replace(/\s+/g,` `).trim();if(n)return finishDescription(n.toLowerCase().startsWith(e.toLowerCase())?n:`${e} is ${n.charAt(0).toLowerCase()}${n.slice(1)}`);let r=t.resource?.name??t.server?.title??t.server?.name;return r&&r!==e?`${e} is a remote MCP server integration exposing the tools of ${r} through the Model Context Protocol.`:`${e} is a remote MCP server integration exposing its tools through the Model Context Protocol.`},deriveConnectorKey=e=>{let t=e.toLowerCase().replace(/[^a-z0-9]/g,``);return t===``?void 0:`mcp_${t}`},buildAuthenticationEntry=(e,t,n)=>{if(!n.requiresAuthorization)return{mcp:{type:`mcp`,label:`MCP Server`,support:{description:`Open MCP server. No credentials required to connect.`},authorization:{type:`none`},environments:X}};if(n.oauth){let r=n.oauth.dynamicRegistration===!0?{}:{setupFields:[{key:`clientId`,label:`Client ID`,type:`text`,required:!0,secret:!1,description:`OAuth client ID of the app registered with the ${e} MCP server`},{key:`clientSecret`,label:`Client Secret`,type:`password`,required:!1,secret:!0,description:`OAuth client secret of the app registered with the ${e} MCP server. Leave empty for public clients (PKCE-only)`}]};return{mcp_oauth:{type:`mcp`,label:`OAuth`,support:{description:`Authorize through the MCP server. Endpoints and client registration are discovered at connect time.`},authorizationFlow:{serverUrl:t,...n.oauth.scopes?.length?{scopes:n.oauth.scopes}:{}},authorization:{type:`bearer`,token:`$.credentials.accessToken`},...r,environments:X}}}return{mcp:{type:`mcp`,label:`Access Token`,support:{description:`Uses a static access token issued by the MCP server.`},authorization:{type:`bearer`,token:`$.credentials.accessToken`},configFields:[{key:`accessToken`,label:`Access Token`,type:`password`,required:!0,secret:!0,description:`Access token for the ${e} MCP server`}],environments:X}}},generateMcpConnector=async({serverUrl:e,title:t},n=y)=>{let r=deriveConnectorKey(t);if(i(r))throw Error(`The connector title must contain at least one alphanumeric character`);let a=await n(e),o=a.server?.instructions,s=a.server?.iconUrl??`https://stackone-logos.com/api/stackone/filled/png`,c=a.resource?.documentationUrl,l=buildDescription(t,a),u=x({StackOne:`1.0.0`,info:{title:t,key:r,version:`1.0.0`,assets:{icon:s},description:l},baseUrl:e,releaseStage:`ga`,...c?{resources:c}:{},...o?{mcp:{instructions:o.slice(0,J)}}:{},authentication:[buildAuthenticationEntry(t,e,a)]}),d=validateYamlConnector(u);if(!d.success||i(d.connector)){let e=d.errors?.map(e=>`${e.field??`unknown`}: ${e.message}`).join(`; `);throw Error(`The generated MCP connector failed validation: ${e}`)}return{yaml:u,connector:d.connector}},isMcpConnector=e=>{let t=Object.values(e.authentication??{}).flatMap(e=>Object.values(e??{}));return t.length>0&&t.every(e=>e?.type===`mcp`)},lt=[`title`,`readOnlyHint`,`destructiveHint`,`idempotentHint`,`openWorldHint`],deriveActionId=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``),humanizeToolName=e=>{let t=e.replace(/[_-]+/g,` `).trim();return t.charAt(0).toUpperCase()+t.slice(1)},mapScalarType=e=>e===`number`||e===`integer`?`number`:e===`boolean`?`boolean`:`string`,mapInputType=e=>{if(e.enum?.length)return{type:`enum`,oneOf:{values:e.enum.map(String)}};let t=Array.isArray(e.type)?e.type.find(e=>e!==`null`):e.type;return t===`array`?{array:!0,...mapInputType(e.items??{})}:t===`object`?{type:`object`,...e.properties?{properties:buildInputFields(e,{nested:!0})}:{}}:{type:mapScalarType(t)}},buildInputFields=(e,{nested:t})=>{let n=e.properties;if(i(n))return;let r=new Set(e.required??[]);return Object.entries(n).map(([e,n])=>({name:e,description:n.description??`The ${e} argument of the tool`,required:r.has(e),...t?{}:{in:`body`},...mapInputType(n)}))},buildToolAnnotations=e=>{let t=e.annotations;if(i(t))return{};let n=lt.reduce((e,n)=>(t[n]!==void 0&&(e[n]=t[n]),e),{});return{effects:t.readOnlyHint===!0?[`read`]:t.destructiveHint===!0?[`delete`]:[`execute`],...Object.keys(n).length?{annotations:n}:{}}},buildToolAction=e=>{let t=deriveActionId(e.name);if(t===``)throw Error(`Cannot derive an action id from the MCP tool name '${e.name}': it has no alphanumeric characters`);let n=buildInputFields(e.inputSchema??{},{nested:!1}),r=n?.map(e=>({name:e.name,value:`$.inputs.${e.name}`,...e.required?{}:{condition:`{{present(inputs.${e.name})}}`}}));return{actionId:t,categories:[`mcp`],actionType:`custom`,label:e.title??e.annotations?.title??humanizeToolName(e.name),description:e.description??`Call the ${e.name} tool on the MCP server.`,...buildToolAnnotations(e),...n?{inputs:n}:{},steps:[{stepId:`call_tool`,description:`Call the ${e.name} tool on the MCP server`,stepFunction:{functionName:`mcp_request`,parameters:{toolName:e.name,...r?.length?{args:r}:{}}}}],result:{data:`$.steps.call_tool.output.data`}}},addMcpToolActions=(e,t)=>{let n=b(e);if(i(n)||typeof n!=`object`)throw Error(`The provided yaml is not a connector document`);let r=Array.isArray(n.actions)?n.actions:[],a=t.map(buildToolAction),o=[...r.map(e=>a.find(t=>t.actionId===e.actionId)??e),...a.filter(e=>!r.some(t=>t.actionId===e.actionId))],s=x({...n,actions:o}),c=validateYamlConnector(s);if(!c.success||i(c.connector)){let e=c.errors?.map(e=>`${e.field??`unknown`}: ${e.message}`).join(`; `);throw Error(`The completed MCP connector failed validation: ${e}`)}return{yaml:s,connector:c.connector}},listAllTools=async(e,t)=>{let n=await e.listTools(t?{cursor:t}:void 0);return n.nextCursor?[...n.tools,...await listAllTools(e,n.nextCursor)]:n.tools},buildMcpClient=e=>new _(e),extractHostname=e=>{try{return new URL(String(e)).hostname}catch{return}},applyServerInfo=(e,t)=>{let n=b(e);if(i(t)||i(n)||typeof n!=`object`)return e;let r=n.info??{},a=typeof r.title==`string`?r.title:void 0,o=t.title??t.name,s=extractHostname(n.baseUrl),c=!!(o&&a&&s&&a.toLowerCase()===s),l=c?o:a,u=(t.description||c)&&l?{description:buildDescription(l,{server:t})}:{},d=t.iconUrl&&r.assets?.icon===`https://stackone-logos.com/api/stackone/filled/png`?{assets:{...r.assets,icon:t.iconUrl}}:{},f=t.instructions?{mcp:{...n.mcp??{},instructions:t.instructions.slice(0,J)}}:{};return x({...n,info:{...r,...c?{title:l}:{},...u,...d},...f})},completeMcpConnector=async(e,{headers:t,timeout:n}={},r=buildMcpClient)=>{let i=b(e)?.baseUrl;if(typeof i!=`string`||i===``)throw Error(`The connector yaml has no baseUrl pointing at the MCP server`);let a=r({serverUrl:i,headers:t,timeout:n});try{let t=await listAllTools(a);return addMcpToolActions(applyServerInfo(e,await a.getServerInfo().catch(()=>void 0)),t)}finally{await a.close().catch(()=>void 0)}},getActionForRefreshAuthentication=(e,t,n)=>{let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;return c(r)?{action:r,params:{}}:void 0},supportsRefreshAuthentication=(e,t,n)=>c(getActionForRefreshAuthentication(e,t,n)),ut=[`oauth2`,`mcp`],getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization,a=r?.type;if(!(!a||!ut.includes(a)))return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization,a=r?.type;if(!(!a||!ut.includes(a)))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)};var Z=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends Z{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Z{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Z{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Z{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},IncompatibleAuthTypeError=class extends Z{constructor(e,t){super(`INCOMPATIBLE_AUTH_TYPE_ERROR`,e,t),this.name=`IncompatibleAuthTypeError`}},InvalidEventOutputError=class extends Z{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}},PolicyDeniedError=class extends Z{constructor(e,t,n){super(`POLICY_DENIED_ERROR`,e,n),this.name=`PolicyDeniedError`,this.level=t.level,this.policyIds=t.policyIds}};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!!se(`{{ ${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 dt={cursor:createCursorPaginator,offset:createOffsetPaginator,page:createPagePaginator};function createPaginator(e,t={}){let n=dt[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())}function hasExceededMaxIterations(e,t=1e4){return e>=t}function hasExceededTimeout(e,t,n=3e5){return t-e>=n}function isDuplicatePage(e,t){return t===null?!1:e===t}async function paginate(e,t,n={}){let i=n.maxIterations??1e4,a=n.timeoutMs??3e5,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({extractedCheckpoints:e}){return e[e.length-1]??null}}}function formatIncrementalWatermark(t,n){switch(n){case`iso8601`:return t.toISOString();case`unix_seconds`:return String(e(t,`seconds`));case`unix_millis`:return String(e(t,`ms`))}}function createTimeFilterStrategy(e){let laterOf=(t,n)=>{if(e.format!==`iso8601`)return Number(t)>Number(n)?t:n;let r=Date.parse(t),i=Date.parse(n),a=!Number.isNaN(r),o=!Number.isNaN(i);return a&&o?r>i?t:n:a===o?t>n?t:n:a?t:n};return{config:e,applyToInputs({baseInputs:t,checkpoint:n}){return n?.kind===`timestamp`?buildInputs(t,e.iterator.in,{[e.iterator.key]:n.value}):t},extractFromPage({items:t}){let r=e.response?.updatedAtPath;if(!r)return null;let i=null;for(let e of t){let t=n(e,r);if(t==null)continue;let a=String(t);a!==``&&(i=i===null?a:laterOf(i,a))}return i===null?null:{kind:`timestamp`,value:i}},finalizeCheckpoint({runStartTime:t,extractedCheckpoints:n}){let r=null;for(let e of n)e.kind===`timestamp`&&(r=r===null?e.value:laterOf(r,e.value));if(r!==null)return{kind:`timestamp`,value:r};let i=e.safetyBufferSeconds??60,a=t.getTime()-i*1e3;return{kind:`timestamp`,value:formatIncrementalWatermark(new Date(a),e.format)}}}}const ft={time_filter:createTimeFilterStrategy,delta_token:createDeltaTokenStrategy};function createIncrementalStrategy(e){let t=ft[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:r?.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:n?.type??`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),buildActionAuthentication=(e,t)=>{if(i(e.authRequirements))return t;let n=e.authRequirements;return t.filter(e=>e.key in n).map(e=>({...e,required_scopes:n[e.key]}))},buildActionMeta=(e,t,n)=>{let r=buildActionAuthentication(e,t);return{id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,authentication:r,...e.tags?{tags:e.tags}:{},...c(e.requiredScopes)&&i(e.authRequirements)?{required_scopes:e.requiredScopes}:{},...e.releaseStage?{release_stage:e.releaseStage}:{},...e.effects?.length?{effects:e.effects}:{},...e.annotations&&Object.keys(e.annotations).length?{annotations:e.annotations}:{},...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})),getEventGuidesMeta=(e,t)=>{if(!t?.includes(`event_guides`))return;let n=e.events?.guides;if(n?.setup)return{setup:n.setup}},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),s=getEventGuidesMeta(e,t);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,event_guides:s}},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),o=getEventGuidesMeta(e,t);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,event_guides:o}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),credentialOf=e=>e??`unknown`,categoryOf=e=>e.categories?.[0]?.toLowerCase()??`unknown`;let Q;const pt={warn:(e,t)=>Q?.warning({message:e,context:t}),error:(e,t)=>Q?.error({code:`PolicyEvaluationError`,message:e,context:t})};let mt;const sharedPolicyEvaluator=e=>(Q??=e,mt??=fe(pt)),decideInvokeTool=async e=>{if(e.policy.levels.length===0)return{decision:`allow`};let t=e.evaluator??sharedPolicyEvaluator(e.logger),n=await pe(t,{organizationId:e.account.organizationId,levels:e.policy.levels}),r=await de(t,async()=>n).decide({principal:e.policy.principal,tool:{id:e.action.id,name:e.policy.toolName??e.action.id,labels:[]},account:{id:e.account.secureId,connector:e.account.providerKey,category:categoryOf(e.action)},args:e.args,context:{orgId:e.account.organizationId,projectId:null,sessionId:e.sessionId??``,credential:credentialOf(e.authType),...e.policy.client?{client:e.policy.client}:{}}});return r.decision===`deny`&&r.deniedBy?{decision:`deny`,level:r.deniedBy.level,policyIds:r.deniedBy.policyIds}:{decision:`allow`}},evaluateExternalAccountIdExtractorByConnector=(e,t)=>ne(e,t),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=A.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===k.MAP_FIELDS?{[k.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??C,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=te(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 w&&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??C,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=N(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)=>re(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return N({key:e,value:t},{version:C})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>s(t)&&t.length>0&&!re(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=N({key:e,value:t},{version:C}),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=ie({cursor:r,ignoreStepIndex:s});if(!o(e)||i(a)||(a?.length??0)<=t)return{result:e,next:c(r)&&!l?oe(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=z({cursor:r,stepIndex:s,pageNumber:u+1});return{result:{...e,data:p},next:m?oe(h):null}},runStepAction=async({block:e,buildStepFunction:t=A.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),captureErrorDetails=(e,t)=>{e.errorStatusCode??=t?.statusCode??500,!c(e.errorMessage)&&typeof t?.message==`string`&&(e.errorMessage=t.message),e.errorData??=t?.data,e.errorRaw??=t?.raw},getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],buildConditionContext=e=>{let t=M(e,{includeCredentials:!0});return`action`in e&&(t.action=e.action),`nextCursor`in e&&(t.nextCursor=e.nextCursor),`scopes`in e&&(t.scopes=e.scopes),t},resolveConditionOutcome=(e,t)=>{if(!e.condition)return{kind:`run`};let{errored:n,value:r,error:i}=ce(e.condition,buildConditionContext(t));if(!n)return r?{kind:`run`}:{kind:`skip`,message:`Step skipped due to condition not met.`};let a=e.onConditionError??!1;return a===`break`?{kind:`fail`,message:`Step condition failed to evaluate.`,error:i}:a===!0?{kind:`run`,message:`Step ran due to a condition evaluation error.`}:{kind:`skip`,message:`Step skipped due to a condition evaluation error.`}},stampConditionNote=(e,t,n)=>{let r=e.steps?.[t];return!r||r.successful===!1||c(r.message)?e:{...e,steps:{...e.steps,[t]:{...r,message:n}}}},buildStepParamsForFunction=(e,t,n)=>{let r=j[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,captureErrorDetails(a,r.output)),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=new Date,l=n[e];if(i.hasFatalError)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`,startTime:s,endTime:s});let u=resolveConditionOutcome(l,r);if(u.kind===`skip`)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:u.message,startTime:s,endTime:s});if(u.kind===`fail`){let n=u.error??u.message;return i.errorStatusCode??=500,c(i.errorMessage)||(i.errorMessage=u.message,i.errorData??={error:n}),i.hasFatalError=!0,await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:u.message,errors:[{message:n}],startTime:s,endTime:s})}let d=ae(l)?await executeForeachStep(e,t,l,r,i,a,o):await executeSimpleStep(e,t,l,r,i,a,o);return u.message?stampConditionNote(d,e,u.message):d},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,i.errorMessage=`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`,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?z({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=le(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,captureErrorDetails(i,g.output),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,i.errorMessage=`Stream output is not supported in foreach steps.`,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?z({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,l=a?void 0:n.errorMessage??e.action?.responses?.errors?.[s]?.description??g?.[s]??`Error while processing the request`,u=a?{}:{...n.errorData===void 0?{}:{data:n.errorData},...n.errorRaw===void 0?{}:{raw:n.errorRaw}};if(t.streamOutput)return{...t,response:{successful:a,statusCode:s,message:l,...u}};let d=c(i)&&o(i.result)?{next:i.next,...i.result}:r;return{...t,outputs:d,response:{successful:a,statusCode:s,message:l,...u}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=A.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=M(t);return o(e)?ue(e,n):le(e,n)},addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,errors:s,startTime:c,endTime:l})=>({...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:s??i?.errors,output:i?.output,skipped:a,message:o,statistics:{startTime:c,endTime:l}}}}),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,sourceId:u?.sourceId,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=Object.values(t.steps??{}).some(e=>e?.successful===!1||he(e?.errors)),y={success:t.response?.successful??!1,statusCode:t.response?.statusCode,body:t.outputs??void 0,message:t.response?.message,hasStepErrors:v,endTime:t.statistics?.endTime,defenderContext:t.defenderMetadata};try{await m.recordAction(_,y,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:y.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})}},ht={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}}},isEnabledTestAction=(e,t,n)=>i(n)||e.isInline||n.has(t.id),validateAuthTypeCompatibility=(e,t,n)=>{if(!Object.prototype.hasOwnProperty.call(e,`authRequirements`)||i(t))return;let r=e.authRequirements;if(!i(r)&&!(t in r)){let i=Object.keys(r).join(`, `);throw new IncompatibleAuthTypeError(n,`Action '${e.id}' is not compatible with authentication type '${t}'. Compatible types: ${i}`)}},runAction=async e=>{let{pathParams:t={},queryParams:n={},body:r={},headers:a={},decideInvokeToolFn:o=decideInvokeTool,parseConnector:l=parseYamlConnector,parseActionInputsFn:u=parseActionInputs,createBlockContextFn:d=createBlockContext,createBlockFn:f=createBlock,runStepActionFn:p=runStepAction,getActionFromUrlFn:m=getActionFromUrl,getActionForRefreshAuthenticationFn:h=getActionForRefreshAuthentication,getTestActionsFn:g=getTestActions,applyDefenderFn:_=applyDefender,mode:v,account:y,connector:b,getHttpClient:x,getOlapClient:S,settings:C,source:w,policy:T,logger:E,category:D,...O}=e,k=y.authConfigKey,A=y.environment??`production`,j=y.secureId,M=y.projectSecureId,ee=y.organizationId,te=y.credentials,N=y.originOwnerId,ne=y.originOwnerName,P=d({category:D??`action`,connectorKey:y.providerKey,connectorVersion:y.providerVersion,connectorOwner:y.connectorOwner,connectorProfileId:y.connectorProfileId,authConfigKey:k,environment:A,accountSecureId:j,projectSecureId:M,organizationId:ee,originOwnerId:N,originOwnerName:ne,sourceType:w?.sourceType,authType:w?.authType,authId:w?.authId,sessionId:w?.sessionId,agentId:w?.agentId,userAgent:w?.userAgent,ipAddress:w?.ipAddress,transportType:w?.transportType,streamType:w?.streamType,flowType:ht[v],sourceId:w?.sourceId,sourceValue:w?.sourceValue}),F=new Date,I;try{I=s(b)?l(b):b}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:te,settings:C,logger:E,getHttpClient:x,getOlapClient:S};if(v===`action_id`){let{actionId:s}=O,c=findActionByActionId(I,s);if(i(c))throw new MissingActionError(P,`No matching action found`);validateAuthTypeCompatibility(c,k,P);let l=await executeAction({action:c,blockContext:P,account:y,policy:T,logger:E,decideInvokeToolFn:o,queryParams:n,pathParams:t,body:r,headers:a,parseActionInputsFn:u,createBlockFn:f,createBlockParams:L,runStepActionFn:p});return l=await applyDefenderToBlock(l,_,C,E),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c,resultBlock:l,...recordingFieldsFromParams(e)}),l}else if(v===`test_actions`){let{enabledActions:t}=O,n=g(I,k,A);if(i(n)||n.length===0)return await createSuccessBlock(f,L);P.actionType=`test`;let r=c(t)&&!t.allEnabled?new Set(t.actionIds):void 0,a=0;for(let t of n){let{action:n}=t;if(s(n))throw new MissingActionError(P,`Test action "${n}" does not resolve to an action`);if(!isEnabledTestAction(t,n,r))continue;let i=new Date,o=await f({...L,inputs:void 0,action:n,nextCursor:void 0});if(!(!c(t.condition)||se(t.condition,o)))continue;a++;let l=await p({block:o});if(l=await applyDefenderToBlock(l,_,C,E),c(l?.response?.successful)&&l.response.successful){l.statistics={startTime:i,endTime:new Date},await recordActionResult({action:n,resultBlock:l,...recordingFieldsFromParams(e)});let t=await createSuccessBlock(f,L);return t.statistics={startTime:F,endTime:new Date},t}E?.error({code:`TestActionFailed`,message:`Test action "${n.id}" failed with error: ${l?.response?.message}`}),l.statistics={startTime:i,endTime:new Date},await recordActionResult({action:n,resultBlock:l,...recordingFieldsFromParams(e)})}if(a>0){let e=await createErrorBlock(f,L);return e.statistics={startTime:F,endTime:new Date},e}let o=await createSuccessBlock(f,L);return o.statistics={startTime:F,endTime:new Date},o}else if(v===`refresh_authentication`){let{redirectUri:t}=O;P.redirectUri=t;let s=h(I,k,A);if(i(s))throw new MissingActionError(P,`No matching action found`);let c=await executeAction({action:s.action,blockContext:P,account:y,policy:T,logger:E,decideInvokeToolFn:o,queryParams:n,pathParams:s.params,body:r,headers:a,parseActionInputsFn:u,createBlockFn:f,createBlockParams:L,runStepActionFn:p});return c=await applyDefenderToBlock(c,_,C,E),c.statistics={startTime:F,endTime:new Date},await recordActionResult({action:s.action,resultBlock:c,...recordingFieldsFromParams(e)}),c}else if(v===`path`){let{path:t,method:s}=O,c=m(I,t,s);if(i(c))throw new MissingActionError(P,`No matching action found`);validateAuthTypeCompatibility(c.action,k,P);let l=await executeAction({action:c.action,blockContext:P,account:y,policy:T,logger:E,decideInvokeToolFn:o,queryParams:n,pathParams:c.params,body:r,headers:a,parseActionInputsFn:u,createBlockFn:f,createBlockParams:L,runStepActionFn:p});return l=await applyDefenderToBlock(l,_,C,E),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,resultBlock:l,...recordingFieldsFromParams(e)}),l}else return await createErrorBlock(f,L)},executeAction=async e=>{let{action:t,blockContext:n,account:r,policy:i,logger:a,decideInvokeToolFn:o,queryParams:s,pathParams:c,body:l,headers:u,parseActionInputsFn:d,createBlockFn:f,createBlockParams:p,runStepActionFn:m}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let h=processCursor(s,n),g;try{g=d(t,{path:c,query:s,body:l,headers:u})}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 enforceInvokeTool({action:t,blockContext:n,account:r,policy:i,logger:a,decideInvokeToolFn:o}),await m({block:await f({...p,inputs:g,action:t,nextCursor:h})})},enforceInvokeTool=async e=>{let t=e.policy;if(i(t)||e.blockContext.flowType!==`action`)return;let n=await e.decideInvokeToolFn({policy:t,account:e.account,action:e.action,authType:e.blockContext.authType,sessionId:e.blockContext.sessionId,logger:e.logger});if(n.decision===`allow`)return;let r=t.toolName??e.action.id;throw new PolicyDeniedError(e.blockContext,{level:n.level,policyIds:n.policyIds},`Action '${r}' is not permitted by ${n.level} policy`)},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`?P(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 me({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,sanitizeContent:r?.defender?.sanitizeContent??!0,enableTier3:r?.defender?.useTier3Classification??!1,defenderMode:r?.defender?.defenderMode??`cascade`,...buildTier2Config(r?.defender)}).defendToolResult(e,n);i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs,tier1Ms:t.tier1Ms,coldLoad:t.coldLoad,tier2Stats:t.tier2Stats,phaseTimings:t.phaseTimings}});let a=t.tier3,o=a!==void 0&&(a.decision===`block`||a.decision===`allow`)?{tier3Decision:a.decision,tier3LatencyMs:a.latencyMs,...a.usage&&{tier3PromptTokens:a.usage.promptTokens,tier3CompletionTokens:a.usage.completionTokens}}:{};return{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,tier3:t.tier3,latencyMs:t.latencyMs,...o}},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,getWebhookRemoteId:u,findActionFn:d=findEventActionByActionId,parseActionInputsFn:f=parseActionInputs,createBlockContextFn:p=createBlockContext,createBlockFn:m=createBlock,runStepActionFn:h=runStepAction})=>{let g=p({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`}),_=d(n,e);if(i(_))throw new MissingActionError(g,`No matching event action found`);g.actionType=`event`,g.schema=_.schema?.key,g.webhookRemoteId=await u?.();let v=f(_,{body:r,headers:a}),y=new Date,b=await m({connector:n,context:g,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:v,action:_,nextCursor:void 0}),x={mode:`event`,organizationId:t.organizationId,body:r,headers:a,source:{sourceType:O.Webhook},isBackground:!1,logger:o},S;try{S=await h({block:b})}catch(t){throw o?.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,enabledActions:s,parseConnector:c=parseYamlConnector,getTestActionsFn:l=getTestActions,createBlockContextFn:u=createBlockContext,createBlockFn:d=createBlock,runStepActionFn:f=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,enabledActions:s,parseConnector:c,getTestActionsFn:l,createBlockContextFn:u,createBlockFn:d,runStepActionFn:f}))?.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 x=e.categories?.[0];if(i(x))throw Error(`Connector category is required for webhook setup phase execution (connector '${d}')`);let S=phaseAsAction(t,n),C=y({category:x,connectorKey:d,connectorVersion:f,authConfigKey:p,environment:m,action:S,accountSecureId:o,projectSecureId:s,organizationId:c,originOwnerId:l,originOwnerName:u,flowType:`action`}),w=new Date,T=await v({connector:e,inputs:r,credentials:a,context:C,action:S,logger:h,getHttpClient:g,getOlapClient:_}),E={mode:`webhook_setup`,organizationId:c,body:r,source:{sourceType:O.Internal},isBackground:!0,logger:h},D;try{D=await b({block:T})}catch(e){throw await recordActionResult({action:S,resultBlock:{...T,response:{successful:!1,statusCode:500,message:e.message},statistics:{startTime:w,endTime:new Date}},...E}),e}if(D.statistics={startTime:w,endTime:new Date},i(D.response))throw await recordActionResult({action:S,resultBlock:{...D,response:{successful:!1,statusCode:500,message:`Webhook setup ${n} phase produced no response`}},...E}),Error(`Webhook setup ${n} phase produced no response (connector '${d}')`);return await recordActionResult({action:S,resultBlock:D,...E}),{successful:D.response.successful,statusCode:D.response.statusCode,outputs:D.outputs}};export{Z as ConnectSDKError,Ce as DEFAULT_TIME_FILTER_SAFETY_BUFFER_SECONDS,Se as DELTA_TOKEN_INCREMENTAL_SCHEMA,Te as INCREMENTAL_SCHEMA,IncompatibleAuthTypeError,InvalidActionInputsError,InvalidEventOutputError,PolicyDeniedError,we as TIME_FILTER_INCREMENTAL_SCHEMA,addMcpToolActions,applyReleaseStageToConnector,completeMcpConnector,computeCredentialsVerifiedByAuth,createBlock,createCursorPaginator,createDeltaTokenStrategy,createIncrementalStrategy,createOffsetPaginator,createPagePaginator,createPaginator,createTimeFilterStrategy,decideInvokeTool,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,extractItems,filterActionsByAuthType,formatValidationErrorResponse,generateMcpConnector,getActionFromUrl,getActionMeta,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,hasCatastrophicBacktrackingRisk,isConnectorReleased,isMcpConnector,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.112.0",
3
+ "version": "2.113.0",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",