Workflow: Splitout Code Import

Workflow Details

Download Workflow
{
    "id": "87FUCRVFV07sNlbM",
    "meta": {
        "instanceId": "505c2bdb4483cbbca32871c0acd4b60c83809f177e47e2864f71c1c1760a9b2a",
        "templateCredsSetupCompleted": true
    },
    "name": "Workflow Importer",
    "tags": [],
    "nodes": [
        {
            "id": "eb3d4912-09c3-4c17-8e2b-94dd15e145f4",
            "name": "Extract from File",
            "type": "n8n-nodes-base.extractFromFile",
            "position": [
                2960,
                440
            ],
            "parameters": {
                "options": [],
                "operation": "fromJson",
                "destinationKey": "workflowData",
                "binaryPropertyName": "Workflow_File"
            },
            "typeVersion": 1
        },
        {
            "id": "56b7a01f-47a0-4884-9200-5f5f695ab355",
            "name": "Export Credentials",
            "type": "n8n-nodes-base.executeCommand",
            "position": [
                3180,
                620
            ],
            "parameters": {
                "command": "n8n export:credentials --all --pretty --decrypted --output=\/tmp\/cred"
            },
            "typeVersion": 1
        },
        {
            "id": "85de1146-4d61-45bf-b225-956d3d16e84b",
            "name": "Get Credentials Data",
            "type": "n8n-nodes-base.readWriteFile",
            "position": [
                3400,
                620
            ],
            "parameters": {
                "options": [],
                "fileSelector": "\/tmp\/cred"
            },
            "typeVersion": 1
        },
        {
            "id": "187f1f50-472f-41ac-96e8-9c2f17fa3c00",
            "name": "Binary to JSON",
            "type": "n8n-nodes-base.extractFromFile",
            "position": [
                3620,
                620
            ],
            "parameters": {
                "options": [],
                "operation": "fromJson"
            },
            "typeVersion": 1
        },
        {
            "id": "85d79317-786a-49eb-ade4-f9d0949c5bf4",
            "name": "Merge",
            "type": "n8n-nodes-base.merge",
            "position": [
                4060,
                500
            ],
            "parameters": {
                "mode": "combine",
                "options": {
                    "includeUnpaired": true
                },
                "combineBy": "combineByPosition"
            },
            "typeVersion": 3
        },
        {
            "id": "6976901c-a052-47fa-a754-217fd5d0f58e",
            "name": "Collect Credentials to Replace",
            "type": "n8n-nodes-base.merge",
            "position": [
                3040,
                1120
            ],
            "parameters": [],
            "typeVersion": 3
        },
        {
            "id": "c5b7ab56-c833-4405-913a-1a484094a6ff",
            "name": "Settings",
            "type": "n8n-nodes-base.set",
            "position": [
                980,
                620
            ],
            "parameters": {
                "options": [],
                "assignments": {
                    "assignments": [
                        {
                            "id": "8a5d50fc-95dc-40b3-a3f2-293521bab29a",
                            "name": "remoteInstances",
                            "type": "array",
                            "value": "="
                        }
                    ]
                }
            },
            "typeVersion": 3.399999999999999911182158029987476766109466552734375
        },
        {
            "id": "a9287c9a-ddf4-4023-b997-bb7b12e2d0ee",
            "name": "Prepare Request Data",
            "type": "n8n-nodes-base.code",
            "position": [
                1640,
                620
            ],
            "parameters": {
                "jsCode": "output = {};\n\nfor (const instance of $('Settings').first().json.remoteInstances) {\n  if (instance.name == $('Choose Instance').first().json.Source) {\n    output.instance = instance;\n  }\n}\n\nreturn output;"
            },
            "typeVersion": 2
        },
        {
            "id": "85ccc4bf-a465-49bf-ac17-9933f1b9d46d",
            "name": "Get Workflows",
            "type": "n8n-nodes-base.httpRequest",
            "onError": "continueErrorOutput",
            "position": [
                1860,
                620
            ],
            "parameters": {
                "url": "={{ $json.instance.baseUrl }}\/workflows",
                "options": [],
                "sendBody": true,
                "sendHeaders": true,
                "bodyParameters": {
                    "parameters": [
                        {
                            "name": "limit",
                            "value": "250"
                        }
                    ]
                },
                "headerParameters": {
                    "parameters": [
                        {
                            "name": "X-N8N-API-KEY",
                            "value": "={{ $json.instance.apiKey }}"
                        }
                    ]
                }
            },
            "typeVersion": 4.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "2d86c12d-f308-4cdc-96a4-ab4cbecd39ad",
            "name": "No Operation",
            "type": "n8n-nodes-base.noOp",
            "position": [
                3180,
                440
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "8ef0f34d-2468-450e-8a3c-e3d9ad9e371b",
            "name": "Determine Workflow Source",
            "type": "n8n-nodes-base.if",
            "position": [
                760,
                500
            ],
            "parameters": {
                "options": [],
                "conditions": {
                    "options": {
                        "version": 2,
                        "leftValue": "",
                        "caseSensitive": true,
                        "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                        {
                            "id": "f1d93a30-01c9-4141-85b2-8ceb762b9e86",
                            "operator": {
                                "name": "filter.operator.equals",
                                "type": "string",
                                "operation": "equals"
                            },
                            "leftValue": "={{ $json.Source }}",
                            "rightValue": "File Upload"
                        }
                    ]
                }
            },
            "typeVersion": 2.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "3ff270a7-5837-40b5-85b4-da3b28ae6147",
            "name": "Sticky Note6",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                920,
                520
            ],
            "parameters": {
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "## Setup instances\nEach instnce requires a name, apiKey and baseURL"
            },
            "typeVersion": 1
        },
        {
            "id": "4d0d4684-5ffc-4e12-8d05-55245339fd96",
            "name": "Sticky Note2",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                380,
                680
            ],
            "parameters": {
                "color": 5,
                "width": 535.641963485675887568504549562931060791015625,
                "height": 223.199079401611243156366981565952301025390625,
                "content": "## Instances config example\n```\n[\n  {\n    \"name\": \"n8n-test\",\n    \"apiKey\": \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n    \"baseUrl\": \"https:\/\/n8n-test.example.com\/api\/v1\"\n  },\n  {\n    ...\n  }\n]\n```"
            },
            "typeVersion": 1
        },
        {
            "id": "e76e291e-511b-4612-836f-ae6f7af1d3de",
            "name": "Sticky Note7",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                480,
                400
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "A form which collects the source option.\n*Consider securing the form using Basic Auth.*"
            },
            "typeVersion": 1
        },
        {
            "id": "38ecbde8-9081-4509-9fa3-c5b2d568ebad",
            "name": "Sticky Note8",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                700,
                400
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Switch between the available options"
            },
            "typeVersion": 1
        },
        {
            "id": "efa893aa-fce5-45ff-a234-6e73235a33ea",
            "name": "Error1",
            "type": "n8n-nodes-base.form",
            "position": [
                3700,
                1220
            ],
            "webhookId": "5c7933f0-f09a-4bc6-9e68-cf73e8fb5813",
            "parameters": {
                "options": [],
                "operation": "completion",
                "completionTitle": "\u26a0\ufe0f Import failed",
                "completionMessage": "=Please check the workflow settings"
            },
            "typeVersion": 1
        },
        {
            "id": "e5edd30e-6396-407a-bd3b-a5e0f66c7e3a",
            "name": "Error",
            "type": "n8n-nodes-base.form",
            "position": [
                2080,
                700
            ],
            "webhookId": "5c7933f0-f09a-4bc6-9e68-cf73e8fb5813",
            "parameters": {
                "options": [],
                "operation": "completion",
                "completionTitle": "\u26a0\ufe0f Failed retrieving workflows",
                "completionMessage": "=Please check the workflow settings"
            },
            "typeVersion": 1
        },
        {
            "id": "c410045e-4adf-4304-910a-7cd5868892d3",
            "name": "Split Out Workflows",
            "type": "n8n-nodes-base.splitOut",
            "position": [
                2080,
                540
            ],
            "parameters": {
                "options": [],
                "fieldToSplitOut": "data"
            },
            "typeVersion": 1
        },
        {
            "id": "5fafa399-0c6b-4db0-9b01-319a02368eee",
            "name": "Get Workflow Names",
            "type": "n8n-nodes-base.code",
            "position": [
                2520,
                540
            ],
            "parameters": {
                "jsCode": "dropDownValues = [];\n\nfor (const workflow of $input.all()) {\n  dropDownValues.push({\"option\": workflow.json.name});\n}\n\nreturn { \"options\": JSON.stringify(dropDownValues) };"
            },
            "typeVersion": 2
        },
        {
            "id": "b7408a47-97ff-45da-b8e7-bb2380f61155",
            "name": "Sort by updatedAt DESC",
            "type": "n8n-nodes-base.sort",
            "position": [
                2300,
                540
            ],
            "parameters": {
                "options": [],
                "sortFieldsUi": {
                    "sortField": [
                        {
                            "order": "descending",
                            "fieldName": "updatedAt"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "74741a71-79b8-4479-9dac-826db7984620",
            "name": "No Operation1",
            "type": "n8n-nodes-base.noOp",
            "position": [
                4280,
                680
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "89657c6f-a703-4145-b690-7234583bbe7a",
            "name": "Sticky Note9",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1500,
                1240
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 294.99058269382538810532423667609691619873046875,
                "content": "## Map Credentials\nBeing mapped by name since one workflow can have multiple credentials of the same type."
            },
            "typeVersion": 1
        },
        {
            "id": "a2d21bb5-5118-4ea2-920b-1c05570da610",
            "name": "Rename Keys",
            "type": "n8n-nodes-base.renameKeys",
            "position": [
                3840,
                620
            ],
            "parameters": {
                "keys": {
                    "key": [
                        {
                            "newKey": "allCredentials",
                            "currentKey": "data"
                        }
                    ]
                },
                "additionalOptions": []
            },
            "typeVersion": 1
        },
        {
            "id": "d756edc6-cf0d-4a35-b29c-99e5ec41c4db",
            "name": "Create Workflow",
            "type": "n8n-nodes-base.n8n",
            "onError": "continueErrorOutput",
            "position": [
                3480,
                1120
            ],
            "parameters": {
                "operation": "create",
                "requestOptions": [],
                "workflowObject": "={{ $json.toJsonString() }}"
            },
            "credentials": {
                "n8nApi": {
                    "id": "taiQiy4KxXUI20Af",
                    "name": "n8n account"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "4d75a5b1-5227-41a4-87cc-67a5a8074f37",
            "name": "Upload File",
            "type": "n8n-nodes-base.form",
            "position": [
                1420,
                440
            ],
            "webhookId": "b9850dfc-ecf9-45c8-ae68-39327c6a0143",
            "parameters": {
                "options": {
                    "formTitle": "Upload File",
                    "formDescription": "Choose an n8n workflow file"
                },
                "formFields": {
                    "values": [
                        {
                            "fieldType": "file",
                            "fieldLabel": "Workflow File",
                            "requiredField": true,
                            "acceptFileTypes": ".json"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "5e5e3ece-00b3-4790-89e0-35d3c8d03b7d",
            "name": "Choose Workflow",
            "type": "n8n-nodes-base.form",
            "position": [
                2740,
                540
            ],
            "webhookId": "100af69b-5203-48d3-8e90-1e846d0752d4",
            "parameters": {
                "options": {
                    "formTitle": "Choose Workflow",
                    "formDescription": "Choose the remote workflow which should be imported"
                },
                "defineForm": "json",
                "jsonOutput": "=[\n   {\n      \"fieldLabel\": \"Workflow\",\n      \"fieldType\": \"dropdown\",\n      \"requiredField\": true,\n      \"fieldOptions\": {\n        \"values\": {{ $json.options }}\n      }\n   }\n]"
            },
            "typeVersion": 1
        },
        {
            "id": "7fcc236c-dd97-4a1e-bf3d-d85aba520938",
            "name": "Success",
            "type": "n8n-nodes-base.form",
            "position": [
                3700,
                1020
            ],
            "webhookId": "5c7933f0-f09a-4bc6-9e68-cf73e8fb5813",
            "parameters": {
                "options": [],
                "operation": "completion",
                "completionTitle": "\u2705 Import completed",
                "completionMessage": "=The workflow has been created successfully. {{ $if($('Get Missing Credentials').all().length > 0, \"Please head over to your credentials and update all new entries with a trailing \u26a0\ufe0f symbol.\", \"\") }} "
            },
            "typeVersion": 1
        },
        {
            "id": "27736a52-af15-47f8-8186-d486b2968256",
            "name": "Choose Instance",
            "type": "n8n-nodes-base.form",
            "position": [
                1420,
                620
            ],
            "webhookId": "2a40fe8d-7b6b-4695-845c-2d278f5bf93e",
            "parameters": {
                "options": {
                    "formTitle": "Select Source Instance",
                    "formDescription": "Choose the n8n instance where to retrieve workflows from"
                },
                "defineForm": "json",
                "jsonOutput": "=[\n   {\n      \"fieldLabel\": \"Source\",\n      \"fieldType\": \"dropdown\",\n      \"requiredField\": true,\n      \"fieldOptions\": {\n        \"values\": {{ $json.options }}\n      }\n   }\n]"
            },
            "typeVersion": 1
        },
        {
            "id": "9b83c34d-0b0b-47bc-b4a7-27eed0e796fb",
            "name": "On form submission",
            "type": "n8n-nodes-base.formTrigger",
            "position": [
                540,
                500
            ],
            "webhookId": "2c9b2fa1-3235-4b73-a6e0-73392dcb9ed0",
            "parameters": {
                "options": {
                    "buttonLabel": "Continue",
                    "appendAttribution": false
                },
                "formTitle": "Workflow Import",
                "formFields": {
                    "values": [
                        {
                            "fieldType": "dropdown",
                            "fieldLabel": "Source",
                            "fieldOptions": {
                                "values": [
                                    {
                                        "option": "File Upload"
                                    },
                                    {
                                        "option": "Remote Instance"
                                    }
                                ]
                            },
                            "requiredField": true
                        }
                    ]
                },
                "formDescription": "This tool allows importing an n8n workflow from a file or another n8n instance\n\nKeep in mind that your destination n8n instance (this environment) should always run on an equal or newer version then compared to the source."
            },
            "typeVersion": 2.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "f6d45cd9-a091-4c8b-8ef0-6815a1adb0f1",
            "name": "Generate Instance Options",
            "type": "n8n-nodes-base.code",
            "position": [
                1200,
                620
            ],
            "parameters": {
                "jsCode": "dropDownValues = [];\n\nfor (const instance of $input.first().json.remoteInstances) {\n  dropDownValues.push({\"option\": instance.name});\n}\n\nreturn { \"options\": JSON.stringify(dropDownValues) };"
            },
            "typeVersion": 2
        },
        {
            "id": "73717c97-4579-4e49-ac33-4aada3bcaf55",
            "name": "Sticky Note10",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1140,
                520
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Prepare a list of options for the next form"
            },
            "typeVersion": 1
        },
        {
            "id": "0537d195-3885-4903-8a41-56915f7b64de",
            "name": "Sticky Note11",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1360,
                360
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 416.44154657172128963793511502444744110107421875,
                "content": "Request more input from the user"
            },
            "typeVersion": 1
        },
        {
            "id": "43ee5820-e236-49f9-b89b-e4c5d4dd4188",
            "name": "Sticky Note",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1580,
                520
            ],
            "parameters": {
                "color": 7,
                "width": 435.591355701075144679634831845760345458984375,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Map Settings to selected instance and retrieve all workflows from it"
            },
            "typeVersion": 1
        },
        {
            "id": "53a42c23-af05-4e21-a936-14d2419b4530",
            "name": "Sticky Note12",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2020,
                440
            ],
            "parameters": {
                "color": 7,
                "width": 656.138956929123423833516426384449005126953125,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Prepare a list of options for the next form"
            },
            "typeVersion": 1
        },
        {
            "id": "fd103846-04a6-4fb0-aba4-6230a85a7555",
            "name": "Sticky Note13",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2680,
                440
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Let the user choose a workflow from a list"
            },
            "typeVersion": 1
        },
        {
            "id": "e58bdf1e-fcda-4b68-9798-24de0c7c6bd9",
            "name": "Sticky Note14",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                3120,
                560
            ],
            "parameters": {
                "color": 7,
                "width": 875.945179995156877339468337595462799072265625,
                "height": 216.14785807970730502347578294575214385986328125,
                "content": "Retrieve all credentials from this instance and convert the data to the final JSON format"
            },
            "typeVersion": 1
        },
        {
            "id": "08855416-ca33-4344-b96b-4564d9841dfd",
            "name": "Get Selected Workflow",
            "type": "n8n-nodes-base.code",
            "position": [
                2960,
                620
            ],
            "parameters": {
                "jsCode": "for (const workflow of $('Get Workflows').first().json.data) {\n  if (workflow.name == $input.first().json.Workflow) {\n    \n    return { \"workflowData\": workflow };\n  }\n}\n\nreturn false;"
            },
            "typeVersion": 2
        },
        {
            "id": "9a09a6b5-2b8d-461e-b63f-91100c3e7974",
            "name": "Sticky Note15",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2900,
                360
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 416.44154657172128963793511502444744110107421875,
                "content": "Convert the retrieved workflow into the final JSON format"
            },
            "typeVersion": 1
        },
        {
            "id": "269c32c3-224b-42df-bd27-7718374cb343",
            "name": "Sticky Note16",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                4000,
                420
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Combine the workflow and credential data to one item"
            },
            "typeVersion": 1
        },
        {
            "id": "c9bbc713-3ac7-42d7-85c3-0c8aa22201d4",
            "name": "Split Out Nodes",
            "type": "n8n-nodes-base.splitOut",
            "position": [
                1060,
                1020
            ],
            "parameters": {
                "options": [],
                "fieldToSplitOut": "workflowData.nodes"
            },
            "typeVersion": 1
        },
        {
            "id": "e4c37af5-64de-4d40-9ff1-3a622ea40b86",
            "name": "Filter Out Nodes Having Credentials",
            "type": "n8n-nodes-base.filter",
            "position": [
                1280,
                1020
            ],
            "parameters": {
                "options": [],
                "conditions": {
                    "options": {
                        "version": 2,
                        "leftValue": "",
                        "caseSensitive": true,
                        "typeValidation": "strict"
                    },
                    "combinator": "and",
                    "conditions": [
                        {
                            "id": "b14ec02c-c52c-4907-8f55-ebb168a8b10e",
                            "operator": {
                                "type": "object",
                                "operation": "exists",
                                "singleValue": true
                            },
                            "leftValue": "={{ $json.credentials }}",
                            "rightValue": ""
                        }
                    ]
                }
            },
            "typeVersion": 2.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "bdb20dfd-1b47-4b50-a938-19f7790d180b",
            "name": "Extract Credentials",
            "type": "n8n-nodes-base.set",
            "position": [
                1500,
                1020
            ],
            "parameters": {
                "options": [],
                "assignments": {
                    "assignments": [
                        {
                            "id": "b37508a3-188e-4e6e-b251-b6a34ac193be",
                            "name": "type",
                            "type": "string",
                            "value": "={{ $json.credentials.keys()[0] }}"
                        },
                        {
                            "id": "fc308784-91ec-4b6b-8bca-2c01472574a7",
                            "name": "name",
                            "type": "string",
                            "value": "={{ $json.credentials[$json.credentials.keys()[0]].name }}"
                        },
                        {
                            "id": "a3142dc0-021d-4191-815b-d5cf6d9fe6a8",
                            "name": "id",
                            "type": "string",
                            "value": "={{ $json.credentials[$json.credentials.keys()[0]].id }}"
                        }
                    ]
                }
            },
            "typeVersion": 3.399999999999999911182158029987476766109466552734375
        },
        {
            "id": "554e0ee3-e722-4dcf-b82b-ea1ea59a037e",
            "name": "Remove Duplicate Credentials by Name",
            "type": "n8n-nodes-base.removeDuplicates",
            "position": [
                1720,
                1020
            ],
            "parameters": {
                "compare": "selectedFields",
                "options": [],
                "fieldsToCompare": "name"
            },
            "typeVersion": 2
        },
        {
            "id": "0da2c486-ea7a-465b-b3cd-88e09e63c06b",
            "name": "Map Credentials",
            "type": "n8n-nodes-base.form",
            "position": [
                2160,
                1020
            ],
            "webhookId": "5aca5fbe-cbff-4824-8586-cd59967dd154",
            "parameters": {
                "options": {
                    "formTitle": "Map Credentials",
                    "buttonLabel": "Import Workflow",
                    "formDescription": "Each option is labeled with the name of the original credential. Select the according credential for each item.\n\nYou can also choose to create a new credential. It will then create an empty credential, using the name of the original one, which you can configure afterwards."
                },
                "defineForm": "json",
                "jsonOutput": "={{ $json.options }}"
            },
            "typeVersion": 1
        },
        {
            "id": "8b92114e-6aa6-4404-a7f1-6224a45acdae",
            "name": "Get Selected Credentials",
            "type": "n8n-nodes-base.code",
            "position": [
                2380,
                1220
            ],
            "parameters": {
                "jsCode": "function capitalizeFirstLetter(val) {\n    return String(val).charAt(0).toUpperCase() + String(val).slice(1);\n}\n\nlet missingCredentials = [];\nfor (const credential of $('Remove Duplicate Credentials by Name').all()) {\n  let type = credential.json.type;\n  let oldName = credential.json.name;\n  let name = $('Map Credentials').first().json[credential.json.name];\n  if (name != \"[create new]\") {\n    for (const credentialData of $('Merge').first().json.allCredentials) {\n      if (credentialData.name == name) {\n        id = credentialData.id;\n        continue;\n      }\n    }\n    missingCredentials.push({\n      \"oldName\": oldName,\n      \"name\": name,\n      \"type\": type,\n      \"id\": id\n    });\n  }\n}\n\nreturn missingCredentials;"
            },
            "typeVersion": 2
        },
        {
            "id": "bafcb91c-f441-40de-a1fd-7435206d991e",
            "name": "Add Old Names",
            "type": "n8n-nodes-base.set",
            "position": [
                2820,
                1020
            ],
            "parameters": {
                "options": [],
                "assignments": {
                    "assignments": [
                        {
                            "id": "19847be5-420a-4dd7-8a45-fed1a1cbc0b8",
                            "name": "oldName",
                            "type": "string",
                            "value": "={{ $json.name.replace(\" \u26a0\ufe0f\", \"\") }}"
                        }
                    ]
                },
                "includeOtherFields": true
            },
            "typeVersion": 3.399999999999999911182158029987476766109466552734375
        },
        {
            "id": "8da7f198-5e85-4d88-907e-1e35a55bdb96",
            "name": "Replace Credentials in Workflow",
            "type": "n8n-nodes-base.code",
            "position": [
                3260,
                1120
            ],
            "parameters": {
                "jsCode": "\/\/ Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet workflowData = $('Merge').first().json.workflowData;\nfor (const credential of $input.all()) {  \n  for (const nodes of workflowData.nodes) {\n    if (nodes.credentials \n        && nodes.credentials[credential.json.type] !== undefined \n        && nodes.credentials[credential.json.type].name == credential.json.oldName) {\n      nodes.credentials[credential.json.type].id = credential.json.id;\n      nodes.credentials[credential.json.type].name = credential.json.name;\n    }\n  }\n}\n\nreturn workflowData;\n\n"
            },
            "typeVersion": 2
        },
        {
            "id": "f370d4fb-229e-4604-a1b1-c7c0cab8a32d",
            "name": "Sticky Note17",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1000,
                920
            ],
            "parameters": {
                "color": 7,
                "width": 875.62963662819993260200135409832000732421875,
                "height": 257.04798079002517852131859399378299713134765625,
                "content": "Extract a list of all credentials from the workflow. The reference will be the old\/existing name of the credential, since one workflow can contain multiple credentials of the same type."
            },
            "typeVersion": 1
        },
        {
            "id": "31c0d4b7-4682-4db1-a453-0f1d69c58665",
            "name": "Sticky Note18",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2100,
                920
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Let the user map every credential or create new ones"
            },
            "typeVersion": 1
        },
        {
            "id": "d3c5edb1-74dc-4168-a987-84cdd54714cd",
            "name": "Generate Credential Options",
            "type": "n8n-nodes-base.code",
            "position": [
                1940,
                1020
            ],
            "parameters": {
                "jsCode": "function capitalizeFirstLetter(val) {\n    return String(val).charAt(0).toUpperCase() + String(val).slice(1);\n}\n\nformOptions = [];\nfor (const item of $input.all()) {\n  dropDownValues = [];\n  for (const credential of $('Merge').first().json.allCredentials) {\n    if (credential.type == item.json.type) {\n      dropDownValues.push({\"option\": credential.name});\n    }\n  }\n  dropDownValues.push({\"option\": \"[create new]\"});\n  formOptions.push({\n      \"fieldLabel\": item.json.name,\n      \"fieldType\": \"dropdown\",\n      \"requiredField\": true,\n      \"fieldOptions\": {\n        \"values\": dropDownValues\n      }\n  });\n}\n\nreturn { \"options\": JSON.stringify(formOptions) };"
            },
            "typeVersion": 2
        },
        {
            "id": "255ff6ab-d360-49dd-b63f-9f0d99278ae4",
            "name": "Sticky Note19",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                1880,
                920
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 255.86856541619232530138106085360050201416015625,
                "content": "Prepare a list of options for the next form"
            },
            "typeVersion": 1
        },
        {
            "id": "ae074b5a-d76a-4529-ba59-0d201dbd4e9e",
            "name": "Sticky Note20",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2320,
                920
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 456.122899995753641633200459182262420654296875,
                "content": "Split mapped credentials into two streams, depending on wether they exist or not"
            },
            "typeVersion": 1
        },
        {
            "id": "1b6d26af-9d6b-4865-bd81-8a5de49bc741",
            "name": "Sticky Note21",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2540,
                919.79999999999972715158946812152862548828125
            ],
            "parameters": {
                "color": 7,
                "width": 435.9583041466270287855877541005611419677734375,
                "height": 276.0685654161919728721841238439083099365234375,
                "content": "Create empty credentials if the option \"[create credential]\" was selected. and add the name of the originally assigned credential for future reference"
            },
            "typeVersion": 1
        },
        {
            "id": "5ba8987a-7558-4fb8-94ef-ac2b81df5536",
            "name": "Create Empty Credentials",
            "type": "n8n-nodes-base.n8n",
            "position": [
                2600,
                1020
            ],
            "parameters": {
                "data": "={{ $json.data.toJsonString() }}",
                "name": "={{ $json.name }}",
                "resource": "credential",
                "requestOptions": [],
                "credentialTypeName": "={{ $json.type }}"
            },
            "credentials": {
                "n8nApi": {
                    "id": "taiQiy4KxXUI20Af",
                    "name": "n8n account"
                }
            },
            "typeVersion": 1
        },
        {
            "id": "7efa8f88-f5a0-47c8-8d12-2cb8c9b0e0c7",
            "name": "Get Missing Credentials",
            "type": "n8n-nodes-base.code",
            "position": [
                2380,
                1020
            ],
            "parameters": {
                "jsCode": "function capitalizeFirstLetter(val) {\n    return String(val).charAt(0).toUpperCase() + String(val).slice(1);\n}\n\nlet missingCredentials = [];\nfor (const credential of $('Remove Duplicate Credentials by Name').all()) {\n  let type = credential.json.type;\n  let name = $('Map Credentials').first().json[credential.json.name];\n  if (name == \"[create new]\") {\n    data = {};\n    if (type.includes(\"OAuth\")) {\n      data = { \"clientId\": \"\", \"clientSecret\": \"\" };\n    }\n    missingCredentials.push({\n      \"name\": credential.json.name + \" \u26a0\ufe0f\",\n      \"type\": type,\n      \"data\": data\n    });\n  }\n}\n\nreturn missingCredentials;"
            },
            "typeVersion": 2
        },
        {
            "id": "2394952f-c6db-4c6e-8f62-080c952734c9",
            "name": "Sticky Note22",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                2980,
                1020
            ],
            "parameters": {
                "color": 7,
                "width": 435.9583041466270287855877541005611419677734375,
                "height": 276.0685654161919728721841238439083099365234375,
                "content": "Gather all new credential data and update the workflow accordingly. The oldName is being used as a reference during the search. "
            },
            "typeVersion": 1
        },
        {
            "id": "4ee2a621-29c9-4d23-b222-0b31ff1cc903",
            "name": "Sticky Note23",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                3420,
                1020
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 275.84185419861802301966235972940921783447265625,
                "content": "Create the updated workflow on this instance"
            },
            "typeVersion": 1
        },
        {
            "id": "e041c560-e847-472e-888e-0b6b3edb8998",
            "name": "Sticky Note24",
            "type": "n8n-nodes-base.stickyNote",
            "position": [
                3640,
                920
            ],
            "parameters": {
                "color": 7,
                "width": 216.472930106289140894659794867038726806640625,
                "height": 456.122899995753641633200459182262420654296875,
                "content": "Provide feedback to the user wether the process was successful or not"
            },
            "typeVersion": 1
        }
    ],
    "active": false,
    "pinData": [],
    "settings": {
        "executionOrder": "v1"
    },
    "versionId": "5ee2c284-b417-4ab6-b0bf-effa25225dbf",
    "connections": {
        "Merge": {
            "main": [
                [
                    {
                        "node": "No Operation1",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Settings": {
            "main": [
                [
                    {
                        "node": "Generate Instance Options",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Rename Keys": {
            "main": [
                [
                    {
                        "node": "Merge",
                        "type": "main",
                        "index": 1
                    }
                ]
            ]
        },
        "Upload File": {
            "main": [
                [
                    {
                        "node": "Extract from File",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "No Operation": {
            "main": [
                [
                    {
                        "node": "Merge",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Add Old Names": {
            "main": [
                [
                    {
                        "node": "Collect Credentials to Replace",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Workflows": {
            "main": [
                [
                    {
                        "node": "Split Out Workflows",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Error",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "No Operation1": {
            "main": [
                [
                    {
                        "node": "Split Out Nodes",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Binary to JSON": {
            "main": [
                [
                    {
                        "node": "Rename Keys",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Choose Instance": {
            "main": [
                [
                    {
                        "node": "Prepare Request Data",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Choose Workflow": {
            "main": [
                [
                    {
                        "node": "Get Selected Workflow",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Create Workflow": {
            "main": [
                [
                    {
                        "node": "Success",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Error1",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Map Credentials": {
            "main": [
                [
                    {
                        "node": "Get Missing Credentials",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "Get Selected Credentials",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Split Out Nodes": {
            "main": [
                [
                    {
                        "node": "Filter Out Nodes Having Credentials",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Extract from File": {
            "main": [
                [
                    {
                        "node": "Export Credentials",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "No Operation",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Export Credentials": {
            "main": [
                [
                    {
                        "node": "Get Credentials Data",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Workflow Names": {
            "main": [
                [
                    {
                        "node": "Choose Workflow",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "On form submission": {
            "main": [
                [
                    {
                        "node": "Determine Workflow Source",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Extract Credentials": {
            "main": [
                [
                    {
                        "node": "Remove Duplicate Credentials by Name",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Split Out Workflows": {
            "main": [
                [
                    {
                        "node": "Sort by updatedAt DESC",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Credentials Data": {
            "main": [
                [
                    {
                        "node": "Binary to JSON",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Prepare Request Data": {
            "main": [
                [
                    {
                        "node": "Get Workflows",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Selected Workflow": {
            "main": [
                [
                    {
                        "node": "Export Credentials",
                        "type": "main",
                        "index": 0
                    },
                    {
                        "node": "No Operation",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Sort by updatedAt DESC": {
            "main": [
                [
                    {
                        "node": "Get Workflow Names",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Missing Credentials": {
            "main": [
                [
                    {
                        "node": "Create Empty Credentials",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Create Empty Credentials": {
            "main": [
                [
                    {
                        "node": "Add Old Names",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Selected Credentials": {
            "main": [
                [
                    {
                        "node": "Collect Credentials to Replace",
                        "type": "main",
                        "index": 1
                    }
                ]
            ]
        },
        "Determine Workflow Source": {
            "main": [
                [
                    {
                        "node": "Upload File",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "Settings",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Generate Instance Options": {
            "main": [
                [
                    {
                        "node": "Choose Instance",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Generate Credential Options": {
            "main": [
                [
                    {
                        "node": "Map Credentials",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Collect Credentials to Replace": {
            "main": [
                [
                    {
                        "node": "Replace Credentials in Workflow",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Replace Credentials in Workflow": {
            "main": [
                [
                    {
                        "node": "Create Workflow",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Filter Out Nodes Having Credentials": {
            "main": [
                [
                    {
                        "node": "Extract Credentials",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Remove Duplicate Credentials by Name": {
            "main": [
                [
                    {
                        "node": "Generate Credential Options",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Manual N8Ntrainingcustomerdatastore Automation Webhook
View
Splitout Schedule Send Scheduled
View
Manual Stickynote Send Webhook
View
Splitout Schedule Create Webhook
View
Schedule Slack Create Scheduled
View
Mailchimp Automate Triggered
View
Awss3 Compression Automate Triggered
View
Insert data into a new row for a table in Coda
View
Qualify new leads in Google Sheets via OpenAI's GPT-4
View
Manual Ftp Automation Webhook
View