@stackone/connect-sdk 2.41.0 → 2.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +71 -5
- package/dist/index.d.mts +71 -5
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});let t=require(`@stackone/utils`),n=require(`path-to-regexp`),r=require(`fs`),i=require(`path`),a=require(`@stackone/core`),o=require(`@stackone/transport`),s=require(`yaml`),c=require(`@stackone/defender`),l=require(`@stackone/expressions`);const createBlock=async({connector:e,inputs:n,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u,emitEvent:d})=>{if((0,t.isMissing)(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:n,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:await l(),olapClient:u?await u():void 0,settings:s,logger:c,emitEvent:d}},getActionFromUrl=(e,n,r)=>{let i=r.toUpperCase();if(!e.actions)return;let a=testMatcher(n,i,Object.values(e.actions).filter(e=>(0,t.notMissing)(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})));if(a)return{action:e.actions?.[a.actionId],params:a.params}},removeLeadingAndTrailingSlashes=e=>{let t=e.startsWith(`/`)?e.slice(1):e;return t.endsWith(`/`)?t.slice(0,-1):t},testMatcher=(e,t,r)=>{let i=removeLeadingAndTrailingSlashes(e);for(let e of r)if(e.endpoint?.startsWith(t)){let r=(0,n.match)(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim()))(removeLeadingAndTrailingSlashes(i));if(r!==!1)return{actionId:e.actionId,path:e.endpoint,params:r.params}}},buildActionId=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,resolveActionId=(e,t)=>{let n=`${e}_`;return t.startsWith(n)?t:`${n}${t}`},findActionByActionId=(e,t)=>e.actions?.[resolveActionId(e.key,t)],findEventActionByActionId=(e,t)=>e.
|
|
1
|
+
var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});let t=require(`@stackone/utils`),n=require(`path-to-regexp`),r=require(`fs`),i=require(`path`),a=require(`@stackone/core`),o=require(`@stackone/transport`),s=require(`yaml`),c=require(`@stackone/defender`),l=require(`@stackone/expressions`);const createBlock=async({connector:e,inputs:n,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u,emitEvent:d})=>{if((0,t.isMissing)(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:n,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:await l(),olapClient:u?await u():void 0,settings:s,logger:c,emitEvent:d}},getActionFromUrl=(e,n,r)=>{let i=r.toUpperCase();if(!e.actions)return;let a=testMatcher(n,i,Object.values(e.actions).filter(e=>(0,t.notMissing)(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})));if(a)return{action:e.actions?.[a.actionId],params:a.params}},removeLeadingAndTrailingSlashes=e=>{let t=e.startsWith(`/`)?e.slice(1):e;return t.endsWith(`/`)?t.slice(0,-1):t},testMatcher=(e,t,r)=>{let i=removeLeadingAndTrailingSlashes(e);for(let e of r)if(e.endpoint?.startsWith(t)){let r=(0,n.match)(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim()))(removeLeadingAndTrailingSlashes(i));if(r!==!1)return{actionId:e.actionId,path:e.endpoint,params:r.params}}},buildActionId=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,resolveActionId=(e,t)=>{let n=`${e}_`;return t.startsWith(n)?t:`${n}${t}`},findActionByActionId=(e,t)=>e.actions?.[resolveActionId(e.key,t)],findEventActionByActionId=(e,t)=>e.events?.actions?.[resolveActionId(e.key,t)],loadConnector=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=(0,r.readFileSync)(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
|
|
2
2
|
`),(0,i.dirname)(e)).join(`
|
|
3
3
|
`)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},processYamlObject=(e,t)=>{let n=[];for(let r of e)if(isPartialReference(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=loadPartialFile(i,t).map(t=>` `.repeat(e)+t);n.push(...a)}else n.push(r);return n},isPartialReference=e=>e.includes(`$ref:`),loadPartialFile=(e,t)=>{let n=(0,i.resolve)((0,i.join)(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{return(0,r.readFileSync)(n,`utf8`).split(`
|
|
4
|
-
`).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var u=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends u{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends u{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends u{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends u{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends u{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends u{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},InvalidEventRouterReferenceError=class extends u{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in eventActions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends u{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const d=25,formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),f={key:t.z.string(),label:t.z.string(),required:t.z.boolean().optional().default(!1),secret:t.z.boolean().optional().default(!1),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional()},p=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...f,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...f,type:t.z.literal(`select`),options:(0,t.zStrictObject)({value:t.z.string(),label:t.z.string()}).array()})]),m=(0,t.zStrictObject)({targetFieldKey:t.z.string(),alias:t.z.string().optional(),expression:t.z.string().optional(),values:t.z.unknown().optional(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:t.z.boolean().default(!1),custom:t.z.boolean().default(!1),hidden:t.z.boolean().default(!1),enumMapper:(0,t.zStrictObject)({matcher:t.z.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or((0,t.zStrictObject)({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional(),properties:t.z.lazy(()=>m).array().optional(),requiredScopes:t.z.string().optional()}),h=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),g=(0,t.zStrictObject)({name:t.z.string(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:t.z.boolean(),description:t.z.string(),array:t.z.boolean().optional().default(!1),arrayFormat:t.z.enum([`repeat`,`brackets`,`comma`]).optional(),in:t.z.enum([`body`,`query`,`path`,`headers`]),properties:t.z.lazy(()=>g.omit({in:!0})).array().optional(),oneOf:h.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'`}),_=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),v=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),y=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:v,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),b=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:v.optional(),stepFunctions:v.array().optional(),condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}).refine(e=>e.stepFunction!==void 0&&e.stepFunctions===void 0||e.stepFunction===void 0&&e.stepFunctions!==void 0,{message:`Exactly one of 'stepFunction' or 'stepFunctions' must be provided, not both`}),x=(0,t.zStrictObject)({allowed:t.z.boolean(),indexField:t.z.string().or(t.z.string().array())}),S=(0,t.zStrictObject)({rules:(0,t.zStrictObject)({when:t.z.string(),then:(0,t.zStrictObject)({action:t.z.string(),input:t.z.record(t.z.string(),t.z.unknown()).optional()})}).array()}),C=(0,t.zStrictObject)({actionId:t.z.string(),categories:t.z.string().array(),actionType:t.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),schema:t.z.string().optional(),schemaType:t.z.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:t.z.string().optional(),entrypointHttpMethod:t.z.string().optional(),label:t.z.string(),description:t.z.string(),details:t.z.string().optional(),examples:_.array().optional(),tags:t.z.string().array().optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),resources:t.z.string().optional(),responses:(0,t.zStrictObject)({statusCode:t.z.number(),description:t.z.string()}).array().optional(),requiredScopes:t.z.string().optional(),inputs:g.array().optional(),cursor:(0,t.zStrictObject)({enabled:t.z.boolean(),pageSize:t.z.number()}).optional(),compositeIdentifiers:(0,t.zStrictObject)({enabled:t.z.boolean(),version:t.z.number().optional(),fields:(0,t.zStrictObject)({targetFieldKey:t.z.string(),remote:t.z.string().optional(),components:t.z.string().array()}).array().optional()}).optional(),fieldConfigs:m.array().optional(),steps:t.z.union([y,b]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional(),dataSync:x.optional()}),w=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:C.extend({actionType:t.z.literal(`refresh_token`)})}),T=(0,t.zStrictObject)({mainRatelimit:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),rateLimit:t.z.number()})).optional(),mappedRateLimitErrors:t.z.array((0,t.zStrictObject)({errorStatus:t.z.number(),errorMessage:t.z.string(),errorMessagePath:t.z.string().optional(),retryAfterPath:t.z.string().optional(),retryAfterUnit:t.z.union([t.z.literal(`seconds`),t.z.literal(`milliseconds`),t.z.literal(`date`)]).optional(),retryAfterValue:t.z.number().optional()})).optional()}),E=(0,t.zStrictObject)({mainMaxConcurrency:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),maxConcurrency:t.z.number()})).optional()}),D=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),O=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:D.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),k=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:D.optional(),steps:O.array().optional(),applicableScopes:t.z.string().optional()}),A=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:k.array()}),j=(0,t.zStrictObject)({config:A.optional(),setup:A.optional()}),M=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,requiredScopes:t.z.string().optional(),environments:(0,t.zStrictObject)({key:t.z.string(),name:t.z.string()}).array(),support:(0,t.zStrictObject)({link:t.z.string().optional(),description:t.z.string().optional(),guides:j.optional()}).optional(),configFields:p.array().optional(),setupFields:p.array().optional(),refreshAuthentication:w.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(C),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),N=M.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),P=M.extend({type:t.z.literal(`custom`)}),F=M.extend({type:t.z.literal(`oidc`)}),I=t.z.discriminatedUnion(`type`,[N,P,F]),L=(0,t.zStrictObject)({StackOne:t.z.string(),info:(0,t.zStrictObject)({title:t.z.string(),version:t.z.string(),key:t.z.string(),assets:(0,t.zStrictObject)({icon:t.z.string()}),description:t.z.string(),details:t.z.string().optional()}),resources:t.z.string().optional(),baseUrl:t.z.string(),scopeDefinitions:t.z.record(t.z.string(),(0,t.zStrictObject)({description:t.z.string(),includes:t.z.string().optional()})).optional(),authentication:t.z.record(t.z.string(),I).array().optional(),actions:C.array().optional(),eventActions:C.extend({actionType:t.z.literal(`event`)}).array().optional(),eventRouter:S.optional(),rateLimit:T.optional(),concurrency:E.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),R=`https://docs.stackone.com`,toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,n,r)=>{if((0,t.isMissing)(r))return;if((0,t.notMissing)(r.link))return r;let i=r.guides?.config?.sections,a=toKebabCase(n);return(0,t.notMissing)(i)&&i.length>0&&a!==``?{...r,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:r};function parseYamlConnector(e){try{let n=parseWithSchemaException(L,(0,s.parse)(e)),r=parseScopeDefinitions(n.scopeDefinitions),i={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,details:n.info.details,resources:n.resources,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage,forkedFrom:n.forkedFrom,scopeDefinitions:r},a=buildAuthenticationFromYaml(n),o={baseUrl:n.baseUrl,authentication:stripAuthenticationSetup(a)},c=buildActionsFromYaml(n,o);i.actions=c,hydrateTestActions(n,n.info.key,a,c,o),i.authentication=a,(0,t.notMissing)(c)&&(i.categories=getConnectorCategoriesFromActions(Object.values(c)));let l=buildEventActionsFromYaml(n,o);if((0,t.notMissing)(l)&&(i.eventActions=l),(0,t.notMissing)(n.eventRouter)){let e=n.eventRouter,t=Object.keys(i.eventActions??{}),r=n.info.key,a=e.rules.map(e=>e.then.action);for(let e of a){let n=e.startsWith(`${r}_`)?e:`${r}_${e}`;if(!t.includes(n))throw new InvalidEventRouterReferenceError(e)}i.eventRouter=e}return i}catch(e){if(e instanceof u)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,n,r,i,a)=>{if(!r||!i)return;let o=0;for(let s of Object.values(r)){for(let r of Object.values(s))r.testActions=r.testActions?.map((r,s)=>{if((0,t.notMissing)(r.action))if(typeof r.action==`string`){let e=buildActionId(n,r.action),t=Object.values(i).find(t=>t.id===e);if(t)return{...r,action:t}}else{let t=parseAction(e,[`authentication`,o,`testActions`,s],buildActionId(n,r.action.actionId),r.action,a);return{...r,action:t}}return r});o++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},parseScopesString=e=>(0,t.notMissing)(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,n,r)=>{if((0,t.isMissing)(e))return e;let i=e.guides;if((0,t.isMissing)(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,n,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,n,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},buildAuthenticationFromYaml=e=>{let n={},r=new Set(Object.keys(e.scopeDefinitions||{})),i=[],a=e.info.key;for(let[o,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);n[c]=s[c].environments.reduce((n,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{r.has(e)||i.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,o],keys:[`requiredScopes`]})});let v=(0,t.notMissing)(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,o,`refreshAuthentication`,`action`],buildActionId(a,p.action.actionId),p.action)}:void 0,y=(0,t.notMissing)(g.support)?parseSupportGuides(g.support,r,[`authentication`,o,c,`support`]):void 0,b=(0,t.notMissing)(y)?buildSupport(a,g.label,y):void 0;return n[u]={...g,...(0,t.notMissing)(b)?{support:b}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},n},{})}if(i.length>0)throw new MissingScopeDefinitionError(i);return n},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||(0,t.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>((0,o.isSuccessStatusCode)(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),buildEventActionsFromYaml=(e,t)=>e.eventActions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`eventActions`,i],a,r,t,void 0),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!(0,a.isValidEnumRef)(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,n,r)=>{if(!n||n.length===0)return;let i={};for(let e of r){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),i[e.name]=t}let a=t.z.object(i).strict();for(let t=0;t<n.length;t++){let{exampleDescription:r,...i}=n[t],o=a.safeParse(i);if(!o.success){let n=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,t,n)}}},parseAction=(e,n,r,i,a,o)=>{let s=inferEntrypointUrl(i),c=buildActionResponses(i),l=buildCursorConfig(i),u=i.inputs||[];l.enabled&&(u?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),u?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(r,u),validateExamplesMatchInputs(r,i.examples,u);let d=getEntrypointHttpMethod(i),f=new Set(Object.keys(e.scopeDefinitions||{})),p=[],m=parseScopesString(i.requiredScopes);if(Object.values(m??[]).forEach(e=>{f.has(e)||p.push({message:`Scope '${e}' included in action '${i.actionId}' is not defined.`,path:n,keys:[`requiredScopes`]})}),p.length>0)throw new MissingScopeDefinitionError(p);if(i.dataSync?.allowed===!0&&(0,t.isMissing)(i.schema))throw new SchemaValidationError([{message:`The 'schema' field is required when 'dataSync.allowed' is true.`,path:[...n,`dataSync`],keys:[`allowed`]}]);return{id:r,categories:i.categories,label:i.label,description:i.description,details:i.details,examples:i.examples,actionType:i.actionType,schemaType:i.schemaType??`native`,entrypointUrl:i.entrypointUrl??s,entrypointHttpMethod:d,endpoint:o,tags:i.tags,releaseStage:i.releaseStage,resources:i.resources,responses:c,cursor:l,compositeIdentifiers:parseCompositeIdentifiersConfig(i),requiredScopes:m,inputs:u,steps:i.steps.reduce((t,r)=>{let parseStepFunctionMeta=t=>{let{customErrors:r,...o}=t.parameters??{},s=parseFieldConfigs(e,n,t.functionName===`map_fields`||t.functionName===`typecast`?o.fields??i.fieldConfigs:void 0);return{functionName:t.functionName,version:t.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:t.functionName,baseRequestParams:a,customErrors:r}),...s??{},...o}}},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError};if(`iterator`in r&&r.iterator){if(`stepFunction`in r&&r.stepFunction){let e={...o,iterator:r.iterator,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),t[r.stepId]=e}else if(`stepFunctions`in r&&r.stepFunctions){let e={...o,iterator:r.iterator,stepFunctions:r.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(i.actionId,e),t[r.stepId]=e}}else if(`stepFunction`in r&&r.stepFunction){let e={...o,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),t[r.stepId]=e}return t},{}),result:i.result,dataSync:i.dataSync}},parseFieldConfigs=(e,n,r)=>{if((0,t.isMissing)(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,t)=>{if(typeof e!=`object`||!e)return;let r=parseScopesString(e.requiredScopes);return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...n,`fieldConfigs`,t],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=a.StepFunctionsRegistry[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},validateStepFunctions=(e,t)=>{for(let n of t.stepFunctions){let r=n.version??`1`,i=a.StepFunctionsRegistry[n.functionName]?.[`v${r}`];if(!i)throw new InvalidStepFunctionError(e,t.id,n.functionName,r);let o=i.inputSchema;o&&parseStepFunctionParamsWithSchemaException(o,n.params,e,t.id,n.functionName,r)}},parseActionInputs=(e,n)=>{if(!e.inputs)return{};let r=createInputsSchema(e.inputs),i=t.z.object(r).parse(n);return{...i.headers??{},...i.query??{},...i.path??{},...i.body??{}}},createInputsSchema=e=>{let n=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),r={};for(let[e,i]of Object.entries(n)){let n={};for(let e of i){let t=buildZodSchemaFromInputType(e);e.description&&(t=t.describe(e.description)),e.required||(t=t.optional()),n[e.name]=t}Object.keys(n).length>0&&(r[e]=t.z.object(n))}return r},buildEnumZodSchema=(e,n)=>{if(!n)throw Error(`Enum input "${e}" requires oneOf definition`);let r;if(`values`in n)r=n.values;else if(`ref`in n){let t=(0,a.getInputEnumValues)(n.ref);if(!t)throw Error(`Unknown enum reference "${n.ref}" in input "${e}"`);r=t}else throw Error(`Invalid oneOf definition in input "${e}"`);if(r.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return t.z.enum(r)},buildZodSchemaFromInputType=e=>{let n;switch(e.type){case`string`:case`datetime_string`:n=t.z.string();break;case`number`:n=t.z.number();break;case`boolean`:n=t.z.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),r[t.name]=e}n=t.z.object(r)}else n=t.z.record(t.z.string(),t.z.unknown());break;default:n=t.z.unknown()}return e.array&&(n=t.z.array(n)),n},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||(0,t.isMissing)(e.compositeIdentifiers))return{enabled:!1};let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`||e===`upload_binary`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,n,r)=>{if(e.authentication?.[n]?.[r]?.type!==`oauth2`)return;let i=e.authentication?.[n]?.[r]?.refreshAuthentication?.action;if((0,t.notMissing)(i))return{action:i,params:{}}},supportsRefreshAuthentication=(e,n,r)=>e.authentication?.[n]?.[r]?.type===`oauth2`?(0,t.notMissing)(getActionForRefreshAuthentication(e,n,r)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(n){if(n instanceof SchemaValidationError||n instanceof MissingScopeDefinitionError){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=(0,t.isMissing)(r)?n.path:[...n.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof InvalidYamlFileError)return{success:!1,errors:[{line:n.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(n instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!1,e),message:n.message,field:void 0}]};else if(n instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:n.message,field:`eventRouter`}]};else if(n instanceof InvalidStepFunctionParamsError){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=(0,t.isMissing)(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,n)=>{let r=n.split(`
|
|
4
|
+
`).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var u=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends u{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends u{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends u{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends u{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends u{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends u{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},InvalidEventRouterReferenceError=class extends u{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends u{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const d=25,formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),f={key:t.z.string(),label:t.z.string(),required:t.z.boolean().optional().default(!1),secret:t.z.boolean().optional().default(!1),externalSystemIdentifier:t.z.boolean().optional(),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional()},p=t.z.discriminatedUnion(`type`,[(0,t.zStrictObject)({...f,type:t.z.enum([`text`,`password`])}),(0,t.zStrictObject)({...f,type:t.z.literal(`select`),options:(0,t.zStrictObject)({value:t.z.string(),label:t.z.string()}).array()})]),m=(0,t.zStrictObject)({targetFieldKey:t.z.string(),alias:t.z.string().optional(),expression:t.z.string().optional(),values:t.z.unknown().optional(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:t.z.boolean().default(!1),custom:t.z.boolean().default(!1),hidden:t.z.boolean().default(!1),enumMapper:(0,t.zStrictObject)({matcher:t.z.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or((0,t.zStrictObject)({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional(),properties:t.z.lazy(()=>m).array().optional(),requiredScopes:t.z.string().optional()}),h=t.z.union([(0,t.zStrictObject)({values:t.z.string().array().min(1)}),(0,t.zStrictObject)({ref:t.z.string()})]),g=(0,t.zStrictObject)({name:t.z.string(),type:t.z.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:t.z.boolean(),description:t.z.string(),array:t.z.boolean().optional().default(!1),arrayFormat:t.z.enum([`repeat`,`brackets`,`comma`]).optional(),in:t.z.enum([`body`,`query`,`path`,`headers`]),properties:t.z.lazy(()=>g.omit({in:!0})).array().optional(),oneOf:h.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'`}),_=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),v=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),y=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:v,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),b=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:v.optional(),stepFunctions:v.array().optional(),condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}).refine(e=>e.stepFunction!==void 0&&e.stepFunctions===void 0||e.stepFunction===void 0&&e.stepFunctions!==void 0,{message:`Exactly one of 'stepFunction' or 'stepFunctions' must be provided, not both`}),x=(0,t.zStrictObject)({allowed:t.z.boolean(),indexField:t.z.string().or(t.z.string().array())}),S=(0,t.zStrictObject)({rules:(0,t.zStrictObject)({when:t.z.string(),then:(0,t.zStrictObject)({action:t.z.string(),input:t.z.record(t.z.string(),t.z.unknown()).optional()})}).array()}),C=(0,t.zStrictObject)({actionId:t.z.string(),categories:t.z.string().array(),actionType:t.z.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),schema:t.z.string().optional(),schemaType:t.z.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:t.z.string().optional(),entrypointHttpMethod:t.z.string().optional(),label:t.z.string(),description:t.z.string(),details:t.z.string().optional(),examples:_.array().optional(),tags:t.z.string().array().optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),resources:t.z.string().optional(),responses:(0,t.zStrictObject)({statusCode:t.z.number(),description:t.z.string()}).array().optional(),requiredScopes:t.z.string().optional(),inputs:g.array().optional(),cursor:(0,t.zStrictObject)({enabled:t.z.boolean(),pageSize:t.z.number()}).optional(),compositeIdentifiers:(0,t.zStrictObject)({enabled:t.z.boolean(),version:t.z.number().optional(),fields:(0,t.zStrictObject)({targetFieldKey:t.z.string(),remote:t.z.string().optional(),components:t.z.string().array()}).array().optional()}).optional(),fieldConfigs:m.array().optional(),steps:t.z.union([y,b]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional(),dataSync:x.optional()}),w=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:C.extend({actionType:t.z.literal(`refresh_token`)})}),T=(0,t.zStrictObject)({mainRatelimit:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),rateLimit:t.z.number()})).optional(),mappedRateLimitErrors:t.z.array((0,t.zStrictObject)({errorStatus:t.z.number(),errorMessage:t.z.string(),errorMessagePath:t.z.string().optional(),retryAfterPath:t.z.string().optional(),retryAfterUnit:t.z.union([t.z.literal(`seconds`),t.z.literal(`milliseconds`),t.z.literal(`date`)]).optional(),retryAfterValue:t.z.number().optional()})).optional()}),E=(0,t.zStrictObject)({mainMaxConcurrency:t.z.number(),subPools:t.z.array((0,t.zStrictObject)({subPoolKey:t.z.string(),urlPattern:t.z.string(),maxConcurrency:t.z.number()})).optional()}),D=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),O=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:D.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),k=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:D.optional(),steps:O.array().optional(),applicableScopes:t.z.string().optional()}),A=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:k.array()}),j=(0,t.zStrictObject)({config:A.optional(),setup:A.optional()}),M=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,requiredScopes:t.z.string().optional(),environments:(0,t.zStrictObject)({key:t.z.string(),name:t.z.string()}).array(),support:(0,t.zStrictObject)({link:t.z.string().optional(),description:t.z.string().optional(),guides:j.optional()}).optional(),configFields:p.array().optional(),setupFields:p.array().optional(),refreshAuthentication:w.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(C),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),N=M.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),P=M.extend({type:t.z.literal(`custom`)}),F=M.extend({type:t.z.literal(`oidc`)}),I=t.z.discriminatedUnion(`type`,[N,P,F]),L=(0,t.zStrictObject)({actions:C.extend({actionType:t.z.literal(`event`)}).array().optional(),router:S.optional(),externalAccountIdExtractor:C.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),R=(0,t.zStrictObject)({StackOne:t.z.string(),info:(0,t.zStrictObject)({title:t.z.string(),version:t.z.string(),key:t.z.string(),assets:(0,t.zStrictObject)({icon:t.z.string()}),description:t.z.string(),details:t.z.string().optional()}),resources:t.z.string().optional(),baseUrl:t.z.string(),scopeDefinitions:t.z.record(t.z.string(),(0,t.zStrictObject)({description:t.z.string(),includes:t.z.string().optional()})).optional(),authentication:t.z.record(t.z.string(),I).array().optional(),actions:C.array().optional(),events:L.optional(),rateLimit:T.optional(),concurrency:E.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),z=`https://docs.stackone.com`,toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,n,r)=>{if((0,t.isMissing)(r))return;if((0,t.notMissing)(r.link))return r;let i=r.guides?.config?.sections,a=toKebabCase(n);return(0,t.notMissing)(i)&&i.length>0&&a!==``?{...r,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:r};function parseYamlConnector(e){try{let n=parseWithSchemaException(R,(0,s.parse)(e)),r=parseScopeDefinitions(n.scopeDefinitions),i={title:n.info.title,version:n.info.version,key:n.info.key,assets:n.info.assets,description:n.info.description,details:n.info.details,resources:n.resources,rateLimit:n.rateLimit,concurrency:n.concurrency,releaseStage:n.releaseStage,forkedFrom:n.forkedFrom,scopeDefinitions:r},a=buildAuthenticationFromYaml(n),o={baseUrl:n.baseUrl,authentication:stripAuthenticationSetup(a)},c=buildActionsFromYaml(n,o);i.actions=c,hydrateTestActions(n,n.info.key,a,c,o),i.authentication=a,(0,t.notMissing)(c)&&(i.categories=getConnectorCategoriesFromActions(Object.values(c)));let l=buildEventActionsFromYaml(n,o),u=n.events?.router,d=(0,t.notMissing)(n.events?.externalAccountIdExtractor)?parseAction(n,[`events`,`externalAccountIdExtractor`],buildActionId(n.info.key,n.events.externalAccountIdExtractor.actionId),n.events.externalAccountIdExtractor,o,void 0):void 0;if(((0,t.notMissing)(l)||(0,t.notMissing)(u)||(0,t.notMissing)(d))&&(i.events={actions:l,router:u,externalAccountIdExtractor:d}),(0,t.notMissing)(u)){let e=Object.keys(i.events?.actions??{}),t=n.info.key,r=u.rules.map(e=>e.then.action);for(let n of r){let r=n.startsWith(`${t}_`)?n:`${t}_${n}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(n)}}return i}catch(e){if(e instanceof u)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,n,r,i,a)=>{if(!r||!i)return;let o=0;for(let s of Object.values(r)){for(let r of Object.values(s))r.testActions=r.testActions?.map((r,s)=>{if((0,t.notMissing)(r.action))if(typeof r.action==`string`){let e=buildActionId(n,r.action),t=Object.values(i).find(t=>t.id===e);if(t)return{...r,action:t}}else{let t=parseAction(e,[`authentication`,o,`testActions`,s],buildActionId(n,r.action.actionId),r.action,a);return{...r,action:t}}return r});o++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},parseScopesString=e=>(0,t.notMissing)(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,n,r)=>{if((0,t.isMissing)(e))return e;let i=e.guides;if((0,t.isMissing)(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,n,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,n,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},buildAuthenticationFromYaml=e=>{let n={},r=new Set(Object.keys(e.scopeDefinitions||{})),i=[],a=e.info.key;for(let[o,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);n[c]=s[c].environments.reduce((n,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{r.has(e)||i.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,o],keys:[`requiredScopes`]})});let v=(0,t.notMissing)(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,o,`refreshAuthentication`,`action`],buildActionId(a,p.action.actionId),p.action)}:void 0,y=(0,t.notMissing)(g.support)?parseSupportGuides(g.support,r,[`authentication`,o,c,`support`]):void 0,b=(0,t.notMissing)(y)?buildSupport(a,g.label,y):void 0;return n[u]={...g,...(0,t.notMissing)(b)?{support:b}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},n},{})}if(i.length>0)throw new MissingScopeDefinitionError(i);return n},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||(0,t.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>((0,o.isSuccessStatusCode)(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!(0,a.isValidEnumRef)(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,n,r)=>{if(!n||n.length===0)return;let i={};for(let e of r){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),i[e.name]=t}let a=t.z.object(i).strict();for(let t=0;t<n.length;t++){let{exampleDescription:r,...i}=n[t],o=a.safeParse(i);if(!o.success){let n=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,t,n)}}},parseAction=(e,n,r,i,a,o)=>{let s=inferEntrypointUrl(i),c=buildActionResponses(i),l=buildCursorConfig(i),u=i.inputs||[];l.enabled&&(u?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),u?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(r,u),validateExamplesMatchInputs(r,i.examples,u);let d=getEntrypointHttpMethod(i),f=new Set(Object.keys(e.scopeDefinitions||{})),p=[],m=parseScopesString(i.requiredScopes);if(Object.values(m??[]).forEach(e=>{f.has(e)||p.push({message:`Scope '${e}' included in action '${i.actionId}' is not defined.`,path:n,keys:[`requiredScopes`]})}),p.length>0)throw new MissingScopeDefinitionError(p);if(i.dataSync?.allowed===!0&&(0,t.isMissing)(i.schema))throw new SchemaValidationError([{message:`The 'schema' field is required when 'dataSync.allowed' is true.`,path:[...n,`dataSync`],keys:[`allowed`]}]);return{id:r,categories:i.categories,label:i.label,description:i.description,details:i.details,examples:i.examples,actionType:i.actionType,schemaType:i.schemaType??`native`,entrypointUrl:i.entrypointUrl??s,entrypointHttpMethod:d,endpoint:o,tags:i.tags,releaseStage:i.releaseStage,resources:i.resources,responses:c,cursor:l,compositeIdentifiers:parseCompositeIdentifiersConfig(i),requiredScopes:m,inputs:u,steps:i.steps.reduce((t,r)=>{let parseStepFunctionMeta=t=>{let{customErrors:r,...o}=t.parameters??{},s=parseFieldConfigs(e,n,t.functionName===`map_fields`||t.functionName===`typecast`?o.fields??i.fieldConfigs:void 0);return{functionName:t.functionName,version:t.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:t.functionName,baseRequestParams:a,customErrors:r}),...s??{},...o}}},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError};if(`iterator`in r&&r.iterator){if(`stepFunction`in r&&r.stepFunction){let e={...o,iterator:r.iterator,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),t[r.stepId]=e}else if(`stepFunctions`in r&&r.stepFunctions){let e={...o,iterator:r.iterator,stepFunctions:r.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(i.actionId,e),t[r.stepId]=e}}else if(`stepFunction`in r&&r.stepFunction){let e={...o,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),t[r.stepId]=e}return t},{}),result:i.result,dataSync:i.dataSync}},parseFieldConfigs=(e,n,r)=>{if((0,t.isMissing)(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,t)=>{if(typeof e!=`object`||!e)return;let r=parseScopesString(e.requiredScopes);return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...n,`fieldConfigs`,t],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=a.StepFunctionsRegistry[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},validateStepFunctions=(e,t)=>{for(let n of t.stepFunctions){let r=n.version??`1`,i=a.StepFunctionsRegistry[n.functionName]?.[`v${r}`];if(!i)throw new InvalidStepFunctionError(e,t.id,n.functionName,r);let o=i.inputSchema;o&&parseStepFunctionParamsWithSchemaException(o,n.params,e,t.id,n.functionName,r)}},parseActionInputs=(e,n)=>{if(!e.inputs)return{};let r=createInputsSchema(e.inputs),i=t.z.object(r).parse(n);return{...i.headers??{},...i.query??{},...i.path??{},...i.body??{}}},createInputsSchema=e=>{let n=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),r={};for(let[e,i]of Object.entries(n)){let n={};for(let e of i){let t=buildZodSchemaFromInputType(e);e.description&&(t=t.describe(e.description)),e.required||(t=t.optional()),n[e.name]=t}Object.keys(n).length>0&&(r[e]=t.z.object(n))}return r},buildEnumZodSchema=(e,n)=>{if(!n)throw Error(`Enum input "${e}" requires oneOf definition`);let r;if(`values`in n)r=n.values;else if(`ref`in n){let t=(0,a.getInputEnumValues)(n.ref);if(!t)throw Error(`Unknown enum reference "${n.ref}" in input "${e}"`);r=t}else throw Error(`Invalid oneOf definition in input "${e}"`);if(r.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return t.z.enum(r)},buildZodSchemaFromInputType=e=>{let n;switch(e.type){case`string`:case`datetime_string`:n=t.z.string();break;case`number`:n=t.z.number();break;case`boolean`:n=t.z.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),r[t.name]=e}n=t.z.object(r)}else n=t.z.record(t.z.string(),t.z.unknown());break;default:n=t.z.unknown()}return e.array&&(n=t.z.array(n)),n},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||(0,t.isMissing)(e.compositeIdentifiers))return{enabled:!1};let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`||e===`upload_binary`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,n,r)=>{if(e.authentication?.[n]?.[r]?.type!==`oauth2`)return;let i=e.authentication?.[n]?.[r]?.refreshAuthentication?.action;if((0,t.notMissing)(i))return{action:i,params:{}}},supportsRefreshAuthentication=(e,n,r)=>e.authentication?.[n]?.[r]?.type===`oauth2`?(0,t.notMissing)(getActionForRefreshAuthentication(e,n,r)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(n){if(n instanceof SchemaValidationError||n instanceof MissingScopeDefinitionError){let r=n.issues,i=[];return r.forEach(n=>{let r=n?.keys?.[0],a=(0,t.isMissing)(r)?n.path:[...n.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:n.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(n instanceof InvalidYamlFileError)return{success:!1,errors:[{line:n.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(n instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!1,e),message:n.message,field:void 0}]};else if(n instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:n.message,field:`events.router`}]};else if(n instanceof InvalidStepFunctionParamsError){let r=n.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=(0,t.isMissing)(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(n.actionId,n.stepId,n.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,n)=>{let r=n.split(`
|
|
5
5
|
`),i=0,a=-1,o=0;for(let n=0;n<r.length;n++){let s=r[n],c=s.match(/^(\s*)/)?.[1]?.length||0,l=s.replace(`- `,``).trim();if(l.startsWith(`#`)||l===``||c<=a)continue;let u=(0,t.notMissing)(e[i])?`${String(e[i])}`:``;if((0,t.isMissing)(u))return o+1;if(isNaN(Number(u))){if(l.startsWith(`${u}:`)){if(i===e.length-1)return n+1;a=c,o=n,i++}}else{let e=parseInt(u,10),t=-1;for(let a=n;a<r.length;a++)if(r[a].trim().startsWith(`-`)&&t++,t===e){i++,o=n,n--;break}else n++}}return o+1},getErrorLineNumberInAction=(e,n,r,i,a)=>{let o=a.split(`
|
|
6
|
-
`),s=1,c=null,l=null;for(let a=0;a<o.length;a++){let u=o[a].trim();if((0,t.isMissing)(c)&&u===`- actionId: ${e}`){c=e,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.isMissing)(l)&&u===`- stepId: ${n}`){l=n,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.notMissing)(l)&&!i&&u.includes(`functionName: ${r}`)||(0,t.notMissing)(c)&&(0,t.notMissing)(l)&&i&&u===`parameters:`)return s=a+1,s}return s};var z=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends z{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends z{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends z{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends z{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends z{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getEventActionsMeta=e=>Object.values(e.eventActions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,release_stage:e.releaseStage,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e),o=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=a.StepFunctionsFactory.build})=>{let i=r({functionName:t}).fn,o=await i({block:e,params:n}),s=t===a.StepFunctionName.MAP_FIELDS?{[a.StepFunctionName.MAP_FIELDS.toString()]:{output:{data:o.block.result},errors:o.errors,successful:o.successful}}:{};return{...o.block,steps:{...o?.block?.steps??{},...s}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,connectorOwner:i,authConfigKey:a,environment:o=`production`,action:s,accountSecureId:c,projectSecureId:l,organizationId:u,originOwnerId:d,originOwnerName:f,sourceType:p,sourceId:m,sourceValue:h})=>({organizationId:u,projectSecureId:l,accountSecureId:c,connectorKey:n,connectorVersion:r,connectorOwner:i,category:e,service:``,resource:``,originOwnerId:d,originOwnerName:f,source:{sourceType:p,sourceId:m,sourceValue:h},schema:s?.schema?.key,actionType:s?.actionType??`unknown`,authenticationType:a,environment:o,actionRunId:(0,t.generateActionRunId)()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const decodeInputCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!n?.enabled||(0,t.isMissing)(r))return e;let i=n.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:n.version??a.COMPOSITE_ID_LATEST_VERSION,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],o=[];for(let s of e)try{let e=(0,a.decodeCompositeId)(s,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:s,compositeIdentifierConfig:n,error:e}}),o.push(s)}return{compositeIdComponents:i,nonCompositeIds:o}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof a.CoreError&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},B=`remote_`,encodeResultCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers;if(!n?.enabled)return e;let r=`data`,i=e.outputs?.[r];if((0,t.isMissing)(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,n)):mapCompositeIds(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,n)=>{let r=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,n));return{...e,...(0,t.isObject)(r)?r:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??a.COMPOSITE_ID_LATEST_VERSION,r={};return t.fields?.forEach(t=>{let i={},o=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),o.push({key:t.name,value:e[t.name]})});let s=(0,a.encodeCompositeId)(o.length===1?o[0]:{identifiers:o},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=s,t.remote&&(r[`${B}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>(0,t.isString)(e)&&e.length>0),shouldSkipEncoding=(e,t)=>(0,a.isCompositeId)(e)||t.startsWith(B),encodeStringValue=(e,t)=>{try{return(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},processStringArrayField=(e,n,r)=>{r[e]=n.map(n=>(0,t.isString)(n)&&n.length>0&&!(0,a.isCompositeId)(n)?encodeStringValue(e,n):n),r[`${B}${e}`]=n},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION}),n[`remote_${e}`]=t)},processIdField=(e,n,r)=>{isValidStringArray(n)?processStringArrayField(e,n,r):(0,t.isString)(n)&&n.length>0&&processStringField(e,n,r)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!(0,t.isObject)(e))return e;let n={...e};for(let[r,i]of Object.entries(e))((0,t.isObject)(i)||Array.isArray(i)&&i.length>0&&(0,t.isObject)(i[0]))&&(n[r]=mapCompositeIdsFromInference(i)),isIdField(r)&&processIdField(r,i,n);return n},getPageSize=(e,n)=>{let r=Number(e.inputs?.page_size);return(0,t.notMissing)(e.inputs?.page_size)&&(0,t.isNumber)(r)&&!Number.isNaN(r)?r:e.action?.cursor?.pageSize??n},virtualPaginateResult=(e,n,r,i)=>{let o=(0,t.isMissing)(e)?void 0:e.data,s=Object.keys(r).length+1,c=(0,a.isCursorEmpty)({cursor:i,ignoreStepIndex:s});if(!(0,t.isObject)(e)||(0,t.isMissing)(o)||(o?.length??0)<=n)return{result:e,next:(0,t.notMissing)(i)&&!c?(0,a.minifyCursor)(i):null};let l=i?.remote?.[s]?.pageNumber??1,u=(l-1)*n,d=u+n,f=o.slice(u,d),p=o.length>d||!c,m=(0,a.updateCursor)({cursor:i,stepIndex:s,pageNumber:l+1});return{result:{...e,data:f},next:p?(0,a.minifyCursor)(m):null}},getOlapOptions=e=>{let n=e?.olap;if((0,t.isMissing)(n))return{};let r=n.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=n.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},runStepAction=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],shouldSkipStepDueToCondition=(e,t)=>e.condition?!(0,l.safeEvaluate)(e.condition,t):!1,buildStepParamsForFunction=(e,n,r)=>{let i=a.StepFunctionsRegistry[e.functionName]?.[`v${e.version??1}`],o=(0,t.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return n.action?.cursor.enabled&&o?{...e.params??{},cursor:{token:n.nextCursor?.remote?.[r]?.providerPageCursor,position:n.nextCursor?.remote?.[r]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,o,s)=>{let c=n[e];return shouldSkipStepDueToCondition(c,r)?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`}):(0,a.isForeachStep)(c)?executeForeachStep(e,t,c,r,i,o,s):executeSimpleStep(e,t,c,r,i,o,s)},executeSimpleStep=async(e,t,n,r,i,o,s)=>{let c=new Date,l=n.stepFunction;if(!l)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`});let u=o.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,d=await u({block:r,params:buildStepParams(n,r,t)});if(d.successful===!1)return handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?addStepResultToBlock({block:{...d.block,streamOutput:d.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let f=r.action?.cursor.enabled?(0,a.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:d.output?.next,position:d.output?.position}):void 0;return addStepResultToBlock({block:{...d.block,nextCursor:f},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date})},executeForeachStep=async(e,n,r,i,o,s,c)=>{let u=new Date,d=(0,l.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let f=getStepFunctionsToExecute(r);if(f.length===0)return addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`});let p=[],m=i,h,g={};for(let[i,a]of d.entries()){let c={...m,iterator:{item:a,index:i}};for(let l of f){let d=s.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,f=buildStepParamsForFunction(l,c,n),p=await d({block:c,params:f});if(h=p,p.successful===!1&&!(r.ignoreError??!1))return o.hasFatalError=!0,o.errorStatusCode??=p.output?.statusCode??500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,output:p.output,errors:p.errors}},addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,functionOutput:p,startTime:u,endTime:new Date});if(c={...p.block,iterator:{item:a,index:i,current:p.output}},p.streamOutput)return o.hasFatalError=!0,o.errorStatusCode=500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`})}m=c,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:h?.successful??!0,output:h?.output,errors:h?.errors}},h?.output&&p.push(h.output)}let _=i.action?.cursor.enabled?(0,a.updateCursor)({cursor:i.nextCursor,stepIndex:n,providerPageCursor:h?.output?.next,position:h?.output?.position}):void 0,v={block:m,successful:!0,output:{data:p}};return addStepResultToBlock({block:{...m,nextCursor:_,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!0,functionOutput:v,startTime:u,endTime:new Date})},buildFinalResponse=(e,n,r,i,a)=>{let s=!r.hasFatalError,c=s?e.action?.responses.success.statusCode??200:r.errorStatusCode??500;if(n.streamOutput)return{...n,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}};let l=(0,t.notMissing)(a)&&(0,t.isObject)(a.result)?{next:a.next,...a.result}:i;return{...n,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},o=Object.keys(r),s=getPageSize(e,25),c={hasFatalError:!1,errorStatusCode:null},l={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of o.entries()){let n=e===o.length-1;i=await executeStep(t,e,r,i,c,l,n)}let u=e.action?.result?evaluateResult(e.action.result,i):void 0,d=e.action?.cursor.enabled?n(u,s,r,i.nextCursor):void 0;return buildFinalResponse(e,i,c,u,d)},evaluateResult=(e,n)=>(0,t.isObject)(e)?(0,l.safeEvaluateRecord)(e,n):(0,l.safeEvaluate)(e,n),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:n,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if((0,t.isMissing)(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:n,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},applyDefenderToBlock=async(e,n,r,i)=>{let{defenderMetadata:a,outputs:o,response:s}=await n({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:r,logger:i});return{...e,defenderMetadata:a,...(0,t.notMissing)(o)&&{outputs:o},...(0,t.notMissing)(s)&&{response:s}}},runAction=async e=>{let{pathParams:n={},queryParams:r={},body:i={},headers:a={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=parseActionInputs,createBlockContextFn:c=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction,getActionFromUrlFn:f=getActionFromUrl,getActionForRefreshAuthenticationFn:p=getActionForRefreshAuthentication,getTestActionsFn:m=getTestActions,applyDefenderFn:h=applyDefender,mode:g,account:_,connector:v,getHttpClient:y,getOlapClient:b,settings:x,source:S,logger:C,category:w,...T}=e,E=_.authConfigKey,D=_.environment??`production`,O=_.secureId,k=_.projectSecureId,A=_.organizationId,j=_.credentials,M=_.originOwnerId,N=_.originOwnerName,P=c({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,connectorOwner:_.connectorOwner,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A,originOwnerId:M,originOwnerName:N,sourceType:S?.sourceType,sourceId:S?.sourceId,sourceValue:S?.sourceValue}),F=new Date,I;try{I=(0,t.isString)(v)?o(v):v}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:j,settings:x,logger:C,getHttpClient:y,getOlapClient:b};if(g===`action_id`){let{actionId:o}=T,c=findActionByActionId(I,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c,blockContext:P,queryParams:r,pathParams:n,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(g===`test_actions`){let n=m(I,E,D);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,L);P.actionType=`test`;for(let r of n){let n=new Date,i=await u({...L,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,l.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(a=await applyDefenderToBlock(a,applyDefender,x,C),((0,t.isMissing)(a?.response?.successful)||!a.response.successful)&&r.required){C?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let t=await createErrorBlock(u,L);return t.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,L);return r.statistics={startTime:F,endTime:new Date},r}else if(g===`refresh_authentication`){let n=p(I,E,D);if((0,t.isMissing)(n))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:n.action,blockContext:P,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return o=await applyDefenderToBlock(o,h,x,C),o.statistics={startTime:F,endTime:new Date},recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(g===`path`){let{path:n,method:o}=T,c=f(I,n,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,L)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,n)=>{let r=e?.next,i=(0,t.notMissing)(r)&&n.actionType===`list`?(0,a.expandCursor)(r):void 0;if(i===null)throw new InvalidCursorError(n,`Invalid cursor.`);return i},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await(0,c.createPromptDefense)({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useDefaultToolRules:r?.defender?.useDefaultToolRules??!1,tier2Fields:r?.defender?.tier2Fields,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e)){n.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if((0,t.isMissing)(i?.recordAction)){n.logger?.warning({message:`olap client is missing, skipping recording action result`});return}let a=getOlapOptions(n.settings),o={actionId:e.id,mode:n.mode,url:e?.entrypointUrl,pathParams:n?.pathParams,queryParams:n?.queryParams,body:n?.body,headers:n?.headers,sourceId:n.source?.sourceId,sourceType:n.source?.sourceType,sourceValue:n.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata?.result?{riskLevel:r.defenderMetadata.result.riskLevel,tier2Score:r.defenderMetadata.result.tier2Score??0}:void 0};i.recordAction(o,c,a)},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}),V=`stackone://internal//`,H=`stackone://internal//refresh_token`,runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:n,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:n.providerKey,connectorVersion:n.providerVersion,authConfigKey:n.authConfigKey,environment:n.environment??`production`,accountSecureId:n.secureId,projectSecureId:n.projectSecureId,organizationId:n.organizationId,originOwnerId:n.originOwnerId,originOwnerName:n.originOwnerName,connectorOwner:n.connectorOwner}),g=u(r,e);if((0,t.isMissing)(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:n.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1;exports.ConnectSDKError=z,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.executeStepFunction=executeStepFunction,exports.formatValidationErrorResponse=formatValidationErrorResponse,exports.getActionFromUrl=getActionFromUrl,exports.getActionsMeta=getActionsMeta,exports.getActionsMetaFromConnectors=getActionsMetaFromConnectors,exports.getActionsMetaSummary=getActionsMetaSummary,exports.getActionsMetaSummaryFromConnectors=getActionsMetaSummaryFromConnectors,exports.getRefreshTokenExpiresIn=getRefreshTokenExpiresIn,exports.getTokenExpiresIn=getTokenExpiresIn,exports.isConnectorReleased=isConnectorReleased,exports.loadConnector=loadConnector,exports.parseActionInputs=parseActionInputs,exports.parseYamlConnector=parseYamlConnector,exports.runAction=runAction,exports.runConnectorActionById=runConnectorActionById,exports.runConnectorActionByPath=runConnectorActionByPath,exports.runEventActionById=runEventActionById,exports.runStepAction=runStepAction,exports.runTestActions=runTestActions,exports.supportsRefreshAuthentication=supportsRefreshAuthentication,exports.validateYamlConnector=validateYamlConnector;
|
|
6
|
+
`),s=1,c=null,l=null;for(let a=0;a<o.length;a++){let u=o[a].trim();if((0,t.isMissing)(c)&&u===`- actionId: ${e}`){c=e,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.isMissing)(l)&&u===`- stepId: ${n}`){l=n,s=a+1;continue}if((0,t.notMissing)(c)&&(0,t.notMissing)(l)&&!i&&u.includes(`functionName: ${r}`)||(0,t.notMissing)(c)&&(0,t.notMissing)(l)&&i&&u===`parameters:`)return s=a+1,s}return s};var B=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 B{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends B{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends B{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends B{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends B{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getEventActionsMeta=e=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,release_stage:e.releaseStage,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e),o=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>(0,a.evaluateExternalAccountIdExtractor)(e,t),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=a.StepFunctionsFactory.build})=>{let i=r({functionName:t}).fn,o=await i({block:e,params:n}),s=t===a.StepFunctionName.MAP_FIELDS?{[a.StepFunctionName.MAP_FIELDS.toString()]:{output:{data:o.block.result},errors:o.errors,successful:o.successful}}:{};return{...o.block,steps:{...o?.block?.steps??{},...s}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,connectorOwner:i,authConfigKey:a,environment:o=`production`,action:s,accountSecureId:c,projectSecureId:l,organizationId:u,originOwnerId:d,originOwnerName:f,sourceType:p,sourceId:m,sourceValue:h})=>({organizationId:u,projectSecureId:l,accountSecureId:c,connectorKey:n,connectorVersion:r,connectorOwner:i,category:e,service:``,resource:``,originOwnerId:d,originOwnerName:f,source:{sourceType:p,sourceId:m,sourceValue:h},schema:s?.schema?.key,actionType:s?.actionType??`unknown`,authenticationType:a,environment:o,actionRunId:(0,t.generateActionRunId)()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const decodeInputCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!n?.enabled||(0,t.isMissing)(r))return e;let i=n.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:n.version??a.COMPOSITE_ID_LATEST_VERSION,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],o=[];for(let s of e)try{let e=(0,a.decodeCompositeId)(s,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:s,compositeIdentifierConfig:n,error:e}}),o.push(s)}return{compositeIdComponents:i,nonCompositeIds:o}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof a.CoreError&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},V=`remote_`,encodeResultCompositeIdentifiers=e=>{let n=e.action?.compositeIdentifiers;if(!n?.enabled)return e;let r=`data`,i=e.outputs?.[r];if((0,t.isMissing)(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,n)):mapCompositeIds(i,n);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,n)=>{let r=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,n));return{...e,...(0,t.isObject)(r)?r:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??a.COMPOSITE_ID_LATEST_VERSION,r={};return t.fields?.forEach(t=>{let i={},o=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),o.push({key:t.name,value:e[t.name]})});let s=(0,a.encodeCompositeId)(o.length===1?o[0]:{identifiers:o},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=s,t.remote&&(r[`${V}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>(0,t.isString)(e)&&e.length>0),shouldSkipEncoding=(e,t)=>(0,a.isCompositeId)(e)||t.startsWith(V),encodeStringValue=(e,t)=>{try{return(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION})}catch{return t}},processStringArrayField=(e,n,r)=>{r[e]=n.map(n=>(0,t.isString)(n)&&n.length>0&&!(0,a.isCompositeId)(n)?encodeStringValue(e,n):n),r[`${V}${e}`]=n},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=(0,a.encodeCompositeId)({key:e,value:t},{version:a.COMPOSITE_ID_LATEST_VERSION}),n[`remote_${e}`]=t)},processIdField=(e,n,r)=>{isValidStringArray(n)?processStringArrayField(e,n,r):(0,t.isString)(n)&&n.length>0&&processStringField(e,n,r)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!(0,t.isObject)(e))return e;let n={...e};for(let[r,i]of Object.entries(e))((0,t.isObject)(i)||Array.isArray(i)&&i.length>0&&(0,t.isObject)(i[0]))&&(n[r]=mapCompositeIdsFromInference(i)),isIdField(r)&&processIdField(r,i,n);return n},getPageSize=(e,n)=>{let r=Number(e.inputs?.page_size);return(0,t.notMissing)(e.inputs?.page_size)&&(0,t.isNumber)(r)&&!Number.isNaN(r)?r:e.action?.cursor?.pageSize??n},virtualPaginateResult=(e,n,r,i)=>{let o=(0,t.isMissing)(e)?void 0:e.data,s=Object.keys(r).length+1,c=(0,a.isCursorEmpty)({cursor:i,ignoreStepIndex:s});if(!(0,t.isObject)(e)||(0,t.isMissing)(o)||(o?.length??0)<=n)return{result:e,next:(0,t.notMissing)(i)&&!c?(0,a.minifyCursor)(i):null};let l=i?.remote?.[s]?.pageNumber??1,u=(l-1)*n,d=u+n,f=o.slice(u,d),p=o.length>d||!c,m=(0,a.updateCursor)({cursor:i,stepIndex:s,pageNumber:l+1});return{result:{...e,data:f},next:p?(0,a.minifyCursor)(m):null}},getOlapOptions=e=>{let n=e?.olap;if((0,t.isMissing)(n))return{};let r=n.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=n.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},runStepAction=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],shouldSkipStepDueToCondition=(e,t)=>e.condition?!(0,l.safeEvaluate)(e.condition,t):!1,buildStepParamsForFunction=(e,n,r)=>{let i=a.StepFunctionsRegistry[e.functionName]?.[`v${e.version??1}`],o=(0,t.notMissing)(i?.inputSchema?.shape)?`cursor`in i?.inputSchema?.shape:!1;return n.action?.cursor.enabled&&o?{...e.params??{},cursor:{token:n.nextCursor?.remote?.[r]?.providerPageCursor,position:n.nextCursor?.remote?.[r]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,o,s)=>{let c=n[e];return shouldSkipStepDueToCondition(c,r)?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`}):(0,a.isForeachStep)(c)?executeForeachStep(e,t,c,r,i,o,s):executeSimpleStep(e,t,c,r,i,o,s)},executeSimpleStep=async(e,t,n,r,i,o,s)=>{let c=new Date,l=n.stepFunction;if(!l)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`});let u=o.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,d=await u({block:r,params:buildStepParams(n,r,t)});if(d.successful===!1)return handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?addStepResultToBlock({block:{...d.block,streamOutput:d.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let f=r.action?.cursor.enabled?(0,a.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:d.output?.next,position:d.output?.position}):void 0;return addStepResultToBlock({block:{...d.block,nextCursor:f},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date})},executeForeachStep=async(e,n,r,i,o,s,c)=>{let u=new Date,d=(0,l.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let f=getStepFunctionsToExecute(r);if(f.length===0)return addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`});let p=[],m=i,h,g={};for(let[i,a]of d.entries()){let c={...m,iterator:{item:a,index:i}};for(let l of f){let d=s.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,f=buildStepParamsForFunction(l,c,n),p=await d({block:c,params:f});if(h=p,p.successful===!1&&!(r.ignoreError??!1))return o.hasFatalError=!0,o.errorStatusCode??=p.output?.statusCode??500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,output:p.output,errors:p.errors}},addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,functionOutput:p,startTime:u,endTime:new Date});if(c={...p.block,iterator:{item:a,index:i,current:p.output}},p.streamOutput)return o.hasFatalError=!0,o.errorStatusCode=500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`})}m=c,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:h?.successful??!0,output:h?.output,errors:h?.errors}},h?.output&&p.push(h.output)}let _=i.action?.cursor.enabled?(0,a.updateCursor)({cursor:i.nextCursor,stepIndex:n,providerPageCursor:h?.output?.next,position:h?.output?.position}):void 0,v={block:m,successful:!0,output:{data:p}};return addStepResultToBlock({block:{...m,nextCursor:_,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!0,functionOutput:v,startTime:u,endTime:new Date})},buildFinalResponse=(e,n,r,i,a)=>{let s=!r.hasFatalError,c=s?e.action?.responses.success.statusCode??200:r.errorStatusCode??500;if(n.streamOutput)return{...n,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}};let l=(0,t.notMissing)(a)&&(0,t.isObject)(a.result)?{next:a.next,...a.result}:i;return{...n,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},o=Object.keys(r),s=getPageSize(e,25),c={hasFatalError:!1,errorStatusCode:null},l={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of o.entries()){let n=e===o.length-1;i=await executeStep(t,e,r,i,c,l,n)}let u=e.action?.result?evaluateResult(e.action.result,i):void 0,d=e.action?.cursor.enabled?n(u,s,r,i.nextCursor):void 0;return buildFinalResponse(e,i,c,u,d)},evaluateResult=(e,n)=>(0,t.isObject)(e)?(0,l.safeEvaluateRecord)(e,n):(0,l.safeEvaluate)(e,n),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:n,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if((0,t.isMissing)(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:n,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},applyDefenderToBlock=async(e,n,r,i)=>{let{defenderMetadata:a,outputs:o,response:s}=await n({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:r,logger:i});return{...e,defenderMetadata:a,...(0,t.notMissing)(o)&&{outputs:o},...(0,t.notMissing)(s)&&{response:s}}},runAction=async e=>{let{pathParams:n={},queryParams:r={},body:i={},headers:a={},parseConnector:o=parseYamlConnector,parseActionInputsFn:s=parseActionInputs,createBlockContextFn:c=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction,getActionFromUrlFn:f=getActionFromUrl,getActionForRefreshAuthenticationFn:p=getActionForRefreshAuthentication,getTestActionsFn:m=getTestActions,applyDefenderFn:h=applyDefender,mode:g,account:_,connector:v,getHttpClient:y,getOlapClient:b,settings:x,source:S,logger:C,category:w,...T}=e,E=_.authConfigKey,D=_.environment??`production`,O=_.secureId,k=_.projectSecureId,A=_.organizationId,j=_.credentials,M=_.originOwnerId,N=_.originOwnerName,P=c({category:w??`action`,connectorKey:_.providerKey,connectorVersion:_.providerVersion,connectorOwner:_.connectorOwner,authConfigKey:E,environment:D,accountSecureId:O,projectSecureId:k,organizationId:A,originOwnerId:M,originOwnerName:N,sourceType:S?.sourceType,sourceId:S?.sourceId,sourceValue:S?.sourceValue}),F=new Date,I;try{I=(0,t.isString)(v)?o(v):v}catch{throw new ConnectorParseError(P,`Error while parsing connector`)}let L={connector:I,context:P,credentials:j,settings:x,logger:C,getHttpClient:y,getOlapClient:b};if(g===`action_id`){let{actionId:o}=T,c=findActionByActionId(I,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c,blockContext:P,queryParams:r,pathParams:n,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(g===`test_actions`){let n=m(I,E,D);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,L);P.actionType=`test`;for(let r of n){let n=new Date,i=await u({...L,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,l.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(a=await applyDefenderToBlock(a,applyDefender,x,C),((0,t.isMissing)(a?.response?.successful)||!a.response.successful)&&r.required){C?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let t=await createErrorBlock(u,L);return t.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,L);return r.statistics={startTime:F,endTime:new Date},r}else if(g===`refresh_authentication`){let n=p(I,E,D);if((0,t.isMissing)(n))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:n.action,blockContext:P,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return o=await applyDefenderToBlock(o,h,x,C),o.statistics={startTime:F,endTime:new Date},recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(g===`path`){let{path:n,method:o}=T,c=f(I,n,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,L)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,n)=>{let r=e?.next,i=(0,t.notMissing)(r)&&n.actionType===`list`?(0,a.expandCursor)(r):void 0;if(i===null)throw new InvalidCursorError(n,`Invalid cursor.`);return i},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await(0,c.createPromptDefense)({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useDefaultToolRules:r?.defender?.useDefaultToolRules??!1,tier2Fields:r?.defender?.tier2Fields,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e)){n.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if((0,t.isMissing)(i?.recordAction)){n.logger?.warning({message:`olap client is missing, skipping recording action result`});return}let a=getOlapOptions(n.settings),o={actionId:e.id,mode:n.mode,url:e?.entrypointUrl,pathParams:n?.pathParams,queryParams:n?.queryParams,body:n?.body,headers:n?.headers,sourceId:n.source?.sourceId,sourceType:n.source?.sourceType,sourceValue:n.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata?.result?{riskLevel:r.defenderMetadata.result.riskLevel,tier2Score:r.defenderMetadata.result.tier2Score??0}:void 0};i.recordAction(o,c,a)},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}),H=`stackone://internal//`,U=`stackone://internal//refresh_token`,runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:n,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:n.providerKey,connectorVersion:n.providerVersion,authConfigKey:n.authConfigKey,environment:n.environment??`production`,accountSecureId:n.secureId,projectSecureId:n.projectSecureId,organizationId:n.organizationId,originOwnerId:n.originOwnerId,originOwnerName:n.originOwnerName,connectorOwner:n.connectorOwner}),g=u(r,e);if((0,t.isMissing)(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:n.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1;exports.ConnectSDKError=B,exports.InvalidActionInputsError=InvalidActionInputsError,exports.InvalidEventOutputError=InvalidEventOutputError,exports.applyReleaseStageToConnector=applyReleaseStageToConnector,exports.createBlock=createBlock,exports.evaluateExternalAccountIdExtractorByConnector=evaluateExternalAccountIdExtractorByConnector,exports.executeStepFunction=executeStepFunction,exports.formatValidationErrorResponse=formatValidationErrorResponse,exports.getActionFromUrl=getActionFromUrl,exports.getActionsMeta=getActionsMeta,exports.getActionsMetaFromConnectors=getActionsMetaFromConnectors,exports.getActionsMetaSummary=getActionsMetaSummary,exports.getActionsMetaSummaryFromConnectors=getActionsMetaSummaryFromConnectors,exports.getRefreshTokenExpiresIn=getRefreshTokenExpiresIn,exports.getTokenExpiresIn=getTokenExpiresIn,exports.isConnectorReleased=isConnectorReleased,exports.loadConnector=loadConnector,exports.parseActionInputs=parseActionInputs,exports.parseYamlConnector=parseYamlConnector,exports.runAction=runAction,exports.runConnectorActionById=runConnectorActionById,exports.runConnectorActionByPath=runConnectorActionByPath,exports.runEventActionById=runEventActionById,exports.runStepAction=runStepAction,exports.runTestActions=runTestActions,exports.supportsRefreshAuthentication=supportsRefreshAuthentication,exports.validateYamlConnector=validateYamlConnector;
|
package/dist/index.d.cts
CHANGED
|
@@ -337,10 +337,63 @@ type DefenderOptions = {
|
|
|
337
337
|
enabled?: boolean;
|
|
338
338
|
};
|
|
339
339
|
//#endregion
|
|
340
|
+
//#region ../olap/src/logs/types.d.ts
|
|
341
|
+
type ActionsQuery = {
|
|
342
|
+
organizationId?: string | string[];
|
|
343
|
+
projectSecureId?: string | string[];
|
|
344
|
+
actionRunId?: string | string[];
|
|
345
|
+
accountSecureId?: string | string[];
|
|
346
|
+
actionId?: string | string[];
|
|
347
|
+
connectorKey?: string | string[];
|
|
348
|
+
mode?: string | string[];
|
|
349
|
+
category?: string | string[];
|
|
350
|
+
success?: boolean;
|
|
351
|
+
startTime?: Date;
|
|
352
|
+
endTime?: Date;
|
|
353
|
+
pageNumber?: number;
|
|
354
|
+
pageSize?: number;
|
|
355
|
+
};
|
|
356
|
+
type ActionsQueryResult = {
|
|
357
|
+
actionLogs: ActionLog[];
|
|
358
|
+
total: number;
|
|
359
|
+
pageNumber: number;
|
|
360
|
+
pageSize: number;
|
|
361
|
+
};
|
|
362
|
+
type ActionLog = {
|
|
363
|
+
actionRunId: string;
|
|
364
|
+
actionId: string;
|
|
365
|
+
connectorKey: string;
|
|
366
|
+
connectorVersion: string;
|
|
367
|
+
organizationId: string;
|
|
368
|
+
projectSecureId: string;
|
|
369
|
+
accountSecureId: string;
|
|
370
|
+
mode?: string;
|
|
371
|
+
category?: string;
|
|
372
|
+
originOwnerId?: string;
|
|
373
|
+
originOwnerName?: string;
|
|
374
|
+
httpMethod?: string;
|
|
375
|
+
url?: string;
|
|
376
|
+
sourceType?: string;
|
|
377
|
+
sourceId?: string;
|
|
378
|
+
sourceValue?: string;
|
|
379
|
+
success?: boolean;
|
|
380
|
+
statusCode?: number;
|
|
381
|
+
startTime?: Date;
|
|
382
|
+
endTime?: Date;
|
|
383
|
+
durationMs?: number;
|
|
384
|
+
eventTime?: Date;
|
|
385
|
+
riskLevel?: string;
|
|
386
|
+
tier2Score?: number;
|
|
387
|
+
};
|
|
388
|
+
//#endregion
|
|
340
389
|
//#region ../olap/src/types.d.ts
|
|
341
390
|
interface IOlapClient {
|
|
342
391
|
recordAction(actionInput: ActionInput, actionResult: ActionResult, options?: OlapOptions): void;
|
|
343
392
|
recordStep(stepInput: StepInput, stepResult: StepResult, options?: OlapOptions): void;
|
|
393
|
+
getActions(organizationId: string, projectSecureId: string, query: ActionsQuery): Promise<ActionsQueryResult>;
|
|
394
|
+
getAction(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionLog | undefined>;
|
|
395
|
+
getAdvanced(organizationId: string, projectSecureId: string, actionRunId: string): Promise<string | undefined>;
|
|
396
|
+
getDefender(organizationId: string, projectSecureId: string, actionRunId: string): Promise<string | undefined>;
|
|
344
397
|
}
|
|
345
398
|
type DefenderContext = {
|
|
346
399
|
riskLevel: string;
|
|
@@ -687,6 +740,13 @@ type EventToEmit = {
|
|
|
687
740
|
eventDate?: string;
|
|
688
741
|
data?: unknown;
|
|
689
742
|
};
|
|
743
|
+
type ConnectorEvents = {
|
|
744
|
+
actions?: {
|
|
745
|
+
[actionId: string]: Action;
|
|
746
|
+
};
|
|
747
|
+
router?: EventRouter;
|
|
748
|
+
externalAccountIdExtractor?: Action;
|
|
749
|
+
};
|
|
690
750
|
type Connector = {
|
|
691
751
|
title: string;
|
|
692
752
|
version: string;
|
|
@@ -703,15 +763,12 @@ type Connector = {
|
|
|
703
763
|
actions?: {
|
|
704
764
|
[actionId: string]: Action;
|
|
705
765
|
};
|
|
706
|
-
|
|
707
|
-
[actionId: string]: Action;
|
|
708
|
-
};
|
|
766
|
+
events?: ConnectorEvents;
|
|
709
767
|
rateLimit?: RateLimitConfig;
|
|
710
768
|
concurrency?: ConcurrencyConfig;
|
|
711
769
|
releaseStage?: ReleaseStage;
|
|
712
770
|
forkedFrom?: string;
|
|
713
771
|
owner?: string;
|
|
714
|
-
eventRouter?: EventRouter;
|
|
715
772
|
};
|
|
716
773
|
type Assets = {
|
|
717
774
|
icon: string;
|
|
@@ -792,6 +849,7 @@ type AuthenticationField = {
|
|
|
792
849
|
placeholder?: string;
|
|
793
850
|
description?: string;
|
|
794
851
|
tooltip?: string;
|
|
852
|
+
externalSystemAccountIdentifier?: boolean;
|
|
795
853
|
};
|
|
796
854
|
type SupportConfig = {
|
|
797
855
|
link?: string;
|
|
@@ -1068,6 +1126,14 @@ declare const getActionsMetaFromConnectors: (connectors: Connector[], include?:
|
|
|
1068
1126
|
declare const getActionsMetaSummary: (connector: Connector, include?: string[]) => ConnectorMetaSummary;
|
|
1069
1127
|
declare const getActionsMetaSummaryFromConnectors: (connectors: Connector[], include?: string[]) => ConnectorMetaSummary[];
|
|
1070
1128
|
//#endregion
|
|
1129
|
+
//#region src/runners/evaluateEventExtractionAction.d.ts
|
|
1130
|
+
declare const evaluateExternalAccountIdExtractorByConnector: (connector: Connector, context: {
|
|
1131
|
+
body: unknown;
|
|
1132
|
+
headers: Record<string, unknown>;
|
|
1133
|
+
path?: string;
|
|
1134
|
+
method: string;
|
|
1135
|
+
}) => string | undefined;
|
|
1136
|
+
//#endregion
|
|
1071
1137
|
//#region src/runners/executeStepFunctions.d.ts
|
|
1072
1138
|
declare const executeStepFunction: ({
|
|
1073
1139
|
block,
|
|
@@ -1363,4 +1429,4 @@ declare const runTestActions: ({
|
|
|
1363
1429
|
runStepActionFn?: typeof runStepAction;
|
|
1364
1430
|
}) => Promise<boolean>;
|
|
1365
1431
|
//#endregion
|
|
1366
|
-
export { ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type ErrorType, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type ValidationError, type ValidationErrorResponse, applyReleaseStageToConnector, createBlock, executeStepFunction, formatValidationErrorResponse, getActionFromUrl, getActionsMeta, getActionsMetaFromConnectors, getActionsMetaSummary, getActionsMetaSummaryFromConnectors, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseActionInputs, parseYamlConnector, runAction, runConnectorActionById, runConnectorActionByPath, runEventActionById, runStepAction, runTestActions, supportsRefreshAuthentication, validateYamlConnector };
|
|
1432
|
+
export { ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type ErrorType, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type ValidationError, type ValidationErrorResponse, applyReleaseStageToConnector, createBlock, evaluateExternalAccountIdExtractorByConnector, executeStepFunction, formatValidationErrorResponse, getActionFromUrl, getActionsMeta, getActionsMetaFromConnectors, getActionsMetaSummary, getActionsMetaSummaryFromConnectors, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseActionInputs, parseYamlConnector, runAction, runConnectorActionById, runConnectorActionByPath, runEventActionById, runStepAction, runTestActions, supportsRefreshAuthentication, validateYamlConnector };
|
package/dist/index.d.mts
CHANGED
|
@@ -337,10 +337,63 @@ type DefenderOptions = {
|
|
|
337
337
|
enabled?: boolean;
|
|
338
338
|
};
|
|
339
339
|
//#endregion
|
|
340
|
+
//#region ../olap/src/logs/types.d.ts
|
|
341
|
+
type ActionsQuery = {
|
|
342
|
+
organizationId?: string | string[];
|
|
343
|
+
projectSecureId?: string | string[];
|
|
344
|
+
actionRunId?: string | string[];
|
|
345
|
+
accountSecureId?: string | string[];
|
|
346
|
+
actionId?: string | string[];
|
|
347
|
+
connectorKey?: string | string[];
|
|
348
|
+
mode?: string | string[];
|
|
349
|
+
category?: string | string[];
|
|
350
|
+
success?: boolean;
|
|
351
|
+
startTime?: Date;
|
|
352
|
+
endTime?: Date;
|
|
353
|
+
pageNumber?: number;
|
|
354
|
+
pageSize?: number;
|
|
355
|
+
};
|
|
356
|
+
type ActionsQueryResult = {
|
|
357
|
+
actionLogs: ActionLog[];
|
|
358
|
+
total: number;
|
|
359
|
+
pageNumber: number;
|
|
360
|
+
pageSize: number;
|
|
361
|
+
};
|
|
362
|
+
type ActionLog = {
|
|
363
|
+
actionRunId: string;
|
|
364
|
+
actionId: string;
|
|
365
|
+
connectorKey: string;
|
|
366
|
+
connectorVersion: string;
|
|
367
|
+
organizationId: string;
|
|
368
|
+
projectSecureId: string;
|
|
369
|
+
accountSecureId: string;
|
|
370
|
+
mode?: string;
|
|
371
|
+
category?: string;
|
|
372
|
+
originOwnerId?: string;
|
|
373
|
+
originOwnerName?: string;
|
|
374
|
+
httpMethod?: string;
|
|
375
|
+
url?: string;
|
|
376
|
+
sourceType?: string;
|
|
377
|
+
sourceId?: string;
|
|
378
|
+
sourceValue?: string;
|
|
379
|
+
success?: boolean;
|
|
380
|
+
statusCode?: number;
|
|
381
|
+
startTime?: Date;
|
|
382
|
+
endTime?: Date;
|
|
383
|
+
durationMs?: number;
|
|
384
|
+
eventTime?: Date;
|
|
385
|
+
riskLevel?: string;
|
|
386
|
+
tier2Score?: number;
|
|
387
|
+
};
|
|
388
|
+
//#endregion
|
|
340
389
|
//#region ../olap/src/types.d.ts
|
|
341
390
|
interface IOlapClient {
|
|
342
391
|
recordAction(actionInput: ActionInput, actionResult: ActionResult, options?: OlapOptions): void;
|
|
343
392
|
recordStep(stepInput: StepInput, stepResult: StepResult, options?: OlapOptions): void;
|
|
393
|
+
getActions(organizationId: string, projectSecureId: string, query: ActionsQuery): Promise<ActionsQueryResult>;
|
|
394
|
+
getAction(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionLog | undefined>;
|
|
395
|
+
getAdvanced(organizationId: string, projectSecureId: string, actionRunId: string): Promise<string | undefined>;
|
|
396
|
+
getDefender(organizationId: string, projectSecureId: string, actionRunId: string): Promise<string | undefined>;
|
|
344
397
|
}
|
|
345
398
|
type DefenderContext = {
|
|
346
399
|
riskLevel: string;
|
|
@@ -687,6 +740,13 @@ type EventToEmit = {
|
|
|
687
740
|
eventDate?: string;
|
|
688
741
|
data?: unknown;
|
|
689
742
|
};
|
|
743
|
+
type ConnectorEvents = {
|
|
744
|
+
actions?: {
|
|
745
|
+
[actionId: string]: Action;
|
|
746
|
+
};
|
|
747
|
+
router?: EventRouter;
|
|
748
|
+
externalAccountIdExtractor?: Action;
|
|
749
|
+
};
|
|
690
750
|
type Connector = {
|
|
691
751
|
title: string;
|
|
692
752
|
version: string;
|
|
@@ -703,15 +763,12 @@ type Connector = {
|
|
|
703
763
|
actions?: {
|
|
704
764
|
[actionId: string]: Action;
|
|
705
765
|
};
|
|
706
|
-
|
|
707
|
-
[actionId: string]: Action;
|
|
708
|
-
};
|
|
766
|
+
events?: ConnectorEvents;
|
|
709
767
|
rateLimit?: RateLimitConfig;
|
|
710
768
|
concurrency?: ConcurrencyConfig;
|
|
711
769
|
releaseStage?: ReleaseStage;
|
|
712
770
|
forkedFrom?: string;
|
|
713
771
|
owner?: string;
|
|
714
|
-
eventRouter?: EventRouter;
|
|
715
772
|
};
|
|
716
773
|
type Assets = {
|
|
717
774
|
icon: string;
|
|
@@ -792,6 +849,7 @@ type AuthenticationField = {
|
|
|
792
849
|
placeholder?: string;
|
|
793
850
|
description?: string;
|
|
794
851
|
tooltip?: string;
|
|
852
|
+
externalSystemAccountIdentifier?: boolean;
|
|
795
853
|
};
|
|
796
854
|
type SupportConfig = {
|
|
797
855
|
link?: string;
|
|
@@ -1068,6 +1126,14 @@ declare const getActionsMetaFromConnectors: (connectors: Connector[], include?:
|
|
|
1068
1126
|
declare const getActionsMetaSummary: (connector: Connector, include?: string[]) => ConnectorMetaSummary;
|
|
1069
1127
|
declare const getActionsMetaSummaryFromConnectors: (connectors: Connector[], include?: string[]) => ConnectorMetaSummary[];
|
|
1070
1128
|
//#endregion
|
|
1129
|
+
//#region src/runners/evaluateEventExtractionAction.d.ts
|
|
1130
|
+
declare const evaluateExternalAccountIdExtractorByConnector: (connector: Connector, context: {
|
|
1131
|
+
body: unknown;
|
|
1132
|
+
headers: Record<string, unknown>;
|
|
1133
|
+
path?: string;
|
|
1134
|
+
method: string;
|
|
1135
|
+
}) => string | undefined;
|
|
1136
|
+
//#endregion
|
|
1071
1137
|
//#region src/runners/executeStepFunctions.d.ts
|
|
1072
1138
|
declare const executeStepFunction: ({
|
|
1073
1139
|
block,
|
|
@@ -1363,4 +1429,4 @@ declare const runTestActions: ({
|
|
|
1363
1429
|
runStepActionFn?: typeof runStepAction;
|
|
1364
1430
|
}) => Promise<boolean>;
|
|
1365
1431
|
//#endregion
|
|
1366
|
-
export { ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type ErrorType, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type ValidationError, type ValidationErrorResponse, applyReleaseStageToConnector, createBlock, executeStepFunction, formatValidationErrorResponse, getActionFromUrl, getActionsMeta, getActionsMetaFromConnectors, getActionsMetaSummary, getActionsMetaSummaryFromConnectors, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseActionInputs, parseYamlConnector, runAction, runConnectorActionById, runConnectorActionByPath, runEventActionById, runStepAction, runTestActions, supportsRefreshAuthentication, validateYamlConnector };
|
|
1432
|
+
export { ConnectSDKError, type ConnectorMeta, type ConnectorMetaEvent, type ConnectorMetaSummary, type ErrorType, type InputValidationError, InvalidActionInputsError, InvalidEventOutputError, type ValidationError, type ValidationErrorResponse, applyReleaseStageToConnector, createBlock, evaluateExternalAccountIdExtractorByConnector, executeStepFunction, formatValidationErrorResponse, getActionFromUrl, getActionsMeta, getActionsMetaFromConnectors, getActionsMetaSummary, getActionsMetaSummaryFromConnectors, getRefreshTokenExpiresIn, getTokenExpiresIn, isConnectorReleased, loadConnector, parseActionInputs, parseYamlConnector, runAction, runConnectorActionById, runConnectorActionByPath, runEventActionById, runStepAction, runTestActions, supportsRefreshAuthentication, validateYamlConnector };
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{t as e}from"./chunk-Cfxk5zVN.mjs";import{generateActionRunId as t,isMissing as n,isNumber as r,isObject as i,isString as a,notMissing as o,z as s,zStrictObject as c}from"@stackone/utils";import{match as l}from"path-to-regexp";import{readFileSync as u}from"fs";import{dirname as d,join as f,resolve as p}from"path";import{AUTHORIZATION_SCHEMA as m,COMPOSITE_ID_LATEST_VERSION as h,CoreError as g,ReleaseStages as _,StepFunctionName as v,StepFunctionsFactory as y,StepFunctionsRegistry as b,decodeCompositeId as x,encodeCompositeId as S,
|
|
1
|
+
import{t as e}from"./chunk-Cfxk5zVN.mjs";import{generateActionRunId as t,isMissing as n,isNumber as r,isObject as i,isString as a,notMissing as o,z as s,zStrictObject as c}from"@stackone/utils";import{match as l}from"path-to-regexp";import{readFileSync as u}from"fs";import{dirname as d,join as f,resolve as p}from"path";import{AUTHORIZATION_SCHEMA as m,COMPOSITE_ID_LATEST_VERSION as h,CoreError as g,ReleaseStages as _,StepFunctionName as v,StepFunctionsFactory as y,StepFunctionsRegistry as b,decodeCompositeId as x,encodeCompositeId as S,evaluateExternalAccountIdExtractor as C,expandCursor as w,getInputEnumValues as T,isCompositeId as E,isCursorEmpty as D,isForeachStep as O,isValidEnumRef as k,minifyCursor as A,updateCursor as j}from"@stackone/core";import{HttpErrorMessages as M,isSuccessStatusCode as N}from"@stackone/transport";import{parse as P}from"yaml";import{createPromptDefense as F}from"@stackone/defender";import{evaluate as I,safeEvaluate as L,safeEvaluateRecord as R}from"@stackone/expressions";const createBlock=async({connector:e,inputs:t,context:r,action:i,credentials:a,nextCursor:o,settings:s,logger:c,getHttpClient:l,getOlapClient:u,emitEvent:d})=>{if(n(l))throw Error(`getHttpClient function is required`);return{connector:e,inputs:t,fieldConfigs:[],context:r,action:i,credentials:a,nextCursor:o,httpClient:await l(),olapClient:u?await u():void 0,settings:s,logger:c,emitEvent:d}},getActionFromUrl=(e,t,n)=>{let r=n.toUpperCase();if(!e.actions)return;let i=testMatcher(t,r,Object.values(e.actions).filter(e=>o(e.endpoint)).map(e=>({actionId:e.id,endpoint:e.endpoint})));if(i)return{action:e.actions?.[i.actionId],params:i.params}},removeLeadingAndTrailingSlashes=e=>{let t=e.startsWith(`/`)?e.slice(1):e;return t.endsWith(`/`)?t.slice(0,-1):t},testMatcher=(e,t,n)=>{let r=removeLeadingAndTrailingSlashes(e);for(let e of n)if(e.endpoint?.startsWith(t)){let n=l(removeLeadingAndTrailingSlashes(e.endpoint.replace(`${t} `,``).trim()))(removeLeadingAndTrailingSlashes(r));if(n!==!1)return{actionId:e.actionId,path:e.endpoint,params:n.params}}},buildActionId=(e,t)=>t?.startsWith(`${e}_`)?t:`${e}_${t}`,resolveActionId=(e,t)=>{let n=`${e}_`;return t.startsWith(n)?t:`${n}${t}`},findActionByActionId=(e,t)=>e.actions?.[resolveActionId(e.key,t)],findEventActionByActionId=(e,t)=>e.events?.actions?.[resolveActionId(e.key,t)],loadConnector=e=>{if(!e.endsWith(`.s1.yaml`))throw Error(`File must have .s1.yaml extension`);try{let t=u(e,`utf8`);return!t.includes(`:`)||!t.includes(`$ref:`)?t:processYamlObject(t.split(`
|
|
2
2
|
`),d(e)).join(`
|
|
3
3
|
`)}catch(e){throw Error(`Failed to process YAML file: ${e.message}`)}},processYamlObject=(e,t)=>{let n=[];for(let r of e)if(isPartialReference(r)){let e=r.match(/^(\s*)/)?.[1]?.length||0,i=r.split(`:`)[1]?.trim(),a=loadPartialFile(i,t).map(t=>` `.repeat(e)+t);n.push(...a)}else n.push(r);return n},isPartialReference=e=>e.includes(`$ref:`),loadPartialFile=(e,t)=>{let n=p(f(t,`${e.replaceAll(`'`,``)}.s1.partial.yaml`));try{return u(n,`utf8`).split(`
|
|
4
|
-
`).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var R=class InternalConnectSDKError extends Error{constructor(e,t){super(t),this.name=`InternalConnectSDKError`,this.errorType=e,Error.captureStackTrace&&Error.captureStackTrace(this,InternalConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},InvalidYamlFileError=class extends R{constructor(e,t){super(`INVALID_YAML_FILE_ERROR`,t),this.name=`InvalidYamlFileError`,this.line=e??1}},SchemaValidationError=class extends R{constructor(e,t){super(`SCHEMA_VALIDATION_ERROR`,t),this.name=`SchemaValidationError`,this.issues=e}},InvalidStepFunctionError=class extends R{constructor(e,t,n,r=`1`){let i=`Invalid Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the function name and version are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends R{constructor(e,t,n,r=`1`,i){let a=`Invalid parameters for Step Function: '${n}' (v${r}) on step '${t}'. Please ensure the parameters are correct in the action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends R{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends R{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},InvalidEventRouterReferenceError=class extends R{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in eventActions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends R{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),z={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional()},B=s.discriminatedUnion(`type`,[c({...z,type:s.enum([`text`,`password`])}),c({...z,type:s.literal(`select`),options:c({value:s.string(),label:s.string()}).array()})]),V=c({targetFieldKey:s.string(),alias:s.string().optional(),expression:s.string().optional(),values:s.unknown().optional(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:s.boolean().default(!1),custom:s.boolean().default(!1),hidden:s.boolean().default(!1),enumMapper:c({matcher:s.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or(c({matchExpression:s.string(),value:s.string()}).array())}).optional(),properties:s.lazy(()=>V).array().optional(),requiredScopes:s.string().optional()}),H=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),U=c({name:s.string(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:s.boolean(),description:s.string(),array:s.boolean().optional().default(!1),arrayFormat:s.enum([`repeat`,`brackets`,`comma`]).optional(),in:s.enum([`body`,`query`,`path`,`headers`]),properties:s.lazy(()=>U.omit({in:!0})).array().optional(),oneOf:H.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'`}),W=s.object({exampleDescription:s.string().optional()}).catchall(s.unknown()),G=c({functionName:s.string(),version:s.string().optional(),parameters:s.record(s.string(),s.unknown())}),K=c({stepId:s.string(),description:s.string(),stepFunction:G,condition:s.string().optional(),ignoreError:s.boolean().optional()}),q=c({stepId:s.string(),description:s.string(),iterator:s.string(),stepFunction:G.optional(),stepFunctions:G.array().optional(),condition:s.string().optional(),ignoreError:s.boolean().optional()}).refine(e=>e.stepFunction!==void 0&&e.stepFunctions===void 0||e.stepFunction===void 0&&e.stepFunctions!==void 0,{message:`Exactly one of 'stepFunction' or 'stepFunctions' must be provided, not both`}),ee=c({allowed:s.boolean(),indexField:s.string().or(s.string().array())}),te=c({rules:c({when:s.string(),then:c({action:s.string(),input:s.record(s.string(),s.unknown()).optional()})}).array()}),J=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),schema:s.string().optional(),schemaType:s.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:s.string().optional(),entrypointHttpMethod:s.string().optional(),label:s.string(),description:s.string(),details:s.string().optional(),examples:W.array().optional(),tags:s.string().array().optional(),releaseStage:s.enum(_).optional(),resources:s.string().optional(),responses:c({statusCode:s.number(),description:s.string()}).array().optional(),requiredScopes:s.string().optional(),inputs:U.array().optional(),cursor:c({enabled:s.boolean(),pageSize:s.number()}).optional(),compositeIdentifiers:c({enabled:s.boolean(),version:s.number().optional(),fields:c({targetFieldKey:s.string(),remote:s.string().optional(),components:s.string().array()}).array().optional()}).optional(),fieldConfigs:V.array().optional(),steps:s.union([K,q]).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional(),dataSync:ee.optional()}),ne=c({schedule:s.string().optional(),action:J.extend({actionType:s.literal(`refresh_token`)})}),re=c({mainRatelimit:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),rateLimit:s.number()})).optional(),mappedRateLimitErrors:s.array(c({errorStatus:s.number(),errorMessage:s.string(),errorMessagePath:s.string().optional(),retryAfterPath:s.string().optional(),retryAfterUnit:s.union([s.literal(`seconds`),s.literal(`milliseconds`),s.literal(`date`)]).optional(),retryAfterValue:s.number().optional()})).optional()}),ie=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),Y=c({src:s.string(),alt:s.string()}),ae=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:Y.optional(),displayScopes:s.boolean().optional(),applicableScopes:s.string().optional()}),oe=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:Y.optional(),steps:ae.array().optional(),applicableScopes:s.string().optional()}),X=c({warning:s.string().optional(),sections:oe.array()}),se=c({config:X.optional(),setup:X.optional()}),Z=c({label:s.string(),authorization:m,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:se.optional()}).optional(),configFields:B.array().optional(),setupFields:B.array().optional(),refreshAuthentication:ne.optional(),testActions:c({action:s.string().or(J),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),ce=Z.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),le=Z.extend({type:s.literal(`custom`)}),ue=Z.extend({type:s.literal(`oidc`)}),de=s.discriminatedUnion(`type`,[ce,le,ue]),fe=c({StackOne:s.string(),info:c({title:s.string(),version:s.string(),key:s.string(),assets:c({icon:s.string()}),description:s.string(),details:s.string().optional()}),resources:s.string().optional(),baseUrl:s.string(),scopeDefinitions:s.record(s.string(),c({description:s.string(),includes:s.string().optional()})).optional(),authentication:s.record(s.string(),de).array().optional(),actions:J.array().optional(),eventActions:J.extend({actionType:s.literal(`event`)}).array().optional(),eventRouter:te.optional(),rateLimit:re.optional(),concurrency:ie.optional(),releaseStage:s.enum(_).optional(),forkedFrom:s.string().optional()}).strict(),toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,t,r)=>{if(n(r))return;if(o(r.link))return r;let i=r.guides?.config?.sections,a=toKebabCase(t);return o(i)&&i.length>0&&a!==``?{...r,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:r};function parseYamlConnector(e){try{let t=parseWithSchemaException(fe,N(e)),n=parseScopeDefinitions(t.scopeDefinitions),r={title:t.info.title,version:t.info.version,key:t.info.key,assets:t.info.assets,description:t.info.description,details:t.info.details,resources:t.resources,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},s=buildActionsFromYaml(t,a);r.actions=s,hydrateTestActions(t,t.info.key,i,s,a),r.authentication=i,o(s)&&(r.categories=getConnectorCategoriesFromActions(Object.values(s)));let c=buildEventActionsFromYaml(t,a);if(o(c)&&(r.eventActions=c),o(t.eventRouter)){let e=t.eventRouter,n=Object.keys(r.eventActions??{}),i=t.info.key,a=e.rules.map(e=>e.then.action);for(let e of a){let t=e.startsWith(`${i}_`)?e:`${i}_${e}`;if(!n.includes(t))throw new InvalidEventRouterReferenceError(e)}r.eventRouter=e}return r}catch(e){if(e instanceof R)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let s of Object.values(n)){for(let n of Object.values(s))n.testActions=n.testActions?.map((n,s)=>{if(o(n.action))if(typeof n.action==`string`){let e=buildActionId(t,n.action),i=Object.values(r).find(t=>t.id===e);if(i)return{...n,action:i}}else{let r=parseAction(e,[`authentication`,a,`testActions`,s],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r}}return n});a++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},parseScopesString=e=>o(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,t,r)=>{if(n(e))return e;let i=e.guides;if(n(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,t,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,t,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[],i=e.info.key;for(let[a,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);t[c]=s[c].environments.reduce((t,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let v=o(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(i,p.action.actionId),p.action)}:void 0,y=o(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,c,`support`]):void 0,b=o(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...o(b)?{support:b}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},t},{})}if(r.length>0)throw new MissingScopeDefinitionError(r);return t},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||n(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>(M(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),buildEventActionsFromYaml=(e,t)=>e.eventActions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`eventActions`,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&&!O(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,t,n)=>{if(!t||t.length===0)return;let r={};for(let e of n){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),r[e.name]=t}let i=s.object(r).strict();for(let n=0;n<t.length;n++){let{exampleDescription:r,...a}=t[n],o=i.safeParse(a);if(!o.success){let t=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,n,t)}}},parseAction=(e,t,r,i,a,o)=>{let s=inferEntrypointUrl(i),c=buildActionResponses(i),l=buildCursorConfig(i),u=i.inputs||[];l.enabled&&(u?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),u?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(r,u),validateExamplesMatchInputs(r,i.examples,u);let d=getEntrypointHttpMethod(i),f=new Set(Object.keys(e.scopeDefinitions||{})),p=[],m=parseScopesString(i.requiredScopes);if(Object.values(m??[]).forEach(e=>{f.has(e)||p.push({message:`Scope '${e}' included in action '${i.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),p.length>0)throw new MissingScopeDefinitionError(p);if(i.dataSync?.allowed===!0&&n(i.schema))throw new SchemaValidationError([{message:`The 'schema' field is required when 'dataSync.allowed' is true.`,path:[...t,`dataSync`],keys:[`allowed`]}]);return{id:r,categories:i.categories,label:i.label,description:i.description,details:i.details,examples:i.examples,actionType:i.actionType,schemaType:i.schemaType??`native`,entrypointUrl:i.entrypointUrl??s,entrypointHttpMethod:d,endpoint:o,tags:i.tags,releaseStage:i.releaseStage,resources:i.resources,responses:c,cursor:l,compositeIdentifiers:parseCompositeIdentifiersConfig(i),requiredScopes:m,inputs:u,steps:i.steps.reduce((n,r)=>{let parseStepFunctionMeta=n=>{let{customErrors:r,...o}=n.parameters??{},s=parseFieldConfigs(e,t,n.functionName===`map_fields`||n.functionName===`typecast`?o.fields??i.fieldConfigs:void 0);return{functionName:n.functionName,version:n.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:n.functionName,baseRequestParams:a,customErrors:r}),...s??{},...o}}},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError};if(`iterator`in r&&r.iterator){if(`stepFunction`in r&&r.stepFunction){let e={...o,iterator:r.iterator,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),n[r.stepId]=e}else if(`stepFunctions`in r&&r.stepFunctions){let e={...o,iterator:r.iterator,stepFunctions:r.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(i.actionId,e),n[r.stepId]=e}}else if(`stepFunction`in r&&r.stepFunction){let e={...o,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),n[r.stepId]=e}return n},{}),result:i.result,dataSync:i.dataSync}},parseFieldConfigs=(e,t,r)=>{if(n(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,n)=>{if(typeof e!=`object`||!e)return;let r=parseScopesString(e.requiredScopes);return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...t,`fieldConfigs`,n],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=b[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},validateStepFunctions=(e,t)=>{for(let n of t.stepFunctions){let r=n.version??`1`,i=b[n.functionName]?.[`v${r}`];if(!i)throw new InvalidStepFunctionError(e,t.id,n.functionName,r);let a=i.inputSchema;a&&parseStepFunctionParamsWithSchemaException(a,n.params,e,t.id,n.functionName,r)}},parseActionInputs=(e,t)=>{if(!e.inputs)return{};let n=createInputsSchema(e.inputs),r=s.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},createInputsSchema=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=buildZodSchemaFromInputType(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=s.object(t))}return n},buildEnumZodSchema=(e,t)=>{if(!t)throw Error(`Enum input "${e}" requires oneOf definition`);let n;if(`values`in t)n=t.values;else if(`ref`in t){let r=w(t.ref);if(!r)throw Error(`Unknown enum reference "${t.ref}" in input "${e}"`);n=r}else throw Error(`Invalid oneOf definition in input "${e}"`);if(n.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return s.enum(n)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=s.string();break;case`number`:t=s.number();break;case`boolean`:t=s.boolean();break;case`enum`:t=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=s.object(n)}else t=s.record(s.string(),s.unknown());break;default:t=s.unknown()}return e.array&&(t=s.array(t)),t},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||n(e.compositeIdentifiers))return{enabled:!1};let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`||e===`upload_binary`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if(o(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?o(getActionForRefreshAuthentication(e,t,n)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(t){if(t instanceof SchemaValidationError||t instanceof MissingScopeDefinitionError){let r=t.issues,i=[];return r.forEach(t=>{let r=t?.keys?.[0],a=n(r)?t.path:[...t.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:t.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(t instanceof InvalidYamlFileError)return{success:!1,errors:[{line:t.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(t instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!1,e),message:t.message,field:void 0}]};else if(t instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:t.message,field:`eventRouter`}]};else if(t instanceof InvalidStepFunctionParamsError){let r=t.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=n(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,t)=>{let r=t.split(`
|
|
4
|
+
`).filter(e=>e.trim()!==``)}catch(t){throw Error(`Failed to load partial file '${e}': ${t.message}`)}};var 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}},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 action '${e}'.`;super(`INVALID_STEP_FUNCTION`,i),this.name=`InvalidStepFunctionError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r}},InvalidStepFunctionParamsError=class extends 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 action '${e}'.`;super(`INVALID_STEP_FUNCTION_PARAMS`,a),this.name=`InvalidStepFunctionParamsError`,this.actionId=e,this.stepId=t,this.functionName=n,this.functionVersion=r,this.issues=i,this.message=a}},InvalidActionExampleError=class extends z{constructor(e,t,n){let r=`Invalid example ${t} for action '${e}': ${n.map(e=>`${e.path.join(`.`)}: ${e.message}`).join(`, `)}`;super(`INVALID_ACTION_EXAMPLE`,r),this.name=`InvalidActionExampleError`,this.actionId=e,this.exampleIndex=t,this.issues=n}},InvalidEnumReferenceError=class extends z{constructor(e,t,n){let r=`Invalid enum reference "${n}" in action "${e}", input "${t}". Check that the enum is defined in INPUT_ENUM_REGISTRY.`;super(`INVALID_ENUM_REFERENCE`,r),this.name=`InvalidEnumReferenceError`,this.actionId=e,this.inputName=t,this.enumRef=n}},InvalidEventRouterReferenceError=class extends z{constructor(e){let t=`Event router references unknown event action "${e}". Check that the operation is defined in events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends z{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),B={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),externalSystemIdentifier:s.boolean().optional(),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional()},V=s.discriminatedUnion(`type`,[c({...B,type:s.enum([`text`,`password`])}),c({...B,type:s.literal(`select`),options:c({value:s.string(),label:s.string()}).array()})]),H=c({targetFieldKey:s.string(),alias:s.string().optional(),expression:s.string().optional(),values:s.unknown().optional(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`enum`,`object`]),array:s.boolean().default(!1),custom:s.boolean().default(!1),hidden:s.boolean().default(!1),enumMapper:c({matcher:s.enum([`country_alpha2code_by_alpha2code`,`country_alpha3code_by_alpha3code`,`country_code_by_country_code`,`country_name_by_country_name`,`country_name_by_alpha3code`,`country_name_by_alpha2code`,`country_name_by_country_code`,`country_alpha3code_by_alpha2code`,`country_alpha3code_by_country_name`,`country_alpha3code_by_country_code`,`country_alpha2code_by_alpha3code`,`country_alpha2code_by_country_name`,`country_alpha2code_by_country_code`,`country_code_by_alpha2code`,`country_code_by_alpha3code`,`country_code_by_country_name`,`country_subdivisions_by_alpha2code`,`country_subdivision_code_by_subdivision_name`,`country_alpha2code_by_citizenship`,`country_subdivision_name_by_subdivision_code`,`document_file_format_from_extension`]).or(c({matchExpression:s.string(),value:s.string()}).array())}).optional(),properties:s.lazy(()=>H).array().optional(),requiredScopes:s.string().optional()}),U=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),W=c({name:s.string(),type:s.enum([`string`,`number`,`boolean`,`datetime_string`,`object`,`enum`]),required:s.boolean(),description:s.string(),array:s.boolean().optional().default(!1),arrayFormat:s.enum([`repeat`,`brackets`,`comma`]).optional(),in:s.enum([`body`,`query`,`path`,`headers`]),properties:s.lazy(()=>W.omit({in:!0})).array().optional(),oneOf:U.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}),G=s.object({exampleDescription:s.string().optional()}).catchall(s.unknown()),K=c({functionName:s.string(),version:s.string().optional(),parameters:s.record(s.string(),s.unknown())}),q=c({stepId:s.string(),description:s.string(),stepFunction:K,condition:s.string().optional(),ignoreError:s.boolean().optional()}),ee=c({stepId:s.string(),description:s.string(),iterator:s.string(),stepFunction:K.optional(),stepFunctions:K.array().optional(),condition:s.string().optional(),ignoreError:s.boolean().optional()}).refine(e=>e.stepFunction!==void 0&&e.stepFunctions===void 0||e.stepFunction===void 0&&e.stepFunctions!==void 0,{message:`Exactly one of 'stepFunction' or 'stepFunctions' must be provided, not both`}),te=c({allowed:s.boolean(),indexField:s.string().or(s.string().array())}),ne=c({rules:c({when:s.string(),then:c({action:s.string(),input:s.record(s.string(),s.unknown()).optional()})}).array()}),J=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),schema:s.string().optional(),schemaType:s.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:s.string().optional(),entrypointHttpMethod:s.string().optional(),label:s.string(),description:s.string(),details:s.string().optional(),examples:G.array().optional(),tags:s.string().array().optional(),releaseStage:s.enum(_).optional(),resources:s.string().optional(),responses:c({statusCode:s.number(),description:s.string()}).array().optional(),requiredScopes:s.string().optional(),inputs:W.array().optional(),cursor:c({enabled:s.boolean(),pageSize:s.number()}).optional(),compositeIdentifiers:c({enabled:s.boolean(),version:s.number().optional(),fields:c({targetFieldKey:s.string(),remote:s.string().optional(),components:s.string().array()}).array().optional()}).optional(),fieldConfigs:H.array().optional(),steps:s.union([q,ee]).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional(),dataSync:te.optional()}),re=c({schedule:s.string().optional(),action:J.extend({actionType:s.literal(`refresh_token`)})}),ie=c({mainRatelimit:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),rateLimit:s.number()})).optional(),mappedRateLimitErrors:s.array(c({errorStatus:s.number(),errorMessage:s.string(),errorMessagePath:s.string().optional(),retryAfterPath:s.string().optional(),retryAfterUnit:s.union([s.literal(`seconds`),s.literal(`milliseconds`),s.literal(`date`)]).optional(),retryAfterValue:s.number().optional()})).optional()}),ae=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),Y=c({src:s.string(),alt:s.string()}),oe=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:Y.optional(),displayScopes:s.boolean().optional(),applicableScopes:s.string().optional()}),se=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:Y.optional(),steps:oe.array().optional(),applicableScopes:s.string().optional()}),X=c({warning:s.string().optional(),sections:se.array()}),ce=c({config:X.optional(),setup:X.optional()}),Z=c({label:s.string(),authorization:m,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:ce.optional()}).optional(),configFields:V.array().optional(),setupFields:V.array().optional(),refreshAuthentication:re.optional(),testActions:c({action:s.string().or(J),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),le=Z.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),ue=Z.extend({type:s.literal(`custom`)}),de=Z.extend({type:s.literal(`oidc`)}),fe=s.discriminatedUnion(`type`,[le,ue,de]),pe=c({actions:J.extend({actionType:s.literal(`event`)}).array().optional(),router:ne.optional(),externalAccountIdExtractor:J.extend({actionType:s.literal(`custom`),result:s.string().min(1)}).optional()}),me=c({StackOne:s.string(),info:c({title:s.string(),version:s.string(),key:s.string(),assets:c({icon:s.string()}),description:s.string(),details:s.string().optional()}),resources:s.string().optional(),baseUrl:s.string(),scopeDefinitions:s.record(s.string(),c({description:s.string(),includes:s.string().optional()})).optional(),authentication:s.record(s.string(),fe).array().optional(),actions:J.array().optional(),events:pe.optional(),rateLimit:ie.optional(),concurrency:ae.optional(),releaseStage:s.enum(_).optional(),forkedFrom:s.string().optional()}).strict(),toKebabCase=e=>e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``),buildSupport=(e,t,r)=>{if(n(r))return;if(o(r.link))return r;let i=r.guides?.config?.sections,a=toKebabCase(t);return o(i)&&i.length>0&&a!==``?{...r,link:`https://docs.stackone.com/connectors/${e}/guides/link-account/${a}`}:r};function parseYamlConnector(e){try{let t=parseWithSchemaException(me,P(e)),n=parseScopeDefinitions(t.scopeDefinitions),r={title:t.info.title,version:t.info.version,key:t.info.key,assets:t.info.assets,description:t.info.description,details:t.info.details,resources:t.resources,rateLimit:t.rateLimit,concurrency:t.concurrency,releaseStage:t.releaseStage,forkedFrom:t.forkedFrom,scopeDefinitions:n},i=buildAuthenticationFromYaml(t),a={baseUrl:t.baseUrl,authentication:stripAuthenticationSetup(i)},s=buildActionsFromYaml(t,a);r.actions=s,hydrateTestActions(t,t.info.key,i,s,a),r.authentication=i,o(s)&&(r.categories=getConnectorCategoriesFromActions(Object.values(s)));let c=buildEventActionsFromYaml(t,a),l=t.events?.router,u=o(t.events?.externalAccountIdExtractor)?parseAction(t,[`events`,`externalAccountIdExtractor`],buildActionId(t.info.key,t.events.externalAccountIdExtractor.actionId),t.events.externalAccountIdExtractor,a,void 0):void 0;if((o(c)||o(l)||o(u))&&(r.events={actions:c,router:l,externalAccountIdExtractor:u}),o(l)){let e=Object.keys(r.events?.actions??{}),n=t.info.key,i=l.rules.map(e=>e.then.action);for(let t of i){let r=t.startsWith(`${n}_`)?t:`${n}_${t}`;if(!e.includes(r))throw new InvalidEventRouterReferenceError(t)}}return r}catch(e){if(e instanceof z)throw e;let t=e.message,n=t.match(/at line (\d+)/);throw new InvalidYamlFileError(n?parseInt(n[1],10):1,t)}}const parseScopeDefinitions=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=r?.includes?.split(` `).filter(e=>e.trim().length>0)??void 0;t[n]={name:n,description:r.description,includes:e}}let n=new Set(Object.keys(t)),r=[];if(Object.values(t).forEach(e=>{e.includes&&e.includes.forEach(t=>{n.has(t)||r.push({message:`Scope '${t}' included in scope '${e.name}' is not defined.`,path:[`scopeDefinitions`,e.name],keys:[`includes`]})})}),r.length>0)throw new MissingScopeDefinitionError(r);return t},stripAuthenticationSetup=e=>{let t={};for(let[n,r]of Object.entries(e))if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let s of Object.values(n)){for(let n of Object.values(s))n.testActions=n.testActions?.map((n,s)=>{if(o(n.action))if(typeof n.action==`string`){let e=buildActionId(t,n.action),i=Object.values(r).find(t=>t.id===e);if(i)return{...n,action:i}}else{let r=parseAction(e,[`authentication`,a,`testActions`,s],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r}}return n});a++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},parseScopesString=e=>o(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,t,r)=>{if(n(e))return e;let i=e.guides;if(n(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,t,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,t,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[],i=e.info.key;for(let[a,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);t[c]=s[c].environments.reduce((t,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let v=o(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(i,p.action.actionId),p.action)}:void 0,y=o(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,c,`support`]):void 0,b=o(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...o(b)?{support:b}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},t},{})}if(r.length>0)throw new MissingScopeDefinitionError(r);return t},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||n(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>(N(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!k(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,t,n)=>{if(!t||t.length===0)return;let r={};for(let e of n){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),r[e.name]=t}let i=s.object(r).strict();for(let n=0;n<t.length;n++){let{exampleDescription:r,...a}=t[n],o=i.safeParse(a);if(!o.success){let t=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,n,t)}}},parseAction=(e,t,r,i,a,o)=>{let s=inferEntrypointUrl(i),c=buildActionResponses(i),l=buildCursorConfig(i),u=i.inputs||[];l.enabled&&(u?.push({type:`string`,name:`page_size`,in:`query`,required:!1,description:`Number of items to return per page`,array:!1}),u?.push({type:`string`,name:`next`,in:`query`,required:!1,description:`Token for the next page of results`,array:!1})),validateEnumInputs(r,u),validateExamplesMatchInputs(r,i.examples,u);let d=getEntrypointHttpMethod(i),f=new Set(Object.keys(e.scopeDefinitions||{})),p=[],m=parseScopesString(i.requiredScopes);if(Object.values(m??[]).forEach(e=>{f.has(e)||p.push({message:`Scope '${e}' included in action '${i.actionId}' is not defined.`,path:t,keys:[`requiredScopes`]})}),p.length>0)throw new MissingScopeDefinitionError(p);if(i.dataSync?.allowed===!0&&n(i.schema))throw new SchemaValidationError([{message:`The 'schema' field is required when 'dataSync.allowed' is true.`,path:[...t,`dataSync`],keys:[`allowed`]}]);return{id:r,categories:i.categories,label:i.label,description:i.description,details:i.details,examples:i.examples,actionType:i.actionType,schemaType:i.schemaType??`native`,entrypointUrl:i.entrypointUrl??s,entrypointHttpMethod:d,endpoint:o,tags:i.tags,releaseStage:i.releaseStage,resources:i.resources,responses:c,cursor:l,compositeIdentifiers:parseCompositeIdentifiersConfig(i),requiredScopes:m,inputs:u,steps:i.steps.reduce((n,r)=>{let parseStepFunctionMeta=n=>{let{customErrors:r,...o}=n.parameters??{},s=parseFieldConfigs(e,t,n.functionName===`map_fields`||n.functionName===`typecast`?o.fields??i.fieldConfigs:void 0);return{functionName:n.functionName,version:n.version,params:{...getDefaultRequestStepFunctionsParams({stepFunctionName:n.functionName,baseRequestParams:a,customErrors:r}),...s??{},...o}}},o={id:r.stepId,description:r.description,condition:r.condition,ignoreError:r.ignoreError};if(`iterator`in r&&r.iterator){if(`stepFunction`in r&&r.stepFunction){let e={...o,iterator:r.iterator,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),n[r.stepId]=e}else if(`stepFunctions`in r&&r.stepFunctions){let e={...o,iterator:r.iterator,stepFunctions:r.stepFunctions.map(parseStepFunctionMeta)};validateStepFunctions(i.actionId,e),n[r.stepId]=e}}else if(`stepFunction`in r&&r.stepFunction){let e={...o,stepFunction:parseStepFunctionMeta(r.stepFunction)};validateStep(i.actionId,e),n[r.stepId]=e}return n},{}),result:i.result,dataSync:i.dataSync}},parseFieldConfigs=(e,t,r)=>{if(n(r)||!Array.isArray(r))return;let i=new Set(Object.keys(e.scopeDefinitions||{})),a=[],o=r.map((e,n)=>{if(typeof e!=`object`||!e)return;let r=parseScopesString(e.requiredScopes);return Object.values(r??[]).forEach(r=>{i.has(r)||a.push({message:`Scope '${r}' included in field config '${e.targetFieldKey}' is not defined.`,path:[...t,`fieldConfigs`,n],keys:[`requiredScopes`]})}),{...e,requiredScopes:r}});if(a.length>0)throw new MissingScopeDefinitionError(a);return{fields:o}},validateStep=(e,t)=>{let n=t.stepFunction.version??`1`,r=b[t.stepFunction.functionName]?.[`v${n}`];if(!r)throw new InvalidStepFunctionError(e,t.id,t.stepFunction.functionName,n);let i=r.inputSchema;i&&parseStepFunctionParamsWithSchemaException(i,t.stepFunction.params,e,t.id,t.stepFunction.functionName,n)},validateStepFunctions=(e,t)=>{for(let n of t.stepFunctions){let r=n.version??`1`,i=b[n.functionName]?.[`v${r}`];if(!i)throw new InvalidStepFunctionError(e,t.id,n.functionName,r);let a=i.inputSchema;a&&parseStepFunctionParamsWithSchemaException(a,n.params,e,t.id,n.functionName,r)}},parseActionInputs=(e,t)=>{if(!e.inputs)return{};let n=createInputsSchema(e.inputs),r=s.object(n).parse(t);return{...r.headers??{},...r.query??{},...r.path??{},...r.body??{}}},createInputsSchema=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=buildZodSchemaFromInputType(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=s.object(t))}return n},buildEnumZodSchema=(e,t)=>{if(!t)throw Error(`Enum input "${e}" requires oneOf definition`);let n;if(`values`in t)n=t.values;else if(`ref`in t){let r=T(t.ref);if(!r)throw Error(`Unknown enum reference "${t.ref}" in input "${e}"`);n=r}else throw Error(`Invalid oneOf definition in input "${e}"`);if(n.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return s.enum(n)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=s.string();break;case`number`:t=s.number();break;case`boolean`:t=s.boolean();break;case`enum`:t=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=s.object(n)}else t=s.record(s.string(),s.unknown());break;default:t=s.unknown()}return e.array&&(t=s.array(t)),t},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||n(e.compositeIdentifiers))return{enabled:!1};let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`||e===`upload_binary`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if(o(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?o(getActionForRefreshAuthentication(e,t,n)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},isConnectorReleased=(e,t=[])=>isAvailable(t,e.releaseStage),applyReleaseStageToConnector=(e,t=[])=>{if(!isConnectorReleased(e,t))return;let n={};if(e.actions)for(let[r,i]of Object.entries(e.actions))isAvailable(t,i.releaseStage)&&(n[r]=i);return{...e,actions:n}},getReleaseStateWithDefault=e=>e??`ga`,isAvailable=(e=[],t)=>{let n=getReleaseStateWithDefault(t);return e.includes(n)},validateYamlConnector=e=>{try{return{success:!0,connector:parseYamlConnector(e)}}catch(t){if(t instanceof SchemaValidationError||t instanceof MissingScopeDefinitionError){let r=t.issues,i=[];return r.forEach(t=>{let r=t?.keys?.[0],a=n(r)?t.path:[...t.path,r],o=getErrorLineNumber(a,e);i.push({line:o,message:t.message,field:a.join(`.`)})}),{success:!1,errors:i}}else if(t instanceof InvalidYamlFileError)return{success:!1,errors:[{line:t.line,message:`The YAML connector file is not valid. Please check the syntax and structure.`,field:void 0}]};else if(t instanceof InvalidStepFunctionError)return{success:!1,errors:[{line:getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!1,e),message:t.message,field:void 0}]};else if(t instanceof InvalidEventRouterReferenceError)return{success:!1,errors:[{line:1,message:t.message,field:`events.router`}]};else if(t instanceof InvalidStepFunctionParamsError){let r=t.issues,i=[];return r.forEach(r=>{let a=r?.keys?.[0],o=n(a)?r.path:[...r.path,a],s=getErrorLineNumberInAction(t.actionId,t.stepId,t.functionName,!0,e);i.push({line:s,message:r.message,field:o.join(`.`)})}),{success:!1,errors:i}}}return{success:!1,errors:[{line:1,message:`An unknown error occurred while parsing the connector.`,field:void 0}]}},getErrorLineNumber=(e,t)=>{let r=t.split(`
|
|
5
5
|
`),i=0,a=-1,s=0;for(let t=0;t<r.length;t++){let c=r[t],l=c.match(/^(\s*)/)?.[1]?.length||0,u=c.replace(`- `,``).trim();if(u.startsWith(`#`)||u===``||l<=a)continue;let d=o(e[i])?`${String(e[i])}`:``;if(n(d))return s+1;if(isNaN(Number(d))){if(u.startsWith(`${d}:`)){if(i===e.length-1)return t+1;a=l,s=t,i++}}else{let e=parseInt(d,10),n=-1;for(let a=t;a<r.length;a++)if(r[a].trim().startsWith(`-`)&&n++,n===e){i++,s=t,t--;break}else t++}}return s+1},getErrorLineNumberInAction=(e,t,r,i,a)=>{let s=a.split(`
|
|
6
|
-
`),c=1,l=null,u=null;for(let a=0;a<s.length;a++){let d=s[a].trim();if(n(l)&&d===`- actionId: ${e}`){l=e,c=a+1;continue}if(o(l)&&n(u)&&d===`- stepId: ${t}`){u=t,c=a+1;continue}if(o(l)&&o(u)&&!i&&d.includes(`functionName: ${r}`)||o(l)&&o(u)&&i&&d===`parameters:`)return c=a+1,c}return c};var Q=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends Q{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Q{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Q{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Q{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends Q{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getEventActionsMeta=e=>Object.values(e.eventActions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,release_stage:e.releaseStage,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e),o=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=y.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===v.MAP_FIELDS?{[v.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,connectorOwner:i,authConfigKey:a,environment:o=`production`,action:s,accountSecureId:c,projectSecureId:l,organizationId:u,originOwnerId:d,originOwnerName:f,sourceType:p,sourceId:m,sourceValue:h})=>({organizationId:u,projectSecureId:l,accountSecureId:c,connectorKey:n,connectorVersion:r,connectorOwner:i,category:e,service:``,resource:``,originOwnerId:d,originOwnerName:f,source:{sourceType:p,sourceId:m,sourceValue:h},schema:s?.schema?.key,actionType:s?.actionType??`unknown`,authenticationType:a,environment:o,actionRunId:t()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const decodeInputCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!t?.enabled||n(r))return e;let i=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:t.version??h,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=x(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof g&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},$=`remote_`,encodeResultCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers;if(!t?.enabled)return e;let r=`data`,i=e.outputs?.[r];if(n(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,t)):mapCompositeIds(i,t);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,t)=>{let n=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,t));return{...e,...i(n)?n:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??h,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=S(a.length===1?a[0]:{identifiers:a},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=o,t.remote&&(r[`${$}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>a(e)&&e.length>0),shouldSkipEncoding=(e,t)=>T(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return S({key:e,value:t},{version:h})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>a(t)&&t.length>0&&!T(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=S({key:e,value:t},{version:h}),n[`remote_${e}`]=t)},processIdField=(e,t,n)=>{isValidStringArray(t)?processStringArrayField(e,t,n):a(t)&&t.length>0&&processStringField(e,t,n)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!i(e))return e;let t={...e};for(let[n,r]of Object.entries(e))(i(r)||Array.isArray(r)&&r.length>0&&i(r[0]))&&(t[n]=mapCompositeIdsFromInference(r)),isIdField(n)&&processIdField(n,r,t);return t},getPageSize=(e,t)=>{let n=Number(e.inputs?.page_size);return o(e.inputs?.page_size)&&r(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t},virtualPaginateResult=(e,t,r,a)=>{let s=n(e)?void 0:e.data,c=Object.keys(r).length+1,l=E({cursor:a,ignoreStepIndex:c});if(!i(e)||n(s)||(s?.length??0)<=t)return{result:e,next:o(a)&&!l?k(a):null};let u=a?.remote?.[c]?.pageNumber??1,d=(u-1)*t,f=d+t,p=s.slice(d,f),m=s.length>f||!l,h=A({cursor:a,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?k(h):null}},getOlapOptions=e=>{let t=e?.olap;if(n(t))return{};let r=t.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=t.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},runStepAction=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],shouldSkipStepDueToCondition=(e,t)=>e.condition?!I(e.condition,t):!1,buildStepParamsForFunction=(e,t,n)=>{let r=b[e.functionName]?.[`v${e.version??1}`],i=o(r?.inputSchema?.shape)?`cursor`in r?.inputSchema?.shape:!1;return t.action?.cursor.enabled&&i?{...e.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=n[e];return shouldSkipStepDueToCondition(s,r)?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`}):D(s)?executeForeachStep(e,t,s,r,i,a,o):executeSimpleStep(e,t,s,r,i,a,o)},executeSimpleStep=async(e,t,n,r,i,a,o)=>{let s=new Date,c=n.stepFunction;if(!c)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`});let l=a.buildStepFunction({functionName:c.functionName,version:c.version,validateSchemas:!0}).fn,u=await l({block:r,params:buildStepParams(n,r,t)});if(u.successful===!1)return handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?addStepResultToBlock({block:{...u.block,streamOutput:u.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let d=r.action?.cursor.enabled?A({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return addStepResultToBlock({block:{...u.block,nextCursor:d},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date})},executeForeachStep=async(e,t,n,r,a,o,s)=>{let c=new Date,l=I(n.iterator,r);if(!Array.isArray(l))return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let u=getStepFunctionsToExecute(n);if(u.length===0)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`});let d=[],f=r,p,m={};for(let[r,s]of l.entries()){let l={...f,iterator:{item:s,index:r}};for(let d of u){let u=o.buildStepFunction({functionName:d.functionName,version:d.version,validateSchemas:!0}).fn,h=buildStepParamsForFunction(d,l,t),g=await u({block:l,params:h});if(p=g,g.successful===!1&&!(n.ignoreError??!1))return a.hasFatalError=!0,a.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,output:g.output,errors:g.errors}},addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,functionOutput:g,startTime:c,endTime:new Date});if(l={...g.block,iterator:{item:s,index:r,current:g.output}},g.streamOutput)return a.hasFatalError=!0,a.errorStatusCode=500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`})}f=l,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:p?.successful??!0,output:p?.output,errors:p?.errors}},p?.output&&d.push(p.output)}let h=r.action?.cursor.enabled?A({cursor:r.nextCursor,stepIndex:t,providerPageCursor:p?.output?.next,position:p?.output?.position}):void 0,g={block:f,successful:!0,output:{data:d}};return addStepResultToBlock({block:{...f,nextCursor:h,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!0,functionOutput:g,startTime:c,endTime:new Date})},buildFinalResponse=(e,t,n,r,a)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??j?.[c]??`Error while processing the request`}};let l=o(a)&&i(a.result)?{next:a.next,...a.result}:r;return{...t,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??j?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=getPageSize(e,25),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=e===a.length-1;i=await executeStep(t,e,r,i,s,c,n)}let l=e.action?.result?evaluateResult(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return buildFinalResponse(e,i,s,l,u)},evaluateResult=(e,t)=>i(e)?L(e,t):I(e,t),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:t,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if(n(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:t,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},applyDefenderToBlock=async(e,t,n,r)=>{let{defenderMetadata:i,outputs:a,response:s}=await t({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:n,logger:r});return{...e,defenderMetadata:i,...o(a)&&{outputs:a},...o(s)&&{response:s}}},runAction=async e=>{let{pathParams:t={},queryParams:r={},body:i={},headers:s={},parseConnector:c=parseYamlConnector,parseActionInputsFn:l=parseActionInputs,createBlockContextFn:u=createBlockContext,createBlockFn:d=createBlock,runStepActionFn:f=runStepAction,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,getTestActionsFn:h=getTestActions,applyDefenderFn:g=applyDefender,mode:_,account:v,connector:y,getHttpClient:b,getOlapClient:x,settings:S,source:C,logger:w,category:T,...E}=e,D=v.authConfigKey,O=v.environment??`production`,k=v.secureId,A=v.projectSecureId,j=v.organizationId,M=v.credentials,N=v.originOwnerId,P=v.originOwnerName,I=u({category:T??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,connectorOwner:v.connectorOwner,authConfigKey:D,environment:O,accountSecureId:k,projectSecureId:A,organizationId:j,originOwnerId:N,originOwnerName:P,sourceType:C?.sourceType,sourceId:C?.sourceId,sourceValue:C?.sourceValue}),L=new Date,R;try{R=a(y)?c(y):y}catch{throw new ConnectorParseError(I,`Error while parsing connector`)}let z={connector:R,context:I,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:a}=E,o=findActionByActionId(R,a);if(n(o))throw new MissingActionError(I,`No matching action found`);let c=await executeAction({action:o,blockContext:I,queryParams:r,pathParams:t,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:z,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:L,endTime:new Date},recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(_===`test_actions`){let t=h(R,D,O);if(n(t)||t.length===0)return await createSuccessBlock(d,z);I.actionType=`test`;for(let r of t){let t=new Date,i=await d({...z,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!o(r.condition)||F(r.condition,i)))continue;let a=await f({block:i});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(n(a?.response?.successful)||!a.response.successful)&&r.required){w?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let n=await createErrorBlock(d,z);return n.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(d,z);return r.statistics={startTime:L,endTime:new Date},r}else if(_===`refresh_authentication`){let t=m(R,D,O);if(n(t))throw new MissingActionError(I,`No matching action found`);let a=await executeAction({action:t.action,blockContext:I,queryParams:r,pathParams:t.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:z,runStepActionFn:f});return a=await applyDefenderToBlock(a,g,S,w),a.statistics={startTime:L,endTime:new Date},recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(_===`path`){let{path:t,method:a}=E,o=p(R,t,a);if(n(o))throw new MissingActionError(I,`No matching action found`);let c=await executeAction({action:o.action,blockContext:I,queryParams:r,pathParams:o.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:z,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:L,endTime:new Date},recordActionResult({action:o.action,actionParams:e,resultBlock:c}),c}else return await createErrorBlock(d,z)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,t)=>{let n=e?.next,r=o(n)&&t.actionType===`list`?C(n):void 0;if(r===null)throw new InvalidCursorError(t,`Invalid cursor.`);return r},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 P({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useDefaultToolRules:r?.defender?.useDefaultToolRules??!1,tier2Fields:r?.defender?.tier2Fields,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=({action:e,actionParams:t,resultBlock:r})=>{if(n(e)){t.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if(n(i?.recordAction)){t.logger?.warning({message:`olap client is missing, skipping recording action result`});return}let a=getOlapOptions(t.settings),o={actionId:e.id,mode:t.mode,url:e?.entrypointUrl,pathParams:t?.pathParams,queryParams:t?.queryParams,body:t?.body,headers:t?.headers,sourceId:t.source?.sourceId,sourceType:t.source?.sourceType,sourceValue:t.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:t.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata?.result?{riskLevel:r.defenderMetadata.result.riskLevel,tier2Score:r.defenderMetadata.result.tier2Score??0}:void 0};i.recordAction(o,c,a)},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:t,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:t.providerKey,connectorVersion:t.providerVersion,authConfigKey:t.authConfigKey,environment:t.environment??`production`,accountSecureId:t.secureId,projectSecureId:t.projectSecureId,organizationId:t.organizationId,originOwnerId:t.originOwnerId,originOwnerName:t.originOwnerName,connectorOwner:t.connectorOwner}),g=u(r,e);if(n(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1;export{Q as ConnectSDKError,InvalidActionInputsError,InvalidEventOutputError,applyReleaseStageToConnector,createBlock,executeStepFunction,formatValidationErrorResponse,getActionFromUrl,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runEventActionById,runStepAction,runTestActions,supportsRefreshAuthentication,validateYamlConnector};
|
|
6
|
+
`),c=1,l=null,u=null;for(let a=0;a<s.length;a++){let d=s[a].trim();if(n(l)&&d===`- actionId: ${e}`){l=e,c=a+1;continue}if(o(l)&&n(u)&&d===`- stepId: ${t}`){u=t,c=a+1;continue}if(o(l)&&o(u)&&!i&&d.includes(`functionName: ${r}`)||o(l)&&o(u)&&i&&d===`parameters:`)return c=a+1,c}return c};var Q=class ConnectSDKError extends Error{constructor(e,t,n){super(n),this.name=`ConnectSDKError`,this.errorType=e,this.context=t,Error.captureStackTrace&&Error.captureStackTrace(this,ConnectSDKError)}toString(){return`${this.name} [${this.errorType}]: ${this.message}`}},ConnectorParseError=class extends Q{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends Q{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends Q{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends Q{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends Q{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>({type:`custom`,label:e.authentication?.[t].production?.label||`Custom`,key:t,required_scopes:e.authentication?.[t].production?.requiredScopes})),getScopeDefinitions=e=>Object.values(e.scopeDefinitions??{}),getActionsCount=e=>Object.keys(e?.actions??{}).length,getEventActionsMeta=e=>Object.values(e.events?.actions??{}).map(e=>({id:e.id,label:e.label,description:e.description,tags:e.tags,release_stage:e.releaseStage})),getActionsMeta=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getActionAuthenticationMethods(e),i=Object.values(e?.actions??{}).map(e=>({id:e.id,description:e.description,label:e.label.replace(/(^|\s)\w/g,e=>e.toUpperCase()),schema_type:e.schemaType,tags:e.tags,required_scopes:e.requiredScopes,release_stage:e.releaseStage,authentication:r,action_details:t?.includes(`action_details`)?e:void 0})),a=getScopeDefinitions(e),o=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:a.length>0?a:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:i.length,actions:i,event_actions:o.length>0?o:void 0}},getActionsMetaFromConnectors=(e,t)=>e.map(e=>getActionsMeta(e,t)),getActionsMetaSummary=(e,t)=>{let n=getConnectorAuthenticationMethods(e,t),r=getScopeDefinitions(e),i=getEventActionsMeta(e);return{version:e.version,name:e.title,key:e.key,icon:e.assets?.icon,description:e.description,categories:e.categories,authentication:n,scope_definitions:r.length>0?r:void 0,release_stage:e.releaseStage,owner:e.owner,actions_count:getActionsCount(e),event_actions:i.length>0?i:void 0}},getActionsMetaSummaryFromConnectors=(e,t)=>e.map(e=>getActionsMetaSummary(e,t)),evaluateExternalAccountIdExtractorByConnector=(e,t)=>C(e,t),executeStepFunction=async({block:e,stepFunctionName:t,params:n,buildStepFunction:r=y.build})=>{let i=r({functionName:t}).fn,a=await i({block:e,params:n}),o=t===v.MAP_FIELDS?{[v.MAP_FIELDS.toString()]:{output:{data:a.block.result},errors:a.errors,successful:a.successful}}:{};return{...a.block,steps:{...a?.block?.steps??{},...o}}},createBlockContext=({category:e,connectorKey:n,connectorVersion:r,connectorOwner:i,authConfigKey:a,environment:o=`production`,action:s,accountSecureId:c,projectSecureId:l,organizationId:u,originOwnerId:d,originOwnerName:f,sourceType:p,sourceId:m,sourceValue:h})=>({organizationId:u,projectSecureId:l,accountSecureId:c,connectorKey:n,connectorVersion:r,connectorOwner:i,category:e,service:``,resource:``,originOwnerId:d,originOwnerName:f,source:{sourceType:p,sourceId:m,sourceValue:h},schema:s?.schema?.key,actionType:s?.actionType??`unknown`,authenticationType:a,environment:o,actionRunId:t()}),getTestActions=(e,t,n)=>e.authentication?.[t]?.[n]?.testActions;function extractStrings(e){let t=[];function traverse(e){typeof e==`string`?t.push(e):Array.isArray(e)?e.forEach(traverse):e&&typeof e==`object`&&Object.values(e).forEach(traverse)}return traverse(e),t}function estimateResponseSize(e){try{let t=JSON.stringify(e);return{bytes:Buffer.byteLength(t,`utf8`),words:extractStrings(e).join(` `).split(/\s+/).filter(Boolean).length}}catch{return{bytes:0,words:0}}}function shouldSkipDefender(e,t){if(!t?.enabled)return{skip:!0,reason:`disabled`};let n=t.maxResponseSize??1048576,r=t.maxResponseWords??1e4,i=estimateResponseSize(e);return i.bytes>n||i.words>r?(t.largeResponseBehavior??`skip`)===`skip`?{skip:!0,reason:`size_limit`,size:i}:{skip:!1,size:i}:{skip:!1}}const decodeInputCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers,r={...e.inputs??{}};if(!t?.enabled||n(r))return e;let i=t.fields?.reduce((e,t)=>(t.components.forEach(t=>{t.alias&&(e[t.name]=t.alias)}),e),{});return processLevel(r,{version:t.version??h,aliases:i},e.logger),{...e,inputs:r}},processLevel=(e,t,n)=>{for(let r in e){let i=e[r];if(typeof i==`string`||Array.isArray(i)&&i.every(e=>typeof e==`string`))processCompositeId(i,r,e,t,n);else if(Array.isArray(i))for(let e of i)processLevel(e,t,n);else typeof i==`object`&&i&&processLevel(i,t,n)}},processInputElements=(e,t,n,r)=>{let i=[],a=[];for(let o of e)try{let e=x(o,n);i.push(e)}catch(e){r?.debug({message:`Received ${t} with invalid composite ID, assuming it is not a composite ID`,category:`processCompositeId`,context:{key:t,inputElement:o,compositeIdentifierConfig:n,error:e}}),a.push(o)}return{compositeIdComponents:i,nonCompositeIds:a}},setDecodedIds=(e,t,n,r)=>{let i=n.filter(e=>Object.keys(e).length>1);i.length>0&&(e.decoded_ids={...e.decoded_ids??{},[t]:r?i:i[0]})},shouldSimplifyComponent=e=>{let t=Object.values(e);return t.length===1&&(typeof t[0]==`string`||typeof t[0]==`number`)},setSimplifiedIds=(e,t,n,r,i)=>{n.every(shouldSimplifyComponent)&&(i?e[t]=[...n.map(e=>Object.values(e)[0]),...r]:n.length>0&&(e[t]=Object.values(n[0])[0]))},handleCompositeIdError=(e,t,n)=>{e instanceof g&&e.type===`COMPOSITE_ID_MISSING_HEADER_ERROR`?n?.debug({message:`Received ${t} with no composite ID header, assuming it is not a composite ID`}):n?.warning({message:`Error processing composite ID for ${t}, ignoring it`,error:e})},processCompositeId=(e,t,n,r,i)=>{try{let a=Array.isArray(e),o=a?e:[e];if(o.length===0)return;let{compositeIdComponents:s,nonCompositeIds:c}=processInputElements(o,t,r,i);setDecodedIds(n,t,s,a),setSimplifiedIds(n,t,s,c,a)}catch(e){handleCompositeIdError(e,t,i)}},$=`remote_`,encodeResultCompositeIdentifiers=e=>{let t=e.action?.compositeIdentifiers;if(!t?.enabled)return e;let r=`data`,i=e.outputs?.[r];if(n(i))return e;let a=Array.isArray(i)?i.map(e=>mapCompositeIds(e,t)):mapCompositeIds(i,t);return{...e,outputs:{...e.outputs??{},[r]:a}}},mapCompositeIds=(e,t)=>{let n=mapCompositeIdsFromInference(mapConfiguredCompositeIds(e,t));return{...e,...i(n)?n:{}}},mapConfiguredCompositeIds=(e,t)=>{let n=t.version??h,r={};return t.fields?.forEach(t=>{let i={},a=[];t.components.forEach(t=>{t.alias&&(i[t.name]=t.alias),a.push({key:t.name,value:e[t.name]})});let o=S(a.length===1?a[0]:{identifiers:a},{version:n,aliases:Object.keys(i).length>0?i:void 0});r[t.targetFieldKey]=o,t.remote&&(r[`${$}${t.remote}`]=e[t.remote])}),{...e,...r}},isIdField=e=>e===`id`||/.+_id(s)?$/.test(e),isValidStringArray=e=>Array.isArray(e)&&e.every(e=>a(e)&&e.length>0),shouldSkipEncoding=(e,t)=>E(e)||t.startsWith($),encodeStringValue=(e,t)=>{try{return S({key:e,value:t},{version:h})}catch{return t}},processStringArrayField=(e,t,n)=>{n[e]=t.map(t=>a(t)&&t.length>0&&!E(t)?encodeStringValue(e,t):t),n[`${$}${e}`]=t},processStringField=(e,t,n)=>{shouldSkipEncoding(t,e)||(n[e]=S({key:e,value:t},{version:h}),n[`remote_${e}`]=t)},processIdField=(e,t,n)=>{isValidStringArray(t)?processStringArrayField(e,t,n):a(t)&&t.length>0&&processStringField(e,t,n)},mapCompositeIdsFromInference=e=>{if(Array.isArray(e))return e.map(e=>mapCompositeIdsFromInference(e));if(!i(e))return e;let t={...e};for(let[n,r]of Object.entries(e))(i(r)||Array.isArray(r)&&r.length>0&&i(r[0]))&&(t[n]=mapCompositeIdsFromInference(r)),isIdField(n)&&processIdField(n,r,t);return t},getPageSize=(e,t)=>{let n=Number(e.inputs?.page_size);return o(e.inputs?.page_size)&&r(n)&&!Number.isNaN(n)?n:e.action?.cursor?.pageSize??t},virtualPaginateResult=(e,t,r,a)=>{let s=n(e)?void 0:e.data,c=Object.keys(r).length+1,l=D({cursor:a,ignoreStepIndex:c});if(!i(e)||n(s)||(s?.length??0)<=t)return{result:e,next:o(a)&&!l?A(a):null};let u=a?.remote?.[c]?.pageNumber??1,d=(u-1)*t,f=d+t,p=s.slice(d,f),m=s.length>f||!l,h=j({cursor:a,stepIndex:c,pageNumber:u+1});return{result:{...e,data:p},next:m?A(h):null}},getOlapOptions=e=>{let t=e?.olap;if(n(t))return{};let r=t.logs,i=r&&typeof r.enabled==`boolean`?{enabled:r.enabled}:void 0,a=t.advanced,o=a?{}:void 0;return a&&o&&(typeof a.enabled==`boolean`&&(o.enabled=a.enabled),typeof a.ttl==`number`&&(o.ttl=a.ttl),typeof a.errorsOnly==`boolean`&&(o.errorsOnly=a.errorsOnly),typeof a.includeBackground==`boolean`&&(o.includeBackground=a.includeBackground)),{logs:i,advanced:o}},runStepAction=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult,encodeResultCompositeIds:r=encodeResultCompositeIdentifiers,decodeInputCompositeIds:i=decodeInputCompositeIdentifiers})=>r(await executeStepsWorkflow({block:i(e),buildStepFunction:t,virtualPaginateResultFn:n})),getStepFunctionsToExecute=e=>`stepFunctions`in e&&e.stepFunctions?e.stepFunctions:`stepFunction`in e&&e.stepFunction?[e.stepFunction]:[],shouldSkipStepDueToCondition=(e,t)=>e.condition?!L(e.condition,t):!1,buildStepParamsForFunction=(e,t,n)=>{let r=b[e.functionName]?.[`v${e.version??1}`],i=o(r?.inputSchema?.shape)?`cursor`in r?.inputSchema?.shape:!1;return t.action?.cursor.enabled&&i?{...e.params??{},cursor:{token:t.nextCursor?.remote?.[n]?.providerPageCursor,position:t.nextCursor?.remote?.[n]?.position}}:e.params??{}},buildStepParams=(e,t,n)=>e.stepFunction?buildStepParamsForFunction(e.stepFunction,t,n):{},handleStepFailure=(e,t,n,r,i,a,o,s)=>{let c=addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=n[e];return shouldSkipStepDueToCondition(s,r)?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped due to previous error.`}):O(s)?executeForeachStep(e,t,s,r,i,a,o):executeSimpleStep(e,t,s,r,i,a,o)},executeSimpleStep=async(e,t,n,r,i,a,o)=>{let s=new Date,c=n.stepFunction;if(!c)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Step function is not defined.`});let l=a.buildStepFunction({functionName:c.functionName,version:c.version,validateSchemas:!0}).fn,u=await l({block:r,params:buildStepParams(n,r,t)});if(u.successful===!1)return handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?addStepResultToBlock({block:{...u.block,streamOutput:u.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let d=r.action?.cursor.enabled?j({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return addStepResultToBlock({block:{...u.block,nextCursor:d},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date})},executeForeachStep=async(e,t,n,r,a,o,s)=>{let c=new Date,l=L(n.iterator,r);if(!Array.isArray(l))return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let u=getStepFunctionsToExecute(n);if(u.length===0)return addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`});let d=[],f=r,p,m={};for(let[r,s]of l.entries()){let l={...f,iterator:{item:s,index:r}};for(let d of u){let u=o.buildStepFunction({functionName:d.functionName,version:d.version,validateSchemas:!0}).fn,h=buildStepParamsForFunction(d,l,t),g=await u({block:l,params:h});if(p=g,g.successful===!1&&!(n.ignoreError??!1))return a.hasFatalError=!0,a.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,output:g.output,errors:g.errors}},addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,functionOutput:g,startTime:c,endTime:new Date});if(l={...g.block,iterator:{item:s,index:r,current:g.output}},g.streamOutput)return a.hasFatalError=!0,a.errorStatusCode=500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`})}f=l,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:p?.successful??!0,output:p?.output,errors:p?.errors}},p?.output&&d.push(p.output)}let h=r.action?.cursor.enabled?j({cursor:r.nextCursor,stepIndex:t,providerPageCursor:p?.output?.next,position:p?.output?.position}):void 0,g={block:f,successful:!0,output:{data:d}};return addStepResultToBlock({block:{...f,nextCursor:h,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!0,functionOutput:g,startTime:c,endTime:new Date})},buildFinalResponse=(e,t,n,r,a)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??M?.[c]??`Error while processing the request`}};let l=o(a)&&i(a.result)?{next:a.next,...a.result}:r;return{...t,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??M?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=y.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},a=Object.keys(r),o=getPageSize(e,25),s={hasFatalError:!1,errorStatusCode:null},c={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of a.entries()){let n=e===a.length-1;i=await executeStep(t,e,r,i,s,c,n)}let l=e.action?.result?evaluateResult(e.action.result,i):void 0,u=e.action?.cursor.enabled?n(l,o,r,i.nextCursor):void 0;return buildFinalResponse(e,i,s,l,u)},evaluateResult=(e,t)=>i(e)?R(e,t):L(e,t),addStepResultToBlock=({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(recordStepResult({stepId:t,stepIndex:n,block:e,skipped:a,successful:r,functionOutput:i,message:o,startTime:s,endTime:c}),{...e,steps:{...e.steps,[t]:{successful:r??i?.successful??!1,errors:i?.errors,output:i?.output,skipped:a,message:o}}}),recordStepResult=({stepId:e,stepIndex:t,block:r,skipped:i=!1,successful:a,functionOutput:o,message:s,startTime:c,endTime:l})=>{let u=r.olapClient;if(n(u?.recordStep))return;let d=getOlapOptions(r.settings),f={actionRunId:r.context.actionRunId??`unknown`,stepIndex:t,stepId:e,organizationId:r.context?.organizationId??`unknown`,projectSecureId:r.context?.projectSecureId??`unknown`,accountSecureId:r.context?.accountSecureId??`unknown`,inputs:r.inputs},p={skipped:i,success:a??o?.successful,message:s,outputs:o?.output,errors:o?.errors,startTime:c,endTime:l};u.recordStep(f,p,d)},applyDefenderToBlock=async(e,t,n,r)=>{let{defenderMetadata:i,outputs:a,response:s}=await t({outputs:e.outputs,streamOutput:`streamOutput`in e?e.streamOutput:void 0,toolName:e.action?.id??e.context?.connectorKey??``,settings:n,logger:r});return{...e,defenderMetadata:i,...o(a)&&{outputs:a},...o(s)&&{response:s}}},runAction=async e=>{let{pathParams:t={},queryParams:r={},body:i={},headers:s={},parseConnector:c=parseYamlConnector,parseActionInputsFn:l=parseActionInputs,createBlockContextFn:u=createBlockContext,createBlockFn:d=createBlock,runStepActionFn:f=runStepAction,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,getTestActionsFn:h=getTestActions,applyDefenderFn:g=applyDefender,mode:_,account:v,connector:y,getHttpClient:b,getOlapClient:x,settings:S,source:C,logger:w,category:T,...E}=e,D=v.authConfigKey,O=v.environment??`production`,k=v.secureId,A=v.projectSecureId,j=v.organizationId,M=v.credentials,N=v.originOwnerId,P=v.originOwnerName,F=u({category:T??`action`,connectorKey:v.providerKey,connectorVersion:v.providerVersion,connectorOwner:v.connectorOwner,authConfigKey:D,environment:O,accountSecureId:k,projectSecureId:A,organizationId:j,originOwnerId:N,originOwnerName:P,sourceType:C?.sourceType,sourceId:C?.sourceId,sourceValue:C?.sourceValue}),L=new Date,R;try{R=a(y)?c(y):y}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let z={connector:R,context:F,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:a}=E,o=findActionByActionId(R,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o,blockContext:F,queryParams:r,pathParams:t,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:z,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:L,endTime:new Date},recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(_===`test_actions`){let t=h(R,D,O);if(n(t)||t.length===0)return await createSuccessBlock(d,z);F.actionType=`test`;for(let r of t){let t=new Date,i=await d({...z,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!o(r.condition)||I(r.condition,i)))continue;let a=await f({block:i});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(n(a?.response?.successful)||!a.response.successful)&&r.required){w?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let n=await createErrorBlock(d,z);return n.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(d,z);return r.statistics={startTime:L,endTime:new Date},r}else if(_===`refresh_authentication`){let t=m(R,D,O);if(n(t))throw new MissingActionError(F,`No matching action found`);let a=await executeAction({action:t.action,blockContext:F,queryParams:r,pathParams:t.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:z,runStepActionFn:f});return a=await applyDefenderToBlock(a,g,S,w),a.statistics={startTime:L,endTime:new Date},recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(_===`path`){let{path:t,method:a}=E,o=p(R,t,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o.action,blockContext:F,queryParams:r,pathParams:o.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:z,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:L,endTime:new Date},recordActionResult({action:o.action,actionParams:e,resultBlock:c}),c}else return await createErrorBlock(d,z)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,t)=>{let n=e?.next,r=o(n)&&t.actionType===`list`?w(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 F({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,useDefaultToolRules:r?.defender?.useDefaultToolRules??!1,tier2Fields:r?.defender?.tier2Fields,...r?.defender?.highRiskThreshold!==void 0||r?.defender?.mediumRiskThreshold!==void 0?{tier2Config:{...r.defender.highRiskThreshold!==void 0&&{highRiskThreshold:r.defender.highRiskThreshold},...r.defender.mediumRiskThreshold!==void 0&&{mediumRiskThreshold:r.defender.mediumRiskThreshold}}}:{}}).defendToolResult(e,n);return i?.info({message:`Defender applied`,context:{tool:n,riskLevel:t.riskLevel,allowed:t.allowed,fieldsSanitized:t.fieldsSanitized.length,latencyMs:t.latencyMs}}),{defenderMetadata:{applied:!0,result:{allowed:t.allowed,riskLevel:t.riskLevel,fieldsSanitized:t.fieldsSanitized,patternsByField:t.patternsByField,detections:t.detections,tier2Score:t.tier2Score,tier2SkipReason:t.tier2SkipReason,latencyMs:t.latencyMs}},outputs:t.sanitized,...!t.allowed&&{response:{successful:!1,statusCode:403,message:`Tool result blocked by security policy`}}}}catch(e){return i?.error({code:`DefenderError`,message:`Defender failed: ${e.message}`,context:{tool:n}}),{defenderMetadata:{applied:!1,skipped:{reason:`error`,error:e.message}}}}},recordActionResult=({action:e,actionParams:t,resultBlock:r})=>{if(n(e)){t.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if(n(i?.recordAction)){t.logger?.warning({message:`olap client is missing, skipping recording action result`});return}let a=getOlapOptions(t.settings),o={actionId:e.id,mode:t.mode,url:e?.entrypointUrl,pathParams:t?.pathParams,queryParams:t?.queryParams,body:t?.body,headers:t?.headers,sourceId:t.source?.sourceId,sourceType:t.source?.sourceType,sourceValue:t.source?.sourceValue},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:t.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,startTime:r.statistics?.startTime,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata?.result?{riskLevel:r.defenderMetadata.result.riskLevel,tier2Score:r.defenderMetadata.result.tier2Score??0}:void 0};i.recordAction(o,c,a)},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:t,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:t.providerKey,connectorVersion:t.providerVersion,authConfigKey:t.authConfigKey,environment:t.environment??`production`,accountSecureId:t.secureId,projectSecureId:t.projectSecureId,organizationId:t.organizationId,originOwnerId:t.originOwnerId,originOwnerName:t.originOwnerName,connectorOwner:t.connectorOwner}),g=u(r,e);if(n(g))throw new MissingActionError(h,`No matching event action found`);h.actionType=`event`,h.schema=g.schema?.key;let _=d(g,{body:i,headers:a}),v=new Date,y=await p({connector:r,context:h,credentials:t.credentials,logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,inputs:_,action:g,nextCursor:void 0}),b;try{b=await m({block:y})}catch(t){throw o?.error({code:`EventActionError`,message:`Event action "${e}" failed: ${t.message}`}),t}if(b.statistics={startTime:v,endTime:new Date},typeof b.outputs?.statusCode!=`number`)throw new InvalidEventOutputError(h,`Event action output must include a numeric statusCode`);return b},runTestActions=async({account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s=parseYamlConnector,getTestActionsFn:c=getTestActions,createBlockContextFn:l=createBlockContext,createBlockFn:u=createBlock,runStepActionFn:d=runStepAction})=>(await runAction({mode:`test_actions`,account:e,connector:t,settings:n,source:r,logger:i,getHttpClient:a,getOlapClient:o,parseConnector:s,getTestActionsFn:c,createBlockContextFn:l,createBlockFn:u,runStepActionFn:d}))?.response?.successful??!1;export{Q as ConnectSDKError,InvalidActionInputsError,InvalidEventOutputError,applyReleaseStageToConnector,createBlock,evaluateExternalAccountIdExtractorByConnector,executeStepFunction,formatValidationErrorResponse,getActionFromUrl,getActionsMeta,getActionsMetaFromConnectors,getActionsMetaSummary,getActionsMetaSummaryFromConnectors,getRefreshTokenExpiresIn,getTokenExpiresIn,isConnectorReleased,loadConnector,parseActionInputs,parseYamlConnector,runAction,runConnectorActionById,runConnectorActionByPath,runEventActionById,runStepAction,runTestActions,supportsRefreshAuthentication,validateYamlConnector};
|