@stackone/connect-sdk 2.49.0 → 2.50.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3,4 +3,4 @@ var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});
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
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),externalSystemAccountIdentifier:t.z.boolean().optional(),readOnly:t.z.boolean().optional().default(!1),placeholder:t.z.string().optional(),description:t.z.string().optional(),tooltip:t.z.string().optional(),value:t.z.string().optional(),computed:t.z.boolean().optional()},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()})]).superRefine((e,n)=>{e.computed===!0&&!e.value&&n.addIssue({code:t.z.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),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)({minLength:t.z.number().optional(),maxLength:t.z.number().optional(),pattern:t.z.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:t.z.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:t.z.number().optional(),max:t.z.number().optional(),errorMessage:t.z.string().optional()}),_=(0,t.zStrictObject)({field:t.z.string(),equals:t.z.string().optional(),notEquals:t.z.string().optional(),present:t.z.boolean().optional()}).refine(e=>[e.equals!==void 0,e.notEquals!==void 0,e.present!==void 0].filter(Boolean).length===1,{message:`Condition must specify exactly one of: equals, notEquals, present`}),v=t.z.discriminatedUnion(`rule`,[(0,t.zStrictObject)({rule:t.z.literal(`atLeastOneOf`),fields:t.z.string().array().min(2),errorMessage:t.z.string().optional()}),(0,t.zStrictObject)({rule:t.z.literal(`requiredIf`),field:t.z.string(),condition:_,errorMessage:t.z.string().optional()}),(0,t.zStrictObject)({rule:t.z.literal(`mutuallyExclusive`),fields:t.z.string().array().min(2),errorMessage:t.z.string().optional()})]),y=(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(()=>y.omit({in:!0})).array().optional(),oneOf:h.optional(),rules:g.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}).refine(e=>e.rules&&(e.rules.minLength!==void 0||e.rules.maxLength!==void 0||e.rules.pattern!==void 0||e.rules.format!==void 0)?e.type===`string`||e.type===`datetime_string`:!0,{message:`String rules (minLength, maxLength, pattern, format) can only be used with string or datetime_string types`}).refine(e=>e.rules&&(e.rules.min!==void 0||e.rules.max!==void 0)?e.type===`number`:!0,{message:`Number rules (min, max) can only be used with number type`}),b=t.z.object({exampleDescription:t.z.string().optional()}).catchall(t.z.unknown()),x=(0,t.zStrictObject)({functionName:t.z.string(),version:t.z.string().optional(),parameters:t.z.record(t.z.string(),t.z.unknown())}),S=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),stepFunction:x,condition:t.z.string().optional(),ignoreError:t.z.boolean().optional()}),C=(0,t.zStrictObject)({stepId:t.z.string(),description:t.z.string(),iterator:t.z.string(),stepFunction:x.optional(),stepFunctions:x.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`}),w=(0,t.zStrictObject)({allowed:t.z.boolean(),indexField:t.z.string().or(t.z.string().array())}),T=(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()}),E=(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:b.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:y.array().optional(),validationRules:v.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([S,C]).array(),result:t.z.string().or(t.z.record(t.z.string(),t.z.unknown())).optional(),dataSync:w.optional()}),D=(0,t.zStrictObject)({schedule:t.z.string().optional(),action:E.extend({actionType:t.z.literal(`refresh_token`)})}),O=(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()}),k=(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()}),A=(0,t.zStrictObject)({src:t.z.string(),alt:t.z.string()}),j=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:A.optional(),displayScopes:t.z.boolean().optional(),applicableScopes:t.z.string().optional()}),M=(0,t.zStrictObject)({title:t.z.string(),content:t.z.string(),list:t.z.string().array().optional(),image:A.optional(),steps:j.array().optional(),applicableScopes:t.z.string().optional()}),N=(0,t.zStrictObject)({warning:t.z.string().optional(),sections:M.array()}),P=(0,t.zStrictObject)({config:N.optional(),setup:N.optional()}),F=(0,t.zStrictObject)({certs:t.z.string().array().optional(),keys:t.z.string().array().optional()}).optional(),I=(0,t.zStrictObject)({label:t.z.string(),authorization:a.AUTHORIZATION_SCHEMA,certificates:F,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:P.optional()}).optional(),configFields:p.array().optional(),setupFields:p.array().optional(),refreshAuthentication:D.optional(),testActions:(0,t.zStrictObject)({action:t.z.string().or(E),condition:t.z.string().optional(),required:t.z.boolean().default(!0)}).array().optional()}),L=I.extend({type:t.z.literal(`oauth2`),grantType:t.z.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),R=I.extend({type:t.z.literal(`custom`)}),z=I.extend({type:t.z.literal(`oidc`)}),B=t.z.discriminatedUnion(`type`,[L,R,z]),V=(0,t.zStrictObject)({actions:E.extend({actionType:t.z.literal(`event`)}).array().optional(),router:T.optional(),externalAccountIdExtractor:E.extend({actionType:t.z.literal(`custom`),result:t.z.string().min(1)}).optional()}),H=(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(),B).array().optional(),actions:E.array().optional(),events:V.optional(),rateLimit:O.optional(),concurrency:k.optional(),releaseStage:t.z.enum(a.ReleaseStages).optional(),forkedFrom:t.z.string().optional()}).strict(),U=`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(H,(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(Array.isArray(r))t[n]=r;else if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,n,r,i,a)=>{if(!r||!i)return;let o=0;for(let s of Object.values(r)){for(let r of Object.values(s))r.testActions=r.testActions?.map((r,s)=>{if((0,t.notMissing)(r.action))if(typeof r.action==`string`){let e=buildActionId(n,r.action),t=Object.values(i).find(t=>t.id===e);if(t)return{...r,action:t}}else{let t=parseAction(e,[`authentication`,o,`testActions`,s],buildActionId(n,r.action.actionId),r.action,a);return{...r,action:t}}return r});o++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},parseScopesString=e=>(0,t.notMissing)(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,n,r)=>{if((0,t.isMissing)(e))return e;let i=e.guides;if((0,t.isMissing)(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,n,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,n,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},buildAuthenticationFromYaml=e=>{let n={},r=new Set(Object.keys(e.scopeDefinitions||{})),i=[],a=e.info.key;for(let[o,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);n[c]=s[c].environments.reduce((n,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{r.has(e)||i.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,o],keys:[`requiredScopes`]})});let v=(0,t.notMissing)(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,o,`refreshAuthentication`,`action`],buildActionId(a,p.action.actionId),p.action)}:void 0,y=(0,t.notMissing)(g.support)?parseSupportGuides(g.support,r,[`authentication`,o,c,`support`]):void 0,b=(0,t.notMissing)(y)?buildSupport(a,g.label,y):void 0;return n[u]={...g,...(0,t.notMissing)(b)?{support:b}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},n},{})}if(i.length>0)throw new MissingScopeDefinitionError(i);return n},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||(0,t.isMissing)(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>((0,o.isSuccessStatusCode)(t.statusCode)?e.success={statusCode:t.statusCode,description:t.description}:e.errors[t.statusCode]={statusCode:t.statusCode,description:t.description},e),t)??t},buildActionsFromYaml=(e,t)=>e.actions?.reduce((n,r,i)=>{let a=buildActionKey(r),o=inferActionKey(r),s=a??o,c=buildActionId(e.info.key,r.actionId);return n[c]=parseAction(e,[`actions`,i],c,r,t,s),n},{}),buildEventActionsFromYaml=(e,t)=>e.events?.actions?.reduce((n,r,i)=>{let a=buildActionId(e.info.key,r.actionId);return n[a]=parseAction(e,[`events`,`actions`,i],a,r,t,void 0),n},{}),validateEnumInputs=(e,t)=>{if(t){for(let n of t)if(n.type===`enum`&&n.oneOf&&`ref`in n.oneOf&&!(0,a.isValidEnumRef)(n.oneOf.ref))throw new InvalidEnumReferenceError(e,n.name,n.oneOf.ref)}},validateExamplesMatchInputs=(e,n,r)=>{if(!n||n.length===0)return;let i={};for(let e of r){let t=buildZodSchemaFromInputType(e);e.required||(t=t.optional()),i[e.name]=t}let a=t.z.object(i).strict();for(let t=0;t<n.length;t++){let{exampleDescription:r,...i}=n[t],o=a.safeParse(i);if(!o.success){let n=o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:[]}));throw new InvalidActionExampleError(e,t,n)}}},validateActionRuleFieldReferences=(e,t,n,r)=>{if(!n||n.length===0)return;let i=new Set(r.map(e=>e.name)),a=[];for(let r of n){let n=[];switch(r.rule){case`atLeastOneOf`:case`mutuallyExclusive`:n.push(...r.fields);break;case`requiredIf`:n.push(r.field,r.condition.field);break}for(let o of n)i.has(o)||a.push({message:`Validation rule '${r.rule}' in action '${e}' references unknown field '${o}'`,path:[...t,`validationRules`],keys:[o]})}if(a.length>0)throw new SchemaValidationError(a)},parseAction=(e,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),validateActionRuleFieldReferences(r,n,i.validationRules,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,validationRules:i.validationRules,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),a={...i.headers??{},...i.query??{},...i.path??{},...i.body??{}};return e.validationRules&&e.validationRules.length>0&&validateActionRules(e.validationRules,a,e.inputs),a},createInputsSchema=e=>{let n=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),r={};for(let[e,i]of Object.entries(n)){let n={};for(let e of i){let t=buildZodSchemaFromInputType(e);e.description&&(t=t.describe(e.description)),e.required||(t=t.optional()),n[e.name]=t}Object.keys(n).length>0&&(r[e]=t.z.object(n))}return r},buildEnumZodSchema=(e,n)=>{if(!n)throw Error(`Enum input "${e}" requires oneOf definition`);let r;if(`values`in n)r=n.values;else if(`ref`in n){let t=(0,a.getInputEnumValues)(n.ref);if(!t)throw Error(`Unknown enum reference "${n.ref}" in input "${e}"`);r=t}else throw Error(`Invalid oneOf definition in input "${e}"`);if(r.length===0)throw Error(`Enum input "${e}" must have at least one allowed value`);return t.z.enum(r)},W={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uri:/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/},applyInputRules=(e,t,n)=>{let r=t.errorMessage;if(n===`string`||n===`datetime_string`){let n=e;if(t.minLength!==void 0&&(n=n.min(t.minLength,r)),t.maxLength!==void 0&&(n=n.max(t.maxLength,r)),t.pattern!==void 0&&(n=n.regex(new RegExp(t.pattern),r)),t.format!==void 0){let e=W[t.format];e&&(n=n.regex(e,r??`Must be a valid ${t.format}`))}return n}if(n===`number`){let n=e;return t.min!==void 0&&(n=n.min(t.min,r)),t.max!==void 0&&(n=n.max(t.max,r)),n}return e},validateActionRules=(e,n,r)=>{let i=[],a={};if(r)for(let e of r)a[e.name]=e.in;let fieldPath=e=>{let t=a[e];return t?[t,e]:[e]};for(let t of e)switch(t.rule){case`atLeastOneOf`:if(!t.fields.some(e=>n[e]!==void 0&&n[e]!==null))for(let e of t.fields)i.push({code:`custom`,message:t.errorMessage??`At least one of [${t.fields.join(`, `)}] is required`,path:fieldPath(e),input:n});break;case`requiredIf`:{let e=n[t.condition.field],r=!1;if(t.condition.equals!==void 0)r=String(e)===t.condition.equals;else if(t.condition.notEquals!==void 0)r=String(e)!==t.condition.notEquals;else if(t.condition.present!==void 0){let n=e!=null;r=t.condition.present?n:!n}r&&(n[t.field]===void 0||n[t.field]===null)&&i.push({code:`custom`,message:t.errorMessage??`Field "${t.field}" is required when condition is met`,path:fieldPath(t.field),input:n});break}case`mutuallyExclusive`:{let e=t.fields.filter(e=>n[e]!==void 0&&n[e]!==null);if(e.length>1)for(let r of e)i.push({code:`custom`,message:t.errorMessage??`Fields [${t.fields.join(`, `)}] are mutually exclusive`,path:fieldPath(r),input:n});break}}if(i.length>0)throw new t.z.ZodError(i)},buildZodSchemaFromInputType=e=>{let n;switch(e.type){case`string`:case`datetime_string`:n=t.z.string();break;case`number`:n=t.z.number();break;case`boolean`:n=t.z.boolean();break;case`enum`:n=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let r={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),r[t.name]=e}n=t.z.object(r)}else n=t.z.record(t.z.string(),t.z.unknown());break;default:n=t.z.unknown()}return e.rules&&(n=applyInputRules(n,e.rules,e.type)),e.array&&(n=t.z.array(n)),n},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||(0,t.isMissing)(e.compositeIdentifiers))return{enabled:!1};let n=[];for(let t of e.compositeIdentifiers?.fields??[]){let r=t.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));n.push({targetFieldKey:t.targetFieldKey,remote:t.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:n.length>0?n:void 0}},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`||e===`upload_binary`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,n,r)=>{if(e.authentication?.[n]?.[r]?.type!==`oauth2`)return;let i=e.authentication?.[n]?.[r]?.refreshAuthentication?.action;if((0,t.notMissing)(i))return{action:i,params:{}}},supportsRefreshAuthentication=(e,n,r)=>e.authentication?.[n]?.[r]?.type===`oauth2`?(0,t.notMissing)(getActionForRefreshAuthentication(e,n,r)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},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 G=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 G{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends G{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends G{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends G{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends G{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t].production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),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)}},K=`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[`${K}${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(K),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[`${K}${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=async(e,t,n,r,i,a,o,s)=>{let c=await addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,o,s)=>{let c=n[e];return shouldSkipStepDueToCondition(c,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?await 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 await 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 await handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?await addStepResultToBlock({block:{...d.block,streamOutput:d.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let f=r.action?.cursor.enabled?(0,a.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:d.output?.next,position:d.output?.position}):void 0;return await addStepResultToBlock({block:{...d.block,nextCursor:f},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date})},executeForeachStep=async(e,n,r,i,o,s,c)=>{let u=new Date,d=(0,l.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let f=getStepFunctionsToExecute(r);if(f.length===0)return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`});let p=[],m=i,h,g={};for(let[i,a]of d.entries()){let c={...m,iterator:{item:a,index:i}};for(let l of f){let d=s.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,f=buildStepParamsForFunction(l,c,n),p=await d({block:c,params:f});if(h=p,p.successful===!1&&!(r.ignoreError??!1))return o.hasFatalError=!0,o.errorStatusCode??=p.output?.statusCode??500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,output:p.output,errors:p.errors}},await addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,functionOutput:p,startTime:u,endTime:new Date});if(c={...p.block,iterator:{item:a,index:i,current:p.output}},p.streamOutput)return o.hasFatalError=!0,o.errorStatusCode=500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},await addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`})}m=c,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:h?.successful??!0,output:h?.output,errors:h?.errors}},h?.output&&p.push(h.output)}let _=i.action?.cursor.enabled?(0,a.updateCursor)({cursor:i.nextCursor,stepIndex:n,providerPageCursor:h?.output?.next,position:h?.output?.position}):void 0,v={block:m,successful:!0,output:{data:p}};return await addStepResultToBlock({block:{...m,nextCursor:_,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!0,functionOutput:v,startTime:u,endTime:new Date})},buildFinalResponse=(e,n,r,i,a)=>{let s=!r.hasFatalError,c=s?e.action?.responses.success.statusCode??200:r.errorStatusCode??500;if(n.streamOutput)return{...n,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}};let l=(0,t.notMissing)(a)&&(0,t.isObject)(a.result)?{next:a.next,...a.result}:i;return{...n,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},o=Object.keys(r),s=getPageSize(e,25),c={hasFatalError:!1,errorStatusCode:null},l={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of o.entries()){let n=e===o.length-1;i=await executeStep(t,e,r,i,c,l,n)}let u=e.action?.result?evaluateResult(e.action.result,i):void 0,d=e.action?.cursor.enabled?n(u,s,r,i.nextCursor):void 0;return buildFinalResponse(e,i,c,u,d)},evaluateResult=(e,n)=>(0,t.isObject)(e)?(0,l.safeEvaluateRecord)(e,n):(0,l.safeEvaluate)(e,n),addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(await 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=async({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};try{await u.recordStep(f,p,d)}catch(e){r.logger?.warning({message:`Failed to record step result: ${e.message}`,error:e})}},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},await recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(g===`test_actions`){let n=m(I,E,D);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,L);P.actionType=`test`;for(let r of n){let n=new Date,i=await u({...L,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,l.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(a=await applyDefenderToBlock(a,applyDefender,x,C),((0,t.isMissing)(a?.response?.successful)||!a.response.successful)&&r.required){C?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let t=await createErrorBlock(u,L);return t.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,L);return r.statistics={startTime:F,endTime:new Date},r}else if(g===`refresh_authentication`){let n=p(I,E,D);if((0,t.isMissing)(n))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:n.action,blockContext:P,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return o=await applyDefenderToBlock(o,h,x,C),o.statistics={startTime:F,endTime:new Date},await recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(g===`path`){let{path:n,method:o}=T,c=f(I,n,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,L)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,n)=>{let r=e?.next,i=(0,t.notMissing)(r)&&n.actionType===`list`?(0,a.expandCursor)(r):void 0;if(i===null)throw new InvalidCursorError(n,`Invalid cursor.`);return i},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await(0,c.createPromptDefense)({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,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=async({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e)){n.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if((0,t.isMissing)(i?.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};try{await i.recordAction(o,c,a)}catch(e){n.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),q=`stackone://internal//`,J=`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=G,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;
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 G=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 G{constructor(e,t){super(`CONNECTOR_PARSE_ERROR`,e,t),this.name=`ConnectorParseError`}},MissingActionError=class extends G{constructor(e,t){super(`MISSING_ACTION_ERROR`,e,t),this.name=`MissingActionError`}},InvalidActionInputsError=class extends G{constructor(e,t,n){super(`INVALID_ACTION_INPUTS_ERROR`,e,t),this.name=`InvalidActionInputsError`,this.validationErrors=n}},InvalidCursorError=class extends G{constructor(e,t){super(`INVALID_CURSOR_ERROR`,e,t),this.name=`InvalidCursorError`}},InvalidEventOutputError=class extends G{constructor(e,t){super(`INVALID_EVENT_OUTPUT_ERROR`,e,t),this.name=`InvalidEventOutputError`}};const getConnectorAuthenticationMethods=(e,t)=>{let n=t?.includes(`authentication_guides`);return Object.keys(e.authentication??{}).map(t=>{let r=e.authentication?.[t].production,i={type:`custom`,label:r?.label||`Custom`,key:t,required_scopes:r?.requiredScopes,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t].production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),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)}},K=`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[`${K}${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(K),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[`${K}${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=async(e,t,n,r,i,a,o,s)=>{let c=await addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,o,s)=>{let c=n[e];return shouldSkipStepDueToCondition(c,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?await 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 await 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 await handleStepFailure(r,e,t,d,n,i,c,new Date);if(d.streamOutput)return s?await addStepResultToBlock({block:{...d.block,streamOutput:d.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let f=r.action?.cursor.enabled?(0,a.updateCursor)({cursor:r.nextCursor,stepIndex:t,providerPageCursor:d.output?.next,position:d.output?.position}):void 0;return await addStepResultToBlock({block:{...d.block,nextCursor:f},stepId:e,stepIndex:t,successful:!0,functionOutput:d,startTime:c,endTime:new Date})},executeForeachStep=async(e,n,r,i,o,s,c)=>{let u=new Date,d=(0,l.safeEvaluate)(r.iterator,i);if(!Array.isArray(d))return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let f=getStepFunctionsToExecute(r);if(f.length===0)return await addStepResultToBlock({block:i,stepId:e,stepIndex:n,successful:!1,message:`No step functions defined for foreach step.`});let p=[],m=i,h,g={};for(let[i,a]of d.entries()){let c={...m,iterator:{item:a,index:i}};for(let l of f){let d=s.buildStepFunction({functionName:l.functionName,version:l.version,validateSchemas:!0}).fn,f=buildStepParamsForFunction(l,c,n),p=await d({block:c,params:f});if(h=p,p.successful===!1&&!(r.ignoreError??!1))return o.hasFatalError=!0,o.errorStatusCode??=p.output?.statusCode??500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,output:p.output,errors:p.errors}},await addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,functionOutput:p,startTime:u,endTime:new Date});if(c={...p.block,iterator:{item:a,index:i,current:p.output}},p.streamOutput)return o.hasFatalError=!0,o.errorStatusCode=500,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},await addStepResultToBlock({block:{...m,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!1,message:`Stream output is not supported in foreach steps.`})}m=c,g[i]={iterator:(0,t.isObject)(a)?void 0:String(a),snapshot:{successful:h?.successful??!0,output:h?.output,errors:h?.errors}},h?.output&&p.push(h.output)}let _=i.action?.cursor.enabled?(0,a.updateCursor)({cursor:i.nextCursor,stepIndex:n,providerPageCursor:h?.output?.next,position:h?.output?.position}):void 0,v={block:m,successful:!0,output:{data:p}};return await addStepResultToBlock({block:{...m,nextCursor:_,intermediateSteps:{...m.intermediateSteps,[e]:g}},stepId:e,stepIndex:n,successful:!0,functionOutput:v,startTime:u,endTime:new Date})},buildFinalResponse=(e,n,r,i,a)=>{let s=!r.hasFatalError,c=s?e.action?.responses.success.statusCode??200:r.errorStatusCode??500;if(n.streamOutput)return{...n,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}};let l=(0,t.notMissing)(a)&&(0,t.isObject)(a.result)?{next:a.next,...a.result}:i;return{...n,outputs:l,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??o.HttpErrorMessages?.[c]??`Error while processing the request`}}},executeStepsWorkflow=async({block:e,buildStepFunction:t=a.StepFunctionsFactory.build,virtualPaginateResultFn:n=virtualPaginateResult})=>{let r=e.action?.steps||{},i={...e},o=Object.keys(r),s=getPageSize(e,25),c={hasFatalError:!1,errorStatusCode:null},l={block:e,buildStepFunction:t,virtualPaginateResultFn:n};for(let[e,t]of o.entries()){let n=e===o.length-1;i=await executeStep(t,e,r,i,c,l,n)}let u=e.action?.result?evaluateResult(e.action.result,i):void 0,d=e.action?.cursor.enabled?n(u,s,r,i.nextCursor):void 0;return buildFinalResponse(e,i,c,u,d)},evaluateResult=(e,n)=>(0,t.isObject)(e)?(0,l.safeEvaluateRecord)(e,n):(0,l.safeEvaluate)(e,n),addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(await 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=async({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};try{await u.recordStep(f,p,d)}catch(e){r.logger?.warning({message:`Failed to record step result: ${e.message}`,error:e})}},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},await recordActionResult({action:c,actionParams:e,resultBlock:l}),l}else if(g===`test_actions`){let n=m(I,E,D);if((0,t.isMissing)(n)||n.length===0)return await createSuccessBlock(u,L);P.actionType=`test`;for(let r of n){let n=new Date,i=await u({...L,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!(0,t.notMissing)(r.condition)||(0,l.evaluate)(r.condition,i)))continue;let a=await d({block:i});if(a=await applyDefenderToBlock(a,applyDefender,x,C),((0,t.isMissing)(a?.response?.successful)||!a.response.successful)&&r.required){C?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let t=await createErrorBlock(u,L);return t.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:t}),t}a.statistics={startTime:n,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(u,L);return r.statistics={startTime:F,endTime:new Date},r}else if(g===`refresh_authentication`){let n=p(I,E,D);if((0,t.isMissing)(n))throw new MissingActionError(P,`No matching action found`);let o=await executeAction({action:n.action,blockContext:P,queryParams:r,pathParams:n.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return o=await applyDefenderToBlock(o,h,x,C),o.statistics={startTime:F,endTime:new Date},await recordActionResult({action:n.action,actionParams:e,resultBlock:o}),o}else if(g===`path`){let{path:n,method:o}=T,c=f(I,n,o);if((0,t.isMissing)(c))throw new MissingActionError(P,`No matching action found`);let l=await executeAction({action:c.action,blockContext:P,queryParams:r,pathParams:c.params,body:i,headers:a,parseActionInputsFn:s,createBlockFn:u,createBlockParams:L,runStepActionFn:d});return l=await applyDefenderToBlock(l,h,x,C),l.statistics={startTime:F,endTime:new Date},await recordActionResult({action:c.action,actionParams:e,resultBlock:l}),l}else return await createErrorBlock(u,L)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,n)=>{let r=e?.next,i=(0,t.notMissing)(r)&&n.actionType===`list`?(0,a.expandCursor)(r):void 0;if(i===null)throw new InvalidCursorError(n,`Invalid cursor.`);return i},applyDefender=async({outputs:e,streamOutput:t,toolName:n,settings:r,logger:i})=>{if(t)return{defenderMetadata:{applied:!1,skipped:{reason:`streaming`}}};let a=shouldSkipDefender(e,r?.defender);if(a.skip)return{defenderMetadata:{applied:!1,skipped:{reason:a.reason,estimatedSize:a.size?.bytes,threshold:r?.defender?.maxResponseSize}}};if(r?.defender?.largeResponseBehavior===`block`&&a.size&&(a.size.bytes>(r.defender.maxResponseSize??1048576)||a.size.words>(r.defender.maxResponseWords??1e4)))return{defenderMetadata:{applied:!1,skipped:{reason:`size_limit`,estimatedSize:a.size.bytes,threshold:r.defender.maxResponseSize}},response:{successful:!1,statusCode:413,message:`Response too large for security scanning`}};try{let t=await(0,c.createPromptDefense)({blockHighRisk:r?.defender?.blockHighRisk??!1,enableTier1:r?.defender?.useTier1Classification??!0,enableTier2:r?.defender?.useTier2Classification??!0,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=async({action:e,actionParams:n,resultBlock:r})=>{if((0,t.isMissing)(e)){n.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if((0,t.isMissing)(i?.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,startTime:r.statistics?.startTime},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId:n.account.organizationId,projectSecureId:s.projectSecureId,accountSecureId:s.accountSecureId,originOwnerId:s.originOwnerId,originOwnerName:s.originOwnerName,httpMethod:e?.entrypointHttpMethod,url:e?.entrypointUrl,success:r.response?.successful,statusCode:r.response?.statusCode,body:r.outputs??void 0,message:r.response?.message,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata?.result?{riskLevel:r.defenderMetadata.result.riskLevel,tier2Score:r.defenderMetadata.result.tier2Score??0}:void 0};try{await i.recordAction(o,c,a)}catch(e){n.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),q=`stackone://internal//`,J=`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=G,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
@@ -466,6 +466,7 @@ type ActionLog = ILog & {
466
466
  organizationId: string;
467
467
  projectSecureId: string;
468
468
  accountSecureId: string;
469
+ actionType?: string;
469
470
  mode?: string;
470
471
  category?: string;
471
472
  originOwnerId?: string;
@@ -475,6 +476,7 @@ type ActionLog = ILog & {
475
476
  sourceType?: string;
476
477
  sourceId?: string;
477
478
  sourceValue?: string;
479
+ isBackground?: boolean;
478
480
  success?: boolean;
479
481
  statusCode?: number;
480
482
  riskLevel?: string;
@@ -495,11 +497,11 @@ type StepLog = ILog & {
495
497
  type UnifiedLog = ILog & {
496
498
  logType: 'unified';
497
499
  requestId: string;
498
- connectorKey: string;
499
- connectorVersion?: string;
500
500
  organizationId: string;
501
501
  projectSecureId: string;
502
502
  accountSecureId: string;
503
+ connectorKey: string;
504
+ connectorVersion?: string;
503
505
  mode?: string;
504
506
  httpMethod?: string;
505
507
  url?: string;
@@ -512,16 +514,25 @@ type UnifiedLog = ILog & {
512
514
  sourceId?: string;
513
515
  sourceType?: string;
514
516
  sourceValue?: string;
517
+ isBackground?: boolean;
515
518
  originOwnerId?: string;
516
519
  originOwnerName?: string;
517
- status: number;
518
- success: boolean;
520
+ status?: number;
521
+ success?: boolean;
519
522
  isWorker?: boolean;
523
+ provider?: string;
524
+ eventDatetime?: Date;
525
+ duration?: number;
520
526
  };
521
527
  type ProviderLog = ILog & {
522
528
  logType: 'provider';
523
529
  requestId: string;
524
530
  id?: string;
531
+ organizationId: string;
532
+ projectSecureId: string;
533
+ accountSecureId: string;
534
+ connectorKey: string;
535
+ connectorVersion?: string;
525
536
  action: string;
526
537
  mode?: string;
527
538
  httpMethod: string;
@@ -529,18 +540,16 @@ type ProviderLog = ILog & {
529
540
  originOwnerName?: string;
530
541
  url: string;
531
542
  path?: string;
532
- connectorKey: string;
533
- connectorVersion?: string;
534
- resource: string;
543
+ resource?: string;
535
544
  subResource?: string;
536
545
  childResource?: string;
537
- service: string;
538
- success: boolean;
539
- status: number;
546
+ service?: string;
547
+ success?: boolean;
548
+ status?: number;
540
549
  isWorker?: boolean;
541
- organizationId: string;
542
- projectSecureId: string;
543
- accountSecureId: string;
550
+ provider?: string;
551
+ eventDatetime?: Date;
552
+ duration?: number;
544
553
  };
545
554
  //#endregion
546
555
  //#region ../olap/src/types.d.ts
@@ -555,6 +564,8 @@ interface IOlapClient {
555
564
  input: StepInput;
556
565
  result: StepResult;
557
566
  }>, options?: OlapOptions): Promise<void>;
567
+ recordUnified(unifiedInput: UnifiedInput, unifiedResult: UnifiedResult, options?: OlapOptions): Promise<void>;
568
+ recordProvider(providerInput: ProviderInput, providerResult: ProviderResult, options?: OlapOptions): Promise<void>;
558
569
  getLogs(organizationId: string, projectSecureId: string, query: Query): Promise<QueryResult>;
559
570
  getActionLogs(organizationId: string, projectSecureId: string, query: ActionsQuery): Promise<ActionsQueryResult>;
560
571
  getActionLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionLog | undefined>;
@@ -566,6 +577,8 @@ interface IOlapClient {
566
577
  getProviderLog(organizationId: string, projectSecureId: string, requestId: string, id: string): Promise<ProviderLog | undefined>;
567
578
  getActionAdvancedLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionAdvancedLog | undefined>;
568
579
  getStepAdvancedLog(organizationId: string, projectSecureId: string, actionRunId: string, stepIndex: number): Promise<StepAdvancedLog | undefined>;
580
+ getUnifiedAdvancedLog(organizationId: string, projectSecureId: string, requestId: string): Promise<UnifiedAdvancedLog | undefined>;
581
+ getProviderAdvancedLog(organizationId: string, projectSecureId: string, requestId: string, id: string): Promise<ProviderAdvancedLog | undefined>;
569
582
  getDefenderLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<DefenderLog | undefined>;
570
583
  }
571
584
  type DefenderContext = {
@@ -584,6 +597,8 @@ type ActionInput = {
584
597
  sourceId?: string;
585
598
  sourceType?: string;
586
599
  sourceValue?: string;
600
+ isBackground?: boolean;
601
+ startTime?: Date;
587
602
  };
588
603
  type ActionResult = {
589
604
  actionRunId: string;
@@ -609,7 +624,6 @@ type ActionResult = {
609
624
  headers?: Record<string, string>;
610
625
  body?: unknown;
611
626
  defenderContext?: DefenderContext;
612
- startTime?: Date;
613
627
  endTime?: Date;
614
628
  };
615
629
  type StepInput = {
@@ -632,6 +646,71 @@ type StepResult = {
632
646
  startTime?: Date;
633
647
  endTime?: Date;
634
648
  };
649
+ type UnifiedInput = {
650
+ requestId: string;
651
+ organizationId: string;
652
+ projectSecureId: string;
653
+ accountSecureId: string;
654
+ originOwnerId?: string;
655
+ originOwnerName?: string;
656
+ connectorKey: string;
657
+ action?: string;
658
+ service?: string;
659
+ mode?: string;
660
+ httpMethod?: string;
661
+ url?: string;
662
+ path?: string;
663
+ queryParams?: unknown;
664
+ body?: unknown;
665
+ headers?: Record<string, string>;
666
+ resource?: string;
667
+ subResource?: string;
668
+ childResource?: string;
669
+ sourceId?: string;
670
+ sourceType?: string;
671
+ sourceValue?: string;
672
+ isBackground?: boolean;
673
+ startTime?: Date;
674
+ };
675
+ type UnifiedResult = {
676
+ success?: boolean;
677
+ statusCode?: number;
678
+ message?: string;
679
+ headers?: Record<string, string>;
680
+ body?: unknown;
681
+ endTime?: Date;
682
+ };
683
+ type ProviderInput = {
684
+ requestId: string;
685
+ id: string;
686
+ organizationId: string;
687
+ projectSecureId: string;
688
+ accountSecureId: string;
689
+ originOwnerId?: string;
690
+ originOwnerName?: string;
691
+ connectorKey: string;
692
+ action: string;
693
+ service: string;
694
+ mode: string;
695
+ httpMethod: string;
696
+ url: string;
697
+ path?: string;
698
+ queryParams?: unknown;
699
+ headers?: Record<string, string>;
700
+ body?: unknown;
701
+ resource?: string;
702
+ subResource?: string;
703
+ childResource?: string;
704
+ startTime?: Date;
705
+ };
706
+ type ProviderResult = {
707
+ success?: boolean;
708
+ statusCode?: number;
709
+ headers?: Record<string, string>;
710
+ body?: unknown;
711
+ errors?: unknown;
712
+ endTime?: Date;
713
+ };
635
714
  //#endregion
636
715
  //#region ../olap/src/advanced/types.d.ts
637
716
  type ActionAdvancedLog = {
@@ -651,6 +730,23 @@ type StepAdvancedLog = {
651
730
  expirationTime?: number;
652
731
  };
653
732
  };
733
+ type UnifiedAdvancedLog = {
734
+ data: {
735
+ [key: string]: unknown;
736
+ };
737
+ metadata?: {
738
+ isBackgroundLog?: boolean;
739
+ expirationTime?: number;
740
+ };
741
+ };
742
+ type ProviderAdvancedLog = {
743
+ data: {
744
+ [key: string]: unknown;
745
+ };
746
+ metadata?: {
747
+ expirationTime?: number;
748
+ };
749
+ };
654
750
  //#endregion
655
751
  //#region ../core/src/cursor/types.d.ts
656
752
  type Position = {
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { t as __name } from "./chunk-Cfxk5zVN.mjs";
2
2
  import { ZodType, z } from "@stackone/utils";
3
+ import https from "node:https";
3
4
  import { Readable } from "node:stream";
4
5
  import http from "node:http";
5
- import https from "node:https";
6
6
 
7
7
  //#region ../core/src/categories/types.d.ts
8
8
  type Category = 'hris' | 'crm' | 'ats' | 'lms' | 'marketing' | 'filestorage' | 'internal' | 'action';
@@ -466,6 +466,7 @@ type ActionLog = ILog & {
466
466
  organizationId: string;
467
467
  projectSecureId: string;
468
468
  accountSecureId: string;
469
+ actionType?: string;
469
470
  mode?: string;
470
471
  category?: string;
471
472
  originOwnerId?: string;
@@ -475,6 +476,7 @@ type ActionLog = ILog & {
475
476
  sourceType?: string;
476
477
  sourceId?: string;
477
478
  sourceValue?: string;
479
+ isBackground?: boolean;
478
480
  success?: boolean;
479
481
  statusCode?: number;
480
482
  riskLevel?: string;
@@ -495,11 +497,11 @@ type StepLog = ILog & {
495
497
  type UnifiedLog = ILog & {
496
498
  logType: 'unified';
497
499
  requestId: string;
498
- connectorKey: string;
499
- connectorVersion?: string;
500
500
  organizationId: string;
501
501
  projectSecureId: string;
502
502
  accountSecureId: string;
503
+ connectorKey: string;
504
+ connectorVersion?: string;
503
505
  mode?: string;
504
506
  httpMethod?: string;
505
507
  url?: string;
@@ -512,16 +514,25 @@ type UnifiedLog = ILog & {
512
514
  sourceId?: string;
513
515
  sourceType?: string;
514
516
  sourceValue?: string;
517
+ isBackground?: boolean;
515
518
  originOwnerId?: string;
516
519
  originOwnerName?: string;
517
- status: number;
518
- success: boolean;
520
+ status?: number;
521
+ success?: boolean;
519
522
  isWorker?: boolean;
523
+ provider?: string;
524
+ eventDatetime?: Date;
525
+ duration?: number;
520
526
  };
521
527
  type ProviderLog = ILog & {
522
528
  logType: 'provider';
523
529
  requestId: string;
524
530
  id?: string;
531
+ organizationId: string;
532
+ projectSecureId: string;
533
+ accountSecureId: string;
534
+ connectorKey: string;
535
+ connectorVersion?: string;
525
536
  action: string;
526
537
  mode?: string;
527
538
  httpMethod: string;
@@ -529,18 +540,16 @@ type ProviderLog = ILog & {
529
540
  originOwnerName?: string;
530
541
  url: string;
531
542
  path?: string;
532
- connectorKey: string;
533
- connectorVersion?: string;
534
- resource: string;
543
+ resource?: string;
535
544
  subResource?: string;
536
545
  childResource?: string;
537
- service: string;
538
- success: boolean;
539
- status: number;
546
+ service?: string;
547
+ success?: boolean;
548
+ status?: number;
540
549
  isWorker?: boolean;
541
- organizationId: string;
542
- projectSecureId: string;
543
- accountSecureId: string;
550
+ provider?: string;
551
+ eventDatetime?: Date;
552
+ duration?: number;
544
553
  };
545
554
  //#endregion
546
555
  //#region ../olap/src/types.d.ts
@@ -555,6 +564,8 @@ interface IOlapClient {
555
564
  input: StepInput;
556
565
  result: StepResult;
557
566
  }>, options?: OlapOptions): Promise<void>;
567
+ recordUnified(unifiedInput: UnifiedInput, unifiedResult: UnifiedResult, options?: OlapOptions): Promise<void>;
568
+ recordProvider(providerInput: ProviderInput, providerResult: ProviderResult, options?: OlapOptions): Promise<void>;
558
569
  getLogs(organizationId: string, projectSecureId: string, query: Query): Promise<QueryResult>;
559
570
  getActionLogs(organizationId: string, projectSecureId: string, query: ActionsQuery): Promise<ActionsQueryResult>;
560
571
  getActionLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionLog | undefined>;
@@ -566,6 +577,8 @@ interface IOlapClient {
566
577
  getProviderLog(organizationId: string, projectSecureId: string, requestId: string, id: string): Promise<ProviderLog | undefined>;
567
578
  getActionAdvancedLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<ActionAdvancedLog | undefined>;
568
579
  getStepAdvancedLog(organizationId: string, projectSecureId: string, actionRunId: string, stepIndex: number): Promise<StepAdvancedLog | undefined>;
580
+ getUnifiedAdvancedLog(organizationId: string, projectSecureId: string, requestId: string): Promise<UnifiedAdvancedLog | undefined>;
581
+ getProviderAdvancedLog(organizationId: string, projectSecureId: string, requestId: string, id: string): Promise<ProviderAdvancedLog | undefined>;
569
582
  getDefenderLog(organizationId: string, projectSecureId: string, actionRunId: string): Promise<DefenderLog | undefined>;
570
583
  }
571
584
  type DefenderContext = {
@@ -584,6 +597,8 @@ type ActionInput = {
584
597
  sourceId?: string;
585
598
  sourceType?: string;
586
599
  sourceValue?: string;
600
+ isBackground?: boolean;
601
+ startTime?: Date;
587
602
  };
588
603
  type ActionResult = {
589
604
  actionRunId: string;
@@ -609,7 +624,6 @@ type ActionResult = {
609
624
  headers?: Record<string, string>;
610
625
  body?: unknown;
611
626
  defenderContext?: DefenderContext;
612
- startTime?: Date;
613
627
  endTime?: Date;
614
628
  };
615
629
  type StepInput = {
@@ -632,6 +646,71 @@ type StepResult = {
632
646
  startTime?: Date;
633
647
  endTime?: Date;
634
648
  };
649
+ type UnifiedInput = {
650
+ requestId: string;
651
+ organizationId: string;
652
+ projectSecureId: string;
653
+ accountSecureId: string;
654
+ originOwnerId?: string;
655
+ originOwnerName?: string;
656
+ connectorKey: string;
657
+ action?: string;
658
+ service?: string;
659
+ mode?: string;
660
+ httpMethod?: string;
661
+ url?: string;
662
+ path?: string;
663
+ queryParams?: unknown;
664
+ body?: unknown;
665
+ headers?: Record<string, string>;
666
+ resource?: string;
667
+ subResource?: string;
668
+ childResource?: string;
669
+ sourceId?: string;
670
+ sourceType?: string;
671
+ sourceValue?: string;
672
+ isBackground?: boolean;
673
+ startTime?: Date;
674
+ };
675
+ type UnifiedResult = {
676
+ success?: boolean;
677
+ statusCode?: number;
678
+ message?: string;
679
+ headers?: Record<string, string>;
680
+ body?: unknown;
681
+ endTime?: Date;
682
+ };
683
+ type ProviderInput = {
684
+ requestId: string;
685
+ id: string;
686
+ organizationId: string;
687
+ projectSecureId: string;
688
+ accountSecureId: string;
689
+ originOwnerId?: string;
690
+ originOwnerName?: string;
691
+ connectorKey: string;
692
+ action: string;
693
+ service: string;
694
+ mode: string;
695
+ httpMethod: string;
696
+ url: string;
697
+ path?: string;
698
+ queryParams?: unknown;
699
+ headers?: Record<string, string>;
700
+ body?: unknown;
701
+ resource?: string;
702
+ subResource?: string;
703
+ childResource?: string;
704
+ startTime?: Date;
705
+ };
706
+ type ProviderResult = {
707
+ success?: boolean;
708
+ statusCode?: number;
709
+ headers?: Record<string, string>;
710
+ body?: unknown;
711
+ errors?: unknown;
712
+ endTime?: Date;
713
+ };
635
714
  //#endregion
636
715
  //#region ../olap/src/advanced/types.d.ts
637
716
  type ActionAdvancedLog = {
@@ -651,6 +730,23 @@ type StepAdvancedLog = {
651
730
  expirationTime?: number;
652
731
  };
653
732
  };
733
+ type UnifiedAdvancedLog = {
734
+ data: {
735
+ [key: string]: unknown;
736
+ };
737
+ metadata?: {
738
+ isBackgroundLog?: boolean;
739
+ expirationTime?: number;
740
+ };
741
+ };
742
+ type ProviderAdvancedLog = {
743
+ data: {
744
+ [key: string]: unknown;
745
+ };
746
+ metadata?: {
747
+ expirationTime?: number;
748
+ };
749
+ };
654
750
  //#endregion
655
751
  //#region ../core/src/cursor/types.d.ts
656
752
  type Position = {
package/dist/index.mjs CHANGED
@@ -3,4 +3,4 @@ import{t as e}from"./chunk-Cfxk5zVN.mjs";import{generateActionRunId as t,isMissi
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
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 events.actions.`;super(`INVALID_EVENT_ROUTER_REFERENCE`,t),this.name=`InvalidEventRouterReferenceError`,this.operation=e}},MissingScopeDefinitionError=class extends R{constructor(e){super(`MISSING_SCOPE_DEFINITION`,`Missing scope definition. Check that the scope is defined in the scope definitions.`),this.name=`MissingScopeDefinitionError`,this.issues=e}};const formatValidationErrorResponse=e=>({statusCode:400,message:`Invalid request - validation failed`,errors:e.map(e=>({property:e.field,location:e.location,expected:e.expected,received:e.received,message:e.message}))}),getDefaultSuccessActionResponse=e=>{switch(e){case`list`:return{statusCode:200,description:`The list of records was retrieved.`};case`get`:return{statusCode:200,description:`The record with the given identifier was retrieved.`};case`create`:return{statusCode:201,description:`The record was created successfully.`};case`update`:return{statusCode:200,description:`The record was updated successfully.`};case`delete`:return{statusCode:204,description:`The record was deleted successfully.`};case`custom`:return{statusCode:200,description:`The action was executed successfully.`};case`refresh_token`:return{statusCode:200,description:`The refresh token action was executed successfully.`};case`test`:return{statusCode:200,description:`The test action was executed successfully.`};case`event`:return{statusCode:200,description:`The event action was executed successfully.`};case`unknown`:return{statusCode:200};default:throw Error(`Unknown action type: ${e}`)}},getDefaultErrorActionResponses=()=>({400:{statusCode:400,description:`Invalid request.`},401:{statusCode:401,description:`Unauthorized access.`},403:{statusCode:403,description:`Forbidden.`},404:{statusCode:404,description:`Resource not found.`},500:{statusCode:500,description:`Server error while executing the request.`}}),z={key:s.string(),label:s.string(),required:s.boolean().optional().default(!1),secret:s.boolean().optional().default(!1),externalSystemAccountIdentifier:s.boolean().optional(),readOnly:s.boolean().optional().default(!1),placeholder:s.string().optional(),description:s.string().optional(),tooltip:s.string().optional(),value:s.string().optional(),computed:s.boolean().optional()},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()})]).superRefine((e,t)=>{e.computed===!0&&!e.value&&t.addIssue({code:s.ZodIssueCode.custom,message:`A computed field must have a value (JEXL expression)`,path:[`value`]})}),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()}),te=s.union([c({values:s.string().array().min(1)}),c({ref:s.string()})]),ne=c({minLength:s.number().optional(),maxLength:s.number().optional(),pattern:s.string().refine(e=>{try{return new RegExp(e),!0}catch{return!1}},{message:`Invalid regex pattern`}).optional(),format:s.enum([`email`,`url`,`uuid`,`date`,`datetime`,`uri`]).optional(),min:s.number().optional(),max:s.number().optional(),errorMessage:s.string().optional()}),re=c({field:s.string(),equals:s.string().optional(),notEquals:s.string().optional(),present:s.boolean().optional()}).refine(e=>[e.equals!==void 0,e.notEquals!==void 0,e.present!==void 0].filter(Boolean).length===1,{message:`Condition must specify exactly one of: equals, notEquals, present`}),ie=s.discriminatedUnion(`rule`,[c({rule:s.literal(`atLeastOneOf`),fields:s.string().array().min(2),errorMessage:s.string().optional()}),c({rule:s.literal(`requiredIf`),field:s.string(),condition:re,errorMessage:s.string().optional()}),c({rule:s.literal(`mutuallyExclusive`),fields:s.string().array().min(2),errorMessage:s.string().optional()})]),H=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(()=>H.omit({in:!0})).array().optional(),oneOf:te.optional(),rules:ne.optional()}).refine(e=>e.type!==`enum`||e.oneOf!==void 0,{message:`oneOf is required when type is 'enum'`}).refine(e=>e.type===`enum`||e.oneOf===void 0,{message:`oneOf is only allowed when type is 'enum'`}).refine(e=>e.rules&&(e.rules.minLength!==void 0||e.rules.maxLength!==void 0||e.rules.pattern!==void 0||e.rules.format!==void 0)?e.type===`string`||e.type===`datetime_string`:!0,{message:`String rules (minLength, maxLength, pattern, format) can only be used with string or datetime_string types`}).refine(e=>e.rules&&(e.rules.min!==void 0||e.rules.max!==void 0)?e.type===`number`:!0,{message:`Number rules (min, max) can only be used with number type`}),ae=s.object({exampleDescription:s.string().optional()}).catchall(s.unknown()),U=c({functionName:s.string(),version:s.string().optional(),parameters:s.record(s.string(),s.unknown())}),oe=c({stepId:s.string(),description:s.string(),stepFunction:U,condition:s.string().optional(),ignoreError:s.boolean().optional()}),W=c({stepId:s.string(),description:s.string(),iterator:s.string(),stepFunction:U.optional(),stepFunctions:U.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`}),G=c({allowed:s.boolean(),indexField:s.string().or(s.string().array())}),K=c({rules:c({when:s.string(),then:c({action:s.string(),input:s.record(s.string(),s.unknown()).optional()})}).array()}),q=c({actionId:s.string(),categories:s.string().array(),actionType:s.enum([`list`,`get`,`create`,`update`,`delete`,`custom`,`refresh_token`,`event`,`unknown`]),schema:s.string().optional(),schemaType:s.enum([`native`,`unified`]).optional().default(`native`),entrypointUrl:s.string().optional(),entrypointHttpMethod:s.string().optional(),label:s.string(),description:s.string(),details:s.string().optional(),examples:ae.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:H.array().optional(),validationRules:ie.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([oe,W]).array(),result:s.string().or(s.record(s.string(),s.unknown())).optional(),dataSync:G.optional()}),se=c({schedule:s.string().optional(),action:q.extend({actionType:s.literal(`refresh_token`)})}),ce=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()}),le=c({mainMaxConcurrency:s.number(),subPools:s.array(c({subPoolKey:s.string(),urlPattern:s.string(),maxConcurrency:s.number()})).optional()}),J=c({src:s.string(),alt:s.string()}),ue=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:J.optional(),displayScopes:s.boolean().optional(),applicableScopes:s.string().optional()}),de=c({title:s.string(),content:s.string(),list:s.string().array().optional(),image:J.optional(),steps:ue.array().optional(),applicableScopes:s.string().optional()}),Y=c({warning:s.string().optional(),sections:de.array()}),fe=c({config:Y.optional(),setup:Y.optional()}),pe=c({certs:s.string().array().optional(),keys:s.string().array().optional()}).optional(),X=c({label:s.string(),authorization:m,certificates:pe,requiredScopes:s.string().optional(),environments:c({key:s.string(),name:s.string()}).array(),support:c({link:s.string().optional(),description:s.string().optional(),guides:fe.optional()}).optional(),configFields:B.array().optional(),setupFields:B.array().optional(),refreshAuthentication:se.optional(),testActions:c({action:s.string().or(q),condition:s.string().optional(),required:s.boolean().default(!0)}).array().optional()}),me=X.extend({type:s.literal(`oauth2`),grantType:s.enum([`authorization_code`,`client_credentials`]).default(`authorization_code`)}),he=X.extend({type:s.literal(`custom`)}),Z=X.extend({type:s.literal(`oidc`)}),ge=s.discriminatedUnion(`type`,[me,he,Z]),_e=c({actions:q.extend({actionType:s.literal(`event`)}).array().optional(),router:K.optional(),externalAccountIdExtractor:q.extend({actionType:s.literal(`custom`),result:s.string().min(1)}).optional()}),ve=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(),ge).array().optional(),actions:q.array().optional(),events:_e.optional(),rateLimit:ce.optional(),concurrency:le.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(ve,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 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(Array.isArray(r))t[n]=r;else if(r&&typeof r==`object`){let{setupFields:e,configFields:i,support:a,refreshAuthentication:o,testActions:s,requiredScopes:c,...l}=r;t[n]=stripAuthenticationSetup(l)}else t[n]=r;return t},hydrateTestActions=(e,t,n,r,i)=>{if(!n||!r)return;let a=0;for(let s of Object.values(n)){for(let n of Object.values(s))n.testActions=n.testActions?.map((n,s)=>{if(o(n.action))if(typeof n.action==`string`){let e=buildActionId(t,n.action),i=Object.values(r).find(t=>t.id===e);if(i)return{...n,action:i}}else{let r=parseAction(e,[`authentication`,a,`testActions`,s],buildActionId(t,n.action.actionId),n.action,i);return{...n,action:r}}return n});a++}},getConnectorCategoriesFromActions=e=>{let t=e.reduce((e,t)=>{for(let n of t.categories)e.add(n);return e},new Set);return Array.from(t)},parseScopesString=e=>o(e)?e.split(` `).filter(e=>e.trim().length>0):void 0,parseGuideSectionsRequiredScopes=(e,t,n)=>{if(!e?.length)return e;let r=[],i=e.map((e,i)=>{let a=e.applicableScopes,o=parseScopesString(typeof a==`string`?a:void 0);o&&o.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide section is not defined.`,path:[...n,i],keys:[`applicableScopes`]})});let s=Array.isArray(e.steps)?e.steps:void 0,c=s?.map((e,a)=>{let s=e.applicableScopes;if(!s||typeof s!=`string`){let{applicableScopes:t,...n}=e;return{...n,applicableScopes:void 0}}let c=parseScopesString(s);return c?.forEach(e=>{t.has(e)||r.push({message:`Scope '${e}' included in guide step is not defined.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),o&&c&&c.forEach(e=>{o.includes(e)||r.push({message:`Scope '${e}' included in guide step is missing from scopes set for section.`,path:[...n,i,`steps`,a],keys:[`applicableScopes`]})}),{...e,applicableScopes:c}})??s,{applicableScopes:l,steps:u,...d}=e;return{...d,...o===void 0?{}:{applicableScopes:o},...c===void 0?{}:{steps:c}}});if(r.length>0)throw new MissingScopeDefinitionError(r);return i},parseSupportGuides=(e,t,r)=>{if(n(e))return e;let i=e.guides;if(n(i))return e;let a=parseGuideSectionsRequiredScopes(i.config?.sections,t,[...r,`guides`,`config`,`sections`]),o=parseGuideSectionsRequiredScopes(i.setup?.sections,t,[...r,`guides`,`setup`,`sections`]);return{...e,guides:{...i,config:a!==void 0&&i.config?{...i.config,sections:a}:i.config,setup:o!==void 0&&i.setup?{...i.setup,sections:o}:i.setup}}},buildAuthenticationFromYaml=e=>{let t={},n=new Set(Object.keys(e.scopeDefinitions||{})),r=[],i=e.info.key;for(let[a,s]of(e.authentication??[]).entries()){let[c]=Object.keys(s);t[c]=s[c].environments.reduce((t,l)=>{let{key:u,name:d}=l,{environments:f,refreshAuthentication:p,testActions:m,requiredScopes:h,...g}=s[c],_=parseScopesString(h);Object.values(_??[]).forEach(e=>{n.has(e)||r.push({message:`Scope '${e}' included in authentication '${c}' is not defined.`,path:[`authentication`,a],keys:[`requiredScopes`]})});let v=o(p)?{schedule:p.schedule,action:parseAction(e,[`authentication`,a,`refreshAuthentication`,`action`],buildActionId(i,p.action.actionId),p.action)}:void 0,y=o(g.support)?parseSupportGuides(g.support,n,[`authentication`,a,c,`support`]):void 0,b=o(y)?buildSupport(i,g.label,y):void 0;return t[u]={...g,...o(b)?{support:b}:{},refreshAuthentication:v,requiredScopes:_,envKey:u,envName:d,testActions:m},t},{})}if(r.length>0)throw new MissingScopeDefinitionError(r);return t},buildActionKey=e=>e.entrypointUrl&&e.entrypointHttpMethod?`${e.entrypointHttpMethod.toUpperCase()} ${e.entrypointUrl}`:void 0,inferActionKey=e=>e.actionType===`list`?`GET /${e.schema}`:`GET /${e.schema}/:id`,getEntrypointHttpMethod=e=>{if(e.actionType!==`refresh_token`)return e.entrypointHttpMethod??`get`},inferEntrypointUrl=e=>{if(!(e.actionType===`refresh_token`||n(e.schema)))return e.actionType===`list`?`/${e.schema}`:`/${e.schema}/:id`},buildActionResponses=e=>{let t={success:getDefaultSuccessActionResponse(e.actionType),errors:getDefaultErrorActionResponses()};return e.responses?.reduce((e,t)=>(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)}}},validateActionRuleFieldReferences=(e,t,n,r)=>{if(!n||n.length===0)return;let i=new Set(r.map(e=>e.name)),a=[];for(let r of n){let n=[];switch(r.rule){case`atLeastOneOf`:case`mutuallyExclusive`:n.push(...r.fields);break;case`requiredIf`:n.push(r.field,r.condition.field);break}for(let o of n)i.has(o)||a.push({message:`Validation rule '${r.rule}' in action '${e}' references unknown field '${o}'`,path:[...t,`validationRules`],keys:[o]})}if(a.length>0)throw new SchemaValidationError(a)},parseAction=(e,t,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),validateActionRuleFieldReferences(r,t,i.validationRules,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,validationRules:i.validationRules,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),i={...r.headers??{},...r.query??{},...r.path??{},...r.body??{}};return e.validationRules&&e.validationRules.length>0&&validateActionRules(e.validationRules,i,e.inputs),i},createInputsSchema=e=>{let t=e.reduce((e,t)=>(e[t.in]||(e[t.in]=[]),e[t.in].push(t),e),{}),n={};for(let[e,r]of Object.entries(t)){let t={};for(let e of r){let n=buildZodSchemaFromInputType(e);e.description&&(n=n.describe(e.description)),e.required||(n=n.optional()),t[e.name]=n}Object.keys(t).length>0&&(n[e]=s.object(t))}return n},buildEnumZodSchema=(e,t)=>{if(!t)throw Error(`Enum input "${e}" requires oneOf definition`);let n;if(`values`in t)n=t.values;else if(`ref`in t){let r=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)},ye={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uri:/^[a-zA-Z][a-zA-Z0-9+.-]*:.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/},applyInputRules=(e,t,n)=>{let r=t.errorMessage;if(n===`string`||n===`datetime_string`){let n=e;if(t.minLength!==void 0&&(n=n.min(t.minLength,r)),t.maxLength!==void 0&&(n=n.max(t.maxLength,r)),t.pattern!==void 0&&(n=n.regex(new RegExp(t.pattern),r)),t.format!==void 0){let e=ye[t.format];e&&(n=n.regex(e,r??`Must be a valid ${t.format}`))}return n}if(n===`number`){let n=e;return t.min!==void 0&&(n=n.min(t.min,r)),t.max!==void 0&&(n=n.max(t.max,r)),n}return e},validateActionRules=(e,t,n)=>{let r=[],i={};if(n)for(let e of n)i[e.name]=e.in;let fieldPath=e=>{let t=i[e];return t?[t,e]:[e]};for(let n of e)switch(n.rule){case`atLeastOneOf`:if(!n.fields.some(e=>t[e]!==void 0&&t[e]!==null))for(let e of n.fields)r.push({code:`custom`,message:n.errorMessage??`At least one of [${n.fields.join(`, `)}] is required`,path:fieldPath(e),input:t});break;case`requiredIf`:{let e=t[n.condition.field],i=!1;if(n.condition.equals!==void 0)i=String(e)===n.condition.equals;else if(n.condition.notEquals!==void 0)i=String(e)!==n.condition.notEquals;else if(n.condition.present!==void 0){let t=e!=null;i=n.condition.present?t:!t}i&&(t[n.field]===void 0||t[n.field]===null)&&r.push({code:`custom`,message:n.errorMessage??`Field "${n.field}" is required when condition is met`,path:fieldPath(n.field),input:t});break}case`mutuallyExclusive`:{let e=n.fields.filter(e=>t[e]!==void 0&&t[e]!==null);if(e.length>1)for(let i of e)r.push({code:`custom`,message:n.errorMessage??`Fields [${n.fields.join(`, `)}] are mutually exclusive`,path:fieldPath(i),input:t});break}}if(r.length>0)throw new s.ZodError(r)},buildZodSchemaFromInputType=e=>{let t;switch(e.type){case`string`:case`datetime_string`:t=s.string();break;case`number`:t=s.number();break;case`boolean`:t=s.boolean();break;case`enum`:t=buildEnumZodSchema(e.name,e.oneOf);break;case`object`:if(e.properties&&e.properties.length>0){let n={};for(let t of e.properties){let e=buildZodSchemaFromInputType(t);t.description&&(e=e.describe(t.description)),t.required||(e=e.optional()),n[t.name]=e}t=s.object(n)}else t=s.record(s.string(),s.unknown());break;default:t=s.unknown()}return e.rules&&(t=applyInputRules(t,e.rules,e.type)),e.array&&(t=s.array(t)),t},buildCursorConfig=e=>{let t=e.actionType===`list`,n=e.cursor??{enabled:t,pageSize:25};return{enabled:n.enabled&&t,pageSize:n.pageSize}},parseCompositeIdentifiersConfig=e=>{if(e.actionType===`refresh_token`||n(e.compositeIdentifiers))return{enabled:!1};let t=[];for(let n of e.compositeIdentifiers?.fields??[]){let r=n.components.map(t=>({name:t,alias:e.fieldConfigs?.find(e=>e.targetFieldKey===t)?.alias}));t.push({targetFieldKey:n.targetFieldKey,remote:n.remote,components:r})}return{enabled:e.compositeIdentifiers.enabled,version:e.compositeIdentifiers.version,fields:t.length>0?t:void 0}},getDefaultRequestStepFunctionsParams=({stepFunctionName:e,baseRequestParams:t,customErrors:n={}})=>{if(e===`request`||e===`paginated_request`||e===`soap_request`||e===`soap_paginated_request`||e===`download_file`||e===`upload_file`||e===`upload_binary`){let e=[{receivedStatus:500,targetStatus:502}],r=[...n&&Array.isArray(n)?n:[],...e];return{...t,customErrors:r}}else return{}},parseWithSchemaException=(e,t)=>{let n=e.safeParse(t);if(n.success)return n.data;throw new SchemaValidationError(n.error.issues.map(e=>{let t=e?.keys??[];if(t.length===0&&e.code===`invalid_union`){let n=e;for(let e of n.errors??[]){let n=e?.find(e=>e.code===`unrecognized_keys`);if(n?.keys?.length){t=n.keys;break}}}return{code:e.code,message:e.message,input:e.input,path:e.path,keys:t}}),`Invalid connector schema`)},parseStepFunctionParamsWithSchemaException=(e,t,n,r,i,a)=>{let o=e.safeParse(t);if(o.success)return o.data;throw new InvalidStepFunctionParamsError(n,r,i,a,o.error.issues.map(e=>({code:e.code,message:e.message,input:e.input,path:e.path,keys:e?.keys??[]})))},getActionForRefreshAuthentication=(e,t,n)=>{if(e.authentication?.[t]?.[n]?.type!==`oauth2`)return;let r=e.authentication?.[t]?.[n]?.refreshAuthentication?.action;if(o(r))return{action:r,params:{}}},supportsRefreshAuthentication=(e,t,n)=>e.authentication?.[t]?.[n]?.type===`oauth2`?o(getActionForRefreshAuthentication(e,t,n)):!1,getTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenExpiresIn},getRefreshTokenExpiresIn=(e,t,n)=>{let r=e.authentication?.[t]?.[n],i=r?.authorization;if(r?.type===`oauth2`)return i?.tokenRefreshExpiresIn},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,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t].production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),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?!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=async(e,t,n,r,i,a,o,s)=>{let c=await addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=n[e];return shouldSkipStepDueToCondition(s,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?await 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 await 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 await handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?await addStepResultToBlock({block:{...u.block,streamOutput:u.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let d=r.action?.cursor.enabled?j({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return await addStepResultToBlock({block:{...u.block,nextCursor:d},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date})},executeForeachStep=async(e,t,n,r,a,o,s)=>{let c=new Date,l=I(n.iterator,r);if(!Array.isArray(l))return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let u=getStepFunctionsToExecute(n);if(u.length===0)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`});let d=[],f=r,p,m={};for(let[r,s]of l.entries()){let l={...f,iterator:{item:s,index:r}};for(let d of u){let u=o.buildStepFunction({functionName:d.functionName,version:d.version,validateSchemas:!0}).fn,h=buildStepParamsForFunction(d,l,t),g=await u({block:l,params:h});if(p=g,g.successful===!1&&!(n.ignoreError??!1))return a.hasFatalError=!0,a.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,output:g.output,errors:g.errors}},await addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,functionOutput:g,startTime:c,endTime:new Date});if(l={...g.block,iterator:{item:s,index:r,current:g.output}},g.streamOutput)return a.hasFatalError=!0,a.errorStatusCode=500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},await addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`})}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 await addStepResultToBlock({block:{...f,nextCursor:h,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!0,functionOutput:g,startTime:c,endTime:new Date})},buildFinalResponse=(e,t,n,r,a)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??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)?L(e,t):I(e,t),addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(await 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=async({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};try{await u.recordStep(f,p,d)}catch(e){r.logger?.warning({message:`Failed to record step result: ${e.message}`,error:e})}},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}),I=new Date,L;try{L=a(y)?c(y):y}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let R={connector:L,context:F,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:a}=E,o=findActionByActionId(L,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o,blockContext:F,queryParams:r,pathParams:t,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(_===`test_actions`){let t=h(L,D,O);if(n(t)||t.length===0)return await createSuccessBlock(d,R);F.actionType=`test`;for(let r of t){let t=new Date,i=await d({...R,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!o(r.condition)||ee(r.condition,i)))continue;let a=await f({block:i});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(n(a?.response?.successful)||!a.response.successful)&&r.required){w?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let n=await createErrorBlock(d,R);return n.statistics={startTime:t,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(d,R);return r.statistics={startTime:I,endTime:new Date},r}else if(_===`refresh_authentication`){let t=m(L,D,O);if(n(t))throw new MissingActionError(F,`No matching action found`);let a=await executeAction({action:t.action,blockContext:F,queryParams:r,pathParams:t.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return a=await applyDefenderToBlock(a,g,S,w),a.statistics={startTime:I,endTime:new Date},await recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(_===`path`){let{path:t,method:a}=E,o=p(L,t,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o.action,blockContext:F,queryParams:r,pathParams:o.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await recordActionResult({action:o.action,actionParams:e,resultBlock:c}),c}else return await createErrorBlock(d,R)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,t)=>{let n=e?.next,r=o(n)&&t.actionType===`list`?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,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=async({action:e,actionParams:t,resultBlock:r})=>{if(n(e)){t.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if(n(i?.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};try{await i.recordAction(o,c,a)}catch(e){t.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:t,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:t.providerKey,connectorVersion:t.providerVersion,authConfigKey:t.authConfigKey,environment:t.environment??`production`,accountSecureId:t.secureId,projectSecureId:t.projectSecureId,organizationId:t.organizationId,originOwnerId:t.originOwnerId,originOwnerName:t.originOwnerName,connectorOwner:t.connectorOwner}),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};
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,...r?.support?.description?{description:r.support.description}:{}};return n&&(i.support=r?.support,i.configFields=r?.configFields,i.setupFields=r?.setupFields),i})},getActionAuthenticationMethods=e=>Object.keys(e.authentication??{}).map(t=>{let n=e.authentication?.[t].production;return{type:`custom`,label:n?.label||`Custom`,key:t,required_scopes:n?.requiredScopes,...n?.support?.description?{description:n.support.description}:{}}}),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?!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=async(e,t,n,r,i,a,o,s)=>{let c=await addStepResultToBlock({block:e,stepId:t,stepIndex:n,successful:!1,functionOutput:r,startTime:o,endTime:s});return(i.ignoreError??!1)||(a.hasFatalError=!0,a.errorStatusCode??=r.output?.statusCode??500),c},executeStep=async(e,t,n,r,i,a,o)=>{let s=n[e];return shouldSkipStepDueToCondition(s,r)?await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!0,skipped:!0,message:`Step skipped due to condition not met.`}):i.hasFatalError?await 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 await 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 await handleStepFailure(r,e,t,u,n,i,s,new Date);if(u.streamOutput)return o?await addStepResultToBlock({block:{...u.block,streamOutput:u.streamOutput},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date}):(i.hasFatalError=!0,i.errorStatusCode=500,await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`Stream output can only be used in the final step of an action. Move the streaming step to the end or use responseMode: "buffer".`}));let d=r.action?.cursor.enabled?j({cursor:r.nextCursor,stepIndex:t,providerPageCursor:u.output?.next,position:u.output?.position}):void 0;return await addStepResultToBlock({block:{...u.block,nextCursor:d},stepId:e,stepIndex:t,successful:!0,functionOutput:u,startTime:s,endTime:new Date})},executeForeachStep=async(e,t,n,r,a,o,s)=>{let c=new Date,l=I(n.iterator,r);if(!Array.isArray(l))return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,skipped:!0,message:`Step skipped because iterator expression did not return an array.`});let u=getStepFunctionsToExecute(n);if(u.length===0)return await addStepResultToBlock({block:r,stepId:e,stepIndex:t,successful:!1,message:`No step functions defined for foreach step.`});let d=[],f=r,p,m={};for(let[r,s]of l.entries()){let l={...f,iterator:{item:s,index:r}};for(let d of u){let u=o.buildStepFunction({functionName:d.functionName,version:d.version,validateSchemas:!0}).fn,h=buildStepParamsForFunction(d,l,t),g=await u({block:l,params:h});if(p=g,g.successful===!1&&!(n.ignoreError??!1))return a.hasFatalError=!0,a.errorStatusCode??=g.output?.statusCode??500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,output:g.output,errors:g.errors}},await addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,functionOutput:g,startTime:c,endTime:new Date});if(l={...g.block,iterator:{item:s,index:r,current:g.output}},g.streamOutput)return a.hasFatalError=!0,a.errorStatusCode=500,m[r]={iterator:i(s)?void 0:String(s),snapshot:{successful:!1,message:`Stream output is not supported in foreach steps.`}},await addStepResultToBlock({block:{...f,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!1,message:`Stream output is not supported in foreach steps.`})}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 await addStepResultToBlock({block:{...f,nextCursor:h,intermediateSteps:{...f.intermediateSteps,[e]:m}},stepId:e,stepIndex:t,successful:!0,functionOutput:g,startTime:c,endTime:new Date})},buildFinalResponse=(e,t,n,r,a)=>{let s=!n.hasFatalError,c=s?e.action?.responses.success.statusCode??200:n.errorStatusCode??500;if(t.streamOutput)return{...t,response:{successful:s,statusCode:c,message:s?void 0:e.action?.responses?.errors?.[c]?.description??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)?L(e,t):I(e,t),addStepResultToBlock=async({block:e,stepId:t,stepIndex:n,successful:r,functionOutput:i,skipped:a,message:o,startTime:s,endTime:c})=>(await 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=async({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};try{await u.recordStep(f,p,d)}catch(e){r.logger?.warning({message:`Failed to record step result: ${e.message}`,error:e})}},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}),I=new Date,L;try{L=a(y)?c(y):y}catch{throw new ConnectorParseError(F,`Error while parsing connector`)}let R={connector:L,context:F,credentials:M,settings:S,logger:w,getHttpClient:b,getOlapClient:x};if(_===`action_id`){let{actionId:a}=E,o=findActionByActionId(L,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o,blockContext:F,queryParams:r,pathParams:t,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await recordActionResult({action:o,actionParams:e,resultBlock:c}),c}else if(_===`test_actions`){let t=h(L,D,O);if(n(t)||t.length===0)return await createSuccessBlock(d,R);F.actionType=`test`;for(let r of t){let t=new Date,i=await d({...R,inputs:void 0,action:r.action,nextCursor:void 0});if(!(!o(r.condition)||ee(r.condition,i)))continue;let a=await f({block:i});if(a=await applyDefenderToBlock(a,applyDefender,S,w),(n(a?.response?.successful)||!a.response.successful)&&r.required){w?.error({code:`TestActionFailed`,message:`Test action "${r.action.id}" failed with error: ${a?.response?.message}`});let n=await createErrorBlock(d,R);return n.statistics={startTime:t,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:n}),n}a.statistics={startTime:t,endTime:new Date},await recordActionResult({action:r.action,actionParams:e,resultBlock:a})}let r=await createSuccessBlock(d,R);return r.statistics={startTime:I,endTime:new Date},r}else if(_===`refresh_authentication`){let t=m(L,D,O);if(n(t))throw new MissingActionError(F,`No matching action found`);let a=await executeAction({action:t.action,blockContext:F,queryParams:r,pathParams:t.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return a=await applyDefenderToBlock(a,g,S,w),a.statistics={startTime:I,endTime:new Date},await recordActionResult({action:t.action,actionParams:e,resultBlock:a}),a}else if(_===`path`){let{path:t,method:a}=E,o=p(L,t,a);if(n(o))throw new MissingActionError(F,`No matching action found`);let c=await executeAction({action:o.action,blockContext:F,queryParams:r,pathParams:o.params,body:i,headers:s,parseActionInputsFn:l,createBlockFn:d,createBlockParams:R,runStepActionFn:f});return c=await applyDefenderToBlock(c,g,S,w),c.statistics={startTime:I,endTime:new Date},await recordActionResult({action:o.action,actionParams:e,resultBlock:c}),c}else return await createErrorBlock(d,R)},executeAction=async e=>{let{action:t,blockContext:n,queryParams:r,pathParams:i,body:a,headers:o,parseActionInputsFn:s,createBlockFn:c,createBlockParams:l,runStepActionFn:u}=e;n.actionType=t.actionType,n.schema=t.schema?.key;let d=processCursor(r,n),f;try{f=s(t,{path:i,query:r,body:a,headers:o})}catch(e){throw typeof e==`object`&&e&&`issues`in e&&Array.isArray(e.issues)?new InvalidActionInputsError(n,`Invalid input values provided`,e.issues.map(e=>{let t=e.path.map(String),n=t[0]||`body`;return{field:t.slice(1).join(`.`)||t[0]||`unknown`,location:n,expected:`expected`in e?String(e.expected):e.code,received:`received`in e?String(e.received):`unknown`,message:e.message}})):new InvalidActionInputsError(n,`Error while parsing action inputs`)}return await u({block:await c({...l,inputs:f,action:t,nextCursor:d})})},createSuccessBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!0,statusCode:200}}),createErrorBlock=async(e,t)=>({...await e({...t,inputs:void 0,action:void 0,nextCursor:void 0}),response:{successful:!1,statusCode:500}}),processCursor=(e,t)=>{let n=e?.next,r=o(n)&&t.actionType===`list`?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,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=async({action:e,actionParams:t,resultBlock:r})=>{if(n(e)){t.logger?.warning({message:`action missing, skipping recording action result`});return}let i=r.olapClient;if(n(i?.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,startTime:r.statistics?.startTime},s=r.context,c={actionRunId:s.actionRunId||`missing`,actionId:e.id,connectorKey:s.connectorKey,connectorVersion:s.connectorVersion,actionType:s.actionType,category:s.category,organizationId: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,endTime:r.statistics?.endTime,defenderContext:r.defenderMetadata?.result?{riskLevel:r.defenderMetadata.result.riskLevel,tier2Score:r.defenderMetadata.result.tier2Score??0}:void 0};try{await i.recordAction(o,c,a)}catch(e){t.logger?.warning({message:`Failed to record action result: ${e.message}`,error:e})}},runConnectorActionById=async({actionId:e,account:t,connector:n,pathParams:r={},queryParams:i={},body:a={},headers:o={},settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f=parseYamlConnector,parseActionInputsFn:p=parseActionInputs,createBlockContextFn:m=createBlockContext,createBlockFn:h=createBlock,runStepActionFn:g=runStepAction})=>runAction({mode:`action_id`,actionId:e,account:t,connector:n,pathParams:r,queryParams:i,body:a,headers:o,settings:s,source:c,logger:l,getHttpClient:u,getOlapClient:d,parseConnector:f,parseActionInputsFn:p,createBlockContextFn:m,createBlockFn:h,runStepActionFn:g}),runConnectorActionByPath=async({account:e,connector:t,category:n,path:r,method:i=`get`,queryParams:a={},body:o,headers:s,settings:c,source:l,logger:u,getHttpClient:d,parseConnector:f=parseYamlConnector,getActionFromUrlFn:p=getActionFromUrl,getActionForRefreshAuthenticationFn:m=getActionForRefreshAuthentication,parseActionInputsFn:h=parseActionInputs,createBlockContextFn:g=createBlockContext,createBlockFn:_=createBlock,runStepActionFn:v=runStepAction})=>isRefreshTokenActionPath(r)?await runAction({mode:`refresh_authentication`,account:e,connector:t,settings:c,source:l,getActionForRefreshAuthenticationFn:m,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}):await runAction({mode:`path`,account:e,category:n,connector:t,path:r,method:i,queryParams:a,body:o,headers:s,settings:c,source:l,getActionFromUrlFn:p,parseConnector:f,logger:u,getHttpClient:d,parseActionInputsFn:h,createBlockContextFn:g,createBlockFn:_,runStepActionFn:v}),isRefreshTokenActionPath=e=>e===`stackone://internal//refresh_token`,runEventActionById=async({actionId:e,account:t,connector:r,body:i={},headers:a={},logger:o,getHttpClient:s,getOlapClient:c,emitEvent:l,findActionFn:u=findEventActionByActionId,parseActionInputsFn:d=parseActionInputs,createBlockContextFn:f=createBlockContext,createBlockFn:p=createBlock,runStepActionFn:m=runStepAction})=>{let h=f({category:`action`,connectorKey:t.providerKey,connectorVersion:t.providerVersion,authConfigKey:t.authConfigKey,environment:t.environment??`production`,accountSecureId:t.secureId,projectSecureId:t.projectSecureId,organizationId:t.organizationId,originOwnerId:t.originOwnerId,originOwnerName:t.originOwnerName,connectorOwner:t.connectorOwner}),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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/connect-sdk",
3
- "version": "2.49.0",
3
+ "version": "2.50.1",
4
4
  "description": "",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
@@ -48,7 +48,7 @@
48
48
  "@stackone/olap": "*",
49
49
  "@stackone/transport": "*",
50
50
  "@stackone/utils": "*",
51
- "path-to-regexp": "8.2.0",
52
- "yaml": "2.7.1"
51
+ "path-to-regexp": "8.4.2",
52
+ "yaml": "2.8.3"
53
53
  }
54
54
  }