{"version":3,"file":"nodeTypes.mjs","names":[],"sources":["../src/api/nodeTypes.ts"],"sourcesContent":["import type {\n\tActionResultRequestDto,\n\tCommunityNodeType,\n\tGetNodeTypesByIdentifierRequestDto,\n\tOptionsRequestDto,\n\tResourceLocatorRequestDto,\n\tResourceMapperFieldsRequestDto,\n} from '@n8n/api-types';\nimport type { INodeTranslationHeaders } from '@n8n/i18n';\nimport { sleep } from '@n8n/utils/sleep';\nimport axios from 'axios';\nimport type {\n\tINodeListSearchResult,\n\tINodePropertyOptions,\n\tINodeTypeDescription,\n\tINodeTypeNameVersion,\n\tNodeParameterValueType,\n\tResourceMapperFields,\n} from 'n8n-workflow';\n\nimport type { IRestApiContext } from '../types';\nimport { makeRestApiRequest } from '../utils';\n\nasync function fetchNodeTypesJsonWithRetry(url: string, retries = 5, delay = 500) {\n\tfor (let attempt = 0; attempt < retries; attempt++) {\n\t\tconst response = await axios.get(url, { withCredentials: true });\n\n\t\tif (typeof response.data === 'object' && response.data !== null) {\n\t\t\treturn response.data;\n\t\t}\n\n\t\tawait sleep(delay * attempt);\n\t}\n\n\tthrow new Error('Could not fetch node types');\n}\n\nexport async function getNodeTypes(baseUrl: string) {\n\treturn await fetchNodeTypesJsonWithRetry(baseUrl + 'types/nodes.json');\n}\n\nexport async function getNodeTypeVersions(baseUrl: string): Promise<string[]> {\n\treturn await fetchNodeTypesJsonWithRetry(baseUrl + 'types/node-versions.json');\n}\n\n/**\n * Fetch specific node types by their identifier (name@version format)\n * This is useful for incremental syncs where only missing node types need to be fetched\n *\n * @param context - The REST API context containing base URL and auth info\n * @param identifiers - Array of node type identifiers in \"name@version\" format\n * @returns Array of node type descriptions for the requested identifiers\n */\nexport async function getNodeTypesByIdentifier(\n\tcontext: IRestApiContext,\n\tidentifiers: string[],\n): Promise<INodeTypeDescription[]> {\n\tconst body: GetNodeTypesByIdentifierRequestDto = { identifiers };\n\treturn await makeRestApiRequest(context, 'POST', '/node-types/by-identifier', body);\n}\n\nexport async function fetchCommunityNodeTypes(\n\tcontext: IRestApiContext,\n): Promise<CommunityNodeType[]> {\n\treturn await makeRestApiRequest(context, 'GET', '/community-node-types');\n}\n\nexport async function fetchCommunityNodeAttributes(\n\tcontext: IRestApiContext,\n\ttype: string,\n): Promise<CommunityNodeType | null> {\n\treturn await makeRestApiRequest(\n\t\tcontext,\n\t\t'GET',\n\t\t`/community-node-types/${encodeURIComponent(type)}`,\n\t);\n}\n\nexport async function getNodeTranslationHeaders(\n\tcontext: IRestApiContext,\n): Promise<INodeTranslationHeaders | undefined> {\n\treturn await makeRestApiRequest(context, 'GET', '/node-translation-headers');\n}\n\nexport async function getNodesInformation(\n\tcontext: IRestApiContext,\n\tnodeInfos: INodeTypeNameVersion[],\n): Promise<INodeTypeDescription[]> {\n\treturn await makeRestApiRequest(context, 'POST', '/node-types', { nodeInfos });\n}\n\nexport async function getNodeParameterOptions(\n\tcontext: IRestApiContext,\n\tsendData: OptionsRequestDto,\n): Promise<INodePropertyOptions[]> {\n\treturn await makeRestApiRequest(context, 'POST', '/dynamic-node-parameters/options', sendData);\n}\n\nexport async function getResourceLocatorResults(\n\tcontext: IRestApiContext,\n\tsendData: ResourceLocatorRequestDto,\n): Promise<INodeListSearchResult> {\n\treturn await makeRestApiRequest(\n\t\tcontext,\n\t\t'POST',\n\t\t'/dynamic-node-parameters/resource-locator-results',\n\t\tsendData,\n\t);\n}\n\nexport async function getResourceMapperFields(\n\tcontext: IRestApiContext,\n\tsendData: ResourceMapperFieldsRequestDto,\n): Promise<ResourceMapperFields> {\n\treturn await makeRestApiRequest(\n\t\tcontext,\n\t\t'POST',\n\t\t'/dynamic-node-parameters/resource-mapper-fields',\n\t\tsendData,\n\t);\n}\n\nexport async function getLocalResourceMapperFields(\n\tcontext: IRestApiContext,\n\tsendData: ResourceMapperFieldsRequestDto,\n): Promise<ResourceMapperFields> {\n\treturn await makeRestApiRequest(\n\t\tcontext,\n\t\t'POST',\n\t\t'/dynamic-node-parameters/local-resource-mapper-fields',\n\t\tsendData,\n\t);\n}\n\nexport async function getNodeParameterActionResult(\n\tcontext: IRestApiContext,\n\tsendData: ActionResultRequestDto,\n): Promise<NodeParameterValueType> {\n\treturn await makeRestApiRequest(\n\t\tcontext,\n\t\t'POST',\n\t\t'/dynamic-node-parameters/action-result',\n\t\tsendData,\n\t);\n}\n"],"mappings":";;;;;AAuBA,eAAe,4BAA4B,KAAa,UAAU,GAAG,QAAQ,KAAK;AACjF,MAAK,IAAI,UAAU,GAAG,UAAU,SAAS,WAAW;EACnD,MAAM,WAAW,MAAM,MAAM,IAAI,KAAK,EAAE,iBAAiB,MAAM,CAAC;AAEhE,MAAI,OAAO,SAAS,SAAS,YAAY,SAAS,SAAS,KAC1D,QAAO,SAAS;AAGjB,QAAM,MAAM,QAAQ,QAAQ;;AAG7B,OAAM,IAAI,MAAM,6BAA6B;;AAG9C,eAAsB,aAAa,SAAiB;AACnD,QAAO,MAAM,4BAA4B,UAAU,mBAAmB;;AAGvE,eAAsB,oBAAoB,SAAoC;AAC7E,QAAO,MAAM,4BAA4B,UAAU,2BAA2B;;;;;;;;;;AAW/E,eAAsB,yBACrB,SACA,aACkC;AAElC,QAAO,MAAM,mBAAmB,SAAS,QAAQ,6BADA,EAAE,aAAa,CACmB;;AAGpF,eAAsB,wBACrB,SAC+B;AAC/B,QAAO,MAAM,mBAAmB,SAAS,OAAO,wBAAwB;;AAGzE,eAAsB,6BACrB,SACA,MACoC;AACpC,QAAO,MAAM,mBACZ,SACA,OACA,yBAAyB,mBAAmB,KAAK,GACjD;;AAGF,eAAsB,0BACrB,SAC+C;AAC/C,QAAO,MAAM,mBAAmB,SAAS,OAAO,4BAA4B;;AAG7E,eAAsB,oBACrB,SACA,WACkC;AAClC,QAAO,MAAM,mBAAmB,SAAS,QAAQ,eAAe,EAAE,WAAW,CAAC;;AAG/E,eAAsB,wBACrB,SACA,UACkC;AAClC,QAAO,MAAM,mBAAmB,SAAS,QAAQ,oCAAoC,SAAS;;AAG/F,eAAsB,0BACrB,SACA,UACiC;AACjC,QAAO,MAAM,mBACZ,SACA,QACA,qDACA,SACA;;AAGF,eAAsB,wBACrB,SACA,UACgC;AAChC,QAAO,MAAM,mBACZ,SACA,QACA,mDACA,SACA;;AAGF,eAAsB,6BACrB,SACA,UACgC;AAChC,QAAO,MAAM,mBACZ,SACA,QACA,yDACA,SACA;;AAGF,eAAsB,6BACrB,SACA,UACkC;AAClC,QAAO,MAAM,mBACZ,SACA,QACA,0CACA,SACA"}