fix credential postgres

This commit is contained in:
2026-02-16 22:32:25 +00:00
parent 52a2cfd827
commit 96e3338c50
3 changed files with 102 additions and 159 deletions

View File

@@ -78,10 +78,6 @@
"workflowId": "H6TZCHyiYOr1X6Xf",
"tagId": "FydpKYmttDwoZVAA"
},
{
"workflowId": "WkAdUd9jXTtPagGO",
"tagId": "FydpKYmttDwoZVAA"
},
{
"workflowId": "cPWZKfrHOUSUZjIp",
"tagId": "FydpKYmttDwoZVAA"

View File

@@ -22,7 +22,7 @@
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
816,
768,
304
]
},
@@ -68,31 +68,17 @@
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
640,
528,
304
],
"id": "2f0708e1-996c-4705-b374-2a119fcd6b18",
"name": "Get Active Followed Series",
"credentials": {
"postgres": {
"id": "dsnKfvOBMkgU21Lt",
"name": "supabase postgres account"
"id": "9grzZwW7Br6SzdV8",
"name": "n8n-media"
}
}
},
{
"parameters": {
"language": "pythonNative",
"pythonCode": "# Mode: Run Once for All Items\n# Purpose: Debug the environment context passed from Parent to Child\n\nresults = []\n\nfor _item in _items:\n # We create a debug log of the current execution context\n debug_info = {\n \"execution_id\": _item['json'].get('executionId', 'N/A'),\n \"parent_execution_id\": _item['json'].get('parentExecutionId', 'N/A'),\n # Check if internal n8n variables are reachable\n \"workflow_id\": _item['json'].get('workflowId', 'N/A'),\n }\n \n _item['json']['debug_context'] = debug_info\n results.append(_item)\n\nreturn results"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
432,
304
],
"id": "b538b6ba-0c72-40ee-ba3e-723e79fc0d21",
"name": "Code in Python"
}
],
"connections": {
@@ -100,7 +86,7 @@
"main": [
[
{
"node": "Code in Python",
"node": "Get Active Followed Series",
"type": "main",
"index": 0
}
@@ -128,17 +114,6 @@
}
]
]
},
"Code in Python": {
"main": [
[
{
"node": "Get Active Followed Series",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
@@ -149,7 +124,7 @@
"saveExecutionProgress": true
},
"triggerCount": 0,
"versionId": "dfde93ca-153c-4dce-b4f3-eac86c25d2e5",
"versionId": "9c096562-3d33-4d44-8f30-5afdd1bfc05e",
"owner": {
"type": "personal",
"projectId": "FeLO36wNUAcn61Wj",

View File

@@ -7,8 +7,8 @@
"id": "workflow-trigger",
"name": "Workflow Trigger",
"position": [
2272,
864
48,
640
],
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1
@@ -21,8 +21,8 @@
"id": "ssh-list-general",
"name": "List General Folders",
"position": [
2496,
768
272,
544
],
"type": "n8n-nodes-base.ssh",
"typeVersion": 1,
@@ -40,8 +40,8 @@
"id": "code-parse",
"name": "Code",
"position": [
2720,
672
496,
448
],
"type": "n8n-nodes-base.code",
"typeVersion": 2
@@ -61,8 +61,8 @@
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
3872,
592
1648,
368
],
"id": "409e6caa-c009-4b43-9170-e8c3251ef003",
"name": "Lookup Agent",
@@ -84,8 +84,8 @@
"type": "@tavily/n8n-nodes-tavily.tavilyTool",
"typeVersion": 1,
"position": [
4000,
816
1776,
592
],
"id": "b7ce39bf-87d5-4af4-bcf2-2b58381f1956",
"name": "tavily_search",
@@ -286,8 +286,8 @@
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
5424,
704
3200,
480
],
"id": "a85dde4b-2471-4ced-8e3c-f999a6297895",
"name": "Insert or update rows in a table",
@@ -308,8 +308,8 @@
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
3392,
768
1168,
544
],
"id": "3e1127d2-a059-475c-a90e-9cf2dc3a8d46",
"name": "Loop Over Items"
@@ -342,8 +342,8 @@
"type": "n8n-nodes-base.httpRequestTool",
"typeVersion": 4.3,
"position": [
4128,
816
1904,
592
],
"id": "14c979cf-00b4-4f79-8b49-e3e1b6fe54da",
"name": "google_search"
@@ -384,8 +384,8 @@
"type": "n8n-nodes-base.filter",
"typeVersion": 2.3,
"position": [
3168,
768
944,
544
],
"id": "8b666e89-b553-42a1-8d91-94fd5404760c",
"name": "Filter Unwanted",
@@ -401,8 +401,8 @@
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
4624,
768
2400,
544
],
"id": "31313285-3e56-44d1-a79b-c65bd2206460",
"name": "Merge"
@@ -443,8 +443,8 @@
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
5200,
768
2976,
544
],
"id": "d0d29d9a-606e-41d4-a8e9-867f51469f1e",
"name": "verified"
@@ -454,8 +454,8 @@
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
5648,
944
3424,
720
],
"id": "618a5f45-e4d2-4ba3-a61a-858b7025ab85",
"name": "Formatting"
@@ -469,8 +469,8 @@
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"typeVersion": 1.3,
"position": [
4256,
816
2032,
592
],
"id": "3baa52c0-8ce1-40fb-9b91-cfe6f869e9ae",
"name": "Structured Output Parser",
@@ -486,8 +486,8 @@
"id": "postgres-filter",
"name": "Fetch Existing",
"position": [
2720,
864
496,
640
],
"type": "n8n-nodes-base.postgres",
"typeVersion": 1,
@@ -509,8 +509,8 @@
"id": "merge-check",
"name": "Filter Existing",
"position": [
2944,
768
720,
544
],
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2
@@ -526,8 +526,8 @@
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
2272,
672
48,
448
],
"id": "f411d807-43c9-459b-a0bb-1c079a4d8666",
"name": "Schedule Trigger"
@@ -545,8 +545,8 @@
"type": "n8n-nodes-base.gmail",
"typeVersion": 2.2,
"position": [
4000,
416
1776,
192
],
"id": "383ff376-cec7-4cde-a9a6-265cee6db626",
"name": "Send a message",
@@ -565,8 +565,8 @@
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
3824,
416
1600,
192
],
"id": "b77eac76-096e-40d6-907e-cc861acca2dd",
"name": "Code in JavaScript"
@@ -599,8 +599,8 @@
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
3600,
640
1376,
416
],
"id": "e357ecd8-c8e7-48e0-9505-7044f883dc14",
"name": "If"
@@ -614,8 +614,8 @@
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
4848,
768
2624,
544
],
"id": "273ae694-f28a-456c-ad24-0dcd4e64e710",
"name": "QA Agent"
@@ -630,14 +630,15 @@
},
"responsesApiEnabled": false,
"options": {
"responseFormat": "json_object"
"responseFormat": "json_object",
"temperature": 0
}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
4400,
992
2176,
768
],
"id": "8198be70-fcae-44f1-8643-a6b97d7a33b0",
"name": "gpt-oss:120b - Validator",
@@ -703,8 +704,8 @@
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
3712,
848
1488,
624
],
"id": "78150d6a-0c28-46e5-ba55-953b063b6872",
"name": "audible_lookup_asin"
@@ -765,8 +766,8 @@
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
3840,
816
1616,
592
],
"id": "a41d0ed6-78a1-401b-9dcb-74f533dedb51",
"name": "audible_search_book"
@@ -808,8 +809,8 @@
"type": "@n8n/n8n-nodes-langchain.toolWorkflow",
"typeVersion": 2.2,
"position": [
4112,
976
1888,
752
],
"id": "943011b5-1af5-45f9-8146-fcf5069e2fa5",
"name": "brave_search"
@@ -819,8 +820,8 @@
"type": "@n8n/n8n-nodes-langchain.toolWikipedia",
"typeVersion": 1,
"position": [
3984,
976
1760,
752
],
"id": "c31ac1dc-4653-4d01-98dc-0b20f83f7c01",
"name": "Wikipedia"
@@ -834,8 +835,8 @@
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2176,
336
-48,
112
],
"id": "83bb9595-37ee-47ee-a3b2-ab034cc75333",
"name": "Sticky Note"
@@ -854,8 +855,8 @@
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
3856,
960
1632,
736
],
"id": "c69843d8-49d9-43c7-8de9-f67918c87e12",
"name": "gpt/oss-120b",
@@ -880,8 +881,8 @@
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
3600,
960
1376,
736
],
"id": "ae56277d-f35d-4ece-b6b5-7981e649f242",
"name": "OpenAI Chat Model",
@@ -894,56 +895,33 @@
},
{
"parameters": {
"jsCode": "// Fuzzy match incoming title against followed series\n// Input: title from Execute Workflow trigger\n// Output: matched series or null\n\nconst inputItem = $input.first();\nconst title = inputItem.json.title || '';\nconst metadata = inputItem.json.metadata || {};\n\n// Get all followed series from Supabase\nconst seriesList = $('Get Active Followed Series').all();\n\n// Helper function to normalize strings for comparison\nfunction normalize(str) {\n return str.toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\n// Helper function to extract patterns from title\nfunction extractPatterns(title) {\n const patterns = {\n volume: null,\n author: null,\n cleanTitle: title\n };\n \n // Extract volume numbers (e.g., \"Vol 01\", \"Volume 1\", \"v01\")\n const volumeMatch = title.match(/\\b(?:vol(?:ume)?\\.?\\s*(\\d+)|v(\\d+))\\b/i);\n if (volumeMatch) {\n patterns.volume = parseInt(volumeMatch[1] || volumeMatch[2]);\n }\n \n // Extract author (common patterns: \"Author Name - Title\", \"[Author Name]\")\n const authorMatch1 = title.match(/^([^-\\[\\]]+?)\\s*-\\s*(.+)/);\n const authorMatch2 = title.match(/\\[([^\\]]+)\\]/);\n \n if (authorMatch1) {\n patterns.author = authorMatch1[1].trim();\n patterns.cleanTitle = authorMatch1[2].trim();\n } else if (authorMatch2) {\n patterns.author = authorMatch2[1].trim();\n }\n \n return patterns;\n}\n\n// Extract patterns from input title\nconst inputPatterns = extractPatterns(title);\nconst normalizedInput = normalize(inputPatterns.cleanTitle);\n\n// Try to match against series\nlet bestMatch = null;\nlet bestScore = 0;\n\nfor (const series of seriesList) {\n const seriesName = series.json.series_name || '';\n const author = series.json.author || '';\n const normalizedSeries = normalize(seriesName);\n const normalizedAuthor = normalize(author);\n \n let score = 0;\n \n // Check if series name is contained in title\n if (normalizedInput.includes(normalizedSeries)) {\n score += 50;\n }\n \n // Check if title is contained in series name\n if (normalizedSeries.includes(normalizedInput)) {\n score += 40;\n }\n \n // Check author match\n if (inputPatterns.author && normalizedAuthor) {\n if (normalize(inputPatterns.author).includes(normalizedAuthor)) {\n score += 30;\n }\n }\n \n // Simple word overlap check\n const inputWords = normalizedInput.split(' ').filter(w => w.length > 2);\n const seriesWords = normalizedSeries.split(' ').filter(w => w.length > 2);\n const commonWords = inputWords.filter(w => seriesWords.includes(w));\n score += commonWords.length * 5;\n \n if (score > bestScore) {\n bestScore = score;\n bestMatch = series.json;\n }\n}\n\n// Return match if score is above threshold\nif (bestMatch && bestScore >= 40) {\n return [{\n json: {\n matched: true,\n series_id: bestMatch.id,\n series_name: bestMatch.series_name,\n author: bestMatch.author,\n category: bestMatch.category,\n smb_path: bestMatch.smb_path,\n match_score: bestScore,\n original_title: title,\n extracted_volume: inputPatterns.volume,\n extracted_author: inputPatterns.author\n }\n }];\n} else {\n return [{\n json: {\n matched: false,\n series_id: null,\n series_name: null,\n author: null,\n category: null,\n smb_path: null,\n match_score: bestScore,\n original_title: title\n }\n }];\n}"
},
"id": "6bc67604-5a6a-45ed-af56-5ab176e65e54",
"name": "Fuzzy Match Title",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
4624,
560
]
},
{
"parameters": {
"operation": "select",
"schema": {
"workflowId": {
"__rl": true,
"value": "WkAdUd9jXTtPagGO",
"mode": "list",
"value": "public"
"cachedResultUrl": "/workflow/WkAdUd9jXTtPagGO",
"cachedResultName": "MAM Series Matcher"
},
"table": {
"__rl": true,
"value": "followed_series",
"mode": "list",
"cachedResultName": "followed_series"
"workflowInputs": {
"mappingMode": "defineBelow",
"value": {},
"matchingColumns": [],
"schema": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
},
"returnAll": true,
"where": {
"values": [
{
"column": "active",
"value": "true"
"options": {
"waitForSubWorkflow": true
}
]
},
"options": {}
},
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"type": "n8n-nodes-base.executeWorkflow",
"typeVersion": 1.3,
"position": [
4352,
528
2128,
368
],
"id": "e10726a0-7a1c-4b9b-ba16-1ee3120c6486",
"name": "Get Active Followed Series",
"credentials": {
"postgres": {
"id": "9grzZwW7Br6SzdV8",
"name": "n8n-media"
}
}
"id": "5e966fb1-22e6-405c-b2cb-14cc7ae53cb1",
"name": "Call 'MAM Series Matcher'"
}
],
"connections": {
@@ -951,9 +929,9 @@
"main": [
[
{
"index": 0,
"node": "Filter Existing",
"type": "main",
"index": 0
"type": "main"
}
]
]
@@ -962,9 +940,9 @@
"main": [
[
{
"index": 0,
"node": "Code",
"type": "main",
"index": 0
"type": "main"
},
{
"node": "Fetch Existing",
@@ -978,9 +956,9 @@
"main": [
[
{
"index": 0,
"node": "List General Folders",
"type": "main",
"index": 0
"type": "main"
}
]
]
@@ -1000,7 +978,7 @@
"main": [
[
{
"node": "Get Active Followed Series",
"node": "Call 'MAM Series Matcher'",
"type": "main",
"index": 0
}
@@ -1125,9 +1103,9 @@
"main": [
[
{
"index": 1,
"node": "Filter Existing",
"type": "main",
"index": 1
"type": "main"
}
]
]
@@ -1247,6 +1225,11 @@
]
]
},
"gpt/oss-120b": {
"ai_languageModel": [
[]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
@@ -1258,7 +1241,7 @@
]
]
},
"Fuzzy Match Title": {
"Call 'MAM Series Matcher'": {
"main": [
[
{
@@ -1268,17 +1251,6 @@
}
]
]
},
"Get Active Followed Series": {
"main": [
[
{
"node": "Fuzzy Match Title",
"type": "main",
"index": 0
}
]
]
}
},
"settings": {
@@ -1287,7 +1259,7 @@
"availableInMCP": false
},
"triggerCount": 1,
"versionId": "28f307b7-5456-4809-a3e6-af121a2058dc",
"versionId": "7ed1b1cb-2859-483e-9091-51b0cb05b2df",
"owner": {
"type": "personal",
"projectId": "FeLO36wNUAcn61Wj",